summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJörg Frings-Fürst <debian@jff-webhosting.net>2023-08-14 19:45:36 +0200
committerJörg Frings-Fürst <debian@jff-webhosting.net>2023-08-14 19:45:36 +0200
commitbfa452a375ea0a0a3f95304a69186936567e5263 (patch)
treeaade062a143c1afcc4ea06ee27905ffc34a9217b
parentdd70ff8bf32c2d7ed365004b1770058265db1978 (diff)
New upstream version 4.1.4
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/AUTHORS42
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/COPYING (renamed from COPYING)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/INSTALL (renamed from INSTALL)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/NEWS171
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/README54
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/TODO33
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/build/borland5.5/BuildBorland.bat (renamed from build/borland5.5/BuildBorland.bat)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/build/borland5.5/CMakeLists.txt809
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/build/borland5.5/CleanBorland.bat (renamed from build/borland5.5/CleanBorland.bat)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/build/borland5.5/README.borland5_529
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/build/debian/CMakeLists.txt809
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/build/debian/README.debian26
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/build/linux32/CMakeLists.txt809
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/build/linux32/README.linux3222
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/build/linux64/CMakeLists.txt809
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/build/linux64/README.linux6422
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/build/mac64/CMakeLists.txt809
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/build/mac64/README.mac6421
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/build/mingw/BuildMinGw.bat8
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/build/mingw/CMakeLists.txt809
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/build/mingw/CleanMingw.bat19
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/build/mingw/README.mingw21
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/build/win32vs/BuildWin.bat7
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/build/win32vs/CMakeLists.txt809
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/build/win32vs/CleanWin.bat (renamed from build/win32vs/CleanWin.bat)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/build/win32vs/README.win32vs23
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/build/win64vs/BuildWin.bat10
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/build/win64vs/CMakeLists.txt809
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/build/win64vs/CleanWin.bat (renamed from build/win64vs/CleanWin.bat)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/build/win64vs/README.win64vs22
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/config/Doxyfile (renamed from docs/doxygen/config/Doxyfile)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/config/doxyout.txt (renamed from docs/doxygen/config/doxyout.txt)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/annotated.html90
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/bc_s.png (renamed from docs/doxygen/html/bc_s.png)bin676 -> 676 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/bdwn.png (renamed from docs/doxygen/html/bdwn.png)bin147 -> 147 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/checkndx_8cpp.html (renamed from docs/doxygen/html/checkndx_8cpp.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classes.html84
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbDate.html2092
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbDate.png (renamed from docs/doxygen/html/classxb_1_1xbDate.png)bin414 -> 414 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbDbf.html9346
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbDbf.png (renamed from docs/doxygen/html/classxb_1_1xbDbf.png)bin519 -> 519 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbFile.html3520
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbFile.png (renamed from docs/doxygen/html/classxb_1_1xbFile.png)bin525 -> 525 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbSsv.html816
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbSsv.png (renamed from docs/doxygen/html/classxb_1_1xbSsv.png)bin1164 -> 1164 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbString.html2945
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbTblMgr.html1202
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbTblMgr.png (renamed from docs/doxygen/html/classxb_1_1xbTblMgr.png)bin639 -> 639 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbXBase.html2047
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbXBase.png (renamed from docs/doxygen/html/classxb_1_1xbXBase.png)bin637 -> 637 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/closed.png (renamed from docs/doxygen/html/closed.png)bin132 -> 132 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dbfxtrct_8cpp.html (renamed from docs/doxygen/html/dbfxtrct_8cpp.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dir_25b94c3afce00ed38231227d8141f932.html105
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dir_313caf1132e152dd9b58bea13a4052ca.html105
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html95
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dir_aebb8dcc11953d78e620bbef0b9e2183.html135
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dir_b0856f6b0d80ccb263b2f415c91f9e17.html133
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dir_d93a1d4020dea85bb71b237545b5e722.html133
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dir_e931c1a3f0014e624d0645a271726ad2.html103
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/doc.png (renamed from docs/doxygen/html/doc.png)bin746 -> 746 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/doxygen.css (renamed from docs/doxygen/html/doxygen.css)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/doxygen.svg (renamed from docs/doxygen/html/doxygen.svg)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dynsections.js (renamed from docs/doxygen/html/dynsections.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/files.html194
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/folderclosed.png (renamed from docs/doxygen/html/folderclosed.png)bin616 -> 616 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/folderopen.png (renamed from docs/doxygen/html/folderopen.png)bin597 -> 597 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions.html (renamed from docs/doxygen/html/functions.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_b.html (renamed from docs/doxygen/html/functions_b.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_c.html105
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_d.html89
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_e.html89
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_f.html (renamed from docs/doxygen/html/functions_f.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func.html (renamed from docs/doxygen/html/functions_func.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_b.html (renamed from docs/doxygen/html/functions_func_b.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_c.html94
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_d.html89
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_e.html88
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_f.html (renamed from docs/doxygen/html/functions_func_f.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_g.html143
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_h.html (renamed from docs/doxygen/html/functions_func_h.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_i.html80
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_j.html (renamed from docs/doxygen/html/functions_func_j.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_l.html (renamed from docs/doxygen/html/functions_func_l.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_m.html (renamed from docs/doxygen/html/functions_func_m.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_n.html (renamed from docs/doxygen/html/functions_func_n.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_o.html (renamed from docs/doxygen/html/functions_func_o.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_p.html (renamed from docs/doxygen/html/functions_func_p.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_r.html (renamed from docs/doxygen/html/functions_func_r.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_s.html99
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_t.html (renamed from docs/doxygen/html/functions_func_t.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_u.html (renamed from docs/doxygen/html/functions_func_u.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_v.html (renamed from docs/doxygen/html/functions_func_v.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_w.html (renamed from docs/doxygen/html/functions_func_w.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_x.html (renamed from docs/doxygen/html/functions_func_x.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_y.html (renamed from docs/doxygen/html/functions_func_y.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_z.html (renamed from docs/doxygen/html/functions_func_z.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_~.html (renamed from docs/doxygen/html/functions_func_~.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_g.html143
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_h.html (renamed from docs/doxygen/html/functions_h.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_i.html89
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_j.html (renamed from docs/doxygen/html/functions_j.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_l.html (renamed from docs/doxygen/html/functions_l.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_m.html (renamed from docs/doxygen/html/functions_m.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_n.html78
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_o.html (renamed from docs/doxygen/html/functions_o.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_p.html (renamed from docs/doxygen/html/functions_p.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_r.html (renamed from docs/doxygen/html/functions_r.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_rela.html (renamed from docs/doxygen/html/functions_rela.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_s.html102
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_t.html (renamed from docs/doxygen/html/functions_t.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_u.html (renamed from docs/doxygen/html/functions_u.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_v.html (renamed from docs/doxygen/html/functions_v.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_vars.html145
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_w.html (renamed from docs/doxygen/html/functions_w.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_x.html (renamed from docs/doxygen/html/functions_x.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_y.html (renamed from docs/doxygen/html/functions_y.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_z.html (renamed from docs/doxygen/html/functions_z.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_~.html (renamed from docs/doxygen/html/functions_~.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/globals.html227
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/globals_defs.html182
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/globals_func.html114
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/globals_vars.html (renamed from docs/doxygen/html/globals_vars.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/hierarchy.html89
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/include_2xbcrix_8cpp.html80
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/index.html (renamed from docs/doxygen/html/index.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/jquery.js (renamed from docs/doxygen/html/jquery.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/menu.js (renamed from docs/doxygen/html/menu.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/menudata.js130
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/namespacemembers.html (renamed from docs/doxygen/html/namespacemembers.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/namespacemembers_func.html (renamed from docs/doxygen/html/namespacemembers_func.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/namespacemembers_type.html (renamed from docs/doxygen/html/namespacemembers_type.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/namespacemembers_vars.html (renamed from docs/doxygen/html/namespacemembers_vars.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/namespaces.html (renamed from docs/doxygen/html/namespaces.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/namespacexb.html (renamed from docs/doxygen/html/namespacexb.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/nav_f.png (renamed from docs/doxygen/html/nav_f.png)bin153 -> 153 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/nav_g.png (renamed from docs/doxygen/html/nav_g.png)bin95 -> 95 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/nav_h.png (renamed from docs/doxygen/html/nav_h.png)bin98 -> 98 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/open.png (renamed from docs/doxygen/html/open.png)bin123 -> 123 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/reindex_8cpp.html (renamed from docs/doxygen/html/reindex_8cpp.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_0.html (renamed from docs/doxygen/html/search/all_0.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_0.js9
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_1.html (renamed from docs/doxygen/html/search/all_1.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_1.js (renamed from docs/doxygen/html/search/all_1.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_10.html (renamed from docs/doxygen/html/search/all_10.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_10.js30
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_11.html (renamed from docs/doxygen/html/search/all_11.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_11.js (renamed from docs/doxygen/html/search/all_11.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_12.html (renamed from docs/doxygen/html/search/all_12.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_12.js (renamed from docs/doxygen/html/search/all_12.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_13.html (renamed from docs/doxygen/html/search/all_13.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_13.js (renamed from docs/doxygen/html/search/all_13.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_14.html (renamed from docs/doxygen/html/search/all_14.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_14.js (renamed from docs/doxygen/html/search/all_14.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_15.html (renamed from docs/doxygen/html/search/all_15.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_15.js236
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_16.html (renamed from docs/doxygen/html/search/all_16.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_16.js (renamed from docs/doxygen/html/search/all_16.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_17.html (renamed from docs/doxygen/html/search/all_17.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_17.js (renamed from docs/doxygen/html/search/all_17.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_18.html (renamed from docs/doxygen/html/search/all_18.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_18.js (renamed from docs/doxygen/html/search/all_18.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_2.html (renamed from docs/doxygen/html/search/all_2.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_2.js33
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_3.html (renamed from docs/doxygen/html/search/all_3.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_3.js20
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_4.html (renamed from docs/doxygen/html/search/all_4.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_4.js16
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_5.html (renamed from docs/doxygen/html/search/all_5.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_5.js (renamed from docs/doxygen/html/search/all_5.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_6.html (renamed from docs/doxygen/html/search/all_6.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_6.js71
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_7.html (renamed from docs/doxygen/html/search/all_7.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_7.js (renamed from docs/doxygen/html/search/all_7.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_8.html (renamed from docs/doxygen/html/search/all_8.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_8.js17
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_9.html (renamed from docs/doxygen/html/search/all_9.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_9.js (renamed from docs/doxygen/html/search/all_9.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_a.html (renamed from docs/doxygen/html/search/all_a.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_a.js (renamed from docs/doxygen/html/search/all_a.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_b.html (renamed from docs/doxygen/html/search/all_b.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_b.js9
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_c.html (renamed from docs/doxygen/html/search/all_c.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_c.js5
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_d.html (renamed from docs/doxygen/html/search/all_d.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_d.js (renamed from docs/doxygen/html/search/all_d.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_e.html (renamed from docs/doxygen/html/search/all_e.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_e.js24
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_f.html (renamed from docs/doxygen/html/search/all_f.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_f.js (renamed from docs/doxygen/html/search/all_f.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/classes_0.html (renamed from docs/doxygen/html/search/classes_0.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/classes_0.js4
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/classes_1.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/classes_1.js (renamed from docs/doxygen/html/search/classes_0.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/close.svg (renamed from docs/doxygen/html/search/close.svg)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_0.html (renamed from docs/doxygen/html/search/defines_0.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_0.js (renamed from docs/doxygen/html/search/defines_0.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_1.html (renamed from docs/doxygen/html/search/defines_1.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_1.js (renamed from docs/doxygen/html/search/defines_1.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_2.html (renamed from docs/doxygen/html/search/defines_2.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_2.js (renamed from docs/doxygen/html/search/defines_2.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_3.html (renamed from docs/doxygen/html/search/defines_3.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_3.js91
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_0.html (renamed from docs/doxygen/html/search/files_0.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_0.js (renamed from docs/doxygen/html/search/files_0.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_1.html (renamed from docs/doxygen/html/search/files_1.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_1.js109
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_2.html (renamed from docs/doxygen/html/search/files_2.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_2.js (renamed from docs/doxygen/html/search/files_2.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_3.html (renamed from docs/doxygen/html/search/files_3.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_3.js (renamed from docs/doxygen/html/search/files_3.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_4.html (renamed from docs/doxygen/html/search/files_4.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_4.js (renamed from docs/doxygen/html/search/files_4.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_0.html (renamed from docs/doxygen/html/search/functions_0.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_0.js9
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_1.html (renamed from docs/doxygen/html/search/functions_1.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_1.js (renamed from docs/doxygen/html/search/functions_1.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_10.html (renamed from docs/doxygen/html/search/functions_10.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_10.js26
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_11.html (renamed from docs/doxygen/html/search/functions_11.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_11.js (renamed from docs/doxygen/html/search/functions_11.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_12.html (renamed from docs/doxygen/html/search/functions_12.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_12.js (renamed from docs/doxygen/html/search/functions_12.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_13.html (renamed from docs/doxygen/html/search/functions_13.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_13.js (renamed from docs/doxygen/html/search/functions_13.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_14.html (renamed from docs/doxygen/html/search/functions_14.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_14.js (renamed from docs/doxygen/html/search/functions_14.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_15.html (renamed from docs/doxygen/html/search/functions_15.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_15.js30
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_16.html (renamed from docs/doxygen/html/search/functions_16.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_16.js (renamed from docs/doxygen/html/search/functions_16.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_17.html (renamed from docs/doxygen/html/search/functions_17.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_17.js (renamed from docs/doxygen/html/search/functions_17.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_18.html (renamed from docs/doxygen/html/search/functions_18.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_18.js (renamed from docs/doxygen/html/search/functions_18.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_2.html (renamed from docs/doxygen/html/search/functions_2.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_2.js22
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_3.html (renamed from docs/doxygen/html/search/functions_3.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_3.js20
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_4.html (renamed from docs/doxygen/html/search/functions_4.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_4.js15
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_5.html (renamed from docs/doxygen/html/search/functions_5.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_5.js (renamed from docs/doxygen/html/search/functions_5.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_6.html (renamed from docs/doxygen/html/search/functions_6.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_6.js71
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_7.html (renamed from docs/doxygen/html/search/functions_7.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_7.js (renamed from docs/doxygen/html/search/functions_7.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_8.html (renamed from docs/doxygen/html/search/functions_8.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_8.js8
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_9.html (renamed from docs/doxygen/html/search/functions_9.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_9.js (renamed from docs/doxygen/html/search/functions_9.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_a.html (renamed from docs/doxygen/html/search/functions_a.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_a.js (renamed from docs/doxygen/html/search/functions_a.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_b.html (renamed from docs/doxygen/html/search/functions_b.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_b.js7
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_c.html (renamed from docs/doxygen/html/search/functions_c.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_c.js (renamed from docs/doxygen/html/search/functions_c.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_d.html (renamed from docs/doxygen/html/search/functions_d.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_d.js (renamed from docs/doxygen/html/search/functions_d.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_e.html (renamed from docs/doxygen/html/search/functions_e.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_e.js19
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_f.html (renamed from docs/doxygen/html/search/functions_f.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_f.js (renamed from docs/doxygen/html/search/functions_f.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/mag_sel.svg (renamed from docs/doxygen/html/search/mag_sel.svg)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/namespaces_0.html (renamed from docs/doxygen/html/search/namespaces_0.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/namespaces_0.js (renamed from docs/doxygen/html/search/namespaces_0.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/nomatches.html (renamed from docs/doxygen/html/search/nomatches.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/related_0.html (renamed from docs/doxygen/html/search/related_0.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/related_0.js (renamed from docs/doxygen/html/search/related_0.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/related_1.html (renamed from docs/doxygen/html/search/related_1.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/related_1.js (renamed from docs/doxygen/html/search/related_1.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/search.css (renamed from docs/doxygen/html/search/search.css)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/search.js (renamed from docs/doxygen/html/search/search.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/search_l.png (renamed from docs/doxygen/html/search/search_l.png)bin567 -> 567 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/search_m.png (renamed from docs/doxygen/html/search/search_m.png)bin158 -> 158 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/search_r.png (renamed from docs/doxygen/html/search/search_r.png)bin553 -> 553 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/searchdata.js39
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/typedefs_0.html (renamed from docs/doxygen/html/search/typedefs_0.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/typedefs_0.js (renamed from docs/doxygen/html/search/typedefs_0.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_0.html (renamed from docs/doxygen/html/search/variables_0.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_0.js14
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_1.html (renamed from docs/doxygen/html/search/variables_1.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_1.js (renamed from docs/doxygen/html/search/variables_1.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_2.html (renamed from docs/doxygen/html/search/variables_2.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_2.js12
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_3.html (renamed from docs/doxygen/html/search/variables_3.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_3.js (renamed from docs/doxygen/html/search/variables_3.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_4.html (renamed from docs/doxygen/html/search/variables_4.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_4.js4
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_5.html (renamed from docs/doxygen/html/search/variables_5.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_5.js (renamed from docs/doxygen/html/search/variables_4.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_6.html (renamed from docs/doxygen/html/search/variables_6.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_6.js (renamed from docs/doxygen/html/search/variables_5.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_7.html (renamed from docs/doxygen/html/search/variables_7.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_7.js (renamed from docs/doxygen/html/search/variables_6.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_8.html (renamed from docs/doxygen/html/search/variables_8.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_8.js (renamed from docs/doxygen/html/search/variables_7.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_9.html (renamed from docs/doxygen/html/search/variables_9.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_9.js (renamed from docs/doxygen/html/search/variables_8.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_a.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_a.js (renamed from docs/doxygen/html/search/variables_9.js)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/splitbar.png (renamed from docs/doxygen/html/splitbar.png)bin314 -> 314 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/sql_2xbcrix_8cpp.html80
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/structsFldMap.html149
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/structxb_1_1xbSchema.html179
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/structxb_1_1xbTblList.html171
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/sync_off.png (renamed from docs/doxygen/html/sync_off.png)bin853 -> 853 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/sync_on.png (renamed from docs/doxygen/html/sync_on.png)bin845 -> 845 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/tab_a.png (renamed from docs/doxygen/html/tab_a.png)bin142 -> 142 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/tab_b.png (renamed from docs/doxygen/html/tab_b.png)bin169 -> 169 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/tab_h.png (renamed from docs/doxygen/html/tab_h.png)bin177 -> 177 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/tab_s.png (renamed from docs/doxygen/html/tab_s.png)bin184 -> 184 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/tabs.css (renamed from docs/doxygen/html/tabs.css)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/tstfuncs_8cpp.html547
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__cfg__check_8cpp.html108
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__copydbf_8cpp.html155
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__dbfutil_8cpp.html155
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__deletall_8cpp.html155
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__dumpdbt_8cpp.html155
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__dumphdr_8cpp.html (renamed from docs/doxygen/html/xb__dumphdr_8cpp.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__dumpix_8cpp.html (renamed from docs/doxygen/html/xb__dumpix_8cpp.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__dumprecs_8cpp.html155
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__date_8cpp.html106
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__expression_8cpp.html168
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__log_8cpp.html117
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__sql_8cpp.html117
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__ssv_8cpp.html117
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__string_8cpp.html106
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__v3__create__dbf_8cpp.html106
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__v3__upd__dbf_8cpp.html106
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__v4__create__dbf_8cpp.html106
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__v4__upd__dbf_8cpp.html106
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__execsql_8cpp.html191
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__import_8cpp.html161
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__pack_8cpp.html155
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__tblinfo_8cpp.html155
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__bcd_8cpp.html118
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__blockread_8cpp.html147
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__blockread__save_8cpp.html (renamed from docs/doxygen/html/xb__test__blockread__save_8cpp.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__date_8cpp.html118
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__dbf__v3__memos_8cpp.html118
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__dbf__v3__nomemos_8cpp.html118
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__dbf__v4__memos_8cpp.html118
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__dbf__v4__nomemos_8cpp.html118
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__expnode_8cpp.html118
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__expression_8cpp.html502
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__file_8cpp.html118
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__filter_8cpp.html118
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__funcs_8cpp.html118
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__linklist_8cpp.html118
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__lock2_8cpp.html118
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__lock_8cpp.html118
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__log_8cpp.html118
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__mdx_8cpp.html118
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__ndx2_8cpp.html (renamed from docs/doxygen/html/xb__test__ndx2_8cpp.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__ndx_8cpp.html118
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__sql_8cpp.html118
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__string_8cpp.html139
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__tblmgr_8cpp.html118
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__tdx_8cpp.html118
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__uda_8cpp.html118
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__xbase_8cpp.html118
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__undelall_8cpp.html155
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__zap_8cpp.html (renamed from docs/doxygen/html/xb__zap_8cpp.html)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbalttbl_8cpp.html80
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbase_8h.html110
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbase_8h_source.html202
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbbcd_8cpp.html80
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbbcd_8h.html81
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbbcd_8h_source.html172
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbblkread_8h.html89
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbblkread_8h_source.html145
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbblockread_8cpp.html80
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbcrix_8cpp.html80
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbcrtbl_8cpp.html80
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbcrtbl_8save2_8cpp.html80
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbcrtbl_8save_8cpp.html80
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdate_8cpp.html89
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdate_8h.html165
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdate_8h_source.html184
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdbf3_8cpp.html80
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdbf4_8cpp.html80
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdbf_8cpp.html88
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdbf_8h.html456
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdbf_8h_source.html614
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdelete_8cpp.html80
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdrpix_8cpp.html80
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdrptbl_8cpp.html80
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbexp_8cpp.html80
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbexp_8h.html104
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbexp_8h_source.html243
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbexpnode_8cpp.html80
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbexpnode_8h.html81
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbexpnode_8h_source.html190
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbfields_8cpp.html88
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbfile_8cpp.html88
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbfile_8h.html181
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbfile_8h_source.html266
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbfilter_8cpp.html80
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbfilter_8h.html81
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbfilter_8h_source.html159
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbfuncs_8cpp.html80
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbindex_8h.html81
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbindex_8h_source.html600
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbinsert_8cpp.html80
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbixbase_8cpp.html80
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbixmdx_8cpp.html80
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbixndx_8cpp.html80
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbixtdx_8cpp.html80
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xblnklst_8h.html81
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xblnklst_8h_source.html341
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xblnklstord_8h.html81
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xblnklstord_8h_source.html455
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xblnknod_8h.html81
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xblnknod_8h_source.html174
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xblog_8cpp.html80
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xblog_8h.html89
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xblog_8h_source.html136
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbmemo3_8cpp.html80
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbmemo4_8cpp.html80
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbmemo_8cpp.html80
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbmemo_8h.html81
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbmemo_8h_source.html263
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbretcod_8h.html1022
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbretcod_8h_source.html178
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbselect_8cpp.html80
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbset_8cpp.html80
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbsql_8cpp.html80
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbsql_8h.html81
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbsql_8h_source.html243
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbssv_8cpp.html94
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbssv_8h.html102
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbssv_8h_source.html267
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbstmt_8cpp.html80
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbstring_8cpp.html95
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbstring_8h.html98
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbstring_8h_source.html252
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbtag_8cpp.html80
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbtag_8h.html89
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbtag_8h_source.html144
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbtblmgr_8cpp.html88
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbtblmgr_8h.html103
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbtblmgr_8h_source.html153
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbtypes_8h.html154
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbtypes_8h_source.html139
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbuda_8cpp.html80
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbuda_8h.html81
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbuda_8h_source.html132
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbxbase_8cpp.html88
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbxbase_8h.html102
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbxbase_8h_source.html323
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/Makefile (renamed from docs/doxygen/latex/Makefile)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/annotated.tex13
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/checkndx_8cpp.tex (renamed from docs/doxygen/latex/checkndx_8cpp.tex)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbDate.eps (renamed from docs/doxygen/latex/classxb_1_1xbDate.eps)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbDate.pdfbin0 -> 4739 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbDate.tex1149
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbDbf.eps (renamed from docs/doxygen/latex/classxb_1_1xbDbf.eps)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbDbf.pdfbin0 -> 4914 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbDbf.tex4523
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbFile.eps (renamed from docs/doxygen/latex/classxb_1_1xbFile.eps)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbFile.pdfbin0 -> 4915 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbFile.tex1953
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbSsv.eps (renamed from docs/doxygen/latex/classxb_1_1xbSsv.eps)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbSsv.pdfbin0 -> 6100 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbSsv.tex427
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbString.tex1776
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbTblMgr.eps (renamed from docs/doxygen/latex/classxb_1_1xbTblMgr.eps)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbTblMgr.pdfbin0 -> 5490 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbTblMgr.tex491
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbXBase.eps (renamed from docs/doxygen/latex/classxb_1_1xbXBase.eps)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbXBase.pdfbin0 -> 5492 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbXBase.tex817
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/dbfxtrct_8cpp.tex (renamed from docs/doxygen/latex/dbfxtrct_8cpp.tex)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/dir_25b94c3afce00ed38231227d8141f932.tex27
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/dir_313caf1132e152dd9b58bea13a4052ca.tex27
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/dir_68267d1309a1af8e8297ef4c3efbcdba.tex17
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/dir_aebb8dcc11953d78e620bbef0b9e2183.tex57
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/dir_b0856f6b0d80ccb263b2f415c91f9e17.tex55
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/dir_d93a1d4020dea85bb71b237545b5e722.tex55
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/dir_e931c1a3f0014e624d0645a271726ad2.tex25
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/doxygen.sty (renamed from docs/doxygen/latex/doxygen.sty)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/files.tex111
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/hierarchy.tex19
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/include_2xbcrix_8cpp.tex3
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/longtable_doxygen.sty (renamed from docs/doxygen/latex/longtable_doxygen.sty)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/namespaces.tex (renamed from docs/doxygen/latex/namespaces.tex)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/namespacexb.tex (renamed from docs/doxygen/latex/namespacexb.tex)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/refman.tex341
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/reindex_8cpp.tex (renamed from docs/doxygen/latex/reindex_8cpp.tex)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/sql_2xbcrix_8cpp.tex3
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/structsFldMap.tex45
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/structxb_1_1xbSchema.tex77
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/structxb_1_1xbTblList.tex57
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/tabu_doxygen.sty (renamed from docs/doxygen/latex/tabu_doxygen.sty)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/tstfuncs_8cpp.tex118
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__cfg__check_8cpp.tex19
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__copydbf_8cpp.tex33
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__dbfutil_8cpp.tex33
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__deletall_8cpp.tex33
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__dumpdbt_8cpp.tex33
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__dumphdr_8cpp.tex (renamed from docs/doxygen/latex/xb__dumphdr_8cpp.tex)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__dumpix_8cpp.tex (renamed from docs/doxygen/latex/xb__dumpix_8cpp.tex)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__dumprecs_8cpp.tex33
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__date_8cpp.tex17
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__expression_8cpp.tex51
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__log_8cpp.tex17
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__sql_8cpp.tex17
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__ssv_8cpp.tex17
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__string_8cpp.tex17
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__v3__create__dbf_8cpp.tex17
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__v3__upd__dbf_8cpp.tex17
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__v4__create__dbf_8cpp.tex17
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__v4__upd__dbf_8cpp.tex17
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__execsql_8cpp.tex41
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__import_8cpp.tex38
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__pack_8cpp.tex33
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__tblinfo_8cpp.tex33
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__bcd_8cpp.tex18
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__blockread_8cpp.tex42
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__blockread__save_8cpp.tex (renamed from docs/doxygen/latex/xb__test__blockread__save_8cpp.tex)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__date_8cpp.tex18
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__dbf__v3__memos_8cpp.tex18
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__dbf__v3__nomemos_8cpp.tex18
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__dbf__v4__memos_8cpp.tex18
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__dbf__v4__nomemos_8cpp.tex18
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__expnode_8cpp.tex18
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__expression_8cpp.tex74
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__file_8cpp.tex18
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__filter_8cpp.tex18
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__funcs_8cpp.tex18
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__linklist_8cpp.tex18
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__lock2_8cpp.tex18
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__lock_8cpp.tex18
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__log_8cpp.tex18
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__mdx_8cpp.tex18
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__ndx2_8cpp.tex (renamed from docs/doxygen/latex/xb__test__ndx2_8cpp.tex)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__ndx_8cpp.tex18
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__sql_8cpp.tex18
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__string_8cpp.tex32
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__tblmgr_8cpp.tex18
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__tdx_8cpp.tex18
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__uda_8cpp.tex18
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__xbase_8cpp.tex18
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__undelall_8cpp.tex33
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__zap_8cpp.tex (renamed from docs/doxygen/latex/xb__zap_8cpp.tex)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbalttbl_8cpp.tex3
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbase_8h.tex31
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbase_8h_source.tex106
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbbcd_8cpp.tex3
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbbcd_8h.tex2
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbbcd_8h_source.tex97
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbblkread_8h.tex7
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbblkread_8h_source.tex69
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbblockread_8cpp.tex3
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbcrix_8cpp.tex3
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbcrtbl_8cpp.tex3
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbcrtbl_8save2_8cpp.tex3
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbcrtbl_8save_8cpp.tex3
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdate_8cpp.tex9
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdate_8h.tex50
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdate_8h_source.tex106
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdbf3_8cpp.tex3
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdbf4_8cpp.tex3
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdbf_8cpp.tex8
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdbf_8h.tex196
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdbf_8h_source.tex521
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdelete_8cpp.tex3
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdrpix_8cpp.tex3
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdrptbl_8cpp.tex3
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbexp_8cpp.tex3
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbexp_8h.tex16
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbexp_8h_source.tex165
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbexpnode_8cpp.tex3
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbexpnode_8h.tex2
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbexpnode_8h_source.tex113
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbfields_8cpp.tex8
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbfile_8cpp.tex8
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbfile_8h.tex58
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbfile_8h_source.tex184
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbfilter_8cpp.tex3
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbfilter_8h.tex2
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbfilter_8h_source.tex84
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbfuncs_8cpp.tex3
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbindex_8h.tex2
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbindex_8h_source.tex521
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbinsert_8cpp.tex3
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbixbase_8cpp.tex3
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbixmdx_8cpp.tex3
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbixndx_8cpp.tex3
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbixtdx_8cpp.tex3
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xblnklst_8h.tex2
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xblnklst_8h_source.tex263
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xblnklstord_8h.tex2
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xblnklstord_8h_source.tex373
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xblnknod_8h.tex2
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xblnknod_8h_source.tex100
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xblog_8cpp.tex3
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xblog_8h.tex7
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xblog_8h_source.tex60
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbmemo3_8cpp.tex3
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbmemo4_8cpp.tex3
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbmemo_8cpp.tex3
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbmemo_8h.tex2
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbmemo_8h_source.tex187
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbretcod_8h.tex477
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbretcod_8h_source.tex104
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbselect_8cpp.tex3
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbset_8cpp.tex3
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbsql_8cpp.tex3
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbsql_8h.tex2
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbsql_8h_source.tex167
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbssv_8cpp.tex13
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbssv_8h.tex17
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbssv_8h_source.tex187
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbstmt_8cpp.tex3
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbstring_8cpp.tex13
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbstring_8h.tex14
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbstring_8h_source.tex174
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbtag_8cpp.tex3
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbtag_8h.tex7
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbtag_8h_source.tex69
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbtblmgr_8cpp.tex8
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbtblmgr_8h.tex19
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbtblmgr_8h_source.tex69
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbtypes_8h.tex48
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbtypes_8h_source.tex61
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbuda_8cpp.tex3
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbuda_8h.tex2
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbuda_8h_source.tex58
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbxbase_8cpp.tex8
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbxbase_8h.tex17
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbxbase_8h_source.tex237
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/howto/AddAnIndex.txt (renamed from docs/howto/AddAnIndex.txt)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/howto/AddNewMemoFileType.txt (renamed from docs/howto/AddNewMemoFileType.txt)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/howto/GettingStarted.txt86
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/howto/Hacking.txt (renamed from docs/howto/Hacking.txt)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/howto/Locking.txt (renamed from docs/howto/Locking.txt)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/howto/mac_cmake_compile.txt (renamed from docs/howto/mac_cmake_compile.txt)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/html/Xbase64ClassDiagram.jpg (renamed from docs/html/Xbase64ClassDiagram.jpg)bin93778 -> 93778 bytes
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/html/Xbase64ClassDiagramV2.jpegbin0 -> 291478 bytes
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/html/Xbase64ClassDiagramV2.jpeg.jpegbin0 -> 299517 bytes
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/html/gpl-3.0.txt (renamed from docs/html/gpl-3.0.txt)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/html/index.html41
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/html/ntx.index.html180
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/html/xbab.html (renamed from docs/html/xbab.html)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/html/xbac.html (renamed from docs/html/xbac.html)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/html/xbad.html (renamed from docs/html/xbad.html)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/html/xbae.html97
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/html/xbaf.html44
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/html/xbase.jpg (renamed from docs/html/xbase.jpg)bin6421 -> 6421 bytes
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/html/xbc1.html212
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/html/xbc10.html938
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/html/xbc11.html146
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/html/xbc12.html279
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/html/xbc2.html368
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/html/xbc3.html103
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/html/xbc4.html208
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/html/xbc5.html437
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/html/xbc6.html113
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/html/xbc7.html53
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/html/xbc8.html224
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/html/xbc9.html255
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/license/gpl-3.0.txt (renamed from docs/license/gpl-3.0.txt)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/license/preamble.txt (renamed from docs/license/preamble.txt)0
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/man/xb_cfg_chk.1.gzbin0 -> 552 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/man/xb_copydbf.1.gzbin0 -> 711 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/man/xb_dbfutil.1.gzbin0 -> 639 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/man/xb_deletall.1.gzbin0 -> 662 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/man/xb_dumpdbt.1.gzbin0 -> 678 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/man/xb_dumprecs.1.gzbin0 -> 696 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/man/xb_import.1.gzbin0 -> 976 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/man/xb_pack.1.gzbin0 -> 703 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/man/xb_tblinfo.1.gzbin0 -> 680 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/man/xb_undelall.1.gzbin0 -> 696 bytes
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/misc/AutoUpdate.txt (renamed from docs/misc/AutoUpdate.txt)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/misc/DirectoryStructure.txt (renamed from docs/misc/DirectoryStructure.txt)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/misc/ExpressionNotes.ods (renamed from docs/misc/ExpressionNotes.ods)bin20662 -> 20662 bytes
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/misc/Expressions.txt (renamed from docs/misc/Expressions.txt)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/misc/FileTypeByte.txt (renamed from docs/misc/FileTypeByte.txt)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/misc/IndexNotes.ods (renamed from docs/misc/IndexNotes.ods)bin23172 -> 23172 bytes
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/misc/RealDelete.txt (renamed from docs/misc/RealDelete.txt)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/misc/Release.txt (renamed from docs/misc/Release.txt)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/misc/Versions.txt (renamed from docs/misc/Versions.txt)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/misc/xbTmpFiles.txt (renamed from docs/misc/xbTmpFiles.txt)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/sql/droptbl.sql (renamed from sql/droptbl.sql)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/sql/jointest.sql (renamed from sql/jointest.sql)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/sql/oneNdxTag.sql (renamed from sql/oneNdxTag.sql)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/sql/testc.sql (renamed from sql/testc.sql)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/sql/testd.sql (renamed from sql/testd.sql)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/sql/testdd.sql (renamed from sql/testdd.sql)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/sql/testflg.sql (renamed from sql/testflg.sql)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/sql/testmdx.sql (renamed from sql/testmdx.sql)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/sql/testmdx2.sql (renamed from sql/testmdx2.sql)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/sql/twotags.sql (renamed from sql/twotags.sql)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/core/xbbcd.cpp (renamed from src/core/xbbcd.cpp)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/core/xbblockread.cpp279
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/core/xbdate.cpp867
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/core/xbdbf.cpp4533
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/core/xbdbf3.cpp768
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/core/xbdbf4.cpp885
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/core/xbexp.cpp2721
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/core/xbexpnode.cpp562
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/core/xbfields.cpp1189
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/core/xbfile.cpp2217
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/core/xbfilter.cpp544
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/core/xbfuncs.cpp851
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/core/xbixbase.cpp789
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/core/xbixmdx.cpp4844
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/core/xbixndx.cpp2834
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/core/xbixtdx.cpp661
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/core/xblog.cpp227
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/core/xbmemo.cpp219
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/core/xbmemo3.cpp585
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/core/xbmemo4.cpp1336
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/core/xbssv.cpp658
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/core/xbstring.cpp2000
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/core/xbtag.cpp121
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/core/xbtblmgr.cpp312
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/core/xbuda.cpp78
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/core/xbxbase.cpp803
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_date.cpp212
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_expression.cpp231
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_log.cpp77
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_sql.cpp (renamed from src/examples/xb_ex_sql.cpp)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_ssv.cpp136
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_string.cpp381
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_v3_create_dbf.cpp110
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_v3_upd_dbf.cpp326
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_v4_create_dbf.cpp100
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_v4_upd_dbf.cpp294
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xbase.h (renamed from src/include/xbase.h)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xbbcd.h (renamed from src/include/xbbcd.h)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xbblkread.h (renamed from src/include/xbblkread.h)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xbconfig.h.in128
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xbcrix.cpp292
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xbdate.h125
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xbdbf.h568
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xbexp.h216
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xbexpnode.h120
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xbfile.h198
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xbfilter.h (renamed from src/include/xbfilter.h)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xbindex.h613
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xbindex.h.nope (renamed from src/include/xbindex.h)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xblnklst.h (renamed from src/include/xblnklst.h)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xblnklstord.h (renamed from src/include/xblnklstord.h)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xblnknod.h (renamed from src/include/xblnknod.h)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xblog.h67
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xbmemo.h (renamed from src/include/xbmemo.h)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xbretcod.h98
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xbsql.h (renamed from src/include/xbsql.h)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xbssv.h194
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xbstring.h188
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xbtag.h (renamed from src/include/xbtag.h)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xbtblmgr.h (renamed from src/include/xbtblmgr.h)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xbtypes.h (renamed from src/include/xbtypes.h)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xbuda.h (renamed from src/include/xbuda.h)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xbxbase.h235
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/sql/xbalttbl.cpp (renamed from src/sql/xbalttbl.cpp)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/sql/xbcrix.cpp301
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/sql/xbcrtbl.cpp274
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/sql/xbdelete.cpp148
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/sql/xbdrpix.cpp (renamed from src/sql/xbdrpix.cpp)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/sql/xbdrptbl.cpp129
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/sql/xbinsert.cpp (renamed from src/sql/xbinsert.cpp)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/sql/xbselect.cpp (renamed from src/sql/xbselect.cpp)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/sql/xbset.cpp (renamed from src/sql/xbset.cpp)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/sql/xbsql.cpp (renamed from src/sql/xbsql.cpp)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/sql/xbstmt.cpp (renamed from src/sql/xbstmt.cpp)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/tests/tstfuncs.cpp583
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_bcd.cpp (renamed from src/tests/xb_test_bcd.cpp)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_blockread.cpp (renamed from src/tests/xb_test_blockread.cpp)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_date.cpp214
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_dbf_v3_memos.cpp259
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_dbf_v3_nomemos.cpp (renamed from src/tests/xb_test_dbf_v3_nomemos.cpp)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_dbf_v4_memos.cpp (renamed from src/tests/xb_test_dbf_v4_memos.cpp)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_dbf_v4_nomemos.cpp373
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_expnode.cpp (renamed from src/tests/xb_test_expnode.cpp)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_expression.cpp816
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_file.cpp209
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_filter.cpp (renamed from src/tests/xb_test_filter.cpp)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_funcs.cpp296
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_linklist.cpp (renamed from src/tests/xb_test_linklist.cpp)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_lock.cpp1066
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_lock2.cpp233
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_log.cpp111
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_mdx.cpp305
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_ndx.cpp450
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_sql.cpp270
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_string.cpp459
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_tblmgr.cpp125
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_tdx.cpp162
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_uda.cpp (renamed from src/tests/xb_test_uda.cpp)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_xbase.cpp217
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/utils/xb_cfg_check.cpp411
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/utils/xb_copydbf.cpp (renamed from src/utils/xb_copydbf.cpp)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/utils/xb_dbfutil.cpp3836
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/utils/xb_deletall.cpp (renamed from src/utils/xb_deletall.cpp)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/utils/xb_dumpdbt.cpp (renamed from src/utils/xb_dumpdbt.cpp)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/utils/xb_dumprecs.cpp (renamed from src/utils/xb_dumprecs.cpp)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/utils/xb_execsql.cpp130
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/utils/xb_import.cpp242
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/utils/xb_pack.cpp (renamed from src/utils/xb_pack.cpp)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/utils/xb_tblinfo.cpp (renamed from src/utils/xb_tblinfo.cpp)0
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/utils/xb_undelall.cpp (renamed from src/utils/xb_undelall.cpp)0
-rwxr-xr-xAUTHORS29
-rwxr-xr-xNEWS115
-rwxr-xr-xREADME45
-rwxr-xr-xTODO34
-rwxr-xr-xbuild/borland5.5/CMakeLists.txt761
-rwxr-xr-xbuild/debian/CMakeLists.txt761
-rw-r--r--build/debian/README.debian23
-rwxr-xr-xbuild/linux32/CMakeLists.txt761
-rwxr-xr-xbuild/linux64/CMakeLists.txt761
-rwxr-xr-xbuild/mac64/CMakeLists.txt761
-rwxr-xr-xbuild/win32vs/BuildWin.bat8
-rwxr-xr-xbuild/win32vs/CMakeLists.txt761
-rwxr-xr-xbuild/win64vs/BuildWin.bat11
-rwxr-xr-xbuild/win64vs/CMakeLists.txt761
-rw-r--r--docs/doxygen/html/annotated.html89
-rw-r--r--docs/doxygen/html/classes.html81
-rw-r--r--docs/doxygen/html/classxb_1_1xbDate.html1914
-rw-r--r--docs/doxygen/html/classxb_1_1xbDbf.html9122
-rw-r--r--docs/doxygen/html/classxb_1_1xbFile.html3432
-rw-r--r--docs/doxygen/html/classxb_1_1xbSsv.html722
-rw-r--r--docs/doxygen/html/classxb_1_1xbString.html2888
-rw-r--r--docs/doxygen/html/classxb_1_1xbTblMgr.html1076
-rw-r--r--docs/doxygen/html/classxb_1_1xbXBase.html1842
-rw-r--r--docs/doxygen/html/dir_25b94c3afce00ed38231227d8141f932.html107
-rw-r--r--docs/doxygen/html/dir_313caf1132e152dd9b58bea13a4052ca.html103
-rw-r--r--docs/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html95
-rw-r--r--docs/doxygen/html/dir_aebb8dcc11953d78e620bbef0b9e2183.html133
-rw-r--r--docs/doxygen/html/dir_b0856f6b0d80ccb263b2f415c91f9e17.html131
-rw-r--r--docs/doxygen/html/dir_d93a1d4020dea85bb71b237545b5e722.html131
-rw-r--r--docs/doxygen/html/dir_e931c1a3f0014e624d0645a271726ad2.html101
-rw-r--r--docs/doxygen/html/files.html190
-rw-r--r--docs/doxygen/html/functions_c.html103
-rw-r--r--docs/doxygen/html/functions_d.html89
-rw-r--r--docs/doxygen/html/functions_e.html89
-rw-r--r--docs/doxygen/html/functions_func_c.html93
-rw-r--r--docs/doxygen/html/functions_func_d.html89
-rw-r--r--docs/doxygen/html/functions_func_e.html88
-rw-r--r--docs/doxygen/html/functions_func_g.html141
-rw-r--r--docs/doxygen/html/functions_func_i.html80
-rw-r--r--docs/doxygen/html/functions_func_s.html98
-rw-r--r--docs/doxygen/html/functions_g.html141
-rw-r--r--docs/doxygen/html/functions_i.html87
-rw-r--r--docs/doxygen/html/functions_n.html77
-rw-r--r--docs/doxygen/html/functions_s.html101
-rw-r--r--docs/doxygen/html/functions_vars.html137
-rw-r--r--docs/doxygen/html/globals.html225
-rw-r--r--docs/doxygen/html/globals_defs.html180
-rw-r--r--docs/doxygen/html/globals_func.html114
-rw-r--r--docs/doxygen/html/hierarchy.html88
-rw-r--r--docs/doxygen/html/menudata.js129
-rw-r--r--docs/doxygen/html/search/all_0.js9
-rw-r--r--docs/doxygen/html/search/all_10.js28
-rw-r--r--docs/doxygen/html/search/all_15.js231
-rw-r--r--docs/doxygen/html/search/all_2.js31
-rw-r--r--docs/doxygen/html/search/all_3.js20
-rw-r--r--docs/doxygen/html/search/all_4.js16
-rw-r--r--docs/doxygen/html/search/all_6.js69
-rw-r--r--docs/doxygen/html/search/all_8.js15
-rw-r--r--docs/doxygen/html/search/all_b.js9
-rw-r--r--docs/doxygen/html/search/all_c.js4
-rw-r--r--docs/doxygen/html/search/all_e.js24
-rw-r--r--docs/doxygen/html/search/defines_3.js89
-rw-r--r--docs/doxygen/html/search/files_1.js106
-rw-r--r--docs/doxygen/html/search/functions_0.js9
-rw-r--r--docs/doxygen/html/search/functions_10.js25
-rw-r--r--docs/doxygen/html/search/functions_15.js30
-rw-r--r--docs/doxygen/html/search/functions_2.js21
-rw-r--r--docs/doxygen/html/search/functions_3.js20
-rw-r--r--docs/doxygen/html/search/functions_4.js15
-rw-r--r--docs/doxygen/html/search/functions_6.js69
-rw-r--r--docs/doxygen/html/search/functions_8.js8
-rw-r--r--docs/doxygen/html/search/functions_b.js7
-rw-r--r--docs/doxygen/html/search/functions_e.js19
-rw-r--r--docs/doxygen/html/search/searchdata.js39
-rw-r--r--docs/doxygen/html/search/variables_0.js13
-rw-r--r--docs/doxygen/html/search/variables_2.js10
-rw-r--r--docs/doxygen/html/structxb_1_1xbSchema.html179
-rw-r--r--docs/doxygen/html/structxb_1_1xbTblList.html171
-rw-r--r--docs/doxygen/html/tstfuncs_8cpp.html547
-rw-r--r--docs/doxygen/html/xb__cfg__check_8cpp.html108
-rw-r--r--docs/doxygen/html/xb__copydbf_8cpp.html155
-rw-r--r--docs/doxygen/html/xb__dbfutil_8cpp.html155
-rw-r--r--docs/doxygen/html/xb__deletall_8cpp.html155
-rw-r--r--docs/doxygen/html/xb__dumpdbt_8cpp.html155
-rw-r--r--docs/doxygen/html/xb__dumprecs_8cpp.html155
-rw-r--r--docs/doxygen/html/xb__ex__date_8cpp.html106
-rw-r--r--docs/doxygen/html/xb__ex__expression_8cpp.html168
-rw-r--r--docs/doxygen/html/xb__ex__sql_8cpp.html117
-rw-r--r--docs/doxygen/html/xb__ex__ssv_8cpp.html117
-rw-r--r--docs/doxygen/html/xb__ex__string_8cpp.html106
-rw-r--r--docs/doxygen/html/xb__ex__v3__create__dbf_8cpp.html106
-rw-r--r--docs/doxygen/html/xb__ex__v3__upd__dbf_8cpp.html106
-rw-r--r--docs/doxygen/html/xb__ex__v4__create__dbf_8cpp.html106
-rw-r--r--docs/doxygen/html/xb__ex__v4__upd__dbf_8cpp.html106
-rw-r--r--docs/doxygen/html/xb__execsql_8cpp.html147
-rw-r--r--docs/doxygen/html/xb__pack_8cpp.html155
-rw-r--r--docs/doxygen/html/xb__tblinfo_8cpp.html155
-rw-r--r--docs/doxygen/html/xb__test__bcd_8cpp.html118
-rw-r--r--docs/doxygen/html/xb__test__blockread_8cpp.html147
-rw-r--r--docs/doxygen/html/xb__test__date_8cpp.html118
-rw-r--r--docs/doxygen/html/xb__test__dbf__v3__memos_8cpp.html118
-rw-r--r--docs/doxygen/html/xb__test__dbf__v3__nomemos_8cpp.html118
-rw-r--r--docs/doxygen/html/xb__test__dbf__v4__memos_8cpp.html118
-rw-r--r--docs/doxygen/html/xb__test__dbf__v4__nomemos_8cpp.html118
-rw-r--r--docs/doxygen/html/xb__test__expnode_8cpp.html118
-rw-r--r--docs/doxygen/html/xb__test__expression_8cpp.html502
-rw-r--r--docs/doxygen/html/xb__test__file_8cpp.html118
-rw-r--r--docs/doxygen/html/xb__test__filter_8cpp.html118
-rw-r--r--docs/doxygen/html/xb__test__funcs_8cpp.html118
-rw-r--r--docs/doxygen/html/xb__test__linklist_8cpp.html118
-rw-r--r--docs/doxygen/html/xb__test__lock2_8cpp.html118
-rw-r--r--docs/doxygen/html/xb__test__lock_8cpp.html118
-rw-r--r--docs/doxygen/html/xb__test__log_8cpp.html118
-rw-r--r--docs/doxygen/html/xb__test__mdx_8cpp.html118
-rw-r--r--docs/doxygen/html/xb__test__ndx_8cpp.html118
-rw-r--r--docs/doxygen/html/xb__test__sql_8cpp.html118
-rw-r--r--docs/doxygen/html/xb__test__string_8cpp.html139
-rw-r--r--docs/doxygen/html/xb__test__tblmgr_8cpp.html118
-rw-r--r--docs/doxygen/html/xb__test__uda_8cpp.html118
-rw-r--r--docs/doxygen/html/xb__test__xbase_8cpp.html118
-rw-r--r--docs/doxygen/html/xb__undelall_8cpp.html155
-rw-r--r--docs/doxygen/html/xbalttbl_8cpp.html80
-rw-r--r--docs/doxygen/html/xbase_8h.html110
-rw-r--r--docs/doxygen/html/xbase_8h_source.html202
-rw-r--r--docs/doxygen/html/xbbcd_8cpp.html80
-rw-r--r--docs/doxygen/html/xbbcd_8h.html81
-rw-r--r--docs/doxygen/html/xbbcd_8h_source.html172
-rw-r--r--docs/doxygen/html/xbblkread_8h.html89
-rw-r--r--docs/doxygen/html/xbblkread_8h_source.html145
-rw-r--r--docs/doxygen/html/xbblockread_8cpp.html80
-rw-r--r--docs/doxygen/html/xbcrix_8cpp.html80
-rw-r--r--docs/doxygen/html/xbcrtbl_8cpp.html80
-rw-r--r--docs/doxygen/html/xbcrtbl_8save_8cpp.html80
-rw-r--r--docs/doxygen/html/xbdate_8cpp.html89
-rw-r--r--docs/doxygen/html/xbdate_8h.html165
-rw-r--r--docs/doxygen/html/xbdate_8h_source.html181
-rw-r--r--docs/doxygen/html/xbdbf3_8cpp.html80
-rw-r--r--docs/doxygen/html/xbdbf4_8cpp.html80
-rw-r--r--docs/doxygen/html/xbdbf_8cpp.html88
-rw-r--r--docs/doxygen/html/xbdbf_8h.html456
-rw-r--r--docs/doxygen/html/xbdbf_8h_source.html604
-rw-r--r--docs/doxygen/html/xbdelete_8cpp.html80
-rw-r--r--docs/doxygen/html/xbdrpix_8cpp.html80
-rw-r--r--docs/doxygen/html/xbdrptbl_8cpp.html80
-rw-r--r--docs/doxygen/html/xbexp_8cpp.html80
-rw-r--r--docs/doxygen/html/xbexp_8h.html81
-rw-r--r--docs/doxygen/html/xbexp_8h_source.html242
-rw-r--r--docs/doxygen/html/xbexpnode_8cpp.html80
-rw-r--r--docs/doxygen/html/xbexpnode_8h.html81
-rw-r--r--docs/doxygen/html/xbexpnode_8h_source.html190
-rw-r--r--docs/doxygen/html/xbfields_8cpp.html88
-rw-r--r--docs/doxygen/html/xbfile_8cpp.html88
-rw-r--r--docs/doxygen/html/xbfile_8h.html181
-rw-r--r--docs/doxygen/html/xbfile_8h_source.html265
-rw-r--r--docs/doxygen/html/xbfilter_8cpp.html80
-rw-r--r--docs/doxygen/html/xbfilter_8h.html81
-rw-r--r--docs/doxygen/html/xbfilter_8h_source.html159
-rw-r--r--docs/doxygen/html/xbfuncs_8cpp.html80
-rw-r--r--docs/doxygen/html/xbindex_8h.html81
-rw-r--r--docs/doxygen/html/xbindex_8h_source.html592
-rw-r--r--docs/doxygen/html/xbinsert_8cpp.html80
-rw-r--r--docs/doxygen/html/xbixbase_8cpp.html80
-rw-r--r--docs/doxygen/html/xbixmdx_8cpp.html80
-rw-r--r--docs/doxygen/html/xbixndx_8cpp.html80
-rw-r--r--docs/doxygen/html/xblnklst_8h.html81
-rw-r--r--docs/doxygen/html/xblnklst_8h_source.html341
-rw-r--r--docs/doxygen/html/xblnklstord_8h.html81
-rw-r--r--docs/doxygen/html/xblnklstord_8h_source.html455
-rw-r--r--docs/doxygen/html/xblnknod_8h.html81
-rw-r--r--docs/doxygen/html/xblnknod_8h_source.html174
-rw-r--r--docs/doxygen/html/xblog_8cpp.html80
-rw-r--r--docs/doxygen/html/xblog_8h.html89
-rw-r--r--docs/doxygen/html/xblog_8h_source.html135
-rw-r--r--docs/doxygen/html/xbmemo3_8cpp.html80
-rw-r--r--docs/doxygen/html/xbmemo4_8cpp.html80
-rw-r--r--docs/doxygen/html/xbmemo_8cpp.html80
-rw-r--r--docs/doxygen/html/xbmemo_8h.html81
-rw-r--r--docs/doxygen/html/xbmemo_8h_source.html263
-rw-r--r--docs/doxygen/html/xbretcod_8h.html1006
-rw-r--r--docs/doxygen/html/xbretcod_8h_source.html177
-rw-r--r--docs/doxygen/html/xbselect_8cpp.html80
-rw-r--r--docs/doxygen/html/xbset_8cpp.html80
-rw-r--r--docs/doxygen/html/xbsql_8cpp.html80
-rw-r--r--docs/doxygen/html/xbsql_8h.html81
-rw-r--r--docs/doxygen/html/xbsql_8h_source.html243
-rw-r--r--docs/doxygen/html/xbssv_8cpp.html94
-rw-r--r--docs/doxygen/html/xbssv_8h.html102
-rw-r--r--docs/doxygen/html/xbssv_8h_source.html258
-rw-r--r--docs/doxygen/html/xbstmt_8cpp.html80
-rw-r--r--docs/doxygen/html/xbstring_8cpp.html95
-rw-r--r--docs/doxygen/html/xbstring_8h.html98
-rw-r--r--docs/doxygen/html/xbstring_8h_source.html250
-rw-r--r--docs/doxygen/html/xbtag_8cpp.html80
-rw-r--r--docs/doxygen/html/xbtag_8h.html89
-rw-r--r--docs/doxygen/html/xbtag_8h_source.html144
-rw-r--r--docs/doxygen/html/xbtblmgr_8cpp.html88
-rw-r--r--docs/doxygen/html/xbtblmgr_8h.html103
-rw-r--r--docs/doxygen/html/xbtblmgr_8h_source.html153
-rw-r--r--docs/doxygen/html/xbtypes_8h.html154
-rw-r--r--docs/doxygen/html/xbtypes_8h_source.html139
-rw-r--r--docs/doxygen/html/xbuda_8cpp.html80
-rw-r--r--docs/doxygen/html/xbuda_8h.html81
-rw-r--r--docs/doxygen/html/xbuda_8h_source.html132
-rw-r--r--docs/doxygen/html/xbxbase_8cpp.html88
-rw-r--r--docs/doxygen/html/xbxbase_8h.html102
-rw-r--r--docs/doxygen/html/xbxbase_8h_source.html317
-rw-r--r--docs/doxygen/latex/annotated.tex12
-rw-r--r--docs/doxygen/latex/classxb_1_1xbDate.pdfbin4739 -> 0 bytes
-rw-r--r--docs/doxygen/latex/classxb_1_1xbDate.tex1065
-rw-r--r--docs/doxygen/latex/classxb_1_1xbDbf.pdfbin4914 -> 0 bytes
-rw-r--r--docs/doxygen/latex/classxb_1_1xbDbf.tex4404
-rw-r--r--docs/doxygen/latex/classxb_1_1xbFile.pdfbin4915 -> 0 bytes
-rw-r--r--docs/doxygen/latex/classxb_1_1xbFile.tex1911
-rw-r--r--docs/doxygen/latex/classxb_1_1xbSsv.pdfbin6100 -> 0 bytes
-rw-r--r--docs/doxygen/latex/classxb_1_1xbSsv.tex375
-rw-r--r--docs/doxygen/latex/classxb_1_1xbString.tex1748
-rw-r--r--docs/doxygen/latex/classxb_1_1xbTblMgr.pdfbin5490 -> 0 bytes
-rw-r--r--docs/doxygen/latex/classxb_1_1xbTblMgr.tex439
-rw-r--r--docs/doxygen/latex/classxb_1_1xbXBase.pdfbin5492 -> 0 bytes
-rw-r--r--docs/doxygen/latex/classxb_1_1xbXBase.tex737
-rw-r--r--docs/doxygen/latex/dir_25b94c3afce00ed38231227d8141f932.tex29
-rw-r--r--docs/doxygen/latex/dir_313caf1132e152dd9b58bea13a4052ca.tex25
-rw-r--r--docs/doxygen/latex/dir_68267d1309a1af8e8297ef4c3efbcdba.tex17
-rw-r--r--docs/doxygen/latex/dir_aebb8dcc11953d78e620bbef0b9e2183.tex55
-rw-r--r--docs/doxygen/latex/dir_b0856f6b0d80ccb263b2f415c91f9e17.tex53
-rw-r--r--docs/doxygen/latex/dir_d93a1d4020dea85bb71b237545b5e722.tex53
-rw-r--r--docs/doxygen/latex/dir_e931c1a3f0014e624d0645a271726ad2.tex23
-rw-r--r--docs/doxygen/latex/files.tex107
-rw-r--r--docs/doxygen/latex/hierarchy.tex18
-rw-r--r--docs/doxygen/latex/refman.tex336
-rw-r--r--docs/doxygen/latex/structxb_1_1xbSchema.tex77
-rw-r--r--docs/doxygen/latex/structxb_1_1xbTblList.tex57
-rw-r--r--docs/doxygen/latex/tstfuncs_8cpp.tex118
-rw-r--r--docs/doxygen/latex/xb__cfg__check_8cpp.tex19
-rw-r--r--docs/doxygen/latex/xb__copydbf_8cpp.tex33
-rw-r--r--docs/doxygen/latex/xb__dbfutil_8cpp.tex33
-rw-r--r--docs/doxygen/latex/xb__deletall_8cpp.tex33
-rw-r--r--docs/doxygen/latex/xb__dumpdbt_8cpp.tex33
-rw-r--r--docs/doxygen/latex/xb__dumprecs_8cpp.tex33
-rw-r--r--docs/doxygen/latex/xb__ex__date_8cpp.tex17
-rw-r--r--docs/doxygen/latex/xb__ex__expression_8cpp.tex51
-rw-r--r--docs/doxygen/latex/xb__ex__sql_8cpp.tex17
-rw-r--r--docs/doxygen/latex/xb__ex__ssv_8cpp.tex17
-rw-r--r--docs/doxygen/latex/xb__ex__string_8cpp.tex17
-rw-r--r--docs/doxygen/latex/xb__ex__v3__create__dbf_8cpp.tex17
-rw-r--r--docs/doxygen/latex/xb__ex__v3__upd__dbf_8cpp.tex17
-rw-r--r--docs/doxygen/latex/xb__ex__v4__create__dbf_8cpp.tex17
-rw-r--r--docs/doxygen/latex/xb__ex__v4__upd__dbf_8cpp.tex17
-rw-r--r--docs/doxygen/latex/xb__execsql_8cpp.tex25
-rw-r--r--docs/doxygen/latex/xb__pack_8cpp.tex33
-rw-r--r--docs/doxygen/latex/xb__tblinfo_8cpp.tex33
-rw-r--r--docs/doxygen/latex/xb__test__bcd_8cpp.tex18
-rw-r--r--docs/doxygen/latex/xb__test__blockread_8cpp.tex42
-rw-r--r--docs/doxygen/latex/xb__test__date_8cpp.tex18
-rw-r--r--docs/doxygen/latex/xb__test__dbf__v3__memos_8cpp.tex18
-rw-r--r--docs/doxygen/latex/xb__test__dbf__v3__nomemos_8cpp.tex18
-rw-r--r--docs/doxygen/latex/xb__test__dbf__v4__memos_8cpp.tex18
-rw-r--r--docs/doxygen/latex/xb__test__dbf__v4__nomemos_8cpp.tex18
-rw-r--r--docs/doxygen/latex/xb__test__expnode_8cpp.tex18
-rw-r--r--docs/doxygen/latex/xb__test__expression_8cpp.tex74
-rw-r--r--docs/doxygen/latex/xb__test__file_8cpp.tex18
-rw-r--r--docs/doxygen/latex/xb__test__filter_8cpp.tex18
-rw-r--r--docs/doxygen/latex/xb__test__funcs_8cpp.tex18
-rw-r--r--docs/doxygen/latex/xb__test__linklist_8cpp.tex18
-rw-r--r--docs/doxygen/latex/xb__test__lock2_8cpp.tex18
-rw-r--r--docs/doxygen/latex/xb__test__lock_8cpp.tex18
-rw-r--r--docs/doxygen/latex/xb__test__log_8cpp.tex18
-rw-r--r--docs/doxygen/latex/xb__test__mdx_8cpp.tex18
-rw-r--r--docs/doxygen/latex/xb__test__ndx_8cpp.tex18
-rw-r--r--docs/doxygen/latex/xb__test__sql_8cpp.tex18
-rw-r--r--docs/doxygen/latex/xb__test__string_8cpp.tex32
-rw-r--r--docs/doxygen/latex/xb__test__tblmgr_8cpp.tex18
-rw-r--r--docs/doxygen/latex/xb__test__uda_8cpp.tex18
-rw-r--r--docs/doxygen/latex/xb__test__xbase_8cpp.tex18
-rw-r--r--docs/doxygen/latex/xb__undelall_8cpp.tex33
-rw-r--r--docs/doxygen/latex/xbalttbl_8cpp.tex3
-rw-r--r--docs/doxygen/latex/xbase_8h.tex31
-rw-r--r--docs/doxygen/latex/xbase_8h_source.tex106
-rw-r--r--docs/doxygen/latex/xbbcd_8cpp.tex3
-rw-r--r--docs/doxygen/latex/xbbcd_8h.tex2
-rw-r--r--docs/doxygen/latex/xbbcd_8h_source.tex97
-rw-r--r--docs/doxygen/latex/xbblkread_8h.tex7
-rw-r--r--docs/doxygen/latex/xbblkread_8h_source.tex69
-rw-r--r--docs/doxygen/latex/xbblockread_8cpp.tex3
-rw-r--r--docs/doxygen/latex/xbcrix_8cpp.tex3
-rw-r--r--docs/doxygen/latex/xbcrtbl_8cpp.tex3
-rw-r--r--docs/doxygen/latex/xbcrtbl_8save_8cpp.tex3
-rw-r--r--docs/doxygen/latex/xbdate_8cpp.tex9
-rw-r--r--docs/doxygen/latex/xbdate_8h.tex50
-rw-r--r--docs/doxygen/latex/xbdate_8h_source.tex103
-rw-r--r--docs/doxygen/latex/xbdbf3_8cpp.tex3
-rw-r--r--docs/doxygen/latex/xbdbf4_8cpp.tex3
-rw-r--r--docs/doxygen/latex/xbdbf_8cpp.tex8
-rw-r--r--docs/doxygen/latex/xbdbf_8h.tex196
-rw-r--r--docs/doxygen/latex/xbdbf_8h_source.tex511
-rw-r--r--docs/doxygen/latex/xbdelete_8cpp.tex3
-rw-r--r--docs/doxygen/latex/xbdrpix_8cpp.tex3
-rw-r--r--docs/doxygen/latex/xbdrptbl_8cpp.tex3
-rw-r--r--docs/doxygen/latex/xbexp_8cpp.tex3
-rw-r--r--docs/doxygen/latex/xbexp_8h.tex2
-rw-r--r--docs/doxygen/latex/xbexp_8h_source.tex164
-rw-r--r--docs/doxygen/latex/xbexpnode_8cpp.tex3
-rw-r--r--docs/doxygen/latex/xbexpnode_8h.tex2
-rw-r--r--docs/doxygen/latex/xbexpnode_8h_source.tex113
-rw-r--r--docs/doxygen/latex/xbfields_8cpp.tex8
-rw-r--r--docs/doxygen/latex/xbfile_8cpp.tex8
-rw-r--r--docs/doxygen/latex/xbfile_8h.tex58
-rw-r--r--docs/doxygen/latex/xbfile_8h_source.tex183
-rw-r--r--docs/doxygen/latex/xbfilter_8cpp.tex3
-rw-r--r--docs/doxygen/latex/xbfilter_8h.tex2
-rw-r--r--docs/doxygen/latex/xbfilter_8h_source.tex84
-rw-r--r--docs/doxygen/latex/xbfuncs_8cpp.tex3
-rw-r--r--docs/doxygen/latex/xbindex_8h.tex2
-rw-r--r--docs/doxygen/latex/xbindex_8h_source.tex513
-rw-r--r--docs/doxygen/latex/xbinsert_8cpp.tex3
-rw-r--r--docs/doxygen/latex/xbixbase_8cpp.tex3
-rw-r--r--docs/doxygen/latex/xbixmdx_8cpp.tex3
-rw-r--r--docs/doxygen/latex/xbixndx_8cpp.tex3
-rw-r--r--docs/doxygen/latex/xblnklst_8h.tex2
-rw-r--r--docs/doxygen/latex/xblnklst_8h_source.tex263
-rw-r--r--docs/doxygen/latex/xblnklstord_8h.tex2
-rw-r--r--docs/doxygen/latex/xblnklstord_8h_source.tex373
-rw-r--r--docs/doxygen/latex/xblnknod_8h.tex2
-rw-r--r--docs/doxygen/latex/xblnknod_8h_source.tex100
-rw-r--r--docs/doxygen/latex/xblog_8cpp.tex3
-rw-r--r--docs/doxygen/latex/xblog_8h.tex7
-rw-r--r--docs/doxygen/latex/xblog_8h_source.tex59
-rw-r--r--docs/doxygen/latex/xbmemo3_8cpp.tex3
-rw-r--r--docs/doxygen/latex/xbmemo4_8cpp.tex3
-rw-r--r--docs/doxygen/latex/xbmemo_8cpp.tex3
-rw-r--r--docs/doxygen/latex/xbmemo_8h.tex2
-rw-r--r--docs/doxygen/latex/xbmemo_8h_source.tex187
-rw-r--r--docs/doxygen/latex/xbretcod_8h.tex469
-rw-r--r--docs/doxygen/latex/xbretcod_8h_source.tex103
-rw-r--r--docs/doxygen/latex/xbselect_8cpp.tex3
-rw-r--r--docs/doxygen/latex/xbset_8cpp.tex3
-rw-r--r--docs/doxygen/latex/xbsql_8cpp.tex3
-rw-r--r--docs/doxygen/latex/xbsql_8h.tex2
-rw-r--r--docs/doxygen/latex/xbsql_8h_source.tex167
-rw-r--r--docs/doxygen/latex/xbssv_8cpp.tex13
-rw-r--r--docs/doxygen/latex/xbssv_8h.tex17
-rw-r--r--docs/doxygen/latex/xbssv_8h_source.tex178
-rw-r--r--docs/doxygen/latex/xbstmt_8cpp.tex3
-rw-r--r--docs/doxygen/latex/xbstring_8cpp.tex13
-rw-r--r--docs/doxygen/latex/xbstring_8h.tex14
-rw-r--r--docs/doxygen/latex/xbstring_8h_source.tex172
-rw-r--r--docs/doxygen/latex/xbtag_8cpp.tex3
-rw-r--r--docs/doxygen/latex/xbtag_8h.tex7
-rw-r--r--docs/doxygen/latex/xbtag_8h_source.tex69
-rw-r--r--docs/doxygen/latex/xbtblmgr_8cpp.tex8
-rw-r--r--docs/doxygen/latex/xbtblmgr_8h.tex19
-rw-r--r--docs/doxygen/latex/xbtblmgr_8h_source.tex69
-rw-r--r--docs/doxygen/latex/xbtypes_8h.tex48
-rw-r--r--docs/doxygen/latex/xbtypes_8h_source.tex61
-rw-r--r--docs/doxygen/latex/xbuda_8cpp.tex3
-rw-r--r--docs/doxygen/latex/xbuda_8h.tex2
-rw-r--r--docs/doxygen/latex/xbuda_8h_source.tex58
-rw-r--r--docs/doxygen/latex/xbxbase_8cpp.tex8
-rw-r--r--docs/doxygen/latex/xbxbase_8h.tex17
-rw-r--r--docs/doxygen/latex/xbxbase_8h_source.tex232
-rwxr-xr-xdocs/howto/GettingStarted.txt86
-rwxr-xr-xdocs/html/index.html45
-rwxr-xr-xdocs/html/xbae.html96
-rwxr-xr-xdocs/html/xbaf.html45
-rwxr-xr-xdocs/html/xbc1.html199
-rwxr-xr-xdocs/html/xbc10.html12
-rwxr-xr-xdocs/html/xbc11.html12
-rwxr-xr-xdocs/html/xbc12.html86
-rwxr-xr-xdocs/html/xbc13.html46
-rwxr-xr-xdocs/html/xbc14.html113
-rwxr-xr-xdocs/html/xbc15.html96
-rwxr-xr-xdocs/html/xbc16.html52
-rwxr-xr-xdocs/html/xbc17.html219
-rwxr-xr-xdocs/html/xbc18.html252
-rwxr-xr-xdocs/html/xbc2.html267
-rwxr-xr-xdocs/html/xbc3.html73
-rwxr-xr-xdocs/html/xbc4.html81
-rwxr-xr-xdocs/html/xbc5.html208
-rwxr-xr-xdocs/html/xbc6.html153
-rwxr-xr-xdocs/html/xbc7.html153
-rwxr-xr-xdocs/html/xbc8.html79
-rwxr-xr-xdocs/html/xbc9.html180
-rw-r--r--docs/man/xb_cfg_chk.1.gzbin546 -> 0 bytes
-rw-r--r--docs/man/xb_copydbf.1.gzbin705 -> 0 bytes
-rw-r--r--docs/man/xb_dbfutil.1.gzbin633 -> 0 bytes
-rw-r--r--docs/man/xb_deletall.1.gzbin656 -> 0 bytes
-rw-r--r--docs/man/xb_dumpdbt.1.gzbin672 -> 0 bytes
-rw-r--r--docs/man/xb_dumprecs.1.gzbin691 -> 0 bytes
-rw-r--r--docs/man/xb_pack.1.gzbin697 -> 0 bytes
-rw-r--r--docs/man/xb_tblinfo.1.gzbin675 -> 0 bytes
-rw-r--r--docs/man/xb_undelall.1.gzbin690 -> 0 bytes
-rwxr-xr-xsrc/core/xbblockread.cpp271
-rwxr-xr-xsrc/core/xbdate.cpp802
-rwxr-xr-xsrc/core/xbdbf.cpp4338
-rwxr-xr-xsrc/core/xbdbf3.cpp767
-rwxr-xr-xsrc/core/xbdbf4.cpp884
-rwxr-xr-xsrc/core/xbexp.cpp2661
-rwxr-xr-xsrc/core/xbexpnode.cpp562
-rwxr-xr-xsrc/core/xbfields.cpp1130
-rwxr-xr-xsrc/core/xbfile.cpp2193
-rwxr-xr-xsrc/core/xbfilter.cpp544
-rwxr-xr-xsrc/core/xbfuncs.cpp850
-rwxr-xr-xsrc/core/xbixbase.cpp789
-rwxr-xr-xsrc/core/xbixmdx.cpp5073
-rwxr-xr-xsrc/core/xbixndx.cpp2820
-rwxr-xr-xsrc/core/xblog.cpp208
-rwxr-xr-xsrc/core/xbmemo.cpp219
-rwxr-xr-xsrc/core/xbmemo3.cpp575
-rwxr-xr-xsrc/core/xbmemo4.cpp1335
-rwxr-xr-xsrc/core/xbssv.cpp573
-rwxr-xr-xsrc/core/xbstring.cpp1943
-rwxr-xr-xsrc/core/xbtag.cpp121
-rwxr-xr-xsrc/core/xbtblmgr.cpp311
-rwxr-xr-xsrc/core/xbuda.cpp78
-rwxr-xr-xsrc/core/xbxbase.cpp749
-rwxr-xr-xsrc/examples/xb_ex_date.cpp210
-rwxr-xr-xsrc/examples/xb_ex_expression.cpp232
-rwxr-xr-xsrc/examples/xb_ex_ssv.cpp134
-rwxr-xr-xsrc/examples/xb_ex_string.cpp380
-rwxr-xr-xsrc/examples/xb_ex_v3_create_dbf.cpp102
-rwxr-xr-xsrc/examples/xb_ex_v3_upd_dbf.cpp282
-rwxr-xr-xsrc/examples/xb_ex_v4_create_dbf.cpp99
-rwxr-xr-xsrc/examples/xb_ex_v4_upd_dbf.cpp286
-rwxr-xr-xsrc/include/xbconfig.h.in124
-rwxr-xr-xsrc/include/xbdate.h122
-rwxr-xr-xsrc/include/xbdbf.h558
-rwxr-xr-xsrc/include/xbexp.h215
-rwxr-xr-xsrc/include/xbexpnode.h120
-rwxr-xr-xsrc/include/xbfile.h197
-rwxr-xr-xsrc/include/xblog.h66
-rwxr-xr-xsrc/include/xbretcod.h97
-rwxr-xr-xsrc/include/xbssv.h185
-rwxr-xr-xsrc/include/xbstring.h186
-rwxr-xr-xsrc/include/xbxbase.h230
-rwxr-xr-xsrc/sql/xbcrix.cpp289
-rwxr-xr-xsrc/sql/xbcrtbl.cpp267
-rwxr-xr-xsrc/sql/xbcrtbl.save.cpp256
-rwxr-xr-xsrc/sql/xbdelete.cpp148
-rwxr-xr-xsrc/sql/xbdrptbl.cpp124
-rwxr-xr-xsrc/tests/tstfuncs.cpp583
-rwxr-xr-xsrc/tests/xb_test_date.cpp190
-rwxr-xr-xsrc/tests/xb_test_dbf_v3_memos.cpp259
-rwxr-xr-xsrc/tests/xb_test_dbf_v4_nomemos.cpp359
-rwxr-xr-xsrc/tests/xb_test_expression.cpp804
-rwxr-xr-xsrc/tests/xb_test_file.cpp209
-rwxr-xr-xsrc/tests/xb_test_funcs.cpp293
-rwxr-xr-xsrc/tests/xb_test_lock.cpp874
-rwxr-xr-xsrc/tests/xb_test_lock2.cpp207
-rwxr-xr-xsrc/tests/xb_test_log.cpp81
-rwxr-xr-xsrc/tests/xb_test_mdx.cpp296
-rwxr-xr-xsrc/tests/xb_test_ndx.cpp403
-rwxr-xr-xsrc/tests/xb_test_sql.cpp259
-rwxr-xr-xsrc/tests/xb_test_string.cpp409
-rwxr-xr-xsrc/tests/xb_test_tblmgr.cpp158
-rwxr-xr-xsrc/tests/xb_test_xbase.cpp104
-rwxr-xr-xsrc/utils/xb_cfg_check.cpp404
-rwxr-xr-xsrc/utils/xb_dbfutil.cpp3811
-rwxr-xr-xsrc/utils/xb_execsql.cpp95
1262 files changed, 123240 insertions, 114894 deletions
diff --git a/1Tdata/xbase/xbase64-4.1.4/AUTHORS b/1Tdata/xbase/xbase64-4.1.4/AUTHORS
new file mode 100755
index 0000000..7b65b0a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/AUTHORS
@@ -0,0 +1,42 @@
+Xbase64 Authors / Contributors
+
+
+
+This is a list of the people who are or have worked on or after version 4.0.0 of the Xbase64 Library.
+
+
+------------------------------------------------------------------------------
+The following is the list of AUTHORS that contributed after release 4.0.0
+------------------------------------------------------------------------------
+
+Gary Kunkel <XDB-devel@lists.sourceforge.net> - original author, current maintainer
+Brecht Sanders <XDB-devel@lists.sourceforge.net> - mingw port
+
+------------------------------------------------------------------------------
+The following is the list of AUTHORS that contributed prior to release 4.0.0
+------------------------------------------------------------------------------
+
+This is a partial list of the people that have helped with the xbase
+project and something specific they worked on. Most have worked on more
+than what is listed.
+
+
+Derry Bryson <derry@techass.com> - last maintainer
+Bob Cotton <bcotton@synix.com> - Clipper NTX index support
+Denis Braussen <postoffice@mail.dotcom.fr> - general support
+Denis Pershin <dyp@inetlab.com> - provided library enhancements
+Eirk Bachman <ebp@geocities.com> - keeper of definitive Xbase spec
+Frolov Sergey - bugfixes (memory leaks)
+Gabriel Emerson <egabriel@io.com> - provided logo
+Kehl Hubertus <kehlh@hotmail.com> - Xbase to Xbase C++ Perl Converter
+Mario Motta - testing and bugfixes
+Michael Bedward <mbedward@ozemail.com.au> - Expression logic support
+Paul Foster <paulf@quillandmouse.com> - general support
+Serge Smirnov <sw1181@mail.ru> - MSVC stuff and OCAML support
+Vitaly Fedrushkov <willy@snowyowl.csu.ac.ru> - TV support and more
+
+
+------------------------------------------------------------------------------
+
+If you are missing and you should be included in this file, please let me
+know at XDB-devel@lists.sourceforge.net. Thanks, Gary Kunkel.
diff --git a/COPYING b/1Tdata/xbase/xbase64-4.1.4/COPYING
index 01ac73a..01ac73a 100755
--- a/COPYING
+++ b/1Tdata/xbase/xbase64-4.1.4/COPYING
diff --git a/INSTALL b/1Tdata/xbase/xbase64-4.1.4/INSTALL
index 20ced28..20ced28 100755
--- a/INSTALL
+++ b/1Tdata/xbase/xbase64-4.1.4/INSTALL
diff --git a/1Tdata/xbase/xbase64-4.1.4/NEWS b/1Tdata/xbase/xbase64-4.1.4/NEWS
new file mode 100755
index 0000000..76de1be
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/NEWS
@@ -0,0 +1,171 @@
+Xbase64 (06/01/23)
+------------------------
+
+
+4.1.4 - 06/01/23
+
+1) Created html chapter for log routines.
+2) Created sample log program.
+3) Added logic to enable/disable block processing for xbDbf::Reindex method.
+4) Updated usage of xbDbf::GetRecordCnt() to support error capture logic.
+5) Updated message handling logic in the SQL processor routines (beta).
+6) New utility program called xb_import, used to import records from a flat file into a DBF file/table.
+7) Updates to the xbDate class for handling null date values. Upgrade notes - xbDate values now default
+ to a null date on initialization, previous versions defaults to current date.
+8) Added method xbDbf::GetNullSts() - used to determine if a field is considered null.
+9) Reolved memory leak in expression parser when error condition encountered.
+10) Updates to Reindex routine, memory leak fix when error condition encountered
+11) Reindex, delete tag if reindex failure, updates to test programs to verify
+
+
+
+4.1.3 - 04/14/23
+
+1) Changed xbDbf::ReadHeader() to be a protected method, was private
+2) Added new config option for temp directory for temp file processing
+3) Added support for termporary indices (.TDX)
+4) New method xbFile::CreateFqn()
+5) Updated methods and shared static variables for Data, Log and Temp folders
+ Also moved Set and Get methods for log file to xbSsv class.
+6) Updated method xbFile::CreateUniqueFileName() to check for path separator at the
+ end of the supplied path, if not there, add it.
+7) Fix to xbDbf::DeleteTag() logic for setting cur tag to null when no tags exist.
+
+
+
+4.1.2 - 04/05/23
+
+1) New method created - xbSsv::GetPathSeparator()
+2) Updates to lock testing program.
+3) Updates for doxygen auto documentation.
+4) Documentation updates, added html chapter 19.
+5) Updates to CMakeLists.txt config file
+
+
+
+4.1.1 - 03/28/23
+
+1) Updates to AUTHORS file
+2) Port for mingw
+ - New mingw build folder
+ - Updates to CMakeLists.txt
+3) Documentation updates
+4) Added support for getenv_s for Visual Studio compiles
+5) Updates to Drop Table routine
+6) Updates to Create Table routine
+7) Updates to xb_lock_test and xb_lock_test2 library testing programs
+
+
+
+4.1.0 - 03/02/23
+
+1) Created block read functionality, class xbBlockRead
+2) SQL Updates - Started development of structures needed to support basic
+ SQL SELECT statement - SELECT f FROM t WHERE x=z ORDER BY o
+ Caveat: **** SQL support is still in development phase ******
+3) Updates to class xbTblMgr functionality
+4) New method xbString::Pos( char c, xbUInt32 ulStartPos )
+5) Updated xb_cfg_check program
+6) Added method xbDbf::GetHeaderLen()
+7) Documentation updates
+8) Updates to SQL Create Table logic
+9) Updates to MDX create tag key length calculation
+10) Updated default log file folder to $HOME/xbase64/logs
+11) Updated default data file folder to $HOME/xbase64/data
+12) Created initial round of man pages for utility programs
+13) Created Debian specific build folder
+
+
+
+4.0.3 - 12/26/22
+
+1) Additional documentation updates
+2) Updates to the rename methods
+3) Added SQL command - "ALTER TABLE tablename.DBF RENAME TO newname.DBF"
+4) Added SQL command - "DELETE FROM tablename.DBF [WHERE expression]"
+5) Update to xbDbf::DumpRecs method to support deleted records
+6) Update to xbDbf::GetLongField - bug fix
+7) Misc updates to xb_dbfutil program
+8) Added reindex logic to xb_pack utility program
+9) Created method xbString::Replace(s1,s2)
+10) Updates to test program xb_ndx_test
+
+
+
+4.0.2 - 12/15/22 Documentation cleanup and updates.
+
+
+
+4.0.1 - 11/22/22 Rewrite of core library.
+The library has been refreshed (Major rewrite) with release 4.0.1
+
+1) 32/64 bit support.
+2) Big Endian or Little Endian support.
+3) Updates for error handling and exception processing.
+4) DBF III and DBF IV support.
+5) NDX, MDX index support.
+6) DBT Memo file support for both version III and version IV files.
+7) Updates and fixes to record and file locking.
+8) Support for logfile generation
+9) The beginnings of SQL support.
+10) CDX and NTX index support which was available in earlier releases
+ is still pending inclusion in the latest library rewrite.
+11) Encapsulated library into a namespace called "xb".
+12) Migrated from autoconf and automake to cmake.
+13) Significant testing.
+14) General library cleanup.
+15) Updated license to be the latest GPL.
+16) Updated xbString method names to be more consistant with the rest of the library.
+17) String functions were updated from 0 based routines to 1 based routines.
+
+
+
+
+Xbase64 (Sept 15, 2003)
+------------------------
+
+Xbase64 was branched off the xbase C++ class lib project and given a new name.
+
+There are significant changes in this release.
+
+1) The original author (Gary Kunkel) has resumed working on the project.
+
+2) The project was branched and renamed to xbase64 with 64 bit file
+ processing capabilities. The xbase name is being used by other projects,
+ so I thought it was time for a new name.
+
+3) Modified the license from LGPL to GPL as recommended by the GNU web site.
+ Files that I have not been able to get permission from the original
+ author for GPL terms have beed deleted from the library.
+
+4) Trimmed the tree: Dropped support for the xbHtml class, the turbo vision
+ interface, and the ybase directory. These are either unused, not working,
+ undocumented, not maintained, or I didn't have authority to change the
+ license from LGPL to GPL.
+
+5) Didn't move make files forward that were not documented or working.
+ These need to be reviewed and brought forward.
+
+6) Worked on the locking logic.
+
+7) Added support for Borland C++ 5.x compiler.
+
+8) Created a new data type of XB_BOOL. Current bool data type was causing
+ issues in certain environments.
+
+9) Dropped support for XB_CASTELLANO dates. Changed the logic to use
+ system locale settings, this supports descriptive dates in different
+ languages.
+
+10) Cleaned up memory leaks.
+
+11) Updates to the documentation.
+
+12) Enhancements to the expression logic
+
+13) Fixed the broken index logic - the ndx and ntx indices are working
+ again.
+
+-----------------------------------------------------------------------
+For a the historical NEWS file history (pre 9/15/03), review the older
+xbase library.
diff --git a/1Tdata/xbase/xbase64-4.1.4/README b/1Tdata/xbase/xbase64-4.1.4/README
new file mode 100755
index 0000000..35144ad
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/README
@@ -0,0 +1,54 @@
+ Xbase64 Version 4.1.4
+ 04/14/23
+
+
+WHAT IS IT?
+-----------
+
+Xbase64 is an xbase (i.e. dBase, FoxPro, etc.) compatible C++ class library
+originally by Gary Kunkel and others (see the AUTHORS file).
+
+Xbase64 is useful for accessing data in legacy dBase 3 and 4 database files as
+well as a general light weight database engine. It includes support for
+DBF (dBase version 3 and 4) data files, NDX and MDX indices and DBT (dBase version 3 and 4).
+It supports file and record locking under *nix and Windows.
+
+
+DIRECTORY LAYOUT
+----------------
+
+ /build/borland5.5 Build library for Borland 5.5 environment
+ /build/debian Build library for Debian environment
+ /build/linux32 Build library for Linux 32 bit environment (tested on Slackware)
+ /build/linux64 Build library for Linux 64 bit environment (tested on Slackware)
+ /build/mac64 Build library for Mac 64 bit environment
+ /build/mingw Build library for mingw bit environment
+ /build/win32vs Build library for Windows 32 bit Visual Studio environment
+ /build/win64vs Build library for Windows 64 bit Visual Studio environment
+
+ /data Folder for database files
+ /docs Library documentation
+ /logs Log files
+ /sql SQL files
+ /src Library source code
+ /temp Folder for temp files
+
+
+
+Starting point
+--------------
+
+1) For Linux/Unix environment, download the latest gz file and execute the following
+ gunzip xbase64_x.y.z.tar.gz
+ tar -cvf xbase64_x.y.z
+
+2) For Windows environment, download the lates zip file and unzip it
+
+3) Point your browser to - docs/html/index.html
+
+
+
+
+Please email comments, bug reports, and patches to xdb-dev@lists.sourceforge.net
+
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/TODO b/1Tdata/xbase/xbase64-4.1.4/TODO
new file mode 100755
index 0000000..9ff2577
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/TODO
@@ -0,0 +1,33 @@
+
+XBase 64 todo list as of 11/28/22
+
+Xbase64 TODO's (not necessarily in this order!)
+-----------------------------------------------
+
+
+1) Additional index support
+ - NTX - bring legacy code forward
+ - CDX - bring legacy code forward
+ - IDX - develop
+
+
+2) SQL support
+
+
+3) Support for DBase Version 5 files
+
+
+4) Transaction support
+ Create a logging routine
+ put hooks in the PutRecord function to log data
+
+
+5) Real deletes
+
+ - analysis
+ - test this functionality
+ - incorporate into dbfutil1
+ - update documentation
+ - impact on indices
+
+
diff --git a/build/borland5.5/BuildBorland.bat b/1Tdata/xbase/xbase64-4.1.4/build/borland5.5/BuildBorland.bat
index a61eb62..a61eb62 100755
--- a/build/borland5.5/BuildBorland.bat
+++ b/1Tdata/xbase/xbase64-4.1.4/build/borland5.5/BuildBorland.bat
diff --git a/1Tdata/xbase/xbase64-4.1.4/build/borland5.5/CMakeLists.txt b/1Tdata/xbase/xbase64-4.1.4/build/borland5.5/CMakeLists.txt
new file mode 100755
index 0000000..ce2566a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/build/borland5.5/CMakeLists.txt
@@ -0,0 +1,809 @@
+cmake_minimum_required(VERSION 3.2)
+
+project (Xbase64)
+set( xbase_VERSION_MAJOR 4 )
+set( xbase_VERSION_MINOR 1 )
+set( xbase_VERSION_PATCH 4 )
+
+MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
+MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
+MESSAGE( "--- Project Name: " ${CMAKE_PROJECT_NAME} )
+MESSAGE( "--- Install Prefix: " ${CMAKE_INSTALL_PREFIX} )
+
+#Set compiler options
+
+IF( CMAKE_COMPILER_IS_GNUCXX )
+ MESSAGE( "Setting GNU compiler options" )
+ add_compile_options( -Wall -Wsign-conversion )
+# add_compile_options( -Wall -Wconversion -Wsign-conversion )
+ SET( VERBOSE 1 )
+ENDIF( CMAKE_COMPILER_IS_GNUCXX )
+
+IF( BORLAND )
+ MESSAGE ("BORLAND COMPILER" )
+ #set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w-8022" )
+ add_compile_options( -w-8022 )
+ENDIF( BORLAND )
+
+MESSAGE( "--- Checking integer sizes" )
+INCLUDE(CheckTypeSize)
+CHECK_TYPE_SIZE( "short int" SHORT_INT )
+CHECK_TYPE_SIZE( int INT )
+CHECK_TYPE_SIZE( __int32 __INT32 )
+CHECK_TYPE_SIZE( int32_t INT32_T )
+CHECK_TYPE_SIZE( long LONG_INT )
+CHECK_TYPE_SIZE( __int64 __INT64 )
+CHECK_TYPE_SIZE( int64_t INT64_T )
+CHECK_TYPE_SIZE( "long long" LONG_LONG )
+CHECK_TYPE_SIZE( u_int64_t U_INT64_T )
+CHECK_TYPE_SIZE( uint64_t UINT64_T )
+CHECK_TYPE_SIZE( "unsigned __int64" UNSIGNED__INT64 )
+CHECK_TYPE_SIZE( "unsigned long long" UNSIGNED_LONG_LONG )
+
+CHECK_TYPE_SIZE( "double" DOUBLE )
+MESSAGE( "--- Double size = " ${DOUBLE} )
+
+
+#determine how 16 bit integer defined on this platform
+SET( iSize 0 )
+IF( HAVE_SHORT_INT AND ${SHORT_INT} EQUAL 2 )
+ SET( xbInt16 "short int" )
+ SET( xbUInt16 "unsigned short int" )
+ SET( iSize ${SHORT_INT} )
+ MESSAGE( "--- xbInt16 = [short int]" )
+ MESSAGE( "--- xbUInt16 = [unsigned short int]" )
+
+ENDIF( HAVE_SHORT_INT AND ${SHORT_INT} EQUAL 2 )
+IF( NOT ${iSize} EQUAL 2 )
+ MESSAGE( "FATAL_ERROR Could not detect 16 bit integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 2 )
+
+#determine how 32 bit integer defined on this platform
+SET( iSize 0 )
+IF( HAVE_INT AND ${INT} EQUAL 4 )
+ SET( xbInt32 int )
+ SET( xbUInt32 "unsigned int" )
+ SET( iSize ${INT} )
+ MESSAGE( "--- xbInt32 = [int]" )
+ MESSAGE( "--- xbUInt32 = [unsigned int]" )
+ENDIF( HAVE_INT AND ${INT} EQUAL 4 )
+
+IF(( NOT iSize EQUAL 4 ) AND HAVE___INT32 )
+ MESSAGE( __int untested if block - see CMakeLists.txt)
+ SET( xbInt32 __int32 )
+ SET( xbUInt32 "unsigned __int32" )
+ SET( iSize ${__INT} )
+ MESSAGE( "--- xbInt32 = [__int]" )
+ MESSAGE( "--- xbUInt32 = [unsigned __int]" )
+ENDIF(( NOT iSize EQUAL 4 ) AND HAVE___INT32 )
+
+IF(( NOT iSize EQUAL 4 ) AND HAVE_INT32_T )
+ SET( xbInt32 int32_t )
+ SET( xbUInt32 "u_int32_t" )
+ SET( iSize ${INT32_T} )
+ MESSAGE( "--- xbInt32 = [int32_t]" )
+ MESSAGE( "--- xbUInt32 = [u_int32_t]" )
+ENDIF(( NOT iSize EQUAL 4 ) AND HAVE_INT32_T )
+
+IF( NOT ${iSize} EQUAL 4 )
+ MESSAGE( "FATAL_ERROR Could not detect 32 bit integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 4 )
+
+#determine how 64 bit integer defined on this platform
+SET( iSize 0 )
+IF( HAVE___INT64 )
+ SET( xbInt64 __int64 )
+ SET( iSize ${__INT64} )
+ MESSAGE( "--- xbInt64 = [__int64]" )
+ENDIF( HAVE___INT64 )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_INT64_T )
+ SET( xbInt64 int64_t )
+ SET( iSize ${INT64_T} )
+ MESSAGE( "--- xbInt64 = [int64_t]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_INT64_T )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_LONG_LONG )
+ SET( xbInt64 "long long" )
+ SET( iSize ${LONG_LONG} )
+ MESSAGE( "--- xbInt64 = [long long]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_LONG_LONG )
+
+IF( NOT ${iSize} EQUAL 8 )
+ MESSAGE( "FATAL_ERROR Could not detect 64 bit integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 8 )
+
+#determine how 64 bit unsigned integer defined on this platform
+SET( iSize 0 )
+IF( HAVE_UNSIGNED__INT64 )
+ SET( xbUInt64 "unsigned __int64" )
+ SET( iSize ${UNSIGNED__INT64} )
+ MESSAGE( "--- xbUInt64 = [unsigned __int64]" )
+ENDIF( HAVE_UNSIGNED__INT64 )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_UINT64_T )
+ SET( xbUInt64 "uint64_t" )
+ SET( iSize ${UINT64_T} )
+ MESSAGE( "--- xbUInt64 = [uint64_t]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_UINT64_T )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_U_INT64_T )
+ SET( xbUInt64 u_int64_t )
+ SET( iSize ${U_INT64_T} )
+ MESSAGE( "--- xbUInt64 = [u_int64_t]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_U_INT64_T )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_UNSIGNED_LONG_LONG )
+ SET( xbUInt64 "unsigned long long" )
+ SET( iSize ${UNSIGNED_LONG_LONG} )
+ MESSAGE( "--- xbUInt64 = [unsigned long long]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_UNSIGNED_LONG_LONG )
+
+IF( NOT ${iSize} EQUAL 8 )
+ MESSAGE( "FATAL_ERROR Could not detect 64 bit unsigned integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 8 )
+
+#Library options
+option( BUILD_SHARED_LIBS "Build shared libraries" ON)
+option( XB_DBF3_SUPPORT "Compile DBase File Format Version 3 support" ON)
+option( XB_DBF4_SUPPORT "Compile DBase File Format Version 4 support" ON)
+option( XB_MEMO_SUPPORT "Compile memo field support into library" ON)
+option( XB_NDX_SUPPORT "Compile NDX Index support into library" ON)
+option( XB_MDX_SUPPORT "Compile MDX Index support into library" ON)
+option( XB_LOCKING_SUPPORT "Compile Multi User Locking support into library" ON)
+option( XB_TDX_SUPPORT "Compile temporary index support into library" ON)
+
+option( XB_LOGGING_SUPPORT "Compile message logging support into library" ON)
+option( XB_LINKLIST_SUPPORT "Compile Link List routines into library" ON)
+option( XB_FUNCTION_SUPPORT "Compile XBase Function support into library" ON)
+option( XB_EXPRESSION_SUPPORT "Compile Expression support into library" ON)
+option( XB_INF_SUPPORT "Compile NDX INF file support into library" ON)
+option( XB_FILTER_SUPPORT "Compile Filter support into library" ON)
+option( XB_BLOCKREAD_SUPPORT "Compile Block Read support into library" ON)
+option( XB_SQL_SUPPORT "Compile SQL support into library - alpha" ON)
+option( XB_DEBUG_SUPPORT "Compile debug logic into library" ON)
+option( XB_UTILS_SUPPORT "Compile utility programs" ON)
+option( XB_EXAMPLES_SUPPORT "Compile example programs" ON)
+
+Message( "--- BUILD_SHARED_LIBS " ${BUILD_SHARED_LIBS})
+Message( "--- XB_DBF3_SUPPORT " ${XB_DBF3_SUPPORT})
+Message( "--- XB_DBF4_SUPPORT " ${XB_DBF4_SUPPORT})
+Message( "--- XB_MEMO_SUPPORT " ${XB_MEMO_SUPPORT})
+Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
+Message( "--- XB_MDX_SUPPORT " ${XB_MDX_SUPPORT})
+Message( "--- XB_TDX_SUPPORT " ${XB_TDX_SUPPORT})
+Message( "--- XB_LOCKING_SUPPORT " ${XB_LOCKING_SUPPORT})
+Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
+Message( "--- XB_FUNCTION_SUPPORT " ${XB_FUNCTION_SUPPORT})
+Message( "--- XB_EXPRESSION_SUPPORT " ${XB_EXPRESSION_SUPPORT})
+Message( "--- XB_FILTER_SUPPORT " ${XB_FILTER_SUPPORT})
+Message( "--- XB_DEBUG_SUPPORT " ${XB_DEBUG_SUPPORT})
+Message( "--- XB_UTILS_SUPPORT " ${XB_UTILS_SUPPORT})
+Message( "--- XB_EXAMPLES_SUPPORT " ${XB_EXAMPLES_SUPPORT})
+Message( "--- XB_LOGGING_SUPPORT " ${XB_LOGGING_SUPPORT})
+Message( "--- XB_SQL_SUPPORT " ${XB_SQL_SUPPORT})
+Message( "--- XB_INF_SUPPORT " ${XB_INF_SUPPORT})
+Message( "--- XB_BLOCKREAD_SUPPORT " ${XB_BLOCKREAD_SUPPORT})
+
+IF( XB_DEBUG_SUPPORT )
+ Message( "--- Adding debug support" )
+ set( CMAKE_BUILD_TYPE Debug )
+IF( CMAKE_COMPILER_IS_GNUCXX )
+ add_compile_options( -Og )
+ENDIF( CMAKE_COMPILER_IS_GNUCXX )
+ENDIF( XB_DEBUG_SUPPORT )
+
+IF( CMAKE_SIZEOF_VOID_P EQUAL 8 )
+ MESSAGE( "--- 64 bit compiler detected" )
+ set( XB_PLATFORM "x64" )
+ set( XB_PLATFORM_64 1 )
+ set( XB_LIBNAME "xbase64" )
+
+ELSE( CMAKE_SIZEOF_VOID_P EQUAL 8 )
+ MESSAGE( "--- 32 bit compiler detected" )
+ set( XB_PLATFORM "x86" )
+ set( XB_PLATFORM_32 1 )
+ set( XB_LIBNAME "xbase32" )
+
+ENDIF( CMAKE_SIZEOF_VOID_P EQUAL 8 )
+
+
+#Check for the existence of various header files
+INCLUDE (CheckIncludeFiles)
+CHECK_INCLUDE_FILES (ctype.h HAVE_CTYPE_H)
+CHECK_INCLUDE_FILES (dirent.h HAVE_DIRENT_H)
+CHECK_INCLUDE_FILES (fcntl.h HAVE_FCNTL_H)
+CHECK_INCLUDE_FILES (inttypes.h HAVE_INTTYPES_H)
+CHECK_INCLUDE_FILES (pwd.h HAVE_PWD_H)
+CHECK_INCLUDE_FILES (stdarg.h HAVE_STDARG_H)
+CHECK_INCLUDE_FILES (stdargs.h HAVE_STDARGS_H)
+CHECK_INCLUDE_FILES (string.h HAVE_STRING_H)
+CHECK_INCLUDE_FILES (strings.h HAVE_STRINGS_H)
+CHECK_INCLUDE_FILES (sys/stat.h HAVE_STAT_H)
+CHECK_INCLUDE_FILES (unistd.h HAVE_UNISTD_H)
+CHECK_INCLUDE_FILES (varargs.h HAVE_VARARGS_H)
+CHECK_INCLUDE_FILES (windows.h HAVE_WINDOWS_H)
+
+#Check for the existence of various function calls
+INCLUDE( CheckFunctionExists )
+CHECK_FUNCTION_EXISTS(_close HAVE__CLOSE_F)
+CHECK_FUNCTION_EXISTS(fcntl HAVE_FCNTL_F)
+CHECK_FUNCTION_EXISTS(_fdopen HAVE__FDOPEN_F)
+CHECK_FUNCTION_EXISTS(fopen_s HAVE_FOPEN_S_F)
+CHECK_FUNCTION_EXISTS(_fsopen HAVE__FSOPEN_F)
+CHECK_FUNCTION_EXISTS(_fileno HAVE__FILENO_F)
+CHECK_FUNCTION_EXISTS(fork HAVE_FORK_F)
+CHECK_FUNCTION_EXISTS(_fseeki64 HAVE__FSEEKI64_F)
+CHECK_FUNCTION_EXISTS(fseeko HAVE_FSEEKO_F)
+CHECK_FUNCTION_EXISTS(ftruncate HAVE_FTRUNCATE_F)
+CHECK_FUNCTION_EXISTS(getenv_s HAVE_GETENV_S_F)
+
+CHECK_FUNCTION_EXISTS(_localtime64_s HAVE__LOCALTIME64_S_F)
+CHECK_FUNCTION_EXISTS(LockFile HAVE_LOCKFILE_F)
+CHECK_FUNCTION_EXISTS(locking HAVE_LOCKING_F)
+CHECK_FUNCTION_EXISTS(_locking HAVE__LOCKING_F)
+CHECK_FUNCTION_EXISTS(_open HAVE__OPEN_F)
+CHECK_FUNCTION_EXISTS(SetEndOfFile HAVE_SETENDOFFILE_F)
+
+CHECK_FUNCTION_EXISTS(vsnprintf HAVE_VSNPRINTF_F)
+CHECK_FUNCTION_EXISTS(_vsnprintf_s HAVE__VSNPRINTF_S_F)
+
+
+CHECK_FUNCTION_EXISTS(getopt HAVE_GETOPT_F)
+
+IF( WIN32 )
+
+# Use CHECK_SYMBOL_EXISTS for the Win32API instead of CHECK_FUNCTION_EXISTS
+# Can't detect inline functions in headers
+# Can't detect due to mismatch of calling conventions
+# Can't detect mangled names
+
+INCLUDE( CheckSymbolExists )
+CHECK_SYMBOL_EXISTS(CreateProcessW Windows.h HAVE_CREATEPROCESSW_F )
+CHECK_SYMBOL_EXISTS(vsprintf_s stdio.h HAVE_VSPRINTF_S_F )
+
+ENDIF ( WIN32 )
+
+# IF( NOT HAVE_SENTENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND BORLAND )
+# # ----fix me----
+# # cmake CHECK_FUNCTION_EXISTS - could not find Borland 5.5 SetEndOfFile
+# Set( HAVE_SETENDOFFILE_F "HAVE_SETENDOFFILE_H" )
+# ENDIF ( NOT HAVE_SENTENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND BORLAND )
+
+IF( NOT HAVE_SETENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND WIN32 )
+ # ----fix me----
+ # cmake CHECK_FUNCTION_EXISTS - could not find Borland 5.5, or Windows VS 32 bit SetEndOfFile
+ Set( HAVE_SETENDOFFILE_F "HAVE_SETENDOFFILE_F" )
+ENDIF ( NOT HAVE_SETENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND WIN32 )
+
+IF( XB_NDX_SUPPORT OR XB_MDX_SUPPORT )
+ Set( XB_INDEX_SUPPORT "1" )
+ENDIF( XB_NDX_SUPPORT OR XB_MDX_SUPPORT )
+
+
+# Set directories
+# PROJECT_PARENT_DIR is two nodes higher
+get_filename_component( PROJECT_PARENT_DIR ${PROJECT_BINARY_DIR} DIRECTORY )
+get_filename_component( PROJECT_PARENT_DIR ${PROJECT_PARENT_DIR} DIRECTORY )
+
+# MESSAGE( "PROJECT_PARENT_DIR = " ${PROJECT_PARENT_DIR} )
+# MESSAGE( "PROJECT_BINARY_DIR = " ${PROJECT_BINARY_DIR} )
+
+
+set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin )
+set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib )
+set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib )
+
+set( PROJECT_SOURCE_DIR ${PROJECT_PARENT_DIR}/src )
+set( PROJECT_DATA_DIR ${PROJECT_PARENT_DIR}/data )
+set( PROJECT_LOG_DIR ${PROJECT_PARENT_DIR}/logs )
+set( PROJECT_TEMP_DIR ${PROJECT_PARENT_DIR}/temp )
+set( EXTRA_LIBS ${EXTRA_LIBS} ${XB_LIBNAME} )
+
+
+# Undo bad decisions
+IF( XB_PLATFORM_32 AND XB_LARGEFILE_SUPPORT )
+ MESSAGE( "--- Can't build 64 bit environment with a 32 bit compiler" )
+ MESSAGE( "--- XB_LARGEFILE_SUPPORT set to OFF" )
+ set( XB_LARGEFILE_SUPPORT OFF CACHE BOOL "Use 64 bit large file support?" FORCE )
+ENDIF ( XB_PLATFORM_32 AND XB_LARGEFILE_SUPPORT )
+
+IF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
+ MESSAGE( "--- At lease one file format is required. Defaulting to Version 4" )
+ set( XB_DBF4_SUPPORT ON CACHE BOOL "Compile DBase File Format Version 4 support" FORCE )
+ENDIF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
+
+IF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+ MESSAGE( "--- Link List support required for DBF V4 Memo files. Setting to ON" )
+ set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
+ENDIF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+
+
+
+
+IF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+ MESSAGE( "--- Link List support required for locking functions. Setting to ON" )
+ set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
+ENDIF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+
+IF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+ MESSAGE( "--- MDX support required for Temporary indices. Setting to ON" )
+ set( XB_MDX_SUPPORT ON CACHE BOOL "Compile temporary index support into library" FORCE )
+ENDIF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+
+IF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+ MESSAGE( "--- Expression required for indices. Setting to ON" )
+ set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
+ Set( XB_INDEX_SUPPORT "1" )
+ENDIF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+
+IF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
+ MESSAGE( "--- Function support required for expressions. Setting to ON" )
+ set( XB_FUNCTION_SUPPORT ON CACHE BOOL "Compile XBase Function support into library" FORCE )
+ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
+
+IF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+ MESSAGE( "--- Linklist support required for expressions. Setting to ON" )
+ set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
+ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+
+IF( XB_SQL_SUPPORT AND NOT XB_MEMO_SUPPORT )
+ MESSAGE( "--- Memo support required for SQL. Setting to ON" )
+ set( XB_MEMO_SUPPORT ON CACHE BOOL "Compile memo field support into library" FORCE )
+ENDIF( XB_SQL_SUPPORT AND NOT XB_MEMO_SUPPORT )
+
+IF( XB_SQL_SUPPORT AND NOT XB_DBF4_SUPPORT )
+ MESSAGE( "--- DBF4 support required for SQL. Setting to ON" )
+ set( XB_DBF4_SUPPORT ON CACHE BOOL "Compile DBase File Format Version 4 support" FORCE )
+ENDIF( XB_SQL_SUPPORT AND NOT XB_DBF4_SUPPORT )
+
+IF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+ MESSAGE( "--- Expression required for filters. Setting to ON" )
+ set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
+ENDIF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+
+IF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
+ MESSAGE( "--- BLOCKREAD support required for SQL. Setting to ON" )
+ set( XB_BLOCKREAD_SUPPORT ON CACHE BOOL "Compile Block Read support into library" FORCE )
+ENDIF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
+
+IF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+ MESSAGE( "--- MDX support required for Temporary indices. Setting to ON" )
+ set( XB_MDX_SUPPORT ON CACHE BOOL "Compile temporary index support into library" FORCE )
+ENDIF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+
+
+
+# Build configuration header file
+configure_file (
+ "${PROJECT_SOURCE_DIR}/include/xbconfig.h.in"
+ "${PROJECT_BINARY_DIR}/include/xbconfig.h"
+)
+
+# Microsoft Windows compiler settings
+IF( MSVC )
+# add_definitions( /D_CRT_SECURE_NO_WARNINGS)
+ add_definitions( /EHsc )
+ENDIF( MSVC )
+
+
+# set up include directories
+include_directories( "${PROJECT_BINARY_DIR}/include" )
+include_directories( "${PROJECT_SOURCE_DIR}/include" )
+
+#build the library
+IF ( BUILD_SHARED_LIBS )
+ set( LIB_TYPE SHARED )
+ELSE( BUILD_SHARED_LIBS )
+ set( LIB_TYPE STATIC )
+ENDIF( BUILD_SHARED_LIBS )
+MESSAGE( "--- Lib type " ${LIB_TYPE} )
+
+
+
+set (SOURCES ${PROJECT_SOURCE_DIR}/core/xbstring.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbssv.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbdate.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbtblmgr.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbxbase.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbfile.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbdbf.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbfields.cpp
+ ${PROJECT_SOURCE_DIR}/core/xblog.cpp)
+
+IF( XB_MEMO_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo.cpp )
+ENDIF( XB_MEMO_SUPPORT )
+
+IF( XB_DBF3_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbdbf3.cpp )
+ IF( XB_MEMO_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo3.cpp )
+ ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF3_SUPPORT )
+
+IF( XB_DBF4_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbdbf4.cpp )
+ IF( XB_MEMO_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo4.cpp )
+ ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF4_SUPPORT )
+
+IF( XB_FUNCTION_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbfuncs.cpp )
+ENDIF( XB_FUNCTION_SUPPORT )
+
+IF( XB_EXPRESSION_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbexpnode.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbexp.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbuda.cpp )
+ENDIF( XB_EXPRESSION_SUPPORT )
+
+IF( XB_INDEX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbbcd.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixbase.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbtag.cpp )
+ENDIF( XB_INDEX_SUPPORT )
+
+IF( XB_NDX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixndx.cpp )
+ENDIF( XB_NDX_SUPPORT )
+
+
+IF( XB_MDX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixmdx.cpp )
+ENDIF( XB_MDX_SUPPORT )
+
+IF( XB_TDX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixtdx.cpp )
+ENDIF( XB_TDX_SUPPORT )
+
+
+IF( XB_SQL_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbalttbl.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrix.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrtbl.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdelete.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdrpix.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdrptbl.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbinsert.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbset.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbsql.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbstmt.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbselect.cpp )
+ENDIF( XB_SQL_SUPPORT )
+
+
+IF( XB_FILTER_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbfilter.cpp )
+ENDIF( XB_FILTER_SUPPORT )
+
+IF( XB_BLOCKREAD_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbblockread.cpp )
+ENDIF( XB_BLOCKREAD_SUPPORT )
+
+
+include( GenerateExportHeader )
+#add_library( xbase ${LIB_TYPE} ${SOURCES} )
+add_library( ${XB_LIBNAME} ${LIB_TYPE} ${SOURCES} )
+#add_library( ${CMAKE_PROJECT_NAME} ${LIB_TYPE} ${SOURCES} )
+
+
+IF( WIN32 )
+MESSAGE( "--- Generating Windows Library Headers" )
+
+#GENERATE_EXPORT_HEADER( xbase
+# BASE_NAME xbase
+
+GENERATE_EXPORT_HEADER( ${XB_LIBNAME}
+ BASE_NAME ${XB_LIBNAME}
+ EXPORT_MACRO_NAME xbase_EXPORT
+ EXPORT_FILE_NAME xbase_Export.h
+ STATIC_DEFINE xbase_BUILT_AS_STATIC
+)
+ENDIF( WIN32 )
+
+
+#build test programs
+enable_testing()
+
+add_executable( xb_test_string ${PROJECT_SOURCE_DIR}/tests/xb_test_string.cpp )
+target_link_libraries( xb_test_string ${EXTRA_LIBS})
+add_test( NAME xbString COMMAND xb_test_string QUIET )
+
+add_executable( xb_test_date ${PROJECT_SOURCE_DIR}/tests/xb_test_date.cpp )
+target_link_libraries( xb_test_date ${EXTRA_LIBS})
+add_test( NAME xbDate COMMAND xb_test_date QUIET )
+
+add_executable( xb_test_tblmgr ${PROJECT_SOURCE_DIR}/tests/xb_test_tblmgr.cpp )
+target_link_libraries( xb_test_tblmgr ${EXTRA_LIBS})
+add_test( NAME xbTblMgr COMMAND xb_test_tblmgr QUIET )
+
+add_executable( xb_test_xbase ${PROJECT_SOURCE_DIR}/tests/xb_test_xbase.cpp )
+target_link_libraries( xb_test_xbase ${EXTRA_LIBS})
+add_test( NAME xbXBase COMMAND xb_test_xbase QUIET )
+
+add_executable( xb_test_file ${PROJECT_SOURCE_DIR}/tests/xb_test_file.cpp )
+target_link_libraries( xb_test_file ${EXTRA_LIBS})
+add_test( NAME xbFile COMMAND xb_test_file QUIET )
+
+add_executable( xb_test_log ${PROJECT_SOURCE_DIR}/tests/xb_test_log.cpp )
+target_link_libraries( xb_test_log ${EXTRA_LIBS})
+add_test( NAME xbLog COMMAND xb_test_log QUIET )
+
+IF( XB_LINKLIST_SUPPORT )
+add_executable( xb_test_linklist ${PROJECT_SOURCE_DIR}/tests/xb_test_linklist.cpp )
+target_link_libraries( xb_test_linklist ${EXTRA_LIBS})
+add_test( NAME xbLinkList COMMAND xb_test_linklist QUIET )
+ENDIF( XB_LINKLIST_SUPPORT )
+
+IF( XB_DBF3_SUPPORT )
+add_executable( xb_test_dbf_v3_nomemos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v3_nomemos.cpp )
+target_link_libraries( xb_test_dbf_v3_nomemos ${EXTRA_LIBS})
+add_test( NAME xbDbfV3NoMemos COMMAND xb_test_dbf_v3_nomemos QUIET )
+
+IF( XB_MEMO_SUPPORT )
+add_executable( xb_test_dbf_v3_memos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v3_memos.cpp )
+target_link_libraries( xb_test_dbf_v3_memos ${EXTRA_LIBS})
+add_test( NAME xbDbfV3Memos COMMAND xb_test_dbf_v3_memos QUIET )
+
+ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF3_SUPPORT )
+
+IF( XB_DBF4_SUPPORT )
+add_executable( xb_test_dbf_v4_nomemos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v4_nomemos.cpp )
+target_link_libraries( xb_test_dbf_v4_nomemos ${EXTRA_LIBS})
+add_test( NAME xbDbfV4NoMemos COMMAND xb_test_dbf_v4_nomemos QUIET )
+
+IF( XB_MEMO_SUPPORT )
+add_executable( xb_test_dbf_v4_memos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v4_memos.cpp )
+target_link_libraries( xb_test_dbf_v4_memos ${EXTRA_LIBS})
+add_test( NAME xbDbfV4Memos COMMAND xb_test_dbf_v4_memos QUIET )
+
+ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF4_SUPPORT )
+
+IF( XB_FUNCTION_SUPPORT )
+add_executable( xb_test_funcs ${PROJECT_SOURCE_DIR}/tests/xb_test_funcs.cpp )
+target_link_libraries( xb_test_funcs ${EXTRA_LIBS})
+add_test( NAME xbFunctions COMMAND xb_test_funcs QUIET )
+ENDIF( XB_FUNCTION_SUPPORT )
+
+IF( XB_NDX_SUPPORT )
+IF( XB_DBF3_SUPPORT )
+add_executable( xb_test_ndx ${PROJECT_SOURCE_DIR}/tests/xb_test_ndx.cpp )
+target_link_libraries( xb_test_ndx ${EXTRA_LIBS})
+add_test( NAME xbIxNdx COMMAND xb_test_ndx QUIET )
+ENDIF( XB_DBF3_SUPPORT )
+ENDIF( XB_NDX_SUPPORT )
+
+
+
+IF( XB_DBF4_SUPPORT )
+
+IF( XB_MDX_SUPPORT )
+add_executable( xb_test_mdx ${PROJECT_SOURCE_DIR}/tests/xb_test_mdx.cpp )
+target_link_libraries( xb_test_mdx ${EXTRA_LIBS})
+add_test( NAME xbIxMdx COMMAND xb_test_mdx QUIET )
+ENDIF( XB_MDX_SUPPORT )
+
+IF( XB_TDX_SUPPORT )
+add_executable( xb_test_tdx ${PROJECT_SOURCE_DIR}/tests/xb_test_tdx.cpp )
+target_link_libraries( xb_test_tdx ${EXTRA_LIBS})
+add_test( NAME xbIxTdx COMMAND xb_test_tdx QUIET )
+ENDIF( XB_TDX_SUPPORT )
+
+ENDIF( XB_DBF4_SUPPORT )
+
+
+
+IF( XB_INDEX_SUPPORT )
+add_executable( xb_test_bcd ${PROJECT_SOURCE_DIR}/tests/xb_test_bcd.cpp )
+target_link_libraries( xb_test_bcd ${EXTRA_LIBS})
+add_test( NAME xbBcd COMMAND xb_test_bcd QUIET )
+ENDIF( XB_INDEX_SUPPORT )
+
+
+IF( XB_EXPRESSION_SUPPORT )
+
+add_executable( xb_test_expnode ${PROJECT_SOURCE_DIR}/tests/xb_test_expnode.cpp )
+target_link_libraries( xb_test_expnode ${EXTRA_LIBS})
+add_test( NAME xbExpNode COMMAND xb_test_expnode QUIET )
+
+
+add_executable( xb_test_expression ${PROJECT_SOURCE_DIR}/tests/xb_test_expression.cpp )
+target_link_libraries( xb_test_expression ${EXTRA_LIBS})
+add_test( NAME xbExpressions COMMAND xb_test_expression QUIET )
+
+add_executable( xb_test_uda ${PROJECT_SOURCE_DIR}/tests/xb_test_uda.cpp )
+target_link_libraries( xb_test_uda ${EXTRA_LIBS})
+add_test( NAME xbUda COMMAND xb_test_uda QUIET )
+
+ENDIF( XB_EXPRESSION_SUPPORT )
+
+IF( XB_SQL_SUPPORT )
+add_executable( xb_test_sql ${PROJECT_SOURCE_DIR}/tests/xb_test_sql.cpp )
+target_link_libraries( xb_test_sql ${EXTRA_LIBS})
+add_test( NAME xbSql COMMAND xb_test_sql QUIET )
+ENDIF( XB_SQL_SUPPORT )
+
+IF( XB_FILTER_SUPPORT )
+add_executable( xb_test_filter ${PROJECT_SOURCE_DIR}/tests/xb_test_filter.cpp )
+target_link_libraries( xb_test_filter ${EXTRA_LIBS})
+add_test( NAME xbFilter COMMAND xb_test_filter QUIET )
+ENDIF( XB_FILTER_SUPPORT )
+
+IF( XB_BLOCKREAD_SUPPORT )
+add_executable( xb_test_blockread ${PROJECT_SOURCE_DIR}/tests/xb_test_blockread.cpp )
+target_link_libraries( xb_test_blockread ${EXTRA_LIBS})
+add_test( NAME xbBlockRead COMMAND xb_test_blockread QUIET )
+ENDIF( XB_BLOCKREAD_SUPPORT )
+
+
+IF( XB_LOCKING_SUPPORT )
+add_executable( xb_test_lock ${PROJECT_SOURCE_DIR}/tests/xb_test_lock.cpp )
+target_link_libraries( xb_test_lock ${EXTRA_LIBS})
+add_test( NAME xbLock COMMAND xb_test_lock QUIET )
+IF( HAVE_CREATEPROCESSW_F )
+add_executable( xb_test_lock2 ${PROJECT_SOURCE_DIR}/tests/xb_test_lock2.cpp )
+target_link_libraries( xb_test_lock2 ${EXTRA_LIBS})
+ENDIF( HAVE_CREATEPROCESSW_F )
+ENDIF( XB_LOCKING_SUPPORT )
+
+#build example programs
+IF( XB_EXAMPLES_SUPPORT )
+ add_executable( xb_ex_string ${PROJECT_SOURCE_DIR}/examples/xb_ex_string.cpp )
+ target_link_libraries( xb_ex_string ${EXTRA_LIBS})
+
+ add_executable( xb_ex_date ${PROJECT_SOURCE_DIR}/examples/xb_ex_date.cpp )
+ target_link_libraries( xb_ex_date ${EXTRA_LIBS})
+
+ IF( XB_DBF3_SUPPORT )
+ add_executable( xb_ex_v3_create_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v3_create_dbf.cpp )
+ target_link_libraries( xb_ex_v3_create_dbf ${EXTRA_LIBS})
+
+ add_executable( xb_ex_v3_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v3_upd_dbf.cpp )
+ target_link_libraries( xb_ex_v3_upd_dbf ${EXTRA_LIBS})
+ ENDIF( XB_DBF3_SUPPORT )
+
+ IF( XB_DBF4_SUPPORT )
+ add_executable( xb_ex_v4_create_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_create_dbf.cpp )
+ target_link_libraries( xb_ex_v4_create_dbf ${EXTRA_LIBS})
+ ENDIF( XB_DBF4_SUPPORT )
+
+ IF( XB_EXPRESSION_SUPPORT )
+ add_executable( xb_ex_expression ${PROJECT_SOURCE_DIR}/examples/xb_ex_expression.cpp )
+ target_link_libraries( xb_ex_expression ${EXTRA_LIBS})
+ ENDIF( XB_EXPRESSION_SUPPORT )
+
+ add_executable( xb_ex_v4_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_upd_dbf.cpp )
+ target_link_libraries( xb_ex_v4_upd_dbf ${EXTRA_LIBS})
+
+ add_executable( xb_ex_ssv ${PROJECT_SOURCE_DIR}/examples/xb_ex_ssv.cpp )
+ target_link_libraries( xb_ex_ssv ${EXTRA_LIBS})
+
+ IF( XB_LOGGING_SUPPORT )
+ add_executable( xb_ex_log ${PROJECT_SOURCE_DIR}/examples/xb_ex_log.cpp )
+ target_link_libraries( xb_ex_log ${EXTRA_LIBS})
+ ENDIF( XB_LOGGING_SUPPORT )
+
+ENDIF( XB_EXAMPLES_SUPPORT )
+
+#build utility programs
+IF( XB_UTILS_SUPPORT )
+
+ add_executable( xb_cfg_check ${PROJECT_SOURCE_DIR}/utils/xb_cfg_check.cpp )
+ target_link_libraries( xb_cfg_check ${EXTRA_LIBS})
+
+ add_executable( xb_copydbf ${PROJECT_SOURCE_DIR}/utils/xb_copydbf.cpp )
+ target_link_libraries( xb_copydbf ${EXTRA_LIBS})
+
+ add_executable( xb_dbfutil ${PROJECT_SOURCE_DIR}/utils/xb_dbfutil.cpp )
+ target_link_libraries( xb_dbfutil ${EXTRA_LIBS})
+
+ add_executable( xb_deletall ${PROJECT_SOURCE_DIR}/utils/xb_deletall.cpp )
+ target_link_libraries( xb_deletall ${EXTRA_LIBS})
+
+ add_executable( xb_dumpdbt ${PROJECT_SOURCE_DIR}/utils/xb_dumpdbt.cpp )
+ target_link_libraries( xb_dumpdbt ${EXTRA_LIBS})
+
+ add_executable( xb_dumprecs ${PROJECT_SOURCE_DIR}/utils/xb_dumprecs.cpp )
+ target_link_libraries( xb_dumprecs ${EXTRA_LIBS})
+
+ add_executable( xb_import ${PROJECT_SOURCE_DIR}/utils/xb_import.cpp )
+ target_link_libraries( xb_import ${EXTRA_LIBS})
+
+ add_executable( xb_tblinfo ${PROJECT_SOURCE_DIR}/utils/xb_tblinfo.cpp )
+ target_link_libraries( xb_tblinfo ${EXTRA_LIBS})
+
+ IF( XB_SQL_SUPPORT )
+ add_executable( xb_execsql ${PROJECT_SOURCE_DIR}/utils/xb_execsql.cpp )
+ target_link_libraries( xb_execsql ${EXTRA_LIBS})
+ ENDIF( XB_SQL_SUPPORT )
+
+ add_executable( xb_pack ${PROJECT_SOURCE_DIR}/utils/xb_pack.cpp )
+ target_link_libraries( xb_pack ${EXTRA_LIBS})
+
+ add_executable( xb_undelall ${PROJECT_SOURCE_DIR}/utils/xb_undelall.cpp )
+ target_link_libraries( xb_undelall ${EXTRA_LIBS})
+
+ install (TARGETS xb_cfg_check DESTINATION bin)
+ install (TARGETS xb_copydbf DESTINATION bin)
+ install (TARGETS xb_dbfutil DESTINATION bin)
+ install (TARGETS xb_deletall DESTINATION bin)
+ install (TARGETS xb_dumpdbt DESTINATION bin)
+ install (TARGETS xb_dumprecs DESTINATION bin)
+ install (TARGETS xb_import DESTINATION bin)
+ install (TARGETS xb_pack DESTINATION bin)
+ install (TARGETS xb_undelall DESTINATION bin)
+ IF( XB_SQL_SUPPORT )
+ install (TARGETS xb_execsql DESTINATION bin)
+ ENDIF( XB_SQL_SUPPORT )
+
+
+
+ENDIF( XB_UTILS_SUPPORT )
+
+install (FILES ${PROJECT_BINARY_DIR}/include/xbconfig.h
+ ${PROJECT_SOURCE_DIR}/include/xbase.h
+ ${PROJECT_SOURCE_DIR}/include/xbbcd.h
+ ${PROJECT_SOURCE_DIR}/include/xbblkread.h
+ ${PROJECT_SOURCE_DIR}/include/xbdate.h
+ ${PROJECT_SOURCE_DIR}/include/xbdbf.h
+ ${PROJECT_SOURCE_DIR}/include/xbexp.h
+ ${PROJECT_SOURCE_DIR}/include/xbexpnode.h
+ ${PROJECT_SOURCE_DIR}/include/xbfile.h
+ ${PROJECT_SOURCE_DIR}/include/xbfilter.h
+ ${PROJECT_SOURCE_DIR}/include/xbindex.h
+ ${PROJECT_SOURCE_DIR}/include/xblnklst.h
+ ${PROJECT_SOURCE_DIR}/include/xblnklstord.h
+ ${PROJECT_SOURCE_DIR}/include/xblnknod.h
+ ${PROJECT_SOURCE_DIR}/include/xblog.h
+ ${PROJECT_SOURCE_DIR}/include/xbmemo.h
+ ${PROJECT_SOURCE_DIR}/include/xbretcod.h
+ ${PROJECT_SOURCE_DIR}/include/xbsql.h
+ ${PROJECT_SOURCE_DIR}/include/xbssv.h
+ ${PROJECT_SOURCE_DIR}/include/xbstring.h
+ ${PROJECT_SOURCE_DIR}/include/xbtag.h
+ ${PROJECT_SOURCE_DIR}/include/xbtblmgr.h
+ ${PROJECT_SOURCE_DIR}/include/xbtypes.h
+ ${PROJECT_SOURCE_DIR}/include/xbuda.h
+ ${PROJECT_SOURCE_DIR}/include/xbxbase.h
+ DESTINATION include/${CMAKE_PROJECT_NAME})
+
+IF( NOT WIN32 )
+install (FILES ${PROJECT_PARENT_DIR}/docs/man/xb_cfg_chk.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_copydbf.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dbfutil.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_deletall.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dumpdbt.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dumprecs.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_import.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_pack.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_tblinfo.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_undelall.1.gz
+
+ DESTINATION man/man1)
+
+ENDIF( NOT WIN32 )
+
+
+SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.1.4 SOVERSION 0 )
+
+IF( WIN32 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION bin)
+ELSE( WIN32 )
+ IF( EXISTS /usr/local/lib64 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION lib64/${CMAKE_PROJECT_NAME})
+ ELSE( EXISTS /usr/local/lib64 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION lib/${CMAKE_PROJECT_NAME})
+ ENDIF( EXISTS /usr/local/lib64 )
+ENDIF( WIN32 )
diff --git a/build/borland5.5/CleanBorland.bat b/1Tdata/xbase/xbase64-4.1.4/build/borland5.5/CleanBorland.bat
index eed30b7..eed30b7 100755
--- a/build/borland5.5/CleanBorland.bat
+++ b/1Tdata/xbase/xbase64-4.1.4/build/borland5.5/CleanBorland.bat
diff --git a/1Tdata/xbase/xbase64-4.1.4/build/borland5.5/README.borland5_5 b/1Tdata/xbase/xbase64-4.1.4/build/borland5.5/README.borland5_5
new file mode 100644
index 0000000..849614b
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/build/borland5.5/README.borland5_5
@@ -0,0 +1,29 @@
+
+3/26/23
+
+Install steps for Xbase64 with Borland compiler version 5.5
+
+1) Verify cmake is installed with command: cmake --version
+ If it is not installed, take necessary steps to install it.
+
+2) Verify gcc is intalled with the command: gcc --version
+ If it is not installed, execute the following commands:
+
+
+3) Build xbase64 library
+
+ cd build/borland5.5 (go to the appropriate build directory)
+ BuildBorland.bat (configure and compile for your environment)
+ make test (test library build)
+
+ sudo make install (install it)
+ xb_cfg_chk (test install)
+
+ if xb_cg-chk does not execute, add "C:\Program Files\xbase64\bin"
+ to the path.
+
+
+Also of note:
+
+ CleanBorland.bat - initializes the borland5.5 build library
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/build/debian/CMakeLists.txt b/1Tdata/xbase/xbase64-4.1.4/build/debian/CMakeLists.txt
new file mode 100755
index 0000000..ce2566a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/build/debian/CMakeLists.txt
@@ -0,0 +1,809 @@
+cmake_minimum_required(VERSION 3.2)
+
+project (Xbase64)
+set( xbase_VERSION_MAJOR 4 )
+set( xbase_VERSION_MINOR 1 )
+set( xbase_VERSION_PATCH 4 )
+
+MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
+MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
+MESSAGE( "--- Project Name: " ${CMAKE_PROJECT_NAME} )
+MESSAGE( "--- Install Prefix: " ${CMAKE_INSTALL_PREFIX} )
+
+#Set compiler options
+
+IF( CMAKE_COMPILER_IS_GNUCXX )
+ MESSAGE( "Setting GNU compiler options" )
+ add_compile_options( -Wall -Wsign-conversion )
+# add_compile_options( -Wall -Wconversion -Wsign-conversion )
+ SET( VERBOSE 1 )
+ENDIF( CMAKE_COMPILER_IS_GNUCXX )
+
+IF( BORLAND )
+ MESSAGE ("BORLAND COMPILER" )
+ #set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w-8022" )
+ add_compile_options( -w-8022 )
+ENDIF( BORLAND )
+
+MESSAGE( "--- Checking integer sizes" )
+INCLUDE(CheckTypeSize)
+CHECK_TYPE_SIZE( "short int" SHORT_INT )
+CHECK_TYPE_SIZE( int INT )
+CHECK_TYPE_SIZE( __int32 __INT32 )
+CHECK_TYPE_SIZE( int32_t INT32_T )
+CHECK_TYPE_SIZE( long LONG_INT )
+CHECK_TYPE_SIZE( __int64 __INT64 )
+CHECK_TYPE_SIZE( int64_t INT64_T )
+CHECK_TYPE_SIZE( "long long" LONG_LONG )
+CHECK_TYPE_SIZE( u_int64_t U_INT64_T )
+CHECK_TYPE_SIZE( uint64_t UINT64_T )
+CHECK_TYPE_SIZE( "unsigned __int64" UNSIGNED__INT64 )
+CHECK_TYPE_SIZE( "unsigned long long" UNSIGNED_LONG_LONG )
+
+CHECK_TYPE_SIZE( "double" DOUBLE )
+MESSAGE( "--- Double size = " ${DOUBLE} )
+
+
+#determine how 16 bit integer defined on this platform
+SET( iSize 0 )
+IF( HAVE_SHORT_INT AND ${SHORT_INT} EQUAL 2 )
+ SET( xbInt16 "short int" )
+ SET( xbUInt16 "unsigned short int" )
+ SET( iSize ${SHORT_INT} )
+ MESSAGE( "--- xbInt16 = [short int]" )
+ MESSAGE( "--- xbUInt16 = [unsigned short int]" )
+
+ENDIF( HAVE_SHORT_INT AND ${SHORT_INT} EQUAL 2 )
+IF( NOT ${iSize} EQUAL 2 )
+ MESSAGE( "FATAL_ERROR Could not detect 16 bit integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 2 )
+
+#determine how 32 bit integer defined on this platform
+SET( iSize 0 )
+IF( HAVE_INT AND ${INT} EQUAL 4 )
+ SET( xbInt32 int )
+ SET( xbUInt32 "unsigned int" )
+ SET( iSize ${INT} )
+ MESSAGE( "--- xbInt32 = [int]" )
+ MESSAGE( "--- xbUInt32 = [unsigned int]" )
+ENDIF( HAVE_INT AND ${INT} EQUAL 4 )
+
+IF(( NOT iSize EQUAL 4 ) AND HAVE___INT32 )
+ MESSAGE( __int untested if block - see CMakeLists.txt)
+ SET( xbInt32 __int32 )
+ SET( xbUInt32 "unsigned __int32" )
+ SET( iSize ${__INT} )
+ MESSAGE( "--- xbInt32 = [__int]" )
+ MESSAGE( "--- xbUInt32 = [unsigned __int]" )
+ENDIF(( NOT iSize EQUAL 4 ) AND HAVE___INT32 )
+
+IF(( NOT iSize EQUAL 4 ) AND HAVE_INT32_T )
+ SET( xbInt32 int32_t )
+ SET( xbUInt32 "u_int32_t" )
+ SET( iSize ${INT32_T} )
+ MESSAGE( "--- xbInt32 = [int32_t]" )
+ MESSAGE( "--- xbUInt32 = [u_int32_t]" )
+ENDIF(( NOT iSize EQUAL 4 ) AND HAVE_INT32_T )
+
+IF( NOT ${iSize} EQUAL 4 )
+ MESSAGE( "FATAL_ERROR Could not detect 32 bit integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 4 )
+
+#determine how 64 bit integer defined on this platform
+SET( iSize 0 )
+IF( HAVE___INT64 )
+ SET( xbInt64 __int64 )
+ SET( iSize ${__INT64} )
+ MESSAGE( "--- xbInt64 = [__int64]" )
+ENDIF( HAVE___INT64 )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_INT64_T )
+ SET( xbInt64 int64_t )
+ SET( iSize ${INT64_T} )
+ MESSAGE( "--- xbInt64 = [int64_t]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_INT64_T )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_LONG_LONG )
+ SET( xbInt64 "long long" )
+ SET( iSize ${LONG_LONG} )
+ MESSAGE( "--- xbInt64 = [long long]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_LONG_LONG )
+
+IF( NOT ${iSize} EQUAL 8 )
+ MESSAGE( "FATAL_ERROR Could not detect 64 bit integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 8 )
+
+#determine how 64 bit unsigned integer defined on this platform
+SET( iSize 0 )
+IF( HAVE_UNSIGNED__INT64 )
+ SET( xbUInt64 "unsigned __int64" )
+ SET( iSize ${UNSIGNED__INT64} )
+ MESSAGE( "--- xbUInt64 = [unsigned __int64]" )
+ENDIF( HAVE_UNSIGNED__INT64 )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_UINT64_T )
+ SET( xbUInt64 "uint64_t" )
+ SET( iSize ${UINT64_T} )
+ MESSAGE( "--- xbUInt64 = [uint64_t]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_UINT64_T )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_U_INT64_T )
+ SET( xbUInt64 u_int64_t )
+ SET( iSize ${U_INT64_T} )
+ MESSAGE( "--- xbUInt64 = [u_int64_t]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_U_INT64_T )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_UNSIGNED_LONG_LONG )
+ SET( xbUInt64 "unsigned long long" )
+ SET( iSize ${UNSIGNED_LONG_LONG} )
+ MESSAGE( "--- xbUInt64 = [unsigned long long]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_UNSIGNED_LONG_LONG )
+
+IF( NOT ${iSize} EQUAL 8 )
+ MESSAGE( "FATAL_ERROR Could not detect 64 bit unsigned integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 8 )
+
+#Library options
+option( BUILD_SHARED_LIBS "Build shared libraries" ON)
+option( XB_DBF3_SUPPORT "Compile DBase File Format Version 3 support" ON)
+option( XB_DBF4_SUPPORT "Compile DBase File Format Version 4 support" ON)
+option( XB_MEMO_SUPPORT "Compile memo field support into library" ON)
+option( XB_NDX_SUPPORT "Compile NDX Index support into library" ON)
+option( XB_MDX_SUPPORT "Compile MDX Index support into library" ON)
+option( XB_LOCKING_SUPPORT "Compile Multi User Locking support into library" ON)
+option( XB_TDX_SUPPORT "Compile temporary index support into library" ON)
+
+option( XB_LOGGING_SUPPORT "Compile message logging support into library" ON)
+option( XB_LINKLIST_SUPPORT "Compile Link List routines into library" ON)
+option( XB_FUNCTION_SUPPORT "Compile XBase Function support into library" ON)
+option( XB_EXPRESSION_SUPPORT "Compile Expression support into library" ON)
+option( XB_INF_SUPPORT "Compile NDX INF file support into library" ON)
+option( XB_FILTER_SUPPORT "Compile Filter support into library" ON)
+option( XB_BLOCKREAD_SUPPORT "Compile Block Read support into library" ON)
+option( XB_SQL_SUPPORT "Compile SQL support into library - alpha" ON)
+option( XB_DEBUG_SUPPORT "Compile debug logic into library" ON)
+option( XB_UTILS_SUPPORT "Compile utility programs" ON)
+option( XB_EXAMPLES_SUPPORT "Compile example programs" ON)
+
+Message( "--- BUILD_SHARED_LIBS " ${BUILD_SHARED_LIBS})
+Message( "--- XB_DBF3_SUPPORT " ${XB_DBF3_SUPPORT})
+Message( "--- XB_DBF4_SUPPORT " ${XB_DBF4_SUPPORT})
+Message( "--- XB_MEMO_SUPPORT " ${XB_MEMO_SUPPORT})
+Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
+Message( "--- XB_MDX_SUPPORT " ${XB_MDX_SUPPORT})
+Message( "--- XB_TDX_SUPPORT " ${XB_TDX_SUPPORT})
+Message( "--- XB_LOCKING_SUPPORT " ${XB_LOCKING_SUPPORT})
+Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
+Message( "--- XB_FUNCTION_SUPPORT " ${XB_FUNCTION_SUPPORT})
+Message( "--- XB_EXPRESSION_SUPPORT " ${XB_EXPRESSION_SUPPORT})
+Message( "--- XB_FILTER_SUPPORT " ${XB_FILTER_SUPPORT})
+Message( "--- XB_DEBUG_SUPPORT " ${XB_DEBUG_SUPPORT})
+Message( "--- XB_UTILS_SUPPORT " ${XB_UTILS_SUPPORT})
+Message( "--- XB_EXAMPLES_SUPPORT " ${XB_EXAMPLES_SUPPORT})
+Message( "--- XB_LOGGING_SUPPORT " ${XB_LOGGING_SUPPORT})
+Message( "--- XB_SQL_SUPPORT " ${XB_SQL_SUPPORT})
+Message( "--- XB_INF_SUPPORT " ${XB_INF_SUPPORT})
+Message( "--- XB_BLOCKREAD_SUPPORT " ${XB_BLOCKREAD_SUPPORT})
+
+IF( XB_DEBUG_SUPPORT )
+ Message( "--- Adding debug support" )
+ set( CMAKE_BUILD_TYPE Debug )
+IF( CMAKE_COMPILER_IS_GNUCXX )
+ add_compile_options( -Og )
+ENDIF( CMAKE_COMPILER_IS_GNUCXX )
+ENDIF( XB_DEBUG_SUPPORT )
+
+IF( CMAKE_SIZEOF_VOID_P EQUAL 8 )
+ MESSAGE( "--- 64 bit compiler detected" )
+ set( XB_PLATFORM "x64" )
+ set( XB_PLATFORM_64 1 )
+ set( XB_LIBNAME "xbase64" )
+
+ELSE( CMAKE_SIZEOF_VOID_P EQUAL 8 )
+ MESSAGE( "--- 32 bit compiler detected" )
+ set( XB_PLATFORM "x86" )
+ set( XB_PLATFORM_32 1 )
+ set( XB_LIBNAME "xbase32" )
+
+ENDIF( CMAKE_SIZEOF_VOID_P EQUAL 8 )
+
+
+#Check for the existence of various header files
+INCLUDE (CheckIncludeFiles)
+CHECK_INCLUDE_FILES (ctype.h HAVE_CTYPE_H)
+CHECK_INCLUDE_FILES (dirent.h HAVE_DIRENT_H)
+CHECK_INCLUDE_FILES (fcntl.h HAVE_FCNTL_H)
+CHECK_INCLUDE_FILES (inttypes.h HAVE_INTTYPES_H)
+CHECK_INCLUDE_FILES (pwd.h HAVE_PWD_H)
+CHECK_INCLUDE_FILES (stdarg.h HAVE_STDARG_H)
+CHECK_INCLUDE_FILES (stdargs.h HAVE_STDARGS_H)
+CHECK_INCLUDE_FILES (string.h HAVE_STRING_H)
+CHECK_INCLUDE_FILES (strings.h HAVE_STRINGS_H)
+CHECK_INCLUDE_FILES (sys/stat.h HAVE_STAT_H)
+CHECK_INCLUDE_FILES (unistd.h HAVE_UNISTD_H)
+CHECK_INCLUDE_FILES (varargs.h HAVE_VARARGS_H)
+CHECK_INCLUDE_FILES (windows.h HAVE_WINDOWS_H)
+
+#Check for the existence of various function calls
+INCLUDE( CheckFunctionExists )
+CHECK_FUNCTION_EXISTS(_close HAVE__CLOSE_F)
+CHECK_FUNCTION_EXISTS(fcntl HAVE_FCNTL_F)
+CHECK_FUNCTION_EXISTS(_fdopen HAVE__FDOPEN_F)
+CHECK_FUNCTION_EXISTS(fopen_s HAVE_FOPEN_S_F)
+CHECK_FUNCTION_EXISTS(_fsopen HAVE__FSOPEN_F)
+CHECK_FUNCTION_EXISTS(_fileno HAVE__FILENO_F)
+CHECK_FUNCTION_EXISTS(fork HAVE_FORK_F)
+CHECK_FUNCTION_EXISTS(_fseeki64 HAVE__FSEEKI64_F)
+CHECK_FUNCTION_EXISTS(fseeko HAVE_FSEEKO_F)
+CHECK_FUNCTION_EXISTS(ftruncate HAVE_FTRUNCATE_F)
+CHECK_FUNCTION_EXISTS(getenv_s HAVE_GETENV_S_F)
+
+CHECK_FUNCTION_EXISTS(_localtime64_s HAVE__LOCALTIME64_S_F)
+CHECK_FUNCTION_EXISTS(LockFile HAVE_LOCKFILE_F)
+CHECK_FUNCTION_EXISTS(locking HAVE_LOCKING_F)
+CHECK_FUNCTION_EXISTS(_locking HAVE__LOCKING_F)
+CHECK_FUNCTION_EXISTS(_open HAVE__OPEN_F)
+CHECK_FUNCTION_EXISTS(SetEndOfFile HAVE_SETENDOFFILE_F)
+
+CHECK_FUNCTION_EXISTS(vsnprintf HAVE_VSNPRINTF_F)
+CHECK_FUNCTION_EXISTS(_vsnprintf_s HAVE__VSNPRINTF_S_F)
+
+
+CHECK_FUNCTION_EXISTS(getopt HAVE_GETOPT_F)
+
+IF( WIN32 )
+
+# Use CHECK_SYMBOL_EXISTS for the Win32API instead of CHECK_FUNCTION_EXISTS
+# Can't detect inline functions in headers
+# Can't detect due to mismatch of calling conventions
+# Can't detect mangled names
+
+INCLUDE( CheckSymbolExists )
+CHECK_SYMBOL_EXISTS(CreateProcessW Windows.h HAVE_CREATEPROCESSW_F )
+CHECK_SYMBOL_EXISTS(vsprintf_s stdio.h HAVE_VSPRINTF_S_F )
+
+ENDIF ( WIN32 )
+
+# IF( NOT HAVE_SENTENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND BORLAND )
+# # ----fix me----
+# # cmake CHECK_FUNCTION_EXISTS - could not find Borland 5.5 SetEndOfFile
+# Set( HAVE_SETENDOFFILE_F "HAVE_SETENDOFFILE_H" )
+# ENDIF ( NOT HAVE_SENTENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND BORLAND )
+
+IF( NOT HAVE_SETENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND WIN32 )
+ # ----fix me----
+ # cmake CHECK_FUNCTION_EXISTS - could not find Borland 5.5, or Windows VS 32 bit SetEndOfFile
+ Set( HAVE_SETENDOFFILE_F "HAVE_SETENDOFFILE_F" )
+ENDIF ( NOT HAVE_SETENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND WIN32 )
+
+IF( XB_NDX_SUPPORT OR XB_MDX_SUPPORT )
+ Set( XB_INDEX_SUPPORT "1" )
+ENDIF( XB_NDX_SUPPORT OR XB_MDX_SUPPORT )
+
+
+# Set directories
+# PROJECT_PARENT_DIR is two nodes higher
+get_filename_component( PROJECT_PARENT_DIR ${PROJECT_BINARY_DIR} DIRECTORY )
+get_filename_component( PROJECT_PARENT_DIR ${PROJECT_PARENT_DIR} DIRECTORY )
+
+# MESSAGE( "PROJECT_PARENT_DIR = " ${PROJECT_PARENT_DIR} )
+# MESSAGE( "PROJECT_BINARY_DIR = " ${PROJECT_BINARY_DIR} )
+
+
+set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin )
+set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib )
+set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib )
+
+set( PROJECT_SOURCE_DIR ${PROJECT_PARENT_DIR}/src )
+set( PROJECT_DATA_DIR ${PROJECT_PARENT_DIR}/data )
+set( PROJECT_LOG_DIR ${PROJECT_PARENT_DIR}/logs )
+set( PROJECT_TEMP_DIR ${PROJECT_PARENT_DIR}/temp )
+set( EXTRA_LIBS ${EXTRA_LIBS} ${XB_LIBNAME} )
+
+
+# Undo bad decisions
+IF( XB_PLATFORM_32 AND XB_LARGEFILE_SUPPORT )
+ MESSAGE( "--- Can't build 64 bit environment with a 32 bit compiler" )
+ MESSAGE( "--- XB_LARGEFILE_SUPPORT set to OFF" )
+ set( XB_LARGEFILE_SUPPORT OFF CACHE BOOL "Use 64 bit large file support?" FORCE )
+ENDIF ( XB_PLATFORM_32 AND XB_LARGEFILE_SUPPORT )
+
+IF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
+ MESSAGE( "--- At lease one file format is required. Defaulting to Version 4" )
+ set( XB_DBF4_SUPPORT ON CACHE BOOL "Compile DBase File Format Version 4 support" FORCE )
+ENDIF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
+
+IF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+ MESSAGE( "--- Link List support required for DBF V4 Memo files. Setting to ON" )
+ set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
+ENDIF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+
+
+
+
+IF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+ MESSAGE( "--- Link List support required for locking functions. Setting to ON" )
+ set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
+ENDIF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+
+IF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+ MESSAGE( "--- MDX support required for Temporary indices. Setting to ON" )
+ set( XB_MDX_SUPPORT ON CACHE BOOL "Compile temporary index support into library" FORCE )
+ENDIF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+
+IF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+ MESSAGE( "--- Expression required for indices. Setting to ON" )
+ set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
+ Set( XB_INDEX_SUPPORT "1" )
+ENDIF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+
+IF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
+ MESSAGE( "--- Function support required for expressions. Setting to ON" )
+ set( XB_FUNCTION_SUPPORT ON CACHE BOOL "Compile XBase Function support into library" FORCE )
+ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
+
+IF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+ MESSAGE( "--- Linklist support required for expressions. Setting to ON" )
+ set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
+ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+
+IF( XB_SQL_SUPPORT AND NOT XB_MEMO_SUPPORT )
+ MESSAGE( "--- Memo support required for SQL. Setting to ON" )
+ set( XB_MEMO_SUPPORT ON CACHE BOOL "Compile memo field support into library" FORCE )
+ENDIF( XB_SQL_SUPPORT AND NOT XB_MEMO_SUPPORT )
+
+IF( XB_SQL_SUPPORT AND NOT XB_DBF4_SUPPORT )
+ MESSAGE( "--- DBF4 support required for SQL. Setting to ON" )
+ set( XB_DBF4_SUPPORT ON CACHE BOOL "Compile DBase File Format Version 4 support" FORCE )
+ENDIF( XB_SQL_SUPPORT AND NOT XB_DBF4_SUPPORT )
+
+IF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+ MESSAGE( "--- Expression required for filters. Setting to ON" )
+ set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
+ENDIF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+
+IF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
+ MESSAGE( "--- BLOCKREAD support required for SQL. Setting to ON" )
+ set( XB_BLOCKREAD_SUPPORT ON CACHE BOOL "Compile Block Read support into library" FORCE )
+ENDIF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
+
+IF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+ MESSAGE( "--- MDX support required for Temporary indices. Setting to ON" )
+ set( XB_MDX_SUPPORT ON CACHE BOOL "Compile temporary index support into library" FORCE )
+ENDIF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+
+
+
+# Build configuration header file
+configure_file (
+ "${PROJECT_SOURCE_DIR}/include/xbconfig.h.in"
+ "${PROJECT_BINARY_DIR}/include/xbconfig.h"
+)
+
+# Microsoft Windows compiler settings
+IF( MSVC )
+# add_definitions( /D_CRT_SECURE_NO_WARNINGS)
+ add_definitions( /EHsc )
+ENDIF( MSVC )
+
+
+# set up include directories
+include_directories( "${PROJECT_BINARY_DIR}/include" )
+include_directories( "${PROJECT_SOURCE_DIR}/include" )
+
+#build the library
+IF ( BUILD_SHARED_LIBS )
+ set( LIB_TYPE SHARED )
+ELSE( BUILD_SHARED_LIBS )
+ set( LIB_TYPE STATIC )
+ENDIF( BUILD_SHARED_LIBS )
+MESSAGE( "--- Lib type " ${LIB_TYPE} )
+
+
+
+set (SOURCES ${PROJECT_SOURCE_DIR}/core/xbstring.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbssv.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbdate.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbtblmgr.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbxbase.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbfile.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbdbf.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbfields.cpp
+ ${PROJECT_SOURCE_DIR}/core/xblog.cpp)
+
+IF( XB_MEMO_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo.cpp )
+ENDIF( XB_MEMO_SUPPORT )
+
+IF( XB_DBF3_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbdbf3.cpp )
+ IF( XB_MEMO_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo3.cpp )
+ ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF3_SUPPORT )
+
+IF( XB_DBF4_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbdbf4.cpp )
+ IF( XB_MEMO_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo4.cpp )
+ ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF4_SUPPORT )
+
+IF( XB_FUNCTION_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbfuncs.cpp )
+ENDIF( XB_FUNCTION_SUPPORT )
+
+IF( XB_EXPRESSION_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbexpnode.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbexp.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbuda.cpp )
+ENDIF( XB_EXPRESSION_SUPPORT )
+
+IF( XB_INDEX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbbcd.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixbase.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbtag.cpp )
+ENDIF( XB_INDEX_SUPPORT )
+
+IF( XB_NDX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixndx.cpp )
+ENDIF( XB_NDX_SUPPORT )
+
+
+IF( XB_MDX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixmdx.cpp )
+ENDIF( XB_MDX_SUPPORT )
+
+IF( XB_TDX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixtdx.cpp )
+ENDIF( XB_TDX_SUPPORT )
+
+
+IF( XB_SQL_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbalttbl.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrix.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrtbl.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdelete.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdrpix.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdrptbl.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbinsert.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbset.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbsql.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbstmt.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbselect.cpp )
+ENDIF( XB_SQL_SUPPORT )
+
+
+IF( XB_FILTER_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbfilter.cpp )
+ENDIF( XB_FILTER_SUPPORT )
+
+IF( XB_BLOCKREAD_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbblockread.cpp )
+ENDIF( XB_BLOCKREAD_SUPPORT )
+
+
+include( GenerateExportHeader )
+#add_library( xbase ${LIB_TYPE} ${SOURCES} )
+add_library( ${XB_LIBNAME} ${LIB_TYPE} ${SOURCES} )
+#add_library( ${CMAKE_PROJECT_NAME} ${LIB_TYPE} ${SOURCES} )
+
+
+IF( WIN32 )
+MESSAGE( "--- Generating Windows Library Headers" )
+
+#GENERATE_EXPORT_HEADER( xbase
+# BASE_NAME xbase
+
+GENERATE_EXPORT_HEADER( ${XB_LIBNAME}
+ BASE_NAME ${XB_LIBNAME}
+ EXPORT_MACRO_NAME xbase_EXPORT
+ EXPORT_FILE_NAME xbase_Export.h
+ STATIC_DEFINE xbase_BUILT_AS_STATIC
+)
+ENDIF( WIN32 )
+
+
+#build test programs
+enable_testing()
+
+add_executable( xb_test_string ${PROJECT_SOURCE_DIR}/tests/xb_test_string.cpp )
+target_link_libraries( xb_test_string ${EXTRA_LIBS})
+add_test( NAME xbString COMMAND xb_test_string QUIET )
+
+add_executable( xb_test_date ${PROJECT_SOURCE_DIR}/tests/xb_test_date.cpp )
+target_link_libraries( xb_test_date ${EXTRA_LIBS})
+add_test( NAME xbDate COMMAND xb_test_date QUIET )
+
+add_executable( xb_test_tblmgr ${PROJECT_SOURCE_DIR}/tests/xb_test_tblmgr.cpp )
+target_link_libraries( xb_test_tblmgr ${EXTRA_LIBS})
+add_test( NAME xbTblMgr COMMAND xb_test_tblmgr QUIET )
+
+add_executable( xb_test_xbase ${PROJECT_SOURCE_DIR}/tests/xb_test_xbase.cpp )
+target_link_libraries( xb_test_xbase ${EXTRA_LIBS})
+add_test( NAME xbXBase COMMAND xb_test_xbase QUIET )
+
+add_executable( xb_test_file ${PROJECT_SOURCE_DIR}/tests/xb_test_file.cpp )
+target_link_libraries( xb_test_file ${EXTRA_LIBS})
+add_test( NAME xbFile COMMAND xb_test_file QUIET )
+
+add_executable( xb_test_log ${PROJECT_SOURCE_DIR}/tests/xb_test_log.cpp )
+target_link_libraries( xb_test_log ${EXTRA_LIBS})
+add_test( NAME xbLog COMMAND xb_test_log QUIET )
+
+IF( XB_LINKLIST_SUPPORT )
+add_executable( xb_test_linklist ${PROJECT_SOURCE_DIR}/tests/xb_test_linklist.cpp )
+target_link_libraries( xb_test_linklist ${EXTRA_LIBS})
+add_test( NAME xbLinkList COMMAND xb_test_linklist QUIET )
+ENDIF( XB_LINKLIST_SUPPORT )
+
+IF( XB_DBF3_SUPPORT )
+add_executable( xb_test_dbf_v3_nomemos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v3_nomemos.cpp )
+target_link_libraries( xb_test_dbf_v3_nomemos ${EXTRA_LIBS})
+add_test( NAME xbDbfV3NoMemos COMMAND xb_test_dbf_v3_nomemos QUIET )
+
+IF( XB_MEMO_SUPPORT )
+add_executable( xb_test_dbf_v3_memos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v3_memos.cpp )
+target_link_libraries( xb_test_dbf_v3_memos ${EXTRA_LIBS})
+add_test( NAME xbDbfV3Memos COMMAND xb_test_dbf_v3_memos QUIET )
+
+ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF3_SUPPORT )
+
+IF( XB_DBF4_SUPPORT )
+add_executable( xb_test_dbf_v4_nomemos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v4_nomemos.cpp )
+target_link_libraries( xb_test_dbf_v4_nomemos ${EXTRA_LIBS})
+add_test( NAME xbDbfV4NoMemos COMMAND xb_test_dbf_v4_nomemos QUIET )
+
+IF( XB_MEMO_SUPPORT )
+add_executable( xb_test_dbf_v4_memos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v4_memos.cpp )
+target_link_libraries( xb_test_dbf_v4_memos ${EXTRA_LIBS})
+add_test( NAME xbDbfV4Memos COMMAND xb_test_dbf_v4_memos QUIET )
+
+ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF4_SUPPORT )
+
+IF( XB_FUNCTION_SUPPORT )
+add_executable( xb_test_funcs ${PROJECT_SOURCE_DIR}/tests/xb_test_funcs.cpp )
+target_link_libraries( xb_test_funcs ${EXTRA_LIBS})
+add_test( NAME xbFunctions COMMAND xb_test_funcs QUIET )
+ENDIF( XB_FUNCTION_SUPPORT )
+
+IF( XB_NDX_SUPPORT )
+IF( XB_DBF3_SUPPORT )
+add_executable( xb_test_ndx ${PROJECT_SOURCE_DIR}/tests/xb_test_ndx.cpp )
+target_link_libraries( xb_test_ndx ${EXTRA_LIBS})
+add_test( NAME xbIxNdx COMMAND xb_test_ndx QUIET )
+ENDIF( XB_DBF3_SUPPORT )
+ENDIF( XB_NDX_SUPPORT )
+
+
+
+IF( XB_DBF4_SUPPORT )
+
+IF( XB_MDX_SUPPORT )
+add_executable( xb_test_mdx ${PROJECT_SOURCE_DIR}/tests/xb_test_mdx.cpp )
+target_link_libraries( xb_test_mdx ${EXTRA_LIBS})
+add_test( NAME xbIxMdx COMMAND xb_test_mdx QUIET )
+ENDIF( XB_MDX_SUPPORT )
+
+IF( XB_TDX_SUPPORT )
+add_executable( xb_test_tdx ${PROJECT_SOURCE_DIR}/tests/xb_test_tdx.cpp )
+target_link_libraries( xb_test_tdx ${EXTRA_LIBS})
+add_test( NAME xbIxTdx COMMAND xb_test_tdx QUIET )
+ENDIF( XB_TDX_SUPPORT )
+
+ENDIF( XB_DBF4_SUPPORT )
+
+
+
+IF( XB_INDEX_SUPPORT )
+add_executable( xb_test_bcd ${PROJECT_SOURCE_DIR}/tests/xb_test_bcd.cpp )
+target_link_libraries( xb_test_bcd ${EXTRA_LIBS})
+add_test( NAME xbBcd COMMAND xb_test_bcd QUIET )
+ENDIF( XB_INDEX_SUPPORT )
+
+
+IF( XB_EXPRESSION_SUPPORT )
+
+add_executable( xb_test_expnode ${PROJECT_SOURCE_DIR}/tests/xb_test_expnode.cpp )
+target_link_libraries( xb_test_expnode ${EXTRA_LIBS})
+add_test( NAME xbExpNode COMMAND xb_test_expnode QUIET )
+
+
+add_executable( xb_test_expression ${PROJECT_SOURCE_DIR}/tests/xb_test_expression.cpp )
+target_link_libraries( xb_test_expression ${EXTRA_LIBS})
+add_test( NAME xbExpressions COMMAND xb_test_expression QUIET )
+
+add_executable( xb_test_uda ${PROJECT_SOURCE_DIR}/tests/xb_test_uda.cpp )
+target_link_libraries( xb_test_uda ${EXTRA_LIBS})
+add_test( NAME xbUda COMMAND xb_test_uda QUIET )
+
+ENDIF( XB_EXPRESSION_SUPPORT )
+
+IF( XB_SQL_SUPPORT )
+add_executable( xb_test_sql ${PROJECT_SOURCE_DIR}/tests/xb_test_sql.cpp )
+target_link_libraries( xb_test_sql ${EXTRA_LIBS})
+add_test( NAME xbSql COMMAND xb_test_sql QUIET )
+ENDIF( XB_SQL_SUPPORT )
+
+IF( XB_FILTER_SUPPORT )
+add_executable( xb_test_filter ${PROJECT_SOURCE_DIR}/tests/xb_test_filter.cpp )
+target_link_libraries( xb_test_filter ${EXTRA_LIBS})
+add_test( NAME xbFilter COMMAND xb_test_filter QUIET )
+ENDIF( XB_FILTER_SUPPORT )
+
+IF( XB_BLOCKREAD_SUPPORT )
+add_executable( xb_test_blockread ${PROJECT_SOURCE_DIR}/tests/xb_test_blockread.cpp )
+target_link_libraries( xb_test_blockread ${EXTRA_LIBS})
+add_test( NAME xbBlockRead COMMAND xb_test_blockread QUIET )
+ENDIF( XB_BLOCKREAD_SUPPORT )
+
+
+IF( XB_LOCKING_SUPPORT )
+add_executable( xb_test_lock ${PROJECT_SOURCE_DIR}/tests/xb_test_lock.cpp )
+target_link_libraries( xb_test_lock ${EXTRA_LIBS})
+add_test( NAME xbLock COMMAND xb_test_lock QUIET )
+IF( HAVE_CREATEPROCESSW_F )
+add_executable( xb_test_lock2 ${PROJECT_SOURCE_DIR}/tests/xb_test_lock2.cpp )
+target_link_libraries( xb_test_lock2 ${EXTRA_LIBS})
+ENDIF( HAVE_CREATEPROCESSW_F )
+ENDIF( XB_LOCKING_SUPPORT )
+
+#build example programs
+IF( XB_EXAMPLES_SUPPORT )
+ add_executable( xb_ex_string ${PROJECT_SOURCE_DIR}/examples/xb_ex_string.cpp )
+ target_link_libraries( xb_ex_string ${EXTRA_LIBS})
+
+ add_executable( xb_ex_date ${PROJECT_SOURCE_DIR}/examples/xb_ex_date.cpp )
+ target_link_libraries( xb_ex_date ${EXTRA_LIBS})
+
+ IF( XB_DBF3_SUPPORT )
+ add_executable( xb_ex_v3_create_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v3_create_dbf.cpp )
+ target_link_libraries( xb_ex_v3_create_dbf ${EXTRA_LIBS})
+
+ add_executable( xb_ex_v3_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v3_upd_dbf.cpp )
+ target_link_libraries( xb_ex_v3_upd_dbf ${EXTRA_LIBS})
+ ENDIF( XB_DBF3_SUPPORT )
+
+ IF( XB_DBF4_SUPPORT )
+ add_executable( xb_ex_v4_create_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_create_dbf.cpp )
+ target_link_libraries( xb_ex_v4_create_dbf ${EXTRA_LIBS})
+ ENDIF( XB_DBF4_SUPPORT )
+
+ IF( XB_EXPRESSION_SUPPORT )
+ add_executable( xb_ex_expression ${PROJECT_SOURCE_DIR}/examples/xb_ex_expression.cpp )
+ target_link_libraries( xb_ex_expression ${EXTRA_LIBS})
+ ENDIF( XB_EXPRESSION_SUPPORT )
+
+ add_executable( xb_ex_v4_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_upd_dbf.cpp )
+ target_link_libraries( xb_ex_v4_upd_dbf ${EXTRA_LIBS})
+
+ add_executable( xb_ex_ssv ${PROJECT_SOURCE_DIR}/examples/xb_ex_ssv.cpp )
+ target_link_libraries( xb_ex_ssv ${EXTRA_LIBS})
+
+ IF( XB_LOGGING_SUPPORT )
+ add_executable( xb_ex_log ${PROJECT_SOURCE_DIR}/examples/xb_ex_log.cpp )
+ target_link_libraries( xb_ex_log ${EXTRA_LIBS})
+ ENDIF( XB_LOGGING_SUPPORT )
+
+ENDIF( XB_EXAMPLES_SUPPORT )
+
+#build utility programs
+IF( XB_UTILS_SUPPORT )
+
+ add_executable( xb_cfg_check ${PROJECT_SOURCE_DIR}/utils/xb_cfg_check.cpp )
+ target_link_libraries( xb_cfg_check ${EXTRA_LIBS})
+
+ add_executable( xb_copydbf ${PROJECT_SOURCE_DIR}/utils/xb_copydbf.cpp )
+ target_link_libraries( xb_copydbf ${EXTRA_LIBS})
+
+ add_executable( xb_dbfutil ${PROJECT_SOURCE_DIR}/utils/xb_dbfutil.cpp )
+ target_link_libraries( xb_dbfutil ${EXTRA_LIBS})
+
+ add_executable( xb_deletall ${PROJECT_SOURCE_DIR}/utils/xb_deletall.cpp )
+ target_link_libraries( xb_deletall ${EXTRA_LIBS})
+
+ add_executable( xb_dumpdbt ${PROJECT_SOURCE_DIR}/utils/xb_dumpdbt.cpp )
+ target_link_libraries( xb_dumpdbt ${EXTRA_LIBS})
+
+ add_executable( xb_dumprecs ${PROJECT_SOURCE_DIR}/utils/xb_dumprecs.cpp )
+ target_link_libraries( xb_dumprecs ${EXTRA_LIBS})
+
+ add_executable( xb_import ${PROJECT_SOURCE_DIR}/utils/xb_import.cpp )
+ target_link_libraries( xb_import ${EXTRA_LIBS})
+
+ add_executable( xb_tblinfo ${PROJECT_SOURCE_DIR}/utils/xb_tblinfo.cpp )
+ target_link_libraries( xb_tblinfo ${EXTRA_LIBS})
+
+ IF( XB_SQL_SUPPORT )
+ add_executable( xb_execsql ${PROJECT_SOURCE_DIR}/utils/xb_execsql.cpp )
+ target_link_libraries( xb_execsql ${EXTRA_LIBS})
+ ENDIF( XB_SQL_SUPPORT )
+
+ add_executable( xb_pack ${PROJECT_SOURCE_DIR}/utils/xb_pack.cpp )
+ target_link_libraries( xb_pack ${EXTRA_LIBS})
+
+ add_executable( xb_undelall ${PROJECT_SOURCE_DIR}/utils/xb_undelall.cpp )
+ target_link_libraries( xb_undelall ${EXTRA_LIBS})
+
+ install (TARGETS xb_cfg_check DESTINATION bin)
+ install (TARGETS xb_copydbf DESTINATION bin)
+ install (TARGETS xb_dbfutil DESTINATION bin)
+ install (TARGETS xb_deletall DESTINATION bin)
+ install (TARGETS xb_dumpdbt DESTINATION bin)
+ install (TARGETS xb_dumprecs DESTINATION bin)
+ install (TARGETS xb_import DESTINATION bin)
+ install (TARGETS xb_pack DESTINATION bin)
+ install (TARGETS xb_undelall DESTINATION bin)
+ IF( XB_SQL_SUPPORT )
+ install (TARGETS xb_execsql DESTINATION bin)
+ ENDIF( XB_SQL_SUPPORT )
+
+
+
+ENDIF( XB_UTILS_SUPPORT )
+
+install (FILES ${PROJECT_BINARY_DIR}/include/xbconfig.h
+ ${PROJECT_SOURCE_DIR}/include/xbase.h
+ ${PROJECT_SOURCE_DIR}/include/xbbcd.h
+ ${PROJECT_SOURCE_DIR}/include/xbblkread.h
+ ${PROJECT_SOURCE_DIR}/include/xbdate.h
+ ${PROJECT_SOURCE_DIR}/include/xbdbf.h
+ ${PROJECT_SOURCE_DIR}/include/xbexp.h
+ ${PROJECT_SOURCE_DIR}/include/xbexpnode.h
+ ${PROJECT_SOURCE_DIR}/include/xbfile.h
+ ${PROJECT_SOURCE_DIR}/include/xbfilter.h
+ ${PROJECT_SOURCE_DIR}/include/xbindex.h
+ ${PROJECT_SOURCE_DIR}/include/xblnklst.h
+ ${PROJECT_SOURCE_DIR}/include/xblnklstord.h
+ ${PROJECT_SOURCE_DIR}/include/xblnknod.h
+ ${PROJECT_SOURCE_DIR}/include/xblog.h
+ ${PROJECT_SOURCE_DIR}/include/xbmemo.h
+ ${PROJECT_SOURCE_DIR}/include/xbretcod.h
+ ${PROJECT_SOURCE_DIR}/include/xbsql.h
+ ${PROJECT_SOURCE_DIR}/include/xbssv.h
+ ${PROJECT_SOURCE_DIR}/include/xbstring.h
+ ${PROJECT_SOURCE_DIR}/include/xbtag.h
+ ${PROJECT_SOURCE_DIR}/include/xbtblmgr.h
+ ${PROJECT_SOURCE_DIR}/include/xbtypes.h
+ ${PROJECT_SOURCE_DIR}/include/xbuda.h
+ ${PROJECT_SOURCE_DIR}/include/xbxbase.h
+ DESTINATION include/${CMAKE_PROJECT_NAME})
+
+IF( NOT WIN32 )
+install (FILES ${PROJECT_PARENT_DIR}/docs/man/xb_cfg_chk.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_copydbf.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dbfutil.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_deletall.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dumpdbt.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dumprecs.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_import.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_pack.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_tblinfo.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_undelall.1.gz
+
+ DESTINATION man/man1)
+
+ENDIF( NOT WIN32 )
+
+
+SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.1.4 SOVERSION 0 )
+
+IF( WIN32 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION bin)
+ELSE( WIN32 )
+ IF( EXISTS /usr/local/lib64 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION lib64/${CMAKE_PROJECT_NAME})
+ ELSE( EXISTS /usr/local/lib64 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION lib/${CMAKE_PROJECT_NAME})
+ ENDIF( EXISTS /usr/local/lib64 )
+ENDIF( WIN32 )
diff --git a/1Tdata/xbase/xbase64-4.1.4/build/debian/README.debian b/1Tdata/xbase/xbase64-4.1.4/build/debian/README.debian
new file mode 100644
index 0000000..dd6d8eb
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/build/debian/README.debian
@@ -0,0 +1,26 @@
+
+3/26/23
+
+Debian build steps for Xbase64
+
+1) Verify cmake is installed with command: cmake --version
+ If it is not installed, install the latest version through the Debian software store.
+
+2) Verify gcc is intalled with the command: gcc --version
+ If it is not installed, execute the following commands:
+
+ sudo apt update
+ sudo apt install build-essential
+ gcc --version
+
+3) Build xbase64 library
+
+ cd build/debian (go to the appropriate build directory)
+ cmake . (configure for your environment)
+ make (compile it)
+ make test (test library build)
+ sudo make install (install it)
+ xb_cfg_chk (test install)
+
+
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/build/linux32/CMakeLists.txt b/1Tdata/xbase/xbase64-4.1.4/build/linux32/CMakeLists.txt
new file mode 100755
index 0000000..ce2566a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/build/linux32/CMakeLists.txt
@@ -0,0 +1,809 @@
+cmake_minimum_required(VERSION 3.2)
+
+project (Xbase64)
+set( xbase_VERSION_MAJOR 4 )
+set( xbase_VERSION_MINOR 1 )
+set( xbase_VERSION_PATCH 4 )
+
+MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
+MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
+MESSAGE( "--- Project Name: " ${CMAKE_PROJECT_NAME} )
+MESSAGE( "--- Install Prefix: " ${CMAKE_INSTALL_PREFIX} )
+
+#Set compiler options
+
+IF( CMAKE_COMPILER_IS_GNUCXX )
+ MESSAGE( "Setting GNU compiler options" )
+ add_compile_options( -Wall -Wsign-conversion )
+# add_compile_options( -Wall -Wconversion -Wsign-conversion )
+ SET( VERBOSE 1 )
+ENDIF( CMAKE_COMPILER_IS_GNUCXX )
+
+IF( BORLAND )
+ MESSAGE ("BORLAND COMPILER" )
+ #set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w-8022" )
+ add_compile_options( -w-8022 )
+ENDIF( BORLAND )
+
+MESSAGE( "--- Checking integer sizes" )
+INCLUDE(CheckTypeSize)
+CHECK_TYPE_SIZE( "short int" SHORT_INT )
+CHECK_TYPE_SIZE( int INT )
+CHECK_TYPE_SIZE( __int32 __INT32 )
+CHECK_TYPE_SIZE( int32_t INT32_T )
+CHECK_TYPE_SIZE( long LONG_INT )
+CHECK_TYPE_SIZE( __int64 __INT64 )
+CHECK_TYPE_SIZE( int64_t INT64_T )
+CHECK_TYPE_SIZE( "long long" LONG_LONG )
+CHECK_TYPE_SIZE( u_int64_t U_INT64_T )
+CHECK_TYPE_SIZE( uint64_t UINT64_T )
+CHECK_TYPE_SIZE( "unsigned __int64" UNSIGNED__INT64 )
+CHECK_TYPE_SIZE( "unsigned long long" UNSIGNED_LONG_LONG )
+
+CHECK_TYPE_SIZE( "double" DOUBLE )
+MESSAGE( "--- Double size = " ${DOUBLE} )
+
+
+#determine how 16 bit integer defined on this platform
+SET( iSize 0 )
+IF( HAVE_SHORT_INT AND ${SHORT_INT} EQUAL 2 )
+ SET( xbInt16 "short int" )
+ SET( xbUInt16 "unsigned short int" )
+ SET( iSize ${SHORT_INT} )
+ MESSAGE( "--- xbInt16 = [short int]" )
+ MESSAGE( "--- xbUInt16 = [unsigned short int]" )
+
+ENDIF( HAVE_SHORT_INT AND ${SHORT_INT} EQUAL 2 )
+IF( NOT ${iSize} EQUAL 2 )
+ MESSAGE( "FATAL_ERROR Could not detect 16 bit integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 2 )
+
+#determine how 32 bit integer defined on this platform
+SET( iSize 0 )
+IF( HAVE_INT AND ${INT} EQUAL 4 )
+ SET( xbInt32 int )
+ SET( xbUInt32 "unsigned int" )
+ SET( iSize ${INT} )
+ MESSAGE( "--- xbInt32 = [int]" )
+ MESSAGE( "--- xbUInt32 = [unsigned int]" )
+ENDIF( HAVE_INT AND ${INT} EQUAL 4 )
+
+IF(( NOT iSize EQUAL 4 ) AND HAVE___INT32 )
+ MESSAGE( __int untested if block - see CMakeLists.txt)
+ SET( xbInt32 __int32 )
+ SET( xbUInt32 "unsigned __int32" )
+ SET( iSize ${__INT} )
+ MESSAGE( "--- xbInt32 = [__int]" )
+ MESSAGE( "--- xbUInt32 = [unsigned __int]" )
+ENDIF(( NOT iSize EQUAL 4 ) AND HAVE___INT32 )
+
+IF(( NOT iSize EQUAL 4 ) AND HAVE_INT32_T )
+ SET( xbInt32 int32_t )
+ SET( xbUInt32 "u_int32_t" )
+ SET( iSize ${INT32_T} )
+ MESSAGE( "--- xbInt32 = [int32_t]" )
+ MESSAGE( "--- xbUInt32 = [u_int32_t]" )
+ENDIF(( NOT iSize EQUAL 4 ) AND HAVE_INT32_T )
+
+IF( NOT ${iSize} EQUAL 4 )
+ MESSAGE( "FATAL_ERROR Could not detect 32 bit integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 4 )
+
+#determine how 64 bit integer defined on this platform
+SET( iSize 0 )
+IF( HAVE___INT64 )
+ SET( xbInt64 __int64 )
+ SET( iSize ${__INT64} )
+ MESSAGE( "--- xbInt64 = [__int64]" )
+ENDIF( HAVE___INT64 )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_INT64_T )
+ SET( xbInt64 int64_t )
+ SET( iSize ${INT64_T} )
+ MESSAGE( "--- xbInt64 = [int64_t]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_INT64_T )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_LONG_LONG )
+ SET( xbInt64 "long long" )
+ SET( iSize ${LONG_LONG} )
+ MESSAGE( "--- xbInt64 = [long long]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_LONG_LONG )
+
+IF( NOT ${iSize} EQUAL 8 )
+ MESSAGE( "FATAL_ERROR Could not detect 64 bit integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 8 )
+
+#determine how 64 bit unsigned integer defined on this platform
+SET( iSize 0 )
+IF( HAVE_UNSIGNED__INT64 )
+ SET( xbUInt64 "unsigned __int64" )
+ SET( iSize ${UNSIGNED__INT64} )
+ MESSAGE( "--- xbUInt64 = [unsigned __int64]" )
+ENDIF( HAVE_UNSIGNED__INT64 )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_UINT64_T )
+ SET( xbUInt64 "uint64_t" )
+ SET( iSize ${UINT64_T} )
+ MESSAGE( "--- xbUInt64 = [uint64_t]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_UINT64_T )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_U_INT64_T )
+ SET( xbUInt64 u_int64_t )
+ SET( iSize ${U_INT64_T} )
+ MESSAGE( "--- xbUInt64 = [u_int64_t]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_U_INT64_T )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_UNSIGNED_LONG_LONG )
+ SET( xbUInt64 "unsigned long long" )
+ SET( iSize ${UNSIGNED_LONG_LONG} )
+ MESSAGE( "--- xbUInt64 = [unsigned long long]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_UNSIGNED_LONG_LONG )
+
+IF( NOT ${iSize} EQUAL 8 )
+ MESSAGE( "FATAL_ERROR Could not detect 64 bit unsigned integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 8 )
+
+#Library options
+option( BUILD_SHARED_LIBS "Build shared libraries" ON)
+option( XB_DBF3_SUPPORT "Compile DBase File Format Version 3 support" ON)
+option( XB_DBF4_SUPPORT "Compile DBase File Format Version 4 support" ON)
+option( XB_MEMO_SUPPORT "Compile memo field support into library" ON)
+option( XB_NDX_SUPPORT "Compile NDX Index support into library" ON)
+option( XB_MDX_SUPPORT "Compile MDX Index support into library" ON)
+option( XB_LOCKING_SUPPORT "Compile Multi User Locking support into library" ON)
+option( XB_TDX_SUPPORT "Compile temporary index support into library" ON)
+
+option( XB_LOGGING_SUPPORT "Compile message logging support into library" ON)
+option( XB_LINKLIST_SUPPORT "Compile Link List routines into library" ON)
+option( XB_FUNCTION_SUPPORT "Compile XBase Function support into library" ON)
+option( XB_EXPRESSION_SUPPORT "Compile Expression support into library" ON)
+option( XB_INF_SUPPORT "Compile NDX INF file support into library" ON)
+option( XB_FILTER_SUPPORT "Compile Filter support into library" ON)
+option( XB_BLOCKREAD_SUPPORT "Compile Block Read support into library" ON)
+option( XB_SQL_SUPPORT "Compile SQL support into library - alpha" ON)
+option( XB_DEBUG_SUPPORT "Compile debug logic into library" ON)
+option( XB_UTILS_SUPPORT "Compile utility programs" ON)
+option( XB_EXAMPLES_SUPPORT "Compile example programs" ON)
+
+Message( "--- BUILD_SHARED_LIBS " ${BUILD_SHARED_LIBS})
+Message( "--- XB_DBF3_SUPPORT " ${XB_DBF3_SUPPORT})
+Message( "--- XB_DBF4_SUPPORT " ${XB_DBF4_SUPPORT})
+Message( "--- XB_MEMO_SUPPORT " ${XB_MEMO_SUPPORT})
+Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
+Message( "--- XB_MDX_SUPPORT " ${XB_MDX_SUPPORT})
+Message( "--- XB_TDX_SUPPORT " ${XB_TDX_SUPPORT})
+Message( "--- XB_LOCKING_SUPPORT " ${XB_LOCKING_SUPPORT})
+Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
+Message( "--- XB_FUNCTION_SUPPORT " ${XB_FUNCTION_SUPPORT})
+Message( "--- XB_EXPRESSION_SUPPORT " ${XB_EXPRESSION_SUPPORT})
+Message( "--- XB_FILTER_SUPPORT " ${XB_FILTER_SUPPORT})
+Message( "--- XB_DEBUG_SUPPORT " ${XB_DEBUG_SUPPORT})
+Message( "--- XB_UTILS_SUPPORT " ${XB_UTILS_SUPPORT})
+Message( "--- XB_EXAMPLES_SUPPORT " ${XB_EXAMPLES_SUPPORT})
+Message( "--- XB_LOGGING_SUPPORT " ${XB_LOGGING_SUPPORT})
+Message( "--- XB_SQL_SUPPORT " ${XB_SQL_SUPPORT})
+Message( "--- XB_INF_SUPPORT " ${XB_INF_SUPPORT})
+Message( "--- XB_BLOCKREAD_SUPPORT " ${XB_BLOCKREAD_SUPPORT})
+
+IF( XB_DEBUG_SUPPORT )
+ Message( "--- Adding debug support" )
+ set( CMAKE_BUILD_TYPE Debug )
+IF( CMAKE_COMPILER_IS_GNUCXX )
+ add_compile_options( -Og )
+ENDIF( CMAKE_COMPILER_IS_GNUCXX )
+ENDIF( XB_DEBUG_SUPPORT )
+
+IF( CMAKE_SIZEOF_VOID_P EQUAL 8 )
+ MESSAGE( "--- 64 bit compiler detected" )
+ set( XB_PLATFORM "x64" )
+ set( XB_PLATFORM_64 1 )
+ set( XB_LIBNAME "xbase64" )
+
+ELSE( CMAKE_SIZEOF_VOID_P EQUAL 8 )
+ MESSAGE( "--- 32 bit compiler detected" )
+ set( XB_PLATFORM "x86" )
+ set( XB_PLATFORM_32 1 )
+ set( XB_LIBNAME "xbase32" )
+
+ENDIF( CMAKE_SIZEOF_VOID_P EQUAL 8 )
+
+
+#Check for the existence of various header files
+INCLUDE (CheckIncludeFiles)
+CHECK_INCLUDE_FILES (ctype.h HAVE_CTYPE_H)
+CHECK_INCLUDE_FILES (dirent.h HAVE_DIRENT_H)
+CHECK_INCLUDE_FILES (fcntl.h HAVE_FCNTL_H)
+CHECK_INCLUDE_FILES (inttypes.h HAVE_INTTYPES_H)
+CHECK_INCLUDE_FILES (pwd.h HAVE_PWD_H)
+CHECK_INCLUDE_FILES (stdarg.h HAVE_STDARG_H)
+CHECK_INCLUDE_FILES (stdargs.h HAVE_STDARGS_H)
+CHECK_INCLUDE_FILES (string.h HAVE_STRING_H)
+CHECK_INCLUDE_FILES (strings.h HAVE_STRINGS_H)
+CHECK_INCLUDE_FILES (sys/stat.h HAVE_STAT_H)
+CHECK_INCLUDE_FILES (unistd.h HAVE_UNISTD_H)
+CHECK_INCLUDE_FILES (varargs.h HAVE_VARARGS_H)
+CHECK_INCLUDE_FILES (windows.h HAVE_WINDOWS_H)
+
+#Check for the existence of various function calls
+INCLUDE( CheckFunctionExists )
+CHECK_FUNCTION_EXISTS(_close HAVE__CLOSE_F)
+CHECK_FUNCTION_EXISTS(fcntl HAVE_FCNTL_F)
+CHECK_FUNCTION_EXISTS(_fdopen HAVE__FDOPEN_F)
+CHECK_FUNCTION_EXISTS(fopen_s HAVE_FOPEN_S_F)
+CHECK_FUNCTION_EXISTS(_fsopen HAVE__FSOPEN_F)
+CHECK_FUNCTION_EXISTS(_fileno HAVE__FILENO_F)
+CHECK_FUNCTION_EXISTS(fork HAVE_FORK_F)
+CHECK_FUNCTION_EXISTS(_fseeki64 HAVE__FSEEKI64_F)
+CHECK_FUNCTION_EXISTS(fseeko HAVE_FSEEKO_F)
+CHECK_FUNCTION_EXISTS(ftruncate HAVE_FTRUNCATE_F)
+CHECK_FUNCTION_EXISTS(getenv_s HAVE_GETENV_S_F)
+
+CHECK_FUNCTION_EXISTS(_localtime64_s HAVE__LOCALTIME64_S_F)
+CHECK_FUNCTION_EXISTS(LockFile HAVE_LOCKFILE_F)
+CHECK_FUNCTION_EXISTS(locking HAVE_LOCKING_F)
+CHECK_FUNCTION_EXISTS(_locking HAVE__LOCKING_F)
+CHECK_FUNCTION_EXISTS(_open HAVE__OPEN_F)
+CHECK_FUNCTION_EXISTS(SetEndOfFile HAVE_SETENDOFFILE_F)
+
+CHECK_FUNCTION_EXISTS(vsnprintf HAVE_VSNPRINTF_F)
+CHECK_FUNCTION_EXISTS(_vsnprintf_s HAVE__VSNPRINTF_S_F)
+
+
+CHECK_FUNCTION_EXISTS(getopt HAVE_GETOPT_F)
+
+IF( WIN32 )
+
+# Use CHECK_SYMBOL_EXISTS for the Win32API instead of CHECK_FUNCTION_EXISTS
+# Can't detect inline functions in headers
+# Can't detect due to mismatch of calling conventions
+# Can't detect mangled names
+
+INCLUDE( CheckSymbolExists )
+CHECK_SYMBOL_EXISTS(CreateProcessW Windows.h HAVE_CREATEPROCESSW_F )
+CHECK_SYMBOL_EXISTS(vsprintf_s stdio.h HAVE_VSPRINTF_S_F )
+
+ENDIF ( WIN32 )
+
+# IF( NOT HAVE_SENTENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND BORLAND )
+# # ----fix me----
+# # cmake CHECK_FUNCTION_EXISTS - could not find Borland 5.5 SetEndOfFile
+# Set( HAVE_SETENDOFFILE_F "HAVE_SETENDOFFILE_H" )
+# ENDIF ( NOT HAVE_SENTENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND BORLAND )
+
+IF( NOT HAVE_SETENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND WIN32 )
+ # ----fix me----
+ # cmake CHECK_FUNCTION_EXISTS - could not find Borland 5.5, or Windows VS 32 bit SetEndOfFile
+ Set( HAVE_SETENDOFFILE_F "HAVE_SETENDOFFILE_F" )
+ENDIF ( NOT HAVE_SETENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND WIN32 )
+
+IF( XB_NDX_SUPPORT OR XB_MDX_SUPPORT )
+ Set( XB_INDEX_SUPPORT "1" )
+ENDIF( XB_NDX_SUPPORT OR XB_MDX_SUPPORT )
+
+
+# Set directories
+# PROJECT_PARENT_DIR is two nodes higher
+get_filename_component( PROJECT_PARENT_DIR ${PROJECT_BINARY_DIR} DIRECTORY )
+get_filename_component( PROJECT_PARENT_DIR ${PROJECT_PARENT_DIR} DIRECTORY )
+
+# MESSAGE( "PROJECT_PARENT_DIR = " ${PROJECT_PARENT_DIR} )
+# MESSAGE( "PROJECT_BINARY_DIR = " ${PROJECT_BINARY_DIR} )
+
+
+set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin )
+set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib )
+set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib )
+
+set( PROJECT_SOURCE_DIR ${PROJECT_PARENT_DIR}/src )
+set( PROJECT_DATA_DIR ${PROJECT_PARENT_DIR}/data )
+set( PROJECT_LOG_DIR ${PROJECT_PARENT_DIR}/logs )
+set( PROJECT_TEMP_DIR ${PROJECT_PARENT_DIR}/temp )
+set( EXTRA_LIBS ${EXTRA_LIBS} ${XB_LIBNAME} )
+
+
+# Undo bad decisions
+IF( XB_PLATFORM_32 AND XB_LARGEFILE_SUPPORT )
+ MESSAGE( "--- Can't build 64 bit environment with a 32 bit compiler" )
+ MESSAGE( "--- XB_LARGEFILE_SUPPORT set to OFF" )
+ set( XB_LARGEFILE_SUPPORT OFF CACHE BOOL "Use 64 bit large file support?" FORCE )
+ENDIF ( XB_PLATFORM_32 AND XB_LARGEFILE_SUPPORT )
+
+IF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
+ MESSAGE( "--- At lease one file format is required. Defaulting to Version 4" )
+ set( XB_DBF4_SUPPORT ON CACHE BOOL "Compile DBase File Format Version 4 support" FORCE )
+ENDIF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
+
+IF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+ MESSAGE( "--- Link List support required for DBF V4 Memo files. Setting to ON" )
+ set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
+ENDIF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+
+
+
+
+IF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+ MESSAGE( "--- Link List support required for locking functions. Setting to ON" )
+ set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
+ENDIF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+
+IF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+ MESSAGE( "--- MDX support required for Temporary indices. Setting to ON" )
+ set( XB_MDX_SUPPORT ON CACHE BOOL "Compile temporary index support into library" FORCE )
+ENDIF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+
+IF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+ MESSAGE( "--- Expression required for indices. Setting to ON" )
+ set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
+ Set( XB_INDEX_SUPPORT "1" )
+ENDIF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+
+IF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
+ MESSAGE( "--- Function support required for expressions. Setting to ON" )
+ set( XB_FUNCTION_SUPPORT ON CACHE BOOL "Compile XBase Function support into library" FORCE )
+ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
+
+IF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+ MESSAGE( "--- Linklist support required for expressions. Setting to ON" )
+ set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
+ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+
+IF( XB_SQL_SUPPORT AND NOT XB_MEMO_SUPPORT )
+ MESSAGE( "--- Memo support required for SQL. Setting to ON" )
+ set( XB_MEMO_SUPPORT ON CACHE BOOL "Compile memo field support into library" FORCE )
+ENDIF( XB_SQL_SUPPORT AND NOT XB_MEMO_SUPPORT )
+
+IF( XB_SQL_SUPPORT AND NOT XB_DBF4_SUPPORT )
+ MESSAGE( "--- DBF4 support required for SQL. Setting to ON" )
+ set( XB_DBF4_SUPPORT ON CACHE BOOL "Compile DBase File Format Version 4 support" FORCE )
+ENDIF( XB_SQL_SUPPORT AND NOT XB_DBF4_SUPPORT )
+
+IF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+ MESSAGE( "--- Expression required for filters. Setting to ON" )
+ set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
+ENDIF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+
+IF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
+ MESSAGE( "--- BLOCKREAD support required for SQL. Setting to ON" )
+ set( XB_BLOCKREAD_SUPPORT ON CACHE BOOL "Compile Block Read support into library" FORCE )
+ENDIF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
+
+IF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+ MESSAGE( "--- MDX support required for Temporary indices. Setting to ON" )
+ set( XB_MDX_SUPPORT ON CACHE BOOL "Compile temporary index support into library" FORCE )
+ENDIF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+
+
+
+# Build configuration header file
+configure_file (
+ "${PROJECT_SOURCE_DIR}/include/xbconfig.h.in"
+ "${PROJECT_BINARY_DIR}/include/xbconfig.h"
+)
+
+# Microsoft Windows compiler settings
+IF( MSVC )
+# add_definitions( /D_CRT_SECURE_NO_WARNINGS)
+ add_definitions( /EHsc )
+ENDIF( MSVC )
+
+
+# set up include directories
+include_directories( "${PROJECT_BINARY_DIR}/include" )
+include_directories( "${PROJECT_SOURCE_DIR}/include" )
+
+#build the library
+IF ( BUILD_SHARED_LIBS )
+ set( LIB_TYPE SHARED )
+ELSE( BUILD_SHARED_LIBS )
+ set( LIB_TYPE STATIC )
+ENDIF( BUILD_SHARED_LIBS )
+MESSAGE( "--- Lib type " ${LIB_TYPE} )
+
+
+
+set (SOURCES ${PROJECT_SOURCE_DIR}/core/xbstring.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbssv.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbdate.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbtblmgr.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbxbase.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbfile.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbdbf.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbfields.cpp
+ ${PROJECT_SOURCE_DIR}/core/xblog.cpp)
+
+IF( XB_MEMO_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo.cpp )
+ENDIF( XB_MEMO_SUPPORT )
+
+IF( XB_DBF3_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbdbf3.cpp )
+ IF( XB_MEMO_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo3.cpp )
+ ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF3_SUPPORT )
+
+IF( XB_DBF4_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbdbf4.cpp )
+ IF( XB_MEMO_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo4.cpp )
+ ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF4_SUPPORT )
+
+IF( XB_FUNCTION_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbfuncs.cpp )
+ENDIF( XB_FUNCTION_SUPPORT )
+
+IF( XB_EXPRESSION_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbexpnode.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbexp.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbuda.cpp )
+ENDIF( XB_EXPRESSION_SUPPORT )
+
+IF( XB_INDEX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbbcd.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixbase.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbtag.cpp )
+ENDIF( XB_INDEX_SUPPORT )
+
+IF( XB_NDX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixndx.cpp )
+ENDIF( XB_NDX_SUPPORT )
+
+
+IF( XB_MDX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixmdx.cpp )
+ENDIF( XB_MDX_SUPPORT )
+
+IF( XB_TDX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixtdx.cpp )
+ENDIF( XB_TDX_SUPPORT )
+
+
+IF( XB_SQL_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbalttbl.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrix.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrtbl.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdelete.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdrpix.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdrptbl.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbinsert.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbset.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbsql.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbstmt.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbselect.cpp )
+ENDIF( XB_SQL_SUPPORT )
+
+
+IF( XB_FILTER_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbfilter.cpp )
+ENDIF( XB_FILTER_SUPPORT )
+
+IF( XB_BLOCKREAD_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbblockread.cpp )
+ENDIF( XB_BLOCKREAD_SUPPORT )
+
+
+include( GenerateExportHeader )
+#add_library( xbase ${LIB_TYPE} ${SOURCES} )
+add_library( ${XB_LIBNAME} ${LIB_TYPE} ${SOURCES} )
+#add_library( ${CMAKE_PROJECT_NAME} ${LIB_TYPE} ${SOURCES} )
+
+
+IF( WIN32 )
+MESSAGE( "--- Generating Windows Library Headers" )
+
+#GENERATE_EXPORT_HEADER( xbase
+# BASE_NAME xbase
+
+GENERATE_EXPORT_HEADER( ${XB_LIBNAME}
+ BASE_NAME ${XB_LIBNAME}
+ EXPORT_MACRO_NAME xbase_EXPORT
+ EXPORT_FILE_NAME xbase_Export.h
+ STATIC_DEFINE xbase_BUILT_AS_STATIC
+)
+ENDIF( WIN32 )
+
+
+#build test programs
+enable_testing()
+
+add_executable( xb_test_string ${PROJECT_SOURCE_DIR}/tests/xb_test_string.cpp )
+target_link_libraries( xb_test_string ${EXTRA_LIBS})
+add_test( NAME xbString COMMAND xb_test_string QUIET )
+
+add_executable( xb_test_date ${PROJECT_SOURCE_DIR}/tests/xb_test_date.cpp )
+target_link_libraries( xb_test_date ${EXTRA_LIBS})
+add_test( NAME xbDate COMMAND xb_test_date QUIET )
+
+add_executable( xb_test_tblmgr ${PROJECT_SOURCE_DIR}/tests/xb_test_tblmgr.cpp )
+target_link_libraries( xb_test_tblmgr ${EXTRA_LIBS})
+add_test( NAME xbTblMgr COMMAND xb_test_tblmgr QUIET )
+
+add_executable( xb_test_xbase ${PROJECT_SOURCE_DIR}/tests/xb_test_xbase.cpp )
+target_link_libraries( xb_test_xbase ${EXTRA_LIBS})
+add_test( NAME xbXBase COMMAND xb_test_xbase QUIET )
+
+add_executable( xb_test_file ${PROJECT_SOURCE_DIR}/tests/xb_test_file.cpp )
+target_link_libraries( xb_test_file ${EXTRA_LIBS})
+add_test( NAME xbFile COMMAND xb_test_file QUIET )
+
+add_executable( xb_test_log ${PROJECT_SOURCE_DIR}/tests/xb_test_log.cpp )
+target_link_libraries( xb_test_log ${EXTRA_LIBS})
+add_test( NAME xbLog COMMAND xb_test_log QUIET )
+
+IF( XB_LINKLIST_SUPPORT )
+add_executable( xb_test_linklist ${PROJECT_SOURCE_DIR}/tests/xb_test_linklist.cpp )
+target_link_libraries( xb_test_linklist ${EXTRA_LIBS})
+add_test( NAME xbLinkList COMMAND xb_test_linklist QUIET )
+ENDIF( XB_LINKLIST_SUPPORT )
+
+IF( XB_DBF3_SUPPORT )
+add_executable( xb_test_dbf_v3_nomemos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v3_nomemos.cpp )
+target_link_libraries( xb_test_dbf_v3_nomemos ${EXTRA_LIBS})
+add_test( NAME xbDbfV3NoMemos COMMAND xb_test_dbf_v3_nomemos QUIET )
+
+IF( XB_MEMO_SUPPORT )
+add_executable( xb_test_dbf_v3_memos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v3_memos.cpp )
+target_link_libraries( xb_test_dbf_v3_memos ${EXTRA_LIBS})
+add_test( NAME xbDbfV3Memos COMMAND xb_test_dbf_v3_memos QUIET )
+
+ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF3_SUPPORT )
+
+IF( XB_DBF4_SUPPORT )
+add_executable( xb_test_dbf_v4_nomemos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v4_nomemos.cpp )
+target_link_libraries( xb_test_dbf_v4_nomemos ${EXTRA_LIBS})
+add_test( NAME xbDbfV4NoMemos COMMAND xb_test_dbf_v4_nomemos QUIET )
+
+IF( XB_MEMO_SUPPORT )
+add_executable( xb_test_dbf_v4_memos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v4_memos.cpp )
+target_link_libraries( xb_test_dbf_v4_memos ${EXTRA_LIBS})
+add_test( NAME xbDbfV4Memos COMMAND xb_test_dbf_v4_memos QUIET )
+
+ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF4_SUPPORT )
+
+IF( XB_FUNCTION_SUPPORT )
+add_executable( xb_test_funcs ${PROJECT_SOURCE_DIR}/tests/xb_test_funcs.cpp )
+target_link_libraries( xb_test_funcs ${EXTRA_LIBS})
+add_test( NAME xbFunctions COMMAND xb_test_funcs QUIET )
+ENDIF( XB_FUNCTION_SUPPORT )
+
+IF( XB_NDX_SUPPORT )
+IF( XB_DBF3_SUPPORT )
+add_executable( xb_test_ndx ${PROJECT_SOURCE_DIR}/tests/xb_test_ndx.cpp )
+target_link_libraries( xb_test_ndx ${EXTRA_LIBS})
+add_test( NAME xbIxNdx COMMAND xb_test_ndx QUIET )
+ENDIF( XB_DBF3_SUPPORT )
+ENDIF( XB_NDX_SUPPORT )
+
+
+
+IF( XB_DBF4_SUPPORT )
+
+IF( XB_MDX_SUPPORT )
+add_executable( xb_test_mdx ${PROJECT_SOURCE_DIR}/tests/xb_test_mdx.cpp )
+target_link_libraries( xb_test_mdx ${EXTRA_LIBS})
+add_test( NAME xbIxMdx COMMAND xb_test_mdx QUIET )
+ENDIF( XB_MDX_SUPPORT )
+
+IF( XB_TDX_SUPPORT )
+add_executable( xb_test_tdx ${PROJECT_SOURCE_DIR}/tests/xb_test_tdx.cpp )
+target_link_libraries( xb_test_tdx ${EXTRA_LIBS})
+add_test( NAME xbIxTdx COMMAND xb_test_tdx QUIET )
+ENDIF( XB_TDX_SUPPORT )
+
+ENDIF( XB_DBF4_SUPPORT )
+
+
+
+IF( XB_INDEX_SUPPORT )
+add_executable( xb_test_bcd ${PROJECT_SOURCE_DIR}/tests/xb_test_bcd.cpp )
+target_link_libraries( xb_test_bcd ${EXTRA_LIBS})
+add_test( NAME xbBcd COMMAND xb_test_bcd QUIET )
+ENDIF( XB_INDEX_SUPPORT )
+
+
+IF( XB_EXPRESSION_SUPPORT )
+
+add_executable( xb_test_expnode ${PROJECT_SOURCE_DIR}/tests/xb_test_expnode.cpp )
+target_link_libraries( xb_test_expnode ${EXTRA_LIBS})
+add_test( NAME xbExpNode COMMAND xb_test_expnode QUIET )
+
+
+add_executable( xb_test_expression ${PROJECT_SOURCE_DIR}/tests/xb_test_expression.cpp )
+target_link_libraries( xb_test_expression ${EXTRA_LIBS})
+add_test( NAME xbExpressions COMMAND xb_test_expression QUIET )
+
+add_executable( xb_test_uda ${PROJECT_SOURCE_DIR}/tests/xb_test_uda.cpp )
+target_link_libraries( xb_test_uda ${EXTRA_LIBS})
+add_test( NAME xbUda COMMAND xb_test_uda QUIET )
+
+ENDIF( XB_EXPRESSION_SUPPORT )
+
+IF( XB_SQL_SUPPORT )
+add_executable( xb_test_sql ${PROJECT_SOURCE_DIR}/tests/xb_test_sql.cpp )
+target_link_libraries( xb_test_sql ${EXTRA_LIBS})
+add_test( NAME xbSql COMMAND xb_test_sql QUIET )
+ENDIF( XB_SQL_SUPPORT )
+
+IF( XB_FILTER_SUPPORT )
+add_executable( xb_test_filter ${PROJECT_SOURCE_DIR}/tests/xb_test_filter.cpp )
+target_link_libraries( xb_test_filter ${EXTRA_LIBS})
+add_test( NAME xbFilter COMMAND xb_test_filter QUIET )
+ENDIF( XB_FILTER_SUPPORT )
+
+IF( XB_BLOCKREAD_SUPPORT )
+add_executable( xb_test_blockread ${PROJECT_SOURCE_DIR}/tests/xb_test_blockread.cpp )
+target_link_libraries( xb_test_blockread ${EXTRA_LIBS})
+add_test( NAME xbBlockRead COMMAND xb_test_blockread QUIET )
+ENDIF( XB_BLOCKREAD_SUPPORT )
+
+
+IF( XB_LOCKING_SUPPORT )
+add_executable( xb_test_lock ${PROJECT_SOURCE_DIR}/tests/xb_test_lock.cpp )
+target_link_libraries( xb_test_lock ${EXTRA_LIBS})
+add_test( NAME xbLock COMMAND xb_test_lock QUIET )
+IF( HAVE_CREATEPROCESSW_F )
+add_executable( xb_test_lock2 ${PROJECT_SOURCE_DIR}/tests/xb_test_lock2.cpp )
+target_link_libraries( xb_test_lock2 ${EXTRA_LIBS})
+ENDIF( HAVE_CREATEPROCESSW_F )
+ENDIF( XB_LOCKING_SUPPORT )
+
+#build example programs
+IF( XB_EXAMPLES_SUPPORT )
+ add_executable( xb_ex_string ${PROJECT_SOURCE_DIR}/examples/xb_ex_string.cpp )
+ target_link_libraries( xb_ex_string ${EXTRA_LIBS})
+
+ add_executable( xb_ex_date ${PROJECT_SOURCE_DIR}/examples/xb_ex_date.cpp )
+ target_link_libraries( xb_ex_date ${EXTRA_LIBS})
+
+ IF( XB_DBF3_SUPPORT )
+ add_executable( xb_ex_v3_create_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v3_create_dbf.cpp )
+ target_link_libraries( xb_ex_v3_create_dbf ${EXTRA_LIBS})
+
+ add_executable( xb_ex_v3_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v3_upd_dbf.cpp )
+ target_link_libraries( xb_ex_v3_upd_dbf ${EXTRA_LIBS})
+ ENDIF( XB_DBF3_SUPPORT )
+
+ IF( XB_DBF4_SUPPORT )
+ add_executable( xb_ex_v4_create_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_create_dbf.cpp )
+ target_link_libraries( xb_ex_v4_create_dbf ${EXTRA_LIBS})
+ ENDIF( XB_DBF4_SUPPORT )
+
+ IF( XB_EXPRESSION_SUPPORT )
+ add_executable( xb_ex_expression ${PROJECT_SOURCE_DIR}/examples/xb_ex_expression.cpp )
+ target_link_libraries( xb_ex_expression ${EXTRA_LIBS})
+ ENDIF( XB_EXPRESSION_SUPPORT )
+
+ add_executable( xb_ex_v4_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_upd_dbf.cpp )
+ target_link_libraries( xb_ex_v4_upd_dbf ${EXTRA_LIBS})
+
+ add_executable( xb_ex_ssv ${PROJECT_SOURCE_DIR}/examples/xb_ex_ssv.cpp )
+ target_link_libraries( xb_ex_ssv ${EXTRA_LIBS})
+
+ IF( XB_LOGGING_SUPPORT )
+ add_executable( xb_ex_log ${PROJECT_SOURCE_DIR}/examples/xb_ex_log.cpp )
+ target_link_libraries( xb_ex_log ${EXTRA_LIBS})
+ ENDIF( XB_LOGGING_SUPPORT )
+
+ENDIF( XB_EXAMPLES_SUPPORT )
+
+#build utility programs
+IF( XB_UTILS_SUPPORT )
+
+ add_executable( xb_cfg_check ${PROJECT_SOURCE_DIR}/utils/xb_cfg_check.cpp )
+ target_link_libraries( xb_cfg_check ${EXTRA_LIBS})
+
+ add_executable( xb_copydbf ${PROJECT_SOURCE_DIR}/utils/xb_copydbf.cpp )
+ target_link_libraries( xb_copydbf ${EXTRA_LIBS})
+
+ add_executable( xb_dbfutil ${PROJECT_SOURCE_DIR}/utils/xb_dbfutil.cpp )
+ target_link_libraries( xb_dbfutil ${EXTRA_LIBS})
+
+ add_executable( xb_deletall ${PROJECT_SOURCE_DIR}/utils/xb_deletall.cpp )
+ target_link_libraries( xb_deletall ${EXTRA_LIBS})
+
+ add_executable( xb_dumpdbt ${PROJECT_SOURCE_DIR}/utils/xb_dumpdbt.cpp )
+ target_link_libraries( xb_dumpdbt ${EXTRA_LIBS})
+
+ add_executable( xb_dumprecs ${PROJECT_SOURCE_DIR}/utils/xb_dumprecs.cpp )
+ target_link_libraries( xb_dumprecs ${EXTRA_LIBS})
+
+ add_executable( xb_import ${PROJECT_SOURCE_DIR}/utils/xb_import.cpp )
+ target_link_libraries( xb_import ${EXTRA_LIBS})
+
+ add_executable( xb_tblinfo ${PROJECT_SOURCE_DIR}/utils/xb_tblinfo.cpp )
+ target_link_libraries( xb_tblinfo ${EXTRA_LIBS})
+
+ IF( XB_SQL_SUPPORT )
+ add_executable( xb_execsql ${PROJECT_SOURCE_DIR}/utils/xb_execsql.cpp )
+ target_link_libraries( xb_execsql ${EXTRA_LIBS})
+ ENDIF( XB_SQL_SUPPORT )
+
+ add_executable( xb_pack ${PROJECT_SOURCE_DIR}/utils/xb_pack.cpp )
+ target_link_libraries( xb_pack ${EXTRA_LIBS})
+
+ add_executable( xb_undelall ${PROJECT_SOURCE_DIR}/utils/xb_undelall.cpp )
+ target_link_libraries( xb_undelall ${EXTRA_LIBS})
+
+ install (TARGETS xb_cfg_check DESTINATION bin)
+ install (TARGETS xb_copydbf DESTINATION bin)
+ install (TARGETS xb_dbfutil DESTINATION bin)
+ install (TARGETS xb_deletall DESTINATION bin)
+ install (TARGETS xb_dumpdbt DESTINATION bin)
+ install (TARGETS xb_dumprecs DESTINATION bin)
+ install (TARGETS xb_import DESTINATION bin)
+ install (TARGETS xb_pack DESTINATION bin)
+ install (TARGETS xb_undelall DESTINATION bin)
+ IF( XB_SQL_SUPPORT )
+ install (TARGETS xb_execsql DESTINATION bin)
+ ENDIF( XB_SQL_SUPPORT )
+
+
+
+ENDIF( XB_UTILS_SUPPORT )
+
+install (FILES ${PROJECT_BINARY_DIR}/include/xbconfig.h
+ ${PROJECT_SOURCE_DIR}/include/xbase.h
+ ${PROJECT_SOURCE_DIR}/include/xbbcd.h
+ ${PROJECT_SOURCE_DIR}/include/xbblkread.h
+ ${PROJECT_SOURCE_DIR}/include/xbdate.h
+ ${PROJECT_SOURCE_DIR}/include/xbdbf.h
+ ${PROJECT_SOURCE_DIR}/include/xbexp.h
+ ${PROJECT_SOURCE_DIR}/include/xbexpnode.h
+ ${PROJECT_SOURCE_DIR}/include/xbfile.h
+ ${PROJECT_SOURCE_DIR}/include/xbfilter.h
+ ${PROJECT_SOURCE_DIR}/include/xbindex.h
+ ${PROJECT_SOURCE_DIR}/include/xblnklst.h
+ ${PROJECT_SOURCE_DIR}/include/xblnklstord.h
+ ${PROJECT_SOURCE_DIR}/include/xblnknod.h
+ ${PROJECT_SOURCE_DIR}/include/xblog.h
+ ${PROJECT_SOURCE_DIR}/include/xbmemo.h
+ ${PROJECT_SOURCE_DIR}/include/xbretcod.h
+ ${PROJECT_SOURCE_DIR}/include/xbsql.h
+ ${PROJECT_SOURCE_DIR}/include/xbssv.h
+ ${PROJECT_SOURCE_DIR}/include/xbstring.h
+ ${PROJECT_SOURCE_DIR}/include/xbtag.h
+ ${PROJECT_SOURCE_DIR}/include/xbtblmgr.h
+ ${PROJECT_SOURCE_DIR}/include/xbtypes.h
+ ${PROJECT_SOURCE_DIR}/include/xbuda.h
+ ${PROJECT_SOURCE_DIR}/include/xbxbase.h
+ DESTINATION include/${CMAKE_PROJECT_NAME})
+
+IF( NOT WIN32 )
+install (FILES ${PROJECT_PARENT_DIR}/docs/man/xb_cfg_chk.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_copydbf.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dbfutil.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_deletall.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dumpdbt.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dumprecs.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_import.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_pack.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_tblinfo.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_undelall.1.gz
+
+ DESTINATION man/man1)
+
+ENDIF( NOT WIN32 )
+
+
+SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.1.4 SOVERSION 0 )
+
+IF( WIN32 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION bin)
+ELSE( WIN32 )
+ IF( EXISTS /usr/local/lib64 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION lib64/${CMAKE_PROJECT_NAME})
+ ELSE( EXISTS /usr/local/lib64 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION lib/${CMAKE_PROJECT_NAME})
+ ENDIF( EXISTS /usr/local/lib64 )
+ENDIF( WIN32 )
diff --git a/1Tdata/xbase/xbase64-4.1.4/build/linux32/README.linux32 b/1Tdata/xbase/xbase64-4.1.4/build/linux32/README.linux32
new file mode 100644
index 0000000..ebb193e
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/build/linux32/README.linux32
@@ -0,0 +1,22 @@
+
+3/26/23
+
+Install steps for Xbase64 on a linux 32 bit platform.
+
+1) Verify cmake is installed with command: cmake --version
+ If it is not installed, take necessary steps to install it.
+
+2) Verify gcc is intalled with the command: gcc --version
+ If it is not installed, take necessary steps to install it.
+
+3) Build xbase64 library
+
+ cd build/linux32 (go to the appropriate build directory)
+ cmake . (configure for your environment)
+ make (compile it)
+ make test (test library build)
+ sudo make install (install it)
+ xb_cfg_chk (test install)
+
+
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/build/linux64/CMakeLists.txt b/1Tdata/xbase/xbase64-4.1.4/build/linux64/CMakeLists.txt
new file mode 100755
index 0000000..ce2566a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/build/linux64/CMakeLists.txt
@@ -0,0 +1,809 @@
+cmake_minimum_required(VERSION 3.2)
+
+project (Xbase64)
+set( xbase_VERSION_MAJOR 4 )
+set( xbase_VERSION_MINOR 1 )
+set( xbase_VERSION_PATCH 4 )
+
+MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
+MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
+MESSAGE( "--- Project Name: " ${CMAKE_PROJECT_NAME} )
+MESSAGE( "--- Install Prefix: " ${CMAKE_INSTALL_PREFIX} )
+
+#Set compiler options
+
+IF( CMAKE_COMPILER_IS_GNUCXX )
+ MESSAGE( "Setting GNU compiler options" )
+ add_compile_options( -Wall -Wsign-conversion )
+# add_compile_options( -Wall -Wconversion -Wsign-conversion )
+ SET( VERBOSE 1 )
+ENDIF( CMAKE_COMPILER_IS_GNUCXX )
+
+IF( BORLAND )
+ MESSAGE ("BORLAND COMPILER" )
+ #set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w-8022" )
+ add_compile_options( -w-8022 )
+ENDIF( BORLAND )
+
+MESSAGE( "--- Checking integer sizes" )
+INCLUDE(CheckTypeSize)
+CHECK_TYPE_SIZE( "short int" SHORT_INT )
+CHECK_TYPE_SIZE( int INT )
+CHECK_TYPE_SIZE( __int32 __INT32 )
+CHECK_TYPE_SIZE( int32_t INT32_T )
+CHECK_TYPE_SIZE( long LONG_INT )
+CHECK_TYPE_SIZE( __int64 __INT64 )
+CHECK_TYPE_SIZE( int64_t INT64_T )
+CHECK_TYPE_SIZE( "long long" LONG_LONG )
+CHECK_TYPE_SIZE( u_int64_t U_INT64_T )
+CHECK_TYPE_SIZE( uint64_t UINT64_T )
+CHECK_TYPE_SIZE( "unsigned __int64" UNSIGNED__INT64 )
+CHECK_TYPE_SIZE( "unsigned long long" UNSIGNED_LONG_LONG )
+
+CHECK_TYPE_SIZE( "double" DOUBLE )
+MESSAGE( "--- Double size = " ${DOUBLE} )
+
+
+#determine how 16 bit integer defined on this platform
+SET( iSize 0 )
+IF( HAVE_SHORT_INT AND ${SHORT_INT} EQUAL 2 )
+ SET( xbInt16 "short int" )
+ SET( xbUInt16 "unsigned short int" )
+ SET( iSize ${SHORT_INT} )
+ MESSAGE( "--- xbInt16 = [short int]" )
+ MESSAGE( "--- xbUInt16 = [unsigned short int]" )
+
+ENDIF( HAVE_SHORT_INT AND ${SHORT_INT} EQUAL 2 )
+IF( NOT ${iSize} EQUAL 2 )
+ MESSAGE( "FATAL_ERROR Could not detect 16 bit integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 2 )
+
+#determine how 32 bit integer defined on this platform
+SET( iSize 0 )
+IF( HAVE_INT AND ${INT} EQUAL 4 )
+ SET( xbInt32 int )
+ SET( xbUInt32 "unsigned int" )
+ SET( iSize ${INT} )
+ MESSAGE( "--- xbInt32 = [int]" )
+ MESSAGE( "--- xbUInt32 = [unsigned int]" )
+ENDIF( HAVE_INT AND ${INT} EQUAL 4 )
+
+IF(( NOT iSize EQUAL 4 ) AND HAVE___INT32 )
+ MESSAGE( __int untested if block - see CMakeLists.txt)
+ SET( xbInt32 __int32 )
+ SET( xbUInt32 "unsigned __int32" )
+ SET( iSize ${__INT} )
+ MESSAGE( "--- xbInt32 = [__int]" )
+ MESSAGE( "--- xbUInt32 = [unsigned __int]" )
+ENDIF(( NOT iSize EQUAL 4 ) AND HAVE___INT32 )
+
+IF(( NOT iSize EQUAL 4 ) AND HAVE_INT32_T )
+ SET( xbInt32 int32_t )
+ SET( xbUInt32 "u_int32_t" )
+ SET( iSize ${INT32_T} )
+ MESSAGE( "--- xbInt32 = [int32_t]" )
+ MESSAGE( "--- xbUInt32 = [u_int32_t]" )
+ENDIF(( NOT iSize EQUAL 4 ) AND HAVE_INT32_T )
+
+IF( NOT ${iSize} EQUAL 4 )
+ MESSAGE( "FATAL_ERROR Could not detect 32 bit integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 4 )
+
+#determine how 64 bit integer defined on this platform
+SET( iSize 0 )
+IF( HAVE___INT64 )
+ SET( xbInt64 __int64 )
+ SET( iSize ${__INT64} )
+ MESSAGE( "--- xbInt64 = [__int64]" )
+ENDIF( HAVE___INT64 )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_INT64_T )
+ SET( xbInt64 int64_t )
+ SET( iSize ${INT64_T} )
+ MESSAGE( "--- xbInt64 = [int64_t]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_INT64_T )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_LONG_LONG )
+ SET( xbInt64 "long long" )
+ SET( iSize ${LONG_LONG} )
+ MESSAGE( "--- xbInt64 = [long long]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_LONG_LONG )
+
+IF( NOT ${iSize} EQUAL 8 )
+ MESSAGE( "FATAL_ERROR Could not detect 64 bit integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 8 )
+
+#determine how 64 bit unsigned integer defined on this platform
+SET( iSize 0 )
+IF( HAVE_UNSIGNED__INT64 )
+ SET( xbUInt64 "unsigned __int64" )
+ SET( iSize ${UNSIGNED__INT64} )
+ MESSAGE( "--- xbUInt64 = [unsigned __int64]" )
+ENDIF( HAVE_UNSIGNED__INT64 )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_UINT64_T )
+ SET( xbUInt64 "uint64_t" )
+ SET( iSize ${UINT64_T} )
+ MESSAGE( "--- xbUInt64 = [uint64_t]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_UINT64_T )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_U_INT64_T )
+ SET( xbUInt64 u_int64_t )
+ SET( iSize ${U_INT64_T} )
+ MESSAGE( "--- xbUInt64 = [u_int64_t]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_U_INT64_T )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_UNSIGNED_LONG_LONG )
+ SET( xbUInt64 "unsigned long long" )
+ SET( iSize ${UNSIGNED_LONG_LONG} )
+ MESSAGE( "--- xbUInt64 = [unsigned long long]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_UNSIGNED_LONG_LONG )
+
+IF( NOT ${iSize} EQUAL 8 )
+ MESSAGE( "FATAL_ERROR Could not detect 64 bit unsigned integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 8 )
+
+#Library options
+option( BUILD_SHARED_LIBS "Build shared libraries" ON)
+option( XB_DBF3_SUPPORT "Compile DBase File Format Version 3 support" ON)
+option( XB_DBF4_SUPPORT "Compile DBase File Format Version 4 support" ON)
+option( XB_MEMO_SUPPORT "Compile memo field support into library" ON)
+option( XB_NDX_SUPPORT "Compile NDX Index support into library" ON)
+option( XB_MDX_SUPPORT "Compile MDX Index support into library" ON)
+option( XB_LOCKING_SUPPORT "Compile Multi User Locking support into library" ON)
+option( XB_TDX_SUPPORT "Compile temporary index support into library" ON)
+
+option( XB_LOGGING_SUPPORT "Compile message logging support into library" ON)
+option( XB_LINKLIST_SUPPORT "Compile Link List routines into library" ON)
+option( XB_FUNCTION_SUPPORT "Compile XBase Function support into library" ON)
+option( XB_EXPRESSION_SUPPORT "Compile Expression support into library" ON)
+option( XB_INF_SUPPORT "Compile NDX INF file support into library" ON)
+option( XB_FILTER_SUPPORT "Compile Filter support into library" ON)
+option( XB_BLOCKREAD_SUPPORT "Compile Block Read support into library" ON)
+option( XB_SQL_SUPPORT "Compile SQL support into library - alpha" ON)
+option( XB_DEBUG_SUPPORT "Compile debug logic into library" ON)
+option( XB_UTILS_SUPPORT "Compile utility programs" ON)
+option( XB_EXAMPLES_SUPPORT "Compile example programs" ON)
+
+Message( "--- BUILD_SHARED_LIBS " ${BUILD_SHARED_LIBS})
+Message( "--- XB_DBF3_SUPPORT " ${XB_DBF3_SUPPORT})
+Message( "--- XB_DBF4_SUPPORT " ${XB_DBF4_SUPPORT})
+Message( "--- XB_MEMO_SUPPORT " ${XB_MEMO_SUPPORT})
+Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
+Message( "--- XB_MDX_SUPPORT " ${XB_MDX_SUPPORT})
+Message( "--- XB_TDX_SUPPORT " ${XB_TDX_SUPPORT})
+Message( "--- XB_LOCKING_SUPPORT " ${XB_LOCKING_SUPPORT})
+Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
+Message( "--- XB_FUNCTION_SUPPORT " ${XB_FUNCTION_SUPPORT})
+Message( "--- XB_EXPRESSION_SUPPORT " ${XB_EXPRESSION_SUPPORT})
+Message( "--- XB_FILTER_SUPPORT " ${XB_FILTER_SUPPORT})
+Message( "--- XB_DEBUG_SUPPORT " ${XB_DEBUG_SUPPORT})
+Message( "--- XB_UTILS_SUPPORT " ${XB_UTILS_SUPPORT})
+Message( "--- XB_EXAMPLES_SUPPORT " ${XB_EXAMPLES_SUPPORT})
+Message( "--- XB_LOGGING_SUPPORT " ${XB_LOGGING_SUPPORT})
+Message( "--- XB_SQL_SUPPORT " ${XB_SQL_SUPPORT})
+Message( "--- XB_INF_SUPPORT " ${XB_INF_SUPPORT})
+Message( "--- XB_BLOCKREAD_SUPPORT " ${XB_BLOCKREAD_SUPPORT})
+
+IF( XB_DEBUG_SUPPORT )
+ Message( "--- Adding debug support" )
+ set( CMAKE_BUILD_TYPE Debug )
+IF( CMAKE_COMPILER_IS_GNUCXX )
+ add_compile_options( -Og )
+ENDIF( CMAKE_COMPILER_IS_GNUCXX )
+ENDIF( XB_DEBUG_SUPPORT )
+
+IF( CMAKE_SIZEOF_VOID_P EQUAL 8 )
+ MESSAGE( "--- 64 bit compiler detected" )
+ set( XB_PLATFORM "x64" )
+ set( XB_PLATFORM_64 1 )
+ set( XB_LIBNAME "xbase64" )
+
+ELSE( CMAKE_SIZEOF_VOID_P EQUAL 8 )
+ MESSAGE( "--- 32 bit compiler detected" )
+ set( XB_PLATFORM "x86" )
+ set( XB_PLATFORM_32 1 )
+ set( XB_LIBNAME "xbase32" )
+
+ENDIF( CMAKE_SIZEOF_VOID_P EQUAL 8 )
+
+
+#Check for the existence of various header files
+INCLUDE (CheckIncludeFiles)
+CHECK_INCLUDE_FILES (ctype.h HAVE_CTYPE_H)
+CHECK_INCLUDE_FILES (dirent.h HAVE_DIRENT_H)
+CHECK_INCLUDE_FILES (fcntl.h HAVE_FCNTL_H)
+CHECK_INCLUDE_FILES (inttypes.h HAVE_INTTYPES_H)
+CHECK_INCLUDE_FILES (pwd.h HAVE_PWD_H)
+CHECK_INCLUDE_FILES (stdarg.h HAVE_STDARG_H)
+CHECK_INCLUDE_FILES (stdargs.h HAVE_STDARGS_H)
+CHECK_INCLUDE_FILES (string.h HAVE_STRING_H)
+CHECK_INCLUDE_FILES (strings.h HAVE_STRINGS_H)
+CHECK_INCLUDE_FILES (sys/stat.h HAVE_STAT_H)
+CHECK_INCLUDE_FILES (unistd.h HAVE_UNISTD_H)
+CHECK_INCLUDE_FILES (varargs.h HAVE_VARARGS_H)
+CHECK_INCLUDE_FILES (windows.h HAVE_WINDOWS_H)
+
+#Check for the existence of various function calls
+INCLUDE( CheckFunctionExists )
+CHECK_FUNCTION_EXISTS(_close HAVE__CLOSE_F)
+CHECK_FUNCTION_EXISTS(fcntl HAVE_FCNTL_F)
+CHECK_FUNCTION_EXISTS(_fdopen HAVE__FDOPEN_F)
+CHECK_FUNCTION_EXISTS(fopen_s HAVE_FOPEN_S_F)
+CHECK_FUNCTION_EXISTS(_fsopen HAVE__FSOPEN_F)
+CHECK_FUNCTION_EXISTS(_fileno HAVE__FILENO_F)
+CHECK_FUNCTION_EXISTS(fork HAVE_FORK_F)
+CHECK_FUNCTION_EXISTS(_fseeki64 HAVE__FSEEKI64_F)
+CHECK_FUNCTION_EXISTS(fseeko HAVE_FSEEKO_F)
+CHECK_FUNCTION_EXISTS(ftruncate HAVE_FTRUNCATE_F)
+CHECK_FUNCTION_EXISTS(getenv_s HAVE_GETENV_S_F)
+
+CHECK_FUNCTION_EXISTS(_localtime64_s HAVE__LOCALTIME64_S_F)
+CHECK_FUNCTION_EXISTS(LockFile HAVE_LOCKFILE_F)
+CHECK_FUNCTION_EXISTS(locking HAVE_LOCKING_F)
+CHECK_FUNCTION_EXISTS(_locking HAVE__LOCKING_F)
+CHECK_FUNCTION_EXISTS(_open HAVE__OPEN_F)
+CHECK_FUNCTION_EXISTS(SetEndOfFile HAVE_SETENDOFFILE_F)
+
+CHECK_FUNCTION_EXISTS(vsnprintf HAVE_VSNPRINTF_F)
+CHECK_FUNCTION_EXISTS(_vsnprintf_s HAVE__VSNPRINTF_S_F)
+
+
+CHECK_FUNCTION_EXISTS(getopt HAVE_GETOPT_F)
+
+IF( WIN32 )
+
+# Use CHECK_SYMBOL_EXISTS for the Win32API instead of CHECK_FUNCTION_EXISTS
+# Can't detect inline functions in headers
+# Can't detect due to mismatch of calling conventions
+# Can't detect mangled names
+
+INCLUDE( CheckSymbolExists )
+CHECK_SYMBOL_EXISTS(CreateProcessW Windows.h HAVE_CREATEPROCESSW_F )
+CHECK_SYMBOL_EXISTS(vsprintf_s stdio.h HAVE_VSPRINTF_S_F )
+
+ENDIF ( WIN32 )
+
+# IF( NOT HAVE_SENTENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND BORLAND )
+# # ----fix me----
+# # cmake CHECK_FUNCTION_EXISTS - could not find Borland 5.5 SetEndOfFile
+# Set( HAVE_SETENDOFFILE_F "HAVE_SETENDOFFILE_H" )
+# ENDIF ( NOT HAVE_SENTENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND BORLAND )
+
+IF( NOT HAVE_SETENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND WIN32 )
+ # ----fix me----
+ # cmake CHECK_FUNCTION_EXISTS - could not find Borland 5.5, or Windows VS 32 bit SetEndOfFile
+ Set( HAVE_SETENDOFFILE_F "HAVE_SETENDOFFILE_F" )
+ENDIF ( NOT HAVE_SETENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND WIN32 )
+
+IF( XB_NDX_SUPPORT OR XB_MDX_SUPPORT )
+ Set( XB_INDEX_SUPPORT "1" )
+ENDIF( XB_NDX_SUPPORT OR XB_MDX_SUPPORT )
+
+
+# Set directories
+# PROJECT_PARENT_DIR is two nodes higher
+get_filename_component( PROJECT_PARENT_DIR ${PROJECT_BINARY_DIR} DIRECTORY )
+get_filename_component( PROJECT_PARENT_DIR ${PROJECT_PARENT_DIR} DIRECTORY )
+
+# MESSAGE( "PROJECT_PARENT_DIR = " ${PROJECT_PARENT_DIR} )
+# MESSAGE( "PROJECT_BINARY_DIR = " ${PROJECT_BINARY_DIR} )
+
+
+set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin )
+set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib )
+set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib )
+
+set( PROJECT_SOURCE_DIR ${PROJECT_PARENT_DIR}/src )
+set( PROJECT_DATA_DIR ${PROJECT_PARENT_DIR}/data )
+set( PROJECT_LOG_DIR ${PROJECT_PARENT_DIR}/logs )
+set( PROJECT_TEMP_DIR ${PROJECT_PARENT_DIR}/temp )
+set( EXTRA_LIBS ${EXTRA_LIBS} ${XB_LIBNAME} )
+
+
+# Undo bad decisions
+IF( XB_PLATFORM_32 AND XB_LARGEFILE_SUPPORT )
+ MESSAGE( "--- Can't build 64 bit environment with a 32 bit compiler" )
+ MESSAGE( "--- XB_LARGEFILE_SUPPORT set to OFF" )
+ set( XB_LARGEFILE_SUPPORT OFF CACHE BOOL "Use 64 bit large file support?" FORCE )
+ENDIF ( XB_PLATFORM_32 AND XB_LARGEFILE_SUPPORT )
+
+IF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
+ MESSAGE( "--- At lease one file format is required. Defaulting to Version 4" )
+ set( XB_DBF4_SUPPORT ON CACHE BOOL "Compile DBase File Format Version 4 support" FORCE )
+ENDIF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
+
+IF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+ MESSAGE( "--- Link List support required for DBF V4 Memo files. Setting to ON" )
+ set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
+ENDIF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+
+
+
+
+IF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+ MESSAGE( "--- Link List support required for locking functions. Setting to ON" )
+ set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
+ENDIF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+
+IF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+ MESSAGE( "--- MDX support required for Temporary indices. Setting to ON" )
+ set( XB_MDX_SUPPORT ON CACHE BOOL "Compile temporary index support into library" FORCE )
+ENDIF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+
+IF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+ MESSAGE( "--- Expression required for indices. Setting to ON" )
+ set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
+ Set( XB_INDEX_SUPPORT "1" )
+ENDIF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+
+IF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
+ MESSAGE( "--- Function support required for expressions. Setting to ON" )
+ set( XB_FUNCTION_SUPPORT ON CACHE BOOL "Compile XBase Function support into library" FORCE )
+ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
+
+IF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+ MESSAGE( "--- Linklist support required for expressions. Setting to ON" )
+ set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
+ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+
+IF( XB_SQL_SUPPORT AND NOT XB_MEMO_SUPPORT )
+ MESSAGE( "--- Memo support required for SQL. Setting to ON" )
+ set( XB_MEMO_SUPPORT ON CACHE BOOL "Compile memo field support into library" FORCE )
+ENDIF( XB_SQL_SUPPORT AND NOT XB_MEMO_SUPPORT )
+
+IF( XB_SQL_SUPPORT AND NOT XB_DBF4_SUPPORT )
+ MESSAGE( "--- DBF4 support required for SQL. Setting to ON" )
+ set( XB_DBF4_SUPPORT ON CACHE BOOL "Compile DBase File Format Version 4 support" FORCE )
+ENDIF( XB_SQL_SUPPORT AND NOT XB_DBF4_SUPPORT )
+
+IF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+ MESSAGE( "--- Expression required for filters. Setting to ON" )
+ set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
+ENDIF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+
+IF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
+ MESSAGE( "--- BLOCKREAD support required for SQL. Setting to ON" )
+ set( XB_BLOCKREAD_SUPPORT ON CACHE BOOL "Compile Block Read support into library" FORCE )
+ENDIF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
+
+IF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+ MESSAGE( "--- MDX support required for Temporary indices. Setting to ON" )
+ set( XB_MDX_SUPPORT ON CACHE BOOL "Compile temporary index support into library" FORCE )
+ENDIF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+
+
+
+# Build configuration header file
+configure_file (
+ "${PROJECT_SOURCE_DIR}/include/xbconfig.h.in"
+ "${PROJECT_BINARY_DIR}/include/xbconfig.h"
+)
+
+# Microsoft Windows compiler settings
+IF( MSVC )
+# add_definitions( /D_CRT_SECURE_NO_WARNINGS)
+ add_definitions( /EHsc )
+ENDIF( MSVC )
+
+
+# set up include directories
+include_directories( "${PROJECT_BINARY_DIR}/include" )
+include_directories( "${PROJECT_SOURCE_DIR}/include" )
+
+#build the library
+IF ( BUILD_SHARED_LIBS )
+ set( LIB_TYPE SHARED )
+ELSE( BUILD_SHARED_LIBS )
+ set( LIB_TYPE STATIC )
+ENDIF( BUILD_SHARED_LIBS )
+MESSAGE( "--- Lib type " ${LIB_TYPE} )
+
+
+
+set (SOURCES ${PROJECT_SOURCE_DIR}/core/xbstring.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbssv.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbdate.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbtblmgr.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbxbase.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbfile.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbdbf.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbfields.cpp
+ ${PROJECT_SOURCE_DIR}/core/xblog.cpp)
+
+IF( XB_MEMO_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo.cpp )
+ENDIF( XB_MEMO_SUPPORT )
+
+IF( XB_DBF3_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbdbf3.cpp )
+ IF( XB_MEMO_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo3.cpp )
+ ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF3_SUPPORT )
+
+IF( XB_DBF4_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbdbf4.cpp )
+ IF( XB_MEMO_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo4.cpp )
+ ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF4_SUPPORT )
+
+IF( XB_FUNCTION_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbfuncs.cpp )
+ENDIF( XB_FUNCTION_SUPPORT )
+
+IF( XB_EXPRESSION_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbexpnode.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbexp.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbuda.cpp )
+ENDIF( XB_EXPRESSION_SUPPORT )
+
+IF( XB_INDEX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbbcd.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixbase.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbtag.cpp )
+ENDIF( XB_INDEX_SUPPORT )
+
+IF( XB_NDX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixndx.cpp )
+ENDIF( XB_NDX_SUPPORT )
+
+
+IF( XB_MDX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixmdx.cpp )
+ENDIF( XB_MDX_SUPPORT )
+
+IF( XB_TDX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixtdx.cpp )
+ENDIF( XB_TDX_SUPPORT )
+
+
+IF( XB_SQL_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbalttbl.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrix.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrtbl.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdelete.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdrpix.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdrptbl.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbinsert.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbset.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbsql.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbstmt.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbselect.cpp )
+ENDIF( XB_SQL_SUPPORT )
+
+
+IF( XB_FILTER_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbfilter.cpp )
+ENDIF( XB_FILTER_SUPPORT )
+
+IF( XB_BLOCKREAD_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbblockread.cpp )
+ENDIF( XB_BLOCKREAD_SUPPORT )
+
+
+include( GenerateExportHeader )
+#add_library( xbase ${LIB_TYPE} ${SOURCES} )
+add_library( ${XB_LIBNAME} ${LIB_TYPE} ${SOURCES} )
+#add_library( ${CMAKE_PROJECT_NAME} ${LIB_TYPE} ${SOURCES} )
+
+
+IF( WIN32 )
+MESSAGE( "--- Generating Windows Library Headers" )
+
+#GENERATE_EXPORT_HEADER( xbase
+# BASE_NAME xbase
+
+GENERATE_EXPORT_HEADER( ${XB_LIBNAME}
+ BASE_NAME ${XB_LIBNAME}
+ EXPORT_MACRO_NAME xbase_EXPORT
+ EXPORT_FILE_NAME xbase_Export.h
+ STATIC_DEFINE xbase_BUILT_AS_STATIC
+)
+ENDIF( WIN32 )
+
+
+#build test programs
+enable_testing()
+
+add_executable( xb_test_string ${PROJECT_SOURCE_DIR}/tests/xb_test_string.cpp )
+target_link_libraries( xb_test_string ${EXTRA_LIBS})
+add_test( NAME xbString COMMAND xb_test_string QUIET )
+
+add_executable( xb_test_date ${PROJECT_SOURCE_DIR}/tests/xb_test_date.cpp )
+target_link_libraries( xb_test_date ${EXTRA_LIBS})
+add_test( NAME xbDate COMMAND xb_test_date QUIET )
+
+add_executable( xb_test_tblmgr ${PROJECT_SOURCE_DIR}/tests/xb_test_tblmgr.cpp )
+target_link_libraries( xb_test_tblmgr ${EXTRA_LIBS})
+add_test( NAME xbTblMgr COMMAND xb_test_tblmgr QUIET )
+
+add_executable( xb_test_xbase ${PROJECT_SOURCE_DIR}/tests/xb_test_xbase.cpp )
+target_link_libraries( xb_test_xbase ${EXTRA_LIBS})
+add_test( NAME xbXBase COMMAND xb_test_xbase QUIET )
+
+add_executable( xb_test_file ${PROJECT_SOURCE_DIR}/tests/xb_test_file.cpp )
+target_link_libraries( xb_test_file ${EXTRA_LIBS})
+add_test( NAME xbFile COMMAND xb_test_file QUIET )
+
+add_executable( xb_test_log ${PROJECT_SOURCE_DIR}/tests/xb_test_log.cpp )
+target_link_libraries( xb_test_log ${EXTRA_LIBS})
+add_test( NAME xbLog COMMAND xb_test_log QUIET )
+
+IF( XB_LINKLIST_SUPPORT )
+add_executable( xb_test_linklist ${PROJECT_SOURCE_DIR}/tests/xb_test_linklist.cpp )
+target_link_libraries( xb_test_linklist ${EXTRA_LIBS})
+add_test( NAME xbLinkList COMMAND xb_test_linklist QUIET )
+ENDIF( XB_LINKLIST_SUPPORT )
+
+IF( XB_DBF3_SUPPORT )
+add_executable( xb_test_dbf_v3_nomemos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v3_nomemos.cpp )
+target_link_libraries( xb_test_dbf_v3_nomemos ${EXTRA_LIBS})
+add_test( NAME xbDbfV3NoMemos COMMAND xb_test_dbf_v3_nomemos QUIET )
+
+IF( XB_MEMO_SUPPORT )
+add_executable( xb_test_dbf_v3_memos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v3_memos.cpp )
+target_link_libraries( xb_test_dbf_v3_memos ${EXTRA_LIBS})
+add_test( NAME xbDbfV3Memos COMMAND xb_test_dbf_v3_memos QUIET )
+
+ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF3_SUPPORT )
+
+IF( XB_DBF4_SUPPORT )
+add_executable( xb_test_dbf_v4_nomemos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v4_nomemos.cpp )
+target_link_libraries( xb_test_dbf_v4_nomemos ${EXTRA_LIBS})
+add_test( NAME xbDbfV4NoMemos COMMAND xb_test_dbf_v4_nomemos QUIET )
+
+IF( XB_MEMO_SUPPORT )
+add_executable( xb_test_dbf_v4_memos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v4_memos.cpp )
+target_link_libraries( xb_test_dbf_v4_memos ${EXTRA_LIBS})
+add_test( NAME xbDbfV4Memos COMMAND xb_test_dbf_v4_memos QUIET )
+
+ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF4_SUPPORT )
+
+IF( XB_FUNCTION_SUPPORT )
+add_executable( xb_test_funcs ${PROJECT_SOURCE_DIR}/tests/xb_test_funcs.cpp )
+target_link_libraries( xb_test_funcs ${EXTRA_LIBS})
+add_test( NAME xbFunctions COMMAND xb_test_funcs QUIET )
+ENDIF( XB_FUNCTION_SUPPORT )
+
+IF( XB_NDX_SUPPORT )
+IF( XB_DBF3_SUPPORT )
+add_executable( xb_test_ndx ${PROJECT_SOURCE_DIR}/tests/xb_test_ndx.cpp )
+target_link_libraries( xb_test_ndx ${EXTRA_LIBS})
+add_test( NAME xbIxNdx COMMAND xb_test_ndx QUIET )
+ENDIF( XB_DBF3_SUPPORT )
+ENDIF( XB_NDX_SUPPORT )
+
+
+
+IF( XB_DBF4_SUPPORT )
+
+IF( XB_MDX_SUPPORT )
+add_executable( xb_test_mdx ${PROJECT_SOURCE_DIR}/tests/xb_test_mdx.cpp )
+target_link_libraries( xb_test_mdx ${EXTRA_LIBS})
+add_test( NAME xbIxMdx COMMAND xb_test_mdx QUIET )
+ENDIF( XB_MDX_SUPPORT )
+
+IF( XB_TDX_SUPPORT )
+add_executable( xb_test_tdx ${PROJECT_SOURCE_DIR}/tests/xb_test_tdx.cpp )
+target_link_libraries( xb_test_tdx ${EXTRA_LIBS})
+add_test( NAME xbIxTdx COMMAND xb_test_tdx QUIET )
+ENDIF( XB_TDX_SUPPORT )
+
+ENDIF( XB_DBF4_SUPPORT )
+
+
+
+IF( XB_INDEX_SUPPORT )
+add_executable( xb_test_bcd ${PROJECT_SOURCE_DIR}/tests/xb_test_bcd.cpp )
+target_link_libraries( xb_test_bcd ${EXTRA_LIBS})
+add_test( NAME xbBcd COMMAND xb_test_bcd QUIET )
+ENDIF( XB_INDEX_SUPPORT )
+
+
+IF( XB_EXPRESSION_SUPPORT )
+
+add_executable( xb_test_expnode ${PROJECT_SOURCE_DIR}/tests/xb_test_expnode.cpp )
+target_link_libraries( xb_test_expnode ${EXTRA_LIBS})
+add_test( NAME xbExpNode COMMAND xb_test_expnode QUIET )
+
+
+add_executable( xb_test_expression ${PROJECT_SOURCE_DIR}/tests/xb_test_expression.cpp )
+target_link_libraries( xb_test_expression ${EXTRA_LIBS})
+add_test( NAME xbExpressions COMMAND xb_test_expression QUIET )
+
+add_executable( xb_test_uda ${PROJECT_SOURCE_DIR}/tests/xb_test_uda.cpp )
+target_link_libraries( xb_test_uda ${EXTRA_LIBS})
+add_test( NAME xbUda COMMAND xb_test_uda QUIET )
+
+ENDIF( XB_EXPRESSION_SUPPORT )
+
+IF( XB_SQL_SUPPORT )
+add_executable( xb_test_sql ${PROJECT_SOURCE_DIR}/tests/xb_test_sql.cpp )
+target_link_libraries( xb_test_sql ${EXTRA_LIBS})
+add_test( NAME xbSql COMMAND xb_test_sql QUIET )
+ENDIF( XB_SQL_SUPPORT )
+
+IF( XB_FILTER_SUPPORT )
+add_executable( xb_test_filter ${PROJECT_SOURCE_DIR}/tests/xb_test_filter.cpp )
+target_link_libraries( xb_test_filter ${EXTRA_LIBS})
+add_test( NAME xbFilter COMMAND xb_test_filter QUIET )
+ENDIF( XB_FILTER_SUPPORT )
+
+IF( XB_BLOCKREAD_SUPPORT )
+add_executable( xb_test_blockread ${PROJECT_SOURCE_DIR}/tests/xb_test_blockread.cpp )
+target_link_libraries( xb_test_blockread ${EXTRA_LIBS})
+add_test( NAME xbBlockRead COMMAND xb_test_blockread QUIET )
+ENDIF( XB_BLOCKREAD_SUPPORT )
+
+
+IF( XB_LOCKING_SUPPORT )
+add_executable( xb_test_lock ${PROJECT_SOURCE_DIR}/tests/xb_test_lock.cpp )
+target_link_libraries( xb_test_lock ${EXTRA_LIBS})
+add_test( NAME xbLock COMMAND xb_test_lock QUIET )
+IF( HAVE_CREATEPROCESSW_F )
+add_executable( xb_test_lock2 ${PROJECT_SOURCE_DIR}/tests/xb_test_lock2.cpp )
+target_link_libraries( xb_test_lock2 ${EXTRA_LIBS})
+ENDIF( HAVE_CREATEPROCESSW_F )
+ENDIF( XB_LOCKING_SUPPORT )
+
+#build example programs
+IF( XB_EXAMPLES_SUPPORT )
+ add_executable( xb_ex_string ${PROJECT_SOURCE_DIR}/examples/xb_ex_string.cpp )
+ target_link_libraries( xb_ex_string ${EXTRA_LIBS})
+
+ add_executable( xb_ex_date ${PROJECT_SOURCE_DIR}/examples/xb_ex_date.cpp )
+ target_link_libraries( xb_ex_date ${EXTRA_LIBS})
+
+ IF( XB_DBF3_SUPPORT )
+ add_executable( xb_ex_v3_create_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v3_create_dbf.cpp )
+ target_link_libraries( xb_ex_v3_create_dbf ${EXTRA_LIBS})
+
+ add_executable( xb_ex_v3_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v3_upd_dbf.cpp )
+ target_link_libraries( xb_ex_v3_upd_dbf ${EXTRA_LIBS})
+ ENDIF( XB_DBF3_SUPPORT )
+
+ IF( XB_DBF4_SUPPORT )
+ add_executable( xb_ex_v4_create_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_create_dbf.cpp )
+ target_link_libraries( xb_ex_v4_create_dbf ${EXTRA_LIBS})
+ ENDIF( XB_DBF4_SUPPORT )
+
+ IF( XB_EXPRESSION_SUPPORT )
+ add_executable( xb_ex_expression ${PROJECT_SOURCE_DIR}/examples/xb_ex_expression.cpp )
+ target_link_libraries( xb_ex_expression ${EXTRA_LIBS})
+ ENDIF( XB_EXPRESSION_SUPPORT )
+
+ add_executable( xb_ex_v4_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_upd_dbf.cpp )
+ target_link_libraries( xb_ex_v4_upd_dbf ${EXTRA_LIBS})
+
+ add_executable( xb_ex_ssv ${PROJECT_SOURCE_DIR}/examples/xb_ex_ssv.cpp )
+ target_link_libraries( xb_ex_ssv ${EXTRA_LIBS})
+
+ IF( XB_LOGGING_SUPPORT )
+ add_executable( xb_ex_log ${PROJECT_SOURCE_DIR}/examples/xb_ex_log.cpp )
+ target_link_libraries( xb_ex_log ${EXTRA_LIBS})
+ ENDIF( XB_LOGGING_SUPPORT )
+
+ENDIF( XB_EXAMPLES_SUPPORT )
+
+#build utility programs
+IF( XB_UTILS_SUPPORT )
+
+ add_executable( xb_cfg_check ${PROJECT_SOURCE_DIR}/utils/xb_cfg_check.cpp )
+ target_link_libraries( xb_cfg_check ${EXTRA_LIBS})
+
+ add_executable( xb_copydbf ${PROJECT_SOURCE_DIR}/utils/xb_copydbf.cpp )
+ target_link_libraries( xb_copydbf ${EXTRA_LIBS})
+
+ add_executable( xb_dbfutil ${PROJECT_SOURCE_DIR}/utils/xb_dbfutil.cpp )
+ target_link_libraries( xb_dbfutil ${EXTRA_LIBS})
+
+ add_executable( xb_deletall ${PROJECT_SOURCE_DIR}/utils/xb_deletall.cpp )
+ target_link_libraries( xb_deletall ${EXTRA_LIBS})
+
+ add_executable( xb_dumpdbt ${PROJECT_SOURCE_DIR}/utils/xb_dumpdbt.cpp )
+ target_link_libraries( xb_dumpdbt ${EXTRA_LIBS})
+
+ add_executable( xb_dumprecs ${PROJECT_SOURCE_DIR}/utils/xb_dumprecs.cpp )
+ target_link_libraries( xb_dumprecs ${EXTRA_LIBS})
+
+ add_executable( xb_import ${PROJECT_SOURCE_DIR}/utils/xb_import.cpp )
+ target_link_libraries( xb_import ${EXTRA_LIBS})
+
+ add_executable( xb_tblinfo ${PROJECT_SOURCE_DIR}/utils/xb_tblinfo.cpp )
+ target_link_libraries( xb_tblinfo ${EXTRA_LIBS})
+
+ IF( XB_SQL_SUPPORT )
+ add_executable( xb_execsql ${PROJECT_SOURCE_DIR}/utils/xb_execsql.cpp )
+ target_link_libraries( xb_execsql ${EXTRA_LIBS})
+ ENDIF( XB_SQL_SUPPORT )
+
+ add_executable( xb_pack ${PROJECT_SOURCE_DIR}/utils/xb_pack.cpp )
+ target_link_libraries( xb_pack ${EXTRA_LIBS})
+
+ add_executable( xb_undelall ${PROJECT_SOURCE_DIR}/utils/xb_undelall.cpp )
+ target_link_libraries( xb_undelall ${EXTRA_LIBS})
+
+ install (TARGETS xb_cfg_check DESTINATION bin)
+ install (TARGETS xb_copydbf DESTINATION bin)
+ install (TARGETS xb_dbfutil DESTINATION bin)
+ install (TARGETS xb_deletall DESTINATION bin)
+ install (TARGETS xb_dumpdbt DESTINATION bin)
+ install (TARGETS xb_dumprecs DESTINATION bin)
+ install (TARGETS xb_import DESTINATION bin)
+ install (TARGETS xb_pack DESTINATION bin)
+ install (TARGETS xb_undelall DESTINATION bin)
+ IF( XB_SQL_SUPPORT )
+ install (TARGETS xb_execsql DESTINATION bin)
+ ENDIF( XB_SQL_SUPPORT )
+
+
+
+ENDIF( XB_UTILS_SUPPORT )
+
+install (FILES ${PROJECT_BINARY_DIR}/include/xbconfig.h
+ ${PROJECT_SOURCE_DIR}/include/xbase.h
+ ${PROJECT_SOURCE_DIR}/include/xbbcd.h
+ ${PROJECT_SOURCE_DIR}/include/xbblkread.h
+ ${PROJECT_SOURCE_DIR}/include/xbdate.h
+ ${PROJECT_SOURCE_DIR}/include/xbdbf.h
+ ${PROJECT_SOURCE_DIR}/include/xbexp.h
+ ${PROJECT_SOURCE_DIR}/include/xbexpnode.h
+ ${PROJECT_SOURCE_DIR}/include/xbfile.h
+ ${PROJECT_SOURCE_DIR}/include/xbfilter.h
+ ${PROJECT_SOURCE_DIR}/include/xbindex.h
+ ${PROJECT_SOURCE_DIR}/include/xblnklst.h
+ ${PROJECT_SOURCE_DIR}/include/xblnklstord.h
+ ${PROJECT_SOURCE_DIR}/include/xblnknod.h
+ ${PROJECT_SOURCE_DIR}/include/xblog.h
+ ${PROJECT_SOURCE_DIR}/include/xbmemo.h
+ ${PROJECT_SOURCE_DIR}/include/xbretcod.h
+ ${PROJECT_SOURCE_DIR}/include/xbsql.h
+ ${PROJECT_SOURCE_DIR}/include/xbssv.h
+ ${PROJECT_SOURCE_DIR}/include/xbstring.h
+ ${PROJECT_SOURCE_DIR}/include/xbtag.h
+ ${PROJECT_SOURCE_DIR}/include/xbtblmgr.h
+ ${PROJECT_SOURCE_DIR}/include/xbtypes.h
+ ${PROJECT_SOURCE_DIR}/include/xbuda.h
+ ${PROJECT_SOURCE_DIR}/include/xbxbase.h
+ DESTINATION include/${CMAKE_PROJECT_NAME})
+
+IF( NOT WIN32 )
+install (FILES ${PROJECT_PARENT_DIR}/docs/man/xb_cfg_chk.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_copydbf.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dbfutil.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_deletall.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dumpdbt.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dumprecs.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_import.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_pack.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_tblinfo.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_undelall.1.gz
+
+ DESTINATION man/man1)
+
+ENDIF( NOT WIN32 )
+
+
+SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.1.4 SOVERSION 0 )
+
+IF( WIN32 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION bin)
+ELSE( WIN32 )
+ IF( EXISTS /usr/local/lib64 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION lib64/${CMAKE_PROJECT_NAME})
+ ELSE( EXISTS /usr/local/lib64 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION lib/${CMAKE_PROJECT_NAME})
+ ENDIF( EXISTS /usr/local/lib64 )
+ENDIF( WIN32 )
diff --git a/1Tdata/xbase/xbase64-4.1.4/build/linux64/README.linux64 b/1Tdata/xbase/xbase64-4.1.4/build/linux64/README.linux64
new file mode 100644
index 0000000..e5620ef
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/build/linux64/README.linux64
@@ -0,0 +1,22 @@
+
+3/26/23
+
+Install steps for Xbase64 on a linux 64 bit platform.
+
+1) Verify cmake is installed with command: cmake --version
+ If it is not installed, take necessary steps to install it.
+
+2) Verify gcc is intalled with the command: gcc --version
+ If it is not installed, take necessary steps to install it.
+
+3) Build xbase64 library
+
+ cd build/linux64 (go to the appropriate build directory)
+ cmake . (configure for your environment)
+ make (compile it)
+ make test (test library build)
+ sudo make install (install it)
+ xb_cfg_chk (test install)
+
+
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/build/mac64/CMakeLists.txt b/1Tdata/xbase/xbase64-4.1.4/build/mac64/CMakeLists.txt
new file mode 100755
index 0000000..ce2566a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/build/mac64/CMakeLists.txt
@@ -0,0 +1,809 @@
+cmake_minimum_required(VERSION 3.2)
+
+project (Xbase64)
+set( xbase_VERSION_MAJOR 4 )
+set( xbase_VERSION_MINOR 1 )
+set( xbase_VERSION_PATCH 4 )
+
+MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
+MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
+MESSAGE( "--- Project Name: " ${CMAKE_PROJECT_NAME} )
+MESSAGE( "--- Install Prefix: " ${CMAKE_INSTALL_PREFIX} )
+
+#Set compiler options
+
+IF( CMAKE_COMPILER_IS_GNUCXX )
+ MESSAGE( "Setting GNU compiler options" )
+ add_compile_options( -Wall -Wsign-conversion )
+# add_compile_options( -Wall -Wconversion -Wsign-conversion )
+ SET( VERBOSE 1 )
+ENDIF( CMAKE_COMPILER_IS_GNUCXX )
+
+IF( BORLAND )
+ MESSAGE ("BORLAND COMPILER" )
+ #set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w-8022" )
+ add_compile_options( -w-8022 )
+ENDIF( BORLAND )
+
+MESSAGE( "--- Checking integer sizes" )
+INCLUDE(CheckTypeSize)
+CHECK_TYPE_SIZE( "short int" SHORT_INT )
+CHECK_TYPE_SIZE( int INT )
+CHECK_TYPE_SIZE( __int32 __INT32 )
+CHECK_TYPE_SIZE( int32_t INT32_T )
+CHECK_TYPE_SIZE( long LONG_INT )
+CHECK_TYPE_SIZE( __int64 __INT64 )
+CHECK_TYPE_SIZE( int64_t INT64_T )
+CHECK_TYPE_SIZE( "long long" LONG_LONG )
+CHECK_TYPE_SIZE( u_int64_t U_INT64_T )
+CHECK_TYPE_SIZE( uint64_t UINT64_T )
+CHECK_TYPE_SIZE( "unsigned __int64" UNSIGNED__INT64 )
+CHECK_TYPE_SIZE( "unsigned long long" UNSIGNED_LONG_LONG )
+
+CHECK_TYPE_SIZE( "double" DOUBLE )
+MESSAGE( "--- Double size = " ${DOUBLE} )
+
+
+#determine how 16 bit integer defined on this platform
+SET( iSize 0 )
+IF( HAVE_SHORT_INT AND ${SHORT_INT} EQUAL 2 )
+ SET( xbInt16 "short int" )
+ SET( xbUInt16 "unsigned short int" )
+ SET( iSize ${SHORT_INT} )
+ MESSAGE( "--- xbInt16 = [short int]" )
+ MESSAGE( "--- xbUInt16 = [unsigned short int]" )
+
+ENDIF( HAVE_SHORT_INT AND ${SHORT_INT} EQUAL 2 )
+IF( NOT ${iSize} EQUAL 2 )
+ MESSAGE( "FATAL_ERROR Could not detect 16 bit integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 2 )
+
+#determine how 32 bit integer defined on this platform
+SET( iSize 0 )
+IF( HAVE_INT AND ${INT} EQUAL 4 )
+ SET( xbInt32 int )
+ SET( xbUInt32 "unsigned int" )
+ SET( iSize ${INT} )
+ MESSAGE( "--- xbInt32 = [int]" )
+ MESSAGE( "--- xbUInt32 = [unsigned int]" )
+ENDIF( HAVE_INT AND ${INT} EQUAL 4 )
+
+IF(( NOT iSize EQUAL 4 ) AND HAVE___INT32 )
+ MESSAGE( __int untested if block - see CMakeLists.txt)
+ SET( xbInt32 __int32 )
+ SET( xbUInt32 "unsigned __int32" )
+ SET( iSize ${__INT} )
+ MESSAGE( "--- xbInt32 = [__int]" )
+ MESSAGE( "--- xbUInt32 = [unsigned __int]" )
+ENDIF(( NOT iSize EQUAL 4 ) AND HAVE___INT32 )
+
+IF(( NOT iSize EQUAL 4 ) AND HAVE_INT32_T )
+ SET( xbInt32 int32_t )
+ SET( xbUInt32 "u_int32_t" )
+ SET( iSize ${INT32_T} )
+ MESSAGE( "--- xbInt32 = [int32_t]" )
+ MESSAGE( "--- xbUInt32 = [u_int32_t]" )
+ENDIF(( NOT iSize EQUAL 4 ) AND HAVE_INT32_T )
+
+IF( NOT ${iSize} EQUAL 4 )
+ MESSAGE( "FATAL_ERROR Could not detect 32 bit integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 4 )
+
+#determine how 64 bit integer defined on this platform
+SET( iSize 0 )
+IF( HAVE___INT64 )
+ SET( xbInt64 __int64 )
+ SET( iSize ${__INT64} )
+ MESSAGE( "--- xbInt64 = [__int64]" )
+ENDIF( HAVE___INT64 )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_INT64_T )
+ SET( xbInt64 int64_t )
+ SET( iSize ${INT64_T} )
+ MESSAGE( "--- xbInt64 = [int64_t]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_INT64_T )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_LONG_LONG )
+ SET( xbInt64 "long long" )
+ SET( iSize ${LONG_LONG} )
+ MESSAGE( "--- xbInt64 = [long long]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_LONG_LONG )
+
+IF( NOT ${iSize} EQUAL 8 )
+ MESSAGE( "FATAL_ERROR Could not detect 64 bit integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 8 )
+
+#determine how 64 bit unsigned integer defined on this platform
+SET( iSize 0 )
+IF( HAVE_UNSIGNED__INT64 )
+ SET( xbUInt64 "unsigned __int64" )
+ SET( iSize ${UNSIGNED__INT64} )
+ MESSAGE( "--- xbUInt64 = [unsigned __int64]" )
+ENDIF( HAVE_UNSIGNED__INT64 )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_UINT64_T )
+ SET( xbUInt64 "uint64_t" )
+ SET( iSize ${UINT64_T} )
+ MESSAGE( "--- xbUInt64 = [uint64_t]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_UINT64_T )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_U_INT64_T )
+ SET( xbUInt64 u_int64_t )
+ SET( iSize ${U_INT64_T} )
+ MESSAGE( "--- xbUInt64 = [u_int64_t]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_U_INT64_T )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_UNSIGNED_LONG_LONG )
+ SET( xbUInt64 "unsigned long long" )
+ SET( iSize ${UNSIGNED_LONG_LONG} )
+ MESSAGE( "--- xbUInt64 = [unsigned long long]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_UNSIGNED_LONG_LONG )
+
+IF( NOT ${iSize} EQUAL 8 )
+ MESSAGE( "FATAL_ERROR Could not detect 64 bit unsigned integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 8 )
+
+#Library options
+option( BUILD_SHARED_LIBS "Build shared libraries" ON)
+option( XB_DBF3_SUPPORT "Compile DBase File Format Version 3 support" ON)
+option( XB_DBF4_SUPPORT "Compile DBase File Format Version 4 support" ON)
+option( XB_MEMO_SUPPORT "Compile memo field support into library" ON)
+option( XB_NDX_SUPPORT "Compile NDX Index support into library" ON)
+option( XB_MDX_SUPPORT "Compile MDX Index support into library" ON)
+option( XB_LOCKING_SUPPORT "Compile Multi User Locking support into library" ON)
+option( XB_TDX_SUPPORT "Compile temporary index support into library" ON)
+
+option( XB_LOGGING_SUPPORT "Compile message logging support into library" ON)
+option( XB_LINKLIST_SUPPORT "Compile Link List routines into library" ON)
+option( XB_FUNCTION_SUPPORT "Compile XBase Function support into library" ON)
+option( XB_EXPRESSION_SUPPORT "Compile Expression support into library" ON)
+option( XB_INF_SUPPORT "Compile NDX INF file support into library" ON)
+option( XB_FILTER_SUPPORT "Compile Filter support into library" ON)
+option( XB_BLOCKREAD_SUPPORT "Compile Block Read support into library" ON)
+option( XB_SQL_SUPPORT "Compile SQL support into library - alpha" ON)
+option( XB_DEBUG_SUPPORT "Compile debug logic into library" ON)
+option( XB_UTILS_SUPPORT "Compile utility programs" ON)
+option( XB_EXAMPLES_SUPPORT "Compile example programs" ON)
+
+Message( "--- BUILD_SHARED_LIBS " ${BUILD_SHARED_LIBS})
+Message( "--- XB_DBF3_SUPPORT " ${XB_DBF3_SUPPORT})
+Message( "--- XB_DBF4_SUPPORT " ${XB_DBF4_SUPPORT})
+Message( "--- XB_MEMO_SUPPORT " ${XB_MEMO_SUPPORT})
+Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
+Message( "--- XB_MDX_SUPPORT " ${XB_MDX_SUPPORT})
+Message( "--- XB_TDX_SUPPORT " ${XB_TDX_SUPPORT})
+Message( "--- XB_LOCKING_SUPPORT " ${XB_LOCKING_SUPPORT})
+Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
+Message( "--- XB_FUNCTION_SUPPORT " ${XB_FUNCTION_SUPPORT})
+Message( "--- XB_EXPRESSION_SUPPORT " ${XB_EXPRESSION_SUPPORT})
+Message( "--- XB_FILTER_SUPPORT " ${XB_FILTER_SUPPORT})
+Message( "--- XB_DEBUG_SUPPORT " ${XB_DEBUG_SUPPORT})
+Message( "--- XB_UTILS_SUPPORT " ${XB_UTILS_SUPPORT})
+Message( "--- XB_EXAMPLES_SUPPORT " ${XB_EXAMPLES_SUPPORT})
+Message( "--- XB_LOGGING_SUPPORT " ${XB_LOGGING_SUPPORT})
+Message( "--- XB_SQL_SUPPORT " ${XB_SQL_SUPPORT})
+Message( "--- XB_INF_SUPPORT " ${XB_INF_SUPPORT})
+Message( "--- XB_BLOCKREAD_SUPPORT " ${XB_BLOCKREAD_SUPPORT})
+
+IF( XB_DEBUG_SUPPORT )
+ Message( "--- Adding debug support" )
+ set( CMAKE_BUILD_TYPE Debug )
+IF( CMAKE_COMPILER_IS_GNUCXX )
+ add_compile_options( -Og )
+ENDIF( CMAKE_COMPILER_IS_GNUCXX )
+ENDIF( XB_DEBUG_SUPPORT )
+
+IF( CMAKE_SIZEOF_VOID_P EQUAL 8 )
+ MESSAGE( "--- 64 bit compiler detected" )
+ set( XB_PLATFORM "x64" )
+ set( XB_PLATFORM_64 1 )
+ set( XB_LIBNAME "xbase64" )
+
+ELSE( CMAKE_SIZEOF_VOID_P EQUAL 8 )
+ MESSAGE( "--- 32 bit compiler detected" )
+ set( XB_PLATFORM "x86" )
+ set( XB_PLATFORM_32 1 )
+ set( XB_LIBNAME "xbase32" )
+
+ENDIF( CMAKE_SIZEOF_VOID_P EQUAL 8 )
+
+
+#Check for the existence of various header files
+INCLUDE (CheckIncludeFiles)
+CHECK_INCLUDE_FILES (ctype.h HAVE_CTYPE_H)
+CHECK_INCLUDE_FILES (dirent.h HAVE_DIRENT_H)
+CHECK_INCLUDE_FILES (fcntl.h HAVE_FCNTL_H)
+CHECK_INCLUDE_FILES (inttypes.h HAVE_INTTYPES_H)
+CHECK_INCLUDE_FILES (pwd.h HAVE_PWD_H)
+CHECK_INCLUDE_FILES (stdarg.h HAVE_STDARG_H)
+CHECK_INCLUDE_FILES (stdargs.h HAVE_STDARGS_H)
+CHECK_INCLUDE_FILES (string.h HAVE_STRING_H)
+CHECK_INCLUDE_FILES (strings.h HAVE_STRINGS_H)
+CHECK_INCLUDE_FILES (sys/stat.h HAVE_STAT_H)
+CHECK_INCLUDE_FILES (unistd.h HAVE_UNISTD_H)
+CHECK_INCLUDE_FILES (varargs.h HAVE_VARARGS_H)
+CHECK_INCLUDE_FILES (windows.h HAVE_WINDOWS_H)
+
+#Check for the existence of various function calls
+INCLUDE( CheckFunctionExists )
+CHECK_FUNCTION_EXISTS(_close HAVE__CLOSE_F)
+CHECK_FUNCTION_EXISTS(fcntl HAVE_FCNTL_F)
+CHECK_FUNCTION_EXISTS(_fdopen HAVE__FDOPEN_F)
+CHECK_FUNCTION_EXISTS(fopen_s HAVE_FOPEN_S_F)
+CHECK_FUNCTION_EXISTS(_fsopen HAVE__FSOPEN_F)
+CHECK_FUNCTION_EXISTS(_fileno HAVE__FILENO_F)
+CHECK_FUNCTION_EXISTS(fork HAVE_FORK_F)
+CHECK_FUNCTION_EXISTS(_fseeki64 HAVE__FSEEKI64_F)
+CHECK_FUNCTION_EXISTS(fseeko HAVE_FSEEKO_F)
+CHECK_FUNCTION_EXISTS(ftruncate HAVE_FTRUNCATE_F)
+CHECK_FUNCTION_EXISTS(getenv_s HAVE_GETENV_S_F)
+
+CHECK_FUNCTION_EXISTS(_localtime64_s HAVE__LOCALTIME64_S_F)
+CHECK_FUNCTION_EXISTS(LockFile HAVE_LOCKFILE_F)
+CHECK_FUNCTION_EXISTS(locking HAVE_LOCKING_F)
+CHECK_FUNCTION_EXISTS(_locking HAVE__LOCKING_F)
+CHECK_FUNCTION_EXISTS(_open HAVE__OPEN_F)
+CHECK_FUNCTION_EXISTS(SetEndOfFile HAVE_SETENDOFFILE_F)
+
+CHECK_FUNCTION_EXISTS(vsnprintf HAVE_VSNPRINTF_F)
+CHECK_FUNCTION_EXISTS(_vsnprintf_s HAVE__VSNPRINTF_S_F)
+
+
+CHECK_FUNCTION_EXISTS(getopt HAVE_GETOPT_F)
+
+IF( WIN32 )
+
+# Use CHECK_SYMBOL_EXISTS for the Win32API instead of CHECK_FUNCTION_EXISTS
+# Can't detect inline functions in headers
+# Can't detect due to mismatch of calling conventions
+# Can't detect mangled names
+
+INCLUDE( CheckSymbolExists )
+CHECK_SYMBOL_EXISTS(CreateProcessW Windows.h HAVE_CREATEPROCESSW_F )
+CHECK_SYMBOL_EXISTS(vsprintf_s stdio.h HAVE_VSPRINTF_S_F )
+
+ENDIF ( WIN32 )
+
+# IF( NOT HAVE_SENTENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND BORLAND )
+# # ----fix me----
+# # cmake CHECK_FUNCTION_EXISTS - could not find Borland 5.5 SetEndOfFile
+# Set( HAVE_SETENDOFFILE_F "HAVE_SETENDOFFILE_H" )
+# ENDIF ( NOT HAVE_SENTENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND BORLAND )
+
+IF( NOT HAVE_SETENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND WIN32 )
+ # ----fix me----
+ # cmake CHECK_FUNCTION_EXISTS - could not find Borland 5.5, or Windows VS 32 bit SetEndOfFile
+ Set( HAVE_SETENDOFFILE_F "HAVE_SETENDOFFILE_F" )
+ENDIF ( NOT HAVE_SETENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND WIN32 )
+
+IF( XB_NDX_SUPPORT OR XB_MDX_SUPPORT )
+ Set( XB_INDEX_SUPPORT "1" )
+ENDIF( XB_NDX_SUPPORT OR XB_MDX_SUPPORT )
+
+
+# Set directories
+# PROJECT_PARENT_DIR is two nodes higher
+get_filename_component( PROJECT_PARENT_DIR ${PROJECT_BINARY_DIR} DIRECTORY )
+get_filename_component( PROJECT_PARENT_DIR ${PROJECT_PARENT_DIR} DIRECTORY )
+
+# MESSAGE( "PROJECT_PARENT_DIR = " ${PROJECT_PARENT_DIR} )
+# MESSAGE( "PROJECT_BINARY_DIR = " ${PROJECT_BINARY_DIR} )
+
+
+set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin )
+set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib )
+set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib )
+
+set( PROJECT_SOURCE_DIR ${PROJECT_PARENT_DIR}/src )
+set( PROJECT_DATA_DIR ${PROJECT_PARENT_DIR}/data )
+set( PROJECT_LOG_DIR ${PROJECT_PARENT_DIR}/logs )
+set( PROJECT_TEMP_DIR ${PROJECT_PARENT_DIR}/temp )
+set( EXTRA_LIBS ${EXTRA_LIBS} ${XB_LIBNAME} )
+
+
+# Undo bad decisions
+IF( XB_PLATFORM_32 AND XB_LARGEFILE_SUPPORT )
+ MESSAGE( "--- Can't build 64 bit environment with a 32 bit compiler" )
+ MESSAGE( "--- XB_LARGEFILE_SUPPORT set to OFF" )
+ set( XB_LARGEFILE_SUPPORT OFF CACHE BOOL "Use 64 bit large file support?" FORCE )
+ENDIF ( XB_PLATFORM_32 AND XB_LARGEFILE_SUPPORT )
+
+IF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
+ MESSAGE( "--- At lease one file format is required. Defaulting to Version 4" )
+ set( XB_DBF4_SUPPORT ON CACHE BOOL "Compile DBase File Format Version 4 support" FORCE )
+ENDIF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
+
+IF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+ MESSAGE( "--- Link List support required for DBF V4 Memo files. Setting to ON" )
+ set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
+ENDIF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+
+
+
+
+IF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+ MESSAGE( "--- Link List support required for locking functions. Setting to ON" )
+ set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
+ENDIF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+
+IF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+ MESSAGE( "--- MDX support required for Temporary indices. Setting to ON" )
+ set( XB_MDX_SUPPORT ON CACHE BOOL "Compile temporary index support into library" FORCE )
+ENDIF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+
+IF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+ MESSAGE( "--- Expression required for indices. Setting to ON" )
+ set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
+ Set( XB_INDEX_SUPPORT "1" )
+ENDIF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+
+IF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
+ MESSAGE( "--- Function support required for expressions. Setting to ON" )
+ set( XB_FUNCTION_SUPPORT ON CACHE BOOL "Compile XBase Function support into library" FORCE )
+ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
+
+IF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+ MESSAGE( "--- Linklist support required for expressions. Setting to ON" )
+ set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
+ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+
+IF( XB_SQL_SUPPORT AND NOT XB_MEMO_SUPPORT )
+ MESSAGE( "--- Memo support required for SQL. Setting to ON" )
+ set( XB_MEMO_SUPPORT ON CACHE BOOL "Compile memo field support into library" FORCE )
+ENDIF( XB_SQL_SUPPORT AND NOT XB_MEMO_SUPPORT )
+
+IF( XB_SQL_SUPPORT AND NOT XB_DBF4_SUPPORT )
+ MESSAGE( "--- DBF4 support required for SQL. Setting to ON" )
+ set( XB_DBF4_SUPPORT ON CACHE BOOL "Compile DBase File Format Version 4 support" FORCE )
+ENDIF( XB_SQL_SUPPORT AND NOT XB_DBF4_SUPPORT )
+
+IF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+ MESSAGE( "--- Expression required for filters. Setting to ON" )
+ set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
+ENDIF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+
+IF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
+ MESSAGE( "--- BLOCKREAD support required for SQL. Setting to ON" )
+ set( XB_BLOCKREAD_SUPPORT ON CACHE BOOL "Compile Block Read support into library" FORCE )
+ENDIF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
+
+IF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+ MESSAGE( "--- MDX support required for Temporary indices. Setting to ON" )
+ set( XB_MDX_SUPPORT ON CACHE BOOL "Compile temporary index support into library" FORCE )
+ENDIF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+
+
+
+# Build configuration header file
+configure_file (
+ "${PROJECT_SOURCE_DIR}/include/xbconfig.h.in"
+ "${PROJECT_BINARY_DIR}/include/xbconfig.h"
+)
+
+# Microsoft Windows compiler settings
+IF( MSVC )
+# add_definitions( /D_CRT_SECURE_NO_WARNINGS)
+ add_definitions( /EHsc )
+ENDIF( MSVC )
+
+
+# set up include directories
+include_directories( "${PROJECT_BINARY_DIR}/include" )
+include_directories( "${PROJECT_SOURCE_DIR}/include" )
+
+#build the library
+IF ( BUILD_SHARED_LIBS )
+ set( LIB_TYPE SHARED )
+ELSE( BUILD_SHARED_LIBS )
+ set( LIB_TYPE STATIC )
+ENDIF( BUILD_SHARED_LIBS )
+MESSAGE( "--- Lib type " ${LIB_TYPE} )
+
+
+
+set (SOURCES ${PROJECT_SOURCE_DIR}/core/xbstring.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbssv.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbdate.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbtblmgr.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbxbase.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbfile.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbdbf.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbfields.cpp
+ ${PROJECT_SOURCE_DIR}/core/xblog.cpp)
+
+IF( XB_MEMO_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo.cpp )
+ENDIF( XB_MEMO_SUPPORT )
+
+IF( XB_DBF3_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbdbf3.cpp )
+ IF( XB_MEMO_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo3.cpp )
+ ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF3_SUPPORT )
+
+IF( XB_DBF4_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbdbf4.cpp )
+ IF( XB_MEMO_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo4.cpp )
+ ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF4_SUPPORT )
+
+IF( XB_FUNCTION_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbfuncs.cpp )
+ENDIF( XB_FUNCTION_SUPPORT )
+
+IF( XB_EXPRESSION_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbexpnode.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbexp.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbuda.cpp )
+ENDIF( XB_EXPRESSION_SUPPORT )
+
+IF( XB_INDEX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbbcd.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixbase.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbtag.cpp )
+ENDIF( XB_INDEX_SUPPORT )
+
+IF( XB_NDX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixndx.cpp )
+ENDIF( XB_NDX_SUPPORT )
+
+
+IF( XB_MDX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixmdx.cpp )
+ENDIF( XB_MDX_SUPPORT )
+
+IF( XB_TDX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixtdx.cpp )
+ENDIF( XB_TDX_SUPPORT )
+
+
+IF( XB_SQL_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbalttbl.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrix.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrtbl.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdelete.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdrpix.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdrptbl.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbinsert.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbset.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbsql.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbstmt.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbselect.cpp )
+ENDIF( XB_SQL_SUPPORT )
+
+
+IF( XB_FILTER_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbfilter.cpp )
+ENDIF( XB_FILTER_SUPPORT )
+
+IF( XB_BLOCKREAD_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbblockread.cpp )
+ENDIF( XB_BLOCKREAD_SUPPORT )
+
+
+include( GenerateExportHeader )
+#add_library( xbase ${LIB_TYPE} ${SOURCES} )
+add_library( ${XB_LIBNAME} ${LIB_TYPE} ${SOURCES} )
+#add_library( ${CMAKE_PROJECT_NAME} ${LIB_TYPE} ${SOURCES} )
+
+
+IF( WIN32 )
+MESSAGE( "--- Generating Windows Library Headers" )
+
+#GENERATE_EXPORT_HEADER( xbase
+# BASE_NAME xbase
+
+GENERATE_EXPORT_HEADER( ${XB_LIBNAME}
+ BASE_NAME ${XB_LIBNAME}
+ EXPORT_MACRO_NAME xbase_EXPORT
+ EXPORT_FILE_NAME xbase_Export.h
+ STATIC_DEFINE xbase_BUILT_AS_STATIC
+)
+ENDIF( WIN32 )
+
+
+#build test programs
+enable_testing()
+
+add_executable( xb_test_string ${PROJECT_SOURCE_DIR}/tests/xb_test_string.cpp )
+target_link_libraries( xb_test_string ${EXTRA_LIBS})
+add_test( NAME xbString COMMAND xb_test_string QUIET )
+
+add_executable( xb_test_date ${PROJECT_SOURCE_DIR}/tests/xb_test_date.cpp )
+target_link_libraries( xb_test_date ${EXTRA_LIBS})
+add_test( NAME xbDate COMMAND xb_test_date QUIET )
+
+add_executable( xb_test_tblmgr ${PROJECT_SOURCE_DIR}/tests/xb_test_tblmgr.cpp )
+target_link_libraries( xb_test_tblmgr ${EXTRA_LIBS})
+add_test( NAME xbTblMgr COMMAND xb_test_tblmgr QUIET )
+
+add_executable( xb_test_xbase ${PROJECT_SOURCE_DIR}/tests/xb_test_xbase.cpp )
+target_link_libraries( xb_test_xbase ${EXTRA_LIBS})
+add_test( NAME xbXBase COMMAND xb_test_xbase QUIET )
+
+add_executable( xb_test_file ${PROJECT_SOURCE_DIR}/tests/xb_test_file.cpp )
+target_link_libraries( xb_test_file ${EXTRA_LIBS})
+add_test( NAME xbFile COMMAND xb_test_file QUIET )
+
+add_executable( xb_test_log ${PROJECT_SOURCE_DIR}/tests/xb_test_log.cpp )
+target_link_libraries( xb_test_log ${EXTRA_LIBS})
+add_test( NAME xbLog COMMAND xb_test_log QUIET )
+
+IF( XB_LINKLIST_SUPPORT )
+add_executable( xb_test_linklist ${PROJECT_SOURCE_DIR}/tests/xb_test_linklist.cpp )
+target_link_libraries( xb_test_linklist ${EXTRA_LIBS})
+add_test( NAME xbLinkList COMMAND xb_test_linklist QUIET )
+ENDIF( XB_LINKLIST_SUPPORT )
+
+IF( XB_DBF3_SUPPORT )
+add_executable( xb_test_dbf_v3_nomemos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v3_nomemos.cpp )
+target_link_libraries( xb_test_dbf_v3_nomemos ${EXTRA_LIBS})
+add_test( NAME xbDbfV3NoMemos COMMAND xb_test_dbf_v3_nomemos QUIET )
+
+IF( XB_MEMO_SUPPORT )
+add_executable( xb_test_dbf_v3_memos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v3_memos.cpp )
+target_link_libraries( xb_test_dbf_v3_memos ${EXTRA_LIBS})
+add_test( NAME xbDbfV3Memos COMMAND xb_test_dbf_v3_memos QUIET )
+
+ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF3_SUPPORT )
+
+IF( XB_DBF4_SUPPORT )
+add_executable( xb_test_dbf_v4_nomemos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v4_nomemos.cpp )
+target_link_libraries( xb_test_dbf_v4_nomemos ${EXTRA_LIBS})
+add_test( NAME xbDbfV4NoMemos COMMAND xb_test_dbf_v4_nomemos QUIET )
+
+IF( XB_MEMO_SUPPORT )
+add_executable( xb_test_dbf_v4_memos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v4_memos.cpp )
+target_link_libraries( xb_test_dbf_v4_memos ${EXTRA_LIBS})
+add_test( NAME xbDbfV4Memos COMMAND xb_test_dbf_v4_memos QUIET )
+
+ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF4_SUPPORT )
+
+IF( XB_FUNCTION_SUPPORT )
+add_executable( xb_test_funcs ${PROJECT_SOURCE_DIR}/tests/xb_test_funcs.cpp )
+target_link_libraries( xb_test_funcs ${EXTRA_LIBS})
+add_test( NAME xbFunctions COMMAND xb_test_funcs QUIET )
+ENDIF( XB_FUNCTION_SUPPORT )
+
+IF( XB_NDX_SUPPORT )
+IF( XB_DBF3_SUPPORT )
+add_executable( xb_test_ndx ${PROJECT_SOURCE_DIR}/tests/xb_test_ndx.cpp )
+target_link_libraries( xb_test_ndx ${EXTRA_LIBS})
+add_test( NAME xbIxNdx COMMAND xb_test_ndx QUIET )
+ENDIF( XB_DBF3_SUPPORT )
+ENDIF( XB_NDX_SUPPORT )
+
+
+
+IF( XB_DBF4_SUPPORT )
+
+IF( XB_MDX_SUPPORT )
+add_executable( xb_test_mdx ${PROJECT_SOURCE_DIR}/tests/xb_test_mdx.cpp )
+target_link_libraries( xb_test_mdx ${EXTRA_LIBS})
+add_test( NAME xbIxMdx COMMAND xb_test_mdx QUIET )
+ENDIF( XB_MDX_SUPPORT )
+
+IF( XB_TDX_SUPPORT )
+add_executable( xb_test_tdx ${PROJECT_SOURCE_DIR}/tests/xb_test_tdx.cpp )
+target_link_libraries( xb_test_tdx ${EXTRA_LIBS})
+add_test( NAME xbIxTdx COMMAND xb_test_tdx QUIET )
+ENDIF( XB_TDX_SUPPORT )
+
+ENDIF( XB_DBF4_SUPPORT )
+
+
+
+IF( XB_INDEX_SUPPORT )
+add_executable( xb_test_bcd ${PROJECT_SOURCE_DIR}/tests/xb_test_bcd.cpp )
+target_link_libraries( xb_test_bcd ${EXTRA_LIBS})
+add_test( NAME xbBcd COMMAND xb_test_bcd QUIET )
+ENDIF( XB_INDEX_SUPPORT )
+
+
+IF( XB_EXPRESSION_SUPPORT )
+
+add_executable( xb_test_expnode ${PROJECT_SOURCE_DIR}/tests/xb_test_expnode.cpp )
+target_link_libraries( xb_test_expnode ${EXTRA_LIBS})
+add_test( NAME xbExpNode COMMAND xb_test_expnode QUIET )
+
+
+add_executable( xb_test_expression ${PROJECT_SOURCE_DIR}/tests/xb_test_expression.cpp )
+target_link_libraries( xb_test_expression ${EXTRA_LIBS})
+add_test( NAME xbExpressions COMMAND xb_test_expression QUIET )
+
+add_executable( xb_test_uda ${PROJECT_SOURCE_DIR}/tests/xb_test_uda.cpp )
+target_link_libraries( xb_test_uda ${EXTRA_LIBS})
+add_test( NAME xbUda COMMAND xb_test_uda QUIET )
+
+ENDIF( XB_EXPRESSION_SUPPORT )
+
+IF( XB_SQL_SUPPORT )
+add_executable( xb_test_sql ${PROJECT_SOURCE_DIR}/tests/xb_test_sql.cpp )
+target_link_libraries( xb_test_sql ${EXTRA_LIBS})
+add_test( NAME xbSql COMMAND xb_test_sql QUIET )
+ENDIF( XB_SQL_SUPPORT )
+
+IF( XB_FILTER_SUPPORT )
+add_executable( xb_test_filter ${PROJECT_SOURCE_DIR}/tests/xb_test_filter.cpp )
+target_link_libraries( xb_test_filter ${EXTRA_LIBS})
+add_test( NAME xbFilter COMMAND xb_test_filter QUIET )
+ENDIF( XB_FILTER_SUPPORT )
+
+IF( XB_BLOCKREAD_SUPPORT )
+add_executable( xb_test_blockread ${PROJECT_SOURCE_DIR}/tests/xb_test_blockread.cpp )
+target_link_libraries( xb_test_blockread ${EXTRA_LIBS})
+add_test( NAME xbBlockRead COMMAND xb_test_blockread QUIET )
+ENDIF( XB_BLOCKREAD_SUPPORT )
+
+
+IF( XB_LOCKING_SUPPORT )
+add_executable( xb_test_lock ${PROJECT_SOURCE_DIR}/tests/xb_test_lock.cpp )
+target_link_libraries( xb_test_lock ${EXTRA_LIBS})
+add_test( NAME xbLock COMMAND xb_test_lock QUIET )
+IF( HAVE_CREATEPROCESSW_F )
+add_executable( xb_test_lock2 ${PROJECT_SOURCE_DIR}/tests/xb_test_lock2.cpp )
+target_link_libraries( xb_test_lock2 ${EXTRA_LIBS})
+ENDIF( HAVE_CREATEPROCESSW_F )
+ENDIF( XB_LOCKING_SUPPORT )
+
+#build example programs
+IF( XB_EXAMPLES_SUPPORT )
+ add_executable( xb_ex_string ${PROJECT_SOURCE_DIR}/examples/xb_ex_string.cpp )
+ target_link_libraries( xb_ex_string ${EXTRA_LIBS})
+
+ add_executable( xb_ex_date ${PROJECT_SOURCE_DIR}/examples/xb_ex_date.cpp )
+ target_link_libraries( xb_ex_date ${EXTRA_LIBS})
+
+ IF( XB_DBF3_SUPPORT )
+ add_executable( xb_ex_v3_create_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v3_create_dbf.cpp )
+ target_link_libraries( xb_ex_v3_create_dbf ${EXTRA_LIBS})
+
+ add_executable( xb_ex_v3_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v3_upd_dbf.cpp )
+ target_link_libraries( xb_ex_v3_upd_dbf ${EXTRA_LIBS})
+ ENDIF( XB_DBF3_SUPPORT )
+
+ IF( XB_DBF4_SUPPORT )
+ add_executable( xb_ex_v4_create_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_create_dbf.cpp )
+ target_link_libraries( xb_ex_v4_create_dbf ${EXTRA_LIBS})
+ ENDIF( XB_DBF4_SUPPORT )
+
+ IF( XB_EXPRESSION_SUPPORT )
+ add_executable( xb_ex_expression ${PROJECT_SOURCE_DIR}/examples/xb_ex_expression.cpp )
+ target_link_libraries( xb_ex_expression ${EXTRA_LIBS})
+ ENDIF( XB_EXPRESSION_SUPPORT )
+
+ add_executable( xb_ex_v4_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_upd_dbf.cpp )
+ target_link_libraries( xb_ex_v4_upd_dbf ${EXTRA_LIBS})
+
+ add_executable( xb_ex_ssv ${PROJECT_SOURCE_DIR}/examples/xb_ex_ssv.cpp )
+ target_link_libraries( xb_ex_ssv ${EXTRA_LIBS})
+
+ IF( XB_LOGGING_SUPPORT )
+ add_executable( xb_ex_log ${PROJECT_SOURCE_DIR}/examples/xb_ex_log.cpp )
+ target_link_libraries( xb_ex_log ${EXTRA_LIBS})
+ ENDIF( XB_LOGGING_SUPPORT )
+
+ENDIF( XB_EXAMPLES_SUPPORT )
+
+#build utility programs
+IF( XB_UTILS_SUPPORT )
+
+ add_executable( xb_cfg_check ${PROJECT_SOURCE_DIR}/utils/xb_cfg_check.cpp )
+ target_link_libraries( xb_cfg_check ${EXTRA_LIBS})
+
+ add_executable( xb_copydbf ${PROJECT_SOURCE_DIR}/utils/xb_copydbf.cpp )
+ target_link_libraries( xb_copydbf ${EXTRA_LIBS})
+
+ add_executable( xb_dbfutil ${PROJECT_SOURCE_DIR}/utils/xb_dbfutil.cpp )
+ target_link_libraries( xb_dbfutil ${EXTRA_LIBS})
+
+ add_executable( xb_deletall ${PROJECT_SOURCE_DIR}/utils/xb_deletall.cpp )
+ target_link_libraries( xb_deletall ${EXTRA_LIBS})
+
+ add_executable( xb_dumpdbt ${PROJECT_SOURCE_DIR}/utils/xb_dumpdbt.cpp )
+ target_link_libraries( xb_dumpdbt ${EXTRA_LIBS})
+
+ add_executable( xb_dumprecs ${PROJECT_SOURCE_DIR}/utils/xb_dumprecs.cpp )
+ target_link_libraries( xb_dumprecs ${EXTRA_LIBS})
+
+ add_executable( xb_import ${PROJECT_SOURCE_DIR}/utils/xb_import.cpp )
+ target_link_libraries( xb_import ${EXTRA_LIBS})
+
+ add_executable( xb_tblinfo ${PROJECT_SOURCE_DIR}/utils/xb_tblinfo.cpp )
+ target_link_libraries( xb_tblinfo ${EXTRA_LIBS})
+
+ IF( XB_SQL_SUPPORT )
+ add_executable( xb_execsql ${PROJECT_SOURCE_DIR}/utils/xb_execsql.cpp )
+ target_link_libraries( xb_execsql ${EXTRA_LIBS})
+ ENDIF( XB_SQL_SUPPORT )
+
+ add_executable( xb_pack ${PROJECT_SOURCE_DIR}/utils/xb_pack.cpp )
+ target_link_libraries( xb_pack ${EXTRA_LIBS})
+
+ add_executable( xb_undelall ${PROJECT_SOURCE_DIR}/utils/xb_undelall.cpp )
+ target_link_libraries( xb_undelall ${EXTRA_LIBS})
+
+ install (TARGETS xb_cfg_check DESTINATION bin)
+ install (TARGETS xb_copydbf DESTINATION bin)
+ install (TARGETS xb_dbfutil DESTINATION bin)
+ install (TARGETS xb_deletall DESTINATION bin)
+ install (TARGETS xb_dumpdbt DESTINATION bin)
+ install (TARGETS xb_dumprecs DESTINATION bin)
+ install (TARGETS xb_import DESTINATION bin)
+ install (TARGETS xb_pack DESTINATION bin)
+ install (TARGETS xb_undelall DESTINATION bin)
+ IF( XB_SQL_SUPPORT )
+ install (TARGETS xb_execsql DESTINATION bin)
+ ENDIF( XB_SQL_SUPPORT )
+
+
+
+ENDIF( XB_UTILS_SUPPORT )
+
+install (FILES ${PROJECT_BINARY_DIR}/include/xbconfig.h
+ ${PROJECT_SOURCE_DIR}/include/xbase.h
+ ${PROJECT_SOURCE_DIR}/include/xbbcd.h
+ ${PROJECT_SOURCE_DIR}/include/xbblkread.h
+ ${PROJECT_SOURCE_DIR}/include/xbdate.h
+ ${PROJECT_SOURCE_DIR}/include/xbdbf.h
+ ${PROJECT_SOURCE_DIR}/include/xbexp.h
+ ${PROJECT_SOURCE_DIR}/include/xbexpnode.h
+ ${PROJECT_SOURCE_DIR}/include/xbfile.h
+ ${PROJECT_SOURCE_DIR}/include/xbfilter.h
+ ${PROJECT_SOURCE_DIR}/include/xbindex.h
+ ${PROJECT_SOURCE_DIR}/include/xblnklst.h
+ ${PROJECT_SOURCE_DIR}/include/xblnklstord.h
+ ${PROJECT_SOURCE_DIR}/include/xblnknod.h
+ ${PROJECT_SOURCE_DIR}/include/xblog.h
+ ${PROJECT_SOURCE_DIR}/include/xbmemo.h
+ ${PROJECT_SOURCE_DIR}/include/xbretcod.h
+ ${PROJECT_SOURCE_DIR}/include/xbsql.h
+ ${PROJECT_SOURCE_DIR}/include/xbssv.h
+ ${PROJECT_SOURCE_DIR}/include/xbstring.h
+ ${PROJECT_SOURCE_DIR}/include/xbtag.h
+ ${PROJECT_SOURCE_DIR}/include/xbtblmgr.h
+ ${PROJECT_SOURCE_DIR}/include/xbtypes.h
+ ${PROJECT_SOURCE_DIR}/include/xbuda.h
+ ${PROJECT_SOURCE_DIR}/include/xbxbase.h
+ DESTINATION include/${CMAKE_PROJECT_NAME})
+
+IF( NOT WIN32 )
+install (FILES ${PROJECT_PARENT_DIR}/docs/man/xb_cfg_chk.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_copydbf.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dbfutil.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_deletall.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dumpdbt.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dumprecs.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_import.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_pack.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_tblinfo.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_undelall.1.gz
+
+ DESTINATION man/man1)
+
+ENDIF( NOT WIN32 )
+
+
+SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.1.4 SOVERSION 0 )
+
+IF( WIN32 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION bin)
+ELSE( WIN32 )
+ IF( EXISTS /usr/local/lib64 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION lib64/${CMAKE_PROJECT_NAME})
+ ELSE( EXISTS /usr/local/lib64 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION lib/${CMAKE_PROJECT_NAME})
+ ENDIF( EXISTS /usr/local/lib64 )
+ENDIF( WIN32 )
diff --git a/1Tdata/xbase/xbase64-4.1.4/build/mac64/README.mac64 b/1Tdata/xbase/xbase64-4.1.4/build/mac64/README.mac64
new file mode 100644
index 0000000..a8952bc
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/build/mac64/README.mac64
@@ -0,0 +1,21 @@
+
+Mingw build steps for Xbase64 running on Windows - 3/7/23
+
+1) Verify cmake is installed with command: cmake --version
+ If it is not installed, install the latest version.
+
+
+
+2) Verify you have xcode installed and operational.
+
+
+3) Build xbase64 library
+
+
+ cd build/mac64
+ cmake . -DCMAKE_OSX_SYSROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk
+ make build the library
+ make test tsst the library
+ make install install it
+ xb_cfg_check test it
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/build/mingw/BuildMinGw.bat b/1Tdata/xbase/xbase64-4.1.4/build/mingw/BuildMinGw.bat
new file mode 100755
index 0000000..979cd65
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/build/mingw/BuildMinGw.bat
@@ -0,0 +1,8 @@
+rem Build using MinGW compiler
+
+
+cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Debug .
+
+rem cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release .
+
+mingw32-make \ No newline at end of file
diff --git a/1Tdata/xbase/xbase64-4.1.4/build/mingw/CMakeLists.txt b/1Tdata/xbase/xbase64-4.1.4/build/mingw/CMakeLists.txt
new file mode 100755
index 0000000..ce2566a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/build/mingw/CMakeLists.txt
@@ -0,0 +1,809 @@
+cmake_minimum_required(VERSION 3.2)
+
+project (Xbase64)
+set( xbase_VERSION_MAJOR 4 )
+set( xbase_VERSION_MINOR 1 )
+set( xbase_VERSION_PATCH 4 )
+
+MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
+MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
+MESSAGE( "--- Project Name: " ${CMAKE_PROJECT_NAME} )
+MESSAGE( "--- Install Prefix: " ${CMAKE_INSTALL_PREFIX} )
+
+#Set compiler options
+
+IF( CMAKE_COMPILER_IS_GNUCXX )
+ MESSAGE( "Setting GNU compiler options" )
+ add_compile_options( -Wall -Wsign-conversion )
+# add_compile_options( -Wall -Wconversion -Wsign-conversion )
+ SET( VERBOSE 1 )
+ENDIF( CMAKE_COMPILER_IS_GNUCXX )
+
+IF( BORLAND )
+ MESSAGE ("BORLAND COMPILER" )
+ #set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w-8022" )
+ add_compile_options( -w-8022 )
+ENDIF( BORLAND )
+
+MESSAGE( "--- Checking integer sizes" )
+INCLUDE(CheckTypeSize)
+CHECK_TYPE_SIZE( "short int" SHORT_INT )
+CHECK_TYPE_SIZE( int INT )
+CHECK_TYPE_SIZE( __int32 __INT32 )
+CHECK_TYPE_SIZE( int32_t INT32_T )
+CHECK_TYPE_SIZE( long LONG_INT )
+CHECK_TYPE_SIZE( __int64 __INT64 )
+CHECK_TYPE_SIZE( int64_t INT64_T )
+CHECK_TYPE_SIZE( "long long" LONG_LONG )
+CHECK_TYPE_SIZE( u_int64_t U_INT64_T )
+CHECK_TYPE_SIZE( uint64_t UINT64_T )
+CHECK_TYPE_SIZE( "unsigned __int64" UNSIGNED__INT64 )
+CHECK_TYPE_SIZE( "unsigned long long" UNSIGNED_LONG_LONG )
+
+CHECK_TYPE_SIZE( "double" DOUBLE )
+MESSAGE( "--- Double size = " ${DOUBLE} )
+
+
+#determine how 16 bit integer defined on this platform
+SET( iSize 0 )
+IF( HAVE_SHORT_INT AND ${SHORT_INT} EQUAL 2 )
+ SET( xbInt16 "short int" )
+ SET( xbUInt16 "unsigned short int" )
+ SET( iSize ${SHORT_INT} )
+ MESSAGE( "--- xbInt16 = [short int]" )
+ MESSAGE( "--- xbUInt16 = [unsigned short int]" )
+
+ENDIF( HAVE_SHORT_INT AND ${SHORT_INT} EQUAL 2 )
+IF( NOT ${iSize} EQUAL 2 )
+ MESSAGE( "FATAL_ERROR Could not detect 16 bit integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 2 )
+
+#determine how 32 bit integer defined on this platform
+SET( iSize 0 )
+IF( HAVE_INT AND ${INT} EQUAL 4 )
+ SET( xbInt32 int )
+ SET( xbUInt32 "unsigned int" )
+ SET( iSize ${INT} )
+ MESSAGE( "--- xbInt32 = [int]" )
+ MESSAGE( "--- xbUInt32 = [unsigned int]" )
+ENDIF( HAVE_INT AND ${INT} EQUAL 4 )
+
+IF(( NOT iSize EQUAL 4 ) AND HAVE___INT32 )
+ MESSAGE( __int untested if block - see CMakeLists.txt)
+ SET( xbInt32 __int32 )
+ SET( xbUInt32 "unsigned __int32" )
+ SET( iSize ${__INT} )
+ MESSAGE( "--- xbInt32 = [__int]" )
+ MESSAGE( "--- xbUInt32 = [unsigned __int]" )
+ENDIF(( NOT iSize EQUAL 4 ) AND HAVE___INT32 )
+
+IF(( NOT iSize EQUAL 4 ) AND HAVE_INT32_T )
+ SET( xbInt32 int32_t )
+ SET( xbUInt32 "u_int32_t" )
+ SET( iSize ${INT32_T} )
+ MESSAGE( "--- xbInt32 = [int32_t]" )
+ MESSAGE( "--- xbUInt32 = [u_int32_t]" )
+ENDIF(( NOT iSize EQUAL 4 ) AND HAVE_INT32_T )
+
+IF( NOT ${iSize} EQUAL 4 )
+ MESSAGE( "FATAL_ERROR Could not detect 32 bit integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 4 )
+
+#determine how 64 bit integer defined on this platform
+SET( iSize 0 )
+IF( HAVE___INT64 )
+ SET( xbInt64 __int64 )
+ SET( iSize ${__INT64} )
+ MESSAGE( "--- xbInt64 = [__int64]" )
+ENDIF( HAVE___INT64 )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_INT64_T )
+ SET( xbInt64 int64_t )
+ SET( iSize ${INT64_T} )
+ MESSAGE( "--- xbInt64 = [int64_t]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_INT64_T )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_LONG_LONG )
+ SET( xbInt64 "long long" )
+ SET( iSize ${LONG_LONG} )
+ MESSAGE( "--- xbInt64 = [long long]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_LONG_LONG )
+
+IF( NOT ${iSize} EQUAL 8 )
+ MESSAGE( "FATAL_ERROR Could not detect 64 bit integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 8 )
+
+#determine how 64 bit unsigned integer defined on this platform
+SET( iSize 0 )
+IF( HAVE_UNSIGNED__INT64 )
+ SET( xbUInt64 "unsigned __int64" )
+ SET( iSize ${UNSIGNED__INT64} )
+ MESSAGE( "--- xbUInt64 = [unsigned __int64]" )
+ENDIF( HAVE_UNSIGNED__INT64 )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_UINT64_T )
+ SET( xbUInt64 "uint64_t" )
+ SET( iSize ${UINT64_T} )
+ MESSAGE( "--- xbUInt64 = [uint64_t]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_UINT64_T )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_U_INT64_T )
+ SET( xbUInt64 u_int64_t )
+ SET( iSize ${U_INT64_T} )
+ MESSAGE( "--- xbUInt64 = [u_int64_t]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_U_INT64_T )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_UNSIGNED_LONG_LONG )
+ SET( xbUInt64 "unsigned long long" )
+ SET( iSize ${UNSIGNED_LONG_LONG} )
+ MESSAGE( "--- xbUInt64 = [unsigned long long]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_UNSIGNED_LONG_LONG )
+
+IF( NOT ${iSize} EQUAL 8 )
+ MESSAGE( "FATAL_ERROR Could not detect 64 bit unsigned integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 8 )
+
+#Library options
+option( BUILD_SHARED_LIBS "Build shared libraries" ON)
+option( XB_DBF3_SUPPORT "Compile DBase File Format Version 3 support" ON)
+option( XB_DBF4_SUPPORT "Compile DBase File Format Version 4 support" ON)
+option( XB_MEMO_SUPPORT "Compile memo field support into library" ON)
+option( XB_NDX_SUPPORT "Compile NDX Index support into library" ON)
+option( XB_MDX_SUPPORT "Compile MDX Index support into library" ON)
+option( XB_LOCKING_SUPPORT "Compile Multi User Locking support into library" ON)
+option( XB_TDX_SUPPORT "Compile temporary index support into library" ON)
+
+option( XB_LOGGING_SUPPORT "Compile message logging support into library" ON)
+option( XB_LINKLIST_SUPPORT "Compile Link List routines into library" ON)
+option( XB_FUNCTION_SUPPORT "Compile XBase Function support into library" ON)
+option( XB_EXPRESSION_SUPPORT "Compile Expression support into library" ON)
+option( XB_INF_SUPPORT "Compile NDX INF file support into library" ON)
+option( XB_FILTER_SUPPORT "Compile Filter support into library" ON)
+option( XB_BLOCKREAD_SUPPORT "Compile Block Read support into library" ON)
+option( XB_SQL_SUPPORT "Compile SQL support into library - alpha" ON)
+option( XB_DEBUG_SUPPORT "Compile debug logic into library" ON)
+option( XB_UTILS_SUPPORT "Compile utility programs" ON)
+option( XB_EXAMPLES_SUPPORT "Compile example programs" ON)
+
+Message( "--- BUILD_SHARED_LIBS " ${BUILD_SHARED_LIBS})
+Message( "--- XB_DBF3_SUPPORT " ${XB_DBF3_SUPPORT})
+Message( "--- XB_DBF4_SUPPORT " ${XB_DBF4_SUPPORT})
+Message( "--- XB_MEMO_SUPPORT " ${XB_MEMO_SUPPORT})
+Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
+Message( "--- XB_MDX_SUPPORT " ${XB_MDX_SUPPORT})
+Message( "--- XB_TDX_SUPPORT " ${XB_TDX_SUPPORT})
+Message( "--- XB_LOCKING_SUPPORT " ${XB_LOCKING_SUPPORT})
+Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
+Message( "--- XB_FUNCTION_SUPPORT " ${XB_FUNCTION_SUPPORT})
+Message( "--- XB_EXPRESSION_SUPPORT " ${XB_EXPRESSION_SUPPORT})
+Message( "--- XB_FILTER_SUPPORT " ${XB_FILTER_SUPPORT})
+Message( "--- XB_DEBUG_SUPPORT " ${XB_DEBUG_SUPPORT})
+Message( "--- XB_UTILS_SUPPORT " ${XB_UTILS_SUPPORT})
+Message( "--- XB_EXAMPLES_SUPPORT " ${XB_EXAMPLES_SUPPORT})
+Message( "--- XB_LOGGING_SUPPORT " ${XB_LOGGING_SUPPORT})
+Message( "--- XB_SQL_SUPPORT " ${XB_SQL_SUPPORT})
+Message( "--- XB_INF_SUPPORT " ${XB_INF_SUPPORT})
+Message( "--- XB_BLOCKREAD_SUPPORT " ${XB_BLOCKREAD_SUPPORT})
+
+IF( XB_DEBUG_SUPPORT )
+ Message( "--- Adding debug support" )
+ set( CMAKE_BUILD_TYPE Debug )
+IF( CMAKE_COMPILER_IS_GNUCXX )
+ add_compile_options( -Og )
+ENDIF( CMAKE_COMPILER_IS_GNUCXX )
+ENDIF( XB_DEBUG_SUPPORT )
+
+IF( CMAKE_SIZEOF_VOID_P EQUAL 8 )
+ MESSAGE( "--- 64 bit compiler detected" )
+ set( XB_PLATFORM "x64" )
+ set( XB_PLATFORM_64 1 )
+ set( XB_LIBNAME "xbase64" )
+
+ELSE( CMAKE_SIZEOF_VOID_P EQUAL 8 )
+ MESSAGE( "--- 32 bit compiler detected" )
+ set( XB_PLATFORM "x86" )
+ set( XB_PLATFORM_32 1 )
+ set( XB_LIBNAME "xbase32" )
+
+ENDIF( CMAKE_SIZEOF_VOID_P EQUAL 8 )
+
+
+#Check for the existence of various header files
+INCLUDE (CheckIncludeFiles)
+CHECK_INCLUDE_FILES (ctype.h HAVE_CTYPE_H)
+CHECK_INCLUDE_FILES (dirent.h HAVE_DIRENT_H)
+CHECK_INCLUDE_FILES (fcntl.h HAVE_FCNTL_H)
+CHECK_INCLUDE_FILES (inttypes.h HAVE_INTTYPES_H)
+CHECK_INCLUDE_FILES (pwd.h HAVE_PWD_H)
+CHECK_INCLUDE_FILES (stdarg.h HAVE_STDARG_H)
+CHECK_INCLUDE_FILES (stdargs.h HAVE_STDARGS_H)
+CHECK_INCLUDE_FILES (string.h HAVE_STRING_H)
+CHECK_INCLUDE_FILES (strings.h HAVE_STRINGS_H)
+CHECK_INCLUDE_FILES (sys/stat.h HAVE_STAT_H)
+CHECK_INCLUDE_FILES (unistd.h HAVE_UNISTD_H)
+CHECK_INCLUDE_FILES (varargs.h HAVE_VARARGS_H)
+CHECK_INCLUDE_FILES (windows.h HAVE_WINDOWS_H)
+
+#Check for the existence of various function calls
+INCLUDE( CheckFunctionExists )
+CHECK_FUNCTION_EXISTS(_close HAVE__CLOSE_F)
+CHECK_FUNCTION_EXISTS(fcntl HAVE_FCNTL_F)
+CHECK_FUNCTION_EXISTS(_fdopen HAVE__FDOPEN_F)
+CHECK_FUNCTION_EXISTS(fopen_s HAVE_FOPEN_S_F)
+CHECK_FUNCTION_EXISTS(_fsopen HAVE__FSOPEN_F)
+CHECK_FUNCTION_EXISTS(_fileno HAVE__FILENO_F)
+CHECK_FUNCTION_EXISTS(fork HAVE_FORK_F)
+CHECK_FUNCTION_EXISTS(_fseeki64 HAVE__FSEEKI64_F)
+CHECK_FUNCTION_EXISTS(fseeko HAVE_FSEEKO_F)
+CHECK_FUNCTION_EXISTS(ftruncate HAVE_FTRUNCATE_F)
+CHECK_FUNCTION_EXISTS(getenv_s HAVE_GETENV_S_F)
+
+CHECK_FUNCTION_EXISTS(_localtime64_s HAVE__LOCALTIME64_S_F)
+CHECK_FUNCTION_EXISTS(LockFile HAVE_LOCKFILE_F)
+CHECK_FUNCTION_EXISTS(locking HAVE_LOCKING_F)
+CHECK_FUNCTION_EXISTS(_locking HAVE__LOCKING_F)
+CHECK_FUNCTION_EXISTS(_open HAVE__OPEN_F)
+CHECK_FUNCTION_EXISTS(SetEndOfFile HAVE_SETENDOFFILE_F)
+
+CHECK_FUNCTION_EXISTS(vsnprintf HAVE_VSNPRINTF_F)
+CHECK_FUNCTION_EXISTS(_vsnprintf_s HAVE__VSNPRINTF_S_F)
+
+
+CHECK_FUNCTION_EXISTS(getopt HAVE_GETOPT_F)
+
+IF( WIN32 )
+
+# Use CHECK_SYMBOL_EXISTS for the Win32API instead of CHECK_FUNCTION_EXISTS
+# Can't detect inline functions in headers
+# Can't detect due to mismatch of calling conventions
+# Can't detect mangled names
+
+INCLUDE( CheckSymbolExists )
+CHECK_SYMBOL_EXISTS(CreateProcessW Windows.h HAVE_CREATEPROCESSW_F )
+CHECK_SYMBOL_EXISTS(vsprintf_s stdio.h HAVE_VSPRINTF_S_F )
+
+ENDIF ( WIN32 )
+
+# IF( NOT HAVE_SENTENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND BORLAND )
+# # ----fix me----
+# # cmake CHECK_FUNCTION_EXISTS - could not find Borland 5.5 SetEndOfFile
+# Set( HAVE_SETENDOFFILE_F "HAVE_SETENDOFFILE_H" )
+# ENDIF ( NOT HAVE_SENTENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND BORLAND )
+
+IF( NOT HAVE_SETENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND WIN32 )
+ # ----fix me----
+ # cmake CHECK_FUNCTION_EXISTS - could not find Borland 5.5, or Windows VS 32 bit SetEndOfFile
+ Set( HAVE_SETENDOFFILE_F "HAVE_SETENDOFFILE_F" )
+ENDIF ( NOT HAVE_SETENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND WIN32 )
+
+IF( XB_NDX_SUPPORT OR XB_MDX_SUPPORT )
+ Set( XB_INDEX_SUPPORT "1" )
+ENDIF( XB_NDX_SUPPORT OR XB_MDX_SUPPORT )
+
+
+# Set directories
+# PROJECT_PARENT_DIR is two nodes higher
+get_filename_component( PROJECT_PARENT_DIR ${PROJECT_BINARY_DIR} DIRECTORY )
+get_filename_component( PROJECT_PARENT_DIR ${PROJECT_PARENT_DIR} DIRECTORY )
+
+# MESSAGE( "PROJECT_PARENT_DIR = " ${PROJECT_PARENT_DIR} )
+# MESSAGE( "PROJECT_BINARY_DIR = " ${PROJECT_BINARY_DIR} )
+
+
+set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin )
+set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib )
+set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib )
+
+set( PROJECT_SOURCE_DIR ${PROJECT_PARENT_DIR}/src )
+set( PROJECT_DATA_DIR ${PROJECT_PARENT_DIR}/data )
+set( PROJECT_LOG_DIR ${PROJECT_PARENT_DIR}/logs )
+set( PROJECT_TEMP_DIR ${PROJECT_PARENT_DIR}/temp )
+set( EXTRA_LIBS ${EXTRA_LIBS} ${XB_LIBNAME} )
+
+
+# Undo bad decisions
+IF( XB_PLATFORM_32 AND XB_LARGEFILE_SUPPORT )
+ MESSAGE( "--- Can't build 64 bit environment with a 32 bit compiler" )
+ MESSAGE( "--- XB_LARGEFILE_SUPPORT set to OFF" )
+ set( XB_LARGEFILE_SUPPORT OFF CACHE BOOL "Use 64 bit large file support?" FORCE )
+ENDIF ( XB_PLATFORM_32 AND XB_LARGEFILE_SUPPORT )
+
+IF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
+ MESSAGE( "--- At lease one file format is required. Defaulting to Version 4" )
+ set( XB_DBF4_SUPPORT ON CACHE BOOL "Compile DBase File Format Version 4 support" FORCE )
+ENDIF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
+
+IF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+ MESSAGE( "--- Link List support required for DBF V4 Memo files. Setting to ON" )
+ set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
+ENDIF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+
+
+
+
+IF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+ MESSAGE( "--- Link List support required for locking functions. Setting to ON" )
+ set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
+ENDIF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+
+IF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+ MESSAGE( "--- MDX support required for Temporary indices. Setting to ON" )
+ set( XB_MDX_SUPPORT ON CACHE BOOL "Compile temporary index support into library" FORCE )
+ENDIF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+
+IF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+ MESSAGE( "--- Expression required for indices. Setting to ON" )
+ set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
+ Set( XB_INDEX_SUPPORT "1" )
+ENDIF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+
+IF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
+ MESSAGE( "--- Function support required for expressions. Setting to ON" )
+ set( XB_FUNCTION_SUPPORT ON CACHE BOOL "Compile XBase Function support into library" FORCE )
+ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
+
+IF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+ MESSAGE( "--- Linklist support required for expressions. Setting to ON" )
+ set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
+ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+
+IF( XB_SQL_SUPPORT AND NOT XB_MEMO_SUPPORT )
+ MESSAGE( "--- Memo support required for SQL. Setting to ON" )
+ set( XB_MEMO_SUPPORT ON CACHE BOOL "Compile memo field support into library" FORCE )
+ENDIF( XB_SQL_SUPPORT AND NOT XB_MEMO_SUPPORT )
+
+IF( XB_SQL_SUPPORT AND NOT XB_DBF4_SUPPORT )
+ MESSAGE( "--- DBF4 support required for SQL. Setting to ON" )
+ set( XB_DBF4_SUPPORT ON CACHE BOOL "Compile DBase File Format Version 4 support" FORCE )
+ENDIF( XB_SQL_SUPPORT AND NOT XB_DBF4_SUPPORT )
+
+IF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+ MESSAGE( "--- Expression required for filters. Setting to ON" )
+ set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
+ENDIF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+
+IF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
+ MESSAGE( "--- BLOCKREAD support required for SQL. Setting to ON" )
+ set( XB_BLOCKREAD_SUPPORT ON CACHE BOOL "Compile Block Read support into library" FORCE )
+ENDIF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
+
+IF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+ MESSAGE( "--- MDX support required for Temporary indices. Setting to ON" )
+ set( XB_MDX_SUPPORT ON CACHE BOOL "Compile temporary index support into library" FORCE )
+ENDIF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+
+
+
+# Build configuration header file
+configure_file (
+ "${PROJECT_SOURCE_DIR}/include/xbconfig.h.in"
+ "${PROJECT_BINARY_DIR}/include/xbconfig.h"
+)
+
+# Microsoft Windows compiler settings
+IF( MSVC )
+# add_definitions( /D_CRT_SECURE_NO_WARNINGS)
+ add_definitions( /EHsc )
+ENDIF( MSVC )
+
+
+# set up include directories
+include_directories( "${PROJECT_BINARY_DIR}/include" )
+include_directories( "${PROJECT_SOURCE_DIR}/include" )
+
+#build the library
+IF ( BUILD_SHARED_LIBS )
+ set( LIB_TYPE SHARED )
+ELSE( BUILD_SHARED_LIBS )
+ set( LIB_TYPE STATIC )
+ENDIF( BUILD_SHARED_LIBS )
+MESSAGE( "--- Lib type " ${LIB_TYPE} )
+
+
+
+set (SOURCES ${PROJECT_SOURCE_DIR}/core/xbstring.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbssv.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbdate.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbtblmgr.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbxbase.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbfile.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbdbf.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbfields.cpp
+ ${PROJECT_SOURCE_DIR}/core/xblog.cpp)
+
+IF( XB_MEMO_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo.cpp )
+ENDIF( XB_MEMO_SUPPORT )
+
+IF( XB_DBF3_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbdbf3.cpp )
+ IF( XB_MEMO_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo3.cpp )
+ ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF3_SUPPORT )
+
+IF( XB_DBF4_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbdbf4.cpp )
+ IF( XB_MEMO_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo4.cpp )
+ ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF4_SUPPORT )
+
+IF( XB_FUNCTION_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbfuncs.cpp )
+ENDIF( XB_FUNCTION_SUPPORT )
+
+IF( XB_EXPRESSION_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbexpnode.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbexp.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbuda.cpp )
+ENDIF( XB_EXPRESSION_SUPPORT )
+
+IF( XB_INDEX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbbcd.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixbase.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbtag.cpp )
+ENDIF( XB_INDEX_SUPPORT )
+
+IF( XB_NDX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixndx.cpp )
+ENDIF( XB_NDX_SUPPORT )
+
+
+IF( XB_MDX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixmdx.cpp )
+ENDIF( XB_MDX_SUPPORT )
+
+IF( XB_TDX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixtdx.cpp )
+ENDIF( XB_TDX_SUPPORT )
+
+
+IF( XB_SQL_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbalttbl.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrix.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrtbl.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdelete.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdrpix.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdrptbl.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbinsert.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbset.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbsql.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbstmt.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbselect.cpp )
+ENDIF( XB_SQL_SUPPORT )
+
+
+IF( XB_FILTER_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbfilter.cpp )
+ENDIF( XB_FILTER_SUPPORT )
+
+IF( XB_BLOCKREAD_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbblockread.cpp )
+ENDIF( XB_BLOCKREAD_SUPPORT )
+
+
+include( GenerateExportHeader )
+#add_library( xbase ${LIB_TYPE} ${SOURCES} )
+add_library( ${XB_LIBNAME} ${LIB_TYPE} ${SOURCES} )
+#add_library( ${CMAKE_PROJECT_NAME} ${LIB_TYPE} ${SOURCES} )
+
+
+IF( WIN32 )
+MESSAGE( "--- Generating Windows Library Headers" )
+
+#GENERATE_EXPORT_HEADER( xbase
+# BASE_NAME xbase
+
+GENERATE_EXPORT_HEADER( ${XB_LIBNAME}
+ BASE_NAME ${XB_LIBNAME}
+ EXPORT_MACRO_NAME xbase_EXPORT
+ EXPORT_FILE_NAME xbase_Export.h
+ STATIC_DEFINE xbase_BUILT_AS_STATIC
+)
+ENDIF( WIN32 )
+
+
+#build test programs
+enable_testing()
+
+add_executable( xb_test_string ${PROJECT_SOURCE_DIR}/tests/xb_test_string.cpp )
+target_link_libraries( xb_test_string ${EXTRA_LIBS})
+add_test( NAME xbString COMMAND xb_test_string QUIET )
+
+add_executable( xb_test_date ${PROJECT_SOURCE_DIR}/tests/xb_test_date.cpp )
+target_link_libraries( xb_test_date ${EXTRA_LIBS})
+add_test( NAME xbDate COMMAND xb_test_date QUIET )
+
+add_executable( xb_test_tblmgr ${PROJECT_SOURCE_DIR}/tests/xb_test_tblmgr.cpp )
+target_link_libraries( xb_test_tblmgr ${EXTRA_LIBS})
+add_test( NAME xbTblMgr COMMAND xb_test_tblmgr QUIET )
+
+add_executable( xb_test_xbase ${PROJECT_SOURCE_DIR}/tests/xb_test_xbase.cpp )
+target_link_libraries( xb_test_xbase ${EXTRA_LIBS})
+add_test( NAME xbXBase COMMAND xb_test_xbase QUIET )
+
+add_executable( xb_test_file ${PROJECT_SOURCE_DIR}/tests/xb_test_file.cpp )
+target_link_libraries( xb_test_file ${EXTRA_LIBS})
+add_test( NAME xbFile COMMAND xb_test_file QUIET )
+
+add_executable( xb_test_log ${PROJECT_SOURCE_DIR}/tests/xb_test_log.cpp )
+target_link_libraries( xb_test_log ${EXTRA_LIBS})
+add_test( NAME xbLog COMMAND xb_test_log QUIET )
+
+IF( XB_LINKLIST_SUPPORT )
+add_executable( xb_test_linklist ${PROJECT_SOURCE_DIR}/tests/xb_test_linklist.cpp )
+target_link_libraries( xb_test_linklist ${EXTRA_LIBS})
+add_test( NAME xbLinkList COMMAND xb_test_linklist QUIET )
+ENDIF( XB_LINKLIST_SUPPORT )
+
+IF( XB_DBF3_SUPPORT )
+add_executable( xb_test_dbf_v3_nomemos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v3_nomemos.cpp )
+target_link_libraries( xb_test_dbf_v3_nomemos ${EXTRA_LIBS})
+add_test( NAME xbDbfV3NoMemos COMMAND xb_test_dbf_v3_nomemos QUIET )
+
+IF( XB_MEMO_SUPPORT )
+add_executable( xb_test_dbf_v3_memos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v3_memos.cpp )
+target_link_libraries( xb_test_dbf_v3_memos ${EXTRA_LIBS})
+add_test( NAME xbDbfV3Memos COMMAND xb_test_dbf_v3_memos QUIET )
+
+ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF3_SUPPORT )
+
+IF( XB_DBF4_SUPPORT )
+add_executable( xb_test_dbf_v4_nomemos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v4_nomemos.cpp )
+target_link_libraries( xb_test_dbf_v4_nomemos ${EXTRA_LIBS})
+add_test( NAME xbDbfV4NoMemos COMMAND xb_test_dbf_v4_nomemos QUIET )
+
+IF( XB_MEMO_SUPPORT )
+add_executable( xb_test_dbf_v4_memos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v4_memos.cpp )
+target_link_libraries( xb_test_dbf_v4_memos ${EXTRA_LIBS})
+add_test( NAME xbDbfV4Memos COMMAND xb_test_dbf_v4_memos QUIET )
+
+ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF4_SUPPORT )
+
+IF( XB_FUNCTION_SUPPORT )
+add_executable( xb_test_funcs ${PROJECT_SOURCE_DIR}/tests/xb_test_funcs.cpp )
+target_link_libraries( xb_test_funcs ${EXTRA_LIBS})
+add_test( NAME xbFunctions COMMAND xb_test_funcs QUIET )
+ENDIF( XB_FUNCTION_SUPPORT )
+
+IF( XB_NDX_SUPPORT )
+IF( XB_DBF3_SUPPORT )
+add_executable( xb_test_ndx ${PROJECT_SOURCE_DIR}/tests/xb_test_ndx.cpp )
+target_link_libraries( xb_test_ndx ${EXTRA_LIBS})
+add_test( NAME xbIxNdx COMMAND xb_test_ndx QUIET )
+ENDIF( XB_DBF3_SUPPORT )
+ENDIF( XB_NDX_SUPPORT )
+
+
+
+IF( XB_DBF4_SUPPORT )
+
+IF( XB_MDX_SUPPORT )
+add_executable( xb_test_mdx ${PROJECT_SOURCE_DIR}/tests/xb_test_mdx.cpp )
+target_link_libraries( xb_test_mdx ${EXTRA_LIBS})
+add_test( NAME xbIxMdx COMMAND xb_test_mdx QUIET )
+ENDIF( XB_MDX_SUPPORT )
+
+IF( XB_TDX_SUPPORT )
+add_executable( xb_test_tdx ${PROJECT_SOURCE_DIR}/tests/xb_test_tdx.cpp )
+target_link_libraries( xb_test_tdx ${EXTRA_LIBS})
+add_test( NAME xbIxTdx COMMAND xb_test_tdx QUIET )
+ENDIF( XB_TDX_SUPPORT )
+
+ENDIF( XB_DBF4_SUPPORT )
+
+
+
+IF( XB_INDEX_SUPPORT )
+add_executable( xb_test_bcd ${PROJECT_SOURCE_DIR}/tests/xb_test_bcd.cpp )
+target_link_libraries( xb_test_bcd ${EXTRA_LIBS})
+add_test( NAME xbBcd COMMAND xb_test_bcd QUIET )
+ENDIF( XB_INDEX_SUPPORT )
+
+
+IF( XB_EXPRESSION_SUPPORT )
+
+add_executable( xb_test_expnode ${PROJECT_SOURCE_DIR}/tests/xb_test_expnode.cpp )
+target_link_libraries( xb_test_expnode ${EXTRA_LIBS})
+add_test( NAME xbExpNode COMMAND xb_test_expnode QUIET )
+
+
+add_executable( xb_test_expression ${PROJECT_SOURCE_DIR}/tests/xb_test_expression.cpp )
+target_link_libraries( xb_test_expression ${EXTRA_LIBS})
+add_test( NAME xbExpressions COMMAND xb_test_expression QUIET )
+
+add_executable( xb_test_uda ${PROJECT_SOURCE_DIR}/tests/xb_test_uda.cpp )
+target_link_libraries( xb_test_uda ${EXTRA_LIBS})
+add_test( NAME xbUda COMMAND xb_test_uda QUIET )
+
+ENDIF( XB_EXPRESSION_SUPPORT )
+
+IF( XB_SQL_SUPPORT )
+add_executable( xb_test_sql ${PROJECT_SOURCE_DIR}/tests/xb_test_sql.cpp )
+target_link_libraries( xb_test_sql ${EXTRA_LIBS})
+add_test( NAME xbSql COMMAND xb_test_sql QUIET )
+ENDIF( XB_SQL_SUPPORT )
+
+IF( XB_FILTER_SUPPORT )
+add_executable( xb_test_filter ${PROJECT_SOURCE_DIR}/tests/xb_test_filter.cpp )
+target_link_libraries( xb_test_filter ${EXTRA_LIBS})
+add_test( NAME xbFilter COMMAND xb_test_filter QUIET )
+ENDIF( XB_FILTER_SUPPORT )
+
+IF( XB_BLOCKREAD_SUPPORT )
+add_executable( xb_test_blockread ${PROJECT_SOURCE_DIR}/tests/xb_test_blockread.cpp )
+target_link_libraries( xb_test_blockread ${EXTRA_LIBS})
+add_test( NAME xbBlockRead COMMAND xb_test_blockread QUIET )
+ENDIF( XB_BLOCKREAD_SUPPORT )
+
+
+IF( XB_LOCKING_SUPPORT )
+add_executable( xb_test_lock ${PROJECT_SOURCE_DIR}/tests/xb_test_lock.cpp )
+target_link_libraries( xb_test_lock ${EXTRA_LIBS})
+add_test( NAME xbLock COMMAND xb_test_lock QUIET )
+IF( HAVE_CREATEPROCESSW_F )
+add_executable( xb_test_lock2 ${PROJECT_SOURCE_DIR}/tests/xb_test_lock2.cpp )
+target_link_libraries( xb_test_lock2 ${EXTRA_LIBS})
+ENDIF( HAVE_CREATEPROCESSW_F )
+ENDIF( XB_LOCKING_SUPPORT )
+
+#build example programs
+IF( XB_EXAMPLES_SUPPORT )
+ add_executable( xb_ex_string ${PROJECT_SOURCE_DIR}/examples/xb_ex_string.cpp )
+ target_link_libraries( xb_ex_string ${EXTRA_LIBS})
+
+ add_executable( xb_ex_date ${PROJECT_SOURCE_DIR}/examples/xb_ex_date.cpp )
+ target_link_libraries( xb_ex_date ${EXTRA_LIBS})
+
+ IF( XB_DBF3_SUPPORT )
+ add_executable( xb_ex_v3_create_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v3_create_dbf.cpp )
+ target_link_libraries( xb_ex_v3_create_dbf ${EXTRA_LIBS})
+
+ add_executable( xb_ex_v3_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v3_upd_dbf.cpp )
+ target_link_libraries( xb_ex_v3_upd_dbf ${EXTRA_LIBS})
+ ENDIF( XB_DBF3_SUPPORT )
+
+ IF( XB_DBF4_SUPPORT )
+ add_executable( xb_ex_v4_create_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_create_dbf.cpp )
+ target_link_libraries( xb_ex_v4_create_dbf ${EXTRA_LIBS})
+ ENDIF( XB_DBF4_SUPPORT )
+
+ IF( XB_EXPRESSION_SUPPORT )
+ add_executable( xb_ex_expression ${PROJECT_SOURCE_DIR}/examples/xb_ex_expression.cpp )
+ target_link_libraries( xb_ex_expression ${EXTRA_LIBS})
+ ENDIF( XB_EXPRESSION_SUPPORT )
+
+ add_executable( xb_ex_v4_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_upd_dbf.cpp )
+ target_link_libraries( xb_ex_v4_upd_dbf ${EXTRA_LIBS})
+
+ add_executable( xb_ex_ssv ${PROJECT_SOURCE_DIR}/examples/xb_ex_ssv.cpp )
+ target_link_libraries( xb_ex_ssv ${EXTRA_LIBS})
+
+ IF( XB_LOGGING_SUPPORT )
+ add_executable( xb_ex_log ${PROJECT_SOURCE_DIR}/examples/xb_ex_log.cpp )
+ target_link_libraries( xb_ex_log ${EXTRA_LIBS})
+ ENDIF( XB_LOGGING_SUPPORT )
+
+ENDIF( XB_EXAMPLES_SUPPORT )
+
+#build utility programs
+IF( XB_UTILS_SUPPORT )
+
+ add_executable( xb_cfg_check ${PROJECT_SOURCE_DIR}/utils/xb_cfg_check.cpp )
+ target_link_libraries( xb_cfg_check ${EXTRA_LIBS})
+
+ add_executable( xb_copydbf ${PROJECT_SOURCE_DIR}/utils/xb_copydbf.cpp )
+ target_link_libraries( xb_copydbf ${EXTRA_LIBS})
+
+ add_executable( xb_dbfutil ${PROJECT_SOURCE_DIR}/utils/xb_dbfutil.cpp )
+ target_link_libraries( xb_dbfutil ${EXTRA_LIBS})
+
+ add_executable( xb_deletall ${PROJECT_SOURCE_DIR}/utils/xb_deletall.cpp )
+ target_link_libraries( xb_deletall ${EXTRA_LIBS})
+
+ add_executable( xb_dumpdbt ${PROJECT_SOURCE_DIR}/utils/xb_dumpdbt.cpp )
+ target_link_libraries( xb_dumpdbt ${EXTRA_LIBS})
+
+ add_executable( xb_dumprecs ${PROJECT_SOURCE_DIR}/utils/xb_dumprecs.cpp )
+ target_link_libraries( xb_dumprecs ${EXTRA_LIBS})
+
+ add_executable( xb_import ${PROJECT_SOURCE_DIR}/utils/xb_import.cpp )
+ target_link_libraries( xb_import ${EXTRA_LIBS})
+
+ add_executable( xb_tblinfo ${PROJECT_SOURCE_DIR}/utils/xb_tblinfo.cpp )
+ target_link_libraries( xb_tblinfo ${EXTRA_LIBS})
+
+ IF( XB_SQL_SUPPORT )
+ add_executable( xb_execsql ${PROJECT_SOURCE_DIR}/utils/xb_execsql.cpp )
+ target_link_libraries( xb_execsql ${EXTRA_LIBS})
+ ENDIF( XB_SQL_SUPPORT )
+
+ add_executable( xb_pack ${PROJECT_SOURCE_DIR}/utils/xb_pack.cpp )
+ target_link_libraries( xb_pack ${EXTRA_LIBS})
+
+ add_executable( xb_undelall ${PROJECT_SOURCE_DIR}/utils/xb_undelall.cpp )
+ target_link_libraries( xb_undelall ${EXTRA_LIBS})
+
+ install (TARGETS xb_cfg_check DESTINATION bin)
+ install (TARGETS xb_copydbf DESTINATION bin)
+ install (TARGETS xb_dbfutil DESTINATION bin)
+ install (TARGETS xb_deletall DESTINATION bin)
+ install (TARGETS xb_dumpdbt DESTINATION bin)
+ install (TARGETS xb_dumprecs DESTINATION bin)
+ install (TARGETS xb_import DESTINATION bin)
+ install (TARGETS xb_pack DESTINATION bin)
+ install (TARGETS xb_undelall DESTINATION bin)
+ IF( XB_SQL_SUPPORT )
+ install (TARGETS xb_execsql DESTINATION bin)
+ ENDIF( XB_SQL_SUPPORT )
+
+
+
+ENDIF( XB_UTILS_SUPPORT )
+
+install (FILES ${PROJECT_BINARY_DIR}/include/xbconfig.h
+ ${PROJECT_SOURCE_DIR}/include/xbase.h
+ ${PROJECT_SOURCE_DIR}/include/xbbcd.h
+ ${PROJECT_SOURCE_DIR}/include/xbblkread.h
+ ${PROJECT_SOURCE_DIR}/include/xbdate.h
+ ${PROJECT_SOURCE_DIR}/include/xbdbf.h
+ ${PROJECT_SOURCE_DIR}/include/xbexp.h
+ ${PROJECT_SOURCE_DIR}/include/xbexpnode.h
+ ${PROJECT_SOURCE_DIR}/include/xbfile.h
+ ${PROJECT_SOURCE_DIR}/include/xbfilter.h
+ ${PROJECT_SOURCE_DIR}/include/xbindex.h
+ ${PROJECT_SOURCE_DIR}/include/xblnklst.h
+ ${PROJECT_SOURCE_DIR}/include/xblnklstord.h
+ ${PROJECT_SOURCE_DIR}/include/xblnknod.h
+ ${PROJECT_SOURCE_DIR}/include/xblog.h
+ ${PROJECT_SOURCE_DIR}/include/xbmemo.h
+ ${PROJECT_SOURCE_DIR}/include/xbretcod.h
+ ${PROJECT_SOURCE_DIR}/include/xbsql.h
+ ${PROJECT_SOURCE_DIR}/include/xbssv.h
+ ${PROJECT_SOURCE_DIR}/include/xbstring.h
+ ${PROJECT_SOURCE_DIR}/include/xbtag.h
+ ${PROJECT_SOURCE_DIR}/include/xbtblmgr.h
+ ${PROJECT_SOURCE_DIR}/include/xbtypes.h
+ ${PROJECT_SOURCE_DIR}/include/xbuda.h
+ ${PROJECT_SOURCE_DIR}/include/xbxbase.h
+ DESTINATION include/${CMAKE_PROJECT_NAME})
+
+IF( NOT WIN32 )
+install (FILES ${PROJECT_PARENT_DIR}/docs/man/xb_cfg_chk.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_copydbf.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dbfutil.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_deletall.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dumpdbt.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dumprecs.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_import.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_pack.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_tblinfo.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_undelall.1.gz
+
+ DESTINATION man/man1)
+
+ENDIF( NOT WIN32 )
+
+
+SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.1.4 SOVERSION 0 )
+
+IF( WIN32 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION bin)
+ELSE( WIN32 )
+ IF( EXISTS /usr/local/lib64 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION lib64/${CMAKE_PROJECT_NAME})
+ ELSE( EXISTS /usr/local/lib64 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION lib/${CMAKE_PROJECT_NAME})
+ ENDIF( EXISTS /usr/local/lib64 )
+ENDIF( WIN32 )
diff --git a/1Tdata/xbase/xbase64-4.1.4/build/mingw/CleanMingw.bat b/1Tdata/xbase/xbase64-4.1.4/build/mingw/CleanMingw.bat
new file mode 100755
index 0000000..f2cf057
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/build/mingw/CleanMingw.bat
@@ -0,0 +1,19 @@
+
+rem Use this batch file to completely clean the mingw directory tree for a clean build from scratch
+
+rem rd /S /Q bin
+rd /S /Q CMakeFiles
+rd /S /Q include
+rd /S /Q lib
+rd /S /Q testing
+rd /S /Q bin
+del *.cmake
+del CmakeCache.txt
+del Makefile
+del *.h
+del *.exp
+del *.lib
+del *.filters
+del *.vcxproj
+del *.sln
+del *.a \ No newline at end of file
diff --git a/1Tdata/xbase/xbase64-4.1.4/build/mingw/README.mingw b/1Tdata/xbase/xbase64-4.1.4/build/mingw/README.mingw
new file mode 100644
index 0000000..aee6401
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/build/mingw/README.mingw
@@ -0,0 +1,21 @@
+
+Mingw build steps for Xbase64 running on Windows - 3/7/23
+
+1) Verify cmake is installed with command: cmake --version
+ If it is not installed, install the latest version.
+
+
+2) Verify mingw gcc is intalled with the command: mingw32-make --version
+ If it is not installed, install the latest version.
+
+
+3) Build xbase64 library
+
+ cd build/mingw (go to the appropriate build directory)
+ BuildMinGw.bat (configure for your environment and compile)
+ mingw32-make test (test library buiild)
+ mingw32-make install (install it)
+
+ "c:\Program Files (x86)\xbase64\bin\xb_cfg_chk"
+ (test install)
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/build/win32vs/BuildWin.bat b/1Tdata/xbase/xbase64-4.1.4/build/win32vs/BuildWin.bat
new file mode 100755
index 0000000..48fe5fd
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/build/win32vs/BuildWin.bat
@@ -0,0 +1,7 @@
+rem Build using MS Visual Studio
+pause To build the Windows Visual Studio 32 bit version, execute this script from a Visual Studio 32 bit command window
+
+
+rem cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Debug .
+cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release .
+nmake \ No newline at end of file
diff --git a/1Tdata/xbase/xbase64-4.1.4/build/win32vs/CMakeLists.txt b/1Tdata/xbase/xbase64-4.1.4/build/win32vs/CMakeLists.txt
new file mode 100755
index 0000000..ce2566a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/build/win32vs/CMakeLists.txt
@@ -0,0 +1,809 @@
+cmake_minimum_required(VERSION 3.2)
+
+project (Xbase64)
+set( xbase_VERSION_MAJOR 4 )
+set( xbase_VERSION_MINOR 1 )
+set( xbase_VERSION_PATCH 4 )
+
+MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
+MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
+MESSAGE( "--- Project Name: " ${CMAKE_PROJECT_NAME} )
+MESSAGE( "--- Install Prefix: " ${CMAKE_INSTALL_PREFIX} )
+
+#Set compiler options
+
+IF( CMAKE_COMPILER_IS_GNUCXX )
+ MESSAGE( "Setting GNU compiler options" )
+ add_compile_options( -Wall -Wsign-conversion )
+# add_compile_options( -Wall -Wconversion -Wsign-conversion )
+ SET( VERBOSE 1 )
+ENDIF( CMAKE_COMPILER_IS_GNUCXX )
+
+IF( BORLAND )
+ MESSAGE ("BORLAND COMPILER" )
+ #set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w-8022" )
+ add_compile_options( -w-8022 )
+ENDIF( BORLAND )
+
+MESSAGE( "--- Checking integer sizes" )
+INCLUDE(CheckTypeSize)
+CHECK_TYPE_SIZE( "short int" SHORT_INT )
+CHECK_TYPE_SIZE( int INT )
+CHECK_TYPE_SIZE( __int32 __INT32 )
+CHECK_TYPE_SIZE( int32_t INT32_T )
+CHECK_TYPE_SIZE( long LONG_INT )
+CHECK_TYPE_SIZE( __int64 __INT64 )
+CHECK_TYPE_SIZE( int64_t INT64_T )
+CHECK_TYPE_SIZE( "long long" LONG_LONG )
+CHECK_TYPE_SIZE( u_int64_t U_INT64_T )
+CHECK_TYPE_SIZE( uint64_t UINT64_T )
+CHECK_TYPE_SIZE( "unsigned __int64" UNSIGNED__INT64 )
+CHECK_TYPE_SIZE( "unsigned long long" UNSIGNED_LONG_LONG )
+
+CHECK_TYPE_SIZE( "double" DOUBLE )
+MESSAGE( "--- Double size = " ${DOUBLE} )
+
+
+#determine how 16 bit integer defined on this platform
+SET( iSize 0 )
+IF( HAVE_SHORT_INT AND ${SHORT_INT} EQUAL 2 )
+ SET( xbInt16 "short int" )
+ SET( xbUInt16 "unsigned short int" )
+ SET( iSize ${SHORT_INT} )
+ MESSAGE( "--- xbInt16 = [short int]" )
+ MESSAGE( "--- xbUInt16 = [unsigned short int]" )
+
+ENDIF( HAVE_SHORT_INT AND ${SHORT_INT} EQUAL 2 )
+IF( NOT ${iSize} EQUAL 2 )
+ MESSAGE( "FATAL_ERROR Could not detect 16 bit integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 2 )
+
+#determine how 32 bit integer defined on this platform
+SET( iSize 0 )
+IF( HAVE_INT AND ${INT} EQUAL 4 )
+ SET( xbInt32 int )
+ SET( xbUInt32 "unsigned int" )
+ SET( iSize ${INT} )
+ MESSAGE( "--- xbInt32 = [int]" )
+ MESSAGE( "--- xbUInt32 = [unsigned int]" )
+ENDIF( HAVE_INT AND ${INT} EQUAL 4 )
+
+IF(( NOT iSize EQUAL 4 ) AND HAVE___INT32 )
+ MESSAGE( __int untested if block - see CMakeLists.txt)
+ SET( xbInt32 __int32 )
+ SET( xbUInt32 "unsigned __int32" )
+ SET( iSize ${__INT} )
+ MESSAGE( "--- xbInt32 = [__int]" )
+ MESSAGE( "--- xbUInt32 = [unsigned __int]" )
+ENDIF(( NOT iSize EQUAL 4 ) AND HAVE___INT32 )
+
+IF(( NOT iSize EQUAL 4 ) AND HAVE_INT32_T )
+ SET( xbInt32 int32_t )
+ SET( xbUInt32 "u_int32_t" )
+ SET( iSize ${INT32_T} )
+ MESSAGE( "--- xbInt32 = [int32_t]" )
+ MESSAGE( "--- xbUInt32 = [u_int32_t]" )
+ENDIF(( NOT iSize EQUAL 4 ) AND HAVE_INT32_T )
+
+IF( NOT ${iSize} EQUAL 4 )
+ MESSAGE( "FATAL_ERROR Could not detect 32 bit integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 4 )
+
+#determine how 64 bit integer defined on this platform
+SET( iSize 0 )
+IF( HAVE___INT64 )
+ SET( xbInt64 __int64 )
+ SET( iSize ${__INT64} )
+ MESSAGE( "--- xbInt64 = [__int64]" )
+ENDIF( HAVE___INT64 )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_INT64_T )
+ SET( xbInt64 int64_t )
+ SET( iSize ${INT64_T} )
+ MESSAGE( "--- xbInt64 = [int64_t]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_INT64_T )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_LONG_LONG )
+ SET( xbInt64 "long long" )
+ SET( iSize ${LONG_LONG} )
+ MESSAGE( "--- xbInt64 = [long long]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_LONG_LONG )
+
+IF( NOT ${iSize} EQUAL 8 )
+ MESSAGE( "FATAL_ERROR Could not detect 64 bit integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 8 )
+
+#determine how 64 bit unsigned integer defined on this platform
+SET( iSize 0 )
+IF( HAVE_UNSIGNED__INT64 )
+ SET( xbUInt64 "unsigned __int64" )
+ SET( iSize ${UNSIGNED__INT64} )
+ MESSAGE( "--- xbUInt64 = [unsigned __int64]" )
+ENDIF( HAVE_UNSIGNED__INT64 )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_UINT64_T )
+ SET( xbUInt64 "uint64_t" )
+ SET( iSize ${UINT64_T} )
+ MESSAGE( "--- xbUInt64 = [uint64_t]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_UINT64_T )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_U_INT64_T )
+ SET( xbUInt64 u_int64_t )
+ SET( iSize ${U_INT64_T} )
+ MESSAGE( "--- xbUInt64 = [u_int64_t]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_U_INT64_T )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_UNSIGNED_LONG_LONG )
+ SET( xbUInt64 "unsigned long long" )
+ SET( iSize ${UNSIGNED_LONG_LONG} )
+ MESSAGE( "--- xbUInt64 = [unsigned long long]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_UNSIGNED_LONG_LONG )
+
+IF( NOT ${iSize} EQUAL 8 )
+ MESSAGE( "FATAL_ERROR Could not detect 64 bit unsigned integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 8 )
+
+#Library options
+option( BUILD_SHARED_LIBS "Build shared libraries" ON)
+option( XB_DBF3_SUPPORT "Compile DBase File Format Version 3 support" ON)
+option( XB_DBF4_SUPPORT "Compile DBase File Format Version 4 support" ON)
+option( XB_MEMO_SUPPORT "Compile memo field support into library" ON)
+option( XB_NDX_SUPPORT "Compile NDX Index support into library" ON)
+option( XB_MDX_SUPPORT "Compile MDX Index support into library" ON)
+option( XB_LOCKING_SUPPORT "Compile Multi User Locking support into library" ON)
+option( XB_TDX_SUPPORT "Compile temporary index support into library" ON)
+
+option( XB_LOGGING_SUPPORT "Compile message logging support into library" ON)
+option( XB_LINKLIST_SUPPORT "Compile Link List routines into library" ON)
+option( XB_FUNCTION_SUPPORT "Compile XBase Function support into library" ON)
+option( XB_EXPRESSION_SUPPORT "Compile Expression support into library" ON)
+option( XB_INF_SUPPORT "Compile NDX INF file support into library" ON)
+option( XB_FILTER_SUPPORT "Compile Filter support into library" ON)
+option( XB_BLOCKREAD_SUPPORT "Compile Block Read support into library" ON)
+option( XB_SQL_SUPPORT "Compile SQL support into library - alpha" ON)
+option( XB_DEBUG_SUPPORT "Compile debug logic into library" ON)
+option( XB_UTILS_SUPPORT "Compile utility programs" ON)
+option( XB_EXAMPLES_SUPPORT "Compile example programs" ON)
+
+Message( "--- BUILD_SHARED_LIBS " ${BUILD_SHARED_LIBS})
+Message( "--- XB_DBF3_SUPPORT " ${XB_DBF3_SUPPORT})
+Message( "--- XB_DBF4_SUPPORT " ${XB_DBF4_SUPPORT})
+Message( "--- XB_MEMO_SUPPORT " ${XB_MEMO_SUPPORT})
+Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
+Message( "--- XB_MDX_SUPPORT " ${XB_MDX_SUPPORT})
+Message( "--- XB_TDX_SUPPORT " ${XB_TDX_SUPPORT})
+Message( "--- XB_LOCKING_SUPPORT " ${XB_LOCKING_SUPPORT})
+Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
+Message( "--- XB_FUNCTION_SUPPORT " ${XB_FUNCTION_SUPPORT})
+Message( "--- XB_EXPRESSION_SUPPORT " ${XB_EXPRESSION_SUPPORT})
+Message( "--- XB_FILTER_SUPPORT " ${XB_FILTER_SUPPORT})
+Message( "--- XB_DEBUG_SUPPORT " ${XB_DEBUG_SUPPORT})
+Message( "--- XB_UTILS_SUPPORT " ${XB_UTILS_SUPPORT})
+Message( "--- XB_EXAMPLES_SUPPORT " ${XB_EXAMPLES_SUPPORT})
+Message( "--- XB_LOGGING_SUPPORT " ${XB_LOGGING_SUPPORT})
+Message( "--- XB_SQL_SUPPORT " ${XB_SQL_SUPPORT})
+Message( "--- XB_INF_SUPPORT " ${XB_INF_SUPPORT})
+Message( "--- XB_BLOCKREAD_SUPPORT " ${XB_BLOCKREAD_SUPPORT})
+
+IF( XB_DEBUG_SUPPORT )
+ Message( "--- Adding debug support" )
+ set( CMAKE_BUILD_TYPE Debug )
+IF( CMAKE_COMPILER_IS_GNUCXX )
+ add_compile_options( -Og )
+ENDIF( CMAKE_COMPILER_IS_GNUCXX )
+ENDIF( XB_DEBUG_SUPPORT )
+
+IF( CMAKE_SIZEOF_VOID_P EQUAL 8 )
+ MESSAGE( "--- 64 bit compiler detected" )
+ set( XB_PLATFORM "x64" )
+ set( XB_PLATFORM_64 1 )
+ set( XB_LIBNAME "xbase64" )
+
+ELSE( CMAKE_SIZEOF_VOID_P EQUAL 8 )
+ MESSAGE( "--- 32 bit compiler detected" )
+ set( XB_PLATFORM "x86" )
+ set( XB_PLATFORM_32 1 )
+ set( XB_LIBNAME "xbase32" )
+
+ENDIF( CMAKE_SIZEOF_VOID_P EQUAL 8 )
+
+
+#Check for the existence of various header files
+INCLUDE (CheckIncludeFiles)
+CHECK_INCLUDE_FILES (ctype.h HAVE_CTYPE_H)
+CHECK_INCLUDE_FILES (dirent.h HAVE_DIRENT_H)
+CHECK_INCLUDE_FILES (fcntl.h HAVE_FCNTL_H)
+CHECK_INCLUDE_FILES (inttypes.h HAVE_INTTYPES_H)
+CHECK_INCLUDE_FILES (pwd.h HAVE_PWD_H)
+CHECK_INCLUDE_FILES (stdarg.h HAVE_STDARG_H)
+CHECK_INCLUDE_FILES (stdargs.h HAVE_STDARGS_H)
+CHECK_INCLUDE_FILES (string.h HAVE_STRING_H)
+CHECK_INCLUDE_FILES (strings.h HAVE_STRINGS_H)
+CHECK_INCLUDE_FILES (sys/stat.h HAVE_STAT_H)
+CHECK_INCLUDE_FILES (unistd.h HAVE_UNISTD_H)
+CHECK_INCLUDE_FILES (varargs.h HAVE_VARARGS_H)
+CHECK_INCLUDE_FILES (windows.h HAVE_WINDOWS_H)
+
+#Check for the existence of various function calls
+INCLUDE( CheckFunctionExists )
+CHECK_FUNCTION_EXISTS(_close HAVE__CLOSE_F)
+CHECK_FUNCTION_EXISTS(fcntl HAVE_FCNTL_F)
+CHECK_FUNCTION_EXISTS(_fdopen HAVE__FDOPEN_F)
+CHECK_FUNCTION_EXISTS(fopen_s HAVE_FOPEN_S_F)
+CHECK_FUNCTION_EXISTS(_fsopen HAVE__FSOPEN_F)
+CHECK_FUNCTION_EXISTS(_fileno HAVE__FILENO_F)
+CHECK_FUNCTION_EXISTS(fork HAVE_FORK_F)
+CHECK_FUNCTION_EXISTS(_fseeki64 HAVE__FSEEKI64_F)
+CHECK_FUNCTION_EXISTS(fseeko HAVE_FSEEKO_F)
+CHECK_FUNCTION_EXISTS(ftruncate HAVE_FTRUNCATE_F)
+CHECK_FUNCTION_EXISTS(getenv_s HAVE_GETENV_S_F)
+
+CHECK_FUNCTION_EXISTS(_localtime64_s HAVE__LOCALTIME64_S_F)
+CHECK_FUNCTION_EXISTS(LockFile HAVE_LOCKFILE_F)
+CHECK_FUNCTION_EXISTS(locking HAVE_LOCKING_F)
+CHECK_FUNCTION_EXISTS(_locking HAVE__LOCKING_F)
+CHECK_FUNCTION_EXISTS(_open HAVE__OPEN_F)
+CHECK_FUNCTION_EXISTS(SetEndOfFile HAVE_SETENDOFFILE_F)
+
+CHECK_FUNCTION_EXISTS(vsnprintf HAVE_VSNPRINTF_F)
+CHECK_FUNCTION_EXISTS(_vsnprintf_s HAVE__VSNPRINTF_S_F)
+
+
+CHECK_FUNCTION_EXISTS(getopt HAVE_GETOPT_F)
+
+IF( WIN32 )
+
+# Use CHECK_SYMBOL_EXISTS for the Win32API instead of CHECK_FUNCTION_EXISTS
+# Can't detect inline functions in headers
+# Can't detect due to mismatch of calling conventions
+# Can't detect mangled names
+
+INCLUDE( CheckSymbolExists )
+CHECK_SYMBOL_EXISTS(CreateProcessW Windows.h HAVE_CREATEPROCESSW_F )
+CHECK_SYMBOL_EXISTS(vsprintf_s stdio.h HAVE_VSPRINTF_S_F )
+
+ENDIF ( WIN32 )
+
+# IF( NOT HAVE_SENTENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND BORLAND )
+# # ----fix me----
+# # cmake CHECK_FUNCTION_EXISTS - could not find Borland 5.5 SetEndOfFile
+# Set( HAVE_SETENDOFFILE_F "HAVE_SETENDOFFILE_H" )
+# ENDIF ( NOT HAVE_SENTENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND BORLAND )
+
+IF( NOT HAVE_SETENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND WIN32 )
+ # ----fix me----
+ # cmake CHECK_FUNCTION_EXISTS - could not find Borland 5.5, or Windows VS 32 bit SetEndOfFile
+ Set( HAVE_SETENDOFFILE_F "HAVE_SETENDOFFILE_F" )
+ENDIF ( NOT HAVE_SETENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND WIN32 )
+
+IF( XB_NDX_SUPPORT OR XB_MDX_SUPPORT )
+ Set( XB_INDEX_SUPPORT "1" )
+ENDIF( XB_NDX_SUPPORT OR XB_MDX_SUPPORT )
+
+
+# Set directories
+# PROJECT_PARENT_DIR is two nodes higher
+get_filename_component( PROJECT_PARENT_DIR ${PROJECT_BINARY_DIR} DIRECTORY )
+get_filename_component( PROJECT_PARENT_DIR ${PROJECT_PARENT_DIR} DIRECTORY )
+
+# MESSAGE( "PROJECT_PARENT_DIR = " ${PROJECT_PARENT_DIR} )
+# MESSAGE( "PROJECT_BINARY_DIR = " ${PROJECT_BINARY_DIR} )
+
+
+set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin )
+set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib )
+set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib )
+
+set( PROJECT_SOURCE_DIR ${PROJECT_PARENT_DIR}/src )
+set( PROJECT_DATA_DIR ${PROJECT_PARENT_DIR}/data )
+set( PROJECT_LOG_DIR ${PROJECT_PARENT_DIR}/logs )
+set( PROJECT_TEMP_DIR ${PROJECT_PARENT_DIR}/temp )
+set( EXTRA_LIBS ${EXTRA_LIBS} ${XB_LIBNAME} )
+
+
+# Undo bad decisions
+IF( XB_PLATFORM_32 AND XB_LARGEFILE_SUPPORT )
+ MESSAGE( "--- Can't build 64 bit environment with a 32 bit compiler" )
+ MESSAGE( "--- XB_LARGEFILE_SUPPORT set to OFF" )
+ set( XB_LARGEFILE_SUPPORT OFF CACHE BOOL "Use 64 bit large file support?" FORCE )
+ENDIF ( XB_PLATFORM_32 AND XB_LARGEFILE_SUPPORT )
+
+IF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
+ MESSAGE( "--- At lease one file format is required. Defaulting to Version 4" )
+ set( XB_DBF4_SUPPORT ON CACHE BOOL "Compile DBase File Format Version 4 support" FORCE )
+ENDIF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
+
+IF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+ MESSAGE( "--- Link List support required for DBF V4 Memo files. Setting to ON" )
+ set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
+ENDIF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+
+
+
+
+IF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+ MESSAGE( "--- Link List support required for locking functions. Setting to ON" )
+ set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
+ENDIF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+
+IF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+ MESSAGE( "--- MDX support required for Temporary indices. Setting to ON" )
+ set( XB_MDX_SUPPORT ON CACHE BOOL "Compile temporary index support into library" FORCE )
+ENDIF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+
+IF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+ MESSAGE( "--- Expression required for indices. Setting to ON" )
+ set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
+ Set( XB_INDEX_SUPPORT "1" )
+ENDIF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+
+IF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
+ MESSAGE( "--- Function support required for expressions. Setting to ON" )
+ set( XB_FUNCTION_SUPPORT ON CACHE BOOL "Compile XBase Function support into library" FORCE )
+ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
+
+IF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+ MESSAGE( "--- Linklist support required for expressions. Setting to ON" )
+ set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
+ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+
+IF( XB_SQL_SUPPORT AND NOT XB_MEMO_SUPPORT )
+ MESSAGE( "--- Memo support required for SQL. Setting to ON" )
+ set( XB_MEMO_SUPPORT ON CACHE BOOL "Compile memo field support into library" FORCE )
+ENDIF( XB_SQL_SUPPORT AND NOT XB_MEMO_SUPPORT )
+
+IF( XB_SQL_SUPPORT AND NOT XB_DBF4_SUPPORT )
+ MESSAGE( "--- DBF4 support required for SQL. Setting to ON" )
+ set( XB_DBF4_SUPPORT ON CACHE BOOL "Compile DBase File Format Version 4 support" FORCE )
+ENDIF( XB_SQL_SUPPORT AND NOT XB_DBF4_SUPPORT )
+
+IF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+ MESSAGE( "--- Expression required for filters. Setting to ON" )
+ set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
+ENDIF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+
+IF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
+ MESSAGE( "--- BLOCKREAD support required for SQL. Setting to ON" )
+ set( XB_BLOCKREAD_SUPPORT ON CACHE BOOL "Compile Block Read support into library" FORCE )
+ENDIF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
+
+IF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+ MESSAGE( "--- MDX support required for Temporary indices. Setting to ON" )
+ set( XB_MDX_SUPPORT ON CACHE BOOL "Compile temporary index support into library" FORCE )
+ENDIF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+
+
+
+# Build configuration header file
+configure_file (
+ "${PROJECT_SOURCE_DIR}/include/xbconfig.h.in"
+ "${PROJECT_BINARY_DIR}/include/xbconfig.h"
+)
+
+# Microsoft Windows compiler settings
+IF( MSVC )
+# add_definitions( /D_CRT_SECURE_NO_WARNINGS)
+ add_definitions( /EHsc )
+ENDIF( MSVC )
+
+
+# set up include directories
+include_directories( "${PROJECT_BINARY_DIR}/include" )
+include_directories( "${PROJECT_SOURCE_DIR}/include" )
+
+#build the library
+IF ( BUILD_SHARED_LIBS )
+ set( LIB_TYPE SHARED )
+ELSE( BUILD_SHARED_LIBS )
+ set( LIB_TYPE STATIC )
+ENDIF( BUILD_SHARED_LIBS )
+MESSAGE( "--- Lib type " ${LIB_TYPE} )
+
+
+
+set (SOURCES ${PROJECT_SOURCE_DIR}/core/xbstring.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbssv.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbdate.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbtblmgr.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbxbase.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbfile.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbdbf.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbfields.cpp
+ ${PROJECT_SOURCE_DIR}/core/xblog.cpp)
+
+IF( XB_MEMO_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo.cpp )
+ENDIF( XB_MEMO_SUPPORT )
+
+IF( XB_DBF3_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbdbf3.cpp )
+ IF( XB_MEMO_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo3.cpp )
+ ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF3_SUPPORT )
+
+IF( XB_DBF4_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbdbf4.cpp )
+ IF( XB_MEMO_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo4.cpp )
+ ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF4_SUPPORT )
+
+IF( XB_FUNCTION_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbfuncs.cpp )
+ENDIF( XB_FUNCTION_SUPPORT )
+
+IF( XB_EXPRESSION_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbexpnode.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbexp.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbuda.cpp )
+ENDIF( XB_EXPRESSION_SUPPORT )
+
+IF( XB_INDEX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbbcd.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixbase.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbtag.cpp )
+ENDIF( XB_INDEX_SUPPORT )
+
+IF( XB_NDX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixndx.cpp )
+ENDIF( XB_NDX_SUPPORT )
+
+
+IF( XB_MDX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixmdx.cpp )
+ENDIF( XB_MDX_SUPPORT )
+
+IF( XB_TDX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixtdx.cpp )
+ENDIF( XB_TDX_SUPPORT )
+
+
+IF( XB_SQL_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbalttbl.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrix.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrtbl.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdelete.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdrpix.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdrptbl.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbinsert.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbset.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbsql.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbstmt.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbselect.cpp )
+ENDIF( XB_SQL_SUPPORT )
+
+
+IF( XB_FILTER_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbfilter.cpp )
+ENDIF( XB_FILTER_SUPPORT )
+
+IF( XB_BLOCKREAD_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbblockread.cpp )
+ENDIF( XB_BLOCKREAD_SUPPORT )
+
+
+include( GenerateExportHeader )
+#add_library( xbase ${LIB_TYPE} ${SOURCES} )
+add_library( ${XB_LIBNAME} ${LIB_TYPE} ${SOURCES} )
+#add_library( ${CMAKE_PROJECT_NAME} ${LIB_TYPE} ${SOURCES} )
+
+
+IF( WIN32 )
+MESSAGE( "--- Generating Windows Library Headers" )
+
+#GENERATE_EXPORT_HEADER( xbase
+# BASE_NAME xbase
+
+GENERATE_EXPORT_HEADER( ${XB_LIBNAME}
+ BASE_NAME ${XB_LIBNAME}
+ EXPORT_MACRO_NAME xbase_EXPORT
+ EXPORT_FILE_NAME xbase_Export.h
+ STATIC_DEFINE xbase_BUILT_AS_STATIC
+)
+ENDIF( WIN32 )
+
+
+#build test programs
+enable_testing()
+
+add_executable( xb_test_string ${PROJECT_SOURCE_DIR}/tests/xb_test_string.cpp )
+target_link_libraries( xb_test_string ${EXTRA_LIBS})
+add_test( NAME xbString COMMAND xb_test_string QUIET )
+
+add_executable( xb_test_date ${PROJECT_SOURCE_DIR}/tests/xb_test_date.cpp )
+target_link_libraries( xb_test_date ${EXTRA_LIBS})
+add_test( NAME xbDate COMMAND xb_test_date QUIET )
+
+add_executable( xb_test_tblmgr ${PROJECT_SOURCE_DIR}/tests/xb_test_tblmgr.cpp )
+target_link_libraries( xb_test_tblmgr ${EXTRA_LIBS})
+add_test( NAME xbTblMgr COMMAND xb_test_tblmgr QUIET )
+
+add_executable( xb_test_xbase ${PROJECT_SOURCE_DIR}/tests/xb_test_xbase.cpp )
+target_link_libraries( xb_test_xbase ${EXTRA_LIBS})
+add_test( NAME xbXBase COMMAND xb_test_xbase QUIET )
+
+add_executable( xb_test_file ${PROJECT_SOURCE_DIR}/tests/xb_test_file.cpp )
+target_link_libraries( xb_test_file ${EXTRA_LIBS})
+add_test( NAME xbFile COMMAND xb_test_file QUIET )
+
+add_executable( xb_test_log ${PROJECT_SOURCE_DIR}/tests/xb_test_log.cpp )
+target_link_libraries( xb_test_log ${EXTRA_LIBS})
+add_test( NAME xbLog COMMAND xb_test_log QUIET )
+
+IF( XB_LINKLIST_SUPPORT )
+add_executable( xb_test_linklist ${PROJECT_SOURCE_DIR}/tests/xb_test_linklist.cpp )
+target_link_libraries( xb_test_linklist ${EXTRA_LIBS})
+add_test( NAME xbLinkList COMMAND xb_test_linklist QUIET )
+ENDIF( XB_LINKLIST_SUPPORT )
+
+IF( XB_DBF3_SUPPORT )
+add_executable( xb_test_dbf_v3_nomemos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v3_nomemos.cpp )
+target_link_libraries( xb_test_dbf_v3_nomemos ${EXTRA_LIBS})
+add_test( NAME xbDbfV3NoMemos COMMAND xb_test_dbf_v3_nomemos QUIET )
+
+IF( XB_MEMO_SUPPORT )
+add_executable( xb_test_dbf_v3_memos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v3_memos.cpp )
+target_link_libraries( xb_test_dbf_v3_memos ${EXTRA_LIBS})
+add_test( NAME xbDbfV3Memos COMMAND xb_test_dbf_v3_memos QUIET )
+
+ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF3_SUPPORT )
+
+IF( XB_DBF4_SUPPORT )
+add_executable( xb_test_dbf_v4_nomemos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v4_nomemos.cpp )
+target_link_libraries( xb_test_dbf_v4_nomemos ${EXTRA_LIBS})
+add_test( NAME xbDbfV4NoMemos COMMAND xb_test_dbf_v4_nomemos QUIET )
+
+IF( XB_MEMO_SUPPORT )
+add_executable( xb_test_dbf_v4_memos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v4_memos.cpp )
+target_link_libraries( xb_test_dbf_v4_memos ${EXTRA_LIBS})
+add_test( NAME xbDbfV4Memos COMMAND xb_test_dbf_v4_memos QUIET )
+
+ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF4_SUPPORT )
+
+IF( XB_FUNCTION_SUPPORT )
+add_executable( xb_test_funcs ${PROJECT_SOURCE_DIR}/tests/xb_test_funcs.cpp )
+target_link_libraries( xb_test_funcs ${EXTRA_LIBS})
+add_test( NAME xbFunctions COMMAND xb_test_funcs QUIET )
+ENDIF( XB_FUNCTION_SUPPORT )
+
+IF( XB_NDX_SUPPORT )
+IF( XB_DBF3_SUPPORT )
+add_executable( xb_test_ndx ${PROJECT_SOURCE_DIR}/tests/xb_test_ndx.cpp )
+target_link_libraries( xb_test_ndx ${EXTRA_LIBS})
+add_test( NAME xbIxNdx COMMAND xb_test_ndx QUIET )
+ENDIF( XB_DBF3_SUPPORT )
+ENDIF( XB_NDX_SUPPORT )
+
+
+
+IF( XB_DBF4_SUPPORT )
+
+IF( XB_MDX_SUPPORT )
+add_executable( xb_test_mdx ${PROJECT_SOURCE_DIR}/tests/xb_test_mdx.cpp )
+target_link_libraries( xb_test_mdx ${EXTRA_LIBS})
+add_test( NAME xbIxMdx COMMAND xb_test_mdx QUIET )
+ENDIF( XB_MDX_SUPPORT )
+
+IF( XB_TDX_SUPPORT )
+add_executable( xb_test_tdx ${PROJECT_SOURCE_DIR}/tests/xb_test_tdx.cpp )
+target_link_libraries( xb_test_tdx ${EXTRA_LIBS})
+add_test( NAME xbIxTdx COMMAND xb_test_tdx QUIET )
+ENDIF( XB_TDX_SUPPORT )
+
+ENDIF( XB_DBF4_SUPPORT )
+
+
+
+IF( XB_INDEX_SUPPORT )
+add_executable( xb_test_bcd ${PROJECT_SOURCE_DIR}/tests/xb_test_bcd.cpp )
+target_link_libraries( xb_test_bcd ${EXTRA_LIBS})
+add_test( NAME xbBcd COMMAND xb_test_bcd QUIET )
+ENDIF( XB_INDEX_SUPPORT )
+
+
+IF( XB_EXPRESSION_SUPPORT )
+
+add_executable( xb_test_expnode ${PROJECT_SOURCE_DIR}/tests/xb_test_expnode.cpp )
+target_link_libraries( xb_test_expnode ${EXTRA_LIBS})
+add_test( NAME xbExpNode COMMAND xb_test_expnode QUIET )
+
+
+add_executable( xb_test_expression ${PROJECT_SOURCE_DIR}/tests/xb_test_expression.cpp )
+target_link_libraries( xb_test_expression ${EXTRA_LIBS})
+add_test( NAME xbExpressions COMMAND xb_test_expression QUIET )
+
+add_executable( xb_test_uda ${PROJECT_SOURCE_DIR}/tests/xb_test_uda.cpp )
+target_link_libraries( xb_test_uda ${EXTRA_LIBS})
+add_test( NAME xbUda COMMAND xb_test_uda QUIET )
+
+ENDIF( XB_EXPRESSION_SUPPORT )
+
+IF( XB_SQL_SUPPORT )
+add_executable( xb_test_sql ${PROJECT_SOURCE_DIR}/tests/xb_test_sql.cpp )
+target_link_libraries( xb_test_sql ${EXTRA_LIBS})
+add_test( NAME xbSql COMMAND xb_test_sql QUIET )
+ENDIF( XB_SQL_SUPPORT )
+
+IF( XB_FILTER_SUPPORT )
+add_executable( xb_test_filter ${PROJECT_SOURCE_DIR}/tests/xb_test_filter.cpp )
+target_link_libraries( xb_test_filter ${EXTRA_LIBS})
+add_test( NAME xbFilter COMMAND xb_test_filter QUIET )
+ENDIF( XB_FILTER_SUPPORT )
+
+IF( XB_BLOCKREAD_SUPPORT )
+add_executable( xb_test_blockread ${PROJECT_SOURCE_DIR}/tests/xb_test_blockread.cpp )
+target_link_libraries( xb_test_blockread ${EXTRA_LIBS})
+add_test( NAME xbBlockRead COMMAND xb_test_blockread QUIET )
+ENDIF( XB_BLOCKREAD_SUPPORT )
+
+
+IF( XB_LOCKING_SUPPORT )
+add_executable( xb_test_lock ${PROJECT_SOURCE_DIR}/tests/xb_test_lock.cpp )
+target_link_libraries( xb_test_lock ${EXTRA_LIBS})
+add_test( NAME xbLock COMMAND xb_test_lock QUIET )
+IF( HAVE_CREATEPROCESSW_F )
+add_executable( xb_test_lock2 ${PROJECT_SOURCE_DIR}/tests/xb_test_lock2.cpp )
+target_link_libraries( xb_test_lock2 ${EXTRA_LIBS})
+ENDIF( HAVE_CREATEPROCESSW_F )
+ENDIF( XB_LOCKING_SUPPORT )
+
+#build example programs
+IF( XB_EXAMPLES_SUPPORT )
+ add_executable( xb_ex_string ${PROJECT_SOURCE_DIR}/examples/xb_ex_string.cpp )
+ target_link_libraries( xb_ex_string ${EXTRA_LIBS})
+
+ add_executable( xb_ex_date ${PROJECT_SOURCE_DIR}/examples/xb_ex_date.cpp )
+ target_link_libraries( xb_ex_date ${EXTRA_LIBS})
+
+ IF( XB_DBF3_SUPPORT )
+ add_executable( xb_ex_v3_create_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v3_create_dbf.cpp )
+ target_link_libraries( xb_ex_v3_create_dbf ${EXTRA_LIBS})
+
+ add_executable( xb_ex_v3_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v3_upd_dbf.cpp )
+ target_link_libraries( xb_ex_v3_upd_dbf ${EXTRA_LIBS})
+ ENDIF( XB_DBF3_SUPPORT )
+
+ IF( XB_DBF4_SUPPORT )
+ add_executable( xb_ex_v4_create_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_create_dbf.cpp )
+ target_link_libraries( xb_ex_v4_create_dbf ${EXTRA_LIBS})
+ ENDIF( XB_DBF4_SUPPORT )
+
+ IF( XB_EXPRESSION_SUPPORT )
+ add_executable( xb_ex_expression ${PROJECT_SOURCE_DIR}/examples/xb_ex_expression.cpp )
+ target_link_libraries( xb_ex_expression ${EXTRA_LIBS})
+ ENDIF( XB_EXPRESSION_SUPPORT )
+
+ add_executable( xb_ex_v4_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_upd_dbf.cpp )
+ target_link_libraries( xb_ex_v4_upd_dbf ${EXTRA_LIBS})
+
+ add_executable( xb_ex_ssv ${PROJECT_SOURCE_DIR}/examples/xb_ex_ssv.cpp )
+ target_link_libraries( xb_ex_ssv ${EXTRA_LIBS})
+
+ IF( XB_LOGGING_SUPPORT )
+ add_executable( xb_ex_log ${PROJECT_SOURCE_DIR}/examples/xb_ex_log.cpp )
+ target_link_libraries( xb_ex_log ${EXTRA_LIBS})
+ ENDIF( XB_LOGGING_SUPPORT )
+
+ENDIF( XB_EXAMPLES_SUPPORT )
+
+#build utility programs
+IF( XB_UTILS_SUPPORT )
+
+ add_executable( xb_cfg_check ${PROJECT_SOURCE_DIR}/utils/xb_cfg_check.cpp )
+ target_link_libraries( xb_cfg_check ${EXTRA_LIBS})
+
+ add_executable( xb_copydbf ${PROJECT_SOURCE_DIR}/utils/xb_copydbf.cpp )
+ target_link_libraries( xb_copydbf ${EXTRA_LIBS})
+
+ add_executable( xb_dbfutil ${PROJECT_SOURCE_DIR}/utils/xb_dbfutil.cpp )
+ target_link_libraries( xb_dbfutil ${EXTRA_LIBS})
+
+ add_executable( xb_deletall ${PROJECT_SOURCE_DIR}/utils/xb_deletall.cpp )
+ target_link_libraries( xb_deletall ${EXTRA_LIBS})
+
+ add_executable( xb_dumpdbt ${PROJECT_SOURCE_DIR}/utils/xb_dumpdbt.cpp )
+ target_link_libraries( xb_dumpdbt ${EXTRA_LIBS})
+
+ add_executable( xb_dumprecs ${PROJECT_SOURCE_DIR}/utils/xb_dumprecs.cpp )
+ target_link_libraries( xb_dumprecs ${EXTRA_LIBS})
+
+ add_executable( xb_import ${PROJECT_SOURCE_DIR}/utils/xb_import.cpp )
+ target_link_libraries( xb_import ${EXTRA_LIBS})
+
+ add_executable( xb_tblinfo ${PROJECT_SOURCE_DIR}/utils/xb_tblinfo.cpp )
+ target_link_libraries( xb_tblinfo ${EXTRA_LIBS})
+
+ IF( XB_SQL_SUPPORT )
+ add_executable( xb_execsql ${PROJECT_SOURCE_DIR}/utils/xb_execsql.cpp )
+ target_link_libraries( xb_execsql ${EXTRA_LIBS})
+ ENDIF( XB_SQL_SUPPORT )
+
+ add_executable( xb_pack ${PROJECT_SOURCE_DIR}/utils/xb_pack.cpp )
+ target_link_libraries( xb_pack ${EXTRA_LIBS})
+
+ add_executable( xb_undelall ${PROJECT_SOURCE_DIR}/utils/xb_undelall.cpp )
+ target_link_libraries( xb_undelall ${EXTRA_LIBS})
+
+ install (TARGETS xb_cfg_check DESTINATION bin)
+ install (TARGETS xb_copydbf DESTINATION bin)
+ install (TARGETS xb_dbfutil DESTINATION bin)
+ install (TARGETS xb_deletall DESTINATION bin)
+ install (TARGETS xb_dumpdbt DESTINATION bin)
+ install (TARGETS xb_dumprecs DESTINATION bin)
+ install (TARGETS xb_import DESTINATION bin)
+ install (TARGETS xb_pack DESTINATION bin)
+ install (TARGETS xb_undelall DESTINATION bin)
+ IF( XB_SQL_SUPPORT )
+ install (TARGETS xb_execsql DESTINATION bin)
+ ENDIF( XB_SQL_SUPPORT )
+
+
+
+ENDIF( XB_UTILS_SUPPORT )
+
+install (FILES ${PROJECT_BINARY_DIR}/include/xbconfig.h
+ ${PROJECT_SOURCE_DIR}/include/xbase.h
+ ${PROJECT_SOURCE_DIR}/include/xbbcd.h
+ ${PROJECT_SOURCE_DIR}/include/xbblkread.h
+ ${PROJECT_SOURCE_DIR}/include/xbdate.h
+ ${PROJECT_SOURCE_DIR}/include/xbdbf.h
+ ${PROJECT_SOURCE_DIR}/include/xbexp.h
+ ${PROJECT_SOURCE_DIR}/include/xbexpnode.h
+ ${PROJECT_SOURCE_DIR}/include/xbfile.h
+ ${PROJECT_SOURCE_DIR}/include/xbfilter.h
+ ${PROJECT_SOURCE_DIR}/include/xbindex.h
+ ${PROJECT_SOURCE_DIR}/include/xblnklst.h
+ ${PROJECT_SOURCE_DIR}/include/xblnklstord.h
+ ${PROJECT_SOURCE_DIR}/include/xblnknod.h
+ ${PROJECT_SOURCE_DIR}/include/xblog.h
+ ${PROJECT_SOURCE_DIR}/include/xbmemo.h
+ ${PROJECT_SOURCE_DIR}/include/xbretcod.h
+ ${PROJECT_SOURCE_DIR}/include/xbsql.h
+ ${PROJECT_SOURCE_DIR}/include/xbssv.h
+ ${PROJECT_SOURCE_DIR}/include/xbstring.h
+ ${PROJECT_SOURCE_DIR}/include/xbtag.h
+ ${PROJECT_SOURCE_DIR}/include/xbtblmgr.h
+ ${PROJECT_SOURCE_DIR}/include/xbtypes.h
+ ${PROJECT_SOURCE_DIR}/include/xbuda.h
+ ${PROJECT_SOURCE_DIR}/include/xbxbase.h
+ DESTINATION include/${CMAKE_PROJECT_NAME})
+
+IF( NOT WIN32 )
+install (FILES ${PROJECT_PARENT_DIR}/docs/man/xb_cfg_chk.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_copydbf.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dbfutil.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_deletall.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dumpdbt.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dumprecs.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_import.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_pack.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_tblinfo.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_undelall.1.gz
+
+ DESTINATION man/man1)
+
+ENDIF( NOT WIN32 )
+
+
+SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.1.4 SOVERSION 0 )
+
+IF( WIN32 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION bin)
+ELSE( WIN32 )
+ IF( EXISTS /usr/local/lib64 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION lib64/${CMAKE_PROJECT_NAME})
+ ELSE( EXISTS /usr/local/lib64 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION lib/${CMAKE_PROJECT_NAME})
+ ENDIF( EXISTS /usr/local/lib64 )
+ENDIF( WIN32 )
diff --git a/build/win32vs/CleanWin.bat b/1Tdata/xbase/xbase64-4.1.4/build/win32vs/CleanWin.bat
index ad5da5b..ad5da5b 100755
--- a/build/win32vs/CleanWin.bat
+++ b/1Tdata/xbase/xbase64-4.1.4/build/win32vs/CleanWin.bat
diff --git a/1Tdata/xbase/xbase64-4.1.4/build/win32vs/README.win32vs b/1Tdata/xbase/xbase64-4.1.4/build/win32vs/README.win32vs
new file mode 100644
index 0000000..19dc7f6
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/build/win32vs/README.win32vs
@@ -0,0 +1,23 @@
+
+32 bit Visual Studio build steps for Xbase64 running on Windows - 3/27/23
+
+
+1) Verify cmake is installed with command: cmake --version
+ If it is not installed, install the latest version.
+
+
+2) Verify Visual Studio is intalled with the command.
+
+
+3) Build xbase64 library
+
+ Open Visual Studio Command Prompt for 32 bit environment
+ cd build/win32vs (go to the appropriate build directory)
+ BuildWin.bat (configure for your environment and compile)
+ nmake test (test library buiild)
+ nmake install (install it)
+
+ "c:\Program Files (x86)\xbase64\bin\xb_cfg_chk" (test install)
+
+
+Also of note, batch file CleanWin.bat initializes the win64vs build folders. \ No newline at end of file
diff --git a/1Tdata/xbase/xbase64-4.1.4/build/win64vs/BuildWin.bat b/1Tdata/xbase/xbase64-4.1.4/build/win64vs/BuildWin.bat
new file mode 100755
index 0000000..2e33641
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/build/win64vs/BuildWin.bat
@@ -0,0 +1,10 @@
+rem Build using MS Visual Studio
+pause To build the Windows Visual Studio 64 bit version, execute this script from a Visual Studio 64 bit command window
+
+
+cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Debug .
+rem cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release .
+
+pause
+
+nmake \ No newline at end of file
diff --git a/1Tdata/xbase/xbase64-4.1.4/build/win64vs/CMakeLists.txt b/1Tdata/xbase/xbase64-4.1.4/build/win64vs/CMakeLists.txt
new file mode 100755
index 0000000..ce2566a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/build/win64vs/CMakeLists.txt
@@ -0,0 +1,809 @@
+cmake_minimum_required(VERSION 3.2)
+
+project (Xbase64)
+set( xbase_VERSION_MAJOR 4 )
+set( xbase_VERSION_MINOR 1 )
+set( xbase_VERSION_PATCH 4 )
+
+MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
+MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
+MESSAGE( "--- Project Name: " ${CMAKE_PROJECT_NAME} )
+MESSAGE( "--- Install Prefix: " ${CMAKE_INSTALL_PREFIX} )
+
+#Set compiler options
+
+IF( CMAKE_COMPILER_IS_GNUCXX )
+ MESSAGE( "Setting GNU compiler options" )
+ add_compile_options( -Wall -Wsign-conversion )
+# add_compile_options( -Wall -Wconversion -Wsign-conversion )
+ SET( VERBOSE 1 )
+ENDIF( CMAKE_COMPILER_IS_GNUCXX )
+
+IF( BORLAND )
+ MESSAGE ("BORLAND COMPILER" )
+ #set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w-8022" )
+ add_compile_options( -w-8022 )
+ENDIF( BORLAND )
+
+MESSAGE( "--- Checking integer sizes" )
+INCLUDE(CheckTypeSize)
+CHECK_TYPE_SIZE( "short int" SHORT_INT )
+CHECK_TYPE_SIZE( int INT )
+CHECK_TYPE_SIZE( __int32 __INT32 )
+CHECK_TYPE_SIZE( int32_t INT32_T )
+CHECK_TYPE_SIZE( long LONG_INT )
+CHECK_TYPE_SIZE( __int64 __INT64 )
+CHECK_TYPE_SIZE( int64_t INT64_T )
+CHECK_TYPE_SIZE( "long long" LONG_LONG )
+CHECK_TYPE_SIZE( u_int64_t U_INT64_T )
+CHECK_TYPE_SIZE( uint64_t UINT64_T )
+CHECK_TYPE_SIZE( "unsigned __int64" UNSIGNED__INT64 )
+CHECK_TYPE_SIZE( "unsigned long long" UNSIGNED_LONG_LONG )
+
+CHECK_TYPE_SIZE( "double" DOUBLE )
+MESSAGE( "--- Double size = " ${DOUBLE} )
+
+
+#determine how 16 bit integer defined on this platform
+SET( iSize 0 )
+IF( HAVE_SHORT_INT AND ${SHORT_INT} EQUAL 2 )
+ SET( xbInt16 "short int" )
+ SET( xbUInt16 "unsigned short int" )
+ SET( iSize ${SHORT_INT} )
+ MESSAGE( "--- xbInt16 = [short int]" )
+ MESSAGE( "--- xbUInt16 = [unsigned short int]" )
+
+ENDIF( HAVE_SHORT_INT AND ${SHORT_INT} EQUAL 2 )
+IF( NOT ${iSize} EQUAL 2 )
+ MESSAGE( "FATAL_ERROR Could not detect 16 bit integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 2 )
+
+#determine how 32 bit integer defined on this platform
+SET( iSize 0 )
+IF( HAVE_INT AND ${INT} EQUAL 4 )
+ SET( xbInt32 int )
+ SET( xbUInt32 "unsigned int" )
+ SET( iSize ${INT} )
+ MESSAGE( "--- xbInt32 = [int]" )
+ MESSAGE( "--- xbUInt32 = [unsigned int]" )
+ENDIF( HAVE_INT AND ${INT} EQUAL 4 )
+
+IF(( NOT iSize EQUAL 4 ) AND HAVE___INT32 )
+ MESSAGE( __int untested if block - see CMakeLists.txt)
+ SET( xbInt32 __int32 )
+ SET( xbUInt32 "unsigned __int32" )
+ SET( iSize ${__INT} )
+ MESSAGE( "--- xbInt32 = [__int]" )
+ MESSAGE( "--- xbUInt32 = [unsigned __int]" )
+ENDIF(( NOT iSize EQUAL 4 ) AND HAVE___INT32 )
+
+IF(( NOT iSize EQUAL 4 ) AND HAVE_INT32_T )
+ SET( xbInt32 int32_t )
+ SET( xbUInt32 "u_int32_t" )
+ SET( iSize ${INT32_T} )
+ MESSAGE( "--- xbInt32 = [int32_t]" )
+ MESSAGE( "--- xbUInt32 = [u_int32_t]" )
+ENDIF(( NOT iSize EQUAL 4 ) AND HAVE_INT32_T )
+
+IF( NOT ${iSize} EQUAL 4 )
+ MESSAGE( "FATAL_ERROR Could not detect 32 bit integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 4 )
+
+#determine how 64 bit integer defined on this platform
+SET( iSize 0 )
+IF( HAVE___INT64 )
+ SET( xbInt64 __int64 )
+ SET( iSize ${__INT64} )
+ MESSAGE( "--- xbInt64 = [__int64]" )
+ENDIF( HAVE___INT64 )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_INT64_T )
+ SET( xbInt64 int64_t )
+ SET( iSize ${INT64_T} )
+ MESSAGE( "--- xbInt64 = [int64_t]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_INT64_T )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_LONG_LONG )
+ SET( xbInt64 "long long" )
+ SET( iSize ${LONG_LONG} )
+ MESSAGE( "--- xbInt64 = [long long]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_LONG_LONG )
+
+IF( NOT ${iSize} EQUAL 8 )
+ MESSAGE( "FATAL_ERROR Could not detect 64 bit integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 8 )
+
+#determine how 64 bit unsigned integer defined on this platform
+SET( iSize 0 )
+IF( HAVE_UNSIGNED__INT64 )
+ SET( xbUInt64 "unsigned __int64" )
+ SET( iSize ${UNSIGNED__INT64} )
+ MESSAGE( "--- xbUInt64 = [unsigned __int64]" )
+ENDIF( HAVE_UNSIGNED__INT64 )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_UINT64_T )
+ SET( xbUInt64 "uint64_t" )
+ SET( iSize ${UINT64_T} )
+ MESSAGE( "--- xbUInt64 = [uint64_t]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_UINT64_T )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_U_INT64_T )
+ SET( xbUInt64 u_int64_t )
+ SET( iSize ${U_INT64_T} )
+ MESSAGE( "--- xbUInt64 = [u_int64_t]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_U_INT64_T )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_UNSIGNED_LONG_LONG )
+ SET( xbUInt64 "unsigned long long" )
+ SET( iSize ${UNSIGNED_LONG_LONG} )
+ MESSAGE( "--- xbUInt64 = [unsigned long long]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_UNSIGNED_LONG_LONG )
+
+IF( NOT ${iSize} EQUAL 8 )
+ MESSAGE( "FATAL_ERROR Could not detect 64 bit unsigned integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 8 )
+
+#Library options
+option( BUILD_SHARED_LIBS "Build shared libraries" ON)
+option( XB_DBF3_SUPPORT "Compile DBase File Format Version 3 support" ON)
+option( XB_DBF4_SUPPORT "Compile DBase File Format Version 4 support" ON)
+option( XB_MEMO_SUPPORT "Compile memo field support into library" ON)
+option( XB_NDX_SUPPORT "Compile NDX Index support into library" ON)
+option( XB_MDX_SUPPORT "Compile MDX Index support into library" ON)
+option( XB_LOCKING_SUPPORT "Compile Multi User Locking support into library" ON)
+option( XB_TDX_SUPPORT "Compile temporary index support into library" ON)
+
+option( XB_LOGGING_SUPPORT "Compile message logging support into library" ON)
+option( XB_LINKLIST_SUPPORT "Compile Link List routines into library" ON)
+option( XB_FUNCTION_SUPPORT "Compile XBase Function support into library" ON)
+option( XB_EXPRESSION_SUPPORT "Compile Expression support into library" ON)
+option( XB_INF_SUPPORT "Compile NDX INF file support into library" ON)
+option( XB_FILTER_SUPPORT "Compile Filter support into library" ON)
+option( XB_BLOCKREAD_SUPPORT "Compile Block Read support into library" ON)
+option( XB_SQL_SUPPORT "Compile SQL support into library - alpha" ON)
+option( XB_DEBUG_SUPPORT "Compile debug logic into library" ON)
+option( XB_UTILS_SUPPORT "Compile utility programs" ON)
+option( XB_EXAMPLES_SUPPORT "Compile example programs" ON)
+
+Message( "--- BUILD_SHARED_LIBS " ${BUILD_SHARED_LIBS})
+Message( "--- XB_DBF3_SUPPORT " ${XB_DBF3_SUPPORT})
+Message( "--- XB_DBF4_SUPPORT " ${XB_DBF4_SUPPORT})
+Message( "--- XB_MEMO_SUPPORT " ${XB_MEMO_SUPPORT})
+Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
+Message( "--- XB_MDX_SUPPORT " ${XB_MDX_SUPPORT})
+Message( "--- XB_TDX_SUPPORT " ${XB_TDX_SUPPORT})
+Message( "--- XB_LOCKING_SUPPORT " ${XB_LOCKING_SUPPORT})
+Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
+Message( "--- XB_FUNCTION_SUPPORT " ${XB_FUNCTION_SUPPORT})
+Message( "--- XB_EXPRESSION_SUPPORT " ${XB_EXPRESSION_SUPPORT})
+Message( "--- XB_FILTER_SUPPORT " ${XB_FILTER_SUPPORT})
+Message( "--- XB_DEBUG_SUPPORT " ${XB_DEBUG_SUPPORT})
+Message( "--- XB_UTILS_SUPPORT " ${XB_UTILS_SUPPORT})
+Message( "--- XB_EXAMPLES_SUPPORT " ${XB_EXAMPLES_SUPPORT})
+Message( "--- XB_LOGGING_SUPPORT " ${XB_LOGGING_SUPPORT})
+Message( "--- XB_SQL_SUPPORT " ${XB_SQL_SUPPORT})
+Message( "--- XB_INF_SUPPORT " ${XB_INF_SUPPORT})
+Message( "--- XB_BLOCKREAD_SUPPORT " ${XB_BLOCKREAD_SUPPORT})
+
+IF( XB_DEBUG_SUPPORT )
+ Message( "--- Adding debug support" )
+ set( CMAKE_BUILD_TYPE Debug )
+IF( CMAKE_COMPILER_IS_GNUCXX )
+ add_compile_options( -Og )
+ENDIF( CMAKE_COMPILER_IS_GNUCXX )
+ENDIF( XB_DEBUG_SUPPORT )
+
+IF( CMAKE_SIZEOF_VOID_P EQUAL 8 )
+ MESSAGE( "--- 64 bit compiler detected" )
+ set( XB_PLATFORM "x64" )
+ set( XB_PLATFORM_64 1 )
+ set( XB_LIBNAME "xbase64" )
+
+ELSE( CMAKE_SIZEOF_VOID_P EQUAL 8 )
+ MESSAGE( "--- 32 bit compiler detected" )
+ set( XB_PLATFORM "x86" )
+ set( XB_PLATFORM_32 1 )
+ set( XB_LIBNAME "xbase32" )
+
+ENDIF( CMAKE_SIZEOF_VOID_P EQUAL 8 )
+
+
+#Check for the existence of various header files
+INCLUDE (CheckIncludeFiles)
+CHECK_INCLUDE_FILES (ctype.h HAVE_CTYPE_H)
+CHECK_INCLUDE_FILES (dirent.h HAVE_DIRENT_H)
+CHECK_INCLUDE_FILES (fcntl.h HAVE_FCNTL_H)
+CHECK_INCLUDE_FILES (inttypes.h HAVE_INTTYPES_H)
+CHECK_INCLUDE_FILES (pwd.h HAVE_PWD_H)
+CHECK_INCLUDE_FILES (stdarg.h HAVE_STDARG_H)
+CHECK_INCLUDE_FILES (stdargs.h HAVE_STDARGS_H)
+CHECK_INCLUDE_FILES (string.h HAVE_STRING_H)
+CHECK_INCLUDE_FILES (strings.h HAVE_STRINGS_H)
+CHECK_INCLUDE_FILES (sys/stat.h HAVE_STAT_H)
+CHECK_INCLUDE_FILES (unistd.h HAVE_UNISTD_H)
+CHECK_INCLUDE_FILES (varargs.h HAVE_VARARGS_H)
+CHECK_INCLUDE_FILES (windows.h HAVE_WINDOWS_H)
+
+#Check for the existence of various function calls
+INCLUDE( CheckFunctionExists )
+CHECK_FUNCTION_EXISTS(_close HAVE__CLOSE_F)
+CHECK_FUNCTION_EXISTS(fcntl HAVE_FCNTL_F)
+CHECK_FUNCTION_EXISTS(_fdopen HAVE__FDOPEN_F)
+CHECK_FUNCTION_EXISTS(fopen_s HAVE_FOPEN_S_F)
+CHECK_FUNCTION_EXISTS(_fsopen HAVE__FSOPEN_F)
+CHECK_FUNCTION_EXISTS(_fileno HAVE__FILENO_F)
+CHECK_FUNCTION_EXISTS(fork HAVE_FORK_F)
+CHECK_FUNCTION_EXISTS(_fseeki64 HAVE__FSEEKI64_F)
+CHECK_FUNCTION_EXISTS(fseeko HAVE_FSEEKO_F)
+CHECK_FUNCTION_EXISTS(ftruncate HAVE_FTRUNCATE_F)
+CHECK_FUNCTION_EXISTS(getenv_s HAVE_GETENV_S_F)
+
+CHECK_FUNCTION_EXISTS(_localtime64_s HAVE__LOCALTIME64_S_F)
+CHECK_FUNCTION_EXISTS(LockFile HAVE_LOCKFILE_F)
+CHECK_FUNCTION_EXISTS(locking HAVE_LOCKING_F)
+CHECK_FUNCTION_EXISTS(_locking HAVE__LOCKING_F)
+CHECK_FUNCTION_EXISTS(_open HAVE__OPEN_F)
+CHECK_FUNCTION_EXISTS(SetEndOfFile HAVE_SETENDOFFILE_F)
+
+CHECK_FUNCTION_EXISTS(vsnprintf HAVE_VSNPRINTF_F)
+CHECK_FUNCTION_EXISTS(_vsnprintf_s HAVE__VSNPRINTF_S_F)
+
+
+CHECK_FUNCTION_EXISTS(getopt HAVE_GETOPT_F)
+
+IF( WIN32 )
+
+# Use CHECK_SYMBOL_EXISTS for the Win32API instead of CHECK_FUNCTION_EXISTS
+# Can't detect inline functions in headers
+# Can't detect due to mismatch of calling conventions
+# Can't detect mangled names
+
+INCLUDE( CheckSymbolExists )
+CHECK_SYMBOL_EXISTS(CreateProcessW Windows.h HAVE_CREATEPROCESSW_F )
+CHECK_SYMBOL_EXISTS(vsprintf_s stdio.h HAVE_VSPRINTF_S_F )
+
+ENDIF ( WIN32 )
+
+# IF( NOT HAVE_SENTENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND BORLAND )
+# # ----fix me----
+# # cmake CHECK_FUNCTION_EXISTS - could not find Borland 5.5 SetEndOfFile
+# Set( HAVE_SETENDOFFILE_F "HAVE_SETENDOFFILE_H" )
+# ENDIF ( NOT HAVE_SENTENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND BORLAND )
+
+IF( NOT HAVE_SETENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND WIN32 )
+ # ----fix me----
+ # cmake CHECK_FUNCTION_EXISTS - could not find Borland 5.5, or Windows VS 32 bit SetEndOfFile
+ Set( HAVE_SETENDOFFILE_F "HAVE_SETENDOFFILE_F" )
+ENDIF ( NOT HAVE_SETENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND WIN32 )
+
+IF( XB_NDX_SUPPORT OR XB_MDX_SUPPORT )
+ Set( XB_INDEX_SUPPORT "1" )
+ENDIF( XB_NDX_SUPPORT OR XB_MDX_SUPPORT )
+
+
+# Set directories
+# PROJECT_PARENT_DIR is two nodes higher
+get_filename_component( PROJECT_PARENT_DIR ${PROJECT_BINARY_DIR} DIRECTORY )
+get_filename_component( PROJECT_PARENT_DIR ${PROJECT_PARENT_DIR} DIRECTORY )
+
+# MESSAGE( "PROJECT_PARENT_DIR = " ${PROJECT_PARENT_DIR} )
+# MESSAGE( "PROJECT_BINARY_DIR = " ${PROJECT_BINARY_DIR} )
+
+
+set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin )
+set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib )
+set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib )
+
+set( PROJECT_SOURCE_DIR ${PROJECT_PARENT_DIR}/src )
+set( PROJECT_DATA_DIR ${PROJECT_PARENT_DIR}/data )
+set( PROJECT_LOG_DIR ${PROJECT_PARENT_DIR}/logs )
+set( PROJECT_TEMP_DIR ${PROJECT_PARENT_DIR}/temp )
+set( EXTRA_LIBS ${EXTRA_LIBS} ${XB_LIBNAME} )
+
+
+# Undo bad decisions
+IF( XB_PLATFORM_32 AND XB_LARGEFILE_SUPPORT )
+ MESSAGE( "--- Can't build 64 bit environment with a 32 bit compiler" )
+ MESSAGE( "--- XB_LARGEFILE_SUPPORT set to OFF" )
+ set( XB_LARGEFILE_SUPPORT OFF CACHE BOOL "Use 64 bit large file support?" FORCE )
+ENDIF ( XB_PLATFORM_32 AND XB_LARGEFILE_SUPPORT )
+
+IF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
+ MESSAGE( "--- At lease one file format is required. Defaulting to Version 4" )
+ set( XB_DBF4_SUPPORT ON CACHE BOOL "Compile DBase File Format Version 4 support" FORCE )
+ENDIF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
+
+IF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+ MESSAGE( "--- Link List support required for DBF V4 Memo files. Setting to ON" )
+ set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
+ENDIF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+
+
+
+
+IF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+ MESSAGE( "--- Link List support required for locking functions. Setting to ON" )
+ set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
+ENDIF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+
+IF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+ MESSAGE( "--- MDX support required for Temporary indices. Setting to ON" )
+ set( XB_MDX_SUPPORT ON CACHE BOOL "Compile temporary index support into library" FORCE )
+ENDIF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+
+IF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+ MESSAGE( "--- Expression required for indices. Setting to ON" )
+ set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
+ Set( XB_INDEX_SUPPORT "1" )
+ENDIF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+
+IF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
+ MESSAGE( "--- Function support required for expressions. Setting to ON" )
+ set( XB_FUNCTION_SUPPORT ON CACHE BOOL "Compile XBase Function support into library" FORCE )
+ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
+
+IF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+ MESSAGE( "--- Linklist support required for expressions. Setting to ON" )
+ set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
+ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+
+IF( XB_SQL_SUPPORT AND NOT XB_MEMO_SUPPORT )
+ MESSAGE( "--- Memo support required for SQL. Setting to ON" )
+ set( XB_MEMO_SUPPORT ON CACHE BOOL "Compile memo field support into library" FORCE )
+ENDIF( XB_SQL_SUPPORT AND NOT XB_MEMO_SUPPORT )
+
+IF( XB_SQL_SUPPORT AND NOT XB_DBF4_SUPPORT )
+ MESSAGE( "--- DBF4 support required for SQL. Setting to ON" )
+ set( XB_DBF4_SUPPORT ON CACHE BOOL "Compile DBase File Format Version 4 support" FORCE )
+ENDIF( XB_SQL_SUPPORT AND NOT XB_DBF4_SUPPORT )
+
+IF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+ MESSAGE( "--- Expression required for filters. Setting to ON" )
+ set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
+ENDIF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+
+IF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
+ MESSAGE( "--- BLOCKREAD support required for SQL. Setting to ON" )
+ set( XB_BLOCKREAD_SUPPORT ON CACHE BOOL "Compile Block Read support into library" FORCE )
+ENDIF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
+
+IF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+ MESSAGE( "--- MDX support required for Temporary indices. Setting to ON" )
+ set( XB_MDX_SUPPORT ON CACHE BOOL "Compile temporary index support into library" FORCE )
+ENDIF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+
+
+
+# Build configuration header file
+configure_file (
+ "${PROJECT_SOURCE_DIR}/include/xbconfig.h.in"
+ "${PROJECT_BINARY_DIR}/include/xbconfig.h"
+)
+
+# Microsoft Windows compiler settings
+IF( MSVC )
+# add_definitions( /D_CRT_SECURE_NO_WARNINGS)
+ add_definitions( /EHsc )
+ENDIF( MSVC )
+
+
+# set up include directories
+include_directories( "${PROJECT_BINARY_DIR}/include" )
+include_directories( "${PROJECT_SOURCE_DIR}/include" )
+
+#build the library
+IF ( BUILD_SHARED_LIBS )
+ set( LIB_TYPE SHARED )
+ELSE( BUILD_SHARED_LIBS )
+ set( LIB_TYPE STATIC )
+ENDIF( BUILD_SHARED_LIBS )
+MESSAGE( "--- Lib type " ${LIB_TYPE} )
+
+
+
+set (SOURCES ${PROJECT_SOURCE_DIR}/core/xbstring.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbssv.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbdate.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbtblmgr.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbxbase.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbfile.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbdbf.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbfields.cpp
+ ${PROJECT_SOURCE_DIR}/core/xblog.cpp)
+
+IF( XB_MEMO_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo.cpp )
+ENDIF( XB_MEMO_SUPPORT )
+
+IF( XB_DBF3_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbdbf3.cpp )
+ IF( XB_MEMO_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo3.cpp )
+ ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF3_SUPPORT )
+
+IF( XB_DBF4_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbdbf4.cpp )
+ IF( XB_MEMO_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo4.cpp )
+ ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF4_SUPPORT )
+
+IF( XB_FUNCTION_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbfuncs.cpp )
+ENDIF( XB_FUNCTION_SUPPORT )
+
+IF( XB_EXPRESSION_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbexpnode.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbexp.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbuda.cpp )
+ENDIF( XB_EXPRESSION_SUPPORT )
+
+IF( XB_INDEX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbbcd.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixbase.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbtag.cpp )
+ENDIF( XB_INDEX_SUPPORT )
+
+IF( XB_NDX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixndx.cpp )
+ENDIF( XB_NDX_SUPPORT )
+
+
+IF( XB_MDX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixmdx.cpp )
+ENDIF( XB_MDX_SUPPORT )
+
+IF( XB_TDX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixtdx.cpp )
+ENDIF( XB_TDX_SUPPORT )
+
+
+IF( XB_SQL_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbalttbl.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrix.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrtbl.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdelete.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdrpix.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdrptbl.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbinsert.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbset.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbsql.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbstmt.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbselect.cpp )
+ENDIF( XB_SQL_SUPPORT )
+
+
+IF( XB_FILTER_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbfilter.cpp )
+ENDIF( XB_FILTER_SUPPORT )
+
+IF( XB_BLOCKREAD_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbblockread.cpp )
+ENDIF( XB_BLOCKREAD_SUPPORT )
+
+
+include( GenerateExportHeader )
+#add_library( xbase ${LIB_TYPE} ${SOURCES} )
+add_library( ${XB_LIBNAME} ${LIB_TYPE} ${SOURCES} )
+#add_library( ${CMAKE_PROJECT_NAME} ${LIB_TYPE} ${SOURCES} )
+
+
+IF( WIN32 )
+MESSAGE( "--- Generating Windows Library Headers" )
+
+#GENERATE_EXPORT_HEADER( xbase
+# BASE_NAME xbase
+
+GENERATE_EXPORT_HEADER( ${XB_LIBNAME}
+ BASE_NAME ${XB_LIBNAME}
+ EXPORT_MACRO_NAME xbase_EXPORT
+ EXPORT_FILE_NAME xbase_Export.h
+ STATIC_DEFINE xbase_BUILT_AS_STATIC
+)
+ENDIF( WIN32 )
+
+
+#build test programs
+enable_testing()
+
+add_executable( xb_test_string ${PROJECT_SOURCE_DIR}/tests/xb_test_string.cpp )
+target_link_libraries( xb_test_string ${EXTRA_LIBS})
+add_test( NAME xbString COMMAND xb_test_string QUIET )
+
+add_executable( xb_test_date ${PROJECT_SOURCE_DIR}/tests/xb_test_date.cpp )
+target_link_libraries( xb_test_date ${EXTRA_LIBS})
+add_test( NAME xbDate COMMAND xb_test_date QUIET )
+
+add_executable( xb_test_tblmgr ${PROJECT_SOURCE_DIR}/tests/xb_test_tblmgr.cpp )
+target_link_libraries( xb_test_tblmgr ${EXTRA_LIBS})
+add_test( NAME xbTblMgr COMMAND xb_test_tblmgr QUIET )
+
+add_executable( xb_test_xbase ${PROJECT_SOURCE_DIR}/tests/xb_test_xbase.cpp )
+target_link_libraries( xb_test_xbase ${EXTRA_LIBS})
+add_test( NAME xbXBase COMMAND xb_test_xbase QUIET )
+
+add_executable( xb_test_file ${PROJECT_SOURCE_DIR}/tests/xb_test_file.cpp )
+target_link_libraries( xb_test_file ${EXTRA_LIBS})
+add_test( NAME xbFile COMMAND xb_test_file QUIET )
+
+add_executable( xb_test_log ${PROJECT_SOURCE_DIR}/tests/xb_test_log.cpp )
+target_link_libraries( xb_test_log ${EXTRA_LIBS})
+add_test( NAME xbLog COMMAND xb_test_log QUIET )
+
+IF( XB_LINKLIST_SUPPORT )
+add_executable( xb_test_linklist ${PROJECT_SOURCE_DIR}/tests/xb_test_linklist.cpp )
+target_link_libraries( xb_test_linklist ${EXTRA_LIBS})
+add_test( NAME xbLinkList COMMAND xb_test_linklist QUIET )
+ENDIF( XB_LINKLIST_SUPPORT )
+
+IF( XB_DBF3_SUPPORT )
+add_executable( xb_test_dbf_v3_nomemos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v3_nomemos.cpp )
+target_link_libraries( xb_test_dbf_v3_nomemos ${EXTRA_LIBS})
+add_test( NAME xbDbfV3NoMemos COMMAND xb_test_dbf_v3_nomemos QUIET )
+
+IF( XB_MEMO_SUPPORT )
+add_executable( xb_test_dbf_v3_memos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v3_memos.cpp )
+target_link_libraries( xb_test_dbf_v3_memos ${EXTRA_LIBS})
+add_test( NAME xbDbfV3Memos COMMAND xb_test_dbf_v3_memos QUIET )
+
+ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF3_SUPPORT )
+
+IF( XB_DBF4_SUPPORT )
+add_executable( xb_test_dbf_v4_nomemos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v4_nomemos.cpp )
+target_link_libraries( xb_test_dbf_v4_nomemos ${EXTRA_LIBS})
+add_test( NAME xbDbfV4NoMemos COMMAND xb_test_dbf_v4_nomemos QUIET )
+
+IF( XB_MEMO_SUPPORT )
+add_executable( xb_test_dbf_v4_memos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v4_memos.cpp )
+target_link_libraries( xb_test_dbf_v4_memos ${EXTRA_LIBS})
+add_test( NAME xbDbfV4Memos COMMAND xb_test_dbf_v4_memos QUIET )
+
+ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF4_SUPPORT )
+
+IF( XB_FUNCTION_SUPPORT )
+add_executable( xb_test_funcs ${PROJECT_SOURCE_DIR}/tests/xb_test_funcs.cpp )
+target_link_libraries( xb_test_funcs ${EXTRA_LIBS})
+add_test( NAME xbFunctions COMMAND xb_test_funcs QUIET )
+ENDIF( XB_FUNCTION_SUPPORT )
+
+IF( XB_NDX_SUPPORT )
+IF( XB_DBF3_SUPPORT )
+add_executable( xb_test_ndx ${PROJECT_SOURCE_DIR}/tests/xb_test_ndx.cpp )
+target_link_libraries( xb_test_ndx ${EXTRA_LIBS})
+add_test( NAME xbIxNdx COMMAND xb_test_ndx QUIET )
+ENDIF( XB_DBF3_SUPPORT )
+ENDIF( XB_NDX_SUPPORT )
+
+
+
+IF( XB_DBF4_SUPPORT )
+
+IF( XB_MDX_SUPPORT )
+add_executable( xb_test_mdx ${PROJECT_SOURCE_DIR}/tests/xb_test_mdx.cpp )
+target_link_libraries( xb_test_mdx ${EXTRA_LIBS})
+add_test( NAME xbIxMdx COMMAND xb_test_mdx QUIET )
+ENDIF( XB_MDX_SUPPORT )
+
+IF( XB_TDX_SUPPORT )
+add_executable( xb_test_tdx ${PROJECT_SOURCE_DIR}/tests/xb_test_tdx.cpp )
+target_link_libraries( xb_test_tdx ${EXTRA_LIBS})
+add_test( NAME xbIxTdx COMMAND xb_test_tdx QUIET )
+ENDIF( XB_TDX_SUPPORT )
+
+ENDIF( XB_DBF4_SUPPORT )
+
+
+
+IF( XB_INDEX_SUPPORT )
+add_executable( xb_test_bcd ${PROJECT_SOURCE_DIR}/tests/xb_test_bcd.cpp )
+target_link_libraries( xb_test_bcd ${EXTRA_LIBS})
+add_test( NAME xbBcd COMMAND xb_test_bcd QUIET )
+ENDIF( XB_INDEX_SUPPORT )
+
+
+IF( XB_EXPRESSION_SUPPORT )
+
+add_executable( xb_test_expnode ${PROJECT_SOURCE_DIR}/tests/xb_test_expnode.cpp )
+target_link_libraries( xb_test_expnode ${EXTRA_LIBS})
+add_test( NAME xbExpNode COMMAND xb_test_expnode QUIET )
+
+
+add_executable( xb_test_expression ${PROJECT_SOURCE_DIR}/tests/xb_test_expression.cpp )
+target_link_libraries( xb_test_expression ${EXTRA_LIBS})
+add_test( NAME xbExpressions COMMAND xb_test_expression QUIET )
+
+add_executable( xb_test_uda ${PROJECT_SOURCE_DIR}/tests/xb_test_uda.cpp )
+target_link_libraries( xb_test_uda ${EXTRA_LIBS})
+add_test( NAME xbUda COMMAND xb_test_uda QUIET )
+
+ENDIF( XB_EXPRESSION_SUPPORT )
+
+IF( XB_SQL_SUPPORT )
+add_executable( xb_test_sql ${PROJECT_SOURCE_DIR}/tests/xb_test_sql.cpp )
+target_link_libraries( xb_test_sql ${EXTRA_LIBS})
+add_test( NAME xbSql COMMAND xb_test_sql QUIET )
+ENDIF( XB_SQL_SUPPORT )
+
+IF( XB_FILTER_SUPPORT )
+add_executable( xb_test_filter ${PROJECT_SOURCE_DIR}/tests/xb_test_filter.cpp )
+target_link_libraries( xb_test_filter ${EXTRA_LIBS})
+add_test( NAME xbFilter COMMAND xb_test_filter QUIET )
+ENDIF( XB_FILTER_SUPPORT )
+
+IF( XB_BLOCKREAD_SUPPORT )
+add_executable( xb_test_blockread ${PROJECT_SOURCE_DIR}/tests/xb_test_blockread.cpp )
+target_link_libraries( xb_test_blockread ${EXTRA_LIBS})
+add_test( NAME xbBlockRead COMMAND xb_test_blockread QUIET )
+ENDIF( XB_BLOCKREAD_SUPPORT )
+
+
+IF( XB_LOCKING_SUPPORT )
+add_executable( xb_test_lock ${PROJECT_SOURCE_DIR}/tests/xb_test_lock.cpp )
+target_link_libraries( xb_test_lock ${EXTRA_LIBS})
+add_test( NAME xbLock COMMAND xb_test_lock QUIET )
+IF( HAVE_CREATEPROCESSW_F )
+add_executable( xb_test_lock2 ${PROJECT_SOURCE_DIR}/tests/xb_test_lock2.cpp )
+target_link_libraries( xb_test_lock2 ${EXTRA_LIBS})
+ENDIF( HAVE_CREATEPROCESSW_F )
+ENDIF( XB_LOCKING_SUPPORT )
+
+#build example programs
+IF( XB_EXAMPLES_SUPPORT )
+ add_executable( xb_ex_string ${PROJECT_SOURCE_DIR}/examples/xb_ex_string.cpp )
+ target_link_libraries( xb_ex_string ${EXTRA_LIBS})
+
+ add_executable( xb_ex_date ${PROJECT_SOURCE_DIR}/examples/xb_ex_date.cpp )
+ target_link_libraries( xb_ex_date ${EXTRA_LIBS})
+
+ IF( XB_DBF3_SUPPORT )
+ add_executable( xb_ex_v3_create_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v3_create_dbf.cpp )
+ target_link_libraries( xb_ex_v3_create_dbf ${EXTRA_LIBS})
+
+ add_executable( xb_ex_v3_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v3_upd_dbf.cpp )
+ target_link_libraries( xb_ex_v3_upd_dbf ${EXTRA_LIBS})
+ ENDIF( XB_DBF3_SUPPORT )
+
+ IF( XB_DBF4_SUPPORT )
+ add_executable( xb_ex_v4_create_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_create_dbf.cpp )
+ target_link_libraries( xb_ex_v4_create_dbf ${EXTRA_LIBS})
+ ENDIF( XB_DBF4_SUPPORT )
+
+ IF( XB_EXPRESSION_SUPPORT )
+ add_executable( xb_ex_expression ${PROJECT_SOURCE_DIR}/examples/xb_ex_expression.cpp )
+ target_link_libraries( xb_ex_expression ${EXTRA_LIBS})
+ ENDIF( XB_EXPRESSION_SUPPORT )
+
+ add_executable( xb_ex_v4_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_upd_dbf.cpp )
+ target_link_libraries( xb_ex_v4_upd_dbf ${EXTRA_LIBS})
+
+ add_executable( xb_ex_ssv ${PROJECT_SOURCE_DIR}/examples/xb_ex_ssv.cpp )
+ target_link_libraries( xb_ex_ssv ${EXTRA_LIBS})
+
+ IF( XB_LOGGING_SUPPORT )
+ add_executable( xb_ex_log ${PROJECT_SOURCE_DIR}/examples/xb_ex_log.cpp )
+ target_link_libraries( xb_ex_log ${EXTRA_LIBS})
+ ENDIF( XB_LOGGING_SUPPORT )
+
+ENDIF( XB_EXAMPLES_SUPPORT )
+
+#build utility programs
+IF( XB_UTILS_SUPPORT )
+
+ add_executable( xb_cfg_check ${PROJECT_SOURCE_DIR}/utils/xb_cfg_check.cpp )
+ target_link_libraries( xb_cfg_check ${EXTRA_LIBS})
+
+ add_executable( xb_copydbf ${PROJECT_SOURCE_DIR}/utils/xb_copydbf.cpp )
+ target_link_libraries( xb_copydbf ${EXTRA_LIBS})
+
+ add_executable( xb_dbfutil ${PROJECT_SOURCE_DIR}/utils/xb_dbfutil.cpp )
+ target_link_libraries( xb_dbfutil ${EXTRA_LIBS})
+
+ add_executable( xb_deletall ${PROJECT_SOURCE_DIR}/utils/xb_deletall.cpp )
+ target_link_libraries( xb_deletall ${EXTRA_LIBS})
+
+ add_executable( xb_dumpdbt ${PROJECT_SOURCE_DIR}/utils/xb_dumpdbt.cpp )
+ target_link_libraries( xb_dumpdbt ${EXTRA_LIBS})
+
+ add_executable( xb_dumprecs ${PROJECT_SOURCE_DIR}/utils/xb_dumprecs.cpp )
+ target_link_libraries( xb_dumprecs ${EXTRA_LIBS})
+
+ add_executable( xb_import ${PROJECT_SOURCE_DIR}/utils/xb_import.cpp )
+ target_link_libraries( xb_import ${EXTRA_LIBS})
+
+ add_executable( xb_tblinfo ${PROJECT_SOURCE_DIR}/utils/xb_tblinfo.cpp )
+ target_link_libraries( xb_tblinfo ${EXTRA_LIBS})
+
+ IF( XB_SQL_SUPPORT )
+ add_executable( xb_execsql ${PROJECT_SOURCE_DIR}/utils/xb_execsql.cpp )
+ target_link_libraries( xb_execsql ${EXTRA_LIBS})
+ ENDIF( XB_SQL_SUPPORT )
+
+ add_executable( xb_pack ${PROJECT_SOURCE_DIR}/utils/xb_pack.cpp )
+ target_link_libraries( xb_pack ${EXTRA_LIBS})
+
+ add_executable( xb_undelall ${PROJECT_SOURCE_DIR}/utils/xb_undelall.cpp )
+ target_link_libraries( xb_undelall ${EXTRA_LIBS})
+
+ install (TARGETS xb_cfg_check DESTINATION bin)
+ install (TARGETS xb_copydbf DESTINATION bin)
+ install (TARGETS xb_dbfutil DESTINATION bin)
+ install (TARGETS xb_deletall DESTINATION bin)
+ install (TARGETS xb_dumpdbt DESTINATION bin)
+ install (TARGETS xb_dumprecs DESTINATION bin)
+ install (TARGETS xb_import DESTINATION bin)
+ install (TARGETS xb_pack DESTINATION bin)
+ install (TARGETS xb_undelall DESTINATION bin)
+ IF( XB_SQL_SUPPORT )
+ install (TARGETS xb_execsql DESTINATION bin)
+ ENDIF( XB_SQL_SUPPORT )
+
+
+
+ENDIF( XB_UTILS_SUPPORT )
+
+install (FILES ${PROJECT_BINARY_DIR}/include/xbconfig.h
+ ${PROJECT_SOURCE_DIR}/include/xbase.h
+ ${PROJECT_SOURCE_DIR}/include/xbbcd.h
+ ${PROJECT_SOURCE_DIR}/include/xbblkread.h
+ ${PROJECT_SOURCE_DIR}/include/xbdate.h
+ ${PROJECT_SOURCE_DIR}/include/xbdbf.h
+ ${PROJECT_SOURCE_DIR}/include/xbexp.h
+ ${PROJECT_SOURCE_DIR}/include/xbexpnode.h
+ ${PROJECT_SOURCE_DIR}/include/xbfile.h
+ ${PROJECT_SOURCE_DIR}/include/xbfilter.h
+ ${PROJECT_SOURCE_DIR}/include/xbindex.h
+ ${PROJECT_SOURCE_DIR}/include/xblnklst.h
+ ${PROJECT_SOURCE_DIR}/include/xblnklstord.h
+ ${PROJECT_SOURCE_DIR}/include/xblnknod.h
+ ${PROJECT_SOURCE_DIR}/include/xblog.h
+ ${PROJECT_SOURCE_DIR}/include/xbmemo.h
+ ${PROJECT_SOURCE_DIR}/include/xbretcod.h
+ ${PROJECT_SOURCE_DIR}/include/xbsql.h
+ ${PROJECT_SOURCE_DIR}/include/xbssv.h
+ ${PROJECT_SOURCE_DIR}/include/xbstring.h
+ ${PROJECT_SOURCE_DIR}/include/xbtag.h
+ ${PROJECT_SOURCE_DIR}/include/xbtblmgr.h
+ ${PROJECT_SOURCE_DIR}/include/xbtypes.h
+ ${PROJECT_SOURCE_DIR}/include/xbuda.h
+ ${PROJECT_SOURCE_DIR}/include/xbxbase.h
+ DESTINATION include/${CMAKE_PROJECT_NAME})
+
+IF( NOT WIN32 )
+install (FILES ${PROJECT_PARENT_DIR}/docs/man/xb_cfg_chk.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_copydbf.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dbfutil.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_deletall.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dumpdbt.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dumprecs.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_import.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_pack.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_tblinfo.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_undelall.1.gz
+
+ DESTINATION man/man1)
+
+ENDIF( NOT WIN32 )
+
+
+SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.1.4 SOVERSION 0 )
+
+IF( WIN32 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION bin)
+ELSE( WIN32 )
+ IF( EXISTS /usr/local/lib64 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION lib64/${CMAKE_PROJECT_NAME})
+ ELSE( EXISTS /usr/local/lib64 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION lib/${CMAKE_PROJECT_NAME})
+ ENDIF( EXISTS /usr/local/lib64 )
+ENDIF( WIN32 )
diff --git a/build/win64vs/CleanWin.bat b/1Tdata/xbase/xbase64-4.1.4/build/win64vs/CleanWin.bat
index 8de16ef..8de16ef 100755
--- a/build/win64vs/CleanWin.bat
+++ b/1Tdata/xbase/xbase64-4.1.4/build/win64vs/CleanWin.bat
diff --git a/1Tdata/xbase/xbase64-4.1.4/build/win64vs/README.win64vs b/1Tdata/xbase/xbase64-4.1.4/build/win64vs/README.win64vs
new file mode 100644
index 0000000..c5e24a6
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/build/win64vs/README.win64vs
@@ -0,0 +1,22 @@
+
+64 bit Visual Studio build steps for Xbase64 running on Windows - 3/7/23
+
+1) Verify cmake is installed with command: cmake --version
+ If it is not installed, install the latest version.
+
+
+2) Verify Visual Studio is intalled with the command.
+
+
+3) Build xbase64 library
+
+ Open Visual Studio Command Prompt for 64 bit environment
+ cd build/win64vs (go to the appropriate build directory)
+ BuildWin.bat (configure for your environment and compile)
+ nmake test (test library buiild)
+ nmake install (install it)
+
+ "c:\Program Files (x86)\xbase64\bin\xb_cfg_chk" (test install)
+
+
+Also of note, batch file CleanWin.bat initializes the win64vs build folders. \ No newline at end of file
diff --git a/docs/doxygen/config/Doxyfile b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/config/Doxyfile
index 4101206..4101206 100644
--- a/docs/doxygen/config/Doxyfile
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/config/Doxyfile
diff --git a/docs/doxygen/config/doxyout.txt b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/config/doxyout.txt
index 3551bf8..3551bf8 100644
--- a/docs/doxygen/config/doxyout.txt
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/config/doxyout.txt
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/annotated.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/annotated.html
new file mode 100644
index 0000000..78f63fe
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/annotated.html
@@ -0,0 +1,90 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: Data Structures</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle"><div class="title">Data Structures</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here are the data structures with brief descriptions:</div><div class="directory">
+<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><a class="el" href="namespacexb.html" target="_self">xb</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbDate.html" target="_self">xbDate</a></td><td class="desc">XbDate class </td></tr>
+<tr id="row_0_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbDbf.html" target="_self">xbDbf</a></td><td class="desc">Base class for handling dbf files/tables </td></tr>
+<tr id="row_0_2_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbFile.html" target="_self">xbFile</a></td><td class="desc">Class for handling low level file I/O </td></tr>
+<tr id="row_0_3_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structxb_1_1xbSchema.html" target="_self">xbSchema</a></td><td class="desc">Schema used for defining tables with CreateTable methods </td></tr>
+<tr id="row_0_4_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbSsv.html" target="_self">xbSsv</a></td><td class="desc">Class for handling shared system variables </td></tr>
+<tr id="row_0_5_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbString.html" target="_self">xbString</a></td><td class="desc">Class for handling string data </td></tr>
+<tr id="row_0_6_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structxb_1_1xbTblList.html" target="_self">xbTblList</a></td><td class="desc"></td></tr>
+<tr id="row_0_7_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbTblMgr.html" target="_self">xbTblMgr</a></td><td class="desc"></td></tr>
+<tr id="row_0_8_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbXBase.html" target="_self">xbXBase</a></td><td class="desc">XbXbase class </td></tr>
+<tr id="row_1_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsFldMap.html" target="_self">sFldMap</a></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/docs/doxygen/html/bc_s.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/bc_s.png
index 224b29a..224b29a 100644
--- a/docs/doxygen/html/bc_s.png
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/bc_s.png
Binary files differ
diff --git a/docs/doxygen/html/bdwn.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/bdwn.png
index 940a0b9..940a0b9 100644
--- a/docs/doxygen/html/bdwn.png
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/bdwn.png
Binary files differ
diff --git a/docs/doxygen/html/checkndx_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/checkndx_8cpp.html
index e24b4ce..e24b4ce 100644
--- a/docs/doxygen/html/checkndx_8cpp.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/checkndx_8cpp.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classes.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classes.html
new file mode 100644
index 0000000..8db6dd4
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classes.html
@@ -0,0 +1,84 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: Data Structure Index</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle"><div class="title">Data Structure Index</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="qindex"><a class="qindex" href="#letter_S">S</a>&#160;|&#160;<a class="qindex" href="#letter_X">X</a></div>
+<div class="classindex">
+<dl class="classindex even">
+<dt class="alphachar"><a id="letter_S" name="letter_S">S</a></dt>
+<dd><a class="el" href="structsFldMap.html">sFldMap</a></dd></dl>
+<dl class="classindex odd">
+<dt class="alphachar"><a id="letter_X" name="letter_X">X</a></dt>
+<dd><a class="el" href="classxb_1_1xbDate.html">xbDate</a> (<a class="el" href="namespacexb.html">xb</a>)</dd><dd><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> (<a class="el" href="namespacexb.html">xb</a>)</dd><dd><a class="el" href="classxb_1_1xbFile.html">xbFile</a> (<a class="el" href="namespacexb.html">xb</a>)</dd><dd><a class="el" href="structxb_1_1xbSchema.html">xbSchema</a> (<a class="el" href="namespacexb.html">xb</a>)</dd><dd><a class="el" href="classxb_1_1xbSsv.html">xbSsv</a> (<a class="el" href="namespacexb.html">xb</a>)</dd><dd><a class="el" href="classxb_1_1xbString.html">xbString</a> (<a class="el" href="namespacexb.html">xb</a>)</dd><dd><a class="el" href="structxb_1_1xbTblList.html">xbTblList</a> (<a class="el" href="namespacexb.html">xb</a>)</dd><dd><a class="el" href="classxb_1_1xbTblMgr.html">xbTblMgr</a> (<a class="el" href="namespacexb.html">xb</a>)</dd><dd><a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> (<a class="el" href="namespacexb.html">xb</a>)</dd></dl>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbDate.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbDate.html
new file mode 100644
index 0000000..d7ea52b
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbDate.html
@@ -0,0 +1,2092 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: xb::xbDate Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="namespacexb.html">xb</a></li><li class="navelem"><a class="el" href="classxb_1_1xbDate.html">xbDate</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-static-attribs">Static Public Attributes</a> &#124;
+<a href="#pro-methods">Protected Member Functions</a> &#124;
+<a href="#pro-static-attribs">Static Protected Attributes</a> </div>
+ <div class="headertitle"><div class="title">xb::xbDate Class Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p><a class="el" href="classxb_1_1xbDate.html" title="xbDate class.">xbDate</a> class.
+ <a href="classxb_1_1xbDate.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="xbdate_8h_source.html">xbdate.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for xb::xbDate:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="classxb_1_1xbDate.png" usemap="#xb::xbDate_map" alt=""/>
+ <map id="xb::xbDate_map" name="xb::xbDate_map">
+<area href="classxb_1_1xbSsv.html" title="Class for handling shared system variables." alt="xb::xbSsv" shape="rect" coords="0,0,70,24"/>
+ </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ab3150e7db0ab5db10a07d748b55465eb"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#ab3150e7db0ab5db10a07d748b55465eb">xbDate</a> ()</td></tr>
+<tr class="memdesc:ab3150e7db0ab5db10a07d748b55465eb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor. <a href="classxb_1_1xbDate.html#ab3150e7db0ab5db10a07d748b55465eb">More...</a><br /></td></tr>
+<tr class="separator:ab3150e7db0ab5db10a07d748b55465eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac8a4d9330221a3daee21b3c28c1d9719"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#ac8a4d9330221a3daee21b3c28c1d9719">xbDate</a> (const char *Date8)</td></tr>
+<tr class="memdesc:ac8a4d9330221a3daee21b3c28c1d9719"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor. <a href="classxb_1_1xbDate.html#ac8a4d9330221a3daee21b3c28c1d9719">More...</a><br /></td></tr>
+<tr class="separator:ac8a4d9330221a3daee21b3c28c1d9719"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acf4546f5681735ede18210f60bab68d4"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#acf4546f5681735ede18210f60bab68d4">xbDate</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;Date8)</td></tr>
+<tr class="memdesc:acf4546f5681735ede18210f60bab68d4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor. <a href="classxb_1_1xbDate.html#acf4546f5681735ede18210f60bab68d4">More...</a><br /></td></tr>
+<tr class="separator:acf4546f5681735ede18210f60bab68d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7ab727a7ec184a086ad36ef83b948170"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a7ab727a7ec184a086ad36ef83b948170">xbDate</a> (xbInt32 lJulDate)</td></tr>
+<tr class="memdesc:a7ab727a7ec184a086ad36ef83b948170"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor. <a href="classxb_1_1xbDate.html#a7ab727a7ec184a086ad36ef83b948170">More...</a><br /></td></tr>
+<tr class="separator:a7ab727a7ec184a086ad36ef83b948170"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8dfc827b466be3c5e3def599277dfa43"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a8dfc827b466be3c5e3def599277dfa43">xbDate</a> (xbUInt16 iInit)</td></tr>
+<tr class="memdesc:a8dfc827b466be3c5e3def599277dfa43"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor. <a href="classxb_1_1xbDate.html#a8dfc827b466be3c5e3def599277dfa43">More...</a><br /></td></tr>
+<tr class="separator:a8dfc827b466be3c5e3def599277dfa43"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a05c9680c6eb9fe07ecf13a189b596c37"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a05c9680c6eb9fe07ecf13a189b596c37">~xbDate</a> ()</td></tr>
+<tr class="memdesc:a05c9680c6eb9fe07ecf13a189b596c37"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destructor. <a href="classxb_1_1xbDate.html#a05c9680c6eb9fe07ecf13a189b596c37">More...</a><br /></td></tr>
+<tr class="separator:a05c9680c6eb9fe07ecf13a189b596c37"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2e33ad9415c32e820e08fd8084198690"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a2e33ad9415c32e820e08fd8084198690">operator=</a> (const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;d)</td></tr>
+<tr class="memdesc:a2e33ad9415c32e820e08fd8084198690"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set operator=. <a href="classxb_1_1xbDate.html#a2e33ad9415c32e820e08fd8084198690">More...</a><br /></td></tr>
+<tr class="separator:a2e33ad9415c32e820e08fd8084198690"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a947ba156d04fe063aaa4c9964ae5d163"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a947ba156d04fe063aaa4c9964ae5d163">operator+=</a> (xbInt32 i)</td></tr>
+<tr class="memdesc:a947ba156d04fe063aaa4c9964ae5d163"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator += <a href="classxb_1_1xbDate.html#a947ba156d04fe063aaa4c9964ae5d163">More...</a><br /></td></tr>
+<tr class="separator:a947ba156d04fe063aaa4c9964ae5d163"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4a8f207d759540114373f5e9d6d375f7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a4a8f207d759540114373f5e9d6d375f7">operator-=</a> (xbInt32 i)</td></tr>
+<tr class="memdesc:a4a8f207d759540114373f5e9d6d375f7"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator -= <a href="classxb_1_1xbDate.html#a4a8f207d759540114373f5e9d6d375f7">More...</a><br /></td></tr>
+<tr class="separator:a4a8f207d759540114373f5e9d6d375f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1c7d9e3718c43df18b21646072c8605e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a1c7d9e3718c43df18b21646072c8605e">operator++</a> (xbInt32 i)</td></tr>
+<tr class="memdesc:a1c7d9e3718c43df18b21646072c8605e"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator ++ <a href="classxb_1_1xbDate.html#a1c7d9e3718c43df18b21646072c8605e">More...</a><br /></td></tr>
+<tr class="separator:a1c7d9e3718c43df18b21646072c8605e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae2b33dfee60d324916d833b2098b5a6b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#ae2b33dfee60d324916d833b2098b5a6b">operator--</a> (xbInt32 i)</td></tr>
+<tr class="memdesc:ae2b33dfee60d324916d833b2098b5a6b"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator &ndash; <a href="classxb_1_1xbDate.html#ae2b33dfee60d324916d833b2098b5a6b">More...</a><br /></td></tr>
+<tr class="separator:ae2b33dfee60d324916d833b2098b5a6b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3f3a8802c96098c85aa8d0e19717a979"><td class="memItemLeft" align="right" valign="top">xbInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a3f3a8802c96098c85aa8d0e19717a979">operator-</a> (const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;) const</td></tr>
+<tr class="memdesc:a3f3a8802c96098c85aa8d0e19717a979"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator - <a href="classxb_1_1xbDate.html#a3f3a8802c96098c85aa8d0e19717a979">More...</a><br /></td></tr>
+<tr class="separator:a3f3a8802c96098c85aa8d0e19717a979"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a73ff5c037046ac0a0bb7d73f74e25cbb"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a73ff5c037046ac0a0bb7d73f74e25cbb">operator-</a> (xbInt32 i)</td></tr>
+<tr class="memdesc:a73ff5c037046ac0a0bb7d73f74e25cbb"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator - <a href="classxb_1_1xbDate.html#a73ff5c037046ac0a0bb7d73f74e25cbb">More...</a><br /></td></tr>
+<tr class="separator:a73ff5c037046ac0a0bb7d73f74e25cbb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad09609bf78cf038886a4f9cd19423f9c"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#ad09609bf78cf038886a4f9cd19423f9c">operator+</a> (xbInt32 i)</td></tr>
+<tr class="memdesc:ad09609bf78cf038886a4f9cd19423f9c"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator + <a href="classxb_1_1xbDate.html#ad09609bf78cf038886a4f9cd19423f9c">More...</a><br /></td></tr>
+<tr class="separator:ad09609bf78cf038886a4f9cd19423f9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaaf98c1a672066021895f0953b6e94d0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#aaaf98c1a672066021895f0953b6e94d0">operator==</a> (const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;) const</td></tr>
+<tr class="memdesc:aaaf98c1a672066021895f0953b6e94d0"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator == <a href="classxb_1_1xbDate.html#aaaf98c1a672066021895f0953b6e94d0">More...</a><br /></td></tr>
+<tr class="separator:aaaf98c1a672066021895f0953b6e94d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac3aaf8997fc0c36676085e7741f33a8a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#ac3aaf8997fc0c36676085e7741f33a8a">operator!=</a> (const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;) const</td></tr>
+<tr class="memdesc:ac3aaf8997fc0c36676085e7741f33a8a"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator != <a href="classxb_1_1xbDate.html#ac3aaf8997fc0c36676085e7741f33a8a">More...</a><br /></td></tr>
+<tr class="separator:ac3aaf8997fc0c36676085e7741f33a8a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a11f09d97ed527e7ef00ba6f17b9fb02c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a11f09d97ed527e7ef00ba6f17b9fb02c">operator&lt;</a> (const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;) const</td></tr>
+<tr class="memdesc:a11f09d97ed527e7ef00ba6f17b9fb02c"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator &lt; <a href="classxb_1_1xbDate.html#a11f09d97ed527e7ef00ba6f17b9fb02c">More...</a><br /></td></tr>
+<tr class="separator:a11f09d97ed527e7ef00ba6f17b9fb02c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a744031c4031d6ec4595d34acbd1c5860"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a744031c4031d6ec4595d34acbd1c5860">operator&gt;</a> (const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;) const</td></tr>
+<tr class="memdesc:a744031c4031d6ec4595d34acbd1c5860"><td class="mdescLeft">&#160;</td><td class="mdescRight">&gt; <a href="classxb_1_1xbDate.html#a744031c4031d6ec4595d34acbd1c5860">More...</a><br /></td></tr>
+<tr class="separator:a744031c4031d6ec4595d34acbd1c5860"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6d8fa4df4664f3fd8d4cc15e77f6d046"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a6d8fa4df4664f3fd8d4cc15e77f6d046">operator&lt;=</a> (const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;) const</td></tr>
+<tr class="memdesc:a6d8fa4df4664f3fd8d4cc15e77f6d046"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator &lt;= <a href="classxb_1_1xbDate.html#a6d8fa4df4664f3fd8d4cc15e77f6d046">More...</a><br /></td></tr>
+<tr class="separator:a6d8fa4df4664f3fd8d4cc15e77f6d046"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1d81959ea55440588068ea7f82617c99"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a1d81959ea55440588068ea7f82617c99">operator&gt;=</a> (const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;) const</td></tr>
+<tr class="memdesc:a1d81959ea55440588068ea7f82617c99"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator &gt;= <a href="classxb_1_1xbDate.html#a1d81959ea55440588068ea7f82617c99">More...</a><br /></td></tr>
+<tr class="separator:a1d81959ea55440588068ea7f82617c99"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9df58caa54105c489c314785c457e8cb"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a9df58caa54105c489c314785c457e8cb">CalcRollingCenturyForYear</a> (xbInt16 year) const</td></tr>
+<tr class="memdesc:a9df58caa54105c489c314785c457e8cb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculate century for a given year. <a href="classxb_1_1xbDate.html#a9df58caa54105c489c314785c457e8cb">More...</a><br /></td></tr>
+<tr class="separator:a9df58caa54105c489c314785c457e8cb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a38b2c5285c69ed65e94ece6c22dafde0"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a38b2c5285c69ed65e94ece6c22dafde0">CenturyOf</a> () const</td></tr>
+<tr class="memdesc:a38b2c5285c69ed65e94ece6c22dafde0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get century for date. <a href="classxb_1_1xbDate.html#a38b2c5285c69ed65e94ece6c22dafde0">More...</a><br /></td></tr>
+<tr class="separator:a38b2c5285c69ed65e94ece6c22dafde0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9fc29730b66cddfbb58c69992a99cc7c"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a9fc29730b66cddfbb58c69992a99cc7c">CharDayOf</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sOutCharDay)</td></tr>
+<tr class="memdesc:a9fc29730b66cddfbb58c69992a99cc7c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the day of the week. <a href="classxb_1_1xbDate.html#a9fc29730b66cddfbb58c69992a99cc7c">More...</a><br /></td></tr>
+<tr class="separator:a9fc29730b66cddfbb58c69992a99cc7c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afffc84f02bd421335ff8ebe9fb3db0ac"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#afffc84f02bd421335ff8ebe9fb3db0ac">CharMonthOf</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sOutCharMonth)</td></tr>
+<tr class="memdesc:afffc84f02bd421335ff8ebe9fb3db0ac"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the month from the date. <a href="classxb_1_1xbDate.html#afffc84f02bd421335ff8ebe9fb3db0ac">More...</a><br /></td></tr>
+<tr class="separator:afffc84f02bd421335ff8ebe9fb3db0ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a367f66ef0c03c1747c12a18784554ccb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a367f66ef0c03c1747c12a18784554ccb">DateIsValid</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDate8) const</td></tr>
+<tr class="memdesc:a367f66ef0c03c1747c12a18784554ccb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check a date for valid data. <a href="classxb_1_1xbDate.html#a367f66ef0c03c1747c12a18784554ccb">More...</a><br /></td></tr>
+<tr class="separator:a367f66ef0c03c1747c12a18784554ccb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad6417a900ce64a46f8909c0c7a2ddea2"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#ad6417a900ce64a46f8909c0c7a2ddea2">DayOf</a> (xbInt16 iFormat) const</td></tr>
+<tr class="separator:ad6417a900ce64a46f8909c0c7a2ddea2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abb1eb4b0394e4a67aadab15779b1b8c5"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#abb1eb4b0394e4a67aadab15779b1b8c5">CTOD</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sCtodInDate)</td></tr>
+<tr class="memdesc:abb1eb4b0394e4a67aadab15779b1b8c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Format MM/DD/YY date. <a href="classxb_1_1xbDate.html#abb1eb4b0394e4a67aadab15779b1b8c5">More...</a><br /></td></tr>
+<tr class="separator:abb1eb4b0394e4a67aadab15779b1b8c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a01de44dc869f7db99f33046fc91f2c6a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a01de44dc869f7db99f33046fc91f2c6a">FormatDate</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFmtIn, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFmtOut)</td></tr>
+<tr class="separator:a01de44dc869f7db99f33046fc91f2c6a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab43a5d8d929767c0ffdd722972bb8cc0"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#ab43a5d8d929767c0ffdd722972bb8cc0">Str</a> () const</td></tr>
+<tr class="memdesc:ab43a5d8d929767c0ffdd722972bb8cc0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the date value. <a href="classxb_1_1xbDate.html#ab43a5d8d929767c0ffdd722972bb8cc0">More...</a><br /></td></tr>
+<tr class="separator:ab43a5d8d929767c0ffdd722972bb8cc0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af2bd33a72448e2c5ee00d8b711dc5d95"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#af2bd33a72448e2c5ee00d8b711dc5d95">IsLeapYear</a> (xbInt16 iYear) const</td></tr>
+<tr class="memdesc:af2bd33a72448e2c5ee00d8b711dc5d95"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determine if date is a leap year. <a href="classxb_1_1xbDate.html#af2bd33a72448e2c5ee00d8b711dc5d95">More...</a><br /></td></tr>
+<tr class="separator:af2bd33a72448e2c5ee00d8b711dc5d95"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5f8051c31b29244265e8f26ac3547b9b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a5f8051c31b29244265e8f26ac3547b9b">IsLeapYear</a> () const</td></tr>
+<tr class="memdesc:a5f8051c31b29244265e8f26ac3547b9b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determine if date is a leap year. <a href="classxb_1_1xbDate.html#a5f8051c31b29244265e8f26ac3547b9b">More...</a><br /></td></tr>
+<tr class="separator:a5f8051c31b29244265e8f26ac3547b9b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a611a64b14ff89ad3c20b34081ea1e658"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a611a64b14ff89ad3c20b34081ea1e658">IsNull</a> () const</td></tr>
+<tr class="memdesc:a611a64b14ff89ad3c20b34081ea1e658"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determine if date is null date. <a href="classxb_1_1xbDate.html#a611a64b14ff89ad3c20b34081ea1e658">More...</a><br /></td></tr>
+<tr class="separator:a611a64b14ff89ad3c20b34081ea1e658"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1ee3377d4ead9d31099eee539d9b13a7"><td class="memItemLeft" align="right" valign="top">xbInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a1ee3377d4ead9d31099eee539d9b13a7">JulianDays</a> () const</td></tr>
+<tr class="memdesc:a1ee3377d4ead9d31099eee539d9b13a7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculate julian days for a given date. <a href="classxb_1_1xbDate.html#a1ee3377d4ead9d31099eee539d9b13a7">More...</a><br /></td></tr>
+<tr class="separator:a1ee3377d4ead9d31099eee539d9b13a7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9d28b2a46d8aaa284b92f44eeb96b2ff"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a9d28b2a46d8aaa284b92f44eeb96b2ff">JulToDate8</a> (xbInt32 lJulDate)</td></tr>
+<tr class="memdesc:a9d28b2a46d8aaa284b92f44eeb96b2ff"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert the number of julian days to gregorian date. <a href="classxb_1_1xbDate.html#a9d28b2a46d8aaa284b92f44eeb96b2ff">More...</a><br /></td></tr>
+<tr class="separator:a9d28b2a46d8aaa284b92f44eeb96b2ff"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a15847866bb7642aa42bc254e0cf2038a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a15847866bb7642aa42bc254e0cf2038a">LastDayOfMonth</a> ()</td></tr>
+<tr class="memdesc:a15847866bb7642aa42bc254e0cf2038a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the date to the last day of month for a given date. <a href="classxb_1_1xbDate.html#a15847866bb7642aa42bc254e0cf2038a">More...</a><br /></td></tr>
+<tr class="separator:a15847866bb7642aa42bc254e0cf2038a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a08bd84c67e1119d8c5c1748cd89d092e"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a08bd84c67e1119d8c5c1748cd89d092e">MonthOf</a> () const</td></tr>
+<tr class="memdesc:a08bd84c67e1119d8c5c1748cd89d092e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the month for the date. <a href="classxb_1_1xbDate.html#a08bd84c67e1119d8c5c1748cd89d092e">More...</a><br /></td></tr>
+<tr class="separator:a08bd84c67e1119d8c5c1748cd89d092e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4b0cde152b5de0f7d26608d1445110b6"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a4b0cde152b5de0f7d26608d1445110b6">Set</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;Date8)</td></tr>
+<tr class="memdesc:a4b0cde152b5de0f7d26608d1445110b6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the date. <a href="classxb_1_1xbDate.html#a4b0cde152b5de0f7d26608d1445110b6">More...</a><br /></td></tr>
+<tr class="separator:a4b0cde152b5de0f7d26608d1445110b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a40ba54a58d64cf56266f020f91584192"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a40ba54a58d64cf56266f020f91584192">Sysdate</a> ()</td></tr>
+<tr class="memdesc:a40ba54a58d64cf56266f020f91584192"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the date equal to the system date. <a href="classxb_1_1xbDate.html#a40ba54a58d64cf56266f020f91584192">More...</a><br /></td></tr>
+<tr class="separator:a40ba54a58d64cf56266f020f91584192"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a31057dfaa36389a16e40e3db82c46262"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a31057dfaa36389a16e40e3db82c46262">YearOf</a> () const</td></tr>
+<tr class="memdesc:a31057dfaa36389a16e40e3db82c46262"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the year of the date. <a href="classxb_1_1xbDate.html#a31057dfaa36389a16e40e3db82c46262">More...</a><br /></td></tr>
+<tr class="separator:a31057dfaa36389a16e40e3db82c46262"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a97dfa59ab9a8e9f17454da0faceb023d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a97dfa59ab9a8e9f17454da0faceb023d">DisplayError</a> (xbInt16 ErrorCode) const</td></tr>
+<tr class="memdesc:a97dfa59ab9a8e9f17454da0faceb023d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Display error message on console for a given error number. <a href="classxb_1_1xbSsv.html#a97dfa59ab9a8e9f17454da0faceb023d">More...</a><br /></td></tr>
+<tr class="separator:a97dfa59ab9a8e9f17454da0faceb023d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6fbb9c3a550ab0b3378f9586a57791d2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a6fbb9c3a550ab0b3378f9586a57791d2">GetDefaultDateFormat</a> () const</td></tr>
+<tr class="memdesc:a6fbb9c3a550ab0b3378f9586a57791d2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the default date format. <a href="classxb_1_1xbSsv.html#a6fbb9c3a550ab0b3378f9586a57791d2">More...</a><br /></td></tr>
+<tr class="separator:a6fbb9c3a550ab0b3378f9586a57791d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">GetDataDirectory</a> () const</td></tr>
+<tr class="memdesc:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current data directory. <a href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">More...</a><br /></td></tr>
+<tr class="separator:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abfaeef85935331073d213465bb362a61"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abfaeef85935331073d213465bb362a61">GetTempDirectory</a> () const</td></tr>
+<tr class="memdesc:abfaeef85935331073d213465bb362a61"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current temp directory. <a href="classxb_1_1xbSsv.html#abfaeef85935331073d213465bb362a61">More...</a><br /></td></tr>
+<tr class="separator:abfaeef85935331073d213465bb362a61"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">GetHomeDir</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sHomeDirOut)</td></tr>
+<tr class="memdesc:abc9c06c95d71fbad8294e1ae8862cea9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get home directory. <a href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">More...</a><br /></td></tr>
+<tr class="separator:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a49cd162f066eef2b829ba7c9f6620243"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">GetEndianType</a> () const</td></tr>
+<tr class="memdesc:a49cd162f066eef2b829ba7c9f6620243"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the Endian type. <a href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">More...</a><br /></td></tr>
+<tr class="separator:a49cd162f066eef2b829ba7c9f6620243"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a56961d2a67b8e7470098626ac4dac7e4"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">GetErrorMessage</a> (xbInt16 ErrorCode) const</td></tr>
+<tr class="memdesc:a56961d2a67b8e7470098626ac4dac7e4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get an error message. <a href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">More...</a><br /></td></tr>
+<tr class="separator:a56961d2a67b8e7470098626ac4dac7e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a63cee13b473ee13970e93b11837b9e35"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a63cee13b473ee13970e93b11837b9e35">GetPathSeparator</a> () const</td></tr>
+<tr class="memdesc:a63cee13b473ee13970e93b11837b9e35"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the OS dependent path separator. <a href="classxb_1_1xbSsv.html#a63cee13b473ee13970e93b11837b9e35">More...</a><br /></td></tr>
+<tr class="separator:a63cee13b473ee13970e93b11837b9e35"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">SetDataDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDataDirectory)</td></tr>
+<tr class="memdesc:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the data directory. <a href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">More...</a><br /></td></tr>
+<tr class="separator:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5f74db23f8902846d581935c7db73f9c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">SetDefaultDateFormat</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDefaultDateFormat)</td></tr>
+<tr class="memdesc:a5f74db23f8902846d581935c7db73f9c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the default date format. <a href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">More...</a><br /></td></tr>
+<tr class="separator:a5f74db23f8902846d581935c7db73f9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a17c229a20ef9ab4034df8f9cd657adb2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a17c229a20ef9ab4034df8f9cd657adb2">SetTempDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTempDirectory)</td></tr>
+<tr class="memdesc:a17c229a20ef9ab4034df8f9cd657adb2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the temp directory. <a href="classxb_1_1xbSsv.html#a17c229a20ef9ab4034df8f9cd657adb2">More...</a><br /></td></tr>
+<tr class="separator:a17c229a20ef9ab4034df8f9cd657adb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a62e4fd0a5888665c76bbbad962794e72"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72">BitSet</a> (unsigned char c, xbInt16 iBitNo) const</td></tr>
+<tr class="memdesc:a62e4fd0a5888665c76bbbad962794e72"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check a bit in a one byte field and see if it is set. <a href="classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72">More...</a><br /></td></tr>
+<tr class="separator:a62e4fd0a5888665c76bbbad962794e72"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8551b15a3ce4fa2a40d698db01f4a9ae"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a8551b15a3ce4fa2a40d698db01f4a9ae">BitDump</a> (unsigned char c) const</td></tr>
+<tr class="separator:a8551b15a3ce4fa2a40d698db01f4a9ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aba1395b8e4c7f28c3614061de6e49190"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#aba1395b8e4c7f28c3614061de6e49190">BitDump</a> (char c) const</td></tr>
+<tr class="separator:aba1395b8e4c7f28c3614061de6e49190"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6982f973e81587b04916f4509746aaf5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a6982f973e81587b04916f4509746aaf5">GetDefaultAutoCommit</a> () const</td></tr>
+<tr class="memdesc:a6982f973e81587b04916f4509746aaf5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the default auto commit setting. <a href="classxb_1_1xbSsv.html#a6982f973e81587b04916f4509746aaf5">More...</a><br /></td></tr>
+<tr class="separator:a6982f973e81587b04916f4509746aaf5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">SetDefaultAutoCommit</a> (<a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bDefaultAutoCommit)</td></tr>
+<tr class="memdesc:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the default auto commit. <a href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">More...</a><br /></td></tr>
+<tr class="separator:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4822315bded3969b59aeeb683c373051"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a4822315bded3969b59aeeb683c373051">GetLogDirectory</a> () const</td></tr>
+<tr class="separator:a4822315bded3969b59aeeb683c373051"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afaef09435be73b3111f5edbd7091d861"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#afaef09435be73b3111f5edbd7091d861">GetLogFileName</a> () const</td></tr>
+<tr class="separator:afaef09435be73b3111f5edbd7091d861"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7b992ed97281bf25b5b66f5df686225e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a7b992ed97281bf25b5b66f5df686225e">SetLogDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLogDirectory)</td></tr>
+<tr class="separator:a7b992ed97281bf25b5b66f5df686225e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7f05738e7dfd759e89990242ef503544"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a7f05738e7dfd759e89990242ef503544">SetLogFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLogFileName)</td></tr>
+<tr class="separator:a7f05738e7dfd759e89990242ef503544"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">GetMultiUser</a> () const</td></tr>
+<tr class="memdesc:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the multi user setting. <a href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">More...</a><br /></td></tr>
+<tr class="separator:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aba6e59512f7172dd55dcf92059e5928c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#aba6e59512f7172dd55dcf92059e5928c">SetMultiUser</a> (<a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bMultiUser)</td></tr>
+<tr class="memdesc:aba6e59512f7172dd55dcf92059e5928c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the multi user setting. <a href="classxb_1_1xbSsv.html#aba6e59512f7172dd55dcf92059e5928c">More...</a><br /></td></tr>
+<tr class="separator:aba6e59512f7172dd55dcf92059e5928c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-static-attribs" name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:a6219f1b5e24ea12fe158cd5aea56988e"><td class="memItemLeft" align="right" valign="top">static const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a6219f1b5e24ea12fe158cd5aea56988e">ErrorCodeText</a> []</td></tr>
+<tr class="separator:a6219f1b5e24ea12fe158cd5aea56988e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-methods" name="pro-methods"></a>
+Protected Member Functions</h2></td></tr>
+<tr class="memitem:a904ec348fd029d4a76e72b8fde636108"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a904ec348fd029d4a76e72b8fde636108">SetEndianType</a> ()</td></tr>
+<tr class="memdesc:a904ec348fd029d4a76e72b8fde636108"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the endian type. <a href="classxb_1_1xbSsv.html#a904ec348fd029d4a76e72b8fde636108">More...</a><br /></td></tr>
+<tr class="separator:a904ec348fd029d4a76e72b8fde636108"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-static-attribs" name="pro-static-attribs"></a>
+Static Protected Attributes</h2></td></tr>
+<tr class="memitem:a5849e813f5e8e1cd180f0366637adbf3"><td class="memItemLeft" align="right" valign="top">static xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a5849e813f5e8e1cd180f0366637adbf3">iEndianType</a> = 0</td></tr>
+<tr class="separator:a5849e813f5e8e1cd180f0366637adbf3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9dec3164c3b264882df634915ecf21da"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classxb_1_1xbString.html">xbString</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a9dec3164c3b264882df634915ecf21da">sNullString</a> = &quot;&quot;</td></tr>
+<tr class="separator:a9dec3164c3b264882df634915ecf21da"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p ><a class="el" href="classxb_1_1xbDate.html" title="xbDate class.">xbDate</a> class. </p>
+<p >This <a class="el" href="classxb_1_1xbDate.html" title="xbDate class.">xbDate</a> class handles two type of date values:<br />
+</p>
+<p >1) Gregorian dates with a format of CCYYMMDD. This is how dates are stored in dbf files.<br />
+ 2) Julian dates calculated as the number of days since 1901-01-01 + 1721425.<br />
+</p>
+<p >Leap Years: The routines in the class support both leap years (one every four years) and leap centuries (one every four hundred years.)</p>
+<p >A leap year is a year having 366 days, which can be evenly divisible by 4 and not by 100.<br />
+ Leap centuries are years which are evenly divisible by 400.<br />
+</p>
+<p >From a programming perspective, Julian dates are useful for date arithmetic, determining the difference between two dates or calculating a future or past date.<br />
+</p>
+<p >To determine the difference between two dates, convert both dates to a Julian date and subtract one from the other.<br />
+</p>
+<p >To calculate a future or past date, convert the base date to a Julian date, add (or subtract) the number of days necessary to (from) it and convert the julian date back to a Gregorian date. </p>
+</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="ab3150e7db0ab5db10a07d748b55465eb" name="ab3150e7db0ab5db10a07d748b55465eb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab3150e7db0ab5db10a07d748b55465eb">&#9670;&nbsp;</a></span>xbDate() <span class="overload">[1/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xb::xbDate::xbDate </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Constructor. </p>
+
+</div>
+</div>
+<a id="ac8a4d9330221a3daee21b3c28c1d9719" name="ac8a4d9330221a3daee21b3c28c1d9719"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac8a4d9330221a3daee21b3c28c1d9719">&#9670;&nbsp;</a></span>xbDate() <span class="overload">[2/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xb::xbDate::xbDate </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>sDate8In</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Constructor. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sDate8In</td><td>- Input date. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="acf4546f5681735ede18210f60bab68d4" name="acf4546f5681735ede18210f60bab68d4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acf4546f5681735ede18210f60bab68d4">&#9670;&nbsp;</a></span>xbDate() <span class="overload">[3/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xb::xbDate::xbDate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sDate8In</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Constructor. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sDate8In</td><td>- Input date. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a7ab727a7ec184a086ad36ef83b948170" name="a7ab727a7ec184a086ad36ef83b948170"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7ab727a7ec184a086ad36ef83b948170">&#9670;&nbsp;</a></span>xbDate() <span class="overload">[4/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xb::xbDate::xbDate </td>
+ <td>(</td>
+ <td class="paramtype">xbInt32&#160;</td>
+ <td class="paramname"><em>lJulDate</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Constructor. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">lJulDate</td><td>- Input julian date. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a8dfc827b466be3c5e3def599277dfa43" name="a8dfc827b466be3c5e3def599277dfa43"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8dfc827b466be3c5e3def599277dfa43">&#9670;&nbsp;</a></span>xbDate() <span class="overload">[5/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xb::xbDate::xbDate </td>
+ <td>(</td>
+ <td class="paramtype">xbUInt16&#160;</td>
+ <td class="paramname"><em>iInit</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Constructor. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iInitOpt</td><td>- Constructor to use to initialize date static variables Called by the main xbXbase::xbXBase constructor </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a05c9680c6eb9fe07ecf13a189b596c37" name="a05c9680c6eb9fe07ecf13a189b596c37"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a05c9680c6eb9fe07ecf13a189b596c37">&#9670;&nbsp;</a></span>~xbDate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xb::xbDate::~xbDate </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Destructor. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="aba1395b8e4c7f28c3614061de6e49190" name="aba1395b8e4c7f28c3614061de6e49190"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aba1395b8e4c7f28c3614061de6e49190">&#9670;&nbsp;</a></span>BitDump() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::BitDump </td>
+ <td>(</td>
+ <td class="paramtype">char&#160;</td>
+ <td class="paramname"><em>c</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8551b15a3ce4fa2a40d698db01f4a9ae" name="a8551b15a3ce4fa2a40d698db01f4a9ae"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8551b15a3ce4fa2a40d698db01f4a9ae">&#9670;&nbsp;</a></span>BitDump() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::BitDump </td>
+ <td>(</td>
+ <td class="paramtype">unsigned char&#160;</td>
+ <td class="paramname"><em>c</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a62e4fd0a5888665c76bbbad962794e72" name="a62e4fd0a5888665c76bbbad962794e72"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a62e4fd0a5888665c76bbbad962794e72">&#9670;&nbsp;</a></span>BitSet()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbSsv::BitSet </td>
+ <td>(</td>
+ <td class="paramtype">unsigned char&#160;</td>
+ <td class="paramname"><em>c</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iBitNo</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Check a bit in a one byte field and see if it is set. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>One byte char field to examine. </td></tr>
+ <tr><td class="paramname">iBitNo</td><td>which bit to examine. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue Bit is set<br />
+ xbFalse Bit is not set </dd></dl>
+
+</div>
+</div>
+<a id="a9df58caa54105c489c314785c457e8cb" name="a9df58caa54105c489c314785c457e8cb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9df58caa54105c489c314785c457e8cb">&#9670;&nbsp;</a></span>CalcRollingCenturyForYear()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDate::CalcRollingCenturyForYear </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iCalcYear</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Calculate century for a given year. </p>
+<p >This routine calculates a century for a given year. It uses an 80/20 rolling date window to calculate the century.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iCalcYear</td><td>- Two digit year to calculate a century for. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Century calculated for the two digit year. </dd></dl>
+
+</div>
+</div>
+<a id="a38b2c5285c69ed65e94ece6c22dafde0" name="a38b2c5285c69ed65e94ece6c22dafde0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a38b2c5285c69ed65e94ece6c22dafde0">&#9670;&nbsp;</a></span>CenturyOf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDate::CenturyOf </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get century for date. </p>
+<dl class="section return"><dt>Returns</dt><dd>the century from the valid date. or 0 for a null date. </dd></dl>
+
+</div>
+</div>
+<a id="a9fc29730b66cddfbb58c69992a99cc7c" name="a9fc29730b66cddfbb58c69992a99cc7c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9fc29730b66cddfbb58c69992a99cc7c">&#9670;&nbsp;</a></span>CharDayOf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDate::CharDayOf </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sOutCharDay</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get the day of the week. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sOutCharDay</td><td>- Output character day of week (Sun-Sat). </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>XB_INVALID_DATE<br />
+XB_NO_ERROR </dd></dl>
+
+</div>
+</div>
+<a id="afffc84f02bd421335ff8ebe9fb3db0ac" name="afffc84f02bd421335ff8ebe9fb3db0ac"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afffc84f02bd421335ff8ebe9fb3db0ac">&#9670;&nbsp;</a></span>CharMonthOf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDate::CharMonthOf </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sOutCharMonth</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get the month from the date. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sOutCharMonth</td><td>- Output character month. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>XB_INVALID_DATE<br />
+XB_NO_ERROR </dd></dl>
+
+</div>
+</div>
+<a id="abb1eb4b0394e4a67aadab15779b1b8c5" name="abb1eb4b0394e4a67aadab15779b1b8c5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abb1eb4b0394e4a67aadab15779b1b8c5">&#9670;&nbsp;</a></span>CTOD()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDate::CTOD </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sCtodInDate</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Format MM/DD/YY date. </p>
+<p >This routine takes an MM/DD/YY format date as input and populates a date class with the appropriate YYYYMMDD data.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sCtodInDate</td><td>- MM/DD/YY formatted date as input. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>XB_INVALID_OPTION<br />
+XB_NO_ERROR </dd></dl>
+
+</div>
+</div>
+<a id="a367f66ef0c03c1747c12a18784554ccb" name="a367f66ef0c03c1747c12a18784554ccb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a367f66ef0c03c1747c12a18784554ccb">&#9670;&nbsp;</a></span>DateIsValid()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbDate::DateIsValid </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sDateIn</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Check a date for valid data. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sDateIn</td><td>- Date to check for valid formaat of CCYYMMDD. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue - Valid date.<br />
+xbFalse - Not a valid date. </dd></dl>
+
+</div>
+</div>
+<a id="ad6417a900ce64a46f8909c0c7a2ddea2" name="ad6417a900ce64a46f8909c0c7a2ddea2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad6417a900ce64a46f8909c0c7a2ddea2">&#9670;&nbsp;</a></span>DayOf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDate::DayOf </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iFormat</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p >This routine returns the numeric day. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iFormat</td><td>XB_FMT_WEEK Number of day in WEEK 0-6 ( Sat - Fri )<br />
+ XB_FMT_MONTH Number of day in MONTH 1-31<br />
+ XB_FMT_YEAR Number of day in YEAR 1-366 </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>XB_INVALID_OPTION<br />
+XB_NO_ERROR </dd></dl>
+
+</div>
+</div>
+<a id="a97dfa59ab9a8e9f17454da0faceb023d" name="a97dfa59ab9a8e9f17454da0faceb023d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a97dfa59ab9a8e9f17454da0faceb023d">&#9670;&nbsp;</a></span>DisplayError()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::DisplayError </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iErrorCode</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Display error message on console for a given error number. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iErrorCode</td><td>Error number to reference </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a01de44dc869f7db99f33046fc91f2c6a" name="a01de44dc869f7db99f33046fc91f2c6a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a01de44dc869f7db99f33046fc91f2c6a">&#9670;&nbsp;</a></span>FormatDate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDate::FormatDate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFmtIn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sOutFmtDate</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p >This routine will reformat a date based on the format specifiers entered in sFmtIn. If no input format is specified, the routine will use the system default date format.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFmtIn</td><td>- A format specifier with the following paramaters:<br />
+ <pre class="fragment"> 1) YYDDD - A julian date format
+ 2) YY or YYYY will print a 2 or 4 digit year
+ 3) M,MM,MMM or MMMM
+ M - one digit month if no leading zero
+ MM - two digit month, contains leading zero
+ MMM - Jan through Dec
+ MMMM - January through December
+ 4) D,DD,DDD or DDDD
+ D - one digit dayif no leading zero
+ DD - two digit day, contains leading zero
+ DDD - Sun through Sat (or julian if YYDDD)
+ DDDD - Sunday through Saturday
+</pre> </td></tr>
+ <tr><td class="paramname">sOutFmtDate</td><td>- Reformatted output date. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>XB_NO_ERROR <br />
+<br />
+ Format Examples:<br />
+ MM/DD/YY<br />
+ YYYY-MM-DD<br />
+ DDDDDDDDDDD MMMMMMMMMMM DD,YYYY </dd></dl>
+
+</div>
+</div>
+<a id="a1d803a4bfc8ba0561267a0bf9e51f7d9" name="a1d803a4bfc8ba0561267a0bf9e51f7d9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1d803a4bfc8ba0561267a0bf9e51f7d9">&#9670;&nbsp;</a></span>GetDataDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetDataDirectory </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the current data directory. </p>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing the current data directory where the database files are stored. </dd></dl>
+
+</div>
+</div>
+<a id="a6982f973e81587b04916f4509746aaf5" name="a6982f973e81587b04916f4509746aaf5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6982f973e81587b04916f4509746aaf5">&#9670;&nbsp;</a></span>GetDefaultAutoCommit()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbSsv::GetDefaultAutoCommit </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the default auto commit setting. </p>
+<p >When auto commit is enabled, the library will automatically post any updates when moving off an updated record or closing files. If auto commit is disabled, the application program will need to explicitly update the tables using using dbf-&gt;Put() and dbf-&gt;AppendRecord().</p>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue if auto commit is turned on<br />
+ xbFalse is auto commit is turned off </dd></dl>
+
+</div>
+</div>
+<a id="a6fbb9c3a550ab0b3378f9586a57791d2" name="a6fbb9c3a550ab0b3378f9586a57791d2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6fbb9c3a550ab0b3378f9586a57791d2">&#9670;&nbsp;</a></span>GetDefaultDateFormat()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetDefaultDateFormat </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the default date format. </p>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing the default date format. </dd></dl>
+
+</div>
+</div>
+<a id="a49cd162f066eef2b829ba7c9f6620243" name="a49cd162f066eef2b829ba7c9f6620243"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a49cd162f066eef2b829ba7c9f6620243">&#9670;&nbsp;</a></span>GetEndianType()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbSsv::GetEndianType </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the Endian type. </p>
+<dl class="section return"><dt>Returns</dt><dd>B - Big endian<br />
+ L - Little endian<br />
+ </dd></dl>
+
+</div>
+</div>
+<a id="a56961d2a67b8e7470098626ac4dac7e4" name="a56961d2a67b8e7470098626ac4dac7e4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a56961d2a67b8e7470098626ac4dac7e4">&#9670;&nbsp;</a></span>GetErrorMessage()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char * xb::xbSsv::GetErrorMessage </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iErrorCode</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get an error message. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iErrorCode</td><td>ErrorCode is the error number of description to be returned. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Returns a pointer to a string containing a text description for the error code. </dd></dl>
+
+</div>
+</div>
+<a id="abc9c06c95d71fbad8294e1ae8862cea9" name="abc9c06c95d71fbad8294e1ae8862cea9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abc9c06c95d71fbad8294e1ae8862cea9">&#9670;&nbsp;</a></span>GetHomeDir()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::GetHomeDir </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sHomeDirOut</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get home directory. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sHomeDirOut</td><td>- Output home directory for current user. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a4822315bded3969b59aeeb683c373051" name="a4822315bded3969b59aeeb683c373051"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4822315bded3969b59aeeb683c373051">&#9670;&nbsp;</a></span>GetLogDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetLogDirectory </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="afaef09435be73b3111f5edbd7091d861" name="afaef09435be73b3111f5edbd7091d861"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afaef09435be73b3111f5edbd7091d861">&#9670;&nbsp;</a></span>GetLogFileName()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetLogFileName </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abd58031c5f1c3766c24d47a82e6fd9c5" name="abd58031c5f1c3766c24d47a82e6fd9c5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abd58031c5f1c3766c24d47a82e6fd9c5">&#9670;&nbsp;</a></span>GetMultiUser()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbSsv::GetMultiUser </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the multi user setting. </p>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue - Multi user mode turned on.<br />
+ xbFalse - Multi user mode turned off.<br />
+ </dd></dl>
+
+</div>
+</div>
+<a id="a63cee13b473ee13970e93b11837b9e35" name="a63cee13b473ee13970e93b11837b9e35"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a63cee13b473ee13970e93b11837b9e35">&#9670;&nbsp;</a></span>GetPathSeparator()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">char xb::xbSsv::GetPathSeparator </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the OS dependent path separator. </p>
+<dl class="section return"><dt>Returns</dt><dd>Returns '\' for windows environment, otherwise returns '/'. </dd></dl>
+
+</div>
+</div>
+<a id="abfaeef85935331073d213465bb362a61" name="abfaeef85935331073d213465bb362a61"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abfaeef85935331073d213465bb362a61">&#9670;&nbsp;</a></span>GetTempDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetTempDirectory </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the current temp directory. </p>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing the current data directory where the database files are stored. </dd></dl>
+
+</div>
+</div>
+<a id="a5f8051c31b29244265e8f26ac3547b9b" name="a5f8051c31b29244265e8f26ac3547b9b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5f8051c31b29244265e8f26ac3547b9b">&#9670;&nbsp;</a></span>IsLeapYear() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbDate::IsLeapYear </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Determine if date is a leap year. </p>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue - Is leapyear.<br />
+ xbFalse - Not a leap year. </dd></dl>
+
+</div>
+</div>
+<a id="af2bd33a72448e2c5ee00d8b711dc5d95" name="af2bd33a72448e2c5ee00d8b711dc5d95"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af2bd33a72448e2c5ee00d8b711dc5d95">&#9670;&nbsp;</a></span>IsLeapYear() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbDate::IsLeapYear </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iYear</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Determine if date is a leap year. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iYear</td><td>- Year to check for leap year status. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue - Is leapyear.<br />
+ xbFalse - Not a leap year. </dd></dl>
+
+</div>
+</div>
+<a id="a611a64b14ff89ad3c20b34081ea1e658" name="a611a64b14ff89ad3c20b34081ea1e658"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a611a64b14ff89ad3c20b34081ea1e658">&#9670;&nbsp;</a></span>IsNull()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbDate::IsNull </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Determine if date is null date. </p>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue - If null date.<br />
+ xbFalse - Not a null date. </dd></dl>
+
+</div>
+</div>
+<a id="a1ee3377d4ead9d31099eee539d9b13a7" name="a1ee3377d4ead9d31099eee539d9b13a7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1ee3377d4ead9d31099eee539d9b13a7">&#9670;&nbsp;</a></span>JulianDays()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt32 xb::xbDate::JulianDays </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Calculate julian days for a given date. </p>
+<dl class="section return"><dt>Returns</dt><dd>The number of days since 01/01/0001 + JUL_OFFSET. </dd></dl>
+
+</div>
+</div>
+<a id="a9d28b2a46d8aaa284b92f44eeb96b2ff" name="a9d28b2a46d8aaa284b92f44eeb96b2ff"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9d28b2a46d8aaa284b92f44eeb96b2ff">&#9670;&nbsp;</a></span>JulToDate8()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDate::JulToDate8 </td>
+ <td>(</td>
+ <td class="paramtype">xbInt32&#160;</td>
+ <td class="paramname"><em>lJulDays</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Convert the number of julian days to gregorian date. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">lJulDays</td><td>- Julian days. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>XB_NO_ERROR </dd></dl>
+
+</div>
+</div>
+<a id="a15847866bb7642aa42bc254e0cf2038a" name="a15847866bb7642aa42bc254e0cf2038a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a15847866bb7642aa42bc254e0cf2038a">&#9670;&nbsp;</a></span>LastDayOfMonth()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDate::LastDayOfMonth </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Set the date to the last day of month for a given date. </p>
+<p >This routine sets the last date of the month. </p><dl class="section return"><dt>Returns</dt><dd>XB_NO_ERROR </dd></dl>
+
+</div>
+</div>
+<a id="a08bd84c67e1119d8c5c1748cd89d092e" name="a08bd84c67e1119d8c5c1748cd89d092e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a08bd84c67e1119d8c5c1748cd89d092e">&#9670;&nbsp;</a></span>MonthOf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDate::MonthOf </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return the month for the date. </p>
+<dl class="section return"><dt>Returns</dt><dd>The month of the date. </dd></dl>
+
+</div>
+</div>
+<a id="ac3aaf8997fc0c36676085e7741f33a8a" name="ac3aaf8997fc0c36676085e7741f33a8a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac3aaf8997fc0c36676085e7741f33a8a">&#9670;&nbsp;</a></span>operator!=()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbDate::operator!= </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;&#160;</td>
+ <td class="paramname"><em>dt</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>operator != </p>
+<p >This routine compares two dates for inequality. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">dt</td><td>- Date to compare. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue - Dates don't match.<br />
+xbFalse - Dates match. </dd></dl>
+
+</div>
+</div>
+<a id="ad09609bf78cf038886a4f9cd19423f9c" name="ad09609bf78cf038886a4f9cd19423f9c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad09609bf78cf038886a4f9cd19423f9c">&#9670;&nbsp;</a></span>operator+()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char * xb::xbDate::operator+ </td>
+ <td>(</td>
+ <td class="paramtype">xbInt32&#160;</td>
+ <td class="paramname"><em>lCount</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>operator + </p>
+<p >This routine adds additional days to a valid date field. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">lCount</td><td>- Number of days to add. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>New date in CCYYMMDD format. </dd></dl>
+
+</div>
+</div>
+<a id="a1c7d9e3718c43df18b21646072c8605e" name="a1c7d9e3718c43df18b21646072c8605e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1c7d9e3718c43df18b21646072c8605e">&#9670;&nbsp;</a></span>operator++()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbDate::operator++ </td>
+ <td>(</td>
+ <td class="paramtype">xbInt32&#160;</td>
+ <td class="paramname"><em>i</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>operator ++ </p>
+<p >This routine adds one day to the date field if the date is not null. </p>
+
+</div>
+</div>
+<a id="a947ba156d04fe063aaa4c9964ae5d163" name="a947ba156d04fe063aaa4c9964ae5d163"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a947ba156d04fe063aaa4c9964ae5d163">&#9670;&nbsp;</a></span>operator+=()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbDate::operator+= </td>
+ <td>(</td>
+ <td class="paramtype">xbInt32&#160;</td>
+ <td class="paramname"><em>lDays</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>operator += </p>
+<p >This routine adds lDays to the date if the date is not null. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">lDays</td><td>- Number of days to add to the date. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a3f3a8802c96098c85aa8d0e19717a979" name="a3f3a8802c96098c85aa8d0e19717a979"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3f3a8802c96098c85aa8d0e19717a979">&#9670;&nbsp;</a></span>operator-() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt32 xb::xbDate::operator- </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;&#160;</td>
+ <td class="paramname"><em>dt</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>operator - </p>
+<p >This routine subtracts one date from another date returning the difference. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">dt</td><td>- Date to subtract </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Number of days difference or zero if one of the dates is null. </dd></dl>
+
+</div>
+</div>
+<a id="a73ff5c037046ac0a0bb7d73f74e25cbb" name="a73ff5c037046ac0a0bb7d73f74e25cbb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a73ff5c037046ac0a0bb7d73f74e25cbb">&#9670;&nbsp;</a></span>operator-() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char * xb::xbDate::operator- </td>
+ <td>(</td>
+ <td class="paramtype">xbInt32&#160;</td>
+ <td class="paramname"><em>lCount</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>operator - </p>
+<p >This routine subtracts days from a valid date field. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">lCount</td><td>- Number of days to subtract. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>New date in CCYYMMDD format. </dd></dl>
+
+</div>
+</div>
+<a id="ae2b33dfee60d324916d833b2098b5a6b" name="ae2b33dfee60d324916d833b2098b5a6b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae2b33dfee60d324916d833b2098b5a6b">&#9670;&nbsp;</a></span>operator--()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbDate::operator-- </td>
+ <td>(</td>
+ <td class="paramtype">xbInt32&#160;</td>
+ <td class="paramname"><em>i</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>operator &ndash; </p>
+<p >This routine subtracts one day from the date field if the date is not null. </p>
+
+</div>
+</div>
+<a id="a4a8f207d759540114373f5e9d6d375f7" name="a4a8f207d759540114373f5e9d6d375f7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4a8f207d759540114373f5e9d6d375f7">&#9670;&nbsp;</a></span>operator-=()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbDate::operator-= </td>
+ <td>(</td>
+ <td class="paramtype">xbInt32&#160;</td>
+ <td class="paramname"><em>lDays</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>operator -= </p>
+<p >This routine subtracts lDays from the date if the date is not null. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">lDays</td><td>- Number of days to subtract from the date. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a11f09d97ed527e7ef00ba6f17b9fb02c" name="a11f09d97ed527e7ef00ba6f17b9fb02c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a11f09d97ed527e7ef00ba6f17b9fb02c">&#9670;&nbsp;</a></span>operator&lt;()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbDate::operator&lt; </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;&#160;</td>
+ <td class="paramname"><em>dt</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>operator &lt; </p>
+<p >This routine compares two dates </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">dt</td><td>- Date to compare. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue - Left date is less than right date.<br />
+ xbFalse - Left date is not less than right date. </dd></dl>
+
+</div>
+</div>
+<a id="a6d8fa4df4664f3fd8d4cc15e77f6d046" name="a6d8fa4df4664f3fd8d4cc15e77f6d046"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6d8fa4df4664f3fd8d4cc15e77f6d046">&#9670;&nbsp;</a></span>operator&lt;=()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbDate::operator&lt;= </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;&#160;</td>
+ <td class="paramname"><em>dt</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>operator &lt;= </p>
+<p >This routine compares two dates </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">dt</td><td>- Date to compare. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue - Left date is less than or equal to right date.<br />
+ xbFalse - Left date is not less than or equal to right date. </dd></dl>
+
+</div>
+</div>
+<a id="a2e33ad9415c32e820e08fd8084198690" name="a2e33ad9415c32e820e08fd8084198690"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2e33ad9415c32e820e08fd8084198690">&#9670;&nbsp;</a></span>operator=()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbDate::operator= </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;&#160;</td>
+ <td class="paramname"><em>dt</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Set operator=. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">dt</td><td>- Date value for set operation. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="aaaf98c1a672066021895f0953b6e94d0" name="aaaf98c1a672066021895f0953b6e94d0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaaf98c1a672066021895f0953b6e94d0">&#9670;&nbsp;</a></span>operator==()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbDate::operator== </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;&#160;</td>
+ <td class="paramname"><em>dt</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>operator == </p>
+<p >This routine compares two dates for equality. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">dt</td><td>- Date to compare. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue - Dates match.<br />
+xbFalse - Dates don't match. </dd></dl>
+
+</div>
+</div>
+<a id="a744031c4031d6ec4595d34acbd1c5860" name="a744031c4031d6ec4595d34acbd1c5860"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a744031c4031d6ec4595d34acbd1c5860">&#9670;&nbsp;</a></span>operator&gt;()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbDate::operator&gt; </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;&#160;</td>
+ <td class="paramname"><em>dt</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>&gt; </p>
+<p >This routine compares two dates </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">dt</td><td>- Date to compare. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue - Left date is greater than right date.<br />
+ xbFalse - Left date is not greater than right date. </dd></dl>
+
+</div>
+</div>
+<a id="a1d81959ea55440588068ea7f82617c99" name="a1d81959ea55440588068ea7f82617c99"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1d81959ea55440588068ea7f82617c99">&#9670;&nbsp;</a></span>operator&gt;=()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbDate::operator&gt;= </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;&#160;</td>
+ <td class="paramname"><em>dt</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>operator &gt;= </p>
+<p >This routine compares two dates </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">dt</td><td>- Date to compare. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue - Left date is greater than or equal to right date.<br />
+ xbFalse - Left date is not greater than or equal to right date. </dd></dl>
+
+</div>
+</div>
+<a id="a4b0cde152b5de0f7d26608d1445110b6" name="a4b0cde152b5de0f7d26608d1445110b6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4b0cde152b5de0f7d26608d1445110b6">&#9670;&nbsp;</a></span>Set()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDate::Set </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sDateIn</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Set the date. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sDateIn</td><td>- Input date. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>XB_NO_ERROR </dd></dl>
+
+</div>
+</div>
+<a id="a57caaaadfbd089d9a58ecfcb50c88a6c" name="a57caaaadfbd089d9a58ecfcb50c88a6c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a57caaaadfbd089d9a58ecfcb50c88a6c">&#9670;&nbsp;</a></span>SetDataDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetDataDirectory </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sDataDirectory</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Set the data directory. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sDataDirectory</td><td>Set the data directory. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a25542afadaaf39b4fb5a1772a29cc0bd" name="a25542afadaaf39b4fb5a1772a29cc0bd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a25542afadaaf39b4fb5a1772a29cc0bd">&#9670;&nbsp;</a></span>SetDefaultAutoCommit()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetDefaultAutoCommit </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td>
+ <td class="paramname"><em>bDefaultAutoCommit</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Set the default auto commit. </p>
+<p >Disabling auto commit requires the application execute explicit updates using dbf-&gt;Put() and dbf-&gt;AppendRecord(). With auto commit on, the library posts updates automatically when moving off the current record or closing a file.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">bDefaultAutoCommit</td><td>xbTrue - Enable default auto commit.<br />
+ xbFalse - Disable default auto commit.<br />
+ </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a5f74db23f8902846d581935c7db73f9c" name="a5f74db23f8902846d581935c7db73f9c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5f74db23f8902846d581935c7db73f9c">&#9670;&nbsp;</a></span>SetDefaultDateFormat()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetDefaultDateFormat </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sDefaultDateFormat</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Set the default date format. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sDefaultDateFormat</td><td>Set the default date format. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a904ec348fd029d4a76e72b8fde636108" name="a904ec348fd029d4a76e72b8fde636108"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a904ec348fd029d4a76e72b8fde636108">&#9670;&nbsp;</a></span>SetEndianType()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetEndianType </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Set the endian type. </p>
+<p >This routine determines the Endian-ness at run time instead of compile time as some processers (ie; Sparc,ARM) can be switched either way. This routine is called automatically by the library at startup and does not need to be called in an application program. </p>
+
+</div>
+</div>
+<a id="a7b992ed97281bf25b5b66f5df686225e" name="a7b992ed97281bf25b5b66f5df686225e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7b992ed97281bf25b5b66f5df686225e">&#9670;&nbsp;</a></span>SetLogDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetLogDirectory </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sLogDirectory</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7f05738e7dfd759e89990242ef503544" name="a7f05738e7dfd759e89990242ef503544"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7f05738e7dfd759e89990242ef503544">&#9670;&nbsp;</a></span>SetLogFileName()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetLogFileName </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sLogFileName</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aba6e59512f7172dd55dcf92059e5928c" name="aba6e59512f7172dd55dcf92059e5928c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aba6e59512f7172dd55dcf92059e5928c">&#9670;&nbsp;</a></span>SetMultiUser()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetMultiUser </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td>
+ <td class="paramname"><em>bMultiUser</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the multi user setting. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">bMultiUser</td><td>xbTrue - Turn on Multi user mode.<br />
+ xbFalse - Turn off Multi user mode.<br />
+ </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a17c229a20ef9ab4034df8f9cd657adb2" name="a17c229a20ef9ab4034df8f9cd657adb2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a17c229a20ef9ab4034df8f9cd657adb2">&#9670;&nbsp;</a></span>SetTempDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetTempDirectory </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sTempDirectory</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Set the temp directory. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sTempDirectory</td><td>Set the data direcroty. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="ab43a5d8d929767c0ffdd722972bb8cc0" name="ab43a5d8d929767c0ffdd722972bb8cc0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab43a5d8d929767c0ffdd722972bb8cc0">&#9670;&nbsp;</a></span>Str()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char * xb::xbDate::Str </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return the date value. </p>
+<dl class="section return"><dt>Returns</dt><dd>char ptr to date value. </dd></dl>
+
+</div>
+</div>
+<a id="a40ba54a58d64cf56266f020f91584192" name="a40ba54a58d64cf56266f020f91584192"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a40ba54a58d64cf56266f020f91584192">&#9670;&nbsp;</a></span>Sysdate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDate::Sysdate </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Set the date equal to the system date. </p>
+<dl class="section return"><dt>Returns</dt><dd>XB_NO_ERROR </dd></dl>
+
+</div>
+</div>
+<a id="a31057dfaa36389a16e40e3db82c46262" name="a31057dfaa36389a16e40e3db82c46262"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a31057dfaa36389a16e40e3db82c46262">&#9670;&nbsp;</a></span>YearOf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDate::YearOf </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the year of the date. </p>
+<dl class="section return"><dt>Returns</dt><dd>The year of the date. </dd></dl>
+
+</div>
+</div>
+<h2 class="groupheader">Field Documentation</h2>
+<a id="a6219f1b5e24ea12fe158cd5aea56988e" name="a6219f1b5e24ea12fe158cd5aea56988e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6219f1b5e24ea12fe158cd5aea56988e">&#9670;&nbsp;</a></span>ErrorCodeText</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* xb::xbSsv::ErrorCodeText[]</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5849e813f5e8e1cd180f0366637adbf3" name="a5849e813f5e8e1cd180f0366637adbf3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5849e813f5e8e1cd180f0366637adbf3">&#9670;&nbsp;</a></span>iEndianType</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbSsv::iEndianType = 0</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">protected</span><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9dec3164c3b264882df634915ecf21da" name="a9dec3164c3b264882df634915ecf21da"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9dec3164c3b264882df634915ecf21da">&#9670;&nbsp;</a></span>sNullString</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> xb::xbSsv::sNullString = &quot;&quot;</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">protected</span><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>/mnt/1Tdata/xbase/xbase64-4.1.4/src/include/<a class="el" href="xbdate_8h_source.html">xbdate.h</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.1.4/src/core/<a class="el" href="xbdate_8cpp.html">xbdate.cpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/docs/doxygen/html/classxb_1_1xbDate.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbDate.png
index 350c1be..350c1be 100644
--- a/docs/doxygen/html/classxb_1_1xbDate.png
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbDate.png
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbDbf.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbDbf.html
new file mode 100644
index 0000000..90318db
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbDbf.html
@@ -0,0 +1,9346 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: xb::xbDbf Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="namespacexb.html">xb</a></li><li class="navelem"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-static-attribs">Static Public Attributes</a> &#124;
+<a href="#pro-methods">Protected Member Functions</a> &#124;
+<a href="#pro-attribs">Protected Attributes</a> &#124;
+<a href="#pro-static-attribs">Static Protected Attributes</a> </div>
+ <div class="headertitle"><div class="title">xb::xbDbf Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Base class for handling dbf files/tables.
+ <a href="classxb_1_1xbDbf.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="xbdbf_8h_source.html">xbdbf.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for xb::xbDbf:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="classxb_1_1xbDbf.png" usemap="#xb::xbDbf_map" alt=""/>
+ <map id="xb::xbDbf_map" name="xb::xbDbf_map">
+<area href="classxb_1_1xbFile.html" title="Class for handling low level file I/O." alt="xb::xbFile" shape="rect" coords="0,56,65,80"/>
+<area href="classxb_1_1xbSsv.html" title="Class for handling shared system variables." alt="xb::xbSsv" shape="rect" coords="0,0,65,24"/>
+ </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a84a75f80bc0e9b8a22b728767949c204"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a84a75f80bc0e9b8a22b728767949c204">xbDbf</a> (<a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *x)</td></tr>
+<tr class="memdesc:a84a75f80bc0e9b8a22b728767949c204"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor. <a href="classxb_1_1xbDbf.html#a84a75f80bc0e9b8a22b728767949c204">More...</a><br /></td></tr>
+<tr class="separator:a84a75f80bc0e9b8a22b728767949c204"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7eb87521fba8a939c613056d9918d880"><td class="memItemLeft" align="right" valign="top">virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a7eb87521fba8a939c613056d9918d880">~xbDbf</a> ()</td></tr>
+<tr class="memdesc:a7eb87521fba8a939c613056d9918d880"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destructor. <a href="classxb_1_1xbDbf.html#a7eb87521fba8a939c613056d9918d880">More...</a><br /></td></tr>
+<tr class="separator:a7eb87521fba8a939c613056d9918d880"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4edcf31390fbdc8c3558004770fd9f2f"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a4edcf31390fbdc8c3558004770fd9f2f">Abort</a> ()</td></tr>
+<tr class="memdesc:a4edcf31390fbdc8c3558004770fd9f2f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Abort any uncommited changes for the current record buffer. <a href="classxb_1_1xbDbf.html#a4edcf31390fbdc8c3558004770fd9f2f">More...</a><br /></td></tr>
+<tr class="separator:a4edcf31390fbdc8c3558004770fd9f2f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5b412dd796241673eb1aa2c93513d69b"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a5b412dd796241673eb1aa2c93513d69b">AppendRecord</a> ()</td></tr>
+<tr class="memdesc:a5b412dd796241673eb1aa2c93513d69b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Append the current record to the data file. <a href="classxb_1_1xbDbf.html#a5b412dd796241673eb1aa2c93513d69b">More...</a><br /></td></tr>
+<tr class="separator:a5b412dd796241673eb1aa2c93513d69b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a78da5a3d2011a3f2e7618cbdd3ba02d6"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a78da5a3d2011a3f2e7618cbdd3ba02d6">BlankRecord</a> ()</td></tr>
+<tr class="memdesc:a78da5a3d2011a3f2e7618cbdd3ba02d6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Blank the record buffer. <a href="classxb_1_1xbDbf.html#a78da5a3d2011a3f2e7618cbdd3ba02d6">More...</a><br /></td></tr>
+<tr class="separator:a78da5a3d2011a3f2e7618cbdd3ba02d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abd69532c885ab72bcf3fb5066b318f4f"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#abd69532c885ab72bcf3fb5066b318f4f">Commit</a> ()</td></tr>
+<tr class="memdesc:abd69532c885ab72bcf3fb5066b318f4f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Commit updates to disk. <a href="classxb_1_1xbDbf.html#abd69532c885ab72bcf3fb5066b318f4f">More...</a><br /></td></tr>
+<tr class="separator:abd69532c885ab72bcf3fb5066b318f4f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad68d73113e54e1b5f326e90f45e9989d"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ad68d73113e54e1b5f326e90f45e9989d">Close</a> ()</td></tr>
+<tr class="memdesc:ad68d73113e54e1b5f326e90f45e9989d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Close DBF file/table. <a href="classxb_1_1xbDbf.html#ad68d73113e54e1b5f326e90f45e9989d">More...</a><br /></td></tr>
+<tr class="separator:ad68d73113e54e1b5f326e90f45e9989d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a829c615a130a1fdf609d93438d8a6264"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a829c615a130a1fdf609d93438d8a6264">CopyDbfStructure</a> (<a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *dNewTable, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTableAlias, xbInt16 iOverlay, xbInt16 iShareMode)</td></tr>
+<tr class="memdesc:a829c615a130a1fdf609d93438d8a6264"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy table (dbf) file structure. <a href="classxb_1_1xbDbf.html#a829c615a130a1fdf609d93438d8a6264">More...</a><br /></td></tr>
+<tr class="separator:a829c615a130a1fdf609d93438d8a6264"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a73e41bfe679dd06ab16c436652df93f1"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a73e41bfe679dd06ab16c436652df93f1">CreateTable</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;<a class="el" href="classxb_1_1xbDbf.html#a73f9c792d0a769e2e604c1855245a276">sAlias</a>, <a class="el" href="structxb_1_1xbSchema.html">xbSchema</a> *pSchema, xbInt16 iOverlay, xbInt16 iShareMode)=0</td></tr>
+<tr class="separator:a73e41bfe679dd06ab16c436652df93f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4085ed4f049d976124d8edc3d3c56397"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a4085ed4f049d976124d8edc3d3c56397">DeleteTable</a> ()</td></tr>
+<tr class="memdesc:a4085ed4f049d976124d8edc3d3c56397"><td class="mdescLeft">&#160;</td><td class="mdescRight">Delete a table. <a href="classxb_1_1xbDbf.html#a4085ed4f049d976124d8edc3d3c56397">More...</a><br /></td></tr>
+<tr class="separator:a4085ed4f049d976124d8edc3d3c56397"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a01c26b67e312be1e674b3da710e031b9"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a01c26b67e312be1e674b3da710e031b9">DeleteAll</a> (xbInt16 iOption)</td></tr>
+<tr class="memdesc:a01c26b67e312be1e674b3da710e031b9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Delete or undelete all records in a dbf file (table). <a href="classxb_1_1xbDbf.html#a01c26b67e312be1e674b3da710e031b9">More...</a><br /></td></tr>
+<tr class="separator:a01c26b67e312be1e674b3da710e031b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3067fdfa3a7a5c15651f6e89d1102176"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a3067fdfa3a7a5c15651f6e89d1102176">DeleteAllRecords</a> ()</td></tr>
+<tr class="memdesc:a3067fdfa3a7a5c15651f6e89d1102176"><td class="mdescLeft">&#160;</td><td class="mdescRight">Delete all records. <a href="classxb_1_1xbDbf.html#a3067fdfa3a7a5c15651f6e89d1102176">More...</a><br /></td></tr>
+<tr class="separator:a3067fdfa3a7a5c15651f6e89d1102176"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acd8c10579229f3a2e2c5fdb7fcef90db"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#acd8c10579229f3a2e2c5fdb7fcef90db">DeleteRecord</a> ()</td></tr>
+<tr class="memdesc:acd8c10579229f3a2e2c5fdb7fcef90db"><td class="mdescLeft">&#160;</td><td class="mdescRight">Delete the current record. <a href="classxb_1_1xbDbf.html#acd8c10579229f3a2e2c5fdb7fcef90db">More...</a><br /></td></tr>
+<tr class="separator:acd8c10579229f3a2e2c5fdb7fcef90db"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a47643728f74cf3b6e0ffc55259895bdb"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a47643728f74cf3b6e0ffc55259895bdb">DumpHeader</a> (xbInt16 iOption)</td></tr>
+<tr class="memdesc:a47643728f74cf3b6e0ffc55259895bdb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Dump dbf file header. <a href="classxb_1_1xbDbf.html#a47643728f74cf3b6e0ffc55259895bdb">More...</a><br /></td></tr>
+<tr class="separator:a47643728f74cf3b6e0ffc55259895bdb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aba30399f15885a07f87f904c0d0656fa"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#aba30399f15885a07f87f904c0d0656fa">DumpRecord</a> (xbUInt32 ulRecNo, xbInt16 iOutputDest=0, xbInt16 iOutputFmt=0)</td></tr>
+<tr class="memdesc:aba30399f15885a07f87f904c0d0656fa"><td class="mdescLeft">&#160;</td><td class="mdescRight">Dump record. <a href="classxb_1_1xbDbf.html#aba30399f15885a07f87f904c0d0656fa">More...</a><br /></td></tr>
+<tr class="separator:aba30399f15885a07f87f904c0d0656fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abb9e20c5efacd4fea80f1515abbc6b55"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#abb9e20c5efacd4fea80f1515abbc6b55">GetAutoCommit</a> () const</td></tr>
+<tr class="memdesc:abb9e20c5efacd4fea80f1515abbc6b55"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get auto commit setting. <a href="classxb_1_1xbDbf.html#abb9e20c5efacd4fea80f1515abbc6b55">More...</a><br /></td></tr>
+<tr class="separator:abb9e20c5efacd4fea80f1515abbc6b55"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae0c00226fd2ea7a67f101e795467ed68"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ae0c00226fd2ea7a67f101e795467ed68">GetAutoCommit</a> (xbInt16 iOption) const</td></tr>
+<tr class="memdesc:ae0c00226fd2ea7a67f101e795467ed68"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get auto commit setting. <a href="classxb_1_1xbDbf.html#ae0c00226fd2ea7a67f101e795467ed68">More...</a><br /></td></tr>
+<tr class="separator:ae0c00226fd2ea7a67f101e795467ed68"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad0827a43c025c1184ffebab74cc9e779"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ad0827a43c025c1184ffebab74cc9e779">GetBof</a> ()</td></tr>
+<tr class="memdesc:ad0827a43c025c1184ffebab74cc9e779"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a pointer to the current index object. <a href="classxb_1_1xbDbf.html#ad0827a43c025c1184ffebab74cc9e779">More...</a><br /></td></tr>
+<tr class="separator:ad0827a43c025c1184ffebab74cc9e779"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a643a80a3792a52760c8e09ba18719503"><td class="memItemLeft" align="right" valign="top">virtual xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a643a80a3792a52760c8e09ba18719503">GetCurRecNo</a> () const</td></tr>
+<tr class="memdesc:a643a80a3792a52760c8e09ba18719503"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the current record number. <a href="classxb_1_1xbDbf.html#a643a80a3792a52760c8e09ba18719503">More...</a><br /></td></tr>
+<tr class="separator:a643a80a3792a52760c8e09ba18719503"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac1110d867ba297a52c8b0e83e88f05e6"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ac1110d867ba297a52c8b0e83e88f05e6">GetDbfStatus</a> () const</td></tr>
+<tr class="memdesc:ac1110d867ba297a52c8b0e83e88f05e6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the current dbf status. <a href="classxb_1_1xbDbf.html#ac1110d867ba297a52c8b0e83e88f05e6">More...</a><br /></td></tr>
+<tr class="separator:ac1110d867ba297a52c8b0e83e88f05e6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a256dc1f98626fa77da24e91a38ab5b4d"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a256dc1f98626fa77da24e91a38ab5b4d">GetEof</a> ()</td></tr>
+<tr class="memdesc:a256dc1f98626fa77da24e91a38ab5b4d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return true if dbf file empty or positioned to the last record. <a href="classxb_1_1xbDbf.html#a256dc1f98626fa77da24e91a38ab5b4d">More...</a><br /></td></tr>
+<tr class="separator:a256dc1f98626fa77da24e91a38ab5b4d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:add27d8ef555a13b336b8c804165dc15e"><td class="memItemLeft" align="right" valign="top">virtual xbInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#add27d8ef555a13b336b8c804165dc15e">GetFieldCnt</a> () const</td></tr>
+<tr class="memdesc:add27d8ef555a13b336b8c804165dc15e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the number of fields in the table. <a href="classxb_1_1xbDbf.html#add27d8ef555a13b336b8c804165dc15e">More...</a><br /></td></tr>
+<tr class="separator:add27d8ef555a13b336b8c804165dc15e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6fc5b8a3e2f177d5ceaf9d975cbb5226"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a6fc5b8a3e2f177d5ceaf9d975cbb5226">GetFirstRecord</a> ()</td></tr>
+<tr class="memdesc:a6fc5b8a3e2f177d5ceaf9d975cbb5226"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the first record. <a href="classxb_1_1xbDbf.html#a6fc5b8a3e2f177d5ceaf9d975cbb5226">More...</a><br /></td></tr>
+<tr class="separator:a6fc5b8a3e2f177d5ceaf9d975cbb5226"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acb78991e8435edd36318c653cb977c1a"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#acb78991e8435edd36318c653cb977c1a">GetFirstRecord</a> (xbInt16 iOption)</td></tr>
+<tr class="memdesc:acb78991e8435edd36318c653cb977c1a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the first record. <a href="classxb_1_1xbDbf.html#acb78991e8435edd36318c653cb977c1a">More...</a><br /></td></tr>
+<tr class="separator:acb78991e8435edd36318c653cb977c1a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad56be2756b7a9f8318d9ba5cf215dafb"><td class="memItemLeft" align="right" valign="top">virtual xbUInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ad56be2756b7a9f8318d9ba5cf215dafb">GetHeaderLen</a> () const</td></tr>
+<tr class="separator:ad56be2756b7a9f8318d9ba5cf215dafb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a49e667f9c8ee55c36444702663fc5964"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a49e667f9c8ee55c36444702663fc5964">GetLastRecord</a> ()</td></tr>
+<tr class="memdesc:a49e667f9c8ee55c36444702663fc5964"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the last record. <a href="classxb_1_1xbDbf.html#a49e667f9c8ee55c36444702663fc5964">More...</a><br /></td></tr>
+<tr class="separator:a49e667f9c8ee55c36444702663fc5964"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8ccfa2291417412b6894940d1b92f9a6"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a8ccfa2291417412b6894940d1b92f9a6">GetLastRecord</a> (xbInt16 iOption)</td></tr>
+<tr class="memdesc:a8ccfa2291417412b6894940d1b92f9a6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the last record. <a href="classxb_1_1xbDbf.html#a8ccfa2291417412b6894940d1b92f9a6">More...</a><br /></td></tr>
+<tr class="separator:a8ccfa2291417412b6894940d1b92f9a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab896fe3b734f556de578d30f92b18fe2"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ab896fe3b734f556de578d30f92b18fe2">GetNextRecord</a> ()</td></tr>
+<tr class="memdesc:ab896fe3b734f556de578d30f92b18fe2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the next record. <a href="classxb_1_1xbDbf.html#ab896fe3b734f556de578d30f92b18fe2">More...</a><br /></td></tr>
+<tr class="separator:ab896fe3b734f556de578d30f92b18fe2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3191428a7a92d9107d8d42448884f2ac"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a3191428a7a92d9107d8d42448884f2ac">GetNextRecord</a> (xbInt16 iOption)</td></tr>
+<tr class="memdesc:a3191428a7a92d9107d8d42448884f2ac"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the next record. <a href="classxb_1_1xbDbf.html#a3191428a7a92d9107d8d42448884f2ac">More...</a><br /></td></tr>
+<tr class="separator:a3191428a7a92d9107d8d42448884f2ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a18fdcb4ab15b36cd47fa6f6f7a540d1a"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a18fdcb4ab15b36cd47fa6f6f7a540d1a">GetNextRecord</a> (xbInt16 iOption, xbUInt32 ulStartRec)</td></tr>
+<tr class="memdesc:a18fdcb4ab15b36cd47fa6f6f7a540d1a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the next record. <a href="classxb_1_1xbDbf.html#a18fdcb4ab15b36cd47fa6f6f7a540d1a">More...</a><br /></td></tr>
+<tr class="separator:a18fdcb4ab15b36cd47fa6f6f7a540d1a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab3d248e5221b4f0809897cd43af17a1e"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ab3d248e5221b4f0809897cd43af17a1e">GetPrevRecord</a> ()</td></tr>
+<tr class="memdesc:ab3d248e5221b4f0809897cd43af17a1e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the previous record. <a href="classxb_1_1xbDbf.html#ab3d248e5221b4f0809897cd43af17a1e">More...</a><br /></td></tr>
+<tr class="separator:ab3d248e5221b4f0809897cd43af17a1e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7eadc7b08d73003802b90584f7b33387"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a7eadc7b08d73003802b90584f7b33387">GetPrevRecord</a> (xbInt16 iOption)</td></tr>
+<tr class="memdesc:a7eadc7b08d73003802b90584f7b33387"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the previous record. <a href="classxb_1_1xbDbf.html#a7eadc7b08d73003802b90584f7b33387">More...</a><br /></td></tr>
+<tr class="separator:a7eadc7b08d73003802b90584f7b33387"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a26fba086b07caeab95066bf1c8d25161"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a26fba086b07caeab95066bf1c8d25161">GetRecord</a> (xbUInt32 ulRecNo)</td></tr>
+<tr class="memdesc:a26fba086b07caeab95066bf1c8d25161"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get record for specified record number. <a href="classxb_1_1xbDbf.html#a26fba086b07caeab95066bf1c8d25161">More...</a><br /></td></tr>
+<tr class="separator:a26fba086b07caeab95066bf1c8d25161"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac196ad55335e1f4789d698748434dc89"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ac196ad55335e1f4789d698748434dc89">GetRecordCnt</a> (xbUInt32 &amp;ulRecCnt)</td></tr>
+<tr class="memdesc:ac196ad55335e1f4789d698748434dc89"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current number of records in the dbf data file. <a href="classxb_1_1xbDbf.html#ac196ad55335e1f4789d698748434dc89">More...</a><br /></td></tr>
+<tr class="separator:ac196ad55335e1f4789d698748434dc89"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa3e38c4057d726a28a27d07a1610d124"><td class="memItemLeft" align="right" valign="top">virtual char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#aa3e38c4057d726a28a27d07a1610d124">GetRecordBuf</a> (xbInt16 iOpt=0) const</td></tr>
+<tr class="memdesc:aa3e38c4057d726a28a27d07a1610d124"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get pointer to record buffer. <a href="classxb_1_1xbDbf.html#aa3e38c4057d726a28a27d07a1610d124">More...</a><br /></td></tr>
+<tr class="separator:aa3e38c4057d726a28a27d07a1610d124"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab50d76c6e29e81e347a6feb04c2f62bb"><td class="memItemLeft" align="right" valign="top">virtual xbUInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ab50d76c6e29e81e347a6feb04c2f62bb">GetRecordLen</a> () const</td></tr>
+<tr class="memdesc:ab50d76c6e29e81e347a6feb04c2f62bb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the dbf record length. <a href="classxb_1_1xbDbf.html#ab50d76c6e29e81e347a6feb04c2f62bb">More...</a><br /></td></tr>
+<tr class="separator:ab50d76c6e29e81e347a6feb04c2f62bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a27758a325c097f204247908b65ba7fbd"><td class="memItemLeft" align="right" valign="top">virtual const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a27758a325c097f204247908b65ba7fbd">GetTblAlias</a> () const</td></tr>
+<tr class="memdesc:a27758a325c097f204247908b65ba7fbd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the table alias. <a href="classxb_1_1xbDbf.html#a27758a325c097f204247908b65ba7fbd">More...</a><br /></td></tr>
+<tr class="separator:a27758a325c097f204247908b65ba7fbd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a49212a9eb17f7fa9f303e08d5fc50fc6"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a49212a9eb17f7fa9f303e08d5fc50fc6">GetVersion</a> () const =0</td></tr>
+<tr class="separator:a49212a9eb17f7fa9f303e08d5fc50fc6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab21ec23c076b0c9affdc0f6672bd133f"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ab21ec23c076b0c9affdc0f6672bd133f">GetXbasePtr</a> () const</td></tr>
+<tr class="memdesc:ab21ec23c076b0c9affdc0f6672bd133f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the pointer to the xbXbase structure,. <a href="classxb_1_1xbDbf.html#ab21ec23c076b0c9affdc0f6672bd133f">More...</a><br /></td></tr>
+<tr class="separator:ab21ec23c076b0c9affdc0f6672bd133f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a013dc8c51fc1aa988de39cf3da6da950"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a013dc8c51fc1aa988de39cf3da6da950">MemoFieldsExist</a> () const</td></tr>
+<tr class="memdesc:a013dc8c51fc1aa988de39cf3da6da950"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check for existence of any memo fields. <a href="classxb_1_1xbDbf.html#a013dc8c51fc1aa988de39cf3da6da950">More...</a><br /></td></tr>
+<tr class="separator:a013dc8c51fc1aa988de39cf3da6da950"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a69824d7bafc3f5a15bf7d09f2f511768"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a69824d7bafc3f5a15bf7d09f2f511768">Open</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName)</td></tr>
+<tr class="memdesc:a69824d7bafc3f5a15bf7d09f2f511768"><td class="mdescLeft">&#160;</td><td class="mdescRight">Open a table/dbf file. <a href="classxb_1_1xbDbf.html#a69824d7bafc3f5a15bf7d09f2f511768">More...</a><br /></td></tr>
+<tr class="separator:a69824d7bafc3f5a15bf7d09f2f511768"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae388c5e02adc86e6e9988e697e061610"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ae388c5e02adc86e6e9988e697e061610">Open</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;<a class="el" href="classxb_1_1xbDbf.html#a73f9c792d0a769e2e604c1855245a276">sAlias</a>)</td></tr>
+<tr class="memdesc:ae388c5e02adc86e6e9988e697e061610"><td class="mdescLeft">&#160;</td><td class="mdescRight">Open a table/dbf file. <a href="classxb_1_1xbDbf.html#ae388c5e02adc86e6e9988e697e061610">More...</a><br /></td></tr>
+<tr class="separator:ae388c5e02adc86e6e9988e697e061610"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4d018cbf44d8d8b2145c9acab02c8adf"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a4d018cbf44d8d8b2145c9acab02c8adf">Open</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;<a class="el" href="classxb_1_1xbDbf.html#a73f9c792d0a769e2e604c1855245a276">sAlias</a>, xbInt16 iOpenMode, xbInt16 iShareMode)=0</td></tr>
+<tr class="separator:a4d018cbf44d8d8b2145c9acab02c8adf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8a52bf3ef2123c0d17e6b1f67bf0dc55"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a8a52bf3ef2123c0d17e6b1f67bf0dc55">Pack</a> ()</td></tr>
+<tr class="memdesc:a8a52bf3ef2123c0d17e6b1f67bf0dc55"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pack dbf file. <a href="classxb_1_1xbDbf.html#a8a52bf3ef2123c0d17e6b1f67bf0dc55">More...</a><br /></td></tr>
+<tr class="separator:a8a52bf3ef2123c0d17e6b1f67bf0dc55"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a93bb14ad0451355bfa3379128120988a"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a93bb14ad0451355bfa3379128120988a">Pack</a> (xbUInt32 &amp;ulDeletedRecCnt)</td></tr>
+<tr class="memdesc:a93bb14ad0451355bfa3379128120988a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pack dbf file. <a href="classxb_1_1xbDbf.html#a93bb14ad0451355bfa3379128120988a">More...</a><br /></td></tr>
+<tr class="separator:a93bb14ad0451355bfa3379128120988a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3c36a5ffbc7067a1abbcb526dd3b981d"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a3c36a5ffbc7067a1abbcb526dd3b981d">PutRecord</a> ()</td></tr>
+<tr class="memdesc:a3c36a5ffbc7067a1abbcb526dd3b981d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write the current record to disk. <a href="classxb_1_1xbDbf.html#a3c36a5ffbc7067a1abbcb526dd3b981d">More...</a><br /></td></tr>
+<tr class="separator:a3c36a5ffbc7067a1abbcb526dd3b981d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aacbc7bac3ea0c502ee75b838f4f0fcbf"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#aacbc7bac3ea0c502ee75b838f4f0fcbf">PutRecord</a> (xbUInt32 ulRecNo)</td></tr>
+<tr class="memdesc:aacbc7bac3ea0c502ee75b838f4f0fcbf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write record to disk. <a href="classxb_1_1xbDbf.html#aacbc7bac3ea0c502ee75b838f4f0fcbf">More...</a><br /></td></tr>
+<tr class="separator:aacbc7bac3ea0c502ee75b838f4f0fcbf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a94d7d626ba691fd4b740c034673e6fc6"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a94d7d626ba691fd4b740c034673e6fc6">RecordDeleted</a> (xbInt16 iOpt=0) const</td></tr>
+<tr class="memdesc:a94d7d626ba691fd4b740c034673e6fc6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return record deletion status. <a href="classxb_1_1xbDbf.html#a94d7d626ba691fd4b740c034673e6fc6">More...</a><br /></td></tr>
+<tr class="separator:a94d7d626ba691fd4b740c034673e6fc6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aeeeb2eb5fabcd0f91d457df07b0e0708"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#aeeeb2eb5fabcd0f91d457df07b0e0708">Rename</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> sNewName)=0</td></tr>
+<tr class="separator:aeeeb2eb5fabcd0f91d457df07b0e0708"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4cf7f0d423164f3cf074ae41f96f4e90"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a4cf7f0d423164f3cf074ae41f96f4e90">SetAutoCommit</a> (xbInt16 <a class="el" href="classxb_1_1xbDbf.html#ab506450954bc86e7bf1d7c4efe681f43">iAutoCommit</a>)</td></tr>
+<tr class="memdesc:a4cf7f0d423164f3cf074ae41f96f4e90"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set auto commit. <a href="classxb_1_1xbDbf.html#a4cf7f0d423164f3cf074ae41f96f4e90">More...</a><br /></td></tr>
+<tr class="separator:a4cf7f0d423164f3cf074ae41f96f4e90"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae94cb1bf9f75184f39d9e1a80ab49d4a"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ae94cb1bf9f75184f39d9e1a80ab49d4a">UndeleteAllRecords</a> ()</td></tr>
+<tr class="memdesc:ae94cb1bf9f75184f39d9e1a80ab49d4a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set auto lock. <a href="classxb_1_1xbDbf.html#ae94cb1bf9f75184f39d9e1a80ab49d4a">More...</a><br /></td></tr>
+<tr class="separator:ae94cb1bf9f75184f39d9e1a80ab49d4a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a255681976a04fc722538bb630507b3a0"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a255681976a04fc722538bb630507b3a0">UndeleteRecord</a> ()</td></tr>
+<tr class="memdesc:a255681976a04fc722538bb630507b3a0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Undelete one record. <a href="classxb_1_1xbDbf.html#a255681976a04fc722538bb630507b3a0">More...</a><br /></td></tr>
+<tr class="separator:a255681976a04fc722538bb630507b3a0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8ed0693b10b95aaa4e46037758d160ed"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a8ed0693b10b95aaa4e46037758d160ed">Zap</a> ()</td></tr>
+<tr class="memdesc:a8ed0693b10b95aaa4e46037758d160ed"><td class="mdescLeft">&#160;</td><td class="mdescRight">Zap (remove) everything from the file,. <a href="classxb_1_1xbDbf.html#a8ed0693b10b95aaa4e46037758d160ed">More...</a><br /></td></tr>
+<tr class="separator:a8ed0693b10b95aaa4e46037758d160ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad245a26eb8b79610c9ae7bab19e05513"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ad245a26eb8b79610c9ae7bab19e05513">GetField</a> (xbInt16 iFieldNo, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldValue, xbInt16 iRecBufSw) const</td></tr>
+<tr class="memdesc:ad245a26eb8b79610c9ae7bab19e05513"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get field data for field number. <a href="classxb_1_1xbDbf.html#ad245a26eb8b79610c9ae7bab19e05513">More...</a><br /></td></tr>
+<tr class="separator:ad245a26eb8b79610c9ae7bab19e05513"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac81f078f3c932f0da60ad1fbdd848d3e"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ac81f078f3c932f0da60ad1fbdd848d3e">GetField</a> (xbInt16 iFieldNo, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldValue) const</td></tr>
+<tr class="memdesc:ac81f078f3c932f0da60ad1fbdd848d3e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get field data for field number. <a href="classxb_1_1xbDbf.html#ac81f078f3c932f0da60ad1fbdd848d3e">More...</a><br /></td></tr>
+<tr class="separator:ac81f078f3c932f0da60ad1fbdd848d3e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9a0fcf7e2040ab483e3807927833cb26"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a9a0fcf7e2040ab483e3807927833cb26">GetField</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldValue) const</td></tr>
+<tr class="memdesc:a9a0fcf7e2040ab483e3807927833cb26"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get <a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> field for field name. <a href="classxb_1_1xbDbf.html#a9a0fcf7e2040ab483e3807927833cb26">More...</a><br /></td></tr>
+<tr class="separator:a9a0fcf7e2040ab483e3807927833cb26"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abcb4defad2e1b6e67f63cc60737ad840"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#abcb4defad2e1b6e67f63cc60737ad840">GetFieldDecimal</a> (xbInt16 iFieldNo, xbInt16 &amp;iFieldDecimal) const</td></tr>
+<tr class="memdesc:abcb4defad2e1b6e67f63cc60737ad840"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get decimal for field number. <a href="classxb_1_1xbDbf.html#abcb4defad2e1b6e67f63cc60737ad840">More...</a><br /></td></tr>
+<tr class="separator:abcb4defad2e1b6e67f63cc60737ad840"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a607f774fcd6dc0b9913d7a7801b60db2"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a607f774fcd6dc0b9913d7a7801b60db2">GetFieldDecimal</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, xbInt16 &amp;iFieldDecimal) const</td></tr>
+<tr class="memdesc:a607f774fcd6dc0b9913d7a7801b60db2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get decimal for field name. <a href="classxb_1_1xbDbf.html#a607f774fcd6dc0b9913d7a7801b60db2">More...</a><br /></td></tr>
+<tr class="separator:a607f774fcd6dc0b9913d7a7801b60db2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adda4302b58cc6109b048f19d9b68bbd4"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#adda4302b58cc6109b048f19d9b68bbd4">GetFieldLen</a> (xbInt16 iFieldNo, xbInt16 &amp;iFieldLen) const</td></tr>
+<tr class="memdesc:adda4302b58cc6109b048f19d9b68bbd4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get field length for field number. <a href="classxb_1_1xbDbf.html#adda4302b58cc6109b048f19d9b68bbd4">More...</a><br /></td></tr>
+<tr class="separator:adda4302b58cc6109b048f19d9b68bbd4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acf06dbccdba1a4bcd90fa0bea6cca59b"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#acf06dbccdba1a4bcd90fa0bea6cca59b">GetFieldLen</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, xbInt16 &amp;iFieldLen) const</td></tr>
+<tr class="memdesc:acf06dbccdba1a4bcd90fa0bea6cca59b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get field length for field name. <a href="classxb_1_1xbDbf.html#acf06dbccdba1a4bcd90fa0bea6cca59b">More...</a><br /></td></tr>
+<tr class="separator:acf06dbccdba1a4bcd90fa0bea6cca59b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5e3e4368bfba1724c016b8859023e34c"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a5e3e4368bfba1724c016b8859023e34c">GetFieldName</a> (xbInt16 iFieldNo, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName) const</td></tr>
+<tr class="memdesc:a5e3e4368bfba1724c016b8859023e34c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the name of the specified field. <a href="classxb_1_1xbDbf.html#a5e3e4368bfba1724c016b8859023e34c">More...</a><br /></td></tr>
+<tr class="separator:a5e3e4368bfba1724c016b8859023e34c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aed9113b5095c6df1b9c854cbd0d8047b"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#aed9113b5095c6df1b9c854cbd0d8047b">GetFieldNo</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, xbInt16 &amp;iFieldNo) const</td></tr>
+<tr class="memdesc:aed9113b5095c6df1b9c854cbd0d8047b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the field number for name. <a href="classxb_1_1xbDbf.html#aed9113b5095c6df1b9c854cbd0d8047b">More...</a><br /></td></tr>
+<tr class="separator:aed9113b5095c6df1b9c854cbd0d8047b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aad9029e63909aeb77d8473256d88bea8"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#aad9029e63909aeb77d8473256d88bea8">GetFieldNo</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName) const</td></tr>
+<tr class="memdesc:aad9029e63909aeb77d8473256d88bea8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get field ID number for a given field name. <a href="classxb_1_1xbDbf.html#aad9029e63909aeb77d8473256d88bea8">More...</a><br /></td></tr>
+<tr class="separator:aad9029e63909aeb77d8473256d88bea8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5143973e4f165651152aa13c8fd45f84"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a5143973e4f165651152aa13c8fd45f84">GetFieldType</a> (xbInt16 iFieldNo, char &amp;cFieldType) const</td></tr>
+<tr class="memdesc:a5143973e4f165651152aa13c8fd45f84"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get field type for field number. <a href="classxb_1_1xbDbf.html#a5143973e4f165651152aa13c8fd45f84">More...</a><br /></td></tr>
+<tr class="separator:a5143973e4f165651152aa13c8fd45f84"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a181db879f1a75f93a34c03513a0b2fea"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a181db879f1a75f93a34c03513a0b2fea">GetFieldType</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, char &amp;cFieldType) const</td></tr>
+<tr class="memdesc:a181db879f1a75f93a34c03513a0b2fea"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get field type for field name. <a href="classxb_1_1xbDbf.html#a181db879f1a75f93a34c03513a0b2fea">More...</a><br /></td></tr>
+<tr class="separator:a181db879f1a75f93a34c03513a0b2fea"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7862215dd2f83a1c488e539cd1f9aec0"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a7862215dd2f83a1c488e539cd1f9aec0">PutField</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldData)</td></tr>
+<tr class="memdesc:a7862215dd2f83a1c488e539cd1f9aec0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Put field for field name. <a href="classxb_1_1xbDbf.html#a7862215dd2f83a1c488e539cd1f9aec0">More...</a><br /></td></tr>
+<tr class="separator:a7862215dd2f83a1c488e539cd1f9aec0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a142b0c0dc904917f3c68c5572c1237b5"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a142b0c0dc904917f3c68c5572c1237b5">PutField</a> (xbInt16 iFieldNo, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldData)</td></tr>
+<tr class="memdesc:a142b0c0dc904917f3c68c5572c1237b5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Put field for field number. <a href="classxb_1_1xbDbf.html#a142b0c0dc904917f3c68c5572c1237b5">More...</a><br /></td></tr>
+<tr class="separator:a142b0c0dc904917f3c68c5572c1237b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab39ac4269ac63bc7ea4f638733bb17f0"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ab39ac4269ac63bc7ea4f638733bb17f0">PutLogicalField</a> (xbInt16 iFieldNo, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldData)</td></tr>
+<tr class="memdesc:ab39ac4269ac63bc7ea4f638733bb17f0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Put logical field for field number. <a href="classxb_1_1xbDbf.html#ab39ac4269ac63bc7ea4f638733bb17f0">More...</a><br /></td></tr>
+<tr class="separator:ab39ac4269ac63bc7ea4f638733bb17f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a507e400ca6526a9e0391cf06dd6a014e"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a507e400ca6526a9e0391cf06dd6a014e">PutLogicalField</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldData)</td></tr>
+<tr class="memdesc:a507e400ca6526a9e0391cf06dd6a014e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Put logical field for field name. <a href="classxb_1_1xbDbf.html#a507e400ca6526a9e0391cf06dd6a014e">More...</a><br /></td></tr>
+<tr class="separator:a507e400ca6526a9e0391cf06dd6a014e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3254f091fc4a1404abed3dd2bcdd6ce6"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a3254f091fc4a1404abed3dd2bcdd6ce6">GetLogicalField</a> (xbInt16 iFieldNo, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldData) const</td></tr>
+<tr class="memdesc:a3254f091fc4a1404abed3dd2bcdd6ce6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get logical field for field number. <a href="classxb_1_1xbDbf.html#a3254f091fc4a1404abed3dd2bcdd6ce6">More...</a><br /></td></tr>
+<tr class="separator:a3254f091fc4a1404abed3dd2bcdd6ce6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9cd6819bfd932ff8507e54d9cb9a624e"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a9cd6819bfd932ff8507e54d9cb9a624e">GetLogicalField</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldData) const</td></tr>
+<tr class="memdesc:a9cd6819bfd932ff8507e54d9cb9a624e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get logical field for field name. <a href="classxb_1_1xbDbf.html#a9cd6819bfd932ff8507e54d9cb9a624e">More...</a><br /></td></tr>
+<tr class="separator:a9cd6819bfd932ff8507e54d9cb9a624e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a423a0cb7bd252cedf956ace4954f275d"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a423a0cb7bd252cedf956ace4954f275d">PutLogicalField</a> (xbInt16 iFieldNo, <a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bFieldData)</td></tr>
+<tr class="memdesc:a423a0cb7bd252cedf956ace4954f275d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Put logical field for field number. <a href="classxb_1_1xbDbf.html#a423a0cb7bd252cedf956ace4954f275d">More...</a><br /></td></tr>
+<tr class="separator:a423a0cb7bd252cedf956ace4954f275d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a623ca3ef5520c42308c1a16b518e7ff3"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a623ca3ef5520c42308c1a16b518e7ff3">PutLogicalField</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bFieldData)</td></tr>
+<tr class="memdesc:a623ca3ef5520c42308c1a16b518e7ff3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Put logical field for field name. <a href="classxb_1_1xbDbf.html#a623ca3ef5520c42308c1a16b518e7ff3">More...</a><br /></td></tr>
+<tr class="separator:a623ca3ef5520c42308c1a16b518e7ff3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaf615ddcf08f8cd14efc713c2a8d7ae1"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#aaf615ddcf08f8cd14efc713c2a8d7ae1">GetLogicalField</a> (xbInt16 iFieldNo, <a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bFieldData) const</td></tr>
+<tr class="memdesc:aaf615ddcf08f8cd14efc713c2a8d7ae1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get logical field for field number. <a href="classxb_1_1xbDbf.html#aaf615ddcf08f8cd14efc713c2a8d7ae1">More...</a><br /></td></tr>
+<tr class="separator:aaf615ddcf08f8cd14efc713c2a8d7ae1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab28feef20c988b0a6f1c1911a45377b0"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ab28feef20c988b0a6f1c1911a45377b0">GetLogicalField</a> (xbInt16 iFieldNo, <a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bFieldData, xbInt16 iRecBufSw) const</td></tr>
+<tr class="memdesc:ab28feef20c988b0a6f1c1911a45377b0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get logical field for field number. <a href="classxb_1_1xbDbf.html#ab28feef20c988b0a6f1c1911a45377b0">More...</a><br /></td></tr>
+<tr class="separator:ab28feef20c988b0a6f1c1911a45377b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a943cea7fde1b06c1a05184193eff8d2d"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a943cea7fde1b06c1a05184193eff8d2d">GetLogicalField</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bFieldData) const</td></tr>
+<tr class="memdesc:a943cea7fde1b06c1a05184193eff8d2d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get logical field for field name. <a href="classxb_1_1xbDbf.html#a943cea7fde1b06c1a05184193eff8d2d">More...</a><br /></td></tr>
+<tr class="separator:a943cea7fde1b06c1a05184193eff8d2d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abe525c0820640e0a9e169d0b7913cfa1"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#abe525c0820640e0a9e169d0b7913cfa1">GetLongField</a> (xbInt16 iFieldNo, xbInt32 &amp;lFieldValue) const</td></tr>
+<tr class="memdesc:abe525c0820640e0a9e169d0b7913cfa1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get long field for field number. <a href="classxb_1_1xbDbf.html#abe525c0820640e0a9e169d0b7913cfa1">More...</a><br /></td></tr>
+<tr class="separator:abe525c0820640e0a9e169d0b7913cfa1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7b8ef75b17941beac17e50e969b2d3db"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a7b8ef75b17941beac17e50e969b2d3db">GetLongField</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, xbInt32 &amp;lFieldValue) const</td></tr>
+<tr class="memdesc:a7b8ef75b17941beac17e50e969b2d3db"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get long field for field name. <a href="classxb_1_1xbDbf.html#a7b8ef75b17941beac17e50e969b2d3db">More...</a><br /></td></tr>
+<tr class="separator:a7b8ef75b17941beac17e50e969b2d3db"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a56c8f924284bf88aabf90b7930b4eb47"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a56c8f924284bf88aabf90b7930b4eb47">PutLongField</a> (xbInt16 iFieldNo, xbInt32 lFieldValue)</td></tr>
+<tr class="memdesc:a56c8f924284bf88aabf90b7930b4eb47"><td class="mdescLeft">&#160;</td><td class="mdescRight">Put long field for field number. <a href="classxb_1_1xbDbf.html#a56c8f924284bf88aabf90b7930b4eb47">More...</a><br /></td></tr>
+<tr class="separator:a56c8f924284bf88aabf90b7930b4eb47"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0692d1776a725c2f61d4c14677e9307c"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a0692d1776a725c2f61d4c14677e9307c">PutLongField</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, xbInt32 lFieldValue)</td></tr>
+<tr class="memdesc:a0692d1776a725c2f61d4c14677e9307c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Put long field for field name. <a href="classxb_1_1xbDbf.html#a0692d1776a725c2f61d4c14677e9307c">More...</a><br /></td></tr>
+<tr class="separator:a0692d1776a725c2f61d4c14677e9307c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a67e3a050f9090edf69eee75aef7f5d83"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a67e3a050f9090edf69eee75aef7f5d83">GetULongField</a> (xbInt16 iFieldNo, xbUInt32 &amp;lFieldValue) const</td></tr>
+<tr class="memdesc:a67e3a050f9090edf69eee75aef7f5d83"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get unsigned long field for field number. <a href="classxb_1_1xbDbf.html#a67e3a050f9090edf69eee75aef7f5d83">More...</a><br /></td></tr>
+<tr class="separator:a67e3a050f9090edf69eee75aef7f5d83"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a039eb02418ec4ca862adbc0f95b9cbec"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a039eb02418ec4ca862adbc0f95b9cbec">GetULongField</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, xbUInt32 &amp;lFieldValue) const</td></tr>
+<tr class="memdesc:a039eb02418ec4ca862adbc0f95b9cbec"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get unsigned long field for field name. <a href="classxb_1_1xbDbf.html#a039eb02418ec4ca862adbc0f95b9cbec">More...</a><br /></td></tr>
+<tr class="separator:a039eb02418ec4ca862adbc0f95b9cbec"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af5dec5c9ff903efffdb0490a44d296d2"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#af5dec5c9ff903efffdb0490a44d296d2">PutULongField</a> (xbInt16 iFieldNo, xbUInt32 lFieldValue)</td></tr>
+<tr class="memdesc:af5dec5c9ff903efffdb0490a44d296d2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Put unsigned long field for field number. <a href="classxb_1_1xbDbf.html#af5dec5c9ff903efffdb0490a44d296d2">More...</a><br /></td></tr>
+<tr class="separator:af5dec5c9ff903efffdb0490a44d296d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac62cb97c4e678c83f41788b1ae4d0381"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ac62cb97c4e678c83f41788b1ae4d0381">PutULongField</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldNo, xbUInt32 lFieldValue)</td></tr>
+<tr class="memdesc:ac62cb97c4e678c83f41788b1ae4d0381"><td class="mdescLeft">&#160;</td><td class="mdescRight">Put unsigned long field for field name. <a href="classxb_1_1xbDbf.html#ac62cb97c4e678c83f41788b1ae4d0381">More...</a><br /></td></tr>
+<tr class="separator:ac62cb97c4e678c83f41788b1ae4d0381"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4556041a7ff2f6b6f986729901c11f08"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a4556041a7ff2f6b6f986729901c11f08">GetDoubleField</a> (xbInt16 FieldNo, <a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dFieldValue) const</td></tr>
+<tr class="memdesc:a4556041a7ff2f6b6f986729901c11f08"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get xbDouble field for field number. <a href="classxb_1_1xbDbf.html#a4556041a7ff2f6b6f986729901c11f08">More...</a><br /></td></tr>
+<tr class="separator:a4556041a7ff2f6b6f986729901c11f08"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2370b5e736931441a5968649291b9ef4"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a2370b5e736931441a5968649291b9ef4">GetDoubleField</a> (xbInt16 FieldNo, <a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dFieldValue, xbInt16 iRecBufSw) const</td></tr>
+<tr class="memdesc:a2370b5e736931441a5968649291b9ef4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get xbDouble field for field number. <a href="classxb_1_1xbDbf.html#a2370b5e736931441a5968649291b9ef4">More...</a><br /></td></tr>
+<tr class="separator:a2370b5e736931441a5968649291b9ef4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6e6774df0f2d7733f4b25a9989596d95"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a6e6774df0f2d7733f4b25a9989596d95">GetDoubleField</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dFieldValue) const</td></tr>
+<tr class="memdesc:a6e6774df0f2d7733f4b25a9989596d95"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get xbDouble field for field name. <a href="classxb_1_1xbDbf.html#a6e6774df0f2d7733f4b25a9989596d95">More...</a><br /></td></tr>
+<tr class="separator:a6e6774df0f2d7733f4b25a9989596d95"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4f34842d7e8ff1f16992c2ece2fc38a5"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a4f34842d7e8ff1f16992c2ece2fc38a5">PutDoubleField</a> (xbInt16 FieldNo, <a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dFieldValue)</td></tr>
+<tr class="memdesc:a4f34842d7e8ff1f16992c2ece2fc38a5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Put double field for field number. <a href="classxb_1_1xbDbf.html#a4f34842d7e8ff1f16992c2ece2fc38a5">More...</a><br /></td></tr>
+<tr class="separator:a4f34842d7e8ff1f16992c2ece2fc38a5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae695bbc71c19abc71c0c5f2ff2e1f971"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ae695bbc71c19abc71c0c5f2ff2e1f971">PutDoubleField</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;FieldName, <a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dFieldValue)</td></tr>
+<tr class="memdesc:ae695bbc71c19abc71c0c5f2ff2e1f971"><td class="mdescLeft">&#160;</td><td class="mdescRight">Put double field for field name. <a href="classxb_1_1xbDbf.html#ae695bbc71c19abc71c0c5f2ff2e1f971">More...</a><br /></td></tr>
+<tr class="separator:ae695bbc71c19abc71c0c5f2ff2e1f971"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3443f646038ced14425f067a59c0f2da"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a3443f646038ced14425f067a59c0f2da">GetFloatField</a> (xbInt16 iFieldNo, <a class="el" href="namespacexb.html#a83aa6a550398db55973aa9fb4257e66e">xbFloat</a> &amp;fFieldValue) const</td></tr>
+<tr class="memdesc:a3443f646038ced14425f067a59c0f2da"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get xbFloat field for field number. <a href="classxb_1_1xbDbf.html#a3443f646038ced14425f067a59c0f2da">More...</a><br /></td></tr>
+<tr class="separator:a3443f646038ced14425f067a59c0f2da"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a81ef2f36f921d7ece066a592eb6393eb"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a81ef2f36f921d7ece066a592eb6393eb">GetFloatField</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <a class="el" href="namespacexb.html#a83aa6a550398db55973aa9fb4257e66e">xbFloat</a> &amp;fFieldValue) const</td></tr>
+<tr class="memdesc:a81ef2f36f921d7ece066a592eb6393eb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get xbFloat field for field name. <a href="classxb_1_1xbDbf.html#a81ef2f36f921d7ece066a592eb6393eb">More...</a><br /></td></tr>
+<tr class="separator:a81ef2f36f921d7ece066a592eb6393eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a64161eb50d72e424b11bf3732657ebd8"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a64161eb50d72e424b11bf3732657ebd8">PutFloatField</a> (xbInt16 iFieldNo, <a class="el" href="namespacexb.html#a83aa6a550398db55973aa9fb4257e66e">xbFloat</a> fFieldValue)</td></tr>
+<tr class="memdesc:a64161eb50d72e424b11bf3732657ebd8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Put float field for field number. <a href="classxb_1_1xbDbf.html#a64161eb50d72e424b11bf3732657ebd8">More...</a><br /></td></tr>
+<tr class="separator:a64161eb50d72e424b11bf3732657ebd8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4ea3241bc710d57e5f755efda62288ad"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a4ea3241bc710d57e5f755efda62288ad">PutFloatField</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <a class="el" href="namespacexb.html#a83aa6a550398db55973aa9fb4257e66e">xbFloat</a> fFieldValue)</td></tr>
+<tr class="memdesc:a4ea3241bc710d57e5f755efda62288ad"><td class="mdescLeft">&#160;</td><td class="mdescRight">Put float field for field name. <a href="classxb_1_1xbDbf.html#a4ea3241bc710d57e5f755efda62288ad">More...</a><br /></td></tr>
+<tr class="separator:a4ea3241bc710d57e5f755efda62288ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af78ef1fba949463ff7f829d3cffc4555"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#af78ef1fba949463ff7f829d3cffc4555">GetDateField</a> (xbInt16 iFieldNo, <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;dt) const</td></tr>
+<tr class="memdesc:af78ef1fba949463ff7f829d3cffc4555"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get <a class="el" href="classxb_1_1xbDate.html" title="xbDate class.">xbDate</a> field for field number. <a href="classxb_1_1xbDbf.html#af78ef1fba949463ff7f829d3cffc4555">More...</a><br /></td></tr>
+<tr class="separator:af78ef1fba949463ff7f829d3cffc4555"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac624e06a97666bfd64b4f252b4548b36"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ac624e06a97666bfd64b4f252b4548b36">GetDateField</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;dt) const</td></tr>
+<tr class="memdesc:ac624e06a97666bfd64b4f252b4548b36"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get <a class="el" href="classxb_1_1xbDate.html" title="xbDate class.">xbDate</a> field for field name. <a href="classxb_1_1xbDbf.html#ac624e06a97666bfd64b4f252b4548b36">More...</a><br /></td></tr>
+<tr class="separator:ac624e06a97666bfd64b4f252b4548b36"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a873f04af528a9d81e6a367a59d998ec5"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a873f04af528a9d81e6a367a59d998ec5">PutDateField</a> (xbInt16 iFieldNo, const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;dt)</td></tr>
+<tr class="memdesc:a873f04af528a9d81e6a367a59d998ec5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Put date field for field number. <a href="classxb_1_1xbDbf.html#a873f04af528a9d81e6a367a59d998ec5">More...</a><br /></td></tr>
+<tr class="separator:a873f04af528a9d81e6a367a59d998ec5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a571b36b3a940b1a16d5e834f329b33b9"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a571b36b3a940b1a16d5e834f329b33b9">PutDateField</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;dt)</td></tr>
+<tr class="memdesc:a571b36b3a940b1a16d5e834f329b33b9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Put date field for field name. <a href="classxb_1_1xbDbf.html#a571b36b3a940b1a16d5e834f329b33b9">More...</a><br /></td></tr>
+<tr class="separator:a571b36b3a940b1a16d5e834f329b33b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae9a3f726ce5229ed021bfce0515050fc"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ae9a3f726ce5229ed021bfce0515050fc">GetNullSts</a> (xbInt16 iFieldNo, <a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bIsNull) const</td></tr>
+<tr class="memdesc:ae9a3f726ce5229ed021bfce0515050fc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get field null status. <a href="classxb_1_1xbDbf.html#ae9a3f726ce5229ed021bfce0515050fc">More...</a><br /></td></tr>
+<tr class="separator:ae9a3f726ce5229ed021bfce0515050fc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a909788123ce0694b65dfcf036380d918"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a909788123ce0694b65dfcf036380d918">GetNullSts</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bIsNull) const</td></tr>
+<tr class="memdesc:a909788123ce0694b65dfcf036380d918"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get field null status. <a href="classxb_1_1xbDbf.html#a909788123ce0694b65dfcf036380d918">More...</a><br /></td></tr>
+<tr class="separator:a909788123ce0694b65dfcf036380d918"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7930fe8b930c6d646b7b0d3df576fe9e"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a7930fe8b930c6d646b7b0d3df576fe9e">GetNullSts</a> (xbInt16 iFieldNo, <a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bIsNull, xbInt16 iRecBufSw) const</td></tr>
+<tr class="memdesc:a7930fe8b930c6d646b7b0d3df576fe9e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get field null status. <a href="classxb_1_1xbDbf.html#a7930fe8b930c6d646b7b0d3df576fe9e">More...</a><br /></td></tr>
+<tr class="separator:a7930fe8b930c6d646b7b0d3df576fe9e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acd0fb2166b2bff7e8a1cf65a7bc8be1e"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#acd0fb2166b2bff7e8a1cf65a7bc8be1e">GetDirectory</a> () const</td></tr>
+<tr class="memdesc:acd0fb2166b2bff7e8a1cf65a7bc8be1e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the directory name. <a href="classxb_1_1xbFile.html#acd0fb2166b2bff7e8a1cf65a7bc8be1e">More...</a><br /></td></tr>
+<tr class="separator:acd0fb2166b2bff7e8a1cf65a7bc8be1e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac95cb882ccbcdedc9a233c6ad9fed07a"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ac95cb882ccbcdedc9a233c6ad9fed07a">GetFileName</a> () const</td></tr>
+<tr class="memdesc:ac95cb882ccbcdedc9a233c6ad9fed07a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the file name. <a href="classxb_1_1xbFile.html#ac95cb882ccbcdedc9a233c6ad9fed07a">More...</a><br /></td></tr>
+<tr class="separator:ac95cb882ccbcdedc9a233c6ad9fed07a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a31b4e641f93206ba23e2a5a27491dcd4"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a31b4e641f93206ba23e2a5a27491dcd4">GetFqFileName</a> () const</td></tr>
+<tr class="memdesc:a31b4e641f93206ba23e2a5a27491dcd4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the fully qualified file name. <a href="classxb_1_1xbFile.html#a31b4e641f93206ba23e2a5a27491dcd4">More...</a><br /></td></tr>
+<tr class="separator:a31b4e641f93206ba23e2a5a27491dcd4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad39797624a752b9d62533d00fad9feff"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ad39797624a752b9d62533d00fad9feff">CreateUniqueFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDirIn, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sExtIn, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFqnOut, xbInt16 iOption=0)</td></tr>
+<tr class="memdesc:ad39797624a752b9d62533d00fad9feff"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a unique file name. <a href="classxb_1_1xbFile.html#ad39797624a752b9d62533d00fad9feff">More...</a><br /></td></tr>
+<tr class="separator:ad39797624a752b9d62533d00fad9feff"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae2b6ac26018dc28f77afbb3f008c3f66"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ae2b6ac26018dc28f77afbb3f008c3f66">DetermineXbaseTableVersion</a> (unsigned char cFileTypeByte) const</td></tr>
+<tr class="memdesc:ae2b6ac26018dc28f77afbb3f008c3f66"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determine xbase dbf version. <a href="classxb_1_1xbFile.html#ae2b6ac26018dc28f77afbb3f008c3f66">More...</a><br /></td></tr>
+<tr class="separator:ae2b6ac26018dc28f77afbb3f008c3f66"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5a740033664c9ad2611c90e2a6d0c2d3"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5a740033664c9ad2611c90e2a6d0c2d3">DetermineXbaseMemoVersion</a> (unsigned char cFileTypeByte) const</td></tr>
+<tr class="memdesc:a5a740033664c9ad2611c90e2a6d0c2d3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determine which version the memo (dbt) file is. <a href="classxb_1_1xbFile.html#a5a740033664c9ad2611c90e2a6d0c2d3">More...</a><br /></td></tr>
+<tr class="separator:a5a740033664c9ad2611c90e2a6d0c2d3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab14e4a11427f5efb81cba1dd32bd1aa1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ab14e4a11427f5efb81cba1dd32bd1aa1">eGetDouble</a> (const char *p) const</td></tr>
+<tr class="memdesc:ab14e4a11427f5efb81cba1dd32bd1aa1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable double value. <a href="classxb_1_1xbFile.html#ab14e4a11427f5efb81cba1dd32bd1aa1">More...</a><br /></td></tr>
+<tr class="separator:ab14e4a11427f5efb81cba1dd32bd1aa1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a60b24a5afc984c586bf384c7e915ba0d"><td class="memItemLeft" align="right" valign="top">xbInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a60b24a5afc984c586bf384c7e915ba0d">eGetInt32</a> (const char *p) const</td></tr>
+<tr class="memdesc:a60b24a5afc984c586bf384c7e915ba0d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable long value. <a href="classxb_1_1xbFile.html#a60b24a5afc984c586bf384c7e915ba0d">More...</a><br /></td></tr>
+<tr class="separator:a60b24a5afc984c586bf384c7e915ba0d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a78f052529d39a18deaface5a0d47d0b0"><td class="memItemLeft" align="right" valign="top">xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a78f052529d39a18deaface5a0d47d0b0">eGetUInt32</a> (const char *p) const</td></tr>
+<tr class="memdesc:a78f052529d39a18deaface5a0d47d0b0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable unsigned long value. <a href="classxb_1_1xbFile.html#a78f052529d39a18deaface5a0d47d0b0">More...</a><br /></td></tr>
+<tr class="separator:a78f052529d39a18deaface5a0d47d0b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac40c991110ddc6fb30a72d90f4652762"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ac40c991110ddc6fb30a72d90f4652762">eGetInt16</a> (const char *p) const</td></tr>
+<tr class="memdesc:ac40c991110ddc6fb30a72d90f4652762"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable short value. <a href="classxb_1_1xbFile.html#ac40c991110ddc6fb30a72d90f4652762">More...</a><br /></td></tr>
+<tr class="separator:ac40c991110ddc6fb30a72d90f4652762"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a936ade458e6d5e6d29f9b5031888d189"><td class="memItemLeft" align="right" valign="top">xbUInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a936ade458e6d5e6d29f9b5031888d189">eGetUInt16</a> (const char *p) const</td></tr>
+<tr class="memdesc:a936ade458e6d5e6d29f9b5031888d189"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable unsigned short value. <a href="classxb_1_1xbFile.html#a936ade458e6d5e6d29f9b5031888d189">More...</a><br /></td></tr>
+<tr class="separator:a936ade458e6d5e6d29f9b5031888d189"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a98b6ff533ae93f90c977a2ba23eeb105"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a98b6ff533ae93f90c977a2ba23eeb105">ePutDouble</a> (char *p, <a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> d)</td></tr>
+<tr class="memdesc:a98b6ff533ae93f90c977a2ba23eeb105"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable double value to memory location. <a href="classxb_1_1xbFile.html#a98b6ff533ae93f90c977a2ba23eeb105">More...</a><br /></td></tr>
+<tr class="separator:a98b6ff533ae93f90c977a2ba23eeb105"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a19c37f76a2ccbb45019cb0fc373d3f46"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a19c37f76a2ccbb45019cb0fc373d3f46">ePutInt32</a> (char *p, xbInt32 l)</td></tr>
+<tr class="memdesc:a19c37f76a2ccbb45019cb0fc373d3f46"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable long value to memory location. <a href="classxb_1_1xbFile.html#a19c37f76a2ccbb45019cb0fc373d3f46">More...</a><br /></td></tr>
+<tr class="separator:a19c37f76a2ccbb45019cb0fc373d3f46"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa3f6ceae4b96f24875d86848bf13a173"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aa3f6ceae4b96f24875d86848bf13a173">ePutUInt32</a> (char *p, xbUInt32 ul)</td></tr>
+<tr class="memdesc:aa3f6ceae4b96f24875d86848bf13a173"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable unsigned long value to memory location. <a href="classxb_1_1xbFile.html#aa3f6ceae4b96f24875d86848bf13a173">More...</a><br /></td></tr>
+<tr class="separator:aa3f6ceae4b96f24875d86848bf13a173"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a29130f12739ac8fa837f4eaedf1338b2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a29130f12739ac8fa837f4eaedf1338b2">ePutInt16</a> (char *p, xbInt16 s)</td></tr>
+<tr class="memdesc:a29130f12739ac8fa837f4eaedf1338b2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable short value to memory location. <a href="classxb_1_1xbFile.html#a29130f12739ac8fa837f4eaedf1338b2">More...</a><br /></td></tr>
+<tr class="separator:a29130f12739ac8fa837f4eaedf1338b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a65e9839f92b96eac7b0d071fac3bbe40"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a65e9839f92b96eac7b0d071fac3bbe40">ePutUInt16</a> (char *p, xbUInt16 s)</td></tr>
+<tr class="memdesc:a65e9839f92b96eac7b0d071fac3bbe40"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable unsigned short value to memory location. <a href="classxb_1_1xbFile.html#a65e9839f92b96eac7b0d071fac3bbe40">More...</a><br /></td></tr>
+<tr class="separator:a65e9839f92b96eac7b0d071fac3bbe40"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a78bd8a11dce102647095baf3aff2b006"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a78bd8a11dce102647095baf3aff2b006">FileExists</a> () const</td></tr>
+<tr class="memdesc:a78bd8a11dce102647095baf3aff2b006"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if a file exists. <a href="classxb_1_1xbFile.html#a78bd8a11dce102647095baf3aff2b006">More...</a><br /></td></tr>
+<tr class="separator:a78bd8a11dce102647095baf3aff2b006"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a174d8a6aabc9cfcd32fedbd1e5b13ddd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a174d8a6aabc9cfcd32fedbd1e5b13ddd">FileExists</a> (xbInt16 iOption) const</td></tr>
+<tr class="memdesc:a174d8a6aabc9cfcd32fedbd1e5b13ddd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if a file exists. <a href="classxb_1_1xbFile.html#a174d8a6aabc9cfcd32fedbd1e5b13ddd">More...</a><br /></td></tr>
+<tr class="separator:a174d8a6aabc9cfcd32fedbd1e5b13ddd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a61130b4fbf4cf9d5972dcb4993de2f94"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a61130b4fbf4cf9d5972dcb4993de2f94">FileExists</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName) const</td></tr>
+<tr class="memdesc:a61130b4fbf4cf9d5972dcb4993de2f94"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if a file exists. <a href="classxb_1_1xbFile.html#a61130b4fbf4cf9d5972dcb4993de2f94">More...</a><br /></td></tr>
+<tr class="separator:a61130b4fbf4cf9d5972dcb4993de2f94"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0592168f39a10f2a401a88ef781f6148"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a0592168f39a10f2a401a88ef781f6148">FileExists</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iOption) const</td></tr>
+<tr class="memdesc:a0592168f39a10f2a401a88ef781f6148"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if a file exists. <a href="classxb_1_1xbFile.html#a0592168f39a10f2a401a88ef781f6148">More...</a><br /></td></tr>
+<tr class="separator:a0592168f39a10f2a401a88ef781f6148"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7fa837938a32dc9ca3fbc81cbaf50f59"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a7fa837938a32dc9ca3fbc81cbaf50f59">FileIsOpen</a> () const</td></tr>
+<tr class="memdesc:a7fa837938a32dc9ca3fbc81cbaf50f59"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if file is open. <a href="classxb_1_1xbFile.html#a7fa837938a32dc9ca3fbc81cbaf50f59">More...</a><br /></td></tr>
+<tr class="separator:a7fa837938a32dc9ca3fbc81cbaf50f59"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a638e14262410a1627819f016a16cdce2"><td class="memItemLeft" align="right" valign="top">xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a638e14262410a1627819f016a16cdce2">GetBlockSize</a> () const</td></tr>
+<tr class="memdesc:a638e14262410a1627819f016a16cdce2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the block size. <a href="classxb_1_1xbFile.html#a638e14262410a1627819f016a16cdce2">More...</a><br /></td></tr>
+<tr class="separator:a638e14262410a1627819f016a16cdce2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a60c53998e3d1b694134b20a87bc9bf5a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a60c53998e3d1b694134b20a87bc9bf5a">GetFileDirPart</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileDirPartOut) const</td></tr>
+<tr class="memdesc:a60c53998e3d1b694134b20a87bc9bf5a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the directory part of the file name. <a href="classxb_1_1xbFile.html#a60c53998e3d1b694134b20a87bc9bf5a">More...</a><br /></td></tr>
+<tr class="separator:a60c53998e3d1b694134b20a87bc9bf5a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af5127c92892816e9bbc5c19653c4147a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#af5127c92892816e9bbc5c19653c4147a">GetFileDirPart</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sCompleteFileNameIn, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileDirPartOut) const</td></tr>
+<tr class="memdesc:af5127c92892816e9bbc5c19653c4147a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the directory part of the file name. <a href="classxb_1_1xbFile.html#af5127c92892816e9bbc5c19653c4147a">More...</a><br /></td></tr>
+<tr class="separator:af5127c92892816e9bbc5c19653c4147a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a57a9222e5cbb51019d4eeb2c3ac89fa2"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a57a9222e5cbb51019d4eeb2c3ac89fa2">GetFileExtPart</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileExtPartOut) const</td></tr>
+<tr class="memdesc:a57a9222e5cbb51019d4eeb2c3ac89fa2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the extension part of the file name. <a href="classxb_1_1xbFile.html#a57a9222e5cbb51019d4eeb2c3ac89fa2">More...</a><br /></td></tr>
+<tr class="separator:a57a9222e5cbb51019d4eeb2c3ac89fa2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab289b6ffe955321160c1f90220c22e25"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ab289b6ffe955321160c1f90220c22e25">GetFileExtPart</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sCompleteFileNameIn, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileExtPartOut) const</td></tr>
+<tr class="memdesc:ab289b6ffe955321160c1f90220c22e25"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the extension part of the file name. <a href="classxb_1_1xbFile.html#ab289b6ffe955321160c1f90220c22e25">More...</a><br /></td></tr>
+<tr class="separator:ab289b6ffe955321160c1f90220c22e25"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a02df78f4c90313243f508fc56b95aba8"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a02df78f4c90313243f508fc56b95aba8">GetFileMtime</a> (time_t &amp;mtime)</td></tr>
+<tr class="memdesc:a02df78f4c90313243f508fc56b95aba8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the time of last file modification timestamp as reported by the OS. <a href="classxb_1_1xbFile.html#a02df78f4c90313243f508fc56b95aba8">More...</a><br /></td></tr>
+<tr class="separator:a02df78f4c90313243f508fc56b95aba8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a81422b3dd52763d2cc6c77237ec9af0a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a81422b3dd52763d2cc6c77237ec9af0a">GetFileNamePart</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileNamePartOut) const</td></tr>
+<tr class="memdesc:a81422b3dd52763d2cc6c77237ec9af0a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the name part of the file name. <a href="classxb_1_1xbFile.html#a81422b3dd52763d2cc6c77237ec9af0a">More...</a><br /></td></tr>
+<tr class="separator:a81422b3dd52763d2cc6c77237ec9af0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6110763c5ae996b72c7a62c15bdecc73"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a6110763c5ae996b72c7a62c15bdecc73">GetFileNamePart</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sCompleteFileNameIn, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileNamePartOut) const</td></tr>
+<tr class="memdesc:a6110763c5ae996b72c7a62c15bdecc73"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the name part of the file name. <a href="classxb_1_1xbFile.html#a6110763c5ae996b72c7a62c15bdecc73">More...</a><br /></td></tr>
+<tr class="separator:a6110763c5ae996b72c7a62c15bdecc73"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a50b63c39e49d44e52078038027b24cc5"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a50b63c39e49d44e52078038027b24cc5">GetFileSize</a> (xbUInt64 &amp;ullFileSize)</td></tr>
+<tr class="memdesc:a50b63c39e49d44e52078038027b24cc5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the size of the file as reported by the OS. <a href="classxb_1_1xbFile.html#a50b63c39e49d44e52078038027b24cc5">More...</a><br /></td></tr>
+<tr class="separator:a50b63c39e49d44e52078038027b24cc5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5548236d38d43b89ae29b9a015b1f678"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5548236d38d43b89ae29b9a015b1f678">GetFileType</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileType) const</td></tr>
+<tr class="memdesc:a5548236d38d43b89ae29b9a015b1f678"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the file type aka Capitalized file extension. <a href="classxb_1_1xbFile.html#a5548236d38d43b89ae29b9a015b1f678">More...</a><br /></td></tr>
+<tr class="separator:a5548236d38d43b89ae29b9a015b1f678"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3c500dc9dac22c49496e4b29386b2dd3"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a3c500dc9dac22c49496e4b29386b2dd3">GetOpenMode</a> () const</td></tr>
+<tr class="memdesc:a3c500dc9dac22c49496e4b29386b2dd3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the open mode of the file. <a href="classxb_1_1xbFile.html#a3c500dc9dac22c49496e4b29386b2dd3">More...</a><br /></td></tr>
+<tr class="separator:a3c500dc9dac22c49496e4b29386b2dd3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9b63e05b77f477ff6109ff7b9432c1b6"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a9b63e05b77f477ff6109ff7b9432c1b6">GetShareMode</a> () const</td></tr>
+<tr class="memdesc:a9b63e05b77f477ff6109ff7b9432c1b6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the share mode of the file. <a href="classxb_1_1xbFile.html#a9b63e05b77f477ff6109ff7b9432c1b6">More...</a><br /></td></tr>
+<tr class="separator:a9b63e05b77f477ff6109ff7b9432c1b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaf2e697751a0beff41432a66bb83fb5e"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aaf2e697751a0beff41432a66bb83fb5e">GetXbaseFileTypeByte</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 &amp;iVersion)</td></tr>
+<tr class="memdesc:aaf2e697751a0beff41432a66bb83fb5e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the file type byte and version of the dbf file. <a href="classxb_1_1xbFile.html#aaf2e697751a0beff41432a66bb83fb5e">More...</a><br /></td></tr>
+<tr class="separator:aaf2e697751a0beff41432a66bb83fb5e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7af337808919680b90710ad5e8a99232"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a7af337808919680b90710ad5e8a99232">GetXbaseFileTypeByte</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, unsigned char &amp;cFileTypeByte)</td></tr>
+<tr class="memdesc:a7af337808919680b90710ad5e8a99232"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the file type byte and version of the dbf file. <a href="classxb_1_1xbFile.html#a7af337808919680b90710ad5e8a99232">More...</a><br /></td></tr>
+<tr class="separator:a7af337808919680b90710ad5e8a99232"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a78aebdd21d3de46a450d5f835e3027f6"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a78aebdd21d3de46a450d5f835e3027f6">GetXbaseFileTypeByte</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, unsigned char &amp;cFileTypeByte, xbInt16 &amp;iVersion)</td></tr>
+<tr class="memdesc:a78aebdd21d3de46a450d5f835e3027f6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the file type byte and version of the dbf file. <a href="classxb_1_1xbFile.html#a78aebdd21d3de46a450d5f835e3027f6">More...</a><br /></td></tr>
+<tr class="separator:a78aebdd21d3de46a450d5f835e3027f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a361e3cc318bbf1c4d10f069e0800a24e"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a361e3cc318bbf1c4d10f069e0800a24e">NameSuffixMissing</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iOption) const</td></tr>
+<tr class="memdesc:a361e3cc318bbf1c4d10f069e0800a24e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines status of file extension. <a href="classxb_1_1xbFile.html#a361e3cc318bbf1c4d10f069e0800a24e">More...</a><br /></td></tr>
+<tr class="separator:a361e3cc318bbf1c4d10f069e0800a24e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa1bb80340abc7a5c22f87f878e9dc825"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aa1bb80340abc7a5c22f87f878e9dc825">ReadBlock</a> (xbUInt32 ulBlockNo, size_t readSize, void *buf)</td></tr>
+<tr class="memdesc:aa1bb80340abc7a5c22f87f878e9dc825"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read a block of data from file. <a href="classxb_1_1xbFile.html#aa1bb80340abc7a5c22f87f878e9dc825">More...</a><br /></td></tr>
+<tr class="separator:aa1bb80340abc7a5c22f87f878e9dc825"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aef696b1c4c0ef5338e818599f695d485"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aef696b1c4c0ef5338e818599f695d485">ReadBlock</a> (xbUInt32 ulBlockNo, xbUInt32 ulBlockSize, size_t readSize, void *buf)</td></tr>
+<tr class="memdesc:aef696b1c4c0ef5338e818599f695d485"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read a block of data from file. <a href="classxb_1_1xbFile.html#aef696b1c4c0ef5338e818599f695d485">More...</a><br /></td></tr>
+<tr class="separator:aef696b1c4c0ef5338e818599f695d485"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a991c5676a6f38fa752435390989f413e"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a991c5676a6f38fa752435390989f413e">SetBlockSize</a> (xbUInt32 ulBlockSize)</td></tr>
+<tr class="memdesc:a991c5676a6f38fa752435390989f413e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the block size. <a href="classxb_1_1xbFile.html#a991c5676a6f38fa752435390989f413e">More...</a><br /></td></tr>
+<tr class="separator:a991c5676a6f38fa752435390989f413e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae78a85255488bc78964c16946dbaead3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ae78a85255488bc78964c16946dbaead3">SetDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDirectory)</td></tr>
+<tr class="memdesc:ae78a85255488bc78964c16946dbaead3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the directory. <a href="classxb_1_1xbFile.html#ae78a85255488bc78964c16946dbaead3">More...</a><br /></td></tr>
+<tr class="separator:ae78a85255488bc78964c16946dbaead3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5419eb27e56822f828b2b88a9502a636"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5419eb27e56822f828b2b88a9502a636">SetFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName)</td></tr>
+<tr class="memdesc:a5419eb27e56822f828b2b88a9502a636"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the filename. <a href="classxb_1_1xbFile.html#a5419eb27e56822f828b2b88a9502a636">More...</a><br /></td></tr>
+<tr class="separator:a5419eb27e56822f828b2b88a9502a636"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aee832fa11db2077a532f49e1329bd05a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aee832fa11db2077a532f49e1329bd05a">SetFqFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFqName)</td></tr>
+<tr class="memdesc:aee832fa11db2077a532f49e1329bd05a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the fully qualifed filename. <a href="classxb_1_1xbFile.html#aee832fa11db2077a532f49e1329bd05a">More...</a><br /></td></tr>
+<tr class="separator:aee832fa11db2077a532f49e1329bd05a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a060acbfaa8d528f86cb59301814b414a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a060acbfaa8d528f86cb59301814b414a">SetHomeFolders</a> ()</td></tr>
+<tr class="memdesc:a060acbfaa8d528f86cb59301814b414a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set Home Folders. <a href="classxb_1_1xbFile.html#a060acbfaa8d528f86cb59301814b414a">More...</a><br /></td></tr>
+<tr class="separator:a060acbfaa8d528f86cb59301814b414a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5d871dcfecc2b4338f7a13722aab766c"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5d871dcfecc2b4338f7a13722aab766c">WriteBlock</a> (xbUInt32 ulBlockNo, size_t writeSize, void *buf)</td></tr>
+<tr class="memdesc:a5d871dcfecc2b4338f7a13722aab766c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a block of data to file. <a href="classxb_1_1xbFile.html#a5d871dcfecc2b4338f7a13722aab766c">More...</a><br /></td></tr>
+<tr class="separator:a5d871dcfecc2b4338f7a13722aab766c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a18830b5755d74818f60d9c7ce38ddf2d"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a18830b5755d74818f60d9c7ce38ddf2d">xbFclose</a> ()</td></tr>
+<tr class="memdesc:a18830b5755d74818f60d9c7ce38ddf2d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fclose. <a href="classxb_1_1xbFile.html#a18830b5755d74818f60d9c7ce38ddf2d">More...</a><br /></td></tr>
+<tr class="separator:a18830b5755d74818f60d9c7ce38ddf2d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af5b6356832d2a67212070a1aa605f170"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#af5b6356832d2a67212070a1aa605f170">xbFeof</a> ()</td></tr>
+<tr class="memdesc:af5b6356832d2a67212070a1aa605f170"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary feof. <a href="classxb_1_1xbFile.html#af5b6356832d2a67212070a1aa605f170">More...</a><br /></td></tr>
+<tr class="separator:af5b6356832d2a67212070a1aa605f170"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad205184d43409f04216540ae22f15009"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ad205184d43409f04216540ae22f15009">xbFflush</a> ()</td></tr>
+<tr class="memdesc:ad205184d43409f04216540ae22f15009"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fflush. <a href="classxb_1_1xbFile.html#ad205184d43409f04216540ae22f15009">More...</a><br /></td></tr>
+<tr class="separator:ad205184d43409f04216540ae22f15009"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afb1c584d2895ffb7834df80aea7eb1e4"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#afb1c584d2895ffb7834df80aea7eb1e4">xbFgetc</a> (xbInt32 &amp;c)</td></tr>
+<tr class="memdesc:afb1c584d2895ffb7834df80aea7eb1e4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fgetc. <a href="classxb_1_1xbFile.html#afb1c584d2895ffb7834df80aea7eb1e4">More...</a><br /></td></tr>
+<tr class="separator:afb1c584d2895ffb7834df80aea7eb1e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5ee229bda4d7d6695e122200e581e7a6"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5ee229bda4d7d6695e122200e581e7a6">xbFgetc</a> (char &amp;c)</td></tr>
+<tr class="memdesc:a5ee229bda4d7d6695e122200e581e7a6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fgetc. <a href="classxb_1_1xbFile.html#a5ee229bda4d7d6695e122200e581e7a6">More...</a><br /></td></tr>
+<tr class="separator:a5ee229bda4d7d6695e122200e581e7a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad245955ace26e5dde85fd4373b30d026"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ad245955ace26e5dde85fd4373b30d026">xbFgets</a> (size_t lSize, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLine)</td></tr>
+<tr class="memdesc:ad245955ace26e5dde85fd4373b30d026"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fgets. <a href="classxb_1_1xbFile.html#ad245955ace26e5dde85fd4373b30d026">More...</a><br /></td></tr>
+<tr class="separator:ad245955ace26e5dde85fd4373b30d026"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7cdfef5ede9ac98d44a28a6b7a70972c"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a7cdfef5ede9ac98d44a28a6b7a70972c">xbFopen</a> (xbInt16 iOpenMode)</td></tr>
+<tr class="separator:a7cdfef5ede9ac98d44a28a6b7a70972c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0548cedf0f26b7d8ac221f75b0cd048c"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a0548cedf0f26b7d8ac221f75b0cd048c">xbFopen</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sOpenMode, xbInt16 iShareMode)</td></tr>
+<tr class="memdesc:a0548cedf0f26b7d8ac221f75b0cd048c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fopen. <a href="classxb_1_1xbFile.html#a0548cedf0f26b7d8ac221f75b0cd048c">More...</a><br /></td></tr>
+<tr class="separator:a0548cedf0f26b7d8ac221f75b0cd048c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aabd113333b49c36cad23244b392baab4"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aabd113333b49c36cad23244b392baab4">xbFopen</a> (xbInt16 iOpenMode, xbInt16 iShareMode)</td></tr>
+<tr class="memdesc:aabd113333b49c36cad23244b392baab4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fopen. <a href="classxb_1_1xbFile.html#aabd113333b49c36cad23244b392baab4">More...</a><br /></td></tr>
+<tr class="separator:aabd113333b49c36cad23244b392baab4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab0fa19686ca8953ff4b556fb5b249135"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ab0fa19686ca8953ff4b556fb5b249135">xbFopen</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sMode, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iShareMode)</td></tr>
+<tr class="memdesc:ab0fa19686ca8953ff4b556fb5b249135"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fopen. <a href="classxb_1_1xbFile.html#ab0fa19686ca8953ff4b556fb5b249135">More...</a><br /></td></tr>
+<tr class="separator:ab0fa19686ca8953ff4b556fb5b249135"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af2e940c78956e5cb6824f9a1bc404896"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#af2e940c78956e5cb6824f9a1bc404896">xbFputc</a> (xbInt32 c)</td></tr>
+<tr class="memdesc:af2e940c78956e5cb6824f9a1bc404896"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fputc. <a href="classxb_1_1xbFile.html#af2e940c78956e5cb6824f9a1bc404896">More...</a><br /></td></tr>
+<tr class="separator:af2e940c78956e5cb6824f9a1bc404896"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a863f74cf17df8186d88586b4d2a6441a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a863f74cf17df8186d88586b4d2a6441a">xbFputc</a> (xbInt32 c, xbInt32 iNoTimes)</td></tr>
+<tr class="memdesc:a863f74cf17df8186d88586b4d2a6441a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fputc. <a href="classxb_1_1xbFile.html#a863f74cf17df8186d88586b4d2a6441a">More...</a><br /></td></tr>
+<tr class="separator:a863f74cf17df8186d88586b4d2a6441a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a698f3b40216778562e639e6ca1a47573"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a698f3b40216778562e639e6ca1a47573">xbFputs</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;s)</td></tr>
+<tr class="memdesc:a698f3b40216778562e639e6ca1a47573"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fputs. <a href="classxb_1_1xbFile.html#a698f3b40216778562e639e6ca1a47573">More...</a><br /></td></tr>
+<tr class="separator:a698f3b40216778562e639e6ca1a47573"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab4f6afaa1f77539f27a4f05c26e54e2f"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ab4f6afaa1f77539f27a4f05c26e54e2f">xbFread</a> (void *ptr, size_t size, size_t nmemb)</td></tr>
+<tr class="memdesc:ab4f6afaa1f77539f27a4f05c26e54e2f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fread. <a href="classxb_1_1xbFile.html#ab4f6afaa1f77539f27a4f05c26e54e2f">More...</a><br /></td></tr>
+<tr class="separator:ab4f6afaa1f77539f27a4f05c26e54e2f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5337ab8918df240910c0d19b4f298e3d"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5337ab8918df240910c0d19b4f298e3d">xbFseek</a> (xbInt64 llOffset, xbInt32 whence)</td></tr>
+<tr class="memdesc:a5337ab8918df240910c0d19b4f298e3d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fseek. <a href="classxb_1_1xbFile.html#a5337ab8918df240910c0d19b4f298e3d">More...</a><br /></td></tr>
+<tr class="separator:a5337ab8918df240910c0d19b4f298e3d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0e1c06aedfa7fbcb92e117f891edd13b"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a0e1c06aedfa7fbcb92e117f891edd13b">xbFtell</a> ()</td></tr>
+<tr class="memdesc:a0e1c06aedfa7fbcb92e117f891edd13b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary ftell. <a href="classxb_1_1xbFile.html#a0e1c06aedfa7fbcb92e117f891edd13b">More...</a><br /></td></tr>
+<tr class="separator:a0e1c06aedfa7fbcb92e117f891edd13b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9891b792f585a696f38a5cf959e30918"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a9891b792f585a696f38a5cf959e30918">xbFTurnOffFileBuffering</a> ()</td></tr>
+<tr class="memdesc:a9891b792f585a696f38a5cf959e30918"><td class="mdescLeft">&#160;</td><td class="mdescRight">Turn off file buffering. <a href="classxb_1_1xbFile.html#a9891b792f585a696f38a5cf959e30918">More...</a><br /></td></tr>
+<tr class="separator:a9891b792f585a696f38a5cf959e30918"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a08463f506f425c2385acbe1a561506e9"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a08463f506f425c2385acbe1a561506e9">xbReadUntil</a> (const char cDelim, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sOut)</td></tr>
+<tr class="memdesc:a08463f506f425c2385acbe1a561506e9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read file until a particular character is encountered on input stream. <a href="classxb_1_1xbFile.html#a08463f506f425c2385acbe1a561506e9">More...</a><br /></td></tr>
+<tr class="separator:a08463f506f425c2385acbe1a561506e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6d919366c2ec95e529906bf8842cbf07"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a6d919366c2ec95e529906bf8842cbf07">xbRemove</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iOption)</td></tr>
+<tr class="memdesc:a6d919366c2ec95e529906bf8842cbf07"><td class="mdescLeft">&#160;</td><td class="mdescRight">Delete file. <a href="classxb_1_1xbFile.html#a6d919366c2ec95e529906bf8842cbf07">More...</a><br /></td></tr>
+<tr class="separator:a6d919366c2ec95e529906bf8842cbf07"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a58f6a6751fdf7e9549c273bb75d93eb5"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a58f6a6751fdf7e9549c273bb75d93eb5">xbRemove</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName)</td></tr>
+<tr class="memdesc:a58f6a6751fdf7e9549c273bb75d93eb5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Delete file. <a href="classxb_1_1xbFile.html#a58f6a6751fdf7e9549c273bb75d93eb5">More...</a><br /></td></tr>
+<tr class="separator:a58f6a6751fdf7e9549c273bb75d93eb5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab3c668a8570433188382d31d7c60bd48"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ab3c668a8570433188382d31d7c60bd48">xbRemove</a> ()</td></tr>
+<tr class="memdesc:ab3c668a8570433188382d31d7c60bd48"><td class="mdescLeft">&#160;</td><td class="mdescRight">Delete file. <a href="classxb_1_1xbFile.html#ab3c668a8570433188382d31d7c60bd48">More...</a><br /></td></tr>
+<tr class="separator:ab3c668a8570433188382d31d7c60bd48"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afc8ce113aa72611a278233f9bb170012"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#afc8ce113aa72611a278233f9bb170012">xbRename</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sOldName, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sNewName)</td></tr>
+<tr class="memdesc:afc8ce113aa72611a278233f9bb170012"><td class="mdescLeft">&#160;</td><td class="mdescRight">Rename file. <a href="classxb_1_1xbFile.html#afc8ce113aa72611a278233f9bb170012">More...</a><br /></td></tr>
+<tr class="separator:afc8ce113aa72611a278233f9bb170012"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7996b6e084665c37c3892faea64b3505"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a7996b6e084665c37c3892faea64b3505">xbRewind</a> ()</td></tr>
+<tr class="memdesc:a7996b6e084665c37c3892faea64b3505"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for rewind. <a href="classxb_1_1xbFile.html#a7996b6e084665c37c3892faea64b3505">More...</a><br /></td></tr>
+<tr class="separator:a7996b6e084665c37c3892faea64b3505"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6aadd871d1782944703fed773d44b85f"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a6aadd871d1782944703fed773d44b85f">xbFwrite</a> (const void *ptr, size_t lSize, size_t lNmemb)</td></tr>
+<tr class="memdesc:a6aadd871d1782944703fed773d44b85f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fwrite. <a href="classxb_1_1xbFile.html#a6aadd871d1782944703fed773d44b85f">More...</a><br /></td></tr>
+<tr class="separator:a6aadd871d1782944703fed773d44b85f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a518bfcbfa3699d883cf89affee383296"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a518bfcbfa3699d883cf89affee383296">xbTruncate</a> (xbInt64 llSize)</td></tr>
+<tr class="memdesc:a518bfcbfa3699d883cf89affee383296"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for ftruncate. <a href="classxb_1_1xbFile.html#a518bfcbfa3699d883cf89affee383296">More...</a><br /></td></tr>
+<tr class="separator:a518bfcbfa3699d883cf89affee383296"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a97dfa59ab9a8e9f17454da0faceb023d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a97dfa59ab9a8e9f17454da0faceb023d">DisplayError</a> (xbInt16 ErrorCode) const</td></tr>
+<tr class="memdesc:a97dfa59ab9a8e9f17454da0faceb023d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Display error message on console for a given error number. <a href="classxb_1_1xbSsv.html#a97dfa59ab9a8e9f17454da0faceb023d">More...</a><br /></td></tr>
+<tr class="separator:a97dfa59ab9a8e9f17454da0faceb023d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6fbb9c3a550ab0b3378f9586a57791d2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a6fbb9c3a550ab0b3378f9586a57791d2">GetDefaultDateFormat</a> () const</td></tr>
+<tr class="memdesc:a6fbb9c3a550ab0b3378f9586a57791d2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the default date format. <a href="classxb_1_1xbSsv.html#a6fbb9c3a550ab0b3378f9586a57791d2">More...</a><br /></td></tr>
+<tr class="separator:a6fbb9c3a550ab0b3378f9586a57791d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">GetDataDirectory</a> () const</td></tr>
+<tr class="memdesc:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current data directory. <a href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">More...</a><br /></td></tr>
+<tr class="separator:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abfaeef85935331073d213465bb362a61"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abfaeef85935331073d213465bb362a61">GetTempDirectory</a> () const</td></tr>
+<tr class="memdesc:abfaeef85935331073d213465bb362a61"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current temp directory. <a href="classxb_1_1xbSsv.html#abfaeef85935331073d213465bb362a61">More...</a><br /></td></tr>
+<tr class="separator:abfaeef85935331073d213465bb362a61"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">GetHomeDir</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sHomeDirOut)</td></tr>
+<tr class="memdesc:abc9c06c95d71fbad8294e1ae8862cea9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get home directory. <a href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">More...</a><br /></td></tr>
+<tr class="separator:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a49cd162f066eef2b829ba7c9f6620243"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">GetEndianType</a> () const</td></tr>
+<tr class="memdesc:a49cd162f066eef2b829ba7c9f6620243"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the Endian type. <a href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">More...</a><br /></td></tr>
+<tr class="separator:a49cd162f066eef2b829ba7c9f6620243"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a56961d2a67b8e7470098626ac4dac7e4"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">GetErrorMessage</a> (xbInt16 ErrorCode) const</td></tr>
+<tr class="memdesc:a56961d2a67b8e7470098626ac4dac7e4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get an error message. <a href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">More...</a><br /></td></tr>
+<tr class="separator:a56961d2a67b8e7470098626ac4dac7e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a63cee13b473ee13970e93b11837b9e35"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a63cee13b473ee13970e93b11837b9e35">GetPathSeparator</a> () const</td></tr>
+<tr class="memdesc:a63cee13b473ee13970e93b11837b9e35"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the OS dependent path separator. <a href="classxb_1_1xbSsv.html#a63cee13b473ee13970e93b11837b9e35">More...</a><br /></td></tr>
+<tr class="separator:a63cee13b473ee13970e93b11837b9e35"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">SetDataDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDataDirectory)</td></tr>
+<tr class="memdesc:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the data directory. <a href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">More...</a><br /></td></tr>
+<tr class="separator:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5f74db23f8902846d581935c7db73f9c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">SetDefaultDateFormat</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDefaultDateFormat)</td></tr>
+<tr class="memdesc:a5f74db23f8902846d581935c7db73f9c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the default date format. <a href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">More...</a><br /></td></tr>
+<tr class="separator:a5f74db23f8902846d581935c7db73f9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a17c229a20ef9ab4034df8f9cd657adb2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a17c229a20ef9ab4034df8f9cd657adb2">SetTempDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTempDirectory)</td></tr>
+<tr class="memdesc:a17c229a20ef9ab4034df8f9cd657adb2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the temp directory. <a href="classxb_1_1xbSsv.html#a17c229a20ef9ab4034df8f9cd657adb2">More...</a><br /></td></tr>
+<tr class="separator:a17c229a20ef9ab4034df8f9cd657adb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a62e4fd0a5888665c76bbbad962794e72"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72">BitSet</a> (unsigned char c, xbInt16 iBitNo) const</td></tr>
+<tr class="memdesc:a62e4fd0a5888665c76bbbad962794e72"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check a bit in a one byte field and see if it is set. <a href="classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72">More...</a><br /></td></tr>
+<tr class="separator:a62e4fd0a5888665c76bbbad962794e72"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8551b15a3ce4fa2a40d698db01f4a9ae"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a8551b15a3ce4fa2a40d698db01f4a9ae">BitDump</a> (unsigned char c) const</td></tr>
+<tr class="separator:a8551b15a3ce4fa2a40d698db01f4a9ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aba1395b8e4c7f28c3614061de6e49190"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#aba1395b8e4c7f28c3614061de6e49190">BitDump</a> (char c) const</td></tr>
+<tr class="separator:aba1395b8e4c7f28c3614061de6e49190"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6982f973e81587b04916f4509746aaf5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a6982f973e81587b04916f4509746aaf5">GetDefaultAutoCommit</a> () const</td></tr>
+<tr class="memdesc:a6982f973e81587b04916f4509746aaf5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the default auto commit setting. <a href="classxb_1_1xbSsv.html#a6982f973e81587b04916f4509746aaf5">More...</a><br /></td></tr>
+<tr class="separator:a6982f973e81587b04916f4509746aaf5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">SetDefaultAutoCommit</a> (<a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bDefaultAutoCommit)</td></tr>
+<tr class="memdesc:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the default auto commit. <a href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">More...</a><br /></td></tr>
+<tr class="separator:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4822315bded3969b59aeeb683c373051"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a4822315bded3969b59aeeb683c373051">GetLogDirectory</a> () const</td></tr>
+<tr class="separator:a4822315bded3969b59aeeb683c373051"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afaef09435be73b3111f5edbd7091d861"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#afaef09435be73b3111f5edbd7091d861">GetLogFileName</a> () const</td></tr>
+<tr class="separator:afaef09435be73b3111f5edbd7091d861"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7b992ed97281bf25b5b66f5df686225e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a7b992ed97281bf25b5b66f5df686225e">SetLogDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLogDirectory)</td></tr>
+<tr class="separator:a7b992ed97281bf25b5b66f5df686225e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7f05738e7dfd759e89990242ef503544"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a7f05738e7dfd759e89990242ef503544">SetLogFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLogFileName)</td></tr>
+<tr class="separator:a7f05738e7dfd759e89990242ef503544"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">GetMultiUser</a> () const</td></tr>
+<tr class="memdesc:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the multi user setting. <a href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">More...</a><br /></td></tr>
+<tr class="separator:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aba6e59512f7172dd55dcf92059e5928c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#aba6e59512f7172dd55dcf92059e5928c">SetMultiUser</a> (<a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bMultiUser)</td></tr>
+<tr class="memdesc:aba6e59512f7172dd55dcf92059e5928c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the multi user setting. <a href="classxb_1_1xbSsv.html#aba6e59512f7172dd55dcf92059e5928c">More...</a><br /></td></tr>
+<tr class="separator:aba6e59512f7172dd55dcf92059e5928c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-static-attribs" name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:a6219f1b5e24ea12fe158cd5aea56988e"><td class="memItemLeft" align="right" valign="top">static const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a6219f1b5e24ea12fe158cd5aea56988e">ErrorCodeText</a> []</td></tr>
+<tr class="separator:a6219f1b5e24ea12fe158cd5aea56988e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-methods" name="pro-methods"></a>
+Protected Member Functions</h2></td></tr>
+<tr class="memitem:a060541addb5bb1f0fe12959ed6f66fb9"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a060541addb5bb1f0fe12959ed6f66fb9">ReadHeader</a> (xbInt16 iFilePositionOption, xbInt16 iReadOption)</td></tr>
+<tr class="memdesc:a060541addb5bb1f0fe12959ed6f66fb9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read dbf file header information. <a href="classxb_1_1xbDbf.html#a060541addb5bb1f0fe12959ed6f66fb9">More...</a><br /></td></tr>
+<tr class="separator:a060541addb5bb1f0fe12959ed6f66fb9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aabd146c0e1054ab905ec96aedd84b02e"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#aabd146c0e1054ab905ec96aedd84b02e">GetRawField</a> (xbInt16 iFieldNo, char *Buf, xbUInt32 BufSize, xbInt16 iRecBufSw) const</td></tr>
+<tr class="memdesc:aabd146c0e1054ab905ec96aedd84b02e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get raw field data for field number. <a href="classxb_1_1xbDbf.html#aabd146c0e1054ab905ec96aedd84b02e">More...</a><br /></td></tr>
+<tr class="separator:aabd146c0e1054ab905ec96aedd84b02e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad06fe0f7975fb81125d27d82504e6829"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ad06fe0f7975fb81125d27d82504e6829">InitVars</a> ()</td></tr>
+<tr class="separator:ad06fe0f7975fb81125d27d82504e6829"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7e63e852418f337eb7c44de5dcd50323"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a7e63e852418f337eb7c44de5dcd50323">SetVersion</a> ()=0</td></tr>
+<tr class="separator:a7e63e852418f337eb7c44de5dcd50323"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aba5dcac3b4092261bc1669740cdd669d"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#aba5dcac3b4092261bc1669740cdd669d">ValidateSchema</a> (<a class="el" href="structxb_1_1xbSchema.html">xbSchema</a> *s)=0</td></tr>
+<tr class="separator:aba5dcac3b4092261bc1669740cdd669d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a44e1410109ef7b3d11a6af4b704b62b2"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a44e1410109ef7b3d11a6af4b704b62b2">WriteHeader</a> (xbInt16 iPositionOption, xbInt16 iWriteOption)</td></tr>
+<tr class="separator:a44e1410109ef7b3d11a6af4b704b62b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a904ec348fd029d4a76e72b8fde636108"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a904ec348fd029d4a76e72b8fde636108">SetEndianType</a> ()</td></tr>
+<tr class="memdesc:a904ec348fd029d4a76e72b8fde636108"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the endian type. <a href="classxb_1_1xbSsv.html#a904ec348fd029d4a76e72b8fde636108">More...</a><br /></td></tr>
+<tr class="separator:a904ec348fd029d4a76e72b8fde636108"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-attribs" name="pro-attribs"></a>
+Protected Attributes</h2></td></tr>
+<tr class="memitem:afcd99924606be0a9e1e25180bcd1abf8"><td class="memItemLeft" align="right" valign="top">xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#afcd99924606be0a9e1e25180bcd1abf8">ulCurRec</a></td></tr>
+<tr class="separator:afcd99924606be0a9e1e25180bcd1abf8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab506450954bc86e7bf1d7c4efe681f43"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ab506450954bc86e7bf1d7c4efe681f43">iAutoCommit</a></td></tr>
+<tr class="separator:ab506450954bc86e7bf1d7c4efe681f43"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a15f495446f0d75bcf2fa89e3b699d388"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a15f495446f0d75bcf2fa89e3b699d388">iFileVersion</a></td></tr>
+<tr class="separator:a15f495446f0d75bcf2fa89e3b699d388"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a73f9c792d0a769e2e604c1855245a276"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a73f9c792d0a769e2e604c1855245a276">sAlias</a></td></tr>
+<tr class="separator:a73f9c792d0a769e2e604c1855245a276"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5056757614c39f725cc775332494966a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a5056757614c39f725cc775332494966a">iNoOfFields</a></td></tr>
+<tr class="separator:a5056757614c39f725cc775332494966a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6d8e193da3ca414eef1e8866ec5ca81b"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a6d8e193da3ca414eef1e8866ec5ca81b">iDbfStatus</a></td></tr>
+<tr class="separator:a6d8e193da3ca414eef1e8866ec5ca81b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad8c8b5eb12063bb898da1b2cc02cfce7"><td class="memItemLeft" align="right" valign="top">xbSchemaRec *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ad8c8b5eb12063bb898da1b2cc02cfce7">SchemaPtr</a></td></tr>
+<tr class="separator:ad8c8b5eb12063bb898da1b2cc02cfce7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8a9b3bce0b741e73473d3ebbd6e6f1cd"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a8a9b3bce0b741e73473d3ebbd6e6f1cd">RecBuf</a></td></tr>
+<tr class="separator:a8a9b3bce0b741e73473d3ebbd6e6f1cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a353ebfc8a2960ef827f429ec74025606"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a353ebfc8a2960ef827f429ec74025606">RecBuf2</a></td></tr>
+<tr class="separator:a353ebfc8a2960ef827f429ec74025606"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3a262abf658e5fa968b57ef457a69470"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a3a262abf658e5fa968b57ef457a69470">cVersion</a></td></tr>
+<tr class="separator:a3a262abf658e5fa968b57ef457a69470"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4fcd6a86ddd32d4a9d76a4074573440a"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a4fcd6a86ddd32d4a9d76a4074573440a">cUpdateYY</a></td></tr>
+<tr class="separator:a4fcd6a86ddd32d4a9d76a4074573440a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9340a5e8ee53eb0f3b6601eec2d71e1b"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a9340a5e8ee53eb0f3b6601eec2d71e1b">cUpdateMM</a></td></tr>
+<tr class="separator:a9340a5e8ee53eb0f3b6601eec2d71e1b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6021789d314cd41488991e708fcd0df2"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a6021789d314cd41488991e708fcd0df2">cUpdateDD</a></td></tr>
+<tr class="separator:a6021789d314cd41488991e708fcd0df2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acb594ab61dd35b17bdf28394083f8e87"><td class="memItemLeft" align="right" valign="top">xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#acb594ab61dd35b17bdf28394083f8e87">ulNoOfRecs</a></td></tr>
+<tr class="separator:acb594ab61dd35b17bdf28394083f8e87"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a62f5fa9149ae0f6dc75642823de66918"><td class="memItemLeft" align="right" valign="top">xbUInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a62f5fa9149ae0f6dc75642823de66918">uiHeaderLen</a></td></tr>
+<tr class="separator:a62f5fa9149ae0f6dc75642823de66918"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1760e222567e2c849f9c799b9d896e91"><td class="memItemLeft" align="right" valign="top">xbUInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a1760e222567e2c849f9c799b9d896e91">uiRecordLen</a></td></tr>
+<tr class="separator:a1760e222567e2c849f9c799b9d896e91"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac3c89fc3bc6a6abf385478a8adbed970"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ac3c89fc3bc6a6abf385478a8adbed970">cTransactionFlag</a></td></tr>
+<tr class="separator:ac3c89fc3bc6a6abf385478a8adbed970"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8734e799707582f022fc341d515650f4"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a8734e799707582f022fc341d515650f4">cEncryptionFlag</a></td></tr>
+<tr class="separator:a8734e799707582f022fc341d515650f4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad59074633641e03647e54d2b66c9102b"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ad59074633641e03647e54d2b66c9102b">cIndexFlag</a></td></tr>
+<tr class="separator:ad59074633641e03647e54d2b66c9102b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aea1dfe5cbd1f9cdbcfc8eb04b2c3d5f1"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#aea1dfe5cbd1f9cdbcfc8eb04b2c3d5f1">cLangDriver</a></td></tr>
+<tr class="separator:aea1dfe5cbd1f9cdbcfc8eb04b2c3d5f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae39a67ea391b46055d4ca299cb222004"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ae39a67ea391b46055d4ca299cb222004">xbase</a></td></tr>
+<tr class="separator:ae39a67ea391b46055d4ca299cb222004"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-static-attribs" name="pro-static-attribs"></a>
+Static Protected Attributes</h2></td></tr>
+<tr class="memitem:a5849e813f5e8e1cd180f0366637adbf3"><td class="memItemLeft" align="right" valign="top">static xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a5849e813f5e8e1cd180f0366637adbf3">iEndianType</a> = 0</td></tr>
+<tr class="separator:a5849e813f5e8e1cd180f0366637adbf3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9dec3164c3b264882df634915ecf21da"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classxb_1_1xbString.html">xbString</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a9dec3164c3b264882df634915ecf21da">sNullString</a> = &quot;&quot;</td></tr>
+<tr class="separator:a9dec3164c3b264882df634915ecf21da"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p >Base class for handling dbf files/tables. </p>
+<p >The <a class="el" href="classxb_1_1xbDbf.html" title="Base class for handling dbf files/tables.">xbDbf</a> class is used as a base class for accessing dbf files. <br />
+ In line with relational theory, a each dbf file can be considered as a table. The documentation uses the terms dbf and table interchangeably.<br />
+</p>
+<p >This module handles methods for accessing and updating dbf files.</p>
+<p ><br />
+ The class is designed to support additional file layouts with a minimal amount of effort. If you are wanting to update the library to support a new dbf file type not currently supported by the library, create a derived class using <a class="el" href="classxb_1_1xbDbf.html" title="Base class for handling dbf files/tables.">xbDbf</a> as a base class and modify methods needed to support the new dbf file version.<br />
+ See the following for examples on how to start on this:<br />
+ xbDbf3 is a derived class from <a class="el" href="classxb_1_1xbDbf.html" title="Base class for handling dbf files/tables.">xbDbf</a> and supports the original Dbase III+ file version.<br />
+ xbDbf4 is a derived class from <a class="el" href="classxb_1_1xbDbf.html" title="Base class for handling dbf files/tables.">xbDbf</a> and supports the original Dbase IV file version.<br />
+ </p>
+</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="a84a75f80bc0e9b8a22b728767949c204" name="a84a75f80bc0e9b8a22b728767949c204"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a84a75f80bc0e9b8a22b728767949c204">&#9670;&nbsp;</a></span>xbDbf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xb::xbDbf::xbDbf </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *&#160;</td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Constructor. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">x</td><td>Pointer to xbXbase </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a7eb87521fba8a939c613056d9918d880" name="a7eb87521fba8a939c613056d9918d880"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7eb87521fba8a939c613056d9918d880">&#9670;&nbsp;</a></span>~xbDbf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xb::xbDbf::~xbDbf </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Destructor. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="a4edcf31390fbdc8c3558004770fd9f2f" name="a4edcf31390fbdc8c3558004770fd9f2f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4edcf31390fbdc8c3558004770fd9f2f">&#9670;&nbsp;</a></span>Abort()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::Abort </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Abort any uncommited changes for the current record buffer. </p>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a5b412dd796241673eb1aa2c93513d69b" name="a5b412dd796241673eb1aa2c93513d69b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5b412dd796241673eb1aa2c93513d69b">&#9670;&nbsp;</a></span>AppendRecord()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::AppendRecord </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Append the current record to the data file. </p>
+<p >This method attempts to append the contents of the current record buffer to the end of the DBF file, updates the file date, number of records in the file and updates any open indices associated with this data file.<br />
+</p>
+<p >To add a record, an application would typically blank the record buffer, update various fields in the record buffer, then append the record.<br />
+</p>
+<p >The append method performs the following tasks:<br />
+ 1) Create new index key values<br />
+ 2) Lock the table<br />
+ 3) Lock append bytes<br />
+ 4) Lock indices<br />
+ 5) Read the dbf header<br />
+ 6) Check for dup keys<br />
+ 7) Calc last update date, no of recs<br />
+ 8) Add keys<br />
+ 9) Unlock indices<br />
+ 10) Update file header<br />
+ 11) Unlock file header<br />
+ 12) Append record<br />
+ 13) Unlock append bytes<br />
+</p>
+<p >Note: Locking memo files is not needed as the memo file updates are handled outside of the append method.<br />
+</p>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="aba1395b8e4c7f28c3614061de6e49190" name="aba1395b8e4c7f28c3614061de6e49190"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aba1395b8e4c7f28c3614061de6e49190">&#9670;&nbsp;</a></span>BitDump() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::BitDump </td>
+ <td>(</td>
+ <td class="paramtype">char&#160;</td>
+ <td class="paramname"><em>c</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8551b15a3ce4fa2a40d698db01f4a9ae" name="a8551b15a3ce4fa2a40d698db01f4a9ae"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8551b15a3ce4fa2a40d698db01f4a9ae">&#9670;&nbsp;</a></span>BitDump() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::BitDump </td>
+ <td>(</td>
+ <td class="paramtype">unsigned char&#160;</td>
+ <td class="paramname"><em>c</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a62e4fd0a5888665c76bbbad962794e72" name="a62e4fd0a5888665c76bbbad962794e72"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a62e4fd0a5888665c76bbbad962794e72">&#9670;&nbsp;</a></span>BitSet()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbSsv::BitSet </td>
+ <td>(</td>
+ <td class="paramtype">unsigned char&#160;</td>
+ <td class="paramname"><em>c</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iBitNo</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Check a bit in a one byte field and see if it is set. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>One byte char field to examine. </td></tr>
+ <tr><td class="paramname">iBitNo</td><td>which bit to examine. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue Bit is set<br />
+ xbFalse Bit is not set </dd></dl>
+
+</div>
+</div>
+<a id="a78da5a3d2011a3f2e7618cbdd3ba02d6" name="a78da5a3d2011a3f2e7618cbdd3ba02d6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a78da5a3d2011a3f2e7618cbdd3ba02d6">&#9670;&nbsp;</a></span>BlankRecord()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::BlankRecord </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Blank the record buffer. </p>
+<p >This method would typically be called to initialize the record buffer before updates are applied to append a new record.</p>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="ad68d73113e54e1b5f326e90f45e9989d" name="ad68d73113e54e1b5f326e90f45e9989d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad68d73113e54e1b5f326e90f45e9989d">&#9670;&nbsp;</a></span>Close()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::Close </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Close DBF file/table. </p>
+<p >This routine flushes any remaining updates to disk, closes the DBF file and any associated memo and index files.</p>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="abd69532c885ab72bcf3fb5066b318f4f" name="abd69532c885ab72bcf3fb5066b318f4f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abd69532c885ab72bcf3fb5066b318f4f">&#9670;&nbsp;</a></span>Commit()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::Commit </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Commit updates to disk. </p>
+<p >This routine commits any pending updates to disk.</p>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a829c615a130a1fdf609d93438d8a6264" name="a829c615a130a1fdf609d93438d8a6264"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a829c615a130a1fdf609d93438d8a6264">&#9670;&nbsp;</a></span>CopyDbfStructure()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::CopyDbfStructure </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td>
+ <td class="paramname"><em>dNewTable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sNewTableName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sNewTableAlias</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iOverlay</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iShareMode</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Copy table (dbf) file structure. </p>
+<p >This routine will copy the structure of a dbf file and if successful return a pointer to the new table in an open state.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">dNewTable</td><td>Reference to new table object. </td></tr>
+ <tr><td class="paramname">sNewTableName</td><td>New table (dbf) name. </td></tr>
+ <tr><td class="paramname">sNewTableAlias</td><td>Alias name of new table. </td></tr>
+ <tr><td class="paramname">iOverlay</td><td>xbTrue - Overlay existing file.<br />
+ xbFalse - Don't overlay existing file. </td></tr>
+ <tr><td class="paramname">iShareMode</td><td>XB_SINGLE_USER<br />
+ XB_MULTI_USER </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> Copy DBF structure </dd></dl>
+
+</div>
+</div>
+<a id="a73e41bfe679dd06ab16c436652df93f1" name="a73e41bfe679dd06ab16c436652df93f1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a73e41bfe679dd06ab16c436652df93f1">&#9670;&nbsp;</a></span>CreateTable()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual xbInt16 xb::xbDbf::CreateTable </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sTableName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sAlias</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structxb_1_1xbSchema.html">xbSchema</a> *&#160;</td>
+ <td class="paramname"><em>pSchema</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iOverlay</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iShareMode</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad39797624a752b9d62533d00fad9feff" name="ad39797624a752b9d62533d00fad9feff"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad39797624a752b9d62533d00fad9feff">&#9670;&nbsp;</a></span>CreateUniqueFileName()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::CreateUniqueFileName </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sDirIn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sExtIn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFqnOut</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iOption</em> = <code>0</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Create a unique file name. </p>
+<p >Given a directory and file extension as inputs, create a unique file name.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sDirIn</td><td>Directory </td></tr>
+ <tr><td class="paramname">sExtIn</td><td>File Extension </td></tr>
+ <tr><td class="paramname">sFqnOut</td><td>A fully qualifed unique file name as output </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a></dd></dl>
+<p>Create a unique file name.</p>
+<p >Given a directory and file extension as inputs, create a unique file name.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sDirIn</td><td>Directory </td></tr>
+ <tr><td class="paramname">sExtIn</td><td>File Extension </td></tr>
+ <tr><td class="paramname">iOption</td><td>0 - look only for one file for a given directory and extension<br />
+ 1 - if file name extension is "dbf" or "DBF", verify unique dbt or DBT (memo) file is also available<br />
+ </td></tr>
+ <tr><td class="paramname">sFqnOut</td><td>A fully qualifed unique file name as output </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a01c26b67e312be1e674b3da710e031b9" name="a01c26b67e312be1e674b3da710e031b9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a01c26b67e312be1e674b3da710e031b9">&#9670;&nbsp;</a></span>DeleteAll()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::DeleteAll </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iOption</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Delete or undelete all records in a dbf file (table). </p>
+<p >This routine deletes or un-deletes all records. The xbase file format contains a leading one byte character used for flagging a record as deleted. When a record is deleted, it's not physically removed from the file, the first byte is flagged as deleted.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iOption</td><td>0 - Delete all records.<br />
+ 1 - Un-delete all deleted records. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a3067fdfa3a7a5c15651f6e89d1102176" name="a3067fdfa3a7a5c15651f6e89d1102176"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3067fdfa3a7a5c15651f6e89d1102176">&#9670;&nbsp;</a></span>DeleteAllRecords()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::DeleteAllRecords </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Delete all records. </p>
+<p >This routine deletes all the records in a table / dbf file.</p>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="acd8c10579229f3a2e2c5fdb7fcef90db" name="acd8c10579229f3a2e2c5fdb7fcef90db"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acd8c10579229f3a2e2c5fdb7fcef90db">&#9670;&nbsp;</a></span>DeleteRecord()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::DeleteRecord </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Delete the current record. </p>
+<p >This routine flags the current record for deletion if it's not already flagged.</p>
+<dl class="section return"><dt>Returns</dt><dd>XB_NO_ERROR<br />
+ XB_INVALID_RECORD </dd></dl>
+
+</div>
+</div>
+<a id="a4085ed4f049d976124d8edc3d3c56397" name="a4085ed4f049d976124d8edc3d3c56397"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4085ed4f049d976124d8edc3d3c56397">&#9670;&nbsp;</a></span>DeleteTable()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::DeleteTable </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Delete a table. </p>
+<p >This routine deletes a given table, associated index files if any, the memo file if any and the .INF file if any. </p><dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a5a740033664c9ad2611c90e2a6d0c2d3" name="a5a740033664c9ad2611c90e2a6d0c2d3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5a740033664c9ad2611c90e2a6d0c2d3">&#9670;&nbsp;</a></span>DetermineXbaseMemoVersion()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::DetermineXbaseMemoVersion </td>
+ <td>(</td>
+ <td class="paramtype">unsigned char&#160;</td>
+ <td class="paramname"><em>cFileTypeByte</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Determine which version the memo (dbt) file is. </p>
+<p >This routine uses the first byte in the dbf file to determine which memo file version is in use. The main difference between version 3 and 4 is that version 4 will reuse blocks if they become available. Version 3 does not.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">cFileTypeByte</td><td>is an output field and is one of:<br />
+ <br />
+ 0 - none<br />
+ 3 - Dbase III+<br />
+ 4 - Dbase IV<br />
+</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="ae2b6ac26018dc28f77afbb3f008c3f66" name="ae2b6ac26018dc28f77afbb3f008c3f66"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae2b6ac26018dc28f77afbb3f008c3f66">&#9670;&nbsp;</a></span>DetermineXbaseTableVersion()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::DetermineXbaseTableVersion </td>
+ <td>(</td>
+ <td class="paramtype">unsigned char&#160;</td>
+ <td class="paramname"><em>cFileTypeByte</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Determine xbase dbf version. </p>
+<p >This routine is used to determine which version of the Xbase classes can be used for a given DBF file.<br />
+</p>
+<p >It attempts to use the highest version compiled into the library.<br />
+</p>
+<p >References:<br />
+ This routine uses the first byte from the dbf file.<br />
+ Per DBase documentation:<br />
+ Valid dBASE for Windows table file, bits 0-2 indicate version number: 3 for dBASE Level 5, 4 for dBASE Level 7.<br />
+ Bit 3 and bit 7 indicate presence of a dBASE IV or dBASE for Windows memo file;<br />
+ Bits 4-6 indicate the presence of a dBASE IV SQL table;<br />
+ Bit 7 indicates the presence of any .DBT memo file (either a dBASE III PLUS type or a dBASE IV or dBASE for Windows memo file).<br />
+ <br />
+ Bachmann spec (used extensively in library build), page 7 - does not match DBase documentation<br />
+ <br />
+ returns<br />
+ 0 - unknown<br />
+ 3 - Dbase level 3<br />
+ 4 - Dbase level 4<br />
+ 5 - Dbase Level 5 (future)<br />
+ 7 - Dbase Level 7 (future)<br />
+ <br />
+ 1x - Clipper files (future)<br />
+ 2x - Foxbase files (future)<br />
+ <br />
+ </p>
+
+</div>
+</div>
+<a id="a97dfa59ab9a8e9f17454da0faceb023d" name="a97dfa59ab9a8e9f17454da0faceb023d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a97dfa59ab9a8e9f17454da0faceb023d">&#9670;&nbsp;</a></span>DisplayError()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::DisplayError </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iErrorCode</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Display error message on console for a given error number. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iErrorCode</td><td>Error number to reference </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a47643728f74cf3b6e0ffc55259895bdb" name="a47643728f74cf3b6e0ffc55259895bdb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a47643728f74cf3b6e0ffc55259895bdb">&#9670;&nbsp;</a></span>DumpHeader()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::DumpHeader </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iOption</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Dump dbf file header. </p>
+<p >This routine dumps dbf header information to the console.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iOption</td><td>1 = Print header only<br />
+ 2 = Field data only<br />
+ 3 = Header and Field data<br />
+ 4 = Header, Field and Memo header data if applicable </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="aba30399f15885a07f87f904c0d0656fa" name="aba30399f15885a07f87f904c0d0656fa"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aba30399f15885a07f87f904c0d0656fa">&#9670;&nbsp;</a></span>DumpRecord()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::DumpRecord </td>
+ <td>(</td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ulRecNo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iOutputDest</em> = <code>0</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iOutputFmt</em> = <code>0</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Dump record. </p>
+<p >Dump the contents of the specified record</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ulRecNo</td><td>Record number of record to be dumped. </td></tr>
+ <tr><td class="paramname">iOutputDest</td><td>0 = stdout<br />
+ 1 = Syslog<br />
+ 2 = Both<br />
+</td></tr>
+ <tr><td class="paramname">iOutputFmt</td><td>0 = with field names<br />
+ 1 = 1 line per rec, no field names<br />
+ 2 = 1 line per rec, first line is a list of field names. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="ab14e4a11427f5efb81cba1dd32bd1aa1" name="ab14e4a11427f5efb81cba1dd32bd1aa1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab14e4a11427f5efb81cba1dd32bd1aa1">&#9670;&nbsp;</a></span>eGetDouble()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> xb::xbFile::eGetDouble </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get a portable double value. </p>
+<p >This routine returns a double value from an 8 byte character stream, accounting for endian type.</p>
+<p >Converts a double (64 bit floating point) value stored at p from a portable format to the machine format.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">p</td><td>pointer to memory containing the portable double value</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the double value. </dd></dl>
+
+</div>
+</div>
+<a id="ac40c991110ddc6fb30a72d90f4652762" name="ac40c991110ddc6fb30a72d90f4652762"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac40c991110ddc6fb30a72d90f4652762">&#9670;&nbsp;</a></span>eGetInt16()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::eGetInt16 </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get a portable short value. </p>
+<p >This routine returns a short int value from a 2 byte character stream, accounting for endian type.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">p</td><td>pointer to memory containing the portable long value</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the short value. </dd></dl>
+
+</div>
+</div>
+<a id="a60b24a5afc984c586bf384c7e915ba0d" name="a60b24a5afc984c586bf384c7e915ba0d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a60b24a5afc984c586bf384c7e915ba0d">&#9670;&nbsp;</a></span>eGetInt32()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt32 xb::xbFile::eGetInt32 </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get a portable long value. </p>
+<p >This routine returns a long int value from a 4 byte character stream, accounting for endian type.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">p</td><td>pointer to memory containing the portable long value</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the long value. </dd></dl>
+
+</div>
+</div>
+<a id="a936ade458e6d5e6d29f9b5031888d189" name="a936ade458e6d5e6d29f9b5031888d189"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a936ade458e6d5e6d29f9b5031888d189">&#9670;&nbsp;</a></span>eGetUInt16()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbUInt16 xb::xbFile::eGetUInt16 </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get a portable unsigned short value. </p>
+<p >This routine returns a short unsigned int value from a 2 byte character stream, accounting for endian type.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">p</td><td>pointer to memory containing the portable long value</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the short value. </dd></dl>
+
+</div>
+</div>
+<a id="a78f052529d39a18deaface5a0d47d0b0" name="a78f052529d39a18deaface5a0d47d0b0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a78f052529d39a18deaface5a0d47d0b0">&#9670;&nbsp;</a></span>eGetUInt32()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbUInt32 xb::xbFile::eGetUInt32 </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get a portable unsigned long value. </p>
+<p >This routine returns an unsigned long int value from a 4 byte character stream, accounting for endian type.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">p</td><td>pointer to memory containing the portable long value</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the unsigned long value. </dd></dl>
+
+</div>
+</div>
+<a id="a98b6ff533ae93f90c977a2ba23eeb105" name="a98b6ff533ae93f90c977a2ba23eeb105"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a98b6ff533ae93f90c977a2ba23eeb105">&#9670;&nbsp;</a></span>ePutDouble()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbFile::ePutDouble </td>
+ <td>(</td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>c</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a>&#160;</td>
+ <td class="paramname"><em>d</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Write a portable double value to memory location. </p>
+<p >Converts a double (64 bit floating point) value from machine format to a portable format and stores the converted value in the memory referenced by c.</p>
+<p >This routine puts a double value to an 8 byte character stream</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>Pointer to memory to hold converted value </td></tr>
+ <tr><td class="paramname">d</td><td>Input value to be converted </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a29130f12739ac8fa837f4eaedf1338b2" name="a29130f12739ac8fa837f4eaedf1338b2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a29130f12739ac8fa837f4eaedf1338b2">&#9670;&nbsp;</a></span>ePutInt16()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbFile::ePutInt16 </td>
+ <td>(</td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>c</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>s</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Write a portable short value to memory location. </p>
+<p >Converts a short (16 bit integer) value from machine format to a portable format and stores the converted value in the memory referenced by c.</p>
+<p >This routine puts a short value to a 2 byte character stream</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>Pointer to memory to hold converted value </td></tr>
+ <tr><td class="paramname">s</td><td>Input value to be converted </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a19c37f76a2ccbb45019cb0fc373d3f46" name="a19c37f76a2ccbb45019cb0fc373d3f46"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a19c37f76a2ccbb45019cb0fc373d3f46">&#9670;&nbsp;</a></span>ePutInt32()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbFile::ePutInt32 </td>
+ <td>(</td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>c</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt32&#160;</td>
+ <td class="paramname"><em>l</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Write a portable long value to memory location. </p>
+<p >Converts a long (32 bit integer) value from machine format to a portable format and stores the converted value in the memory referenced by c.</p>
+<p >This routine puts a long value to a 4 byte character stream.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>Pointer to memory to hold converted value </td></tr>
+ <tr><td class="paramname">l</td><td>Input value to be converted </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a65e9839f92b96eac7b0d071fac3bbe40" name="a65e9839f92b96eac7b0d071fac3bbe40"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a65e9839f92b96eac7b0d071fac3bbe40">&#9670;&nbsp;</a></span>ePutUInt16()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbFile::ePutUInt16 </td>
+ <td>(</td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>c</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbUInt16&#160;</td>
+ <td class="paramname"><em>s</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Write a portable unsigned short value to memory location. </p>
+<p >Converts an unsigned short (16 bit integer) value from machine format to a portable format and stores the converted value in the memory referenced by c.</p>
+<p >This routine puts an unsigned short value to a 2 byte character stream</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>Pointer to memory to hold converted value </td></tr>
+ <tr><td class="paramname">s</td><td>Input value to be converted </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="aa3f6ceae4b96f24875d86848bf13a173" name="aa3f6ceae4b96f24875d86848bf13a173"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa3f6ceae4b96f24875d86848bf13a173">&#9670;&nbsp;</a></span>ePutUInt32()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbFile::ePutUInt32 </td>
+ <td>(</td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>c</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ul</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Write a portable unsigned long value to memory location. </p>
+<p >Converts an unsigned long (32 bit integer) value from machine format to a portable format and stores the converted value in the memory referenced by c.</p>
+<p >This routine puts an unsigned long value to a 4 byte character stream.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>Pointer to memory to hold converted value </td></tr>
+ <tr><td class="paramname">ul</td><td>Input value to be converted </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a78bd8a11dce102647095baf3aff2b006" name="a78bd8a11dce102647095baf3aff2b006"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a78bd8a11dce102647095baf3aff2b006">&#9670;&nbsp;</a></span>FileExists() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbFile::FileExists </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Determines if a file exists. </p>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue if file exists<br />
+ xbFalse if file does not exist </dd></dl>
+
+</div>
+</div>
+<a id="a61130b4fbf4cf9d5972dcb4993de2f94" name="a61130b4fbf4cf9d5972dcb4993de2f94"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a61130b4fbf4cf9d5972dcb4993de2f94">&#9670;&nbsp;</a></span>FileExists() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbFile::FileExists </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFileName</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Determines if a file exists. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFileName</td><td>- file name to check for</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue if file exists<br />
+ xbFalse if file does not exist </dd></dl>
+
+</div>
+</div>
+<a id="a0592168f39a10f2a401a88ef781f6148" name="a0592168f39a10f2a401a88ef781f6148"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0592168f39a10f2a401a88ef781f6148">&#9670;&nbsp;</a></span>FileExists() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbFile::FileExists </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFileName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iOption</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Determines if a file exists. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFileName</td><td>- file name to check for </td></tr>
+ <tr><td class="paramname">iOption</td><td>if 1, assume this is a request for a dbf file and check for the a dbt memo file also, returns true if both files are found</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue if both dbf and dbt files exist<br />
+ xbFalse if file does not exist </dd></dl>
+
+</div>
+</div>
+<a id="a174d8a6aabc9cfcd32fedbd1e5b13ddd" name="a174d8a6aabc9cfcd32fedbd1e5b13ddd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a174d8a6aabc9cfcd32fedbd1e5b13ddd">&#9670;&nbsp;</a></span>FileExists() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbFile::FileExists </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iOption</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Determines if a file exists. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iOption</td><td>if 1, assume this is a request for a dbf file and check for the a dbt memo file also, returns true if both files are found</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue if both files exist<br />
+ xbFalse if file does not exist </dd></dl>
+
+</div>
+</div>
+<a id="a7fa837938a32dc9ca3fbc81cbaf50f59" name="a7fa837938a32dc9ca3fbc81cbaf50f59"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7fa837938a32dc9ca3fbc81cbaf50f59">&#9670;&nbsp;</a></span>FileIsOpen()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbFile::FileIsOpen </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Determines if file is open. </p>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue if file is open<br />
+ xbFalse if file is not open </dd></dl>
+
+</div>
+</div>
+<a id="abb9e20c5efacd4fea80f1515abbc6b55" name="abb9e20c5efacd4fea80f1515abbc6b55"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abb9e20c5efacd4fea80f1515abbc6b55">&#9670;&nbsp;</a></span>GetAutoCommit() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetAutoCommit </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get auto commit setting. </p>
+<p >This routine returns the table setting if set, otherwise returns the system level setting.</p>
+<dl class="section return"><dt>Returns</dt><dd>Not 0 - Auto commit on for this table.<br />
+ 0 - Auto commit off for this table. </dd></dl>
+
+</div>
+</div>
+<a id="ae0c00226fd2ea7a67f101e795467ed68" name="ae0c00226fd2ea7a67f101e795467ed68"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae0c00226fd2ea7a67f101e795467ed68">&#9670;&nbsp;</a></span>GetAutoCommit() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetAutoCommit </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iOption</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get auto commit setting. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iOption</td><td>0 - Specific setting for this table<br />
+ 1 - If this table should be auto updated (takes DBMS setting into account) </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Not 0 - Auto commit on for this table.<br />
+ 0 - Auto commit off for this table. </dd></dl>
+
+</div>
+</div>
+<a id="a638e14262410a1627819f016a16cdce2" name="a638e14262410a1627819f016a16cdce2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a638e14262410a1627819f016a16cdce2">&#9670;&nbsp;</a></span>GetBlockSize()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbUInt32 xb::xbFile::GetBlockSize </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the block size. </p>
+<dl class="section return"><dt>Returns</dt><dd>Block Size </dd></dl>
+
+</div>
+</div>
+<a id="ad0827a43c025c1184ffebab74cc9e779" name="ad0827a43c025c1184ffebab74cc9e779"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad0827a43c025c1184ffebab74cc9e779">&#9670;&nbsp;</a></span>GetBof()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbDbf::GetBof </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get a pointer to the current index object. </p>
+<dl class="section return"><dt>Returns</dt><dd>Pointer to current index.</dd></dl>
+<p>Return true if dbf file empty or positioned to the first record</p>
+<dl class="section return"><dt>Returns</dt><dd>Returns true if dbf file is empty or positioned on the first record. </dd></dl>
+
+</div>
+</div>
+<a id="a643a80a3792a52760c8e09ba18719503" name="a643a80a3792a52760c8e09ba18719503"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a643a80a3792a52760c8e09ba18719503">&#9670;&nbsp;</a></span>GetCurRecNo()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbUInt32 xb::xbDbf::GetCurRecNo </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Return the current record number. </p>
+<dl class="section return"><dt>Returns</dt><dd>Returns the current record number. </dd></dl>
+
+</div>
+</div>
+<a id="a1d803a4bfc8ba0561267a0bf9e51f7d9" name="a1d803a4bfc8ba0561267a0bf9e51f7d9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1d803a4bfc8ba0561267a0bf9e51f7d9">&#9670;&nbsp;</a></span>GetDataDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetDataDirectory </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the current data directory. </p>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing the current data directory where the database files are stored. </dd></dl>
+
+</div>
+</div>
+<a id="ac624e06a97666bfd64b4f252b4548b36" name="ac624e06a97666bfd64b4f252b4548b36"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac624e06a97666bfd64b4f252b4548b36">&#9670;&nbsp;</a></span>GetDateField() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetDateField </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFieldName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;&#160;</td>
+ <td class="paramname"><em>dtFieldValue</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get <a class="el" href="classxb_1_1xbDate.html" title="xbDate class.">xbDate</a> field for field name. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFieldName</td><td>Name of field to retrieve. </td></tr>
+ <tr><td class="paramname">dtFieldValue</td><td>Output field value. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="af78ef1fba949463ff7f829d3cffc4555" name="af78ef1fba949463ff7f829d3cffc4555"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af78ef1fba949463ff7f829d3cffc4555">&#9670;&nbsp;</a></span>GetDateField() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetDateField </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iFieldNo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;&#160;</td>
+ <td class="paramname"><em>dtFieldValue</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get <a class="el" href="classxb_1_1xbDate.html" title="xbDate class.">xbDate</a> field for field number. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iFieldNo</td><td>Number of field to retrieve. </td></tr>
+ <tr><td class="paramname">dtFieldValue</td><td>Output field value. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="ac1110d867ba297a52c8b0e83e88f05e6" name="ac1110d867ba297a52c8b0e83e88f05e6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac1110d867ba297a52c8b0e83e88f05e6">&#9670;&nbsp;</a></span>GetDbfStatus()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetDbfStatus </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Return the current dbf status. </p>
+<dl class="section return"><dt>Returns</dt><dd>0 = closed<br />
+ 1 = open<br />
+ 2 = updates pending<br />
+ </dd></dl>
+
+</div>
+</div>
+<a id="a6982f973e81587b04916f4509746aaf5" name="a6982f973e81587b04916f4509746aaf5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6982f973e81587b04916f4509746aaf5">&#9670;&nbsp;</a></span>GetDefaultAutoCommit()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbSsv::GetDefaultAutoCommit </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the default auto commit setting. </p>
+<p >When auto commit is enabled, the library will automatically post any updates when moving off an updated record or closing files. If auto commit is disabled, the application program will need to explicitly update the tables using using dbf-&gt;Put() and dbf-&gt;<a class="el" href="classxb_1_1xbDbf.html#a5b412dd796241673eb1aa2c93513d69b" title="Append the current record to the data file.">AppendRecord()</a>.</p>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue if auto commit is turned on<br />
+ xbFalse is auto commit is turned off </dd></dl>
+
+</div>
+</div>
+<a id="a6fbb9c3a550ab0b3378f9586a57791d2" name="a6fbb9c3a550ab0b3378f9586a57791d2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6fbb9c3a550ab0b3378f9586a57791d2">&#9670;&nbsp;</a></span>GetDefaultDateFormat()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetDefaultDateFormat </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the default date format. </p>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing the default date format. </dd></dl>
+
+</div>
+</div>
+<a id="acd0fb2166b2bff7e8a1cf65a7bc8be1e" name="acd0fb2166b2bff7e8a1cf65a7bc8be1e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acd0fb2166b2bff7e8a1cf65a7bc8be1e">&#9670;&nbsp;</a></span>GetDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbFile::GetDirectory </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the directory name. </p>
+<dl class="section return"><dt>Returns</dt><dd>the directory name of the file </dd></dl>
+
+</div>
+</div>
+<a id="a6e6774df0f2d7733f4b25a9989596d95" name="a6e6774df0f2d7733f4b25a9989596d95"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6e6774df0f2d7733f4b25a9989596d95">&#9670;&nbsp;</a></span>GetDoubleField() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetDoubleField </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFieldName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;&#160;</td>
+ <td class="paramname"><em>dFieldValue</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get xbDouble field for field name. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFieldName</td><td>Name of field to retrieve. </td></tr>
+ <tr><td class="paramname">dFieldValue</td><td>Output field value. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="a4556041a7ff2f6b6f986729901c11f08" name="a4556041a7ff2f6b6f986729901c11f08"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4556041a7ff2f6b6f986729901c11f08">&#9670;&nbsp;</a></span>GetDoubleField() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetDoubleField </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iFieldNo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;&#160;</td>
+ <td class="paramname"><em>dFieldValue</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get xbDouble field for field number. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iFieldNo</td><td>Number of field to retrieve. </td></tr>
+ <tr><td class="paramname">dFieldValue</td><td>Output field value. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="a2370b5e736931441a5968649291b9ef4" name="a2370b5e736931441a5968649291b9ef4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2370b5e736931441a5968649291b9ef4">&#9670;&nbsp;</a></span>GetDoubleField() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetDoubleField </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iFieldNo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;&#160;</td>
+ <td class="paramname"><em>dFieldValue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iRecBufSw</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get xbDouble field for field number. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iFieldNo</td><td>Number of field to retrieve. </td></tr>
+ <tr><td class="paramname">dFieldValue</td><td>Output field value. </td></tr>
+ <tr><td class="paramname">iRecBufSw</td><td>0 - Record buffer with any updates.<br />
+1 - Record buffer with original data. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="a49cd162f066eef2b829ba7c9f6620243" name="a49cd162f066eef2b829ba7c9f6620243"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a49cd162f066eef2b829ba7c9f6620243">&#9670;&nbsp;</a></span>GetEndianType()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbSsv::GetEndianType </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the Endian type. </p>
+<dl class="section return"><dt>Returns</dt><dd>B - Big endian<br />
+ L - Little endian<br />
+ </dd></dl>
+
+</div>
+</div>
+<a id="a256dc1f98626fa77da24e91a38ab5b4d" name="a256dc1f98626fa77da24e91a38ab5b4d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a256dc1f98626fa77da24e91a38ab5b4d">&#9670;&nbsp;</a></span>GetEof()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbDbf::GetEof </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Return true if dbf file empty or positioned to the last record. </p>
+<dl class="section return"><dt>Returns</dt><dd>Returns true if error, dbf file is empty or positioned on the last record. </dd></dl>
+
+</div>
+</div>
+<a id="a56961d2a67b8e7470098626ac4dac7e4" name="a56961d2a67b8e7470098626ac4dac7e4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a56961d2a67b8e7470098626ac4dac7e4">&#9670;&nbsp;</a></span>GetErrorMessage()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char * xb::xbSsv::GetErrorMessage </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iErrorCode</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get an error message. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iErrorCode</td><td>ErrorCode is the error number of description to be returned. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Returns a pointer to a string containing a text description for the error code. </dd></dl>
+
+</div>
+</div>
+<a id="a9a0fcf7e2040ab483e3807927833cb26" name="a9a0fcf7e2040ab483e3807927833cb26"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9a0fcf7e2040ab483e3807927833cb26">&#9670;&nbsp;</a></span>GetField() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetField </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFieldName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFieldValue</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get <a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> field for field name. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFieldName</td><td>Name of field to retrieve </td></tr>
+ <tr><td class="paramname">sFieldValue</td><td>Output field value. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="ac81f078f3c932f0da60ad1fbdd848d3e" name="ac81f078f3c932f0da60ad1fbdd848d3e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac81f078f3c932f0da60ad1fbdd848d3e">&#9670;&nbsp;</a></span>GetField() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetField </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iFieldNo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFieldValue</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get field data for field number. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iFieldNo</td><td>Number of field to retrieve. </td></tr>
+ <tr><td class="paramname">sFieldValue</td><td>Output field value. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="ad245a26eb8b79610c9ae7bab19e05513" name="ad245a26eb8b79610c9ae7bab19e05513"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad245a26eb8b79610c9ae7bab19e05513">&#9670;&nbsp;</a></span>GetField() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetField </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iFieldNo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFieldValue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iRecBufSw</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get field data for field number. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iFieldNo</td><td>Number of field to retrieve. </td></tr>
+ <tr><td class="paramname">sFieldValue</td><td>Output field value. </td></tr>
+ <tr><td class="paramname">iRecBufSw</td><td>0 - Record buffer with any updates.<br />
+1 - Record buffer with original data. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="add27d8ef555a13b336b8c804165dc15e" name="add27d8ef555a13b336b8c804165dc15e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#add27d8ef555a13b336b8c804165dc15e">&#9670;&nbsp;</a></span>GetFieldCnt()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt32 xb::xbDbf::GetFieldCnt </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Return the number of fields in the table. </p>
+<dl class="section return"><dt>Returns</dt><dd>The number of fields in the table. </dd></dl>
+
+</div>
+</div>
+<a id="a607f774fcd6dc0b9913d7a7801b60db2" name="a607f774fcd6dc0b9913d7a7801b60db2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a607f774fcd6dc0b9913d7a7801b60db2">&#9670;&nbsp;</a></span>GetFieldDecimal() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetFieldDecimal </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFieldName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16 &amp;&#160;</td>
+ <td class="paramname"><em>iFieldDecimal</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get decimal for field name. </p>
+<p >This routine retreives a field's decimal length. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFieldName</td><td>Name of field to retrieve </td></tr>
+ <tr><td class="paramname">iFieldDecimal</td><td>Output field value. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="abcb4defad2e1b6e67f63cc60737ad840" name="abcb4defad2e1b6e67f63cc60737ad840"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abcb4defad2e1b6e67f63cc60737ad840">&#9670;&nbsp;</a></span>GetFieldDecimal() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetFieldDecimal </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iFieldNo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16 &amp;&#160;</td>
+ <td class="paramname"><em>iFieldDecimal</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get decimal for field number. </p>
+<p >This routine retreives a field's decimal length. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iFieldNo</td><td>Number of field to retrieve </td></tr>
+ <tr><td class="paramname">iFieldDecimal</td><td>Output field value. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="acf06dbccdba1a4bcd90fa0bea6cca59b" name="acf06dbccdba1a4bcd90fa0bea6cca59b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acf06dbccdba1a4bcd90fa0bea6cca59b">&#9670;&nbsp;</a></span>GetFieldLen() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetFieldLen </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFieldName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16 &amp;&#160;</td>
+ <td class="paramname"><em>iFieldLen</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get field length for field name. </p>
+<p >This function retrieves a field's length.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFieldName</td><td>Name of field to retrieve </td></tr>
+ <tr><td class="paramname">iFieldLen</td><td>Output field length value. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="adda4302b58cc6109b048f19d9b68bbd4" name="adda4302b58cc6109b048f19d9b68bbd4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adda4302b58cc6109b048f19d9b68bbd4">&#9670;&nbsp;</a></span>GetFieldLen() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetFieldLen </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iFieldNo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16 &amp;&#160;</td>
+ <td class="paramname"><em>iFieldLen</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get field length for field number. </p>
+<p >This function retrieves a field's length.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iFieldNo</td><td>Name of field to retrieve </td></tr>
+ <tr><td class="paramname">iFieldLen</td><td>Output field length value. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="a5e3e4368bfba1724c016b8859023e34c" name="a5e3e4368bfba1724c016b8859023e34c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5e3e4368bfba1724c016b8859023e34c">&#9670;&nbsp;</a></span>GetFieldName()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetFieldName </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iFieldNo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFieldName</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns the name of the specified field. </p>
+<p >Returns a pointer to the name for the field specified by iFieldNo.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iFieldNo</td><td>Number of field. </td></tr>
+ <tr><td class="paramname">sFieldName</td><td>Output variable containing the field name. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="aad9029e63909aeb77d8473256d88bea8" name="aad9029e63909aeb77d8473256d88bea8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aad9029e63909aeb77d8473256d88bea8">&#9670;&nbsp;</a></span>GetFieldNo() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetFieldNo </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFieldName</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get field ID number for a given field name. </p>
+<p >Returns the field number for the named field.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFieldName</td><td>Name of field. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Number of field or XB_INVALID_FIELD_NAME. </dd></dl>
+
+</div>
+</div>
+<a id="aed9113b5095c6df1b9c854cbd0d8047b" name="aed9113b5095c6df1b9c854cbd0d8047b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aed9113b5095c6df1b9c854cbd0d8047b">&#9670;&nbsp;</a></span>GetFieldNo() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetFieldNo </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFieldName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16 &amp;&#160;</td>
+ <td class="paramname"><em>iFieldNo</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the field number for name. </p>
+<p >Returns the field number for the named field.</p>
+<p >All field get/put methods require either a field number or field name as one of the parameters. Using the methods that take the field numbers will yield slightly better performance because the methods that take a name, have to look up the number.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFieldName</td><td>Name of field. </td></tr>
+ <tr><td class="paramname">iFieldNo</td><td>Output field number for the given name. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Number of field named fldName. </dd></dl>
+
+</div>
+</div>
+<a id="a181db879f1a75f93a34c03513a0b2fea" name="a181db879f1a75f93a34c03513a0b2fea"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a181db879f1a75f93a34c03513a0b2fea">&#9670;&nbsp;</a></span>GetFieldType() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetFieldType </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFieldName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char &amp;&#160;</td>
+ <td class="paramname"><em>cFieldType</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get field type for field name. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFieldName</td><td>Field name. </td></tr>
+ <tr><td class="paramname">cFieldType</td><td>Output field type. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="a5143973e4f165651152aa13c8fd45f84" name="a5143973e4f165651152aa13c8fd45f84"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5143973e4f165651152aa13c8fd45f84">&#9670;&nbsp;</a></span>GetFieldType() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetFieldType </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iFieldNo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char &amp;&#160;</td>
+ <td class="paramname"><em>cFieldType</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get field type for field number. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iFieldNo</td><td>Field number. </td></tr>
+ <tr><td class="paramname">cFieldType</td><td>Output field type. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="af5127c92892816e9bbc5c19653c4147a" name="af5127c92892816e9bbc5c19653c4147a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af5127c92892816e9bbc5c19653c4147a">&#9670;&nbsp;</a></span>GetFileDirPart() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::GetFileDirPart </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sCompleteFileNameIn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFileDirPartOut</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the directory part of the file name. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sCompleteFileNameIn</td><td>- a fully qualfied input file name </td></tr>
+ <tr><td class="paramname">sFileDirPartOut</td><td>- the returned directory name part out of sCompleteFileNameIn </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a60c53998e3d1b694134b20a87bc9bf5a" name="a60c53998e3d1b694134b20a87bc9bf5a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a60c53998e3d1b694134b20a87bc9bf5a">&#9670;&nbsp;</a></span>GetFileDirPart() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::GetFileDirPart </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFileDirPartOut</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the directory part of the file name. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFileDirPartOut</td><td>- the returned directory name </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="ab289b6ffe955321160c1f90220c22e25" name="ab289b6ffe955321160c1f90220c22e25"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab289b6ffe955321160c1f90220c22e25">&#9670;&nbsp;</a></span>GetFileExtPart() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::GetFileExtPart </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sCompleteFileNameIn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFileExtPartOut</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the extension part of the file name. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sCompleteFileNameIn</td><td>- a fully qualfied input file name</td></tr>
+ <tr><td class="paramname">sFileExtPartOut</td><td>- the returned directory name part out of sCompleteFileNameIn </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a57a9222e5cbb51019d4eeb2c3ac89fa2" name="a57a9222e5cbb51019d4eeb2c3ac89fa2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a57a9222e5cbb51019d4eeb2c3ac89fa2">&#9670;&nbsp;</a></span>GetFileExtPart() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::GetFileExtPart </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFileNameExtOut</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the extension part of the file name. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFileNameExtOut</td><td>- the returned extension part out of sCompleteFileNameIn </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a02df78f4c90313243f508fc56b95aba8" name="a02df78f4c90313243f508fc56b95aba8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a02df78f4c90313243f508fc56b95aba8">&#9670;&nbsp;</a></span>GetFileMtime()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::GetFileMtime </td>
+ <td>(</td>
+ <td class="paramtype">time_t &amp;&#160;</td>
+ <td class="paramname"><em>mtime</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the time of last file modification timestamp as reported by the OS. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">mtime</td><td>- returned time of last file modification </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="ac95cb882ccbcdedc9a233c6ad9fed07a" name="ac95cb882ccbcdedc9a233c6ad9fed07a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac95cb882ccbcdedc9a233c6ad9fed07a">&#9670;&nbsp;</a></span>GetFileName()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbFile::GetFileName </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the file name. </p>
+<dl class="section return"><dt>Returns</dt><dd>the file name portion of the file </dd></dl>
+
+</div>
+</div>
+<a id="a6110763c5ae996b72c7a62c15bdecc73" name="a6110763c5ae996b72c7a62c15bdecc73"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6110763c5ae996b72c7a62c15bdecc73">&#9670;&nbsp;</a></span>GetFileNamePart() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::GetFileNamePart </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sCompleteFileNameIn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFileNamePartOut</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the name part of the file name. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sCompleteFileNameIn</td><td>- a fully qualified input file name </td></tr>
+ <tr><td class="paramname">sFileNamePartOut</td><td>- the returned file name part out of sCompleteFileNameIn </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a81422b3dd52763d2cc6c77237ec9af0a" name="a81422b3dd52763d2cc6c77237ec9af0a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a81422b3dd52763d2cc6c77237ec9af0a">&#9670;&nbsp;</a></span>GetFileNamePart() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::GetFileNamePart </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFileNamePartOut</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the name part of the file name. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFileNamePartOut</td><td>- the returned file name part out of sCompleteFileNameIn </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a50b63c39e49d44e52078038027b24cc5" name="a50b63c39e49d44e52078038027b24cc5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a50b63c39e49d44e52078038027b24cc5">&#9670;&nbsp;</a></span>GetFileSize()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::GetFileSize </td>
+ <td>(</td>
+ <td class="paramtype">xbUInt64 &amp;&#160;</td>
+ <td class="paramname"><em>ullFileSize</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the size of the file as reported by the OS. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ullFileSize</td><td>- unsigned long long field as output </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a5548236d38d43b89ae29b9a015b1f678" name="a5548236d38d43b89ae29b9a015b1f678"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5548236d38d43b89ae29b9a015b1f678">&#9670;&nbsp;</a></span>GetFileType()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::GetFileType </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFileTypeOut</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the file type aka Capitalized file extension. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFileTypeOut</td><td>- the returned extension part out of sCompleteFileNameIn </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a6fc5b8a3e2f177d5ceaf9d975cbb5226" name="a6fc5b8a3e2f177d5ceaf9d975cbb5226"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6fc5b8a3e2f177d5ceaf9d975cbb5226">&#9670;&nbsp;</a></span>GetFirstRecord() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetFirstRecord </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the first record. </p>
+<p >Get the first not deleted record. This routines skips over any deleted records. </p><dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="acb78991e8435edd36318c653cb977c1a" name="acb78991e8435edd36318c653cb977c1a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acb78991e8435edd36318c653cb977c1a">&#9670;&nbsp;</a></span>GetFirstRecord() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetFirstRecord </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iOption</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the first record. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iOption</td><td>XB_ALL_RECS - Get the first record, deleted or not.<br />
+ XB_ACTIVE_RECS - Get the first active record.<br />
+ XB_DELETED_RECS - Get the first deleted record.<br />
+ </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a81ef2f36f921d7ece066a592eb6393eb" name="a81ef2f36f921d7ece066a592eb6393eb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a81ef2f36f921d7ece066a592eb6393eb">&#9670;&nbsp;</a></span>GetFloatField() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetFloatField </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFieldName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacexb.html#a83aa6a550398db55973aa9fb4257e66e">xbFloat</a> &amp;&#160;</td>
+ <td class="paramname"><em>fFieldValue</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get xbFloat field for field name. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFieldName</td><td>Number of field to retrieve. </td></tr>
+ <tr><td class="paramname">fFieldValue</td><td>Output field value. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="a3443f646038ced14425f067a59c0f2da" name="a3443f646038ced14425f067a59c0f2da"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3443f646038ced14425f067a59c0f2da">&#9670;&nbsp;</a></span>GetFloatField() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetFloatField </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iFieldNo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacexb.html#a83aa6a550398db55973aa9fb4257e66e">xbFloat</a> &amp;&#160;</td>
+ <td class="paramname"><em>fFieldValue</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get xbFloat field for field number. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iFieldNo</td><td>Number of field to retrieve. </td></tr>
+ <tr><td class="paramname">fFieldValue</td><td>Output field value. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="a31b4e641f93206ba23e2a5a27491dcd4" name="a31b4e641f93206ba23e2a5a27491dcd4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a31b4e641f93206ba23e2a5a27491dcd4">&#9670;&nbsp;</a></span>GetFqFileName()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbFile::GetFqFileName </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the fully qualified file name. </p>
+<dl class="section return"><dt>Returns</dt><dd>the fully qualfied name of the file </dd></dl>
+
+</div>
+</div>
+<a id="ad56be2756b7a9f8318d9ba5cf215dafb" name="ad56be2756b7a9f8318d9ba5cf215dafb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad56be2756b7a9f8318d9ba5cf215dafb">&#9670;&nbsp;</a></span>GetHeaderLen()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual xbUInt16 xb::xbDbf::GetHeaderLen </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abc9c06c95d71fbad8294e1ae8862cea9" name="abc9c06c95d71fbad8294e1ae8862cea9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abc9c06c95d71fbad8294e1ae8862cea9">&#9670;&nbsp;</a></span>GetHomeDir()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::GetHomeDir </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sHomeDirOut</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get home directory. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sHomeDirOut</td><td>- Output home directory for current user. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a49e667f9c8ee55c36444702663fc5964" name="a49e667f9c8ee55c36444702663fc5964"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a49e667f9c8ee55c36444702663fc5964">&#9670;&nbsp;</a></span>GetLastRecord() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetLastRecord </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the last record. </p>
+<p >Get the last not deleted record. This routines skips over any deleted records. </p><dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a8ccfa2291417412b6894940d1b92f9a6" name="a8ccfa2291417412b6894940d1b92f9a6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8ccfa2291417412b6894940d1b92f9a6">&#9670;&nbsp;</a></span>GetLastRecord() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetLastRecord </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iOption</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the last record. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iOption</td><td>XB_ALL_RECS - Get the last record, deleted or not.<br />
+ XB_ACTIVE_RECS - Get the last active record.<br />
+ XB_DELETED_RECS - Get the last deleted record.<br />
+ </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a4822315bded3969b59aeeb683c373051" name="a4822315bded3969b59aeeb683c373051"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4822315bded3969b59aeeb683c373051">&#9670;&nbsp;</a></span>GetLogDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetLogDirectory </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="afaef09435be73b3111f5edbd7091d861" name="afaef09435be73b3111f5edbd7091d861"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afaef09435be73b3111f5edbd7091d861">&#9670;&nbsp;</a></span>GetLogFileName()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetLogFileName </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a943cea7fde1b06c1a05184193eff8d2d" name="a943cea7fde1b06c1a05184193eff8d2d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a943cea7fde1b06c1a05184193eff8d2d">&#9670;&nbsp;</a></span>GetLogicalField() <span class="overload">[1/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetLogicalField </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFieldName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;&#160;</td>
+ <td class="paramname"><em>bFieldValue</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get logical field for field name. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFieldName</td><td>Name of field to retrieve. </td></tr>
+ <tr><td class="paramname">bFieldValue</td><td>Output field value. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="a9cd6819bfd932ff8507e54d9cb9a624e" name="a9cd6819bfd932ff8507e54d9cb9a624e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9cd6819bfd932ff8507e54d9cb9a624e">&#9670;&nbsp;</a></span>GetLogicalField() <span class="overload">[2/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetLogicalField </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFieldName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFieldValue</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get logical field for field name. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFieldName</td><td>Name of field to retrieve. </td></tr>
+ <tr><td class="paramname">sFieldValue</td><td>Output field value. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="aaf615ddcf08f8cd14efc713c2a8d7ae1" name="aaf615ddcf08f8cd14efc713c2a8d7ae1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaf615ddcf08f8cd14efc713c2a8d7ae1">&#9670;&nbsp;</a></span>GetLogicalField() <span class="overload">[3/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetLogicalField </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iFieldNo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;&#160;</td>
+ <td class="paramname"><em>bFieldValue</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get logical field for field number. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iFieldNo</td><td>Number of field to retrieve. </td></tr>
+ <tr><td class="paramname">bFieldValue</td><td>Output field value. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="ab28feef20c988b0a6f1c1911a45377b0" name="ab28feef20c988b0a6f1c1911a45377b0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab28feef20c988b0a6f1c1911a45377b0">&#9670;&nbsp;</a></span>GetLogicalField() <span class="overload">[4/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetLogicalField </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iFieldNo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;&#160;</td>
+ <td class="paramname"><em>bFieldValue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iRecBufSw</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get logical field for field number. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iFieldNo</td><td>Number of field to retrieve. </td></tr>
+ <tr><td class="paramname">bFieldValue</td><td>Output field value. </td></tr>
+ <tr><td class="paramname">iRecBufSw</td><td>0 - Record buffer with any updates.<br />
+1 - Record buffer with original data. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="a3254f091fc4a1404abed3dd2bcdd6ce6" name="a3254f091fc4a1404abed3dd2bcdd6ce6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3254f091fc4a1404abed3dd2bcdd6ce6">&#9670;&nbsp;</a></span>GetLogicalField() <span class="overload">[5/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetLogicalField </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iFieldNo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFieldValue</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get logical field for field number. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iFieldNo</td><td>Number of field to retrieve. </td></tr>
+ <tr><td class="paramname">sFieldValue</td><td>Output field value. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="a7b8ef75b17941beac17e50e969b2d3db" name="a7b8ef75b17941beac17e50e969b2d3db"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7b8ef75b17941beac17e50e969b2d3db">&#9670;&nbsp;</a></span>GetLongField() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetLongField </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFieldName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt32 &amp;&#160;</td>
+ <td class="paramname"><em>lFieldValue</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get long field for field name. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFieldName</td><td>Number of field to retrieve. </td></tr>
+ <tr><td class="paramname">lFieldValue</td><td>Output field value. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="abe525c0820640e0a9e169d0b7913cfa1" name="abe525c0820640e0a9e169d0b7913cfa1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abe525c0820640e0a9e169d0b7913cfa1">&#9670;&nbsp;</a></span>GetLongField() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetLongField </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iFieldNo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt32 &amp;&#160;</td>
+ <td class="paramname"><em>lFieldValue</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get long field for field number. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iFieldNo</td><td>Number of field to retrieve. </td></tr>
+ <tr><td class="paramname">lFieldValue</td><td>Output field value. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="abd58031c5f1c3766c24d47a82e6fd9c5" name="abd58031c5f1c3766c24d47a82e6fd9c5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abd58031c5f1c3766c24d47a82e6fd9c5">&#9670;&nbsp;</a></span>GetMultiUser()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbSsv::GetMultiUser </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the multi user setting. </p>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue - Multi user mode turned on.<br />
+ xbFalse - Multi user mode turned off.<br />
+ </dd></dl>
+
+</div>
+</div>
+<a id="ab896fe3b734f556de578d30f92b18fe2" name="ab896fe3b734f556de578d30f92b18fe2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab896fe3b734f556de578d30f92b18fe2">&#9670;&nbsp;</a></span>GetNextRecord() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetNextRecord </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the next record. </p>
+<p >Get the next not deleted record. This routines skips over any deleted records. </p><dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a3191428a7a92d9107d8d42448884f2ac" name="a3191428a7a92d9107d8d42448884f2ac"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3191428a7a92d9107d8d42448884f2ac">&#9670;&nbsp;</a></span>GetNextRecord() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetNextRecord </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iOption</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the next record. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iOption</td><td>XB_ALL_RECS - Get the next record, deleted or not.<br />
+ XB_ACTIVE_RECS - Get the next active record.<br />
+ XB_DELETED_RECS - Get the next deleted record.<br />
+ </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a18fdcb4ab15b36cd47fa6f6f7a540d1a" name="a18fdcb4ab15b36cd47fa6f6f7a540d1a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a18fdcb4ab15b36cd47fa6f6f7a540d1a">&#9670;&nbsp;</a></span>GetNextRecord() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetNextRecord </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iOption</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ulStartRec</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the next record. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iOption</td><td>XB_ALL_RECS - Get the next record, deleted or not.<br />
+ XB_ACTIVE_RECS - Get the next active record.<br />
+ XB_DELETED_RECS - Get the next deleted record.<br />
+ </td></tr>
+ <tr><td class="paramname">ulStartRec</td><td>Get next record, starting from ulStartRec. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a909788123ce0694b65dfcf036380d918" name="a909788123ce0694b65dfcf036380d918"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a909788123ce0694b65dfcf036380d918">&#9670;&nbsp;</a></span>GetNullSts() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetNullSts </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFieldName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;&#160;</td>
+ <td class="paramname"><em>bIsNull</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get field null status. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iFieldName</td><td>Field Name of field to retrieve. </td></tr>
+ <tr><td class="paramname">bIsNull</td><td>Output field value. If field is all spaces on record buffer, returns true. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="ae9a3f726ce5229ed021bfce0515050fc" name="ae9a3f726ce5229ed021bfce0515050fc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae9a3f726ce5229ed021bfce0515050fc">&#9670;&nbsp;</a></span>GetNullSts() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetNullSts </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iFieldNo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;&#160;</td>
+ <td class="paramname"><em>bIsNull</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get field null status. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iFieldNo</td><td>Number of field to retrieve. </td></tr>
+ <tr><td class="paramname">bIsNull</td><td>Output field value. If field is all spaces on record buffer, returns true. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="a7930fe8b930c6d646b7b0d3df576fe9e" name="a7930fe8b930c6d646b7b0d3df576fe9e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7930fe8b930c6d646b7b0d3df576fe9e">&#9670;&nbsp;</a></span>GetNullSts() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetNullSts </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iFieldNo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;&#160;</td>
+ <td class="paramname"><em>bIsNull</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iRecBufSw</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get field null status. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iFieldNo</td><td>Number of field to retrieve. </td></tr>
+ <tr><td class="paramname">bIsNull</td><td>Output field value. If field is all spaces on record buffer, returns true. </td></tr>
+ <tr><td class="paramname">iRecBufSw</td><td>0 - Record buffer with any updates.<br />
+1 - Record buffer with original data. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="a3c500dc9dac22c49496e4b29386b2dd3" name="a3c500dc9dac22c49496e4b29386b2dd3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3c500dc9dac22c49496e4b29386b2dd3">&#9670;&nbsp;</a></span>GetOpenMode()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::GetOpenMode </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the open mode of the file. </p>
+<dl class="section return"><dt>Returns</dt><dd>XB_READ<br />
+ XB_READ_WRITE<br />
+ XB_WRITE<br />
+ </dd></dl>
+
+</div>
+</div>
+<a id="a63cee13b473ee13970e93b11837b9e35" name="a63cee13b473ee13970e93b11837b9e35"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a63cee13b473ee13970e93b11837b9e35">&#9670;&nbsp;</a></span>GetPathSeparator()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">char xb::xbSsv::GetPathSeparator </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the OS dependent path separator. </p>
+<dl class="section return"><dt>Returns</dt><dd>Returns '\' for windows environment, otherwise returns '/'. </dd></dl>
+
+</div>
+</div>
+<a id="ab3d248e5221b4f0809897cd43af17a1e" name="ab3d248e5221b4f0809897cd43af17a1e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab3d248e5221b4f0809897cd43af17a1e">&#9670;&nbsp;</a></span>GetPrevRecord() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetPrevRecord </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the previous record. </p>
+<p >Get the previous not deleted record. This routine skips over any deleted records. </p><dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a7eadc7b08d73003802b90584f7b33387" name="a7eadc7b08d73003802b90584f7b33387"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7eadc7b08d73003802b90584f7b33387">&#9670;&nbsp;</a></span>GetPrevRecord() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetPrevRecord </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iOption</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the previous record. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iOption</td><td>XB_ALL_RECS - Get the previous record, deleted or not.<br />
+ XB_ACTIVE_RECS - Get the previous active record.<br />
+ XB_DELETED_RECS - Get the previous deleted record.<br />
+ </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="aabd146c0e1054ab905ec96aedd84b02e" name="aabd146c0e1054ab905ec96aedd84b02e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aabd146c0e1054ab905ec96aedd84b02e">&#9670;&nbsp;</a></span>GetRawField()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetRawField </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iFieldNo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>cBuf</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ulBufSize</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iRecBufSw</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get raw field data for field number. </p>
+<p >This is a protected method, used by other methods. This method would be subject to buffer overflows if made public.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iFieldNo</td><td>Number of field to retrieve. </td></tr>
+ <tr><td class="paramname">cBuf</td><td>Pointer to buffer area provided by calling application program. </td></tr>
+ <tr><td class="paramname">ulBufSize</td><td>Size of data to copy </td></tr>
+ <tr><td class="paramname">iRecBufSw</td><td>0 - Record buffer with any updates.<br />
+1 - Record buffer with original data. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="a26fba086b07caeab95066bf1c8d25161" name="a26fba086b07caeab95066bf1c8d25161"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a26fba086b07caeab95066bf1c8d25161">&#9670;&nbsp;</a></span>GetRecord()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetRecord </td>
+ <td>(</td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ulRecNo</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get record for specified record number. </p>
+<p >Retrieve a record from disk and load it into the record buffer. If auto commit is enabled and there are pending updates, this routine will flush the updates to disk before proceeding to ulRecNo.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ulRecNo</td><td>- Record number to retrieve. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="aa3e38c4057d726a28a27d07a1610d124" name="aa3e38c4057d726a28a27d07a1610d124"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa3e38c4057d726a28a27d07a1610d124">&#9670;&nbsp;</a></span>GetRecordBuf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">char * xb::xbDbf::GetRecordBuf </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iOpt</em> = <code>0</code></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get pointer to record buffer. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iOpt</td><td>0 for RecBuf (current) or 1 for RecBuf2 (original contents)</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Pointer to record buffer. </dd></dl>
+
+</div>
+</div>
+<a id="ac196ad55335e1f4789d698748434dc89" name="ac196ad55335e1f4789d698748434dc89"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac196ad55335e1f4789d698748434dc89">&#9670;&nbsp;</a></span>GetRecordCnt()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetRecordCnt </td>
+ <td>(</td>
+ <td class="paramtype">xbUInt32 &amp;&#160;</td>
+ <td class="paramname"><em>ulRecCnt</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the current number of records in the dbf data file. </p>
+<dl class="section return"><dt>Returns</dt><dd>Record count or <a href="xbretcod_8h.html">Return Codes</a></dd></dl>
+<p>Get the current number of records in the dbf data file.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ulRecCnt</td><td>Output number of records in file. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="ab50d76c6e29e81e347a6feb04c2f62bb" name="ab50d76c6e29e81e347a6feb04c2f62bb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab50d76c6e29e81e347a6feb04c2f62bb">&#9670;&nbsp;</a></span>GetRecordLen()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbUInt16 xb::xbDbf::GetRecordLen </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the dbf record length. </p>
+<dl class="section return"><dt>Returns</dt><dd>Record length. </dd></dl>
+
+</div>
+</div>
+<a id="a9b63e05b77f477ff6109ff7b9432c1b6" name="a9b63e05b77f477ff6109ff7b9432c1b6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9b63e05b77f477ff6109ff7b9432c1b6">&#9670;&nbsp;</a></span>GetShareMode()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::GetShareMode </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the share mode of the file. </p>
+<dl class="section return"><dt>Returns</dt><dd>XB_SINGLE_USER - (file buffering on&gt;<br />
+ XB_MULTI_USER - (file buffering off)<br />
+ </dd></dl>
+
+</div>
+</div>
+<a id="a27758a325c097f204247908b65ba7fbd" name="a27758a325c097f204247908b65ba7fbd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a27758a325c097f204247908b65ba7fbd">&#9670;&nbsp;</a></span>GetTblAlias()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbDbf::GetTblAlias </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the table alias. </p>
+<p >This routine returns the table alias. </p><dl class="section return"><dt>Returns</dt><dd>Table alias </dd></dl>
+
+</div>
+</div>
+<a id="abfaeef85935331073d213465bb362a61" name="abfaeef85935331073d213465bb362a61"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abfaeef85935331073d213465bb362a61">&#9670;&nbsp;</a></span>GetTempDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetTempDirectory </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the current temp directory. </p>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing the current data directory where the database files are stored. </dd></dl>
+
+</div>
+</div>
+<a id="a039eb02418ec4ca862adbc0f95b9cbec" name="a039eb02418ec4ca862adbc0f95b9cbec"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a039eb02418ec4ca862adbc0f95b9cbec">&#9670;&nbsp;</a></span>GetULongField() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetULongField </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFieldName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbUInt32 &amp;&#160;</td>
+ <td class="paramname"><em>ulFieldValue</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get unsigned long field for field name. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFieldName</td><td>Number of field to retrieve. </td></tr>
+ <tr><td class="paramname">ulFieldValue</td><td>Output field value. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="a67e3a050f9090edf69eee75aef7f5d83" name="a67e3a050f9090edf69eee75aef7f5d83"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a67e3a050f9090edf69eee75aef7f5d83">&#9670;&nbsp;</a></span>GetULongField() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetULongField </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iFieldNo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbUInt32 &amp;&#160;</td>
+ <td class="paramname"><em>ulFieldValue</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get unsigned long field for field number. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iFieldNo</td><td>Number of field to retrieve. </td></tr>
+ <tr><td class="paramname">ulFieldValue</td><td>Output field value. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="a49212a9eb17f7fa9f303e08d5fc50fc6" name="a49212a9eb17f7fa9f303e08d5fc50fc6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a49212a9eb17f7fa9f303e08d5fc50fc6">&#9670;&nbsp;</a></span>GetVersion()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual xbInt16 xb::xbDbf::GetVersion </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7af337808919680b90710ad5e8a99232" name="a7af337808919680b90710ad5e8a99232"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7af337808919680b90710ad5e8a99232">&#9670;&nbsp;</a></span>GetXbaseFileTypeByte() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::GetXbaseFileTypeByte </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFileName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned char &amp;&#160;</td>
+ <td class="paramname"><em>cFileTypeByte</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the file type byte and version of the dbf file. </p>
+<p >Pull the first bye off the DBF file for further inspection. First byte has various bits set to determine what the file format is.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFileName</td><td>- Name of file to examine </td></tr>
+ <tr><td class="paramname">cFileTypeByte</td><td>- Retruned first byte of dbf file </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a78aebdd21d3de46a450d5f835e3027f6" name="a78aebdd21d3de46a450d5f835e3027f6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a78aebdd21d3de46a450d5f835e3027f6">&#9670;&nbsp;</a></span>GetXbaseFileTypeByte() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::GetXbaseFileTypeByte </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFileName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned char &amp;&#160;</td>
+ <td class="paramname"><em>cFileTypeByte</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16 &amp;&#160;</td>
+ <td class="paramname"><em>iVersion</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the file type byte and version of the dbf file. </p>
+<p >Pull the first bye off the DBF file for further inspection. First byte has various bits set to determine what the file format is.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFileName</td><td>- Name of file to examine </td></tr>
+ <tr><td class="paramname">cFileTypeByte</td><td>- Returned first byte of dbf file </td></tr>
+ <tr><td class="paramname">iVersion</td><td>- Returned file version </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="aaf2e697751a0beff41432a66bb83fb5e" name="aaf2e697751a0beff41432a66bb83fb5e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaf2e697751a0beff41432a66bb83fb5e">&#9670;&nbsp;</a></span>GetXbaseFileTypeByte() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::GetXbaseFileTypeByte </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFileName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16 &amp;&#160;</td>
+ <td class="paramname"><em>iVersion</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the file type byte and version of the dbf file. </p>
+<p >Pull the first bye off the DBF file for further inspection. First byte has various bits set to determine what the file format is.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFileName</td><td>- Name of file to examine </td></tr>
+ <tr><td class="paramname">iVersion</td><td>- Returned file version </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="ab21ec23c076b0c9affdc0f6672bd133f" name="ab21ec23c076b0c9affdc0f6672bd133f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab21ec23c076b0c9affdc0f6672bd133f">&#9670;&nbsp;</a></span>GetXbasePtr()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> * xb::xbDbf::GetXbasePtr </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the pointer to the xbXbase structure,. </p>
+<dl class="section return"><dt>Returns</dt><dd>Pointer to xbXbase structure. </dd></dl>
+
+</div>
+</div>
+<a id="ad06fe0f7975fb81125d27d82504e6829" name="ad06fe0f7975fb81125d27d82504e6829"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad06fe0f7975fb81125d27d82504e6829">&#9670;&nbsp;</a></span>InitVars()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbDbf::InitVars </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a013dc8c51fc1aa988de39cf3da6da950" name="a013dc8c51fc1aa988de39cf3da6da950"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a013dc8c51fc1aa988de39cf3da6da950">&#9670;&nbsp;</a></span>MemoFieldsExist()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbDbf::MemoFieldsExist </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Check for existence of any memo fields. </p>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue - Memo fields exist.<br />
+xbFalse - Memo fields don't exist. </dd></dl>
+
+</div>
+</div>
+<a id="a361e3cc318bbf1c4d10f069e0800a24e" name="a361e3cc318bbf1c4d10f069e0800a24e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a361e3cc318bbf1c4d10f069e0800a24e">&#9670;&nbsp;</a></span>NameSuffixMissing()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::NameSuffixMissing </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFileName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iOption</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Determines status of file extension. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFileName</td><td>- Name of file to examine </td></tr>
+ <tr><td class="paramname">iOption</td><td>- Inspection type<br />
+ 1 check for DBF<br />
+ 2 check for NDX<br />
+ 3 check for MDX<br />
+ 4 check for NTX<br />
+</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>0 if suffix found<br />
+ 1 if suffix not found, lower case<br />
+ 2 is suffix not found, upper case<br />
+ </dd></dl>
+
+</div>
+</div>
+<a id="a69824d7bafc3f5a15bf7d09f2f511768" name="a69824d7bafc3f5a15bf7d09f2f511768"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a69824d7bafc3f5a15bf7d09f2f511768">&#9670;&nbsp;</a></span>Open() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::Open </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sTableName</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Open a table/dbf file. </p>
+<p >This routine sets the alias name to the same as the table name.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sTableName</td><td>Table name to open, Include the .dbf or .DBF extension. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="ae388c5e02adc86e6e9988e697e061610" name="ae388c5e02adc86e6e9988e697e061610"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae388c5e02adc86e6e9988e697e061610">&#9670;&nbsp;</a></span>Open() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::Open </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sTableName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sAlias</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Open a table/dbf file. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sTableName</td><td>Table name to open, Include the .dbf or .DBF extension. </td></tr>
+ <tr><td class="paramname">sAlias</td><td>Alias name to assign to this entry. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a4d018cbf44d8d8b2145c9acab02c8adf" name="a4d018cbf44d8d8b2145c9acab02c8adf"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4d018cbf44d8d8b2145c9acab02c8adf">&#9670;&nbsp;</a></span>Open() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual xbInt16 xb::xbDbf::Open </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sTableName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sAlias</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iOpenMode</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iShareMode</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8a52bf3ef2123c0d17e6b1f67bf0dc55" name="a8a52bf3ef2123c0d17e6b1f67bf0dc55"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8a52bf3ef2123c0d17e6b1f67bf0dc55">&#9670;&nbsp;</a></span>Pack() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::Pack </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Pack dbf file. </p>
+<p >This routine eliminates all deleted records from the file. </p><dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a93bb14ad0451355bfa3379128120988a" name="a93bb14ad0451355bfa3379128120988a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a93bb14ad0451355bfa3379128120988a">&#9670;&nbsp;</a></span>Pack() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::Pack </td>
+ <td>(</td>
+ <td class="paramtype">xbUInt32 &amp;&#160;</td>
+ <td class="paramname"><em>ulDeletedRecCnt</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Pack dbf file. </p>
+<p >This routine eliminates all deleted records from the file and clears out any unused blocks in the memo file if one exists. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ulDeletedRecCnt</td><td>- Output - number of recrods removed from the file. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a571b36b3a940b1a16d5e834f329b33b9" name="a571b36b3a940b1a16d5e834f329b33b9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a571b36b3a940b1a16d5e834f329b33b9">&#9670;&nbsp;</a></span>PutDateField() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::PutDateField </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFieldName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;&#160;</td>
+ <td class="paramname"><em>dtFieldValue</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Put date field for field name. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFieldName</td><td>Name of field to update. </td></tr>
+ <tr><td class="paramname">dtFieldValue</td><td>Field value. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="a873f04af528a9d81e6a367a59d998ec5" name="a873f04af528a9d81e6a367a59d998ec5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a873f04af528a9d81e6a367a59d998ec5">&#9670;&nbsp;</a></span>PutDateField() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::PutDateField </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iFieldNo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;&#160;</td>
+ <td class="paramname"><em>dtFieldValue</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Put date field for field number. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iFieldNo</td><td>Number of field to update. </td></tr>
+ <tr><td class="paramname">dtFieldValue</td><td>Field value. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="ae695bbc71c19abc71c0c5f2ff2e1f971" name="ae695bbc71c19abc71c0c5f2ff2e1f971"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae695bbc71c19abc71c0c5f2ff2e1f971">&#9670;&nbsp;</a></span>PutDoubleField() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::PutDoubleField </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFieldName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a>&#160;</td>
+ <td class="paramname"><em>dFieldValue</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Put double field for field name. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFieldName</td><td>Name of field to update. </td></tr>
+ <tr><td class="paramname">dFieldValue</td><td>Field value. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="a4f34842d7e8ff1f16992c2ece2fc38a5" name="a4f34842d7e8ff1f16992c2ece2fc38a5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4f34842d7e8ff1f16992c2ece2fc38a5">&#9670;&nbsp;</a></span>PutDoubleField() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::PutDoubleField </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iFieldNo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a>&#160;</td>
+ <td class="paramname"><em>dFieldValue</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Put double field for field number. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iFieldNo</td><td>Number of field to update. </td></tr>
+ <tr><td class="paramname">dFieldValue</td><td>Field value. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="a7862215dd2f83a1c488e539cd1f9aec0" name="a7862215dd2f83a1c488e539cd1f9aec0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7862215dd2f83a1c488e539cd1f9aec0">&#9670;&nbsp;</a></span>PutField() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::PutField </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFieldName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFieldValue</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Put field for field name. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFieldName</td><td>Name of field to update. </td></tr>
+ <tr><td class="paramname">sFieldValue</td><td>Field value. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="a142b0c0dc904917f3c68c5572c1237b5" name="a142b0c0dc904917f3c68c5572c1237b5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a142b0c0dc904917f3c68c5572c1237b5">&#9670;&nbsp;</a></span>PutField() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::PutField </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iFieldNo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFieldValue</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Put field for field number. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iFieldNo</td><td>Number of field to update. </td></tr>
+ <tr><td class="paramname">sFieldValue</td><td>Field value. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="a4ea3241bc710d57e5f755efda62288ad" name="a4ea3241bc710d57e5f755efda62288ad"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4ea3241bc710d57e5f755efda62288ad">&#9670;&nbsp;</a></span>PutFloatField() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::PutFloatField </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFieldName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacexb.html#a83aa6a550398db55973aa9fb4257e66e">xbFloat</a>&#160;</td>
+ <td class="paramname"><em>fFieldValue</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Put float field for field name. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFieldName</td><td>Name of field to update. </td></tr>
+ <tr><td class="paramname">fFieldValue</td><td>Field value. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="a64161eb50d72e424b11bf3732657ebd8" name="a64161eb50d72e424b11bf3732657ebd8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a64161eb50d72e424b11bf3732657ebd8">&#9670;&nbsp;</a></span>PutFloatField() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::PutFloatField </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iFieldNo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacexb.html#a83aa6a550398db55973aa9fb4257e66e">xbFloat</a>&#160;</td>
+ <td class="paramname"><em>fFieldValue</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Put float field for field number. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iFieldNo</td><td>Number of field to update. </td></tr>
+ <tr><td class="paramname">fFieldValue</td><td>Field value. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="a507e400ca6526a9e0391cf06dd6a014e" name="a507e400ca6526a9e0391cf06dd6a014e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a507e400ca6526a9e0391cf06dd6a014e">&#9670;&nbsp;</a></span>PutLogicalField() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::PutLogicalField </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFieldName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFieldValue</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Put logical field for field name. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFieldName</td><td>Name of field to update. </td></tr>
+ <tr><td class="paramname">sFieldValue</td><td>Field value. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="a623ca3ef5520c42308c1a16b518e7ff3" name="a623ca3ef5520c42308c1a16b518e7ff3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a623ca3ef5520c42308c1a16b518e7ff3">&#9670;&nbsp;</a></span>PutLogicalField() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::PutLogicalField </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFieldName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td>
+ <td class="paramname"><em>bFieldValue</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Put logical field for field name. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFieldName</td><td>Name of field to update. </td></tr>
+ <tr><td class="paramname">bFieldValue</td><td>Field value. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="ab39ac4269ac63bc7ea4f638733bb17f0" name="ab39ac4269ac63bc7ea4f638733bb17f0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab39ac4269ac63bc7ea4f638733bb17f0">&#9670;&nbsp;</a></span>PutLogicalField() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::PutLogicalField </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iFieldNo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFieldValue</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Put logical field for field number. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iFieldNo</td><td>Number of field to update. </td></tr>
+ <tr><td class="paramname">sFieldValue</td><td>Field value. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="a423a0cb7bd252cedf956ace4954f275d" name="a423a0cb7bd252cedf956ace4954f275d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a423a0cb7bd252cedf956ace4954f275d">&#9670;&nbsp;</a></span>PutLogicalField() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::PutLogicalField </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iFieldNo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td>
+ <td class="paramname"><em>bFieldValue</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Put logical field for field number. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iFieldNo</td><td>Number of field to update. </td></tr>
+ <tr><td class="paramname">bFieldValue</td><td>Field value. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="a0692d1776a725c2f61d4c14677e9307c" name="a0692d1776a725c2f61d4c14677e9307c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0692d1776a725c2f61d4c14677e9307c">&#9670;&nbsp;</a></span>PutLongField() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::PutLongField </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFieldName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt32&#160;</td>
+ <td class="paramname"><em>lFieldValue</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Put long field for field name. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFieldName</td><td>Name of field to update. </td></tr>
+ <tr><td class="paramname">lFieldValue</td><td>Field value. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="a56c8f924284bf88aabf90b7930b4eb47" name="a56c8f924284bf88aabf90b7930b4eb47"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a56c8f924284bf88aabf90b7930b4eb47">&#9670;&nbsp;</a></span>PutLongField() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::PutLongField </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iFieldNo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt32&#160;</td>
+ <td class="paramname"><em>lFieldValue</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Put long field for field number. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iFieldNo</td><td>Number of field to update. </td></tr>
+ <tr><td class="paramname">lFieldValue</td><td>Field value. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="a3c36a5ffbc7067a1abbcb526dd3b981d" name="a3c36a5ffbc7067a1abbcb526dd3b981d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3c36a5ffbc7067a1abbcb526dd3b981d">&#9670;&nbsp;</a></span>PutRecord() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::PutRecord </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Write the current record to disk. </p>
+<p >This routine is used to write any updates to the current record buffer to disk.</p>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="aacbc7bac3ea0c502ee75b838f4f0fcbf" name="aacbc7bac3ea0c502ee75b838f4f0fcbf"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aacbc7bac3ea0c502ee75b838f4f0fcbf">&#9670;&nbsp;</a></span>PutRecord() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::PutRecord </td>
+ <td>(</td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ulRecNo</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Write record to disk. </p>
+<p >This routine is used to write a copy of the current record buffer to disk for a given record number.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ulRecNo</td><td>Record number to update. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="ac62cb97c4e678c83f41788b1ae4d0381" name="ac62cb97c4e678c83f41788b1ae4d0381"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac62cb97c4e678c83f41788b1ae4d0381">&#9670;&nbsp;</a></span>PutULongField() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::PutULongField </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFieldName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ulFieldValue</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Put unsigned long field for field name. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFieldName</td><td>Name of field to update. </td></tr>
+ <tr><td class="paramname">ulFieldValue</td><td>Field value. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="af5dec5c9ff903efffdb0490a44d296d2" name="af5dec5c9ff903efffdb0490a44d296d2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af5dec5c9ff903efffdb0490a44d296d2">&#9670;&nbsp;</a></span>PutULongField() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::PutULongField </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iFieldNo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ulFieldValue</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Put unsigned long field for field number. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iFieldNo</td><td>Number of field to update. </td></tr>
+ <tr><td class="paramname">ulFieldValue</td><td>Field value. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="aa1bb80340abc7a5c22f87f878e9dc825" name="aa1bb80340abc7a5c22f87f878e9dc825"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa1bb80340abc7a5c22f87f878e9dc825">&#9670;&nbsp;</a></span>ReadBlock() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::ReadBlock </td>
+ <td>(</td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ulBlockNo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>lReadSize</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>buf</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Read a block of data from file. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ulBlockNo</td><td>- block number to read </td></tr>
+ <tr><td class="paramname">lReadSize</td><td>- size of data to read at block location, set to 0 to read blocksize </td></tr>
+ <tr><td class="paramname">*buf</td><td>- pointer to buffer to write output data, assumed to be previosuly allocated and large enough to contain data </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="aef696b1c4c0ef5338e818599f695d485" name="aef696b1c4c0ef5338e818599f695d485"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aef696b1c4c0ef5338e818599f695d485">&#9670;&nbsp;</a></span>ReadBlock() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::ReadBlock </td>
+ <td>(</td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ulBlockNo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ulBlockSize</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>lReadSize</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>buf</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Read a block of data from file. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ulBlockNo</td><td>- block number to read </td></tr>
+ <tr><td class="paramname">ulBlockSize</td><td>- block size </td></tr>
+ <tr><td class="paramname">lReadSize</td><td>- size of data to read at block location, set to 0 to read blocksize </td></tr>
+ <tr><td class="paramname">buf</td><td>- pointer to buffer to write output data, assumed to be previosuly allocated and large enough to contain data </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a060541addb5bb1f0fe12959ed6f66fb9" name="a060541addb5bb1f0fe12959ed6f66fb9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a060541addb5bb1f0fe12959ed6f66fb9">&#9670;&nbsp;</a></span>ReadHeader()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::ReadHeader </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iPositionOption</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iReadOption</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Read dbf file header information. </p>
+<p >This method assumes the header has been locked appropriately in a multi user environment</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iPositionOption</td><td>0 - Don't fseek to beginning of file before read.<br />
+ 1 - Start from beginning of file.</td></tr>
+ <tr><td class="paramname">iReadOption</td><td>0 - Read entire 32 byte header<br />
+ 1 - Read first eight bytes which includes the last update date and number of records.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a94d7d626ba691fd4b740c034673e6fc6" name="a94d7d626ba691fd4b740c034673e6fc6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a94d7d626ba691fd4b740c034673e6fc6">&#9670;&nbsp;</a></span>RecordDeleted()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::RecordDeleted </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iOpt</em> = <code>0</code></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Return record deletion status. </p>
+<p >This routine returns the record deletion status. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iOpt</td><td>0 = Current record buffer, 1 = Original record buffer </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue - Record deleted.<br />
+xbFalse - Record not deleted. </dd></dl>
+
+</div>
+</div>
+<a id="aeeeb2eb5fabcd0f91d457df07b0e0708" name="aeeeb2eb5fabcd0f91d457df07b0e0708"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aeeeb2eb5fabcd0f91d457df07b0e0708">&#9670;&nbsp;</a></span>Rename()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual xbInt16 xb::xbDbf::Rename </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a>&#160;</td>
+ <td class="paramname"><em>sNewName</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a4cf7f0d423164f3cf074ae41f96f4e90" name="a4cf7f0d423164f3cf074ae41f96f4e90"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4cf7f0d423164f3cf074ae41f96f4e90">&#9670;&nbsp;</a></span>SetAutoCommit()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::SetAutoCommit </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iAutoCommit</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Set auto commit. </p>
+<p >This routine sets the auto commit setting for this table. </p><dl class="section return"><dt>Returns</dt><dd>XB_NO_ERROR; </dd></dl>
+
+</div>
+</div>
+<a id="a991c5676a6f38fa752435390989f413e" name="a991c5676a6f38fa752435390989f413e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a991c5676a6f38fa752435390989f413e">&#9670;&nbsp;</a></span>SetBlockSize()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::SetBlockSize </td>
+ <td>(</td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ulBlockSize</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Set the block size. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ulBlockSize</td><td>- unsigned long block size, divisible by 512 </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a57caaaadfbd089d9a58ecfcb50c88a6c" name="a57caaaadfbd089d9a58ecfcb50c88a6c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a57caaaadfbd089d9a58ecfcb50c88a6c">&#9670;&nbsp;</a></span>SetDataDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetDataDirectory </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sDataDirectory</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Set the data directory. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sDataDirectory</td><td>Set the data directory. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a25542afadaaf39b4fb5a1772a29cc0bd" name="a25542afadaaf39b4fb5a1772a29cc0bd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a25542afadaaf39b4fb5a1772a29cc0bd">&#9670;&nbsp;</a></span>SetDefaultAutoCommit()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetDefaultAutoCommit </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td>
+ <td class="paramname"><em>bDefaultAutoCommit</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Set the default auto commit. </p>
+<p >Disabling auto commit requires the application execute explicit updates using dbf-&gt;Put() and dbf-&gt;<a class="el" href="classxb_1_1xbDbf.html#a5b412dd796241673eb1aa2c93513d69b" title="Append the current record to the data file.">AppendRecord()</a>. With auto commit on, the library posts updates automatically when moving off the current record or closing a file.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">bDefaultAutoCommit</td><td>xbTrue - Enable default auto commit.<br />
+ xbFalse - Disable default auto commit.<br />
+ </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a5f74db23f8902846d581935c7db73f9c" name="a5f74db23f8902846d581935c7db73f9c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5f74db23f8902846d581935c7db73f9c">&#9670;&nbsp;</a></span>SetDefaultDateFormat()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetDefaultDateFormat </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sDefaultDateFormat</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Set the default date format. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sDefaultDateFormat</td><td>Set the default date format. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="ae78a85255488bc78964c16946dbaead3" name="ae78a85255488bc78964c16946dbaead3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae78a85255488bc78964c16946dbaead3">&#9670;&nbsp;</a></span>SetDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbFile::SetDirectory </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sDirectory</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Set the directory. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sDirectory</td><td>- Valid directory name </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a904ec348fd029d4a76e72b8fde636108" name="a904ec348fd029d4a76e72b8fde636108"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a904ec348fd029d4a76e72b8fde636108">&#9670;&nbsp;</a></span>SetEndianType()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetEndianType </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Set the endian type. </p>
+<p >This routine determines the Endian-ness at run time instead of compile time as some processers (ie; Sparc,ARM) can be switched either way. This routine is called automatically by the library at startup and does not need to be called in an application program. </p>
+
+</div>
+</div>
+<a id="a5419eb27e56822f828b2b88a9502a636" name="a5419eb27e56822f828b2b88a9502a636"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5419eb27e56822f828b2b88a9502a636">&#9670;&nbsp;</a></span>SetFileName()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbFile::SetFileName </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFileName</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Set the filename. </p>
+<p >This routine builds out two internal variables from the input file name<br />
+ sFileName - the file name part<br />
+ sFqFileName - the fully qualified file name<br />
+</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFileName</td><td>- Input file name </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="aee832fa11db2077a532f49e1329bd05a" name="aee832fa11db2077a532f49e1329bd05a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aee832fa11db2077a532f49e1329bd05a">&#9670;&nbsp;</a></span>SetFqFileName()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbFile::SetFqFileName </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFqFileName</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Set the fully qualifed filename. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFqFileName</td><td>- Fully qualifed input file name </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a060acbfaa8d528f86cb59301814b414a" name="a060acbfaa8d528f86cb59301814b414a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a060acbfaa8d528f86cb59301814b414a">&#9670;&nbsp;</a></span>SetHomeFolders()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::SetHomeFolders </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Set Home Folders. </p>
+<p >Create xbase64 log, data and temp folders in the home directory for current usre.</p>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a7b992ed97281bf25b5b66f5df686225e" name="a7b992ed97281bf25b5b66f5df686225e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7b992ed97281bf25b5b66f5df686225e">&#9670;&nbsp;</a></span>SetLogDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetLogDirectory </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sLogDirectory</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7f05738e7dfd759e89990242ef503544" name="a7f05738e7dfd759e89990242ef503544"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7f05738e7dfd759e89990242ef503544">&#9670;&nbsp;</a></span>SetLogFileName()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetLogFileName </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sLogFileName</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aba6e59512f7172dd55dcf92059e5928c" name="aba6e59512f7172dd55dcf92059e5928c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aba6e59512f7172dd55dcf92059e5928c">&#9670;&nbsp;</a></span>SetMultiUser()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetMultiUser </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td>
+ <td class="paramname"><em>bMultiUser</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the multi user setting. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">bMultiUser</td><td>xbTrue - Turn on Multi user mode.<br />
+ xbFalse - Turn off Multi user mode.<br />
+ </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a17c229a20ef9ab4034df8f9cd657adb2" name="a17c229a20ef9ab4034df8f9cd657adb2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a17c229a20ef9ab4034df8f9cd657adb2">&#9670;&nbsp;</a></span>SetTempDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetTempDirectory </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sTempDirectory</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Set the temp directory. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sTempDirectory</td><td>Set the data direcroty. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a7e63e852418f337eb7c44de5dcd50323" name="a7e63e852418f337eb7c44de5dcd50323"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7e63e852418f337eb7c44de5dcd50323">&#9670;&nbsp;</a></span>SetVersion()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual xbInt16 xb::xbDbf::SetVersion </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae94cb1bf9f75184f39d9e1a80ab49d4a" name="ae94cb1bf9f75184f39d9e1a80ab49d4a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae94cb1bf9f75184f39d9e1a80ab49d4a">&#9670;&nbsp;</a></span>UndeleteAllRecords()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::UndeleteAllRecords </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Set auto lock. </p>
+<p >This routine sets the auto lock setting for this table. There is an overall system level auto lock default setting and each table can have it's own autolock setting. This method controls the table level auto lock setting.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iAutoLock</td><td>1 - Use auto lock for this table.<br />
+ 0 - Don't use auto lock for this table.<br />
+ -1 - (minus one) Use system default.<br />
+ </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a></dd></dl>
+<p>Set the header locked status.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">bHeaderLocked</td><td>xbTrue - Locked<br />
+xbFalse - Not locked. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>void</dd></dl>
+<p>Set lock flavor.</p>
+<p >This routine is for future expansion. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iLockFlavor</td><td>1 - Use Dbase (tm) style locking. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>void</dd></dl>
+<p>Set table locked status.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">bTableLocked</td><td>- xbTrue Table locked.<br />
+xbFalse Table unlocked. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>void</dd></dl>
+<p>Undelete all records.</p>
+<p >This routine will remove the deletion flag on any deleted records in the table. </p><dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a255681976a04fc722538bb630507b3a0" name="a255681976a04fc722538bb630507b3a0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a255681976a04fc722538bb630507b3a0">&#9670;&nbsp;</a></span>UndeleteRecord()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::UndeleteRecord </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Undelete one record. </p>
+<p >This routine will undelete the current record, if it is deleted. </p><dl class="section return"><dt>Returns</dt><dd>XB_NO_ERROR<br />
+XB_INVALID_RECORD </dd></dl>
+
+</div>
+</div>
+<a id="aba5dcac3b4092261bc1669740cdd669d" name="aba5dcac3b4092261bc1669740cdd669d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aba5dcac3b4092261bc1669740cdd669d">&#9670;&nbsp;</a></span>ValidateSchema()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual xbInt16 xb::xbDbf::ValidateSchema </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structxb_1_1xbSchema.html">xbSchema</a> *&#160;</td>
+ <td class="paramname"><em>s</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5d871dcfecc2b4338f7a13722aab766c" name="a5d871dcfecc2b4338f7a13722aab766c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5d871dcfecc2b4338f7a13722aab766c">&#9670;&nbsp;</a></span>WriteBlock()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::WriteBlock </td>
+ <td>(</td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ulBlockNo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>lWriteSize</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>buf</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Write a block of data to file. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ulBlockNo</td><td>- block number to write </td></tr>
+ <tr><td class="paramname">lWriteSize</td><td>- size of data to write, set to 0 to write blocksize </td></tr>
+ <tr><td class="paramname">*buf</td><td>- pointer to buffer of data to be written </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a44e1410109ef7b3d11a6af4b704b62b2" name="a44e1410109ef7b3d11a6af4b704b62b2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a44e1410109ef7b3d11a6af4b704b62b2">&#9670;&nbsp;</a></span>WriteHeader()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::WriteHeader </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iPositionOption</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iWriteOption</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a18830b5755d74818f60d9c7ce38ddf2d" name="a18830b5755d74818f60d9c7ce38ddf2d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a18830b5755d74818f60d9c7ce38ddf2d">&#9670;&nbsp;</a></span>xbFclose()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbFclose </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Xbase wrapper for standard libary fclose. </p>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="af5b6356832d2a67212070a1aa605f170" name="af5b6356832d2a67212070a1aa605f170"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af5b6356832d2a67212070a1aa605f170">&#9670;&nbsp;</a></span>xbFeof()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbFeof </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Xbase wrapper for standard libary feof. </p>
+<dl class="section return"><dt>Returns</dt><dd>non zero if end-of-file is set for the stream. </dd></dl>
+
+</div>
+</div>
+<a id="ad205184d43409f04216540ae22f15009" name="ad205184d43409f04216540ae22f15009"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad205184d43409f04216540ae22f15009">&#9670;&nbsp;</a></span>xbFflush()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbFflush </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Xbase wrapper for standard libary fflush. </p>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a5ee229bda4d7d6695e122200e581e7a6" name="a5ee229bda4d7d6695e122200e581e7a6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5ee229bda4d7d6695e122200e581e7a6">&#9670;&nbsp;</a></span>xbFgetc() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbFgetc </td>
+ <td>(</td>
+ <td class="paramtype">char &amp;&#160;</td>
+ <td class="paramname"><em>c</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Xbase wrapper for standard libary fgetc. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>- output character returned by fgetc </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="afb1c584d2895ffb7834df80aea7eb1e4" name="afb1c584d2895ffb7834df80aea7eb1e4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afb1c584d2895ffb7834df80aea7eb1e4">&#9670;&nbsp;</a></span>xbFgetc() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbFgetc </td>
+ <td>(</td>
+ <td class="paramtype">xbInt32 &amp;&#160;</td>
+ <td class="paramname"><em>c</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Xbase wrapper for standard libary fgetc. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>- output integer returned by fgetc </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="ad245955ace26e5dde85fd4373b30d026" name="ad245955ace26e5dde85fd4373b30d026"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad245955ace26e5dde85fd4373b30d026">&#9670;&nbsp;</a></span>xbFgets()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbFgets </td>
+ <td>(</td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>lSize</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>s</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Xbase wrapper for standard libary fgets. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">lSize</td><td>- reads in at most, one character less than lSize </td></tr>
+ <tr><td class="paramname">s</td><td>- an <a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing data returned by fseek </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="ab0fa19686ca8953ff4b556fb5b249135" name="ab0fa19686ca8953ff4b556fb5b249135"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab0fa19686ca8953ff4b556fb5b249135">&#9670;&nbsp;</a></span>xbFopen() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbFopen </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sOpenMode</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFileName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iShareMode</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Xbase wrapper for standard libary fopen. </p>
+<p >This routine supports all the standard C library open modes. The Xbase routines only use "r" and "r+b".</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sOpenMode</td><td><table class="doxtable">
+<tr>
+<th>OpenMode</th><th>Description </th></tr>
+<tr>
+<td>r</td><td>Reading </td></tr>
+<tr>
+<td>r+</td><td>Reading and Writing </td></tr>
+<tr>
+<td>w</td><td>Open for writing. Truncate to zero bytes if it exists </td></tr>
+<tr>
+<td>w+</td><td>Open for reading and writing, truncate to zero bytes if it exists </td></tr>
+<tr>
+<td>a</td><td>Open for append </td></tr>
+<tr>
+<td>a+</td><td>Open for reading and writing (at end). </td></tr>
+</table>
+The mode can also include the letter "b" for binary ie; "r+b". The "b" is ignored on POSIX compliant systems, but is included for cross platform compatibility. </td></tr>
+ <tr><td class="paramname">sFileName</td><td>File name to open </td></tr>
+ <tr><td class="paramname">iShareMode</td><td>XB_SINGLE_USER<br />
+ XB_MULTI_USER<br />
+ </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a0548cedf0f26b7d8ac221f75b0cd048c" name="a0548cedf0f26b7d8ac221f75b0cd048c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0548cedf0f26b7d8ac221f75b0cd048c">&#9670;&nbsp;</a></span>xbFopen() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbFopen </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sOpenMode</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iShareMode</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Xbase wrapper for standard libary fopen. </p>
+<p >This routine supports all the standard C library open modes. The Xbase routines only use "r" and "r+".</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sOpenMode</td><td><table class="doxtable">
+<tr>
+<th>OpenMode</th><th>Description </th></tr>
+<tr>
+<td>r</td><td>Reading </td></tr>
+<tr>
+<td>r+</td><td>Reading and Writing </td></tr>
+<tr>
+<td>w</td><td>Open for writing. Truncate to zero bytes if it exists </td></tr>
+<tr>
+<td>w+</td><td>Open for reading and writing, truncate to zero bytes if it exists </td></tr>
+<tr>
+<td>a</td><td>Open for append </td></tr>
+<tr>
+<td>a+</td><td>Open for reading and writing (at end). </td></tr>
+</table>
+The mode can also include the letter "b" for binary ie; "r+b". The "b" is ignored on POSIX compliant systems, but is included for cross platform compatibility. </td></tr>
+ <tr><td class="paramname">iShareMode</td><td>XB_SINGLE_USER<br />
+ XB_MULTI_USER<br />
+ </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a7cdfef5ede9ac98d44a28a6b7a70972c" name="a7cdfef5ede9ac98d44a28a6b7a70972c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7cdfef5ede9ac98d44a28a6b7a70972c">&#9670;&nbsp;</a></span>xbFopen() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbFopen </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iOpenMode</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aabd113333b49c36cad23244b392baab4" name="aabd113333b49c36cad23244b392baab4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aabd113333b49c36cad23244b392baab4">&#9670;&nbsp;</a></span>xbFopen() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbFopen </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iOpenMode</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iShareMode</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Xbase wrapper for standard libary fopen. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iOpenMode</td><td>XB_READ<br />
+ XB_READ_WRITE<br />
+ </td></tr>
+ <tr><td class="paramname">iShareMode</td><td>XB_SINGLE_USER<br />
+ XB_MULTI_USER<br />
+ </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="af2e940c78956e5cb6824f9a1bc404896" name="af2e940c78956e5cb6824f9a1bc404896"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af2e940c78956e5cb6824f9a1bc404896">&#9670;&nbsp;</a></span>xbFputc() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbFputc </td>
+ <td>(</td>
+ <td class="paramtype">xbInt32&#160;</td>
+ <td class="paramname"><em>c</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Xbase wrapper for standard libary fputc. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>Character to write </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a863f74cf17df8186d88586b4d2a6441a" name="a863f74cf17df8186d88586b4d2a6441a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a863f74cf17df8186d88586b4d2a6441a">&#9670;&nbsp;</a></span>xbFputc() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbFputc </td>
+ <td>(</td>
+ <td class="paramtype">xbInt32&#160;</td>
+ <td class="paramname"><em>c</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt32&#160;</td>
+ <td class="paramname"><em>iNoOfTimes</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Xbase wrapper for standard libary fputc. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>Character to write </td></tr>
+ <tr><td class="paramname">iNoOfTimes</td><td>Number of times to write the character </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a698f3b40216778562e639e6ca1a47573" name="a698f3b40216778562e639e6ca1a47573"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a698f3b40216778562e639e6ca1a47573">&#9670;&nbsp;</a></span>xbFputs()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbFputs </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>s</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Xbase wrapper for standard libary fputs. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">s</td><td><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> to write to file </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="ab4f6afaa1f77539f27a4f05c26e54e2f" name="ab4f6afaa1f77539f27a4f05c26e54e2f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab4f6afaa1f77539f27a4f05c26e54e2f">&#9670;&nbsp;</a></span>xbFread()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbFread </td>
+ <td>(</td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>p</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>size</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>nmemb</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Xbase wrapper for standard libary fread. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">p</td><td>Pointer to data to write </td></tr>
+ <tr><td class="paramname">size</td><td>size of write </td></tr>
+ <tr><td class="paramname">nmemb</td><td>Number of times to read it </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a5337ab8918df240910c0d19b4f298e3d" name="a5337ab8918df240910c0d19b4f298e3d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5337ab8918df240910c0d19b4f298e3d">&#9670;&nbsp;</a></span>xbFseek()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbFseek </td>
+ <td>(</td>
+ <td class="paramtype">xbInt64&#160;</td>
+ <td class="paramname"><em>lOffset</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt32&#160;</td>
+ <td class="paramname"><em>iWhence</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Xbase wrapper for standard libary fseek. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">lOffset</td><td>Position in file to seek to </td></tr>
+ <tr><td class="paramname">iWhence</td><td>SEEK_SET - from beginning of file<br />
+ SEEK_CUR - from current position<br />
+ SEEK_END - from end of file<br />
+ </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a0e1c06aedfa7fbcb92e117f891edd13b" name="a0e1c06aedfa7fbcb92e117f891edd13b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0e1c06aedfa7fbcb92e117f891edd13b">&#9670;&nbsp;</a></span>xbFtell()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">size_t xb::xbFile::xbFtell </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Xbase wrapper for standard libary ftell. </p>
+<p >Returns the current file position. </p><dl class="section return"><dt>Returns</dt><dd>Current file position. </dd></dl>
+
+</div>
+</div>
+<a id="a9891b792f585a696f38a5cf959e30918" name="a9891b792f585a696f38a5cf959e30918"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9891b792f585a696f38a5cf959e30918">&#9670;&nbsp;</a></span>xbFTurnOffFileBuffering()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbFile::xbFTurnOffFileBuffering </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Turn off file buffering. </p>
+<p >Turns off file buffering. File buffering can't be used while in multi user mode. </p>
+
+</div>
+</div>
+<a id="a6aadd871d1782944703fed773d44b85f" name="a6aadd871d1782944703fed773d44b85f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6aadd871d1782944703fed773d44b85f">&#9670;&nbsp;</a></span>xbFwrite()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbFwrite </td>
+ <td>(</td>
+ <td class="paramtype">const void *&#160;</td>
+ <td class="paramname"><em>p</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>size</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>nmemb</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Xbase wrapper for standard libary fwrite. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">p</td><td>Pointer to data buffer to write </td></tr>
+ <tr><td class="paramname">size</td><td>Size of data to write </td></tr>
+ <tr><td class="paramname">nmemb</td><td>Number of times to write data buffer </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a08463f506f425c2385acbe1a561506e9" name="a08463f506f425c2385acbe1a561506e9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a08463f506f425c2385acbe1a561506e9">&#9670;&nbsp;</a></span>xbReadUntil()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbReadUntil </td>
+ <td>(</td>
+ <td class="paramtype">const char&#160;</td>
+ <td class="paramname"><em>cDelim</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sOut</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Read file until a particular character is encountered on input stream. </p>
+<p >This routine will read until cDelim is encountered or eof, which ever occurs first.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">cDelim</td><td>Delimiter to stop writing at. </td></tr>
+ <tr><td class="paramname">sOut</td><td>Output <a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing data read </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="ab3c668a8570433188382d31d7c60bd48" name="ab3c668a8570433188382d31d7c60bd48"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab3c668a8570433188382d31d7c60bd48">&#9670;&nbsp;</a></span>xbRemove() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbRemove </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Delete file. </p>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a58f6a6751fdf7e9549c273bb75d93eb5" name="a58f6a6751fdf7e9549c273bb75d93eb5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a58f6a6751fdf7e9549c273bb75d93eb5">&#9670;&nbsp;</a></span>xbRemove() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbRemove </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFileNameIn</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Delete file. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFileNameIn</td><td>Name of file to delete </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a6d919366c2ec95e529906bf8842cbf07" name="a6d919366c2ec95e529906bf8842cbf07"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6d919366c2ec95e529906bf8842cbf07">&#9670;&nbsp;</a></span>xbRemove() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbRemove </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFileNameIn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iOption</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Delete file. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFileNameIn</td><td>Name of file to delete </td></tr>
+ <tr><td class="paramname">iOption</td><td>If Set to 1, assume this is a delete request for a dbf file, and should rename the dbt file also </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="afc8ce113aa72611a278233f9bb170012" name="afc8ce113aa72611a278233f9bb170012"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afc8ce113aa72611a278233f9bb170012">&#9670;&nbsp;</a></span>xbRename()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbRename </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sOldName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sNewName</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Rename file. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sOldName</td><td>Original file name </td></tr>
+ <tr><td class="paramname">sNewName</td><td>New file name </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a7996b6e084665c37c3892faea64b3505" name="a7996b6e084665c37c3892faea64b3505"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7996b6e084665c37c3892faea64b3505">&#9670;&nbsp;</a></span>xbRewind()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbFile::xbRewind </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Xbase wrapper for rewind. </p>
+<p >Set file pointer at beginning of file. </p>
+
+</div>
+</div>
+<a id="a518bfcbfa3699d883cf89affee383296" name="a518bfcbfa3699d883cf89affee383296"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a518bfcbfa3699d883cf89affee383296">&#9670;&nbsp;</a></span>xbTruncate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbTruncate </td>
+ <td>(</td>
+ <td class="paramtype">xbInt64&#160;</td>
+ <td class="paramname"><em>llSize</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Xbase wrapper for ftruncate. </p>
+<p >Set file size to llSize </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">llSize</td><td>New file size. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a8ed0693b10b95aaa4e46037758d160ed" name="a8ed0693b10b95aaa4e46037758d160ed"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8ed0693b10b95aaa4e46037758d160ed">&#9670;&nbsp;</a></span>Zap()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::Zap </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Zap (remove) everything from the file,. </p>
+<p >This routine eliminates everything from the dbf file and dbt memo file. </p><dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<h2 class="groupheader">Field Documentation</h2>
+<a id="a8734e799707582f022fc341d515650f4" name="a8734e799707582f022fc341d515650f4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8734e799707582f022fc341d515650f4">&#9670;&nbsp;</a></span>cEncryptionFlag</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">char xb::xbDbf::cEncryptionFlag</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad59074633641e03647e54d2b66c9102b" name="ad59074633641e03647e54d2b66c9102b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad59074633641e03647e54d2b66c9102b">&#9670;&nbsp;</a></span>cIndexFlag</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">char xb::xbDbf::cIndexFlag</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aea1dfe5cbd1f9cdbcfc8eb04b2c3d5f1" name="aea1dfe5cbd1f9cdbcfc8eb04b2c3d5f1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aea1dfe5cbd1f9cdbcfc8eb04b2c3d5f1">&#9670;&nbsp;</a></span>cLangDriver</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">char xb::xbDbf::cLangDriver</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac3c89fc3bc6a6abf385478a8adbed970" name="ac3c89fc3bc6a6abf385478a8adbed970"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac3c89fc3bc6a6abf385478a8adbed970">&#9670;&nbsp;</a></span>cTransactionFlag</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">char xb::xbDbf::cTransactionFlag</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6021789d314cd41488991e708fcd0df2" name="a6021789d314cd41488991e708fcd0df2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6021789d314cd41488991e708fcd0df2">&#9670;&nbsp;</a></span>cUpdateDD</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">char xb::xbDbf::cUpdateDD</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9340a5e8ee53eb0f3b6601eec2d71e1b" name="a9340a5e8ee53eb0f3b6601eec2d71e1b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9340a5e8ee53eb0f3b6601eec2d71e1b">&#9670;&nbsp;</a></span>cUpdateMM</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">char xb::xbDbf::cUpdateMM</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a4fcd6a86ddd32d4a9d76a4074573440a" name="a4fcd6a86ddd32d4a9d76a4074573440a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4fcd6a86ddd32d4a9d76a4074573440a">&#9670;&nbsp;</a></span>cUpdateYY</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">char xb::xbDbf::cUpdateYY</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3a262abf658e5fa968b57ef457a69470" name="a3a262abf658e5fa968b57ef457a69470"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3a262abf658e5fa968b57ef457a69470">&#9670;&nbsp;</a></span>cVersion</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned char xb::xbDbf::cVersion</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6219f1b5e24ea12fe158cd5aea56988e" name="a6219f1b5e24ea12fe158cd5aea56988e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6219f1b5e24ea12fe158cd5aea56988e">&#9670;&nbsp;</a></span>ErrorCodeText</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* xb::xbSsv::ErrorCodeText[]</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab506450954bc86e7bf1d7c4efe681f43" name="ab506450954bc86e7bf1d7c4efe681f43"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab506450954bc86e7bf1d7c4efe681f43">&#9670;&nbsp;</a></span>iAutoCommit</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::iAutoCommit</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6d8e193da3ca414eef1e8866ec5ca81b" name="a6d8e193da3ca414eef1e8866ec5ca81b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6d8e193da3ca414eef1e8866ec5ca81b">&#9670;&nbsp;</a></span>iDbfStatus</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::iDbfStatus</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5849e813f5e8e1cd180f0366637adbf3" name="a5849e813f5e8e1cd180f0366637adbf3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5849e813f5e8e1cd180f0366637adbf3">&#9670;&nbsp;</a></span>iEndianType</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbSsv::iEndianType = 0</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">protected</span><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a15f495446f0d75bcf2fa89e3b699d388" name="a15f495446f0d75bcf2fa89e3b699d388"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a15f495446f0d75bcf2fa89e3b699d388">&#9670;&nbsp;</a></span>iFileVersion</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::iFileVersion</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5056757614c39f725cc775332494966a" name="a5056757614c39f725cc775332494966a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5056757614c39f725cc775332494966a">&#9670;&nbsp;</a></span>iNoOfFields</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::iNoOfFields</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8a9b3bce0b741e73473d3ebbd6e6f1cd" name="a8a9b3bce0b741e73473d3ebbd6e6f1cd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8a9b3bce0b741e73473d3ebbd6e6f1cd">&#9670;&nbsp;</a></span>RecBuf</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">char* xb::xbDbf::RecBuf</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a353ebfc8a2960ef827f429ec74025606" name="a353ebfc8a2960ef827f429ec74025606"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a353ebfc8a2960ef827f429ec74025606">&#9670;&nbsp;</a></span>RecBuf2</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">char* xb::xbDbf::RecBuf2</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a73f9c792d0a769e2e604c1855245a276" name="a73f9c792d0a769e2e604c1855245a276"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a73f9c792d0a769e2e604c1855245a276">&#9670;&nbsp;</a></span>sAlias</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> xb::xbDbf::sAlias</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad8c8b5eb12063bb898da1b2cc02cfce7" name="ad8c8b5eb12063bb898da1b2cc02cfce7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad8c8b5eb12063bb898da1b2cc02cfce7">&#9670;&nbsp;</a></span>SchemaPtr</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbSchemaRec* xb::xbDbf::SchemaPtr</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9dec3164c3b264882df634915ecf21da" name="a9dec3164c3b264882df634915ecf21da"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9dec3164c3b264882df634915ecf21da">&#9670;&nbsp;</a></span>sNullString</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> xb::xbSsv::sNullString = &quot;&quot;</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">protected</span><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a62f5fa9149ae0f6dc75642823de66918" name="a62f5fa9149ae0f6dc75642823de66918"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a62f5fa9149ae0f6dc75642823de66918">&#9670;&nbsp;</a></span>uiHeaderLen</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbUInt16 xb::xbDbf::uiHeaderLen</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1760e222567e2c849f9c799b9d896e91" name="a1760e222567e2c849f9c799b9d896e91"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1760e222567e2c849f9c799b9d896e91">&#9670;&nbsp;</a></span>uiRecordLen</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbUInt16 xb::xbDbf::uiRecordLen</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="afcd99924606be0a9e1e25180bcd1abf8" name="afcd99924606be0a9e1e25180bcd1abf8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afcd99924606be0a9e1e25180bcd1abf8">&#9670;&nbsp;</a></span>ulCurRec</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbUInt32 xb::xbDbf::ulCurRec</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="acb594ab61dd35b17bdf28394083f8e87" name="acb594ab61dd35b17bdf28394083f8e87"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acb594ab61dd35b17bdf28394083f8e87">&#9670;&nbsp;</a></span>ulNoOfRecs</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbUInt32 xb::xbDbf::ulNoOfRecs</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae39a67ea391b46055d4ca299cb222004" name="ae39a67ea391b46055d4ca299cb222004"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae39a67ea391b46055d4ca299cb222004">&#9670;&nbsp;</a></span>xbase</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbXBase.html">xbXBase</a>* xb::xbFile::xbase</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>/mnt/1Tdata/xbase/xbase64-4.1.4/src/include/<a class="el" href="xbdbf_8h_source.html">xbdbf.h</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.1.4/src/core/<a class="el" href="xbdbf_8cpp.html">xbdbf.cpp</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.1.4/src/core/<a class="el" href="xbfields_8cpp.html">xbfields.cpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/docs/doxygen/html/classxb_1_1xbDbf.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbDbf.png
index d7b0ae3..d7b0ae3 100644
--- a/docs/doxygen/html/classxb_1_1xbDbf.png
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbDbf.png
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbFile.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbFile.html
new file mode 100644
index 0000000..4dc8b1c
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbFile.html
@@ -0,0 +1,3520 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: xb::xbFile Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="namespacexb.html">xb</a></li><li class="navelem"><a class="el" href="classxb_1_1xbFile.html">xbFile</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-static-attribs">Static Public Attributes</a> &#124;
+<a href="#pro-methods">Protected Member Functions</a> &#124;
+<a href="#pro-attribs">Protected Attributes</a> &#124;
+<a href="#pro-static-attribs">Static Protected Attributes</a> </div>
+ <div class="headertitle"><div class="title">xb::xbFile Class Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Class for handling low level file I/O.
+ <a href="classxb_1_1xbFile.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="xbfile_8h_source.html">xbfile.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for xb::xbFile:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="classxb_1_1xbFile.png" usemap="#xb::xbFile_map" alt=""/>
+ <map id="xb::xbFile_map" name="xb::xbFile_map">
+<area href="classxb_1_1xbSsv.html" title="Class for handling shared system variables." alt="xb::xbSsv" shape="rect" coords="0,0,65,24"/>
+<area href="classxb_1_1xbDbf.html" title="Base class for handling dbf files/tables." alt="xb::xbDbf" shape="rect" coords="0,112,65,136"/>
+ </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a869eedd74c6eddc308852eb546c87176"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a869eedd74c6eddc308852eb546c87176">xbFile</a> (<a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *x)</td></tr>
+<tr class="memdesc:a869eedd74c6eddc308852eb546c87176"><td class="mdescLeft">&#160;</td><td class="mdescRight">Class Constructor. <a href="classxb_1_1xbFile.html#a869eedd74c6eddc308852eb546c87176">More...</a><br /></td></tr>
+<tr class="separator:a869eedd74c6eddc308852eb546c87176"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a491f6c48076e89da2e791a42b2727a90"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a491f6c48076e89da2e791a42b2727a90">~xbFile</a> ()</td></tr>
+<tr class="memdesc:a491f6c48076e89da2e791a42b2727a90"><td class="mdescLeft">&#160;</td><td class="mdescRight">Class Destructor. <a href="classxb_1_1xbFile.html#a491f6c48076e89da2e791a42b2727a90">More...</a><br /></td></tr>
+<tr class="separator:a491f6c48076e89da2e791a42b2727a90"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acd0fb2166b2bff7e8a1cf65a7bc8be1e"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#acd0fb2166b2bff7e8a1cf65a7bc8be1e">GetDirectory</a> () const</td></tr>
+<tr class="memdesc:acd0fb2166b2bff7e8a1cf65a7bc8be1e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the directory name. <a href="classxb_1_1xbFile.html#acd0fb2166b2bff7e8a1cf65a7bc8be1e">More...</a><br /></td></tr>
+<tr class="separator:acd0fb2166b2bff7e8a1cf65a7bc8be1e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac95cb882ccbcdedc9a233c6ad9fed07a"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ac95cb882ccbcdedc9a233c6ad9fed07a">GetFileName</a> () const</td></tr>
+<tr class="memdesc:ac95cb882ccbcdedc9a233c6ad9fed07a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the file name. <a href="classxb_1_1xbFile.html#ac95cb882ccbcdedc9a233c6ad9fed07a">More...</a><br /></td></tr>
+<tr class="separator:ac95cb882ccbcdedc9a233c6ad9fed07a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a31b4e641f93206ba23e2a5a27491dcd4"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a31b4e641f93206ba23e2a5a27491dcd4">GetFqFileName</a> () const</td></tr>
+<tr class="memdesc:a31b4e641f93206ba23e2a5a27491dcd4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the fully qualified file name. <a href="classxb_1_1xbFile.html#a31b4e641f93206ba23e2a5a27491dcd4">More...</a><br /></td></tr>
+<tr class="separator:a31b4e641f93206ba23e2a5a27491dcd4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad39797624a752b9d62533d00fad9feff"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ad39797624a752b9d62533d00fad9feff">CreateUniqueFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDirIn, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sExtIn, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFqnOut, xbInt16 iOption=0)</td></tr>
+<tr class="memdesc:ad39797624a752b9d62533d00fad9feff"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a unique file name. <a href="classxb_1_1xbFile.html#ad39797624a752b9d62533d00fad9feff">More...</a><br /></td></tr>
+<tr class="separator:ad39797624a752b9d62533d00fad9feff"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae2b6ac26018dc28f77afbb3f008c3f66"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ae2b6ac26018dc28f77afbb3f008c3f66">DetermineXbaseTableVersion</a> (unsigned char cFileTypeByte) const</td></tr>
+<tr class="memdesc:ae2b6ac26018dc28f77afbb3f008c3f66"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determine xbase dbf version. <a href="classxb_1_1xbFile.html#ae2b6ac26018dc28f77afbb3f008c3f66">More...</a><br /></td></tr>
+<tr class="separator:ae2b6ac26018dc28f77afbb3f008c3f66"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5a740033664c9ad2611c90e2a6d0c2d3"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5a740033664c9ad2611c90e2a6d0c2d3">DetermineXbaseMemoVersion</a> (unsigned char cFileTypeByte) const</td></tr>
+<tr class="memdesc:a5a740033664c9ad2611c90e2a6d0c2d3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determine which version the memo (dbt) file is. <a href="classxb_1_1xbFile.html#a5a740033664c9ad2611c90e2a6d0c2d3">More...</a><br /></td></tr>
+<tr class="separator:a5a740033664c9ad2611c90e2a6d0c2d3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab14e4a11427f5efb81cba1dd32bd1aa1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ab14e4a11427f5efb81cba1dd32bd1aa1">eGetDouble</a> (const char *p) const</td></tr>
+<tr class="memdesc:ab14e4a11427f5efb81cba1dd32bd1aa1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable double value. <a href="classxb_1_1xbFile.html#ab14e4a11427f5efb81cba1dd32bd1aa1">More...</a><br /></td></tr>
+<tr class="separator:ab14e4a11427f5efb81cba1dd32bd1aa1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a60b24a5afc984c586bf384c7e915ba0d"><td class="memItemLeft" align="right" valign="top">xbInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a60b24a5afc984c586bf384c7e915ba0d">eGetInt32</a> (const char *p) const</td></tr>
+<tr class="memdesc:a60b24a5afc984c586bf384c7e915ba0d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable long value. <a href="classxb_1_1xbFile.html#a60b24a5afc984c586bf384c7e915ba0d">More...</a><br /></td></tr>
+<tr class="separator:a60b24a5afc984c586bf384c7e915ba0d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a78f052529d39a18deaface5a0d47d0b0"><td class="memItemLeft" align="right" valign="top">xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a78f052529d39a18deaface5a0d47d0b0">eGetUInt32</a> (const char *p) const</td></tr>
+<tr class="memdesc:a78f052529d39a18deaface5a0d47d0b0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable unsigned long value. <a href="classxb_1_1xbFile.html#a78f052529d39a18deaface5a0d47d0b0">More...</a><br /></td></tr>
+<tr class="separator:a78f052529d39a18deaface5a0d47d0b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac40c991110ddc6fb30a72d90f4652762"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ac40c991110ddc6fb30a72d90f4652762">eGetInt16</a> (const char *p) const</td></tr>
+<tr class="memdesc:ac40c991110ddc6fb30a72d90f4652762"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable short value. <a href="classxb_1_1xbFile.html#ac40c991110ddc6fb30a72d90f4652762">More...</a><br /></td></tr>
+<tr class="separator:ac40c991110ddc6fb30a72d90f4652762"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a936ade458e6d5e6d29f9b5031888d189"><td class="memItemLeft" align="right" valign="top">xbUInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a936ade458e6d5e6d29f9b5031888d189">eGetUInt16</a> (const char *p) const</td></tr>
+<tr class="memdesc:a936ade458e6d5e6d29f9b5031888d189"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable unsigned short value. <a href="classxb_1_1xbFile.html#a936ade458e6d5e6d29f9b5031888d189">More...</a><br /></td></tr>
+<tr class="separator:a936ade458e6d5e6d29f9b5031888d189"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a98b6ff533ae93f90c977a2ba23eeb105"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a98b6ff533ae93f90c977a2ba23eeb105">ePutDouble</a> (char *p, <a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> d)</td></tr>
+<tr class="memdesc:a98b6ff533ae93f90c977a2ba23eeb105"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable double value to memory location. <a href="classxb_1_1xbFile.html#a98b6ff533ae93f90c977a2ba23eeb105">More...</a><br /></td></tr>
+<tr class="separator:a98b6ff533ae93f90c977a2ba23eeb105"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a19c37f76a2ccbb45019cb0fc373d3f46"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a19c37f76a2ccbb45019cb0fc373d3f46">ePutInt32</a> (char *p, xbInt32 l)</td></tr>
+<tr class="memdesc:a19c37f76a2ccbb45019cb0fc373d3f46"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable long value to memory location. <a href="classxb_1_1xbFile.html#a19c37f76a2ccbb45019cb0fc373d3f46">More...</a><br /></td></tr>
+<tr class="separator:a19c37f76a2ccbb45019cb0fc373d3f46"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa3f6ceae4b96f24875d86848bf13a173"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aa3f6ceae4b96f24875d86848bf13a173">ePutUInt32</a> (char *p, xbUInt32 ul)</td></tr>
+<tr class="memdesc:aa3f6ceae4b96f24875d86848bf13a173"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable unsigned long value to memory location. <a href="classxb_1_1xbFile.html#aa3f6ceae4b96f24875d86848bf13a173">More...</a><br /></td></tr>
+<tr class="separator:aa3f6ceae4b96f24875d86848bf13a173"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a29130f12739ac8fa837f4eaedf1338b2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a29130f12739ac8fa837f4eaedf1338b2">ePutInt16</a> (char *p, xbInt16 s)</td></tr>
+<tr class="memdesc:a29130f12739ac8fa837f4eaedf1338b2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable short value to memory location. <a href="classxb_1_1xbFile.html#a29130f12739ac8fa837f4eaedf1338b2">More...</a><br /></td></tr>
+<tr class="separator:a29130f12739ac8fa837f4eaedf1338b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a65e9839f92b96eac7b0d071fac3bbe40"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a65e9839f92b96eac7b0d071fac3bbe40">ePutUInt16</a> (char *p, xbUInt16 s)</td></tr>
+<tr class="memdesc:a65e9839f92b96eac7b0d071fac3bbe40"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable unsigned short value to memory location. <a href="classxb_1_1xbFile.html#a65e9839f92b96eac7b0d071fac3bbe40">More...</a><br /></td></tr>
+<tr class="separator:a65e9839f92b96eac7b0d071fac3bbe40"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a78bd8a11dce102647095baf3aff2b006"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a78bd8a11dce102647095baf3aff2b006">FileExists</a> () const</td></tr>
+<tr class="memdesc:a78bd8a11dce102647095baf3aff2b006"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if a file exists. <a href="classxb_1_1xbFile.html#a78bd8a11dce102647095baf3aff2b006">More...</a><br /></td></tr>
+<tr class="separator:a78bd8a11dce102647095baf3aff2b006"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a174d8a6aabc9cfcd32fedbd1e5b13ddd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a174d8a6aabc9cfcd32fedbd1e5b13ddd">FileExists</a> (xbInt16 iOption) const</td></tr>
+<tr class="memdesc:a174d8a6aabc9cfcd32fedbd1e5b13ddd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if a file exists. <a href="classxb_1_1xbFile.html#a174d8a6aabc9cfcd32fedbd1e5b13ddd">More...</a><br /></td></tr>
+<tr class="separator:a174d8a6aabc9cfcd32fedbd1e5b13ddd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a61130b4fbf4cf9d5972dcb4993de2f94"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a61130b4fbf4cf9d5972dcb4993de2f94">FileExists</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName) const</td></tr>
+<tr class="memdesc:a61130b4fbf4cf9d5972dcb4993de2f94"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if a file exists. <a href="classxb_1_1xbFile.html#a61130b4fbf4cf9d5972dcb4993de2f94">More...</a><br /></td></tr>
+<tr class="separator:a61130b4fbf4cf9d5972dcb4993de2f94"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0592168f39a10f2a401a88ef781f6148"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a0592168f39a10f2a401a88ef781f6148">FileExists</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iOption) const</td></tr>
+<tr class="memdesc:a0592168f39a10f2a401a88ef781f6148"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if a file exists. <a href="classxb_1_1xbFile.html#a0592168f39a10f2a401a88ef781f6148">More...</a><br /></td></tr>
+<tr class="separator:a0592168f39a10f2a401a88ef781f6148"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7fa837938a32dc9ca3fbc81cbaf50f59"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a7fa837938a32dc9ca3fbc81cbaf50f59">FileIsOpen</a> () const</td></tr>
+<tr class="memdesc:a7fa837938a32dc9ca3fbc81cbaf50f59"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if file is open. <a href="classxb_1_1xbFile.html#a7fa837938a32dc9ca3fbc81cbaf50f59">More...</a><br /></td></tr>
+<tr class="separator:a7fa837938a32dc9ca3fbc81cbaf50f59"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a638e14262410a1627819f016a16cdce2"><td class="memItemLeft" align="right" valign="top">xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a638e14262410a1627819f016a16cdce2">GetBlockSize</a> () const</td></tr>
+<tr class="memdesc:a638e14262410a1627819f016a16cdce2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the block size. <a href="classxb_1_1xbFile.html#a638e14262410a1627819f016a16cdce2">More...</a><br /></td></tr>
+<tr class="separator:a638e14262410a1627819f016a16cdce2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a60c53998e3d1b694134b20a87bc9bf5a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a60c53998e3d1b694134b20a87bc9bf5a">GetFileDirPart</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileDirPartOut) const</td></tr>
+<tr class="memdesc:a60c53998e3d1b694134b20a87bc9bf5a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the directory part of the file name. <a href="classxb_1_1xbFile.html#a60c53998e3d1b694134b20a87bc9bf5a">More...</a><br /></td></tr>
+<tr class="separator:a60c53998e3d1b694134b20a87bc9bf5a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af5127c92892816e9bbc5c19653c4147a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#af5127c92892816e9bbc5c19653c4147a">GetFileDirPart</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sCompleteFileNameIn, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileDirPartOut) const</td></tr>
+<tr class="memdesc:af5127c92892816e9bbc5c19653c4147a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the directory part of the file name. <a href="classxb_1_1xbFile.html#af5127c92892816e9bbc5c19653c4147a">More...</a><br /></td></tr>
+<tr class="separator:af5127c92892816e9bbc5c19653c4147a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a57a9222e5cbb51019d4eeb2c3ac89fa2"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a57a9222e5cbb51019d4eeb2c3ac89fa2">GetFileExtPart</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileExtPartOut) const</td></tr>
+<tr class="memdesc:a57a9222e5cbb51019d4eeb2c3ac89fa2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the extension part of the file name. <a href="classxb_1_1xbFile.html#a57a9222e5cbb51019d4eeb2c3ac89fa2">More...</a><br /></td></tr>
+<tr class="separator:a57a9222e5cbb51019d4eeb2c3ac89fa2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab289b6ffe955321160c1f90220c22e25"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ab289b6ffe955321160c1f90220c22e25">GetFileExtPart</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sCompleteFileNameIn, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileExtPartOut) const</td></tr>
+<tr class="memdesc:ab289b6ffe955321160c1f90220c22e25"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the extension part of the file name. <a href="classxb_1_1xbFile.html#ab289b6ffe955321160c1f90220c22e25">More...</a><br /></td></tr>
+<tr class="separator:ab289b6ffe955321160c1f90220c22e25"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a02df78f4c90313243f508fc56b95aba8"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a02df78f4c90313243f508fc56b95aba8">GetFileMtime</a> (time_t &amp;mtime)</td></tr>
+<tr class="memdesc:a02df78f4c90313243f508fc56b95aba8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the time of last file modification timestamp as reported by the OS. <a href="classxb_1_1xbFile.html#a02df78f4c90313243f508fc56b95aba8">More...</a><br /></td></tr>
+<tr class="separator:a02df78f4c90313243f508fc56b95aba8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a81422b3dd52763d2cc6c77237ec9af0a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a81422b3dd52763d2cc6c77237ec9af0a">GetFileNamePart</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileNamePartOut) const</td></tr>
+<tr class="memdesc:a81422b3dd52763d2cc6c77237ec9af0a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the name part of the file name. <a href="classxb_1_1xbFile.html#a81422b3dd52763d2cc6c77237ec9af0a">More...</a><br /></td></tr>
+<tr class="separator:a81422b3dd52763d2cc6c77237ec9af0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6110763c5ae996b72c7a62c15bdecc73"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a6110763c5ae996b72c7a62c15bdecc73">GetFileNamePart</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sCompleteFileNameIn, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileNamePartOut) const</td></tr>
+<tr class="memdesc:a6110763c5ae996b72c7a62c15bdecc73"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the name part of the file name. <a href="classxb_1_1xbFile.html#a6110763c5ae996b72c7a62c15bdecc73">More...</a><br /></td></tr>
+<tr class="separator:a6110763c5ae996b72c7a62c15bdecc73"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a50b63c39e49d44e52078038027b24cc5"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a50b63c39e49d44e52078038027b24cc5">GetFileSize</a> (xbUInt64 &amp;ullFileSize)</td></tr>
+<tr class="memdesc:a50b63c39e49d44e52078038027b24cc5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the size of the file as reported by the OS. <a href="classxb_1_1xbFile.html#a50b63c39e49d44e52078038027b24cc5">More...</a><br /></td></tr>
+<tr class="separator:a50b63c39e49d44e52078038027b24cc5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5548236d38d43b89ae29b9a015b1f678"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5548236d38d43b89ae29b9a015b1f678">GetFileType</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileType) const</td></tr>
+<tr class="memdesc:a5548236d38d43b89ae29b9a015b1f678"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the file type aka Capitalized file extension. <a href="classxb_1_1xbFile.html#a5548236d38d43b89ae29b9a015b1f678">More...</a><br /></td></tr>
+<tr class="separator:a5548236d38d43b89ae29b9a015b1f678"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3c500dc9dac22c49496e4b29386b2dd3"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a3c500dc9dac22c49496e4b29386b2dd3">GetOpenMode</a> () const</td></tr>
+<tr class="memdesc:a3c500dc9dac22c49496e4b29386b2dd3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the open mode of the file. <a href="classxb_1_1xbFile.html#a3c500dc9dac22c49496e4b29386b2dd3">More...</a><br /></td></tr>
+<tr class="separator:a3c500dc9dac22c49496e4b29386b2dd3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9b63e05b77f477ff6109ff7b9432c1b6"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a9b63e05b77f477ff6109ff7b9432c1b6">GetShareMode</a> () const</td></tr>
+<tr class="memdesc:a9b63e05b77f477ff6109ff7b9432c1b6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the share mode of the file. <a href="classxb_1_1xbFile.html#a9b63e05b77f477ff6109ff7b9432c1b6">More...</a><br /></td></tr>
+<tr class="separator:a9b63e05b77f477ff6109ff7b9432c1b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaf2e697751a0beff41432a66bb83fb5e"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aaf2e697751a0beff41432a66bb83fb5e">GetXbaseFileTypeByte</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 &amp;iVersion)</td></tr>
+<tr class="memdesc:aaf2e697751a0beff41432a66bb83fb5e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the file type byte and version of the dbf file. <a href="classxb_1_1xbFile.html#aaf2e697751a0beff41432a66bb83fb5e">More...</a><br /></td></tr>
+<tr class="separator:aaf2e697751a0beff41432a66bb83fb5e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7af337808919680b90710ad5e8a99232"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a7af337808919680b90710ad5e8a99232">GetXbaseFileTypeByte</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, unsigned char &amp;cFileTypeByte)</td></tr>
+<tr class="memdesc:a7af337808919680b90710ad5e8a99232"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the file type byte and version of the dbf file. <a href="classxb_1_1xbFile.html#a7af337808919680b90710ad5e8a99232">More...</a><br /></td></tr>
+<tr class="separator:a7af337808919680b90710ad5e8a99232"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a78aebdd21d3de46a450d5f835e3027f6"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a78aebdd21d3de46a450d5f835e3027f6">GetXbaseFileTypeByte</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, unsigned char &amp;cFileTypeByte, xbInt16 &amp;iVersion)</td></tr>
+<tr class="memdesc:a78aebdd21d3de46a450d5f835e3027f6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the file type byte and version of the dbf file. <a href="classxb_1_1xbFile.html#a78aebdd21d3de46a450d5f835e3027f6">More...</a><br /></td></tr>
+<tr class="separator:a78aebdd21d3de46a450d5f835e3027f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a361e3cc318bbf1c4d10f069e0800a24e"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a361e3cc318bbf1c4d10f069e0800a24e">NameSuffixMissing</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iOption) const</td></tr>
+<tr class="memdesc:a361e3cc318bbf1c4d10f069e0800a24e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines status of file extension. <a href="classxb_1_1xbFile.html#a361e3cc318bbf1c4d10f069e0800a24e">More...</a><br /></td></tr>
+<tr class="separator:a361e3cc318bbf1c4d10f069e0800a24e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa1bb80340abc7a5c22f87f878e9dc825"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aa1bb80340abc7a5c22f87f878e9dc825">ReadBlock</a> (xbUInt32 ulBlockNo, size_t readSize, void *buf)</td></tr>
+<tr class="memdesc:aa1bb80340abc7a5c22f87f878e9dc825"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read a block of data from file. <a href="classxb_1_1xbFile.html#aa1bb80340abc7a5c22f87f878e9dc825">More...</a><br /></td></tr>
+<tr class="separator:aa1bb80340abc7a5c22f87f878e9dc825"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aef696b1c4c0ef5338e818599f695d485"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aef696b1c4c0ef5338e818599f695d485">ReadBlock</a> (xbUInt32 ulBlockNo, xbUInt32 ulBlockSize, size_t readSize, void *buf)</td></tr>
+<tr class="memdesc:aef696b1c4c0ef5338e818599f695d485"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read a block of data from file. <a href="classxb_1_1xbFile.html#aef696b1c4c0ef5338e818599f695d485">More...</a><br /></td></tr>
+<tr class="separator:aef696b1c4c0ef5338e818599f695d485"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a991c5676a6f38fa752435390989f413e"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a991c5676a6f38fa752435390989f413e">SetBlockSize</a> (xbUInt32 ulBlockSize)</td></tr>
+<tr class="memdesc:a991c5676a6f38fa752435390989f413e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the block size. <a href="classxb_1_1xbFile.html#a991c5676a6f38fa752435390989f413e">More...</a><br /></td></tr>
+<tr class="separator:a991c5676a6f38fa752435390989f413e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae78a85255488bc78964c16946dbaead3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ae78a85255488bc78964c16946dbaead3">SetDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDirectory)</td></tr>
+<tr class="memdesc:ae78a85255488bc78964c16946dbaead3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the directory. <a href="classxb_1_1xbFile.html#ae78a85255488bc78964c16946dbaead3">More...</a><br /></td></tr>
+<tr class="separator:ae78a85255488bc78964c16946dbaead3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5419eb27e56822f828b2b88a9502a636"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5419eb27e56822f828b2b88a9502a636">SetFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName)</td></tr>
+<tr class="memdesc:a5419eb27e56822f828b2b88a9502a636"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the filename. <a href="classxb_1_1xbFile.html#a5419eb27e56822f828b2b88a9502a636">More...</a><br /></td></tr>
+<tr class="separator:a5419eb27e56822f828b2b88a9502a636"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aee832fa11db2077a532f49e1329bd05a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aee832fa11db2077a532f49e1329bd05a">SetFqFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFqName)</td></tr>
+<tr class="memdesc:aee832fa11db2077a532f49e1329bd05a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the fully qualifed filename. <a href="classxb_1_1xbFile.html#aee832fa11db2077a532f49e1329bd05a">More...</a><br /></td></tr>
+<tr class="separator:aee832fa11db2077a532f49e1329bd05a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a060acbfaa8d528f86cb59301814b414a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a060acbfaa8d528f86cb59301814b414a">SetHomeFolders</a> ()</td></tr>
+<tr class="memdesc:a060acbfaa8d528f86cb59301814b414a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set Home Folders. <a href="classxb_1_1xbFile.html#a060acbfaa8d528f86cb59301814b414a">More...</a><br /></td></tr>
+<tr class="separator:a060acbfaa8d528f86cb59301814b414a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5d871dcfecc2b4338f7a13722aab766c"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5d871dcfecc2b4338f7a13722aab766c">WriteBlock</a> (xbUInt32 ulBlockNo, size_t writeSize, void *buf)</td></tr>
+<tr class="memdesc:a5d871dcfecc2b4338f7a13722aab766c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a block of data to file. <a href="classxb_1_1xbFile.html#a5d871dcfecc2b4338f7a13722aab766c">More...</a><br /></td></tr>
+<tr class="separator:a5d871dcfecc2b4338f7a13722aab766c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a18830b5755d74818f60d9c7ce38ddf2d"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a18830b5755d74818f60d9c7ce38ddf2d">xbFclose</a> ()</td></tr>
+<tr class="memdesc:a18830b5755d74818f60d9c7ce38ddf2d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fclose. <a href="classxb_1_1xbFile.html#a18830b5755d74818f60d9c7ce38ddf2d">More...</a><br /></td></tr>
+<tr class="separator:a18830b5755d74818f60d9c7ce38ddf2d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af5b6356832d2a67212070a1aa605f170"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#af5b6356832d2a67212070a1aa605f170">xbFeof</a> ()</td></tr>
+<tr class="memdesc:af5b6356832d2a67212070a1aa605f170"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary feof. <a href="classxb_1_1xbFile.html#af5b6356832d2a67212070a1aa605f170">More...</a><br /></td></tr>
+<tr class="separator:af5b6356832d2a67212070a1aa605f170"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad205184d43409f04216540ae22f15009"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ad205184d43409f04216540ae22f15009">xbFflush</a> ()</td></tr>
+<tr class="memdesc:ad205184d43409f04216540ae22f15009"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fflush. <a href="classxb_1_1xbFile.html#ad205184d43409f04216540ae22f15009">More...</a><br /></td></tr>
+<tr class="separator:ad205184d43409f04216540ae22f15009"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afb1c584d2895ffb7834df80aea7eb1e4"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#afb1c584d2895ffb7834df80aea7eb1e4">xbFgetc</a> (xbInt32 &amp;c)</td></tr>
+<tr class="memdesc:afb1c584d2895ffb7834df80aea7eb1e4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fgetc. <a href="classxb_1_1xbFile.html#afb1c584d2895ffb7834df80aea7eb1e4">More...</a><br /></td></tr>
+<tr class="separator:afb1c584d2895ffb7834df80aea7eb1e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5ee229bda4d7d6695e122200e581e7a6"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5ee229bda4d7d6695e122200e581e7a6">xbFgetc</a> (char &amp;c)</td></tr>
+<tr class="memdesc:a5ee229bda4d7d6695e122200e581e7a6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fgetc. <a href="classxb_1_1xbFile.html#a5ee229bda4d7d6695e122200e581e7a6">More...</a><br /></td></tr>
+<tr class="separator:a5ee229bda4d7d6695e122200e581e7a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad245955ace26e5dde85fd4373b30d026"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ad245955ace26e5dde85fd4373b30d026">xbFgets</a> (size_t lSize, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLine)</td></tr>
+<tr class="memdesc:ad245955ace26e5dde85fd4373b30d026"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fgets. <a href="classxb_1_1xbFile.html#ad245955ace26e5dde85fd4373b30d026">More...</a><br /></td></tr>
+<tr class="separator:ad245955ace26e5dde85fd4373b30d026"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7cdfef5ede9ac98d44a28a6b7a70972c"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a7cdfef5ede9ac98d44a28a6b7a70972c">xbFopen</a> (xbInt16 iOpenMode)</td></tr>
+<tr class="separator:a7cdfef5ede9ac98d44a28a6b7a70972c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0548cedf0f26b7d8ac221f75b0cd048c"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a0548cedf0f26b7d8ac221f75b0cd048c">xbFopen</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sOpenMode, xbInt16 iShareMode)</td></tr>
+<tr class="memdesc:a0548cedf0f26b7d8ac221f75b0cd048c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fopen. <a href="classxb_1_1xbFile.html#a0548cedf0f26b7d8ac221f75b0cd048c">More...</a><br /></td></tr>
+<tr class="separator:a0548cedf0f26b7d8ac221f75b0cd048c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aabd113333b49c36cad23244b392baab4"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aabd113333b49c36cad23244b392baab4">xbFopen</a> (xbInt16 iOpenMode, xbInt16 iShareMode)</td></tr>
+<tr class="memdesc:aabd113333b49c36cad23244b392baab4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fopen. <a href="classxb_1_1xbFile.html#aabd113333b49c36cad23244b392baab4">More...</a><br /></td></tr>
+<tr class="separator:aabd113333b49c36cad23244b392baab4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab0fa19686ca8953ff4b556fb5b249135"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ab0fa19686ca8953ff4b556fb5b249135">xbFopen</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sMode, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iShareMode)</td></tr>
+<tr class="memdesc:ab0fa19686ca8953ff4b556fb5b249135"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fopen. <a href="classxb_1_1xbFile.html#ab0fa19686ca8953ff4b556fb5b249135">More...</a><br /></td></tr>
+<tr class="separator:ab0fa19686ca8953ff4b556fb5b249135"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af2e940c78956e5cb6824f9a1bc404896"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#af2e940c78956e5cb6824f9a1bc404896">xbFputc</a> (xbInt32 c)</td></tr>
+<tr class="memdesc:af2e940c78956e5cb6824f9a1bc404896"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fputc. <a href="classxb_1_1xbFile.html#af2e940c78956e5cb6824f9a1bc404896">More...</a><br /></td></tr>
+<tr class="separator:af2e940c78956e5cb6824f9a1bc404896"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a863f74cf17df8186d88586b4d2a6441a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a863f74cf17df8186d88586b4d2a6441a">xbFputc</a> (xbInt32 c, xbInt32 iNoTimes)</td></tr>
+<tr class="memdesc:a863f74cf17df8186d88586b4d2a6441a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fputc. <a href="classxb_1_1xbFile.html#a863f74cf17df8186d88586b4d2a6441a">More...</a><br /></td></tr>
+<tr class="separator:a863f74cf17df8186d88586b4d2a6441a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a698f3b40216778562e639e6ca1a47573"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a698f3b40216778562e639e6ca1a47573">xbFputs</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;s)</td></tr>
+<tr class="memdesc:a698f3b40216778562e639e6ca1a47573"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fputs. <a href="classxb_1_1xbFile.html#a698f3b40216778562e639e6ca1a47573">More...</a><br /></td></tr>
+<tr class="separator:a698f3b40216778562e639e6ca1a47573"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab4f6afaa1f77539f27a4f05c26e54e2f"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ab4f6afaa1f77539f27a4f05c26e54e2f">xbFread</a> (void *ptr, size_t size, size_t nmemb)</td></tr>
+<tr class="memdesc:ab4f6afaa1f77539f27a4f05c26e54e2f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fread. <a href="classxb_1_1xbFile.html#ab4f6afaa1f77539f27a4f05c26e54e2f">More...</a><br /></td></tr>
+<tr class="separator:ab4f6afaa1f77539f27a4f05c26e54e2f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5337ab8918df240910c0d19b4f298e3d"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5337ab8918df240910c0d19b4f298e3d">xbFseek</a> (xbInt64 llOffset, xbInt32 whence)</td></tr>
+<tr class="memdesc:a5337ab8918df240910c0d19b4f298e3d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fseek. <a href="classxb_1_1xbFile.html#a5337ab8918df240910c0d19b4f298e3d">More...</a><br /></td></tr>
+<tr class="separator:a5337ab8918df240910c0d19b4f298e3d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0e1c06aedfa7fbcb92e117f891edd13b"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a0e1c06aedfa7fbcb92e117f891edd13b">xbFtell</a> ()</td></tr>
+<tr class="memdesc:a0e1c06aedfa7fbcb92e117f891edd13b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary ftell. <a href="classxb_1_1xbFile.html#a0e1c06aedfa7fbcb92e117f891edd13b">More...</a><br /></td></tr>
+<tr class="separator:a0e1c06aedfa7fbcb92e117f891edd13b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9891b792f585a696f38a5cf959e30918"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a9891b792f585a696f38a5cf959e30918">xbFTurnOffFileBuffering</a> ()</td></tr>
+<tr class="memdesc:a9891b792f585a696f38a5cf959e30918"><td class="mdescLeft">&#160;</td><td class="mdescRight">Turn off file buffering. <a href="classxb_1_1xbFile.html#a9891b792f585a696f38a5cf959e30918">More...</a><br /></td></tr>
+<tr class="separator:a9891b792f585a696f38a5cf959e30918"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a08463f506f425c2385acbe1a561506e9"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a08463f506f425c2385acbe1a561506e9">xbReadUntil</a> (const char cDelim, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sOut)</td></tr>
+<tr class="memdesc:a08463f506f425c2385acbe1a561506e9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read file until a particular character is encountered on input stream. <a href="classxb_1_1xbFile.html#a08463f506f425c2385acbe1a561506e9">More...</a><br /></td></tr>
+<tr class="separator:a08463f506f425c2385acbe1a561506e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6d919366c2ec95e529906bf8842cbf07"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a6d919366c2ec95e529906bf8842cbf07">xbRemove</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iOption)</td></tr>
+<tr class="memdesc:a6d919366c2ec95e529906bf8842cbf07"><td class="mdescLeft">&#160;</td><td class="mdescRight">Delete file. <a href="classxb_1_1xbFile.html#a6d919366c2ec95e529906bf8842cbf07">More...</a><br /></td></tr>
+<tr class="separator:a6d919366c2ec95e529906bf8842cbf07"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a58f6a6751fdf7e9549c273bb75d93eb5"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a58f6a6751fdf7e9549c273bb75d93eb5">xbRemove</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName)</td></tr>
+<tr class="memdesc:a58f6a6751fdf7e9549c273bb75d93eb5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Delete file. <a href="classxb_1_1xbFile.html#a58f6a6751fdf7e9549c273bb75d93eb5">More...</a><br /></td></tr>
+<tr class="separator:a58f6a6751fdf7e9549c273bb75d93eb5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab3c668a8570433188382d31d7c60bd48"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ab3c668a8570433188382d31d7c60bd48">xbRemove</a> ()</td></tr>
+<tr class="memdesc:ab3c668a8570433188382d31d7c60bd48"><td class="mdescLeft">&#160;</td><td class="mdescRight">Delete file. <a href="classxb_1_1xbFile.html#ab3c668a8570433188382d31d7c60bd48">More...</a><br /></td></tr>
+<tr class="separator:ab3c668a8570433188382d31d7c60bd48"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afc8ce113aa72611a278233f9bb170012"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#afc8ce113aa72611a278233f9bb170012">xbRename</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sOldName, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sNewName)</td></tr>
+<tr class="memdesc:afc8ce113aa72611a278233f9bb170012"><td class="mdescLeft">&#160;</td><td class="mdescRight">Rename file. <a href="classxb_1_1xbFile.html#afc8ce113aa72611a278233f9bb170012">More...</a><br /></td></tr>
+<tr class="separator:afc8ce113aa72611a278233f9bb170012"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7996b6e084665c37c3892faea64b3505"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a7996b6e084665c37c3892faea64b3505">xbRewind</a> ()</td></tr>
+<tr class="memdesc:a7996b6e084665c37c3892faea64b3505"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for rewind. <a href="classxb_1_1xbFile.html#a7996b6e084665c37c3892faea64b3505">More...</a><br /></td></tr>
+<tr class="separator:a7996b6e084665c37c3892faea64b3505"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6aadd871d1782944703fed773d44b85f"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a6aadd871d1782944703fed773d44b85f">xbFwrite</a> (const void *ptr, size_t lSize, size_t lNmemb)</td></tr>
+<tr class="memdesc:a6aadd871d1782944703fed773d44b85f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fwrite. <a href="classxb_1_1xbFile.html#a6aadd871d1782944703fed773d44b85f">More...</a><br /></td></tr>
+<tr class="separator:a6aadd871d1782944703fed773d44b85f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a518bfcbfa3699d883cf89affee383296"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a518bfcbfa3699d883cf89affee383296">xbTruncate</a> (xbInt64 llSize)</td></tr>
+<tr class="memdesc:a518bfcbfa3699d883cf89affee383296"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for ftruncate. <a href="classxb_1_1xbFile.html#a518bfcbfa3699d883cf89affee383296">More...</a><br /></td></tr>
+<tr class="separator:a518bfcbfa3699d883cf89affee383296"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a97dfa59ab9a8e9f17454da0faceb023d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a97dfa59ab9a8e9f17454da0faceb023d">DisplayError</a> (xbInt16 ErrorCode) const</td></tr>
+<tr class="memdesc:a97dfa59ab9a8e9f17454da0faceb023d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Display error message on console for a given error number. <a href="classxb_1_1xbSsv.html#a97dfa59ab9a8e9f17454da0faceb023d">More...</a><br /></td></tr>
+<tr class="separator:a97dfa59ab9a8e9f17454da0faceb023d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6fbb9c3a550ab0b3378f9586a57791d2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a6fbb9c3a550ab0b3378f9586a57791d2">GetDefaultDateFormat</a> () const</td></tr>
+<tr class="memdesc:a6fbb9c3a550ab0b3378f9586a57791d2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the default date format. <a href="classxb_1_1xbSsv.html#a6fbb9c3a550ab0b3378f9586a57791d2">More...</a><br /></td></tr>
+<tr class="separator:a6fbb9c3a550ab0b3378f9586a57791d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">GetDataDirectory</a> () const</td></tr>
+<tr class="memdesc:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current data directory. <a href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">More...</a><br /></td></tr>
+<tr class="separator:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abfaeef85935331073d213465bb362a61"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abfaeef85935331073d213465bb362a61">GetTempDirectory</a> () const</td></tr>
+<tr class="memdesc:abfaeef85935331073d213465bb362a61"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current temp directory. <a href="classxb_1_1xbSsv.html#abfaeef85935331073d213465bb362a61">More...</a><br /></td></tr>
+<tr class="separator:abfaeef85935331073d213465bb362a61"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">GetHomeDir</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sHomeDirOut)</td></tr>
+<tr class="memdesc:abc9c06c95d71fbad8294e1ae8862cea9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get home directory. <a href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">More...</a><br /></td></tr>
+<tr class="separator:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a49cd162f066eef2b829ba7c9f6620243"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">GetEndianType</a> () const</td></tr>
+<tr class="memdesc:a49cd162f066eef2b829ba7c9f6620243"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the Endian type. <a href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">More...</a><br /></td></tr>
+<tr class="separator:a49cd162f066eef2b829ba7c9f6620243"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a56961d2a67b8e7470098626ac4dac7e4"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">GetErrorMessage</a> (xbInt16 ErrorCode) const</td></tr>
+<tr class="memdesc:a56961d2a67b8e7470098626ac4dac7e4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get an error message. <a href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">More...</a><br /></td></tr>
+<tr class="separator:a56961d2a67b8e7470098626ac4dac7e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a63cee13b473ee13970e93b11837b9e35"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a63cee13b473ee13970e93b11837b9e35">GetPathSeparator</a> () const</td></tr>
+<tr class="memdesc:a63cee13b473ee13970e93b11837b9e35"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the OS dependent path separator. <a href="classxb_1_1xbSsv.html#a63cee13b473ee13970e93b11837b9e35">More...</a><br /></td></tr>
+<tr class="separator:a63cee13b473ee13970e93b11837b9e35"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">SetDataDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDataDirectory)</td></tr>
+<tr class="memdesc:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the data directory. <a href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">More...</a><br /></td></tr>
+<tr class="separator:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5f74db23f8902846d581935c7db73f9c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">SetDefaultDateFormat</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDefaultDateFormat)</td></tr>
+<tr class="memdesc:a5f74db23f8902846d581935c7db73f9c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the default date format. <a href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">More...</a><br /></td></tr>
+<tr class="separator:a5f74db23f8902846d581935c7db73f9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a17c229a20ef9ab4034df8f9cd657adb2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a17c229a20ef9ab4034df8f9cd657adb2">SetTempDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTempDirectory)</td></tr>
+<tr class="memdesc:a17c229a20ef9ab4034df8f9cd657adb2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the temp directory. <a href="classxb_1_1xbSsv.html#a17c229a20ef9ab4034df8f9cd657adb2">More...</a><br /></td></tr>
+<tr class="separator:a17c229a20ef9ab4034df8f9cd657adb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a62e4fd0a5888665c76bbbad962794e72"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72">BitSet</a> (unsigned char c, xbInt16 iBitNo) const</td></tr>
+<tr class="memdesc:a62e4fd0a5888665c76bbbad962794e72"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check a bit in a one byte field and see if it is set. <a href="classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72">More...</a><br /></td></tr>
+<tr class="separator:a62e4fd0a5888665c76bbbad962794e72"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8551b15a3ce4fa2a40d698db01f4a9ae"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a8551b15a3ce4fa2a40d698db01f4a9ae">BitDump</a> (unsigned char c) const</td></tr>
+<tr class="separator:a8551b15a3ce4fa2a40d698db01f4a9ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aba1395b8e4c7f28c3614061de6e49190"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#aba1395b8e4c7f28c3614061de6e49190">BitDump</a> (char c) const</td></tr>
+<tr class="separator:aba1395b8e4c7f28c3614061de6e49190"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6982f973e81587b04916f4509746aaf5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a6982f973e81587b04916f4509746aaf5">GetDefaultAutoCommit</a> () const</td></tr>
+<tr class="memdesc:a6982f973e81587b04916f4509746aaf5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the default auto commit setting. <a href="classxb_1_1xbSsv.html#a6982f973e81587b04916f4509746aaf5">More...</a><br /></td></tr>
+<tr class="separator:a6982f973e81587b04916f4509746aaf5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">SetDefaultAutoCommit</a> (<a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bDefaultAutoCommit)</td></tr>
+<tr class="memdesc:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the default auto commit. <a href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">More...</a><br /></td></tr>
+<tr class="separator:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4822315bded3969b59aeeb683c373051"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a4822315bded3969b59aeeb683c373051">GetLogDirectory</a> () const</td></tr>
+<tr class="separator:a4822315bded3969b59aeeb683c373051"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afaef09435be73b3111f5edbd7091d861"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#afaef09435be73b3111f5edbd7091d861">GetLogFileName</a> () const</td></tr>
+<tr class="separator:afaef09435be73b3111f5edbd7091d861"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7b992ed97281bf25b5b66f5df686225e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a7b992ed97281bf25b5b66f5df686225e">SetLogDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLogDirectory)</td></tr>
+<tr class="separator:a7b992ed97281bf25b5b66f5df686225e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7f05738e7dfd759e89990242ef503544"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a7f05738e7dfd759e89990242ef503544">SetLogFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLogFileName)</td></tr>
+<tr class="separator:a7f05738e7dfd759e89990242ef503544"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">GetMultiUser</a> () const</td></tr>
+<tr class="memdesc:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the multi user setting. <a href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">More...</a><br /></td></tr>
+<tr class="separator:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aba6e59512f7172dd55dcf92059e5928c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#aba6e59512f7172dd55dcf92059e5928c">SetMultiUser</a> (<a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bMultiUser)</td></tr>
+<tr class="memdesc:aba6e59512f7172dd55dcf92059e5928c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the multi user setting. <a href="classxb_1_1xbSsv.html#aba6e59512f7172dd55dcf92059e5928c">More...</a><br /></td></tr>
+<tr class="separator:aba6e59512f7172dd55dcf92059e5928c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-static-attribs" name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:a6219f1b5e24ea12fe158cd5aea56988e"><td class="memItemLeft" align="right" valign="top">static const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a6219f1b5e24ea12fe158cd5aea56988e">ErrorCodeText</a> []</td></tr>
+<tr class="separator:a6219f1b5e24ea12fe158cd5aea56988e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-methods" name="pro-methods"></a>
+Protected Member Functions</h2></td></tr>
+<tr class="memitem:a904ec348fd029d4a76e72b8fde636108"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a904ec348fd029d4a76e72b8fde636108">SetEndianType</a> ()</td></tr>
+<tr class="memdesc:a904ec348fd029d4a76e72b8fde636108"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the endian type. <a href="classxb_1_1xbSsv.html#a904ec348fd029d4a76e72b8fde636108">More...</a><br /></td></tr>
+<tr class="separator:a904ec348fd029d4a76e72b8fde636108"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-attribs" name="pro-attribs"></a>
+Protected Attributes</h2></td></tr>
+<tr class="memitem:ae39a67ea391b46055d4ca299cb222004"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ae39a67ea391b46055d4ca299cb222004">xbase</a></td></tr>
+<tr class="separator:ae39a67ea391b46055d4ca299cb222004"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-static-attribs" name="pro-static-attribs"></a>
+Static Protected Attributes</h2></td></tr>
+<tr class="memitem:a5849e813f5e8e1cd180f0366637adbf3"><td class="memItemLeft" align="right" valign="top">static xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a5849e813f5e8e1cd180f0366637adbf3">iEndianType</a> = 0</td></tr>
+<tr class="separator:a5849e813f5e8e1cd180f0366637adbf3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9dec3164c3b264882df634915ecf21da"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classxb_1_1xbString.html">xbString</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a9dec3164c3b264882df634915ecf21da">sNullString</a> = &quot;&quot;</td></tr>
+<tr class="separator:a9dec3164c3b264882df634915ecf21da"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p >Class for handling low level file I/O. </p>
+<p >The <a class="el" href="classxb_1_1xbFile.html" title="Class for handling low level file I/O.">xbFile</a> class is used as an abstraction layer to isolate the library from the nuances of different operating systems and machine architectures.</p>
+<p >This module handles low level file I/O and is a base class for the (dbf) table, (dbt) memo and (ndx,mdx) index classes. Files are opened and manipulated via methods in the <a class="el" href="classxb_1_1xbFile.html" title="Class for handling low level file I/O.">xbFile</a> class.<br />
+ This class handles:<br />
+ 1) Big and little endian reads/writes<br />
+ 2) 32 or 64 bit system calls, depending on OS<br />
+ 3) Various different c/c++ calls to open/close/read/write based on OS and compiler version<br />
+ <br />
+ If you are wanting to port this library to a new platform, start with this class. This class could be used if you want to write a platform independent program that needs R/W file access. </p>
+</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="a869eedd74c6eddc308852eb546c87176" name="a869eedd74c6eddc308852eb546c87176"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a869eedd74c6eddc308852eb546c87176">&#9670;&nbsp;</a></span>xbFile()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xb::xbFile::xbFile </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *&#160;</td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Class Constructor. </p>
+
+</div>
+</div>
+<a id="a491f6c48076e89da2e791a42b2727a90" name="a491f6c48076e89da2e791a42b2727a90"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a491f6c48076e89da2e791a42b2727a90">&#9670;&nbsp;</a></span>~xbFile()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xb::xbFile::~xbFile </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Class Destructor. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="aba1395b8e4c7f28c3614061de6e49190" name="aba1395b8e4c7f28c3614061de6e49190"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aba1395b8e4c7f28c3614061de6e49190">&#9670;&nbsp;</a></span>BitDump() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::BitDump </td>
+ <td>(</td>
+ <td class="paramtype">char&#160;</td>
+ <td class="paramname"><em>c</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8551b15a3ce4fa2a40d698db01f4a9ae" name="a8551b15a3ce4fa2a40d698db01f4a9ae"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8551b15a3ce4fa2a40d698db01f4a9ae">&#9670;&nbsp;</a></span>BitDump() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::BitDump </td>
+ <td>(</td>
+ <td class="paramtype">unsigned char&#160;</td>
+ <td class="paramname"><em>c</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a62e4fd0a5888665c76bbbad962794e72" name="a62e4fd0a5888665c76bbbad962794e72"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a62e4fd0a5888665c76bbbad962794e72">&#9670;&nbsp;</a></span>BitSet()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbSsv::BitSet </td>
+ <td>(</td>
+ <td class="paramtype">unsigned char&#160;</td>
+ <td class="paramname"><em>c</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iBitNo</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Check a bit in a one byte field and see if it is set. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>One byte char field to examine. </td></tr>
+ <tr><td class="paramname">iBitNo</td><td>which bit to examine. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue Bit is set<br />
+ xbFalse Bit is not set </dd></dl>
+
+</div>
+</div>
+<a id="ad39797624a752b9d62533d00fad9feff" name="ad39797624a752b9d62533d00fad9feff"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad39797624a752b9d62533d00fad9feff">&#9670;&nbsp;</a></span>CreateUniqueFileName()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::CreateUniqueFileName </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sDirIn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sExtIn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFqnOut</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iOption</em> = <code>0</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Create a unique file name. </p>
+<p >Given a directory and file extension as inputs, create a unique file name.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sDirIn</td><td>Directory </td></tr>
+ <tr><td class="paramname">sExtIn</td><td>File Extension </td></tr>
+ <tr><td class="paramname">sFqnOut</td><td>A fully qualifed unique file name as output </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a></dd></dl>
+<p>Create a unique file name.</p>
+<p >Given a directory and file extension as inputs, create a unique file name.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sDirIn</td><td>Directory </td></tr>
+ <tr><td class="paramname">sExtIn</td><td>File Extension </td></tr>
+ <tr><td class="paramname">iOption</td><td>0 - look only for one file for a given directory and extension<br />
+ 1 - if file name extension is "dbf" or "DBF", verify unique dbt or DBT (memo) file is also available<br />
+ </td></tr>
+ <tr><td class="paramname">sFqnOut</td><td>A fully qualifed unique file name as output </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a5a740033664c9ad2611c90e2a6d0c2d3" name="a5a740033664c9ad2611c90e2a6d0c2d3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5a740033664c9ad2611c90e2a6d0c2d3">&#9670;&nbsp;</a></span>DetermineXbaseMemoVersion()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::DetermineXbaseMemoVersion </td>
+ <td>(</td>
+ <td class="paramtype">unsigned char&#160;</td>
+ <td class="paramname"><em>cFileTypeByte</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Determine which version the memo (dbt) file is. </p>
+<p >This routine uses the first byte in the dbf file to determine which memo file version is in use. The main difference between version 3 and 4 is that version 4 will reuse blocks if they become available. Version 3 does not.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">cFileTypeByte</td><td>is an output field and is one of:<br />
+ <br />
+ 0 - none<br />
+ 3 - Dbase III+<br />
+ 4 - Dbase IV<br />
+</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="ae2b6ac26018dc28f77afbb3f008c3f66" name="ae2b6ac26018dc28f77afbb3f008c3f66"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae2b6ac26018dc28f77afbb3f008c3f66">&#9670;&nbsp;</a></span>DetermineXbaseTableVersion()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::DetermineXbaseTableVersion </td>
+ <td>(</td>
+ <td class="paramtype">unsigned char&#160;</td>
+ <td class="paramname"><em>cFileTypeByte</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Determine xbase dbf version. </p>
+<p >This routine is used to determine which version of the Xbase classes can be used for a given DBF file.<br />
+</p>
+<p >It attempts to use the highest version compiled into the library.<br />
+</p>
+<p >References:<br />
+ This routine uses the first byte from the dbf file.<br />
+ Per DBase documentation:<br />
+ Valid dBASE for Windows table file, bits 0-2 indicate version number: 3 for dBASE Level 5, 4 for dBASE Level 7.<br />
+ Bit 3 and bit 7 indicate presence of a dBASE IV or dBASE for Windows memo file;<br />
+ Bits 4-6 indicate the presence of a dBASE IV SQL table;<br />
+ Bit 7 indicates the presence of any .DBT memo file (either a dBASE III PLUS type or a dBASE IV or dBASE for Windows memo file).<br />
+ <br />
+ Bachmann spec (used extensively in library build), page 7 - does not match DBase documentation<br />
+ <br />
+ returns<br />
+ 0 - unknown<br />
+ 3 - Dbase level 3<br />
+ 4 - Dbase level 4<br />
+ 5 - Dbase Level 5 (future)<br />
+ 7 - Dbase Level 7 (future)<br />
+ <br />
+ 1x - Clipper files (future)<br />
+ 2x - Foxbase files (future)<br />
+ <br />
+ </p>
+
+</div>
+</div>
+<a id="a97dfa59ab9a8e9f17454da0faceb023d" name="a97dfa59ab9a8e9f17454da0faceb023d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a97dfa59ab9a8e9f17454da0faceb023d">&#9670;&nbsp;</a></span>DisplayError()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::DisplayError </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iErrorCode</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Display error message on console for a given error number. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iErrorCode</td><td>Error number to reference </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="ab14e4a11427f5efb81cba1dd32bd1aa1" name="ab14e4a11427f5efb81cba1dd32bd1aa1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab14e4a11427f5efb81cba1dd32bd1aa1">&#9670;&nbsp;</a></span>eGetDouble()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> xb::xbFile::eGetDouble </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get a portable double value. </p>
+<p >This routine returns a double value from an 8 byte character stream, accounting for endian type.</p>
+<p >Converts a double (64 bit floating point) value stored at p from a portable format to the machine format.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">p</td><td>pointer to memory containing the portable double value</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the double value. </dd></dl>
+
+</div>
+</div>
+<a id="ac40c991110ddc6fb30a72d90f4652762" name="ac40c991110ddc6fb30a72d90f4652762"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac40c991110ddc6fb30a72d90f4652762">&#9670;&nbsp;</a></span>eGetInt16()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::eGetInt16 </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get a portable short value. </p>
+<p >This routine returns a short int value from a 2 byte character stream, accounting for endian type.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">p</td><td>pointer to memory containing the portable long value</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the short value. </dd></dl>
+
+</div>
+</div>
+<a id="a60b24a5afc984c586bf384c7e915ba0d" name="a60b24a5afc984c586bf384c7e915ba0d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a60b24a5afc984c586bf384c7e915ba0d">&#9670;&nbsp;</a></span>eGetInt32()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt32 xb::xbFile::eGetInt32 </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get a portable long value. </p>
+<p >This routine returns a long int value from a 4 byte character stream, accounting for endian type.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">p</td><td>pointer to memory containing the portable long value</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the long value. </dd></dl>
+
+</div>
+</div>
+<a id="a936ade458e6d5e6d29f9b5031888d189" name="a936ade458e6d5e6d29f9b5031888d189"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a936ade458e6d5e6d29f9b5031888d189">&#9670;&nbsp;</a></span>eGetUInt16()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbUInt16 xb::xbFile::eGetUInt16 </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get a portable unsigned short value. </p>
+<p >This routine returns a short unsigned int value from a 2 byte character stream, accounting for endian type.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">p</td><td>pointer to memory containing the portable long value</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the short value. </dd></dl>
+
+</div>
+</div>
+<a id="a78f052529d39a18deaface5a0d47d0b0" name="a78f052529d39a18deaface5a0d47d0b0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a78f052529d39a18deaface5a0d47d0b0">&#9670;&nbsp;</a></span>eGetUInt32()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbUInt32 xb::xbFile::eGetUInt32 </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get a portable unsigned long value. </p>
+<p >This routine returns an unsigned long int value from a 4 byte character stream, accounting for endian type.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">p</td><td>pointer to memory containing the portable long value</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the unsigned long value. </dd></dl>
+
+</div>
+</div>
+<a id="a98b6ff533ae93f90c977a2ba23eeb105" name="a98b6ff533ae93f90c977a2ba23eeb105"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a98b6ff533ae93f90c977a2ba23eeb105">&#9670;&nbsp;</a></span>ePutDouble()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbFile::ePutDouble </td>
+ <td>(</td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>c</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a>&#160;</td>
+ <td class="paramname"><em>d</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Write a portable double value to memory location. </p>
+<p >Converts a double (64 bit floating point) value from machine format to a portable format and stores the converted value in the memory referenced by c.</p>
+<p >This routine puts a double value to an 8 byte character stream</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>Pointer to memory to hold converted value </td></tr>
+ <tr><td class="paramname">d</td><td>Input value to be converted </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a29130f12739ac8fa837f4eaedf1338b2" name="a29130f12739ac8fa837f4eaedf1338b2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a29130f12739ac8fa837f4eaedf1338b2">&#9670;&nbsp;</a></span>ePutInt16()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbFile::ePutInt16 </td>
+ <td>(</td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>c</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>s</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Write a portable short value to memory location. </p>
+<p >Converts a short (16 bit integer) value from machine format to a portable format and stores the converted value in the memory referenced by c.</p>
+<p >This routine puts a short value to a 2 byte character stream</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>Pointer to memory to hold converted value </td></tr>
+ <tr><td class="paramname">s</td><td>Input value to be converted </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a19c37f76a2ccbb45019cb0fc373d3f46" name="a19c37f76a2ccbb45019cb0fc373d3f46"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a19c37f76a2ccbb45019cb0fc373d3f46">&#9670;&nbsp;</a></span>ePutInt32()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbFile::ePutInt32 </td>
+ <td>(</td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>c</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt32&#160;</td>
+ <td class="paramname"><em>l</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Write a portable long value to memory location. </p>
+<p >Converts a long (32 bit integer) value from machine format to a portable format and stores the converted value in the memory referenced by c.</p>
+<p >This routine puts a long value to a 4 byte character stream.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>Pointer to memory to hold converted value </td></tr>
+ <tr><td class="paramname">l</td><td>Input value to be converted </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a65e9839f92b96eac7b0d071fac3bbe40" name="a65e9839f92b96eac7b0d071fac3bbe40"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a65e9839f92b96eac7b0d071fac3bbe40">&#9670;&nbsp;</a></span>ePutUInt16()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbFile::ePutUInt16 </td>
+ <td>(</td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>c</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbUInt16&#160;</td>
+ <td class="paramname"><em>s</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Write a portable unsigned short value to memory location. </p>
+<p >Converts an unsigned short (16 bit integer) value from machine format to a portable format and stores the converted value in the memory referenced by c.</p>
+<p >This routine puts an unsigned short value to a 2 byte character stream</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>Pointer to memory to hold converted value </td></tr>
+ <tr><td class="paramname">s</td><td>Input value to be converted </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="aa3f6ceae4b96f24875d86848bf13a173" name="aa3f6ceae4b96f24875d86848bf13a173"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa3f6ceae4b96f24875d86848bf13a173">&#9670;&nbsp;</a></span>ePutUInt32()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbFile::ePutUInt32 </td>
+ <td>(</td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>c</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ul</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Write a portable unsigned long value to memory location. </p>
+<p >Converts an unsigned long (32 bit integer) value from machine format to a portable format and stores the converted value in the memory referenced by c.</p>
+<p >This routine puts an unsigned long value to a 4 byte character stream.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>Pointer to memory to hold converted value </td></tr>
+ <tr><td class="paramname">ul</td><td>Input value to be converted </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a78bd8a11dce102647095baf3aff2b006" name="a78bd8a11dce102647095baf3aff2b006"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a78bd8a11dce102647095baf3aff2b006">&#9670;&nbsp;</a></span>FileExists() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbFile::FileExists </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Determines if a file exists. </p>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue if file exists<br />
+ xbFalse if file does not exist </dd></dl>
+
+</div>
+</div>
+<a id="a61130b4fbf4cf9d5972dcb4993de2f94" name="a61130b4fbf4cf9d5972dcb4993de2f94"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a61130b4fbf4cf9d5972dcb4993de2f94">&#9670;&nbsp;</a></span>FileExists() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbFile::FileExists </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFileName</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Determines if a file exists. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFileName</td><td>- file name to check for</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue if file exists<br />
+ xbFalse if file does not exist </dd></dl>
+
+</div>
+</div>
+<a id="a0592168f39a10f2a401a88ef781f6148" name="a0592168f39a10f2a401a88ef781f6148"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0592168f39a10f2a401a88ef781f6148">&#9670;&nbsp;</a></span>FileExists() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbFile::FileExists </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFileName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iOption</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Determines if a file exists. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFileName</td><td>- file name to check for </td></tr>
+ <tr><td class="paramname">iOption</td><td>if 1, assume this is a request for a dbf file and check for the a dbt memo file also, returns true if both files are found</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue if both dbf and dbt files exist<br />
+ xbFalse if file does not exist </dd></dl>
+
+</div>
+</div>
+<a id="a174d8a6aabc9cfcd32fedbd1e5b13ddd" name="a174d8a6aabc9cfcd32fedbd1e5b13ddd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a174d8a6aabc9cfcd32fedbd1e5b13ddd">&#9670;&nbsp;</a></span>FileExists() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbFile::FileExists </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iOption</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Determines if a file exists. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iOption</td><td>if 1, assume this is a request for a dbf file and check for the a dbt memo file also, returns true if both files are found</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue if both files exist<br />
+ xbFalse if file does not exist </dd></dl>
+
+</div>
+</div>
+<a id="a7fa837938a32dc9ca3fbc81cbaf50f59" name="a7fa837938a32dc9ca3fbc81cbaf50f59"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7fa837938a32dc9ca3fbc81cbaf50f59">&#9670;&nbsp;</a></span>FileIsOpen()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbFile::FileIsOpen </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Determines if file is open. </p>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue if file is open<br />
+ xbFalse if file is not open </dd></dl>
+
+</div>
+</div>
+<a id="a638e14262410a1627819f016a16cdce2" name="a638e14262410a1627819f016a16cdce2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a638e14262410a1627819f016a16cdce2">&#9670;&nbsp;</a></span>GetBlockSize()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbUInt32 xb::xbFile::GetBlockSize </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get the block size. </p>
+<dl class="section return"><dt>Returns</dt><dd>Block Size </dd></dl>
+
+</div>
+</div>
+<a id="a1d803a4bfc8ba0561267a0bf9e51f7d9" name="a1d803a4bfc8ba0561267a0bf9e51f7d9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1d803a4bfc8ba0561267a0bf9e51f7d9">&#9670;&nbsp;</a></span>GetDataDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetDataDirectory </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the current data directory. </p>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing the current data directory where the database files are stored. </dd></dl>
+
+</div>
+</div>
+<a id="a6982f973e81587b04916f4509746aaf5" name="a6982f973e81587b04916f4509746aaf5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6982f973e81587b04916f4509746aaf5">&#9670;&nbsp;</a></span>GetDefaultAutoCommit()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbSsv::GetDefaultAutoCommit </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the default auto commit setting. </p>
+<p >When auto commit is enabled, the library will automatically post any updates when moving off an updated record or closing files. If auto commit is disabled, the application program will need to explicitly update the tables using using dbf-&gt;Put() and dbf-&gt;AppendRecord().</p>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue if auto commit is turned on<br />
+ xbFalse is auto commit is turned off </dd></dl>
+
+</div>
+</div>
+<a id="a6fbb9c3a550ab0b3378f9586a57791d2" name="a6fbb9c3a550ab0b3378f9586a57791d2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6fbb9c3a550ab0b3378f9586a57791d2">&#9670;&nbsp;</a></span>GetDefaultDateFormat()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetDefaultDateFormat </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the default date format. </p>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing the default date format. </dd></dl>
+
+</div>
+</div>
+<a id="acd0fb2166b2bff7e8a1cf65a7bc8be1e" name="acd0fb2166b2bff7e8a1cf65a7bc8be1e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acd0fb2166b2bff7e8a1cf65a7bc8be1e">&#9670;&nbsp;</a></span>GetDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbFile::GetDirectory </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get the directory name. </p>
+<dl class="section return"><dt>Returns</dt><dd>the directory name of the file </dd></dl>
+
+</div>
+</div>
+<a id="a49cd162f066eef2b829ba7c9f6620243" name="a49cd162f066eef2b829ba7c9f6620243"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a49cd162f066eef2b829ba7c9f6620243">&#9670;&nbsp;</a></span>GetEndianType()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbSsv::GetEndianType </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the Endian type. </p>
+<dl class="section return"><dt>Returns</dt><dd>B - Big endian<br />
+ L - Little endian<br />
+ </dd></dl>
+
+</div>
+</div>
+<a id="a56961d2a67b8e7470098626ac4dac7e4" name="a56961d2a67b8e7470098626ac4dac7e4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a56961d2a67b8e7470098626ac4dac7e4">&#9670;&nbsp;</a></span>GetErrorMessage()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char * xb::xbSsv::GetErrorMessage </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iErrorCode</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get an error message. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iErrorCode</td><td>ErrorCode is the error number of description to be returned. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Returns a pointer to a string containing a text description for the error code. </dd></dl>
+
+</div>
+</div>
+<a id="af5127c92892816e9bbc5c19653c4147a" name="af5127c92892816e9bbc5c19653c4147a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af5127c92892816e9bbc5c19653c4147a">&#9670;&nbsp;</a></span>GetFileDirPart() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::GetFileDirPart </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sCompleteFileNameIn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFileDirPartOut</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get the directory part of the file name. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sCompleteFileNameIn</td><td>- a fully qualfied input file name </td></tr>
+ <tr><td class="paramname">sFileDirPartOut</td><td>- the returned directory name part out of sCompleteFileNameIn </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a60c53998e3d1b694134b20a87bc9bf5a" name="a60c53998e3d1b694134b20a87bc9bf5a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a60c53998e3d1b694134b20a87bc9bf5a">&#9670;&nbsp;</a></span>GetFileDirPart() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::GetFileDirPart </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFileDirPartOut</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get the directory part of the file name. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFileDirPartOut</td><td>- the returned directory name </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="ab289b6ffe955321160c1f90220c22e25" name="ab289b6ffe955321160c1f90220c22e25"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab289b6ffe955321160c1f90220c22e25">&#9670;&nbsp;</a></span>GetFileExtPart() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::GetFileExtPart </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sCompleteFileNameIn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFileExtPartOut</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get the extension part of the file name. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sCompleteFileNameIn</td><td>- a fully qualfied input file name</td></tr>
+ <tr><td class="paramname">sFileExtPartOut</td><td>- the returned directory name part out of sCompleteFileNameIn </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a57a9222e5cbb51019d4eeb2c3ac89fa2" name="a57a9222e5cbb51019d4eeb2c3ac89fa2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a57a9222e5cbb51019d4eeb2c3ac89fa2">&#9670;&nbsp;</a></span>GetFileExtPart() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::GetFileExtPart </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFileNameExtOut</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get the extension part of the file name. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFileNameExtOut</td><td>- the returned extension part out of sCompleteFileNameIn </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a02df78f4c90313243f508fc56b95aba8" name="a02df78f4c90313243f508fc56b95aba8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a02df78f4c90313243f508fc56b95aba8">&#9670;&nbsp;</a></span>GetFileMtime()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::GetFileMtime </td>
+ <td>(</td>
+ <td class="paramtype">time_t &amp;&#160;</td>
+ <td class="paramname"><em>mtime</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get the time of last file modification timestamp as reported by the OS. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">mtime</td><td>- returned time of last file modification </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="ac95cb882ccbcdedc9a233c6ad9fed07a" name="ac95cb882ccbcdedc9a233c6ad9fed07a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac95cb882ccbcdedc9a233c6ad9fed07a">&#9670;&nbsp;</a></span>GetFileName()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbFile::GetFileName </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get the file name. </p>
+<dl class="section return"><dt>Returns</dt><dd>the file name portion of the file </dd></dl>
+
+</div>
+</div>
+<a id="a6110763c5ae996b72c7a62c15bdecc73" name="a6110763c5ae996b72c7a62c15bdecc73"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6110763c5ae996b72c7a62c15bdecc73">&#9670;&nbsp;</a></span>GetFileNamePart() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::GetFileNamePart </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sCompleteFileNameIn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFileNamePartOut</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get the name part of the file name. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sCompleteFileNameIn</td><td>- a fully qualified input file name </td></tr>
+ <tr><td class="paramname">sFileNamePartOut</td><td>- the returned file name part out of sCompleteFileNameIn </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a81422b3dd52763d2cc6c77237ec9af0a" name="a81422b3dd52763d2cc6c77237ec9af0a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a81422b3dd52763d2cc6c77237ec9af0a">&#9670;&nbsp;</a></span>GetFileNamePart() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::GetFileNamePart </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFileNamePartOut</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get the name part of the file name. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFileNamePartOut</td><td>- the returned file name part out of sCompleteFileNameIn </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a50b63c39e49d44e52078038027b24cc5" name="a50b63c39e49d44e52078038027b24cc5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a50b63c39e49d44e52078038027b24cc5">&#9670;&nbsp;</a></span>GetFileSize()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::GetFileSize </td>
+ <td>(</td>
+ <td class="paramtype">xbUInt64 &amp;&#160;</td>
+ <td class="paramname"><em>ullFileSize</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get the size of the file as reported by the OS. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ullFileSize</td><td>- unsigned long long field as output </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a5548236d38d43b89ae29b9a015b1f678" name="a5548236d38d43b89ae29b9a015b1f678"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5548236d38d43b89ae29b9a015b1f678">&#9670;&nbsp;</a></span>GetFileType()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::GetFileType </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFileTypeOut</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get the file type aka Capitalized file extension. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFileTypeOut</td><td>- the returned extension part out of sCompleteFileNameIn </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a31b4e641f93206ba23e2a5a27491dcd4" name="a31b4e641f93206ba23e2a5a27491dcd4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a31b4e641f93206ba23e2a5a27491dcd4">&#9670;&nbsp;</a></span>GetFqFileName()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbFile::GetFqFileName </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get the fully qualified file name. </p>
+<dl class="section return"><dt>Returns</dt><dd>the fully qualfied name of the file </dd></dl>
+
+</div>
+</div>
+<a id="abc9c06c95d71fbad8294e1ae8862cea9" name="abc9c06c95d71fbad8294e1ae8862cea9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abc9c06c95d71fbad8294e1ae8862cea9">&#9670;&nbsp;</a></span>GetHomeDir()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::GetHomeDir </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sHomeDirOut</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get home directory. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sHomeDirOut</td><td>- Output home directory for current user. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a4822315bded3969b59aeeb683c373051" name="a4822315bded3969b59aeeb683c373051"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4822315bded3969b59aeeb683c373051">&#9670;&nbsp;</a></span>GetLogDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetLogDirectory </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="afaef09435be73b3111f5edbd7091d861" name="afaef09435be73b3111f5edbd7091d861"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afaef09435be73b3111f5edbd7091d861">&#9670;&nbsp;</a></span>GetLogFileName()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetLogFileName </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abd58031c5f1c3766c24d47a82e6fd9c5" name="abd58031c5f1c3766c24d47a82e6fd9c5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abd58031c5f1c3766c24d47a82e6fd9c5">&#9670;&nbsp;</a></span>GetMultiUser()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbSsv::GetMultiUser </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the multi user setting. </p>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue - Multi user mode turned on.<br />
+ xbFalse - Multi user mode turned off.<br />
+ </dd></dl>
+
+</div>
+</div>
+<a id="a3c500dc9dac22c49496e4b29386b2dd3" name="a3c500dc9dac22c49496e4b29386b2dd3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3c500dc9dac22c49496e4b29386b2dd3">&#9670;&nbsp;</a></span>GetOpenMode()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::GetOpenMode </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get the open mode of the file. </p>
+<dl class="section return"><dt>Returns</dt><dd>XB_READ<br />
+ XB_READ_WRITE<br />
+ XB_WRITE<br />
+ </dd></dl>
+
+</div>
+</div>
+<a id="a63cee13b473ee13970e93b11837b9e35" name="a63cee13b473ee13970e93b11837b9e35"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a63cee13b473ee13970e93b11837b9e35">&#9670;&nbsp;</a></span>GetPathSeparator()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">char xb::xbSsv::GetPathSeparator </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the OS dependent path separator. </p>
+<dl class="section return"><dt>Returns</dt><dd>Returns '\' for windows environment, otherwise returns '/'. </dd></dl>
+
+</div>
+</div>
+<a id="a9b63e05b77f477ff6109ff7b9432c1b6" name="a9b63e05b77f477ff6109ff7b9432c1b6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9b63e05b77f477ff6109ff7b9432c1b6">&#9670;&nbsp;</a></span>GetShareMode()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::GetShareMode </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get the share mode of the file. </p>
+<dl class="section return"><dt>Returns</dt><dd>XB_SINGLE_USER - (file buffering on&gt;<br />
+ XB_MULTI_USER - (file buffering off)<br />
+ </dd></dl>
+
+</div>
+</div>
+<a id="abfaeef85935331073d213465bb362a61" name="abfaeef85935331073d213465bb362a61"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abfaeef85935331073d213465bb362a61">&#9670;&nbsp;</a></span>GetTempDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetTempDirectory </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the current temp directory. </p>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing the current data directory where the database files are stored. </dd></dl>
+
+</div>
+</div>
+<a id="a7af337808919680b90710ad5e8a99232" name="a7af337808919680b90710ad5e8a99232"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7af337808919680b90710ad5e8a99232">&#9670;&nbsp;</a></span>GetXbaseFileTypeByte() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::GetXbaseFileTypeByte </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFileName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned char &amp;&#160;</td>
+ <td class="paramname"><em>cFileTypeByte</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get the file type byte and version of the dbf file. </p>
+<p >Pull the first bye off the DBF file for further inspection. First byte has various bits set to determine what the file format is.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFileName</td><td>- Name of file to examine </td></tr>
+ <tr><td class="paramname">cFileTypeByte</td><td>- Retruned first byte of dbf file </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a78aebdd21d3de46a450d5f835e3027f6" name="a78aebdd21d3de46a450d5f835e3027f6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a78aebdd21d3de46a450d5f835e3027f6">&#9670;&nbsp;</a></span>GetXbaseFileTypeByte() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::GetXbaseFileTypeByte </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFileName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned char &amp;&#160;</td>
+ <td class="paramname"><em>cFileTypeByte</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16 &amp;&#160;</td>
+ <td class="paramname"><em>iVersion</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get the file type byte and version of the dbf file. </p>
+<p >Pull the first bye off the DBF file for further inspection. First byte has various bits set to determine what the file format is.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFileName</td><td>- Name of file to examine </td></tr>
+ <tr><td class="paramname">cFileTypeByte</td><td>- Returned first byte of dbf file </td></tr>
+ <tr><td class="paramname">iVersion</td><td>- Returned file version </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="aaf2e697751a0beff41432a66bb83fb5e" name="aaf2e697751a0beff41432a66bb83fb5e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaf2e697751a0beff41432a66bb83fb5e">&#9670;&nbsp;</a></span>GetXbaseFileTypeByte() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::GetXbaseFileTypeByte </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFileName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16 &amp;&#160;</td>
+ <td class="paramname"><em>iVersion</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get the file type byte and version of the dbf file. </p>
+<p >Pull the first bye off the DBF file for further inspection. First byte has various bits set to determine what the file format is.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFileName</td><td>- Name of file to examine </td></tr>
+ <tr><td class="paramname">iVersion</td><td>- Returned file version </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a361e3cc318bbf1c4d10f069e0800a24e" name="a361e3cc318bbf1c4d10f069e0800a24e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a361e3cc318bbf1c4d10f069e0800a24e">&#9670;&nbsp;</a></span>NameSuffixMissing()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::NameSuffixMissing </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFileName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iOption</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Determines status of file extension. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFileName</td><td>- Name of file to examine </td></tr>
+ <tr><td class="paramname">iOption</td><td>- Inspection type<br />
+ 1 check for DBF<br />
+ 2 check for NDX<br />
+ 3 check for MDX<br />
+ 4 check for NTX<br />
+</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>0 if suffix found<br />
+ 1 if suffix not found, lower case<br />
+ 2 is suffix not found, upper case<br />
+ </dd></dl>
+
+</div>
+</div>
+<a id="aa1bb80340abc7a5c22f87f878e9dc825" name="aa1bb80340abc7a5c22f87f878e9dc825"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa1bb80340abc7a5c22f87f878e9dc825">&#9670;&nbsp;</a></span>ReadBlock() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::ReadBlock </td>
+ <td>(</td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ulBlockNo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>lReadSize</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>buf</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Read a block of data from file. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ulBlockNo</td><td>- block number to read </td></tr>
+ <tr><td class="paramname">lReadSize</td><td>- size of data to read at block location, set to 0 to read blocksize </td></tr>
+ <tr><td class="paramname">*buf</td><td>- pointer to buffer to write output data, assumed to be previosuly allocated and large enough to contain data </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="aef696b1c4c0ef5338e818599f695d485" name="aef696b1c4c0ef5338e818599f695d485"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aef696b1c4c0ef5338e818599f695d485">&#9670;&nbsp;</a></span>ReadBlock() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::ReadBlock </td>
+ <td>(</td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ulBlockNo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ulBlockSize</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>lReadSize</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>buf</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Read a block of data from file. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ulBlockNo</td><td>- block number to read </td></tr>
+ <tr><td class="paramname">ulBlockSize</td><td>- block size </td></tr>
+ <tr><td class="paramname">lReadSize</td><td>- size of data to read at block location, set to 0 to read blocksize </td></tr>
+ <tr><td class="paramname">buf</td><td>- pointer to buffer to write output data, assumed to be previosuly allocated and large enough to contain data </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a991c5676a6f38fa752435390989f413e" name="a991c5676a6f38fa752435390989f413e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a991c5676a6f38fa752435390989f413e">&#9670;&nbsp;</a></span>SetBlockSize()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::SetBlockSize </td>
+ <td>(</td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ulBlockSize</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Set the block size. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ulBlockSize</td><td>- unsigned long block size, divisible by 512 </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a57caaaadfbd089d9a58ecfcb50c88a6c" name="a57caaaadfbd089d9a58ecfcb50c88a6c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a57caaaadfbd089d9a58ecfcb50c88a6c">&#9670;&nbsp;</a></span>SetDataDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetDataDirectory </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sDataDirectory</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Set the data directory. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sDataDirectory</td><td>Set the data directory. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a25542afadaaf39b4fb5a1772a29cc0bd" name="a25542afadaaf39b4fb5a1772a29cc0bd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a25542afadaaf39b4fb5a1772a29cc0bd">&#9670;&nbsp;</a></span>SetDefaultAutoCommit()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetDefaultAutoCommit </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td>
+ <td class="paramname"><em>bDefaultAutoCommit</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Set the default auto commit. </p>
+<p >Disabling auto commit requires the application execute explicit updates using dbf-&gt;Put() and dbf-&gt;AppendRecord(). With auto commit on, the library posts updates automatically when moving off the current record or closing a file.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">bDefaultAutoCommit</td><td>xbTrue - Enable default auto commit.<br />
+ xbFalse - Disable default auto commit.<br />
+ </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a5f74db23f8902846d581935c7db73f9c" name="a5f74db23f8902846d581935c7db73f9c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5f74db23f8902846d581935c7db73f9c">&#9670;&nbsp;</a></span>SetDefaultDateFormat()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetDefaultDateFormat </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sDefaultDateFormat</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Set the default date format. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sDefaultDateFormat</td><td>Set the default date format. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="ae78a85255488bc78964c16946dbaead3" name="ae78a85255488bc78964c16946dbaead3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae78a85255488bc78964c16946dbaead3">&#9670;&nbsp;</a></span>SetDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbFile::SetDirectory </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sDirectory</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Set the directory. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sDirectory</td><td>- Valid directory name </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a904ec348fd029d4a76e72b8fde636108" name="a904ec348fd029d4a76e72b8fde636108"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a904ec348fd029d4a76e72b8fde636108">&#9670;&nbsp;</a></span>SetEndianType()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetEndianType </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Set the endian type. </p>
+<p >This routine determines the Endian-ness at run time instead of compile time as some processers (ie; Sparc,ARM) can be switched either way. This routine is called automatically by the library at startup and does not need to be called in an application program. </p>
+
+</div>
+</div>
+<a id="a5419eb27e56822f828b2b88a9502a636" name="a5419eb27e56822f828b2b88a9502a636"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5419eb27e56822f828b2b88a9502a636">&#9670;&nbsp;</a></span>SetFileName()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbFile::SetFileName </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFileName</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Set the filename. </p>
+<p >This routine builds out two internal variables from the input file name<br />
+ sFileName - the file name part<br />
+ sFqFileName - the fully qualified file name<br />
+</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFileName</td><td>- Input file name </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="aee832fa11db2077a532f49e1329bd05a" name="aee832fa11db2077a532f49e1329bd05a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aee832fa11db2077a532f49e1329bd05a">&#9670;&nbsp;</a></span>SetFqFileName()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbFile::SetFqFileName </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFqFileName</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Set the fully qualifed filename. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFqFileName</td><td>- Fully qualifed input file name </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a060acbfaa8d528f86cb59301814b414a" name="a060acbfaa8d528f86cb59301814b414a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a060acbfaa8d528f86cb59301814b414a">&#9670;&nbsp;</a></span>SetHomeFolders()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::SetHomeFolders </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Set Home Folders. </p>
+<p >Create xbase64 log, data and temp folders in the home directory for current usre.</p>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a7b992ed97281bf25b5b66f5df686225e" name="a7b992ed97281bf25b5b66f5df686225e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7b992ed97281bf25b5b66f5df686225e">&#9670;&nbsp;</a></span>SetLogDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetLogDirectory </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sLogDirectory</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7f05738e7dfd759e89990242ef503544" name="a7f05738e7dfd759e89990242ef503544"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7f05738e7dfd759e89990242ef503544">&#9670;&nbsp;</a></span>SetLogFileName()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetLogFileName </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sLogFileName</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aba6e59512f7172dd55dcf92059e5928c" name="aba6e59512f7172dd55dcf92059e5928c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aba6e59512f7172dd55dcf92059e5928c">&#9670;&nbsp;</a></span>SetMultiUser()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetMultiUser </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td>
+ <td class="paramname"><em>bMultiUser</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the multi user setting. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">bMultiUser</td><td>xbTrue - Turn on Multi user mode.<br />
+ xbFalse - Turn off Multi user mode.<br />
+ </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a17c229a20ef9ab4034df8f9cd657adb2" name="a17c229a20ef9ab4034df8f9cd657adb2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a17c229a20ef9ab4034df8f9cd657adb2">&#9670;&nbsp;</a></span>SetTempDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetTempDirectory </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sTempDirectory</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Set the temp directory. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sTempDirectory</td><td>Set the data direcroty. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a5d871dcfecc2b4338f7a13722aab766c" name="a5d871dcfecc2b4338f7a13722aab766c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5d871dcfecc2b4338f7a13722aab766c">&#9670;&nbsp;</a></span>WriteBlock()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::WriteBlock </td>
+ <td>(</td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ulBlockNo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>lWriteSize</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>buf</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Write a block of data to file. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ulBlockNo</td><td>- block number to write </td></tr>
+ <tr><td class="paramname">lWriteSize</td><td>- size of data to write, set to 0 to write blocksize </td></tr>
+ <tr><td class="paramname">*buf</td><td>- pointer to buffer of data to be written </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a18830b5755d74818f60d9c7ce38ddf2d" name="a18830b5755d74818f60d9c7ce38ddf2d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a18830b5755d74818f60d9c7ce38ddf2d">&#9670;&nbsp;</a></span>xbFclose()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbFclose </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Xbase wrapper for standard libary fclose. </p>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="af5b6356832d2a67212070a1aa605f170" name="af5b6356832d2a67212070a1aa605f170"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af5b6356832d2a67212070a1aa605f170">&#9670;&nbsp;</a></span>xbFeof()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbFeof </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Xbase wrapper for standard libary feof. </p>
+<dl class="section return"><dt>Returns</dt><dd>non zero if end-of-file is set for the stream. </dd></dl>
+
+</div>
+</div>
+<a id="ad205184d43409f04216540ae22f15009" name="ad205184d43409f04216540ae22f15009"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad205184d43409f04216540ae22f15009">&#9670;&nbsp;</a></span>xbFflush()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbFflush </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Xbase wrapper for standard libary fflush. </p>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a5ee229bda4d7d6695e122200e581e7a6" name="a5ee229bda4d7d6695e122200e581e7a6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5ee229bda4d7d6695e122200e581e7a6">&#9670;&nbsp;</a></span>xbFgetc() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbFgetc </td>
+ <td>(</td>
+ <td class="paramtype">char &amp;&#160;</td>
+ <td class="paramname"><em>c</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Xbase wrapper for standard libary fgetc. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>- output character returned by fgetc </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="afb1c584d2895ffb7834df80aea7eb1e4" name="afb1c584d2895ffb7834df80aea7eb1e4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afb1c584d2895ffb7834df80aea7eb1e4">&#9670;&nbsp;</a></span>xbFgetc() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbFgetc </td>
+ <td>(</td>
+ <td class="paramtype">xbInt32 &amp;&#160;</td>
+ <td class="paramname"><em>c</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Xbase wrapper for standard libary fgetc. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>- output integer returned by fgetc </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="ad245955ace26e5dde85fd4373b30d026" name="ad245955ace26e5dde85fd4373b30d026"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad245955ace26e5dde85fd4373b30d026">&#9670;&nbsp;</a></span>xbFgets()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbFgets </td>
+ <td>(</td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>lSize</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>s</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Xbase wrapper for standard libary fgets. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">lSize</td><td>- reads in at most, one character less than lSize </td></tr>
+ <tr><td class="paramname">s</td><td>- an <a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing data returned by fseek </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="ab0fa19686ca8953ff4b556fb5b249135" name="ab0fa19686ca8953ff4b556fb5b249135"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab0fa19686ca8953ff4b556fb5b249135">&#9670;&nbsp;</a></span>xbFopen() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbFopen </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sOpenMode</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFileName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iShareMode</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Xbase wrapper for standard libary fopen. </p>
+<p >This routine supports all the standard C library open modes. The Xbase routines only use "r" and "r+b".</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sOpenMode</td><td><table class="doxtable">
+<tr>
+<th>OpenMode</th><th>Description </th></tr>
+<tr>
+<td>r</td><td>Reading </td></tr>
+<tr>
+<td>r+</td><td>Reading and Writing </td></tr>
+<tr>
+<td>w</td><td>Open for writing. Truncate to zero bytes if it exists </td></tr>
+<tr>
+<td>w+</td><td>Open for reading and writing, truncate to zero bytes if it exists </td></tr>
+<tr>
+<td>a</td><td>Open for append </td></tr>
+<tr>
+<td>a+</td><td>Open for reading and writing (at end). </td></tr>
+</table>
+The mode can also include the letter "b" for binary ie; "r+b". The "b" is ignored on POSIX compliant systems, but is included for cross platform compatibility. </td></tr>
+ <tr><td class="paramname">sFileName</td><td>File name to open </td></tr>
+ <tr><td class="paramname">iShareMode</td><td>XB_SINGLE_USER<br />
+ XB_MULTI_USER<br />
+ </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a0548cedf0f26b7d8ac221f75b0cd048c" name="a0548cedf0f26b7d8ac221f75b0cd048c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0548cedf0f26b7d8ac221f75b0cd048c">&#9670;&nbsp;</a></span>xbFopen() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbFopen </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sOpenMode</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iShareMode</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Xbase wrapper for standard libary fopen. </p>
+<p >This routine supports all the standard C library open modes. The Xbase routines only use "r" and "r+".</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sOpenMode</td><td><table class="doxtable">
+<tr>
+<th>OpenMode</th><th>Description </th></tr>
+<tr>
+<td>r</td><td>Reading </td></tr>
+<tr>
+<td>r+</td><td>Reading and Writing </td></tr>
+<tr>
+<td>w</td><td>Open for writing. Truncate to zero bytes if it exists </td></tr>
+<tr>
+<td>w+</td><td>Open for reading and writing, truncate to zero bytes if it exists </td></tr>
+<tr>
+<td>a</td><td>Open for append </td></tr>
+<tr>
+<td>a+</td><td>Open for reading and writing (at end). </td></tr>
+</table>
+The mode can also include the letter "b" for binary ie; "r+b". The "b" is ignored on POSIX compliant systems, but is included for cross platform compatibility. </td></tr>
+ <tr><td class="paramname">iShareMode</td><td>XB_SINGLE_USER<br />
+ XB_MULTI_USER<br />
+ </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a7cdfef5ede9ac98d44a28a6b7a70972c" name="a7cdfef5ede9ac98d44a28a6b7a70972c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7cdfef5ede9ac98d44a28a6b7a70972c">&#9670;&nbsp;</a></span>xbFopen() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbFopen </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iOpenMode</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aabd113333b49c36cad23244b392baab4" name="aabd113333b49c36cad23244b392baab4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aabd113333b49c36cad23244b392baab4">&#9670;&nbsp;</a></span>xbFopen() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbFopen </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iOpenMode</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iShareMode</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Xbase wrapper for standard libary fopen. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iOpenMode</td><td>XB_READ<br />
+ XB_READ_WRITE<br />
+ </td></tr>
+ <tr><td class="paramname">iShareMode</td><td>XB_SINGLE_USER<br />
+ XB_MULTI_USER<br />
+ </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="af2e940c78956e5cb6824f9a1bc404896" name="af2e940c78956e5cb6824f9a1bc404896"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af2e940c78956e5cb6824f9a1bc404896">&#9670;&nbsp;</a></span>xbFputc() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbFputc </td>
+ <td>(</td>
+ <td class="paramtype">xbInt32&#160;</td>
+ <td class="paramname"><em>c</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Xbase wrapper for standard libary fputc. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>Character to write </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a863f74cf17df8186d88586b4d2a6441a" name="a863f74cf17df8186d88586b4d2a6441a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a863f74cf17df8186d88586b4d2a6441a">&#9670;&nbsp;</a></span>xbFputc() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbFputc </td>
+ <td>(</td>
+ <td class="paramtype">xbInt32&#160;</td>
+ <td class="paramname"><em>c</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt32&#160;</td>
+ <td class="paramname"><em>iNoOfTimes</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Xbase wrapper for standard libary fputc. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>Character to write </td></tr>
+ <tr><td class="paramname">iNoOfTimes</td><td>Number of times to write the character </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a698f3b40216778562e639e6ca1a47573" name="a698f3b40216778562e639e6ca1a47573"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a698f3b40216778562e639e6ca1a47573">&#9670;&nbsp;</a></span>xbFputs()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbFputs </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>s</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Xbase wrapper for standard libary fputs. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">s</td><td><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> to write to file </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="ab4f6afaa1f77539f27a4f05c26e54e2f" name="ab4f6afaa1f77539f27a4f05c26e54e2f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab4f6afaa1f77539f27a4f05c26e54e2f">&#9670;&nbsp;</a></span>xbFread()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbFread </td>
+ <td>(</td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>p</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>size</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>nmemb</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Xbase wrapper for standard libary fread. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">p</td><td>Pointer to data to write </td></tr>
+ <tr><td class="paramname">size</td><td>size of write </td></tr>
+ <tr><td class="paramname">nmemb</td><td>Number of times to read it </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a5337ab8918df240910c0d19b4f298e3d" name="a5337ab8918df240910c0d19b4f298e3d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5337ab8918df240910c0d19b4f298e3d">&#9670;&nbsp;</a></span>xbFseek()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbFseek </td>
+ <td>(</td>
+ <td class="paramtype">xbInt64&#160;</td>
+ <td class="paramname"><em>lOffset</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt32&#160;</td>
+ <td class="paramname"><em>iWhence</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Xbase wrapper for standard libary fseek. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">lOffset</td><td>Position in file to seek to </td></tr>
+ <tr><td class="paramname">iWhence</td><td>SEEK_SET - from beginning of file<br />
+ SEEK_CUR - from current position<br />
+ SEEK_END - from end of file<br />
+ </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a0e1c06aedfa7fbcb92e117f891edd13b" name="a0e1c06aedfa7fbcb92e117f891edd13b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0e1c06aedfa7fbcb92e117f891edd13b">&#9670;&nbsp;</a></span>xbFtell()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">size_t xb::xbFile::xbFtell </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Xbase wrapper for standard libary ftell. </p>
+<p >Returns the current file position. </p><dl class="section return"><dt>Returns</dt><dd>Current file position. </dd></dl>
+
+</div>
+</div>
+<a id="a9891b792f585a696f38a5cf959e30918" name="a9891b792f585a696f38a5cf959e30918"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9891b792f585a696f38a5cf959e30918">&#9670;&nbsp;</a></span>xbFTurnOffFileBuffering()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbFile::xbFTurnOffFileBuffering </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Turn off file buffering. </p>
+<p >Turns off file buffering. File buffering can't be used while in multi user mode. </p>
+
+</div>
+</div>
+<a id="a6aadd871d1782944703fed773d44b85f" name="a6aadd871d1782944703fed773d44b85f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6aadd871d1782944703fed773d44b85f">&#9670;&nbsp;</a></span>xbFwrite()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbFwrite </td>
+ <td>(</td>
+ <td class="paramtype">const void *&#160;</td>
+ <td class="paramname"><em>p</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>size</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>nmemb</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Xbase wrapper for standard libary fwrite. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">p</td><td>Pointer to data buffer to write </td></tr>
+ <tr><td class="paramname">size</td><td>Size of data to write </td></tr>
+ <tr><td class="paramname">nmemb</td><td>Number of times to write data buffer </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a08463f506f425c2385acbe1a561506e9" name="a08463f506f425c2385acbe1a561506e9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a08463f506f425c2385acbe1a561506e9">&#9670;&nbsp;</a></span>xbReadUntil()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbReadUntil </td>
+ <td>(</td>
+ <td class="paramtype">const char&#160;</td>
+ <td class="paramname"><em>cDelim</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sOut</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Read file until a particular character is encountered on input stream. </p>
+<p >This routine will read until cDelim is encountered or eof, which ever occurs first.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">cDelim</td><td>Delimiter to stop writing at. </td></tr>
+ <tr><td class="paramname">sOut</td><td>Output <a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing data read </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="ab3c668a8570433188382d31d7c60bd48" name="ab3c668a8570433188382d31d7c60bd48"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab3c668a8570433188382d31d7c60bd48">&#9670;&nbsp;</a></span>xbRemove() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbRemove </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Delete file. </p>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a58f6a6751fdf7e9549c273bb75d93eb5" name="a58f6a6751fdf7e9549c273bb75d93eb5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a58f6a6751fdf7e9549c273bb75d93eb5">&#9670;&nbsp;</a></span>xbRemove() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbRemove </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFileNameIn</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Delete file. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFileNameIn</td><td>Name of file to delete </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a6d919366c2ec95e529906bf8842cbf07" name="a6d919366c2ec95e529906bf8842cbf07"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6d919366c2ec95e529906bf8842cbf07">&#9670;&nbsp;</a></span>xbRemove() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbRemove </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFileNameIn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iOption</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Delete file. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFileNameIn</td><td>Name of file to delete </td></tr>
+ <tr><td class="paramname">iOption</td><td>If Set to 1, assume this is a delete request for a dbf file, and should rename the dbt file also </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="afc8ce113aa72611a278233f9bb170012" name="afc8ce113aa72611a278233f9bb170012"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afc8ce113aa72611a278233f9bb170012">&#9670;&nbsp;</a></span>xbRename()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbRename </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sOldName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sNewName</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Rename file. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sOldName</td><td>Original file name </td></tr>
+ <tr><td class="paramname">sNewName</td><td>New file name </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="a7996b6e084665c37c3892faea64b3505" name="a7996b6e084665c37c3892faea64b3505"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7996b6e084665c37c3892faea64b3505">&#9670;&nbsp;</a></span>xbRewind()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbFile::xbRewind </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Xbase wrapper for rewind. </p>
+<p >Set file pointer at beginning of file. </p>
+
+</div>
+</div>
+<a id="a518bfcbfa3699d883cf89affee383296" name="a518bfcbfa3699d883cf89affee383296"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a518bfcbfa3699d883cf89affee383296">&#9670;&nbsp;</a></span>xbTruncate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbFile::xbTruncate </td>
+ <td>(</td>
+ <td class="paramtype">xbInt64&#160;</td>
+ <td class="paramname"><em>llSize</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Xbase wrapper for ftruncate. </p>
+<p >Set file size to llSize </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">llSize</td><td>New file size. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<h2 class="groupheader">Field Documentation</h2>
+<a id="a6219f1b5e24ea12fe158cd5aea56988e" name="a6219f1b5e24ea12fe158cd5aea56988e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6219f1b5e24ea12fe158cd5aea56988e">&#9670;&nbsp;</a></span>ErrorCodeText</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* xb::xbSsv::ErrorCodeText[]</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5849e813f5e8e1cd180f0366637adbf3" name="a5849e813f5e8e1cd180f0366637adbf3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5849e813f5e8e1cd180f0366637adbf3">&#9670;&nbsp;</a></span>iEndianType</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbSsv::iEndianType = 0</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">protected</span><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9dec3164c3b264882df634915ecf21da" name="a9dec3164c3b264882df634915ecf21da"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9dec3164c3b264882df634915ecf21da">&#9670;&nbsp;</a></span>sNullString</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> xb::xbSsv::sNullString = &quot;&quot;</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">protected</span><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae39a67ea391b46055d4ca299cb222004" name="ae39a67ea391b46055d4ca299cb222004"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae39a67ea391b46055d4ca299cb222004">&#9670;&nbsp;</a></span>xbase</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbXBase.html">xbXBase</a>* xb::xbFile::xbase</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>/mnt/1Tdata/xbase/xbase64-4.1.4/src/include/<a class="el" href="xbfile_8h_source.html">xbfile.h</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.1.4/src/core/<a class="el" href="xbfile_8cpp.html">xbfile.cpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/docs/doxygen/html/classxb_1_1xbFile.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbFile.png
index cb7b45f..cb7b45f 100644
--- a/docs/doxygen/html/classxb_1_1xbFile.png
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbFile.png
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbSsv.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbSsv.html
new file mode 100644
index 0000000..b04c9b3
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbSsv.html
@@ -0,0 +1,816 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: xb::xbSsv Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="namespacexb.html">xb</a></li><li class="navelem"><a class="el" href="classxb_1_1xbSsv.html">xbSsv</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-static-attribs">Static Public Attributes</a> &#124;
+<a href="#pro-methods">Protected Member Functions</a> &#124;
+<a href="#pro-static-attribs">Static Protected Attributes</a> </div>
+ <div class="headertitle"><div class="title">xb::xbSsv Class Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Class for handling shared system variables.
+ <a href="classxb_1_1xbSsv.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="xbssv_8h_source.html">xbssv.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for xb::xbSsv:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="classxb_1_1xbSsv.png" usemap="#xb::xbSsv_map" alt=""/>
+ <map id="xb::xbSsv_map" name="xb::xbSsv_map">
+<area href="classxb_1_1xbDate.html" title="xbDate class." alt="xb::xbDate" shape="rect" coords="0,56,84,80"/>
+<area href="classxb_1_1xbFile.html" title="Class for handling low level file I/O." alt="xb::xbFile" shape="rect" coords="94,56,178,80"/>
+<area href="classxb_1_1xbTblMgr.html" alt="xb::xbTblMgr" shape="rect" coords="188,56,272,80"/>
+<area href="classxb_1_1xbDbf.html" title="Base class for handling dbf files/tables." alt="xb::xbDbf" shape="rect" coords="94,112,178,136"/>
+<area href="classxb_1_1xbXBase.html" title="xbXbase class." alt="xb::xbXBase" shape="rect" coords="188,112,272,136"/>
+ </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a58f85692c3167af20b1a7c17c621523b"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a58f85692c3167af20b1a7c17c621523b">xbSsv</a> ()</td></tr>
+<tr class="memdesc:a58f85692c3167af20b1a7c17c621523b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Class Constructor. <a href="classxb_1_1xbSsv.html#a58f85692c3167af20b1a7c17c621523b">More...</a><br /></td></tr>
+<tr class="separator:a58f85692c3167af20b1a7c17c621523b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a97dfa59ab9a8e9f17454da0faceb023d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a97dfa59ab9a8e9f17454da0faceb023d">DisplayError</a> (xbInt16 ErrorCode) const</td></tr>
+<tr class="memdesc:a97dfa59ab9a8e9f17454da0faceb023d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Display error message on console for a given error number. <a href="classxb_1_1xbSsv.html#a97dfa59ab9a8e9f17454da0faceb023d">More...</a><br /></td></tr>
+<tr class="separator:a97dfa59ab9a8e9f17454da0faceb023d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6fbb9c3a550ab0b3378f9586a57791d2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a6fbb9c3a550ab0b3378f9586a57791d2">GetDefaultDateFormat</a> () const</td></tr>
+<tr class="memdesc:a6fbb9c3a550ab0b3378f9586a57791d2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the default date format. <a href="classxb_1_1xbSsv.html#a6fbb9c3a550ab0b3378f9586a57791d2">More...</a><br /></td></tr>
+<tr class="separator:a6fbb9c3a550ab0b3378f9586a57791d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">GetDataDirectory</a> () const</td></tr>
+<tr class="memdesc:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current data directory. <a href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">More...</a><br /></td></tr>
+<tr class="separator:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abfaeef85935331073d213465bb362a61"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abfaeef85935331073d213465bb362a61">GetTempDirectory</a> () const</td></tr>
+<tr class="memdesc:abfaeef85935331073d213465bb362a61"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current temp directory. <a href="classxb_1_1xbSsv.html#abfaeef85935331073d213465bb362a61">More...</a><br /></td></tr>
+<tr class="separator:abfaeef85935331073d213465bb362a61"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">GetHomeDir</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sHomeDirOut)</td></tr>
+<tr class="memdesc:abc9c06c95d71fbad8294e1ae8862cea9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get home directory. <a href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">More...</a><br /></td></tr>
+<tr class="separator:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a49cd162f066eef2b829ba7c9f6620243"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">GetEndianType</a> () const</td></tr>
+<tr class="memdesc:a49cd162f066eef2b829ba7c9f6620243"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the Endian type. <a href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">More...</a><br /></td></tr>
+<tr class="separator:a49cd162f066eef2b829ba7c9f6620243"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a56961d2a67b8e7470098626ac4dac7e4"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">GetErrorMessage</a> (xbInt16 ErrorCode) const</td></tr>
+<tr class="memdesc:a56961d2a67b8e7470098626ac4dac7e4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get an error message. <a href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">More...</a><br /></td></tr>
+<tr class="separator:a56961d2a67b8e7470098626ac4dac7e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a63cee13b473ee13970e93b11837b9e35"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a63cee13b473ee13970e93b11837b9e35">GetPathSeparator</a> () const</td></tr>
+<tr class="memdesc:a63cee13b473ee13970e93b11837b9e35"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the OS dependent path separator. <a href="classxb_1_1xbSsv.html#a63cee13b473ee13970e93b11837b9e35">More...</a><br /></td></tr>
+<tr class="separator:a63cee13b473ee13970e93b11837b9e35"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">SetDataDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDataDirectory)</td></tr>
+<tr class="memdesc:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the data directory. <a href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">More...</a><br /></td></tr>
+<tr class="separator:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5f74db23f8902846d581935c7db73f9c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">SetDefaultDateFormat</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDefaultDateFormat)</td></tr>
+<tr class="memdesc:a5f74db23f8902846d581935c7db73f9c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the default date format. <a href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">More...</a><br /></td></tr>
+<tr class="separator:a5f74db23f8902846d581935c7db73f9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a17c229a20ef9ab4034df8f9cd657adb2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a17c229a20ef9ab4034df8f9cd657adb2">SetTempDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTempDirectory)</td></tr>
+<tr class="memdesc:a17c229a20ef9ab4034df8f9cd657adb2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the temp directory. <a href="classxb_1_1xbSsv.html#a17c229a20ef9ab4034df8f9cd657adb2">More...</a><br /></td></tr>
+<tr class="separator:a17c229a20ef9ab4034df8f9cd657adb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a62e4fd0a5888665c76bbbad962794e72"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72">BitSet</a> (unsigned char c, xbInt16 iBitNo) const</td></tr>
+<tr class="memdesc:a62e4fd0a5888665c76bbbad962794e72"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check a bit in a one byte field and see if it is set. <a href="classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72">More...</a><br /></td></tr>
+<tr class="separator:a62e4fd0a5888665c76bbbad962794e72"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8551b15a3ce4fa2a40d698db01f4a9ae"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a8551b15a3ce4fa2a40d698db01f4a9ae">BitDump</a> (unsigned char c) const</td></tr>
+<tr class="separator:a8551b15a3ce4fa2a40d698db01f4a9ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aba1395b8e4c7f28c3614061de6e49190"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#aba1395b8e4c7f28c3614061de6e49190">BitDump</a> (char c) const</td></tr>
+<tr class="separator:aba1395b8e4c7f28c3614061de6e49190"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6982f973e81587b04916f4509746aaf5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a6982f973e81587b04916f4509746aaf5">GetDefaultAutoCommit</a> () const</td></tr>
+<tr class="memdesc:a6982f973e81587b04916f4509746aaf5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the default auto commit setting. <a href="classxb_1_1xbSsv.html#a6982f973e81587b04916f4509746aaf5">More...</a><br /></td></tr>
+<tr class="separator:a6982f973e81587b04916f4509746aaf5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">SetDefaultAutoCommit</a> (<a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bDefaultAutoCommit)</td></tr>
+<tr class="memdesc:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the default auto commit. <a href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">More...</a><br /></td></tr>
+<tr class="separator:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4822315bded3969b59aeeb683c373051"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a4822315bded3969b59aeeb683c373051">GetLogDirectory</a> () const</td></tr>
+<tr class="separator:a4822315bded3969b59aeeb683c373051"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afaef09435be73b3111f5edbd7091d861"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#afaef09435be73b3111f5edbd7091d861">GetLogFileName</a> () const</td></tr>
+<tr class="separator:afaef09435be73b3111f5edbd7091d861"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7b992ed97281bf25b5b66f5df686225e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a7b992ed97281bf25b5b66f5df686225e">SetLogDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLogDirectory)</td></tr>
+<tr class="separator:a7b992ed97281bf25b5b66f5df686225e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7f05738e7dfd759e89990242ef503544"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a7f05738e7dfd759e89990242ef503544">SetLogFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLogFileName)</td></tr>
+<tr class="separator:a7f05738e7dfd759e89990242ef503544"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">GetMultiUser</a> () const</td></tr>
+<tr class="memdesc:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the multi user setting. <a href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">More...</a><br /></td></tr>
+<tr class="separator:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aba6e59512f7172dd55dcf92059e5928c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#aba6e59512f7172dd55dcf92059e5928c">SetMultiUser</a> (<a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bMultiUser)</td></tr>
+<tr class="memdesc:aba6e59512f7172dd55dcf92059e5928c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the multi user setting. <a href="classxb_1_1xbSsv.html#aba6e59512f7172dd55dcf92059e5928c">More...</a><br /></td></tr>
+<tr class="separator:aba6e59512f7172dd55dcf92059e5928c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-static-attribs" name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:a6219f1b5e24ea12fe158cd5aea56988e"><td class="memItemLeft" align="right" valign="top">static const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a6219f1b5e24ea12fe158cd5aea56988e">ErrorCodeText</a> []</td></tr>
+<tr class="separator:a6219f1b5e24ea12fe158cd5aea56988e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-methods" name="pro-methods"></a>
+Protected Member Functions</h2></td></tr>
+<tr class="memitem:a904ec348fd029d4a76e72b8fde636108"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a904ec348fd029d4a76e72b8fde636108">SetEndianType</a> ()</td></tr>
+<tr class="memdesc:a904ec348fd029d4a76e72b8fde636108"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the endian type. <a href="classxb_1_1xbSsv.html#a904ec348fd029d4a76e72b8fde636108">More...</a><br /></td></tr>
+<tr class="separator:a904ec348fd029d4a76e72b8fde636108"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-static-attribs" name="pro-static-attribs"></a>
+Static Protected Attributes</h2></td></tr>
+<tr class="memitem:a5849e813f5e8e1cd180f0366637adbf3"><td class="memItemLeft" align="right" valign="top">static xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a5849e813f5e8e1cd180f0366637adbf3">iEndianType</a> = 0</td></tr>
+<tr class="separator:a5849e813f5e8e1cd180f0366637adbf3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9dec3164c3b264882df634915ecf21da"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classxb_1_1xbString.html">xbString</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a9dec3164c3b264882df634915ecf21da">sNullString</a> = &quot;&quot;</td></tr>
+<tr class="separator:a9dec3164c3b264882df634915ecf21da"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p >Class for handling shared system variables. </p>
+<p >This class defines static variables which are referenced across class instances.</p>
+<p >This class is designed to have the variables set when the <a class="el" href="classxb_1_1xbXBase.html" title="xbXbase class.">xbXBase</a> class constructor is called (<a class="el" href="classxb_1_1xbXBase.html" title="xbXbase class.">xbXBase</a> is a derived class). The xbXbase class is designed to be called first in an application programs, and it is only called once. The static values in this class are typically initialized at program startup and don't require additional updates. </p>
+</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="a58f85692c3167af20b1a7c17c621523b" name="a58f85692c3167af20b1a7c17c621523b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a58f85692c3167af20b1a7c17c621523b">&#9670;&nbsp;</a></span>xbSsv()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xb::xbSsv::xbSsv </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Class Constructor. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="aba1395b8e4c7f28c3614061de6e49190" name="aba1395b8e4c7f28c3614061de6e49190"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aba1395b8e4c7f28c3614061de6e49190">&#9670;&nbsp;</a></span>BitDump() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::BitDump </td>
+ <td>(</td>
+ <td class="paramtype">char&#160;</td>
+ <td class="paramname"><em>c</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8551b15a3ce4fa2a40d698db01f4a9ae" name="a8551b15a3ce4fa2a40d698db01f4a9ae"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8551b15a3ce4fa2a40d698db01f4a9ae">&#9670;&nbsp;</a></span>BitDump() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::BitDump </td>
+ <td>(</td>
+ <td class="paramtype">unsigned char&#160;</td>
+ <td class="paramname"><em>c</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a62e4fd0a5888665c76bbbad962794e72" name="a62e4fd0a5888665c76bbbad962794e72"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a62e4fd0a5888665c76bbbad962794e72">&#9670;&nbsp;</a></span>BitSet()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbSsv::BitSet </td>
+ <td>(</td>
+ <td class="paramtype">unsigned char&#160;</td>
+ <td class="paramname"><em>c</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iBitNo</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Check a bit in a one byte field and see if it is set. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>One byte char field to examine. </td></tr>
+ <tr><td class="paramname">iBitNo</td><td>which bit to examine. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue Bit is set<br />
+ xbFalse Bit is not set </dd></dl>
+
+</div>
+</div>
+<a id="a97dfa59ab9a8e9f17454da0faceb023d" name="a97dfa59ab9a8e9f17454da0faceb023d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a97dfa59ab9a8e9f17454da0faceb023d">&#9670;&nbsp;</a></span>DisplayError()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::DisplayError </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iErrorCode</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Display error message on console for a given error number. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iErrorCode</td><td>Error number to reference </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a1d803a4bfc8ba0561267a0bf9e51f7d9" name="a1d803a4bfc8ba0561267a0bf9e51f7d9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1d803a4bfc8ba0561267a0bf9e51f7d9">&#9670;&nbsp;</a></span>GetDataDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetDataDirectory </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get the current data directory. </p>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing the current data directory where the database files are stored. </dd></dl>
+
+</div>
+</div>
+<a id="a6982f973e81587b04916f4509746aaf5" name="a6982f973e81587b04916f4509746aaf5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6982f973e81587b04916f4509746aaf5">&#9670;&nbsp;</a></span>GetDefaultAutoCommit()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbSsv::GetDefaultAutoCommit </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get the default auto commit setting. </p>
+<p >When auto commit is enabled, the library will automatically post any updates when moving off an updated record or closing files. If auto commit is disabled, the application program will need to explicitly update the tables using using dbf-&gt;Put() and dbf-&gt;AppendRecord().</p>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue if auto commit is turned on<br />
+ xbFalse is auto commit is turned off </dd></dl>
+
+</div>
+</div>
+<a id="a6fbb9c3a550ab0b3378f9586a57791d2" name="a6fbb9c3a550ab0b3378f9586a57791d2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6fbb9c3a550ab0b3378f9586a57791d2">&#9670;&nbsp;</a></span>GetDefaultDateFormat()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetDefaultDateFormat </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get the default date format. </p>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing the default date format. </dd></dl>
+
+</div>
+</div>
+<a id="a49cd162f066eef2b829ba7c9f6620243" name="a49cd162f066eef2b829ba7c9f6620243"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a49cd162f066eef2b829ba7c9f6620243">&#9670;&nbsp;</a></span>GetEndianType()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbSsv::GetEndianType </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get the Endian type. </p>
+<dl class="section return"><dt>Returns</dt><dd>B - Big endian<br />
+ L - Little endian<br />
+ </dd></dl>
+
+</div>
+</div>
+<a id="a56961d2a67b8e7470098626ac4dac7e4" name="a56961d2a67b8e7470098626ac4dac7e4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a56961d2a67b8e7470098626ac4dac7e4">&#9670;&nbsp;</a></span>GetErrorMessage()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char * xb::xbSsv::GetErrorMessage </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iErrorCode</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get an error message. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iErrorCode</td><td>ErrorCode is the error number of description to be returned. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Returns a pointer to a string containing a text description for the error code. </dd></dl>
+
+</div>
+</div>
+<a id="abc9c06c95d71fbad8294e1ae8862cea9" name="abc9c06c95d71fbad8294e1ae8862cea9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abc9c06c95d71fbad8294e1ae8862cea9">&#9670;&nbsp;</a></span>GetHomeDir()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::GetHomeDir </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sHomeDirOut</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get home directory. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sHomeDirOut</td><td>- Output home directory for current user. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a4822315bded3969b59aeeb683c373051" name="a4822315bded3969b59aeeb683c373051"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4822315bded3969b59aeeb683c373051">&#9670;&nbsp;</a></span>GetLogDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetLogDirectory </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="afaef09435be73b3111f5edbd7091d861" name="afaef09435be73b3111f5edbd7091d861"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afaef09435be73b3111f5edbd7091d861">&#9670;&nbsp;</a></span>GetLogFileName()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetLogFileName </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abd58031c5f1c3766c24d47a82e6fd9c5" name="abd58031c5f1c3766c24d47a82e6fd9c5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abd58031c5f1c3766c24d47a82e6fd9c5">&#9670;&nbsp;</a></span>GetMultiUser()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbSsv::GetMultiUser </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get the multi user setting. </p>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue - Multi user mode turned on.<br />
+ xbFalse - Multi user mode turned off.<br />
+ </dd></dl>
+
+</div>
+</div>
+<a id="a63cee13b473ee13970e93b11837b9e35" name="a63cee13b473ee13970e93b11837b9e35"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a63cee13b473ee13970e93b11837b9e35">&#9670;&nbsp;</a></span>GetPathSeparator()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char xb::xbSsv::GetPathSeparator </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get the OS dependent path separator. </p>
+<dl class="section return"><dt>Returns</dt><dd>Returns '\' for windows environment, otherwise returns '/'. </dd></dl>
+
+</div>
+</div>
+<a id="abfaeef85935331073d213465bb362a61" name="abfaeef85935331073d213465bb362a61"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abfaeef85935331073d213465bb362a61">&#9670;&nbsp;</a></span>GetTempDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetTempDirectory </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get the current temp directory. </p>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing the current data directory where the database files are stored. </dd></dl>
+
+</div>
+</div>
+<a id="a57caaaadfbd089d9a58ecfcb50c88a6c" name="a57caaaadfbd089d9a58ecfcb50c88a6c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a57caaaadfbd089d9a58ecfcb50c88a6c">&#9670;&nbsp;</a></span>SetDataDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetDataDirectory </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sDataDirectory</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Set the data directory. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sDataDirectory</td><td>Set the data directory. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a25542afadaaf39b4fb5a1772a29cc0bd" name="a25542afadaaf39b4fb5a1772a29cc0bd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a25542afadaaf39b4fb5a1772a29cc0bd">&#9670;&nbsp;</a></span>SetDefaultAutoCommit()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetDefaultAutoCommit </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td>
+ <td class="paramname"><em>bDefaultAutoCommit</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Set the default auto commit. </p>
+<p >Disabling auto commit requires the application execute explicit updates using dbf-&gt;Put() and dbf-&gt;AppendRecord(). With auto commit on, the library posts updates automatically when moving off the current record or closing a file.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">bDefaultAutoCommit</td><td>xbTrue - Enable default auto commit.<br />
+ xbFalse - Disable default auto commit.<br />
+ </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a5f74db23f8902846d581935c7db73f9c" name="a5f74db23f8902846d581935c7db73f9c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5f74db23f8902846d581935c7db73f9c">&#9670;&nbsp;</a></span>SetDefaultDateFormat()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetDefaultDateFormat </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sDefaultDateFormat</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Set the default date format. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sDefaultDateFormat</td><td>Set the default date format. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a904ec348fd029d4a76e72b8fde636108" name="a904ec348fd029d4a76e72b8fde636108"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a904ec348fd029d4a76e72b8fde636108">&#9670;&nbsp;</a></span>SetEndianType()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetEndianType </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Set the endian type. </p>
+<p >This routine determines the Endian-ness at run time instead of compile time as some processers (ie; Sparc,ARM) can be switched either way. This routine is called automatically by the library at startup and does not need to be called in an application program. </p>
+
+</div>
+</div>
+<a id="a7b992ed97281bf25b5b66f5df686225e" name="a7b992ed97281bf25b5b66f5df686225e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7b992ed97281bf25b5b66f5df686225e">&#9670;&nbsp;</a></span>SetLogDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetLogDirectory </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sLogDirectory</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7f05738e7dfd759e89990242ef503544" name="a7f05738e7dfd759e89990242ef503544"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7f05738e7dfd759e89990242ef503544">&#9670;&nbsp;</a></span>SetLogFileName()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetLogFileName </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sLogFileName</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aba6e59512f7172dd55dcf92059e5928c" name="aba6e59512f7172dd55dcf92059e5928c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aba6e59512f7172dd55dcf92059e5928c">&#9670;&nbsp;</a></span>SetMultiUser()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetMultiUser </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td>
+ <td class="paramname"><em>bMultiUser</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get the multi user setting. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">bMultiUser</td><td>xbTrue - Turn on Multi user mode.<br />
+ xbFalse - Turn off Multi user mode.<br />
+ </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a17c229a20ef9ab4034df8f9cd657adb2" name="a17c229a20ef9ab4034df8f9cd657adb2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a17c229a20ef9ab4034df8f9cd657adb2">&#9670;&nbsp;</a></span>SetTempDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetTempDirectory </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sTempDirectory</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Set the temp directory. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sTempDirectory</td><td>Set the data direcroty. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<h2 class="groupheader">Field Documentation</h2>
+<a id="a6219f1b5e24ea12fe158cd5aea56988e" name="a6219f1b5e24ea12fe158cd5aea56988e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6219f1b5e24ea12fe158cd5aea56988e">&#9670;&nbsp;</a></span>ErrorCodeText</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* xb::xbSsv::ErrorCodeText[]</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5849e813f5e8e1cd180f0366637adbf3" name="a5849e813f5e8e1cd180f0366637adbf3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5849e813f5e8e1cd180f0366637adbf3">&#9670;&nbsp;</a></span>iEndianType</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbSsv::iEndianType = 0</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">protected</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9dec3164c3b264882df634915ecf21da" name="a9dec3164c3b264882df634915ecf21da"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9dec3164c3b264882df634915ecf21da">&#9670;&nbsp;</a></span>sNullString</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> xb::xbSsv::sNullString = &quot;&quot;</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">protected</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>/mnt/1Tdata/xbase/xbase64-4.1.4/src/include/<a class="el" href="xbssv_8h_source.html">xbssv.h</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.1.4/src/core/<a class="el" href="xbssv_8cpp.html">xbssv.cpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/docs/doxygen/html/classxb_1_1xbSsv.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbSsv.png
index bdbc1de..bdbc1de 100644
--- a/docs/doxygen/html/classxb_1_1xbSsv.png
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbSsv.png
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbString.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbString.html
new file mode 100644
index 0000000..f88a2fe
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbString.html
@@ -0,0 +1,2945 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: xb::xbString Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="namespacexb.html">xb</a></li><li class="navelem"><a class="el" href="classxb_1_1xbString.html">xbString</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#friends">Friends</a> </div>
+ <div class="headertitle"><div class="title">xb::xbString Class Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Class for handling string data.
+ <a href="classxb_1_1xbString.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="xbstring_8h_source.html">xbstring.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a63f9313217e0ff3c9789ec59316216a1"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a63f9313217e0ff3c9789ec59316216a1">xbString</a> (xbUInt32 size)</td></tr>
+<tr class="memdesc:a63f9313217e0ff3c9789ec59316216a1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor. <a href="classxb_1_1xbString.html#a63f9313217e0ff3c9789ec59316216a1">More...</a><br /></td></tr>
+<tr class="separator:a63f9313217e0ff3c9789ec59316216a1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a14bbaa293c8d40dd6c64332f2668a92e"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a14bbaa293c8d40dd6c64332f2668a92e">xbString</a> (char c)</td></tr>
+<tr class="memdesc:a14bbaa293c8d40dd6c64332f2668a92e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor. <a href="classxb_1_1xbString.html#a14bbaa293c8d40dd6c64332f2668a92e">More...</a><br /></td></tr>
+<tr class="separator:a14bbaa293c8d40dd6c64332f2668a92e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a18f3598dcdf2ec5692274fc8ee769ad7"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a18f3598dcdf2ec5692274fc8ee769ad7">xbString</a> (const char *s, xbUInt32 lMaxLen)</td></tr>
+<tr class="memdesc:a18f3598dcdf2ec5692274fc8ee769ad7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor. <a href="classxb_1_1xbString.html#a18f3598dcdf2ec5692274fc8ee769ad7">More...</a><br /></td></tr>
+<tr class="separator:a18f3598dcdf2ec5692274fc8ee769ad7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0d81016b93fc36ebbbafacf35c677f07"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a0d81016b93fc36ebbbafacf35c677f07">xbString</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;s)</td></tr>
+<tr class="memdesc:a0d81016b93fc36ebbbafacf35c677f07"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor. <a href="classxb_1_1xbString.html#a0d81016b93fc36ebbbafacf35c677f07">More...</a><br /></td></tr>
+<tr class="separator:a0d81016b93fc36ebbbafacf35c677f07"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a25856311106c5fb15d39017b63f0ddc7"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a25856311106c5fb15d39017b63f0ddc7">xbString</a> (const char *=&quot;&quot;)</td></tr>
+<tr class="memdesc:a25856311106c5fb15d39017b63f0ddc7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor. <a href="classxb_1_1xbString.html#a25856311106c5fb15d39017b63f0ddc7">More...</a><br /></td></tr>
+<tr class="separator:a25856311106c5fb15d39017b63f0ddc7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad865b55e3b08dffd527afee8e7e8e3fe"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#ad865b55e3b08dffd527afee8e7e8e3fe">xbString</a> (<a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> d)</td></tr>
+<tr class="memdesc:ad865b55e3b08dffd527afee8e7e8e3fe"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor. <a href="classxb_1_1xbString.html#ad865b55e3b08dffd527afee8e7e8e3fe">More...</a><br /></td></tr>
+<tr class="separator:ad865b55e3b08dffd527afee8e7e8e3fe"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a10a6549efab02bc76ab33b15916b1eb1"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a10a6549efab02bc76ab33b15916b1eb1">~xbString</a> ()</td></tr>
+<tr class="memdesc:a10a6549efab02bc76ab33b15916b1eb1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destructor. <a href="classxb_1_1xbString.html#a10a6549efab02bc76ab33b15916b1eb1">More...</a><br /></td></tr>
+<tr class="separator:a10a6549efab02bc76ab33b15916b1eb1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4f69d11cbd43edf71725a606d0ca8f40"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a4f69d11cbd43edf71725a606d0ca8f40">operator=</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;s)</td></tr>
+<tr class="memdesc:a4f69d11cbd43edf71725a606d0ca8f40"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set operator =. <a href="classxb_1_1xbString.html#a4f69d11cbd43edf71725a606d0ca8f40">More...</a><br /></td></tr>
+<tr class="separator:a4f69d11cbd43edf71725a606d0ca8f40"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a84ae7d16c5d73c5aa2270aa9895a7f7c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a84ae7d16c5d73c5aa2270aa9895a7f7c">operator=</a> (const char *s)</td></tr>
+<tr class="memdesc:a84ae7d16c5d73c5aa2270aa9895a7f7c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set operator =. <a href="classxb_1_1xbString.html#a84ae7d16c5d73c5aa2270aa9895a7f7c">More...</a><br /></td></tr>
+<tr class="separator:a84ae7d16c5d73c5aa2270aa9895a7f7c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a545df0ae9590f0ea5844a165e38a6388"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a545df0ae9590f0ea5844a165e38a6388">operator const char *</a> () const</td></tr>
+<tr class="memdesc:a545df0ae9590f0ea5844a165e38a6388"><td class="mdescLeft">&#160;</td><td class="mdescRight">Operator const char *. <a href="classxb_1_1xbString.html#a545df0ae9590f0ea5844a165e38a6388">More...</a><br /></td></tr>
+<tr class="separator:a545df0ae9590f0ea5844a165e38a6388"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abe45e463226ac8e18550ced18c5a9df3"><td class="memItemLeft" align="right" valign="top">char &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#abe45e463226ac8e18550ced18c5a9df3">operator[]</a> (xbUInt32 n) const</td></tr>
+<tr class="memdesc:abe45e463226ac8e18550ced18c5a9df3"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator [] <a href="classxb_1_1xbString.html#abe45e463226ac8e18550ced18c5a9df3">More...</a><br /></td></tr>
+<tr class="separator:abe45e463226ac8e18550ced18c5a9df3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4deaa68d9571753349c29baacb5613e8"><td class="memItemLeft" align="right" valign="top">char &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a4deaa68d9571753349c29baacb5613e8">operator[]</a> (xbInt32 n) const</td></tr>
+<tr class="memdesc:a4deaa68d9571753349c29baacb5613e8"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator [] <a href="classxb_1_1xbString.html#a4deaa68d9571753349c29baacb5613e8">More...</a><br /></td></tr>
+<tr class="separator:a4deaa68d9571753349c29baacb5613e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a76a47af239797a266ada6141c150001c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a76a47af239797a266ada6141c150001c">operator+=</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;s)</td></tr>
+<tr class="memdesc:a76a47af239797a266ada6141c150001c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Append operator +=. <a href="classxb_1_1xbString.html#a76a47af239797a266ada6141c150001c">More...</a><br /></td></tr>
+<tr class="separator:a76a47af239797a266ada6141c150001c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab319120dbad9107e1e7090139c956100"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#ab319120dbad9107e1e7090139c956100">operator+=</a> (const char *s)</td></tr>
+<tr class="memdesc:ab319120dbad9107e1e7090139c956100"><td class="mdescLeft">&#160;</td><td class="mdescRight">Append operator +=. <a href="classxb_1_1xbString.html#ab319120dbad9107e1e7090139c956100">More...</a><br /></td></tr>
+<tr class="separator:ab319120dbad9107e1e7090139c956100"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae12f45b8be84e438e032c0b860f985c6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#ae12f45b8be84e438e032c0b860f985c6">operator+=</a> (char c)</td></tr>
+<tr class="memdesc:ae12f45b8be84e438e032c0b860f985c6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Append operator +=. <a href="classxb_1_1xbString.html#ae12f45b8be84e438e032c0b860f985c6">More...</a><br /></td></tr>
+<tr class="separator:ae12f45b8be84e438e032c0b860f985c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa7f4db1b4eae9dfad46346db6e17ea15"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#aa7f4db1b4eae9dfad46346db6e17ea15">operator-=</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;s)</td></tr>
+<tr class="memdesc:aa7f4db1b4eae9dfad46346db6e17ea15"><td class="mdescLeft">&#160;</td><td class="mdescRight">Append operator -=. <a href="classxb_1_1xbString.html#aa7f4db1b4eae9dfad46346db6e17ea15">More...</a><br /></td></tr>
+<tr class="separator:aa7f4db1b4eae9dfad46346db6e17ea15"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaae97e6eda3d18c9f463993ade985bf4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#aaae97e6eda3d18c9f463993ade985bf4">operator-=</a> (const char *s)</td></tr>
+<tr class="memdesc:aaae97e6eda3d18c9f463993ade985bf4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Append operator -=. <a href="classxb_1_1xbString.html#aaae97e6eda3d18c9f463993ade985bf4">More...</a><br /></td></tr>
+<tr class="separator:aaae97e6eda3d18c9f463993ade985bf4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adcafd019df23bb5724c46e34f3f31194"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#adcafd019df23bb5724c46e34f3f31194">operator-=</a> (char c)</td></tr>
+<tr class="memdesc:adcafd019df23bb5724c46e34f3f31194"><td class="mdescLeft">&#160;</td><td class="mdescRight">Append operator -=. <a href="classxb_1_1xbString.html#adcafd019df23bb5724c46e34f3f31194">More...</a><br /></td></tr>
+<tr class="separator:adcafd019df23bb5724c46e34f3f31194"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2df3ed2fc9456214f5fd2fcf77b69bc1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a2df3ed2fc9456214f5fd2fcf77b69bc1">operator==</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;) const</td></tr>
+<tr class="memdesc:a2df3ed2fc9456214f5fd2fcf77b69bc1"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator == <a href="classxb_1_1xbString.html#a2df3ed2fc9456214f5fd2fcf77b69bc1">More...</a><br /></td></tr>
+<tr class="separator:a2df3ed2fc9456214f5fd2fcf77b69bc1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a94031269af3c433393d4cf0ff9b4be38"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a94031269af3c433393d4cf0ff9b4be38">operator==</a> (const char *) const</td></tr>
+<tr class="memdesc:a94031269af3c433393d4cf0ff9b4be38"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator == <a href="classxb_1_1xbString.html#a94031269af3c433393d4cf0ff9b4be38">More...</a><br /></td></tr>
+<tr class="separator:a94031269af3c433393d4cf0ff9b4be38"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acf89691607050b0505dc6af28d059c38"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#acf89691607050b0505dc6af28d059c38">operator!=</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;) const</td></tr>
+<tr class="memdesc:acf89691607050b0505dc6af28d059c38"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator != <a href="classxb_1_1xbString.html#acf89691607050b0505dc6af28d059c38">More...</a><br /></td></tr>
+<tr class="separator:acf89691607050b0505dc6af28d059c38"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a822448f2a0ce653473d4c1de5763a3a6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a822448f2a0ce653473d4c1de5763a3a6">operator!=</a> (const char *) const</td></tr>
+<tr class="memdesc:a822448f2a0ce653473d4c1de5763a3a6"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator != <a href="classxb_1_1xbString.html#a822448f2a0ce653473d4c1de5763a3a6">More...</a><br /></td></tr>
+<tr class="separator:a822448f2a0ce653473d4c1de5763a3a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a71c7aafa0d523c72cbe58c474be2270a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a71c7aafa0d523c72cbe58c474be2270a">operator&lt;</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;) const</td></tr>
+<tr class="memdesc:a71c7aafa0d523c72cbe58c474be2270a"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator &lt; <a href="classxb_1_1xbString.html#a71c7aafa0d523c72cbe58c474be2270a">More...</a><br /></td></tr>
+<tr class="separator:a71c7aafa0d523c72cbe58c474be2270a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae46f6a45da5686b607a4edf2786a2fff"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#ae46f6a45da5686b607a4edf2786a2fff">operator&gt;</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;) const</td></tr>
+<tr class="memdesc:ae46f6a45da5686b607a4edf2786a2fff"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator &gt; <a href="classxb_1_1xbString.html#ae46f6a45da5686b607a4edf2786a2fff">More...</a><br /></td></tr>
+<tr class="separator:ae46f6a45da5686b607a4edf2786a2fff"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a461f245e60cddfdf5f78a972a46e5880"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a461f245e60cddfdf5f78a972a46e5880">operator&lt;=</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;) const</td></tr>
+<tr class="memdesc:a461f245e60cddfdf5f78a972a46e5880"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator &lt;= <a href="classxb_1_1xbString.html#a461f245e60cddfdf5f78a972a46e5880">More...</a><br /></td></tr>
+<tr class="separator:a461f245e60cddfdf5f78a972a46e5880"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8f16643cb7ba3ee9cf685422c9ea0e67"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a8f16643cb7ba3ee9cf685422c9ea0e67">operator&gt;=</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;) const</td></tr>
+<tr class="memdesc:a8f16643cb7ba3ee9cf685422c9ea0e67"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator &gt;= <a href="classxb_1_1xbString.html#a8f16643cb7ba3ee9cf685422c9ea0e67">More...</a><br /></td></tr>
+<tr class="separator:a8f16643cb7ba3ee9cf685422c9ea0e67"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a06abec236b95f6933ba17bf67089f7cf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a06abec236b95f6933ba17bf67089f7cf">operator-</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;s)</td></tr>
+<tr class="memdesc:a06abec236b95f6933ba17bf67089f7cf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Concatonate operator -. <a href="classxb_1_1xbString.html#a06abec236b95f6933ba17bf67089f7cf">More...</a><br /></td></tr>
+<tr class="separator:a06abec236b95f6933ba17bf67089f7cf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aab556e8c3cb478dd95643327d72a48bd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#aab556e8c3cb478dd95643327d72a48bd">operator+</a> (const char *s)</td></tr>
+<tr class="memdesc:aab556e8c3cb478dd95643327d72a48bd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Concatonate operator +. <a href="classxb_1_1xbString.html#aab556e8c3cb478dd95643327d72a48bd">More...</a><br /></td></tr>
+<tr class="separator:aab556e8c3cb478dd95643327d72a48bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1f289d577ba90c500bc1be3ec7bb0206"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a1f289d577ba90c500bc1be3ec7bb0206">operator+</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;s)</td></tr>
+<tr class="memdesc:a1f289d577ba90c500bc1be3ec7bb0206"><td class="mdescLeft">&#160;</td><td class="mdescRight">Concatonate operator +. <a href="classxb_1_1xbString.html#a1f289d577ba90c500bc1be3ec7bb0206">More...</a><br /></td></tr>
+<tr class="separator:a1f289d577ba90c500bc1be3ec7bb0206"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af559654baba81c3c0c19823c0b7a69d3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#af559654baba81c3c0c19823c0b7a69d3">operator+</a> (const char c)</td></tr>
+<tr class="memdesc:af559654baba81c3c0c19823c0b7a69d3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Concatonate operator +. <a href="classxb_1_1xbString.html#af559654baba81c3c0c19823c0b7a69d3">More...</a><br /></td></tr>
+<tr class="separator:af559654baba81c3c0c19823c0b7a69d3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6c4fdb689d27a9d19a0b5b4236e1ca62"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a6c4fdb689d27a9d19a0b5b4236e1ca62">AddBackSlash</a> (char c)</td></tr>
+<tr class="memdesc:a6c4fdb689d27a9d19a0b5b4236e1ca62"><td class="mdescLeft">&#160;</td><td class="mdescRight">Add a prefixing back slash to specified characters in the string. <a href="classxb_1_1xbString.html#a6c4fdb689d27a9d19a0b5b4236e1ca62">More...</a><br /></td></tr>
+<tr class="separator:a6c4fdb689d27a9d19a0b5b4236e1ca62"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8f202e4798491f2ae9ce51ff58dd5815"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a8f202e4798491f2ae9ce51ff58dd5815">Append</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;s)</td></tr>
+<tr class="memdesc:a8f202e4798491f2ae9ce51ff58dd5815"><td class="mdescLeft">&#160;</td><td class="mdescRight">Append data to string. <a href="classxb_1_1xbString.html#a8f202e4798491f2ae9ce51ff58dd5815">More...</a><br /></td></tr>
+<tr class="separator:a8f202e4798491f2ae9ce51ff58dd5815"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1922319303feb6da1f40b5994c5e8240"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a1922319303feb6da1f40b5994c5e8240">Append</a> (const char *s)</td></tr>
+<tr class="memdesc:a1922319303feb6da1f40b5994c5e8240"><td class="mdescLeft">&#160;</td><td class="mdescRight">Append data to string. <a href="classxb_1_1xbString.html#a1922319303feb6da1f40b5994c5e8240">More...</a><br /></td></tr>
+<tr class="separator:a1922319303feb6da1f40b5994c5e8240"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a097453cb71fbf0b5511cf1259ddce4fb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a097453cb71fbf0b5511cf1259ddce4fb">Append</a> (const char *s, xbUInt32 iByteCount)</td></tr>
+<tr class="memdesc:a097453cb71fbf0b5511cf1259ddce4fb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Append data to string. <a href="classxb_1_1xbString.html#a097453cb71fbf0b5511cf1259ddce4fb">More...</a><br /></td></tr>
+<tr class="separator:a097453cb71fbf0b5511cf1259ddce4fb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a093c6ab5df375a2589755bb8f48fa5c7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a093c6ab5df375a2589755bb8f48fa5c7">Append</a> (char c)</td></tr>
+<tr class="memdesc:a093c6ab5df375a2589755bb8f48fa5c7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Append data to string. <a href="classxb_1_1xbString.html#a093c6ab5df375a2589755bb8f48fa5c7">More...</a><br /></td></tr>
+<tr class="separator:a093c6ab5df375a2589755bb8f48fa5c7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a85bef82dfa22122a1ab8dfe58a107d96"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a85bef82dfa22122a1ab8dfe58a107d96">Assign</a> (const char *srcStr, xbUInt32 lStartPos, xbUInt32 lCopyLen)</td></tr>
+<tr class="memdesc:a85bef82dfa22122a1ab8dfe58a107d96"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assign portion of string. <a href="classxb_1_1xbString.html#a85bef82dfa22122a1ab8dfe58a107d96">More...</a><br /></td></tr>
+<tr class="separator:a85bef82dfa22122a1ab8dfe58a107d96"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a08eb7ca6740423acab4e8bd7a6c8043d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a08eb7ca6740423acab4e8bd7a6c8043d">Assign</a> (const char *srcStr, xbUInt32 lStartPos)</td></tr>
+<tr class="memdesc:a08eb7ca6740423acab4e8bd7a6c8043d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assign portion of string. <a href="classxb_1_1xbString.html#a08eb7ca6740423acab4e8bd7a6c8043d">More...</a><br /></td></tr>
+<tr class="separator:a08eb7ca6740423acab4e8bd7a6c8043d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a430119df844bd80d67c23c48b045af30"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a430119df844bd80d67c23c48b045af30">Assign</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;s, xbUInt32 ulStartPos, xbUInt32 lCopyLen)</td></tr>
+<tr class="memdesc:a430119df844bd80d67c23c48b045af30"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assign portion of string. <a href="classxb_1_1xbString.html#a430119df844bd80d67c23c48b045af30">More...</a><br /></td></tr>
+<tr class="separator:a430119df844bd80d67c23c48b045af30"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a97df314be5b3b2611be11ff50a19533d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a97df314be5b3b2611be11ff50a19533d">Assign</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;s, xbUInt32 ulStartPos)</td></tr>
+<tr class="memdesc:a97df314be5b3b2611be11ff50a19533d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assign portion of string. <a href="classxb_1_1xbString.html#a97df314be5b3b2611be11ff50a19533d">More...</a><br /></td></tr>
+<tr class="separator:a97df314be5b3b2611be11ff50a19533d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac7a8466b03c04df838bd182ef244f792"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#ac7a8466b03c04df838bd182ef244f792">Copy</a> () const</td></tr>
+<tr class="memdesc:ac7a8466b03c04df838bd182ef244f792"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy a string. <a href="classxb_1_1xbString.html#ac7a8466b03c04df838bd182ef244f792">More...</a><br /></td></tr>
+<tr class="separator:ac7a8466b03c04df838bd182ef244f792"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a26bc14d92dc7ce1f2bf31cd74af0db0f"><td class="memItemLeft" align="right" valign="top">xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a26bc14d92dc7ce1f2bf31cd74af0db0f">CountChar</a> (char c) const</td></tr>
+<tr class="memdesc:a26bc14d92dc7ce1f2bf31cd74af0db0f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Count the number of characters in the string. <a href="classxb_1_1xbString.html#a26bc14d92dc7ce1f2bf31cd74af0db0f">More...</a><br /></td></tr>
+<tr class="separator:a26bc14d92dc7ce1f2bf31cd74af0db0f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adc0204bcfd1c052b9aea9229b10acf72"><td class="memItemLeft" align="right" valign="top">xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#adc0204bcfd1c052b9aea9229b10acf72">CountChar</a> (char c, xbInt16 iOpt) const</td></tr>
+<tr class="memdesc:adc0204bcfd1c052b9aea9229b10acf72"><td class="mdescLeft">&#160;</td><td class="mdescRight">Count the number of characters in the string. <a href="classxb_1_1xbString.html#adc0204bcfd1c052b9aea9229b10acf72">More...</a><br /></td></tr>
+<tr class="separator:adc0204bcfd1c052b9aea9229b10acf72"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0a737bd408a94903f214eb2879eb56de"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a0a737bd408a94903f214eb2879eb56de">CvtHexChar</a> (char &amp;cOut)</td></tr>
+<tr class="memdesc:a0a737bd408a94903f214eb2879eb56de"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert hex character to string. <a href="classxb_1_1xbString.html#a0a737bd408a94903f214eb2879eb56de">More...</a><br /></td></tr>
+<tr class="separator:a0a737bd408a94903f214eb2879eb56de"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab5eb6918a0ae9ab6c0e961318f3d1eb0"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#ab5eb6918a0ae9ab6c0e961318f3d1eb0">CvtHexString</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sOut)</td></tr>
+<tr class="memdesc:ab5eb6918a0ae9ab6c0e961318f3d1eb0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert string of hex characters to string. <a href="classxb_1_1xbString.html#ab5eb6918a0ae9ab6c0e961318f3d1eb0">More...</a><br /></td></tr>
+<tr class="separator:ab5eb6918a0ae9ab6c0e961318f3d1eb0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1528b30b84a41c3564ef31d1f4496b15"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a1528b30b84a41c3564ef31d1f4496b15">CvtULongLong</a> (xbUInt64 &amp;ullOut)</td></tr>
+<tr class="memdesc:a1528b30b84a41c3564ef31d1f4496b15"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert string to xbUInt64 number. <a href="classxb_1_1xbString.html#a1528b30b84a41c3564ef31d1f4496b15">More...</a><br /></td></tr>
+<tr class="separator:a1528b30b84a41c3564ef31d1f4496b15"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae3ab18365e132323f8ae4c99eb72181c"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#ae3ab18365e132323f8ae4c99eb72181c">CvtLongLong</a> (xbInt64 &amp;llOut)</td></tr>
+<tr class="memdesc:ae3ab18365e132323f8ae4c99eb72181c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert string to xbInt64 number. <a href="classxb_1_1xbString.html#ae3ab18365e132323f8ae4c99eb72181c">More...</a><br /></td></tr>
+<tr class="separator:ae3ab18365e132323f8ae4c99eb72181c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6b33a8df49cdcb76033cbce5d8dc59d7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a6b33a8df49cdcb76033cbce5d8dc59d7">ExtractElement</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;s, char delim, xbUInt32 iCnt, xbInt16 iOpt=0)</td></tr>
+<tr class="memdesc:a6b33a8df49cdcb76033cbce5d8dc59d7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extract an element out of a delimited string. <a href="classxb_1_1xbString.html#a6b33a8df49cdcb76033cbce5d8dc59d7">More...</a><br /></td></tr>
+<tr class="separator:a6b33a8df49cdcb76033cbce5d8dc59d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a77195fc4957952625cb33bb503517a3e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a77195fc4957952625cb33bb503517a3e">ExtractElement</a> (const char *src, char delim, xbUInt32 iCnt, xbInt16 iOpt=0)</td></tr>
+<tr class="memdesc:a77195fc4957952625cb33bb503517a3e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extract an element out of a delimited string. <a href="classxb_1_1xbString.html#a77195fc4957952625cb33bb503517a3e">More...</a><br /></td></tr>
+<tr class="separator:a77195fc4957952625cb33bb503517a3e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a685187a5f8401b322fc61f3fbe56330d"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a685187a5f8401b322fc61f3fbe56330d">GetCharacter</a> (xbUInt32 lPos) const</td></tr>
+<tr class="memdesc:a685187a5f8401b322fc61f3fbe56330d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a character by position. <a href="classxb_1_1xbString.html#a685187a5f8401b322fc61f3fbe56330d">More...</a><br /></td></tr>
+<tr class="separator:a685187a5f8401b322fc61f3fbe56330d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac7698665f44413a5e99a5b5bc573c6df"><td class="memItemLeft" align="right" valign="top">xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#ac7698665f44413a5e99a5b5bc573c6df">GetLastPos</a> (char c) const</td></tr>
+<tr class="memdesc:ac7698665f44413a5e99a5b5bc573c6df"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the position of the last occurrence of a given character. <a href="classxb_1_1xbString.html#ac7698665f44413a5e99a5b5bc573c6df">More...</a><br /></td></tr>
+<tr class="separator:ac7698665f44413a5e99a5b5bc573c6df"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1c55587904fe7e534290559d0ecb8646"><td class="memItemLeft" align="right" valign="top">xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a1c55587904fe7e534290559d0ecb8646">GetLastPos</a> (const char *s) const</td></tr>
+<tr class="memdesc:a1c55587904fe7e534290559d0ecb8646"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the position of the last occurrence of a given string. <a href="classxb_1_1xbString.html#a1c55587904fe7e534290559d0ecb8646">More...</a><br /></td></tr>
+<tr class="separator:a1c55587904fe7e534290559d0ecb8646"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af8b8b808cf43cd352321b43f500142db"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#af8b8b808cf43cd352321b43f500142db">GetPathSeparator</a> () const</td></tr>
+<tr class="memdesc:af8b8b808cf43cd352321b43f500142db"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the path separator out of the string. <a href="classxb_1_1xbString.html#af8b8b808cf43cd352321b43f500142db">More...</a><br /></td></tr>
+<tr class="separator:af8b8b808cf43cd352321b43f500142db"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6c33e73659f8e98819289d2661c7271c"><td class="memItemLeft" align="right" valign="top">xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a6c33e73659f8e98819289d2661c7271c">GetSize</a> () const</td></tr>
+<tr class="memdesc:a6c33e73659f8e98819289d2661c7271c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Retrieve the size of the string buffer. <a href="classxb_1_1xbString.html#a6c33e73659f8e98819289d2661c7271c">More...</a><br /></td></tr>
+<tr class="separator:a6c33e73659f8e98819289d2661c7271c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa13f6b72e5a529eab04545892bbc98b4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#aa13f6b72e5a529eab04545892bbc98b4">HasAlphaChars</a> () const</td></tr>
+<tr class="memdesc:aa13f6b72e5a529eab04545892bbc98b4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determine if the string has any alpha characters. <a href="classxb_1_1xbString.html#aa13f6b72e5a529eab04545892bbc98b4">More...</a><br /></td></tr>
+<tr class="separator:aa13f6b72e5a529eab04545892bbc98b4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4a255a30d683acd62ea09c1617b53cb3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a4a255a30d683acd62ea09c1617b53cb3">IsEmpty</a> () const</td></tr>
+<tr class="memdesc:a4a255a30d683acd62ea09c1617b53cb3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determine if string is empty. <a href="classxb_1_1xbString.html#a4a255a30d683acd62ea09c1617b53cb3">More...</a><br /></td></tr>
+<tr class="separator:a4a255a30d683acd62ea09c1617b53cb3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3fa34fa31bcb7244ecb054ab628ad500"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a3fa34fa31bcb7244ecb054ab628ad500">IsNull</a> () const</td></tr>
+<tr class="memdesc:a3fa34fa31bcb7244ecb054ab628ad500"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determine if string is NULL. <a href="classxb_1_1xbString.html#a3fa34fa31bcb7244ecb054ab628ad500">More...</a><br /></td></tr>
+<tr class="separator:a3fa34fa31bcb7244ecb054ab628ad500"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acdc3a6d6955b99f0a6b1d181fb3098b9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#acdc3a6d6955b99f0a6b1d181fb3098b9">Left</a> (xbUInt32 ulLen)</td></tr>
+<tr class="memdesc:acdc3a6d6955b99f0a6b1d181fb3098b9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Retain left part of string, drop rightmost characters. <a href="classxb_1_1xbString.html#acdc3a6d6955b99f0a6b1d181fb3098b9">More...</a><br /></td></tr>
+<tr class="separator:acdc3a6d6955b99f0a6b1d181fb3098b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a998b240eedac311aea5843047f55649b"><td class="memItemLeft" align="right" valign="top">xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a998b240eedac311aea5843047f55649b">Len</a> () const</td></tr>
+<tr class="memdesc:a998b240eedac311aea5843047f55649b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Retrieve length of current string. <a href="classxb_1_1xbString.html#a998b240eedac311aea5843047f55649b">More...</a><br /></td></tr>
+<tr class="separator:a998b240eedac311aea5843047f55649b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a90e0d0be4fd0d82dd2ebbe689adf18ee"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a90e0d0be4fd0d82dd2ebbe689adf18ee">Ltrim</a> ()</td></tr>
+<tr class="memdesc:a90e0d0be4fd0d82dd2ebbe689adf18ee"><td class="mdescLeft">&#160;</td><td class="mdescRight">Left trim white space from string. <a href="classxb_1_1xbString.html#a90e0d0be4fd0d82dd2ebbe689adf18ee">More...</a><br /></td></tr>
+<tr class="separator:a90e0d0be4fd0d82dd2ebbe689adf18ee"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a656f5854f74064b7257ff96d96dfb68b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a656f5854f74064b7257ff96d96dfb68b">Ltrunc</a> (xbUInt32 ulCnt)</td></tr>
+<tr class="memdesc:a656f5854f74064b7257ff96d96dfb68b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Left truncate string. <a href="classxb_1_1xbString.html#a656f5854f74064b7257ff96d96dfb68b">More...</a><br /></td></tr>
+<tr class="separator:a656f5854f74064b7257ff96d96dfb68b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0f9eefc836b24c4ee7c5a316c5d812b7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a0f9eefc836b24c4ee7c5a316c5d812b7">Mid</a> (xbUInt32 ulPos, xbUInt32 lLen)</td></tr>
+<tr class="memdesc:a0f9eefc836b24c4ee7c5a316c5d812b7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extract portion of data from string. <a href="classxb_1_1xbString.html#a0f9eefc836b24c4ee7c5a316c5d812b7">More...</a><br /></td></tr>
+<tr class="separator:a0f9eefc836b24c4ee7c5a316c5d812b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6a09cfed22066b0c72432f26960f9e7b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a6a09cfed22066b0c72432f26960f9e7b">PadLeft</a> (char c, xbUInt32 ulLen)</td></tr>
+<tr class="memdesc:a6a09cfed22066b0c72432f26960f9e7b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Left pad string. <a href="classxb_1_1xbString.html#a6a09cfed22066b0c72432f26960f9e7b">More...</a><br /></td></tr>
+<tr class="separator:a6a09cfed22066b0c72432f26960f9e7b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aba13f0c77eb6c4a22996039569fad284"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#aba13f0c77eb6c4a22996039569fad284">PadRight</a> (char c, xbUInt32 ulLen)</td></tr>
+<tr class="memdesc:aba13f0c77eb6c4a22996039569fad284"><td class="mdescLeft">&#160;</td><td class="mdescRight">Right pad string. <a href="classxb_1_1xbString.html#aba13f0c77eb6c4a22996039569fad284">More...</a><br /></td></tr>
+<tr class="separator:aba13f0c77eb6c4a22996039569fad284"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1b586890138da8bf0e23090bd8b34581"><td class="memItemLeft" align="right" valign="top">xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a1b586890138da8bf0e23090bd8b34581">Pos</a> (char c, xbUInt32 ulStartPos) const</td></tr>
+<tr class="memdesc:a1b586890138da8bf0e23090bd8b34581"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determine position of a given character. <a href="classxb_1_1xbString.html#a1b586890138da8bf0e23090bd8b34581">More...</a><br /></td></tr>
+<tr class="separator:a1b586890138da8bf0e23090bd8b34581"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3baf59d15099589ff631995f129e582b"><td class="memItemLeft" align="right" valign="top">xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a3baf59d15099589ff631995f129e582b">Pos</a> (char c) const</td></tr>
+<tr class="memdesc:a3baf59d15099589ff631995f129e582b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determine position of a given character. <a href="classxb_1_1xbString.html#a3baf59d15099589ff631995f129e582b">More...</a><br /></td></tr>
+<tr class="separator:a3baf59d15099589ff631995f129e582b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8705d7277b72f5aa98021e84438914da"><td class="memItemLeft" align="right" valign="top">xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a8705d7277b72f5aa98021e84438914da">Pos</a> (const char *s) const</td></tr>
+<tr class="memdesc:a8705d7277b72f5aa98021e84438914da"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determine position of a given substring. <a href="classxb_1_1xbString.html#a8705d7277b72f5aa98021e84438914da">More...</a><br /></td></tr>
+<tr class="separator:a8705d7277b72f5aa98021e84438914da"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1bae6fa8f608261f6e889616482f6e39"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a1bae6fa8f608261f6e889616482f6e39">PutAt</a> (xbUInt32 ulPos, char c)</td></tr>
+<tr class="memdesc:a1bae6fa8f608261f6e889616482f6e39"><td class="mdescLeft">&#160;</td><td class="mdescRight">Insert character into string. <a href="classxb_1_1xbString.html#a1bae6fa8f608261f6e889616482f6e39">More...</a><br /></td></tr>
+<tr class="separator:a1bae6fa8f608261f6e889616482f6e39"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afaac65eaa6d9ef1596d6a0e7b91ed0f2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#afaac65eaa6d9ef1596d6a0e7b91ed0f2">Remove</a> (xbUInt32 ulPos, xbUInt32 ulN)</td></tr>
+<tr class="memdesc:afaac65eaa6d9ef1596d6a0e7b91ed0f2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Remove portion of string. <a href="classxb_1_1xbString.html#afaac65eaa6d9ef1596d6a0e7b91ed0f2">More...</a><br /></td></tr>
+<tr class="separator:afaac65eaa6d9ef1596d6a0e7b91ed0f2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac721d643c60b5c5acf60c2bce99596fa"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#ac721d643c60b5c5acf60c2bce99596fa">Replace</a> (const char *sReplace, const char *sReplaceWith, xbInt16 iOpt=0)</td></tr>
+<tr class="memdesc:ac721d643c60b5c5acf60c2bce99596fa"><td class="mdescLeft">&#160;</td><td class="mdescRight">Replace a value within a string with another value. <a href="classxb_1_1xbString.html#ac721d643c60b5c5acf60c2bce99596fa">More...</a><br /></td></tr>
+<tr class="separator:ac721d643c60b5c5acf60c2bce99596fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa6d346ab04e5bb8852f0bb996163a35e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#aa6d346ab04e5bb8852f0bb996163a35e">Resize</a> (xbUInt32 lSize)</td></tr>
+<tr class="memdesc:aa6d346ab04e5bb8852f0bb996163a35e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Resize a string. <a href="classxb_1_1xbString.html#aa6d346ab04e5bb8852f0bb996163a35e">More...</a><br /></td></tr>
+<tr class="separator:aa6d346ab04e5bb8852f0bb996163a35e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaf330188d67c347ecae0d16f65b22077"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#aaf330188d67c347ecae0d16f65b22077">Rtrim</a> ()</td></tr>
+<tr class="memdesc:aaf330188d67c347ecae0d16f65b22077"><td class="mdescLeft">&#160;</td><td class="mdescRight">Right trim the string. <a href="classxb_1_1xbString.html#aaf330188d67c347ecae0d16f65b22077">More...</a><br /></td></tr>
+<tr class="separator:aaf330188d67c347ecae0d16f65b22077"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab85753d2c39882e946a8468cbb587700"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#ab85753d2c39882e946a8468cbb587700">Set</a> (const char *s)</td></tr>
+<tr class="memdesc:ab85753d2c39882e946a8468cbb587700"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the value of the string. <a href="classxb_1_1xbString.html#ab85753d2c39882e946a8468cbb587700">More...</a><br /></td></tr>
+<tr class="separator:ab85753d2c39882e946a8468cbb587700"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac0d08bd688fd0e3707e32886d0dfeb09"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#ac0d08bd688fd0e3707e32886d0dfeb09">Set</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;s)</td></tr>
+<tr class="memdesc:ac0d08bd688fd0e3707e32886d0dfeb09"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the value of the string. <a href="classxb_1_1xbString.html#ac0d08bd688fd0e3707e32886d0dfeb09">More...</a><br /></td></tr>
+<tr class="separator:ac0d08bd688fd0e3707e32886d0dfeb09"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6eba6ccd0c805a22516de2c18a30f8a3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a6eba6ccd0c805a22516de2c18a30f8a3">Set</a> (const char *s, xbUInt32 ulSize)</td></tr>
+<tr class="memdesc:a6eba6ccd0c805a22516de2c18a30f8a3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the value of the string. <a href="classxb_1_1xbString.html#a6eba6ccd0c805a22516de2c18a30f8a3">More...</a><br /></td></tr>
+<tr class="separator:a6eba6ccd0c805a22516de2c18a30f8a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3af5b1f111f94b0667551fcbd1d97abd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a3af5b1f111f94b0667551fcbd1d97abd">SetNum</a> (xbInt32 lNum)</td></tr>
+<tr class="memdesc:a3af5b1f111f94b0667551fcbd1d97abd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the string to long integer numeric value. <a href="classxb_1_1xbString.html#a3af5b1f111f94b0667551fcbd1d97abd">More...</a><br /></td></tr>
+<tr class="separator:a3af5b1f111f94b0667551fcbd1d97abd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9e9bfa29d86377b915f1628aeb0e9195"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a9e9bfa29d86377b915f1628aeb0e9195">Sprintf</a> (const char *format,...)</td></tr>
+<tr class="memdesc:a9e9bfa29d86377b915f1628aeb0e9195"><td class="mdescLeft">&#160;</td><td class="mdescRight">Printf routine for formatting a string. <a href="classxb_1_1xbString.html#a9e9bfa29d86377b915f1628aeb0e9195">More...</a><br /></td></tr>
+<tr class="separator:a9e9bfa29d86377b915f1628aeb0e9195"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6715f4c0010f3ab487c9d787838a29b3"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a6715f4c0010f3ab487c9d787838a29b3">Str</a> () const</td></tr>
+<tr class="memdesc:a6715f4c0010f3ab487c9d787838a29b3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return string data. <a href="classxb_1_1xbString.html#a6715f4c0010f3ab487c9d787838a29b3">More...</a><br /></td></tr>
+<tr class="separator:a6715f4c0010f3ab487c9d787838a29b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3bc9e856c34f0c240a6e36e5b6e3ea7b"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a3bc9e856c34f0c240a6e36e5b6e3ea7b">strncpy</a> (char *cDest, xbUInt32 n) const</td></tr>
+<tr class="memdesc:a3bc9e856c34f0c240a6e36e5b6e3ea7b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy all or part of string to character array. <a href="classxb_1_1xbString.html#a3bc9e856c34f0c240a6e36e5b6e3ea7b">More...</a><br /></td></tr>
+<tr class="separator:a3bc9e856c34f0c240a6e36e5b6e3ea7b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a054683872e1f05d11c2cf8683a63a6fe"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a054683872e1f05d11c2cf8683a63a6fe">SwapChars</a> (char from, char to)</td></tr>
+<tr class="memdesc:a054683872e1f05d11c2cf8683a63a6fe"><td class="mdescLeft">&#160;</td><td class="mdescRight">Swap characters. <a href="classxb_1_1xbString.html#a054683872e1f05d11c2cf8683a63a6fe">More...</a><br /></td></tr>
+<tr class="separator:a054683872e1f05d11c2cf8683a63a6fe"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a602cac1a6ef3f6b52f587ac4c0ef4fb2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a602cac1a6ef3f6b52f587ac4c0ef4fb2">ToLowerCase</a> ()</td></tr>
+<tr class="memdesc:a602cac1a6ef3f6b52f587ac4c0ef4fb2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Replace all upper case charaters with lower case characters. <a href="classxb_1_1xbString.html#a602cac1a6ef3f6b52f587ac4c0ef4fb2">More...</a><br /></td></tr>
+<tr class="separator:a602cac1a6ef3f6b52f587ac4c0ef4fb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a68001d0a44e6b4fe61e29a4e41ded9d4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a68001d0a44e6b4fe61e29a4e41ded9d4">ToUpperCase</a> ()</td></tr>
+<tr class="memdesc:a68001d0a44e6b4fe61e29a4e41ded9d4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Replace all lower case charaters with lower case characters. <a href="classxb_1_1xbString.html#a68001d0a44e6b4fe61e29a4e41ded9d4">More...</a><br /></td></tr>
+<tr class="separator:a68001d0a44e6b4fe61e29a4e41ded9d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abc9bd33687d4e03ca52d77885721d626"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#abc9bd33687d4e03ca52d77885721d626">Trim</a> ()</td></tr>
+<tr class="memdesc:abc9bd33687d4e03ca52d77885721d626"><td class="mdescLeft">&#160;</td><td class="mdescRight">Trim all leading and trailing white space from string. <a href="classxb_1_1xbString.html#abc9bd33687d4e03ca52d77885721d626">More...</a><br /></td></tr>
+<tr class="separator:abc9bd33687d4e03ca52d77885721d626"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a72b16c15fd8822efaa5f158c34df7b1e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a72b16c15fd8822efaa5f158c34df7b1e">ValidLogicalValue</a> () const</td></tr>
+<tr class="memdesc:a72b16c15fd8822efaa5f158c34df7b1e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check for valid logical field data. <a href="classxb_1_1xbString.html#a72b16c15fd8822efaa5f158c34df7b1e">More...</a><br /></td></tr>
+<tr class="separator:a72b16c15fd8822efaa5f158c34df7b1e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aeed920d2a25111f776ddde2d530eb81b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#aeed920d2a25111f776ddde2d530eb81b">ValidNumericValue</a> () const</td></tr>
+<tr class="memdesc:aeed920d2a25111f776ddde2d530eb81b"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function returns true if the data is valid numeric data. <a href="classxb_1_1xbString.html#aeed920d2a25111f776ddde2d530eb81b">More...</a><br /></td></tr>
+<tr class="separator:aeed920d2a25111f776ddde2d530eb81b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2fd30956a26a260d1ef6fdbe73dd93f9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a2fd30956a26a260d1ef6fdbe73dd93f9">ZapChar</a> (char c)</td></tr>
+<tr class="memdesc:a2fd30956a26a260d1ef6fdbe73dd93f9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Remove every instance of a character from a string. <a href="classxb_1_1xbString.html#a2fd30956a26a260d1ef6fdbe73dd93f9">More...</a><br /></td></tr>
+<tr class="separator:a2fd30956a26a260d1ef6fdbe73dd93f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:addc3a470f6cd85d4c21bf9da38cf5ac9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#addc3a470f6cd85d4c21bf9da38cf5ac9">ZapLeadingChar</a> (char c)</td></tr>
+<tr class="memdesc:addc3a470f6cd85d4c21bf9da38cf5ac9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Remove leading character from a string. <a href="classxb_1_1xbString.html#addc3a470f6cd85d4c21bf9da38cf5ac9">More...</a><br /></td></tr>
+<tr class="separator:addc3a470f6cd85d4c21bf9da38cf5ac9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afe3415bfa2e1089b792aeda0462fb99e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#afe3415bfa2e1089b792aeda0462fb99e">ZapTrailingChar</a> (char c)</td></tr>
+<tr class="memdesc:afe3415bfa2e1089b792aeda0462fb99e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Remove trailing character from a string. <a href="classxb_1_1xbString.html#afe3415bfa2e1089b792aeda0462fb99e">More...</a><br /></td></tr>
+<tr class="separator:afe3415bfa2e1089b792aeda0462fb99e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="friends" name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:a3fa915061156521e9dd772a8d7e5f8fb"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a3fa915061156521e9dd772a8d7e5f8fb">operator&lt;&lt;</a> (std::ostream &amp;os, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;s)</td></tr>
+<tr class="memdesc:a3fa915061156521e9dd772a8d7e5f8fb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stream insertion operator &lt;&lt;. <a href="classxb_1_1xbString.html#a3fa915061156521e9dd772a8d7e5f8fb">More...</a><br /></td></tr>
+<tr class="separator:a3fa915061156521e9dd772a8d7e5f8fb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p >Class for handling string data. </p>
+<p >This class defines a basic string class with all the functions one would expect in a string class.</p>
+<p >For purposes of the <a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> class, a string is defined as a variable sized array of one byte characters terminated with a null (0x00 or \0) byte.<br />
+<br />
+</p>
+<p >This version of the <a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> class does not support wide (wchar_t) characters. Perhaps you would be interested in creating a class for supporting wide characters.<br />
+<br />
+</p>
+<p >This string class handle strings in a 1-based (not 0 based) fashion. Any string routines taking an offset use a 1-based value. That is, the first position of the string is position 1, not 0.<br />
+<br />
+ <br />
+</p>
+<p >Position 1 (not 0) is considered the first position in a string. <br />
+ A return of 0 would indicate a not found condition. A return of 1, would be the first byte. </p>
+</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="a63f9313217e0ff3c9789ec59316216a1" name="a63f9313217e0ff3c9789ec59316216a1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a63f9313217e0ff3c9789ec59316216a1">&#9670;&nbsp;</a></span>xbString() <span class="overload">[1/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xb::xbString::xbString </td>
+ <td>(</td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ulSize</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Constructor. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ulSize</td><td>- Allocation size. The allocation size is normally handled internally by the class, but it can be set in this constructor. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a14bbaa293c8d40dd6c64332f2668a92e" name="a14bbaa293c8d40dd6c64332f2668a92e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a14bbaa293c8d40dd6c64332f2668a92e">&#9670;&nbsp;</a></span>xbString() <span class="overload">[2/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xb::xbString::xbString </td>
+ <td>(</td>
+ <td class="paramtype">char&#160;</td>
+ <td class="paramname"><em>c</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Constructor. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>- Initialize string to c. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a18f3598dcdf2ec5692274fc8ee769ad7" name="a18f3598dcdf2ec5692274fc8ee769ad7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a18f3598dcdf2ec5692274fc8ee769ad7">&#9670;&nbsp;</a></span>xbString() <span class="overload">[3/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xb::xbString::xbString </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>s</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ulMaxLen</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Constructor. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">s</td><td>Initialize string to s. </td></tr>
+ <tr><td class="paramname">ulMaxLen</td><td>Maximum length of string. Truncate any characters greater than ulMaxLen. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a0d81016b93fc36ebbbafacf35c677f07" name="a0d81016b93fc36ebbbafacf35c677f07"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0d81016b93fc36ebbbafacf35c677f07">&#9670;&nbsp;</a></span>xbString() <span class="overload">[4/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xb::xbString::xbString </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>s</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Constructor. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">s</td><td>Initialize string to s. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a25856311106c5fb15d39017b63f0ddc7" name="a25856311106c5fb15d39017b63f0ddc7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a25856311106c5fb15d39017b63f0ddc7">&#9670;&nbsp;</a></span>xbString() <span class="overload">[5/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xb::xbString::xbString </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>s</em> = <code>&quot;&quot;</code></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Constructor. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">s</td><td>- Initialize string to s. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="ad865b55e3b08dffd527afee8e7e8e3fe" name="ad865b55e3b08dffd527afee8e7e8e3fe"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad865b55e3b08dffd527afee8e7e8e3fe">&#9670;&nbsp;</a></span>xbString() <span class="overload">[6/6]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xb::xbString::xbString </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a>&#160;</td>
+ <td class="paramname"><em>d</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Constructor. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">d</td><td>- Initiailize string to d. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a10a6549efab02bc76ab33b15916b1eb1" name="a10a6549efab02bc76ab33b15916b1eb1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a10a6549efab02bc76ab33b15916b1eb1">&#9670;&nbsp;</a></span>~xbString()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xb::xbString::~xbString </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Destructor. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="a6c4fdb689d27a9d19a0b5b4236e1ca62" name="a6c4fdb689d27a9d19a0b5b4236e1ca62"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6c4fdb689d27a9d19a0b5b4236e1ca62">&#9670;&nbsp;</a></span>AddBackSlash()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::AddBackSlash </td>
+ <td>(</td>
+ <td class="paramtype">char&#160;</td>
+ <td class="paramname"><em>c</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Add a prefixing back slash to specified characters in the string. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>Character to prefix with a backslash. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
+
+</div>
+</div>
+<a id="a093c6ab5df375a2589755bb8f48fa5c7" name="a093c6ab5df375a2589755bb8f48fa5c7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a093c6ab5df375a2589755bb8f48fa5c7">&#9670;&nbsp;</a></span>Append() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Append </td>
+ <td>(</td>
+ <td class="paramtype">char&#160;</td>
+ <td class="paramname"><em>c</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Append data to string. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>String data to append. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
+
+</div>
+</div>
+<a id="a1922319303feb6da1f40b5994c5e8240" name="a1922319303feb6da1f40b5994c5e8240"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1922319303feb6da1f40b5994c5e8240">&#9670;&nbsp;</a></span>Append() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Append </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>s</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Append data to string. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">s</td><td>String data to append. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
+
+</div>
+</div>
+<a id="a097453cb71fbf0b5511cf1259ddce4fb" name="a097453cb71fbf0b5511cf1259ddce4fb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a097453cb71fbf0b5511cf1259ddce4fb">&#9670;&nbsp;</a></span>Append() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Append </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>s</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ulByteCount</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Append data to string. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">s</td><td>String data to append. <br />
+ </td></tr>
+ <tr><td class="paramname">ulByteCount</td><td>Maximum number of bytes to append. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
+
+</div>
+</div>
+<a id="a8f202e4798491f2ae9ce51ff58dd5815" name="a8f202e4798491f2ae9ce51ff58dd5815"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8f202e4798491f2ae9ce51ff58dd5815">&#9670;&nbsp;</a></span>Append() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Append </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>s</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Append data to string. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">s</td><td>String data to append. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
+
+</div>
+</div>
+<a id="a08eb7ca6740423acab4e8bd7a6c8043d" name="a08eb7ca6740423acab4e8bd7a6c8043d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a08eb7ca6740423acab4e8bd7a6c8043d">&#9670;&nbsp;</a></span>Assign() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Assign </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>sStr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ulStartPos</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Assign portion of string. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sStr</td><td>- Source string for copy operation. sStr needs to be a Null terminated string. </td></tr>
+ <tr><td class="paramname">ulStartPos</td><td>- Starting position within source string. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
+
+</div>
+</div>
+<a id="a85bef82dfa22122a1ab8dfe58a107d96" name="a85bef82dfa22122a1ab8dfe58a107d96"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a85bef82dfa22122a1ab8dfe58a107d96">&#9670;&nbsp;</a></span>Assign() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Assign </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>sStr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ulStartPos</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ulCopyLen</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Assign portion of string. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sStr</td><td>- Source string for copy operation. sStr needs to be a Null terminated string. </td></tr>
+ <tr><td class="paramname">ulStartPos</td><td>- Starting position within source string. </td></tr>
+ <tr><td class="paramname">ulCopyLen</td><td>- Length of data to copy. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
+
+</div>
+</div>
+<a id="a97df314be5b3b2611be11ff50a19533d" name="a97df314be5b3b2611be11ff50a19533d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a97df314be5b3b2611be11ff50a19533d">&#9670;&nbsp;</a></span>Assign() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Assign </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sStr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ulStartPos</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Assign portion of string. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sStr</td><td>- Source string for copy operation. sStr needs to be a Null terminated string. </td></tr>
+ <tr><td class="paramname">ulStartPos</td><td>- Starting position within source string. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
+
+</div>
+</div>
+<a id="a430119df844bd80d67c23c48b045af30" name="a430119df844bd80d67c23c48b045af30"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a430119df844bd80d67c23c48b045af30">&#9670;&nbsp;</a></span>Assign() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Assign </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sStr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ulStartPos</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ulCopyLen</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Assign portion of string. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sStr</td><td>- Source string for copy operation. sStr needs to be a Null terminated string. </td></tr>
+ <tr><td class="paramname">ulStartPos</td><td>- Starting position within source string. </td></tr>
+ <tr><td class="paramname">ulCopyLen</td><td>- Length of data to copy. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
+
+</div>
+</div>
+<a id="ac7a8466b03c04df838bd182ef244f792" name="ac7a8466b03c04df838bd182ef244f792"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac7a8466b03c04df838bd182ef244f792">&#9670;&nbsp;</a></span>Copy()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> xb::xbString::Copy </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Copy a string. </p>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a>. </dd></dl>
+
+</div>
+</div>
+<a id="a26bc14d92dc7ce1f2bf31cd74af0db0f" name="a26bc14d92dc7ce1f2bf31cd74af0db0f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a26bc14d92dc7ce1f2bf31cd74af0db0f">&#9670;&nbsp;</a></span>CountChar() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbUInt32 xb::xbString::CountChar </td>
+ <td>(</td>
+ <td class="paramtype">char&#160;</td>
+ <td class="paramname"><em>c</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Count the number of characters in the string. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>Character to count. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The number of characters. </dd></dl>
+
+</div>
+</div>
+<a id="adc0204bcfd1c052b9aea9229b10acf72" name="adc0204bcfd1c052b9aea9229b10acf72"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adc0204bcfd1c052b9aea9229b10acf72">&#9670;&nbsp;</a></span>CountChar() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbUInt32 xb::xbString::CountChar </td>
+ <td>(</td>
+ <td class="paramtype">char&#160;</td>
+ <td class="paramname"><em>c</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iOpt</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Count the number of characters in the string. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>Character to count. </td></tr>
+ <tr><td class="paramname">iOpt</td><td>0 - Count the number of characters.<br />
+ 1 - Count the number of characters not between single or double quotes. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The number of characters. </dd></dl>
+
+</div>
+</div>
+<a id="a0a737bd408a94903f214eb2879eb56de" name="a0a737bd408a94903f214eb2879eb56de"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0a737bd408a94903f214eb2879eb56de">&#9670;&nbsp;</a></span>CvtHexChar()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbString::CvtHexChar </td>
+ <td>(</td>
+ <td class="paramtype">char &amp;&#160;</td>
+ <td class="paramname"><em>cOut</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Convert hex character to string. </p>
+<p >This routine converts a four byte string in the format of 0x00 to a one byte char value. The first four bytes of the string must be in the format 0x00. Anything past the first four bytes is disregarded.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">cOut</td><td>Output character. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>XB_INVALID_PARM on error<br />
+ XB_NO_ERROR on success. </dd></dl>
+
+</div>
+</div>
+<a id="ab5eb6918a0ae9ab6c0e961318f3d1eb0" name="ab5eb6918a0ae9ab6c0e961318f3d1eb0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab5eb6918a0ae9ab6c0e961318f3d1eb0">&#9670;&nbsp;</a></span>CvtHexString()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbString::CvtHexString </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sOut</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Convert string of hex characters to string. </p>
+<p >This routine converts a string of four byte format of 0x00 to a string of one byte chars.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sOut</td><td>Output string of converted characters. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>XB_INVALID_PARM on error<br />
+ XB_NO_ERROR on success. </dd></dl>
+
+</div>
+</div>
+<a id="ae3ab18365e132323f8ae4c99eb72181c" name="ae3ab18365e132323f8ae4c99eb72181c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae3ab18365e132323f8ae4c99eb72181c">&#9670;&nbsp;</a></span>CvtLongLong()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbString::CvtLongLong </td>
+ <td>(</td>
+ <td class="paramtype">xbInt64 &amp;&#160;</td>
+ <td class="paramname"><em>llOut</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Convert string to xbInt64 number. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">llOut</td><td>- output long long. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>XB_NO_ERROR </dd></dl>
+
+</div>
+</div>
+<a id="a1528b30b84a41c3564ef31d1f4496b15" name="a1528b30b84a41c3564ef31d1f4496b15"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1528b30b84a41c3564ef31d1f4496b15">&#9670;&nbsp;</a></span>CvtULongLong()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbString::CvtULongLong </td>
+ <td>(</td>
+ <td class="paramtype">xbUInt64 &amp;&#160;</td>
+ <td class="paramname"><em>ullOut</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Convert string to xbUInt64 number. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ullOut</td><td>- output unsigned long long. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>XB_NO_ERROR </dd></dl>
+
+</div>
+</div>
+<a id="a77195fc4957952625cb33bb503517a3e" name="a77195fc4957952625cb33bb503517a3e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a77195fc4957952625cb33bb503517a3e">&#9670;&nbsp;</a></span>ExtractElement() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::ExtractElement </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>pSrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char&#160;</td>
+ <td class="paramname"><em>cDelim</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>lSkipCnt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iOpt</em> = <code>0</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Extract an element out of a delimited string. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">pSrc</td><td>Source string. </td></tr>
+ <tr><td class="paramname">cDelim</td><td>Delimiter. </td></tr>
+ <tr><td class="paramname">lSkipCnt</td><td>Number of delimiters to skip. </td></tr>
+ <tr><td class="paramname">iOpt</td><td>0 - ignore single and double quotes.<br />
+ 1 - ignore delimiters between single or double quotes. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Reference to string extracted from element. </dd></dl>
+
+</div>
+</div>
+<a id="a6b33a8df49cdcb76033cbce5d8dc59d7" name="a6b33a8df49cdcb76033cbce5d8dc59d7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6b33a8df49cdcb76033cbce5d8dc59d7">&#9670;&nbsp;</a></span>ExtractElement() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::ExtractElement </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sSrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char&#160;</td>
+ <td class="paramname"><em>cDelim</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>lSkipCnt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iOpt</em> = <code>0</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Extract an element out of a delimited string. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sSrc</td><td>Source string. </td></tr>
+ <tr><td class="paramname">cDelim</td><td>Delimiter. </td></tr>
+ <tr><td class="paramname">lSkipCnt</td><td>Number of delimiters to skip. </td></tr>
+ <tr><td class="paramname">iOpt</td><td>0 - ignore single and double quotes.<br />
+ 1 - ignore delimiters between single or double quotes. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Reference to string extracted from element. </dd></dl>
+
+</div>
+</div>
+<a id="a685187a5f8401b322fc61f3fbe56330d" name="a685187a5f8401b322fc61f3fbe56330d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a685187a5f8401b322fc61f3fbe56330d">&#9670;&nbsp;</a></span>GetCharacter()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char xb::xbString::GetCharacter </td>
+ <td>(</td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>n</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get a character by position. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">n</td><td>- Position in string to extract. First position is 1 (not 0). </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Character from position n, or null. </dd></dl>
+
+</div>
+</div>
+<a id="ac7698665f44413a5e99a5b5bc573c6df" name="ac7698665f44413a5e99a5b5bc573c6df"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac7698665f44413a5e99a5b5bc573c6df">&#9670;&nbsp;</a></span>GetLastPos() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbUInt32 xb::xbString::GetLastPos </td>
+ <td>(</td>
+ <td class="paramtype">char&#160;</td>
+ <td class="paramname"><em>c</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get the position of the last occurrence of a given character. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>- Character to search for. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Last position of character in the string. </dd></dl>
+
+</div>
+</div>
+<a id="a1c55587904fe7e534290559d0ecb8646" name="a1c55587904fe7e534290559d0ecb8646"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1c55587904fe7e534290559d0ecb8646">&#9670;&nbsp;</a></span>GetLastPos() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbUInt32 xb::xbString::GetLastPos </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>s</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get the position of the last occurrence of a given string. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">s</td><td>- String to search for. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Last position of character in the string. </dd></dl>
+
+</div>
+</div>
+<a id="af8b8b808cf43cd352321b43f500142db" name="af8b8b808cf43cd352321b43f500142db"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af8b8b808cf43cd352321b43f500142db">&#9670;&nbsp;</a></span>GetPathSeparator()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char xb::xbString::GetPathSeparator </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get the path separator out of the string. </p>
+<p >This method assumes the string is a valid path name. If it is, it returns either / or . </p><dl class="section return"><dt>Returns</dt><dd>Char value containing either / or \ depending on OS. </dd></dl>
+
+</div>
+</div>
+<a id="a6c33e73659f8e98819289d2661c7271c" name="a6c33e73659f8e98819289d2661c7271c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6c33e73659f8e98819289d2661c7271c">&#9670;&nbsp;</a></span>GetSize()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbUInt32 xb::xbString::GetSize </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Retrieve the size of the string buffer. </p>
+<dl class="section return"><dt>Returns</dt><dd>Size of string buffer including the null terminating byte. </dd></dl>
+
+</div>
+</div>
+<a id="aa13f6b72e5a529eab04545892bbc98b4" name="aa13f6b72e5a529eab04545892bbc98b4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa13f6b72e5a529eab04545892bbc98b4">&#9670;&nbsp;</a></span>HasAlphaChars()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbString::HasAlphaChars </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Determine if the string has any alpha characters. </p>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue - String contains one or more aloha characters.<br />
+ xbFalse - String contains no alpha characters. </dd></dl>
+
+</div>
+</div>
+<a id="a4a255a30d683acd62ea09c1617b53cb3" name="a4a255a30d683acd62ea09c1617b53cb3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4a255a30d683acd62ea09c1617b53cb3">&#9670;&nbsp;</a></span>IsEmpty()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbString::IsEmpty </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Determine if string is empty. </p>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue if string is empty.<br />
+ xbFalse if string is not empty. </dd></dl>
+
+</div>
+</div>
+<a id="a3fa34fa31bcb7244ecb054ab628ad500" name="a3fa34fa31bcb7244ecb054ab628ad500"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3fa34fa31bcb7244ecb054ab628ad500">&#9670;&nbsp;</a></span>IsNull()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbString::IsNull </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Determine if string is NULL. </p>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue if string is NULL.<br />
+ xbFalse if string is not NULL. </dd></dl>
+
+</div>
+</div>
+<a id="acdc3a6d6955b99f0a6b1d181fb3098b9" name="acdc3a6d6955b99f0a6b1d181fb3098b9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acdc3a6d6955b99f0a6b1d181fb3098b9">&#9670;&nbsp;</a></span>Left()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Left </td>
+ <td>(</td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ulLen</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Retain left part of string, drop rightmost characters. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ulLen</td><td>New string length, truncate rightmost excess. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Reference to string. </dd></dl>
+
+</div>
+</div>
+<a id="a998b240eedac311aea5843047f55649b" name="a998b240eedac311aea5843047f55649b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a998b240eedac311aea5843047f55649b">&#9670;&nbsp;</a></span>Len()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbUInt32 xb::xbString::Len </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Retrieve length of current string. </p>
+<dl class="section return"><dt>Returns</dt><dd>String length, excluding the terminating null byte. </dd></dl>
+
+</div>
+</div>
+<a id="a90e0d0be4fd0d82dd2ebbe689adf18ee" name="a90e0d0be4fd0d82dd2ebbe689adf18ee"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a90e0d0be4fd0d82dd2ebbe689adf18ee">&#9670;&nbsp;</a></span>Ltrim()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Ltrim </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Left trim white space from string. </p>
+<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
+
+</div>
+</div>
+<a id="a656f5854f74064b7257ff96d96dfb68b" name="a656f5854f74064b7257ff96d96dfb68b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a656f5854f74064b7257ff96d96dfb68b">&#9670;&nbsp;</a></span>Ltrunc()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Ltrunc </td>
+ <td>(</td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ulCnt</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Left truncate string. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ulCnt</td><td>Number of bytes to remove from the left. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
+
+</div>
+</div>
+<a id="a0f9eefc836b24c4ee7c5a316c5d812b7" name="a0f9eefc836b24c4ee7c5a316c5d812b7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0f9eefc836b24c4ee7c5a316c5d812b7">&#9670;&nbsp;</a></span>Mid()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Mid </td>
+ <td>(</td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ulStartPos</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ulTargLen</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Extract portion of data from string. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ulStartPos</td><td>Starting position </td></tr>
+ <tr><td class="paramname">ulTargLen</td><td>Length </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Reference to string </dd></dl>
+
+</div>
+</div>
+<a id="a545df0ae9590f0ea5844a165e38a6388" name="a545df0ae9590f0ea5844a165e38a6388"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a545df0ae9590f0ea5844a165e38a6388">&#9670;&nbsp;</a></span>operator const char *()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xb::xbString::operator const char * </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Operator const char *. </p>
+<dl class="section return"><dt>Returns</dt><dd>Pointer to string data. </dd></dl>
+
+</div>
+</div>
+<a id="a822448f2a0ce653473d4c1de5763a3a6" name="a822448f2a0ce653473d4c1de5763a3a6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a822448f2a0ce653473d4c1de5763a3a6">&#9670;&nbsp;</a></span>operator!=() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbString::operator!= </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>s</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>operator != </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">s</td><td>String to compare </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue - Strings don't match.<br />
+ zbFalse - Strings match.<br />
+ </dd></dl>
+
+</div>
+</div>
+<a id="acf89691607050b0505dc6af28d059c38" name="acf89691607050b0505dc6af28d059c38"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acf89691607050b0505dc6af28d059c38">&#9670;&nbsp;</a></span>operator!=() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbString::operator!= </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>s</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>operator != </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">s</td><td>String to compare </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue - Strings don't match.<br />
+ xbFalse - Strings match.<br />
+ </dd></dl>
+
+</div>
+</div>
+<a id="aab556e8c3cb478dd95643327d72a48bd" name="aab556e8c3cb478dd95643327d72a48bd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aab556e8c3cb478dd95643327d72a48bd">&#9670;&nbsp;</a></span>operator+() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> xb::xbString::operator+ </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>s1</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Concatonate operator +. </p>
+<p >Concatonate left string with right string returning reference to new string.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">s1</td><td>Right string operator. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="af559654baba81c3c0c19823c0b7a69d3" name="af559654baba81c3c0c19823c0b7a69d3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af559654baba81c3c0c19823c0b7a69d3">&#9670;&nbsp;</a></span>operator+() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> xb::xbString::operator+ </td>
+ <td>(</td>
+ <td class="paramtype">const char&#160;</td>
+ <td class="paramname"><em>c</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Concatonate operator +. </p>
+<p >Concatonate left string with right string returning reference to new string.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>Right string operator. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a1f289d577ba90c500bc1be3ec7bb0206" name="a1f289d577ba90c500bc1be3ec7bb0206"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1f289d577ba90c500bc1be3ec7bb0206">&#9670;&nbsp;</a></span>operator+() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> xb::xbString::operator+ </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>s1</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Concatonate operator +. </p>
+<p >Concatonate left string with right string returning reference to new string.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">s1</td><td>Right string operator. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="ae12f45b8be84e438e032c0b860f985c6" name="ae12f45b8be84e438e032c0b860f985c6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae12f45b8be84e438e032c0b860f985c6">&#9670;&nbsp;</a></span>operator+=() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::operator+= </td>
+ <td>(</td>
+ <td class="paramtype">char&#160;</td>
+ <td class="paramname"><em>c</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Append operator +=. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>- Append c to the string. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="ab319120dbad9107e1e7090139c956100" name="ab319120dbad9107e1e7090139c956100"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab319120dbad9107e1e7090139c956100">&#9670;&nbsp;</a></span>operator+=() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::operator+= </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>s</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Append operator +=. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">s</td><td>- Append s to the string. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a76a47af239797a266ada6141c150001c" name="a76a47af239797a266ada6141c150001c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a76a47af239797a266ada6141c150001c">&#9670;&nbsp;</a></span>operator+=() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::operator+= </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>s</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Append operator +=. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">s</td><td>- Append s to the string. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a06abec236b95f6933ba17bf67089f7cf" name="a06abec236b95f6933ba17bf67089f7cf"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a06abec236b95f6933ba17bf67089f7cf">&#9670;&nbsp;</a></span>operator-()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> xb::xbString::operator- </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>s1</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Concatonate operator -. </p>
+<p >Concatonate left string with right string returning reference to new string. Both strings are trimmed.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">s1</td><td>Right string operator. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="adcafd019df23bb5724c46e34f3f31194" name="adcafd019df23bb5724c46e34f3f31194"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adcafd019df23bb5724c46e34f3f31194">&#9670;&nbsp;</a></span>operator-=() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::operator-= </td>
+ <td>(</td>
+ <td class="paramtype">char&#160;</td>
+ <td class="paramname"><em>c</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Append operator -=. </p>
+<p >Append c to the right of this string, trimming right space on this string first. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>- Append s to the right of the string value. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="aaae97e6eda3d18c9f463993ade985bf4" name="aaae97e6eda3d18c9f463993ade985bf4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaae97e6eda3d18c9f463993ade985bf4">&#9670;&nbsp;</a></span>operator-=() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::operator-= </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>s</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Append operator -=. </p>
+<p >Append s to the right of this string, right trimming both strings. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">s</td><td>- Append s to the right of the string value. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="aa7f4db1b4eae9dfad46346db6e17ea15" name="aa7f4db1b4eae9dfad46346db6e17ea15"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa7f4db1b4eae9dfad46346db6e17ea15">&#9670;&nbsp;</a></span>operator-=() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::operator-= </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>s</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Append operator -=. </p>
+<p >Append s to the right of this string, right trimming both strings. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">s</td><td>- Append s to the right of the string value. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a71c7aafa0d523c72cbe58c474be2270a" name="a71c7aafa0d523c72cbe58c474be2270a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a71c7aafa0d523c72cbe58c474be2270a">&#9670;&nbsp;</a></span>operator&lt;()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbString::operator&lt; </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>s</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>operator &lt; </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">s</td><td>String to compare </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue - Left string is less than the right string.<br />
+ zbFalse - Left string is not less than the right string.<br />
+ </dd></dl>
+
+</div>
+</div>
+<a id="a461f245e60cddfdf5f78a972a46e5880" name="a461f245e60cddfdf5f78a972a46e5880"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a461f245e60cddfdf5f78a972a46e5880">&#9670;&nbsp;</a></span>operator&lt;=()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbString::operator&lt;= </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>s</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>operator &lt;= </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">s</td><td>String to compare </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue - Left string is less than or equal to the right string.<br />
+ zbFalse - Left string is not less than or equal to the right string.<br />
+ </dd></dl>
+
+</div>
+</div>
+<a id="a84ae7d16c5d73c5aa2270aa9895a7f7c" name="a84ae7d16c5d73c5aa2270aa9895a7f7c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a84ae7d16c5d73c5aa2270aa9895a7f7c">&#9670;&nbsp;</a></span>operator=() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::operator= </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>s</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Set operator =. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">s</td><td>- Set the string to the string on the right of the equal sign. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a4f69d11cbd43edf71725a606d0ca8f40" name="a4f69d11cbd43edf71725a606d0ca8f40"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4f69d11cbd43edf71725a606d0ca8f40">&#9670;&nbsp;</a></span>operator=() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::operator= </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>s</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Set operator =. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">s</td><td>- Set the string to the string on the right of the equal sign. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a94031269af3c433393d4cf0ff9b4be38" name="a94031269af3c433393d4cf0ff9b4be38"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a94031269af3c433393d4cf0ff9b4be38">&#9670;&nbsp;</a></span>operator==() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbString::operator== </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>s</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>operator == </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">s</td><td>String to compare </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue - Strings match.<br />
+ zbFalse - Strings don't match.<br />
+ </dd></dl>
+
+</div>
+</div>
+<a id="a2df3ed2fc9456214f5fd2fcf77b69bc1" name="a2df3ed2fc9456214f5fd2fcf77b69bc1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2df3ed2fc9456214f5fd2fcf77b69bc1">&#9670;&nbsp;</a></span>operator==() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbString::operator== </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>s</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>operator == </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">s</td><td>String to compare </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue - Strings match.<br />
+ zbFalse - Strings don't match.<br />
+ </dd></dl>
+
+</div>
+</div>
+<a id="ae46f6a45da5686b607a4edf2786a2fff" name="ae46f6a45da5686b607a4edf2786a2fff"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae46f6a45da5686b607a4edf2786a2fff">&#9670;&nbsp;</a></span>operator&gt;()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbString::operator&gt; </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>s</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>operator &gt; </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">s</td><td>String to compare </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue - Left string is greater than the right string.<br />
+ zbFalse - Left string is not greater than the right string.<br />
+ </dd></dl>
+
+</div>
+</div>
+<a id="a8f16643cb7ba3ee9cf685422c9ea0e67" name="a8f16643cb7ba3ee9cf685422c9ea0e67"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8f16643cb7ba3ee9cf685422c9ea0e67">&#9670;&nbsp;</a></span>operator&gt;=()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbString::operator&gt;= </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>s</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>operator &gt;= </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">s</td><td>String to compare </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue - Left string is greater than or equal to the right string.<br />
+ zbFalse - Left string is not greater than or equal to the right string.<br />
+ </dd></dl>
+
+</div>
+</div>
+<a id="a4deaa68d9571753349c29baacb5613e8" name="a4deaa68d9571753349c29baacb5613e8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4deaa68d9571753349c29baacb5613e8">&#9670;&nbsp;</a></span>operator[]() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char &amp; xb::xbString::operator[] </td>
+ <td>(</td>
+ <td class="paramtype">xbInt32&#160;</td>
+ <td class="paramname"><em>n</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>operator [] </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">n</td><td>- Offset into the string of the byte to retrieve. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>c - The character to return from the offset within the [] brackets. </dd></dl>
+
+</div>
+</div>
+<a id="abe45e463226ac8e18550ced18c5a9df3" name="abe45e463226ac8e18550ced18c5a9df3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abe45e463226ac8e18550ced18c5a9df3">&#9670;&nbsp;</a></span>operator[]() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char &amp; xb::xbString::operator[] </td>
+ <td>(</td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>n</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>operator [] </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">n</td><td>- Offset into the string of the byte to retrieve. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>c - The character to return from the offset within the [] brackets. </dd></dl>
+
+</div>
+</div>
+<a id="a6a09cfed22066b0c72432f26960f9e7b" name="a6a09cfed22066b0c72432f26960f9e7b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6a09cfed22066b0c72432f26960f9e7b">&#9670;&nbsp;</a></span>PadLeft()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::PadLeft </td>
+ <td>(</td>
+ <td class="paramtype">char&#160;</td>
+ <td class="paramname"><em>c</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ulNewLen</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Left pad string. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>Padding character. </td></tr>
+ <tr><td class="paramname">ulNewLen</td><td>New string length. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
+
+</div>
+</div>
+<a id="aba13f0c77eb6c4a22996039569fad284" name="aba13f0c77eb6c4a22996039569fad284"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aba13f0c77eb6c4a22996039569fad284">&#9670;&nbsp;</a></span>PadRight()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::PadRight </td>
+ <td>(</td>
+ <td class="paramtype">char&#160;</td>
+ <td class="paramname"><em>c</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ulNewLen</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Right pad string. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>Padding character. </td></tr>
+ <tr><td class="paramname">ulNewLen</td><td>New string length. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
+
+</div>
+</div>
+<a id="a3baf59d15099589ff631995f129e582b" name="a3baf59d15099589ff631995f129e582b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3baf59d15099589ff631995f129e582b">&#9670;&nbsp;</a></span>Pos() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbUInt32 xb::xbString::Pos </td>
+ <td>(</td>
+ <td class="paramtype">char&#160;</td>
+ <td class="paramname"><em>c</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Determine position of a given character. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>Seek character </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Position within string. Returns 0 if not found. </dd></dl>
+
+</div>
+</div>
+<a id="a1b586890138da8bf0e23090bd8b34581" name="a1b586890138da8bf0e23090bd8b34581"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1b586890138da8bf0e23090bd8b34581">&#9670;&nbsp;</a></span>Pos() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbUInt32 xb::xbString::Pos </td>
+ <td>(</td>
+ <td class="paramtype">char&#160;</td>
+ <td class="paramname"><em>c</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ulStartPos</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Determine position of a given character. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>Seek character </td></tr>
+ <tr><td class="paramname">ulStartPos</td><td>starting position for search, first position is 1 </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Position within string. Returns 0 if not found. </dd></dl>
+
+</div>
+</div>
+<a id="a8705d7277b72f5aa98021e84438914da" name="a8705d7277b72f5aa98021e84438914da"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8705d7277b72f5aa98021e84438914da">&#9670;&nbsp;</a></span>Pos() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbUInt32 xb::xbString::Pos </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>s</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Determine position of a given substring. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">s</td><td>Substring </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Position within string. Returns 0 if not found. </dd></dl>
+
+</div>
+</div>
+<a id="a1bae6fa8f608261f6e889616482f6e39" name="a1bae6fa8f608261f6e889616482f6e39"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1bae6fa8f608261f6e889616482f6e39">&#9670;&nbsp;</a></span>PutAt()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::PutAt </td>
+ <td>(</td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ulPos</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char&#160;</td>
+ <td class="paramname"><em>c</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Insert character into string. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ulPos</td><td>Insertion position. </td></tr>
+ <tr><td class="paramname">c</td><td>Character to insert. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
+
+</div>
+</div>
+<a id="afaac65eaa6d9ef1596d6a0e7b91ed0f2" name="afaac65eaa6d9ef1596d6a0e7b91ed0f2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afaac65eaa6d9ef1596d6a0e7b91ed0f2">&#9670;&nbsp;</a></span>Remove()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Remove </td>
+ <td>(</td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ulStartPos</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ulDelSize</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Remove portion of string. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ulStartPos</td><td>Starting position for removal operation. </td></tr>
+ <tr><td class="paramname">ulDelSize</td><td>Size of deletion. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Reference to string. </dd></dl>
+
+</div>
+</div>
+<a id="ac721d643c60b5c5acf60c2bce99596fa" name="ac721d643c60b5c5acf60c2bce99596fa"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac721d643c60b5c5acf60c2bce99596fa">&#9670;&nbsp;</a></span>Replace()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Replace </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>sReplace</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>sReplaceWith</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iOption</em> = <code>0</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Replace a value within a string with another value. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sReplace</td><td>- Character string to replace. </td></tr>
+ <tr><td class="paramname">sReplaceWith</td><td>- Character string to replace with </td></tr>
+ <tr><td class="paramname">iOption</td><td>- 0 = All occurrences, 1 = first occurrence </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
+
+</div>
+</div>
+<a id="aa6d346ab04e5bb8852f0bb996163a35e" name="aa6d346ab04e5bb8852f0bb996163a35e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa6d346ab04e5bb8852f0bb996163a35e">&#9670;&nbsp;</a></span>Resize()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Resize </td>
+ <td>(</td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ulSize</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Resize a string. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ulSize</td><td>- New string size, including null termination byte. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
+
+</div>
+</div>
+<a id="aaf330188d67c347ecae0d16f65b22077" name="aaf330188d67c347ecae0d16f65b22077"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaf330188d67c347ecae0d16f65b22077">&#9670;&nbsp;</a></span>Rtrim()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Rtrim </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Right trim the string. </p>
+<p >This routine removes any trailing white space on the string.</p>
+<dl class="section return"><dt>Returns</dt><dd>Reference to string. </dd></dl>
+
+</div>
+</div>
+<a id="ab85753d2c39882e946a8468cbb587700" name="ab85753d2c39882e946a8468cbb587700"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab85753d2c39882e946a8468cbb587700">&#9670;&nbsp;</a></span>Set() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Set </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>s</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Set the value of the string. </p>
+<p >Note: This routine fails if you try to set the string to itself or some part of itself.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">s</td><td>Value to set the string. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Reference to string. </dd></dl>
+
+</div>
+</div>
+<a id="a6eba6ccd0c805a22516de2c18a30f8a3" name="a6eba6ccd0c805a22516de2c18a30f8a3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6eba6ccd0c805a22516de2c18a30f8a3">&#9670;&nbsp;</a></span>Set() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Set </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>s</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>ulSize</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Set the value of the string. </p>
+<p >Note: This routine fails if you try to set the string to itself or some part of itself.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">s</td><td>Value to set the string. </td></tr>
+ <tr><td class="paramname">ulSize</td><td>Maximum size of resultant string. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Reference to string. </dd></dl>
+
+</div>
+</div>
+<a id="ac0d08bd688fd0e3707e32886d0dfeb09" name="ac0d08bd688fd0e3707e32886d0dfeb09"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac0d08bd688fd0e3707e32886d0dfeb09">&#9670;&nbsp;</a></span>Set() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Set </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>s</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Set the value of the string. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">s</td><td>Value to set the string. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Reference to string. </dd></dl>
+
+</div>
+</div>
+<a id="a3af5b1f111f94b0667551fcbd1d97abd" name="a3af5b1f111f94b0667551fcbd1d97abd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3af5b1f111f94b0667551fcbd1d97abd">&#9670;&nbsp;</a></span>SetNum()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::SetNum </td>
+ <td>(</td>
+ <td class="paramtype">xbInt32&#160;</td>
+ <td class="paramname"><em>lNum</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Set the string to long integer numeric value. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">lNum</td><td>Value to set the string </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
+
+</div>
+</div>
+<a id="a9e9bfa29d86377b915f1628aeb0e9195" name="a9e9bfa29d86377b915f1628aeb0e9195"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9e9bfa29d86377b915f1628aeb0e9195">&#9670;&nbsp;</a></span>Sprintf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Sprintf </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>sFormat</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname"><em>...</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Printf routine for formatting a string. </p>
+<p >See documentation on the standard C printf function for how to use this.</p>
+<p >MyString.Sprintf( "a number %d some text %s", 100, "test text data" );</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sFormat</td><td>A format specifier </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Reference to a formatted string </dd></dl>
+
+</div>
+</div>
+<a id="a6715f4c0010f3ab487c9d787838a29b3" name="a6715f4c0010f3ab487c9d787838a29b3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6715f4c0010f3ab487c9d787838a29b3">&#9670;&nbsp;</a></span>Str()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char * xb::xbString::Str </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return string data. </p>
+<dl class="section return"><dt>Returns</dt><dd>char * to string data or NULL if string is empty </dd></dl>
+
+</div>
+</div>
+<a id="a3bc9e856c34f0c240a6e36e5b6e3ea7b" name="a3bc9e856c34f0c240a6e36e5b6e3ea7b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3bc9e856c34f0c240a6e36e5b6e3ea7b">&#9670;&nbsp;</a></span>strncpy()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char * xb::xbString::strncpy </td>
+ <td>(</td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>cDest</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>n</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Copy all or part of string to character array. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">cDest</td><td>pointer to destination buffer. </td></tr>
+ <tr><td class="paramname">n</td><td>Number of bytest to copy. It is the responsibility of the application to verify the buffer is large enough to hold the string contents. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>char * to result </dd></dl>
+
+</div>
+</div>
+<a id="a054683872e1f05d11c2cf8683a63a6fe" name="a054683872e1f05d11c2cf8683a63a6fe"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a054683872e1f05d11c2cf8683a63a6fe">&#9670;&nbsp;</a></span>SwapChars()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::SwapChars </td>
+ <td>(</td>
+ <td class="paramtype">char&#160;</td>
+ <td class="paramname"><em>cFrom</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char&#160;</td>
+ <td class="paramname"><em>cTo</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Swap characters. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">cFrom</td><td>character to replace. </td></tr>
+ <tr><td class="paramname">cTo</td><td>character to replace with. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
+
+</div>
+</div>
+<a id="a602cac1a6ef3f6b52f587ac4c0ef4fb2" name="a602cac1a6ef3f6b52f587ac4c0ef4fb2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a602cac1a6ef3f6b52f587ac4c0ef4fb2">&#9670;&nbsp;</a></span>ToLowerCase()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::ToLowerCase </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Replace all upper case charaters with lower case characters. </p>
+<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
+
+</div>
+</div>
+<a id="a68001d0a44e6b4fe61e29a4e41ded9d4" name="a68001d0a44e6b4fe61e29a4e41ded9d4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a68001d0a44e6b4fe61e29a4e41ded9d4">&#9670;&nbsp;</a></span>ToUpperCase()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::ToUpperCase </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Replace all lower case charaters with lower case characters. </p>
+<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
+
+</div>
+</div>
+<a id="abc9bd33687d4e03ca52d77885721d626" name="abc9bd33687d4e03ca52d77885721d626"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abc9bd33687d4e03ca52d77885721d626">&#9670;&nbsp;</a></span>Trim()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Trim </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Trim all leading and trailing white space from string. </p>
+<dl class="section return"><dt>Returns</dt><dd>Reference to string. </dd></dl>
+
+</div>
+</div>
+<a id="a72b16c15fd8822efaa5f158c34df7b1e" name="a72b16c15fd8822efaa5f158c34df7b1e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a72b16c15fd8822efaa5f158c34df7b1e">&#9670;&nbsp;</a></span>ValidLogicalValue()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbString::ValidLogicalValue </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Check for valid logical field data. </p>
+<p >Valid logical data is one 'T', 'F', 'N' or 'Y'.<br />
+</p>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue if the data is valid logical data.<br />
+ xbFalse if not valid logical data. </dd></dl>
+
+</div>
+</div>
+<a id="aeed920d2a25111f776ddde2d530eb81b" name="aeed920d2a25111f776ddde2d530eb81b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aeed920d2a25111f776ddde2d530eb81b">&#9670;&nbsp;</a></span>ValidNumericValue()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbString::ValidNumericValue </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>This function returns true if the data is valid numeric data. </p>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue if valid numeric data.<br />
+ xbFalse if not valid numeric daata. </dd></dl>
+
+</div>
+</div>
+<a id="a2fd30956a26a260d1ef6fdbe73dd93f9" name="a2fd30956a26a260d1ef6fdbe73dd93f9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2fd30956a26a260d1ef6fdbe73dd93f9">&#9670;&nbsp;</a></span>ZapChar()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::ZapChar </td>
+ <td>(</td>
+ <td class="paramtype">char&#160;</td>
+ <td class="paramname"><em>c</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Remove every instance of a character from a string. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>character to remove from string. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Reference to this stirng.void </dd></dl>
+
+</div>
+</div>
+<a id="addc3a470f6cd85d4c21bf9da38cf5ac9" name="addc3a470f6cd85d4c21bf9da38cf5ac9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#addc3a470f6cd85d4c21bf9da38cf5ac9">&#9670;&nbsp;</a></span>ZapLeadingChar()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::ZapLeadingChar </td>
+ <td>(</td>
+ <td class="paramtype">char&#160;</td>
+ <td class="paramname"><em>c</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Remove leading character from a string. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>character to remove from beginning of string. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
+
+</div>
+</div>
+<a id="afe3415bfa2e1089b792aeda0462fb99e" name="afe3415bfa2e1089b792aeda0462fb99e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afe3415bfa2e1089b792aeda0462fb99e">&#9670;&nbsp;</a></span>ZapTrailingChar()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::ZapTrailingChar </td>
+ <td>(</td>
+ <td class="paramtype">char&#160;</td>
+ <td class="paramname"><em>c</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Remove trailing character from a string. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>character to remove from ending of string. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
+
+</div>
+</div>
+<h2 class="groupheader">Friends And Related Function Documentation</h2>
+<a id="a3fa915061156521e9dd772a8d7e5f8fb" name="a3fa915061156521e9dd772a8d7e5f8fb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3fa915061156521e9dd772a8d7e5f8fb">&#9670;&nbsp;</a></span>operator&lt;&lt;</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::ostream &amp; operator&lt;&lt; </td>
+ <td>(</td>
+ <td class="paramtype">std::ostream &amp;&#160;</td>
+ <td class="paramname"><em>os</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>s</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">friend</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Stream insertion operator &lt;&lt;. </p>
+<p >std::cout &lt;&lt; MyString &lt;&lt; std::endl;</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">os</td><td>Output stream </td></tr>
+ <tr><td class="paramname">s</td><td>String to send to output stream </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>/mnt/1Tdata/xbase/xbase64-4.1.4/src/include/<a class="el" href="xbstring_8h_source.html">xbstring.h</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.1.4/src/core/<a class="el" href="xbstring_8cpp.html">xbstring.cpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbTblMgr.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbTblMgr.html
new file mode 100644
index 0000000..984ddf4
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbTblMgr.html
@@ -0,0 +1,1202 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: xb::xbTblMgr Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="namespacexb.html">xb</a></li><li class="navelem"><a class="el" href="classxb_1_1xbTblMgr.html">xbTblMgr</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-static-attribs">Static Public Attributes</a> &#124;
+<a href="#pro-methods">Protected Member Functions</a> &#124;
+<a href="#pro-static-attribs">Static Protected Attributes</a> </div>
+ <div class="headertitle"><div class="title">xb::xbTblMgr Class Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="xbtblmgr_8h_source.html">xbtblmgr.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for xb::xbTblMgr:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="classxb_1_1xbTblMgr.png" usemap="#xb::xbTblMgr_map" alt=""/>
+ <map id="xb::xbTblMgr_map" name="xb::xbTblMgr_map">
+<area href="classxb_1_1xbSsv.html" title="Class for handling shared system variables." alt="xb::xbSsv" shape="rect" coords="0,0,84,24"/>
+<area href="classxb_1_1xbXBase.html" title="xbXbase class." alt="xb::xbXBase" shape="rect" coords="0,112,84,136"/>
+ </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:aad83f5ecc184ca6cbdfc6f356b598d6c"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#aad83f5ecc184ca6cbdfc6f356b598d6c">xbTblMgr</a> ()</td></tr>
+<tr class="separator:aad83f5ecc184ca6cbdfc6f356b598d6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aad6be32d7b3378c71d47fa27ebfe6cbf"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#aad6be32d7b3378c71d47fa27ebfe6cbf">~xbTblMgr</a> ()</td></tr>
+<tr class="separator:aad6be32d7b3378c71d47fa27ebfe6cbf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af16832ff2bfaee09265652e0fc03709a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#af16832ff2bfaee09265652e0fc03709a">AddTblToTblList</a> (<a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *d, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFqTblName)</td></tr>
+<tr class="separator:af16832ff2bfaee09265652e0fc03709a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2033188e9b08778188a034a6fc90ca85"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#a2033188e9b08778188a034a6fc90ca85">AddTblToTblList</a> (<a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *d, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFqTblName, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTblAlias)</td></tr>
+<tr class="separator:a2033188e9b08778188a034a6fc90ca85"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5eebffb9e8cc64141e35c2622045cb50"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#a5eebffb9e8cc64141e35c2622045cb50">DisplayTableList</a> () const</td></tr>
+<tr class="separator:a5eebffb9e8cc64141e35c2622045cb50"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad8a5d28a2ee6720a9aa74bcb45662cf5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#ad8a5d28a2ee6720a9aa74bcb45662cf5">GetDbfPtr</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTblAlias) const</td></tr>
+<tr class="separator:ad8a5d28a2ee6720a9aa74bcb45662cf5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a801dfecf7fc216954b4197b2c31b25d6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#a801dfecf7fc216954b4197b2c31b25d6">GetDbfPtr</a> (xbInt16 sItemNo) const</td></tr>
+<tr class="separator:a801dfecf7fc216954b4197b2c31b25d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acbf148ddba4297021cfb980a161ebef9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structxb_1_1xbTblList.html">xbTblList</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#acbf148ddba4297021cfb980a161ebef9">GetTblListEntry</a> (<a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *d)</td></tr>
+<tr class="separator:acbf148ddba4297021cfb980a161ebef9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad0d2d4adabc0dc0e761cfdee63c84069"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#ad0d2d4adabc0dc0e761cfdee63c84069">GetOpenTableCount</a> () const</td></tr>
+<tr class="separator:ad0d2d4adabc0dc0e761cfdee63c84069"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac8eaef41acf08911b90f900aac8e70af"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#ac8eaef41acf08911b90f900aac8e70af">RemoveTblFromTblList</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTblAlias)</td></tr>
+<tr class="separator:ac8eaef41acf08911b90f900aac8e70af"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3d82b6e73d5c0bc8cac22b9a260389c1"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#a3d82b6e73d5c0bc8cac22b9a260389c1">RemoveTblFromTblList</a> (<a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *d)</td></tr>
+<tr class="separator:a3d82b6e73d5c0bc8cac22b9a260389c1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a97dfa59ab9a8e9f17454da0faceb023d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a97dfa59ab9a8e9f17454da0faceb023d">DisplayError</a> (xbInt16 ErrorCode) const</td></tr>
+<tr class="memdesc:a97dfa59ab9a8e9f17454da0faceb023d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Display error message on console for a given error number. <a href="classxb_1_1xbSsv.html#a97dfa59ab9a8e9f17454da0faceb023d">More...</a><br /></td></tr>
+<tr class="separator:a97dfa59ab9a8e9f17454da0faceb023d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6fbb9c3a550ab0b3378f9586a57791d2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a6fbb9c3a550ab0b3378f9586a57791d2">GetDefaultDateFormat</a> () const</td></tr>
+<tr class="memdesc:a6fbb9c3a550ab0b3378f9586a57791d2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the default date format. <a href="classxb_1_1xbSsv.html#a6fbb9c3a550ab0b3378f9586a57791d2">More...</a><br /></td></tr>
+<tr class="separator:a6fbb9c3a550ab0b3378f9586a57791d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">GetDataDirectory</a> () const</td></tr>
+<tr class="memdesc:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current data directory. <a href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">More...</a><br /></td></tr>
+<tr class="separator:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abfaeef85935331073d213465bb362a61"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abfaeef85935331073d213465bb362a61">GetTempDirectory</a> () const</td></tr>
+<tr class="memdesc:abfaeef85935331073d213465bb362a61"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current temp directory. <a href="classxb_1_1xbSsv.html#abfaeef85935331073d213465bb362a61">More...</a><br /></td></tr>
+<tr class="separator:abfaeef85935331073d213465bb362a61"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">GetHomeDir</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sHomeDirOut)</td></tr>
+<tr class="memdesc:abc9c06c95d71fbad8294e1ae8862cea9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get home directory. <a href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">More...</a><br /></td></tr>
+<tr class="separator:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a49cd162f066eef2b829ba7c9f6620243"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">GetEndianType</a> () const</td></tr>
+<tr class="memdesc:a49cd162f066eef2b829ba7c9f6620243"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the Endian type. <a href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">More...</a><br /></td></tr>
+<tr class="separator:a49cd162f066eef2b829ba7c9f6620243"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a56961d2a67b8e7470098626ac4dac7e4"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">GetErrorMessage</a> (xbInt16 ErrorCode) const</td></tr>
+<tr class="memdesc:a56961d2a67b8e7470098626ac4dac7e4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get an error message. <a href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">More...</a><br /></td></tr>
+<tr class="separator:a56961d2a67b8e7470098626ac4dac7e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a63cee13b473ee13970e93b11837b9e35"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a63cee13b473ee13970e93b11837b9e35">GetPathSeparator</a> () const</td></tr>
+<tr class="memdesc:a63cee13b473ee13970e93b11837b9e35"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the OS dependent path separator. <a href="classxb_1_1xbSsv.html#a63cee13b473ee13970e93b11837b9e35">More...</a><br /></td></tr>
+<tr class="separator:a63cee13b473ee13970e93b11837b9e35"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">SetDataDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDataDirectory)</td></tr>
+<tr class="memdesc:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the data directory. <a href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">More...</a><br /></td></tr>
+<tr class="separator:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5f74db23f8902846d581935c7db73f9c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">SetDefaultDateFormat</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDefaultDateFormat)</td></tr>
+<tr class="memdesc:a5f74db23f8902846d581935c7db73f9c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the default date format. <a href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">More...</a><br /></td></tr>
+<tr class="separator:a5f74db23f8902846d581935c7db73f9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a17c229a20ef9ab4034df8f9cd657adb2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a17c229a20ef9ab4034df8f9cd657adb2">SetTempDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTempDirectory)</td></tr>
+<tr class="memdesc:a17c229a20ef9ab4034df8f9cd657adb2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the temp directory. <a href="classxb_1_1xbSsv.html#a17c229a20ef9ab4034df8f9cd657adb2">More...</a><br /></td></tr>
+<tr class="separator:a17c229a20ef9ab4034df8f9cd657adb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a62e4fd0a5888665c76bbbad962794e72"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72">BitSet</a> (unsigned char c, xbInt16 iBitNo) const</td></tr>
+<tr class="memdesc:a62e4fd0a5888665c76bbbad962794e72"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check a bit in a one byte field and see if it is set. <a href="classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72">More...</a><br /></td></tr>
+<tr class="separator:a62e4fd0a5888665c76bbbad962794e72"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8551b15a3ce4fa2a40d698db01f4a9ae"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a8551b15a3ce4fa2a40d698db01f4a9ae">BitDump</a> (unsigned char c) const</td></tr>
+<tr class="separator:a8551b15a3ce4fa2a40d698db01f4a9ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aba1395b8e4c7f28c3614061de6e49190"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#aba1395b8e4c7f28c3614061de6e49190">BitDump</a> (char c) const</td></tr>
+<tr class="separator:aba1395b8e4c7f28c3614061de6e49190"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6982f973e81587b04916f4509746aaf5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a6982f973e81587b04916f4509746aaf5">GetDefaultAutoCommit</a> () const</td></tr>
+<tr class="memdesc:a6982f973e81587b04916f4509746aaf5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the default auto commit setting. <a href="classxb_1_1xbSsv.html#a6982f973e81587b04916f4509746aaf5">More...</a><br /></td></tr>
+<tr class="separator:a6982f973e81587b04916f4509746aaf5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">SetDefaultAutoCommit</a> (<a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bDefaultAutoCommit)</td></tr>
+<tr class="memdesc:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the default auto commit. <a href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">More...</a><br /></td></tr>
+<tr class="separator:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4822315bded3969b59aeeb683c373051"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a4822315bded3969b59aeeb683c373051">GetLogDirectory</a> () const</td></tr>
+<tr class="separator:a4822315bded3969b59aeeb683c373051"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afaef09435be73b3111f5edbd7091d861"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#afaef09435be73b3111f5edbd7091d861">GetLogFileName</a> () const</td></tr>
+<tr class="separator:afaef09435be73b3111f5edbd7091d861"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7b992ed97281bf25b5b66f5df686225e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a7b992ed97281bf25b5b66f5df686225e">SetLogDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLogDirectory)</td></tr>
+<tr class="separator:a7b992ed97281bf25b5b66f5df686225e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7f05738e7dfd759e89990242ef503544"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a7f05738e7dfd759e89990242ef503544">SetLogFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLogFileName)</td></tr>
+<tr class="separator:a7f05738e7dfd759e89990242ef503544"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">GetMultiUser</a> () const</td></tr>
+<tr class="memdesc:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the multi user setting. <a href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">More...</a><br /></td></tr>
+<tr class="separator:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aba6e59512f7172dd55dcf92059e5928c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#aba6e59512f7172dd55dcf92059e5928c">SetMultiUser</a> (<a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bMultiUser)</td></tr>
+<tr class="memdesc:aba6e59512f7172dd55dcf92059e5928c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the multi user setting. <a href="classxb_1_1xbSsv.html#aba6e59512f7172dd55dcf92059e5928c">More...</a><br /></td></tr>
+<tr class="separator:aba6e59512f7172dd55dcf92059e5928c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-static-attribs" name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:a6219f1b5e24ea12fe158cd5aea56988e"><td class="memItemLeft" align="right" valign="top">static const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a6219f1b5e24ea12fe158cd5aea56988e">ErrorCodeText</a> []</td></tr>
+<tr class="separator:a6219f1b5e24ea12fe158cd5aea56988e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-methods" name="pro-methods"></a>
+Protected Member Functions</h2></td></tr>
+<tr class="memitem:a904ec348fd029d4a76e72b8fde636108"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a904ec348fd029d4a76e72b8fde636108">SetEndianType</a> ()</td></tr>
+<tr class="memdesc:a904ec348fd029d4a76e72b8fde636108"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the endian type. <a href="classxb_1_1xbSsv.html#a904ec348fd029d4a76e72b8fde636108">More...</a><br /></td></tr>
+<tr class="separator:a904ec348fd029d4a76e72b8fde636108"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-static-attribs" name="pro-static-attribs"></a>
+Static Protected Attributes</h2></td></tr>
+<tr class="memitem:a5849e813f5e8e1cd180f0366637adbf3"><td class="memItemLeft" align="right" valign="top">static xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a5849e813f5e8e1cd180f0366637adbf3">iEndianType</a> = 0</td></tr>
+<tr class="separator:a5849e813f5e8e1cd180f0366637adbf3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9dec3164c3b264882df634915ecf21da"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classxb_1_1xbString.html">xbString</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a9dec3164c3b264882df634915ecf21da">sNullString</a> = &quot;&quot;</td></tr>
+<tr class="separator:a9dec3164c3b264882df634915ecf21da"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="aad83f5ecc184ca6cbdfc6f356b598d6c" name="aad83f5ecc184ca6cbdfc6f356b598d6c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aad83f5ecc184ca6cbdfc6f356b598d6c">&#9670;&nbsp;</a></span>xbTblMgr()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xb::xbTblMgr::xbTblMgr </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aad6be32d7b3378c71d47fa27ebfe6cbf" name="aad6be32d7b3378c71d47fa27ebfe6cbf"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aad6be32d7b3378c71d47fa27ebfe6cbf">&#9670;&nbsp;</a></span>~xbTblMgr()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xb::xbTblMgr::~xbTblMgr </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="af16832ff2bfaee09265652e0fc03709a" name="af16832ff2bfaee09265652e0fc03709a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af16832ff2bfaee09265652e0fc03709a">&#9670;&nbsp;</a></span>AddTblToTblList() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbTblMgr::AddTblToTblList </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td>
+ <td class="paramname"><em>d</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFqTblName</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2033188e9b08778188a034a6fc90ca85" name="a2033188e9b08778188a034a6fc90ca85"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2033188e9b08778188a034a6fc90ca85">&#9670;&nbsp;</a></span>AddTblToTblList() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbTblMgr::AddTblToTblList </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td>
+ <td class="paramname"><em>d</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFqTblName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sTblAlias</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aba1395b8e4c7f28c3614061de6e49190" name="aba1395b8e4c7f28c3614061de6e49190"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aba1395b8e4c7f28c3614061de6e49190">&#9670;&nbsp;</a></span>BitDump() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::BitDump </td>
+ <td>(</td>
+ <td class="paramtype">char&#160;</td>
+ <td class="paramname"><em>c</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8551b15a3ce4fa2a40d698db01f4a9ae" name="a8551b15a3ce4fa2a40d698db01f4a9ae"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8551b15a3ce4fa2a40d698db01f4a9ae">&#9670;&nbsp;</a></span>BitDump() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::BitDump </td>
+ <td>(</td>
+ <td class="paramtype">unsigned char&#160;</td>
+ <td class="paramname"><em>c</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a62e4fd0a5888665c76bbbad962794e72" name="a62e4fd0a5888665c76bbbad962794e72"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a62e4fd0a5888665c76bbbad962794e72">&#9670;&nbsp;</a></span>BitSet()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbSsv::BitSet </td>
+ <td>(</td>
+ <td class="paramtype">unsigned char&#160;</td>
+ <td class="paramname"><em>c</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iBitNo</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Check a bit in a one byte field and see if it is set. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>One byte char field to examine. </td></tr>
+ <tr><td class="paramname">iBitNo</td><td>which bit to examine. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue Bit is set<br />
+ xbFalse Bit is not set </dd></dl>
+
+</div>
+</div>
+<a id="a97dfa59ab9a8e9f17454da0faceb023d" name="a97dfa59ab9a8e9f17454da0faceb023d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a97dfa59ab9a8e9f17454da0faceb023d">&#9670;&nbsp;</a></span>DisplayError()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::DisplayError </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iErrorCode</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Display error message on console for a given error number. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iErrorCode</td><td>Error number to reference </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a5eebffb9e8cc64141e35c2622045cb50" name="a5eebffb9e8cc64141e35c2622045cb50"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5eebffb9e8cc64141e35c2622045cb50">&#9670;&nbsp;</a></span>DisplayTableList()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbTblMgr::DisplayTableList </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1d803a4bfc8ba0561267a0bf9e51f7d9" name="a1d803a4bfc8ba0561267a0bf9e51f7d9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1d803a4bfc8ba0561267a0bf9e51f7d9">&#9670;&nbsp;</a></span>GetDataDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetDataDirectory </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the current data directory. </p>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing the current data directory where the database files are stored. </dd></dl>
+
+</div>
+</div>
+<a id="ad8a5d28a2ee6720a9aa74bcb45662cf5" name="ad8a5d28a2ee6720a9aa74bcb45662cf5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad8a5d28a2ee6720a9aa74bcb45662cf5">&#9670;&nbsp;</a></span>GetDbfPtr() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> * xb::xbTblMgr::GetDbfPtr </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sTblAlias</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a801dfecf7fc216954b4197b2c31b25d6" name="a801dfecf7fc216954b4197b2c31b25d6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a801dfecf7fc216954b4197b2c31b25d6">&#9670;&nbsp;</a></span>GetDbfPtr() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> * xb::xbTblMgr::GetDbfPtr </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>sItemNo</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6982f973e81587b04916f4509746aaf5" name="a6982f973e81587b04916f4509746aaf5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6982f973e81587b04916f4509746aaf5">&#9670;&nbsp;</a></span>GetDefaultAutoCommit()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbSsv::GetDefaultAutoCommit </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the default auto commit setting. </p>
+<p >When auto commit is enabled, the library will automatically post any updates when moving off an updated record or closing files. If auto commit is disabled, the application program will need to explicitly update the tables using using dbf-&gt;Put() and dbf-&gt;AppendRecord().</p>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue if auto commit is turned on<br />
+ xbFalse is auto commit is turned off </dd></dl>
+
+</div>
+</div>
+<a id="a6fbb9c3a550ab0b3378f9586a57791d2" name="a6fbb9c3a550ab0b3378f9586a57791d2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6fbb9c3a550ab0b3378f9586a57791d2">&#9670;&nbsp;</a></span>GetDefaultDateFormat()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetDefaultDateFormat </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the default date format. </p>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing the default date format. </dd></dl>
+
+</div>
+</div>
+<a id="a49cd162f066eef2b829ba7c9f6620243" name="a49cd162f066eef2b829ba7c9f6620243"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a49cd162f066eef2b829ba7c9f6620243">&#9670;&nbsp;</a></span>GetEndianType()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbSsv::GetEndianType </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the Endian type. </p>
+<dl class="section return"><dt>Returns</dt><dd>B - Big endian<br />
+ L - Little endian<br />
+ </dd></dl>
+
+</div>
+</div>
+<a id="a56961d2a67b8e7470098626ac4dac7e4" name="a56961d2a67b8e7470098626ac4dac7e4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a56961d2a67b8e7470098626ac4dac7e4">&#9670;&nbsp;</a></span>GetErrorMessage()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char * xb::xbSsv::GetErrorMessage </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iErrorCode</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get an error message. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iErrorCode</td><td>ErrorCode is the error number of description to be returned. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Returns a pointer to a string containing a text description for the error code. </dd></dl>
+
+</div>
+</div>
+<a id="abc9c06c95d71fbad8294e1ae8862cea9" name="abc9c06c95d71fbad8294e1ae8862cea9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abc9c06c95d71fbad8294e1ae8862cea9">&#9670;&nbsp;</a></span>GetHomeDir()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::GetHomeDir </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sHomeDirOut</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get home directory. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sHomeDirOut</td><td>- Output home directory for current user. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a4822315bded3969b59aeeb683c373051" name="a4822315bded3969b59aeeb683c373051"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4822315bded3969b59aeeb683c373051">&#9670;&nbsp;</a></span>GetLogDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetLogDirectory </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="afaef09435be73b3111f5edbd7091d861" name="afaef09435be73b3111f5edbd7091d861"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afaef09435be73b3111f5edbd7091d861">&#9670;&nbsp;</a></span>GetLogFileName()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetLogFileName </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abd58031c5f1c3766c24d47a82e6fd9c5" name="abd58031c5f1c3766c24d47a82e6fd9c5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abd58031c5f1c3766c24d47a82e6fd9c5">&#9670;&nbsp;</a></span>GetMultiUser()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbSsv::GetMultiUser </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the multi user setting. </p>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue - Multi user mode turned on.<br />
+ xbFalse - Multi user mode turned off.<br />
+ </dd></dl>
+
+</div>
+</div>
+<a id="ad0d2d4adabc0dc0e761cfdee63c84069" name="ad0d2d4adabc0dc0e761cfdee63c84069"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad0d2d4adabc0dc0e761cfdee63c84069">&#9670;&nbsp;</a></span>GetOpenTableCount()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbTblMgr::GetOpenTableCount </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a63cee13b473ee13970e93b11837b9e35" name="a63cee13b473ee13970e93b11837b9e35"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a63cee13b473ee13970e93b11837b9e35">&#9670;&nbsp;</a></span>GetPathSeparator()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">char xb::xbSsv::GetPathSeparator </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the OS dependent path separator. </p>
+<dl class="section return"><dt>Returns</dt><dd>Returns '\' for windows environment, otherwise returns '/'. </dd></dl>
+
+</div>
+</div>
+<a id="acbf148ddba4297021cfb980a161ebef9" name="acbf148ddba4297021cfb980a161ebef9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acbf148ddba4297021cfb980a161ebef9">&#9670;&nbsp;</a></span>GetTblListEntry()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structxb_1_1xbTblList.html">xbTblList</a> * xb::xbTblMgr::GetTblListEntry </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td>
+ <td class="paramname"><em>d</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abfaeef85935331073d213465bb362a61" name="abfaeef85935331073d213465bb362a61"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abfaeef85935331073d213465bb362a61">&#9670;&nbsp;</a></span>GetTempDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetTempDirectory </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the current temp directory. </p>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing the current data directory where the database files are stored. </dd></dl>
+
+</div>
+</div>
+<a id="ac8eaef41acf08911b90f900aac8e70af" name="ac8eaef41acf08911b90f900aac8e70af"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac8eaef41acf08911b90f900aac8e70af">&#9670;&nbsp;</a></span>RemoveTblFromTblList() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbTblMgr::RemoveTblFromTblList </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sTblAlias</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3d82b6e73d5c0bc8cac22b9a260389c1" name="a3d82b6e73d5c0bc8cac22b9a260389c1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3d82b6e73d5c0bc8cac22b9a260389c1">&#9670;&nbsp;</a></span>RemoveTblFromTblList() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbTblMgr::RemoveTblFromTblList </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td>
+ <td class="paramname"><em>d</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a57caaaadfbd089d9a58ecfcb50c88a6c" name="a57caaaadfbd089d9a58ecfcb50c88a6c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a57caaaadfbd089d9a58ecfcb50c88a6c">&#9670;&nbsp;</a></span>SetDataDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetDataDirectory </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sDataDirectory</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Set the data directory. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sDataDirectory</td><td>Set the data directory. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a25542afadaaf39b4fb5a1772a29cc0bd" name="a25542afadaaf39b4fb5a1772a29cc0bd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a25542afadaaf39b4fb5a1772a29cc0bd">&#9670;&nbsp;</a></span>SetDefaultAutoCommit()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetDefaultAutoCommit </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td>
+ <td class="paramname"><em>bDefaultAutoCommit</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Set the default auto commit. </p>
+<p >Disabling auto commit requires the application execute explicit updates using dbf-&gt;Put() and dbf-&gt;AppendRecord(). With auto commit on, the library posts updates automatically when moving off the current record or closing a file.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">bDefaultAutoCommit</td><td>xbTrue - Enable default auto commit.<br />
+ xbFalse - Disable default auto commit.<br />
+ </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a5f74db23f8902846d581935c7db73f9c" name="a5f74db23f8902846d581935c7db73f9c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5f74db23f8902846d581935c7db73f9c">&#9670;&nbsp;</a></span>SetDefaultDateFormat()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetDefaultDateFormat </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sDefaultDateFormat</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Set the default date format. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sDefaultDateFormat</td><td>Set the default date format. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a904ec348fd029d4a76e72b8fde636108" name="a904ec348fd029d4a76e72b8fde636108"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a904ec348fd029d4a76e72b8fde636108">&#9670;&nbsp;</a></span>SetEndianType()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetEndianType </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Set the endian type. </p>
+<p >This routine determines the Endian-ness at run time instead of compile time as some processers (ie; Sparc,ARM) can be switched either way. This routine is called automatically by the library at startup and does not need to be called in an application program. </p>
+
+</div>
+</div>
+<a id="a7b992ed97281bf25b5b66f5df686225e" name="a7b992ed97281bf25b5b66f5df686225e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7b992ed97281bf25b5b66f5df686225e">&#9670;&nbsp;</a></span>SetLogDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetLogDirectory </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sLogDirectory</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7f05738e7dfd759e89990242ef503544" name="a7f05738e7dfd759e89990242ef503544"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7f05738e7dfd759e89990242ef503544">&#9670;&nbsp;</a></span>SetLogFileName()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetLogFileName </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sLogFileName</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aba6e59512f7172dd55dcf92059e5928c" name="aba6e59512f7172dd55dcf92059e5928c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aba6e59512f7172dd55dcf92059e5928c">&#9670;&nbsp;</a></span>SetMultiUser()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetMultiUser </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td>
+ <td class="paramname"><em>bMultiUser</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the multi user setting. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">bMultiUser</td><td>xbTrue - Turn on Multi user mode.<br />
+ xbFalse - Turn off Multi user mode.<br />
+ </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a17c229a20ef9ab4034df8f9cd657adb2" name="a17c229a20ef9ab4034df8f9cd657adb2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a17c229a20ef9ab4034df8f9cd657adb2">&#9670;&nbsp;</a></span>SetTempDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetTempDirectory </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sTempDirectory</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Set the temp directory. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sTempDirectory</td><td>Set the data direcroty. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<h2 class="groupheader">Field Documentation</h2>
+<a id="a6219f1b5e24ea12fe158cd5aea56988e" name="a6219f1b5e24ea12fe158cd5aea56988e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6219f1b5e24ea12fe158cd5aea56988e">&#9670;&nbsp;</a></span>ErrorCodeText</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* xb::xbSsv::ErrorCodeText[]</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5849e813f5e8e1cd180f0366637adbf3" name="a5849e813f5e8e1cd180f0366637adbf3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5849e813f5e8e1cd180f0366637adbf3">&#9670;&nbsp;</a></span>iEndianType</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbSsv::iEndianType = 0</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">protected</span><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9dec3164c3b264882df634915ecf21da" name="a9dec3164c3b264882df634915ecf21da"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9dec3164c3b264882df634915ecf21da">&#9670;&nbsp;</a></span>sNullString</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> xb::xbSsv::sNullString = &quot;&quot;</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">protected</span><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>/mnt/1Tdata/xbase/xbase64-4.1.4/src/include/<a class="el" href="xbtblmgr_8h_source.html">xbtblmgr.h</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.1.4/src/core/<a class="el" href="xbtblmgr_8cpp.html">xbtblmgr.cpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/docs/doxygen/html/classxb_1_1xbTblMgr.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbTblMgr.png
index 2e50067..2e50067 100644
--- a/docs/doxygen/html/classxb_1_1xbTblMgr.png
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbTblMgr.png
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbXBase.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbXBase.html
new file mode 100644
index 0000000..246fcaa
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbXBase.html
@@ -0,0 +1,2047 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: xb::xbXBase Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="namespacexb.html">xb</a></li><li class="navelem"><a class="el" href="classxb_1_1xbXBase.html">xbXBase</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-static-attribs">Static Public Attributes</a> &#124;
+<a href="#pro-methods">Protected Member Functions</a> &#124;
+<a href="#pro-static-methods">Static Protected Member Functions</a> &#124;
+<a href="#pro-static-attribs">Static Protected Attributes</a> &#124;
+<a href="#friends">Friends</a> </div>
+ <div class="headertitle"><div class="title">xb::xbXBase Class Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>xbXbase class.
+ <a href="classxb_1_1xbXBase.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="xbxbase_8h_source.html">xbxbase.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for xb::xbXBase:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="classxb_1_1xbXBase.png" usemap="#xb::xbXBase_map" alt=""/>
+ <map id="xb::xbXBase_map" name="xb::xbXBase_map">
+<area href="classxb_1_1xbTblMgr.html" alt="xb::xbTblMgr" shape="rect" coords="0,56,84,80"/>
+<area href="classxb_1_1xbSsv.html" title="Class for handling shared system variables." alt="xb::xbSsv" shape="rect" coords="0,0,84,24"/>
+ </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a6c68588e33946fb5416af3f86fe83224"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#a6c68588e33946fb5416af3f86fe83224">xbXBase</a> ()</td></tr>
+<tr class="memdesc:a6c68588e33946fb5416af3f86fe83224"><td class="mdescLeft">&#160;</td><td class="mdescRight">Class Constructor. <a href="classxb_1_1xbXBase.html#a6c68588e33946fb5416af3f86fe83224">More...</a><br /></td></tr>
+<tr class="separator:a6c68588e33946fb5416af3f86fe83224"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a204f8634894ac2066d3209117803306d"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#a204f8634894ac2066d3209117803306d">~xbXBase</a> ()</td></tr>
+<tr class="memdesc:a204f8634894ac2066d3209117803306d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Class Deconstructor. <a href="classxb_1_1xbXBase.html#a204f8634894ac2066d3209117803306d">More...</a><br /></td></tr>
+<tr class="separator:a204f8634894ac2066d3209117803306d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afccb552ca0daff779c0500ff20d22c2b"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#afccb552ca0daff779c0500ff20d22c2b">CloseAllTables</a> ()</td></tr>
+<tr class="memdesc:afccb552ca0daff779c0500ff20d22c2b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Close all tables / files. <a href="classxb_1_1xbXBase.html#afccb552ca0daff779c0500ff20d22c2b">More...</a><br /></td></tr>
+<tr class="separator:afccb552ca0daff779c0500ff20d22c2b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa41240d920b604dcbd91dce7eecb78e1"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#aa41240d920b604dcbd91dce7eecb78e1">CreateFqn</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDirIn, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sNameIn, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sExtIn, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFqfnOut)</td></tr>
+<tr class="memdesc:aa41240d920b604dcbd91dce7eecb78e1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Fully qualified file name from a directory, filename and extension. <a href="classxb_1_1xbXBase.html#aa41240d920b604dcbd91dce7eecb78e1">More...</a><br /></td></tr>
+<tr class="separator:aa41240d920b604dcbd91dce7eecb78e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae357fac4fdebdf49e46563cf611caf65"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#ae357fac4fdebdf49e46563cf611caf65">DisableMsgLogging</a> ()</td></tr>
+<tr class="separator:ae357fac4fdebdf49e46563cf611caf65"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a470e6eb0ed0be60338f9b40976d3ad48"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#a470e6eb0ed0be60338f9b40976d3ad48">EnableMsgLogging</a> ()</td></tr>
+<tr class="separator:a470e6eb0ed0be60338f9b40976d3ad48"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5a5ecaed9777978344902446c9ae3b8e"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#a5a5ecaed9777978344902446c9ae3b8e">FlushLog</a> ()</td></tr>
+<tr class="separator:a5a5ecaed9777978344902446c9ae3b8e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab5d63cd7d9137eba8a1d4d9c3df522b7"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#ab5d63cd7d9137eba8a1d4d9c3df522b7">GetLogFqFileName</a> () const</td></tr>
+<tr class="separator:ab5d63cd7d9137eba8a1d4d9c3df522b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ade34cd72c2a7e70fb55429a8a6f6c028"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#ade34cd72c2a7e70fb55429a8a6f6c028">GetLogStatus</a> () const</td></tr>
+<tr class="separator:ade34cd72c2a7e70fb55429a8a6f6c028"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa957eb502ecd076e5df89e7415cb094b"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#aa957eb502ecd076e5df89e7415cb094b">OpenHighestVersion</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sAlias, <a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> &amp;dbf, int dummy)</td></tr>
+<tr class="separator:aa957eb502ecd076e5df89e7415cb094b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afa7bbac08a4601f49cd53b457196ee0e"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#afa7bbac08a4601f49cd53b457196ee0e">OpenHighestVersion</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sAlias, <a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> **dbf)</td></tr>
+<tr class="separator:afa7bbac08a4601f49cd53b457196ee0e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aafb1abd6b6124cddf635adaf9f615a4a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#aafb1abd6b6124cddf635adaf9f615a4a">Open</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, xbInt16 &amp;iRc)</td></tr>
+<tr class="memdesc:aafb1abd6b6124cddf635adaf9f615a4a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Open highest qualified class available for dbf file. <a href="classxb_1_1xbXBase.html#aafb1abd6b6124cddf635adaf9f615a4a">More...</a><br /></td></tr>
+<tr class="separator:aafb1abd6b6124cddf635adaf9f615a4a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab35cec5ac8f0fa95f10653ca7ac817f6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#ab35cec5ac8f0fa95f10653ca7ac817f6">Open</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sAlias, xbInt16 iOpenMode, xbInt16 iShareMode, xbInt16 iVersion, xbInt16 &amp;iRc)</td></tr>
+<tr class="memdesc:ab35cec5ac8f0fa95f10653ca7ac817f6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Open highest qualified class available for dbf file. <a href="classxb_1_1xbXBase.html#ab35cec5ac8f0fa95f10653ca7ac817f6">More...</a><br /></td></tr>
+<tr class="separator:ab35cec5ac8f0fa95f10653ca7ac817f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a666a0cb5b76ec7a9a3677d339e0c6b42"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#a666a0cb5b76ec7a9a3677d339e0c6b42">SetLogSize</a> (size_t lSize)</td></tr>
+<tr class="separator:a666a0cb5b76ec7a9a3677d339e0c6b42"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aedb4c2aa2c90e4529915198a2305b355"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#aedb4c2aa2c90e4529915198a2305b355">GetLogSize</a> () const</td></tr>
+<tr class="separator:aedb4c2aa2c90e4529915198a2305b355"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9ca5be73abffd0fdd18bdc799877272a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#a9ca5be73abffd0fdd18bdc799877272a">WriteLogMessage</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLogMessage, xbInt16 iOutputOpt=0)</td></tr>
+<tr class="separator:a9ca5be73abffd0fdd18bdc799877272a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0dff00b9ee3c288841e137ca01168116"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#a0dff00b9ee3c288841e137ca01168116">WriteLogBytes</a> (xbUInt32 lCnt, const char *p)</td></tr>
+<tr class="separator:a0dff00b9ee3c288841e137ca01168116"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0915aff7be4b2dd3e881f3c5d0da4baf"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#a0915aff7be4b2dd3e881f3c5d0da4baf">xbSleep</a> (xbInt32 lMillisecs)</td></tr>
+<tr class="memdesc:a0915aff7be4b2dd3e881f3c5d0da4baf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Cross platform sleep function. <a href="classxb_1_1xbXBase.html#a0915aff7be4b2dd3e881f3c5d0da4baf">More...</a><br /></td></tr>
+<tr class="separator:a0915aff7be4b2dd3e881f3c5d0da4baf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aadecb3ac460d8e94b88b2e809e22f48e"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#aadecb3ac460d8e94b88b2e809e22f48e">GetCmdLineOpt</a> (xbInt32 lArgc, char **argv, const char *sOptRqst, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sParmOut)</td></tr>
+<tr class="memdesc:aadecb3ac460d8e94b88b2e809e22f48e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Parse commmand line options for a given parm request. <a href="classxb_1_1xbXBase.html#aadecb3ac460d8e94b88b2e809e22f48e">More...</a><br /></td></tr>
+<tr class="separator:aadecb3ac460d8e94b88b2e809e22f48e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8612e0c5334349fbceb9394b47817fd5"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#a8612e0c5334349fbceb9394b47817fd5">GetCmdLineOpt</a> (xbInt32 lArgc, char **argv, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sOptRqst, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sParmOut)</td></tr>
+<tr class="memdesc:a8612e0c5334349fbceb9394b47817fd5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Parse commmand line options for a given parm request. <a href="classxb_1_1xbXBase.html#a8612e0c5334349fbceb9394b47817fd5">More...</a><br /></td></tr>
+<tr class="separator:a8612e0c5334349fbceb9394b47817fd5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af16832ff2bfaee09265652e0fc03709a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#af16832ff2bfaee09265652e0fc03709a">AddTblToTblList</a> (<a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *d, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFqTblName)</td></tr>
+<tr class="separator:af16832ff2bfaee09265652e0fc03709a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2033188e9b08778188a034a6fc90ca85"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#a2033188e9b08778188a034a6fc90ca85">AddTblToTblList</a> (<a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *d, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFqTblName, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTblAlias)</td></tr>
+<tr class="separator:a2033188e9b08778188a034a6fc90ca85"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5eebffb9e8cc64141e35c2622045cb50"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#a5eebffb9e8cc64141e35c2622045cb50">DisplayTableList</a> () const</td></tr>
+<tr class="separator:a5eebffb9e8cc64141e35c2622045cb50"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad8a5d28a2ee6720a9aa74bcb45662cf5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#ad8a5d28a2ee6720a9aa74bcb45662cf5">GetDbfPtr</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTblAlias) const</td></tr>
+<tr class="separator:ad8a5d28a2ee6720a9aa74bcb45662cf5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a801dfecf7fc216954b4197b2c31b25d6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#a801dfecf7fc216954b4197b2c31b25d6">GetDbfPtr</a> (xbInt16 sItemNo) const</td></tr>
+<tr class="separator:a801dfecf7fc216954b4197b2c31b25d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acbf148ddba4297021cfb980a161ebef9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structxb_1_1xbTblList.html">xbTblList</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#acbf148ddba4297021cfb980a161ebef9">GetTblListEntry</a> (<a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *d)</td></tr>
+<tr class="separator:acbf148ddba4297021cfb980a161ebef9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad0d2d4adabc0dc0e761cfdee63c84069"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#ad0d2d4adabc0dc0e761cfdee63c84069">GetOpenTableCount</a> () const</td></tr>
+<tr class="separator:ad0d2d4adabc0dc0e761cfdee63c84069"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac8eaef41acf08911b90f900aac8e70af"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#ac8eaef41acf08911b90f900aac8e70af">RemoveTblFromTblList</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTblAlias)</td></tr>
+<tr class="separator:ac8eaef41acf08911b90f900aac8e70af"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3d82b6e73d5c0bc8cac22b9a260389c1"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#a3d82b6e73d5c0bc8cac22b9a260389c1">RemoveTblFromTblList</a> (<a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *d)</td></tr>
+<tr class="separator:a3d82b6e73d5c0bc8cac22b9a260389c1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a97dfa59ab9a8e9f17454da0faceb023d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a97dfa59ab9a8e9f17454da0faceb023d">DisplayError</a> (xbInt16 ErrorCode) const</td></tr>
+<tr class="memdesc:a97dfa59ab9a8e9f17454da0faceb023d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Display error message on console for a given error number. <a href="classxb_1_1xbSsv.html#a97dfa59ab9a8e9f17454da0faceb023d">More...</a><br /></td></tr>
+<tr class="separator:a97dfa59ab9a8e9f17454da0faceb023d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6fbb9c3a550ab0b3378f9586a57791d2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a6fbb9c3a550ab0b3378f9586a57791d2">GetDefaultDateFormat</a> () const</td></tr>
+<tr class="memdesc:a6fbb9c3a550ab0b3378f9586a57791d2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the default date format. <a href="classxb_1_1xbSsv.html#a6fbb9c3a550ab0b3378f9586a57791d2">More...</a><br /></td></tr>
+<tr class="separator:a6fbb9c3a550ab0b3378f9586a57791d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">GetDataDirectory</a> () const</td></tr>
+<tr class="memdesc:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current data directory. <a href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">More...</a><br /></td></tr>
+<tr class="separator:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abfaeef85935331073d213465bb362a61"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abfaeef85935331073d213465bb362a61">GetTempDirectory</a> () const</td></tr>
+<tr class="memdesc:abfaeef85935331073d213465bb362a61"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current temp directory. <a href="classxb_1_1xbSsv.html#abfaeef85935331073d213465bb362a61">More...</a><br /></td></tr>
+<tr class="separator:abfaeef85935331073d213465bb362a61"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">GetHomeDir</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sHomeDirOut)</td></tr>
+<tr class="memdesc:abc9c06c95d71fbad8294e1ae8862cea9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get home directory. <a href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">More...</a><br /></td></tr>
+<tr class="separator:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a49cd162f066eef2b829ba7c9f6620243"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">GetEndianType</a> () const</td></tr>
+<tr class="memdesc:a49cd162f066eef2b829ba7c9f6620243"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the Endian type. <a href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">More...</a><br /></td></tr>
+<tr class="separator:a49cd162f066eef2b829ba7c9f6620243"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a56961d2a67b8e7470098626ac4dac7e4"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">GetErrorMessage</a> (xbInt16 ErrorCode) const</td></tr>
+<tr class="memdesc:a56961d2a67b8e7470098626ac4dac7e4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get an error message. <a href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">More...</a><br /></td></tr>
+<tr class="separator:a56961d2a67b8e7470098626ac4dac7e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a63cee13b473ee13970e93b11837b9e35"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a63cee13b473ee13970e93b11837b9e35">GetPathSeparator</a> () const</td></tr>
+<tr class="memdesc:a63cee13b473ee13970e93b11837b9e35"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the OS dependent path separator. <a href="classxb_1_1xbSsv.html#a63cee13b473ee13970e93b11837b9e35">More...</a><br /></td></tr>
+<tr class="separator:a63cee13b473ee13970e93b11837b9e35"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">SetDataDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDataDirectory)</td></tr>
+<tr class="memdesc:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the data directory. <a href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">More...</a><br /></td></tr>
+<tr class="separator:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5f74db23f8902846d581935c7db73f9c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">SetDefaultDateFormat</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDefaultDateFormat)</td></tr>
+<tr class="memdesc:a5f74db23f8902846d581935c7db73f9c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the default date format. <a href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">More...</a><br /></td></tr>
+<tr class="separator:a5f74db23f8902846d581935c7db73f9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a17c229a20ef9ab4034df8f9cd657adb2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a17c229a20ef9ab4034df8f9cd657adb2">SetTempDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTempDirectory)</td></tr>
+<tr class="memdesc:a17c229a20ef9ab4034df8f9cd657adb2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the temp directory. <a href="classxb_1_1xbSsv.html#a17c229a20ef9ab4034df8f9cd657adb2">More...</a><br /></td></tr>
+<tr class="separator:a17c229a20ef9ab4034df8f9cd657adb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a62e4fd0a5888665c76bbbad962794e72"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72">BitSet</a> (unsigned char c, xbInt16 iBitNo) const</td></tr>
+<tr class="memdesc:a62e4fd0a5888665c76bbbad962794e72"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check a bit in a one byte field and see if it is set. <a href="classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72">More...</a><br /></td></tr>
+<tr class="separator:a62e4fd0a5888665c76bbbad962794e72"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8551b15a3ce4fa2a40d698db01f4a9ae"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a8551b15a3ce4fa2a40d698db01f4a9ae">BitDump</a> (unsigned char c) const</td></tr>
+<tr class="separator:a8551b15a3ce4fa2a40d698db01f4a9ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aba1395b8e4c7f28c3614061de6e49190"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#aba1395b8e4c7f28c3614061de6e49190">BitDump</a> (char c) const</td></tr>
+<tr class="separator:aba1395b8e4c7f28c3614061de6e49190"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6982f973e81587b04916f4509746aaf5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a6982f973e81587b04916f4509746aaf5">GetDefaultAutoCommit</a> () const</td></tr>
+<tr class="memdesc:a6982f973e81587b04916f4509746aaf5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the default auto commit setting. <a href="classxb_1_1xbSsv.html#a6982f973e81587b04916f4509746aaf5">More...</a><br /></td></tr>
+<tr class="separator:a6982f973e81587b04916f4509746aaf5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">SetDefaultAutoCommit</a> (<a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bDefaultAutoCommit)</td></tr>
+<tr class="memdesc:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the default auto commit. <a href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">More...</a><br /></td></tr>
+<tr class="separator:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4822315bded3969b59aeeb683c373051"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a4822315bded3969b59aeeb683c373051">GetLogDirectory</a> () const</td></tr>
+<tr class="separator:a4822315bded3969b59aeeb683c373051"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afaef09435be73b3111f5edbd7091d861"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#afaef09435be73b3111f5edbd7091d861">GetLogFileName</a> () const</td></tr>
+<tr class="separator:afaef09435be73b3111f5edbd7091d861"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7b992ed97281bf25b5b66f5df686225e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a7b992ed97281bf25b5b66f5df686225e">SetLogDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLogDirectory)</td></tr>
+<tr class="separator:a7b992ed97281bf25b5b66f5df686225e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7f05738e7dfd759e89990242ef503544"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a7f05738e7dfd759e89990242ef503544">SetLogFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLogFileName)</td></tr>
+<tr class="separator:a7f05738e7dfd759e89990242ef503544"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">GetMultiUser</a> () const</td></tr>
+<tr class="memdesc:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the multi user setting. <a href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">More...</a><br /></td></tr>
+<tr class="separator:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aba6e59512f7172dd55dcf92059e5928c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#aba6e59512f7172dd55dcf92059e5928c">SetMultiUser</a> (<a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bMultiUser)</td></tr>
+<tr class="memdesc:aba6e59512f7172dd55dcf92059e5928c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the multi user setting. <a href="classxb_1_1xbSsv.html#aba6e59512f7172dd55dcf92059e5928c">More...</a><br /></td></tr>
+<tr class="separator:aba6e59512f7172dd55dcf92059e5928c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-static-attribs" name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:a6219f1b5e24ea12fe158cd5aea56988e"><td class="memItemLeft" align="right" valign="top">static const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a6219f1b5e24ea12fe158cd5aea56988e">ErrorCodeText</a> []</td></tr>
+<tr class="separator:a6219f1b5e24ea12fe158cd5aea56988e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-methods" name="pro-methods"></a>
+Protected Member Functions</h2></td></tr>
+<tr class="memitem:ae52e53340593b4253936c1372ec15ee1"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#ae52e53340593b4253936c1372ec15ee1">GetFunctionInfo</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sExpLine, char &amp;cReturnType, xbInt16 &amp;iReturnLenCalc, xbInt32 &amp;lReturnLenVal) const</td></tr>
+<tr class="separator:ae52e53340593b4253936c1372ec15ee1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a904ec348fd029d4a76e72b8fde636108"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a904ec348fd029d4a76e72b8fde636108">SetEndianType</a> ()</td></tr>
+<tr class="memdesc:a904ec348fd029d4a76e72b8fde636108"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the endian type. <a href="classxb_1_1xbSsv.html#a904ec348fd029d4a76e72b8fde636108">More...</a><br /></td></tr>
+<tr class="separator:a904ec348fd029d4a76e72b8fde636108"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-static-methods" name="pro-static-methods"></a>
+Static Protected Member Functions</h2></td></tr>
+<tr class="memitem:a1b239c021358476382942522911b5c66"><td class="memItemLeft" align="right" valign="top">static xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#a1b239c021358476382942522911b5c66">xbMemcmp</a> (const unsigned char *s1, const unsigned char *s2, size_t n)</td></tr>
+<tr class="memdesc:a1b239c021358476382942522911b5c66"><td class="mdescLeft">&#160;</td><td class="mdescRight">Cross memcmp function. <a href="classxb_1_1xbXBase.html#a1b239c021358476382942522911b5c66">More...</a><br /></td></tr>
+<tr class="separator:a1b239c021358476382942522911b5c66"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-static-attribs" name="pro-static-attribs"></a>
+Static Protected Attributes</h2></td></tr>
+<tr class="memitem:a5849e813f5e8e1cd180f0366637adbf3"><td class="memItemLeft" align="right" valign="top">static xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a5849e813f5e8e1cd180f0366637adbf3">iEndianType</a> = 0</td></tr>
+<tr class="separator:a5849e813f5e8e1cd180f0366637adbf3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9dec3164c3b264882df634915ecf21da"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classxb_1_1xbString.html">xbString</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a9dec3164c3b264882df634915ecf21da">sNullString</a> = &quot;&quot;</td></tr>
+<tr class="separator:a9dec3164c3b264882df634915ecf21da"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="friends" name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:a86a53ce3efbf910996df0f853f1c0add"><td class="memItemLeft" align="right" valign="top">class&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#a86a53ce3efbf910996df0f853f1c0add">xbBcd</a></td></tr>
+<tr class="separator:a86a53ce3efbf910996df0f853f1c0add"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3c3e5617be811d732472fe2cc8fb18cc"><td class="memItemLeft" align="right" valign="top">class&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#a3c3e5617be811d732472fe2cc8fb18cc">xbExp</a></td></tr>
+<tr class="separator:a3c3e5617be811d732472fe2cc8fb18cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p >xbXbase class. </p>
+<p >The <a class="el" href="classxb_1_1xbXBase.html" title="xbXbase class.">xbXBase</a> class is the core class that needs to be in every application program. </p>
+</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="a6c68588e33946fb5416af3f86fe83224" name="a6c68588e33946fb5416af3f86fe83224"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6c68588e33946fb5416af3f86fe83224">&#9670;&nbsp;</a></span>xbXBase()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xb::xbXBase::xbXBase </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Class Constructor. </p>
+
+</div>
+</div>
+<a id="a204f8634894ac2066d3209117803306d" name="a204f8634894ac2066d3209117803306d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a204f8634894ac2066d3209117803306d">&#9670;&nbsp;</a></span>~xbXBase()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xb::xbXBase::~xbXBase </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Class Deconstructor. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="af16832ff2bfaee09265652e0fc03709a" name="af16832ff2bfaee09265652e0fc03709a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af16832ff2bfaee09265652e0fc03709a">&#9670;&nbsp;</a></span>AddTblToTblList() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbTblMgr::AddTblToTblList </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td>
+ <td class="paramname"><em>d</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFqTblName</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2033188e9b08778188a034a6fc90ca85" name="a2033188e9b08778188a034a6fc90ca85"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2033188e9b08778188a034a6fc90ca85">&#9670;&nbsp;</a></span>AddTblToTblList() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbTblMgr::AddTblToTblList </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td>
+ <td class="paramname"><em>d</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFqTblName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sTblAlias</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aba1395b8e4c7f28c3614061de6e49190" name="aba1395b8e4c7f28c3614061de6e49190"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aba1395b8e4c7f28c3614061de6e49190">&#9670;&nbsp;</a></span>BitDump() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::BitDump </td>
+ <td>(</td>
+ <td class="paramtype">char&#160;</td>
+ <td class="paramname"><em>c</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8551b15a3ce4fa2a40d698db01f4a9ae" name="a8551b15a3ce4fa2a40d698db01f4a9ae"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8551b15a3ce4fa2a40d698db01f4a9ae">&#9670;&nbsp;</a></span>BitDump() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::BitDump </td>
+ <td>(</td>
+ <td class="paramtype">unsigned char&#160;</td>
+ <td class="paramname"><em>c</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a62e4fd0a5888665c76bbbad962794e72" name="a62e4fd0a5888665c76bbbad962794e72"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a62e4fd0a5888665c76bbbad962794e72">&#9670;&nbsp;</a></span>BitSet()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbSsv::BitSet </td>
+ <td>(</td>
+ <td class="paramtype">unsigned char&#160;</td>
+ <td class="paramname"><em>c</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iBitNo</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Check a bit in a one byte field and see if it is set. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td>One byte char field to examine. </td></tr>
+ <tr><td class="paramname">iBitNo</td><td>which bit to examine. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue Bit is set<br />
+ xbFalse Bit is not set </dd></dl>
+
+</div>
+</div>
+<a id="afccb552ca0daff779c0500ff20d22c2b" name="afccb552ca0daff779c0500ff20d22c2b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afccb552ca0daff779c0500ff20d22c2b">&#9670;&nbsp;</a></span>CloseAllTables()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbXBase::CloseAllTables </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Close all tables / files. </p>
+<p >This closes everything and deletes references to the associated <a class="el" href="classxb_1_1xbDbf.html" title="Base class for handling dbf files/tables.">xbDbf</a> objects. </p><dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="aa41240d920b604dcbd91dce7eecb78e1" name="aa41240d920b604dcbd91dce7eecb78e1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa41240d920b604dcbd91dce7eecb78e1">&#9670;&nbsp;</a></span>CreateFqn()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbXBase::CreateFqn </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sDirIn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sNameIn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sExtIn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFqnOut</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Fully qualified file name from a directory, filename and extension. </p>
+<p >Given a directory, file name and file extension as inputs, create a fully qualified file name.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sDirIn</td><td>Directory </td></tr>
+ <tr><td class="paramname">sFileIn</td><td>File Name </td></tr>
+ <tr><td class="paramname">sExtIn</td><td>File Extension </td></tr>
+ <tr><td class="paramname">sFqnOut</td><td>A fully qualifed unique file name as output </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>XB_INVALIED_PARAMETER or XB_NO_ERROR </dd></dl>
+
+</div>
+</div>
+<a id="ae357fac4fdebdf49e46563cf611caf65" name="ae357fac4fdebdf49e46563cf611caf65"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae357fac4fdebdf49e46563cf611caf65">&#9670;&nbsp;</a></span>DisableMsgLogging()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbXBase::DisableMsgLogging </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a97dfa59ab9a8e9f17454da0faceb023d" name="a97dfa59ab9a8e9f17454da0faceb023d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a97dfa59ab9a8e9f17454da0faceb023d">&#9670;&nbsp;</a></span>DisplayError()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::DisplayError </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iErrorCode</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Display error message on console for a given error number. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iErrorCode</td><td>Error number to reference </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a5eebffb9e8cc64141e35c2622045cb50" name="a5eebffb9e8cc64141e35c2622045cb50"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5eebffb9e8cc64141e35c2622045cb50">&#9670;&nbsp;</a></span>DisplayTableList()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbTblMgr::DisplayTableList </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a470e6eb0ed0be60338f9b40976d3ad48" name="a470e6eb0ed0be60338f9b40976d3ad48"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a470e6eb0ed0be60338f9b40976d3ad48">&#9670;&nbsp;</a></span>EnableMsgLogging()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbXBase::EnableMsgLogging </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5a5ecaed9777978344902446c9ae3b8e" name="a5a5ecaed9777978344902446c9ae3b8e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5a5ecaed9777978344902446c9ae3b8e">&#9670;&nbsp;</a></span>FlushLog()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbXBase::FlushLog </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aadecb3ac460d8e94b88b2e809e22f48e" name="aadecb3ac460d8e94b88b2e809e22f48e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aadecb3ac460d8e94b88b2e809e22f48e">&#9670;&nbsp;</a></span>GetCmdLineOpt() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbXBase::GetCmdLineOpt </td>
+ <td>(</td>
+ <td class="paramtype">xbInt32&#160;</td>
+ <td class="paramname"><em>lArgc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>sArgv</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>sOptRqst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sParmOut</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Parse commmand line options for a given parm request. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">lArgc</td><td>Value passed from main( argc, argv[] ) </td></tr>
+ <tr><td class="paramname">sArgv</td><td>Valued passed from main </td></tr>
+ <tr><td class="paramname">sOptRqst</td><td>Option to search for in the arguments list </td></tr>
+ <tr><td class="paramname">sParmOut</td><td>String token immediately to the right of the the option request, if found </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>0 - paramater request not found<br />
+ 1 - Parameter found </dd></dl>
+
+</div>
+</div>
+<a id="a8612e0c5334349fbceb9394b47817fd5" name="a8612e0c5334349fbceb9394b47817fd5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8612e0c5334349fbceb9394b47817fd5">&#9670;&nbsp;</a></span>GetCmdLineOpt() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbXBase::GetCmdLineOpt </td>
+ <td>(</td>
+ <td class="paramtype">xbInt32&#160;</td>
+ <td class="paramname"><em>lArgc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>sArgv</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sOptRqst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sParmOut</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Parse commmand line options for a given parm request. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">lArgc</td><td>Value passed from main( argc, argv[] ) </td></tr>
+ <tr><td class="paramname">sArgv</td><td>Valued passed from main </td></tr>
+ <tr><td class="paramname">sOptRqst</td><td>Option to search for in the arguments list </td></tr>
+ <tr><td class="paramname">sParmOut</td><td>String token immediately to the right of the the option request, if found </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>0 - paramater request not found<br />
+ 1 - Parameter found </dd></dl>
+
+</div>
+</div>
+<a id="a1d803a4bfc8ba0561267a0bf9e51f7d9" name="a1d803a4bfc8ba0561267a0bf9e51f7d9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1d803a4bfc8ba0561267a0bf9e51f7d9">&#9670;&nbsp;</a></span>GetDataDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetDataDirectory </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the current data directory. </p>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing the current data directory where the database files are stored. </dd></dl>
+
+</div>
+</div>
+<a id="ad8a5d28a2ee6720a9aa74bcb45662cf5" name="ad8a5d28a2ee6720a9aa74bcb45662cf5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad8a5d28a2ee6720a9aa74bcb45662cf5">&#9670;&nbsp;</a></span>GetDbfPtr() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> * xb::xbTblMgr::GetDbfPtr </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sTblAlias</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a801dfecf7fc216954b4197b2c31b25d6" name="a801dfecf7fc216954b4197b2c31b25d6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a801dfecf7fc216954b4197b2c31b25d6">&#9670;&nbsp;</a></span>GetDbfPtr() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> * xb::xbTblMgr::GetDbfPtr </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>sItemNo</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6982f973e81587b04916f4509746aaf5" name="a6982f973e81587b04916f4509746aaf5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6982f973e81587b04916f4509746aaf5">&#9670;&nbsp;</a></span>GetDefaultAutoCommit()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbSsv::GetDefaultAutoCommit </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the default auto commit setting. </p>
+<p >When auto commit is enabled, the library will automatically post any updates when moving off an updated record or closing files. If auto commit is disabled, the application program will need to explicitly update the tables using using dbf-&gt;Put() and dbf-&gt;AppendRecord().</p>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue if auto commit is turned on<br />
+ xbFalse is auto commit is turned off </dd></dl>
+
+</div>
+</div>
+<a id="a6fbb9c3a550ab0b3378f9586a57791d2" name="a6fbb9c3a550ab0b3378f9586a57791d2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6fbb9c3a550ab0b3378f9586a57791d2">&#9670;&nbsp;</a></span>GetDefaultDateFormat()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetDefaultDateFormat </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the default date format. </p>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing the default date format. </dd></dl>
+
+</div>
+</div>
+<a id="a49cd162f066eef2b829ba7c9f6620243" name="a49cd162f066eef2b829ba7c9f6620243"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a49cd162f066eef2b829ba7c9f6620243">&#9670;&nbsp;</a></span>GetEndianType()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbSsv::GetEndianType </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the Endian type. </p>
+<dl class="section return"><dt>Returns</dt><dd>B - Big endian<br />
+ L - Little endian<br />
+ </dd></dl>
+
+</div>
+</div>
+<a id="a56961d2a67b8e7470098626ac4dac7e4" name="a56961d2a67b8e7470098626ac4dac7e4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a56961d2a67b8e7470098626ac4dac7e4">&#9670;&nbsp;</a></span>GetErrorMessage()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char * xb::xbSsv::GetErrorMessage </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iErrorCode</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get an error message. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iErrorCode</td><td>ErrorCode is the error number of description to be returned. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Returns a pointer to a string containing a text description for the error code. </dd></dl>
+
+</div>
+</div>
+<a id="ae52e53340593b4253936c1372ec15ee1" name="ae52e53340593b4253936c1372ec15ee1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae52e53340593b4253936c1372ec15ee1">&#9670;&nbsp;</a></span>GetFunctionInfo()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbXBase::GetFunctionInfo </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sExpLine</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char &amp;&#160;</td>
+ <td class="paramname"><em>cReturnType</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16 &amp;&#160;</td>
+ <td class="paramname"><em>iReturnLenCalc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt32 &amp;&#160;</td>
+ <td class="paramname"><em>lReturnLenVal</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abc9c06c95d71fbad8294e1ae8862cea9" name="abc9c06c95d71fbad8294e1ae8862cea9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abc9c06c95d71fbad8294e1ae8862cea9">&#9670;&nbsp;</a></span>GetHomeDir()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::GetHomeDir </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sHomeDirOut</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get home directory. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sHomeDirOut</td><td>- Output home directory for current user. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a4822315bded3969b59aeeb683c373051" name="a4822315bded3969b59aeeb683c373051"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4822315bded3969b59aeeb683c373051">&#9670;&nbsp;</a></span>GetLogDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetLogDirectory </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="afaef09435be73b3111f5edbd7091d861" name="afaef09435be73b3111f5edbd7091d861"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afaef09435be73b3111f5edbd7091d861">&#9670;&nbsp;</a></span>GetLogFileName()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetLogFileName </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab5d63cd7d9137eba8a1d4d9c3df522b7" name="ab5d63cd7d9137eba8a1d4d9c3df522b7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab5d63cd7d9137eba8a1d4d9c3df522b7">&#9670;&nbsp;</a></span>GetLogFqFileName()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbXBase::GetLogFqFileName </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aedb4c2aa2c90e4529915198a2305b355" name="aedb4c2aa2c90e4529915198a2305b355"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aedb4c2aa2c90e4529915198a2305b355">&#9670;&nbsp;</a></span>GetLogSize()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">size_t xb::xbXBase::GetLogSize </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ade34cd72c2a7e70fb55429a8a6f6c028" name="ade34cd72c2a7e70fb55429a8a6f6c028"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ade34cd72c2a7e70fb55429a8a6f6c028">&#9670;&nbsp;</a></span>GetLogStatus()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbXBase::GetLogStatus </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abd58031c5f1c3766c24d47a82e6fd9c5" name="abd58031c5f1c3766c24d47a82e6fd9c5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abd58031c5f1c3766c24d47a82e6fd9c5">&#9670;&nbsp;</a></span>GetMultiUser()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbSsv::GetMultiUser </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the multi user setting. </p>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue - Multi user mode turned on.<br />
+ xbFalse - Multi user mode turned off.<br />
+ </dd></dl>
+
+</div>
+</div>
+<a id="ad0d2d4adabc0dc0e761cfdee63c84069" name="ad0d2d4adabc0dc0e761cfdee63c84069"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad0d2d4adabc0dc0e761cfdee63c84069">&#9670;&nbsp;</a></span>GetOpenTableCount()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbTblMgr::GetOpenTableCount </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a63cee13b473ee13970e93b11837b9e35" name="a63cee13b473ee13970e93b11837b9e35"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a63cee13b473ee13970e93b11837b9e35">&#9670;&nbsp;</a></span>GetPathSeparator()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">char xb::xbSsv::GetPathSeparator </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the OS dependent path separator. </p>
+<dl class="section return"><dt>Returns</dt><dd>Returns '\' for windows environment, otherwise returns '/'. </dd></dl>
+
+</div>
+</div>
+<a id="acbf148ddba4297021cfb980a161ebef9" name="acbf148ddba4297021cfb980a161ebef9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acbf148ddba4297021cfb980a161ebef9">&#9670;&nbsp;</a></span>GetTblListEntry()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structxb_1_1xbTblList.html">xbTblList</a> * xb::xbTblMgr::GetTblListEntry </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td>
+ <td class="paramname"><em>d</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abfaeef85935331073d213465bb362a61" name="abfaeef85935331073d213465bb362a61"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abfaeef85935331073d213465bb362a61">&#9670;&nbsp;</a></span>GetTempDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetTempDirectory </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the current temp directory. </p>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing the current data directory where the database files are stored. </dd></dl>
+
+</div>
+</div>
+<a id="ab35cec5ac8f0fa95f10653ca7ac817f6" name="ab35cec5ac8f0fa95f10653ca7ac817f6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab35cec5ac8f0fa95f10653ca7ac817f6">&#9670;&nbsp;</a></span>Open() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> * xb::xbXBase::Open </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sTableName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sAlias</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iOpenMode</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iShareMode</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iRequestVersion</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16 &amp;&#160;</td>
+ <td class="paramname"><em>iRc</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Open highest qualified class available for dbf file. </p>
+<p >This routine can open various versions of the dbf file dependent on the iVersion field</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sTableName</td><td>- Table name to open. </td></tr>
+ <tr><td class="paramname">sAlias</td><td>- Optional alias name. </td></tr>
+ <tr><td class="paramname">iOpenMode</td><td>- XB_READ_WRITE or XB_READ </td></tr>
+ <tr><td class="paramname">iShareMode</td><td>- XB_SINGLE_USER or XB_MULTI_USER </td></tr>
+ <tr><td class="paramname">iRequestVersion</td><td>0 - Highest available 4 - Version four dbf 3 - Version three dbf </td></tr>
+ <tr><td class="paramname">iRc</td><td>- Return code from open request </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>param dbf - Output pointer to dbf file opened or null if error </dd></dl>
+
+</div>
+</div>
+<a id="aafb1abd6b6124cddf635adaf9f615a4a" name="aafb1abd6b6124cddf635adaf9f615a4a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aafb1abd6b6124cddf635adaf9f615a4a">&#9670;&nbsp;</a></span>Open() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> * xb::xbXBase::Open </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sTableName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16 &amp;&#160;</td>
+ <td class="paramname"><em>iRc</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Open highest qualified class available for dbf file. </p>
+<p >This routine opens the highest available version of the dbf file. Defaults to XB_READ_WRITE and XB_MULTI_USER mode. </p><dl class="section return"><dt>Returns</dt><dd>param dbf - Output pointer to dbf file opened or null if error </dd></dl>
+
+</div>
+</div>
+<a id="aa957eb502ecd076e5df89e7415cb094b" name="aa957eb502ecd076e5df89e7415cb094b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa957eb502ecd076e5df89e7415cb094b">&#9670;&nbsp;</a></span>OpenHighestVersion() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbXBase::OpenHighestVersion </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sTableName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sAlias</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> &amp;&#160;</td>
+ <td class="paramname"><em>dbf</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>dummy</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="afa7bbac08a4601f49cd53b457196ee0e" name="afa7bbac08a4601f49cd53b457196ee0e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afa7bbac08a4601f49cd53b457196ee0e">&#9670;&nbsp;</a></span>OpenHighestVersion() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbXBase::OpenHighestVersion </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sTableName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sAlias</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> **&#160;</td>
+ <td class="paramname"><em>dbf</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac8eaef41acf08911b90f900aac8e70af" name="ac8eaef41acf08911b90f900aac8e70af"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac8eaef41acf08911b90f900aac8e70af">&#9670;&nbsp;</a></span>RemoveTblFromTblList() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbTblMgr::RemoveTblFromTblList </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sTblAlias</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3d82b6e73d5c0bc8cac22b9a260389c1" name="a3d82b6e73d5c0bc8cac22b9a260389c1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3d82b6e73d5c0bc8cac22b9a260389c1">&#9670;&nbsp;</a></span>RemoveTblFromTblList() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbTblMgr::RemoveTblFromTblList </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td>
+ <td class="paramname"><em>d</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a57caaaadfbd089d9a58ecfcb50c88a6c" name="a57caaaadfbd089d9a58ecfcb50c88a6c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a57caaaadfbd089d9a58ecfcb50c88a6c">&#9670;&nbsp;</a></span>SetDataDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetDataDirectory </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sDataDirectory</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Set the data directory. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sDataDirectory</td><td>Set the data directory. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a25542afadaaf39b4fb5a1772a29cc0bd" name="a25542afadaaf39b4fb5a1772a29cc0bd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a25542afadaaf39b4fb5a1772a29cc0bd">&#9670;&nbsp;</a></span>SetDefaultAutoCommit()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetDefaultAutoCommit </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td>
+ <td class="paramname"><em>bDefaultAutoCommit</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Set the default auto commit. </p>
+<p >Disabling auto commit requires the application execute explicit updates using dbf-&gt;Put() and dbf-&gt;AppendRecord(). With auto commit on, the library posts updates automatically when moving off the current record or closing a file.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">bDefaultAutoCommit</td><td>xbTrue - Enable default auto commit.<br />
+ xbFalse - Disable default auto commit.<br />
+ </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a5f74db23f8902846d581935c7db73f9c" name="a5f74db23f8902846d581935c7db73f9c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5f74db23f8902846d581935c7db73f9c">&#9670;&nbsp;</a></span>SetDefaultDateFormat()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetDefaultDateFormat </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sDefaultDateFormat</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Set the default date format. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sDefaultDateFormat</td><td>Set the default date format. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a904ec348fd029d4a76e72b8fde636108" name="a904ec348fd029d4a76e72b8fde636108"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a904ec348fd029d4a76e72b8fde636108">&#9670;&nbsp;</a></span>SetEndianType()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetEndianType </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Set the endian type. </p>
+<p >This routine determines the Endian-ness at run time instead of compile time as some processers (ie; Sparc,ARM) can be switched either way. This routine is called automatically by the library at startup and does not need to be called in an application program. </p>
+
+</div>
+</div>
+<a id="a7b992ed97281bf25b5b66f5df686225e" name="a7b992ed97281bf25b5b66f5df686225e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7b992ed97281bf25b5b66f5df686225e">&#9670;&nbsp;</a></span>SetLogDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetLogDirectory </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sLogDirectory</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7f05738e7dfd759e89990242ef503544" name="a7f05738e7dfd759e89990242ef503544"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7f05738e7dfd759e89990242ef503544">&#9670;&nbsp;</a></span>SetLogFileName()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetLogFileName </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sLogFileName</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a666a0cb5b76ec7a9a3677d339e0c6b42" name="a666a0cb5b76ec7a9a3677d339e0c6b42"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a666a0cb5b76ec7a9a3677d339e0c6b42">&#9670;&nbsp;</a></span>SetLogSize()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbXBase::SetLogSize </td>
+ <td>(</td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>lSize</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aba6e59512f7172dd55dcf92059e5928c" name="aba6e59512f7172dd55dcf92059e5928c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aba6e59512f7172dd55dcf92059e5928c">&#9670;&nbsp;</a></span>SetMultiUser()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetMultiUser </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td>
+ <td class="paramname"><em>bMultiUser</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the multi user setting. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">bMultiUser</td><td>xbTrue - Turn on Multi user mode.<br />
+ xbFalse - Turn off Multi user mode.<br />
+ </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a17c229a20ef9ab4034df8f9cd657adb2" name="a17c229a20ef9ab4034df8f9cd657adb2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a17c229a20ef9ab4034df8f9cd657adb2">&#9670;&nbsp;</a></span>SetTempDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetTempDirectory </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sTempDirectory</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Set the temp directory. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sTempDirectory</td><td>Set the data direcroty. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a0dff00b9ee3c288841e137ca01168116" name="a0dff00b9ee3c288841e137ca01168116"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0dff00b9ee3c288841e137ca01168116">&#9670;&nbsp;</a></span>WriteLogBytes()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbXBase::WriteLogBytes </td>
+ <td>(</td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>lCnt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>p</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9ca5be73abffd0fdd18bdc799877272a" name="a9ca5be73abffd0fdd18bdc799877272a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9ca5be73abffd0fdd18bdc799877272a">&#9670;&nbsp;</a></span>WriteLogMessage()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbXBase::WriteLogMessage </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sLogMessage</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iOutputOpt</em> = <code>0</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1b239c021358476382942522911b5c66" name="a1b239c021358476382942522911b5c66"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1b239c021358476382942522911b5c66">&#9670;&nbsp;</a></span>xbMemcmp()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbXBase::xbMemcmp </td>
+ <td>(</td>
+ <td class="paramtype">const unsigned char *&#160;</td>
+ <td class="paramname"><em>s1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const unsigned char *&#160;</td>
+ <td class="paramname"><em>s2</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>n</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">protected</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Cross memcmp function. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">s1</td><td>Left operand to compare. </td></tr>
+ <tr><td class="paramname">s2</td><td>Right operand to compare. </td></tr>
+ <tr><td class="paramname">n</td><td>Number of bytes to compare. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>1 s1 &gt; s2<br />
+ 0 s1 == s2<br />
+ -1 s1 &lt; s2 </dd></dl>
+
+</div>
+</div>
+<a id="a0915aff7be4b2dd3e881f3c5d0da4baf" name="a0915aff7be4b2dd3e881f3c5d0da4baf"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0915aff7be4b2dd3e881f3c5d0da4baf">&#9670;&nbsp;</a></span>xbSleep()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbXBase::xbSleep </td>
+ <td>(</td>
+ <td class="paramtype">xbInt32&#160;</td>
+ <td class="paramname"><em>lMillisecs</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Cross platform sleep function. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">lMillisecs</td><td>Milliseconds to sleep. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<h2 class="groupheader">Friends And Related Function Documentation</h2>
+<a id="a86a53ce3efbf910996df0f853f1c0add" name="a86a53ce3efbf910996df0f853f1c0add"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a86a53ce3efbf910996df0f853f1c0add">&#9670;&nbsp;</a></span>xbBcd</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">friend class xbBcd</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">friend</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3c3e5617be811d732472fe2cc8fb18cc" name="a3c3e5617be811d732472fe2cc8fb18cc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3c3e5617be811d732472fe2cc8fb18cc">&#9670;&nbsp;</a></span>xbExp</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">friend class xbExp</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">friend</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Field Documentation</h2>
+<a id="a6219f1b5e24ea12fe158cd5aea56988e" name="a6219f1b5e24ea12fe158cd5aea56988e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6219f1b5e24ea12fe158cd5aea56988e">&#9670;&nbsp;</a></span>ErrorCodeText</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* xb::xbSsv::ErrorCodeText[]</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5849e813f5e8e1cd180f0366637adbf3" name="a5849e813f5e8e1cd180f0366637adbf3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5849e813f5e8e1cd180f0366637adbf3">&#9670;&nbsp;</a></span>iEndianType</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbSsv::iEndianType = 0</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">protected</span><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9dec3164c3b264882df634915ecf21da" name="a9dec3164c3b264882df634915ecf21da"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9dec3164c3b264882df634915ecf21da">&#9670;&nbsp;</a></span>sNullString</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> xb::xbSsv::sNullString = &quot;&quot;</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">protected</span><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>/mnt/1Tdata/xbase/xbase64-4.1.4/src/include/<a class="el" href="xbxbase_8h_source.html">xbxbase.h</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.1.4/src/core/<a class="el" href="xbxbase_8cpp.html">xbxbase.cpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/docs/doxygen/html/classxb_1_1xbXBase.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbXBase.png
index 4b4ae14..4b4ae14 100644
--- a/docs/doxygen/html/classxb_1_1xbXBase.png
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbXBase.png
Binary files differ
diff --git a/docs/doxygen/html/closed.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/closed.png
index 98cc2c9..98cc2c9 100644
--- a/docs/doxygen/html/closed.png
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/closed.png
Binary files differ
diff --git a/docs/doxygen/html/dbfxtrct_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dbfxtrct_8cpp.html
index 7e00be1..7e00be1 100644
--- a/docs/doxygen/html/dbfxtrct_8cpp.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dbfxtrct_8cpp.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dir_25b94c3afce00ed38231227d8141f932.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dir_25b94c3afce00ed38231227d8141f932.html
new file mode 100644
index 0000000..3539ada
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dir_25b94c3afce00ed38231227d8141f932.html
@@ -0,0 +1,105 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/sql Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_25b94c3afce00ed38231227d8141f932.html">sql</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">sql Directory Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbalttbl_8cpp.html">xbalttbl.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sql_2xbcrix_8cpp.html">xbcrix.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbcrtbl_8cpp.html">xbcrtbl.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdelete_8cpp.html">xbdelete.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdrpix_8cpp.html">xbdrpix.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdrptbl_8cpp.html">xbdrptbl.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbinsert_8cpp.html">xbinsert.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbselect_8cpp.html">xbselect.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbset_8cpp.html">xbset.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbsql_8cpp.html">xbsql.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbstmt_8cpp.html">xbstmt.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dir_313caf1132e152dd9b58bea13a4052ca.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dir_313caf1132e152dd9b58bea13a4052ca.html
new file mode 100644
index 0000000..be0a5a7
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dir_313caf1132e152dd9b58bea13a4052ca.html
@@ -0,0 +1,105 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/utils Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_313caf1132e152dd9b58bea13a4052ca.html">utils</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">utils Directory Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__cfg__check_8cpp.html">xb_cfg_check.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__copydbf_8cpp.html">xb_copydbf.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__dbfutil_8cpp.html">xb_dbfutil.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__deletall_8cpp.html">xb_deletall.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__dumpdbt_8cpp.html">xb_dumpdbt.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__dumprecs_8cpp.html">xb_dumprecs.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__execsql_8cpp.html">xb_execsql.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__import_8cpp.html">xb_import.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__pack_8cpp.html">xb_pack.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__tblinfo_8cpp.html">xb_tblinfo.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__undelall_8cpp.html">xb_undelall.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html
new file mode 100644
index 0000000..c1c03c6
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html
@@ -0,0 +1,95 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">src Directory Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="subdirs" name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_e931c1a3f0014e624d0645a271726ad2.html">examples</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_25b94c3afce00ed38231227d8141f932.html">sql</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_313caf1132e152dd9b58bea13a4052ca.html">utils</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dir_aebb8dcc11953d78e620bbef0b9e2183.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dir_aebb8dcc11953d78e620bbef0b9e2183.html
new file mode 100644
index 0000000..614739c
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dir_aebb8dcc11953d78e620bbef0b9e2183.html
@@ -0,0 +1,135 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">core Directory Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbbcd_8cpp.html">xbbcd.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbblockread_8cpp.html">xbblockread.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdate_8cpp.html">xbdate.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8cpp.html">xbdbf.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf3_8cpp.html">xbdbf3.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf4_8cpp.html">xbdbf4.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbexp_8cpp.html">xbexp.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbexpnode_8cpp.html">xbexpnode.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbfields_8cpp.html">xbfields.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbfile_8cpp.html">xbfile.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbfilter_8cpp.html">xbfilter.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbfuncs_8cpp.html">xbfuncs.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbixbase_8cpp.html">xbixbase.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbixmdx_8cpp.html">xbixmdx.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbixndx_8cpp.html">xbixndx.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbixtdx_8cpp.html">xbixtdx.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xblog_8cpp.html">xblog.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbmemo_8cpp.html">xbmemo.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbmemo3_8cpp.html">xbmemo3.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbmemo4_8cpp.html">xbmemo4.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbssv_8cpp.html">xbssv.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbstring_8cpp.html">xbstring.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbtag_8cpp.html">xbtag.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbtblmgr_8cpp.html">xbtblmgr.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbuda_8cpp.html">xbuda.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbxbase_8cpp.html">xbxbase.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dir_b0856f6b0d80ccb263b2f415c91f9e17.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dir_b0856f6b0d80ccb263b2f415c91f9e17.html
new file mode 100644
index 0000000..99b5a75
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dir_b0856f6b0d80ccb263b2f415c91f9e17.html
@@ -0,0 +1,133 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">include Directory Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbase_8h.html">xbase.h</a> <a href="xbase_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbbcd_8h.html">xbbcd.h</a> <a href="xbbcd_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbblkread_8h.html">xbblkread.h</a> <a href="xbblkread_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="include_2xbcrix_8cpp.html">xbcrix.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdate_8h.html">xbdate.h</a> <a href="xbdate_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html">xbdbf.h</a> <a href="xbdbf_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbexp_8h.html">xbexp.h</a> <a href="xbexp_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbexpnode_8h.html">xbexpnode.h</a> <a href="xbexpnode_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbfile_8h.html">xbfile.h</a> <a href="xbfile_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbfilter_8h.html">xbfilter.h</a> <a href="xbfilter_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbindex_8h.html">xbindex.h</a> <a href="xbindex_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xblnklst_8h.html">xblnklst.h</a> <a href="xblnklst_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xblnklstord_8h.html">xblnklstord.h</a> <a href="xblnklstord_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xblnknod_8h.html">xblnknod.h</a> <a href="xblnknod_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xblog_8h.html">xblog.h</a> <a href="xblog_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbmemo_8h.html">xbmemo.h</a> <a href="xbmemo_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html">xbretcod.h</a> <a href="xbretcod_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbsql_8h.html">xbsql.h</a> <a href="xbsql_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbssv_8h.html">xbssv.h</a> <a href="xbssv_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbstring_8h.html">xbstring.h</a> <a href="xbstring_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbtag_8h.html">xbtag.h</a> <a href="xbtag_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbtblmgr_8h.html">xbtblmgr.h</a> <a href="xbtblmgr_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbtypes_8h.html">xbtypes.h</a> <a href="xbtypes_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbuda_8h.html">xbuda.h</a> <a href="xbuda_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbxbase_8h.html">xbxbase.h</a> <a href="xbxbase_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dir_d93a1d4020dea85bb71b237545b5e722.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dir_d93a1d4020dea85bb71b237545b5e722.html
new file mode 100644
index 0000000..dacdae5
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dir_d93a1d4020dea85bb71b237545b5e722.html
@@ -0,0 +1,133 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">tests Directory Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__bcd_8cpp.html">xb_test_bcd.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__blockread_8cpp.html">xb_test_blockread.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__date_8cpp.html">xb_test_date.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__dbf__v3__memos_8cpp.html">xb_test_dbf_v3_memos.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__dbf__v3__nomemos_8cpp.html">xb_test_dbf_v3_nomemos.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__dbf__v4__memos_8cpp.html">xb_test_dbf_v4_memos.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__dbf__v4__nomemos_8cpp.html">xb_test_dbf_v4_nomemos.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__expnode_8cpp.html">xb_test_expnode.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__expression_8cpp.html">xb_test_expression.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__file_8cpp.html">xb_test_file.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__filter_8cpp.html">xb_test_filter.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__funcs_8cpp.html">xb_test_funcs.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__linklist_8cpp.html">xb_test_linklist.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__lock_8cpp.html">xb_test_lock.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__lock2_8cpp.html">xb_test_lock2.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__log_8cpp.html">xb_test_log.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__mdx_8cpp.html">xb_test_mdx.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__ndx_8cpp.html">xb_test_ndx.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__sql_8cpp.html">xb_test_sql.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__string_8cpp.html">xb_test_string.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__tblmgr_8cpp.html">xb_test_tblmgr.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__tdx_8cpp.html">xb_test_tdx.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__uda_8cpp.html">xb_test_uda.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__xbase_8cpp.html">xb_test_xbase.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dir_e931c1a3f0014e624d0645a271726ad2.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dir_e931c1a3f0014e624d0645a271726ad2.html
new file mode 100644
index 0000000..f9469b1
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dir_e931c1a3f0014e624d0645a271726ad2.html
@@ -0,0 +1,103 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/examples Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e931c1a3f0014e624d0645a271726ad2.html">examples</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">examples Directory Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__date_8cpp.html">xb_ex_date.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__expression_8cpp.html">xb_ex_expression.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__log_8cpp.html">xb_ex_log.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__sql_8cpp.html">xb_ex_sql.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__ssv_8cpp.html">xb_ex_ssv.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__string_8cpp.html">xb_ex_string.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__v3__create__dbf_8cpp.html">xb_ex_v3_create_dbf.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__v3__upd__dbf_8cpp.html">xb_ex_v3_upd_dbf.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__v4__create__dbf_8cpp.html">xb_ex_v4_create_dbf.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__v4__upd__dbf_8cpp.html">xb_ex_v4_upd_dbf.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/docs/doxygen/html/doc.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/doc.png
index 17edabf..17edabf 100644
--- a/docs/doxygen/html/doc.png
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/doc.png
Binary files differ
diff --git a/docs/doxygen/html/doxygen.css b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/doxygen.css
index 9036737..9036737 100644
--- a/docs/doxygen/html/doxygen.css
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/doxygen.css
diff --git a/docs/doxygen/html/doxygen.svg b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/doxygen.svg
index d42dad5..d42dad5 100644
--- a/docs/doxygen/html/doxygen.svg
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/doxygen.svg
diff --git a/docs/doxygen/html/dynsections.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dynsections.js
index 3174bd7..3174bd7 100644
--- a/docs/doxygen/html/dynsections.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dynsections.js
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/files.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/files.html
new file mode 100644
index 0000000..d35fce2
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/files.html
@@ -0,0 +1,194 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: File List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle"><div class="title">File List</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here is a list of all files with brief descriptions:</div><div class="directory">
+<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span>]</div><table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">&#9660;</span><span id="img_0_" class="iconfopen" onclick="toggleFolder('0_')">&#160;</span><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html" target="_self">src</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_0_" class="arrow" onclick="toggleFolder('0_0_')">&#9658;</span><span id="img_0_0_" class="iconfclosed" onclick="toggleFolder('0_0_')">&#160;</span><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html" target="_self">core</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_0_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbbcd_8cpp.html" target="_self">xbbcd.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_1_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbblockread_8cpp.html" target="_self">xbblockread.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_2_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbdate_8cpp.html" target="_self">xbdate.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_3_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbdbf_8cpp.html" target="_self">xbdbf.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_4_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbdbf3_8cpp.html" target="_self">xbdbf3.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_5_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbdbf4_8cpp.html" target="_self">xbdbf4.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_6_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbexp_8cpp.html" target="_self">xbexp.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_7_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbexpnode_8cpp.html" target="_self">xbexpnode.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_8_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbfields_8cpp.html" target="_self">xbfields.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_9_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbfile_8cpp.html" target="_self">xbfile.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_10_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbfilter_8cpp.html" target="_self">xbfilter.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_11_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbfuncs_8cpp.html" target="_self">xbfuncs.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_12_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbixbase_8cpp.html" target="_self">xbixbase.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_13_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbixmdx_8cpp.html" target="_self">xbixmdx.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_14_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbixndx_8cpp.html" target="_self">xbixndx.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_15_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbixtdx_8cpp.html" target="_self">xbixtdx.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_16_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xblog_8cpp.html" target="_self">xblog.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_17_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbmemo_8cpp.html" target="_self">xbmemo.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_18_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbmemo3_8cpp.html" target="_self">xbmemo3.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_19_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbmemo4_8cpp.html" target="_self">xbmemo4.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_20_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbssv_8cpp.html" target="_self">xbssv.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_21_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbstring_8cpp.html" target="_self">xbstring.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_22_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbtag_8cpp.html" target="_self">xbtag.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_23_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbtblmgr_8cpp.html" target="_self">xbtblmgr.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_24_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbuda_8cpp.html" target="_self">xbuda.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_25_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbxbase_8cpp.html" target="_self">xbxbase.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_1_" class="arrow" onclick="toggleFolder('0_1_')">&#9658;</span><span id="img_0_1_" class="iconfclosed" onclick="toggleFolder('0_1_')">&#160;</span><a class="el" href="dir_e931c1a3f0014e624d0645a271726ad2.html" target="_self">examples</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_0_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__ex__date_8cpp.html" target="_self">xb_ex_date.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_1_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__ex__expression_8cpp.html" target="_self">xb_ex_expression.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_2_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__ex__log_8cpp.html" target="_self">xb_ex_log.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_3_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__ex__sql_8cpp.html" target="_self">xb_ex_sql.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_4_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__ex__ssv_8cpp.html" target="_self">xb_ex_ssv.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_5_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__ex__string_8cpp.html" target="_self">xb_ex_string.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_6_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__ex__v3__create__dbf_8cpp.html" target="_self">xb_ex_v3_create_dbf.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_7_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__ex__v3__upd__dbf_8cpp.html" target="_self">xb_ex_v3_upd_dbf.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_8_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__ex__v4__create__dbf_8cpp.html" target="_self">xb_ex_v4_create_dbf.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_9_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__ex__v4__upd__dbf_8cpp.html" target="_self">xb_ex_v4_upd_dbf.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_2_" class="arrow" onclick="toggleFolder('0_2_')">&#9658;</span><span id="img_0_2_" class="iconfclosed" onclick="toggleFolder('0_2_')">&#160;</span><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html" target="_self">include</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_0_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbase_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbase_8h.html" target="_self">xbase.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_1_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbbcd_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbbcd_8h.html" target="_self">xbbcd.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_2_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbblkread_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbblkread_8h.html" target="_self">xbblkread.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_3_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="include_2xbcrix_8cpp.html" target="_self">xbcrix.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_4_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbdate_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbdate_8h.html" target="_self">xbdate.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_5_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbdbf_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbdbf_8h.html" target="_self">xbdbf.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_6_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbexp_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbexp_8h.html" target="_self">xbexp.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_7_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbexpnode_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbexpnode_8h.html" target="_self">xbexpnode.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_8_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbfile_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbfile_8h.html" target="_self">xbfile.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_9_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbfilter_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbfilter_8h.html" target="_self">xbfilter.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_10_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbindex_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbindex_8h.html" target="_self">xbindex.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_11_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xblnklst_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xblnklst_8h.html" target="_self">xblnklst.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_12_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xblnklstord_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xblnklstord_8h.html" target="_self">xblnklstord.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_13_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xblnknod_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xblnknod_8h.html" target="_self">xblnknod.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_14_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xblog_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xblog_8h.html" target="_self">xblog.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_15_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbmemo_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbmemo_8h.html" target="_self">xbmemo.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_16_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbretcod_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbretcod_8h.html" target="_self">xbretcod.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_17_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbsql_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbsql_8h.html" target="_self">xbsql.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_18_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbssv_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbssv_8h.html" target="_self">xbssv.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_19_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbstring_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbstring_8h.html" target="_self">xbstring.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_20_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbtag_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbtag_8h.html" target="_self">xbtag.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_21_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbtblmgr_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbtblmgr_8h.html" target="_self">xbtblmgr.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_22_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbtypes_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbtypes_8h.html" target="_self">xbtypes.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_23_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbuda_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbuda_8h.html" target="_self">xbuda.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_24_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbxbase_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbxbase_8h.html" target="_self">xbxbase.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_3_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_3_" class="arrow" onclick="toggleFolder('0_3_')">&#9658;</span><span id="img_0_3_" class="iconfclosed" onclick="toggleFolder('0_3_')">&#160;</span><a class="el" href="dir_25b94c3afce00ed38231227d8141f932.html" target="_self">sql</a></td><td class="desc"></td></tr>
+<tr id="row_0_3_0_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbalttbl_8cpp.html" target="_self">xbalttbl.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_3_1_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="sql_2xbcrix_8cpp.html" target="_self">xbcrix.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_3_2_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbcrtbl_8cpp.html" target="_self">xbcrtbl.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_3_3_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbdelete_8cpp.html" target="_self">xbdelete.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_3_4_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbdrpix_8cpp.html" target="_self">xbdrpix.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_3_5_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbdrptbl_8cpp.html" target="_self">xbdrptbl.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_3_6_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbinsert_8cpp.html" target="_self">xbinsert.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_3_7_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbselect_8cpp.html" target="_self">xbselect.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_3_8_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbset_8cpp.html" target="_self">xbset.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_3_9_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbsql_8cpp.html" target="_self">xbsql.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_3_10_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbstmt_8cpp.html" target="_self">xbstmt.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_4_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_4_" class="arrow" onclick="toggleFolder('0_4_')">&#9658;</span><span id="img_0_4_" class="iconfclosed" onclick="toggleFolder('0_4_')">&#160;</span><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html" target="_self">tests</a></td><td class="desc"></td></tr>
+<tr id="row_0_4_0_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="tstfuncs_8cpp.html" target="_self">tstfuncs.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_4_1_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__bcd_8cpp.html" target="_self">xb_test_bcd.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_4_2_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__blockread_8cpp.html" target="_self">xb_test_blockread.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_4_3_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__date_8cpp.html" target="_self">xb_test_date.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_4_4_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__dbf__v3__memos_8cpp.html" target="_self">xb_test_dbf_v3_memos.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_4_5_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__dbf__v3__nomemos_8cpp.html" target="_self">xb_test_dbf_v3_nomemos.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_4_6_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__dbf__v4__memos_8cpp.html" target="_self">xb_test_dbf_v4_memos.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_4_7_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__dbf__v4__nomemos_8cpp.html" target="_self">xb_test_dbf_v4_nomemos.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_4_8_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__expnode_8cpp.html" target="_self">xb_test_expnode.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_4_9_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__expression_8cpp.html" target="_self">xb_test_expression.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_4_10_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__file_8cpp.html" target="_self">xb_test_file.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_4_11_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__filter_8cpp.html" target="_self">xb_test_filter.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_4_12_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__funcs_8cpp.html" target="_self">xb_test_funcs.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_4_13_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__linklist_8cpp.html" target="_self">xb_test_linklist.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_4_14_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__lock_8cpp.html" target="_self">xb_test_lock.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_4_15_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__lock2_8cpp.html" target="_self">xb_test_lock2.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_4_16_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__log_8cpp.html" target="_self">xb_test_log.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_4_17_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__mdx_8cpp.html" target="_self">xb_test_mdx.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_4_18_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__ndx_8cpp.html" target="_self">xb_test_ndx.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_4_19_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__sql_8cpp.html" target="_self">xb_test_sql.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_4_20_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__string_8cpp.html" target="_self">xb_test_string.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_4_21_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__tblmgr_8cpp.html" target="_self">xb_test_tblmgr.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_4_22_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__tdx_8cpp.html" target="_self">xb_test_tdx.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_4_23_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__uda_8cpp.html" target="_self">xb_test_uda.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_4_24_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__xbase_8cpp.html" target="_self">xb_test_xbase.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_5_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_5_" class="arrow" onclick="toggleFolder('0_5_')">&#9658;</span><span id="img_0_5_" class="iconfclosed" onclick="toggleFolder('0_5_')">&#160;</span><a class="el" href="dir_313caf1132e152dd9b58bea13a4052ca.html" target="_self">utils</a></td><td class="desc"></td></tr>
+<tr id="row_0_5_0_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__cfg__check_8cpp.html" target="_self">xb_cfg_check.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_5_1_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__copydbf_8cpp.html" target="_self">xb_copydbf.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_5_2_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__dbfutil_8cpp.html" target="_self">xb_dbfutil.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_5_3_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__deletall_8cpp.html" target="_self">xb_deletall.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_5_4_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__dumpdbt_8cpp.html" target="_self">xb_dumpdbt.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_5_5_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__dumprecs_8cpp.html" target="_self">xb_dumprecs.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_5_6_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__execsql_8cpp.html" target="_self">xb_execsql.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_5_7_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__import_8cpp.html" target="_self">xb_import.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_5_8_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__pack_8cpp.html" target="_self">xb_pack.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_5_9_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__tblinfo_8cpp.html" target="_self">xb_tblinfo.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_5_10_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__undelall_8cpp.html" target="_self">xb_undelall.cpp</a></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/docs/doxygen/html/folderclosed.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/folderclosed.png
index bb8ab35..bb8ab35 100644
--- a/docs/doxygen/html/folderclosed.png
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/folderclosed.png
Binary files differ
diff --git a/docs/doxygen/html/folderopen.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/folderopen.png
index d6c7f67..d6c7f67 100644
--- a/docs/doxygen/html/folderopen.png
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/folderopen.png
Binary files differ
diff --git a/docs/doxygen/html/functions.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions.html
index 6e4da8b..6e4da8b 100644
--- a/docs/doxygen/html/functions.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions.html
diff --git a/docs/doxygen/html/functions_b.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_b.html
index d9dfa32..d9dfa32 100644
--- a/docs/doxygen/html/functions_b.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_b.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_c.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_c.html
new file mode 100644
index 0000000..8016da5
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_c.html
@@ -0,0 +1,105 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: Data Fields</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
+
+<h3><a id="index_c" name="index_c"></a>- c -</h3><ul>
+<li>CalcRollingCenturyForYear()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a9df58caa54105c489c314785c457e8cb">xb::xbDate</a></li>
+<li>cEncryptionFlag&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a8734e799707582f022fc341d515650f4">xb::xbDbf</a></li>
+<li>CenturyOf()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a38b2c5285c69ed65e94ece6c22dafde0">xb::xbDate</a></li>
+<li>cFieldName&#160;:&#160;<a class="el" href="structxb_1_1xbSchema.html#a514183856094123fd37df67885b4681e">xb::xbSchema</a></li>
+<li>cFldType&#160;:&#160;<a class="el" href="structsFldMap.html#af89b26b2d4bc6e26c597f8c48b97b1a3">sFldMap</a></li>
+<li>CharDayOf()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a9fc29730b66cddfbb58c69992a99cc7c">xb::xbDate</a></li>
+<li>CharMonthOf()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#afffc84f02bd421335ff8ebe9fb3db0ac">xb::xbDate</a></li>
+<li>cIndexFlag&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ad59074633641e03647e54d2b66c9102b">xb::xbDbf</a></li>
+<li>cLangDriver&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#aea1dfe5cbd1f9cdbcfc8eb04b2c3d5f1">xb::xbDbf</a></li>
+<li>Close()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ad68d73113e54e1b5f326e90f45e9989d">xb::xbDbf</a></li>
+<li>CloseAllTables()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#afccb552ca0daff779c0500ff20d22c2b">xb::xbXBase</a></li>
+<li>Commit()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#abd69532c885ab72bcf3fb5066b318f4f">xb::xbDbf</a></li>
+<li>Copy()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#ac7a8466b03c04df838bd182ef244f792">xb::xbString</a></li>
+<li>CopyDbfStructure()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a829c615a130a1fdf609d93438d8a6264">xb::xbDbf</a></li>
+<li>CountChar()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#adc0204bcfd1c052b9aea9229b10acf72">xb::xbString</a></li>
+<li>CreateFqn()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#aa41240d920b604dcbd91dce7eecb78e1">xb::xbXBase</a></li>
+<li>CreateTable()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a73e41bfe679dd06ab16c436652df93f1">xb::xbDbf</a></li>
+<li>CreateUniqueFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#ad39797624a752b9d62533d00fad9feff">xb::xbFile</a></li>
+<li>CTOD()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#abb1eb4b0394e4a67aadab15779b1b8c5">xb::xbDate</a></li>
+<li>cTransactionFlag&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ac3c89fc3bc6a6abf385478a8adbed970">xb::xbDbf</a></li>
+<li>cType&#160;:&#160;<a class="el" href="structxb_1_1xbSchema.html#a1d612b2ed5dc0b0289c9e91b3cda3a25">xb::xbSchema</a></li>
+<li>cUpdateDD&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a6021789d314cd41488991e708fcd0df2">xb::xbDbf</a></li>
+<li>cUpdateMM&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a9340a5e8ee53eb0f3b6601eec2d71e1b">xb::xbDbf</a></li>
+<li>cUpdateYY&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a4fcd6a86ddd32d4a9d76a4074573440a">xb::xbDbf</a></li>
+<li>cVersion&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a3a262abf658e5fa968b57ef457a69470">xb::xbDbf</a></li>
+<li>CvtHexChar()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a0a737bd408a94903f214eb2879eb56de">xb::xbString</a></li>
+<li>CvtHexString()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#ab5eb6918a0ae9ab6c0e961318f3d1eb0">xb::xbString</a></li>
+<li>CvtLongLong()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#ae3ab18365e132323f8ae4c99eb72181c">xb::xbString</a></li>
+<li>CvtULongLong()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a1528b30b84a41c3564ef31d1f4496b15">xb::xbString</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_d.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_d.html
new file mode 100644
index 0000000..09be1b7
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_d.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: Data Fields</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
+
+<h3><a id="index_d" name="index_d"></a>- d -</h3><ul>
+<li>DateIsValid()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a367f66ef0c03c1747c12a18784554ccb">xb::xbDate</a></li>
+<li>DayOf()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#ad6417a900ce64a46f8909c0c7a2ddea2">xb::xbDate</a></li>
+<li>DeleteAll()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a01c26b67e312be1e674b3da710e031b9">xb::xbDbf</a></li>
+<li>DeleteAllRecords()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a3067fdfa3a7a5c15651f6e89d1102176">xb::xbDbf</a></li>
+<li>DeleteRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#acd8c10579229f3a2e2c5fdb7fcef90db">xb::xbDbf</a></li>
+<li>DeleteTable()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a4085ed4f049d976124d8edc3d3c56397">xb::xbDbf</a></li>
+<li>DetermineXbaseMemoVersion()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a5a740033664c9ad2611c90e2a6d0c2d3">xb::xbFile</a></li>
+<li>DetermineXbaseTableVersion()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#ae2b6ac26018dc28f77afbb3f008c3f66">xb::xbFile</a></li>
+<li>DisableMsgLogging()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#ae357fac4fdebdf49e46563cf611caf65">xb::xbXBase</a></li>
+<li>DisplayError()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a97dfa59ab9a8e9f17454da0faceb023d">xb::xbSsv</a></li>
+<li>DisplayTableList()&#160;:&#160;<a class="el" href="classxb_1_1xbTblMgr.html#a5eebffb9e8cc64141e35c2622045cb50">xb::xbTblMgr</a></li>
+<li>DumpHeader()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a47643728f74cf3b6e0ffc55259895bdb">xb::xbDbf</a></li>
+<li>DumpRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#aba30399f15885a07f87f904c0d0656fa">xb::xbDbf</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_e.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_e.html
new file mode 100644
index 0000000..f5c1f56
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_e.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: Data Fields</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
+
+<h3><a id="index_e" name="index_e"></a>- e -</h3><ul>
+<li>eGetDouble()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#ab14e4a11427f5efb81cba1dd32bd1aa1">xb::xbFile</a></li>
+<li>eGetInt16()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#ac40c991110ddc6fb30a72d90f4652762">xb::xbFile</a></li>
+<li>eGetInt32()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a60b24a5afc984c586bf384c7e915ba0d">xb::xbFile</a></li>
+<li>eGetUInt16()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a936ade458e6d5e6d29f9b5031888d189">xb::xbFile</a></li>
+<li>eGetUInt32()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a78f052529d39a18deaface5a0d47d0b0">xb::xbFile</a></li>
+<li>EnableMsgLogging()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#a470e6eb0ed0be60338f9b40976d3ad48">xb::xbXBase</a></li>
+<li>ePutDouble()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a98b6ff533ae93f90c977a2ba23eeb105">xb::xbFile</a></li>
+<li>ePutInt16()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a29130f12739ac8fa837f4eaedf1338b2">xb::xbFile</a></li>
+<li>ePutInt32()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a19c37f76a2ccbb45019cb0fc373d3f46">xb::xbFile</a></li>
+<li>ePutUInt16()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a65e9839f92b96eac7b0d071fac3bbe40">xb::xbFile</a></li>
+<li>ePutUInt32()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#aa3f6ceae4b96f24875d86848bf13a173">xb::xbFile</a></li>
+<li>ErrorCodeText&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a6219f1b5e24ea12fe158cd5aea56988e">xb::xbSsv</a></li>
+<li>ExtractElement()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a6b33a8df49cdcb76033cbce5d8dc59d7">xb::xbString</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/docs/doxygen/html/functions_f.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_f.html
index 152931e..152931e 100644
--- a/docs/doxygen/html/functions_f.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_f.html
diff --git a/docs/doxygen/html/functions_func.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func.html
index 47e8f65..47e8f65 100644
--- a/docs/doxygen/html/functions_func.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func.html
diff --git a/docs/doxygen/html/functions_func_b.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_b.html
index 82917cf..82917cf 100644
--- a/docs/doxygen/html/functions_func_b.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_b.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_c.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_c.html
new file mode 100644
index 0000000..a83cc00
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_c.html
@@ -0,0 +1,94 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: Data Fields - Functions</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;
+
+<h3><a id="index_c" name="index_c"></a>- c -</h3><ul>
+<li>CalcRollingCenturyForYear()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a9df58caa54105c489c314785c457e8cb">xb::xbDate</a></li>
+<li>CenturyOf()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a38b2c5285c69ed65e94ece6c22dafde0">xb::xbDate</a></li>
+<li>CharDayOf()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a9fc29730b66cddfbb58c69992a99cc7c">xb::xbDate</a></li>
+<li>CharMonthOf()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#afffc84f02bd421335ff8ebe9fb3db0ac">xb::xbDate</a></li>
+<li>Close()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ad68d73113e54e1b5f326e90f45e9989d">xb::xbDbf</a></li>
+<li>CloseAllTables()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#afccb552ca0daff779c0500ff20d22c2b">xb::xbXBase</a></li>
+<li>Commit()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#abd69532c885ab72bcf3fb5066b318f4f">xb::xbDbf</a></li>
+<li>Copy()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#ac7a8466b03c04df838bd182ef244f792">xb::xbString</a></li>
+<li>CopyDbfStructure()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a829c615a130a1fdf609d93438d8a6264">xb::xbDbf</a></li>
+<li>CountChar()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a26bc14d92dc7ce1f2bf31cd74af0db0f">xb::xbString</a></li>
+<li>CreateFqn()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#aa41240d920b604dcbd91dce7eecb78e1">xb::xbXBase</a></li>
+<li>CreateTable()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a73e41bfe679dd06ab16c436652df93f1">xb::xbDbf</a></li>
+<li>CreateUniqueFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#ad39797624a752b9d62533d00fad9feff">xb::xbFile</a></li>
+<li>CTOD()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#abb1eb4b0394e4a67aadab15779b1b8c5">xb::xbDate</a></li>
+<li>CvtHexChar()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a0a737bd408a94903f214eb2879eb56de">xb::xbString</a></li>
+<li>CvtHexString()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#ab5eb6918a0ae9ab6c0e961318f3d1eb0">xb::xbString</a></li>
+<li>CvtLongLong()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#ae3ab18365e132323f8ae4c99eb72181c">xb::xbString</a></li>
+<li>CvtULongLong()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a1528b30b84a41c3564ef31d1f4496b15">xb::xbString</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_d.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_d.html
new file mode 100644
index 0000000..fef3ac9
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_d.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: Data Fields - Functions</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;
+
+<h3><a id="index_d" name="index_d"></a>- d -</h3><ul>
+<li>DateIsValid()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a367f66ef0c03c1747c12a18784554ccb">xb::xbDate</a></li>
+<li>DayOf()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#ad6417a900ce64a46f8909c0c7a2ddea2">xb::xbDate</a></li>
+<li>DeleteAll()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a01c26b67e312be1e674b3da710e031b9">xb::xbDbf</a></li>
+<li>DeleteAllRecords()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a3067fdfa3a7a5c15651f6e89d1102176">xb::xbDbf</a></li>
+<li>DeleteRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#acd8c10579229f3a2e2c5fdb7fcef90db">xb::xbDbf</a></li>
+<li>DeleteTable()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a4085ed4f049d976124d8edc3d3c56397">xb::xbDbf</a></li>
+<li>DetermineXbaseMemoVersion()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a5a740033664c9ad2611c90e2a6d0c2d3">xb::xbFile</a></li>
+<li>DetermineXbaseTableVersion()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#ae2b6ac26018dc28f77afbb3f008c3f66">xb::xbFile</a></li>
+<li>DisableMsgLogging()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#ae357fac4fdebdf49e46563cf611caf65">xb::xbXBase</a></li>
+<li>DisplayError()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a97dfa59ab9a8e9f17454da0faceb023d">xb::xbSsv</a></li>
+<li>DisplayTableList()&#160;:&#160;<a class="el" href="classxb_1_1xbTblMgr.html#a5eebffb9e8cc64141e35c2622045cb50">xb::xbTblMgr</a></li>
+<li>DumpHeader()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a47643728f74cf3b6e0ffc55259895bdb">xb::xbDbf</a></li>
+<li>DumpRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#aba30399f15885a07f87f904c0d0656fa">xb::xbDbf</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_e.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_e.html
new file mode 100644
index 0000000..650358a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_e.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: Data Fields - Functions</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;
+
+<h3><a id="index_e" name="index_e"></a>- e -</h3><ul>
+<li>eGetDouble()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#ab14e4a11427f5efb81cba1dd32bd1aa1">xb::xbFile</a></li>
+<li>eGetInt16()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#ac40c991110ddc6fb30a72d90f4652762">xb::xbFile</a></li>
+<li>eGetInt32()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a60b24a5afc984c586bf384c7e915ba0d">xb::xbFile</a></li>
+<li>eGetUInt16()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a936ade458e6d5e6d29f9b5031888d189">xb::xbFile</a></li>
+<li>eGetUInt32()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a78f052529d39a18deaface5a0d47d0b0">xb::xbFile</a></li>
+<li>EnableMsgLogging()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#a470e6eb0ed0be60338f9b40976d3ad48">xb::xbXBase</a></li>
+<li>ePutDouble()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a98b6ff533ae93f90c977a2ba23eeb105">xb::xbFile</a></li>
+<li>ePutInt16()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a29130f12739ac8fa837f4eaedf1338b2">xb::xbFile</a></li>
+<li>ePutInt32()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a19c37f76a2ccbb45019cb0fc373d3f46">xb::xbFile</a></li>
+<li>ePutUInt16()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a65e9839f92b96eac7b0d071fac3bbe40">xb::xbFile</a></li>
+<li>ePutUInt32()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#aa3f6ceae4b96f24875d86848bf13a173">xb::xbFile</a></li>
+<li>ExtractElement()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a6b33a8df49cdcb76033cbce5d8dc59d7">xb::xbString</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/docs/doxygen/html/functions_func_f.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_f.html
index dfdd58b..dfdd58b 100644
--- a/docs/doxygen/html/functions_func_f.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_f.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_g.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_g.html
new file mode 100644
index 0000000..63c14bb
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_g.html
@@ -0,0 +1,143 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: Data Fields - Functions</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;
+
+<h3><a id="index_g" name="index_g"></a>- g -</h3><ul>
+<li>GetAutoCommit()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ae0c00226fd2ea7a67f101e795467ed68">xb::xbDbf</a></li>
+<li>GetBlockSize()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a638e14262410a1627819f016a16cdce2">xb::xbFile</a></li>
+<li>GetBof()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ad0827a43c025c1184ffebab74cc9e779">xb::xbDbf</a></li>
+<li>GetCharacter()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a685187a5f8401b322fc61f3fbe56330d">xb::xbString</a></li>
+<li>GetCmdLineOpt()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#aadecb3ac460d8e94b88b2e809e22f48e">xb::xbXBase</a></li>
+<li>GetCurRecNo()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a643a80a3792a52760c8e09ba18719503">xb::xbDbf</a></li>
+<li>GetDataDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">xb::xbSsv</a></li>
+<li>GetDateField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#af78ef1fba949463ff7f829d3cffc4555">xb::xbDbf</a></li>
+<li>GetDbfPtr()&#160;:&#160;<a class="el" href="classxb_1_1xbTblMgr.html#ad8a5d28a2ee6720a9aa74bcb45662cf5">xb::xbTblMgr</a></li>
+<li>GetDbfStatus()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ac1110d867ba297a52c8b0e83e88f05e6">xb::xbDbf</a></li>
+<li>GetDefaultAutoCommit()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a6982f973e81587b04916f4509746aaf5">xb::xbSsv</a></li>
+<li>GetDefaultDateFormat()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a6fbb9c3a550ab0b3378f9586a57791d2">xb::xbSsv</a></li>
+<li>GetDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#acd0fb2166b2bff7e8a1cf65a7bc8be1e">xb::xbFile</a></li>
+<li>GetDoubleField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a4556041a7ff2f6b6f986729901c11f08">xb::xbDbf</a></li>
+<li>GetEndianType()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">xb::xbSsv</a></li>
+<li>GetEof()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a256dc1f98626fa77da24e91a38ab5b4d">xb::xbDbf</a></li>
+<li>GetErrorMessage()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">xb::xbSsv</a></li>
+<li>GetField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ad245a26eb8b79610c9ae7bab19e05513">xb::xbDbf</a></li>
+<li>GetFieldCnt()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#add27d8ef555a13b336b8c804165dc15e">xb::xbDbf</a></li>
+<li>GetFieldDecimal()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a607f774fcd6dc0b9913d7a7801b60db2">xb::xbDbf</a></li>
+<li>GetFieldLen()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#adda4302b58cc6109b048f19d9b68bbd4">xb::xbDbf</a></li>
+<li>GetFieldName()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a5e3e4368bfba1724c016b8859023e34c">xb::xbDbf</a></li>
+<li>GetFieldNo()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#aed9113b5095c6df1b9c854cbd0d8047b">xb::xbDbf</a></li>
+<li>GetFieldType()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a5143973e4f165651152aa13c8fd45f84">xb::xbDbf</a></li>
+<li>GetFileDirPart()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a60c53998e3d1b694134b20a87bc9bf5a">xb::xbFile</a></li>
+<li>GetFileExtPart()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#ab289b6ffe955321160c1f90220c22e25">xb::xbFile</a></li>
+<li>GetFileMtime()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a02df78f4c90313243f508fc56b95aba8">xb::xbFile</a></li>
+<li>GetFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#ac95cb882ccbcdedc9a233c6ad9fed07a">xb::xbFile</a></li>
+<li>GetFileNamePart()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a81422b3dd52763d2cc6c77237ec9af0a">xb::xbFile</a></li>
+<li>GetFileSize()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a50b63c39e49d44e52078038027b24cc5">xb::xbFile</a></li>
+<li>GetFileType()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a5548236d38d43b89ae29b9a015b1f678">xb::xbFile</a></li>
+<li>GetFirstRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a6fc5b8a3e2f177d5ceaf9d975cbb5226">xb::xbDbf</a></li>
+<li>GetFloatField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a3443f646038ced14425f067a59c0f2da">xb::xbDbf</a></li>
+<li>GetFqFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a31b4e641f93206ba23e2a5a27491dcd4">xb::xbFile</a></li>
+<li>GetFunctionInfo()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#ae52e53340593b4253936c1372ec15ee1">xb::xbXBase</a></li>
+<li>GetHeaderLen()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ad56be2756b7a9f8318d9ba5cf215dafb">xb::xbDbf</a></li>
+<li>GetHomeDir()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">xb::xbSsv</a></li>
+<li>GetLastPos()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#ac7698665f44413a5e99a5b5bc573c6df">xb::xbString</a></li>
+<li>GetLastRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a49e667f9c8ee55c36444702663fc5964">xb::xbDbf</a></li>
+<li>GetLogDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a4822315bded3969b59aeeb683c373051">xb::xbSsv</a></li>
+<li>GetLogFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#afaef09435be73b3111f5edbd7091d861">xb::xbSsv</a></li>
+<li>GetLogFqFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#ab5d63cd7d9137eba8a1d4d9c3df522b7">xb::xbXBase</a></li>
+<li>GetLogicalField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ab28feef20c988b0a6f1c1911a45377b0">xb::xbDbf</a></li>
+<li>GetLogSize()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#aedb4c2aa2c90e4529915198a2305b355">xb::xbXBase</a></li>
+<li>GetLogStatus()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#ade34cd72c2a7e70fb55429a8a6f6c028">xb::xbXBase</a></li>
+<li>GetLongField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#abe525c0820640e0a9e169d0b7913cfa1">xb::xbDbf</a></li>
+<li>GetMultiUser()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">xb::xbSsv</a></li>
+<li>GetNextRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ab896fe3b734f556de578d30f92b18fe2">xb::xbDbf</a></li>
+<li>GetNullSts()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a7930fe8b930c6d646b7b0d3df576fe9e">xb::xbDbf</a></li>
+<li>GetOpenMode()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a3c500dc9dac22c49496e4b29386b2dd3">xb::xbFile</a></li>
+<li>GetOpenTableCount()&#160;:&#160;<a class="el" href="classxb_1_1xbTblMgr.html#ad0d2d4adabc0dc0e761cfdee63c84069">xb::xbTblMgr</a></li>
+<li>GetPathSeparator()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a63cee13b473ee13970e93b11837b9e35">xb::xbSsv</a>, <a class="el" href="classxb_1_1xbString.html#af8b8b808cf43cd352321b43f500142db">xb::xbString</a></li>
+<li>GetPrevRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ab3d248e5221b4f0809897cd43af17a1e">xb::xbDbf</a></li>
+<li>GetRawField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#aabd146c0e1054ab905ec96aedd84b02e">xb::xbDbf</a></li>
+<li>GetRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a26fba086b07caeab95066bf1c8d25161">xb::xbDbf</a></li>
+<li>GetRecordBuf()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#aa3e38c4057d726a28a27d07a1610d124">xb::xbDbf</a></li>
+<li>GetRecordCnt()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ac196ad55335e1f4789d698748434dc89">xb::xbDbf</a></li>
+<li>GetRecordLen()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ab50d76c6e29e81e347a6feb04c2f62bb">xb::xbDbf</a></li>
+<li>GetShareMode()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a9b63e05b77f477ff6109ff7b9432c1b6">xb::xbFile</a></li>
+<li>GetSize()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a6c33e73659f8e98819289d2661c7271c">xb::xbString</a></li>
+<li>GetTblAlias()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a27758a325c097f204247908b65ba7fbd">xb::xbDbf</a></li>
+<li>GetTblListEntry()&#160;:&#160;<a class="el" href="classxb_1_1xbTblMgr.html#acbf148ddba4297021cfb980a161ebef9">xb::xbTblMgr</a></li>
+<li>GetTempDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#abfaeef85935331073d213465bb362a61">xb::xbSsv</a></li>
+<li>GetULongField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a67e3a050f9090edf69eee75aef7f5d83">xb::xbDbf</a></li>
+<li>GetVersion()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a49212a9eb17f7fa9f303e08d5fc50fc6">xb::xbDbf</a></li>
+<li>GetXbaseFileTypeByte()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#aaf2e697751a0beff41432a66bb83fb5e">xb::xbFile</a></li>
+<li>GetXbasePtr()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ab21ec23c076b0c9affdc0f6672bd133f">xb::xbDbf</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/docs/doxygen/html/functions_func_h.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_h.html
index 16e9fbf..16e9fbf 100644
--- a/docs/doxygen/html/functions_func_h.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_h.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_i.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_i.html
new file mode 100644
index 0000000..d389a63
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_i.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: Data Fields - Functions</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;
+
+<h3><a id="index_i" name="index_i"></a>- i -</h3><ul>
+<li>InitVars()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ad06fe0f7975fb81125d27d82504e6829">xb::xbDbf</a></li>
+<li>IsEmpty()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a4a255a30d683acd62ea09c1617b53cb3">xb::xbString</a></li>
+<li>IsLeapYear()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#af2bd33a72448e2c5ee00d8b711dc5d95">xb::xbDate</a></li>
+<li>IsNull()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a611a64b14ff89ad3c20b34081ea1e658">xb::xbDate</a>, <a class="el" href="classxb_1_1xbString.html#a3fa34fa31bcb7244ecb054ab628ad500">xb::xbString</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/docs/doxygen/html/functions_func_j.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_j.html
index 8624d83..8624d83 100644
--- a/docs/doxygen/html/functions_func_j.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_j.html
diff --git a/docs/doxygen/html/functions_func_l.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_l.html
index 3e81352..3e81352 100644
--- a/docs/doxygen/html/functions_func_l.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_l.html
diff --git a/docs/doxygen/html/functions_func_m.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_m.html
index cf56d43..cf56d43 100644
--- a/docs/doxygen/html/functions_func_m.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_m.html
diff --git a/docs/doxygen/html/functions_func_n.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_n.html
index d46a5b1..d46a5b1 100644
--- a/docs/doxygen/html/functions_func_n.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_n.html
diff --git a/docs/doxygen/html/functions_func_o.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_o.html
index 09eacbf..09eacbf 100644
--- a/docs/doxygen/html/functions_func_o.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_o.html
diff --git a/docs/doxygen/html/functions_func_p.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_p.html
index 3985e96..3985e96 100644
--- a/docs/doxygen/html/functions_func_p.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_p.html
diff --git a/docs/doxygen/html/functions_func_r.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_r.html
index 87f9921..87f9921 100644
--- a/docs/doxygen/html/functions_func_r.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_r.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_s.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_s.html
new file mode 100644
index 0000000..ae5806a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_s.html
@@ -0,0 +1,99 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: Data Fields - Functions</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;
+
+<h3><a id="index_s" name="index_s"></a>- s -</h3><ul>
+<li>Set()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a4b0cde152b5de0f7d26608d1445110b6">xb::xbDate</a>, <a class="el" href="classxb_1_1xbString.html#ab85753d2c39882e946a8468cbb587700">xb::xbString</a></li>
+<li>SetAutoCommit()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a4cf7f0d423164f3cf074ae41f96f4e90">xb::xbDbf</a></li>
+<li>SetBlockSize()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a991c5676a6f38fa752435390989f413e">xb::xbFile</a></li>
+<li>SetDataDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">xb::xbSsv</a></li>
+<li>SetDefaultAutoCommit()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">xb::xbSsv</a></li>
+<li>SetDefaultDateFormat()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">xb::xbSsv</a></li>
+<li>SetDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#ae78a85255488bc78964c16946dbaead3">xb::xbFile</a></li>
+<li>SetEndianType()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a904ec348fd029d4a76e72b8fde636108">xb::xbSsv</a></li>
+<li>SetFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a5419eb27e56822f828b2b88a9502a636">xb::xbFile</a></li>
+<li>SetFqFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#aee832fa11db2077a532f49e1329bd05a">xb::xbFile</a></li>
+<li>SetHomeFolders()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a060acbfaa8d528f86cb59301814b414a">xb::xbFile</a></li>
+<li>SetLogDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a7b992ed97281bf25b5b66f5df686225e">xb::xbSsv</a></li>
+<li>SetLogFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a7f05738e7dfd759e89990242ef503544">xb::xbSsv</a></li>
+<li>SetLogSize()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#a666a0cb5b76ec7a9a3677d339e0c6b42">xb::xbXBase</a></li>
+<li>SetMultiUser()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#aba6e59512f7172dd55dcf92059e5928c">xb::xbSsv</a></li>
+<li>SetNum()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a3af5b1f111f94b0667551fcbd1d97abd">xb::xbString</a></li>
+<li>SetTempDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a17c229a20ef9ab4034df8f9cd657adb2">xb::xbSsv</a></li>
+<li>SetVersion()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a7e63e852418f337eb7c44de5dcd50323">xb::xbDbf</a></li>
+<li>Sprintf()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a9e9bfa29d86377b915f1628aeb0e9195">xb::xbString</a></li>
+<li>Str()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#ab43a5d8d929767c0ffdd722972bb8cc0">xb::xbDate</a>, <a class="el" href="classxb_1_1xbString.html#a6715f4c0010f3ab487c9d787838a29b3">xb::xbString</a></li>
+<li>strncpy()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a3bc9e856c34f0c240a6e36e5b6e3ea7b">xb::xbString</a></li>
+<li>SwapChars()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a054683872e1f05d11c2cf8683a63a6fe">xb::xbString</a></li>
+<li>Sysdate()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a40ba54a58d64cf56266f020f91584192">xb::xbDate</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/docs/doxygen/html/functions_func_t.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_t.html
index f711fd7..f711fd7 100644
--- a/docs/doxygen/html/functions_func_t.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_t.html
diff --git a/docs/doxygen/html/functions_func_u.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_u.html
index d607254..d607254 100644
--- a/docs/doxygen/html/functions_func_u.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_u.html
diff --git a/docs/doxygen/html/functions_func_v.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_v.html
index 5be4554..5be4554 100644
--- a/docs/doxygen/html/functions_func_v.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_v.html
diff --git a/docs/doxygen/html/functions_func_w.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_w.html
index 05f56b1..05f56b1 100644
--- a/docs/doxygen/html/functions_func_w.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_w.html
diff --git a/docs/doxygen/html/functions_func_x.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_x.html
index b5fe61e..b5fe61e 100644
--- a/docs/doxygen/html/functions_func_x.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_x.html
diff --git a/docs/doxygen/html/functions_func_y.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_y.html
index 7da0e45..7da0e45 100644
--- a/docs/doxygen/html/functions_func_y.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_y.html
diff --git a/docs/doxygen/html/functions_func_z.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_z.html
index 93817cc..93817cc 100644
--- a/docs/doxygen/html/functions_func_z.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_z.html
diff --git a/docs/doxygen/html/functions_func_~.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_~.html
index 27db43a..27db43a 100644
--- a/docs/doxygen/html/functions_func_~.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_~.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_g.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_g.html
new file mode 100644
index 0000000..b816f89
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_g.html
@@ -0,0 +1,143 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: Data Fields</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
+
+<h3><a id="index_g" name="index_g"></a>- g -</h3><ul>
+<li>GetAutoCommit()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ae0c00226fd2ea7a67f101e795467ed68">xb::xbDbf</a></li>
+<li>GetBlockSize()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a638e14262410a1627819f016a16cdce2">xb::xbFile</a></li>
+<li>GetBof()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ad0827a43c025c1184ffebab74cc9e779">xb::xbDbf</a></li>
+<li>GetCharacter()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a685187a5f8401b322fc61f3fbe56330d">xb::xbString</a></li>
+<li>GetCmdLineOpt()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#aadecb3ac460d8e94b88b2e809e22f48e">xb::xbXBase</a></li>
+<li>GetCurRecNo()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a643a80a3792a52760c8e09ba18719503">xb::xbDbf</a></li>
+<li>GetDataDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">xb::xbSsv</a></li>
+<li>GetDateField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#af78ef1fba949463ff7f829d3cffc4555">xb::xbDbf</a></li>
+<li>GetDbfPtr()&#160;:&#160;<a class="el" href="classxb_1_1xbTblMgr.html#ad8a5d28a2ee6720a9aa74bcb45662cf5">xb::xbTblMgr</a></li>
+<li>GetDbfStatus()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ac1110d867ba297a52c8b0e83e88f05e6">xb::xbDbf</a></li>
+<li>GetDefaultAutoCommit()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a6982f973e81587b04916f4509746aaf5">xb::xbSsv</a></li>
+<li>GetDefaultDateFormat()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a6fbb9c3a550ab0b3378f9586a57791d2">xb::xbSsv</a></li>
+<li>GetDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#acd0fb2166b2bff7e8a1cf65a7bc8be1e">xb::xbFile</a></li>
+<li>GetDoubleField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a4556041a7ff2f6b6f986729901c11f08">xb::xbDbf</a></li>
+<li>GetEndianType()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">xb::xbSsv</a></li>
+<li>GetEof()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a256dc1f98626fa77da24e91a38ab5b4d">xb::xbDbf</a></li>
+<li>GetErrorMessage()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">xb::xbSsv</a></li>
+<li>GetField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ad245a26eb8b79610c9ae7bab19e05513">xb::xbDbf</a></li>
+<li>GetFieldCnt()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#add27d8ef555a13b336b8c804165dc15e">xb::xbDbf</a></li>
+<li>GetFieldDecimal()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a607f774fcd6dc0b9913d7a7801b60db2">xb::xbDbf</a></li>
+<li>GetFieldLen()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#adda4302b58cc6109b048f19d9b68bbd4">xb::xbDbf</a></li>
+<li>GetFieldName()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a5e3e4368bfba1724c016b8859023e34c">xb::xbDbf</a></li>
+<li>GetFieldNo()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#aed9113b5095c6df1b9c854cbd0d8047b">xb::xbDbf</a></li>
+<li>GetFieldType()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a5143973e4f165651152aa13c8fd45f84">xb::xbDbf</a></li>
+<li>GetFileDirPart()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a60c53998e3d1b694134b20a87bc9bf5a">xb::xbFile</a></li>
+<li>GetFileExtPart()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#ab289b6ffe955321160c1f90220c22e25">xb::xbFile</a></li>
+<li>GetFileMtime()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a02df78f4c90313243f508fc56b95aba8">xb::xbFile</a></li>
+<li>GetFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#ac95cb882ccbcdedc9a233c6ad9fed07a">xb::xbFile</a></li>
+<li>GetFileNamePart()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a81422b3dd52763d2cc6c77237ec9af0a">xb::xbFile</a></li>
+<li>GetFileSize()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a50b63c39e49d44e52078038027b24cc5">xb::xbFile</a></li>
+<li>GetFileType()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a5548236d38d43b89ae29b9a015b1f678">xb::xbFile</a></li>
+<li>GetFirstRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a6fc5b8a3e2f177d5ceaf9d975cbb5226">xb::xbDbf</a></li>
+<li>GetFloatField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a3443f646038ced14425f067a59c0f2da">xb::xbDbf</a></li>
+<li>GetFqFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a31b4e641f93206ba23e2a5a27491dcd4">xb::xbFile</a></li>
+<li>GetFunctionInfo()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#ae52e53340593b4253936c1372ec15ee1">xb::xbXBase</a></li>
+<li>GetHeaderLen()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ad56be2756b7a9f8318d9ba5cf215dafb">xb::xbDbf</a></li>
+<li>GetHomeDir()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">xb::xbSsv</a></li>
+<li>GetLastPos()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#ac7698665f44413a5e99a5b5bc573c6df">xb::xbString</a></li>
+<li>GetLastRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a49e667f9c8ee55c36444702663fc5964">xb::xbDbf</a></li>
+<li>GetLogDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a4822315bded3969b59aeeb683c373051">xb::xbSsv</a></li>
+<li>GetLogFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#afaef09435be73b3111f5edbd7091d861">xb::xbSsv</a></li>
+<li>GetLogFqFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#ab5d63cd7d9137eba8a1d4d9c3df522b7">xb::xbXBase</a></li>
+<li>GetLogicalField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ab28feef20c988b0a6f1c1911a45377b0">xb::xbDbf</a></li>
+<li>GetLogSize()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#aedb4c2aa2c90e4529915198a2305b355">xb::xbXBase</a></li>
+<li>GetLogStatus()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#ade34cd72c2a7e70fb55429a8a6f6c028">xb::xbXBase</a></li>
+<li>GetLongField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#abe525c0820640e0a9e169d0b7913cfa1">xb::xbDbf</a></li>
+<li>GetMultiUser()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">xb::xbSsv</a></li>
+<li>GetNextRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ab896fe3b734f556de578d30f92b18fe2">xb::xbDbf</a></li>
+<li>GetNullSts()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a7930fe8b930c6d646b7b0d3df576fe9e">xb::xbDbf</a></li>
+<li>GetOpenMode()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a3c500dc9dac22c49496e4b29386b2dd3">xb::xbFile</a></li>
+<li>GetOpenTableCount()&#160;:&#160;<a class="el" href="classxb_1_1xbTblMgr.html#ad0d2d4adabc0dc0e761cfdee63c84069">xb::xbTblMgr</a></li>
+<li>GetPathSeparator()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a63cee13b473ee13970e93b11837b9e35">xb::xbSsv</a>, <a class="el" href="classxb_1_1xbString.html#af8b8b808cf43cd352321b43f500142db">xb::xbString</a></li>
+<li>GetPrevRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ab3d248e5221b4f0809897cd43af17a1e">xb::xbDbf</a></li>
+<li>GetRawField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#aabd146c0e1054ab905ec96aedd84b02e">xb::xbDbf</a></li>
+<li>GetRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a26fba086b07caeab95066bf1c8d25161">xb::xbDbf</a></li>
+<li>GetRecordBuf()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#aa3e38c4057d726a28a27d07a1610d124">xb::xbDbf</a></li>
+<li>GetRecordCnt()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ac196ad55335e1f4789d698748434dc89">xb::xbDbf</a></li>
+<li>GetRecordLen()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ab50d76c6e29e81e347a6feb04c2f62bb">xb::xbDbf</a></li>
+<li>GetShareMode()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a9b63e05b77f477ff6109ff7b9432c1b6">xb::xbFile</a></li>
+<li>GetSize()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a6c33e73659f8e98819289d2661c7271c">xb::xbString</a></li>
+<li>GetTblAlias()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a27758a325c097f204247908b65ba7fbd">xb::xbDbf</a></li>
+<li>GetTblListEntry()&#160;:&#160;<a class="el" href="classxb_1_1xbTblMgr.html#acbf148ddba4297021cfb980a161ebef9">xb::xbTblMgr</a></li>
+<li>GetTempDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#abfaeef85935331073d213465bb362a61">xb::xbSsv</a></li>
+<li>GetULongField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a67e3a050f9090edf69eee75aef7f5d83">xb::xbDbf</a></li>
+<li>GetVersion()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a49212a9eb17f7fa9f303e08d5fc50fc6">xb::xbDbf</a></li>
+<li>GetXbaseFileTypeByte()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#aaf2e697751a0beff41432a66bb83fb5e">xb::xbFile</a></li>
+<li>GetXbasePtr()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ab21ec23c076b0c9affdc0f6672bd133f">xb::xbDbf</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/docs/doxygen/html/functions_h.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_h.html
index f8c6626..f8c6626 100644
--- a/docs/doxygen/html/functions_h.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_h.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_i.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_i.html
new file mode 100644
index 0000000..94fd6dc
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_i.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: Data Fields</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
+
+<h3><a id="index_i" name="index_i"></a>- i -</h3><ul>
+<li>iAutoCommit&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ab506450954bc86e7bf1d7c4efe681f43">xb::xbDbf</a></li>
+<li>iDbfStatus&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a6d8e193da3ca414eef1e8866ec5ca81b">xb::xbDbf</a></li>
+<li>iEndianType&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a5849e813f5e8e1cd180f0366637adbf3">xb::xbSsv</a></li>
+<li>iFieldLen&#160;:&#160;<a class="el" href="structxb_1_1xbSchema.html#a2da554af25ef628acf59bb52996056ac">xb::xbSchema</a></li>
+<li>iFileVersion&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a15f495446f0d75bcf2fa89e3b699d388">xb::xbDbf</a></li>
+<li>iFldNo&#160;:&#160;<a class="el" href="structsFldMap.html#a42eb801a85d8b60f06c4fe1be13ca723">sFldMap</a></li>
+<li>InitVars()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ad06fe0f7975fb81125d27d82504e6829">xb::xbDbf</a></li>
+<li>iNoOfDecs&#160;:&#160;<a class="el" href="structxb_1_1xbSchema.html#a55bab3bb69dee3508d168c93e182d4b9">xb::xbSchema</a></li>
+<li>iNoOfFields&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a5056757614c39f725cc775332494966a">xb::xbDbf</a></li>
+<li>iRecPos&#160;:&#160;<a class="el" href="structsFldMap.html#a02facce45c24ebecc13975c17fd52b8f">sFldMap</a></li>
+<li>IsEmpty()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a4a255a30d683acd62ea09c1617b53cb3">xb::xbString</a></li>
+<li>IsLeapYear()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#af2bd33a72448e2c5ee00d8b711dc5d95">xb::xbDate</a></li>
+<li>IsNull()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a611a64b14ff89ad3c20b34081ea1e658">xb::xbDate</a>, <a class="el" href="classxb_1_1xbString.html#a3fa34fa31bcb7244ecb054ab628ad500">xb::xbString</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/docs/doxygen/html/functions_j.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_j.html
index 7c9cd00..7c9cd00 100644
--- a/docs/doxygen/html/functions_j.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_j.html
diff --git a/docs/doxygen/html/functions_l.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_l.html
index 778f618..778f618 100644
--- a/docs/doxygen/html/functions_l.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_l.html
diff --git a/docs/doxygen/html/functions_m.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_m.html
index c4bd343..c4bd343 100644
--- a/docs/doxygen/html/functions_m.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_m.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_n.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_n.html
new file mode 100644
index 0000000..f0a4c72
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_n.html
@@ -0,0 +1,78 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: Data Fields</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
+
+<h3><a id="index_n" name="index_n"></a>- n -</h3><ul>
+<li>NameSuffixMissing()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a361e3cc318bbf1c4d10f069e0800a24e">xb::xbFile</a></li>
+<li>next&#160;:&#160;<a class="el" href="structsFldMap.html#a16eaff8fc09adc3faf453bfaa0d3baaa">sFldMap</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/docs/doxygen/html/functions_o.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_o.html
index 95321c1..95321c1 100644
--- a/docs/doxygen/html/functions_o.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_o.html
diff --git a/docs/doxygen/html/functions_p.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_p.html
index a2d9678..a2d9678 100644
--- a/docs/doxygen/html/functions_p.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_p.html
diff --git a/docs/doxygen/html/functions_r.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_r.html
index f3d770b..f3d770b 100644
--- a/docs/doxygen/html/functions_r.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_r.html
diff --git a/docs/doxygen/html/functions_rela.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_rela.html
index 332a716..332a716 100644
--- a/docs/doxygen/html/functions_rela.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_rela.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_s.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_s.html
new file mode 100644
index 0000000..16d70ea
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_s.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: Data Fields</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
+
+<h3><a id="index_s" name="index_s"></a>- s -</h3><ul>
+<li>sAlias&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a73f9c792d0a769e2e604c1855245a276">xb::xbDbf</a></li>
+<li>SchemaPtr&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ad8c8b5eb12063bb898da1b2cc02cfce7">xb::xbDbf</a></li>
+<li>Set()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a4b0cde152b5de0f7d26608d1445110b6">xb::xbDate</a>, <a class="el" href="classxb_1_1xbString.html#ab85753d2c39882e946a8468cbb587700">xb::xbString</a></li>
+<li>SetAutoCommit()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a4cf7f0d423164f3cf074ae41f96f4e90">xb::xbDbf</a></li>
+<li>SetBlockSize()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a991c5676a6f38fa752435390989f413e">xb::xbFile</a></li>
+<li>SetDataDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">xb::xbSsv</a></li>
+<li>SetDefaultAutoCommit()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">xb::xbSsv</a></li>
+<li>SetDefaultDateFormat()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">xb::xbSsv</a></li>
+<li>SetDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#ae78a85255488bc78964c16946dbaead3">xb::xbFile</a></li>
+<li>SetEndianType()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a904ec348fd029d4a76e72b8fde636108">xb::xbSsv</a></li>
+<li>SetFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a5419eb27e56822f828b2b88a9502a636">xb::xbFile</a></li>
+<li>SetFqFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#aee832fa11db2077a532f49e1329bd05a">xb::xbFile</a></li>
+<li>SetHomeFolders()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a060acbfaa8d528f86cb59301814b414a">xb::xbFile</a></li>
+<li>SetLogDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a7b992ed97281bf25b5b66f5df686225e">xb::xbSsv</a></li>
+<li>SetLogFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a7f05738e7dfd759e89990242ef503544">xb::xbSsv</a></li>
+<li>SetLogSize()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#a666a0cb5b76ec7a9a3677d339e0c6b42">xb::xbXBase</a></li>
+<li>SetMultiUser()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#aba6e59512f7172dd55dcf92059e5928c">xb::xbSsv</a></li>
+<li>SetNum()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a3af5b1f111f94b0667551fcbd1d97abd">xb::xbString</a></li>
+<li>SetTempDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a17c229a20ef9ab4034df8f9cd657adb2">xb::xbSsv</a></li>
+<li>SetVersion()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a7e63e852418f337eb7c44de5dcd50323">xb::xbDbf</a></li>
+<li>sNullString&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a9dec3164c3b264882df634915ecf21da">xb::xbSsv</a></li>
+<li>Sprintf()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a9e9bfa29d86377b915f1628aeb0e9195">xb::xbString</a></li>
+<li>Str()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#ab43a5d8d929767c0ffdd722972bb8cc0">xb::xbDate</a>, <a class="el" href="classxb_1_1xbString.html#a6715f4c0010f3ab487c9d787838a29b3">xb::xbString</a></li>
+<li>strncpy()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a3bc9e856c34f0c240a6e36e5b6e3ea7b">xb::xbString</a></li>
+<li>SwapChars()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a054683872e1f05d11c2cf8683a63a6fe">xb::xbString</a></li>
+<li>Sysdate()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a40ba54a58d64cf56266f020f91584192">xb::xbDate</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/docs/doxygen/html/functions_t.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_t.html
index a88f838..a88f838 100644
--- a/docs/doxygen/html/functions_t.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_t.html
diff --git a/docs/doxygen/html/functions_u.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_u.html
index 90e93a2..90e93a2 100644
--- a/docs/doxygen/html/functions_u.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_u.html
diff --git a/docs/doxygen/html/functions_v.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_v.html
index 969ce10..969ce10 100644
--- a/docs/doxygen/html/functions_v.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_v.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_vars.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_vars.html
new file mode 100644
index 0000000..f193350
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_vars.html
@@ -0,0 +1,145 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: Data Fields - Variables</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;
+
+<h3><a id="index_c" name="index_c"></a>- c -</h3><ul>
+<li>cEncryptionFlag&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a8734e799707582f022fc341d515650f4">xb::xbDbf</a></li>
+<li>cFieldName&#160;:&#160;<a class="el" href="structxb_1_1xbSchema.html#a514183856094123fd37df67885b4681e">xb::xbSchema</a></li>
+<li>cFldType&#160;:&#160;<a class="el" href="structsFldMap.html#af89b26b2d4bc6e26c597f8c48b97b1a3">sFldMap</a></li>
+<li>cIndexFlag&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ad59074633641e03647e54d2b66c9102b">xb::xbDbf</a></li>
+<li>cLangDriver&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#aea1dfe5cbd1f9cdbcfc8eb04b2c3d5f1">xb::xbDbf</a></li>
+<li>cTransactionFlag&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ac3c89fc3bc6a6abf385478a8adbed970">xb::xbDbf</a></li>
+<li>cType&#160;:&#160;<a class="el" href="structxb_1_1xbSchema.html#a1d612b2ed5dc0b0289c9e91b3cda3a25">xb::xbSchema</a></li>
+<li>cUpdateDD&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a6021789d314cd41488991e708fcd0df2">xb::xbDbf</a></li>
+<li>cUpdateMM&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a9340a5e8ee53eb0f3b6601eec2d71e1b">xb::xbDbf</a></li>
+<li>cUpdateYY&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a4fcd6a86ddd32d4a9d76a4074573440a">xb::xbDbf</a></li>
+<li>cVersion&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a3a262abf658e5fa968b57ef457a69470">xb::xbDbf</a></li>
+</ul>
+
+
+<h3><a id="index_e" name="index_e"></a>- e -</h3><ul>
+<li>ErrorCodeText&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a6219f1b5e24ea12fe158cd5aea56988e">xb::xbSsv</a></li>
+</ul>
+
+
+<h3><a id="index_i" name="index_i"></a>- i -</h3><ul>
+<li>iAutoCommit&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ab506450954bc86e7bf1d7c4efe681f43">xb::xbDbf</a></li>
+<li>iDbfStatus&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a6d8e193da3ca414eef1e8866ec5ca81b">xb::xbDbf</a></li>
+<li>iEndianType&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a5849e813f5e8e1cd180f0366637adbf3">xb::xbSsv</a></li>
+<li>iFieldLen&#160;:&#160;<a class="el" href="structxb_1_1xbSchema.html#a2da554af25ef628acf59bb52996056ac">xb::xbSchema</a></li>
+<li>iFileVersion&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a15f495446f0d75bcf2fa89e3b699d388">xb::xbDbf</a></li>
+<li>iFldNo&#160;:&#160;<a class="el" href="structsFldMap.html#a42eb801a85d8b60f06c4fe1be13ca723">sFldMap</a></li>
+<li>iNoOfDecs&#160;:&#160;<a class="el" href="structxb_1_1xbSchema.html#a55bab3bb69dee3508d168c93e182d4b9">xb::xbSchema</a></li>
+<li>iNoOfFields&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a5056757614c39f725cc775332494966a">xb::xbDbf</a></li>
+<li>iRecPos&#160;:&#160;<a class="el" href="structsFldMap.html#a02facce45c24ebecc13975c17fd52b8f">sFldMap</a></li>
+</ul>
+
+
+<h3><a id="index_n" name="index_n"></a>- n -</h3><ul>
+<li>next&#160;:&#160;<a class="el" href="structsFldMap.html#a16eaff8fc09adc3faf453bfaa0d3baaa">sFldMap</a></li>
+</ul>
+
+
+<h3><a id="index_p" name="index_p"></a>- p -</h3><ul>
+<li>pDbf&#160;:&#160;<a class="el" href="structxb_1_1xbTblList.html#a387d3f6bbf291a1fb96d276ed9bb96b6">xb::xbTblList</a></li>
+<li>pNext&#160;:&#160;<a class="el" href="structxb_1_1xbTblList.html#a3fd169fcf0fd4df927544e5342db583c">xb::xbTblList</a></li>
+<li>psFqTblName&#160;:&#160;<a class="el" href="structxb_1_1xbTblList.html#aceec65f6f6b585788cf98e8dabd2737d">xb::xbTblList</a></li>
+<li>psTblAlias&#160;:&#160;<a class="el" href="structxb_1_1xbTblList.html#ac87742c8a6b1cf2e7e35218e96966a05">xb::xbTblList</a></li>
+<li>psTblName&#160;:&#160;<a class="el" href="structxb_1_1xbTblList.html#a02c3b0c47fd104ef9758b375ecdcfd0f">xb::xbTblList</a></li>
+</ul>
+
+
+<h3><a id="index_r" name="index_r"></a>- r -</h3><ul>
+<li>RecBuf&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a8a9b3bce0b741e73473d3ebbd6e6f1cd">xb::xbDbf</a></li>
+<li>RecBuf2&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a353ebfc8a2960ef827f429ec74025606">xb::xbDbf</a></li>
+</ul>
+
+
+<h3><a id="index_s" name="index_s"></a>- s -</h3><ul>
+<li>sAlias&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a73f9c792d0a769e2e604c1855245a276">xb::xbDbf</a></li>
+<li>SchemaPtr&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ad8c8b5eb12063bb898da1b2cc02cfce7">xb::xbDbf</a></li>
+<li>sNullString&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a9dec3164c3b264882df634915ecf21da">xb::xbSsv</a></li>
+</ul>
+
+
+<h3><a id="index_u" name="index_u"></a>- u -</h3><ul>
+<li>uiHeaderLen&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a62f5fa9149ae0f6dc75642823de66918">xb::xbDbf</a></li>
+<li>uiRecordLen&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a1760e222567e2c849f9c799b9d896e91">xb::xbDbf</a></li>
+<li>ulCurRec&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#afcd99924606be0a9e1e25180bcd1abf8">xb::xbDbf</a></li>
+<li>ulNoOfRecs&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#acb594ab61dd35b17bdf28394083f8e87">xb::xbDbf</a></li>
+</ul>
+
+
+<h3><a id="index_x" name="index_x"></a>- x -</h3><ul>
+<li>xbase&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#ae39a67ea391b46055d4ca299cb222004">xb::xbFile</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/docs/doxygen/html/functions_w.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_w.html
index 3d42dbb..3d42dbb 100644
--- a/docs/doxygen/html/functions_w.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_w.html
diff --git a/docs/doxygen/html/functions_x.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_x.html
index d7e5863..d7e5863 100644
--- a/docs/doxygen/html/functions_x.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_x.html
diff --git a/docs/doxygen/html/functions_y.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_y.html
index 0b6c266..0b6c266 100644
--- a/docs/doxygen/html/functions_y.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_y.html
diff --git a/docs/doxygen/html/functions_z.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_z.html
index 8ef0a42..8ef0a42 100644
--- a/docs/doxygen/html/functions_z.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_z.html
diff --git a/docs/doxygen/html/functions_~.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_~.html
index 45300d3..45300d3 100644
--- a/docs/doxygen/html/functions_~.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_~.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/globals.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/globals.html
new file mode 100644
index 0000000..892c182
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/globals.html
@@ -0,0 +1,227 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a id="index_c" name="index_c"></a>- c -</h3><ul>
+<li>ChronTime()&#160;:&#160;<a class="el" href="tstfuncs_8cpp.html#af990eed1e43605771a5810196b4043f7">tstfuncs.cpp</a></li>
+</ul>
+
+
+<h3><a id="index_d" name="index_d"></a>- d -</h3><ul>
+<li>dblEquals()&#160;:&#160;<a class="el" href="tstfuncs_8cpp.html#a8b8e417213c57f2ea0bcb61a7fb28860">tstfuncs.cpp</a></li>
+<li>dblMax()&#160;:&#160;<a class="el" href="tstfuncs_8cpp.html#a69a6e718e066af7f8392e5f1fea40d1b">tstfuncs.cpp</a></li>
+<li>dblMin()&#160;:&#160;<a class="el" href="tstfuncs_8cpp.html#a4d7b8f3f1ce52c6c0a281f25419f4c93">tstfuncs.cpp</a></li>
+<li>DevTester()&#160;:&#160;<a class="el" href="xb__test__expression_8cpp.html#aee57237c5f5b9b4d80e84bf530eb42bc">xb_test_expression.cpp</a></li>
+</ul>
+
+
+<h3><a id="index_g" name="index_g"></a>- g -</h3><ul>
+<li>GetNextSqlCmd()&#160;:&#160;<a class="el" href="xb__execsql_8cpp.html#adb176b752e38521fdb334b4976965945">xb_execsql.cpp</a></li>
+</ul>
+
+
+<h3><a id="index_i" name="index_i"></a>- i -</h3><ul>
+<li>InitTime()&#160;:&#160;<a class="el" href="tstfuncs_8cpp.html#ab1f17da15e67a8b2460d5a88b7a3db6e">tstfuncs.cpp</a></li>
+</ul>
+
+
+<h3><a id="index_j" name="index_j"></a>- j -</h3><ul>
+<li>JUL_OFFSET&#160;:&#160;<a class="el" href="xbdate_8h.html#a119f32fda399e2ebc2d734012a130e8f">xbdate.h</a></li>
+</ul>
+
+
+<h3><a id="index_l" name="index_l"></a>- l -</h3><ul>
+<li>LK_CLIPPER&#160;:&#160;<a class="el" href="xbdbf_8h.html#a01d6d7910b0da2170eb904a97d864a41">xbdbf.h</a></li>
+<li>LK_DBASE&#160;:&#160;<a class="el" href="xbdbf_8h.html#a4c08d01bd69e295b001bd00a228d8106">xbdbf.h</a></li>
+<li>LK_FOX&#160;:&#160;<a class="el" href="xbdbf_8h.html#a65e29186276222f460a7171803e07adf">xbdbf.h</a></li>
+<li>LK_XBASE64&#160;:&#160;<a class="el" href="xbdbf_8h.html#a42aea0ccd94f7422c8e0d7422dce85a4">xbdbf.h</a></li>
+</ul>
+
+
+<h3><a id="index_m" name="index_m"></a>- m -</h3><ul>
+<li>main()&#160;:&#160;<a class="el" href="xb__cfg__check_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_cfg_check.cpp</a>, <a class="el" href="xb__test__lock_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_lock.cpp</a>, <a class="el" href="xb__test__lock2_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_lock2.cpp</a>, <a class="el" href="xb__test__log_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_log.cpp</a>, <a class="el" href="xb__test__mdx_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_mdx.cpp</a>, <a class="el" href="xb__test__ndx_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_ndx.cpp</a>, <a class="el" href="xb__test__sql_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_sql.cpp</a>, <a class="el" href="xb__test__string_8cpp.html#aabf71bc9adb6daf457b2ea8879ae537f">xb_test_string.cpp</a>, <a class="el" href="xb__test__tblmgr_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_tblmgr.cpp</a>, <a class="el" href="xb__test__tdx_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_tdx.cpp</a>, <a class="el" href="xb__test__uda_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_uda.cpp</a>, <a class="el" href="xb__test__xbase_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_xbase.cpp</a>, <a class="el" href="xb__ex__expression_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_expression.cpp</a>, <a class="el" href="xb__copydbf_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_copydbf.cpp</a>, <a class="el" href="xb__dbfutil_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_dbfutil.cpp</a>, <a class="el" href="xb__deletall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_deletall.cpp</a>, <a class="el" href="xb__dumpdbt_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_dumpdbt.cpp</a>, <a class="el" href="xb__dumprecs_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_dumprecs.cpp</a>, <a class="el" href="xb__execsql_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_execsql.cpp</a>, <a class="el" href="xb__import_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_import.cpp</a>, <a class="el" href="xb__pack_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_pack.cpp</a>, <a class="el" href="xb__tblinfo_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_tblinfo.cpp</a>, <a class="el" href="xb__undelall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_undelall.cpp</a>, <a class="el" href="xb__test__funcs_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_funcs.cpp</a>, <a class="el" href="xb__ex__date_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_date.cpp</a>, <a class="el" href="xb__ex__log_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_ex_log.cpp</a>, <a class="el" href="xb__ex__sql_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_ex_sql.cpp</a>, <a class="el" href="xb__ex__ssv_8cpp.html#a6438fb6826a353355708e08b4395d689">xb_ex_ssv.cpp</a>, <a class="el" href="xb__ex__string_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_string.cpp</a>, <a class="el" href="xb__ex__v3__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_v3_create_dbf.cpp</a>, <a class="el" href="xb__ex__v3__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_v3_upd_dbf.cpp</a>, <a class="el" href="xb__ex__v4__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_v4_create_dbf.cpp</a>, <a class="el" href="xb__ex__v4__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_v4_upd_dbf.cpp</a>, <a class="el" href="xb__test__bcd_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_bcd.cpp</a>, <a class="el" href="xb__test__blockread_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_blockread.cpp</a>, <a class="el" href="xb__test__date_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_date.cpp</a>, <a class="el" href="xb__test__dbf__v3__memos_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_dbf_v3_memos.cpp</a>, <a class="el" href="xb__test__dbf__v3__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_dbf_v3_nomemos.cpp</a>, <a class="el" href="xb__test__dbf__v4__memos_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_dbf_v4_memos.cpp</a>, <a class="el" href="xb__test__dbf__v4__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_dbf_v4_nomemos.cpp</a>, <a class="el" href="xb__test__expnode_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_expnode.cpp</a>, <a class="el" href="xb__test__expression_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_expression.cpp</a>, <a class="el" href="xb__test__file_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_file.cpp</a>, <a class="el" href="xb__test__filter_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_filter.cpp</a>, <a class="el" href="xb__test__linklist_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_linklist.cpp</a></li>
+<li>MyDbfRec&#160;:&#160;<a class="el" href="xb__test__blockread_8cpp.html#af68c3291a63fdf20ffa0e477460d148e">xb_test_blockread.cpp</a></li>
+<li>MyV4Record&#160;:&#160;<a class="el" href="xb__ex__expression_8cpp.html#a2122b9562802e2fd799b20454000dc99">xb_ex_expression.cpp</a></li>
+</ul>
+
+
+<h3><a id="index_p" name="index_p"></a>- p -</h3><ul>
+<li>PrintHelp()&#160;:&#160;<a class="el" href="xb__dbfutil_8cpp.html#a9c55a055e1cd4249c7f47e19dc7ac564">xb_dbfutil.cpp</a>, <a class="el" href="xb__deletall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_deletall.cpp</a>, <a class="el" href="xb__dumpdbt_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_dumpdbt.cpp</a>, <a class="el" href="xb__dumprecs_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_dumprecs.cpp</a>, <a class="el" href="xb__execsql_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_execsql.cpp</a>, <a class="el" href="xb__import_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_import.cpp</a>, <a class="el" href="xb__pack_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_pack.cpp</a>, <a class="el" href="xb__tblinfo_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_tblinfo.cpp</a>, <a class="el" href="xb__undelall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_undelall.cpp</a>, <a class="el" href="xb__copydbf_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_copydbf.cpp</a></li>
+<li>PrintResult()&#160;:&#160;<a class="el" href="xb__ex__expression_8cpp.html#a3234afc912211aec54c10d363d28cbda">xb_ex_expression.cpp</a></li>
+<li>PrintVersion()&#160;:&#160;<a class="el" href="xb__copydbf_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_copydbf.cpp</a>, <a class="el" href="xb__dbfutil_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_dbfutil.cpp</a>, <a class="el" href="xb__deletall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_deletall.cpp</a>, <a class="el" href="xb__dumpdbt_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_dumpdbt.cpp</a>, <a class="el" href="xb__dumprecs_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_dumprecs.cpp</a>, <a class="el" href="xb__execsql_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_execsql.cpp</a>, <a class="el" href="xb__import_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_import.cpp</a>, <a class="el" href="xb__pack_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_pack.cpp</a>, <a class="el" href="xb__tblinfo_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_tblinfo.cpp</a>, <a class="el" href="xb__undelall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_undelall.cpp</a></li>
+</ul>
+
+
+<h3><a id="index_t" name="index_t"></a>- t -</h3><ul>
+<li>TestMethod()&#160;:&#160;<a class="el" href="tstfuncs_8cpp.html#a265547b80a3aef5836952bede5288e2c">tstfuncs.cpp</a>, <a class="el" href="xb__test__expression_8cpp.html#ad52c27685018dda7c5c4b26fb445860e">xb_test_expression.cpp</a></li>
+<li>TestTokenMethod()&#160;:&#160;<a class="el" href="xb__test__expression_8cpp.html#a440d64b55abaa9e14e73ecc132d1084d">xb_test_expression.cpp</a></li>
+<li>TestWeight()&#160;:&#160;<a class="el" href="xb__test__expression_8cpp.html#af56b6dbc38e0d23caaf6531526315379">xb_test_expression.cpp</a></li>
+<li>timer&#160;:&#160;<a class="el" href="tstfuncs_8cpp.html#ae2281da6157495d69406c35f69a61f9f">tstfuncs.cpp</a></li>
+</ul>
+
+
+<h3><a id="index_v" name="index_v"></a>- v -</h3><ul>
+<li>VERBOSE&#160;:&#160;<a class="el" href="xb__test__string_8cpp.html#a42f8c497a1968074f38bf5055c650dca">xb_test_string.cpp</a></li>
+</ul>
+
+
+<h3><a id="index_x" name="index_x"></a>- x -</h3><ul>
+<li>XB_ACTIVE_RECS&#160;:&#160;<a class="el" href="xbdbf_8h.html#a1c44bb25bf2e23a3a9d3d2312df0b592">xbdbf.h</a></li>
+<li>XB_ALL_RECS&#160;:&#160;<a class="el" href="xbdbf_8h.html#a8bd17730da3ba5c55a6a07bc482dd0e4">xbdbf.h</a></li>
+<li>XB_ALREADY_OPEN&#160;:&#160;<a class="el" href="xbretcod_8h.html#aa2ff8301503f446c6a5f6510090e520f">xbretcod.h</a></li>
+<li>XB_BLOCKREAD_NOT_ENABLED&#160;:&#160;<a class="el" href="xbretcod_8h.html#aae9241d91cfb37f5d236128b3bce0a4a">xbretcod.h</a></li>
+<li>XB_BOF&#160;:&#160;<a class="el" href="xbretcod_8h.html#ade5f3a7cf1467d12761e4e21b5e4200f">xbretcod.h</a></li>
+<li>XB_CHAR_FLD&#160;:&#160;<a class="el" href="xbdbf_8h.html#a20f739b9d9dc6a002a246a999e76aeaa">xbdbf.h</a></li>
+<li>XB_CHAREOF&#160;:&#160;<a class="el" href="xbdbf_8h.html#ada1115f596131888c04df61546b198c4">xbdbf.h</a></li>
+<li>XB_CHARHDR&#160;:&#160;<a class="el" href="xbdbf_8h.html#a35d56cac7959c1e5c761684ced3f1e17">xbdbf.h</a></li>
+<li>XB_CLOSE_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#a030684d5541cf6127a76d81b0684b235">xbretcod.h</a></li>
+<li>XB_CLOSED&#160;:&#160;<a class="el" href="xbdbf_8h.html#a843ca4569326dbd1d0647899b0eb512f">xbdbf.h</a></li>
+<li>XB_DATE_FLD&#160;:&#160;<a class="el" href="xbdbf_8h.html#a7f685e6f5fe804b2174725a27ce73adc">xbdbf.h</a></li>
+<li>XB_DBF_FILE_NOT_OPEN&#160;:&#160;<a class="el" href="xbretcod_8h.html#a8104510b347c87998eadd0b27201e3c2">xbretcod.h</a></li>
+<li>XB_DELETE_FAILED&#160;:&#160;<a class="el" href="xbretcod_8h.html#ada15513935d5ede9216f07c0438f34d2">xbretcod.h</a></li>
+<li>XB_DELETED_RECS&#160;:&#160;<a class="el" href="xbdbf_8h.html#acc0a441854ed92b9d65d1181a97cad43">xbdbf.h</a></li>
+<li>XB_DIRECTORY_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#af532df74147ce2d872f61abfee49c53e">xbretcod.h</a></li>
+<li>XB_DONTOVERLAY&#160;:&#160;<a class="el" href="xbdbf_8h.html#a7b797840abdb3291373d15978103a778">xbdbf.h</a></li>
+<li>XB_DUP_TABLE_OR_ALIAS&#160;:&#160;<a class="el" href="xbretcod_8h.html#ac18036408d10e5eee1bf76cf92352b95">xbretcod.h</a></li>
+<li>XB_EMPTY&#160;:&#160;<a class="el" href="xbretcod_8h.html#a18068d0cbe0c7a1b4dd3176220180c29">xbretcod.h</a></li>
+<li>XB_EOF&#160;:&#160;<a class="el" href="xbretcod_8h.html#a8b47031e90c3f86306c7058e4490d3b7">xbretcod.h</a></li>
+<li>XB_FILE_EXISTS&#160;:&#160;<a class="el" href="xbretcod_8h.html#a54303a9677dbd5342233f33dd08c64d0">xbretcod.h</a></li>
+<li>XB_FILE_NOT_FOUND&#160;:&#160;<a class="el" href="xbretcod_8h.html#ad090af330c93111d12f6de35dbb065bc">xbretcod.h</a></li>
+<li>XB_FILE_TYPE_NOT_SUPPORTED&#160;:&#160;<a class="el" href="xbretcod_8h.html#ab7b9130a5f1df9975cfeaf6241933596">xbretcod.h</a></li>
+<li>XB_FLOAT_FLD&#160;:&#160;<a class="el" href="xbdbf_8h.html#a96ab4218d70ab603b4866354ce8c18cd">xbdbf.h</a></li>
+<li>XB_FMT_MONTH&#160;:&#160;<a class="el" href="xbdate_8h.html#aeacf2f7cc897ab5bd64781c0fb52b75d">xbdate.h</a></li>
+<li>XB_FMT_WEEK&#160;:&#160;<a class="el" href="xbdate_8h.html#a8f22704d3fd93fa85dd93b6c699e8178">xbdate.h</a></li>
+<li>XB_FMT_YEAR&#160;:&#160;<a class="el" href="xbdate_8h.html#aa29d78982a9e007874af1c4f4e4d1aa4">xbdate.h</a></li>
+<li>XB_INCOMPATIBLE_OPERANDS&#160;:&#160;<a class="el" href="xbretcod_8h.html#af141ec58b7ca7360e0be6c61d015ea74">xbretcod.h</a></li>
+<li>XB_INCONSISTENT_PARM_LENS&#160;:&#160;<a class="el" href="xbretcod_8h.html#adc4b24bfffa202f8df25409894e547b9">xbretcod.h</a></li>
+<li>XB_INVALID_BLOCK_NO&#160;:&#160;<a class="el" href="xbretcod_8h.html#a4e13b529b486c43ca600ce7d8ddbf3c2">xbretcod.h</a></li>
+<li>XB_INVALID_BLOCK_SIZE&#160;:&#160;<a class="el" href="xbretcod_8h.html#a1bd22921612389c37f6b2eac438c62c5">xbretcod.h</a></li>
+<li>XB_INVALID_DATA&#160;:&#160;<a class="el" href="xbretcod_8h.html#afb40bbed323ecb369dd430a2e1242f9a">xbretcod.h</a></li>
+<li>XB_INVALID_DATE&#160;:&#160;<a class="el" href="xbretcod_8h.html#a702475500357a27b8a34463be3e11925">xbretcod.h</a></li>
+<li>XB_INVALID_EXPRESSION&#160;:&#160;<a class="el" href="xbretcod_8h.html#a54db562c3cae97581812b4fccd52b71a">xbretcod.h</a></li>
+<li>XB_INVALID_FIELD&#160;:&#160;<a class="el" href="xbretcod_8h.html#a34180b2e2bd350ba2ebcdd1335e15d7e">xbretcod.h</a></li>
+<li>XB_INVALID_FIELD_LEN&#160;:&#160;<a class="el" href="xbretcod_8h.html#a7bd322c0efbba17f68ccccd6cf624411">xbretcod.h</a></li>
+<li>XB_INVALID_FIELD_NAME&#160;:&#160;<a class="el" href="xbretcod_8h.html#a59403978784130834cf39434cb73f96e">xbretcod.h</a></li>
+<li>XB_INVALID_FIELD_NO&#160;:&#160;<a class="el" href="xbretcod_8h.html#a09d6c08a44316f551108a74003efd381">xbretcod.h</a></li>
+<li>XB_INVALID_FIELD_TYPE&#160;:&#160;<a class="el" href="xbretcod_8h.html#a79e2588f067d6e236c0e5a2c0728ba9f">xbretcod.h</a></li>
+<li>XB_INVALID_FUNCTION&#160;:&#160;<a class="el" href="xbretcod_8h.html#a2b7e5e440dbcf5e6dc885b24dbe28742">xbretcod.h</a></li>
+<li>XB_INVALID_INDEX&#160;:&#160;<a class="el" href="xbretcod_8h.html#acd175ef0541e2cad424791bd87619dd4">xbretcod.h</a></li>
+<li>XB_INVALID_KEYNO&#160;:&#160;<a class="el" href="xbretcod_8h.html#aec2c0ac2bd62e0329ef130e4fbda39f8">xbretcod.h</a></li>
+<li>XB_INVALID_LOCK_OPTION&#160;:&#160;<a class="el" href="xbretcod_8h.html#ab45735e63c208eb7e6d6df31fd527aec">xbretcod.h</a></li>
+<li>XB_INVALID_MEMO_FIELD&#160;:&#160;<a class="el" href="xbretcod_8h.html#a187c50745f51bfe4aa6f70a92f16c59f">xbretcod.h</a></li>
+<li>XB_INVALID_NODELINK&#160;:&#160;<a class="el" href="xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb">xbretcod.h</a></li>
+<li>XB_INVALID_OBJECT&#160;:&#160;<a class="el" href="xbretcod_8h.html#a418c047353bc683d0fd6ecbbdd5b7885">xbretcod.h</a></li>
+<li>XB_INVALID_OPTION&#160;:&#160;<a class="el" href="xbretcod_8h.html#af1cd0baf346cad686fa4dd11f700012a">xbretcod.h</a></li>
+<li>XB_INVALID_PAGE&#160;:&#160;<a class="el" href="xbretcod_8h.html#ad0aba12b5ae2137f8d6abd28b47f95f0">xbretcod.h</a></li>
+<li>XB_INVALID_PARAMETER&#160;:&#160;<a class="el" href="xbretcod_8h.html#a1b78533ada854b4185c51ad8a5ce9f02">xbretcod.h</a></li>
+<li>XB_INVALID_PARM&#160;:&#160;<a class="el" href="xbretcod_8h.html#a4cedf96581c9cbc9c14d07494143702d">xbretcod.h</a></li>
+<li>XB_INVALID_RECORD&#160;:&#160;<a class="el" href="xbretcod_8h.html#a0fd212f912b2e62700a66bae95bd73a1">xbretcod.h</a></li>
+<li>XB_INVALID_TABLE_NAME&#160;:&#160;<a class="el" href="xbretcod_8h.html#a53891c95a78483704d2a8e14c4499f92">xbretcod.h</a></li>
+<li>XB_INVALID_TAG&#160;:&#160;<a class="el" href="xbretcod_8h.html#a176d917912d3433f065483f905a4c50a">xbretcod.h</a></li>
+<li>XB_KEY_NOT_UNIQUE&#160;:&#160;<a class="el" href="xbretcod_8h.html#ad60dbb1862c0c1c2dc0464cfbfd93a34">xbretcod.h</a></li>
+<li>XB_LIMIT_REACHED&#160;:&#160;<a class="el" href="xbretcod_8h.html#a59f1a8a6aca19595c2d1804349a24850">xbretcod.h</a></li>
+<li>XB_LOCK&#160;:&#160;<a class="el" href="xbdbf_8h.html#a395a2e101a793bacabf6bc079d178e29">xbdbf.h</a></li>
+<li>XB_LOCK_FAILED&#160;:&#160;<a class="el" href="xbretcod_8h.html#a001e24b39e0f155fb1e892f5b1b9cff1">xbretcod.h</a></li>
+<li>XB_LOGICAL_FLD&#160;:&#160;<a class="el" href="xbdbf_8h.html#a2f6d5073af761bc1a806a2c7b1c1d886">xbdbf.h</a></li>
+<li>XB_MAX_ERROR_NO&#160;:&#160;<a class="el" href="xbretcod_8h.html#a299419a9c80e000b74bf97a2d24d6a3d">xbretcod.h</a></li>
+<li>XB_MEMCPY_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#aa2925f035e3b186d7efa14648ea0e86d">xbretcod.h</a></li>
+<li>XB_MEMO_FLD&#160;:&#160;<a class="el" href="xbdbf_8h.html#a23fa19b19cb43bd6dcc59a5a3f6c30ad">xbdbf.h</a></li>
+<li>XB_MULTI_USER&#160;:&#160;<a class="el" href="xbfile_8h.html#a05c0fc99ba71cf953d046d12f3f874bc">xbfile.h</a></li>
+<li>XB_NO_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">xbretcod.h</a></li>
+<li>XB_NO_MEMORY&#160;:&#160;<a class="el" href="xbretcod_8h.html#ae687fc7d872ba0475a8477e4447f9b54">xbretcod.h</a></li>
+<li>XB_NOT_FOUND&#160;:&#160;<a class="el" href="xbretcod_8h.html#ac2606659a54111334f5b02861e533700">xbretcod.h</a></li>
+<li>XB_NOT_OPEN&#160;:&#160;<a class="el" href="xbretcod_8h.html#a9474b400f647bdefbbb07e5177e8d7a1">xbretcod.h</a></li>
+<li>XB_NULL_DATE&#160;:&#160;<a class="el" href="xbexp_8h.html#a6e9d2ccba2b3ac6e44ab411ffda488c2">xbexp.h</a></li>
+<li>XB_NUMERIC_FLD&#160;:&#160;<a class="el" href="xbdbf_8h.html#ae9fb6d69cc5edc94d36ae403c22ec1c6">xbdbf.h</a></li>
+<li>XB_OPEN&#160;:&#160;<a class="el" href="xbdbf_8h.html#a9a6dafbb07cac744eb14094efa739409">xbdbf.h</a></li>
+<li>XB_OPEN_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#aaab55236993a1d3acb29206252a904c8">xbretcod.h</a></li>
+<li>XB_OVERLAY&#160;:&#160;<a class="el" href="xbdbf_8h.html#a6fe10b307878b4612b04c2c876a4a592">xbdbf.h</a></li>
+<li>XB_PARSE_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#aec713cac2b03a0d536a2d16336ae7c0b">xbretcod.h</a></li>
+<li>XB_READ&#160;:&#160;<a class="el" href="xbfile_8h.html#ae58c73e0ba237fcf67ee20feea6c2743">xbfile.h</a></li>
+<li>XB_READ_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#adbd40585db8bb748d191f94a33bac710">xbretcod.h</a></li>
+<li>XB_READ_WRITE&#160;:&#160;<a class="el" href="xbfile_8h.html#af991a288c327f6857e90156ea734a633">xbfile.h</a></li>
+<li>XB_RENAME_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#a373f30b2efcbbab9f6d060fb3fe8cba3">xbretcod.h</a></li>
+<li>XB_SEEK_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#a0455ad8719e153b08ec68b10c81e9f41">xbretcod.h</a></li>
+<li>XB_SINGLE_USER&#160;:&#160;<a class="el" href="xbfile_8h.html#a9ec4d60a008c667d9861e3b3814f0232">xbfile.h</a></li>
+<li>XB_SYNTAX_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#a5db3a90f215534143bdde81253729c7f">xbretcod.h</a></li>
+<li>XB_TABLE_NOT_LOCKED&#160;:&#160;<a class="el" href="xbretcod_8h.html#af6aaf779fddecca521d785666f6dc56b">xbretcod.h</a></li>
+<li>XB_UNBALANCED_PARENS&#160;:&#160;<a class="el" href="xbretcod_8h.html#aff5646a6b0884ff81004de6961473ea6">xbretcod.h</a></li>
+<li>XB_UNBALANCED_QUOTES&#160;:&#160;<a class="el" href="xbretcod_8h.html#aedfa20a6c4eb9ba3063ba56be8280eac">xbretcod.h</a></li>
+<li>XB_UNLOCK&#160;:&#160;<a class="el" href="xbdbf_8h.html#a21389b73e7b4e7e185fa635b9e354c2e">xbdbf.h</a></li>
+<li>XB_UPDATED&#160;:&#160;<a class="el" href="xbdbf_8h.html#a26e7eeda69f32bc88b08a208ca9e7991">xbdbf.h</a></li>
+<li>XB_WRITE&#160;:&#160;<a class="el" href="xbfile_8h.html#abbf99e259c2f31572c886da6d85b1359">xbfile.h</a></li>
+<li>XB_WRITE_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#aef34ebe6726057f805d6063130280549">xbretcod.h</a></li>
+<li>xbFalse&#160;:&#160;<a class="el" href="xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc">xbtypes.h</a></li>
+<li>xbFileNo&#160;:&#160;<a class="el" href="xbtypes_8h.html#a2c65f692ac861990861575e18f72f6eb">xbtypes.h</a></li>
+<li>xbTrue&#160;:&#160;<a class="el" href="xbtypes_8h.html#ab0ae00665298fe7f5292691cb98ec2d9">xbtypes.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/globals_defs.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/globals_defs.html
new file mode 100644
index 0000000..b9b6729
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/globals_defs.html
@@ -0,0 +1,182 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;
+
+<h3><a id="index_j" name="index_j"></a>- j -</h3><ul>
+<li>JUL_OFFSET&#160;:&#160;<a class="el" href="xbdate_8h.html#a119f32fda399e2ebc2d734012a130e8f">xbdate.h</a></li>
+</ul>
+
+
+<h3><a id="index_l" name="index_l"></a>- l -</h3><ul>
+<li>LK_CLIPPER&#160;:&#160;<a class="el" href="xbdbf_8h.html#a01d6d7910b0da2170eb904a97d864a41">xbdbf.h</a></li>
+<li>LK_DBASE&#160;:&#160;<a class="el" href="xbdbf_8h.html#a4c08d01bd69e295b001bd00a228d8106">xbdbf.h</a></li>
+<li>LK_FOX&#160;:&#160;<a class="el" href="xbdbf_8h.html#a65e29186276222f460a7171803e07adf">xbdbf.h</a></li>
+<li>LK_XBASE64&#160;:&#160;<a class="el" href="xbdbf_8h.html#a42aea0ccd94f7422c8e0d7422dce85a4">xbdbf.h</a></li>
+</ul>
+
+
+<h3><a id="index_v" name="index_v"></a>- v -</h3><ul>
+<li>VERBOSE&#160;:&#160;<a class="el" href="xb__test__string_8cpp.html#a42f8c497a1968074f38bf5055c650dca">xb_test_string.cpp</a></li>
+</ul>
+
+
+<h3><a id="index_x" name="index_x"></a>- x -</h3><ul>
+<li>XB_ACTIVE_RECS&#160;:&#160;<a class="el" href="xbdbf_8h.html#a1c44bb25bf2e23a3a9d3d2312df0b592">xbdbf.h</a></li>
+<li>XB_ALL_RECS&#160;:&#160;<a class="el" href="xbdbf_8h.html#a8bd17730da3ba5c55a6a07bc482dd0e4">xbdbf.h</a></li>
+<li>XB_ALREADY_OPEN&#160;:&#160;<a class="el" href="xbretcod_8h.html#aa2ff8301503f446c6a5f6510090e520f">xbretcod.h</a></li>
+<li>XB_BLOCKREAD_NOT_ENABLED&#160;:&#160;<a class="el" href="xbretcod_8h.html#aae9241d91cfb37f5d236128b3bce0a4a">xbretcod.h</a></li>
+<li>XB_BOF&#160;:&#160;<a class="el" href="xbretcod_8h.html#ade5f3a7cf1467d12761e4e21b5e4200f">xbretcod.h</a></li>
+<li>XB_CHAR_FLD&#160;:&#160;<a class="el" href="xbdbf_8h.html#a20f739b9d9dc6a002a246a999e76aeaa">xbdbf.h</a></li>
+<li>XB_CHAREOF&#160;:&#160;<a class="el" href="xbdbf_8h.html#ada1115f596131888c04df61546b198c4">xbdbf.h</a></li>
+<li>XB_CHARHDR&#160;:&#160;<a class="el" href="xbdbf_8h.html#a35d56cac7959c1e5c761684ced3f1e17">xbdbf.h</a></li>
+<li>XB_CLOSE_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#a030684d5541cf6127a76d81b0684b235">xbretcod.h</a></li>
+<li>XB_CLOSED&#160;:&#160;<a class="el" href="xbdbf_8h.html#a843ca4569326dbd1d0647899b0eb512f">xbdbf.h</a></li>
+<li>XB_DATE_FLD&#160;:&#160;<a class="el" href="xbdbf_8h.html#a7f685e6f5fe804b2174725a27ce73adc">xbdbf.h</a></li>
+<li>XB_DBF_FILE_NOT_OPEN&#160;:&#160;<a class="el" href="xbretcod_8h.html#a8104510b347c87998eadd0b27201e3c2">xbretcod.h</a></li>
+<li>XB_DELETE_FAILED&#160;:&#160;<a class="el" href="xbretcod_8h.html#ada15513935d5ede9216f07c0438f34d2">xbretcod.h</a></li>
+<li>XB_DELETED_RECS&#160;:&#160;<a class="el" href="xbdbf_8h.html#acc0a441854ed92b9d65d1181a97cad43">xbdbf.h</a></li>
+<li>XB_DIRECTORY_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#af532df74147ce2d872f61abfee49c53e">xbretcod.h</a></li>
+<li>XB_DONTOVERLAY&#160;:&#160;<a class="el" href="xbdbf_8h.html#a7b797840abdb3291373d15978103a778">xbdbf.h</a></li>
+<li>XB_DUP_TABLE_OR_ALIAS&#160;:&#160;<a class="el" href="xbretcod_8h.html#ac18036408d10e5eee1bf76cf92352b95">xbretcod.h</a></li>
+<li>XB_EMPTY&#160;:&#160;<a class="el" href="xbretcod_8h.html#a18068d0cbe0c7a1b4dd3176220180c29">xbretcod.h</a></li>
+<li>XB_EOF&#160;:&#160;<a class="el" href="xbretcod_8h.html#a8b47031e90c3f86306c7058e4490d3b7">xbretcod.h</a></li>
+<li>XB_FILE_EXISTS&#160;:&#160;<a class="el" href="xbretcod_8h.html#a54303a9677dbd5342233f33dd08c64d0">xbretcod.h</a></li>
+<li>XB_FILE_NOT_FOUND&#160;:&#160;<a class="el" href="xbretcod_8h.html#ad090af330c93111d12f6de35dbb065bc">xbretcod.h</a></li>
+<li>XB_FILE_TYPE_NOT_SUPPORTED&#160;:&#160;<a class="el" href="xbretcod_8h.html#ab7b9130a5f1df9975cfeaf6241933596">xbretcod.h</a></li>
+<li>XB_FLOAT_FLD&#160;:&#160;<a class="el" href="xbdbf_8h.html#a96ab4218d70ab603b4866354ce8c18cd">xbdbf.h</a></li>
+<li>XB_FMT_MONTH&#160;:&#160;<a class="el" href="xbdate_8h.html#aeacf2f7cc897ab5bd64781c0fb52b75d">xbdate.h</a></li>
+<li>XB_FMT_WEEK&#160;:&#160;<a class="el" href="xbdate_8h.html#a8f22704d3fd93fa85dd93b6c699e8178">xbdate.h</a></li>
+<li>XB_FMT_YEAR&#160;:&#160;<a class="el" href="xbdate_8h.html#aa29d78982a9e007874af1c4f4e4d1aa4">xbdate.h</a></li>
+<li>XB_INCOMPATIBLE_OPERANDS&#160;:&#160;<a class="el" href="xbretcod_8h.html#af141ec58b7ca7360e0be6c61d015ea74">xbretcod.h</a></li>
+<li>XB_INCONSISTENT_PARM_LENS&#160;:&#160;<a class="el" href="xbretcod_8h.html#adc4b24bfffa202f8df25409894e547b9">xbretcod.h</a></li>
+<li>XB_INVALID_BLOCK_NO&#160;:&#160;<a class="el" href="xbretcod_8h.html#a4e13b529b486c43ca600ce7d8ddbf3c2">xbretcod.h</a></li>
+<li>XB_INVALID_BLOCK_SIZE&#160;:&#160;<a class="el" href="xbretcod_8h.html#a1bd22921612389c37f6b2eac438c62c5">xbretcod.h</a></li>
+<li>XB_INVALID_DATA&#160;:&#160;<a class="el" href="xbretcod_8h.html#afb40bbed323ecb369dd430a2e1242f9a">xbretcod.h</a></li>
+<li>XB_INVALID_DATE&#160;:&#160;<a class="el" href="xbretcod_8h.html#a702475500357a27b8a34463be3e11925">xbretcod.h</a></li>
+<li>XB_INVALID_EXPRESSION&#160;:&#160;<a class="el" href="xbretcod_8h.html#a54db562c3cae97581812b4fccd52b71a">xbretcod.h</a></li>
+<li>XB_INVALID_FIELD&#160;:&#160;<a class="el" href="xbretcod_8h.html#a34180b2e2bd350ba2ebcdd1335e15d7e">xbretcod.h</a></li>
+<li>XB_INVALID_FIELD_LEN&#160;:&#160;<a class="el" href="xbretcod_8h.html#a7bd322c0efbba17f68ccccd6cf624411">xbretcod.h</a></li>
+<li>XB_INVALID_FIELD_NAME&#160;:&#160;<a class="el" href="xbretcod_8h.html#a59403978784130834cf39434cb73f96e">xbretcod.h</a></li>
+<li>XB_INVALID_FIELD_NO&#160;:&#160;<a class="el" href="xbretcod_8h.html#a09d6c08a44316f551108a74003efd381">xbretcod.h</a></li>
+<li>XB_INVALID_FIELD_TYPE&#160;:&#160;<a class="el" href="xbretcod_8h.html#a79e2588f067d6e236c0e5a2c0728ba9f">xbretcod.h</a></li>
+<li>XB_INVALID_FUNCTION&#160;:&#160;<a class="el" href="xbretcod_8h.html#a2b7e5e440dbcf5e6dc885b24dbe28742">xbretcod.h</a></li>
+<li>XB_INVALID_INDEX&#160;:&#160;<a class="el" href="xbretcod_8h.html#acd175ef0541e2cad424791bd87619dd4">xbretcod.h</a></li>
+<li>XB_INVALID_KEYNO&#160;:&#160;<a class="el" href="xbretcod_8h.html#aec2c0ac2bd62e0329ef130e4fbda39f8">xbretcod.h</a></li>
+<li>XB_INVALID_LOCK_OPTION&#160;:&#160;<a class="el" href="xbretcod_8h.html#ab45735e63c208eb7e6d6df31fd527aec">xbretcod.h</a></li>
+<li>XB_INVALID_MEMO_FIELD&#160;:&#160;<a class="el" href="xbretcod_8h.html#a187c50745f51bfe4aa6f70a92f16c59f">xbretcod.h</a></li>
+<li>XB_INVALID_NODELINK&#160;:&#160;<a class="el" href="xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb">xbretcod.h</a></li>
+<li>XB_INVALID_OBJECT&#160;:&#160;<a class="el" href="xbretcod_8h.html#a418c047353bc683d0fd6ecbbdd5b7885">xbretcod.h</a></li>
+<li>XB_INVALID_OPTION&#160;:&#160;<a class="el" href="xbretcod_8h.html#af1cd0baf346cad686fa4dd11f700012a">xbretcod.h</a></li>
+<li>XB_INVALID_PAGE&#160;:&#160;<a class="el" href="xbretcod_8h.html#ad0aba12b5ae2137f8d6abd28b47f95f0">xbretcod.h</a></li>
+<li>XB_INVALID_PARAMETER&#160;:&#160;<a class="el" href="xbretcod_8h.html#a1b78533ada854b4185c51ad8a5ce9f02">xbretcod.h</a></li>
+<li>XB_INVALID_PARM&#160;:&#160;<a class="el" href="xbretcod_8h.html#a4cedf96581c9cbc9c14d07494143702d">xbretcod.h</a></li>
+<li>XB_INVALID_RECORD&#160;:&#160;<a class="el" href="xbretcod_8h.html#a0fd212f912b2e62700a66bae95bd73a1">xbretcod.h</a></li>
+<li>XB_INVALID_TABLE_NAME&#160;:&#160;<a class="el" href="xbretcod_8h.html#a53891c95a78483704d2a8e14c4499f92">xbretcod.h</a></li>
+<li>XB_INVALID_TAG&#160;:&#160;<a class="el" href="xbretcod_8h.html#a176d917912d3433f065483f905a4c50a">xbretcod.h</a></li>
+<li>XB_KEY_NOT_UNIQUE&#160;:&#160;<a class="el" href="xbretcod_8h.html#ad60dbb1862c0c1c2dc0464cfbfd93a34">xbretcod.h</a></li>
+<li>XB_LIMIT_REACHED&#160;:&#160;<a class="el" href="xbretcod_8h.html#a59f1a8a6aca19595c2d1804349a24850">xbretcod.h</a></li>
+<li>XB_LOCK&#160;:&#160;<a class="el" href="xbdbf_8h.html#a395a2e101a793bacabf6bc079d178e29">xbdbf.h</a></li>
+<li>XB_LOCK_FAILED&#160;:&#160;<a class="el" href="xbretcod_8h.html#a001e24b39e0f155fb1e892f5b1b9cff1">xbretcod.h</a></li>
+<li>XB_LOGICAL_FLD&#160;:&#160;<a class="el" href="xbdbf_8h.html#a2f6d5073af761bc1a806a2c7b1c1d886">xbdbf.h</a></li>
+<li>XB_MAX_ERROR_NO&#160;:&#160;<a class="el" href="xbretcod_8h.html#a299419a9c80e000b74bf97a2d24d6a3d">xbretcod.h</a></li>
+<li>XB_MEMCPY_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#aa2925f035e3b186d7efa14648ea0e86d">xbretcod.h</a></li>
+<li>XB_MEMO_FLD&#160;:&#160;<a class="el" href="xbdbf_8h.html#a23fa19b19cb43bd6dcc59a5a3f6c30ad">xbdbf.h</a></li>
+<li>XB_MULTI_USER&#160;:&#160;<a class="el" href="xbfile_8h.html#a05c0fc99ba71cf953d046d12f3f874bc">xbfile.h</a></li>
+<li>XB_NO_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">xbretcod.h</a></li>
+<li>XB_NO_MEMORY&#160;:&#160;<a class="el" href="xbretcod_8h.html#ae687fc7d872ba0475a8477e4447f9b54">xbretcod.h</a></li>
+<li>XB_NOT_FOUND&#160;:&#160;<a class="el" href="xbretcod_8h.html#ac2606659a54111334f5b02861e533700">xbretcod.h</a></li>
+<li>XB_NOT_OPEN&#160;:&#160;<a class="el" href="xbretcod_8h.html#a9474b400f647bdefbbb07e5177e8d7a1">xbretcod.h</a></li>
+<li>XB_NULL_DATE&#160;:&#160;<a class="el" href="xbexp_8h.html#a6e9d2ccba2b3ac6e44ab411ffda488c2">xbexp.h</a></li>
+<li>XB_NUMERIC_FLD&#160;:&#160;<a class="el" href="xbdbf_8h.html#ae9fb6d69cc5edc94d36ae403c22ec1c6">xbdbf.h</a></li>
+<li>XB_OPEN&#160;:&#160;<a class="el" href="xbdbf_8h.html#a9a6dafbb07cac744eb14094efa739409">xbdbf.h</a></li>
+<li>XB_OPEN_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#aaab55236993a1d3acb29206252a904c8">xbretcod.h</a></li>
+<li>XB_OVERLAY&#160;:&#160;<a class="el" href="xbdbf_8h.html#a6fe10b307878b4612b04c2c876a4a592">xbdbf.h</a></li>
+<li>XB_PARSE_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#aec713cac2b03a0d536a2d16336ae7c0b">xbretcod.h</a></li>
+<li>XB_READ&#160;:&#160;<a class="el" href="xbfile_8h.html#ae58c73e0ba237fcf67ee20feea6c2743">xbfile.h</a></li>
+<li>XB_READ_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#adbd40585db8bb748d191f94a33bac710">xbretcod.h</a></li>
+<li>XB_READ_WRITE&#160;:&#160;<a class="el" href="xbfile_8h.html#af991a288c327f6857e90156ea734a633">xbfile.h</a></li>
+<li>XB_RENAME_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#a373f30b2efcbbab9f6d060fb3fe8cba3">xbretcod.h</a></li>
+<li>XB_SEEK_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#a0455ad8719e153b08ec68b10c81e9f41">xbretcod.h</a></li>
+<li>XB_SINGLE_USER&#160;:&#160;<a class="el" href="xbfile_8h.html#a9ec4d60a008c667d9861e3b3814f0232">xbfile.h</a></li>
+<li>XB_SYNTAX_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#a5db3a90f215534143bdde81253729c7f">xbretcod.h</a></li>
+<li>XB_TABLE_NOT_LOCKED&#160;:&#160;<a class="el" href="xbretcod_8h.html#af6aaf779fddecca521d785666f6dc56b">xbretcod.h</a></li>
+<li>XB_UNBALANCED_PARENS&#160;:&#160;<a class="el" href="xbretcod_8h.html#aff5646a6b0884ff81004de6961473ea6">xbretcod.h</a></li>
+<li>XB_UNBALANCED_QUOTES&#160;:&#160;<a class="el" href="xbretcod_8h.html#aedfa20a6c4eb9ba3063ba56be8280eac">xbretcod.h</a></li>
+<li>XB_UNLOCK&#160;:&#160;<a class="el" href="xbdbf_8h.html#a21389b73e7b4e7e185fa635b9e354c2e">xbdbf.h</a></li>
+<li>XB_UPDATED&#160;:&#160;<a class="el" href="xbdbf_8h.html#a26e7eeda69f32bc88b08a208ca9e7991">xbdbf.h</a></li>
+<li>XB_WRITE&#160;:&#160;<a class="el" href="xbfile_8h.html#abbf99e259c2f31572c886da6d85b1359">xbfile.h</a></li>
+<li>XB_WRITE_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#aef34ebe6726057f805d6063130280549">xbretcod.h</a></li>
+<li>xbFalse&#160;:&#160;<a class="el" href="xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc">xbtypes.h</a></li>
+<li>xbFileNo&#160;:&#160;<a class="el" href="xbtypes_8h.html#a2c65f692ac861990861575e18f72f6eb">xbtypes.h</a></li>
+<li>xbTrue&#160;:&#160;<a class="el" href="xbtypes_8h.html#ab0ae00665298fe7f5292691cb98ec2d9">xbtypes.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/globals_func.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/globals_func.html
new file mode 100644
index 0000000..65f44a8
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/globals_func.html
@@ -0,0 +1,114 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;
+
+<h3><a id="index_c" name="index_c"></a>- c -</h3><ul>
+<li>ChronTime()&#160;:&#160;<a class="el" href="tstfuncs_8cpp.html#af990eed1e43605771a5810196b4043f7">tstfuncs.cpp</a></li>
+</ul>
+
+
+<h3><a id="index_d" name="index_d"></a>- d -</h3><ul>
+<li>dblEquals()&#160;:&#160;<a class="el" href="tstfuncs_8cpp.html#a8b8e417213c57f2ea0bcb61a7fb28860">tstfuncs.cpp</a></li>
+<li>dblMax()&#160;:&#160;<a class="el" href="tstfuncs_8cpp.html#a69a6e718e066af7f8392e5f1fea40d1b">tstfuncs.cpp</a></li>
+<li>dblMin()&#160;:&#160;<a class="el" href="tstfuncs_8cpp.html#a4d7b8f3f1ce52c6c0a281f25419f4c93">tstfuncs.cpp</a></li>
+<li>DevTester()&#160;:&#160;<a class="el" href="xb__test__expression_8cpp.html#aee57237c5f5b9b4d80e84bf530eb42bc">xb_test_expression.cpp</a></li>
+</ul>
+
+
+<h3><a id="index_g" name="index_g"></a>- g -</h3><ul>
+<li>GetNextSqlCmd()&#160;:&#160;<a class="el" href="xb__execsql_8cpp.html#adb176b752e38521fdb334b4976965945">xb_execsql.cpp</a></li>
+</ul>
+
+
+<h3><a id="index_i" name="index_i"></a>- i -</h3><ul>
+<li>InitTime()&#160;:&#160;<a class="el" href="tstfuncs_8cpp.html#ab1f17da15e67a8b2460d5a88b7a3db6e">tstfuncs.cpp</a></li>
+</ul>
+
+
+<h3><a id="index_m" name="index_m"></a>- m -</h3><ul>
+<li>main()&#160;:&#160;<a class="el" href="xb__cfg__check_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_cfg_check.cpp</a>, <a class="el" href="xb__test__lock_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_lock.cpp</a>, <a class="el" href="xb__test__lock2_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_lock2.cpp</a>, <a class="el" href="xb__test__log_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_log.cpp</a>, <a class="el" href="xb__test__mdx_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_mdx.cpp</a>, <a class="el" href="xb__test__ndx_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_ndx.cpp</a>, <a class="el" href="xb__test__sql_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_sql.cpp</a>, <a class="el" href="xb__test__string_8cpp.html#aabf71bc9adb6daf457b2ea8879ae537f">xb_test_string.cpp</a>, <a class="el" href="xb__test__tblmgr_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_tblmgr.cpp</a>, <a class="el" href="xb__test__tdx_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_tdx.cpp</a>, <a class="el" href="xb__test__uda_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_uda.cpp</a>, <a class="el" href="xb__test__xbase_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_xbase.cpp</a>, <a class="el" href="xb__test__linklist_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_linklist.cpp</a>, <a class="el" href="xb__copydbf_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_copydbf.cpp</a>, <a class="el" href="xb__dbfutil_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_dbfutil.cpp</a>, <a class="el" href="xb__deletall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_deletall.cpp</a>, <a class="el" href="xb__dumpdbt_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_dumpdbt.cpp</a>, <a class="el" href="xb__dumprecs_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_dumprecs.cpp</a>, <a class="el" href="xb__execsql_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_execsql.cpp</a>, <a class="el" href="xb__import_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_import.cpp</a>, <a class="el" href="xb__pack_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_pack.cpp</a>, <a class="el" href="xb__tblinfo_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_tblinfo.cpp</a>, <a class="el" href="xb__undelall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_undelall.cpp</a>, <a class="el" href="xb__test__blockread_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_blockread.cpp</a>, <a class="el" href="xb__ex__expression_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_expression.cpp</a>, <a class="el" href="xb__ex__log_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_ex_log.cpp</a>, <a class="el" href="xb__ex__sql_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_ex_sql.cpp</a>, <a class="el" href="xb__ex__ssv_8cpp.html#a6438fb6826a353355708e08b4395d689">xb_ex_ssv.cpp</a>, <a class="el" href="xb__ex__string_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_string.cpp</a>, <a class="el" href="xb__ex__v3__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_v3_create_dbf.cpp</a>, <a class="el" href="xb__ex__v3__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_v3_upd_dbf.cpp</a>, <a class="el" href="xb__ex__v4__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_v4_create_dbf.cpp</a>, <a class="el" href="xb__ex__v4__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_v4_upd_dbf.cpp</a>, <a class="el" href="xb__test__bcd_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_bcd.cpp</a>, <a class="el" href="xb__ex__date_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_date.cpp</a>, <a class="el" href="xb__test__date_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_date.cpp</a>, <a class="el" href="xb__test__dbf__v3__memos_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_dbf_v3_memos.cpp</a>, <a class="el" href="xb__test__dbf__v3__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_dbf_v3_nomemos.cpp</a>, <a class="el" href="xb__test__dbf__v4__memos_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_dbf_v4_memos.cpp</a>, <a class="el" href="xb__test__dbf__v4__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_dbf_v4_nomemos.cpp</a>, <a class="el" href="xb__test__expnode_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_expnode.cpp</a>, <a class="el" href="xb__test__expression_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_expression.cpp</a>, <a class="el" href="xb__test__file_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_file.cpp</a>, <a class="el" href="xb__test__filter_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_filter.cpp</a>, <a class="el" href="xb__test__funcs_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_funcs.cpp</a></li>
+</ul>
+
+
+<h3><a id="index_p" name="index_p"></a>- p -</h3><ul>
+<li>PrintHelp()&#160;:&#160;<a class="el" href="xb__dbfutil_8cpp.html#a9c55a055e1cd4249c7f47e19dc7ac564">xb_dbfutil.cpp</a>, <a class="el" href="xb__deletall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_deletall.cpp</a>, <a class="el" href="xb__dumpdbt_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_dumpdbt.cpp</a>, <a class="el" href="xb__dumprecs_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_dumprecs.cpp</a>, <a class="el" href="xb__execsql_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_execsql.cpp</a>, <a class="el" href="xb__import_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_import.cpp</a>, <a class="el" href="xb__pack_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_pack.cpp</a>, <a class="el" href="xb__tblinfo_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_tblinfo.cpp</a>, <a class="el" href="xb__undelall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_undelall.cpp</a>, <a class="el" href="xb__copydbf_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_copydbf.cpp</a></li>
+<li>PrintResult()&#160;:&#160;<a class="el" href="xb__ex__expression_8cpp.html#a3234afc912211aec54c10d363d28cbda">xb_ex_expression.cpp</a></li>
+<li>PrintVersion()&#160;:&#160;<a class="el" href="xb__copydbf_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_copydbf.cpp</a>, <a class="el" href="xb__dbfutil_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_dbfutil.cpp</a>, <a class="el" href="xb__deletall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_deletall.cpp</a>, <a class="el" href="xb__dumpdbt_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_dumpdbt.cpp</a>, <a class="el" href="xb__dumprecs_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_dumprecs.cpp</a>, <a class="el" href="xb__execsql_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_execsql.cpp</a>, <a class="el" href="xb__import_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_import.cpp</a>, <a class="el" href="xb__pack_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_pack.cpp</a>, <a class="el" href="xb__tblinfo_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_tblinfo.cpp</a>, <a class="el" href="xb__undelall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_undelall.cpp</a></li>
+</ul>
+
+
+<h3><a id="index_t" name="index_t"></a>- t -</h3><ul>
+<li>TestMethod()&#160;:&#160;<a class="el" href="tstfuncs_8cpp.html#a265547b80a3aef5836952bede5288e2c">tstfuncs.cpp</a>, <a class="el" href="xb__test__expression_8cpp.html#ad52c27685018dda7c5c4b26fb445860e">xb_test_expression.cpp</a></li>
+<li>TestTokenMethod()&#160;:&#160;<a class="el" href="xb__test__expression_8cpp.html#a440d64b55abaa9e14e73ecc132d1084d">xb_test_expression.cpp</a></li>
+<li>TestWeight()&#160;:&#160;<a class="el" href="xb__test__expression_8cpp.html#af56b6dbc38e0d23caaf6531526315379">xb_test_expression.cpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/docs/doxygen/html/globals_vars.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/globals_vars.html
index ae4118a..ae4118a 100644
--- a/docs/doxygen/html/globals_vars.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/globals_vars.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/hierarchy.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/hierarchy.html
new file mode 100644
index 0000000..556162d
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/hierarchy.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: Class Hierarchy</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle"><div class="title">Class Hierarchy</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">This inheritance list is sorted roughly, but not completely, alphabetically:</div><div class="directory">
+<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span>]</div><table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsFldMap.html" target="_self">sFldMap</a></td><td class="desc"></td></tr>
+<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structxb_1_1xbSchema.html" target="_self">xb::xbSchema</a></td><td class="desc">Schema used for defining tables with CreateTable methods </td></tr>
+<tr id="row_2_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_2_" class="arrow" onclick="toggleFolder('2_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbSsv.html" target="_self">xb::xbSsv</a></td><td class="desc">Class for handling shared system variables </td></tr>
+<tr id="row_2_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbDate.html" target="_self">xb::xbDate</a></td><td class="desc">XbDate class </td></tr>
+<tr id="row_2_1_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_2_1_" class="arrow" onclick="toggleFolder('2_1_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbFile.html" target="_self">xb::xbFile</a></td><td class="desc">Class for handling low level file I/O </td></tr>
+<tr id="row_2_1_0_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbDbf.html" target="_self">xb::xbDbf</a></td><td class="desc">Base class for handling dbf files/tables </td></tr>
+<tr id="row_2_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_2_2_" class="arrow" onclick="toggleFolder('2_2_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbTblMgr.html" target="_self">xb::xbTblMgr</a></td><td class="desc"></td></tr>
+<tr id="row_2_2_0_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbXBase.html" target="_self">xb::xbXBase</a></td><td class="desc">XbXbase class </td></tr>
+<tr id="row_3_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbString.html" target="_self">xb::xbString</a></td><td class="desc">Class for handling string data </td></tr>
+<tr id="row_4_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structxb_1_1xbTblList.html" target="_self">xb::xbTblList</a></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/include_2xbcrix_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/include_2xbcrix_8cpp.html
new file mode 100644
index 0000000..4687a16
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/include_2xbcrix_8cpp.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbcrix.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbcrix.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/docs/doxygen/html/index.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/index.html
index 8fd29ce..8fd29ce 100644
--- a/docs/doxygen/html/index.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/index.html
diff --git a/docs/doxygen/html/jquery.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/jquery.js
index c9ed3d9..c9ed3d9 100644
--- a/docs/doxygen/html/jquery.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/jquery.js
diff --git a/docs/doxygen/html/menu.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/menu.js
index 54e81cf..54e81cf 100644
--- a/docs/doxygen/html/menu.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/menu.js
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/menudata.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/menudata.js
new file mode 100644
index 0000000..1eaf8cd
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/menudata.js
@@ -0,0 +1,130 @@
+/*
+ @licstart The following is the entire license notice for the JavaScript code in this file.
+
+ The MIT License (MIT)
+
+ Copyright (C) 1997-2020 by Dimitri van Heesch
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ and associated documentation files (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or
+ substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ @licend The above is the entire license notice for the JavaScript code in this file
+*/
+var menudata={children:[
+{text:"Main Page",url:"index.html"},
+{text:"Namespaces",url:"namespaces.html",children:[
+{text:"Namespace List",url:"namespaces.html"},
+{text:"Namespace Members",url:"namespacemembers.html",children:[
+{text:"All",url:"namespacemembers.html"},
+{text:"Functions",url:"namespacemembers_func.html"},
+{text:"Variables",url:"namespacemembers_vars.html"},
+{text:"Typedefs",url:"namespacemembers_type.html"}]}]},
+{text:"Data Structures",url:"annotated.html",children:[
+{text:"Data Structures",url:"annotated.html"},
+{text:"Data Structure Index",url:"classes.html"},
+{text:"Class Hierarchy",url:"hierarchy.html"},
+{text:"Data Fields",url:"functions.html",children:[
+{text:"All",url:"functions.html",children:[
+{text:"a",url:"functions.html#index_a"},
+{text:"b",url:"functions_b.html#index_b"},
+{text:"c",url:"functions_c.html#index_c"},
+{text:"d",url:"functions_d.html#index_d"},
+{text:"e",url:"functions_e.html#index_e"},
+{text:"f",url:"functions_f.html#index_f"},
+{text:"g",url:"functions_g.html#index_g"},
+{text:"h",url:"functions_h.html#index_h"},
+{text:"i",url:"functions_i.html#index_i"},
+{text:"j",url:"functions_j.html#index_j"},
+{text:"l",url:"functions_l.html#index_l"},
+{text:"m",url:"functions_m.html#index_m"},
+{text:"n",url:"functions_n.html#index_n"},
+{text:"o",url:"functions_o.html#index_o"},
+{text:"p",url:"functions_p.html#index_p"},
+{text:"r",url:"functions_r.html#index_r"},
+{text:"s",url:"functions_s.html#index_s"},
+{text:"t",url:"functions_t.html#index_t"},
+{text:"u",url:"functions_u.html#index_u"},
+{text:"v",url:"functions_v.html#index_v"},
+{text:"w",url:"functions_w.html#index_w"},
+{text:"x",url:"functions_x.html#index_x"},
+{text:"y",url:"functions_y.html#index_y"},
+{text:"z",url:"functions_z.html#index_z"},
+{text:"~",url:"functions_~.html#index__7E"}]},
+{text:"Functions",url:"functions_func.html",children:[
+{text:"a",url:"functions_func.html#index_a"},
+{text:"b",url:"functions_func_b.html#index_b"},
+{text:"c",url:"functions_func_c.html#index_c"},
+{text:"d",url:"functions_func_d.html#index_d"},
+{text:"e",url:"functions_func_e.html#index_e"},
+{text:"f",url:"functions_func_f.html#index_f"},
+{text:"g",url:"functions_func_g.html#index_g"},
+{text:"h",url:"functions_func_h.html#index_h"},
+{text:"i",url:"functions_func_i.html#index_i"},
+{text:"j",url:"functions_func_j.html#index_j"},
+{text:"l",url:"functions_func_l.html#index_l"},
+{text:"m",url:"functions_func_m.html#index_m"},
+{text:"n",url:"functions_func_n.html#index_n"},
+{text:"o",url:"functions_func_o.html#index_o"},
+{text:"p",url:"functions_func_p.html#index_p"},
+{text:"r",url:"functions_func_r.html#index_r"},
+{text:"s",url:"functions_func_s.html#index_s"},
+{text:"t",url:"functions_func_t.html#index_t"},
+{text:"u",url:"functions_func_u.html#index_u"},
+{text:"v",url:"functions_func_v.html#index_v"},
+{text:"w",url:"functions_func_w.html#index_w"},
+{text:"x",url:"functions_func_x.html#index_x"},
+{text:"y",url:"functions_func_y.html#index_y"},
+{text:"z",url:"functions_func_z.html#index_z"},
+{text:"~",url:"functions_func_~.html#index__7E"}]},
+{text:"Variables",url:"functions_vars.html",children:[
+{text:"c",url:"functions_vars.html#index_c"},
+{text:"e",url:"functions_vars.html#index_e"},
+{text:"i",url:"functions_vars.html#index_i"},
+{text:"n",url:"functions_vars.html#index_n"},
+{text:"p",url:"functions_vars.html#index_p"},
+{text:"r",url:"functions_vars.html#index_r"},
+{text:"s",url:"functions_vars.html#index_s"},
+{text:"u",url:"functions_vars.html#index_u"},
+{text:"x",url:"functions_vars.html#index_x"}]},
+{text:"Related Functions",url:"functions_rela.html"}]}]},
+{text:"Files",url:"files.html",children:[
+{text:"File List",url:"files.html"},
+{text:"Globals",url:"globals.html",children:[
+{text:"All",url:"globals.html",children:[
+{text:"c",url:"globals.html#index_c"},
+{text:"d",url:"globals.html#index_d"},
+{text:"g",url:"globals.html#index_g"},
+{text:"i",url:"globals.html#index_i"},
+{text:"j",url:"globals.html#index_j"},
+{text:"l",url:"globals.html#index_l"},
+{text:"m",url:"globals.html#index_m"},
+{text:"p",url:"globals.html#index_p"},
+{text:"t",url:"globals.html#index_t"},
+{text:"v",url:"globals.html#index_v"},
+{text:"x",url:"globals.html#index_x"}]},
+{text:"Functions",url:"globals_func.html",children:[
+{text:"c",url:"globals_func.html#index_c"},
+{text:"d",url:"globals_func.html#index_d"},
+{text:"g",url:"globals_func.html#index_g"},
+{text:"i",url:"globals_func.html#index_i"},
+{text:"m",url:"globals_func.html#index_m"},
+{text:"p",url:"globals_func.html#index_p"},
+{text:"t",url:"globals_func.html#index_t"}]},
+{text:"Variables",url:"globals_vars.html"},
+{text:"Macros",url:"globals_defs.html",children:[
+{text:"j",url:"globals_defs.html#index_j"},
+{text:"l",url:"globals_defs.html#index_l"},
+{text:"v",url:"globals_defs.html#index_v"},
+{text:"x",url:"globals_defs.html#index_x"}]}]}]}]}
diff --git a/docs/doxygen/html/namespacemembers.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/namespacemembers.html
index 31f72b3..31f72b3 100644
--- a/docs/doxygen/html/namespacemembers.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/namespacemembers.html
diff --git a/docs/doxygen/html/namespacemembers_func.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/namespacemembers_func.html
index 90acc35..90acc35 100644
--- a/docs/doxygen/html/namespacemembers_func.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/namespacemembers_func.html
diff --git a/docs/doxygen/html/namespacemembers_type.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/namespacemembers_type.html
index edd39cf..edd39cf 100644
--- a/docs/doxygen/html/namespacemembers_type.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/namespacemembers_type.html
diff --git a/docs/doxygen/html/namespacemembers_vars.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/namespacemembers_vars.html
index caa02e5..caa02e5 100644
--- a/docs/doxygen/html/namespacemembers_vars.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/namespacemembers_vars.html
diff --git a/docs/doxygen/html/namespaces.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/namespaces.html
index c77f658..c77f658 100644
--- a/docs/doxygen/html/namespaces.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/namespaces.html
diff --git a/docs/doxygen/html/namespacexb.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/namespacexb.html
index 38d1e7c..38d1e7c 100644
--- a/docs/doxygen/html/namespacexb.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/namespacexb.html
diff --git a/docs/doxygen/html/nav_f.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/nav_f.png
index 72a58a5..72a58a5 100644
--- a/docs/doxygen/html/nav_f.png
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/nav_f.png
Binary files differ
diff --git a/docs/doxygen/html/nav_g.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/nav_g.png
index 2093a23..2093a23 100644
--- a/docs/doxygen/html/nav_g.png
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/nav_g.png
Binary files differ
diff --git a/docs/doxygen/html/nav_h.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/nav_h.png
index 33389b1..33389b1 100644
--- a/docs/doxygen/html/nav_h.png
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/nav_h.png
Binary files differ
diff --git a/docs/doxygen/html/open.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/open.png
index 30f75c7..30f75c7 100644
--- a/docs/doxygen/html/open.png
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/open.png
Binary files differ
diff --git a/docs/doxygen/html/reindex_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/reindex_8cpp.html
index 8560b2a..8560b2a 100644
--- a/docs/doxygen/html/reindex_8cpp.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/reindex_8cpp.html
diff --git a/docs/doxygen/html/search/all_0.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_0.html
index c36c9af..c36c9af 100644
--- a/docs/doxygen/html/search/all_0.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_0.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_0.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_0.js
new file mode 100644
index 0000000..0f4d535
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_0.js
@@ -0,0 +1,9 @@
+var searchData=
+[
+ ['abort_0',['Abort',['../classxb_1_1xbDbf.html#a4edcf31390fbdc8c3558004770fd9f2f',1,'xb::xbDbf']]],
+ ['addbackslash_1',['AddBackSlash',['../classxb_1_1xbString.html#a6c4fdb689d27a9d19a0b5b4236e1ca62',1,'xb::xbString']]],
+ ['addtbltotbllist_2',['AddTblToTblList',['../classxb_1_1xbTblMgr.html#af16832ff2bfaee09265652e0fc03709a',1,'xb::xbTblMgr::AddTblToTblList(xbDbf *d, const xbString &amp;sFqTblName)'],['../classxb_1_1xbTblMgr.html#a2033188e9b08778188a034a6fc90ca85',1,'xb::xbTblMgr::AddTblToTblList(xbDbf *d, const xbString &amp;sFqTblName, const xbString &amp;sTblAlias)']]],
+ ['append_3',['Append',['../classxb_1_1xbString.html#a8f202e4798491f2ae9ce51ff58dd5815',1,'xb::xbString::Append(const xbString &amp;s)'],['../classxb_1_1xbString.html#a1922319303feb6da1f40b5994c5e8240',1,'xb::xbString::Append(const char *s)'],['../classxb_1_1xbString.html#a097453cb71fbf0b5511cf1259ddce4fb',1,'xb::xbString::Append(const char *s, xbUInt32 iByteCount)'],['../classxb_1_1xbString.html#a093c6ab5df375a2589755bb8f48fa5c7',1,'xb::xbString::Append(char c)']]],
+ ['appendrecord_4',['AppendRecord',['../classxb_1_1xbDbf.html#a5b412dd796241673eb1aa2c93513d69b',1,'xb::xbDbf']]],
+ ['assign_5',['Assign',['../classxb_1_1xbString.html#a85bef82dfa22122a1ab8dfe58a107d96',1,'xb::xbString::Assign(const char *srcStr, xbUInt32 lStartPos, xbUInt32 lCopyLen)'],['../classxb_1_1xbString.html#a08eb7ca6740423acab4e8bd7a6c8043d',1,'xb::xbString::Assign(const char *srcStr, xbUInt32 lStartPos)'],['../classxb_1_1xbString.html#a430119df844bd80d67c23c48b045af30',1,'xb::xbString::Assign(const xbString &amp;s, xbUInt32 ulStartPos, xbUInt32 lCopyLen)'],['../classxb_1_1xbString.html#a97df314be5b3b2611be11ff50a19533d',1,'xb::xbString::Assign(const xbString &amp;s, xbUInt32 ulStartPos)']]]
+];
diff --git a/docs/doxygen/html/search/all_1.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_1.html
index 91cfe8a..91cfe8a 100644
--- a/docs/doxygen/html/search/all_1.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_1.html
diff --git a/docs/doxygen/html/search/all_1.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_1.js
index a3b8ce1..a3b8ce1 100644
--- a/docs/doxygen/html/search/all_1.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_1.js
diff --git a/docs/doxygen/html/search/all_10.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_10.html
index 765f584..765f584 100644
--- a/docs/doxygen/html/search/all_10.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_10.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_10.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_10.js
new file mode 100644
index 0000000..34303fe
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_10.js
@@ -0,0 +1,30 @@
+var searchData=
+[
+ ['salias_0',['sAlias',['../classxb_1_1xbDbf.html#a73f9c792d0a769e2e604c1855245a276',1,'xb::xbDbf']]],
+ ['schemaptr_1',['SchemaPtr',['../classxb_1_1xbDbf.html#ad8c8b5eb12063bb898da1b2cc02cfce7',1,'xb::xbDbf']]],
+ ['set_2',['Set',['../classxb_1_1xbDate.html#a4b0cde152b5de0f7d26608d1445110b6',1,'xb::xbDate::Set()'],['../classxb_1_1xbString.html#ab85753d2c39882e946a8468cbb587700',1,'xb::xbString::Set(const char *s)'],['../classxb_1_1xbString.html#ac0d08bd688fd0e3707e32886d0dfeb09',1,'xb::xbString::Set(const xbString &amp;s)'],['../classxb_1_1xbString.html#a6eba6ccd0c805a22516de2c18a30f8a3',1,'xb::xbString::Set(const char *s, xbUInt32 ulSize)']]],
+ ['setautocommit_3',['SetAutoCommit',['../classxb_1_1xbDbf.html#a4cf7f0d423164f3cf074ae41f96f4e90',1,'xb::xbDbf']]],
+ ['setblocksize_4',['SetBlockSize',['../classxb_1_1xbFile.html#a991c5676a6f38fa752435390989f413e',1,'xb::xbFile']]],
+ ['setdatadirectory_5',['SetDataDirectory',['../classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c',1,'xb::xbSsv']]],
+ ['setdefaultautocommit_6',['SetDefaultAutoCommit',['../classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd',1,'xb::xbSsv']]],
+ ['setdefaultdateformat_7',['SetDefaultDateFormat',['../classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c',1,'xb::xbSsv']]],
+ ['setdirectory_8',['SetDirectory',['../classxb_1_1xbFile.html#ae78a85255488bc78964c16946dbaead3',1,'xb::xbFile']]],
+ ['setendiantype_9',['SetEndianType',['../classxb_1_1xbSsv.html#a904ec348fd029d4a76e72b8fde636108',1,'xb::xbSsv']]],
+ ['setfilename_10',['SetFileName',['../classxb_1_1xbFile.html#a5419eb27e56822f828b2b88a9502a636',1,'xb::xbFile']]],
+ ['setfqfilename_11',['SetFqFileName',['../classxb_1_1xbFile.html#aee832fa11db2077a532f49e1329bd05a',1,'xb::xbFile']]],
+ ['sethomefolders_12',['SetHomeFolders',['../classxb_1_1xbFile.html#a060acbfaa8d528f86cb59301814b414a',1,'xb::xbFile']]],
+ ['setlogdirectory_13',['SetLogDirectory',['../classxb_1_1xbSsv.html#a7b992ed97281bf25b5b66f5df686225e',1,'xb::xbSsv']]],
+ ['setlogfilename_14',['SetLogFileName',['../classxb_1_1xbSsv.html#a7f05738e7dfd759e89990242ef503544',1,'xb::xbSsv']]],
+ ['setlogsize_15',['SetLogSize',['../classxb_1_1xbXBase.html#a666a0cb5b76ec7a9a3677d339e0c6b42',1,'xb::xbXBase']]],
+ ['setmultiuser_16',['SetMultiUser',['../classxb_1_1xbSsv.html#aba6e59512f7172dd55dcf92059e5928c',1,'xb::xbSsv']]],
+ ['setnum_17',['SetNum',['../classxb_1_1xbString.html#a3af5b1f111f94b0667551fcbd1d97abd',1,'xb::xbString']]],
+ ['settempdirectory_18',['SetTempDirectory',['../classxb_1_1xbSsv.html#a17c229a20ef9ab4034df8f9cd657adb2',1,'xb::xbSsv']]],
+ ['setversion_19',['SetVersion',['../classxb_1_1xbDbf.html#a7e63e852418f337eb7c44de5dcd50323',1,'xb::xbDbf']]],
+ ['sfldmap_20',['sFldMap',['../structsFldMap.html',1,'']]],
+ ['snullstring_21',['sNullString',['../classxb_1_1xbSsv.html#a9dec3164c3b264882df634915ecf21da',1,'xb::xbSsv']]],
+ ['sprintf_22',['Sprintf',['../classxb_1_1xbString.html#a9e9bfa29d86377b915f1628aeb0e9195',1,'xb::xbString']]],
+ ['str_23',['Str',['../classxb_1_1xbDate.html#ab43a5d8d929767c0ffdd722972bb8cc0',1,'xb::xbDate::Str()'],['../classxb_1_1xbString.html#a6715f4c0010f3ab487c9d787838a29b3',1,'xb::xbString::Str() const']]],
+ ['strncpy_24',['strncpy',['../classxb_1_1xbString.html#a3bc9e856c34f0c240a6e36e5b6e3ea7b',1,'xb::xbString']]],
+ ['swapchars_25',['SwapChars',['../classxb_1_1xbString.html#a054683872e1f05d11c2cf8683a63a6fe',1,'xb::xbString']]],
+ ['sysdate_26',['Sysdate',['../classxb_1_1xbDate.html#a40ba54a58d64cf56266f020f91584192',1,'xb::xbDate']]]
+];
diff --git a/docs/doxygen/html/search/all_11.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_11.html
index e2183ee..e2183ee 100644
--- a/docs/doxygen/html/search/all_11.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_11.html
diff --git a/docs/doxygen/html/search/all_11.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_11.js
index 06b6b3d..06b6b3d 100644
--- a/docs/doxygen/html/search/all_11.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_11.js
diff --git a/docs/doxygen/html/search/all_12.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_12.html
index 9b9621c..9b9621c 100644
--- a/docs/doxygen/html/search/all_12.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_12.html
diff --git a/docs/doxygen/html/search/all_12.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_12.js
index 56d429c..56d429c 100644
--- a/docs/doxygen/html/search/all_12.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_12.js
diff --git a/docs/doxygen/html/search/all_13.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_13.html
index 4acb7f9..4acb7f9 100644
--- a/docs/doxygen/html/search/all_13.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_13.html
diff --git a/docs/doxygen/html/search/all_13.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_13.js
index 4ebd614..4ebd614 100644
--- a/docs/doxygen/html/search/all_13.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_13.js
diff --git a/docs/doxygen/html/search/all_14.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_14.html
index abb790c..abb790c 100644
--- a/docs/doxygen/html/search/all_14.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_14.html
diff --git a/docs/doxygen/html/search/all_14.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_14.js
index c9794d0..c9794d0 100644
--- a/docs/doxygen/html/search/all_14.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_14.js
diff --git a/docs/doxygen/html/search/all_15.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_15.html
index 33e250b..33e250b 100644
--- a/docs/doxygen/html/search/all_15.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_15.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_15.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_15.js
new file mode 100644
index 0000000..57abaef
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_15.js
@@ -0,0 +1,236 @@
+var searchData=
+[
+ ['xb_0',['xb',['../namespacexb.html',1,'']]],
+ ['xb_5factive_5frecs_1',['XB_ACTIVE_RECS',['../xbdbf_8h.html#a1c44bb25bf2e23a3a9d3d2312df0b592',1,'xbdbf.h']]],
+ ['xb_5fall_5frecs_2',['XB_ALL_RECS',['../xbdbf_8h.html#a8bd17730da3ba5c55a6a07bc482dd0e4',1,'xbdbf.h']]],
+ ['xb_5falready_5fopen_3',['XB_ALREADY_OPEN',['../xbretcod_8h.html#aa2ff8301503f446c6a5f6510090e520f',1,'xbretcod.h']]],
+ ['xb_5fblockread_5fnot_5fenabled_4',['XB_BLOCKREAD_NOT_ENABLED',['../xbretcod_8h.html#aae9241d91cfb37f5d236128b3bce0a4a',1,'xbretcod.h']]],
+ ['xb_5fbof_5',['XB_BOF',['../xbretcod_8h.html#ade5f3a7cf1467d12761e4e21b5e4200f',1,'xbretcod.h']]],
+ ['xb_5fcfg_5fcheck_2ecpp_6',['xb_cfg_check.cpp',['../xb__cfg__check_8cpp.html',1,'']]],
+ ['xb_5fchar_5ffld_7',['XB_CHAR_FLD',['../xbdbf_8h.html#a20f739b9d9dc6a002a246a999e76aeaa',1,'xbdbf.h']]],
+ ['xb_5fchareof_8',['XB_CHAREOF',['../xbdbf_8h.html#ada1115f596131888c04df61546b198c4',1,'xbdbf.h']]],
+ ['xb_5fcharhdr_9',['XB_CHARHDR',['../xbdbf_8h.html#a35d56cac7959c1e5c761684ced3f1e17',1,'xbdbf.h']]],
+ ['xb_5fclose_5ferror_10',['XB_CLOSE_ERROR',['../xbretcod_8h.html#a030684d5541cf6127a76d81b0684b235',1,'xbretcod.h']]],
+ ['xb_5fclosed_11',['XB_CLOSED',['../xbdbf_8h.html#a843ca4569326dbd1d0647899b0eb512f',1,'xbdbf.h']]],
+ ['xb_5fcopydbf_2ecpp_12',['xb_copydbf.cpp',['../xb__copydbf_8cpp.html',1,'']]],
+ ['xb_5fdate_5ffld_13',['XB_DATE_FLD',['../xbdbf_8h.html#a7f685e6f5fe804b2174725a27ce73adc',1,'xbdbf.h']]],
+ ['xb_5fdbf_5ffile_5fnot_5fopen_14',['XB_DBF_FILE_NOT_OPEN',['../xbretcod_8h.html#a8104510b347c87998eadd0b27201e3c2',1,'xbretcod.h']]],
+ ['xb_5fdbfutil_2ecpp_15',['xb_dbfutil.cpp',['../xb__dbfutil_8cpp.html',1,'']]],
+ ['xb_5fdeletall_2ecpp_16',['xb_deletall.cpp',['../xb__deletall_8cpp.html',1,'']]],
+ ['xb_5fdelete_5ffailed_17',['XB_DELETE_FAILED',['../xbretcod_8h.html#ada15513935d5ede9216f07c0438f34d2',1,'xbretcod.h']]],
+ ['xb_5fdeleted_5frecs_18',['XB_DELETED_RECS',['../xbdbf_8h.html#acc0a441854ed92b9d65d1181a97cad43',1,'xbdbf.h']]],
+ ['xb_5fdirectory_5ferror_19',['XB_DIRECTORY_ERROR',['../xbretcod_8h.html#af532df74147ce2d872f61abfee49c53e',1,'xbretcod.h']]],
+ ['xb_5fdontoverlay_20',['XB_DONTOVERLAY',['../xbdbf_8h.html#a7b797840abdb3291373d15978103a778',1,'xbdbf.h']]],
+ ['xb_5fdumpdbt_2ecpp_21',['xb_dumpdbt.cpp',['../xb__dumpdbt_8cpp.html',1,'']]],
+ ['xb_5fdumprecs_2ecpp_22',['xb_dumprecs.cpp',['../xb__dumprecs_8cpp.html',1,'']]],
+ ['xb_5fdup_5ftable_5for_5falias_23',['XB_DUP_TABLE_OR_ALIAS',['../xbretcod_8h.html#ac18036408d10e5eee1bf76cf92352b95',1,'xbretcod.h']]],
+ ['xb_5fempty_24',['XB_EMPTY',['../xbretcod_8h.html#a18068d0cbe0c7a1b4dd3176220180c29',1,'xbretcod.h']]],
+ ['xb_5feof_25',['XB_EOF',['../xbretcod_8h.html#a8b47031e90c3f86306c7058e4490d3b7',1,'xbretcod.h']]],
+ ['xb_5fex_5fdate_2ecpp_26',['xb_ex_date.cpp',['../xb__ex__date_8cpp.html',1,'']]],
+ ['xb_5fex_5fexpression_2ecpp_27',['xb_ex_expression.cpp',['../xb__ex__expression_8cpp.html',1,'']]],
+ ['xb_5fex_5flog_2ecpp_28',['xb_ex_log.cpp',['../xb__ex__log_8cpp.html',1,'']]],
+ ['xb_5fex_5fsql_2ecpp_29',['xb_ex_sql.cpp',['../xb__ex__sql_8cpp.html',1,'']]],
+ ['xb_5fex_5fssv_2ecpp_30',['xb_ex_ssv.cpp',['../xb__ex__ssv_8cpp.html',1,'']]],
+ ['xb_5fex_5fstring_2ecpp_31',['xb_ex_string.cpp',['../xb__ex__string_8cpp.html',1,'']]],
+ ['xb_5fex_5fv3_5fcreate_5fdbf_2ecpp_32',['xb_ex_v3_create_dbf.cpp',['../xb__ex__v3__create__dbf_8cpp.html',1,'']]],
+ ['xb_5fex_5fv3_5fupd_5fdbf_2ecpp_33',['xb_ex_v3_upd_dbf.cpp',['../xb__ex__v3__upd__dbf_8cpp.html',1,'']]],
+ ['xb_5fex_5fv4_5fcreate_5fdbf_2ecpp_34',['xb_ex_v4_create_dbf.cpp',['../xb__ex__v4__create__dbf_8cpp.html',1,'']]],
+ ['xb_5fex_5fv4_5fupd_5fdbf_2ecpp_35',['xb_ex_v4_upd_dbf.cpp',['../xb__ex__v4__upd__dbf_8cpp.html',1,'']]],
+ ['xb_5fexecsql_2ecpp_36',['xb_execsql.cpp',['../xb__execsql_8cpp.html',1,'']]],
+ ['xb_5ffile_5fexists_37',['XB_FILE_EXISTS',['../xbretcod_8h.html#a54303a9677dbd5342233f33dd08c64d0',1,'xbretcod.h']]],
+ ['xb_5ffile_5fnot_5ffound_38',['XB_FILE_NOT_FOUND',['../xbretcod_8h.html#ad090af330c93111d12f6de35dbb065bc',1,'xbretcod.h']]],
+ ['xb_5ffile_5ftype_5fnot_5fsupported_39',['XB_FILE_TYPE_NOT_SUPPORTED',['../xbretcod_8h.html#ab7b9130a5f1df9975cfeaf6241933596',1,'xbretcod.h']]],
+ ['xb_5ffloat_5ffld_40',['XB_FLOAT_FLD',['../xbdbf_8h.html#a96ab4218d70ab603b4866354ce8c18cd',1,'xbdbf.h']]],
+ ['xb_5ffmt_5fmonth_41',['XB_FMT_MONTH',['../xbdate_8h.html#aeacf2f7cc897ab5bd64781c0fb52b75d',1,'xbdate.h']]],
+ ['xb_5ffmt_5fweek_42',['XB_FMT_WEEK',['../xbdate_8h.html#a8f22704d3fd93fa85dd93b6c699e8178',1,'xbdate.h']]],
+ ['xb_5ffmt_5fyear_43',['XB_FMT_YEAR',['../xbdate_8h.html#aa29d78982a9e007874af1c4f4e4d1aa4',1,'xbdate.h']]],
+ ['xb_5fimport_2ecpp_44',['xb_import.cpp',['../xb__import_8cpp.html',1,'']]],
+ ['xb_5fincompatible_5foperands_45',['XB_INCOMPATIBLE_OPERANDS',['../xbretcod_8h.html#af141ec58b7ca7360e0be6c61d015ea74',1,'xbretcod.h']]],
+ ['xb_5finconsistent_5fparm_5flens_46',['XB_INCONSISTENT_PARM_LENS',['../xbretcod_8h.html#adc4b24bfffa202f8df25409894e547b9',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fblock_5fno_47',['XB_INVALID_BLOCK_NO',['../xbretcod_8h.html#a4e13b529b486c43ca600ce7d8ddbf3c2',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fblock_5fsize_48',['XB_INVALID_BLOCK_SIZE',['../xbretcod_8h.html#a1bd22921612389c37f6b2eac438c62c5',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fdata_49',['XB_INVALID_DATA',['../xbretcod_8h.html#afb40bbed323ecb369dd430a2e1242f9a',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fdate_50',['XB_INVALID_DATE',['../xbretcod_8h.html#a702475500357a27b8a34463be3e11925',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fexpression_51',['XB_INVALID_EXPRESSION',['../xbretcod_8h.html#a54db562c3cae97581812b4fccd52b71a',1,'xbretcod.h']]],
+ ['xb_5finvalid_5ffield_52',['XB_INVALID_FIELD',['../xbretcod_8h.html#a34180b2e2bd350ba2ebcdd1335e15d7e',1,'xbretcod.h']]],
+ ['xb_5finvalid_5ffield_5flen_53',['XB_INVALID_FIELD_LEN',['../xbretcod_8h.html#a7bd322c0efbba17f68ccccd6cf624411',1,'xbretcod.h']]],
+ ['xb_5finvalid_5ffield_5fname_54',['XB_INVALID_FIELD_NAME',['../xbretcod_8h.html#a59403978784130834cf39434cb73f96e',1,'xbretcod.h']]],
+ ['xb_5finvalid_5ffield_5fno_55',['XB_INVALID_FIELD_NO',['../xbretcod_8h.html#a09d6c08a44316f551108a74003efd381',1,'xbretcod.h']]],
+ ['xb_5finvalid_5ffield_5ftype_56',['XB_INVALID_FIELD_TYPE',['../xbretcod_8h.html#a79e2588f067d6e236c0e5a2c0728ba9f',1,'xbretcod.h']]],
+ ['xb_5finvalid_5ffunction_57',['XB_INVALID_FUNCTION',['../xbretcod_8h.html#a2b7e5e440dbcf5e6dc885b24dbe28742',1,'xbretcod.h']]],
+ ['xb_5finvalid_5findex_58',['XB_INVALID_INDEX',['../xbretcod_8h.html#acd175ef0541e2cad424791bd87619dd4',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fkeyno_59',['XB_INVALID_KEYNO',['../xbretcod_8h.html#aec2c0ac2bd62e0329ef130e4fbda39f8',1,'xbretcod.h']]],
+ ['xb_5finvalid_5flock_5foption_60',['XB_INVALID_LOCK_OPTION',['../xbretcod_8h.html#ab45735e63c208eb7e6d6df31fd527aec',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fmemo_5ffield_61',['XB_INVALID_MEMO_FIELD',['../xbretcod_8h.html#a187c50745f51bfe4aa6f70a92f16c59f',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fnodelink_62',['XB_INVALID_NODELINK',['../xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fobject_63',['XB_INVALID_OBJECT',['../xbretcod_8h.html#a418c047353bc683d0fd6ecbbdd5b7885',1,'xbretcod.h']]],
+ ['xb_5finvalid_5foption_64',['XB_INVALID_OPTION',['../xbretcod_8h.html#af1cd0baf346cad686fa4dd11f700012a',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fpage_65',['XB_INVALID_PAGE',['../xbretcod_8h.html#ad0aba12b5ae2137f8d6abd28b47f95f0',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fparameter_66',['XB_INVALID_PARAMETER',['../xbretcod_8h.html#a1b78533ada854b4185c51ad8a5ce9f02',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fparm_67',['XB_INVALID_PARM',['../xbretcod_8h.html#a4cedf96581c9cbc9c14d07494143702d',1,'xbretcod.h']]],
+ ['xb_5finvalid_5frecord_68',['XB_INVALID_RECORD',['../xbretcod_8h.html#a0fd212f912b2e62700a66bae95bd73a1',1,'xbretcod.h']]],
+ ['xb_5finvalid_5ftable_5fname_69',['XB_INVALID_TABLE_NAME',['../xbretcod_8h.html#a53891c95a78483704d2a8e14c4499f92',1,'xbretcod.h']]],
+ ['xb_5finvalid_5ftag_70',['XB_INVALID_TAG',['../xbretcod_8h.html#a176d917912d3433f065483f905a4c50a',1,'xbretcod.h']]],
+ ['xb_5fkey_5fnot_5funique_71',['XB_KEY_NOT_UNIQUE',['../xbretcod_8h.html#ad60dbb1862c0c1c2dc0464cfbfd93a34',1,'xbretcod.h']]],
+ ['xb_5flimit_5freached_72',['XB_LIMIT_REACHED',['../xbretcod_8h.html#a59f1a8a6aca19595c2d1804349a24850',1,'xbretcod.h']]],
+ ['xb_5flock_73',['XB_LOCK',['../xbdbf_8h.html#a395a2e101a793bacabf6bc079d178e29',1,'xbdbf.h']]],
+ ['xb_5flock_5ffailed_74',['XB_LOCK_FAILED',['../xbretcod_8h.html#a001e24b39e0f155fb1e892f5b1b9cff1',1,'xbretcod.h']]],
+ ['xb_5flogical_5ffld_75',['XB_LOGICAL_FLD',['../xbdbf_8h.html#a2f6d5073af761bc1a806a2c7b1c1d886',1,'xbdbf.h']]],
+ ['xb_5fmax_5ferror_5fno_76',['XB_MAX_ERROR_NO',['../xbretcod_8h.html#a299419a9c80e000b74bf97a2d24d6a3d',1,'xbretcod.h']]],
+ ['xb_5fmemcpy_5ferror_77',['XB_MEMCPY_ERROR',['../xbretcod_8h.html#aa2925f035e3b186d7efa14648ea0e86d',1,'xbretcod.h']]],
+ ['xb_5fmemo_5ffld_78',['XB_MEMO_FLD',['../xbdbf_8h.html#a23fa19b19cb43bd6dcc59a5a3f6c30ad',1,'xbdbf.h']]],
+ ['xb_5fmulti_5fuser_79',['XB_MULTI_USER',['../xbfile_8h.html#a05c0fc99ba71cf953d046d12f3f874bc',1,'xbfile.h']]],
+ ['xb_5fno_5ferror_80',['XB_NO_ERROR',['../xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23',1,'xbretcod.h']]],
+ ['xb_5fno_5fmemory_81',['XB_NO_MEMORY',['../xbretcod_8h.html#ae687fc7d872ba0475a8477e4447f9b54',1,'xbretcod.h']]],
+ ['xb_5fnot_5ffound_82',['XB_NOT_FOUND',['../xbretcod_8h.html#ac2606659a54111334f5b02861e533700',1,'xbretcod.h']]],
+ ['xb_5fnot_5fopen_83',['XB_NOT_OPEN',['../xbretcod_8h.html#a9474b400f647bdefbbb07e5177e8d7a1',1,'xbretcod.h']]],
+ ['xb_5fnull_5fdate_84',['XB_NULL_DATE',['../xbexp_8h.html#a6e9d2ccba2b3ac6e44ab411ffda488c2',1,'xbexp.h']]],
+ ['xb_5fnumeric_5ffld_85',['XB_NUMERIC_FLD',['../xbdbf_8h.html#ae9fb6d69cc5edc94d36ae403c22ec1c6',1,'xbdbf.h']]],
+ ['xb_5fopen_86',['XB_OPEN',['../xbdbf_8h.html#a9a6dafbb07cac744eb14094efa739409',1,'xbdbf.h']]],
+ ['xb_5fopen_5ferror_87',['XB_OPEN_ERROR',['../xbretcod_8h.html#aaab55236993a1d3acb29206252a904c8',1,'xbretcod.h']]],
+ ['xb_5foverlay_88',['XB_OVERLAY',['../xbdbf_8h.html#a6fe10b307878b4612b04c2c876a4a592',1,'xbdbf.h']]],
+ ['xb_5fpack_2ecpp_89',['xb_pack.cpp',['../xb__pack_8cpp.html',1,'']]],
+ ['xb_5fparse_5ferror_90',['XB_PARSE_ERROR',['../xbretcod_8h.html#aec713cac2b03a0d536a2d16336ae7c0b',1,'xbretcod.h']]],
+ ['xb_5fread_91',['XB_READ',['../xbfile_8h.html#ae58c73e0ba237fcf67ee20feea6c2743',1,'xbfile.h']]],
+ ['xb_5fread_5ferror_92',['XB_READ_ERROR',['../xbretcod_8h.html#adbd40585db8bb748d191f94a33bac710',1,'xbretcod.h']]],
+ ['xb_5fread_5fwrite_93',['XB_READ_WRITE',['../xbfile_8h.html#af991a288c327f6857e90156ea734a633',1,'xbfile.h']]],
+ ['xb_5frename_5ferror_94',['XB_RENAME_ERROR',['../xbretcod_8h.html#a373f30b2efcbbab9f6d060fb3fe8cba3',1,'xbretcod.h']]],
+ ['xb_5fseek_5ferror_95',['XB_SEEK_ERROR',['../xbretcod_8h.html#a0455ad8719e153b08ec68b10c81e9f41',1,'xbretcod.h']]],
+ ['xb_5fsingle_5fuser_96',['XB_SINGLE_USER',['../xbfile_8h.html#a9ec4d60a008c667d9861e3b3814f0232',1,'xbfile.h']]],
+ ['xb_5fsyntax_5ferror_97',['XB_SYNTAX_ERROR',['../xbretcod_8h.html#a5db3a90f215534143bdde81253729c7f',1,'xbretcod.h']]],
+ ['xb_5ftable_5fnot_5flocked_98',['XB_TABLE_NOT_LOCKED',['../xbretcod_8h.html#af6aaf779fddecca521d785666f6dc56b',1,'xbretcod.h']]],
+ ['xb_5ftblinfo_2ecpp_99',['xb_tblinfo.cpp',['../xb__tblinfo_8cpp.html',1,'']]],
+ ['xb_5ftest_5fbcd_2ecpp_100',['xb_test_bcd.cpp',['../xb__test__bcd_8cpp.html',1,'']]],
+ ['xb_5ftest_5fblockread_2ecpp_101',['xb_test_blockread.cpp',['../xb__test__blockread_8cpp.html',1,'']]],
+ ['xb_5ftest_5fdate_2ecpp_102',['xb_test_date.cpp',['../xb__test__date_8cpp.html',1,'']]],
+ ['xb_5ftest_5fdbf_5fv3_5fmemos_2ecpp_103',['xb_test_dbf_v3_memos.cpp',['../xb__test__dbf__v3__memos_8cpp.html',1,'']]],
+ ['xb_5ftest_5fdbf_5fv3_5fnomemos_2ecpp_104',['xb_test_dbf_v3_nomemos.cpp',['../xb__test__dbf__v3__nomemos_8cpp.html',1,'']]],
+ ['xb_5ftest_5fdbf_5fv4_5fmemos_2ecpp_105',['xb_test_dbf_v4_memos.cpp',['../xb__test__dbf__v4__memos_8cpp.html',1,'']]],
+ ['xb_5ftest_5fdbf_5fv4_5fnomemos_2ecpp_106',['xb_test_dbf_v4_nomemos.cpp',['../xb__test__dbf__v4__nomemos_8cpp.html',1,'']]],
+ ['xb_5ftest_5fexpnode_2ecpp_107',['xb_test_expnode.cpp',['../xb__test__expnode_8cpp.html',1,'']]],
+ ['xb_5ftest_5fexpression_2ecpp_108',['xb_test_expression.cpp',['../xb__test__expression_8cpp.html',1,'']]],
+ ['xb_5ftest_5ffile_2ecpp_109',['xb_test_file.cpp',['../xb__test__file_8cpp.html',1,'']]],
+ ['xb_5ftest_5ffilter_2ecpp_110',['xb_test_filter.cpp',['../xb__test__filter_8cpp.html',1,'']]],
+ ['xb_5ftest_5ffuncs_2ecpp_111',['xb_test_funcs.cpp',['../xb__test__funcs_8cpp.html',1,'']]],
+ ['xb_5ftest_5flinklist_2ecpp_112',['xb_test_linklist.cpp',['../xb__test__linklist_8cpp.html',1,'']]],
+ ['xb_5ftest_5flock_2ecpp_113',['xb_test_lock.cpp',['../xb__test__lock_8cpp.html',1,'']]],
+ ['xb_5ftest_5flock2_2ecpp_114',['xb_test_lock2.cpp',['../xb__test__lock2_8cpp.html',1,'']]],
+ ['xb_5ftest_5flog_2ecpp_115',['xb_test_log.cpp',['../xb__test__log_8cpp.html',1,'']]],
+ ['xb_5ftest_5fmdx_2ecpp_116',['xb_test_mdx.cpp',['../xb__test__mdx_8cpp.html',1,'']]],
+ ['xb_5ftest_5fndx_2ecpp_117',['xb_test_ndx.cpp',['../xb__test__ndx_8cpp.html',1,'']]],
+ ['xb_5ftest_5fsql_2ecpp_118',['xb_test_sql.cpp',['../xb__test__sql_8cpp.html',1,'']]],
+ ['xb_5ftest_5fstring_2ecpp_119',['xb_test_string.cpp',['../xb__test__string_8cpp.html',1,'']]],
+ ['xb_5ftest_5ftblmgr_2ecpp_120',['xb_test_tblmgr.cpp',['../xb__test__tblmgr_8cpp.html',1,'']]],
+ ['xb_5ftest_5ftdx_2ecpp_121',['xb_test_tdx.cpp',['../xb__test__tdx_8cpp.html',1,'']]],
+ ['xb_5ftest_5fuda_2ecpp_122',['xb_test_uda.cpp',['../xb__test__uda_8cpp.html',1,'']]],
+ ['xb_5ftest_5fxbase_2ecpp_123',['xb_test_xbase.cpp',['../xb__test__xbase_8cpp.html',1,'']]],
+ ['xb_5funbalanced_5fparens_124',['XB_UNBALANCED_PARENS',['../xbretcod_8h.html#aff5646a6b0884ff81004de6961473ea6',1,'xbretcod.h']]],
+ ['xb_5funbalanced_5fquotes_125',['XB_UNBALANCED_QUOTES',['../xbretcod_8h.html#aedfa20a6c4eb9ba3063ba56be8280eac',1,'xbretcod.h']]],
+ ['xb_5fundelall_2ecpp_126',['xb_undelall.cpp',['../xb__undelall_8cpp.html',1,'']]],
+ ['xb_5funlock_127',['XB_UNLOCK',['../xbdbf_8h.html#a21389b73e7b4e7e185fa635b9e354c2e',1,'xbdbf.h']]],
+ ['xb_5fupdated_128',['XB_UPDATED',['../xbdbf_8h.html#a26e7eeda69f32bc88b08a208ca9e7991',1,'xbdbf.h']]],
+ ['xb_5fwrite_129',['XB_WRITE',['../xbfile_8h.html#abbf99e259c2f31572c886da6d85b1359',1,'xbfile.h']]],
+ ['xb_5fwrite_5ferror_130',['XB_WRITE_ERROR',['../xbretcod_8h.html#aef34ebe6726057f805d6063130280549',1,'xbretcod.h']]],
+ ['xbalttbl_2ecpp_131',['xbalttbl.cpp',['../xbalttbl_8cpp.html',1,'']]],
+ ['xbase_132',['xbase',['../classxb_1_1xbFile.html#ae39a67ea391b46055d4ca299cb222004',1,'xb::xbFile']]],
+ ['xbase_2eh_133',['xbase.h',['../xbase_8h.html',1,'']]],
+ ['xbbcd_134',['xbBcd',['../classxb_1_1xbXBase.html#a86a53ce3efbf910996df0f853f1c0add',1,'xb::xbXBase']]],
+ ['xbbcd_2ecpp_135',['xbbcd.cpp',['../xbbcd_8cpp.html',1,'']]],
+ ['xbbcd_2eh_136',['xbbcd.h',['../xbbcd_8h.html',1,'']]],
+ ['xbblkread_2eh_137',['xbblkread.h',['../xbblkread_8h.html',1,'']]],
+ ['xbblockread_2ecpp_138',['xbblockread.cpp',['../xbblockread_8cpp.html',1,'']]],
+ ['xbbool_139',['xbBool',['../namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f',1,'xb']]],
+ ['xbcrix_2ecpp_140',['xbcrix.cpp',['../sql_2xbcrix_8cpp.html',1,'(Global Namespace)'],['../include_2xbcrix_8cpp.html',1,'(Global Namespace)']]],
+ ['xbcrtbl_2ecpp_141',['xbcrtbl.cpp',['../xbcrtbl_8cpp.html',1,'']]],
+ ['xbdate_142',['xbDate',['../classxb_1_1xbDate.html',1,'xb::xbDate'],['../classxb_1_1xbDate.html#a8dfc827b466be3c5e3def599277dfa43',1,'xb::xbDate::xbDate(xbUInt16 iInit)'],['../classxb_1_1xbDate.html#a7ab727a7ec184a086ad36ef83b948170',1,'xb::xbDate::xbDate(xbInt32 lJulDate)'],['../classxb_1_1xbDate.html#acf4546f5681735ede18210f60bab68d4',1,'xb::xbDate::xbDate(const xbString &amp;Date8)'],['../classxb_1_1xbDate.html#ac8a4d9330221a3daee21b3c28c1d9719',1,'xb::xbDate::xbDate(const char *Date8)'],['../classxb_1_1xbDate.html#ab3150e7db0ab5db10a07d748b55465eb',1,'xb::xbDate::xbDate()']]],
+ ['xbdate_2ecpp_143',['xbdate.cpp',['../xbdate_8cpp.html',1,'']]],
+ ['xbdate_2eh_144',['xbdate.h',['../xbdate_8h.html',1,'']]],
+ ['xbdbf_145',['xbDbf',['../classxb_1_1xbDbf.html',1,'xb::xbDbf'],['../classxb_1_1xbDbf.html#a84a75f80bc0e9b8a22b728767949c204',1,'xb::xbDbf::xbDbf()'],['../namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b',1,'xb::xbDbf()']]],
+ ['xbdbf_2ecpp_146',['xbdbf.cpp',['../xbdbf_8cpp.html',1,'']]],
+ ['xbdbf_2eh_147',['xbdbf.h',['../xbdbf_8h.html',1,'']]],
+ ['xbdbf3_2ecpp_148',['xbdbf3.cpp',['../xbdbf3_8cpp.html',1,'']]],
+ ['xbdbf4_2ecpp_149',['xbdbf4.cpp',['../xbdbf4_8cpp.html',1,'']]],
+ ['xbdelete_2ecpp_150',['xbdelete.cpp',['../xbdelete_8cpp.html',1,'']]],
+ ['xbdouble_151',['xbDouble',['../namespacexb.html#a25f47b226ce924a5c78f97989b0744a2',1,'xb']]],
+ ['xbdrpix_2ecpp_152',['xbdrpix.cpp',['../xbdrpix_8cpp.html',1,'']]],
+ ['xbdrptbl_2ecpp_153',['xbdrptbl.cpp',['../xbdrptbl_8cpp.html',1,'']]],
+ ['xberrormessages_154',['xbErrorMessages',['../namespacexb.html#a04be228a037d220dd5564f5ef618adcc',1,'xb']]],
+ ['xbexp_155',['xbExp',['../classxb_1_1xbXBase.html#a3c3e5617be811d732472fe2cc8fb18cc',1,'xb::xbXBase']]],
+ ['xbexp_2ecpp_156',['xbexp.cpp',['../xbexp_8cpp.html',1,'']]],
+ ['xbexp_2eh_157',['xbexp.h',['../xbexp_8h.html',1,'']]],
+ ['xbexpnode_2ecpp_158',['xbexpnode.cpp',['../xbexpnode_8cpp.html',1,'']]],
+ ['xbexpnode_2eh_159',['xbexpnode.h',['../xbexpnode_8h.html',1,'']]],
+ ['xbfalse_160',['xbFalse',['../xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc',1,'xbtypes.h']]],
+ ['xbfclose_161',['xbFclose',['../classxb_1_1xbFile.html#a18830b5755d74818f60d9c7ce38ddf2d',1,'xb::xbFile']]],
+ ['xbfeof_162',['xbFeof',['../classxb_1_1xbFile.html#af5b6356832d2a67212070a1aa605f170',1,'xb::xbFile']]],
+ ['xbfflush_163',['xbFflush',['../classxb_1_1xbFile.html#ad205184d43409f04216540ae22f15009',1,'xb::xbFile']]],
+ ['xbfgetc_164',['xbFgetc',['../classxb_1_1xbFile.html#afb1c584d2895ffb7834df80aea7eb1e4',1,'xb::xbFile::xbFgetc(xbInt32 &amp;c)'],['../classxb_1_1xbFile.html#a5ee229bda4d7d6695e122200e581e7a6',1,'xb::xbFile::xbFgetc(char &amp;c)']]],
+ ['xbfgets_165',['xbFgets',['../classxb_1_1xbFile.html#ad245955ace26e5dde85fd4373b30d026',1,'xb::xbFile']]],
+ ['xbfields_2ecpp_166',['xbfields.cpp',['../xbfields_8cpp.html',1,'']]],
+ ['xbfile_167',['xbFile',['../classxb_1_1xbFile.html',1,'xb::xbFile'],['../classxb_1_1xbFile.html#a869eedd74c6eddc308852eb546c87176',1,'xb::xbFile::xbFile()']]],
+ ['xbfile_2ecpp_168',['xbfile.cpp',['../xbfile_8cpp.html',1,'']]],
+ ['xbfile_2eh_169',['xbfile.h',['../xbfile_8h.html',1,'']]],
+ ['xbfileno_170',['xbFileNo',['../xbtypes_8h.html#a2c65f692ac861990861575e18f72f6eb',1,'xbtypes.h']]],
+ ['xbfilter_2ecpp_171',['xbfilter.cpp',['../xbfilter_8cpp.html',1,'']]],
+ ['xbfilter_2eh_172',['xbfilter.h',['../xbfilter_8h.html',1,'']]],
+ ['xbfloat_173',['xbFloat',['../namespacexb.html#a83aa6a550398db55973aa9fb4257e66e',1,'xb']]],
+ ['xbfopen_174',['xbFopen',['../classxb_1_1xbFile.html#a0548cedf0f26b7d8ac221f75b0cd048c',1,'xb::xbFile::xbFopen(const xbString &amp;sOpenMode, xbInt16 iShareMode)'],['../classxb_1_1xbFile.html#a7cdfef5ede9ac98d44a28a6b7a70972c',1,'xb::xbFile::xbFopen(xbInt16 iOpenMode)'],['../classxb_1_1xbFile.html#aabd113333b49c36cad23244b392baab4',1,'xb::xbFile::xbFopen(xbInt16 iOpenMode, xbInt16 iShareMode)'],['../classxb_1_1xbFile.html#ab0fa19686ca8953ff4b556fb5b249135',1,'xb::xbFile::xbFopen(const xbString &amp;sMode, const xbString &amp;sFileName, xbInt16 iShareMode)']]],
+ ['xbfputc_175',['xbFputc',['../classxb_1_1xbFile.html#a863f74cf17df8186d88586b4d2a6441a',1,'xb::xbFile::xbFputc(xbInt32 c, xbInt32 iNoTimes)'],['../classxb_1_1xbFile.html#af2e940c78956e5cb6824f9a1bc404896',1,'xb::xbFile::xbFputc(xbInt32 c)']]],
+ ['xbfputs_176',['xbFputs',['../classxb_1_1xbFile.html#a698f3b40216778562e639e6ca1a47573',1,'xb::xbFile']]],
+ ['xbfread_177',['xbFread',['../classxb_1_1xbFile.html#ab4f6afaa1f77539f27a4f05c26e54e2f',1,'xb::xbFile']]],
+ ['xbfseek_178',['xbFseek',['../classxb_1_1xbFile.html#a5337ab8918df240910c0d19b4f298e3d',1,'xb::xbFile']]],
+ ['xbftell_179',['xbFtell',['../classxb_1_1xbFile.html#a0e1c06aedfa7fbcb92e117f891edd13b',1,'xb::xbFile']]],
+ ['xbfturnofffilebuffering_180',['xbFTurnOffFileBuffering',['../classxb_1_1xbFile.html#a9891b792f585a696f38a5cf959e30918',1,'xb::xbFile']]],
+ ['xbfuncs_2ecpp_181',['xbfuncs.cpp',['../xbfuncs_8cpp.html',1,'']]],
+ ['xbfwrite_182',['xbFwrite',['../classxb_1_1xbFile.html#a6aadd871d1782944703fed773d44b85f',1,'xb::xbFile']]],
+ ['xbindex_2eh_183',['xbindex.h',['../xbindex_8h.html',1,'']]],
+ ['xbinsert_2ecpp_184',['xbinsert.cpp',['../xbinsert_8cpp.html',1,'']]],
+ ['xbixbase_2ecpp_185',['xbixbase.cpp',['../xbixbase_8cpp.html',1,'']]],
+ ['xbixmdx_2ecpp_186',['xbixmdx.cpp',['../xbixmdx_8cpp.html',1,'']]],
+ ['xbixndx_2ecpp_187',['xbixndx.cpp',['../xbixndx_8cpp.html',1,'']]],
+ ['xbixtdx_2ecpp_188',['xbixtdx.cpp',['../xbixtdx_8cpp.html',1,'']]],
+ ['xblnklst_2eh_189',['xblnklst.h',['../xblnklst_8h.html',1,'']]],
+ ['xblnklstord_2eh_190',['xblnklstord.h',['../xblnklstord_8h.html',1,'']]],
+ ['xblnknod_2eh_191',['xblnknod.h',['../xblnknod_8h.html',1,'']]],
+ ['xblog_192',['xbLog',['../namespacexb.html#a4a31fbe9110c9e55495ce71e642d785c',1,'xb']]],
+ ['xblog_2ecpp_193',['xblog.cpp',['../xblog_8cpp.html',1,'']]],
+ ['xblog_2eh_194',['xblog.h',['../xblog_8h.html',1,'']]],
+ ['xbmemcmp_195',['xbMemcmp',['../classxb_1_1xbXBase.html#a1b239c021358476382942522911b5c66',1,'xb::xbXBase']]],
+ ['xbmemo_2ecpp_196',['xbmemo.cpp',['../xbmemo_8cpp.html',1,'']]],
+ ['xbmemo_2eh_197',['xbmemo.h',['../xbmemo_8h.html',1,'']]],
+ ['xbmemo3_2ecpp_198',['xbmemo3.cpp',['../xbmemo3_8cpp.html',1,'']]],
+ ['xbmemo4_2ecpp_199',['xbmemo4.cpp',['../xbmemo4_8cpp.html',1,'']]],
+ ['xbofft_200',['xbOffT',['../namespacexb.html#ac963d9fde6debb416303cfbed35fb793',1,'xb']]],
+ ['xbreaduntil_201',['xbReadUntil',['../classxb_1_1xbFile.html#a08463f506f425c2385acbe1a561506e9',1,'xb::xbFile']]],
+ ['xbremove_202',['xbRemove',['../classxb_1_1xbFile.html#a6d919366c2ec95e529906bf8842cbf07',1,'xb::xbFile::xbRemove(const xbString &amp;sFileName, xbInt16 iOption)'],['../classxb_1_1xbFile.html#ab3c668a8570433188382d31d7c60bd48',1,'xb::xbFile::xbRemove()'],['../classxb_1_1xbFile.html#a58f6a6751fdf7e9549c273bb75d93eb5',1,'xb::xbFile::xbRemove(const xbString &amp;sFileName)']]],
+ ['xbrename_203',['xbRename',['../classxb_1_1xbFile.html#afc8ce113aa72611a278233f9bb170012',1,'xb::xbFile']]],
+ ['xbretcod_2eh_204',['xbretcod.h',['../xbretcod_8h.html',1,'']]],
+ ['xbrewind_205',['xbRewind',['../classxb_1_1xbFile.html#a7996b6e084665c37c3892faea64b3505',1,'xb::xbFile']]],
+ ['xbschema_206',['xbSchema',['../structxb_1_1xbSchema.html',1,'xb']]],
+ ['xbselect_2ecpp_207',['xbselect.cpp',['../xbselect_8cpp.html',1,'']]],
+ ['xbset_2ecpp_208',['xbset.cpp',['../xbset_8cpp.html',1,'']]],
+ ['xbsleep_209',['xbSleep',['../classxb_1_1xbXBase.html#a0915aff7be4b2dd3e881f3c5d0da4baf',1,'xb::xbXBase']]],
+ ['xbsql_2ecpp_210',['xbsql.cpp',['../xbsql_8cpp.html',1,'']]],
+ ['xbsql_2eh_211',['xbsql.h',['../xbsql_8h.html',1,'']]],
+ ['xbssv_212',['xbSsv',['../classxb_1_1xbSsv.html',1,'xb::xbSsv'],['../classxb_1_1xbSsv.html#a58f85692c3167af20b1a7c17c621523b',1,'xb::xbSsv::xbSsv()']]],
+ ['xbssv_2ecpp_213',['xbssv.cpp',['../xbssv_8cpp.html',1,'']]],
+ ['xbssv_2eh_214',['xbssv.h',['../xbssv_8h.html',1,'']]],
+ ['xbstmt_2ecpp_215',['xbstmt.cpp',['../xbstmt_8cpp.html',1,'']]],
+ ['xbstring_216',['xbString',['../classxb_1_1xbString.html',1,'xb::xbString'],['../classxb_1_1xbString.html#a63f9313217e0ff3c9789ec59316216a1',1,'xb::xbString::xbString(xbUInt32 size)'],['../classxb_1_1xbString.html#a14bbaa293c8d40dd6c64332f2668a92e',1,'xb::xbString::xbString(char c)'],['../classxb_1_1xbString.html#a18f3598dcdf2ec5692274fc8ee769ad7',1,'xb::xbString::xbString(const char *s, xbUInt32 lMaxLen)'],['../classxb_1_1xbString.html#a0d81016b93fc36ebbbafacf35c677f07',1,'xb::xbString::xbString(const xbString &amp;s)'],['../classxb_1_1xbString.html#a25856311106c5fb15d39017b63f0ddc7',1,'xb::xbString::xbString(const char *=&quot;&quot;)'],['../classxb_1_1xbString.html#ad865b55e3b08dffd527afee8e7e8e3fe',1,'xb::xbString::xbString(xbDouble d)']]],
+ ['xbstring_2ecpp_217',['xbstring.cpp',['../xbstring_8cpp.html',1,'']]],
+ ['xbstring_2eh_218',['xbstring.h',['../xbstring_8h.html',1,'']]],
+ ['xbtag_2ecpp_219',['xbtag.cpp',['../xbtag_8cpp.html',1,'']]],
+ ['xbtag_2eh_220',['xbtag.h',['../xbtag_8h.html',1,'']]],
+ ['xbtbllist_221',['xbTblList',['../structxb_1_1xbTblList.html',1,'xb']]],
+ ['xbtblmgr_222',['xbTblMgr',['../classxb_1_1xbTblMgr.html',1,'xb::xbTblMgr'],['../classxb_1_1xbTblMgr.html#aad83f5ecc184ca6cbdfc6f356b598d6c',1,'xb::xbTblMgr::xbTblMgr()']]],
+ ['xbtblmgr_2ecpp_223',['xbtblmgr.cpp',['../xbtblmgr_8cpp.html',1,'']]],
+ ['xbtblmgr_2eh_224',['xbtblmgr.h',['../xbtblmgr_8h.html',1,'']]],
+ ['xbtrue_225',['xbTrue',['../xbtypes_8h.html#ab0ae00665298fe7f5292691cb98ec2d9',1,'xbtypes.h']]],
+ ['xbtruncate_226',['xbTruncate',['../classxb_1_1xbFile.html#a518bfcbfa3699d883cf89affee383296',1,'xb::xbFile']]],
+ ['xbtypes_2eh_227',['xbtypes.h',['../xbtypes_8h.html',1,'']]],
+ ['xbuda_2ecpp_228',['xbuda.cpp',['../xbuda_8cpp.html',1,'']]],
+ ['xbuda_2eh_229',['xbuda.h',['../xbuda_8h.html',1,'']]],
+ ['xbxbase_230',['xbXBase',['../classxb_1_1xbXBase.html',1,'xb::xbXBase'],['../classxb_1_1xbXBase.html#a6c68588e33946fb5416af3f86fe83224',1,'xb::xbXBase::xbXBase()'],['../namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0',1,'xb::xbXBase()']]],
+ ['xbxbase_2ecpp_231',['xbxbase.cpp',['../xbxbase_8cpp.html',1,'']]],
+ ['xbxbase_2eh_232',['xbxbase.h',['../xbxbase_8h.html',1,'']]]
+];
diff --git a/docs/doxygen/html/search/all_16.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_16.html
index de305d9..de305d9 100644
--- a/docs/doxygen/html/search/all_16.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_16.html
diff --git a/docs/doxygen/html/search/all_16.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_16.js
index 5979b24..5979b24 100644
--- a/docs/doxygen/html/search/all_16.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_16.js
diff --git a/docs/doxygen/html/search/all_17.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_17.html
index 48229a0..48229a0 100644
--- a/docs/doxygen/html/search/all_17.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_17.html
diff --git a/docs/doxygen/html/search/all_17.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_17.js
index 7108002..7108002 100644
--- a/docs/doxygen/html/search/all_17.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_17.js
diff --git a/docs/doxygen/html/search/all_18.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_18.html
index c153550..c153550 100644
--- a/docs/doxygen/html/search/all_18.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_18.html
diff --git a/docs/doxygen/html/search/all_18.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_18.js
index d44ee63..d44ee63 100644
--- a/docs/doxygen/html/search/all_18.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_18.js
diff --git a/docs/doxygen/html/search/all_2.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_2.html
index 259dde4..259dde4 100644
--- a/docs/doxygen/html/search/all_2.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_2.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_2.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_2.js
new file mode 100644
index 0000000..fc2ebc9
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_2.js
@@ -0,0 +1,33 @@
+var searchData=
+[
+ ['calcrollingcenturyforyear_0',['CalcRollingCenturyForYear',['../classxb_1_1xbDate.html#a9df58caa54105c489c314785c457e8cb',1,'xb::xbDate']]],
+ ['cencryptionflag_1',['cEncryptionFlag',['../classxb_1_1xbDbf.html#a8734e799707582f022fc341d515650f4',1,'xb::xbDbf']]],
+ ['centuryof_2',['CenturyOf',['../classxb_1_1xbDate.html#a38b2c5285c69ed65e94ece6c22dafde0',1,'xb::xbDate']]],
+ ['cfieldname_3',['cFieldName',['../structxb_1_1xbSchema.html#a514183856094123fd37df67885b4681e',1,'xb::xbSchema']]],
+ ['cfldtype_4',['cFldType',['../structsFldMap.html#af89b26b2d4bc6e26c597f8c48b97b1a3',1,'sFldMap']]],
+ ['chardayof_5',['CharDayOf',['../classxb_1_1xbDate.html#a9fc29730b66cddfbb58c69992a99cc7c',1,'xb::xbDate']]],
+ ['charmonthof_6',['CharMonthOf',['../classxb_1_1xbDate.html#afffc84f02bd421335ff8ebe9fb3db0ac',1,'xb::xbDate']]],
+ ['chrontime_7',['ChronTime',['../tstfuncs_8cpp.html#af990eed1e43605771a5810196b4043f7',1,'tstfuncs.cpp']]],
+ ['cindexflag_8',['cIndexFlag',['../classxb_1_1xbDbf.html#ad59074633641e03647e54d2b66c9102b',1,'xb::xbDbf']]],
+ ['clangdriver_9',['cLangDriver',['../classxb_1_1xbDbf.html#aea1dfe5cbd1f9cdbcfc8eb04b2c3d5f1',1,'xb::xbDbf']]],
+ ['close_10',['Close',['../classxb_1_1xbDbf.html#ad68d73113e54e1b5f326e90f45e9989d',1,'xb::xbDbf']]],
+ ['closealltables_11',['CloseAllTables',['../classxb_1_1xbXBase.html#afccb552ca0daff779c0500ff20d22c2b',1,'xb::xbXBase']]],
+ ['commit_12',['Commit',['../classxb_1_1xbDbf.html#abd69532c885ab72bcf3fb5066b318f4f',1,'xb::xbDbf']]],
+ ['copy_13',['Copy',['../classxb_1_1xbString.html#ac7a8466b03c04df838bd182ef244f792',1,'xb::xbString']]],
+ ['copydbfstructure_14',['CopyDbfStructure',['../classxb_1_1xbDbf.html#a829c615a130a1fdf609d93438d8a6264',1,'xb::xbDbf']]],
+ ['countchar_15',['CountChar',['../classxb_1_1xbString.html#adc0204bcfd1c052b9aea9229b10acf72',1,'xb::xbString::CountChar(char c, xbInt16 iOpt) const'],['../classxb_1_1xbString.html#a26bc14d92dc7ce1f2bf31cd74af0db0f',1,'xb::xbString::CountChar(char c) const']]],
+ ['createfqn_16',['CreateFqn',['../classxb_1_1xbXBase.html#aa41240d920b604dcbd91dce7eecb78e1',1,'xb::xbXBase']]],
+ ['createtable_17',['CreateTable',['../classxb_1_1xbDbf.html#a73e41bfe679dd06ab16c436652df93f1',1,'xb::xbDbf']]],
+ ['createuniquefilename_18',['CreateUniqueFileName',['../classxb_1_1xbFile.html#ad39797624a752b9d62533d00fad9feff',1,'xb::xbFile']]],
+ ['ctod_19',['CTOD',['../classxb_1_1xbDate.html#abb1eb4b0394e4a67aadab15779b1b8c5',1,'xb::xbDate']]],
+ ['ctransactionflag_20',['cTransactionFlag',['../classxb_1_1xbDbf.html#ac3c89fc3bc6a6abf385478a8adbed970',1,'xb::xbDbf']]],
+ ['ctype_21',['cType',['../structxb_1_1xbSchema.html#a1d612b2ed5dc0b0289c9e91b3cda3a25',1,'xb::xbSchema']]],
+ ['cupdatedd_22',['cUpdateDD',['../classxb_1_1xbDbf.html#a6021789d314cd41488991e708fcd0df2',1,'xb::xbDbf']]],
+ ['cupdatemm_23',['cUpdateMM',['../classxb_1_1xbDbf.html#a9340a5e8ee53eb0f3b6601eec2d71e1b',1,'xb::xbDbf']]],
+ ['cupdateyy_24',['cUpdateYY',['../classxb_1_1xbDbf.html#a4fcd6a86ddd32d4a9d76a4074573440a',1,'xb::xbDbf']]],
+ ['cversion_25',['cVersion',['../classxb_1_1xbDbf.html#a3a262abf658e5fa968b57ef457a69470',1,'xb::xbDbf']]],
+ ['cvthexchar_26',['CvtHexChar',['../classxb_1_1xbString.html#a0a737bd408a94903f214eb2879eb56de',1,'xb::xbString']]],
+ ['cvthexstring_27',['CvtHexString',['../classxb_1_1xbString.html#ab5eb6918a0ae9ab6c0e961318f3d1eb0',1,'xb::xbString']]],
+ ['cvtlonglong_28',['CvtLongLong',['../classxb_1_1xbString.html#ae3ab18365e132323f8ae4c99eb72181c',1,'xb::xbString']]],
+ ['cvtulonglong_29',['CvtULongLong',['../classxb_1_1xbString.html#a1528b30b84a41c3564ef31d1f4496b15',1,'xb::xbString']]]
+];
diff --git a/docs/doxygen/html/search/all_3.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_3.html
index 1e60c94..1e60c94 100644
--- a/docs/doxygen/html/search/all_3.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_3.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_3.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_3.js
new file mode 100644
index 0000000..9a4d44a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_3.js
@@ -0,0 +1,20 @@
+var searchData=
+[
+ ['dateisvalid_0',['DateIsValid',['../classxb_1_1xbDate.html#a367f66ef0c03c1747c12a18784554ccb',1,'xb::xbDate']]],
+ ['dayof_1',['DayOf',['../classxb_1_1xbDate.html#ad6417a900ce64a46f8909c0c7a2ddea2',1,'xb::xbDate']]],
+ ['dblequals_2',['dblEquals',['../tstfuncs_8cpp.html#a8b8e417213c57f2ea0bcb61a7fb28860',1,'tstfuncs.cpp']]],
+ ['dblmax_3',['dblMax',['../tstfuncs_8cpp.html#a69a6e718e066af7f8392e5f1fea40d1b',1,'tstfuncs.cpp']]],
+ ['dblmin_4',['dblMin',['../tstfuncs_8cpp.html#a4d7b8f3f1ce52c6c0a281f25419f4c93',1,'tstfuncs.cpp']]],
+ ['deleteall_5',['DeleteAll',['../classxb_1_1xbDbf.html#a01c26b67e312be1e674b3da710e031b9',1,'xb::xbDbf']]],
+ ['deleteallrecords_6',['DeleteAllRecords',['../classxb_1_1xbDbf.html#a3067fdfa3a7a5c15651f6e89d1102176',1,'xb::xbDbf']]],
+ ['deleterecord_7',['DeleteRecord',['../classxb_1_1xbDbf.html#acd8c10579229f3a2e2c5fdb7fcef90db',1,'xb::xbDbf']]],
+ ['deletetable_8',['DeleteTable',['../classxb_1_1xbDbf.html#a4085ed4f049d976124d8edc3d3c56397',1,'xb::xbDbf']]],
+ ['determinexbasememoversion_9',['DetermineXbaseMemoVersion',['../classxb_1_1xbFile.html#a5a740033664c9ad2611c90e2a6d0c2d3',1,'xb::xbFile']]],
+ ['determinexbasetableversion_10',['DetermineXbaseTableVersion',['../classxb_1_1xbFile.html#ae2b6ac26018dc28f77afbb3f008c3f66',1,'xb::xbFile']]],
+ ['devtester_11',['DevTester',['../xb__test__expression_8cpp.html#aee57237c5f5b9b4d80e84bf530eb42bc',1,'xb_test_expression.cpp']]],
+ ['disablemsglogging_12',['DisableMsgLogging',['../classxb_1_1xbXBase.html#ae357fac4fdebdf49e46563cf611caf65',1,'xb::xbXBase']]],
+ ['displayerror_13',['DisplayError',['../classxb_1_1xbSsv.html#a97dfa59ab9a8e9f17454da0faceb023d',1,'xb::xbSsv']]],
+ ['displaytablelist_14',['DisplayTableList',['../classxb_1_1xbTblMgr.html#a5eebffb9e8cc64141e35c2622045cb50',1,'xb::xbTblMgr']]],
+ ['dumpheader_15',['DumpHeader',['../classxb_1_1xbDbf.html#a47643728f74cf3b6e0ffc55259895bdb',1,'xb::xbDbf']]],
+ ['dumprecord_16',['DumpRecord',['../classxb_1_1xbDbf.html#aba30399f15885a07f87f904c0d0656fa',1,'xb::xbDbf']]]
+];
diff --git a/docs/doxygen/html/search/all_4.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_4.html
index 08f1aed..08f1aed 100644
--- a/docs/doxygen/html/search/all_4.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_4.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_4.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_4.js
new file mode 100644
index 0000000..686c08e
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_4.js
@@ -0,0 +1,16 @@
+var searchData=
+[
+ ['egetdouble_0',['eGetDouble',['../classxb_1_1xbFile.html#ab14e4a11427f5efb81cba1dd32bd1aa1',1,'xb::xbFile']]],
+ ['egetint16_1',['eGetInt16',['../classxb_1_1xbFile.html#ac40c991110ddc6fb30a72d90f4652762',1,'xb::xbFile']]],
+ ['egetint32_2',['eGetInt32',['../classxb_1_1xbFile.html#a60b24a5afc984c586bf384c7e915ba0d',1,'xb::xbFile']]],
+ ['egetuint16_3',['eGetUInt16',['../classxb_1_1xbFile.html#a936ade458e6d5e6d29f9b5031888d189',1,'xb::xbFile']]],
+ ['egetuint32_4',['eGetUInt32',['../classxb_1_1xbFile.html#a78f052529d39a18deaface5a0d47d0b0',1,'xb::xbFile']]],
+ ['enablemsglogging_5',['EnableMsgLogging',['../classxb_1_1xbXBase.html#a470e6eb0ed0be60338f9b40976d3ad48',1,'xb::xbXBase']]],
+ ['eputdouble_6',['ePutDouble',['../classxb_1_1xbFile.html#a98b6ff533ae93f90c977a2ba23eeb105',1,'xb::xbFile']]],
+ ['eputint16_7',['ePutInt16',['../classxb_1_1xbFile.html#a29130f12739ac8fa837f4eaedf1338b2',1,'xb::xbFile']]],
+ ['eputint32_8',['ePutInt32',['../classxb_1_1xbFile.html#a19c37f76a2ccbb45019cb0fc373d3f46',1,'xb::xbFile']]],
+ ['eputuint16_9',['ePutUInt16',['../classxb_1_1xbFile.html#a65e9839f92b96eac7b0d071fac3bbe40',1,'xb::xbFile']]],
+ ['eputuint32_10',['ePutUInt32',['../classxb_1_1xbFile.html#aa3f6ceae4b96f24875d86848bf13a173',1,'xb::xbFile']]],
+ ['errorcodetext_11',['ErrorCodeText',['../classxb_1_1xbSsv.html#a6219f1b5e24ea12fe158cd5aea56988e',1,'xb::xbSsv']]],
+ ['extractelement_12',['ExtractElement',['../classxb_1_1xbString.html#a6b33a8df49cdcb76033cbce5d8dc59d7',1,'xb::xbString::ExtractElement(xbString &amp;s, char delim, xbUInt32 iCnt, xbInt16 iOpt=0)'],['../classxb_1_1xbString.html#a77195fc4957952625cb33bb503517a3e',1,'xb::xbString::ExtractElement(const char *src, char delim, xbUInt32 iCnt, xbInt16 iOpt=0)']]]
+];
diff --git a/docs/doxygen/html/search/all_5.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_5.html
index 0d85fcc..0d85fcc 100644
--- a/docs/doxygen/html/search/all_5.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_5.html
diff --git a/docs/doxygen/html/search/all_5.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_5.js
index d143ad3..d143ad3 100644
--- a/docs/doxygen/html/search/all_5.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_5.js
diff --git a/docs/doxygen/html/search/all_6.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_6.html
index 7e088b8..7e088b8 100644
--- a/docs/doxygen/html/search/all_6.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_6.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_6.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_6.js
new file mode 100644
index 0000000..cee5729
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_6.js
@@ -0,0 +1,71 @@
+var searchData=
+[
+ ['getautocommit_0',['GetAutoCommit',['../classxb_1_1xbDbf.html#ae0c00226fd2ea7a67f101e795467ed68',1,'xb::xbDbf::GetAutoCommit(xbInt16 iOption) const'],['../classxb_1_1xbDbf.html#abb9e20c5efacd4fea80f1515abbc6b55',1,'xb::xbDbf::GetAutoCommit() const']]],
+ ['getblocksize_1',['GetBlockSize',['../classxb_1_1xbFile.html#a638e14262410a1627819f016a16cdce2',1,'xb::xbFile']]],
+ ['getbof_2',['GetBof',['../classxb_1_1xbDbf.html#ad0827a43c025c1184ffebab74cc9e779',1,'xb::xbDbf']]],
+ ['getcharacter_3',['GetCharacter',['../classxb_1_1xbString.html#a685187a5f8401b322fc61f3fbe56330d',1,'xb::xbString']]],
+ ['getcmdlineopt_4',['GetCmdLineOpt',['../classxb_1_1xbXBase.html#aadecb3ac460d8e94b88b2e809e22f48e',1,'xb::xbXBase::GetCmdLineOpt(xbInt32 lArgc, char **argv, const char *sOptRqst, xbString &amp;sParmOut)'],['../classxb_1_1xbXBase.html#a8612e0c5334349fbceb9394b47817fd5',1,'xb::xbXBase::GetCmdLineOpt(xbInt32 lArgc, char **argv, xbString &amp;sOptRqst, xbString &amp;sParmOut)']]],
+ ['getcurrecno_5',['GetCurRecNo',['../classxb_1_1xbDbf.html#a643a80a3792a52760c8e09ba18719503',1,'xb::xbDbf']]],
+ ['getdatadirectory_6',['GetDataDirectory',['../classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9',1,'xb::xbSsv']]],
+ ['getdatefield_7',['GetDateField',['../classxb_1_1xbDbf.html#af78ef1fba949463ff7f829d3cffc4555',1,'xb::xbDbf::GetDateField(xbInt16 iFieldNo, xbDate &amp;dt) const'],['../classxb_1_1xbDbf.html#ac624e06a97666bfd64b4f252b4548b36',1,'xb::xbDbf::GetDateField(const xbString &amp;sFieldName, xbDate &amp;dt) const']]],
+ ['getdbfptr_8',['GetDbfPtr',['../classxb_1_1xbTblMgr.html#ad8a5d28a2ee6720a9aa74bcb45662cf5',1,'xb::xbTblMgr::GetDbfPtr(const xbString &amp;sTblAlias) const'],['../classxb_1_1xbTblMgr.html#a801dfecf7fc216954b4197b2c31b25d6',1,'xb::xbTblMgr::GetDbfPtr(xbInt16 sItemNo) const']]],
+ ['getdbfstatus_9',['GetDbfStatus',['../classxb_1_1xbDbf.html#ac1110d867ba297a52c8b0e83e88f05e6',1,'xb::xbDbf']]],
+ ['getdefaultautocommit_10',['GetDefaultAutoCommit',['../classxb_1_1xbSsv.html#a6982f973e81587b04916f4509746aaf5',1,'xb::xbSsv']]],
+ ['getdefaultdateformat_11',['GetDefaultDateFormat',['../classxb_1_1xbSsv.html#a6fbb9c3a550ab0b3378f9586a57791d2',1,'xb::xbSsv']]],
+ ['getdirectory_12',['GetDirectory',['../classxb_1_1xbFile.html#acd0fb2166b2bff7e8a1cf65a7bc8be1e',1,'xb::xbFile']]],
+ ['getdoublefield_13',['GetDoubleField',['../classxb_1_1xbDbf.html#a4556041a7ff2f6b6f986729901c11f08',1,'xb::xbDbf::GetDoubleField(xbInt16 FieldNo, xbDouble &amp;dFieldValue) const'],['../classxb_1_1xbDbf.html#a2370b5e736931441a5968649291b9ef4',1,'xb::xbDbf::GetDoubleField(xbInt16 FieldNo, xbDouble &amp;dFieldValue, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#a6e6774df0f2d7733f4b25a9989596d95',1,'xb::xbDbf::GetDoubleField(const xbString &amp;sFieldName, xbDouble &amp;dFieldValue) const']]],
+ ['getendiantype_14',['GetEndianType',['../classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243',1,'xb::xbSsv']]],
+ ['geteof_15',['GetEof',['../classxb_1_1xbDbf.html#a256dc1f98626fa77da24e91a38ab5b4d',1,'xb::xbDbf']]],
+ ['geterrormessage_16',['GetErrorMessage',['../classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4',1,'xb::xbSsv']]],
+ ['getfield_17',['GetField',['../classxb_1_1xbDbf.html#ad245a26eb8b79610c9ae7bab19e05513',1,'xb::xbDbf::GetField(xbInt16 iFieldNo, xbString &amp;sFieldValue, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#ac81f078f3c932f0da60ad1fbdd848d3e',1,'xb::xbDbf::GetField(xbInt16 iFieldNo, xbString &amp;sFieldValue) const'],['../classxb_1_1xbDbf.html#a9a0fcf7e2040ab483e3807927833cb26',1,'xb::xbDbf::GetField(const xbString &amp;sFieldName, xbString &amp;sFieldValue) const']]],
+ ['getfieldcnt_18',['GetFieldCnt',['../classxb_1_1xbDbf.html#add27d8ef555a13b336b8c804165dc15e',1,'xb::xbDbf']]],
+ ['getfielddecimal_19',['GetFieldDecimal',['../classxb_1_1xbDbf.html#a607f774fcd6dc0b9913d7a7801b60db2',1,'xb::xbDbf::GetFieldDecimal(const xbString &amp;sFieldName, xbInt16 &amp;iFieldDecimal) const'],['../classxb_1_1xbDbf.html#abcb4defad2e1b6e67f63cc60737ad840',1,'xb::xbDbf::GetFieldDecimal(xbInt16 iFieldNo, xbInt16 &amp;iFieldDecimal) const']]],
+ ['getfieldlen_20',['GetFieldLen',['../classxb_1_1xbDbf.html#adda4302b58cc6109b048f19d9b68bbd4',1,'xb::xbDbf::GetFieldLen(xbInt16 iFieldNo, xbInt16 &amp;iFieldLen) const'],['../classxb_1_1xbDbf.html#acf06dbccdba1a4bcd90fa0bea6cca59b',1,'xb::xbDbf::GetFieldLen(const xbString &amp;sFieldName, xbInt16 &amp;iFieldLen) const']]],
+ ['getfieldname_21',['GetFieldName',['../classxb_1_1xbDbf.html#a5e3e4368bfba1724c016b8859023e34c',1,'xb::xbDbf']]],
+ ['getfieldno_22',['GetFieldNo',['../classxb_1_1xbDbf.html#aed9113b5095c6df1b9c854cbd0d8047b',1,'xb::xbDbf::GetFieldNo(const xbString &amp;sFieldName, xbInt16 &amp;iFieldNo) const'],['../classxb_1_1xbDbf.html#aad9029e63909aeb77d8473256d88bea8',1,'xb::xbDbf::GetFieldNo(const xbString &amp;sFieldName) const']]],
+ ['getfieldtype_23',['GetFieldType',['../classxb_1_1xbDbf.html#a5143973e4f165651152aa13c8fd45f84',1,'xb::xbDbf::GetFieldType(xbInt16 iFieldNo, char &amp;cFieldType) const'],['../classxb_1_1xbDbf.html#a181db879f1a75f93a34c03513a0b2fea',1,'xb::xbDbf::GetFieldType(const xbString &amp;sFieldName, char &amp;cFieldType) const']]],
+ ['getfiledirpart_24',['GetFileDirPart',['../classxb_1_1xbFile.html#a60c53998e3d1b694134b20a87bc9bf5a',1,'xb::xbFile::GetFileDirPart(xbString &amp;sFileDirPartOut) const'],['../classxb_1_1xbFile.html#af5127c92892816e9bbc5c19653c4147a',1,'xb::xbFile::GetFileDirPart(const xbString &amp;sCompleteFileNameIn, xbString &amp;sFileDirPartOut) const']]],
+ ['getfileextpart_25',['GetFileExtPart',['../classxb_1_1xbFile.html#ab289b6ffe955321160c1f90220c22e25',1,'xb::xbFile::GetFileExtPart(const xbString &amp;sCompleteFileNameIn, xbString &amp;sFileExtPartOut) const'],['../classxb_1_1xbFile.html#a57a9222e5cbb51019d4eeb2c3ac89fa2',1,'xb::xbFile::GetFileExtPart(xbString &amp;sFileExtPartOut) const']]],
+ ['getfilemtime_26',['GetFileMtime',['../classxb_1_1xbFile.html#a02df78f4c90313243f508fc56b95aba8',1,'xb::xbFile']]],
+ ['getfilename_27',['GetFileName',['../classxb_1_1xbFile.html#ac95cb882ccbcdedc9a233c6ad9fed07a',1,'xb::xbFile']]],
+ ['getfilenamepart_28',['GetFileNamePart',['../classxb_1_1xbFile.html#a81422b3dd52763d2cc6c77237ec9af0a',1,'xb::xbFile::GetFileNamePart(xbString &amp;sFileNamePartOut) const'],['../classxb_1_1xbFile.html#a6110763c5ae996b72c7a62c15bdecc73',1,'xb::xbFile::GetFileNamePart(const xbString &amp;sCompleteFileNameIn, xbString &amp;sFileNamePartOut) const']]],
+ ['getfilesize_29',['GetFileSize',['../classxb_1_1xbFile.html#a50b63c39e49d44e52078038027b24cc5',1,'xb::xbFile']]],
+ ['getfiletype_30',['GetFileType',['../classxb_1_1xbFile.html#a5548236d38d43b89ae29b9a015b1f678',1,'xb::xbFile']]],
+ ['getfirstrecord_31',['GetFirstRecord',['../classxb_1_1xbDbf.html#a6fc5b8a3e2f177d5ceaf9d975cbb5226',1,'xb::xbDbf::GetFirstRecord()'],['../classxb_1_1xbDbf.html#acb78991e8435edd36318c653cb977c1a',1,'xb::xbDbf::GetFirstRecord(xbInt16 iOption)']]],
+ ['getfloatfield_32',['GetFloatField',['../classxb_1_1xbDbf.html#a3443f646038ced14425f067a59c0f2da',1,'xb::xbDbf::GetFloatField(xbInt16 iFieldNo, xbFloat &amp;fFieldValue) const'],['../classxb_1_1xbDbf.html#a81ef2f36f921d7ece066a592eb6393eb',1,'xb::xbDbf::GetFloatField(const xbString &amp;sFieldName, xbFloat &amp;fFieldValue) const']]],
+ ['getfqfilename_33',['GetFqFileName',['../classxb_1_1xbFile.html#a31b4e641f93206ba23e2a5a27491dcd4',1,'xb::xbFile']]],
+ ['getfunctioninfo_34',['GetFunctionInfo',['../classxb_1_1xbXBase.html#ae52e53340593b4253936c1372ec15ee1',1,'xb::xbXBase']]],
+ ['getheaderlen_35',['GetHeaderLen',['../classxb_1_1xbDbf.html#ad56be2756b7a9f8318d9ba5cf215dafb',1,'xb::xbDbf']]],
+ ['gethomedir_36',['GetHomeDir',['../classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9',1,'xb::xbSsv']]],
+ ['getlastpos_37',['GetLastPos',['../classxb_1_1xbString.html#ac7698665f44413a5e99a5b5bc573c6df',1,'xb::xbString::GetLastPos(char c) const'],['../classxb_1_1xbString.html#a1c55587904fe7e534290559d0ecb8646',1,'xb::xbString::GetLastPos(const char *s) const']]],
+ ['getlastrecord_38',['GetLastRecord',['../classxb_1_1xbDbf.html#a49e667f9c8ee55c36444702663fc5964',1,'xb::xbDbf::GetLastRecord()'],['../classxb_1_1xbDbf.html#a8ccfa2291417412b6894940d1b92f9a6',1,'xb::xbDbf::GetLastRecord(xbInt16 iOption)']]],
+ ['getlogdirectory_39',['GetLogDirectory',['../classxb_1_1xbSsv.html#a4822315bded3969b59aeeb683c373051',1,'xb::xbSsv']]],
+ ['getlogfilename_40',['GetLogFileName',['../classxb_1_1xbSsv.html#afaef09435be73b3111f5edbd7091d861',1,'xb::xbSsv']]],
+ ['getlogfqfilename_41',['GetLogFqFileName',['../classxb_1_1xbXBase.html#ab5d63cd7d9137eba8a1d4d9c3df522b7',1,'xb::xbXBase']]],
+ ['getlogicalfield_42',['GetLogicalField',['../classxb_1_1xbDbf.html#ab28feef20c988b0a6f1c1911a45377b0',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbBool &amp;bFieldData, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#a943cea7fde1b06c1a05184193eff8d2d',1,'xb::xbDbf::GetLogicalField(const xbString &amp;sFieldName, xbBool &amp;bFieldData) const'],['../classxb_1_1xbDbf.html#aaf615ddcf08f8cd14efc713c2a8d7ae1',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbBool &amp;bFieldData) const'],['../classxb_1_1xbDbf.html#a9cd6819bfd932ff8507e54d9cb9a624e',1,'xb::xbDbf::GetLogicalField(const xbString &amp;sFieldName, xbString &amp;sFieldData) const'],['../classxb_1_1xbDbf.html#a3254f091fc4a1404abed3dd2bcdd6ce6',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbString &amp;sFieldData) const']]],
+ ['getlogsize_43',['GetLogSize',['../classxb_1_1xbXBase.html#aedb4c2aa2c90e4529915198a2305b355',1,'xb::xbXBase']]],
+ ['getlogstatus_44',['GetLogStatus',['../classxb_1_1xbXBase.html#ade34cd72c2a7e70fb55429a8a6f6c028',1,'xb::xbXBase']]],
+ ['getlongfield_45',['GetLongField',['../classxb_1_1xbDbf.html#abe525c0820640e0a9e169d0b7913cfa1',1,'xb::xbDbf::GetLongField(xbInt16 iFieldNo, xbInt32 &amp;lFieldValue) const'],['../classxb_1_1xbDbf.html#a7b8ef75b17941beac17e50e969b2d3db',1,'xb::xbDbf::GetLongField(const xbString &amp;sFieldName, xbInt32 &amp;lFieldValue) const']]],
+ ['getmultiuser_46',['GetMultiUser',['../classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5',1,'xb::xbSsv']]],
+ ['getnextrecord_47',['GetNextRecord',['../classxb_1_1xbDbf.html#ab896fe3b734f556de578d30f92b18fe2',1,'xb::xbDbf::GetNextRecord()'],['../classxb_1_1xbDbf.html#a3191428a7a92d9107d8d42448884f2ac',1,'xb::xbDbf::GetNextRecord(xbInt16 iOption)'],['../classxb_1_1xbDbf.html#a18fdcb4ab15b36cd47fa6f6f7a540d1a',1,'xb::xbDbf::GetNextRecord(xbInt16 iOption, xbUInt32 ulStartRec)']]],
+ ['getnextsqlcmd_48',['GetNextSqlCmd',['../xb__execsql_8cpp.html#adb176b752e38521fdb334b4976965945',1,'xb_execsql.cpp']]],
+ ['getnullsts_49',['GetNullSts',['../classxb_1_1xbDbf.html#a7930fe8b930c6d646b7b0d3df576fe9e',1,'xb::xbDbf::GetNullSts(xbInt16 iFieldNo, xbBool &amp;bIsNull, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#ae9a3f726ce5229ed021bfce0515050fc',1,'xb::xbDbf::GetNullSts(xbInt16 iFieldNo, xbBool &amp;bIsNull) const'],['../classxb_1_1xbDbf.html#a909788123ce0694b65dfcf036380d918',1,'xb::xbDbf::GetNullSts(const xbString &amp;sFieldName, xbBool &amp;bIsNull) const']]],
+ ['getopenmode_50',['GetOpenMode',['../classxb_1_1xbFile.html#a3c500dc9dac22c49496e4b29386b2dd3',1,'xb::xbFile']]],
+ ['getopentablecount_51',['GetOpenTableCount',['../classxb_1_1xbTblMgr.html#ad0d2d4adabc0dc0e761cfdee63c84069',1,'xb::xbTblMgr']]],
+ ['getpathseparator_52',['GetPathSeparator',['../classxb_1_1xbString.html#af8b8b808cf43cd352321b43f500142db',1,'xb::xbString::GetPathSeparator()'],['../classxb_1_1xbSsv.html#a63cee13b473ee13970e93b11837b9e35',1,'xb::xbSsv::GetPathSeparator()']]],
+ ['getprevrecord_53',['GetPrevRecord',['../classxb_1_1xbDbf.html#ab3d248e5221b4f0809897cd43af17a1e',1,'xb::xbDbf::GetPrevRecord()'],['../classxb_1_1xbDbf.html#a7eadc7b08d73003802b90584f7b33387',1,'xb::xbDbf::GetPrevRecord(xbInt16 iOption)']]],
+ ['getrawfield_54',['GetRawField',['../classxb_1_1xbDbf.html#aabd146c0e1054ab905ec96aedd84b02e',1,'xb::xbDbf']]],
+ ['getrecord_55',['GetRecord',['../classxb_1_1xbDbf.html#a26fba086b07caeab95066bf1c8d25161',1,'xb::xbDbf']]],
+ ['getrecordbuf_56',['GetRecordBuf',['../classxb_1_1xbDbf.html#aa3e38c4057d726a28a27d07a1610d124',1,'xb::xbDbf']]],
+ ['getrecordcnt_57',['GetRecordCnt',['../classxb_1_1xbDbf.html#ac196ad55335e1f4789d698748434dc89',1,'xb::xbDbf']]],
+ ['getrecordlen_58',['GetRecordLen',['../classxb_1_1xbDbf.html#ab50d76c6e29e81e347a6feb04c2f62bb',1,'xb::xbDbf']]],
+ ['getsharemode_59',['GetShareMode',['../classxb_1_1xbFile.html#a9b63e05b77f477ff6109ff7b9432c1b6',1,'xb::xbFile']]],
+ ['getsize_60',['GetSize',['../classxb_1_1xbString.html#a6c33e73659f8e98819289d2661c7271c',1,'xb::xbString']]],
+ ['gettblalias_61',['GetTblAlias',['../classxb_1_1xbDbf.html#a27758a325c097f204247908b65ba7fbd',1,'xb::xbDbf']]],
+ ['gettbllistentry_62',['GetTblListEntry',['../classxb_1_1xbTblMgr.html#acbf148ddba4297021cfb980a161ebef9',1,'xb::xbTblMgr']]],
+ ['gettempdirectory_63',['GetTempDirectory',['../classxb_1_1xbSsv.html#abfaeef85935331073d213465bb362a61',1,'xb::xbSsv']]],
+ ['getulongfield_64',['GetULongField',['../classxb_1_1xbDbf.html#a67e3a050f9090edf69eee75aef7f5d83',1,'xb::xbDbf::GetULongField(xbInt16 iFieldNo, xbUInt32 &amp;lFieldValue) const'],['../classxb_1_1xbDbf.html#a039eb02418ec4ca862adbc0f95b9cbec',1,'xb::xbDbf::GetULongField(const xbString &amp;sFieldName, xbUInt32 &amp;lFieldValue) const']]],
+ ['getversion_65',['GetVersion',['../classxb_1_1xbDbf.html#a49212a9eb17f7fa9f303e08d5fc50fc6',1,'xb::xbDbf']]],
+ ['getxbasefiletypebyte_66',['GetXbaseFileTypeByte',['../classxb_1_1xbFile.html#aaf2e697751a0beff41432a66bb83fb5e',1,'xb::xbFile::GetXbaseFileTypeByte(const xbString &amp;sFileName, xbInt16 &amp;iVersion)'],['../classxb_1_1xbFile.html#a7af337808919680b90710ad5e8a99232',1,'xb::xbFile::GetXbaseFileTypeByte(const xbString &amp;sFileName, unsigned char &amp;cFileTypeByte)'],['../classxb_1_1xbFile.html#a78aebdd21d3de46a450d5f835e3027f6',1,'xb::xbFile::GetXbaseFileTypeByte(const xbString &amp;sFileName, unsigned char &amp;cFileTypeByte, xbInt16 &amp;iVersion)']]],
+ ['getxbaseptr_67',['GetXbasePtr',['../classxb_1_1xbDbf.html#ab21ec23c076b0c9affdc0f6672bd133f',1,'xb::xbDbf']]]
+];
diff --git a/docs/doxygen/html/search/all_7.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_7.html
index d2b1825..d2b1825 100644
--- a/docs/doxygen/html/search/all_7.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_7.html
diff --git a/docs/doxygen/html/search/all_7.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_7.js
index 6a2cc28..6a2cc28 100644
--- a/docs/doxygen/html/search/all_7.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_7.js
diff --git a/docs/doxygen/html/search/all_8.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_8.html
index f4e3a2a..f4e3a2a 100644
--- a/docs/doxygen/html/search/all_8.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_8.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_8.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_8.js
new file mode 100644
index 0000000..d288171
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_8.js
@@ -0,0 +1,17 @@
+var searchData=
+[
+ ['iautocommit_0',['iAutoCommit',['../classxb_1_1xbDbf.html#ab506450954bc86e7bf1d7c4efe681f43',1,'xb::xbDbf']]],
+ ['idbfstatus_1',['iDbfStatus',['../classxb_1_1xbDbf.html#a6d8e193da3ca414eef1e8866ec5ca81b',1,'xb::xbDbf']]],
+ ['iendiantype_2',['iEndianType',['../classxb_1_1xbSsv.html#a5849e813f5e8e1cd180f0366637adbf3',1,'xb::xbSsv']]],
+ ['ifieldlen_3',['iFieldLen',['../structxb_1_1xbSchema.html#a2da554af25ef628acf59bb52996056ac',1,'xb::xbSchema']]],
+ ['ifileversion_4',['iFileVersion',['../classxb_1_1xbDbf.html#a15f495446f0d75bcf2fa89e3b699d388',1,'xb::xbDbf']]],
+ ['ifldno_5',['iFldNo',['../structsFldMap.html#a42eb801a85d8b60f06c4fe1be13ca723',1,'sFldMap']]],
+ ['inittime_6',['InitTime',['../tstfuncs_8cpp.html#ab1f17da15e67a8b2460d5a88b7a3db6e',1,'tstfuncs.cpp']]],
+ ['initvars_7',['InitVars',['../classxb_1_1xbDbf.html#ad06fe0f7975fb81125d27d82504e6829',1,'xb::xbDbf']]],
+ ['inoofdecs_8',['iNoOfDecs',['../structxb_1_1xbSchema.html#a55bab3bb69dee3508d168c93e182d4b9',1,'xb::xbSchema']]],
+ ['inooffields_9',['iNoOfFields',['../classxb_1_1xbDbf.html#a5056757614c39f725cc775332494966a',1,'xb::xbDbf']]],
+ ['irecpos_10',['iRecPos',['../structsFldMap.html#a02facce45c24ebecc13975c17fd52b8f',1,'sFldMap']]],
+ ['isempty_11',['IsEmpty',['../classxb_1_1xbString.html#a4a255a30d683acd62ea09c1617b53cb3',1,'xb::xbString']]],
+ ['isleapyear_12',['IsLeapYear',['../classxb_1_1xbDate.html#af2bd33a72448e2c5ee00d8b711dc5d95',1,'xb::xbDate::IsLeapYear(xbInt16 iYear) const'],['../classxb_1_1xbDate.html#a5f8051c31b29244265e8f26ac3547b9b',1,'xb::xbDate::IsLeapYear() const']]],
+ ['isnull_13',['IsNull',['../classxb_1_1xbDate.html#a611a64b14ff89ad3c20b34081ea1e658',1,'xb::xbDate::IsNull()'],['../classxb_1_1xbString.html#a3fa34fa31bcb7244ecb054ab628ad500',1,'xb::xbString::IsNull()']]]
+];
diff --git a/docs/doxygen/html/search/all_9.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_9.html
index 89177a8..89177a8 100644
--- a/docs/doxygen/html/search/all_9.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_9.html
diff --git a/docs/doxygen/html/search/all_9.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_9.js
index 9143c4b..9143c4b 100644
--- a/docs/doxygen/html/search/all_9.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_9.js
diff --git a/docs/doxygen/html/search/all_a.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_a.html
index 1f90b7a..1f90b7a 100644
--- a/docs/doxygen/html/search/all_a.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_a.html
diff --git a/docs/doxygen/html/search/all_a.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_a.js
index ad825ae..ad825ae 100644
--- a/docs/doxygen/html/search/all_a.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_a.js
diff --git a/docs/doxygen/html/search/all_b.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_b.html
index b7ad6e6..b7ad6e6 100644
--- a/docs/doxygen/html/search/all_b.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_b.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_b.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_b.js
new file mode 100644
index 0000000..9c2aae0
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_b.js
@@ -0,0 +1,9 @@
+var searchData=
+[
+ ['main_0',['main',['../xb__test__uda_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_uda.cpp'],['../xb__test__funcs_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_funcs.cpp'],['../xb__test__linklist_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_linklist.cpp'],['../xb__test__lock_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_lock.cpp'],['../xb__test__lock2_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_lock2.cpp'],['../xb__test__log_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_log.cpp'],['../xb__test__mdx_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_mdx.cpp'],['../xb__test__ndx_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_ndx.cpp'],['../xb__test__sql_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_sql.cpp'],['../xb__test__string_8cpp.html#aabf71bc9adb6daf457b2ea8879ae537f',1,'main(int argCnt, char **av=NULL):&#160;xb_test_string.cpp'],['../xb__test__tblmgr_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_tblmgr.cpp'],['../xb__test__tdx_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_tdx.cpp'],['../xb__test__filter_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_filter.cpp'],['../xb__test__xbase_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_xbase.cpp'],['../xb__cfg__check_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_cfg_check.cpp'],['../xb__copydbf_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_copydbf.cpp'],['../xb__dbfutil_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_dbfutil.cpp'],['../xb__deletall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_deletall.cpp'],['../xb__dumpdbt_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_dumpdbt.cpp'],['../xb__dumprecs_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_dumprecs.cpp'],['../xb__execsql_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_execsql.cpp'],['../xb__import_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_import.cpp'],['../xb__pack_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_pack.cpp'],['../xb__tblinfo_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_tblinfo.cpp'],['../xb__test__file_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_file.cpp'],['../xb__undelall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_undelall.cpp'],['../xb__ex__date_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_date.cpp'],['../xb__ex__expression_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_expression.cpp'],['../xb__ex__log_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_ex_log.cpp'],['../xb__ex__sql_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_ex_sql.cpp'],['../xb__ex__ssv_8cpp.html#a6438fb6826a353355708e08b4395d689',1,'main(int, char **av):&#160;xb_ex_ssv.cpp'],['../xb__ex__string_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_string.cpp'],['../xb__ex__v3__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_v3_create_dbf.cpp'],['../xb__ex__v3__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_v3_upd_dbf.cpp'],['../xb__ex__v4__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_v4_create_dbf.cpp'],['../xb__ex__v4__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_v4_upd_dbf.cpp'],['../xb__test__bcd_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_bcd.cpp'],['../xb__test__blockread_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_blockread.cpp'],['../xb__test__date_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_date.cpp'],['../xb__test__dbf__v3__memos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_dbf_v3_memos.cpp'],['../xb__test__dbf__v3__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_dbf_v3_nomemos.cpp'],['../xb__test__dbf__v4__memos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_dbf_v4_memos.cpp'],['../xb__test__dbf__v4__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_dbf_v4_nomemos.cpp'],['../xb__test__expnode_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_expnode.cpp'],['../xb__test__expression_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_expression.cpp']]],
+ ['memofieldsexist_1',['MemoFieldsExist',['../classxb_1_1xbDbf.html#a013dc8c51fc1aa988de39cf3da6da950',1,'xb::xbDbf']]],
+ ['mid_2',['Mid',['../classxb_1_1xbString.html#a0f9eefc836b24c4ee7c5a316c5d812b7',1,'xb::xbString']]],
+ ['monthof_3',['MonthOf',['../classxb_1_1xbDate.html#a08bd84c67e1119d8c5c1748cd89d092e',1,'xb::xbDate']]],
+ ['mydbfrec_4',['MyDbfRec',['../xb__test__blockread_8cpp.html#af68c3291a63fdf20ffa0e477460d148e',1,'xb_test_blockread.cpp']]],
+ ['myv4record_5',['MyV4Record',['../xb__ex__expression_8cpp.html#a2122b9562802e2fd799b20454000dc99',1,'xb_ex_expression.cpp']]]
+];
diff --git a/docs/doxygen/html/search/all_c.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_c.html
index 829c917..829c917 100644
--- a/docs/doxygen/html/search/all_c.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_c.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_c.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_c.js
new file mode 100644
index 0000000..4a79f03
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_c.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['namesuffixmissing_0',['NameSuffixMissing',['../classxb_1_1xbFile.html#a361e3cc318bbf1c4d10f069e0800a24e',1,'xb::xbFile']]],
+ ['next_1',['next',['../structsFldMap.html#a16eaff8fc09adc3faf453bfaa0d3baaa',1,'sFldMap']]]
+];
diff --git a/docs/doxygen/html/search/all_d.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_d.html
index d32b28e..d32b28e 100644
--- a/docs/doxygen/html/search/all_d.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_d.html
diff --git a/docs/doxygen/html/search/all_d.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_d.js
index bdfe8c7..bdfe8c7 100644
--- a/docs/doxygen/html/search/all_d.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_d.js
diff --git a/docs/doxygen/html/search/all_e.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_e.html
index ce450a2..ce450a2 100644
--- a/docs/doxygen/html/search/all_e.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_e.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_e.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_e.js
new file mode 100644
index 0000000..ad8f3ae
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_e.js
@@ -0,0 +1,24 @@
+var searchData=
+[
+ ['pack_0',['Pack',['../classxb_1_1xbDbf.html#a93bb14ad0451355bfa3379128120988a',1,'xb::xbDbf::Pack(xbUInt32 &amp;ulDeletedRecCnt)'],['../classxb_1_1xbDbf.html#a8a52bf3ef2123c0d17e6b1f67bf0dc55',1,'xb::xbDbf::Pack()']]],
+ ['padleft_1',['PadLeft',['../classxb_1_1xbString.html#a6a09cfed22066b0c72432f26960f9e7b',1,'xb::xbString']]],
+ ['padright_2',['PadRight',['../classxb_1_1xbString.html#aba13f0c77eb6c4a22996039569fad284',1,'xb::xbString']]],
+ ['pdbf_3',['pDbf',['../structxb_1_1xbTblList.html#a387d3f6bbf291a1fb96d276ed9bb96b6',1,'xb::xbTblList']]],
+ ['pnext_4',['pNext',['../structxb_1_1xbTblList.html#a3fd169fcf0fd4df927544e5342db583c',1,'xb::xbTblList']]],
+ ['pos_5',['Pos',['../classxb_1_1xbString.html#a1b586890138da8bf0e23090bd8b34581',1,'xb::xbString::Pos(char c, xbUInt32 ulStartPos) const'],['../classxb_1_1xbString.html#a3baf59d15099589ff631995f129e582b',1,'xb::xbString::Pos(char c) const'],['../classxb_1_1xbString.html#a8705d7277b72f5aa98021e84438914da',1,'xb::xbString::Pos(const char *s) const']]],
+ ['printhelp_6',['PrintHelp',['../xb__undelall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_undelall.cpp'],['../xb__tblinfo_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_tblinfo.cpp'],['../xb__pack_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_pack.cpp'],['../xb__import_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_import.cpp'],['../xb__execsql_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_execsql.cpp'],['../xb__dumprecs_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_dumprecs.cpp'],['../xb__dumpdbt_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_dumpdbt.cpp'],['../xb__deletall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_deletall.cpp'],['../xb__dbfutil_8cpp.html#a9c55a055e1cd4249c7f47e19dc7ac564',1,'PrintHelp():&#160;xb_dbfutil.cpp'],['../xb__copydbf_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_copydbf.cpp']]],
+ ['printresult_7',['PrintResult',['../xb__ex__expression_8cpp.html#a3234afc912211aec54c10d363d28cbda',1,'xb_ex_expression.cpp']]],
+ ['printversion_8',['PrintVersion',['../xb__copydbf_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_copydbf.cpp'],['../xb__dbfutil_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_dbfutil.cpp'],['../xb__deletall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_deletall.cpp'],['../xb__dumpdbt_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_dumpdbt.cpp'],['../xb__dumprecs_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_dumprecs.cpp'],['../xb__execsql_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_execsql.cpp'],['../xb__import_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_import.cpp'],['../xb__pack_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_pack.cpp'],['../xb__tblinfo_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_tblinfo.cpp'],['../xb__undelall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_undelall.cpp']]],
+ ['psfqtblname_9',['psFqTblName',['../structxb_1_1xbTblList.html#aceec65f6f6b585788cf98e8dabd2737d',1,'xb::xbTblList']]],
+ ['pstblalias_10',['psTblAlias',['../structxb_1_1xbTblList.html#ac87742c8a6b1cf2e7e35218e96966a05',1,'xb::xbTblList']]],
+ ['pstblname_11',['psTblName',['../structxb_1_1xbTblList.html#a02c3b0c47fd104ef9758b375ecdcfd0f',1,'xb::xbTblList']]],
+ ['putat_12',['PutAt',['../classxb_1_1xbString.html#a1bae6fa8f608261f6e889616482f6e39',1,'xb::xbString']]],
+ ['putdatefield_13',['PutDateField',['../classxb_1_1xbDbf.html#a873f04af528a9d81e6a367a59d998ec5',1,'xb::xbDbf::PutDateField(xbInt16 iFieldNo, const xbDate &amp;dt)'],['../classxb_1_1xbDbf.html#a571b36b3a940b1a16d5e834f329b33b9',1,'xb::xbDbf::PutDateField(const xbString &amp;sFieldName, const xbDate &amp;dt)']]],
+ ['putdoublefield_14',['PutDoubleField',['../classxb_1_1xbDbf.html#a4f34842d7e8ff1f16992c2ece2fc38a5',1,'xb::xbDbf::PutDoubleField(xbInt16 FieldNo, xbDouble dFieldValue)'],['../classxb_1_1xbDbf.html#ae695bbc71c19abc71c0c5f2ff2e1f971',1,'xb::xbDbf::PutDoubleField(const xbString &amp;FieldName, xbDouble dFieldValue)']]],
+ ['putfield_15',['PutField',['../classxb_1_1xbDbf.html#a7862215dd2f83a1c488e539cd1f9aec0',1,'xb::xbDbf::PutField(const xbString &amp;sFieldName, const xbString &amp;sFieldData)'],['../classxb_1_1xbDbf.html#a142b0c0dc904917f3c68c5572c1237b5',1,'xb::xbDbf::PutField(xbInt16 iFieldNo, const xbString &amp;sFieldData)']]],
+ ['putfloatfield_16',['PutFloatField',['../classxb_1_1xbDbf.html#a64161eb50d72e424b11bf3732657ebd8',1,'xb::xbDbf::PutFloatField(xbInt16 iFieldNo, xbFloat fFieldValue)'],['../classxb_1_1xbDbf.html#a4ea3241bc710d57e5f755efda62288ad',1,'xb::xbDbf::PutFloatField(const xbString &amp;sFieldName, xbFloat fFieldValue)']]],
+ ['putlogicalfield_17',['PutLogicalField',['../classxb_1_1xbDbf.html#ab39ac4269ac63bc7ea4f638733bb17f0',1,'xb::xbDbf::PutLogicalField(xbInt16 iFieldNo, const xbString &amp;sFieldData)'],['../classxb_1_1xbDbf.html#a507e400ca6526a9e0391cf06dd6a014e',1,'xb::xbDbf::PutLogicalField(const xbString &amp;sFieldName, const xbString &amp;sFieldData)'],['../classxb_1_1xbDbf.html#a423a0cb7bd252cedf956ace4954f275d',1,'xb::xbDbf::PutLogicalField(xbInt16 iFieldNo, xbBool bFieldData)'],['../classxb_1_1xbDbf.html#a623ca3ef5520c42308c1a16b518e7ff3',1,'xb::xbDbf::PutLogicalField(const xbString &amp;sFieldName, xbBool bFieldData)']]],
+ ['putlongfield_18',['PutLongField',['../classxb_1_1xbDbf.html#a56c8f924284bf88aabf90b7930b4eb47',1,'xb::xbDbf::PutLongField(xbInt16 iFieldNo, xbInt32 lFieldValue)'],['../classxb_1_1xbDbf.html#a0692d1776a725c2f61d4c14677e9307c',1,'xb::xbDbf::PutLongField(const xbString &amp;sFieldName, xbInt32 lFieldValue)']]],
+ ['putrecord_19',['PutRecord',['../classxb_1_1xbDbf.html#a3c36a5ffbc7067a1abbcb526dd3b981d',1,'xb::xbDbf::PutRecord()'],['../classxb_1_1xbDbf.html#aacbc7bac3ea0c502ee75b838f4f0fcbf',1,'xb::xbDbf::PutRecord(xbUInt32 ulRecNo)']]],
+ ['putulongfield_20',['PutULongField',['../classxb_1_1xbDbf.html#ac62cb97c4e678c83f41788b1ae4d0381',1,'xb::xbDbf::PutULongField(const xbString &amp;sFieldNo, xbUInt32 lFieldValue)'],['../classxb_1_1xbDbf.html#af5dec5c9ff903efffdb0490a44d296d2',1,'xb::xbDbf::PutULongField(xbInt16 iFieldNo, xbUInt32 lFieldValue)']]]
+];
diff --git a/docs/doxygen/html/search/all_f.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_f.html
index 59cfe49..59cfe49 100644
--- a/docs/doxygen/html/search/all_f.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_f.html
diff --git a/docs/doxygen/html/search/all_f.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_f.js
index 9b07813..9b07813 100644
--- a/docs/doxygen/html/search/all_f.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_f.js
diff --git a/docs/doxygen/html/search/classes_0.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/classes_0.html
index 8361bcd..8361bcd 100644
--- a/docs/doxygen/html/search/classes_0.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/classes_0.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/classes_0.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/classes_0.js
new file mode 100644
index 0000000..cbb027a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/classes_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['sfldmap_0',['sFldMap',['../structsFldMap.html',1,'']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/classes_1.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/classes_1.html
new file mode 100644
index 0000000..3c668de
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/classes_1.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/docs/doxygen/html/search/classes_0.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/classes_1.js
index b0f0a44..b0f0a44 100644
--- a/docs/doxygen/html/search/classes_0.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/classes_1.js
diff --git a/docs/doxygen/html/search/close.svg b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/close.svg
index a933eea..a933eea 100644
--- a/docs/doxygen/html/search/close.svg
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/close.svg
diff --git a/docs/doxygen/html/search/defines_0.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_0.html
index fd147db..fd147db 100644
--- a/docs/doxygen/html/search/defines_0.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_0.html
diff --git a/docs/doxygen/html/search/defines_0.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_0.js
index 7e77a63..7e77a63 100644
--- a/docs/doxygen/html/search/defines_0.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_0.js
diff --git a/docs/doxygen/html/search/defines_1.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_1.html
index 517e9fc..517e9fc 100644
--- a/docs/doxygen/html/search/defines_1.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_1.html
diff --git a/docs/doxygen/html/search/defines_1.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_1.js
index 7d95fad..7d95fad 100644
--- a/docs/doxygen/html/search/defines_1.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_1.js
diff --git a/docs/doxygen/html/search/defines_2.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_2.html
index a4cbbba..a4cbbba 100644
--- a/docs/doxygen/html/search/defines_2.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_2.html
diff --git a/docs/doxygen/html/search/defines_2.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_2.js
index cbf9570..cbf9570 100644
--- a/docs/doxygen/html/search/defines_2.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_2.js
diff --git a/docs/doxygen/html/search/defines_3.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_3.html
index df9e6c2..df9e6c2 100644
--- a/docs/doxygen/html/search/defines_3.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_3.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_3.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_3.js
new file mode 100644
index 0000000..fe97605
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_3.js
@@ -0,0 +1,91 @@
+var searchData=
+[
+ ['xb_5factive_5frecs_0',['XB_ACTIVE_RECS',['../xbdbf_8h.html#a1c44bb25bf2e23a3a9d3d2312df0b592',1,'xbdbf.h']]],
+ ['xb_5fall_5frecs_1',['XB_ALL_RECS',['../xbdbf_8h.html#a8bd17730da3ba5c55a6a07bc482dd0e4',1,'xbdbf.h']]],
+ ['xb_5falready_5fopen_2',['XB_ALREADY_OPEN',['../xbretcod_8h.html#aa2ff8301503f446c6a5f6510090e520f',1,'xbretcod.h']]],
+ ['xb_5fblockread_5fnot_5fenabled_3',['XB_BLOCKREAD_NOT_ENABLED',['../xbretcod_8h.html#aae9241d91cfb37f5d236128b3bce0a4a',1,'xbretcod.h']]],
+ ['xb_5fbof_4',['XB_BOF',['../xbretcod_8h.html#ade5f3a7cf1467d12761e4e21b5e4200f',1,'xbretcod.h']]],
+ ['xb_5fchar_5ffld_5',['XB_CHAR_FLD',['../xbdbf_8h.html#a20f739b9d9dc6a002a246a999e76aeaa',1,'xbdbf.h']]],
+ ['xb_5fchareof_6',['XB_CHAREOF',['../xbdbf_8h.html#ada1115f596131888c04df61546b198c4',1,'xbdbf.h']]],
+ ['xb_5fcharhdr_7',['XB_CHARHDR',['../xbdbf_8h.html#a35d56cac7959c1e5c761684ced3f1e17',1,'xbdbf.h']]],
+ ['xb_5fclose_5ferror_8',['XB_CLOSE_ERROR',['../xbretcod_8h.html#a030684d5541cf6127a76d81b0684b235',1,'xbretcod.h']]],
+ ['xb_5fclosed_9',['XB_CLOSED',['../xbdbf_8h.html#a843ca4569326dbd1d0647899b0eb512f',1,'xbdbf.h']]],
+ ['xb_5fdate_5ffld_10',['XB_DATE_FLD',['../xbdbf_8h.html#a7f685e6f5fe804b2174725a27ce73adc',1,'xbdbf.h']]],
+ ['xb_5fdbf_5ffile_5fnot_5fopen_11',['XB_DBF_FILE_NOT_OPEN',['../xbretcod_8h.html#a8104510b347c87998eadd0b27201e3c2',1,'xbretcod.h']]],
+ ['xb_5fdelete_5ffailed_12',['XB_DELETE_FAILED',['../xbretcod_8h.html#ada15513935d5ede9216f07c0438f34d2',1,'xbretcod.h']]],
+ ['xb_5fdeleted_5frecs_13',['XB_DELETED_RECS',['../xbdbf_8h.html#acc0a441854ed92b9d65d1181a97cad43',1,'xbdbf.h']]],
+ ['xb_5fdirectory_5ferror_14',['XB_DIRECTORY_ERROR',['../xbretcod_8h.html#af532df74147ce2d872f61abfee49c53e',1,'xbretcod.h']]],
+ ['xb_5fdontoverlay_15',['XB_DONTOVERLAY',['../xbdbf_8h.html#a7b797840abdb3291373d15978103a778',1,'xbdbf.h']]],
+ ['xb_5fdup_5ftable_5for_5falias_16',['XB_DUP_TABLE_OR_ALIAS',['../xbretcod_8h.html#ac18036408d10e5eee1bf76cf92352b95',1,'xbretcod.h']]],
+ ['xb_5fempty_17',['XB_EMPTY',['../xbretcod_8h.html#a18068d0cbe0c7a1b4dd3176220180c29',1,'xbretcod.h']]],
+ ['xb_5feof_18',['XB_EOF',['../xbretcod_8h.html#a8b47031e90c3f86306c7058e4490d3b7',1,'xbretcod.h']]],
+ ['xb_5ffile_5fexists_19',['XB_FILE_EXISTS',['../xbretcod_8h.html#a54303a9677dbd5342233f33dd08c64d0',1,'xbretcod.h']]],
+ ['xb_5ffile_5fnot_5ffound_20',['XB_FILE_NOT_FOUND',['../xbretcod_8h.html#ad090af330c93111d12f6de35dbb065bc',1,'xbretcod.h']]],
+ ['xb_5ffile_5ftype_5fnot_5fsupported_21',['XB_FILE_TYPE_NOT_SUPPORTED',['../xbretcod_8h.html#ab7b9130a5f1df9975cfeaf6241933596',1,'xbretcod.h']]],
+ ['xb_5ffloat_5ffld_22',['XB_FLOAT_FLD',['../xbdbf_8h.html#a96ab4218d70ab603b4866354ce8c18cd',1,'xbdbf.h']]],
+ ['xb_5ffmt_5fmonth_23',['XB_FMT_MONTH',['../xbdate_8h.html#aeacf2f7cc897ab5bd64781c0fb52b75d',1,'xbdate.h']]],
+ ['xb_5ffmt_5fweek_24',['XB_FMT_WEEK',['../xbdate_8h.html#a8f22704d3fd93fa85dd93b6c699e8178',1,'xbdate.h']]],
+ ['xb_5ffmt_5fyear_25',['XB_FMT_YEAR',['../xbdate_8h.html#aa29d78982a9e007874af1c4f4e4d1aa4',1,'xbdate.h']]],
+ ['xb_5fincompatible_5foperands_26',['XB_INCOMPATIBLE_OPERANDS',['../xbretcod_8h.html#af141ec58b7ca7360e0be6c61d015ea74',1,'xbretcod.h']]],
+ ['xb_5finconsistent_5fparm_5flens_27',['XB_INCONSISTENT_PARM_LENS',['../xbretcod_8h.html#adc4b24bfffa202f8df25409894e547b9',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fblock_5fno_28',['XB_INVALID_BLOCK_NO',['../xbretcod_8h.html#a4e13b529b486c43ca600ce7d8ddbf3c2',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fblock_5fsize_29',['XB_INVALID_BLOCK_SIZE',['../xbretcod_8h.html#a1bd22921612389c37f6b2eac438c62c5',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fdata_30',['XB_INVALID_DATA',['../xbretcod_8h.html#afb40bbed323ecb369dd430a2e1242f9a',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fdate_31',['XB_INVALID_DATE',['../xbretcod_8h.html#a702475500357a27b8a34463be3e11925',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fexpression_32',['XB_INVALID_EXPRESSION',['../xbretcod_8h.html#a54db562c3cae97581812b4fccd52b71a',1,'xbretcod.h']]],
+ ['xb_5finvalid_5ffield_33',['XB_INVALID_FIELD',['../xbretcod_8h.html#a34180b2e2bd350ba2ebcdd1335e15d7e',1,'xbretcod.h']]],
+ ['xb_5finvalid_5ffield_5flen_34',['XB_INVALID_FIELD_LEN',['../xbretcod_8h.html#a7bd322c0efbba17f68ccccd6cf624411',1,'xbretcod.h']]],
+ ['xb_5finvalid_5ffield_5fname_35',['XB_INVALID_FIELD_NAME',['../xbretcod_8h.html#a59403978784130834cf39434cb73f96e',1,'xbretcod.h']]],
+ ['xb_5finvalid_5ffield_5fno_36',['XB_INVALID_FIELD_NO',['../xbretcod_8h.html#a09d6c08a44316f551108a74003efd381',1,'xbretcod.h']]],
+ ['xb_5finvalid_5ffield_5ftype_37',['XB_INVALID_FIELD_TYPE',['../xbretcod_8h.html#a79e2588f067d6e236c0e5a2c0728ba9f',1,'xbretcod.h']]],
+ ['xb_5finvalid_5ffunction_38',['XB_INVALID_FUNCTION',['../xbretcod_8h.html#a2b7e5e440dbcf5e6dc885b24dbe28742',1,'xbretcod.h']]],
+ ['xb_5finvalid_5findex_39',['XB_INVALID_INDEX',['../xbretcod_8h.html#acd175ef0541e2cad424791bd87619dd4',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fkeyno_40',['XB_INVALID_KEYNO',['../xbretcod_8h.html#aec2c0ac2bd62e0329ef130e4fbda39f8',1,'xbretcod.h']]],
+ ['xb_5finvalid_5flock_5foption_41',['XB_INVALID_LOCK_OPTION',['../xbretcod_8h.html#ab45735e63c208eb7e6d6df31fd527aec',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fmemo_5ffield_42',['XB_INVALID_MEMO_FIELD',['../xbretcod_8h.html#a187c50745f51bfe4aa6f70a92f16c59f',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fnodelink_43',['XB_INVALID_NODELINK',['../xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fobject_44',['XB_INVALID_OBJECT',['../xbretcod_8h.html#a418c047353bc683d0fd6ecbbdd5b7885',1,'xbretcod.h']]],
+ ['xb_5finvalid_5foption_45',['XB_INVALID_OPTION',['../xbretcod_8h.html#af1cd0baf346cad686fa4dd11f700012a',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fpage_46',['XB_INVALID_PAGE',['../xbretcod_8h.html#ad0aba12b5ae2137f8d6abd28b47f95f0',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fparameter_47',['XB_INVALID_PARAMETER',['../xbretcod_8h.html#a1b78533ada854b4185c51ad8a5ce9f02',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fparm_48',['XB_INVALID_PARM',['../xbretcod_8h.html#a4cedf96581c9cbc9c14d07494143702d',1,'xbretcod.h']]],
+ ['xb_5finvalid_5frecord_49',['XB_INVALID_RECORD',['../xbretcod_8h.html#a0fd212f912b2e62700a66bae95bd73a1',1,'xbretcod.h']]],
+ ['xb_5finvalid_5ftable_5fname_50',['XB_INVALID_TABLE_NAME',['../xbretcod_8h.html#a53891c95a78483704d2a8e14c4499f92',1,'xbretcod.h']]],
+ ['xb_5finvalid_5ftag_51',['XB_INVALID_TAG',['../xbretcod_8h.html#a176d917912d3433f065483f905a4c50a',1,'xbretcod.h']]],
+ ['xb_5fkey_5fnot_5funique_52',['XB_KEY_NOT_UNIQUE',['../xbretcod_8h.html#ad60dbb1862c0c1c2dc0464cfbfd93a34',1,'xbretcod.h']]],
+ ['xb_5flimit_5freached_53',['XB_LIMIT_REACHED',['../xbretcod_8h.html#a59f1a8a6aca19595c2d1804349a24850',1,'xbretcod.h']]],
+ ['xb_5flock_54',['XB_LOCK',['../xbdbf_8h.html#a395a2e101a793bacabf6bc079d178e29',1,'xbdbf.h']]],
+ ['xb_5flock_5ffailed_55',['XB_LOCK_FAILED',['../xbretcod_8h.html#a001e24b39e0f155fb1e892f5b1b9cff1',1,'xbretcod.h']]],
+ ['xb_5flogical_5ffld_56',['XB_LOGICAL_FLD',['../xbdbf_8h.html#a2f6d5073af761bc1a806a2c7b1c1d886',1,'xbdbf.h']]],
+ ['xb_5fmax_5ferror_5fno_57',['XB_MAX_ERROR_NO',['../xbretcod_8h.html#a299419a9c80e000b74bf97a2d24d6a3d',1,'xbretcod.h']]],
+ ['xb_5fmemcpy_5ferror_58',['XB_MEMCPY_ERROR',['../xbretcod_8h.html#aa2925f035e3b186d7efa14648ea0e86d',1,'xbretcod.h']]],
+ ['xb_5fmemo_5ffld_59',['XB_MEMO_FLD',['../xbdbf_8h.html#a23fa19b19cb43bd6dcc59a5a3f6c30ad',1,'xbdbf.h']]],
+ ['xb_5fmulti_5fuser_60',['XB_MULTI_USER',['../xbfile_8h.html#a05c0fc99ba71cf953d046d12f3f874bc',1,'xbfile.h']]],
+ ['xb_5fno_5ferror_61',['XB_NO_ERROR',['../xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23',1,'xbretcod.h']]],
+ ['xb_5fno_5fmemory_62',['XB_NO_MEMORY',['../xbretcod_8h.html#ae687fc7d872ba0475a8477e4447f9b54',1,'xbretcod.h']]],
+ ['xb_5fnot_5ffound_63',['XB_NOT_FOUND',['../xbretcod_8h.html#ac2606659a54111334f5b02861e533700',1,'xbretcod.h']]],
+ ['xb_5fnot_5fopen_64',['XB_NOT_OPEN',['../xbretcod_8h.html#a9474b400f647bdefbbb07e5177e8d7a1',1,'xbretcod.h']]],
+ ['xb_5fnull_5fdate_65',['XB_NULL_DATE',['../xbexp_8h.html#a6e9d2ccba2b3ac6e44ab411ffda488c2',1,'xbexp.h']]],
+ ['xb_5fnumeric_5ffld_66',['XB_NUMERIC_FLD',['../xbdbf_8h.html#ae9fb6d69cc5edc94d36ae403c22ec1c6',1,'xbdbf.h']]],
+ ['xb_5fopen_67',['XB_OPEN',['../xbdbf_8h.html#a9a6dafbb07cac744eb14094efa739409',1,'xbdbf.h']]],
+ ['xb_5fopen_5ferror_68',['XB_OPEN_ERROR',['../xbretcod_8h.html#aaab55236993a1d3acb29206252a904c8',1,'xbretcod.h']]],
+ ['xb_5foverlay_69',['XB_OVERLAY',['../xbdbf_8h.html#a6fe10b307878b4612b04c2c876a4a592',1,'xbdbf.h']]],
+ ['xb_5fparse_5ferror_70',['XB_PARSE_ERROR',['../xbretcod_8h.html#aec713cac2b03a0d536a2d16336ae7c0b',1,'xbretcod.h']]],
+ ['xb_5fread_71',['XB_READ',['../xbfile_8h.html#ae58c73e0ba237fcf67ee20feea6c2743',1,'xbfile.h']]],
+ ['xb_5fread_5ferror_72',['XB_READ_ERROR',['../xbretcod_8h.html#adbd40585db8bb748d191f94a33bac710',1,'xbretcod.h']]],
+ ['xb_5fread_5fwrite_73',['XB_READ_WRITE',['../xbfile_8h.html#af991a288c327f6857e90156ea734a633',1,'xbfile.h']]],
+ ['xb_5frename_5ferror_74',['XB_RENAME_ERROR',['../xbretcod_8h.html#a373f30b2efcbbab9f6d060fb3fe8cba3',1,'xbretcod.h']]],
+ ['xb_5fseek_5ferror_75',['XB_SEEK_ERROR',['../xbretcod_8h.html#a0455ad8719e153b08ec68b10c81e9f41',1,'xbretcod.h']]],
+ ['xb_5fsingle_5fuser_76',['XB_SINGLE_USER',['../xbfile_8h.html#a9ec4d60a008c667d9861e3b3814f0232',1,'xbfile.h']]],
+ ['xb_5fsyntax_5ferror_77',['XB_SYNTAX_ERROR',['../xbretcod_8h.html#a5db3a90f215534143bdde81253729c7f',1,'xbretcod.h']]],
+ ['xb_5ftable_5fnot_5flocked_78',['XB_TABLE_NOT_LOCKED',['../xbretcod_8h.html#af6aaf779fddecca521d785666f6dc56b',1,'xbretcod.h']]],
+ ['xb_5funbalanced_5fparens_79',['XB_UNBALANCED_PARENS',['../xbretcod_8h.html#aff5646a6b0884ff81004de6961473ea6',1,'xbretcod.h']]],
+ ['xb_5funbalanced_5fquotes_80',['XB_UNBALANCED_QUOTES',['../xbretcod_8h.html#aedfa20a6c4eb9ba3063ba56be8280eac',1,'xbretcod.h']]],
+ ['xb_5funlock_81',['XB_UNLOCK',['../xbdbf_8h.html#a21389b73e7b4e7e185fa635b9e354c2e',1,'xbdbf.h']]],
+ ['xb_5fupdated_82',['XB_UPDATED',['../xbdbf_8h.html#a26e7eeda69f32bc88b08a208ca9e7991',1,'xbdbf.h']]],
+ ['xb_5fwrite_83',['XB_WRITE',['../xbfile_8h.html#abbf99e259c2f31572c886da6d85b1359',1,'xbfile.h']]],
+ ['xb_5fwrite_5ferror_84',['XB_WRITE_ERROR',['../xbretcod_8h.html#aef34ebe6726057f805d6063130280549',1,'xbretcod.h']]],
+ ['xbfalse_85',['xbFalse',['../xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc',1,'xbtypes.h']]],
+ ['xbfileno_86',['xbFileNo',['../xbtypes_8h.html#a2c65f692ac861990861575e18f72f6eb',1,'xbtypes.h']]],
+ ['xbtrue_87',['xbTrue',['../xbtypes_8h.html#ab0ae00665298fe7f5292691cb98ec2d9',1,'xbtypes.h']]]
+];
diff --git a/docs/doxygen/html/search/files_0.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_0.html
index da83704..da83704 100644
--- a/docs/doxygen/html/search/files_0.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_0.html
diff --git a/docs/doxygen/html/search/files_0.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_0.js
index f577bf3..f577bf3 100644
--- a/docs/doxygen/html/search/files_0.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_0.js
diff --git a/docs/doxygen/html/search/files_1.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_1.html
index f7e1582..f7e1582 100644
--- a/docs/doxygen/html/search/files_1.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_1.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_1.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_1.js
new file mode 100644
index 0000000..bca7084
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_1.js
@@ -0,0 +1,109 @@
+var searchData=
+[
+ ['xb_5fcfg_5fcheck_2ecpp_0',['xb_cfg_check.cpp',['../xb__cfg__check_8cpp.html',1,'']]],
+ ['xb_5fcopydbf_2ecpp_1',['xb_copydbf.cpp',['../xb__copydbf_8cpp.html',1,'']]],
+ ['xb_5fdbfutil_2ecpp_2',['xb_dbfutil.cpp',['../xb__dbfutil_8cpp.html',1,'']]],
+ ['xb_5fdeletall_2ecpp_3',['xb_deletall.cpp',['../xb__deletall_8cpp.html',1,'']]],
+ ['xb_5fdumpdbt_2ecpp_4',['xb_dumpdbt.cpp',['../xb__dumpdbt_8cpp.html',1,'']]],
+ ['xb_5fdumprecs_2ecpp_5',['xb_dumprecs.cpp',['../xb__dumprecs_8cpp.html',1,'']]],
+ ['xb_5fex_5fdate_2ecpp_6',['xb_ex_date.cpp',['../xb__ex__date_8cpp.html',1,'']]],
+ ['xb_5fex_5fexpression_2ecpp_7',['xb_ex_expression.cpp',['../xb__ex__expression_8cpp.html',1,'']]],
+ ['xb_5fex_5flog_2ecpp_8',['xb_ex_log.cpp',['../xb__ex__log_8cpp.html',1,'']]],
+ ['xb_5fex_5fsql_2ecpp_9',['xb_ex_sql.cpp',['../xb__ex__sql_8cpp.html',1,'']]],
+ ['xb_5fex_5fssv_2ecpp_10',['xb_ex_ssv.cpp',['../xb__ex__ssv_8cpp.html',1,'']]],
+ ['xb_5fex_5fstring_2ecpp_11',['xb_ex_string.cpp',['../xb__ex__string_8cpp.html',1,'']]],
+ ['xb_5fex_5fv3_5fcreate_5fdbf_2ecpp_12',['xb_ex_v3_create_dbf.cpp',['../xb__ex__v3__create__dbf_8cpp.html',1,'']]],
+ ['xb_5fex_5fv3_5fupd_5fdbf_2ecpp_13',['xb_ex_v3_upd_dbf.cpp',['../xb__ex__v3__upd__dbf_8cpp.html',1,'']]],
+ ['xb_5fex_5fv4_5fcreate_5fdbf_2ecpp_14',['xb_ex_v4_create_dbf.cpp',['../xb__ex__v4__create__dbf_8cpp.html',1,'']]],
+ ['xb_5fex_5fv4_5fupd_5fdbf_2ecpp_15',['xb_ex_v4_upd_dbf.cpp',['../xb__ex__v4__upd__dbf_8cpp.html',1,'']]],
+ ['xb_5fexecsql_2ecpp_16',['xb_execsql.cpp',['../xb__execsql_8cpp.html',1,'']]],
+ ['xb_5fimport_2ecpp_17',['xb_import.cpp',['../xb__import_8cpp.html',1,'']]],
+ ['xb_5fpack_2ecpp_18',['xb_pack.cpp',['../xb__pack_8cpp.html',1,'']]],
+ ['xb_5ftblinfo_2ecpp_19',['xb_tblinfo.cpp',['../xb__tblinfo_8cpp.html',1,'']]],
+ ['xb_5ftest_5fbcd_2ecpp_20',['xb_test_bcd.cpp',['../xb__test__bcd_8cpp.html',1,'']]],
+ ['xb_5ftest_5fblockread_2ecpp_21',['xb_test_blockread.cpp',['../xb__test__blockread_8cpp.html',1,'']]],
+ ['xb_5ftest_5fdate_2ecpp_22',['xb_test_date.cpp',['../xb__test__date_8cpp.html',1,'']]],
+ ['xb_5ftest_5fdbf_5fv3_5fmemos_2ecpp_23',['xb_test_dbf_v3_memos.cpp',['../xb__test__dbf__v3__memos_8cpp.html',1,'']]],
+ ['xb_5ftest_5fdbf_5fv3_5fnomemos_2ecpp_24',['xb_test_dbf_v3_nomemos.cpp',['../xb__test__dbf__v3__nomemos_8cpp.html',1,'']]],
+ ['xb_5ftest_5fdbf_5fv4_5fmemos_2ecpp_25',['xb_test_dbf_v4_memos.cpp',['../xb__test__dbf__v4__memos_8cpp.html',1,'']]],
+ ['xb_5ftest_5fdbf_5fv4_5fnomemos_2ecpp_26',['xb_test_dbf_v4_nomemos.cpp',['../xb__test__dbf__v4__nomemos_8cpp.html',1,'']]],
+ ['xb_5ftest_5fexpnode_2ecpp_27',['xb_test_expnode.cpp',['../xb__test__expnode_8cpp.html',1,'']]],
+ ['xb_5ftest_5fexpression_2ecpp_28',['xb_test_expression.cpp',['../xb__test__expression_8cpp.html',1,'']]],
+ ['xb_5ftest_5ffile_2ecpp_29',['xb_test_file.cpp',['../xb__test__file_8cpp.html',1,'']]],
+ ['xb_5ftest_5ffilter_2ecpp_30',['xb_test_filter.cpp',['../xb__test__filter_8cpp.html',1,'']]],
+ ['xb_5ftest_5ffuncs_2ecpp_31',['xb_test_funcs.cpp',['../xb__test__funcs_8cpp.html',1,'']]],
+ ['xb_5ftest_5flinklist_2ecpp_32',['xb_test_linklist.cpp',['../xb__test__linklist_8cpp.html',1,'']]],
+ ['xb_5ftest_5flock_2ecpp_33',['xb_test_lock.cpp',['../xb__test__lock_8cpp.html',1,'']]],
+ ['xb_5ftest_5flock2_2ecpp_34',['xb_test_lock2.cpp',['../xb__test__lock2_8cpp.html',1,'']]],
+ ['xb_5ftest_5flog_2ecpp_35',['xb_test_log.cpp',['../xb__test__log_8cpp.html',1,'']]],
+ ['xb_5ftest_5fmdx_2ecpp_36',['xb_test_mdx.cpp',['../xb__test__mdx_8cpp.html',1,'']]],
+ ['xb_5ftest_5fndx_2ecpp_37',['xb_test_ndx.cpp',['../xb__test__ndx_8cpp.html',1,'']]],
+ ['xb_5ftest_5fsql_2ecpp_38',['xb_test_sql.cpp',['../xb__test__sql_8cpp.html',1,'']]],
+ ['xb_5ftest_5fstring_2ecpp_39',['xb_test_string.cpp',['../xb__test__string_8cpp.html',1,'']]],
+ ['xb_5ftest_5ftblmgr_2ecpp_40',['xb_test_tblmgr.cpp',['../xb__test__tblmgr_8cpp.html',1,'']]],
+ ['xb_5ftest_5ftdx_2ecpp_41',['xb_test_tdx.cpp',['../xb__test__tdx_8cpp.html',1,'']]],
+ ['xb_5ftest_5fuda_2ecpp_42',['xb_test_uda.cpp',['../xb__test__uda_8cpp.html',1,'']]],
+ ['xb_5ftest_5fxbase_2ecpp_43',['xb_test_xbase.cpp',['../xb__test__xbase_8cpp.html',1,'']]],
+ ['xb_5fundelall_2ecpp_44',['xb_undelall.cpp',['../xb__undelall_8cpp.html',1,'']]],
+ ['xbalttbl_2ecpp_45',['xbalttbl.cpp',['../xbalttbl_8cpp.html',1,'']]],
+ ['xbase_2eh_46',['xbase.h',['../xbase_8h.html',1,'']]],
+ ['xbbcd_2ecpp_47',['xbbcd.cpp',['../xbbcd_8cpp.html',1,'']]],
+ ['xbbcd_2eh_48',['xbbcd.h',['../xbbcd_8h.html',1,'']]],
+ ['xbblkread_2eh_49',['xbblkread.h',['../xbblkread_8h.html',1,'']]],
+ ['xbblockread_2ecpp_50',['xbblockread.cpp',['../xbblockread_8cpp.html',1,'']]],
+ ['xbcrix_2ecpp_51',['xbcrix.cpp',['../include_2xbcrix_8cpp.html',1,'(Global Namespace)'],['../sql_2xbcrix_8cpp.html',1,'(Global Namespace)']]],
+ ['xbcrtbl_2ecpp_52',['xbcrtbl.cpp',['../xbcrtbl_8cpp.html',1,'']]],
+ ['xbdate_2ecpp_53',['xbdate.cpp',['../xbdate_8cpp.html',1,'']]],
+ ['xbdate_2eh_54',['xbdate.h',['../xbdate_8h.html',1,'']]],
+ ['xbdbf_2ecpp_55',['xbdbf.cpp',['../xbdbf_8cpp.html',1,'']]],
+ ['xbdbf_2eh_56',['xbdbf.h',['../xbdbf_8h.html',1,'']]],
+ ['xbdbf3_2ecpp_57',['xbdbf3.cpp',['../xbdbf3_8cpp.html',1,'']]],
+ ['xbdbf4_2ecpp_58',['xbdbf4.cpp',['../xbdbf4_8cpp.html',1,'']]],
+ ['xbdelete_2ecpp_59',['xbdelete.cpp',['../xbdelete_8cpp.html',1,'']]],
+ ['xbdrpix_2ecpp_60',['xbdrpix.cpp',['../xbdrpix_8cpp.html',1,'']]],
+ ['xbdrptbl_2ecpp_61',['xbdrptbl.cpp',['../xbdrptbl_8cpp.html',1,'']]],
+ ['xbexp_2ecpp_62',['xbexp.cpp',['../xbexp_8cpp.html',1,'']]],
+ ['xbexp_2eh_63',['xbexp.h',['../xbexp_8h.html',1,'']]],
+ ['xbexpnode_2ecpp_64',['xbexpnode.cpp',['../xbexpnode_8cpp.html',1,'']]],
+ ['xbexpnode_2eh_65',['xbexpnode.h',['../xbexpnode_8h.html',1,'']]],
+ ['xbfields_2ecpp_66',['xbfields.cpp',['../xbfields_8cpp.html',1,'']]],
+ ['xbfile_2ecpp_67',['xbfile.cpp',['../xbfile_8cpp.html',1,'']]],
+ ['xbfile_2eh_68',['xbfile.h',['../xbfile_8h.html',1,'']]],
+ ['xbfilter_2ecpp_69',['xbfilter.cpp',['../xbfilter_8cpp.html',1,'']]],
+ ['xbfilter_2eh_70',['xbfilter.h',['../xbfilter_8h.html',1,'']]],
+ ['xbfuncs_2ecpp_71',['xbfuncs.cpp',['../xbfuncs_8cpp.html',1,'']]],
+ ['xbindex_2eh_72',['xbindex.h',['../xbindex_8h.html',1,'']]],
+ ['xbinsert_2ecpp_73',['xbinsert.cpp',['../xbinsert_8cpp.html',1,'']]],
+ ['xbixbase_2ecpp_74',['xbixbase.cpp',['../xbixbase_8cpp.html',1,'']]],
+ ['xbixmdx_2ecpp_75',['xbixmdx.cpp',['../xbixmdx_8cpp.html',1,'']]],
+ ['xbixndx_2ecpp_76',['xbixndx.cpp',['../xbixndx_8cpp.html',1,'']]],
+ ['xbixtdx_2ecpp_77',['xbixtdx.cpp',['../xbixtdx_8cpp.html',1,'']]],
+ ['xblnklst_2eh_78',['xblnklst.h',['../xblnklst_8h.html',1,'']]],
+ ['xblnklstord_2eh_79',['xblnklstord.h',['../xblnklstord_8h.html',1,'']]],
+ ['xblnknod_2eh_80',['xblnknod.h',['../xblnknod_8h.html',1,'']]],
+ ['xblog_2ecpp_81',['xblog.cpp',['../xblog_8cpp.html',1,'']]],
+ ['xblog_2eh_82',['xblog.h',['../xblog_8h.html',1,'']]],
+ ['xbmemo_2ecpp_83',['xbmemo.cpp',['../xbmemo_8cpp.html',1,'']]],
+ ['xbmemo_2eh_84',['xbmemo.h',['../xbmemo_8h.html',1,'']]],
+ ['xbmemo3_2ecpp_85',['xbmemo3.cpp',['../xbmemo3_8cpp.html',1,'']]],
+ ['xbmemo4_2ecpp_86',['xbmemo4.cpp',['../xbmemo4_8cpp.html',1,'']]],
+ ['xbretcod_2eh_87',['xbretcod.h',['../xbretcod_8h.html',1,'']]],
+ ['xbselect_2ecpp_88',['xbselect.cpp',['../xbselect_8cpp.html',1,'']]],
+ ['xbset_2ecpp_89',['xbset.cpp',['../xbset_8cpp.html',1,'']]],
+ ['xbsql_2ecpp_90',['xbsql.cpp',['../xbsql_8cpp.html',1,'']]],
+ ['xbsql_2eh_91',['xbsql.h',['../xbsql_8h.html',1,'']]],
+ ['xbssv_2ecpp_92',['xbssv.cpp',['../xbssv_8cpp.html',1,'']]],
+ ['xbssv_2eh_93',['xbssv.h',['../xbssv_8h.html',1,'']]],
+ ['xbstmt_2ecpp_94',['xbstmt.cpp',['../xbstmt_8cpp.html',1,'']]],
+ ['xbstring_2ecpp_95',['xbstring.cpp',['../xbstring_8cpp.html',1,'']]],
+ ['xbstring_2eh_96',['xbstring.h',['../xbstring_8h.html',1,'']]],
+ ['xbtag_2ecpp_97',['xbtag.cpp',['../xbtag_8cpp.html',1,'']]],
+ ['xbtag_2eh_98',['xbtag.h',['../xbtag_8h.html',1,'']]],
+ ['xbtblmgr_2ecpp_99',['xbtblmgr.cpp',['../xbtblmgr_8cpp.html',1,'']]],
+ ['xbtblmgr_2eh_100',['xbtblmgr.h',['../xbtblmgr_8h.html',1,'']]],
+ ['xbtypes_2eh_101',['xbtypes.h',['../xbtypes_8h.html',1,'']]],
+ ['xbuda_2ecpp_102',['xbuda.cpp',['../xbuda_8cpp.html',1,'']]],
+ ['xbuda_2eh_103',['xbuda.h',['../xbuda_8h.html',1,'']]],
+ ['xbxbase_2ecpp_104',['xbxbase.cpp',['../xbxbase_8cpp.html',1,'']]],
+ ['xbxbase_2eh_105',['xbxbase.h',['../xbxbase_8h.html',1,'']]]
+];
diff --git a/docs/doxygen/html/search/files_2.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_2.html
index 99aca62..99aca62 100644
--- a/docs/doxygen/html/search/files_2.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_2.html
diff --git a/docs/doxygen/html/search/files_2.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_2.js
index c416fdd..c416fdd 100644
--- a/docs/doxygen/html/search/files_2.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_2.js
diff --git a/docs/doxygen/html/search/files_3.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_3.html
index 25e128c..25e128c 100644
--- a/docs/doxygen/html/search/files_3.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_3.html
diff --git a/docs/doxygen/html/search/files_3.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_3.js
index f577bf3..f577bf3 100644
--- a/docs/doxygen/html/search/files_3.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_3.js
diff --git a/docs/doxygen/html/search/files_4.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_4.html
index 3c8ba6e..3c8ba6e 100644
--- a/docs/doxygen/html/search/files_4.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_4.html
diff --git a/docs/doxygen/html/search/files_4.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_4.js
index e99e9ec..e99e9ec 100644
--- a/docs/doxygen/html/search/files_4.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_4.js
diff --git a/docs/doxygen/html/search/functions_0.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_0.html
index 2d2d950..2d2d950 100644
--- a/docs/doxygen/html/search/functions_0.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_0.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_0.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_0.js
new file mode 100644
index 0000000..0f4d535
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_0.js
@@ -0,0 +1,9 @@
+var searchData=
+[
+ ['abort_0',['Abort',['../classxb_1_1xbDbf.html#a4edcf31390fbdc8c3558004770fd9f2f',1,'xb::xbDbf']]],
+ ['addbackslash_1',['AddBackSlash',['../classxb_1_1xbString.html#a6c4fdb689d27a9d19a0b5b4236e1ca62',1,'xb::xbString']]],
+ ['addtbltotbllist_2',['AddTblToTblList',['../classxb_1_1xbTblMgr.html#af16832ff2bfaee09265652e0fc03709a',1,'xb::xbTblMgr::AddTblToTblList(xbDbf *d, const xbString &amp;sFqTblName)'],['../classxb_1_1xbTblMgr.html#a2033188e9b08778188a034a6fc90ca85',1,'xb::xbTblMgr::AddTblToTblList(xbDbf *d, const xbString &amp;sFqTblName, const xbString &amp;sTblAlias)']]],
+ ['append_3',['Append',['../classxb_1_1xbString.html#a8f202e4798491f2ae9ce51ff58dd5815',1,'xb::xbString::Append(const xbString &amp;s)'],['../classxb_1_1xbString.html#a1922319303feb6da1f40b5994c5e8240',1,'xb::xbString::Append(const char *s)'],['../classxb_1_1xbString.html#a097453cb71fbf0b5511cf1259ddce4fb',1,'xb::xbString::Append(const char *s, xbUInt32 iByteCount)'],['../classxb_1_1xbString.html#a093c6ab5df375a2589755bb8f48fa5c7',1,'xb::xbString::Append(char c)']]],
+ ['appendrecord_4',['AppendRecord',['../classxb_1_1xbDbf.html#a5b412dd796241673eb1aa2c93513d69b',1,'xb::xbDbf']]],
+ ['assign_5',['Assign',['../classxb_1_1xbString.html#a85bef82dfa22122a1ab8dfe58a107d96',1,'xb::xbString::Assign(const char *srcStr, xbUInt32 lStartPos, xbUInt32 lCopyLen)'],['../classxb_1_1xbString.html#a08eb7ca6740423acab4e8bd7a6c8043d',1,'xb::xbString::Assign(const char *srcStr, xbUInt32 lStartPos)'],['../classxb_1_1xbString.html#a430119df844bd80d67c23c48b045af30',1,'xb::xbString::Assign(const xbString &amp;s, xbUInt32 ulStartPos, xbUInt32 lCopyLen)'],['../classxb_1_1xbString.html#a97df314be5b3b2611be11ff50a19533d',1,'xb::xbString::Assign(const xbString &amp;s, xbUInt32 ulStartPos)']]]
+];
diff --git a/docs/doxygen/html/search/functions_1.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_1.html
index 3b96b90..3b96b90 100644
--- a/docs/doxygen/html/search/functions_1.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_1.html
diff --git a/docs/doxygen/html/search/functions_1.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_1.js
index a3b8ce1..a3b8ce1 100644
--- a/docs/doxygen/html/search/functions_1.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_1.js
diff --git a/docs/doxygen/html/search/functions_10.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_10.html
index f0fe489..f0fe489 100644
--- a/docs/doxygen/html/search/functions_10.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_10.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_10.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_10.js
new file mode 100644
index 0000000..1923fd7
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_10.js
@@ -0,0 +1,26 @@
+var searchData=
+[
+ ['set_0',['Set',['../classxb_1_1xbString.html#ab85753d2c39882e946a8468cbb587700',1,'xb::xbString::Set(const char *s)'],['../classxb_1_1xbString.html#ac0d08bd688fd0e3707e32886d0dfeb09',1,'xb::xbString::Set(const xbString &amp;s)'],['../classxb_1_1xbString.html#a6eba6ccd0c805a22516de2c18a30f8a3',1,'xb::xbString::Set(const char *s, xbUInt32 ulSize)'],['../classxb_1_1xbDate.html#a4b0cde152b5de0f7d26608d1445110b6',1,'xb::xbDate::Set()']]],
+ ['setautocommit_1',['SetAutoCommit',['../classxb_1_1xbDbf.html#a4cf7f0d423164f3cf074ae41f96f4e90',1,'xb::xbDbf']]],
+ ['setblocksize_2',['SetBlockSize',['../classxb_1_1xbFile.html#a991c5676a6f38fa752435390989f413e',1,'xb::xbFile']]],
+ ['setdatadirectory_3',['SetDataDirectory',['../classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c',1,'xb::xbSsv']]],
+ ['setdefaultautocommit_4',['SetDefaultAutoCommit',['../classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd',1,'xb::xbSsv']]],
+ ['setdefaultdateformat_5',['SetDefaultDateFormat',['../classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c',1,'xb::xbSsv']]],
+ ['setdirectory_6',['SetDirectory',['../classxb_1_1xbFile.html#ae78a85255488bc78964c16946dbaead3',1,'xb::xbFile']]],
+ ['setendiantype_7',['SetEndianType',['../classxb_1_1xbSsv.html#a904ec348fd029d4a76e72b8fde636108',1,'xb::xbSsv']]],
+ ['setfilename_8',['SetFileName',['../classxb_1_1xbFile.html#a5419eb27e56822f828b2b88a9502a636',1,'xb::xbFile']]],
+ ['setfqfilename_9',['SetFqFileName',['../classxb_1_1xbFile.html#aee832fa11db2077a532f49e1329bd05a',1,'xb::xbFile']]],
+ ['sethomefolders_10',['SetHomeFolders',['../classxb_1_1xbFile.html#a060acbfaa8d528f86cb59301814b414a',1,'xb::xbFile']]],
+ ['setlogdirectory_11',['SetLogDirectory',['../classxb_1_1xbSsv.html#a7b992ed97281bf25b5b66f5df686225e',1,'xb::xbSsv']]],
+ ['setlogfilename_12',['SetLogFileName',['../classxb_1_1xbSsv.html#a7f05738e7dfd759e89990242ef503544',1,'xb::xbSsv']]],
+ ['setlogsize_13',['SetLogSize',['../classxb_1_1xbXBase.html#a666a0cb5b76ec7a9a3677d339e0c6b42',1,'xb::xbXBase']]],
+ ['setmultiuser_14',['SetMultiUser',['../classxb_1_1xbSsv.html#aba6e59512f7172dd55dcf92059e5928c',1,'xb::xbSsv']]],
+ ['setnum_15',['SetNum',['../classxb_1_1xbString.html#a3af5b1f111f94b0667551fcbd1d97abd',1,'xb::xbString']]],
+ ['settempdirectory_16',['SetTempDirectory',['../classxb_1_1xbSsv.html#a17c229a20ef9ab4034df8f9cd657adb2',1,'xb::xbSsv']]],
+ ['setversion_17',['SetVersion',['../classxb_1_1xbDbf.html#a7e63e852418f337eb7c44de5dcd50323',1,'xb::xbDbf']]],
+ ['sprintf_18',['Sprintf',['../classxb_1_1xbString.html#a9e9bfa29d86377b915f1628aeb0e9195',1,'xb::xbString']]],
+ ['str_19',['Str',['../classxb_1_1xbDate.html#ab43a5d8d929767c0ffdd722972bb8cc0',1,'xb::xbDate::Str()'],['../classxb_1_1xbString.html#a6715f4c0010f3ab487c9d787838a29b3',1,'xb::xbString::Str() const']]],
+ ['strncpy_20',['strncpy',['../classxb_1_1xbString.html#a3bc9e856c34f0c240a6e36e5b6e3ea7b',1,'xb::xbString']]],
+ ['swapchars_21',['SwapChars',['../classxb_1_1xbString.html#a054683872e1f05d11c2cf8683a63a6fe',1,'xb::xbString']]],
+ ['sysdate_22',['Sysdate',['../classxb_1_1xbDate.html#a40ba54a58d64cf56266f020f91584192',1,'xb::xbDate']]]
+];
diff --git a/docs/doxygen/html/search/functions_11.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_11.html
index fb95b05..fb95b05 100644
--- a/docs/doxygen/html/search/functions_11.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_11.html
diff --git a/docs/doxygen/html/search/functions_11.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_11.js
index 02f57b9..02f57b9 100644
--- a/docs/doxygen/html/search/functions_11.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_11.js
diff --git a/docs/doxygen/html/search/functions_12.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_12.html
index 292fd4a..292fd4a 100644
--- a/docs/doxygen/html/search/functions_12.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_12.html
diff --git a/docs/doxygen/html/search/functions_12.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_12.js
index 80ff6f4..80ff6f4 100644
--- a/docs/doxygen/html/search/functions_12.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_12.js
diff --git a/docs/doxygen/html/search/functions_13.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_13.html
index 5fcdf9c..5fcdf9c 100644
--- a/docs/doxygen/html/search/functions_13.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_13.html
diff --git a/docs/doxygen/html/search/functions_13.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_13.js
index 9ea4de7..9ea4de7 100644
--- a/docs/doxygen/html/search/functions_13.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_13.js
diff --git a/docs/doxygen/html/search/functions_14.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_14.html
index 82c70b0..82c70b0 100644
--- a/docs/doxygen/html/search/functions_14.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_14.html
diff --git a/docs/doxygen/html/search/functions_14.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_14.js
index c9794d0..c9794d0 100644
--- a/docs/doxygen/html/search/functions_14.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_14.js
diff --git a/docs/doxygen/html/search/functions_15.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_15.html
index 050aa25..050aa25 100644
--- a/docs/doxygen/html/search/functions_15.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_15.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_15.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_15.js
new file mode 100644
index 0000000..f72ae6d
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_15.js
@@ -0,0 +1,30 @@
+var searchData=
+[
+ ['xbdate_0',['xbDate',['../classxb_1_1xbDate.html#ac8a4d9330221a3daee21b3c28c1d9719',1,'xb::xbDate::xbDate(const char *Date8)'],['../classxb_1_1xbDate.html#ab3150e7db0ab5db10a07d748b55465eb',1,'xb::xbDate::xbDate()'],['../classxb_1_1xbDate.html#a8dfc827b466be3c5e3def599277dfa43',1,'xb::xbDate::xbDate(xbUInt16 iInit)'],['../classxb_1_1xbDate.html#acf4546f5681735ede18210f60bab68d4',1,'xb::xbDate::xbDate(const xbString &amp;Date8)'],['../classxb_1_1xbDate.html#a7ab727a7ec184a086ad36ef83b948170',1,'xb::xbDate::xbDate(xbInt32 lJulDate)']]],
+ ['xbdbf_1',['xbDbf',['../classxb_1_1xbDbf.html#a84a75f80bc0e9b8a22b728767949c204',1,'xb::xbDbf']]],
+ ['xbfclose_2',['xbFclose',['../classxb_1_1xbFile.html#a18830b5755d74818f60d9c7ce38ddf2d',1,'xb::xbFile']]],
+ ['xbfeof_3',['xbFeof',['../classxb_1_1xbFile.html#af5b6356832d2a67212070a1aa605f170',1,'xb::xbFile']]],
+ ['xbfflush_4',['xbFflush',['../classxb_1_1xbFile.html#ad205184d43409f04216540ae22f15009',1,'xb::xbFile']]],
+ ['xbfgetc_5',['xbFgetc',['../classxb_1_1xbFile.html#afb1c584d2895ffb7834df80aea7eb1e4',1,'xb::xbFile::xbFgetc(xbInt32 &amp;c)'],['../classxb_1_1xbFile.html#a5ee229bda4d7d6695e122200e581e7a6',1,'xb::xbFile::xbFgetc(char &amp;c)']]],
+ ['xbfgets_6',['xbFgets',['../classxb_1_1xbFile.html#ad245955ace26e5dde85fd4373b30d026',1,'xb::xbFile']]],
+ ['xbfile_7',['xbFile',['../classxb_1_1xbFile.html#a869eedd74c6eddc308852eb546c87176',1,'xb::xbFile']]],
+ ['xbfopen_8',['xbFopen',['../classxb_1_1xbFile.html#a7cdfef5ede9ac98d44a28a6b7a70972c',1,'xb::xbFile::xbFopen(xbInt16 iOpenMode)'],['../classxb_1_1xbFile.html#a0548cedf0f26b7d8ac221f75b0cd048c',1,'xb::xbFile::xbFopen(const xbString &amp;sOpenMode, xbInt16 iShareMode)'],['../classxb_1_1xbFile.html#aabd113333b49c36cad23244b392baab4',1,'xb::xbFile::xbFopen(xbInt16 iOpenMode, xbInt16 iShareMode)'],['../classxb_1_1xbFile.html#ab0fa19686ca8953ff4b556fb5b249135',1,'xb::xbFile::xbFopen(const xbString &amp;sMode, const xbString &amp;sFileName, xbInt16 iShareMode)']]],
+ ['xbfputc_9',['xbFputc',['../classxb_1_1xbFile.html#af2e940c78956e5cb6824f9a1bc404896',1,'xb::xbFile::xbFputc(xbInt32 c)'],['../classxb_1_1xbFile.html#a863f74cf17df8186d88586b4d2a6441a',1,'xb::xbFile::xbFputc(xbInt32 c, xbInt32 iNoTimes)']]],
+ ['xbfputs_10',['xbFputs',['../classxb_1_1xbFile.html#a698f3b40216778562e639e6ca1a47573',1,'xb::xbFile']]],
+ ['xbfread_11',['xbFread',['../classxb_1_1xbFile.html#ab4f6afaa1f77539f27a4f05c26e54e2f',1,'xb::xbFile']]],
+ ['xbfseek_12',['xbFseek',['../classxb_1_1xbFile.html#a5337ab8918df240910c0d19b4f298e3d',1,'xb::xbFile']]],
+ ['xbftell_13',['xbFtell',['../classxb_1_1xbFile.html#a0e1c06aedfa7fbcb92e117f891edd13b',1,'xb::xbFile']]],
+ ['xbfturnofffilebuffering_14',['xbFTurnOffFileBuffering',['../classxb_1_1xbFile.html#a9891b792f585a696f38a5cf959e30918',1,'xb::xbFile']]],
+ ['xbfwrite_15',['xbFwrite',['../classxb_1_1xbFile.html#a6aadd871d1782944703fed773d44b85f',1,'xb::xbFile']]],
+ ['xbmemcmp_16',['xbMemcmp',['../classxb_1_1xbXBase.html#a1b239c021358476382942522911b5c66',1,'xb::xbXBase']]],
+ ['xbreaduntil_17',['xbReadUntil',['../classxb_1_1xbFile.html#a08463f506f425c2385acbe1a561506e9',1,'xb::xbFile']]],
+ ['xbremove_18',['xbRemove',['../classxb_1_1xbFile.html#a6d919366c2ec95e529906bf8842cbf07',1,'xb::xbFile::xbRemove(const xbString &amp;sFileName, xbInt16 iOption)'],['../classxb_1_1xbFile.html#a58f6a6751fdf7e9549c273bb75d93eb5',1,'xb::xbFile::xbRemove(const xbString &amp;sFileName)'],['../classxb_1_1xbFile.html#ab3c668a8570433188382d31d7c60bd48',1,'xb::xbFile::xbRemove()']]],
+ ['xbrename_19',['xbRename',['../classxb_1_1xbFile.html#afc8ce113aa72611a278233f9bb170012',1,'xb::xbFile']]],
+ ['xbrewind_20',['xbRewind',['../classxb_1_1xbFile.html#a7996b6e084665c37c3892faea64b3505',1,'xb::xbFile']]],
+ ['xbsleep_21',['xbSleep',['../classxb_1_1xbXBase.html#a0915aff7be4b2dd3e881f3c5d0da4baf',1,'xb::xbXBase']]],
+ ['xbssv_22',['xbSsv',['../classxb_1_1xbSsv.html#a58f85692c3167af20b1a7c17c621523b',1,'xb::xbSsv']]],
+ ['xbstring_23',['xbString',['../classxb_1_1xbString.html#a63f9313217e0ff3c9789ec59316216a1',1,'xb::xbString::xbString(xbUInt32 size)'],['../classxb_1_1xbString.html#a14bbaa293c8d40dd6c64332f2668a92e',1,'xb::xbString::xbString(char c)'],['../classxb_1_1xbString.html#a18f3598dcdf2ec5692274fc8ee769ad7',1,'xb::xbString::xbString(const char *s, xbUInt32 lMaxLen)'],['../classxb_1_1xbString.html#a0d81016b93fc36ebbbafacf35c677f07',1,'xb::xbString::xbString(const xbString &amp;s)'],['../classxb_1_1xbString.html#a25856311106c5fb15d39017b63f0ddc7',1,'xb::xbString::xbString(const char *=&quot;&quot;)'],['../classxb_1_1xbString.html#ad865b55e3b08dffd527afee8e7e8e3fe',1,'xb::xbString::xbString(xbDouble d)']]],
+ ['xbtblmgr_24',['xbTblMgr',['../classxb_1_1xbTblMgr.html#aad83f5ecc184ca6cbdfc6f356b598d6c',1,'xb::xbTblMgr']]],
+ ['xbtruncate_25',['xbTruncate',['../classxb_1_1xbFile.html#a518bfcbfa3699d883cf89affee383296',1,'xb::xbFile']]],
+ ['xbxbase_26',['xbXBase',['../classxb_1_1xbXBase.html#a6c68588e33946fb5416af3f86fe83224',1,'xb::xbXBase']]]
+];
diff --git a/docs/doxygen/html/search/functions_16.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_16.html
index 1d75c78..1d75c78 100644
--- a/docs/doxygen/html/search/functions_16.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_16.html
diff --git a/docs/doxygen/html/search/functions_16.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_16.js
index 5979b24..5979b24 100644
--- a/docs/doxygen/html/search/functions_16.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_16.js
diff --git a/docs/doxygen/html/search/functions_17.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_17.html
index c099015..c099015 100644
--- a/docs/doxygen/html/search/functions_17.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_17.html
diff --git a/docs/doxygen/html/search/functions_17.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_17.js
index 7108002..7108002 100644
--- a/docs/doxygen/html/search/functions_17.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_17.js
diff --git a/docs/doxygen/html/search/functions_18.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_18.html
index bc92634..bc92634 100644
--- a/docs/doxygen/html/search/functions_18.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_18.html
diff --git a/docs/doxygen/html/search/functions_18.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_18.js
index d44ee63..d44ee63 100644
--- a/docs/doxygen/html/search/functions_18.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_18.js
diff --git a/docs/doxygen/html/search/functions_2.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_2.html
index 1f16d2a..1f16d2a 100644
--- a/docs/doxygen/html/search/functions_2.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_2.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_2.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_2.js
new file mode 100644
index 0000000..954b386
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_2.js
@@ -0,0 +1,22 @@
+var searchData=
+[
+ ['calcrollingcenturyforyear_0',['CalcRollingCenturyForYear',['../classxb_1_1xbDate.html#a9df58caa54105c489c314785c457e8cb',1,'xb::xbDate']]],
+ ['centuryof_1',['CenturyOf',['../classxb_1_1xbDate.html#a38b2c5285c69ed65e94ece6c22dafde0',1,'xb::xbDate']]],
+ ['chardayof_2',['CharDayOf',['../classxb_1_1xbDate.html#a9fc29730b66cddfbb58c69992a99cc7c',1,'xb::xbDate']]],
+ ['charmonthof_3',['CharMonthOf',['../classxb_1_1xbDate.html#afffc84f02bd421335ff8ebe9fb3db0ac',1,'xb::xbDate']]],
+ ['chrontime_4',['ChronTime',['../tstfuncs_8cpp.html#af990eed1e43605771a5810196b4043f7',1,'tstfuncs.cpp']]],
+ ['close_5',['Close',['../classxb_1_1xbDbf.html#ad68d73113e54e1b5f326e90f45e9989d',1,'xb::xbDbf']]],
+ ['closealltables_6',['CloseAllTables',['../classxb_1_1xbXBase.html#afccb552ca0daff779c0500ff20d22c2b',1,'xb::xbXBase']]],
+ ['commit_7',['Commit',['../classxb_1_1xbDbf.html#abd69532c885ab72bcf3fb5066b318f4f',1,'xb::xbDbf']]],
+ ['copy_8',['Copy',['../classxb_1_1xbString.html#ac7a8466b03c04df838bd182ef244f792',1,'xb::xbString']]],
+ ['copydbfstructure_9',['CopyDbfStructure',['../classxb_1_1xbDbf.html#a829c615a130a1fdf609d93438d8a6264',1,'xb::xbDbf']]],
+ ['countchar_10',['CountChar',['../classxb_1_1xbString.html#a26bc14d92dc7ce1f2bf31cd74af0db0f',1,'xb::xbString::CountChar(char c) const'],['../classxb_1_1xbString.html#adc0204bcfd1c052b9aea9229b10acf72',1,'xb::xbString::CountChar(char c, xbInt16 iOpt) const']]],
+ ['createfqn_11',['CreateFqn',['../classxb_1_1xbXBase.html#aa41240d920b604dcbd91dce7eecb78e1',1,'xb::xbXBase']]],
+ ['createtable_12',['CreateTable',['../classxb_1_1xbDbf.html#a73e41bfe679dd06ab16c436652df93f1',1,'xb::xbDbf']]],
+ ['createuniquefilename_13',['CreateUniqueFileName',['../classxb_1_1xbFile.html#ad39797624a752b9d62533d00fad9feff',1,'xb::xbFile']]],
+ ['ctod_14',['CTOD',['../classxb_1_1xbDate.html#abb1eb4b0394e4a67aadab15779b1b8c5',1,'xb::xbDate']]],
+ ['cvthexchar_15',['CvtHexChar',['../classxb_1_1xbString.html#a0a737bd408a94903f214eb2879eb56de',1,'xb::xbString']]],
+ ['cvthexstring_16',['CvtHexString',['../classxb_1_1xbString.html#ab5eb6918a0ae9ab6c0e961318f3d1eb0',1,'xb::xbString']]],
+ ['cvtlonglong_17',['CvtLongLong',['../classxb_1_1xbString.html#ae3ab18365e132323f8ae4c99eb72181c',1,'xb::xbString']]],
+ ['cvtulonglong_18',['CvtULongLong',['../classxb_1_1xbString.html#a1528b30b84a41c3564ef31d1f4496b15',1,'xb::xbString']]]
+];
diff --git a/docs/doxygen/html/search/functions_3.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_3.html
index 0b37ee2..0b37ee2 100644
--- a/docs/doxygen/html/search/functions_3.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_3.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_3.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_3.js
new file mode 100644
index 0000000..9a4d44a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_3.js
@@ -0,0 +1,20 @@
+var searchData=
+[
+ ['dateisvalid_0',['DateIsValid',['../classxb_1_1xbDate.html#a367f66ef0c03c1747c12a18784554ccb',1,'xb::xbDate']]],
+ ['dayof_1',['DayOf',['../classxb_1_1xbDate.html#ad6417a900ce64a46f8909c0c7a2ddea2',1,'xb::xbDate']]],
+ ['dblequals_2',['dblEquals',['../tstfuncs_8cpp.html#a8b8e417213c57f2ea0bcb61a7fb28860',1,'tstfuncs.cpp']]],
+ ['dblmax_3',['dblMax',['../tstfuncs_8cpp.html#a69a6e718e066af7f8392e5f1fea40d1b',1,'tstfuncs.cpp']]],
+ ['dblmin_4',['dblMin',['../tstfuncs_8cpp.html#a4d7b8f3f1ce52c6c0a281f25419f4c93',1,'tstfuncs.cpp']]],
+ ['deleteall_5',['DeleteAll',['../classxb_1_1xbDbf.html#a01c26b67e312be1e674b3da710e031b9',1,'xb::xbDbf']]],
+ ['deleteallrecords_6',['DeleteAllRecords',['../classxb_1_1xbDbf.html#a3067fdfa3a7a5c15651f6e89d1102176',1,'xb::xbDbf']]],
+ ['deleterecord_7',['DeleteRecord',['../classxb_1_1xbDbf.html#acd8c10579229f3a2e2c5fdb7fcef90db',1,'xb::xbDbf']]],
+ ['deletetable_8',['DeleteTable',['../classxb_1_1xbDbf.html#a4085ed4f049d976124d8edc3d3c56397',1,'xb::xbDbf']]],
+ ['determinexbasememoversion_9',['DetermineXbaseMemoVersion',['../classxb_1_1xbFile.html#a5a740033664c9ad2611c90e2a6d0c2d3',1,'xb::xbFile']]],
+ ['determinexbasetableversion_10',['DetermineXbaseTableVersion',['../classxb_1_1xbFile.html#ae2b6ac26018dc28f77afbb3f008c3f66',1,'xb::xbFile']]],
+ ['devtester_11',['DevTester',['../xb__test__expression_8cpp.html#aee57237c5f5b9b4d80e84bf530eb42bc',1,'xb_test_expression.cpp']]],
+ ['disablemsglogging_12',['DisableMsgLogging',['../classxb_1_1xbXBase.html#ae357fac4fdebdf49e46563cf611caf65',1,'xb::xbXBase']]],
+ ['displayerror_13',['DisplayError',['../classxb_1_1xbSsv.html#a97dfa59ab9a8e9f17454da0faceb023d',1,'xb::xbSsv']]],
+ ['displaytablelist_14',['DisplayTableList',['../classxb_1_1xbTblMgr.html#a5eebffb9e8cc64141e35c2622045cb50',1,'xb::xbTblMgr']]],
+ ['dumpheader_15',['DumpHeader',['../classxb_1_1xbDbf.html#a47643728f74cf3b6e0ffc55259895bdb',1,'xb::xbDbf']]],
+ ['dumprecord_16',['DumpRecord',['../classxb_1_1xbDbf.html#aba30399f15885a07f87f904c0d0656fa',1,'xb::xbDbf']]]
+];
diff --git a/docs/doxygen/html/search/functions_4.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_4.html
index 0eaf2b4..0eaf2b4 100644
--- a/docs/doxygen/html/search/functions_4.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_4.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_4.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_4.js
new file mode 100644
index 0000000..434b34a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_4.js
@@ -0,0 +1,15 @@
+var searchData=
+[
+ ['egetdouble_0',['eGetDouble',['../classxb_1_1xbFile.html#ab14e4a11427f5efb81cba1dd32bd1aa1',1,'xb::xbFile']]],
+ ['egetint16_1',['eGetInt16',['../classxb_1_1xbFile.html#ac40c991110ddc6fb30a72d90f4652762',1,'xb::xbFile']]],
+ ['egetint32_2',['eGetInt32',['../classxb_1_1xbFile.html#a60b24a5afc984c586bf384c7e915ba0d',1,'xb::xbFile']]],
+ ['egetuint16_3',['eGetUInt16',['../classxb_1_1xbFile.html#a936ade458e6d5e6d29f9b5031888d189',1,'xb::xbFile']]],
+ ['egetuint32_4',['eGetUInt32',['../classxb_1_1xbFile.html#a78f052529d39a18deaface5a0d47d0b0',1,'xb::xbFile']]],
+ ['enablemsglogging_5',['EnableMsgLogging',['../classxb_1_1xbXBase.html#a470e6eb0ed0be60338f9b40976d3ad48',1,'xb::xbXBase']]],
+ ['eputdouble_6',['ePutDouble',['../classxb_1_1xbFile.html#a98b6ff533ae93f90c977a2ba23eeb105',1,'xb::xbFile']]],
+ ['eputint16_7',['ePutInt16',['../classxb_1_1xbFile.html#a29130f12739ac8fa837f4eaedf1338b2',1,'xb::xbFile']]],
+ ['eputint32_8',['ePutInt32',['../classxb_1_1xbFile.html#a19c37f76a2ccbb45019cb0fc373d3f46',1,'xb::xbFile']]],
+ ['eputuint16_9',['ePutUInt16',['../classxb_1_1xbFile.html#a65e9839f92b96eac7b0d071fac3bbe40',1,'xb::xbFile']]],
+ ['eputuint32_10',['ePutUInt32',['../classxb_1_1xbFile.html#aa3f6ceae4b96f24875d86848bf13a173',1,'xb::xbFile']]],
+ ['extractelement_11',['ExtractElement',['../classxb_1_1xbString.html#a6b33a8df49cdcb76033cbce5d8dc59d7',1,'xb::xbString::ExtractElement(xbString &amp;s, char delim, xbUInt32 iCnt, xbInt16 iOpt=0)'],['../classxb_1_1xbString.html#a77195fc4957952625cb33bb503517a3e',1,'xb::xbString::ExtractElement(const char *src, char delim, xbUInt32 iCnt, xbInt16 iOpt=0)']]]
+];
diff --git a/docs/doxygen/html/search/functions_5.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_5.html
index eaa2769..eaa2769 100644
--- a/docs/doxygen/html/search/functions_5.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_5.html
diff --git a/docs/doxygen/html/search/functions_5.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_5.js
index d143ad3..d143ad3 100644
--- a/docs/doxygen/html/search/functions_5.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_5.js
diff --git a/docs/doxygen/html/search/functions_6.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_6.html
index 25d1cc8..25d1cc8 100644
--- a/docs/doxygen/html/search/functions_6.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_6.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_6.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_6.js
new file mode 100644
index 0000000..cee5729
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_6.js
@@ -0,0 +1,71 @@
+var searchData=
+[
+ ['getautocommit_0',['GetAutoCommit',['../classxb_1_1xbDbf.html#ae0c00226fd2ea7a67f101e795467ed68',1,'xb::xbDbf::GetAutoCommit(xbInt16 iOption) const'],['../classxb_1_1xbDbf.html#abb9e20c5efacd4fea80f1515abbc6b55',1,'xb::xbDbf::GetAutoCommit() const']]],
+ ['getblocksize_1',['GetBlockSize',['../classxb_1_1xbFile.html#a638e14262410a1627819f016a16cdce2',1,'xb::xbFile']]],
+ ['getbof_2',['GetBof',['../classxb_1_1xbDbf.html#ad0827a43c025c1184ffebab74cc9e779',1,'xb::xbDbf']]],
+ ['getcharacter_3',['GetCharacter',['../classxb_1_1xbString.html#a685187a5f8401b322fc61f3fbe56330d',1,'xb::xbString']]],
+ ['getcmdlineopt_4',['GetCmdLineOpt',['../classxb_1_1xbXBase.html#aadecb3ac460d8e94b88b2e809e22f48e',1,'xb::xbXBase::GetCmdLineOpt(xbInt32 lArgc, char **argv, const char *sOptRqst, xbString &amp;sParmOut)'],['../classxb_1_1xbXBase.html#a8612e0c5334349fbceb9394b47817fd5',1,'xb::xbXBase::GetCmdLineOpt(xbInt32 lArgc, char **argv, xbString &amp;sOptRqst, xbString &amp;sParmOut)']]],
+ ['getcurrecno_5',['GetCurRecNo',['../classxb_1_1xbDbf.html#a643a80a3792a52760c8e09ba18719503',1,'xb::xbDbf']]],
+ ['getdatadirectory_6',['GetDataDirectory',['../classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9',1,'xb::xbSsv']]],
+ ['getdatefield_7',['GetDateField',['../classxb_1_1xbDbf.html#af78ef1fba949463ff7f829d3cffc4555',1,'xb::xbDbf::GetDateField(xbInt16 iFieldNo, xbDate &amp;dt) const'],['../classxb_1_1xbDbf.html#ac624e06a97666bfd64b4f252b4548b36',1,'xb::xbDbf::GetDateField(const xbString &amp;sFieldName, xbDate &amp;dt) const']]],
+ ['getdbfptr_8',['GetDbfPtr',['../classxb_1_1xbTblMgr.html#ad8a5d28a2ee6720a9aa74bcb45662cf5',1,'xb::xbTblMgr::GetDbfPtr(const xbString &amp;sTblAlias) const'],['../classxb_1_1xbTblMgr.html#a801dfecf7fc216954b4197b2c31b25d6',1,'xb::xbTblMgr::GetDbfPtr(xbInt16 sItemNo) const']]],
+ ['getdbfstatus_9',['GetDbfStatus',['../classxb_1_1xbDbf.html#ac1110d867ba297a52c8b0e83e88f05e6',1,'xb::xbDbf']]],
+ ['getdefaultautocommit_10',['GetDefaultAutoCommit',['../classxb_1_1xbSsv.html#a6982f973e81587b04916f4509746aaf5',1,'xb::xbSsv']]],
+ ['getdefaultdateformat_11',['GetDefaultDateFormat',['../classxb_1_1xbSsv.html#a6fbb9c3a550ab0b3378f9586a57791d2',1,'xb::xbSsv']]],
+ ['getdirectory_12',['GetDirectory',['../classxb_1_1xbFile.html#acd0fb2166b2bff7e8a1cf65a7bc8be1e',1,'xb::xbFile']]],
+ ['getdoublefield_13',['GetDoubleField',['../classxb_1_1xbDbf.html#a4556041a7ff2f6b6f986729901c11f08',1,'xb::xbDbf::GetDoubleField(xbInt16 FieldNo, xbDouble &amp;dFieldValue) const'],['../classxb_1_1xbDbf.html#a2370b5e736931441a5968649291b9ef4',1,'xb::xbDbf::GetDoubleField(xbInt16 FieldNo, xbDouble &amp;dFieldValue, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#a6e6774df0f2d7733f4b25a9989596d95',1,'xb::xbDbf::GetDoubleField(const xbString &amp;sFieldName, xbDouble &amp;dFieldValue) const']]],
+ ['getendiantype_14',['GetEndianType',['../classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243',1,'xb::xbSsv']]],
+ ['geteof_15',['GetEof',['../classxb_1_1xbDbf.html#a256dc1f98626fa77da24e91a38ab5b4d',1,'xb::xbDbf']]],
+ ['geterrormessage_16',['GetErrorMessage',['../classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4',1,'xb::xbSsv']]],
+ ['getfield_17',['GetField',['../classxb_1_1xbDbf.html#ad245a26eb8b79610c9ae7bab19e05513',1,'xb::xbDbf::GetField(xbInt16 iFieldNo, xbString &amp;sFieldValue, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#ac81f078f3c932f0da60ad1fbdd848d3e',1,'xb::xbDbf::GetField(xbInt16 iFieldNo, xbString &amp;sFieldValue) const'],['../classxb_1_1xbDbf.html#a9a0fcf7e2040ab483e3807927833cb26',1,'xb::xbDbf::GetField(const xbString &amp;sFieldName, xbString &amp;sFieldValue) const']]],
+ ['getfieldcnt_18',['GetFieldCnt',['../classxb_1_1xbDbf.html#add27d8ef555a13b336b8c804165dc15e',1,'xb::xbDbf']]],
+ ['getfielddecimal_19',['GetFieldDecimal',['../classxb_1_1xbDbf.html#a607f774fcd6dc0b9913d7a7801b60db2',1,'xb::xbDbf::GetFieldDecimal(const xbString &amp;sFieldName, xbInt16 &amp;iFieldDecimal) const'],['../classxb_1_1xbDbf.html#abcb4defad2e1b6e67f63cc60737ad840',1,'xb::xbDbf::GetFieldDecimal(xbInt16 iFieldNo, xbInt16 &amp;iFieldDecimal) const']]],
+ ['getfieldlen_20',['GetFieldLen',['../classxb_1_1xbDbf.html#adda4302b58cc6109b048f19d9b68bbd4',1,'xb::xbDbf::GetFieldLen(xbInt16 iFieldNo, xbInt16 &amp;iFieldLen) const'],['../classxb_1_1xbDbf.html#acf06dbccdba1a4bcd90fa0bea6cca59b',1,'xb::xbDbf::GetFieldLen(const xbString &amp;sFieldName, xbInt16 &amp;iFieldLen) const']]],
+ ['getfieldname_21',['GetFieldName',['../classxb_1_1xbDbf.html#a5e3e4368bfba1724c016b8859023e34c',1,'xb::xbDbf']]],
+ ['getfieldno_22',['GetFieldNo',['../classxb_1_1xbDbf.html#aed9113b5095c6df1b9c854cbd0d8047b',1,'xb::xbDbf::GetFieldNo(const xbString &amp;sFieldName, xbInt16 &amp;iFieldNo) const'],['../classxb_1_1xbDbf.html#aad9029e63909aeb77d8473256d88bea8',1,'xb::xbDbf::GetFieldNo(const xbString &amp;sFieldName) const']]],
+ ['getfieldtype_23',['GetFieldType',['../classxb_1_1xbDbf.html#a5143973e4f165651152aa13c8fd45f84',1,'xb::xbDbf::GetFieldType(xbInt16 iFieldNo, char &amp;cFieldType) const'],['../classxb_1_1xbDbf.html#a181db879f1a75f93a34c03513a0b2fea',1,'xb::xbDbf::GetFieldType(const xbString &amp;sFieldName, char &amp;cFieldType) const']]],
+ ['getfiledirpart_24',['GetFileDirPart',['../classxb_1_1xbFile.html#a60c53998e3d1b694134b20a87bc9bf5a',1,'xb::xbFile::GetFileDirPart(xbString &amp;sFileDirPartOut) const'],['../classxb_1_1xbFile.html#af5127c92892816e9bbc5c19653c4147a',1,'xb::xbFile::GetFileDirPart(const xbString &amp;sCompleteFileNameIn, xbString &amp;sFileDirPartOut) const']]],
+ ['getfileextpart_25',['GetFileExtPart',['../classxb_1_1xbFile.html#ab289b6ffe955321160c1f90220c22e25',1,'xb::xbFile::GetFileExtPart(const xbString &amp;sCompleteFileNameIn, xbString &amp;sFileExtPartOut) const'],['../classxb_1_1xbFile.html#a57a9222e5cbb51019d4eeb2c3ac89fa2',1,'xb::xbFile::GetFileExtPart(xbString &amp;sFileExtPartOut) const']]],
+ ['getfilemtime_26',['GetFileMtime',['../classxb_1_1xbFile.html#a02df78f4c90313243f508fc56b95aba8',1,'xb::xbFile']]],
+ ['getfilename_27',['GetFileName',['../classxb_1_1xbFile.html#ac95cb882ccbcdedc9a233c6ad9fed07a',1,'xb::xbFile']]],
+ ['getfilenamepart_28',['GetFileNamePart',['../classxb_1_1xbFile.html#a81422b3dd52763d2cc6c77237ec9af0a',1,'xb::xbFile::GetFileNamePart(xbString &amp;sFileNamePartOut) const'],['../classxb_1_1xbFile.html#a6110763c5ae996b72c7a62c15bdecc73',1,'xb::xbFile::GetFileNamePart(const xbString &amp;sCompleteFileNameIn, xbString &amp;sFileNamePartOut) const']]],
+ ['getfilesize_29',['GetFileSize',['../classxb_1_1xbFile.html#a50b63c39e49d44e52078038027b24cc5',1,'xb::xbFile']]],
+ ['getfiletype_30',['GetFileType',['../classxb_1_1xbFile.html#a5548236d38d43b89ae29b9a015b1f678',1,'xb::xbFile']]],
+ ['getfirstrecord_31',['GetFirstRecord',['../classxb_1_1xbDbf.html#a6fc5b8a3e2f177d5ceaf9d975cbb5226',1,'xb::xbDbf::GetFirstRecord()'],['../classxb_1_1xbDbf.html#acb78991e8435edd36318c653cb977c1a',1,'xb::xbDbf::GetFirstRecord(xbInt16 iOption)']]],
+ ['getfloatfield_32',['GetFloatField',['../classxb_1_1xbDbf.html#a3443f646038ced14425f067a59c0f2da',1,'xb::xbDbf::GetFloatField(xbInt16 iFieldNo, xbFloat &amp;fFieldValue) const'],['../classxb_1_1xbDbf.html#a81ef2f36f921d7ece066a592eb6393eb',1,'xb::xbDbf::GetFloatField(const xbString &amp;sFieldName, xbFloat &amp;fFieldValue) const']]],
+ ['getfqfilename_33',['GetFqFileName',['../classxb_1_1xbFile.html#a31b4e641f93206ba23e2a5a27491dcd4',1,'xb::xbFile']]],
+ ['getfunctioninfo_34',['GetFunctionInfo',['../classxb_1_1xbXBase.html#ae52e53340593b4253936c1372ec15ee1',1,'xb::xbXBase']]],
+ ['getheaderlen_35',['GetHeaderLen',['../classxb_1_1xbDbf.html#ad56be2756b7a9f8318d9ba5cf215dafb',1,'xb::xbDbf']]],
+ ['gethomedir_36',['GetHomeDir',['../classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9',1,'xb::xbSsv']]],
+ ['getlastpos_37',['GetLastPos',['../classxb_1_1xbString.html#ac7698665f44413a5e99a5b5bc573c6df',1,'xb::xbString::GetLastPos(char c) const'],['../classxb_1_1xbString.html#a1c55587904fe7e534290559d0ecb8646',1,'xb::xbString::GetLastPos(const char *s) const']]],
+ ['getlastrecord_38',['GetLastRecord',['../classxb_1_1xbDbf.html#a49e667f9c8ee55c36444702663fc5964',1,'xb::xbDbf::GetLastRecord()'],['../classxb_1_1xbDbf.html#a8ccfa2291417412b6894940d1b92f9a6',1,'xb::xbDbf::GetLastRecord(xbInt16 iOption)']]],
+ ['getlogdirectory_39',['GetLogDirectory',['../classxb_1_1xbSsv.html#a4822315bded3969b59aeeb683c373051',1,'xb::xbSsv']]],
+ ['getlogfilename_40',['GetLogFileName',['../classxb_1_1xbSsv.html#afaef09435be73b3111f5edbd7091d861',1,'xb::xbSsv']]],
+ ['getlogfqfilename_41',['GetLogFqFileName',['../classxb_1_1xbXBase.html#ab5d63cd7d9137eba8a1d4d9c3df522b7',1,'xb::xbXBase']]],
+ ['getlogicalfield_42',['GetLogicalField',['../classxb_1_1xbDbf.html#ab28feef20c988b0a6f1c1911a45377b0',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbBool &amp;bFieldData, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#a943cea7fde1b06c1a05184193eff8d2d',1,'xb::xbDbf::GetLogicalField(const xbString &amp;sFieldName, xbBool &amp;bFieldData) const'],['../classxb_1_1xbDbf.html#aaf615ddcf08f8cd14efc713c2a8d7ae1',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbBool &amp;bFieldData) const'],['../classxb_1_1xbDbf.html#a9cd6819bfd932ff8507e54d9cb9a624e',1,'xb::xbDbf::GetLogicalField(const xbString &amp;sFieldName, xbString &amp;sFieldData) const'],['../classxb_1_1xbDbf.html#a3254f091fc4a1404abed3dd2bcdd6ce6',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbString &amp;sFieldData) const']]],
+ ['getlogsize_43',['GetLogSize',['../classxb_1_1xbXBase.html#aedb4c2aa2c90e4529915198a2305b355',1,'xb::xbXBase']]],
+ ['getlogstatus_44',['GetLogStatus',['../classxb_1_1xbXBase.html#ade34cd72c2a7e70fb55429a8a6f6c028',1,'xb::xbXBase']]],
+ ['getlongfield_45',['GetLongField',['../classxb_1_1xbDbf.html#abe525c0820640e0a9e169d0b7913cfa1',1,'xb::xbDbf::GetLongField(xbInt16 iFieldNo, xbInt32 &amp;lFieldValue) const'],['../classxb_1_1xbDbf.html#a7b8ef75b17941beac17e50e969b2d3db',1,'xb::xbDbf::GetLongField(const xbString &amp;sFieldName, xbInt32 &amp;lFieldValue) const']]],
+ ['getmultiuser_46',['GetMultiUser',['../classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5',1,'xb::xbSsv']]],
+ ['getnextrecord_47',['GetNextRecord',['../classxb_1_1xbDbf.html#ab896fe3b734f556de578d30f92b18fe2',1,'xb::xbDbf::GetNextRecord()'],['../classxb_1_1xbDbf.html#a3191428a7a92d9107d8d42448884f2ac',1,'xb::xbDbf::GetNextRecord(xbInt16 iOption)'],['../classxb_1_1xbDbf.html#a18fdcb4ab15b36cd47fa6f6f7a540d1a',1,'xb::xbDbf::GetNextRecord(xbInt16 iOption, xbUInt32 ulStartRec)']]],
+ ['getnextsqlcmd_48',['GetNextSqlCmd',['../xb__execsql_8cpp.html#adb176b752e38521fdb334b4976965945',1,'xb_execsql.cpp']]],
+ ['getnullsts_49',['GetNullSts',['../classxb_1_1xbDbf.html#a7930fe8b930c6d646b7b0d3df576fe9e',1,'xb::xbDbf::GetNullSts(xbInt16 iFieldNo, xbBool &amp;bIsNull, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#ae9a3f726ce5229ed021bfce0515050fc',1,'xb::xbDbf::GetNullSts(xbInt16 iFieldNo, xbBool &amp;bIsNull) const'],['../classxb_1_1xbDbf.html#a909788123ce0694b65dfcf036380d918',1,'xb::xbDbf::GetNullSts(const xbString &amp;sFieldName, xbBool &amp;bIsNull) const']]],
+ ['getopenmode_50',['GetOpenMode',['../classxb_1_1xbFile.html#a3c500dc9dac22c49496e4b29386b2dd3',1,'xb::xbFile']]],
+ ['getopentablecount_51',['GetOpenTableCount',['../classxb_1_1xbTblMgr.html#ad0d2d4adabc0dc0e761cfdee63c84069',1,'xb::xbTblMgr']]],
+ ['getpathseparator_52',['GetPathSeparator',['../classxb_1_1xbString.html#af8b8b808cf43cd352321b43f500142db',1,'xb::xbString::GetPathSeparator()'],['../classxb_1_1xbSsv.html#a63cee13b473ee13970e93b11837b9e35',1,'xb::xbSsv::GetPathSeparator()']]],
+ ['getprevrecord_53',['GetPrevRecord',['../classxb_1_1xbDbf.html#ab3d248e5221b4f0809897cd43af17a1e',1,'xb::xbDbf::GetPrevRecord()'],['../classxb_1_1xbDbf.html#a7eadc7b08d73003802b90584f7b33387',1,'xb::xbDbf::GetPrevRecord(xbInt16 iOption)']]],
+ ['getrawfield_54',['GetRawField',['../classxb_1_1xbDbf.html#aabd146c0e1054ab905ec96aedd84b02e',1,'xb::xbDbf']]],
+ ['getrecord_55',['GetRecord',['../classxb_1_1xbDbf.html#a26fba086b07caeab95066bf1c8d25161',1,'xb::xbDbf']]],
+ ['getrecordbuf_56',['GetRecordBuf',['../classxb_1_1xbDbf.html#aa3e38c4057d726a28a27d07a1610d124',1,'xb::xbDbf']]],
+ ['getrecordcnt_57',['GetRecordCnt',['../classxb_1_1xbDbf.html#ac196ad55335e1f4789d698748434dc89',1,'xb::xbDbf']]],
+ ['getrecordlen_58',['GetRecordLen',['../classxb_1_1xbDbf.html#ab50d76c6e29e81e347a6feb04c2f62bb',1,'xb::xbDbf']]],
+ ['getsharemode_59',['GetShareMode',['../classxb_1_1xbFile.html#a9b63e05b77f477ff6109ff7b9432c1b6',1,'xb::xbFile']]],
+ ['getsize_60',['GetSize',['../classxb_1_1xbString.html#a6c33e73659f8e98819289d2661c7271c',1,'xb::xbString']]],
+ ['gettblalias_61',['GetTblAlias',['../classxb_1_1xbDbf.html#a27758a325c097f204247908b65ba7fbd',1,'xb::xbDbf']]],
+ ['gettbllistentry_62',['GetTblListEntry',['../classxb_1_1xbTblMgr.html#acbf148ddba4297021cfb980a161ebef9',1,'xb::xbTblMgr']]],
+ ['gettempdirectory_63',['GetTempDirectory',['../classxb_1_1xbSsv.html#abfaeef85935331073d213465bb362a61',1,'xb::xbSsv']]],
+ ['getulongfield_64',['GetULongField',['../classxb_1_1xbDbf.html#a67e3a050f9090edf69eee75aef7f5d83',1,'xb::xbDbf::GetULongField(xbInt16 iFieldNo, xbUInt32 &amp;lFieldValue) const'],['../classxb_1_1xbDbf.html#a039eb02418ec4ca862adbc0f95b9cbec',1,'xb::xbDbf::GetULongField(const xbString &amp;sFieldName, xbUInt32 &amp;lFieldValue) const']]],
+ ['getversion_65',['GetVersion',['../classxb_1_1xbDbf.html#a49212a9eb17f7fa9f303e08d5fc50fc6',1,'xb::xbDbf']]],
+ ['getxbasefiletypebyte_66',['GetXbaseFileTypeByte',['../classxb_1_1xbFile.html#aaf2e697751a0beff41432a66bb83fb5e',1,'xb::xbFile::GetXbaseFileTypeByte(const xbString &amp;sFileName, xbInt16 &amp;iVersion)'],['../classxb_1_1xbFile.html#a7af337808919680b90710ad5e8a99232',1,'xb::xbFile::GetXbaseFileTypeByte(const xbString &amp;sFileName, unsigned char &amp;cFileTypeByte)'],['../classxb_1_1xbFile.html#a78aebdd21d3de46a450d5f835e3027f6',1,'xb::xbFile::GetXbaseFileTypeByte(const xbString &amp;sFileName, unsigned char &amp;cFileTypeByte, xbInt16 &amp;iVersion)']]],
+ ['getxbaseptr_67',['GetXbasePtr',['../classxb_1_1xbDbf.html#ab21ec23c076b0c9affdc0f6672bd133f',1,'xb::xbDbf']]]
+];
diff --git a/docs/doxygen/html/search/functions_7.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_7.html
index b6392ea..b6392ea 100644
--- a/docs/doxygen/html/search/functions_7.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_7.html
diff --git a/docs/doxygen/html/search/functions_7.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_7.js
index 6a2cc28..6a2cc28 100644
--- a/docs/doxygen/html/search/functions_7.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_7.js
diff --git a/docs/doxygen/html/search/functions_8.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_8.html
index ecf6a89..ecf6a89 100644
--- a/docs/doxygen/html/search/functions_8.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_8.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_8.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_8.js
new file mode 100644
index 0000000..0dcf217
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_8.js
@@ -0,0 +1,8 @@
+var searchData=
+[
+ ['inittime_0',['InitTime',['../tstfuncs_8cpp.html#ab1f17da15e67a8b2460d5a88b7a3db6e',1,'tstfuncs.cpp']]],
+ ['initvars_1',['InitVars',['../classxb_1_1xbDbf.html#ad06fe0f7975fb81125d27d82504e6829',1,'xb::xbDbf']]],
+ ['isempty_2',['IsEmpty',['../classxb_1_1xbString.html#a4a255a30d683acd62ea09c1617b53cb3',1,'xb::xbString']]],
+ ['isleapyear_3',['IsLeapYear',['../classxb_1_1xbDate.html#af2bd33a72448e2c5ee00d8b711dc5d95',1,'xb::xbDate::IsLeapYear(xbInt16 iYear) const'],['../classxb_1_1xbDate.html#a5f8051c31b29244265e8f26ac3547b9b',1,'xb::xbDate::IsLeapYear() const']]],
+ ['isnull_4',['IsNull',['../classxb_1_1xbDate.html#a611a64b14ff89ad3c20b34081ea1e658',1,'xb::xbDate::IsNull()'],['../classxb_1_1xbString.html#a3fa34fa31bcb7244ecb054ab628ad500',1,'xb::xbString::IsNull()']]]
+];
diff --git a/docs/doxygen/html/search/functions_9.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_9.html
index cd70e2b..cd70e2b 100644
--- a/docs/doxygen/html/search/functions_9.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_9.html
diff --git a/docs/doxygen/html/search/functions_9.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_9.js
index bd77163..bd77163 100644
--- a/docs/doxygen/html/search/functions_9.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_9.js
diff --git a/docs/doxygen/html/search/functions_a.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_a.html
index d2a3de9..d2a3de9 100644
--- a/docs/doxygen/html/search/functions_a.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_a.html
diff --git a/docs/doxygen/html/search/functions_a.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_a.js
index 2d4005e..2d4005e 100644
--- a/docs/doxygen/html/search/functions_a.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_a.js
diff --git a/docs/doxygen/html/search/functions_b.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_b.html
index e6f34bb..e6f34bb 100644
--- a/docs/doxygen/html/search/functions_b.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_b.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_b.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_b.js
new file mode 100644
index 0000000..6fd1671
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_b.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['main_0',['main',['../xb__test__xbase_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_xbase.cpp'],['../xb__test__linklist_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_linklist.cpp'],['../xb__test__lock_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_lock.cpp'],['../xb__test__lock2_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_lock2.cpp'],['../xb__test__log_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_log.cpp'],['../xb__test__mdx_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_mdx.cpp'],['../xb__test__ndx_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_ndx.cpp'],['../xb__test__sql_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_sql.cpp'],['../xb__test__string_8cpp.html#aabf71bc9adb6daf457b2ea8879ae537f',1,'main(int argCnt, char **av=NULL):&#160;xb_test_string.cpp'],['../xb__test__tblmgr_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_tblmgr.cpp'],['../xb__test__tdx_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_tdx.cpp'],['../xb__test__uda_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_uda.cpp'],['../xb__test__funcs_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_funcs.cpp'],['../xb__cfg__check_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_cfg_check.cpp'],['../xb__copydbf_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_copydbf.cpp'],['../xb__dbfutil_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_dbfutil.cpp'],['../xb__deletall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_deletall.cpp'],['../xb__dumpdbt_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_dumpdbt.cpp'],['../xb__dumprecs_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_dumprecs.cpp'],['../xb__execsql_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_execsql.cpp'],['../xb__import_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_import.cpp'],['../xb__pack_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_pack.cpp'],['../xb__tblinfo_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_tblinfo.cpp'],['../xb__undelall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_undelall.cpp'],['../xb__test__filter_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_filter.cpp'],['../xb__ex__date_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_date.cpp'],['../xb__ex__expression_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_expression.cpp'],['../xb__ex__log_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_ex_log.cpp'],['../xb__ex__sql_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_ex_sql.cpp'],['../xb__ex__ssv_8cpp.html#a6438fb6826a353355708e08b4395d689',1,'main(int, char **av):&#160;xb_ex_ssv.cpp'],['../xb__ex__string_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_string.cpp'],['../xb__ex__v3__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_v3_create_dbf.cpp'],['../xb__ex__v3__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_v3_upd_dbf.cpp'],['../xb__ex__v4__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_v4_create_dbf.cpp'],['../xb__ex__v4__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_v4_upd_dbf.cpp'],['../xb__test__bcd_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_bcd.cpp'],['../xb__test__blockread_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_blockread.cpp'],['../xb__test__date_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_date.cpp'],['../xb__test__dbf__v3__memos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_dbf_v3_memos.cpp'],['../xb__test__dbf__v3__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_dbf_v3_nomemos.cpp'],['../xb__test__dbf__v4__memos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_dbf_v4_memos.cpp'],['../xb__test__dbf__v4__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_dbf_v4_nomemos.cpp'],['../xb__test__expnode_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_expnode.cpp'],['../xb__test__expression_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_expression.cpp'],['../xb__test__file_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_file.cpp']]],
+ ['memofieldsexist_1',['MemoFieldsExist',['../classxb_1_1xbDbf.html#a013dc8c51fc1aa988de39cf3da6da950',1,'xb::xbDbf']]],
+ ['mid_2',['Mid',['../classxb_1_1xbString.html#a0f9eefc836b24c4ee7c5a316c5d812b7',1,'xb::xbString']]],
+ ['monthof_3',['MonthOf',['../classxb_1_1xbDate.html#a08bd84c67e1119d8c5c1748cd89d092e',1,'xb::xbDate']]]
+];
diff --git a/docs/doxygen/html/search/functions_c.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_c.html
index 87b4ce2..87b4ce2 100644
--- a/docs/doxygen/html/search/functions_c.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_c.html
diff --git a/docs/doxygen/html/search/functions_c.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_c.js
index 973aa37..973aa37 100644
--- a/docs/doxygen/html/search/functions_c.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_c.js
diff --git a/docs/doxygen/html/search/functions_d.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_d.html
index ada2b81..ada2b81 100644
--- a/docs/doxygen/html/search/functions_d.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_d.html
diff --git a/docs/doxygen/html/search/functions_d.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_d.js
index a292a5b..a292a5b 100644
--- a/docs/doxygen/html/search/functions_d.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_d.js
diff --git a/docs/doxygen/html/search/functions_e.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_e.html
index 1297715..1297715 100644
--- a/docs/doxygen/html/search/functions_e.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_e.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_e.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_e.js
new file mode 100644
index 0000000..342d52d
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_e.js
@@ -0,0 +1,19 @@
+var searchData=
+[
+ ['pack_0',['Pack',['../classxb_1_1xbDbf.html#a93bb14ad0451355bfa3379128120988a',1,'xb::xbDbf::Pack(xbUInt32 &amp;ulDeletedRecCnt)'],['../classxb_1_1xbDbf.html#a8a52bf3ef2123c0d17e6b1f67bf0dc55',1,'xb::xbDbf::Pack()']]],
+ ['padleft_1',['PadLeft',['../classxb_1_1xbString.html#a6a09cfed22066b0c72432f26960f9e7b',1,'xb::xbString']]],
+ ['padright_2',['PadRight',['../classxb_1_1xbString.html#aba13f0c77eb6c4a22996039569fad284',1,'xb::xbString']]],
+ ['pos_3',['Pos',['../classxb_1_1xbString.html#a1b586890138da8bf0e23090bd8b34581',1,'xb::xbString::Pos(char c, xbUInt32 ulStartPos) const'],['../classxb_1_1xbString.html#a3baf59d15099589ff631995f129e582b',1,'xb::xbString::Pos(char c) const'],['../classxb_1_1xbString.html#a8705d7277b72f5aa98021e84438914da',1,'xb::xbString::Pos(const char *s) const']]],
+ ['printhelp_4',['PrintHelp',['../xb__undelall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_undelall.cpp'],['../xb__dbfutil_8cpp.html#a9c55a055e1cd4249c7f47e19dc7ac564',1,'PrintHelp():&#160;xb_dbfutil.cpp'],['../xb__tblinfo_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_tblinfo.cpp'],['../xb__pack_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_pack.cpp'],['../xb__import_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_import.cpp'],['../xb__execsql_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_execsql.cpp'],['../xb__dumprecs_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_dumprecs.cpp'],['../xb__dumpdbt_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_dumpdbt.cpp'],['../xb__deletall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_deletall.cpp'],['../xb__copydbf_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_copydbf.cpp']]],
+ ['printresult_5',['PrintResult',['../xb__ex__expression_8cpp.html#a3234afc912211aec54c10d363d28cbda',1,'xb_ex_expression.cpp']]],
+ ['printversion_6',['PrintVersion',['../xb__copydbf_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_copydbf.cpp'],['../xb__dbfutil_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_dbfutil.cpp'],['../xb__deletall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_deletall.cpp'],['../xb__dumpdbt_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_dumpdbt.cpp'],['../xb__dumprecs_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_dumprecs.cpp'],['../xb__execsql_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_execsql.cpp'],['../xb__import_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_import.cpp'],['../xb__pack_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_pack.cpp'],['../xb__tblinfo_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_tblinfo.cpp'],['../xb__undelall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_undelall.cpp']]],
+ ['putat_7',['PutAt',['../classxb_1_1xbString.html#a1bae6fa8f608261f6e889616482f6e39',1,'xb::xbString']]],
+ ['putdatefield_8',['PutDateField',['../classxb_1_1xbDbf.html#a873f04af528a9d81e6a367a59d998ec5',1,'xb::xbDbf::PutDateField(xbInt16 iFieldNo, const xbDate &amp;dt)'],['../classxb_1_1xbDbf.html#a571b36b3a940b1a16d5e834f329b33b9',1,'xb::xbDbf::PutDateField(const xbString &amp;sFieldName, const xbDate &amp;dt)']]],
+ ['putdoublefield_9',['PutDoubleField',['../classxb_1_1xbDbf.html#a4f34842d7e8ff1f16992c2ece2fc38a5',1,'xb::xbDbf::PutDoubleField(xbInt16 FieldNo, xbDouble dFieldValue)'],['../classxb_1_1xbDbf.html#ae695bbc71c19abc71c0c5f2ff2e1f971',1,'xb::xbDbf::PutDoubleField(const xbString &amp;FieldName, xbDouble dFieldValue)']]],
+ ['putfield_10',['PutField',['../classxb_1_1xbDbf.html#a7862215dd2f83a1c488e539cd1f9aec0',1,'xb::xbDbf::PutField(const xbString &amp;sFieldName, const xbString &amp;sFieldData)'],['../classxb_1_1xbDbf.html#a142b0c0dc904917f3c68c5572c1237b5',1,'xb::xbDbf::PutField(xbInt16 iFieldNo, const xbString &amp;sFieldData)']]],
+ ['putfloatfield_11',['PutFloatField',['../classxb_1_1xbDbf.html#a64161eb50d72e424b11bf3732657ebd8',1,'xb::xbDbf::PutFloatField(xbInt16 iFieldNo, xbFloat fFieldValue)'],['../classxb_1_1xbDbf.html#a4ea3241bc710d57e5f755efda62288ad',1,'xb::xbDbf::PutFloatField(const xbString &amp;sFieldName, xbFloat fFieldValue)']]],
+ ['putlogicalfield_12',['PutLogicalField',['../classxb_1_1xbDbf.html#ab39ac4269ac63bc7ea4f638733bb17f0',1,'xb::xbDbf::PutLogicalField(xbInt16 iFieldNo, const xbString &amp;sFieldData)'],['../classxb_1_1xbDbf.html#a507e400ca6526a9e0391cf06dd6a014e',1,'xb::xbDbf::PutLogicalField(const xbString &amp;sFieldName, const xbString &amp;sFieldData)'],['../classxb_1_1xbDbf.html#a423a0cb7bd252cedf956ace4954f275d',1,'xb::xbDbf::PutLogicalField(xbInt16 iFieldNo, xbBool bFieldData)'],['../classxb_1_1xbDbf.html#a623ca3ef5520c42308c1a16b518e7ff3',1,'xb::xbDbf::PutLogicalField(const xbString &amp;sFieldName, xbBool bFieldData)']]],
+ ['putlongfield_13',['PutLongField',['../classxb_1_1xbDbf.html#a56c8f924284bf88aabf90b7930b4eb47',1,'xb::xbDbf::PutLongField(xbInt16 iFieldNo, xbInt32 lFieldValue)'],['../classxb_1_1xbDbf.html#a0692d1776a725c2f61d4c14677e9307c',1,'xb::xbDbf::PutLongField(const xbString &amp;sFieldName, xbInt32 lFieldValue)']]],
+ ['putrecord_14',['PutRecord',['../classxb_1_1xbDbf.html#a3c36a5ffbc7067a1abbcb526dd3b981d',1,'xb::xbDbf::PutRecord()'],['../classxb_1_1xbDbf.html#aacbc7bac3ea0c502ee75b838f4f0fcbf',1,'xb::xbDbf::PutRecord(xbUInt32 ulRecNo)']]],
+ ['putulongfield_15',['PutULongField',['../classxb_1_1xbDbf.html#ac62cb97c4e678c83f41788b1ae4d0381',1,'xb::xbDbf::PutULongField(const xbString &amp;sFieldNo, xbUInt32 lFieldValue)'],['../classxb_1_1xbDbf.html#af5dec5c9ff903efffdb0490a44d296d2',1,'xb::xbDbf::PutULongField(xbInt16 iFieldNo, xbUInt32 lFieldValue)']]]
+];
diff --git a/docs/doxygen/html/search/functions_f.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_f.html
index d2ae3cf..d2ae3cf 100644
--- a/docs/doxygen/html/search/functions_f.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_f.html
diff --git a/docs/doxygen/html/search/functions_f.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_f.js
index cdd92e0..cdd92e0 100644
--- a/docs/doxygen/html/search/functions_f.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_f.js
diff --git a/docs/doxygen/html/search/mag_sel.svg b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/mag_sel.svg
index 03626f6..03626f6 100644
--- a/docs/doxygen/html/search/mag_sel.svg
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/mag_sel.svg
diff --git a/docs/doxygen/html/search/namespaces_0.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/namespaces_0.html
index c6a0d24..c6a0d24 100644
--- a/docs/doxygen/html/search/namespaces_0.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/namespaces_0.html
diff --git a/docs/doxygen/html/search/namespaces_0.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/namespaces_0.js
index e3c1eff..e3c1eff 100644
--- a/docs/doxygen/html/search/namespaces_0.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/namespaces_0.js
diff --git a/docs/doxygen/html/search/nomatches.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/nomatches.html
index 2b9360b..2b9360b 100644
--- a/docs/doxygen/html/search/nomatches.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/nomatches.html
diff --git a/docs/doxygen/html/search/related_0.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/related_0.html
index 28d304b..28d304b 100644
--- a/docs/doxygen/html/search/related_0.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/related_0.html
diff --git a/docs/doxygen/html/search/related_0.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/related_0.js
index ff26086..ff26086 100644
--- a/docs/doxygen/html/search/related_0.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/related_0.js
diff --git a/docs/doxygen/html/search/related_1.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/related_1.html
index 64586cd..64586cd 100644
--- a/docs/doxygen/html/search/related_1.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/related_1.html
diff --git a/docs/doxygen/html/search/related_1.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/related_1.js
index ffc5eef..ffc5eef 100644
--- a/docs/doxygen/html/search/related_1.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/related_1.js
diff --git a/docs/doxygen/html/search/search.css b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/search.css
index 648a792..648a792 100644
--- a/docs/doxygen/html/search/search.css
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/search.css
diff --git a/docs/doxygen/html/search/search.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/search.js
index ac8055d..ac8055d 100644
--- a/docs/doxygen/html/search/search.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/search.js
diff --git a/docs/doxygen/html/search/search_l.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/search_l.png
index fd5f7da..fd5f7da 100644
--- a/docs/doxygen/html/search/search_l.png
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/search_l.png
Binary files differ
diff --git a/docs/doxygen/html/search/search_m.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/search_m.png
index b429a16..b429a16 100644
--- a/docs/doxygen/html/search/search_m.png
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/search_m.png
Binary files differ
diff --git a/docs/doxygen/html/search/search_r.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/search_r.png
index 1af5d21..1af5d21 100644
--- a/docs/doxygen/html/search/search_r.png
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/search_r.png
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/searchdata.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/searchdata.js
new file mode 100644
index 0000000..910add8
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/searchdata.js
@@ -0,0 +1,39 @@
+var indexSectionsWithContent =
+{
+ 0: "abcdefghijlmnoprstuvwxyz~",
+ 1: "sx",
+ 2: "x",
+ 3: "tx",
+ 4: "abcdefghijlmnoprstuvwxyz~",
+ 5: "ceimnprstux",
+ 6: "x",
+ 7: "ox",
+ 8: "jlvx"
+};
+
+var indexSectionNames =
+{
+ 0: "all",
+ 1: "classes",
+ 2: "namespaces",
+ 3: "files",
+ 4: "functions",
+ 5: "variables",
+ 6: "typedefs",
+ 7: "related",
+ 8: "defines"
+};
+
+var indexSectionLabels =
+{
+ 0: "All",
+ 1: "Data Structures",
+ 2: "Namespaces",
+ 3: "Files",
+ 4: "Functions",
+ 5: "Variables",
+ 6: "Typedefs",
+ 7: "Friends",
+ 8: "Macros"
+};
+
diff --git a/docs/doxygen/html/search/typedefs_0.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/typedefs_0.html
index 882b2a1..882b2a1 100644
--- a/docs/doxygen/html/search/typedefs_0.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/typedefs_0.html
diff --git a/docs/doxygen/html/search/typedefs_0.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/typedefs_0.js
index ab1907c..ab1907c 100644
--- a/docs/doxygen/html/search/typedefs_0.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/typedefs_0.js
diff --git a/docs/doxygen/html/search/variables_0.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_0.html
index 950bfc5..950bfc5 100644
--- a/docs/doxygen/html/search/variables_0.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_0.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_0.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_0.js
new file mode 100644
index 0000000..cfc8fca
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_0.js
@@ -0,0 +1,14 @@
+var searchData=
+[
+ ['cencryptionflag_0',['cEncryptionFlag',['../classxb_1_1xbDbf.html#a8734e799707582f022fc341d515650f4',1,'xb::xbDbf']]],
+ ['cfieldname_1',['cFieldName',['../structxb_1_1xbSchema.html#a514183856094123fd37df67885b4681e',1,'xb::xbSchema']]],
+ ['cfldtype_2',['cFldType',['../structsFldMap.html#af89b26b2d4bc6e26c597f8c48b97b1a3',1,'sFldMap']]],
+ ['cindexflag_3',['cIndexFlag',['../classxb_1_1xbDbf.html#ad59074633641e03647e54d2b66c9102b',1,'xb::xbDbf']]],
+ ['clangdriver_4',['cLangDriver',['../classxb_1_1xbDbf.html#aea1dfe5cbd1f9cdbcfc8eb04b2c3d5f1',1,'xb::xbDbf']]],
+ ['ctransactionflag_5',['cTransactionFlag',['../classxb_1_1xbDbf.html#ac3c89fc3bc6a6abf385478a8adbed970',1,'xb::xbDbf']]],
+ ['ctype_6',['cType',['../structxb_1_1xbSchema.html#a1d612b2ed5dc0b0289c9e91b3cda3a25',1,'xb::xbSchema']]],
+ ['cupdatedd_7',['cUpdateDD',['../classxb_1_1xbDbf.html#a6021789d314cd41488991e708fcd0df2',1,'xb::xbDbf']]],
+ ['cupdatemm_8',['cUpdateMM',['../classxb_1_1xbDbf.html#a9340a5e8ee53eb0f3b6601eec2d71e1b',1,'xb::xbDbf']]],
+ ['cupdateyy_9',['cUpdateYY',['../classxb_1_1xbDbf.html#a4fcd6a86ddd32d4a9d76a4074573440a',1,'xb::xbDbf']]],
+ ['cversion_10',['cVersion',['../classxb_1_1xbDbf.html#a3a262abf658e5fa968b57ef457a69470',1,'xb::xbDbf']]]
+];
diff --git a/docs/doxygen/html/search/variables_1.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_1.html
index fed58a5..fed58a5 100644
--- a/docs/doxygen/html/search/variables_1.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_1.html
diff --git a/docs/doxygen/html/search/variables_1.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_1.js
index 02ce92e..02ce92e 100644
--- a/docs/doxygen/html/search/variables_1.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_1.js
diff --git a/docs/doxygen/html/search/variables_2.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_2.html
index 761c194..761c194 100644
--- a/docs/doxygen/html/search/variables_2.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_2.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_2.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_2.js
new file mode 100644
index 0000000..1f104fd
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_2.js
@@ -0,0 +1,12 @@
+var searchData=
+[
+ ['iautocommit_0',['iAutoCommit',['../classxb_1_1xbDbf.html#ab506450954bc86e7bf1d7c4efe681f43',1,'xb::xbDbf']]],
+ ['idbfstatus_1',['iDbfStatus',['../classxb_1_1xbDbf.html#a6d8e193da3ca414eef1e8866ec5ca81b',1,'xb::xbDbf']]],
+ ['iendiantype_2',['iEndianType',['../classxb_1_1xbSsv.html#a5849e813f5e8e1cd180f0366637adbf3',1,'xb::xbSsv']]],
+ ['ifieldlen_3',['iFieldLen',['../structxb_1_1xbSchema.html#a2da554af25ef628acf59bb52996056ac',1,'xb::xbSchema']]],
+ ['ifileversion_4',['iFileVersion',['../classxb_1_1xbDbf.html#a15f495446f0d75bcf2fa89e3b699d388',1,'xb::xbDbf']]],
+ ['ifldno_5',['iFldNo',['../structsFldMap.html#a42eb801a85d8b60f06c4fe1be13ca723',1,'sFldMap']]],
+ ['inoofdecs_6',['iNoOfDecs',['../structxb_1_1xbSchema.html#a55bab3bb69dee3508d168c93e182d4b9',1,'xb::xbSchema']]],
+ ['inooffields_7',['iNoOfFields',['../classxb_1_1xbDbf.html#a5056757614c39f725cc775332494966a',1,'xb::xbDbf']]],
+ ['irecpos_8',['iRecPos',['../structsFldMap.html#a02facce45c24ebecc13975c17fd52b8f',1,'sFldMap']]]
+];
diff --git a/docs/doxygen/html/search/variables_3.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_3.html
index 78bfe03..78bfe03 100644
--- a/docs/doxygen/html/search/variables_3.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_3.html
diff --git a/docs/doxygen/html/search/variables_3.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_3.js
index 7708e94..7708e94 100644
--- a/docs/doxygen/html/search/variables_3.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_3.js
diff --git a/docs/doxygen/html/search/variables_4.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_4.html
index 4d608da..4d608da 100644
--- a/docs/doxygen/html/search/variables_4.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_4.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_4.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_4.js
new file mode 100644
index 0000000..25cb177
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_4.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['next_0',['next',['../structsFldMap.html#a16eaff8fc09adc3faf453bfaa0d3baaa',1,'sFldMap']]]
+];
diff --git a/docs/doxygen/html/search/variables_5.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_5.html
index 6342402..6342402 100644
--- a/docs/doxygen/html/search/variables_5.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_5.html
diff --git a/docs/doxygen/html/search/variables_4.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_5.js
index 946d73a..946d73a 100644
--- a/docs/doxygen/html/search/variables_4.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_5.js
diff --git a/docs/doxygen/html/search/variables_6.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_6.html
index 80db039..80db039 100644
--- a/docs/doxygen/html/search/variables_6.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_6.html
diff --git a/docs/doxygen/html/search/variables_5.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_6.js
index 9dde579..9dde579 100644
--- a/docs/doxygen/html/search/variables_5.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_6.js
diff --git a/docs/doxygen/html/search/variables_7.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_7.html
index bf8eb38..bf8eb38 100644
--- a/docs/doxygen/html/search/variables_7.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_7.html
diff --git a/docs/doxygen/html/search/variables_6.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_7.js
index f1b6b71..f1b6b71 100644
--- a/docs/doxygen/html/search/variables_6.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_7.js
diff --git a/docs/doxygen/html/search/variables_8.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_8.html
index 92a55e9..92a55e9 100644
--- a/docs/doxygen/html/search/variables_8.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_8.html
diff --git a/docs/doxygen/html/search/variables_7.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_8.js
index 2369f5c..2369f5c 100644
--- a/docs/doxygen/html/search/variables_7.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_8.js
diff --git a/docs/doxygen/html/search/variables_9.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_9.html
index 1aec773..1aec773 100644
--- a/docs/doxygen/html/search/variables_9.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_9.html
diff --git a/docs/doxygen/html/search/variables_8.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_9.js
index 5eb7a13..5eb7a13 100644
--- a/docs/doxygen/html/search/variables_8.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_9.js
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_a.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_a.html
new file mode 100644
index 0000000..8090d16
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_a.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_a.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/docs/doxygen/html/search/variables_9.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_a.js
index 8367676..8367676 100644
--- a/docs/doxygen/html/search/variables_9.js
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_a.js
diff --git a/docs/doxygen/html/splitbar.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/splitbar.png
index fe895f2..fe895f2 100644
--- a/docs/doxygen/html/splitbar.png
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/splitbar.png
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/sql_2xbcrix_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/sql_2xbcrix_8cpp.html
new file mode 100644
index 0000000..9947dfb
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/sql_2xbcrix_8cpp.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/sql/xbcrix.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_25b94c3afce00ed38231227d8141f932.html">sql</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbcrix.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/structsFldMap.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/structsFldMap.html
new file mode 100644
index 0000000..1be2f0a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/structsFldMap.html
@@ -0,0 +1,149 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: sFldMap Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle"><div class="title">sFldMap Struct Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a02facce45c24ebecc13975c17fd52b8f"><td class="memItemLeft" align="right" valign="top">xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structsFldMap.html#a02facce45c24ebecc13975c17fd52b8f">iRecPos</a></td></tr>
+<tr class="separator:a02facce45c24ebecc13975c17fd52b8f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a42eb801a85d8b60f06c4fe1be13ca723"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structsFldMap.html#a42eb801a85d8b60f06c4fe1be13ca723">iFldNo</a></td></tr>
+<tr class="separator:a42eb801a85d8b60f06c4fe1be13ca723"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af89b26b2d4bc6e26c597f8c48b97b1a3"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structsFldMap.html#af89b26b2d4bc6e26c597f8c48b97b1a3">cFldType</a></td></tr>
+<tr class="separator:af89b26b2d4bc6e26c597f8c48b97b1a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a16eaff8fc09adc3faf453bfaa0d3baaa"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structsFldMap.html">sFldMap</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structsFldMap.html#a16eaff8fc09adc3faf453bfaa0d3baaa">next</a></td></tr>
+<tr class="separator:a16eaff8fc09adc3faf453bfaa0d3baaa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a id="af89b26b2d4bc6e26c597f8c48b97b1a3" name="af89b26b2d4bc6e26c597f8c48b97b1a3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af89b26b2d4bc6e26c597f8c48b97b1a3">&#9670;&nbsp;</a></span>cFldType</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char sFldMap::cFldType</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a42eb801a85d8b60f06c4fe1be13ca723" name="a42eb801a85d8b60f06c4fe1be13ca723"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a42eb801a85d8b60f06c4fe1be13ca723">&#9670;&nbsp;</a></span>iFldNo</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 sFldMap::iFldNo</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a02facce45c24ebecc13975c17fd52b8f" name="a02facce45c24ebecc13975c17fd52b8f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a02facce45c24ebecc13975c17fd52b8f">&#9670;&nbsp;</a></span>iRecPos</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbUInt32 sFldMap::iRecPos</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a16eaff8fc09adc3faf453bfaa0d3baaa" name="a16eaff8fc09adc3faf453bfaa0d3baaa"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a16eaff8fc09adc3faf453bfaa0d3baaa">&#9670;&nbsp;</a></span>next</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structsFldMap.html">sFldMap</a>* sFldMap::next</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li>/mnt/1Tdata/xbase/xbase64-4.1.4/src/utils/<a class="el" href="xb__import_8cpp.html">xb_import.cpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/structxb_1_1xbSchema.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/structxb_1_1xbSchema.html
new file mode 100644
index 0000000..4b745d8
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/structxb_1_1xbSchema.html
@@ -0,0 +1,179 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: xb::xbSchema Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="namespacexb.html">xb</a></li><li class="navelem"><a class="el" href="structxb_1_1xbSchema.html">xbSchema</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle"><div class="title">xb::xbSchema Struct Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Schema used for defining tables with CreateTable methods.
+ <a href="structxb_1_1xbSchema.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="xbdbf_8h_source.html">xbdbf.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a514183856094123fd37df67885b4681e"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structxb_1_1xbSchema.html#a514183856094123fd37df67885b4681e">cFieldName</a> [11]</td></tr>
+<tr class="separator:a514183856094123fd37df67885b4681e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1d612b2ed5dc0b0289c9e91b3cda3a25"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structxb_1_1xbSchema.html#a1d612b2ed5dc0b0289c9e91b3cda3a25">cType</a></td></tr>
+<tr class="separator:a1d612b2ed5dc0b0289c9e91b3cda3a25"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2da554af25ef628acf59bb52996056ac"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structxb_1_1xbSchema.html#a2da554af25ef628acf59bb52996056ac">iFieldLen</a></td></tr>
+<tr class="separator:a2da554af25ef628acf59bb52996056ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a55bab3bb69dee3508d168c93e182d4b9"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structxb_1_1xbSchema.html#a55bab3bb69dee3508d168c93e182d4b9">iNoOfDecs</a></td></tr>
+<tr class="separator:a55bab3bb69dee3508d168c93e182d4b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p >Schema used for defining tables with CreateTable methods. </p>
+<p >See program <a class="el" href="xb__ex__v3__create__dbf_8cpp.html">xb_ex_v3_create_dbf.cpp</a> or <a class="el" href="xb__ex__v4__create__dbf_8cpp.html">xb_ex_v4_create_dbf.cpp</a> as examples on how to use.</p>
+<div class="fragment"><div class="line">xbSchema MyRecord[] = {</div>
+<div class="line"><span class="comment">// FieldName, Type, Len, Dec</span></div>
+<div class="line"> { <span class="stringliteral">&quot;FIRSTNAME&quot;</span>, <a class="code hl_define" href="xbdbf_8h.html#a20f739b9d9dc6a002a246a999e76aeaa">XB_CHAR_FLD</a>, 15, 0 },</div>
+<div class="line"> { <span class="stringliteral">&quot;LASTNAME&quot;</span>, <a class="code hl_define" href="xbdbf_8h.html#a20f739b9d9dc6a002a246a999e76aeaa">XB_CHAR_FLD</a>, 20, 0 },</div>
+<div class="line"> { <span class="stringliteral">&quot;BIRTHDATE&quot;</span>, <a class="code hl_define" href="xbdbf_8h.html#a7f685e6f5fe804b2174725a27ce73adc">XB_DATE_FLD</a>, 8, 0 },</div>
+<div class="line"> { <span class="stringliteral">&quot;AMOUNT&quot;</span>, <a class="code hl_define" href="xbdbf_8h.html#ae9fb6d69cc5edc94d36ae403c22ec1c6">XB_NUMERIC_FLD</a>, 9, 2 },</div>
+<div class="line"> { <span class="stringliteral">&quot;RETIRED?&quot;</span>, <a class="code hl_define" href="xbdbf_8h.html#a2f6d5073af761bc1a806a2c7b1c1d886">XB_LOGICAL_FLD</a>, 1, 0 },</div>
+<div class="line"> { <span class="stringliteral">&quot;ZIPCODE&quot;</span>, <a class="code hl_define" href="xbdbf_8h.html#ae9fb6d69cc5edc94d36ae403c22ec1c6">XB_NUMERIC_FLD</a>, 5, 0 },</div>
+<div class="line"> { <span class="stringliteral">&quot;NUMFLD1&quot;</span>, <a class="code hl_define" href="xbdbf_8h.html#a96ab4218d70ab603b4866354ce8c18cd">XB_FLOAT_FLD</a>, 12, 2 },</div>
+<div class="line"> { <span class="stringliteral">&quot;NUMFLD2&quot;</span>, <a class="code hl_define" href="xbdbf_8h.html#a96ab4218d70ab603b4866354ce8c18cd">XB_FLOAT_FLD</a>, 14, 2 },</div>
+<div class="line"> { <span class="stringliteral">&quot;MEMO1&quot;</span>, <a class="code hl_define" href="xbdbf_8h.html#a23fa19b19cb43bd6dcc59a5a3f6c30ad">XB_MEMO_FLD</a>, 10, 0 },</div>
+<div class="line"> { <span class="stringliteral">&quot;&quot;</span>,0,0,0 }};</div>
+<div class="ttc" id="axbdbf_8h_html_a20f739b9d9dc6a002a246a999e76aeaa"><div class="ttname"><a href="xbdbf_8h.html#a20f739b9d9dc6a002a246a999e76aeaa">XB_CHAR_FLD</a></div><div class="ttdeci">#define XB_CHAR_FLD</div><div class="ttdef"><b>Definition:</b> xbdbf.h:29</div></div>
+<div class="ttc" id="axbdbf_8h_html_a23fa19b19cb43bd6dcc59a5a3f6c30ad"><div class="ttname"><a href="xbdbf_8h.html#a23fa19b19cb43bd6dcc59a5a3f6c30ad">XB_MEMO_FLD</a></div><div class="ttdeci">#define XB_MEMO_FLD</div><div class="ttdef"><b>Definition:</b> xbdbf.h:33</div></div>
+<div class="ttc" id="axbdbf_8h_html_a2f6d5073af761bc1a806a2c7b1c1d886"><div class="ttname"><a href="xbdbf_8h.html#a2f6d5073af761bc1a806a2c7b1c1d886">XB_LOGICAL_FLD</a></div><div class="ttdeci">#define XB_LOGICAL_FLD</div><div class="ttdef"><b>Definition:</b> xbdbf.h:30</div></div>
+<div class="ttc" id="axbdbf_8h_html_a7f685e6f5fe804b2174725a27ce73adc"><div class="ttname"><a href="xbdbf_8h.html#a7f685e6f5fe804b2174725a27ce73adc">XB_DATE_FLD</a></div><div class="ttdeci">#define XB_DATE_FLD</div><div class="ttdef"><b>Definition:</b> xbdbf.h:32</div></div>
+<div class="ttc" id="axbdbf_8h_html_a96ab4218d70ab603b4866354ce8c18cd"><div class="ttname"><a href="xbdbf_8h.html#a96ab4218d70ab603b4866354ce8c18cd">XB_FLOAT_FLD</a></div><div class="ttdeci">#define XB_FLOAT_FLD</div><div class="ttdef"><b>Definition:</b> xbdbf.h:34</div></div>
+<div class="ttc" id="axbdbf_8h_html_ae9fb6d69cc5edc94d36ae403c22ec1c6"><div class="ttname"><a href="xbdbf_8h.html#ae9fb6d69cc5edc94d36ae403c22ec1c6">XB_NUMERIC_FLD</a></div><div class="ttdeci">#define XB_NUMERIC_FLD</div><div class="ttdef"><b>Definition:</b> xbdbf.h:31</div></div>
+</div><!-- fragment --> </div><h2 class="groupheader">Field Documentation</h2>
+<a id="a514183856094123fd37df67885b4681e" name="a514183856094123fd37df67885b4681e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a514183856094123fd37df67885b4681e">&#9670;&nbsp;</a></span>cFieldName</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char xb::xbSchema::cFieldName[11]</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1d612b2ed5dc0b0289c9e91b3cda3a25" name="a1d612b2ed5dc0b0289c9e91b3cda3a25"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1d612b2ed5dc0b0289c9e91b3cda3a25">&#9670;&nbsp;</a></span>cType</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char xb::xbSchema::cType</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2da554af25ef628acf59bb52996056ac" name="a2da554af25ef628acf59bb52996056ac"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2da554af25ef628acf59bb52996056ac">&#9670;&nbsp;</a></span>iFieldLen</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbSchema::iFieldLen</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a55bab3bb69dee3508d168c93e182d4b9" name="a55bab3bb69dee3508d168c93e182d4b9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a55bab3bb69dee3508d168c93e182d4b9">&#9670;&nbsp;</a></span>iNoOfDecs</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbSchema::iNoOfDecs</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li>/mnt/1Tdata/xbase/xbase64-4.1.4/src/include/<a class="el" href="xbdbf_8h_source.html">xbdbf.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/structxb_1_1xbTblList.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/structxb_1_1xbTblList.html
new file mode 100644
index 0000000..b01da49
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/structxb_1_1xbTblList.html
@@ -0,0 +1,171 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: xb::xbTblList Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="namespacexb.html">xb</a></li><li class="navelem"><a class="el" href="structxb_1_1xbTblList.html">xbTblList</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle"><div class="title">xb::xbTblList Struct Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="xbtblmgr_8h_source.html">xbtblmgr.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a3fd169fcf0fd4df927544e5342db583c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structxb_1_1xbTblList.html">xbTblList</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structxb_1_1xbTblList.html#a3fd169fcf0fd4df927544e5342db583c">pNext</a></td></tr>
+<tr class="separator:a3fd169fcf0fd4df927544e5342db583c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aceec65f6f6b585788cf98e8dabd2737d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structxb_1_1xbTblList.html#aceec65f6f6b585788cf98e8dabd2737d">psFqTblName</a></td></tr>
+<tr class="separator:aceec65f6f6b585788cf98e8dabd2737d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a02c3b0c47fd104ef9758b375ecdcfd0f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structxb_1_1xbTblList.html#a02c3b0c47fd104ef9758b375ecdcfd0f">psTblName</a></td></tr>
+<tr class="separator:a02c3b0c47fd104ef9758b375ecdcfd0f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac87742c8a6b1cf2e7e35218e96966a05"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structxb_1_1xbTblList.html#ac87742c8a6b1cf2e7e35218e96966a05">psTblAlias</a></td></tr>
+<tr class="separator:ac87742c8a6b1cf2e7e35218e96966a05"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a387d3f6bbf291a1fb96d276ed9bb96b6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structxb_1_1xbTblList.html#a387d3f6bbf291a1fb96d276ed9bb96b6">pDbf</a></td></tr>
+<tr class="separator:a387d3f6bbf291a1fb96d276ed9bb96b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a id="a387d3f6bbf291a1fb96d276ed9bb96b6" name="a387d3f6bbf291a1fb96d276ed9bb96b6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a387d3f6bbf291a1fb96d276ed9bb96b6">&#9670;&nbsp;</a></span>pDbf</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a>* xb::xbTblList::pDbf</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3fd169fcf0fd4df927544e5342db583c" name="a3fd169fcf0fd4df927544e5342db583c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3fd169fcf0fd4df927544e5342db583c">&#9670;&nbsp;</a></span>pNext</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structxb_1_1xbTblList.html">xbTblList</a>* xb::xbTblList::pNext</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aceec65f6f6b585788cf98e8dabd2737d" name="aceec65f6f6b585788cf98e8dabd2737d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aceec65f6f6b585788cf98e8dabd2737d">&#9670;&nbsp;</a></span>psFqTblName</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a>* xb::xbTblList::psFqTblName</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac87742c8a6b1cf2e7e35218e96966a05" name="ac87742c8a6b1cf2e7e35218e96966a05"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac87742c8a6b1cf2e7e35218e96966a05">&#9670;&nbsp;</a></span>psTblAlias</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a>* xb::xbTblList::psTblAlias</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a02c3b0c47fd104ef9758b375ecdcfd0f" name="a02c3b0c47fd104ef9758b375ecdcfd0f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a02c3b0c47fd104ef9758b375ecdcfd0f">&#9670;&nbsp;</a></span>psTblName</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a>* xb::xbTblList::psTblName</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li>/mnt/1Tdata/xbase/xbase64-4.1.4/src/include/<a class="el" href="xbtblmgr_8h_source.html">xbtblmgr.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/docs/doxygen/html/sync_off.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/sync_off.png
index 3b443fc..3b443fc 100644
--- a/docs/doxygen/html/sync_off.png
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/sync_off.png
Binary files differ
diff --git a/docs/doxygen/html/sync_on.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/sync_on.png
index e08320f..e08320f 100644
--- a/docs/doxygen/html/sync_on.png
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/sync_on.png
Binary files differ
diff --git a/docs/doxygen/html/tab_a.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/tab_a.png
index 3b725c4..3b725c4 100644
--- a/docs/doxygen/html/tab_a.png
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/tab_a.png
Binary files differ
diff --git a/docs/doxygen/html/tab_b.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/tab_b.png
index e2b4a86..e2b4a86 100644
--- a/docs/doxygen/html/tab_b.png
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/tab_b.png
Binary files differ
diff --git a/docs/doxygen/html/tab_h.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/tab_h.png
index fd5cb70..fd5cb70 100644
--- a/docs/doxygen/html/tab_h.png
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/tab_h.png
Binary files differ
diff --git a/docs/doxygen/html/tab_s.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/tab_s.png
index ab478c9..ab478c9 100644
--- a/docs/doxygen/html/tab_s.png
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/tab_s.png
Binary files differ
diff --git a/docs/doxygen/html/tabs.css b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/tabs.css
index 00d1c60..00d1c60 100644
--- a/docs/doxygen/html/tabs.css
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/tabs.css
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/tstfuncs_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/tstfuncs_8cpp.html
new file mode 100644
index 0000000..91c12b8
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/tstfuncs_8cpp.html
@@ -0,0 +1,547 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/tstfuncs.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle"><div class="title">tstfuncs.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:af990eed1e43605771a5810196b4043f7"><td class="memItemLeft" align="right" valign="top">xbDouble&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tstfuncs_8cpp.html#af990eed1e43605771a5810196b4043f7">ChronTime</a> ()</td></tr>
+<tr class="separator:af990eed1e43605771a5810196b4043f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab1f17da15e67a8b2460d5a88b7a3db6e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tstfuncs_8cpp.html#ab1f17da15e67a8b2460d5a88b7a3db6e">InitTime</a> ()</td></tr>
+<tr class="separator:ab1f17da15e67a8b2460d5a88b7a3db6e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8b8e417213c57f2ea0bcb61a7fb28860"><td class="memItemLeft" align="right" valign="top">xbBool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tstfuncs_8cpp.html#a8b8e417213c57f2ea0bcb61a7fb28860">dblEquals</a> (xbDouble a, xbDouble b, xbDouble epsilon)</td></tr>
+<tr class="separator:a8b8e417213c57f2ea0bcb61a7fb28860"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a265547b80a3aef5836952bede5288e2c"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tstfuncs_8cpp.html#a265547b80a3aef5836952bede5288e2c">TestMethod</a> (xbInt16 PrintOption, const char *title, const xbString &amp;result, const char *expectedResult, size_t expectedLen)</td></tr>
+<tr class="separator:a265547b80a3aef5836952bede5288e2c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9c27703ef863c9d29680844fc5124953"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tstfuncs_8cpp.html#a9c27703ef863c9d29680844fc5124953">TestMethod</a> (xbInt16 PrintOption, const char *title, char result, char expectedResult)</td></tr>
+<tr class="separator:a9c27703ef863c9d29680844fc5124953"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae6536e920580382389126d5f66655f90"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tstfuncs_8cpp.html#ae6536e920580382389126d5f66655f90">TestMethod</a> (xbInt16 PrintOption, const char *title, xbInt32 result, xbInt32 expectedResult)</td></tr>
+<tr class="separator:ae6536e920580382389126d5f66655f90"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a000fca67bc0fffea3d3da7a5317a06e4"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tstfuncs_8cpp.html#a000fca67bc0fffea3d3da7a5317a06e4">TestMethod</a> (xbInt16 PrintOption, const char *title, xbUInt64 result, xbUInt64 expectedResult)</td></tr>
+<tr class="separator:a000fca67bc0fffea3d3da7a5317a06e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a663f3dd7bd8574a35c1b1b9a22081c6d"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tstfuncs_8cpp.html#a663f3dd7bd8574a35c1b1b9a22081c6d">TestMethod</a> (xbInt16 PrintOption, const char *title, xbFloat result, xbFloat expectedResult)</td></tr>
+<tr class="separator:a663f3dd7bd8574a35c1b1b9a22081c6d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af1c78fb72bcd39eb86f11aa2887fe62c"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tstfuncs_8cpp.html#af1c78fb72bcd39eb86f11aa2887fe62c">TestMethod</a> (xbInt16 PrintOption, const char *title, xbDouble result, xbDouble expectedResult)</td></tr>
+<tr class="separator:af1c78fb72bcd39eb86f11aa2887fe62c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac64a0bed74ba10b638456709f128f893"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tstfuncs_8cpp.html#ac64a0bed74ba10b638456709f128f893">TestMethod</a> (xbInt16 PrintOption, const char *title, xbDouble result, xbDouble expectedResult, xbDouble dEpsilon)</td></tr>
+<tr class="separator:ac64a0bed74ba10b638456709f128f893"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a69a6e718e066af7f8392e5f1fea40d1b"><td class="memItemLeft" align="right" valign="top">xbDouble&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tstfuncs_8cpp.html#a69a6e718e066af7f8392e5f1fea40d1b">dblMax</a> (xbDouble a, xbDouble b)</td></tr>
+<tr class="separator:a69a6e718e066af7f8392e5f1fea40d1b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4d7b8f3f1ce52c6c0a281f25419f4c93"><td class="memItemLeft" align="right" valign="top">xbDouble&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tstfuncs_8cpp.html#a4d7b8f3f1ce52c6c0a281f25419f4c93">dblMin</a> (xbDouble a, xbDouble b)</td></tr>
+<tr class="separator:a4d7b8f3f1ce52c6c0a281f25419f4c93"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="var-members" name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:ae2281da6157495d69406c35f69a61f9f"><td class="memItemLeft" align="right" valign="top">time_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tstfuncs_8cpp.html#ae2281da6157495d69406c35f69a61f9f">timer</a></td></tr>
+<tr class="separator:ae2281da6157495d69406c35f69a61f9f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="af990eed1e43605771a5810196b4043f7" name="af990eed1e43605771a5810196b4043f7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af990eed1e43605771a5810196b4043f7">&#9670;&nbsp;</a></span>ChronTime()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbDouble ChronTime </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8b8e417213c57f2ea0bcb61a7fb28860" name="a8b8e417213c57f2ea0bcb61a7fb28860"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8b8e417213c57f2ea0bcb61a7fb28860">&#9670;&nbsp;</a></span>dblEquals()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbBool dblEquals </td>
+ <td>(</td>
+ <td class="paramtype">xbDouble&#160;</td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbDouble&#160;</td>
+ <td class="paramname"><em>b</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbDouble&#160;</td>
+ <td class="paramname"><em>epsilon</em> = <code>0.0001</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a69a6e718e066af7f8392e5f1fea40d1b" name="a69a6e718e066af7f8392e5f1fea40d1b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a69a6e718e066af7f8392e5f1fea40d1b">&#9670;&nbsp;</a></span>dblMax()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbDouble dblMax </td>
+ <td>(</td>
+ <td class="paramtype">xbDouble&#160;</td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbDouble&#160;</td>
+ <td class="paramname"><em>b</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a4d7b8f3f1ce52c6c0a281f25419f4c93" name="a4d7b8f3f1ce52c6c0a281f25419f4c93"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4d7b8f3f1ce52c6c0a281f25419f4c93">&#9670;&nbsp;</a></span>dblMin()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbDouble dblMin </td>
+ <td>(</td>
+ <td class="paramtype">xbDouble&#160;</td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbDouble&#160;</td>
+ <td class="paramname"><em>b</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab1f17da15e67a8b2460d5a88b7a3db6e" name="ab1f17da15e67a8b2460d5a88b7a3db6e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab1f17da15e67a8b2460d5a88b7a3db6e">&#9670;&nbsp;</a></span>InitTime()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void InitTime </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9c27703ef863c9d29680844fc5124953" name="a9c27703ef863c9d29680844fc5124953"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9c27703ef863c9d29680844fc5124953">&#9670;&nbsp;</a></span>TestMethod() <span class="overload">[1/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 TestMethod </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>PrintOption</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>title</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char&#160;</td>
+ <td class="paramname"><em>result</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char&#160;</td>
+ <td class="paramname"><em>expectedResult</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a265547b80a3aef5836952bede5288e2c" name="a265547b80a3aef5836952bede5288e2c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a265547b80a3aef5836952bede5288e2c">&#9670;&nbsp;</a></span>TestMethod() <span class="overload">[2/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 TestMethod </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>PrintOption</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>title</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const xbString &amp;&#160;</td>
+ <td class="paramname"><em>result</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>expectedResult</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>expectedLen</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af1c78fb72bcd39eb86f11aa2887fe62c" name="af1c78fb72bcd39eb86f11aa2887fe62c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af1c78fb72bcd39eb86f11aa2887fe62c">&#9670;&nbsp;</a></span>TestMethod() <span class="overload">[3/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 TestMethod </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>PrintOption</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>title</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbDouble&#160;</td>
+ <td class="paramname"><em>result</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbDouble&#160;</td>
+ <td class="paramname"><em>expectedResult</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac64a0bed74ba10b638456709f128f893" name="ac64a0bed74ba10b638456709f128f893"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac64a0bed74ba10b638456709f128f893">&#9670;&nbsp;</a></span>TestMethod() <span class="overload">[4/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 TestMethod </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>PrintOption</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>title</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbDouble&#160;</td>
+ <td class="paramname"><em>result</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbDouble&#160;</td>
+ <td class="paramname"><em>expectedResult</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbDouble&#160;</td>
+ <td class="paramname"><em>dEpsilon</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a663f3dd7bd8574a35c1b1b9a22081c6d" name="a663f3dd7bd8574a35c1b1b9a22081c6d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a663f3dd7bd8574a35c1b1b9a22081c6d">&#9670;&nbsp;</a></span>TestMethod() <span class="overload">[5/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 TestMethod </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>PrintOption</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>title</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbFloat&#160;</td>
+ <td class="paramname"><em>result</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbFloat&#160;</td>
+ <td class="paramname"><em>expectedResult</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae6536e920580382389126d5f66655f90" name="ae6536e920580382389126d5f66655f90"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae6536e920580382389126d5f66655f90">&#9670;&nbsp;</a></span>TestMethod() <span class="overload">[6/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 TestMethod </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>PrintOption</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>title</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt32&#160;</td>
+ <td class="paramname"><em>result</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt32&#160;</td>
+ <td class="paramname"><em>expectedResult</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a000fca67bc0fffea3d3da7a5317a06e4" name="a000fca67bc0fffea3d3da7a5317a06e4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a000fca67bc0fffea3d3da7a5317a06e4">&#9670;&nbsp;</a></span>TestMethod() <span class="overload">[7/7]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 TestMethod </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>PrintOption</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>title</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbUInt64&#160;</td>
+ <td class="paramname"><em>result</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbUInt64&#160;</td>
+ <td class="paramname"><em>expectedResult</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a id="ae2281da6157495d69406c35f69a61f9f" name="ae2281da6157495d69406c35f69a61f9f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae2281da6157495d69406c35f69a61f9f">&#9670;&nbsp;</a></span>timer</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">time_t timer</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__cfg__check_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__cfg__check_8cpp.html
new file mode 100644
index 0000000..792b547
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__cfg__check_8cpp.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_cfg_check.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_313caf1132e152dd9b58bea13a4052ca.html">utils</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_cfg_check.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;stdio.h&gt;</code><br />
+<code>#include &lt;stdlib.h&gt;</code><br />
+<code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__cfg__check_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr>
+<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__copydbf_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__copydbf_8cpp.html
new file mode 100644
index 0000000..e1eb6df
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__copydbf_8cpp.html
@@ -0,0 +1,155 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_copydbf.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_313caf1132e152dd9b58bea13a4052ca.html">utils</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_copydbf.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;<a class="el" href="xbase_8h_source.html">xbase.h</a>&gt;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ae964ff8411b4fdcaf65cb5529aea4bef"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__copydbf_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">PrintHelp</a> ()</td></tr>
+<tr class="separator:ae964ff8411b4fdcaf65cb5529aea4bef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1fae5968f70747445d63f63065fb7ef3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__copydbf_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">PrintVersion</a> ()</td></tr>
+<tr class="separator:a1fae5968f70747445d63f63065fb7ef3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__copydbf_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a0ddf1224851353fc92bfbff6f499fa97" name="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0ddf1224851353fc92bfbff6f499fa97">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>argv</em>[]&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae964ff8411b4fdcaf65cb5529aea4bef" name="ae964ff8411b4fdcaf65cb5529aea4bef"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae964ff8411b4fdcaf65cb5529aea4bef">&#9670;&nbsp;</a></span>PrintHelp()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void PrintHelp </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1fae5968f70747445d63f63065fb7ef3" name="a1fae5968f70747445d63f63065fb7ef3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1fae5968f70747445d63f63065fb7ef3">&#9670;&nbsp;</a></span>PrintVersion()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void PrintVersion </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__dbfutil_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__dbfutil_8cpp.html
new file mode 100644
index 0000000..8bae555
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__dbfutil_8cpp.html
@@ -0,0 +1,155 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_dbfutil.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_313caf1132e152dd9b58bea13a4052ca.html">utils</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_dbfutil.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a9c55a055e1cd4249c7f47e19dc7ac564"><td class="memItemLeft" align="right" valign="top">DOXYOFF void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__dbfutil_8cpp.html#a9c55a055e1cd4249c7f47e19dc7ac564">PrintHelp</a> ()</td></tr>
+<tr class="separator:a9c55a055e1cd4249c7f47e19dc7ac564"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1fae5968f70747445d63f63065fb7ef3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__dbfutil_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">PrintVersion</a> ()</td></tr>
+<tr class="separator:a1fae5968f70747445d63f63065fb7ef3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__dbfutil_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a0ddf1224851353fc92bfbff6f499fa97" name="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0ddf1224851353fc92bfbff6f499fa97">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>argv</em>[]&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9c55a055e1cd4249c7f47e19dc7ac564" name="a9c55a055e1cd4249c7f47e19dc7ac564"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9c55a055e1cd4249c7f47e19dc7ac564">&#9670;&nbsp;</a></span>PrintHelp()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">DOXYOFF void PrintHelp </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1fae5968f70747445d63f63065fb7ef3" name="a1fae5968f70747445d63f63065fb7ef3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1fae5968f70747445d63f63065fb7ef3">&#9670;&nbsp;</a></span>PrintVersion()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void PrintVersion </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__deletall_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__deletall_8cpp.html
new file mode 100644
index 0000000..b8834ae
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__deletall_8cpp.html
@@ -0,0 +1,155 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_deletall.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_313caf1132e152dd9b58bea13a4052ca.html">utils</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_deletall.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;<a class="el" href="xbase_8h_source.html">xbase.h</a>&gt;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ae964ff8411b4fdcaf65cb5529aea4bef"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__deletall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">PrintHelp</a> ()</td></tr>
+<tr class="separator:ae964ff8411b4fdcaf65cb5529aea4bef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1fae5968f70747445d63f63065fb7ef3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__deletall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">PrintVersion</a> ()</td></tr>
+<tr class="separator:a1fae5968f70747445d63f63065fb7ef3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__deletall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a0ddf1224851353fc92bfbff6f499fa97" name="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0ddf1224851353fc92bfbff6f499fa97">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>argv</em>[]&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae964ff8411b4fdcaf65cb5529aea4bef" name="ae964ff8411b4fdcaf65cb5529aea4bef"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae964ff8411b4fdcaf65cb5529aea4bef">&#9670;&nbsp;</a></span>PrintHelp()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void PrintHelp </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1fae5968f70747445d63f63065fb7ef3" name="a1fae5968f70747445d63f63065fb7ef3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1fae5968f70747445d63f63065fb7ef3">&#9670;&nbsp;</a></span>PrintVersion()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void PrintVersion </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__dumpdbt_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__dumpdbt_8cpp.html
new file mode 100644
index 0000000..aa95e61
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__dumpdbt_8cpp.html
@@ -0,0 +1,155 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_dumpdbt.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_313caf1132e152dd9b58bea13a4052ca.html">utils</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_dumpdbt.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;<a class="el" href="xbase_8h_source.html">xbase.h</a>&gt;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ae964ff8411b4fdcaf65cb5529aea4bef"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__dumpdbt_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">PrintHelp</a> ()</td></tr>
+<tr class="separator:ae964ff8411b4fdcaf65cb5529aea4bef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1fae5968f70747445d63f63065fb7ef3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__dumpdbt_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">PrintVersion</a> ()</td></tr>
+<tr class="separator:a1fae5968f70747445d63f63065fb7ef3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__dumpdbt_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a0ddf1224851353fc92bfbff6f499fa97" name="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0ddf1224851353fc92bfbff6f499fa97">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>argv</em>[]&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae964ff8411b4fdcaf65cb5529aea4bef" name="ae964ff8411b4fdcaf65cb5529aea4bef"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae964ff8411b4fdcaf65cb5529aea4bef">&#9670;&nbsp;</a></span>PrintHelp()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void PrintHelp </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1fae5968f70747445d63f63065fb7ef3" name="a1fae5968f70747445d63f63065fb7ef3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1fae5968f70747445d63f63065fb7ef3">&#9670;&nbsp;</a></span>PrintVersion()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void PrintVersion </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/docs/doxygen/html/xb__dumphdr_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__dumphdr_8cpp.html
index 39b4a89..39b4a89 100644
--- a/docs/doxygen/html/xb__dumphdr_8cpp.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__dumphdr_8cpp.html
diff --git a/docs/doxygen/html/xb__dumpix_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__dumpix_8cpp.html
index 7e42d1e..7e42d1e 100644
--- a/docs/doxygen/html/xb__dumpix_8cpp.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__dumpix_8cpp.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__dumprecs_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__dumprecs_8cpp.html
new file mode 100644
index 0000000..7c6187e
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__dumprecs_8cpp.html
@@ -0,0 +1,155 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_dumprecs.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_313caf1132e152dd9b58bea13a4052ca.html">utils</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_dumprecs.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;<a class="el" href="xbase_8h_source.html">xbase.h</a>&gt;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ae964ff8411b4fdcaf65cb5529aea4bef"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__dumprecs_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">PrintHelp</a> ()</td></tr>
+<tr class="separator:ae964ff8411b4fdcaf65cb5529aea4bef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1fae5968f70747445d63f63065fb7ef3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__dumprecs_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">PrintVersion</a> ()</td></tr>
+<tr class="separator:a1fae5968f70747445d63f63065fb7ef3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__dumprecs_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a0ddf1224851353fc92bfbff6f499fa97" name="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0ddf1224851353fc92bfbff6f499fa97">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>argv</em>[]&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae964ff8411b4fdcaf65cb5529aea4bef" name="ae964ff8411b4fdcaf65cb5529aea4bef"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae964ff8411b4fdcaf65cb5529aea4bef">&#9670;&nbsp;</a></span>PrintHelp()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void PrintHelp </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1fae5968f70747445d63f63065fb7ef3" name="a1fae5968f70747445d63f63065fb7ef3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1fae5968f70747445d63f63065fb7ef3">&#9670;&nbsp;</a></span>PrintVersion()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void PrintVersion </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__date_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__date_8cpp.html
new file mode 100644
index 0000000..a3c9419
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__date_8cpp.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_date.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e931c1a3f0014e624d0645a271726ad2.html">examples</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_ex_date.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__date_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr>
+<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__expression_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__expression_8cpp.html
new file mode 100644
index 0000000..fcc64f1
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__expression_8cpp.html
@@ -0,0 +1,168 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_expression.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e931c1a3f0014e624d0645a271726ad2.html">examples</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle"><div class="title">xb_ex_expression.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;<a class="el" href="xbase_8h_source.html">xbase.h</a>&gt;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a3234afc912211aec54c10d363d28cbda"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__expression_8cpp.html#a3234afc912211aec54c10d363d28cbda">PrintResult</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> *sExpression, xbExp *exp)</td></tr>
+<tr class="separator:a3234afc912211aec54c10d363d28cbda"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__expression_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr>
+<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="var-members" name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:a2122b9562802e2fd799b20454000dc99"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structxb_1_1xbSchema.html">xbSchema</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__expression_8cpp.html#a2122b9562802e2fd799b20454000dc99">MyV4Record</a> []</td></tr>
+<tr class="separator:a2122b9562802e2fd799b20454000dc99"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3234afc912211aec54c10d363d28cbda" name="a3234afc912211aec54c10d363d28cbda"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3234afc912211aec54c10d363d28cbda">&#9670;&nbsp;</a></span>PrintResult()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void PrintResult </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> *&#160;</td>
+ <td class="paramname"><em>sExpression</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbExp *&#160;</td>
+ <td class="paramname"><em>exp</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a id="a2122b9562802e2fd799b20454000dc99" name="a2122b9562802e2fd799b20454000dc99"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2122b9562802e2fd799b20454000dc99">&#9670;&nbsp;</a></span>MyV4Record</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structxb_1_1xbSchema.html">xbSchema</a> MyV4Record[]</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<b>Initial value:</b><div class="fragment"><div class="line">= </div>
+<div class="line"> {</div>
+<div class="line"> { <span class="stringliteral">&quot;CFLD1&quot;</span>, <a class="code hl_define" href="xbdbf_8h.html#a20f739b9d9dc6a002a246a999e76aeaa">XB_CHAR_FLD</a>, 20, 0 },</div>
+<div class="line"> { <span class="stringliteral">&quot;CFLD2&quot;</span>, <a class="code hl_define" href="xbdbf_8h.html#a20f739b9d9dc6a002a246a999e76aeaa">XB_CHAR_FLD</a>, 10, 0 },</div>
+<div class="line"> { <span class="stringliteral">&quot;NFLD1&quot;</span>, <a class="code hl_define" href="xbdbf_8h.html#ae9fb6d69cc5edc94d36ae403c22ec1c6">XB_NUMERIC_FLD</a>, 5, 0 },</div>
+<div class="line"> { <span class="stringliteral">&quot;DATE1&quot;</span>, <a class="code hl_define" href="xbdbf_8h.html#a7f685e6f5fe804b2174725a27ce73adc">XB_DATE_FLD</a>, 8, 0 },</div>
+<div class="line"> { <span class="stringliteral">&quot;&quot;</span>,0,0,0 }</div>
+<div class="line"> }</div>
+<div class="ttc" id="axbdbf_8h_html_a20f739b9d9dc6a002a246a999e76aeaa"><div class="ttname"><a href="xbdbf_8h.html#a20f739b9d9dc6a002a246a999e76aeaa">XB_CHAR_FLD</a></div><div class="ttdeci">#define XB_CHAR_FLD</div><div class="ttdef"><b>Definition:</b> xbdbf.h:29</div></div>
+<div class="ttc" id="axbdbf_8h_html_a7f685e6f5fe804b2174725a27ce73adc"><div class="ttname"><a href="xbdbf_8h.html#a7f685e6f5fe804b2174725a27ce73adc">XB_DATE_FLD</a></div><div class="ttdeci">#define XB_DATE_FLD</div><div class="ttdef"><b>Definition:</b> xbdbf.h:32</div></div>
+<div class="ttc" id="axbdbf_8h_html_ae9fb6d69cc5edc94d36ae403c22ec1c6"><div class="ttname"><a href="xbdbf_8h.html#ae9fb6d69cc5edc94d36ae403c22ec1c6">XB_NUMERIC_FLD</a></div><div class="ttdeci">#define XB_NUMERIC_FLD</div><div class="ttdef"><b>Definition:</b> xbdbf.h:31</div></div>
+</div><!-- fragment -->
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__log_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__log_8cpp.html
new file mode 100644
index 0000000..9070017
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__log_8cpp.html
@@ -0,0 +1,117 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_log.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e931c1a3f0014e624d0645a271726ad2.html">examples</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_ex_log.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__log_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
+<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argCnt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>av</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__sql_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__sql_8cpp.html
new file mode 100644
index 0000000..d49de9f
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__sql_8cpp.html
@@ -0,0 +1,117 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_sql.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e931c1a3f0014e624d0645a271726ad2.html">examples</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_ex_sql.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;<a class="el" href="xbase_8h_source.html">xbase.h</a>&gt;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__sql_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
+<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argCnt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>av</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__ssv_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__ssv_8cpp.html
new file mode 100644
index 0000000..7576f99
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__ssv_8cpp.html
@@ -0,0 +1,117 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_ssv.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e931c1a3f0014e624d0645a271726ad2.html">examples</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_ex_ssv.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a6438fb6826a353355708e08b4395d689"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__ssv_8cpp.html#a6438fb6826a353355708e08b4395d689">main</a> (int, char **av)</td></tr>
+<tr class="separator:a6438fb6826a353355708e08b4395d689"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a6438fb6826a353355708e08b4395d689" name="a6438fb6826a353355708e08b4395d689"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6438fb6826a353355708e08b4395d689">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>av</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__string_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__string_8cpp.html
new file mode 100644
index 0000000..8fd378f
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__string_8cpp.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_string.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e931c1a3f0014e624d0645a271726ad2.html">examples</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_ex_string.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__string_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr>
+<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__v3__create__dbf_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__v3__create__dbf_8cpp.html
new file mode 100644
index 0000000..e457106
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__v3__create__dbf_8cpp.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_v3_create_dbf.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e931c1a3f0014e624d0645a271726ad2.html">examples</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_ex_v3_create_dbf.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;<a class="el" href="xbase_8h_source.html">xbase.h</a>&gt;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__v3__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr>
+<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__v3__upd__dbf_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__v3__upd__dbf_8cpp.html
new file mode 100644
index 0000000..ec407f3
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__v3__upd__dbf_8cpp.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_v3_upd_dbf.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e931c1a3f0014e624d0645a271726ad2.html">examples</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_ex_v3_upd_dbf.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;<a class="el" href="xbase_8h_source.html">xbase.h</a>&gt;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__v3__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr>
+<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__v4__create__dbf_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__v4__create__dbf_8cpp.html
new file mode 100644
index 0000000..22ec40c
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__v4__create__dbf_8cpp.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_v4_create_dbf.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e931c1a3f0014e624d0645a271726ad2.html">examples</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_ex_v4_create_dbf.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;<a class="el" href="xbase_8h_source.html">xbase.h</a>&gt;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__v4__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr>
+<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__v4__upd__dbf_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__v4__upd__dbf_8cpp.html
new file mode 100644
index 0000000..ef0e8c1
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__ex__v4__upd__dbf_8cpp.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_v4_upd_dbf.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e931c1a3f0014e624d0645a271726ad2.html">examples</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_ex_v4_upd_dbf.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;<a class="el" href="xbase_8h_source.html">xbase.h</a>&gt;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__v4__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr>
+<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__execsql_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__execsql_8cpp.html
new file mode 100644
index 0000000..89e032e
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__execsql_8cpp.html
@@ -0,0 +1,191 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_execsql.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_313caf1132e152dd9b58bea13a4052ca.html">utils</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_execsql.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;<a class="el" href="xbase_8h_source.html">xbase.h</a>&gt;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ae964ff8411b4fdcaf65cb5529aea4bef"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__execsql_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">PrintHelp</a> ()</td></tr>
+<tr class="separator:ae964ff8411b4fdcaf65cb5529aea4bef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1fae5968f70747445d63f63065fb7ef3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__execsql_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">PrintVersion</a> ()</td></tr>
+<tr class="separator:a1fae5968f70747445d63f63065fb7ef3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adb176b752e38521fdb334b4976965945"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__execsql_8cpp.html#adb176b752e38521fdb334b4976965945">GetNextSqlCmd</a> (<a class="el" href="classxb_1_1xbFile.html">xbFile</a> &amp;f, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sCmd, <a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bQuiet)</td></tr>
+<tr class="separator:adb176b752e38521fdb334b4976965945"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__execsql_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="adb176b752e38521fdb334b4976965945" name="adb176b752e38521fdb334b4976965945"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adb176b752e38521fdb334b4976965945">&#9670;&nbsp;</a></span>GetNextSqlCmd()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 GetNextSqlCmd </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbFile.html">xbFile</a> &amp;&#160;</td>
+ <td class="paramname"><em>f</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sCmd</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td>
+ <td class="paramname"><em>bQuiet</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0ddf1224851353fc92bfbff6f499fa97" name="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0ddf1224851353fc92bfbff6f499fa97">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>argv</em>[]&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae964ff8411b4fdcaf65cb5529aea4bef" name="ae964ff8411b4fdcaf65cb5529aea4bef"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae964ff8411b4fdcaf65cb5529aea4bef">&#9670;&nbsp;</a></span>PrintHelp()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void PrintHelp </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1fae5968f70747445d63f63065fb7ef3" name="a1fae5968f70747445d63f63065fb7ef3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1fae5968f70747445d63f63065fb7ef3">&#9670;&nbsp;</a></span>PrintVersion()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void PrintVersion </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__import_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__import_8cpp.html
new file mode 100644
index 0000000..1ddc34d
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__import_8cpp.html
@@ -0,0 +1,161 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_import.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_313caf1132e152dd9b58bea13a4052ca.html">utils</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_import.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;<a class="el" href="xbase_8h_source.html">xbase.h</a>&gt;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structsFldMap.html">sFldMap</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ae964ff8411b4fdcaf65cb5529aea4bef"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__import_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">PrintHelp</a> ()</td></tr>
+<tr class="separator:ae964ff8411b4fdcaf65cb5529aea4bef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1fae5968f70747445d63f63065fb7ef3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__import_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">PrintVersion</a> ()</td></tr>
+<tr class="separator:a1fae5968f70747445d63f63065fb7ef3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__import_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a0ddf1224851353fc92bfbff6f499fa97" name="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0ddf1224851353fc92bfbff6f499fa97">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>argv</em>[]&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae964ff8411b4fdcaf65cb5529aea4bef" name="ae964ff8411b4fdcaf65cb5529aea4bef"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae964ff8411b4fdcaf65cb5529aea4bef">&#9670;&nbsp;</a></span>PrintHelp()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void PrintHelp </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1fae5968f70747445d63f63065fb7ef3" name="a1fae5968f70747445d63f63065fb7ef3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1fae5968f70747445d63f63065fb7ef3">&#9670;&nbsp;</a></span>PrintVersion()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void PrintVersion </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__pack_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__pack_8cpp.html
new file mode 100644
index 0000000..50632f7
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__pack_8cpp.html
@@ -0,0 +1,155 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_pack.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_313caf1132e152dd9b58bea13a4052ca.html">utils</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_pack.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;<a class="el" href="xbase_8h_source.html">xbase.h</a>&gt;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ae964ff8411b4fdcaf65cb5529aea4bef"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__pack_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">PrintHelp</a> ()</td></tr>
+<tr class="separator:ae964ff8411b4fdcaf65cb5529aea4bef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1fae5968f70747445d63f63065fb7ef3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__pack_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">PrintVersion</a> ()</td></tr>
+<tr class="separator:a1fae5968f70747445d63f63065fb7ef3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__pack_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a0ddf1224851353fc92bfbff6f499fa97" name="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0ddf1224851353fc92bfbff6f499fa97">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>argv</em>[]&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae964ff8411b4fdcaf65cb5529aea4bef" name="ae964ff8411b4fdcaf65cb5529aea4bef"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae964ff8411b4fdcaf65cb5529aea4bef">&#9670;&nbsp;</a></span>PrintHelp()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void PrintHelp </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1fae5968f70747445d63f63065fb7ef3" name="a1fae5968f70747445d63f63065fb7ef3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1fae5968f70747445d63f63065fb7ef3">&#9670;&nbsp;</a></span>PrintVersion()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void PrintVersion </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__tblinfo_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__tblinfo_8cpp.html
new file mode 100644
index 0000000..3ecdd3c
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__tblinfo_8cpp.html
@@ -0,0 +1,155 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_tblinfo.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_313caf1132e152dd9b58bea13a4052ca.html">utils</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_tblinfo.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;<a class="el" href="xbase_8h_source.html">xbase.h</a>&gt;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ae964ff8411b4fdcaf65cb5529aea4bef"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__tblinfo_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">PrintHelp</a> ()</td></tr>
+<tr class="separator:ae964ff8411b4fdcaf65cb5529aea4bef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1fae5968f70747445d63f63065fb7ef3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__tblinfo_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">PrintVersion</a> ()</td></tr>
+<tr class="separator:a1fae5968f70747445d63f63065fb7ef3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__tblinfo_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a0ddf1224851353fc92bfbff6f499fa97" name="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0ddf1224851353fc92bfbff6f499fa97">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>argv</em>[]&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae964ff8411b4fdcaf65cb5529aea4bef" name="ae964ff8411b4fdcaf65cb5529aea4bef"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae964ff8411b4fdcaf65cb5529aea4bef">&#9670;&nbsp;</a></span>PrintHelp()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void PrintHelp </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1fae5968f70747445d63f63065fb7ef3" name="a1fae5968f70747445d63f63065fb7ef3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1fae5968f70747445d63f63065fb7ef3">&#9670;&nbsp;</a></span>PrintVersion()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void PrintVersion </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__bcd_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__bcd_8cpp.html
new file mode 100644
index 0000000..e01aea3
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__bcd_8cpp.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_bcd.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_test_bcd.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__bcd_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
+<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argCnt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>av</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__blockread_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__blockread_8cpp.html
new file mode 100644
index 0000000..2cb8c53
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__blockread_8cpp.html
@@ -0,0 +1,147 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_blockread.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle"><div class="title">xb_test_blockread.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__blockread_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
+<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="var-members" name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:af68c3291a63fdf20ffa0e477460d148e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structxb_1_1xbSchema.html">xbSchema</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__blockread_8cpp.html#af68c3291a63fdf20ffa0e477460d148e">MyDbfRec</a> []</td></tr>
+<tr class="separator:af68c3291a63fdf20ffa0e477460d148e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argCnt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>av</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a id="af68c3291a63fdf20ffa0e477460d148e" name="af68c3291a63fdf20ffa0e477460d148e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af68c3291a63fdf20ffa0e477460d148e">&#9670;&nbsp;</a></span>MyDbfRec</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structxb_1_1xbSchema.html">xbSchema</a> MyDbfRec[]</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<b>Initial value:</b><div class="fragment"><div class="line">= </div>
+<div class="line"> {</div>
+<div class="line"> { <span class="stringliteral">&quot;NFLD&quot;</span>, <a class="code hl_define" href="xbdbf_8h.html#ae9fb6d69cc5edc94d36ae403c22ec1c6">XB_NUMERIC_FLD</a>, 10, 0 },</div>
+<div class="line"> { <span class="stringliteral">&quot;CFLD&quot;</span>, <a class="code hl_define" href="xbdbf_8h.html#a20f739b9d9dc6a002a246a999e76aeaa">XB_CHAR_FLD</a>, 89, 0 },</div>
+<div class="line"> { <span class="stringliteral">&quot;&quot;</span>,0,0,0 }</div>
+<div class="line"> }</div>
+<div class="ttc" id="axbdbf_8h_html_a20f739b9d9dc6a002a246a999e76aeaa"><div class="ttname"><a href="xbdbf_8h.html#a20f739b9d9dc6a002a246a999e76aeaa">XB_CHAR_FLD</a></div><div class="ttdeci">#define XB_CHAR_FLD</div><div class="ttdef"><b>Definition:</b> xbdbf.h:29</div></div>
+<div class="ttc" id="axbdbf_8h_html_ae9fb6d69cc5edc94d36ae403c22ec1c6"><div class="ttname"><a href="xbdbf_8h.html#ae9fb6d69cc5edc94d36ae403c22ec1c6">XB_NUMERIC_FLD</a></div><div class="ttdeci">#define XB_NUMERIC_FLD</div><div class="ttdef"><b>Definition:</b> xbdbf.h:31</div></div>
+</div><!-- fragment -->
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/docs/doxygen/html/xb__test__blockread__save_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__blockread__save_8cpp.html
index 40885f8..40885f8 100644
--- a/docs/doxygen/html/xb__test__blockread__save_8cpp.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__blockread__save_8cpp.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__date_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__date_8cpp.html
new file mode 100644
index 0000000..a71a906
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__date_8cpp.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_date.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_test_date.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__date_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
+<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argCnt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>av</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__dbf__v3__memos_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__dbf__v3__memos_8cpp.html
new file mode 100644
index 0000000..a1f8d65
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__dbf__v3__memos_8cpp.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_dbf_v3_memos.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_test_dbf_v3_memos.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__dbf__v3__memos_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
+<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argCnt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>av</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__dbf__v3__nomemos_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__dbf__v3__nomemos_8cpp.html
new file mode 100644
index 0000000..f9ad3c0
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__dbf__v3__nomemos_8cpp.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_dbf_v3_nomemos.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_test_dbf_v3_nomemos.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__dbf__v3__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
+<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argCnt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>av</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__dbf__v4__memos_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__dbf__v4__memos_8cpp.html
new file mode 100644
index 0000000..ec46fae
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__dbf__v4__memos_8cpp.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_dbf_v4_memos.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_test_dbf_v4_memos.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__dbf__v4__memos_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
+<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argCnt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>av</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__dbf__v4__nomemos_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__dbf__v4__nomemos_8cpp.html
new file mode 100644
index 0000000..bdadc98
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__dbf__v4__nomemos_8cpp.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_dbf_v4_nomemos.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_test_dbf_v4_nomemos.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__dbf__v4__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
+<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argCnt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>av</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__expnode_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__expnode_8cpp.html
new file mode 100644
index 0000000..b378c82
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__expnode_8cpp.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_expnode.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_test_expnode.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__expnode_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
+<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argCnt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>av</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__expression_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__expression_8cpp.html
new file mode 100644
index 0000000..b1f4f5f
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__expression_8cpp.html
@@ -0,0 +1,502 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_expression.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_test_expression.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:aee57237c5f5b9b4d80e84bf530eb42bc"><td class="memItemLeft" align="right" valign="top">DOXYOFF xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__expression_8cpp.html#aee57237c5f5b9b4d80e84bf530eb42bc">DevTester</a> (<a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *xb, <a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *dbf, const char *sExpIn)</td></tr>
+<tr class="separator:aee57237c5f5b9b4d80e84bf530eb42bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af56b6dbc38e0d23caaf6531526315379"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__expression_8cpp.html#af56b6dbc38e0d23caaf6531526315379">TestWeight</a> (<a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *xb, xbInt16 iPrintOption, const char *title, const char *sOperator, xbInt16 iExpectedWeight)</td></tr>
+<tr class="separator:af56b6dbc38e0d23caaf6531526315379"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a440d64b55abaa9e14e73ecc132d1084d"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__expression_8cpp.html#a440d64b55abaa9e14e73ecc132d1084d">TestTokenMethod</a> (<a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *xb, xbInt16 iPrintOption, const char *title, const char *sExpression, const char *sExpectedToken, const char *sExpectedRemainder, char cExpectedNodeType, char cExpectedReturnType, xbInt16 iErc, xbInt16 iTrc)</td></tr>
+<tr class="separator:a440d64b55abaa9e14e73ecc132d1084d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad52c27685018dda7c5c4b26fb445860e"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__expression_8cpp.html#ad52c27685018dda7c5c4b26fb445860e">TestMethod</a> (<a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *xb, <a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *d, xbInt16 PrintOption, const char *title, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sExpression, const char *sExpectedResult, xbInt16 iExpectedResultLen)</td></tr>
+<tr class="separator:ad52c27685018dda7c5c4b26fb445860e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7030149316fe8d8195ffbb18132e0cf9"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__expression_8cpp.html#a7030149316fe8d8195ffbb18132e0cf9">TestMethod</a> (<a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *xb, <a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *d, xbInt16 PrintOption, const char *title, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sExpression, <a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dExpectedResult)</td></tr>
+<tr class="separator:a7030149316fe8d8195ffbb18132e0cf9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a10e637a203841bd2b6a92e6217509e23"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__expression_8cpp.html#a10e637a203841bd2b6a92e6217509e23">TestMethod</a> (<a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *xb, <a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *d, xbInt16 PrintOption, const char *title, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sExpression, <a class="el" href="classxb_1_1xbDate.html">xbDate</a> dtExpectedResult)</td></tr>
+<tr class="separator:a10e637a203841bd2b6a92e6217509e23"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa385c5f9fa8b4cfd63763b4a28852b64"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__expression_8cpp.html#aa385c5f9fa8b4cfd63763b4a28852b64">TestMethod</a> (<a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *xb, <a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *d, xbInt16 PrintOption, const char *title, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sExpression, <a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bExpectedResult)</td></tr>
+<tr class="separator:aa385c5f9fa8b4cfd63763b4a28852b64"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__expression_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
+<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="aee57237c5f5b9b4d80e84bf530eb42bc" name="aee57237c5f5b9b4d80e84bf530eb42bc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aee57237c5f5b9b4d80e84bf530eb42bc">&#9670;&nbsp;</a></span>DevTester()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">DOXYOFF xbInt16 DevTester </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *&#160;</td>
+ <td class="paramname"><em>xb</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td>
+ <td class="paramname"><em>dbf</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>sExpIn</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argCnt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>av</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad52c27685018dda7c5c4b26fb445860e" name="ad52c27685018dda7c5c4b26fb445860e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad52c27685018dda7c5c4b26fb445860e">&#9670;&nbsp;</a></span>TestMethod() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 TestMethod </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *&#160;</td>
+ <td class="paramname"><em>xb</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td>
+ <td class="paramname"><em>d</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>PrintOption</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>title</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sExpression</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>sExpectedResult</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iExpectedResultLen</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa385c5f9fa8b4cfd63763b4a28852b64" name="aa385c5f9fa8b4cfd63763b4a28852b64"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa385c5f9fa8b4cfd63763b4a28852b64">&#9670;&nbsp;</a></span>TestMethod() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 TestMethod </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *&#160;</td>
+ <td class="paramname"><em>xb</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td>
+ <td class="paramname"><em>d</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>PrintOption</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>title</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sExpression</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td>
+ <td class="paramname"><em>bExpectedResult</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a10e637a203841bd2b6a92e6217509e23" name="a10e637a203841bd2b6a92e6217509e23"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a10e637a203841bd2b6a92e6217509e23">&#9670;&nbsp;</a></span>TestMethod() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 TestMethod </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *&#160;</td>
+ <td class="paramname"><em>xb</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td>
+ <td class="paramname"><em>d</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>PrintOption</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>title</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sExpression</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbDate.html">xbDate</a>&#160;</td>
+ <td class="paramname"><em>dtExpectedResult</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7030149316fe8d8195ffbb18132e0cf9" name="a7030149316fe8d8195ffbb18132e0cf9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7030149316fe8d8195ffbb18132e0cf9">&#9670;&nbsp;</a></span>TestMethod() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 TestMethod </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *&#160;</td>
+ <td class="paramname"><em>xb</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td>
+ <td class="paramname"><em>d</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>PrintOption</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>title</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sExpression</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a>&#160;</td>
+ <td class="paramname"><em>dExpectedResult</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a440d64b55abaa9e14e73ecc132d1084d" name="a440d64b55abaa9e14e73ecc132d1084d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a440d64b55abaa9e14e73ecc132d1084d">&#9670;&nbsp;</a></span>TestTokenMethod()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 TestTokenMethod </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *&#160;</td>
+ <td class="paramname"><em>xb</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iPrintOption</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>title</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>sExpression</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>sExpectedToken</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>sExpectedRemainder</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char&#160;</td>
+ <td class="paramname"><em>cExpectedNodeType</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char&#160;</td>
+ <td class="paramname"><em>cExpectedReturnType</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iErc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iTrc</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af56b6dbc38e0d23caaf6531526315379" name="af56b6dbc38e0d23caaf6531526315379"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af56b6dbc38e0d23caaf6531526315379">&#9670;&nbsp;</a></span>TestWeight()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 TestWeight </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *&#160;</td>
+ <td class="paramname"><em>xb</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iPrintOption</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>title</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>sOperator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iExpectedWeight</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__file_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__file_8cpp.html
new file mode 100644
index 0000000..c2a68c1
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__file_8cpp.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_file.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_test_file.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__file_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
+<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argCnt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>av</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__filter_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__filter_8cpp.html
new file mode 100644
index 0000000..f366c17
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__filter_8cpp.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_filter.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_test_filter.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__filter_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
+<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argCnt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>av</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__funcs_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__funcs_8cpp.html
new file mode 100644
index 0000000..d71b646
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__funcs_8cpp.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_funcs.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_test_funcs.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__funcs_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
+<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argCnt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>av</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__linklist_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__linklist_8cpp.html
new file mode 100644
index 0000000..002accf
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__linklist_8cpp.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_linklist.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_test_linklist.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__linklist_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
+<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argCnt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>av</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__lock2_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__lock2_8cpp.html
new file mode 100644
index 0000000..a678c7f
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__lock2_8cpp.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_lock2.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_test_lock2.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__lock2_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
+<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argCnt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>av</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__lock_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__lock_8cpp.html
new file mode 100644
index 0000000..ad9919a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__lock_8cpp.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_lock.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_test_lock.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__lock_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
+<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argCnt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>av</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__log_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__log_8cpp.html
new file mode 100644
index 0000000..d3fdba6
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__log_8cpp.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_log.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_test_log.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__log_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
+<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argCnt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>av</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__mdx_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__mdx_8cpp.html
new file mode 100644
index 0000000..9ddc1da
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__mdx_8cpp.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_mdx.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_test_mdx.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__mdx_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
+<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argCnt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>av</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/docs/doxygen/html/xb__test__ndx2_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__ndx2_8cpp.html
index b92ae09..b92ae09 100644
--- a/docs/doxygen/html/xb__test__ndx2_8cpp.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__ndx2_8cpp.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__ndx_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__ndx_8cpp.html
new file mode 100644
index 0000000..89882be
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__ndx_8cpp.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_ndx.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_test_ndx.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__ndx_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
+<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argCnt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>av</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__sql_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__sql_8cpp.html
new file mode 100644
index 0000000..919c01c
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__sql_8cpp.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_sql.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_test_sql.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__sql_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
+<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argCnt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>av</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__string_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__string_8cpp.html
new file mode 100644
index 0000000..87d816d
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__string_8cpp.html
@@ -0,0 +1,139 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_string.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_test_string.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a42f8c497a1968074f38bf5055c650dca"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__string_8cpp.html#a42f8c497a1968074f38bf5055c650dca">VERBOSE</a></td></tr>
+<tr class="separator:a42f8c497a1968074f38bf5055c650dca"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:aabf71bc9adb6daf457b2ea8879ae537f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__string_8cpp.html#aabf71bc9adb6daf457b2ea8879ae537f">main</a> (int argCnt, char **av=NULL)</td></tr>
+<tr class="separator:aabf71bc9adb6daf457b2ea8879ae537f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a id="a42f8c497a1968074f38bf5055c650dca" name="a42f8c497a1968074f38bf5055c650dca"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a42f8c497a1968074f38bf5055c650dca">&#9670;&nbsp;</a></span>VERBOSE</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define VERBOSE</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="aabf71bc9adb6daf457b2ea8879ae537f" name="aabf71bc9adb6daf457b2ea8879ae537f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aabf71bc9adb6daf457b2ea8879ae537f">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argCnt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>av</em> = <code>NULL</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__tblmgr_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__tblmgr_8cpp.html
new file mode 100644
index 0000000..100eadb
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__tblmgr_8cpp.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_tblmgr.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_test_tblmgr.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__tblmgr_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
+<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argCnt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>av</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__tdx_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__tdx_8cpp.html
new file mode 100644
index 0000000..67c96f4
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__tdx_8cpp.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_tdx.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_test_tdx.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__tdx_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
+<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argCnt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>av</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__uda_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__uda_8cpp.html
new file mode 100644
index 0000000..d73026e
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__uda_8cpp.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_uda.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_test_uda.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__uda_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
+<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argCnt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>av</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__xbase_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__xbase_8cpp.html
new file mode 100644
index 0000000..ad5ebb9
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__xbase_8cpp.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_xbase.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_test_xbase.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__xbase_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
+<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argCnt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>av</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__undelall_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__undelall_8cpp.html
new file mode 100644
index 0000000..10f1f27
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__undelall_8cpp.html
@@ -0,0 +1,155 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_undelall.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_313caf1132e152dd9b58bea13a4052ca.html">utils</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_undelall.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;<a class="el" href="xbase_8h_source.html">xbase.h</a>&gt;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ae964ff8411b4fdcaf65cb5529aea4bef"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__undelall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">PrintHelp</a> ()</td></tr>
+<tr class="separator:ae964ff8411b4fdcaf65cb5529aea4bef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1fae5968f70747445d63f63065fb7ef3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__undelall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">PrintVersion</a> ()</td></tr>
+<tr class="separator:a1fae5968f70747445d63f63065fb7ef3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__undelall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a0ddf1224851353fc92bfbff6f499fa97" name="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0ddf1224851353fc92bfbff6f499fa97">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>argv</em>[]&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae964ff8411b4fdcaf65cb5529aea4bef" name="ae964ff8411b4fdcaf65cb5529aea4bef"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae964ff8411b4fdcaf65cb5529aea4bef">&#9670;&nbsp;</a></span>PrintHelp()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void PrintHelp </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1fae5968f70747445d63f63065fb7ef3" name="a1fae5968f70747445d63f63065fb7ef3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1fae5968f70747445d63f63065fb7ef3">&#9670;&nbsp;</a></span>PrintVersion()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void PrintVersion </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/docs/doxygen/html/xb__zap_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__zap_8cpp.html
index 793d67e..793d67e 100644
--- a/docs/doxygen/html/xb__zap_8cpp.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__zap_8cpp.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbalttbl_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbalttbl_8cpp.html
new file mode 100644
index 0000000..21799cb
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbalttbl_8cpp.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/sql/xbalttbl.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_25b94c3afce00ed38231227d8141f932.html">sql</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbalttbl.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbase_8h.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbase_8h.html
new file mode 100644
index 0000000..055fcc5
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbase_8h.html
@@ -0,0 +1,110 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbase.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbase.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;xbconfig.h&gt;</code><br />
+<code>#include &lt;stdio.h&gt;</code><br />
+<code>#include &lt;errno.h&gt;</code><br />
+<code>#include &lt;time.h&gt;</code><br />
+<code>#include &lt;math.h&gt;</code><br />
+<code>#include &lt;iomanip&gt;</code><br />
+<code>#include &lt;<a class="el" href="xbretcod_8h_source.html">xbretcod.h</a>&gt;</code><br />
+<code>#include &lt;<a class="el" href="xbtypes_8h_source.html">xbtypes.h</a>&gt;</code><br />
+<code>#include &lt;<a class="el" href="xbstring_8h_source.html">xbstring.h</a>&gt;</code><br />
+<code>#include &lt;<a class="el" href="xbssv_8h_source.html">xbssv.h</a>&gt;</code><br />
+<code>#include &lt;<a class="el" href="xbdate_8h_source.html">xbdate.h</a>&gt;</code><br />
+<code>#include &lt;<a class="el" href="xbtblmgr_8h_source.html">xbtblmgr.h</a>&gt;</code><br />
+<code>#include &lt;<a class="el" href="xbxbase_8h_source.html">xbxbase.h</a>&gt;</code><br />
+<code>#include &lt;<a class="el" href="xblnknod_8h_source.html">xblnknod.h</a>&gt;</code><br />
+<code>#include &lt;<a class="el" href="xblnklst_8h_source.html">xblnklst.h</a>&gt;</code><br />
+<code>#include &lt;<a class="el" href="xblnklstord_8h_source.html">xblnklstord.h</a>&gt;</code><br />
+<code>#include &lt;<a class="el" href="xbfile_8h_source.html">xbfile.h</a>&gt;</code><br />
+<code>#include &lt;<a class="el" href="xblog_8h_source.html">xblog.h</a>&gt;</code><br />
+<code>#include &lt;<a class="el" href="xbmemo_8h_source.html">xbmemo.h</a>&gt;</code><br />
+<code>#include &lt;<a class="el" href="xbbcd_8h_source.html">xbbcd.h</a>&gt;</code><br />
+<code>#include &lt;<a class="el" href="xbuda_8h_source.html">xbuda.h</a>&gt;</code><br />
+<code>#include &lt;<a class="el" href="xbexpnode_8h_source.html">xbexpnode.h</a>&gt;</code><br />
+<code>#include &lt;<a class="el" href="xbexp_8h_source.html">xbexp.h</a>&gt;</code><br />
+<code>#include &lt;<a class="el" href="xbtag_8h_source.html">xbtag.h</a>&gt;</code><br />
+<code>#include &lt;<a class="el" href="xbblkread_8h_source.html">xbblkread.h</a>&gt;</code><br />
+<code>#include &lt;<a class="el" href="xbdbf_8h_source.html">xbdbf.h</a>&gt;</code><br />
+<code>#include &lt;<a class="el" href="xbindex_8h_source.html">xbindex.h</a>&gt;</code><br />
+<code>#include &lt;<a class="el" href="xbfilter_8h_source.html">xbfilter.h</a>&gt;</code><br />
+<code>#include &lt;<a class="el" href="xbsql_8h_source.html">xbsql.h</a>&gt;</code><br />
+</div>
+<p><a href="xbase_8h_source.html">Go to the source code of this file.</a></p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbase_8h_source.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbase_8h_source.html
new file mode 100644
index 0000000..9d6988f
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbase_8h_source.html
@@ -0,0 +1,202 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbase.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbase.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="xbase_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbase.h</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"></span> </div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">Xbase64 Software Library</span></div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment"></span> </div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel</span></div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment"></span> </div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment"></span> </div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment">Email Contact:</span></div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"></span> </div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment"></span> </div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment">*/</span></div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#include &lt;xbconfig.h&gt;</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#include &lt;stdio.h&gt;</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#include &lt;errno.h&gt;</span></div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#include &lt;time.h&gt;</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#include &lt;math.h&gt;</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#ifdef HAVE_INTTYPES_H</span></div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#include &lt;inttypes.h&gt;</span></div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="preprocessor">#ifdef HAVE_STRING_H</span></div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="preprocessor">#include &lt;string.h&gt;</span></div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="preprocessor">#ifdef HAVE_STRINGS_H</span></div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="preprocessor">#include &lt;strings.h&gt;</span></div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="comment">// #ifdef STDC_HEADERS</span></div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="preprocessor">#ifdef HAVE_STDARGS_H</span></div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="preprocessor">#include &lt;stdargs.h&gt;</span></div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="preprocessor">#ifdef HAVE_CTYPE_H</span></div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="preprocessor">#include &lt;ctype.h&gt;</span></div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="preprocessor">#ifdef HAVE_PWD_H</span></div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="preprocessor">#include &lt;pwd.h&gt;</span></div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="preprocessor">#ifdef HAVE_STDARG_H</span></div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="preprocessor">#include &lt;stdarg.h&gt;</span></div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><span class="preprocessor">#ifdef HAVE_STAT_H</span></div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span><span class="preprocessor">#include &lt;sys/stat.h&gt;</span></div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span><span class="preprocessor">#ifdef HAVE_FCNTL_H</span></div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span><span class="preprocessor">#include &lt;fcntl.h&gt;</span></div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span><span class="preprocessor">#ifdef HAVE_UNISTD_H</span></div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span><span class="preprocessor">#include &lt;unistd.h&gt;</span></div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> </div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="preprocessor">#ifdef HAVE_VARARGS_H</span></div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><span class="preprocessor">#ifndef HAVE_STDARG_H</span></div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span><span class="preprocessor">#include &lt;varargs.h&gt;</span></div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> </div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span><span class="preprocessor">#ifdef HAVE_WINDOWS_H</span></div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span><span class="preprocessor">#include &lt;windows.h&gt;</span></div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span><span class="preprocessor">#include &lt;io.h&gt;</span></div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="preprocessor">#include &lt;iomanip&gt;</span></div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="preprocessor">#include &lt;<a class="code" href="xbretcod_8h.html">xbretcod.h</a>&gt;</span></div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span><span class="preprocessor">#include &lt;<a class="code" href="xbtypes_8h.html">xbtypes.h</a>&gt;</span></div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span><span class="preprocessor">#include &lt;<a class="code" href="xbstring_8h.html">xbstring.h</a>&gt;</span></div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span><span class="preprocessor">#include &lt;<a class="code" href="xbssv_8h.html">xbssv.h</a>&gt;</span></div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span><span class="preprocessor">#include &lt;<a class="code" href="xbdate_8h.html">xbdate.h</a>&gt;</span></div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span><span class="preprocessor">#include &lt;<a class="code" href="xbtblmgr_8h.html">xbtblmgr.h</a>&gt;</span></div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span><span class="preprocessor">#include &lt;<a class="code" href="xbxbase_8h.html">xbxbase.h</a>&gt;</span></div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span><span class="preprocessor">#include &lt;<a class="code" href="xblnknod_8h.html">xblnknod.h</a>&gt;</span></div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span><span class="preprocessor">#include &lt;<a class="code" href="xblnklst_8h.html">xblnklst.h</a>&gt;</span></div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span><span class="preprocessor">#include &lt;<a class="code" href="xblnklstord_8h.html">xblnklstord.h</a>&gt;</span></div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span><span class="preprocessor">#include &lt;<a class="code" href="xbfile_8h.html">xbfile.h</a>&gt;</span></div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span><span class="preprocessor">#include &lt;<a class="code" href="xblog_8h.html">xblog.h</a>&gt;</span></div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span><span class="preprocessor">#include &lt;<a class="code" href="xbmemo_8h.html">xbmemo.h</a>&gt;</span></div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span><span class="preprocessor">#include &lt;<a class="code" href="xbbcd_8h.html">xbbcd.h</a>&gt;</span></div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span><span class="preprocessor">#include &lt;<a class="code" href="xbuda_8h.html">xbuda.h</a>&gt;</span></div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span><span class="preprocessor">#include &lt;<a class="code" href="xbexpnode_8h.html">xbexpnode.h</a>&gt;</span></div>
+<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span><span class="preprocessor">#include &lt;<a class="code" href="xbexp_8h.html">xbexp.h</a>&gt;</span></div>
+<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> </div>
+<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span><span class="preprocessor">#include &lt;<a class="code" href="xbtag_8h.html">xbtag.h</a>&gt;</span></div>
+<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span><span class="preprocessor">#include &lt;<a class="code" href="xbblkread_8h.html">xbblkread.h</a>&gt;</span></div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span><span class="preprocessor">#include &lt;<a class="code" href="xbdbf_8h.html">xbdbf.h</a>&gt;</span> <span class="comment">/* dbf base class */</span></div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span><span class="preprocessor">#include &lt;<a class="code" href="xbindex_8h.html">xbindex.h</a>&gt;</span> <span class="comment">/* index base class */</span></div>
+<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span><span class="preprocessor">#include &lt;<a class="code" href="xbfilter_8h.html">xbfilter.h</a>&gt;</span></div>
+<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span><span class="preprocessor">#include &lt;<a class="code" href="xbsql_8h.html">xbsql.h</a>&gt;</span></div>
+<div class="ttc" id="axbbcd_8h_html"><div class="ttname"><a href="xbbcd_8h.html">xbbcd.h</a></div></div>
+<div class="ttc" id="axbblkread_8h_html"><div class="ttname"><a href="xbblkread_8h.html">xbblkread.h</a></div></div>
+<div class="ttc" id="axbdate_8h_html"><div class="ttname"><a href="xbdate_8h.html">xbdate.h</a></div></div>
+<div class="ttc" id="axbdbf_8h_html"><div class="ttname"><a href="xbdbf_8h.html">xbdbf.h</a></div></div>
+<div class="ttc" id="axbexp_8h_html"><div class="ttname"><a href="xbexp_8h.html">xbexp.h</a></div></div>
+<div class="ttc" id="axbexpnode_8h_html"><div class="ttname"><a href="xbexpnode_8h.html">xbexpnode.h</a></div></div>
+<div class="ttc" id="axbfile_8h_html"><div class="ttname"><a href="xbfile_8h.html">xbfile.h</a></div></div>
+<div class="ttc" id="axbfilter_8h_html"><div class="ttname"><a href="xbfilter_8h.html">xbfilter.h</a></div></div>
+<div class="ttc" id="axbindex_8h_html"><div class="ttname"><a href="xbindex_8h.html">xbindex.h</a></div></div>
+<div class="ttc" id="axblnklst_8h_html"><div class="ttname"><a href="xblnklst_8h.html">xblnklst.h</a></div></div>
+<div class="ttc" id="axblnklstord_8h_html"><div class="ttname"><a href="xblnklstord_8h.html">xblnklstord.h</a></div></div>
+<div class="ttc" id="axblnknod_8h_html"><div class="ttname"><a href="xblnknod_8h.html">xblnknod.h</a></div></div>
+<div class="ttc" id="axblog_8h_html"><div class="ttname"><a href="xblog_8h.html">xblog.h</a></div></div>
+<div class="ttc" id="axbmemo_8h_html"><div class="ttname"><a href="xbmemo_8h.html">xbmemo.h</a></div></div>
+<div class="ttc" id="axbretcod_8h_html"><div class="ttname"><a href="xbretcod_8h.html">xbretcod.h</a></div></div>
+<div class="ttc" id="axbsql_8h_html"><div class="ttname"><a href="xbsql_8h.html">xbsql.h</a></div></div>
+<div class="ttc" id="axbssv_8h_html"><div class="ttname"><a href="xbssv_8h.html">xbssv.h</a></div></div>
+<div class="ttc" id="axbstring_8h_html"><div class="ttname"><a href="xbstring_8h.html">xbstring.h</a></div></div>
+<div class="ttc" id="axbtag_8h_html"><div class="ttname"><a href="xbtag_8h.html">xbtag.h</a></div></div>
+<div class="ttc" id="axbtblmgr_8h_html"><div class="ttname"><a href="xbtblmgr_8h.html">xbtblmgr.h</a></div></div>
+<div class="ttc" id="axbtypes_8h_html"><div class="ttname"><a href="xbtypes_8h.html">xbtypes.h</a></div></div>
+<div class="ttc" id="axbuda_8h_html"><div class="ttname"><a href="xbuda_8h.html">xbuda.h</a></div></div>
+<div class="ttc" id="axbxbase_8h_html"><div class="ttname"><a href="xbxbase_8h.html">xbxbase.h</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbbcd_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbbcd_8cpp.html
new file mode 100644
index 0000000..588a841
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbbcd_8cpp.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbbcd.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbbcd.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbbcd_8h.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbbcd_8h.html
new file mode 100644
index 0000000..e5f224b
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbbcd_8h.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbbcd.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbbcd.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="xbbcd_8h_source.html">Go to the source code of this file.</a></p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbbcd_8h_source.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbbcd_8h_source.html
new file mode 100644
index 0000000..adb27a6
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbbcd_8h_source.html
@@ -0,0 +1,172 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbbcd.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbbcd.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="xbbcd_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbbcd.h</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014, 2018, 2019, 2022 Gary A Kunkel</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">*/</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#ifndef __XB_BCD_H__</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#define __XB_BCD_H__</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#ifdef XB_INDEX_SUPPORT</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="comment">// structure for bcd value</span></div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="comment">// next structure superceeded. Different compilers allocate different</span></div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="comment">// sizes to structures with bit fields, can&#39;t count on the size</span></div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="comment">/*</span></div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="comment">struct XBDLLEXPORT xbBcdStrucOld {</span></div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="comment"> unsigned SigDigits : 8; // significant digit count</span></div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="comment"> unsigned Filler : 2; // always set to 1</span></div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="comment"> unsigned EncDigits : 5; // encoded digit count</span></div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="comment"> unsigned Sign : 1; // +/- sign</span></div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="comment"> unsigned char Data[10];</span></div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="comment">};</span></div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="comment">*/</span></div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="keyword">struct </span>XBDLLEXPORT xbBcdStruct {</div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> cSigDigits; <span class="comment">// significant digit count</span></div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> cEncDigits; <span class="comment">// encoded digit count</span></div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> cData[10]; <span class="comment">// data</span></div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span>};</div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="keyword">struct </span>XBDLLEXPORT xbByteSplit {</div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <span class="keywordtype">unsigned</span> c1 : 4;</div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <span class="keywordtype">unsigned</span> c2 : 4;</div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span>};</div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="keyword">class </span>XBDLLEXPORT xbBcd {</div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> xbBcd( <span class="keyword">const</span> xbString &amp;sIn );</div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> xbBcd( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn );</div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> xbBcd( <span class="keyword">const</span> <span class="keywordtype">void</span> *vBcd12In );</div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="keywordtype">void</span> Set( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn );</div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="keywordtype">void</span> Set( <span class="keyword">const</span> <span class="keywordtype">void</span> *cBcd12In );</div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <span class="keywordtype">void</span> Set( <span class="keyword">const</span> xbString &amp;sIn );</div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> </div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="keywordtype">void</span> ToString( xbString &amp;sOut );</div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <span class="keywordtype">void</span> ToDouble( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dOut );</div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <span class="keywordtype">void</span> ToBcd( xbBcdStruct &amp;bcdOut );</div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="keywordtype">void</span> ToChar( <span class="keywordtype">char</span> *cOut );</div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="comment">// const unsigned char * GetBcd() const;</span></div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="keywordtype">void</span> StringToBcd( <span class="keyword">const</span> xbString &amp;sStringIn );</div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> xbInt16 Compare( <span class="keyword">const</span> xbBcd &amp;bcdIn );</div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> xbInt16 Compare( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> d );</div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> </div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *GetData() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="keyword">const</span> <span class="keywordtype">void</span> * GetBcd() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keywordtype">void</span> ctor();</div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> GetEncDigitsNoSign() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keywordtype">unsigned</span> GetSign() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keywordtype">unsigned</span> GetSigDigits() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="keywordtype">unsigned</span> GetActualSigDigits() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span><span class="comment">// xbBcdStruc bcdOld;</span></div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> xbBcdStruct bcd;</div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span>};</div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span>} <span class="comment">/* namespace xb */</span></div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> </div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> </div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span><span class="preprocessor">#endif </span><span class="comment">/* XB_INDEX_SUPPORT */</span><span class="preprocessor"></span></div>
+<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_BCD_H__ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
+<div class="ttc" id="anamespacexb_html_a25f47b226ce924a5c78f97989b0744a2"><div class="ttname"><a href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xb::xbDouble</a></div><div class="ttdeci">double xbDouble</div><div class="ttdef"><b>Definition:</b> xbtypes.h:23</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbblkread_8h.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbblkread_8h.html
new file mode 100644
index 0000000..dca115e
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbblkread_8h.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbblkread.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#namespaces">Namespaces</a> </div>
+ <div class="headertitle"><div class="title">xbblkread.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="xbblkread_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
+Namespaces</h2></td></tr>
+<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbblkread_8h_source.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbblkread_8h_source.html
new file mode 100644
index 0000000..95e7c3e
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbblkread_8h_source.html
@@ -0,0 +1,145 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbblkread.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbblkread.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="xbblkread_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbblkread.h</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022 Gary A Kunkel</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">*/</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#ifndef __XB_BLKREAD_H__</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#define __XB_BLKREAD_H__</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifdef XB_BLOCKREAD_SUPPORT</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="keyword">class </span>XBDLLEXPORT xbBlockRead {</div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> xbBlockRead( <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> * d );</div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> ~xbBlockRead();</div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="keywordtype">void</span> DumpReadBlockInternals();</div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> </div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> xbInt16 Init( xbUInt32 ulBlkSize = 0 );</div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> xbUInt32 GetBlockFirstRecNo() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> xbUInt32 GetBlockRecCnt() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> xbUInt32 GetBlockSize() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> xbInt16 GetRecord( xbUInt32 ulRecNo ); <span class="comment">// retrieve a data record from a block to RecBuf</span></div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> xbInt16 SetBlockSize( xbUInt32 ulBlkSize );</div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> </div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> xbInt16 GetBlockForRecNo( xbUInt32 ulRecNo ); <span class="comment">// retrieve block from disk for a given record number</span></div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="keywordtype">char</span> *pBlock; <span class="comment">// block pointer</span></div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> xbUInt32 ulBlkSize; <span class="comment">// block size in bytes</span></div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> xbUInt32 ulFirstBlkRec; <span class="comment">// first recod number in the block</span></div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> xbUInt32 ulRecCnt; <span class="comment">// number of records in block</span></div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> xbUInt32 ulMaxRecs; <span class="comment">// max number of records block can handle</span></div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bEof; <span class="comment">// EOF flag</span></div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *dbf; <span class="comment">// reference to associated dbf file</span></div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span><span class="comment">// xbXBase *xbase; // reference to main xbXBase structure</span></div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> time_t tFmTime; <span class="comment">// file modify time at time of block read</span></div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span>};</div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span><span class="preprocessor">#endif </span><span class="comment">// XB_BLOCKREAD</span></div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span>} <span class="comment">/* namespace */</span></div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_BLOCKREAD_H__ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
+<div class="ttc" id="anamespacexb_html_ab1a750481dd487f0d384aa1d200dff0f"><div class="ttname"><a href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xb::xbBool</a></div><div class="ttdeci">short int xbBool</div><div class="ttdef"><b>Definition:</b> xbtypes.h:24</div></div>
+<div class="ttc" id="anamespacexb_html_ab2eae4b4732466698a7fdd89d77ba53b"><div class="ttname"><a href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xb::xbDbf</a></div><div class="ttdeci">class XBDLLEXPORT xbDbf</div><div class="ttdef"><b>Definition:</b> xbtblmgr.h:28</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbblockread_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbblockread_8cpp.html
new file mode 100644
index 0000000..e4c9a2f
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbblockread_8cpp.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbblockread.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbblockread.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbcrix_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbcrix_8cpp.html
new file mode 100644
index 0000000..e844b33
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbcrix_8cpp.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.2/src/sql/xbcrix.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_25b94c3afce00ed38231227d8141f932.html">sql</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbcrix.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbcrtbl_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbcrtbl_8cpp.html
new file mode 100644
index 0000000..c4e3a34
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbcrtbl_8cpp.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/sql/xbcrtbl.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_25b94c3afce00ed38231227d8141f932.html">sql</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbcrtbl.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbcrtbl_8save2_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbcrtbl_8save2_8cpp.html
new file mode 100644
index 0000000..5875287
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbcrtbl_8save2_8cpp.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.2/src/sql/xbcrtbl.save2.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_25b94c3afce00ed38231227d8141f932.html">sql</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbcrtbl.save2.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbcrtbl_8save_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbcrtbl_8save_8cpp.html
new file mode 100644
index 0000000..20b4367
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbcrtbl_8save_8cpp.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.2/src/sql/xbcrtbl.save.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_25b94c3afce00ed38231227d8141f932.html">sql</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbcrtbl.save.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdate_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdate_8cpp.html
new file mode 100644
index 0000000..3ac1b41
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdate_8cpp.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbdate.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#namespaces">Namespaces</a> </div>
+ <div class="headertitle"><div class="title">xbdate.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+<code>#include &lt;time.h&gt;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
+Namespaces</h2></td></tr>
+<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdate_8h.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdate_8h.html
new file mode 100644
index 0000000..39d4265
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdate_8h.html
@@ -0,0 +1,165 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbdate.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#namespaces">Namespaces</a> &#124;
+<a href="#define-members">Macros</a> </div>
+ <div class="headertitle"><div class="title">xbdate.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="xbdate_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html">xb::xbDate</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classxb_1_1xbDate.html" title="xbDate class.">xbDate</a> class. <a href="classxb_1_1xbDate.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
+Namespaces</h2></td></tr>
+<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a8f22704d3fd93fa85dd93b6c699e8178"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdate_8h.html#a8f22704d3fd93fa85dd93b6c699e8178">XB_FMT_WEEK</a>&#160;&#160;&#160;1</td></tr>
+<tr class="separator:a8f22704d3fd93fa85dd93b6c699e8178"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aeacf2f7cc897ab5bd64781c0fb52b75d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdate_8h.html#aeacf2f7cc897ab5bd64781c0fb52b75d">XB_FMT_MONTH</a>&#160;&#160;&#160;2</td></tr>
+<tr class="separator:aeacf2f7cc897ab5bd64781c0fb52b75d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa29d78982a9e007874af1c4f4e4d1aa4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdate_8h.html#aa29d78982a9e007874af1c4f4e4d1aa4">XB_FMT_YEAR</a>&#160;&#160;&#160;3</td></tr>
+<tr class="separator:aa29d78982a9e007874af1c4f4e4d1aa4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a119f32fda399e2ebc2d734012a130e8f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdate_8h.html#a119f32fda399e2ebc2d734012a130e8f">JUL_OFFSET</a>&#160;&#160;&#160;1721425L</td></tr>
+<tr class="separator:a119f32fda399e2ebc2d734012a130e8f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a id="a119f32fda399e2ebc2d734012a130e8f" name="a119f32fda399e2ebc2d734012a130e8f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a119f32fda399e2ebc2d734012a130e8f">&#9670;&nbsp;</a></span>JUL_OFFSET</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define JUL_OFFSET&#160;&#160;&#160;1721425L</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aeacf2f7cc897ab5bd64781c0fb52b75d" name="aeacf2f7cc897ab5bd64781c0fb52b75d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aeacf2f7cc897ab5bd64781c0fb52b75d">&#9670;&nbsp;</a></span>XB_FMT_MONTH</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_FMT_MONTH&#160;&#160;&#160;2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8f22704d3fd93fa85dd93b6c699e8178" name="a8f22704d3fd93fa85dd93b6c699e8178"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8f22704d3fd93fa85dd93b6c699e8178">&#9670;&nbsp;</a></span>XB_FMT_WEEK</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_FMT_WEEK&#160;&#160;&#160;1</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa29d78982a9e007874af1c4f4e4d1aa4" name="aa29d78982a9e007874af1c4f4e4d1aa4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa29d78982a9e007874af1c4f4e4d1aa4">&#9670;&nbsp;</a></span>XB_FMT_YEAR</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_FMT_YEAR&#160;&#160;&#160;3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdate_8h_source.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdate_8h_source.html
new file mode 100644
index 0000000..10178d8
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdate_8h_source.html
@@ -0,0 +1,184 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbdate.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbdate.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="xbdate_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbdate.h</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022 Gary A Kunkel</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">*/</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#ifndef __XB_XBDATE_H__</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#define __XB_XBDATE_H__</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifdef CMAKE_COMPILER_IS_GNUCC</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#pragma interface</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"><a class="line" href="xbdate_8h.html#a8f22704d3fd93fa85dd93b6c699e8178"> 27</a></span><span class="preprocessor">#define XB_FMT_WEEK 1</span></div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"><a class="line" href="xbdate_8h.html#aeacf2f7cc897ab5bd64781c0fb52b75d"> 28</a></span><span class="preprocessor">#define XB_FMT_MONTH 2</span></div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="xbdate_8h.html#aa29d78982a9e007874af1c4f4e4d1aa4"> 29</a></span><span class="preprocessor">#define XB_FMT_YEAR 3</span></div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="comment">// next value is added to the date calculation to match dbase calculation</span></div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="comment">// first valid dbase date is 01/01/0001</span></div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"><a class="line" href="xbdate_8h.html#a119f32fda399e2ebc2d734012a130e8f"> 33</a></span><span class="preprocessor">#define JUL_OFFSET 1721425L</span></div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"><a class="line" href="classxb_1_1xbDate.html"> 62</a></span><span class="keyword">class </span>XBDLLEXPORT <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> : <span class="keyword">public</span> <a class="code hl_class" href="classxb_1_1xbSsv.html">xbSsv</a> {</div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a>();</div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a>( <span class="keyword">const</span> <span class="keywordtype">char</span> * Date8 );</div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a>( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Date8 );</div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a>( xbInt32 lJulDate );</div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a>( xbUInt16 iInit ); <span class="comment">// Constructor used to set the static variables, also defaults to sysdate</span></div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <a class="code hl_class" href="classxb_1_1xbDate.html">~xbDate</a>();</div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;d );</div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <span class="keywordtype">void</span> operator+=( xbInt32 i );</div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="keywordtype">void</span> operator-=( xbInt32 i );</div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="keywordtype">void</span> operator++( xbInt32 i );</div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keywordtype">void</span> operator--( xbInt32 i );</div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> </div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> xbInt32 operator-( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp; ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * operator-( xbInt32 i );</div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * operator+( xbInt32 i );</div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator==( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp; ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator!=( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp; ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator&lt; ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp; ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator&gt; ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp; ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator&lt;=( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp; ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator&gt;=( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp; ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> xbInt16 CalcRollingCenturyForYear( xbInt16 year ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> xbInt16 CenturyOf() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> xbInt16 CharDayOf( <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOutCharDay );</div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> xbInt16 CharMonthOf( <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOutCharMonth );</div>
+<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> DateIsValid ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sDate8 ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> xbInt16 DayOf( xbInt16 iFormat ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> xbInt16 CTOD( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sCtodInDate );</div>
+<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> xbInt16 FormatDate( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFmtIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFmtOut );</div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *Str() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsLeapYear( xbInt16 iYear ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsLeapYear() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsNull() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> xbInt32 JulianDays() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> xbInt16 JulToDate8( xbInt32 lJulDate );</div>
+<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> xbInt16 LastDayOfMonth();</div>
+<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> xbInt16 MonthOf() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> xbInt16 Set( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Date8 );</div>
+<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> xbInt16 Sysdate();</div>
+<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> xbInt16 YearOf() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span><span class="preprocessor">#ifdef XB_DEBUG_SUPPORT</span></div>
+<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="keywordtype">void</span> Dump( <span class="keyword">const</span> <span class="keywordtype">char</span> * title );</div>
+<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="keywordtype">void</span> DumpDateTables();</div>
+<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> </div>
+<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> <span class="keywordtype">void</span> SetDateTables();</div>
+<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sDate8; <span class="comment">// CCYYMMDD date format ie; 20140718</span></div>
+<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="comment">// Null date is identified by sDate.Len() &lt; 8</span></div>
+<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> </div>
+<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <span class="keyword">static</span> <span class="keywordtype">int</span> iAggregatedDaysInMonths[2][13];</div>
+<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <span class="keyword">static</span> <span class="keywordtype">int</span> iDaysInMonths[2][13];</div>
+<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span>};</div>
+<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> </div>
+<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span>} <span class="comment">/* namespace */</span></div>
+<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span><span class="preprocessor">#endif </span><span class="comment">/*__XB_XBDATE_H__ */</span><span class="preprocessor"></span></div>
+<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> </div>
+<div class="ttc" id="aclassxb_1_1xbDate_html"><div class="ttname"><a href="classxb_1_1xbDate.html">xb::xbDate</a></div><div class="ttdoc">xbDate class.</div><div class="ttdef"><b>Definition:</b> xbdate.h:62</div></div>
+<div class="ttc" id="aclassxb_1_1xbSsv_html"><div class="ttname"><a href="classxb_1_1xbSsv.html">xb::xbSsv</a></div><div class="ttdoc">Class for handling shared system variables.</div><div class="ttdef"><b>Definition:</b> xbssv.h:59</div></div>
+<div class="ttc" id="aclassxb_1_1xbString_html"><div class="ttname"><a href="classxb_1_1xbString.html">xb::xbString</a></div><div class="ttdoc">Class for handling string data.</div><div class="ttdef"><b>Definition:</b> xbstring.h:50</div></div>
+<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
+<div class="ttc" id="anamespacexb_html_ab1a750481dd487f0d384aa1d200dff0f"><div class="ttname"><a href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xb::xbBool</a></div><div class="ttdeci">short int xbBool</div><div class="ttdef"><b>Definition:</b> xbtypes.h:24</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdbf3_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdbf3_8cpp.html
new file mode 100644
index 0000000..5adadaa
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdbf3_8cpp.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbdbf3.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbdbf3.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdbf4_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdbf4_8cpp.html
new file mode 100644
index 0000000..5395036
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdbf4_8cpp.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbdbf4.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbdbf4.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdbf_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdbf_8cpp.html
new file mode 100644
index 0000000..c4ea1d7
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdbf_8cpp.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbdbf.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#namespaces">Namespaces</a> </div>
+ <div class="headertitle"><div class="title">xbdbf.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
+Namespaces</h2></td></tr>
+<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdbf_8h.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdbf_8h.html
new file mode 100644
index 0000000..19a18aa
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdbf_8h.html
@@ -0,0 +1,456 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbdbf.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#namespaces">Namespaces</a> &#124;
+<a href="#define-members">Macros</a> </div>
+ <div class="headertitle"><div class="title">xbdbf.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="xbdbf_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structxb_1_1xbSchema.html">xb::xbSchema</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Schema used for defining tables with CreateTable methods. <a href="structxb_1_1xbSchema.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html">xb::xbDbf</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Base class for handling dbf files/tables. <a href="classxb_1_1xbDbf.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
+Namespaces</h2></td></tr>
+<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a20f739b9d9dc6a002a246a999e76aeaa"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#a20f739b9d9dc6a002a246a999e76aeaa">XB_CHAR_FLD</a>&#160;&#160;&#160;'C'</td></tr>
+<tr class="separator:a20f739b9d9dc6a002a246a999e76aeaa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2f6d5073af761bc1a806a2c7b1c1d886"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#a2f6d5073af761bc1a806a2c7b1c1d886">XB_LOGICAL_FLD</a>&#160;&#160;&#160;'L'</td></tr>
+<tr class="separator:a2f6d5073af761bc1a806a2c7b1c1d886"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae9fb6d69cc5edc94d36ae403c22ec1c6"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#ae9fb6d69cc5edc94d36ae403c22ec1c6">XB_NUMERIC_FLD</a>&#160;&#160;&#160;'N'</td></tr>
+<tr class="separator:ae9fb6d69cc5edc94d36ae403c22ec1c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7f685e6f5fe804b2174725a27ce73adc"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#a7f685e6f5fe804b2174725a27ce73adc">XB_DATE_FLD</a>&#160;&#160;&#160;'D'</td></tr>
+<tr class="separator:a7f685e6f5fe804b2174725a27ce73adc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a23fa19b19cb43bd6dcc59a5a3f6c30ad"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#a23fa19b19cb43bd6dcc59a5a3f6c30ad">XB_MEMO_FLD</a>&#160;&#160;&#160;'M'</td></tr>
+<tr class="separator:a23fa19b19cb43bd6dcc59a5a3f6c30ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a96ab4218d70ab603b4866354ce8c18cd"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#a96ab4218d70ab603b4866354ce8c18cd">XB_FLOAT_FLD</a>&#160;&#160;&#160;'F'</td></tr>
+<tr class="separator:a96ab4218d70ab603b4866354ce8c18cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a843ca4569326dbd1d0647899b0eb512f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#a843ca4569326dbd1d0647899b0eb512f">XB_CLOSED</a>&#160;&#160;&#160;0</td></tr>
+<tr class="separator:a843ca4569326dbd1d0647899b0eb512f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9a6dafbb07cac744eb14094efa739409"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#a9a6dafbb07cac744eb14094efa739409">XB_OPEN</a>&#160;&#160;&#160;1</td></tr>
+<tr class="separator:a9a6dafbb07cac744eb14094efa739409"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a26e7eeda69f32bc88b08a208ca9e7991"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#a26e7eeda69f32bc88b08a208ca9e7991">XB_UPDATED</a>&#160;&#160;&#160;2</td></tr>
+<tr class="separator:a26e7eeda69f32bc88b08a208ca9e7991"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a395a2e101a793bacabf6bc079d178e29"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#a395a2e101a793bacabf6bc079d178e29">XB_LOCK</a>&#160;&#160;&#160;0</td></tr>
+<tr class="separator:a395a2e101a793bacabf6bc079d178e29"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a21389b73e7b4e7e185fa635b9e354c2e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#a21389b73e7b4e7e185fa635b9e354c2e">XB_UNLOCK</a>&#160;&#160;&#160;1</td></tr>
+<tr class="separator:a21389b73e7b4e7e185fa635b9e354c2e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4c08d01bd69e295b001bd00a228d8106"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#a4c08d01bd69e295b001bd00a228d8106">LK_DBASE</a>&#160;&#160;&#160;1</td></tr>
+<tr class="separator:a4c08d01bd69e295b001bd00a228d8106"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a01d6d7910b0da2170eb904a97d864a41"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#a01d6d7910b0da2170eb904a97d864a41">LK_CLIPPER</a>&#160;&#160;&#160;2</td></tr>
+<tr class="separator:a01d6d7910b0da2170eb904a97d864a41"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a65e29186276222f460a7171803e07adf"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#a65e29186276222f460a7171803e07adf">LK_FOX</a>&#160;&#160;&#160;3</td></tr>
+<tr class="separator:a65e29186276222f460a7171803e07adf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a42aea0ccd94f7422c8e0d7422dce85a4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#a42aea0ccd94f7422c8e0d7422dce85a4">LK_XBASE64</a>&#160;&#160;&#160;9</td></tr>
+<tr class="separator:a42aea0ccd94f7422c8e0d7422dce85a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8bd17730da3ba5c55a6a07bc482dd0e4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#a8bd17730da3ba5c55a6a07bc482dd0e4">XB_ALL_RECS</a>&#160;&#160;&#160;0</td></tr>
+<tr class="separator:a8bd17730da3ba5c55a6a07bc482dd0e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1c44bb25bf2e23a3a9d3d2312df0b592"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#a1c44bb25bf2e23a3a9d3d2312df0b592">XB_ACTIVE_RECS</a>&#160;&#160;&#160;1</td></tr>
+<tr class="separator:a1c44bb25bf2e23a3a9d3d2312df0b592"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acc0a441854ed92b9d65d1181a97cad43"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#acc0a441854ed92b9d65d1181a97cad43">XB_DELETED_RECS</a>&#160;&#160;&#160;2</td></tr>
+<tr class="separator:acc0a441854ed92b9d65d1181a97cad43"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6fe10b307878b4612b04c2c876a4a592"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#a6fe10b307878b4612b04c2c876a4a592">XB_OVERLAY</a>&#160;&#160;&#160;1</td></tr>
+<tr class="separator:a6fe10b307878b4612b04c2c876a4a592"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7b797840abdb3291373d15978103a778"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#a7b797840abdb3291373d15978103a778">XB_DONTOVERLAY</a>&#160;&#160;&#160;0</td></tr>
+<tr class="separator:a7b797840abdb3291373d15978103a778"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ada1115f596131888c04df61546b198c4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#ada1115f596131888c04df61546b198c4">XB_CHAREOF</a>&#160;&#160;&#160;'\x1A' /* end of DBF */</td></tr>
+<tr class="separator:ada1115f596131888c04df61546b198c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a35d56cac7959c1e5c761684ced3f1e17"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#a35d56cac7959c1e5c761684ced3f1e17">XB_CHARHDR</a>&#160;&#160;&#160;'\x0D' /* header terminator */</td></tr>
+<tr class="separator:a35d56cac7959c1e5c761684ced3f1e17"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a id="a01d6d7910b0da2170eb904a97d864a41" name="a01d6d7910b0da2170eb904a97d864a41"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a01d6d7910b0da2170eb904a97d864a41">&#9670;&nbsp;</a></span>LK_CLIPPER</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LK_CLIPPER&#160;&#160;&#160;2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a4c08d01bd69e295b001bd00a228d8106" name="a4c08d01bd69e295b001bd00a228d8106"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4c08d01bd69e295b001bd00a228d8106">&#9670;&nbsp;</a></span>LK_DBASE</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LK_DBASE&#160;&#160;&#160;1</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a65e29186276222f460a7171803e07adf" name="a65e29186276222f460a7171803e07adf"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a65e29186276222f460a7171803e07adf">&#9670;&nbsp;</a></span>LK_FOX</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LK_FOX&#160;&#160;&#160;3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a42aea0ccd94f7422c8e0d7422dce85a4" name="a42aea0ccd94f7422c8e0d7422dce85a4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a42aea0ccd94f7422c8e0d7422dce85a4">&#9670;&nbsp;</a></span>LK_XBASE64</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LK_XBASE64&#160;&#160;&#160;9</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1c44bb25bf2e23a3a9d3d2312df0b592" name="a1c44bb25bf2e23a3a9d3d2312df0b592"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1c44bb25bf2e23a3a9d3d2312df0b592">&#9670;&nbsp;</a></span>XB_ACTIVE_RECS</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_ACTIVE_RECS&#160;&#160;&#160;1</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8bd17730da3ba5c55a6a07bc482dd0e4" name="a8bd17730da3ba5c55a6a07bc482dd0e4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8bd17730da3ba5c55a6a07bc482dd0e4">&#9670;&nbsp;</a></span>XB_ALL_RECS</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_ALL_RECS&#160;&#160;&#160;0</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a20f739b9d9dc6a002a246a999e76aeaa" name="a20f739b9d9dc6a002a246a999e76aeaa"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a20f739b9d9dc6a002a246a999e76aeaa">&#9670;&nbsp;</a></span>XB_CHAR_FLD</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_CHAR_FLD&#160;&#160;&#160;'C'</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ada1115f596131888c04df61546b198c4" name="ada1115f596131888c04df61546b198c4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ada1115f596131888c04df61546b198c4">&#9670;&nbsp;</a></span>XB_CHAREOF</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_CHAREOF&#160;&#160;&#160;'\x1A' /* end of DBF */</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a35d56cac7959c1e5c761684ced3f1e17" name="a35d56cac7959c1e5c761684ced3f1e17"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a35d56cac7959c1e5c761684ced3f1e17">&#9670;&nbsp;</a></span>XB_CHARHDR</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_CHARHDR&#160;&#160;&#160;'\x0D' /* header terminator */</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a843ca4569326dbd1d0647899b0eb512f" name="a843ca4569326dbd1d0647899b0eb512f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a843ca4569326dbd1d0647899b0eb512f">&#9670;&nbsp;</a></span>XB_CLOSED</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_CLOSED&#160;&#160;&#160;0</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7f685e6f5fe804b2174725a27ce73adc" name="a7f685e6f5fe804b2174725a27ce73adc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7f685e6f5fe804b2174725a27ce73adc">&#9670;&nbsp;</a></span>XB_DATE_FLD</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_DATE_FLD&#160;&#160;&#160;'D'</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="acc0a441854ed92b9d65d1181a97cad43" name="acc0a441854ed92b9d65d1181a97cad43"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acc0a441854ed92b9d65d1181a97cad43">&#9670;&nbsp;</a></span>XB_DELETED_RECS</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_DELETED_RECS&#160;&#160;&#160;2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7b797840abdb3291373d15978103a778" name="a7b797840abdb3291373d15978103a778"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7b797840abdb3291373d15978103a778">&#9670;&nbsp;</a></span>XB_DONTOVERLAY</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_DONTOVERLAY&#160;&#160;&#160;0</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a96ab4218d70ab603b4866354ce8c18cd" name="a96ab4218d70ab603b4866354ce8c18cd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a96ab4218d70ab603b4866354ce8c18cd">&#9670;&nbsp;</a></span>XB_FLOAT_FLD</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_FLOAT_FLD&#160;&#160;&#160;'F'</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a395a2e101a793bacabf6bc079d178e29" name="a395a2e101a793bacabf6bc079d178e29"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a395a2e101a793bacabf6bc079d178e29">&#9670;&nbsp;</a></span>XB_LOCK</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_LOCK&#160;&#160;&#160;0</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2f6d5073af761bc1a806a2c7b1c1d886" name="a2f6d5073af761bc1a806a2c7b1c1d886"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2f6d5073af761bc1a806a2c7b1c1d886">&#9670;&nbsp;</a></span>XB_LOGICAL_FLD</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_LOGICAL_FLD&#160;&#160;&#160;'L'</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a23fa19b19cb43bd6dcc59a5a3f6c30ad" name="a23fa19b19cb43bd6dcc59a5a3f6c30ad"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a23fa19b19cb43bd6dcc59a5a3f6c30ad">&#9670;&nbsp;</a></span>XB_MEMO_FLD</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_MEMO_FLD&#160;&#160;&#160;'M'</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae9fb6d69cc5edc94d36ae403c22ec1c6" name="ae9fb6d69cc5edc94d36ae403c22ec1c6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae9fb6d69cc5edc94d36ae403c22ec1c6">&#9670;&nbsp;</a></span>XB_NUMERIC_FLD</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_NUMERIC_FLD&#160;&#160;&#160;'N'</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9a6dafbb07cac744eb14094efa739409" name="a9a6dafbb07cac744eb14094efa739409"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9a6dafbb07cac744eb14094efa739409">&#9670;&nbsp;</a></span>XB_OPEN</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_OPEN&#160;&#160;&#160;1</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6fe10b307878b4612b04c2c876a4a592" name="a6fe10b307878b4612b04c2c876a4a592"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6fe10b307878b4612b04c2c876a4a592">&#9670;&nbsp;</a></span>XB_OVERLAY</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_OVERLAY&#160;&#160;&#160;1</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a21389b73e7b4e7e185fa635b9e354c2e" name="a21389b73e7b4e7e185fa635b9e354c2e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a21389b73e7b4e7e185fa635b9e354c2e">&#9670;&nbsp;</a></span>XB_UNLOCK</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_UNLOCK&#160;&#160;&#160;1</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a26e7eeda69f32bc88b08a208ca9e7991" name="a26e7eeda69f32bc88b08a208ca9e7991"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a26e7eeda69f32bc88b08a208ca9e7991">&#9670;&nbsp;</a></span>XB_UPDATED</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_UPDATED&#160;&#160;&#160;2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdbf_8h_source.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdbf_8h_source.html
new file mode 100644
index 0000000..4013491
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdbf_8h_source.html
@@ -0,0 +1,614 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbdbf.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbdbf.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="xbdbf_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbdbf.h</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">*/</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#ifndef __XB_XBDBF_H__</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#define __XB_XBDBF_H__</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="comment">//#ifdef CMAKE_COMPILER_IS_GNUCC</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="comment">//#pragma interface</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="comment">//#endif</span></div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="comment">/*****************************/</span></div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="comment">/* Field Types */</span></div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#a20f739b9d9dc6a002a246a999e76aeaa"> 29</a></span><span class="preprocessor">#define XB_CHAR_FLD &#39;C&#39;</span></div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#a2f6d5073af761bc1a806a2c7b1c1d886"> 30</a></span><span class="preprocessor">#define XB_LOGICAL_FLD &#39;L&#39;</span></div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#ae9fb6d69cc5edc94d36ae403c22ec1c6"> 31</a></span><span class="preprocessor">#define XB_NUMERIC_FLD &#39;N&#39;</span></div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#a7f685e6f5fe804b2174725a27ce73adc"> 32</a></span><span class="preprocessor">#define XB_DATE_FLD &#39;D&#39;</span></div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#a23fa19b19cb43bd6dcc59a5a3f6c30ad"> 33</a></span><span class="preprocessor">#define XB_MEMO_FLD &#39;M&#39;</span></div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#a96ab4218d70ab603b4866354ce8c18cd"> 34</a></span><span class="preprocessor">#define XB_FLOAT_FLD &#39;F&#39;</span></div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="comment">/*****************************/</span></div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="comment">/* File Status Codes */</span></div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#a843ca4569326dbd1d0647899b0eb512f"> 39</a></span><span class="preprocessor">#define XB_CLOSED 0</span></div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#a9a6dafbb07cac744eb14094efa739409"> 40</a></span><span class="preprocessor">#define XB_OPEN 1</span></div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#a26e7eeda69f32bc88b08a208ca9e7991"> 41</a></span><span class="preprocessor">#define XB_UPDATED 2</span></div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="comment">/*****************************/</span></div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="comment">/* File Access Modes */</span></div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="comment">// #define XB_SINGLE_USER 0 // file buffering on</span></div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="comment">// #define XB_MULTI_USER 1 // file buffering off</span></div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="comment">/*****************************/</span></div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="comment">/* File Lock Functions */</span></div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#a395a2e101a793bacabf6bc079d178e29"> 51</a></span><span class="preprocessor">#define XB_LOCK 0</span></div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#a21389b73e7b4e7e185fa635b9e354c2e"> 52</a></span><span class="preprocessor">#define XB_UNLOCK 1</span></div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#a4c08d01bd69e295b001bd00a228d8106"> 54</a></span><span class="preprocessor">#define LK_DBASE 1</span></div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#a01d6d7910b0da2170eb904a97d864a41"> 55</a></span><span class="preprocessor">#define LK_CLIPPER 2 </span><span class="comment">// future</span></div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#a65e29186276222f460a7171803e07adf"> 56</a></span><span class="preprocessor">#define LK_FOX 3 </span><span class="comment">// future</span></div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#a42aea0ccd94f7422c8e0d7422dce85a4"> 57</a></span><span class="preprocessor">#define LK_XBASE64 9 </span><span class="comment">// future</span></div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> </div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span><span class="comment">/*****************************/</span></div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span><span class="comment">/* Record retrieve options */</span></div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#a8bd17730da3ba5c55a6a07bc482dd0e4"> 61</a></span><span class="preprocessor">#define XB_ALL_RECS 0</span></div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#a1c44bb25bf2e23a3a9d3d2312df0b592"> 62</a></span><span class="preprocessor">#define XB_ACTIVE_RECS 1</span></div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#acc0a441854ed92b9d65d1181a97cad43"> 63</a></span><span class="preprocessor">#define XB_DELETED_RECS 2</span></div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span><span class="comment">/*****************************/</span></div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span><span class="comment">/* Other defines */</span></div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> </div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#a6fe10b307878b4612b04c2c876a4a592"> 69</a></span><span class="preprocessor">#define XB_OVERLAY 1</span></div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#a7b797840abdb3291373d15978103a778"> 70</a></span><span class="preprocessor">#define XB_DONTOVERLAY 0</span></div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#ada1115f596131888c04df61546b198c4"> 71</a></span><span class="preprocessor">#define XB_CHAREOF &#39;\x1A&#39; </span><span class="comment">/* end of DBF */</span><span class="preprocessor"></span></div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#a35d56cac7959c1e5c761684ced3f1e17"> 72</a></span><span class="preprocessor">#define XB_CHARHDR &#39;\x0D&#39; </span><span class="comment">/* header terminator */</span><span class="preprocessor"></span></div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"><a class="line" href="structxb_1_1xbSchema.html"> 95</a></span><span class="keyword">struct </span>XBDLLEXPORT <a class="code hl_struct" href="structxb_1_1xbSchema.html">xbSchema</a> {</div>
+<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"><a class="line" href="structxb_1_1xbSchema.html#a514183856094123fd37df67885b4681e"> 96</a></span> <span class="keywordtype">char</span> cFieldName[11];</div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"><a class="line" href="structxb_1_1xbSchema.html#a1d612b2ed5dc0b0289c9e91b3cda3a25"> 97</a></span> <span class="keywordtype">char</span> <a class="code hl_variable" href="structxb_1_1xbSchema.html#a1d612b2ed5dc0b0289c9e91b3cda3a25">cType</a>;</div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"><a class="line" href="structxb_1_1xbSchema.html#a2da554af25ef628acf59bb52996056ac"> 98</a></span> xbInt16 <a class="code hl_variable" href="structxb_1_1xbSchema.html#a2da554af25ef628acf59bb52996056ac">iFieldLen</a>; <span class="comment">/* fields are stored as one byte on record*/</span></div>
+<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"><a class="line" href="structxb_1_1xbSchema.html#a55bab3bb69dee3508d168c93e182d4b9"> 99</a></span> xbInt16 <a class="code hl_variable" href="structxb_1_1xbSchema.html#a55bab3bb69dee3508d168c93e182d4b9">iNoOfDecs</a>;</div>
+<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span>};</div>
+<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> </div>
+<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span><span class="keyword">struct </span>XBDLLEXPORT xbSchemaRec {</div>
+<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="keywordtype">char</span> cFieldName[11]; <span class="comment">/* ASCIIZ field name */</span></div>
+<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="keywordtype">char</span> cType; <span class="comment">/* field type */</span></div>
+<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <span class="keywordtype">char</span> *pAddress; <span class="comment">/* pointer to field in record buffer 1 */</span></div>
+<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> cFieldLen; <span class="comment">/* fields are stored as one byte on record */</span></div>
+<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> cNoOfDecs;</div>
+<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <span class="keywordtype">char</span> *pAddress2; <span class="comment">/* pointer to field in record buffer 2 */</span></div>
+<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> xbInt16 iLongFieldLen; <span class="comment">/* to handle long field lengths */</span></div>
+<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> cIxFlag; <span class="comment">/* DBase IV Index field flag */</span></div>
+<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span>};</div>
+<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> </div>
+<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> </div>
+<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> </div>
+<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span><span class="preprocessor">#ifdef XB_INDEX_SUPPORT</span></div>
+<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span><span class="keyword">class </span>XBDLLEXPORT xbIx;</div>
+<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span><span class="comment">// structure for file list, each open DBF file can have one or more index files</span></div>
+<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span><span class="keyword">struct </span>XBDLLEXPORT xbIxList {</div>
+<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> xbIxList *next;</div>
+<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> xbIx *ix;</div>
+<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> xbString *sFmt;</div>
+<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span>};</div>
+<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span><span class="preprocessor">#endif </span><span class="comment">// XB_INDEX_SUPPORT</span></div>
+<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span><span class="comment"></span> </div>
+<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> </div>
+<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> </div>
+<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html"> 150</a></span><span class="keyword">class </span>XBDLLEXPORT <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> : <span class="keyword">public</span> <a class="code hl_class" href="classxb_1_1xbFile.html">xbFile</a> {</div>
+<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> </div>
+<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a>( <a class="code hl_class" href="classxb_1_1xbXBase.html">xbXBase</a> *x );</div>
+<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="keyword">virtual</span> <a class="code hl_class" href="classxb_1_1xbDbf.html">~xbDbf</a>();</div>
+<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> </div>
+<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="keyword">virtual</span> xbInt16 Abort();</div>
+<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> <span class="keyword">virtual</span> xbInt16 AppendRecord();</div>
+<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <span class="keyword">virtual</span> xbInt16 BlankRecord();</div>
+<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> <span class="keyword">virtual</span> xbInt16 Commit();</div>
+<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> <span class="keyword">virtual</span> xbInt16 Close();</div>
+<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> <span class="keyword">virtual</span> xbInt16 CopyDbfStructure( <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> *dNewTable, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTableAlias, xbInt16 iOverlay, xbInt16 iShareMode );</div>
+<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a73e41bfe679dd06ab16c436652df93f1"> 162</a></span> <span class="keyword">virtual</span> xbInt16 <a class="code hl_function" href="classxb_1_1xbDbf.html#a73e41bfe679dd06ab16c436652df93f1">CreateTable</a> ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sAlias, <a class="code hl_struct" href="structxb_1_1xbSchema.html">xbSchema</a> *pSchema, xbInt16 iOverlay, xbInt16 iShareMode ) = 0;</div>
+<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> <span class="keyword">virtual</span> xbInt16 DeleteTable ();</div>
+<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> <span class="keyword">virtual</span> xbInt16 DeleteAll ( xbInt16 iOption );</div>
+<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <span class="keyword">virtual</span> xbInt16 DeleteAllRecords ();</div>
+<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> <span class="keyword">virtual</span> xbInt16 DeleteRecord ();</div>
+<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> <span class="keyword">virtual</span> xbInt16 DumpHeader ( xbInt16 iOption );</div>
+<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <span class="keyword">virtual</span> xbInt16 DumpRecord ( xbUInt32 ulRecNo, xbInt16 iOutputDest = 0, xbInt16 iOutputFmt = 0 );</div>
+<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <span class="keyword">virtual</span> xbInt16 GetAutoCommit () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> <span class="keyword">virtual</span> xbInt16 GetAutoCommit ( xbInt16 iOption ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> <span class="keyword">virtual</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetBof ();</div>
+<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="keyword">virtual</span> xbUInt32 GetCurRecNo () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <span class="keyword">virtual</span> xbInt16 GetDbfStatus () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> <span class="keyword">virtual</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetEof ();</div>
+<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <span class="keyword">virtual</span> xbInt32 GetFieldCnt () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <span class="keyword">virtual</span> xbInt16 GetFirstRecord ();</div>
+<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> <span class="keyword">virtual</span> xbInt16 GetFirstRecord ( xbInt16 iOption );</div>
+<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#ad56be2756b7a9f8318d9ba5cf215dafb"> 178</a></span> <span class="keyword">virtual</span> xbUInt16 <a class="code hl_function" href="classxb_1_1xbDbf.html#ad56be2756b7a9f8318d9ba5cf215dafb">GetHeaderLen</a> () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> <span class="keyword">virtual</span> xbInt16 GetLastRecord ();</div>
+<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> <span class="keyword">virtual</span> xbInt16 GetLastRecord ( xbInt16 iOption );</div>
+<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> </div>
+<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> <span class="keyword">virtual</span> xbInt16 GetNextRecord ();</div>
+<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <span class="keyword">virtual</span> xbInt16 GetNextRecord ( xbInt16 iOption );</div>
+<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> <span class="keyword">virtual</span> xbInt16 GetNextRecord ( xbInt16 iOption, xbUInt32 ulStartRec );</div>
+<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <span class="keyword">virtual</span> xbInt16 GetPrevRecord ();</div>
+<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <span class="keyword">virtual</span> xbInt16 GetPrevRecord ( xbInt16 iOption );</div>
+<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <span class="keyword">virtual</span> xbInt16 GetRecord ( xbUInt32 ulRecNo );</div>
+<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> </div>
+<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> <span class="comment">// virtual xbUInt32 GetRecordCount ();</span></div>
+<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> <span class="keyword">virtual</span> xbInt16 GetRecordCnt ( xbUInt32 &amp; ulRecCnt );</div>
+<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> </div>
+<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> <span class="keyword">virtual</span> <span class="keywordtype">char</span> * GetRecordBuf ( xbInt16 iOpt = 0 ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> <span class="keyword">virtual</span> xbUInt16 GetRecordLen () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> <span class="keyword">virtual</span> <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;GetTblAlias() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a49212a9eb17f7fa9f303e08d5fc50fc6"> 195</a></span> <span class="keyword">virtual</span> xbInt16 <a class="code hl_function" href="classxb_1_1xbDbf.html#a49212a9eb17f7fa9f303e08d5fc50fc6">GetVersion</a> () <span class="keyword">const</span> = 0; </div>
+<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> <span class="keyword">virtual</span> <a class="code hl_class" href="classxb_1_1xbXBase.html">xbXBase</a> *GetXbasePtr () <span class="keyword">const</span>; <span class="comment">// return xbase pointer</span></div>
+<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> </div>
+<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> </div>
+<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> <span class="keyword">virtual</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> MemoFieldsExist () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> </div>
+<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <span class="keyword">virtual</span> xbInt16 Open ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName );</div>
+<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> <span class="keyword">virtual</span> xbInt16 Open ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sAlias );</div>
+<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a4d018cbf44d8d8b2145c9acab02c8adf"> 203</a></span> <span class="keyword">virtual</span> xbInt16 <a class="code hl_function" href="classxb_1_1xbDbf.html#a4d018cbf44d8d8b2145c9acab02c8adf">Open</a> ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sAlias, xbInt16 iOpenMode, xbInt16 iShareMode ) = 0;</div>
+<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> <span class="keyword">virtual</span> xbInt16 Pack ();</div>
+<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> <span class="keyword">virtual</span> xbInt16 Pack ( xbUInt32 &amp;ulDeletedRecCnt );</div>
+<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> </div>
+<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> </div>
+<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> <span class="keyword">virtual</span> xbInt16 PutRecord (); <span class="comment">// Put record to current location</span></div>
+<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> <span class="keyword">virtual</span> xbInt16 PutRecord ( xbUInt32 ulRecNo );</div>
+<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span><span class="comment">// virtual xbInt16 ReadHeader ( xbInt16 iFilePositionOption, xbInt16 iReadOption );</span></div>
+<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> <span class="keyword">virtual</span> xbInt16 RecordDeleted ( xbInt16 iOpt = 0 ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#aeeeb2eb5fabcd0f91d457df07b0e0708"> 212</a></span> <span class="keyword">virtual</span> xbInt16 <a class="code hl_function" href="classxb_1_1xbDbf.html#aeeeb2eb5fabcd0f91d457df07b0e0708">Rename</a> ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sNewName ) = 0;</div>
+<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> </div>
+<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> <span class="keyword">virtual</span> xbInt16 SetAutoCommit ( xbInt16 iAutoCommit );</div>
+<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> </div>
+<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> <span class="keyword">virtual</span> xbInt16 UndeleteAllRecords();</div>
+<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> <span class="keyword">virtual</span> xbInt16 UndeleteRecord ();</div>
+<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> <span class="keyword">virtual</span> xbInt16 Zap ();</div>
+<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> </div>
+<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> </div>
+<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> <span class="comment">/* field methods */</span></div>
+<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> <span class="comment">//virtual xbInt16 GetRawField( xbInt16 iFieldNo, char *Buf, xbUInt32 BufSize, xbInt16 iRecBufSw ) const;</span></div>
+<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> <span class="keyword">virtual</span> xbInt16 GetField(xbInt16 iFieldNo, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldValue, xbInt16 iRecBufSw ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> <span class="keyword">virtual</span> xbInt16 GetField(xbInt16 iFieldNo, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldValue) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <span class="keyword">virtual</span> xbInt16 GetField(<span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldValue) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> <span class="keyword">virtual</span> xbInt16 GetFieldDecimal( xbInt16 iFieldNo, xbInt16 &amp;iFieldDecimal ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> <span class="keyword">virtual</span> xbInt16 GetFieldDecimal( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, xbInt16 &amp;iFieldDecimal ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> <span class="keyword">virtual</span> xbInt16 GetFieldLen( xbInt16 iFieldNo, xbInt16 &amp;iFieldLen ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> <span class="keyword">virtual</span> xbInt16 GetFieldLen( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, xbInt16 &amp;iFieldLen ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> <span class="keyword">virtual</span> xbInt16 GetFieldName( xbInt16 iFieldNo, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> </div>
+<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> <span class="keyword">virtual</span> xbInt16 GetFieldNo( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, xbInt16 &amp;iFieldNo ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> <span class="keyword">virtual</span> xbInt16 GetFieldNo( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> </div>
+<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> <span class="keyword">virtual</span> xbInt16 GetFieldType( xbInt16 iFieldNo, <span class="keywordtype">char</span> &amp;cFieldType ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> <span class="keyword">virtual</span> xbInt16 GetFieldType( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <span class="keywordtype">char</span> &amp;cFieldType ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> <span class="keyword">virtual</span> xbInt16 PutField( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldData );</div>
+<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> <span class="keyword">virtual</span> xbInt16 PutField( xbInt16 iFieldNo, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldData );</div>
+<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> </div>
+<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> <span class="keyword">virtual</span> xbInt16 PutLogicalField( xbInt16 iFieldNo, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldData );</div>
+<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> <span class="keyword">virtual</span> xbInt16 PutLogicalField( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldData );</div>
+<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> <span class="keyword">virtual</span> xbInt16 GetLogicalField( xbInt16 iFieldNo, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldData ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> <span class="keyword">virtual</span> xbInt16 GetLogicalField( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldData) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> </div>
+<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> <span class="keyword">virtual</span> xbInt16 PutLogicalField( xbInt16 iFieldNo, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bFieldData );</div>
+<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> <span class="keyword">virtual</span> xbInt16 PutLogicalField( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bFieldData );</div>
+<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> <span class="keyword">virtual</span> xbInt16 GetLogicalField( xbInt16 iFieldNo, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bFieldData ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> <span class="keyword">virtual</span> xbInt16 GetLogicalField( xbInt16 iFieldNo, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bFieldData, xbInt16 iRecBufSw ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> <span class="keyword">virtual</span> xbInt16 GetLogicalField( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bFieldData) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> </div>
+<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> <span class="keyword">virtual</span> xbInt16 GetLongField( xbInt16 iFieldNo, xbInt32 &amp;lFieldValue ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> <span class="keyword">virtual</span> xbInt16 GetLongField( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, xbInt32 &amp;lFieldValue ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> <span class="keyword">virtual</span> xbInt16 PutLongField( xbInt16 iFieldNo, xbInt32 lFieldValue );</div>
+<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> <span class="keyword">virtual</span> xbInt16 PutLongField( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, xbInt32 lFieldValue );</div>
+<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> </div>
+<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> <span class="keyword">virtual</span> xbInt16 GetULongField( xbInt16 iFieldNo, xbUInt32 &amp;lFieldValue ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> <span class="keyword">virtual</span> xbInt16 GetULongField( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, xbUInt32 &amp;lFieldValue ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> <span class="keyword">virtual</span> xbInt16 PutULongField( xbInt16 iFieldNo, xbUInt32 lFieldValue );</div>
+<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> <span class="keyword">virtual</span> xbInt16 PutULongField( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldNo, xbUInt32 lFieldValue );</div>
+<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> </div>
+<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> <span class="keyword">virtual</span> xbInt16 GetDoubleField( xbInt16 FieldNo, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dFieldValue ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> <span class="keyword">virtual</span> xbInt16 GetDoubleField( xbInt16 FieldNo, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dFieldValue, xbInt16 iRecBufSw ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> <span class="keyword">virtual</span> xbInt16 GetDoubleField( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dFieldValue ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> <span class="keyword">virtual</span> xbInt16 PutDoubleField( xbInt16 FieldNo, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dFieldValue );</div>
+<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> <span class="keyword">virtual</span> xbInt16 PutDoubleField( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;FieldName, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dFieldValue );</div>
+<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> </div>
+<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> <span class="keyword">virtual</span> xbInt16 GetFloatField( xbInt16 iFieldNo, <a class="code hl_typedef" href="namespacexb.html#a83aa6a550398db55973aa9fb4257e66e">xbFloat</a> &amp;fFieldValue ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> <span class="keyword">virtual</span> xbInt16 GetFloatField( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <a class="code hl_typedef" href="namespacexb.html#a83aa6a550398db55973aa9fb4257e66e">xbFloat</a> &amp;fFieldValue ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> <span class="keyword">virtual</span> xbInt16 PutFloatField( xbInt16 iFieldNo, <a class="code hl_typedef" href="namespacexb.html#a83aa6a550398db55973aa9fb4257e66e">xbFloat</a> fFieldValue );</div>
+<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> <span class="keyword">virtual</span> xbInt16 PutFloatField( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <a class="code hl_typedef" href="namespacexb.html#a83aa6a550398db55973aa9fb4257e66e">xbFloat</a> fFieldValue );</div>
+<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> </div>
+<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> <span class="keyword">virtual</span> xbInt16 GetDateField( xbInt16 iFieldNo, <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dt ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> <span class="keyword">virtual</span> xbInt16 GetDateField( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dt ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> <span class="keyword">virtual</span> xbInt16 PutDateField( xbInt16 iFieldNo, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dt );</div>
+<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> <span class="keyword">virtual</span> xbInt16 PutDateField( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dt );</div>
+<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> </div>
+<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> <span class="keyword">virtual</span> xbInt16 GetNullSts( xbInt16 iFieldNo, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bIsNull ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> <span class="keyword">virtual</span> xbInt16 GetNullSts( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bIsNull ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> <span class="keyword">virtual</span> xbInt16 GetNullSts( xbInt16 iFieldNo, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bIsNull, xbInt16 iRecBufSw ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> </div>
+<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> </div>
+<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> </div>
+<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span><span class="preprocessor"> #ifdef XB_MEMO_SUPPORT</span></div>
+<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> <span class="keyword">virtual</span> xbInt16 GetMemoFieldCnt () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> <span class="keyword">virtual</span> xbMemo *GetMemoPtr ();</div>
+<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> <span class="keyword">virtual</span> xbUInt32 GetCreateMemoBlockSize() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> <span class="keyword">virtual</span> xbInt16 GetMemoField ( xbInt16 iFldNo, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sMemoData );</div>
+<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> <span class="keyword">virtual</span> xbInt16 GetMemoField ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp; sFldName, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sMemoData );</div>
+<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> <span class="keyword">virtual</span> xbInt16 GetMemoFieldLen ( xbInt16 iFldNo, xbUInt32 &amp;ulMemoFieldLen );</div>
+<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> <span class="keyword">virtual</span> xbInt16 GetMemoFieldLen ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp; sFldName, xbUInt32 &amp;ulMemoFieldLen );</div>
+<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> <span class="keyword">virtual</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> MemoFieldExists ( xbInt16 iFieldNo ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> <span class="keyword">virtual</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> MemoFieldExists ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> <span class="keyword">virtual</span> xbInt16 SetCreateMemoBlockSize( xbUInt32 ulBlockSize ) = 0;</div>
+<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> <span class="keyword">virtual</span> xbInt16 UpdateMemoField ( xbInt16 iFldNo, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sMemoData );</div>
+<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> <span class="keyword">virtual</span> xbInt16 UpdateMemoField ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp; sFldName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sMemoData );</div>
+<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span><span class="preprocessor"> #endif </span><span class="comment">// XB_MEMO_SUPPORT</span></div>
+<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> </div>
+<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> </div>
+<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span><span class="preprocessor"> #ifdef XB_LOCKING_SUPPORT</span></div>
+<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> <span class="keyword">virtual</span> xbInt16 LockTable ( xbInt16 iLockFunction );</div>
+<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> <span class="keyword">virtual</span> xbInt16 LockRecord ( xbInt16 iLockFunction, xbUInt32 ulRecNo );</div>
+<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span> <span class="keyword">virtual</span> xbInt16 LockAppend ( xbInt16 iLockFunction );</div>
+<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> <span class="keyword">virtual</span> xbInt16 LockHeader ( xbInt16 iLockFunction );</div>
+<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> </div>
+<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span><span class="preprocessor"> #ifdef XB_MEMO_SUPPORT</span></div>
+<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> <span class="keyword">virtual</span> xbInt16 LockMemo ( xbInt16 iLockFunction );</div>
+<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> <span class="keyword">virtual</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetMemoLocked () <span class="keyword">const</span>; </div>
+<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span><span class="preprocessor"> #endif </span><span class="comment">// XB_MEMO_LOCK</span></div>
+<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> </div>
+<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span><span class="preprocessor"> #ifdef XB_INDEX_SUPPORT</span></div>
+<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> <span class="keyword">virtual</span> xbInt16 LockIndices ( xbInt16 iLockFunction );</div>
+<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INDEX_SUPPORT</span></div>
+<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> </div>
+<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> xbInt16 GetAutoLock () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> <span class="keywordtype">void</span> SetAutoLock ( xbInt16 iAutoLock );</div>
+<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> xbInt16 GetLockFlavor () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> <span class="keywordtype">void</span> SetLockFlavor ( xbInt16 iLockFlavor );</div>
+<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetTableLocked () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetHeaderLocked () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> xbUInt32 GetAppendLocked () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> xbLinkListNode&lt;xbUInt32&gt; * GetFirstRecLock () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> </div>
+<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
+<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> <span class="keywordtype">void</span> DumpTableLockStatus() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span><span class="preprocessor"> #endif </span><span class="comment">// XB_DEBUG_SUPPORT</span></div>
+<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span><span class="preprocessor"> #endif </span><span class="comment">// XB_LOCKING_SUPPORT</span></div>
+<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> </div>
+<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> </div>
+<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span><span class="preprocessor"> #ifdef XB_INDEX_SUPPORT</span></div>
+<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span> <span class="keyword">virtual</span> xbInt16 CheckTagIntegrity( xbInt16 iTagOpt, xbInt16 iOutputOpt );</div>
+<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> <span class="keyword">virtual</span> xbInt16 CloseIndexFile( xbIx *pIx );</div>
+<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span> <span class="keyword">virtual</span> xbInt16 CreateTag( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIxType, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sKey, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFilter, </div>
+<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverLay, xbIx **xbIxOut, <span class="keywordtype">void</span> **vpTagOut );</div>
+<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span> <span class="keyword">virtual</span> xbInt16 DeleteTag( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIxType, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sName );</div>
+<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span> <span class="keyword">virtual</span> xbInt16 DeleteAllIndexFiles();</div>
+<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> <span class="keyword">virtual</span> xbInt16 Find( <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sKey );</div>
+<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> <span class="keyword">virtual</span> xbInt16 Find( <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dtKey );</div>
+<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> <span class="keyword">virtual</span> xbInt16 Find( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dKey );</div>
+<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> <span class="keyword">virtual</span> xbIx *GetCurIx() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> *GetCurTag() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span> </div>
+<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span> <span class="keyword">virtual</span> xbInt16 GetFirstKey();</div>
+<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> <span class="keyword">virtual</span> xbInt16 GetNextKey();</div>
+<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> <span class="keyword">virtual</span> xbInt16 GetPrevKey();</div>
+<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> <span class="keyword">virtual</span> xbInt16 GetLastKey();</div>
+<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> </div>
+<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> <span class="keyword">virtual</span> <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;GetCurIxType() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> <span class="keyword">virtual</span> <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;GetCurTagName() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span> <span class="keyword">virtual</span> xbIxList *GetIxList() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span> <span class="keyword">virtual</span> xbInt32 GetPhysicalIxCnt () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> xbLinkListNode&lt;xbTag *&gt; *GetTagList () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> </div>
+<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> <span class="keyword">virtual</span> xbInt16 OpenIndex( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIxType, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIndexName );</div>
+<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span> <span class="keyword">virtual</span> xbInt16 Reindex( xbInt16 iTagOpt = 0, xbInt16 iErrorOpt = 1, xbIx **pIx = NULL, <span class="keywordtype">void</span> **vpTag = NULL );</div>
+<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> <span class="keyword">virtual</span> xbInt16 SetCurTag( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTagName );</div>
+<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> SetCurTag( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIxType, xbIx *pIx, <span class="keywordtype">void</span> *vpTag );</div>
+<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span> </div>
+<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INDEX_SUPPORT</span></div>
+<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span> </div>
+<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span><span class="preprocessor"> #ifdef XB_INF_SUPPORT</span></div>
+<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> <span class="keyword">virtual</span> xbInt16 AssociateIndex( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sType, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sName, xbInt16 iOption );</div>
+<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span> xbLinkListNode&lt;xbString&gt; *GetInfList() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INF_SUPPORT</span></div>
+<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span> </div>
+<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span> <span class="comment">//#ifdef XB_MDX_SUPPORT</span></div>
+<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span> <span class="comment">//virtual xbInt16 GetCreateMdxBlockSize() const;</span></div>
+<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> <span class="comment">//virtual xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );</span></div>
+<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span> <span class="comment">//#endif</span></div>
+<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span> </div>
+<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span><span class="preprocessor"> #ifdef XB_BLOCKREAD_SUPPORT</span></div>
+<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span> xbInt16 DisableBlockReadProcessing();</div>
+<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span> xbInt16 EnableBlockReadProcessing();</div>
+<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetBlockReadStatus() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"> 374</span><span class="preprocessor"> #endif </span><span class="comment">// XB_BLOCKREAD_SUPPORT</span></div>
+<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span> </div>
+<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span><span class="preprocessor"> #ifdef XB_INDEX_SUPPORT</span></div>
+<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span> <span class="keyword">friend</span> <span class="keyword">class </span>xbIx;</div>
+<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span> <span class="keyword">friend</span> <span class="keyword">class </span>xbIxMdx;</div>
+<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span> <span class="keyword">friend</span> <span class="keyword">class </span>xbIxTdx;</div>
+<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span> </div>
+<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span> xbInt16 AddIndex( xbIx *ix, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFmt );</div>
+<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span> <span class="keywordtype">void</span> ClearTagList();</div>
+<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span> xbInt16 RemoveIndex( xbIx * ix );</div>
+<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"> 385</span> <span class="keywordtype">void</span> UpdateSchemaIxFlag( xbInt16 iFldNo, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> cVal );</div>
+<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span> </div>
+<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span> </div>
+<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span> <span class="keyword">virtual</span> xbInt16 UpdateTagList ();</div>
+<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INDEX_SUPPORT</span></div>
+<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span> </div>
+<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span> <span class="keyword">virtual</span> xbInt16 ReadHeader ( xbInt16 iFilePositionOption, xbInt16 iReadOption );</div>
+<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"> 392</span> </div>
+<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span> </div>
+<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span><span class="preprocessor"> #ifdef XB_INF_SUPPORT</span></div>
+<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span> <span class="keyword">virtual</span> xbInt16 GetInfFileName( <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sNdxIdxFileName );</div>
+<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INF_SUPPORT</span></div>
+<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span> </div>
+<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span><span class="preprocessor"> #ifdef XB_BLOCKREAD_SUPPORT</span></div>
+<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span> <span class="keyword">friend</span> <span class="keyword">class </span>xbBlockRead;</div>
+<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span><span class="preprocessor"> #endif </span><span class="comment">// XB_BLOCKREAD_SUPPORT</span></div>
+<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span> </div>
+<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span> </div>
+<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"> 403</span><span class="preprocessor"> #ifdef XB_LOCKING_SUPPORT</span></div>
+<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span> <span class="keywordtype">void</span> SetHeaderLocked ( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bTableLocked );</div>
+<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</span> <span class="keywordtype">void</span> SetTableLocked ( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bTableLocked );</div>
+<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"> 406</span><span class="preprocessor"> #endif </span><span class="comment">// XB_LOCKING_SUPORT</span></div>
+<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"> 407</span> </div>
+<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"> 408</span><span class="preprocessor"> #ifdef XB_MEMO_SUPPORT</span></div>
+<div class="line"><a id="l00409" name="l00409"></a><span class="lineno"> 409</span> xbInt16 iMemoFieldCnt; <span class="comment">// Memo field cnt in the table</span></div>
+<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span> xbMemo *Memo; <span class="comment">// Pointer to memo class</span></div>
+<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span> xbUInt32 ulCreateMemoBlockSize; <span class="comment">// blocksize to use when creating dbt file</span></div>
+<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"> 412</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00413" name="l00413"></a><span class="lineno"> 413</span> </div>
+<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span><span class="preprocessor"> #ifdef XB_INF_SUPPORT</span></div>
+<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"> 415</span> <span class="keyword">virtual</span> xbInt16 DeleteInfData();</div>
+<div class="line"><a id="l00416" name="l00416"></a><span class="lineno"> 416</span> <span class="keyword">virtual</span> xbInt16 LoadInfData();</div>
+<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> <span class="keyword">virtual</span> xbInt16 SaveInfData();</div>
+<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INF_SUPPORT</span></div>
+<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> </div>
+<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span><span class="comment">/*</span></div>
+<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span><span class="comment"> #ifdef XB_MDX_SUPPORT</span></div>
+<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"> 422</span><span class="comment"> xbInt16 iCreateMdxBlockSize;</span></div>
+<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span><span class="comment"> #endif // XB_MDX_SUPPORT</span></div>
+<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span><span class="comment">*/</span></div>
+<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span> </div>
+<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"> 426</span> <span class="keyword">virtual</span> xbInt16 GetRawField( xbInt16 iFieldNo, <span class="keywordtype">char</span> *Buf, xbUInt32 BufSize, xbInt16 iRecBufSw ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a7e63e852418f337eb7c44de5dcd50323"> 427</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> InitVars(); </div>
+<div class="line"><a id="l00428" name="l00428"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#aba5dcac3b4092261bc1669740cdd669d"> 428</a></span> <span class="keyword">virtual</span> xbInt16 SetVersion() = 0;</div>
+<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span> <span class="keyword">virtual</span> xbInt16 ValidateSchema( <a class="code hl_struct" href="structxb_1_1xbSchema.html">xbSchema</a> * s ) = 0;</div>
+<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"> 430</span> xbInt16 WriteHeader( xbInt16 iPositionOption, xbInt16 iWriteOption );</div>
+<div class="line"><a id="l00431" name="l00431"></a><span class="lineno"> 431</span> </div>
+<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#afcd99924606be0a9e1e25180bcd1abf8"> 432</a></span> </div>
+<div class="line"><a id="l00433" name="l00433"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#ab506450954bc86e7bf1d7c4efe681f43"> 433</a></span> xbUInt32 ulCurRec; <span class="comment">// Current record or zero</span></div>
+<div class="line"><a id="l00434" name="l00434"></a><span class="lineno"> 434</span> xbInt16 iAutoCommit; <span class="comment">// Auto commit updates if not explicitly performed before moving off record?</span></div>
+<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"> 435</span> <span class="comment">// -1 --&gt; Use DBMS default</span></div>
+<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"> 436</span> <span class="comment">// 0 --&gt; No auto update on this table, regardless of DBMS setting</span></div>
+<div class="line"><a id="l00437" name="l00437"></a><span class="lineno"> 437</span> <span class="comment">// 1 --&gt; Auto update on this table, regardless of DBMS setting</span></div>
+<div class="line"><a id="l00438" name="l00438"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a15f495446f0d75bcf2fa89e3b699d388"> 438</a></span> </div>
+<div class="line"><a id="l00439" name="l00439"></a><span class="lineno"> 439</span> xbInt16 iFileVersion; <span class="comment">// xBase file version - which class is in play</span></div>
+<div class="line"><a id="l00440" name="l00440"></a><span class="lineno"> 440</span> </div>
+<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a73f9c792d0a769e2e604c1855245a276"> 441</a></span> </div>
+<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a5056757614c39f725cc775332494966a"> 442</a></span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sAlias; <span class="comment">// table alias</span></div>
+<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a6d8e193da3ca414eef1e8866ec5ca81b"> 443</a></span> xbInt16 iNoOfFields;</div>
+<div class="line"><a id="l00444" name="l00444"></a><span class="lineno"> 444</span> xbInt16 iDbfStatus; <span class="comment">// 0 = closed</span></div>
+<div class="line"><a id="l00445" name="l00445"></a><span class="lineno"> 445</span> <span class="comment">// 1 = open</span></div>
+<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"> 446</span> <span class="comment">// 2 = updates pending</span></div>
+<div class="line"><a id="l00447" name="l00447"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#ad8c8b5eb12063bb898da1b2cc02cfce7"> 447</a></span> </div>
+<div class="line"><a id="l00448" name="l00448"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a8a9b3bce0b741e73473d3ebbd6e6f1cd"> 448</a></span> xbSchemaRec *SchemaPtr; <span class="comment">// Pointer to field data</span></div>
+<div class="line"><a id="l00449" name="l00449"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a353ebfc8a2960ef827f429ec74025606"> 449</a></span> <span class="keywordtype">char</span> *RecBuf; <span class="comment">// Pointer to record buffer</span></div>
+<div class="line"><a id="l00450" name="l00450"></a><span class="lineno"> 450</span> <span class="keywordtype">char</span> *RecBuf2; <span class="comment">// Pointer to original rec buf allocation</span></div>
+<div class="line"><a id="l00451" name="l00451"></a><span class="lineno"> 451</span> </div>
+<div class="line"><a id="l00452" name="l00452"></a><span class="lineno"> 452</span> </div>
+<div class="line"><a id="l00453" name="l00453"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a3a262abf658e5fa968b57ef457a69470"> 453</a></span><span class="comment">/* Next several variables are database header fields, up through dbase V */</span></div>
+<div class="line"><a id="l00454" name="l00454"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a4fcd6a86ddd32d4a9d76a4074573440a"> 454</a></span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> cVersion;</div>
+<div class="line"><a id="l00455" name="l00455"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a9340a5e8ee53eb0f3b6601eec2d71e1b"> 455</a></span> <span class="keywordtype">char</span> cUpdateYY;</div>
+<div class="line"><a id="l00456" name="l00456"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a6021789d314cd41488991e708fcd0df2"> 456</a></span> <span class="keywordtype">char</span> cUpdateMM;</div>
+<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#acb594ab61dd35b17bdf28394083f8e87"> 457</a></span> <span class="keywordtype">char</span> cUpdateDD;</div>
+<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a62f5fa9149ae0f6dc75642823de66918"> 458</a></span> xbUInt32 ulNoOfRecs;</div>
+<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a1760e222567e2c849f9c799b9d896e91"> 459</a></span> xbUInt16 uiHeaderLen;</div>
+<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#ac3c89fc3bc6a6abf385478a8adbed970"> 460</a></span> xbUInt16 uiRecordLen;</div>
+<div class="line"><a id="l00461" name="l00461"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a8734e799707582f022fc341d515650f4"> 461</a></span> <span class="keywordtype">char</span> cTransactionFlag;</div>
+<div class="line"><a id="l00462" name="l00462"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#ad59074633641e03647e54d2b66c9102b"> 462</a></span> <span class="keywordtype">char</span> cEncryptionFlag;</div>
+<div class="line"><a id="l00463" name="l00463"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#aea1dfe5cbd1f9cdbcfc8eb04b2c3d5f1"> 463</a></span> <span class="keywordtype">char</span> cIndexFlag;</div>
+<div class="line"><a id="l00464" name="l00464"></a><span class="lineno"> 464</span> <span class="keywordtype">char</span> cLangDriver; <span class="comment">// dbase 7 sets to 1B</span></div>
+<div class="line"><a id="l00465" name="l00465"></a><span class="lineno"> 465</span> </div>
+<div class="line"><a id="l00466" name="l00466"></a><span class="lineno"> 466</span> </div>
+<div class="line"><a id="l00467" name="l00467"></a><span class="lineno"> 467</span> </div>
+<div class="line"><a id="l00468" name="l00468"></a><span class="lineno"> 468</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00469" name="l00469"></a><span class="lineno"> 469</span> <span class="keywordtype">void</span> ResetNoOfRecords(); </div>
+<div class="line"><a id="l00470" name="l00470"></a><span class="lineno"> 470</span> </div>
+<div class="line"><a id="l00471" name="l00471"></a><span class="lineno"> 471</span> </div>
+<div class="line"><a id="l00472" name="l00472"></a><span class="lineno"> 472</span><span class="preprocessor"> #ifdef XB_LOCKING_SUPPORT</span></div>
+<div class="line"><a id="l00473" name="l00473"></a><span class="lineno"> 473</span> xbInt16 iAutoLock; <span class="comment">// 0 - autolock off, 1 - autolock on</span></div>
+<div class="line"><a id="l00474" name="l00474"></a><span class="lineno"> 474</span> xbInt16 iLockFlavor;</div>
+<div class="line"><a id="l00475" name="l00475"></a><span class="lineno"> 475</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bTableLocked; <span class="comment">// is the table locked</span></div>
+<div class="line"><a id="l00476" name="l00476"></a><span class="lineno"> 476</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bHeaderLocked; <span class="comment">// is the header locked</span></div>
+<div class="line"><a id="l00477" name="l00477"></a><span class="lineno"> 477</span> xbUInt32 ulAppendLocked; <span class="comment">// record number of the new record for the append lock operation</span></div>
+<div class="line"><a id="l00478" name="l00478"></a><span class="lineno"> 478</span> xbLinkListOrd&lt;xbUInt32&gt; lloRecLocks; <span class="comment">// ordered link list of locked records</span></div>
+<div class="line"><a id="l00479" name="l00479"></a><span class="lineno"> 479</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00480" name="l00480"></a><span class="lineno"> 480</span> </div>
+<div class="line"><a id="l00481" name="l00481"></a><span class="lineno"> 481</span><span class="preprocessor"> #ifdef XB_INDEX_SUPPORT</span></div>
+<div class="line"><a id="l00482" name="l00482"></a><span class="lineno"> 482</span> xbIxList *ixList; <span class="comment">// pointer to a list of indices associated with the table</span></div>
+<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"> 483</span> xbIx *pCurIx; <span class="comment">// Pointer to current index class</span></div>
+<div class="line"><a id="l00484" name="l00484"></a><span class="lineno"> 484</span> <span class="keywordtype">void</span> *vpCurIxTag; <span class="comment">// Pointer to current tag</span></div>
+<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"> 485</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sCurIxType; <span class="comment">// Current index type</span></div>
+<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</span> xbLinkList&lt;xbTag *&gt; llTags; <span class="comment">// linked list of open tags</span></div>
+<div class="line"><a id="l00487" name="l00487"></a><span class="lineno"> 487</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INDEX_SUPPORT</span></div>
+<div class="line"><a id="l00488" name="l00488"></a><span class="lineno"> 488</span> </div>
+<div class="line"><a id="l00489" name="l00489"></a><span class="lineno"> 489</span><span class="preprocessor"> #ifdef XB_INF_SUPPORT</span></div>
+<div class="line"><a id="l00490" name="l00490"></a><span class="lineno"> 490</span> xbLinkList&lt;xbString&gt; llInfData; <span class="comment">// linked list of strings containing ndx file entries</span></div>
+<div class="line"><a id="l00491" name="l00491"></a><span class="lineno"> 491</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INF_SUPPORT</span></div>
+<div class="line"><a id="l00492" name="l00492"></a><span class="lineno"> 492</span> </div>
+<div class="line"><a id="l00493" name="l00493"></a><span class="lineno"> 493</span><span class="preprocessor"> #ifdef XB_BLOCKREAD_SUPPORT</span></div>
+<div class="line"><a id="l00494" name="l00494"></a><span class="lineno"> 494</span> xbBlockRead *pRb;</div>
+<div class="line"><a id="l00495" name="l00495"></a><span class="lineno"> 495</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bBlockReadEnabled; <span class="comment">// if true, then block read mode is on</span></div>
+<div class="line"><a id="l00496" name="l00496"></a><span class="lineno"> 496</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00497" name="l00497"></a><span class="lineno"> 497</span> </div>
+<div class="line"><a id="l00498" name="l00498"></a><span class="lineno"> 498</span> </div>
+<div class="line"><a id="l00499" name="l00499"></a><span class="lineno"> 499</span> </div>
+<div class="line"><a id="l00500" name="l00500"></a><span class="lineno"> 500</span>};</div>
+<div class="line"><a id="l00501" name="l00501"></a><span class="lineno"> 501</span> </div>
+<div class="line"><a id="l00502" name="l00502"></a><span class="lineno"> 502</span> </div>
+<div class="line"><a id="l00503" name="l00503"></a><span class="lineno"> 503</span><span class="preprocessor">#ifdef XB_DBF3_SUPPORT</span></div>
+<div class="line"><a id="l00505" name="l00505"></a><span class="lineno"> 505</span> </div>
+<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"> 511</span><span class="keyword">class </span>XBDLLEXPORT xbDbf3 : <span class="keyword">public</span> <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> {</div>
+<div class="line"><a id="l00512" name="l00512"></a><span class="lineno"> 512</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00513" name="l00513"></a><span class="lineno"> 513</span> xbDbf3(<a class="code hl_class" href="classxb_1_1xbXBase.html">xbXBase</a> *x);</div>
+<div class="line"><a id="l00514" name="l00514"></a><span class="lineno"> 514</span> ~xbDbf3();</div>
+<div class="line"><a id="l00515" name="l00515"></a><span class="lineno"> 515</span> <span class="keyword">virtual</span> xbInt16 CreateTable ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sAlias, <a class="code hl_struct" href="structxb_1_1xbSchema.html">xbSchema</a> *, xbInt16 iOverlay, xbInt16 iShareMode );</div>
+<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"> 516</span> <span class="keyword">virtual</span> xbInt16 GetVersion () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00517" name="l00517"></a><span class="lineno"> 517</span> <span class="keyword">virtual</span> xbInt16 Open ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sAlias, xbInt16 iOpenMode, xbInt16 iShareMode );</div>
+<div class="line"><a id="l00518" name="l00518"></a><span class="lineno"> 518</span> <span class="keyword">virtual</span> xbInt16 Rename ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sNewName );</div>
+<div class="line"><a id="l00519" name="l00519"></a><span class="lineno"> 519</span> </div>
+<div class="line"><a id="l00520" name="l00520"></a><span class="lineno"> 520</span><span class="preprocessor"> #ifdef XB_MEMO_SUPPORT</span></div>
+<div class="line"><a id="l00521" name="l00521"></a><span class="lineno"> 521</span> <span class="keyword">virtual</span> xbInt16 SetCreateMemoBlockSize( xbUInt32 iBlockSize );</div>
+<div class="line"><a id="l00522" name="l00522"></a><span class="lineno"> 522</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00523" name="l00523"></a><span class="lineno"> 523</span> </div>
+<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"> 524</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a id="l00525" name="l00525"></a><span class="lineno"> 525</span> xbInt16 SetVersion ();</div>
+<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"> 526</span> <span class="keyword">virtual</span> xbInt16 ValidateSchema( <a class="code hl_struct" href="structxb_1_1xbSchema.html">xbSchema</a> *s );</div>
+<div class="line"><a id="l00527" name="l00527"></a><span class="lineno"> 527</span> </div>
+<div class="line"><a id="l00528" name="l00528"></a><span class="lineno"> 528</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00529" name="l00529"></a><span class="lineno"> 529</span> </div>
+<div class="line"><a id="l00530" name="l00530"></a><span class="lineno"> 530</span>};</div>
+<div class="line"><a id="l00531" name="l00531"></a><span class="lineno"> 531</span><span class="preprocessor">#endif </span><span class="comment">/* XB_DBF3_SUPPORT */</span><span class="preprocessor"></span></div>
+<div class="line"><a id="l00532" name="l00532"></a><span class="lineno"> 532</span> </div>
+<div class="line"><a id="l00533" name="l00533"></a><span class="lineno"> 533</span> </div>
+<div class="line"><a id="l00534" name="l00534"></a><span class="lineno"> 534</span><span class="preprocessor">#ifdef XB_DBF4_SUPPORT</span></div>
+<div class="line"><a id="l00536" name="l00536"></a><span class="lineno"> 536</span> </div>
+<div class="line"><a id="l00541" name="l00541"></a><span class="lineno"> 541</span><span class="keyword">class </span>XBDLLEXPORT xbDbf4 : <span class="keyword">public</span> <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> {</div>
+<div class="line"><a id="l00542" name="l00542"></a><span class="lineno"> 542</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00543" name="l00543"></a><span class="lineno"> 543</span> xbDbf4( <a class="code hl_variable" href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xbXBase</a> *x );</div>
+<div class="line"><a id="l00544" name="l00544"></a><span class="lineno"> 544</span> </div>
+<div class="line"><a id="l00545" name="l00545"></a><span class="lineno"> 545</span> ~xbDbf4();</div>
+<div class="line"><a id="l00546" name="l00546"></a><span class="lineno"> 546</span> </div>
+<div class="line"><a id="l00547" name="l00547"></a><span class="lineno"> 547</span> <span class="keyword">virtual</span> xbInt16 CreateTable ( <span class="keyword">const</span> xbString &amp;sTableName, <span class="keyword">const</span> xbString &amp;sAlias, xbSchema *, xbInt16 iOverlay, xbInt16 iShareMode );</div>
+<div class="line"><a id="l00548" name="l00548"></a><span class="lineno"> 548</span> <span class="keyword">virtual</span> xbInt16 GetVersion () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00549" name="l00549"></a><span class="lineno"> 549</span> <span class="keyword">virtual</span> xbInt16 Open ( <span class="keyword">const</span> xbString &amp;sTableName, <span class="keyword">const</span> xbString &amp;sAlias, xbInt16 iOpenMode, xbInt16 iShareMode );</div>
+<div class="line"><a id="l00550" name="l00550"></a><span class="lineno"> 550</span> <span class="keyword">virtual</span> xbInt16 Rename ( <span class="keyword">const</span> xbString sNewName );</div>
+<div class="line"><a id="l00551" name="l00551"></a><span class="lineno"> 551</span> </div>
+<div class="line"><a id="l00552" name="l00552"></a><span class="lineno"> 552</span><span class="preprocessor"> #ifdef XB_MEMO_SUPPORT</span></div>
+<div class="line"><a id="l00553" name="l00553"></a><span class="lineno"> 553</span> <span class="keyword">virtual</span> xbInt16 SetCreateMemoBlockSize( xbUInt32 iBlockSize );</div>
+<div class="line"><a id="l00554" name="l00554"></a><span class="lineno"> 554</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00555" name="l00555"></a><span class="lineno"> 555</span> </div>
+<div class="line"><a id="l00556" name="l00556"></a><span class="lineno"> 556</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a id="l00557" name="l00557"></a><span class="lineno"> 557</span> <span class="comment">// void InitVars ();</span></div>
+<div class="line"><a id="l00558" name="l00558"></a><span class="lineno"> 558</span> xbInt16 SetVersion();</div>
+<div class="line"><a id="l00559" name="l00559"></a><span class="lineno"> 559</span> <span class="keyword">virtual</span> xbInt16 ValidateSchema ( xbSchema *s );</div>
+<div class="line"><a id="l00560" name="l00560"></a><span class="lineno"> 560</span> </div>
+<div class="line"><a id="l00561" name="l00561"></a><span class="lineno"> 561</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00562" name="l00562"></a><span class="lineno"> 562</span> </div>
+<div class="line"><a id="l00563" name="l00563"></a><span class="lineno"> 563</span>};</div>
+<div class="line"><a id="l00564" name="l00564"></a><span class="lineno"> 564</span> </div>
+<div class="line"><a id="l00565" name="l00565"></a><span class="lineno"> 565</span><span class="preprocessor">#endif </span><span class="comment">/* XB_DBF4_SUPPORT */</span><span class="preprocessor"></span></div>
+<div class="line"><a id="l00566" name="l00566"></a><span class="lineno"> 566</span> </div>
+<div class="line"><a id="l00567" name="l00567"></a><span class="lineno"> 567</span>} <span class="comment">/* namespace xb */</span></div>
+<div class="line"><a id="l00568" name="l00568"></a><span class="lineno"> 568</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_DBF_H__ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="aclassxb_1_1xbDate_html"><div class="ttname"><a href="classxb_1_1xbDate.html">xb::xbDate</a></div><div class="ttdoc">xbDate class.</div><div class="ttdef"><b>Definition:</b> xbdate.h:62</div></div>
+<div class="ttc" id="aclassxb_1_1xbDbf_html"><div class="ttname"><a href="classxb_1_1xbDbf.html">xb::xbDbf</a></div><div class="ttdoc">Base class for handling dbf files/tables.</div><div class="ttdef"><b>Definition:</b> xbdbf.h:150</div></div>
+<div class="ttc" id="aclassxb_1_1xbDbf_html_a49212a9eb17f7fa9f303e08d5fc50fc6"><div class="ttname"><a href="classxb_1_1xbDbf.html#a49212a9eb17f7fa9f303e08d5fc50fc6">xb::xbDbf::GetVersion</a></div><div class="ttdeci">virtual xbInt16 GetVersion() const =0</div></div>
+<div class="ttc" id="aclassxb_1_1xbDbf_html_a4d018cbf44d8d8b2145c9acab02c8adf"><div class="ttname"><a href="classxb_1_1xbDbf.html#a4d018cbf44d8d8b2145c9acab02c8adf">xb::xbDbf::Open</a></div><div class="ttdeci">virtual xbInt16 Open(const xbString &amp;sTableName, const xbString &amp;sAlias, xbInt16 iOpenMode, xbInt16 iShareMode)=0</div></div>
+<div class="ttc" id="aclassxb_1_1xbDbf_html_a73e41bfe679dd06ab16c436652df93f1"><div class="ttname"><a href="classxb_1_1xbDbf.html#a73e41bfe679dd06ab16c436652df93f1">xb::xbDbf::CreateTable</a></div><div class="ttdeci">virtual xbInt16 CreateTable(const xbString &amp;sTableName, const xbString &amp;sAlias, xbSchema *pSchema, xbInt16 iOverlay, xbInt16 iShareMode)=0</div></div>
+<div class="ttc" id="aclassxb_1_1xbDbf_html_ad56be2756b7a9f8318d9ba5cf215dafb"><div class="ttname"><a href="classxb_1_1xbDbf.html#ad56be2756b7a9f8318d9ba5cf215dafb">xb::xbDbf::GetHeaderLen</a></div><div class="ttdeci">virtual xbUInt16 GetHeaderLen() const</div></div>
+<div class="ttc" id="aclassxb_1_1xbDbf_html_aeeeb2eb5fabcd0f91d457df07b0e0708"><div class="ttname"><a href="classxb_1_1xbDbf.html#aeeeb2eb5fabcd0f91d457df07b0e0708">xb::xbDbf::Rename</a></div><div class="ttdeci">virtual xbInt16 Rename(const xbString sNewName)=0</div></div>
+<div class="ttc" id="aclassxb_1_1xbFile_html"><div class="ttname"><a href="classxb_1_1xbFile.html">xb::xbFile</a></div><div class="ttdoc">Class for handling low level file I/O.</div><div class="ttdef"><b>Definition:</b> xbfile.h:56</div></div>
+<div class="ttc" id="aclassxb_1_1xbString_html"><div class="ttname"><a href="classxb_1_1xbString.html">xb::xbString</a></div><div class="ttdoc">Class for handling string data.</div><div class="ttdef"><b>Definition:</b> xbstring.h:50</div></div>
+<div class="ttc" id="aclassxb_1_1xbXBase_html"><div class="ttname"><a href="classxb_1_1xbXBase.html">xb::xbXBase</a></div><div class="ttdoc">xbXbase class.</div><div class="ttdef"><b>Definition:</b> xbxbase.h:123</div></div>
+<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
+<div class="ttc" id="anamespacexb_html_a25f47b226ce924a5c78f97989b0744a2"><div class="ttname"><a href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xb::xbDouble</a></div><div class="ttdeci">double xbDouble</div><div class="ttdef"><b>Definition:</b> xbtypes.h:23</div></div>
+<div class="ttc" id="anamespacexb_html_a83aa6a550398db55973aa9fb4257e66e"><div class="ttname"><a href="namespacexb.html#a83aa6a550398db55973aa9fb4257e66e">xb::xbFloat</a></div><div class="ttdeci">float xbFloat</div><div class="ttdef"><b>Definition:</b> xbtypes.h:22</div></div>
+<div class="ttc" id="anamespacexb_html_a97858ddeb1c4b0100f3edc1a46d3a8b0"><div class="ttname"><a href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xb::xbXBase</a></div><div class="ttdeci">class XBDLLEXPORT xbXBase</div><div class="ttdef"><b>Definition:</b> xbssv.h:27</div></div>
+<div class="ttc" id="anamespacexb_html_ab1a750481dd487f0d384aa1d200dff0f"><div class="ttname"><a href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xb::xbBool</a></div><div class="ttdeci">short int xbBool</div><div class="ttdef"><b>Definition:</b> xbtypes.h:24</div></div>
+<div class="ttc" id="anamespacexb_html_ab2eae4b4732466698a7fdd89d77ba53b"><div class="ttname"><a href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xb::xbDbf</a></div><div class="ttdeci">class XBDLLEXPORT xbDbf</div><div class="ttdef"><b>Definition:</b> xbtblmgr.h:28</div></div>
+<div class="ttc" id="astructxb_1_1xbSchema_html"><div class="ttname"><a href="structxb_1_1xbSchema.html">xb::xbSchema</a></div><div class="ttdoc">Schema used for defining tables with CreateTable methods.</div><div class="ttdef"><b>Definition:</b> xbdbf.h:95</div></div>
+<div class="ttc" id="astructxb_1_1xbSchema_html_a1d612b2ed5dc0b0289c9e91b3cda3a25"><div class="ttname"><a href="structxb_1_1xbSchema.html#a1d612b2ed5dc0b0289c9e91b3cda3a25">xb::xbSchema::cType</a></div><div class="ttdeci">char cType</div><div class="ttdef"><b>Definition:</b> xbdbf.h:97</div></div>
+<div class="ttc" id="astructxb_1_1xbSchema_html_a2da554af25ef628acf59bb52996056ac"><div class="ttname"><a href="structxb_1_1xbSchema.html#a2da554af25ef628acf59bb52996056ac">xb::xbSchema::iFieldLen</a></div><div class="ttdeci">xbInt16 iFieldLen</div><div class="ttdef"><b>Definition:</b> xbdbf.h:98</div></div>
+<div class="ttc" id="astructxb_1_1xbSchema_html_a55bab3bb69dee3508d168c93e182d4b9"><div class="ttname"><a href="structxb_1_1xbSchema.html#a55bab3bb69dee3508d168c93e182d4b9">xb::xbSchema::iNoOfDecs</a></div><div class="ttdeci">xbInt16 iNoOfDecs</div><div class="ttdef"><b>Definition:</b> xbdbf.h:99</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdelete_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdelete_8cpp.html
new file mode 100644
index 0000000..bab3b1c
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdelete_8cpp.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/sql/xbdelete.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_25b94c3afce00ed38231227d8141f932.html">sql</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbdelete.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdrpix_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdrpix_8cpp.html
new file mode 100644
index 0000000..059570b
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdrpix_8cpp.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/sql/xbdrpix.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_25b94c3afce00ed38231227d8141f932.html">sql</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbdrpix.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdrptbl_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdrptbl_8cpp.html
new file mode 100644
index 0000000..2ccae0e
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbdrptbl_8cpp.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/sql/xbdrptbl.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_25b94c3afce00ed38231227d8141f932.html">sql</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbdrptbl.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbexp_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbexp_8cpp.html
new file mode 100644
index 0000000..55a0b2e
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbexp_8cpp.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbexp.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbexp.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbexp_8h.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbexp_8h.html
new file mode 100644
index 0000000..f57f73c
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbexp_8h.html
@@ -0,0 +1,104 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbexp.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> </div>
+ <div class="headertitle"><div class="title">xbexp.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="xbexp_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a6e9d2ccba2b3ac6e44ab411ffda488c2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbexp_8h.html#a6e9d2ccba2b3ac6e44ab411ffda488c2">XB_NULL_DATE</a>&#160;&#160;&#160;21474835648</td></tr>
+<tr class="separator:a6e9d2ccba2b3ac6e44ab411ffda488c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a id="a6e9d2ccba2b3ac6e44ab411ffda488c2" name="a6e9d2ccba2b3ac6e44ab411ffda488c2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6e9d2ccba2b3ac6e44ab411ffda488c2">&#9670;&nbsp;</a></span>XB_NULL_DATE</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_NULL_DATE&#160;&#160;&#160;21474835648</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbexp_8h_source.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbexp_8h_source.html
new file mode 100644
index 0000000..9f7ff76
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbexp_8h_source.html
@@ -0,0 +1,243 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbexp.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbexp.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="xbexp_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbexp.h</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022 Gary A Kunkel</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">*/</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#ifndef __XB_EXP_H__</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#define __XB_EXP_H__</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="comment">// #ifdef CMAKE_COMPILER_IS_GNUCC</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="comment">// #pragma interface</span></div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="comment">// #endif</span></div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"><a class="line" href="xbexp_8h.html#a6e9d2ccba2b3ac6e44ab411ffda488c2"> 25</a></span><span class="preprocessor">#define XB_NULL_DATE 21474835648</span></div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="preprocessor">#ifdef XB_FUNCTION_SUPPORT</span></div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="preprocessor">#define XB_EXP_CHAR &#39;C&#39;</span></div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="preprocessor">#define XB_EXP_DATE &#39;D&#39;</span></div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="preprocessor">#define XB_EXP_LOGICAL &#39;L&#39;</span></div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="preprocessor">#define XB_EXP_NUMERIC &#39;N&#39;</span></div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="preprocessor">#define XB_EXP_UNKNOWN &#39;U&#39;</span></div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="preprocessor">#ifdef XB_EXPRESSION_SUPPORT</span></div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="preprocessor">#define XB_EXP_CONSTANT &#39;C&#39;</span></div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="preprocessor">#define XB_EXP_FUNCTION &#39;F&#39;</span></div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="preprocessor">#define XB_EXP_FIELD &#39;D&#39;</span></div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="preprocessor">#define XB_EXP_OPERATOR &#39;O&#39;</span></div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="preprocessor">#define XB_EXP_NOTROOT &#39;N&#39; </span><span class="comment">// not root node, needs further parsing</span></div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span><span class="preprocessor">#define XB_EXP_PRE_OPERATOR &#39;B&#39; </span><span class="comment">// (B)efore) pre increment, pre decrement</span></div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="preprocessor">#define XB_EXP_POST_OPERATOR &#39;A&#39; </span><span class="comment">// (A)fter) post increment, pre decrement</span></div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="preprocessor">#define XB_END_OF_EXPRESSION -100</span></div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="comment">// #define XB_UNBALANCED_PARENS -101</span></div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="comment">// #define XB_UNBALANCED_QUOTES -102</span></div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> </div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="keyword">struct </span>XBDLLEXPORT xbExpToken {</div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> xbString sExpression; <span class="comment">// in - expression to pull next token from</span></div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <span class="comment">// out - remainder of the expression after token removed</span></div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> xbString sToken; <span class="comment">// next token pulled from the expression</span></div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <span class="keywordtype">char</span> cNodeType; <span class="comment">// one of XB_EXP_CONSTANT, XB_EXP_FUNCTION, XB_EXP_FIELD, XB_EXP_OPERATOR, XB_EXP_NOTROOT</span></div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="keywordtype">char</span> cReturnType; <span class="comment">// one of XB_EXP_CHAR, XB_EXP_DATE, XB_EXP_LOGICAL, XB_EXP_NUMERIC, XB_EXP_UNKNOWN</span></div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> xbInt16 iSts; <span class="comment">// return status after retrieving or attempting next token from expression</span></div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <span class="comment">// 0 = no error</span></div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="comment">// XB_END_OF_EXPRESSION</span></div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="comment">// XB_UNBALANCED_PARENS</span></div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="comment">// XB_UNBALANCED_QUOTES</span></div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="keywordtype">char</span> cPrevNodeType; <span class="comment">// previous node type</span></div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="keywordtype">char</span> cPrevReturnType; <span class="comment">// previous return type</span></div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> </div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <span class="comment">// constructor</span></div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> xbExpToken() { cNodeType = 0; cReturnType = 0; iSts = 0; cPrevNodeType = 0; cPrevReturnType = 0; }</div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span>};</div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="comment">/************************************************************************/</span></div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span><span class="keyword">class </span>XBDLLEXPORT xbExp{</div>
+<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> </div>
+<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> xbExp( <a class="code hl_variable" href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xbXBase</a> * );</div>
+<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> xbExp( <a class="code hl_variable" href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xbXBase</a> *, <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> * );</div>
+<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keyword">virtual</span> ~xbExp();</div>
+<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keywordtype">void</span> ClearTreeHandle();</div>
+<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> </div>
+<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> </div>
+<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
+<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <span class="keywordtype">void</span> DumpTree( xbInt16 iOption );</div>
+<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> <span class="keywordtype">void</span> DumpToken( xbExpToken &amp;t, xbInt16 iOption = 0 );</div>
+<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> </div>
+<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> xbInt16 GetResultLen() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="keywordtype">char</span> GetReturnType() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> xbInt16 GetBoolResult( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bResult );</div>
+<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> xbInt16 GetDateResult( xbDate &amp;dtResult );</div>
+<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> xbInt16 GetNumericResult( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dResult );</div>
+<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> xbInt16 GetStringResult( xbString &amp;sResult );</div>
+<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> xbInt16 GetStringResult( <span class="keywordtype">char</span> * vpResult, xbUInt32 ulLen );</div>
+<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> xbExpNode *GetTreeHandle();</div>
+<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> xbInt16 ParseExpression( <span class="keyword">const</span> xbString &amp;sExpression );</div>
+<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> xbInt16 ParseExpression( <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *dbf, <span class="keyword">const</span> xbString &amp;sExpression );</div>
+<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> xbInt16 ProcessExpression();</div>
+<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> xbInt16 ProcessExpression( xbInt16 iRecBufSw );</div>
+<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> </div>
+<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> </div>
+<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> xbInt16 GetNextToken( xbExpToken &amp;t );</div>
+<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> xbInt16 OperatorWeight( <span class="keyword">const</span> xbString &amp;sOperator );</div>
+<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> xbExpNode *GetNextNode( xbExpNode * n ) <span class="keyword">const</span>; <span class="comment">// traverses the tree from bottom left node, right, then up</span></div>
+<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> </div>
+<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> <span class="keyword">private</span>: <span class="comment">// methods</span></div>
+<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> </div>
+<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <span class="comment">// xbInt16 CalcExpressionResultLen();</span></div>
+<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> xbInt16 CalcFunctionResultLen( xbExpNode *n ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> xbInt16 CalcCharNodeLen( xbExpNode *n );</div>
+<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> xbInt16 CheckParensAndQuotes( <span class="keyword">const</span> xbString &amp;sExpression );</div>
+<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> xbInt16 GetExpressionResultLen() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> </div>
+<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> xbInt16 GetTokenCharConstant ( xbExpToken &amp;t );</div>
+<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> xbInt16 GetTokenDatabaseField ( xbExpToken &amp;t );</div>
+<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> xbInt16 GetTokenDateConstant ( xbExpToken &amp;t );</div>
+<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> xbInt16 GetTokenFunction ( xbExpToken &amp;t );</div>
+<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> xbInt16 GetTokenLogicalConstant( xbExpToken &amp;t );</div>
+<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> xbInt16 GetTokenNumericConstant( xbExpToken &amp;t );</div>
+<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> xbInt16 GetTokenOperator ( xbExpToken &amp;t );</div>
+<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> xbInt16 GetTokenParen ( xbExpToken &amp;t );</div>
+<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> </div>
+<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsFunction ( <span class="keyword">const</span> xbString &amp;sExp, <span class="keywordtype">char</span> &amp;cReturnType );</div>
+<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsLogicalConstant ( <span class="keyword">const</span> xbString &amp;sExp );</div>
+<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsNumericConstant ( <span class="keyword">const</span> xbString &amp;sExp, <span class="keywordtype">char</span> cPrevNodeType );</div>
+<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsOperator ( <span class="keyword">const</span> xbString &amp;sExp );</div>
+<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <span class="keywordtype">char</span> IsTokenSeparator ( <span class="keywordtype">char</span> c );</div>
+<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsWhiteSpace ( <span class="keywordtype">char</span> c );</div>
+<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> </div>
+<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> xbInt16 ParseExpression ( <span class="keyword">const</span> xbString &amp;sExpression, xbInt16 iWeight );</div>
+<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> xbInt16 ParseExpressionConstant( xbExpToken &amp;t, xbExpNode *n );</div>
+<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> xbInt16 ParseExpressionFunction( xbExpToken &amp;t, xbExpNode *n, xbInt16 iWeight );</div>
+<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> xbInt16 ParseExpressionFunctionParms( <span class="keyword">const</span> xbString &amp;sParms, xbLinkList&lt;xbString&gt; &amp;llParms );</div>
+<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> xbInt16 ParseExpressionField ( xbExpToken &amp;t, xbExpNode *n );</div>
+<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> xbInt16 ParseExpressionOperator( xbExpToken &amp;t, xbExpNode *n, xbInt16 iWeight );</div>
+<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> </div>
+<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> xbInt16 ProcessExpressionFunction( xbExpNode *n, xbInt16 iRecBufSw = 0 );</div>
+<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> xbInt16 ProcessExpressionOperator( xbExpNode *n );</div>
+<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> </div>
+<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> <span class="keyword">private</span>: <span class="comment">// fields</span></div>
+<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <a class="code hl_variable" href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xbXBase</a> *xbase;</div>
+<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *dbf;</div>
+<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> xbExpNode *nTree; <span class="comment">// pointer to tree of expNodes</span></div>
+<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> <span class="comment">// xbInt16 iExpLen; // size of expression result</span></div>
+<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> </div>
+<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> </div>
+<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span>};</div>
+<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> </div>
+<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span><span class="comment">/* Expression handler */</span></div>
+<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> </div>
+<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> </div>
+<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span>};</div>
+<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span><span class="preprocessor">#endif </span><span class="comment">// XB_EXPRESSION_SUPPORT</span></div>
+<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span><span class="preprocessor">#endif </span><span class="comment">// __XB_EXP_H__</span></div>
+<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> </div>
+<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> </div>
+<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
+<div class="ttc" id="anamespacexb_html_a25f47b226ce924a5c78f97989b0744a2"><div class="ttname"><a href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xb::xbDouble</a></div><div class="ttdeci">double xbDouble</div><div class="ttdef"><b>Definition:</b> xbtypes.h:23</div></div>
+<div class="ttc" id="anamespacexb_html_a97858ddeb1c4b0100f3edc1a46d3a8b0"><div class="ttname"><a href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xb::xbXBase</a></div><div class="ttdeci">class XBDLLEXPORT xbXBase</div><div class="ttdef"><b>Definition:</b> xbssv.h:27</div></div>
+<div class="ttc" id="anamespacexb_html_ab1a750481dd487f0d384aa1d200dff0f"><div class="ttname"><a href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xb::xbBool</a></div><div class="ttdeci">short int xbBool</div><div class="ttdef"><b>Definition:</b> xbtypes.h:24</div></div>
+<div class="ttc" id="anamespacexb_html_ab2eae4b4732466698a7fdd89d77ba53b"><div class="ttname"><a href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xb::xbDbf</a></div><div class="ttdeci">class XBDLLEXPORT xbDbf</div><div class="ttdef"><b>Definition:</b> xbtblmgr.h:28</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbexpnode_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbexpnode_8cpp.html
new file mode 100644
index 0000000..1b0480b
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbexpnode_8cpp.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbexpnode.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbexpnode.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbexpnode_8h.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbexpnode_8h.html
new file mode 100644
index 0000000..a9e458c
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbexpnode_8h.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbexpnode.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbexpnode.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="xbexpnode_8h_source.html">Go to the source code of this file.</a></p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbexpnode_8h_source.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbexpnode_8h_source.html
new file mode 100644
index 0000000..8e5db2b
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbexpnode_8h_source.html
@@ -0,0 +1,190 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbexpnode.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbexpnode.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="xbexpnode_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbexpnode.h</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022 Gary A Kunkel</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">*/</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#ifndef __XB_EXPNODE_H__</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#define __XB_EXPNODE_H__</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="comment">// #ifdef CMAKE_COMPILER_IS_GNUCC</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="comment">// #pragma interface</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="comment">// #endif</span></div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#ifdef XB_EXPRESSION_SUPPORT</span></div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="comment">//class XBDLLEXPORT xbDbf;</span></div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="comment">/************************************************************************/</span></div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="keyword">class </span>XBDLLEXPORT xbExpNode {</div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> xbExpNode();</div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> xbExpNode( xbString &amp;sNodeText, <span class="keywordtype">char</span> cReturnType, <span class="keywordtype">char</span> cNodeType );</div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> xbExpNode( xbString &amp;sNodeText, <span class="keywordtype">char</span> cNodeType );</div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> xbExpNode( <span class="keywordtype">char</span> cNodeType );</div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <span class="keyword">virtual</span> ~xbExpNode();</div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> xbInt16 AddChild( xbExpNode *n );</div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> xbExpNode *GetChild( xbUInt32 ulChildNo ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> xbUInt32 GetChildCnt() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> xbUInt32 GetChildNo() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *GetDbf() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> xbInt16 GetFieldNo() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> xbExpNode *GetFirstNode();</div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> xbExpNode *GetNextNode() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <span class="keywordtype">void</span> GetNodeText( xbString &amp;sNodeText ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="keywordtype">char</span> GetNodeType() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> xbExpNode *GetParent() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> xbString &amp;GetStringResult();</div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetBoolResult() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> GetNumericResult() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> xbUInt32 GetResultLen() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> xbExpNode *GetRightSibling() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <span class="keywordtype">char</span> GetReturnType() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> xbInt16 GetWeight() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> HasRightSibling() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsOperator() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsUnaryOperator() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="keywordtype">void</span> RemoveLastChild();</div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keywordtype">void</span> SetResultLen( xbUInt32 ulResultLen );</div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keywordtype">void</span> SetDbfInfo( <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *dbf );</div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keywordtype">void</span> SetDbfInfo( <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *dbf, xbInt16 iFieldNo );</div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keywordtype">void</span> SetNodeText( xbString &amp;sNodeText );</div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="keywordtype">void</span> SetNodeType( <span class="keywordtype">char</span> cNodeType );</div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <span class="keywordtype">void</span> SetParent( xbExpNode *n );</div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <span class="keywordtype">void</span> SetResult( xbString &amp;sResult );</div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="keywordtype">void</span> SetResult( xbDate &amp;dtResult );</div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <span class="keywordtype">void</span> SetResult( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bResult );</div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="keywordtype">void</span> SetResult( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dResult );</div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <span class="keywordtype">void</span> SetReturnType( <span class="keywordtype">char</span> cReturnType );</div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <span class="keywordtype">void</span> SetWeight( xbInt16 iWeight );</div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="keywordtype">void</span> DumpNode( xbInt16 iOption ) <span class="keyword">const</span>; <span class="comment">// 0 = no children, 1 = and children</span></div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> </div>
+<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> xbString sNodeText; <span class="comment">// expression text</span></div>
+<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="keywordtype">char</span> cReturnType; <span class="comment">// one of: XB_EXP_CHAR, XB_EXP_DATE, XB_EXP_LOGICAL, XB_EXP_NUMERIC</span></div>
+<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="keywordtype">char</span> cNodeType; <span class="comment">// one of: XB_EXP_CONSTANT, XB_EXP_FUNCTION, XB_EXP_FIELD, XB_EXP_OPERATOR</span></div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> xbString sResult; <span class="comment">// char result, and operator</span></div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dResult; <span class="comment">// numeric and bool results</span></div>
+<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> xbExpNode * nParent; <span class="comment">// pointer to parent</span></div>
+<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> xbLinkList&lt;xbExpNode *&gt; llChildren; <span class="comment">// linked list of descendent nodes</span></div>
+<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *dbf; <span class="comment">// pointer to dbf, used for field, RECNO() and RECCOUNT()</span></div>
+<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> xbInt16 iFieldNo; <span class="comment">// field no if DBF field</span></div>
+<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> xbUInt32 ulResultLen; <span class="comment">// for string results, accumulated length of character operations</span></div>
+<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="comment">// includes the sum of all nodes under this + this</span></div>
+<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="comment">// date = 8, numeric = 4, logical = 1</span></div>
+<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> xbInt16 iWeight; <span class="comment">// used for building the tree of nodes, assigned to operators</span></div>
+<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="comment">// the higher the number, the lower it goes on the tree</span></div>
+<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span>};</div>
+<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> </div>
+<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span><span class="comment">/************************************************************************/</span></div>
+<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> </div>
+<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span><span class="comment">/* Expression handler */</span></div>
+<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> </div>
+<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> </div>
+<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span>};</div>
+<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span><span class="preprocessor">#endif </span><span class="comment">// XB_EXPRESSION_SUPPORT</span></div>
+<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span><span class="preprocessor">#endif </span><span class="comment">// __XB_EXP_H__</span></div>
+<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> </div>
+<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> </div>
+<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
+<div class="ttc" id="anamespacexb_html_a25f47b226ce924a5c78f97989b0744a2"><div class="ttname"><a href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xb::xbDouble</a></div><div class="ttdeci">double xbDouble</div><div class="ttdef"><b>Definition:</b> xbtypes.h:23</div></div>
+<div class="ttc" id="anamespacexb_html_ab1a750481dd487f0d384aa1d200dff0f"><div class="ttname"><a href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xb::xbBool</a></div><div class="ttdeci">short int xbBool</div><div class="ttdef"><b>Definition:</b> xbtypes.h:24</div></div>
+<div class="ttc" id="anamespacexb_html_ab2eae4b4732466698a7fdd89d77ba53b"><div class="ttname"><a href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xb::xbDbf</a></div><div class="ttdeci">class XBDLLEXPORT xbDbf</div><div class="ttdef"><b>Definition:</b> xbtblmgr.h:28</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbfields_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbfields_8cpp.html
new file mode 100644
index 0000000..8bd16cd
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbfields_8cpp.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbfields.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#namespaces">Namespaces</a> </div>
+ <div class="headertitle"><div class="title">xbfields.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
+Namespaces</h2></td></tr>
+<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbfile_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbfile_8cpp.html
new file mode 100644
index 0000000..a5c6c9b
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbfile_8cpp.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbfile.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#namespaces">Namespaces</a> </div>
+ <div class="headertitle"><div class="title">xbfile.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
+Namespaces</h2></td></tr>
+<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbfile_8h.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbfile_8h.html
new file mode 100644
index 0000000..fb36f75
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbfile_8h.html
@@ -0,0 +1,181 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbfile.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#namespaces">Namespaces</a> &#124;
+<a href="#define-members">Macros</a> </div>
+ <div class="headertitle"><div class="title">xbfile.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="xbfile_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html">xb::xbFile</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Class for handling low level file I/O. <a href="classxb_1_1xbFile.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
+Namespaces</h2></td></tr>
+<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ae58c73e0ba237fcf67ee20feea6c2743"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbfile_8h.html#ae58c73e0ba237fcf67ee20feea6c2743">XB_READ</a>&#160;&#160;&#160;0</td></tr>
+<tr class="separator:ae58c73e0ba237fcf67ee20feea6c2743"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af991a288c327f6857e90156ea734a633"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbfile_8h.html#af991a288c327f6857e90156ea734a633">XB_READ_WRITE</a>&#160;&#160;&#160;1</td></tr>
+<tr class="separator:af991a288c327f6857e90156ea734a633"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abbf99e259c2f31572c886da6d85b1359"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbfile_8h.html#abbf99e259c2f31572c886da6d85b1359">XB_WRITE</a>&#160;&#160;&#160;2</td></tr>
+<tr class="separator:abbf99e259c2f31572c886da6d85b1359"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9ec4d60a008c667d9861e3b3814f0232"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbfile_8h.html#a9ec4d60a008c667d9861e3b3814f0232">XB_SINGLE_USER</a>&#160;&#160;&#160;0</td></tr>
+<tr class="separator:a9ec4d60a008c667d9861e3b3814f0232"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a05c0fc99ba71cf953d046d12f3f874bc"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbfile_8h.html#a05c0fc99ba71cf953d046d12f3f874bc">XB_MULTI_USER</a>&#160;&#160;&#160;1</td></tr>
+<tr class="separator:a05c0fc99ba71cf953d046d12f3f874bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a id="a05c0fc99ba71cf953d046d12f3f874bc" name="a05c0fc99ba71cf953d046d12f3f874bc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a05c0fc99ba71cf953d046d12f3f874bc">&#9670;&nbsp;</a></span>XB_MULTI_USER</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_MULTI_USER&#160;&#160;&#160;1</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae58c73e0ba237fcf67ee20feea6c2743" name="ae58c73e0ba237fcf67ee20feea6c2743"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae58c73e0ba237fcf67ee20feea6c2743">&#9670;&nbsp;</a></span>XB_READ</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_READ&#160;&#160;&#160;0</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af991a288c327f6857e90156ea734a633" name="af991a288c327f6857e90156ea734a633"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af991a288c327f6857e90156ea734a633">&#9670;&nbsp;</a></span>XB_READ_WRITE</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_READ_WRITE&#160;&#160;&#160;1</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9ec4d60a008c667d9861e3b3814f0232" name="a9ec4d60a008c667d9861e3b3814f0232"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9ec4d60a008c667d9861e3b3814f0232">&#9670;&nbsp;</a></span>XB_SINGLE_USER</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_SINGLE_USER&#160;&#160;&#160;0</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abbf99e259c2f31572c886da6d85b1359" name="abbf99e259c2f31572c886da6d85b1359"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abbf99e259c2f31572c886da6d85b1359">&#9670;&nbsp;</a></span>XB_WRITE</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_WRITE&#160;&#160;&#160;2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbfile_8h_source.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbfile_8h_source.html
new file mode 100644
index 0000000..033b9d6
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbfile_8h_source.html
@@ -0,0 +1,266 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbfile.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbfile.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="xbfile_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbfile.h</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022 Gary A Kunkel</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">*/</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#ifndef __XB_FILE_H__</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#define __XB_FILE_H__</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#ifdef CMAKE_COMPILER_IS_GNUCC</span></div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#pragma interface</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="comment">/*****************************/</span></div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="comment">/* File Open Modes */</span></div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"><a class="line" href="xbfile_8h.html#ae58c73e0ba237fcf67ee20feea6c2743"> 25</a></span><span class="preprocessor">#define XB_READ 0</span></div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"><a class="line" href="xbfile_8h.html#af991a288c327f6857e90156ea734a633"> 26</a></span><span class="preprocessor">#define XB_READ_WRITE 1</span></div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"><a class="line" href="xbfile_8h.html#abbf99e259c2f31572c886da6d85b1359"> 27</a></span><span class="preprocessor">#define XB_WRITE 2</span></div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="comment">/*****************************/</span></div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="comment">/* File Access Modes */</span></div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="xbfile_8h.html#a9ec4d60a008c667d9861e3b3814f0232"> 31</a></span><span class="preprocessor">#define XB_SINGLE_USER 0 </span><span class="comment">// file buffering on</span></div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"><a class="line" href="xbfile_8h.html#a05c0fc99ba71cf953d046d12f3f874bc"> 32</a></span><span class="preprocessor">#define XB_MULTI_USER 1 </span><span class="comment">// file buffering off</span></div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"><a class="line" href="classxb_1_1xbFile.html"> 56</a></span><span class="keyword">class </span>XBDLLEXPORT <a class="code hl_class" href="classxb_1_1xbFile.html">xbFile</a> : <span class="keyword">public</span> <a class="code hl_class" href="classxb_1_1xbSsv.html">xbSsv</a> {</div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <a class="code hl_class" href="classxb_1_1xbFile.html">xbFile</a>( <a class="code hl_class" href="classxb_1_1xbXBase.html">xbXBase</a> * x );</div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <a class="code hl_class" href="classxb_1_1xbFile.html">~xbFile</a>();</div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> </div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; GetDirectory() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; GetFileName() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; GetFqFileName() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> </div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> xbInt16 CreateUniqueFileName( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sDirIn, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sExtIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFqnOut, xbInt16 iOption = 0 );</div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> </div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> xbInt16 DetermineXbaseTableVersion( <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> cFileTypeByte ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> xbInt16 DetermineXbaseMemoVersion( <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> cFileTypeByte ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> eGetDouble ( <span class="keyword">const</span> <span class="keywordtype">char</span> *p ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> xbInt32 eGetInt32 ( <span class="keyword">const</span> <span class="keywordtype">char</span> *p ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> xbUInt32 eGetUInt32 ( <span class="keyword">const</span> <span class="keywordtype">char</span> *p ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> xbInt16 eGetInt16 ( <span class="keyword">const</span> <span class="keywordtype">char</span> *p ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> xbUInt16 eGetUInt16 ( <span class="keyword">const</span> <span class="keywordtype">char</span> *p ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keywordtype">void</span> ePutDouble ( <span class="keywordtype">char</span> *p, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> d );</div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keywordtype">void</span> ePutInt32 ( <span class="keywordtype">char</span> *p, xbInt32 l );</div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keywordtype">void</span> ePutUInt32 ( <span class="keywordtype">char</span> *p, xbUInt32 ul );</div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="keywordtype">void</span> ePutInt16 ( <span class="keywordtype">char</span> *p, xbInt16 s );</div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <span class="keywordtype">void</span> ePutUInt16 ( <span class="keywordtype">char</span> *p, xbUInt16 s );</div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> FileExists () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> FileExists ( xbInt16 iOption ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> FileExists ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> FileExists ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iOption ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> FileIsOpen () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> xbUInt32 GetBlockSize () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> </div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> xbInt16 GetFileDirPart ( <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileDirPartOut ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> xbInt16 GetFileDirPart ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sCompleteFileNameIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileDirPartOut ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> xbInt16 GetFileExtPart ( <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileExtPartOut ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> xbInt16 GetFileExtPart ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sCompleteFileNameIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileExtPartOut ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> xbInt16 GetFileMtime ( time_t &amp;mtime );</div>
+<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> xbInt16 GetFileNamePart( <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileNamePartOut ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> xbInt16 GetFileNamePart( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sCompleteFileNameIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileNamePartOut ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> xbInt16 GetFileSize ( xbUInt64 &amp;ullFileSize );</div>
+<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> xbInt16 GetFileType ( <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileType ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> </div>
+<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> </div>
+<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> xbInt16 GetOpenMode () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> xbInt16 GetShareMode () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> </div>
+<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> </div>
+<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> xbInt16 GetXbaseFileTypeByte( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 &amp;iVersion );</div>
+<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> xbInt16 GetXbaseFileTypeByte( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> &amp;cFileTypeByte );</div>
+<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> xbInt16 GetXbaseFileTypeByte( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> &amp;cFileTypeByte, xbInt16 &amp;iVersion );</div>
+<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> </div>
+<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> xbInt16 NameSuffixMissing( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iOption ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> </div>
+<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> xbInt16 ReadBlock ( xbUInt32 ulBlockNo, <span class="keywordtype">size_t</span> readSize, <span class="keywordtype">void</span> *buf );</div>
+<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> xbInt16 ReadBlock ( xbUInt32 ulBlockNo, xbUInt32 ulBlockSize, <span class="keywordtype">size_t</span> readSize, <span class="keywordtype">void</span> *buf );</div>
+<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> </div>
+<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> xbInt16 SetBlockSize ( xbUInt32 ulBlockSize );</div>
+<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <span class="keywordtype">void</span> SetDirectory ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sDirectory);</div>
+<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="keywordtype">void</span> SetFileName ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName );</div>
+<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> <span class="keywordtype">void</span> SetFqFileName ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFqName );</div>
+<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> xbInt16 SetHomeFolders();</div>
+<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> </div>
+<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> xbInt16 WriteBlock ( xbUInt32 ulBlockNo, <span class="keywordtype">size_t</span> writeSize, <span class="keywordtype">void</span> *buf );</div>
+<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> </div>
+<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> xbInt16 xbFclose ();</div>
+<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> xbInt16 xbFeof ();</div>
+<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> xbInt16 xbFflush ();</div>
+<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> xbInt16 xbFgetc ( xbInt32 &amp;c );</div>
+<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> xbInt16 xbFgetc ( <span class="keywordtype">char</span> &amp;c );</div>
+<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> xbInt16 xbFgets ( <span class="keywordtype">size_t</span> lSize, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sLine );</div>
+<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> </div>
+<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> </div>
+<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"><a class="line" href="classxb_1_1xbFile.html#a7cdfef5ede9ac98d44a28a6b7a70972c"> 131</a></span> xbInt16 <a class="code hl_function" href="classxb_1_1xbFile.html#a7cdfef5ede9ac98d44a28a6b7a70972c">xbFopen</a> ( xbInt16 iOpenMode );</div>
+<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> xbInt16 xbFopen ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOpenMode, xbInt16 iShareMode );</div>
+<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> xbInt16 xbFopen ( xbInt16 iOpenMode, xbInt16 iShareMode );</div>
+<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> xbInt16 xbFopen ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sMode, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iShareMode );</div>
+<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> </div>
+<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> xbInt16 xbFputc ( xbInt32 c );</div>
+<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> xbInt16 xbFputc ( xbInt32 c, xbInt32 iNoTimes );</div>
+<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> xbInt16 xbFputs ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s );</div>
+<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> xbInt16 xbFread ( <span class="keywordtype">void</span> *ptr, <span class="keywordtype">size_t</span> size, <span class="keywordtype">size_t</span> nmemb );</div>
+<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> xbInt16 xbFseek ( xbInt64 llOffset, xbInt32 whence );</div>
+<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="keywordtype">size_t</span> xbFtell ();</div>
+<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="keywordtype">void</span> xbFTurnOffFileBuffering();</div>
+<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> </div>
+<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> xbInt16 xbReadUntil ( <span class="keyword">const</span> <span class="keywordtype">char</span> cDelim, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
+<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> xbInt16 xbRemove ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iOption );</div>
+<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> xbInt16 xbRemove ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName );</div>
+<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> xbInt16 xbRemove ();</div>
+<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> </div>
+<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> xbInt16 xbRename ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOldName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sNewName );</div>
+<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> <span class="keywordtype">void</span> xbRewind ();</div>
+<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> </div>
+<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> xbInt16 xbFwrite ( <span class="keyword">const</span> <span class="keywordtype">void</span> *ptr, <span class="keywordtype">size_t</span> lSize, <span class="keywordtype">size_t</span> lNmemb );</div>
+<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> </div>
+<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> xbInt16 xbTruncate ( xbInt64 llSize );</div>
+<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> </div>
+<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> </div>
+<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span><span class="preprocessor"> #ifdef XB_LOCKING_SUPPORT</span></div>
+<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> xbInt16 xbLock ( xbInt16 iFunction, xbInt64 llOffset, <span class="keywordtype">size_t</span> stLen );</div>
+<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> xbInt16 GetLockRetryCount() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> <span class="keywordtype">void</span> SetLockRetryCount( xbInt16 iLockRetries );</div>
+<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> </div>
+<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
+<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> xbInt16 DumpBlockToDisk( xbUInt32 ulBlockNo, <span class="keywordtype">size_t</span> lBlockSize );</div>
+<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> xbInt16 DumpMemToDisk ( <span class="keywordtype">char</span> *p, <span class="keywordtype">size_t</span> lBlockSize );</div>
+<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> </div>
+<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> </div>
+<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> </div>
+<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"><a class="line" href="classxb_1_1xbFile.html#ae39a67ea391b46055d4ca299cb222004"> 171</a></span> <a class="code hl_class" href="classxb_1_1xbXBase.html">xbXBase</a> *<a class="code hl_variable" href="classxb_1_1xbFile.html#ae39a67ea391b46055d4ca299cb222004">xbase</a>; <span class="comment">/* pointer to the main structures */</span></div>
+<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> </div>
+<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> FILE *fp;</div>
+<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sFqFileName; <span class="comment">/* fully qualified file name */</span></div>
+<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sFileName; <span class="comment">/* file name */</span></div>
+<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sDirectory; <span class="comment">/* directory, ends with / or \ */</span></div>
+<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bFileOpen; <span class="comment">/* true if file is open */</span></div>
+<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> xbUInt32 ulBlockSize; <span class="comment">/* used for memo and index files */</span></div>
+<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> </div>
+<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> xbInt16 iOpenMode; <span class="comment">/* XB_READ || XB_READ_WRITE || XB_WRITE */</span></div>
+<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> xbInt16 iShareMode; <span class="comment">/* XB_SINGLE_USER || XB_MULTI_USER - set file buffering */</span></div>
+<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> xbInt32 iFileNo; <span class="comment">/* Library File No */</span></div>
+<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> </div>
+<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span><span class="preprocessor"> #ifdef XB_LOCKING_SUPPORT</span></div>
+<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> xbInt16 iLockRetries; <span class="comment">/* file override number of lock attempts */</span></div>
+<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> </div>
+<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span><span class="preprocessor"> #ifdef HAVE_SETENDOFFILE_F</span></div>
+<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> HANDLE fHandle;</div>
+<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> </div>
+<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> </div>
+<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span>};</div>
+<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> </div>
+<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span>} <span class="comment">/* namespace */</span></div>
+<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span><span class="preprocessor">#endif </span><span class="comment">/* __XBFILE_H__ */</span><span class="preprocessor"></span></div>
+<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> </div>
+<div class="ttc" id="aclassxb_1_1xbFile_html"><div class="ttname"><a href="classxb_1_1xbFile.html">xb::xbFile</a></div><div class="ttdoc">Class for handling low level file I/O.</div><div class="ttdef"><b>Definition:</b> xbfile.h:56</div></div>
+<div class="ttc" id="aclassxb_1_1xbFile_html_a7cdfef5ede9ac98d44a28a6b7a70972c"><div class="ttname"><a href="classxb_1_1xbFile.html#a7cdfef5ede9ac98d44a28a6b7a70972c">xb::xbFile::xbFopen</a></div><div class="ttdeci">xbInt16 xbFopen(xbInt16 iOpenMode)</div></div>
+<div class="ttc" id="aclassxb_1_1xbFile_html_ae39a67ea391b46055d4ca299cb222004"><div class="ttname"><a href="classxb_1_1xbFile.html#ae39a67ea391b46055d4ca299cb222004">xb::xbFile::xbase</a></div><div class="ttdeci">xbXBase * xbase</div><div class="ttdef"><b>Definition:</b> xbfile.h:171</div></div>
+<div class="ttc" id="aclassxb_1_1xbSsv_html"><div class="ttname"><a href="classxb_1_1xbSsv.html">xb::xbSsv</a></div><div class="ttdoc">Class for handling shared system variables.</div><div class="ttdef"><b>Definition:</b> xbssv.h:59</div></div>
+<div class="ttc" id="aclassxb_1_1xbString_html"><div class="ttname"><a href="classxb_1_1xbString.html">xb::xbString</a></div><div class="ttdoc">Class for handling string data.</div><div class="ttdef"><b>Definition:</b> xbstring.h:50</div></div>
+<div class="ttc" id="aclassxb_1_1xbXBase_html"><div class="ttname"><a href="classxb_1_1xbXBase.html">xb::xbXBase</a></div><div class="ttdoc">xbXbase class.</div><div class="ttdef"><b>Definition:</b> xbxbase.h:123</div></div>
+<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
+<div class="ttc" id="anamespacexb_html_a25f47b226ce924a5c78f97989b0744a2"><div class="ttname"><a href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xb::xbDouble</a></div><div class="ttdeci">double xbDouble</div><div class="ttdef"><b>Definition:</b> xbtypes.h:23</div></div>
+<div class="ttc" id="anamespacexb_html_ab1a750481dd487f0d384aa1d200dff0f"><div class="ttname"><a href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xb::xbBool</a></div><div class="ttdeci">short int xbBool</div><div class="ttdef"><b>Definition:</b> xbtypes.h:24</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbfilter_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbfilter_8cpp.html
new file mode 100644
index 0000000..78f8bce
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbfilter_8cpp.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbfilter.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbfilter.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbfilter_8h.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbfilter_8h.html
new file mode 100644
index 0000000..516f562
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbfilter_8h.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbfilter.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbfilter.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="xbfilter_8h_source.html">Go to the source code of this file.</a></p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbfilter_8h_source.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbfilter_8h_source.html
new file mode 100644
index 0000000..7c2d905
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbfilter_8h_source.html
@@ -0,0 +1,159 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbfilter.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbfilter.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="xbfilter_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbfilter.h</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022 Gary A Kunkel</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">This class manages the user data area (UDA)</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"></span> </div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment">*/</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> </div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#ifndef __XB_XBFILTER_H__</span></div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#define __XB_XBFILTER_H__</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="preprocessor">#ifdef CMAKE_COMPILER_IS_GNUCC</span></div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#pragma interface</span></div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="preprocessor">#ifdef XB_FILTER_SUPPORT</span></div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="comment">//#ifdef XB_INDEX_SUPPORT</span></div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="comment">//class XBDLLEXPORT xbIx;</span></div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="comment">//#endif // XB_INDEX_SUPPORT</span></div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="keyword">class </span>XBDLLEXPORT xbFilter {</div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> xbFilter( <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *dbf );</div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> ~xbFilter();</div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> xbInt16 Set( xbString &amp;sFilterExpression );</div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> xbInt16 Set( <span class="keyword">const</span> <span class="keywordtype">char</span> *sFilterExpression );</div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> xbInt16 GetFirstRecord( xbInt16 iOpt = 1 );</div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> xbInt16 GetNextRecord ( xbInt16 iOpt = 1 );</div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> xbInt16 GetPrevRecord ( xbInt16 iOpt = 1 );</div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> xbInt16 GetLastRecord ( xbInt16 iOpt = 1 );</div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> <span class="keywordtype">void</span> SetLimit( xbInt32 ulLimit );</div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> xbInt32 GetLimit() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <span class="keywordtype">void</span> ResetQryCnt();</div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> xbInt32 GetQryCnt() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span><span class="preprocessor"> #ifdef XB_INDEX_SUPPORT</span></div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> xbInt16 GetFirstRecordIx( xbInt16 iOpt = 1 );</div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> xbInt16 GetNextRecordIx ( xbInt16 iOpt = 1 );</div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> xbInt16 GetPrevRecordIx ( xbInt16 iOpt = 1 );</div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> xbInt16 GetLastRecordIx ( xbInt16 iOpt = 1 );</div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INDEX_SUPPORT</span></div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="comment">// xbXBase *xbase;</span></div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *dbf;</div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> xbExp *exp;</div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> xbInt32 lLimit; <span class="comment">// max number rows returned</span></div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> xbInt32 lCurQryCnt; <span class="comment">// current count of rows returned, neg# is moving from bottom to top</span></div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <span class="comment">// pos# is moving from top to bottom</span></div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span><span class="preprocessor"> #ifdef XB_INDEX_SUPPORT</span></div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> xbIx *pIx; <span class="comment">// if index is set, the class uses the index tag, otherwise table</span></div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keywordtype">void</span> *vpTag;</div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INDEX_SUPPORT</span></div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span>};</div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span>} <span class="comment">/* namespace */</span></div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="preprocessor">#endif </span><span class="comment">/* XB_FILTER_SUPPORT */</span><span class="preprocessor"></span></div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span><span class="preprocessor">#endif </span><span class="comment">/* __XBFILTER_H__ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
+<div class="ttc" id="anamespacexb_html_ab2eae4b4732466698a7fdd89d77ba53b"><div class="ttname"><a href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xb::xbDbf</a></div><div class="ttdeci">class XBDLLEXPORT xbDbf</div><div class="ttdef"><b>Definition:</b> xbtblmgr.h:28</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbfuncs_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbfuncs_8cpp.html
new file mode 100644
index 0000000..70eeaca
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbfuncs_8cpp.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbfuncs.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbfuncs.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbindex_8h.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbindex_8h.html
new file mode 100644
index 0000000..3fc2b53
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbindex_8h.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbindex.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbindex.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="xbindex_8h_source.html">Go to the source code of this file.</a></p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbindex_8h_source.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbindex_8h_source.html
new file mode 100644
index 0000000..81c93eb
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbindex_8h_source.html
@@ -0,0 +1,600 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbindex.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbindex.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="xbindex_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbindex.h</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014, 2018, 2022 Gary A Kunkel</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">*/</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#ifndef __XB_INDEX_H__</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#define __XB_INDEX_H__</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifdef XB_INDEX_SUPPORT</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#define XB_ADD_KEY 1</span></div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#define XB_UPD_KEY 2</span></div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="preprocessor">#define XB_DEL_KEY 3</span></div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="comment">// structure for index nodes, each node contains information regarding one block</span></div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="keyword">struct </span>XBDLLEXPORT xbIxNode {</div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> xbIxNode *npPrev; <span class="comment">// pointer to previous node in chain</span></div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> xbIxNode *npNext; <span class="comment">// pointer to next node in chain</span></div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> xbUInt32 iCurKeyNo; <span class="comment">// current key number in the node, 0 offset</span></div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> xbUInt32 ulBlockNo; <span class="comment">// this block number</span></div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> xbUInt32 ulBufSize; <span class="comment">// size of cpBlockData</span></div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="keywordtype">char</span> *cpBlockData; <span class="comment">// pointer to memory version of block data stored in file</span></div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span>};</div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span><span class="keyword">class </span>XBDLLEXPORT xbIx : <span class="keyword">public</span> xbFile {</div>
+<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> xbIx( <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> * d );</div>
+<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <span class="keyword">virtual</span> ~xbIx();</div>
+<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> </div>
+<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="keyword">virtual</span> xbInt16 CheckTagIntegrity( <span class="keywordtype">void</span> *vpTag, xbInt16 iOpt ) = 0;</div>
+<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <span class="keyword">virtual</span> xbInt16 Close();</div>
+<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <span class="keyword">virtual</span> xbInt16 CreateTag( <span class="keyword">const</span> xbString &amp;sName, <span class="keyword">const</span> xbString &amp;sKey, <span class="keyword">const</span> xbString &amp;sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, <span class="keywordtype">void</span> **vpTag ) = 0;</div>
+<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <span class="keyword">virtual</span> xbInt16 FindKey( <span class="keywordtype">void</span> *vpTag, <span class="keyword">const</span> xbString &amp;sKey, xbInt16 iRetrieveSw );</div>
+<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="keyword">virtual</span> xbInt16 FindKey( <span class="keywordtype">void</span> *vpTag, <span class="keyword">const</span> <span class="keywordtype">char</span> * cKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw );</div>
+<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <span class="keyword">virtual</span> xbInt16 FindKey( <span class="keywordtype">void</span> *vpTag, <span class="keyword">const</span> xbBcd &amp;bcd, xbInt16 iRetrieveSw );</div>
+<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <span class="keyword">virtual</span> xbInt16 FindKey( <span class="keywordtype">void</span> *vpTag, <span class="keyword">const</span> xbDate &amp;dtKey, xbInt16 iRetrieveSw );</div>
+<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <span class="keyword">virtual</span> xbInt16 FindKey( <span class="keywordtype">void</span> *vpTag, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dKey, xbInt16 iRetrieveSw );</div>
+<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="keyword">virtual</span> xbInt16 FindKey( <span class="keywordtype">void</span> *vpTag, <span class="keyword">const</span> <span class="keywordtype">void</span> *vKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw ) = 0;</div>
+<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> *GetCurTag() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="keyword">virtual</span> <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *GetDbf() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> </div>
+<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <span class="keyword">virtual</span> xbString &amp;GetKeyExpression( <span class="keyword">const</span> <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keyword">virtual</span> xbString &amp;GetKeyFilter( <span class="keyword">const</span> <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keyword">virtual</span> <span class="keywordtype">char</span> GetKeyType( <span class="keyword">const</span> <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <span class="keyword">virtual</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetLocked() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> </div>
+<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="keyword">virtual</span> xbInt16 GetFirstKey( <span class="keywordtype">void</span> *vpTag, xbInt16 iRetrieveSw ) = 0;</div>
+<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <span class="keyword">virtual</span> xbInt16 GetFirstKey( <span class="keywordtype">void</span> *vpTag );</div>
+<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> <span class="keyword">virtual</span> xbInt16 GetFirstKey();</div>
+<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> </div>
+<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <span class="keyword">virtual</span> xbInt16 GetLastKey( <span class="keywordtype">void</span> *vpTag, xbInt16 lRetrieveSw ) = 0;</div>
+<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="keyword">virtual</span> xbInt16 GetLastKey( <span class="keywordtype">void</span> *vpTag );</div>
+<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="keyword">virtual</span> xbInt16 GetLastKey();</div>
+<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> </div>
+<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> <span class="keyword">virtual</span> xbInt16 GetNextKey( <span class="keywordtype">void</span> *vpTag, xbInt16 iRetrieveSw ) = 0;</div>
+<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> <span class="keyword">virtual</span> xbInt16 GetNextKey( <span class="keywordtype">void</span> *vpTag );</div>
+<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="keyword">virtual</span> xbInt16 GetNextKey();</div>
+<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> </div>
+<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="keyword">virtual</span> xbInt16 GetPrevKey( <span class="keywordtype">void</span> *vpTag, xbInt16 iRetrieveSw ) = 0;</div>
+<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="keyword">virtual</span> xbInt16 GetPrevKey( <span class="keywordtype">void</span> *vpTag );</div>
+<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="keyword">virtual</span> xbInt16 GetPrevKey();</div>
+<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> </div>
+<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> *GetTag( xbInt16 iTagNo ) <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> *GetTag( xbString &amp;sTagName ) <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> <span class="keyword">virtual</span> xbInt16 GetTagCount() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> </div>
+<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <span class="keyword">virtual</span> xbString &amp;GetTagName( <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * GetTagName( <span class="keywordtype">void</span> *vpTag, xbInt16 iOpt ) <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> GetTagName( <span class="keywordtype">void</span> *vpTag, xbString &amp;sTagName ) {};</div>
+<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> </div>
+<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> <span class="keyword">virtual</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetUnique( <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> <span class="keyword">virtual</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetSortOrder( <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> </div>
+<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <span class="keyword">virtual</span> xbInt16 Open( <span class="keyword">const</span> xbString &amp;sFileName );</div>
+<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> <span class="keyword">virtual</span> xbInt16 SetCurTag( xbInt16 iTagNo ) = 0;</div>
+<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> <span class="keyword">virtual</span> xbInt16 SetCurTag( xbString &amp;sTagName ) = 0;</div>
+<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> SetCurTag( <span class="keywordtype">void</span> * vpCurTag );</div>
+<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> SetLocked( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bLocked );</div>
+<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> </div>
+<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> TestStub( <span class="keywordtype">char</span> *s, <span class="keywordtype">void</span> *vpTag ) {};</div>
+<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> </div>
+<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> </div>
+<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> </div>
+<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> <span class="keyword">virtual</span> xbInt16 Reindex( <span class="keywordtype">void</span> **vpTag ) = 0;</div>
+<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> </div>
+<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> </div>
+<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
+<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <span class="keyword">virtual</span> xbInt16 DumpFreeBlocks( xbInt16 iOpt = 0 ) { <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a>; }</div>
+<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> <span class="keyword">virtual</span> xbInt16 DumpHeader( xbInt16 iDestOpt = 0, xbInt16 iFmtOpt = 0 ) = 0;</div>
+<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <span class="keyword">virtual</span> xbInt16 DumpIxForTag( <span class="keywordtype">void</span> *vpTag, xbInt16 iOutputOpt ) = 0;</div>
+<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> DumpIxNodeChain( <span class="keywordtype">void</span> *vpTag, xbInt16 iOutputOpt ) <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <span class="keyword">virtual</span> xbInt16 DumpNode( <span class="keywordtype">void</span> * vpTag, xbIxNode * pNode, xbInt16 iOption ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> <span class="keyword">virtual</span> xbInt16 DumpTagBlocks( xbInt16 iOpt = 1, <span class="keywordtype">void</span> *vpTag = NULL ) = 0;</div>
+<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> </div>
+<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> </div>
+<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a>;</div>
+<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> </div>
+<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> <span class="keyword">virtual</span> xbInt16 AddKey( <span class="keywordtype">void</span> *vpTag, xbUInt32 ulRecNo ) = 0;</div>
+<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> <span class="keyword">virtual</span> xbInt16 AddKeys( xbUInt32 ulRecNo );</div>
+<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> <span class="keyword">virtual</span> xbIxNode *AllocateIxNode( xbUInt32 ulBufSize = 0, xbInt16 iOption = 0 );</div>
+<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> <span class="keyword">virtual</span> xbInt16 BSearchBlock( <span class="keywordtype">char</span> cKeyType, xbIxNode *npNode, xbInt32 lKeyLen, <span class="keyword">const</span> <span class="keywordtype">void</span> *vpKey, xbInt32 lSearchKeyLen, xbInt16 &amp;iCompRc, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bDescending = <a class="code hl_define" href="xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc">xbFalse</a> ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> <span class="keyword">virtual</span> xbInt16 CheckForDupKeys();</div>
+<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> <span class="keyword">virtual</span> xbInt16 CheckForDupKey( <span class="keywordtype">void</span> *vpTag ) = 0;</div>
+<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <span class="keyword">virtual</span> xbInt16 CompareKey( <span class="keywordtype">char</span> cKeyType, <span class="keyword">const</span> <span class="keywordtype">void</span> *v1, <span class="keyword">const</span> <span class="keywordtype">void</span> *v2, <span class="keywordtype">size_t</span> lKeyLen ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> <span class="keyword">virtual</span> xbInt16 CreateKeys( xbInt16 iOpt );</div>
+<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> <span class="keyword">virtual</span> xbInt16 CreateKey( <span class="keywordtype">void</span> * vpTag, xbInt16 iOpt ) = 0;</div>
+<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> <span class="keyword">virtual</span> xbInt16 DeleteFromNode( <span class="keywordtype">void</span> *vpTag, xbIxNode * npNode, xbInt16 iSlotNo ) = 0;</div>
+<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> <span class="keyword">virtual</span> xbInt16 DeleteKeys();</div>
+<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> <span class="keyword">virtual</span> xbInt16 DeleteKey( <span class="keywordtype">void</span> *vpTag ) = 0;</div>
+<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> <span class="keyword">virtual</span> xbInt16 DeleteTag( <span class="keywordtype">void</span> *vpTag ) = 0;</div>
+<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> </div>
+<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> <span class="keyword">virtual</span> xbInt16 FindKeyForCurRec( <span class="keywordtype">void</span> *vpTag ) = 0;</div>
+<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> <span class="keyword">virtual</span> xbIxNode *FreeNodeChain( xbIxNode *np );</div>
+<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> <span class="keyword">virtual</span> xbInt16 GetBlock( <span class="keywordtype">void</span> *vpTag, xbUInt32 ulBlockNo, xbInt16 iOpt, xbUInt32 ulAddlBuf = 0 );</div>
+<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> <span class="keyword">virtual</span> xbInt32 GetKeyCount( xbIxNode *npNode ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> <span class="keyword">virtual</span> <span class="keywordtype">char</span> *GetKeyData( xbIxNode *npNode, xbInt16 iKeyNo, xbInt16 iKeyItemLen ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> <span class="keyword">virtual</span> xbInt16 GetKeySts( <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> <span class="keyword">virtual</span> xbInt16 GetLastKey( xbUInt32 ulNodeNo, <span class="keywordtype">void</span> *vpTag, xbInt16 lRetrieveSw ) = 0;</div>
+<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> <span class="keyword">virtual</span> xbInt16 InsertNodeL( <span class="keywordtype">void</span> *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, <span class="keywordtype">char</span> * cpKeyBuf, xbUInt32 uiPtr ) = 0;</div>
+<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> <span class="keyword">virtual</span> xbInt16 InsertNodeI( <span class="keywordtype">void</span> *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, xbUInt32 uiPtr ) = 0;</div>
+<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> <span class="keyword">virtual</span> xbInt16 KeyExists( <span class="keywordtype">void</span> * ) = 0;</div>
+<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> NodeFree( xbIxNode * ixNode );</div>
+<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> <span class="keyword">virtual</span> xbInt16 ReadHeadBlock( xbInt16 iOpt = 0 ) = 0;</div>
+<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> <span class="comment">// virtual xbInt16 Reindex( void **vpTag ) = 0;</span></div>
+<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> SetDbf( <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *dbf );</div>
+<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> <span class="keyword">virtual</span> xbInt16 SplitNodeL( <span class="keywordtype">void</span> *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, <span class="keywordtype">char</span> *cpKeyBuf, xbUInt32 uiPtr ) = 0;</div>
+<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> <span class="keyword">virtual</span> xbInt16 SplitNodeI( <span class="keywordtype">void</span> *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 uiPtr ) = 0;</div>
+<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <span class="keyword">virtual</span> xbInt16 UpdateTagKey( <span class="keywordtype">char</span> cAction, <span class="keywordtype">void</span> *vpTag, xbUInt32 ulRecNo = 0 ) = 0;</div>
+<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> <span class="keyword">virtual</span> xbInt16 WriteHeadBlock( xbInt16 iOption ) = 0;</div>
+<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> </div>
+<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *dbf;</div>
+<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> <span class="keywordtype">char</span> *cNodeBuf; <span class="comment">// pointer to memory for processing in a block of index data</span></div>
+<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> <span class="keywordtype">void</span> *vpCurTag; <span class="comment">// pointer to active tag. Single index files have only one tag</span></div>
+<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> </div>
+<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> AppendNodeChain( <span class="keywordtype">void</span> *vpTag, xbIxNode *npNode ) = 0;</div>
+<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> <span class="keyword">virtual</span> xbInt16 GetKeyPtr( <span class="keywordtype">void</span> *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 &amp;ulKeyPtr ) <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> <span class="keyword">virtual</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsLeaf( <span class="keywordtype">void</span> *vpTag, xbIxNode *npNode ) <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> <span class="comment">// virtual void SetCurNode( void *vpTag, xbIxNode *npNode ) = 0;</span></div>
+<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> </div>
+<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bLocked; <span class="comment">// index file locked?</span></div>
+<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span>};</div>
+<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> </div>
+<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span><span class="preprocessor">#ifdef XB_NDX_SUPPORT</span></div>
+<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> </div>
+<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span><span class="preprocessor">#define XB_NDX_BLOCK_SIZE 512</span></div>
+<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> </div>
+<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> </div>
+<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span><span class="keyword">struct </span>XBDLLEXPORT xbNdxTag {</div>
+<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> </div>
+<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> <span class="comment">// NDX File Header Fields</span></div>
+<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> xbUInt32 ulRootBlock; <span class="comment">// header node is 0</span></div>
+<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> xbUInt32 ulTotalBlocks; <span class="comment">// includes header node</span></div>
+<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> <span class="keywordtype">char</span> cKeyType; <span class="comment">// C = Char, F = Numeric, D = Date</span></div>
+<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> xbInt16 iKeyLen; <span class="comment">// length of key data</span></div>
+<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> xbInt16 iKeysPerBlock; <span class="comment">// max number keys per block &lt;=100</span></div>
+<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> xbInt16 iKeyType; <span class="comment">// 00 = Char, 01 = Numeric</span></div>
+<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> xbInt16 iKeyItemLen; <span class="comment">// KeyLen + 8 bytes</span></div>
+<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> <span class="keywordtype">char</span> cSerNo; <span class="comment">// rolling incrementing serial number +1 on each index update</span></div>
+<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> xbInt16 iUnique; <span class="comment">// True if unique</span></div>
+<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> xbString sKeyExpression; <span class="comment">// index expression</span></div>
+<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> <span class="comment">// end of NDX Header field</span></div>
+<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> </div>
+<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> xbExp *exp; <span class="comment">// pointer to expression for expression keys</span></div>
+<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> time_t tNodeChainTs; <span class="comment">// node chain time stamp</span></div>
+<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> xbIxNode *npNodeChain;</div>
+<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> xbIxNode *npCurNode;</div>
+<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> <span class="keywordtype">char</span> *cpKeyBuf; <span class="comment">// key buffer, for searches and adds</span></div>
+<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> <span class="keywordtype">char</span> *cpKeyBuf2; <span class="comment">// key buffer, for deletes</span></div>
+<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> xbString sTagName; <span class="comment">// tag name - is the file name without the extension</span></div>
+<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bFoundSts; <span class="comment">// key found? used to determine if new key should be added in XB_EMULATE_DBASE mode in AddKey</span></div>
+<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> </div>
+<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> </div>
+<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> xbInt16 iKeySts; <span class="comment">// key updated? set in method CreateKey, checked in AddKey and DeleteKey routines</span></div>
+<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> <span class="comment">// old key filtered new key filtered iKeySts</span></div>
+<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> <span class="comment">// Y Y XB_UPD_KEY 2 - update key if changed (delete and add)</span></div>
+<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> <span class="comment">// Y N XB_DEL_KEY 3 - delete key</span></div>
+<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> <span class="comment">// N Y XB_ADD_KEY 1 - add key</span></div>
+<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> <span class="comment">// N N 0 - no update</span></div>
+<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> </div>
+<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span>};</div>
+<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> </div>
+<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> </div>
+<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span><span class="keyword">class </span>XBDLLEXPORT xbIxNdx : <span class="keyword">public</span> xbIx {</div>
+<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> xbIxNdx( <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> * d );</div>
+<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> ~xbIxNdx();</div>
+<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> xbInt16 CheckTagIntegrity( <span class="keywordtype">void</span> *vpTag, xbInt16 iOpt );</div>
+<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> xbInt16 CreateTag( <span class="keyword">const</span> xbString &amp;sName, <span class="keyword">const</span> xbString &amp;sKey, <span class="keyword">const</span> xbString &amp;sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, <span class="keywordtype">void</span> **vpTag );</div>
+<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> xbInt16 FindKey( <span class="keywordtype">void</span> *vpTag, <span class="keyword">const</span> <span class="keywordtype">void</span> *vpKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw );</div>
+<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> xbInt16 GetFirstKey( <span class="keywordtype">void</span> *vpTag, xbInt16 iRetrieveSw );</div>
+<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> </div>
+<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> xbInt16 GetLastKey( <span class="keywordtype">void</span> *vpTag, xbInt16 iRetrieveSw = 1 );</div>
+<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> xbInt16 GetNextKey( <span class="keywordtype">void</span> *vpTag, xbInt16 iRetrieveSw = 1 );</div>
+<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> xbInt16 GetPrevKey( <span class="keywordtype">void</span> *vpTag, xbInt16 iRetrieveSw = 1 );</div>
+<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> xbInt32 GetKeyLen ( <span class="keyword">const</span> <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> <span class="keywordtype">char</span> GetKeyType ( <span class="keyword">const</span> <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> xbString &amp;GetKeyExpression( <span class="keyword">const</span> <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> xbString &amp;GetKeyFilter( <span class="keyword">const</span> <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> <span class="keywordtype">void</span> *GetTag( xbInt16 iTagNo ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> <span class="keywordtype">void</span> *GetTag( xbString &amp;sTagName ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> xbString &amp;GetTagName( <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * GetTagName( <span class="keywordtype">void</span> *vpTag, xbInt16 iOpt ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> </div>
+<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> xbInt16 GetTagCount() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetUnique( <span class="keywordtype">void</span> *vpTag = NULL ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetSortOrder( <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span> xbInt16 SetCurTag( xbInt16 iTagNo );</div>
+<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> xbInt16 SetCurTag( xbString &amp;sTagName );</div>
+<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> </div>
+<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
+<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span> xbInt16 DumpTagBlocks( xbInt16 iOpt = 1, <span class="keywordtype">void</span> *vpTag = NULL );</div>
+<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> xbInt16 DumpHeader( xbInt16 iOpt = 0, xbInt16 iFmt = 0 );</div>
+<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span> xbInt16 DumpIxForTag( <span class="keywordtype">void</span> *vpTag, xbInt16 iOutputOpt );</div>
+<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> <span class="keywordtype">void</span> DumpIxNodeChain( <span class="keywordtype">void</span> *vpTag, xbInt16 iOutputOpt ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span> xbInt16 DumpNode( <span class="keywordtype">void</span> * vpTag, xbIxNode * pNode, xbInt16 iOption ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> </div>
+<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> xbInt16 Reindex( <span class="keywordtype">void</span> **vpTag );</div>
+<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> </div>
+<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> </div>
+<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a>;</div>
+<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span> xbInt16 AddKey( <span class="keywordtype">void</span> *vpTag, xbUInt32 ulRecNo );</div>
+<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> xbIxNode *AllocateIxNode( xbUInt32 ulBufSize = 0, xbInt16 iOption = 0 );</div>
+<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> xbInt16 CheckForDupKey( <span class="keywordtype">void</span> *vpTag );</div>
+<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> xbIxNode *CreateIxNode( xbUInt32 ulBufSize );</div>
+<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> xbInt16 CreateKey( <span class="keywordtype">void</span> * vpTag, xbInt16 iOpt );</div>
+<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> xbInt16 DeleteFromNode( <span class="keywordtype">void</span> *vpTag, xbIxNode * npNode, xbInt16 iSlotNo );</div>
+<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> xbInt16 DeleteKey( <span class="keywordtype">void</span> *vpTag );</div>
+<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span> xbInt16 DeleteTag( <span class="keywordtype">void</span> *vpTag );</div>
+<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span> xbInt16 FindKeyForCurRec( <span class="keywordtype">void</span> *vpTag );</div>
+<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> xbInt16 GetKeyTypeN( <span class="keyword">const</span> <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> xbInt16 GetKeySts( <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> xbInt16 GetLastKey( xbUInt32 ulNodeNo, <span class="keywordtype">void</span> *vpTag, xbInt16 iRetrieveSw = 1 );</div>
+<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span> xbInt16 InsertNodeI( <span class="keywordtype">void</span> *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, xbUInt32 uiPtr );</div>
+<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> xbInt16 InsertNodeL( <span class="keywordtype">void</span> *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, <span class="keywordtype">char</span> * cpKeyBuf, xbUInt32 uiPtr );</div>
+<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> xbInt16 KeyExists( <span class="keywordtype">void</span> *vpTag = NULL );</div>
+<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span> xbInt16 ReadHeadBlock(xbInt16 iOpt); <span class="comment">// read the header node of the disk NDX file</span></div>
+<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span><span class="comment">// xbInt16 Reindex( void **vpTag );</span></div>
+<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span> xbInt16 SplitNodeI( <span class="keywordtype">void</span> *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 uiPtr );</div>
+<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span> xbInt16 SplitNodeL( <span class="keywordtype">void</span> *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, <span class="keywordtype">char</span> *cpKeyBuf, xbUInt32 uiPtr );</div>
+<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> xbInt16 UpdateTagKey( <span class="keywordtype">char</span> cAction, <span class="keywordtype">void</span> *vpTag, xbUInt32 ulRecNo = 0 );</div>
+<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span> xbInt16 WriteHeadBlock( xbInt16 iOption );</div>
+<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> </div>
+<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span> xbInt16 AddKeyNewRoot( xbNdxTag *npTag, xbIxNode *npLeft, xbIxNode *npRight );</div>
+<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span> <span class="keywordtype">void</span> AppendNodeChain( <span class="keywordtype">void</span> *vpTag, xbIxNode *npNode );</div>
+<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> xbInt16 GetDbfPtr( <span class="keywordtype">void</span> *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 &amp;ulDbfPtr ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span> xbInt16 GetKeyPtr( <span class="keywordtype">void</span> *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 &amp;ulKeyPtr ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span> xbInt16 GetLastKeyForBlockNo( <span class="keywordtype">void</span> *vpTag, xbUInt32 ulBlockNo, <span class="keywordtype">char</span> *cpKeyBuf );</div>
+<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsLeaf( <span class="keywordtype">void</span> *vpTag, xbIxNode *npNode ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span> xbInt16 KeySetPosAdd( xbNdxTag *npTag, xbUInt32 ulAddKeyRecNo );</div>
+<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span> xbInt16 KeySetPosDel( xbNdxTag *npTag );</div>
+<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span> xbNdxTag *ndxTag;</div>
+<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"> 374</span>};</div>
+<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span> </div>
+<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span><span class="preprocessor">#endif </span><span class="comment">/* XB_NDX_SUPPORT */</span><span class="preprocessor"></span></div>
+<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span> </div>
+<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span> </div>
+<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span><span class="preprocessor">#ifdef XB_MDX_SUPPORT</span></div>
+<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span><span class="comment">//#define XB_MDX_BLOCK_SIZE 1024</span></div>
+<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span> </div>
+<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span><span class="keyword">struct </span>XBDLLEXPORT xbMdxTag {</div>
+<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span> </div>
+<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span> <span class="comment">// next 7 fields comprise the tag table entry</span></div>
+<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"> 385</span> xbUInt32 ulTagHdrPageNo; <span class="comment">// 512 byte page number, NOT block number</span></div>
+<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span> <span class="keywordtype">char</span> cTagName[11];</div>
+<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span> <span class="keywordtype">char</span> cKeyFmt; <span class="comment">// always 0x10 w/ DBase V7</span></div>
+<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span> <span class="keywordtype">char</span> cLeftChild; <span class="comment">// cFwdTagThread</span></div>
+<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span> <span class="keywordtype">char</span> cRightChild; <span class="comment">// cFwdTagThread2</span></div>
+<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span> <span class="keywordtype">char</span> cParent; <span class="comment">// cBwdTagThread</span></div>
+<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span> <span class="keywordtype">char</span> c2;</div>
+<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"> 392</span> <span class="keywordtype">char</span> cKeyType; <span class="comment">// C,D,N</span></div>
+<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span> </div>
+<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span> xbUInt32 ulRootPage; <span class="comment">// 512 byte page number, NOT block number</span></div>
+<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span> xbUInt32 ulTagSize; <span class="comment">// Number of 512 byte pages allocated to the tag. Tag size of two is a single 1024 block</span></div>
+<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span> </div>
+<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span> <span class="keywordtype">char</span> cKeyFmt2; <span class="comment">// 0x10 - base</span></div>
+<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span> <span class="comment">// 0x08 - descending</span></div>
+<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span> <span class="comment">// 0x40 - unique</span></div>
+<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span> <span class="keywordtype">char</span> cKeyType2;</div>
+<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span> <span class="comment">// one unused byte fits here</span></div>
+<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span> </div>
+<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"> 403</span> <span class="keywordtype">char</span> cTag11; <span class="comment">// dbase sets to 0x1B</span></div>
+<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span> xbInt16 iKeyLen;</div>
+<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</span> xbInt16 iKeysPerBlock;</div>
+<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"> 406</span> xbInt16 iSecKeyType;</div>
+<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"> 407</span> xbInt16 iKeyItemLen; <span class="comment">// iKeyLen + 4</span></div>
+<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"> 408</span> </div>
+<div class="line"><a id="l00409" name="l00409"></a><span class="lineno"> 409</span> <span class="keywordtype">char</span> cSerialNo; <span class="comment">// Increments +1 for each tag update</span></div>
+<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span> <span class="keywordtype">char</span> cUnique;</div>
+<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span> xbString *sKeyExp; <span class="comment">// Key expression</span></div>
+<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"> 412</span> <span class="keywordtype">char</span> cHasFilter; <span class="comment">// 0x00 or 0x01</span></div>
+<div class="line"><a id="l00413" name="l00413"></a><span class="lineno"> 413</span> <span class="keywordtype">char</span> cHasKeys; <span class="comment">// 0x00 or 0x01</span></div>
+<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span> xbUInt32 ulLeftChild; <span class="comment">// dbase 7 sets this to the root page on tag creation</span></div>
+<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"> 415</span> xbUInt32 ulRightChild; <span class="comment">// dbase 7 sets this to the root page on tag creation</span></div>
+<div class="line"><a id="l00416" name="l00416"></a><span class="lineno"> 416</span> </div>
+<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> <span class="keywordtype">char</span> cTagYY;</div>
+<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span> <span class="keywordtype">char</span> cTagMM;</div>
+<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> <span class="keywordtype">char</span> cTagDD;</div>
+<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span> </div>
+<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span> <span class="keywordtype">char</span> cKeyFmt3; <span class="comment">// dbase 7 sets this 0x01 if discreet field or 0x00 if calculated or combination field key expression on tag creation</span></div>
+<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"> 422</span> </div>
+<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span> xbString *sFiltExp; <span class="comment">// Filter expression</span></div>
+<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span> </div>
+<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span> time_t tNodeChainTs;</div>
+<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"> 426</span> xbIxNode *npNodeChain;</div>
+<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"> 427</span> xbIxNode *npCurNode;</div>
+<div class="line"><a id="l00428" name="l00428"></a><span class="lineno"> 428</span> xbExp *exp; <span class="comment">// pointer to expression for expression based tags</span></div>
+<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span> xbExp *filter; <span class="comment">// pointer to expression for index filter</span></div>
+<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"> 430</span> </div>
+<div class="line"><a id="l00431" name="l00431"></a><span class="lineno"> 431</span> <span class="keywordtype">char</span> *cpKeyBuf; <span class="comment">// key buffer</span></div>
+<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"> 432</span> <span class="keywordtype">char</span> *cpKeyBuf2; <span class="comment">// key buffer</span></div>
+<div class="line"><a id="l00433" name="l00433"></a><span class="lineno"> 433</span> xbString *sTagName; <span class="comment">// string tag name</span></div>
+<div class="line"><a id="l00434" name="l00434"></a><span class="lineno"> 434</span> </div>
+<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"> 435</span> </div>
+<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"> 436</span> xbMdxTag *next;</div>
+<div class="line"><a id="l00437" name="l00437"></a><span class="lineno"> 437</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bFoundSts; <span class="comment">// key found? used to determine if new key should be added in XB_EMULATE_DBASE mode in AddKey</span></div>
+<div class="line"><a id="l00438" name="l00438"></a><span class="lineno"> 438</span> </div>
+<div class="line"><a id="l00439" name="l00439"></a><span class="lineno"> 439</span> </div>
+<div class="line"><a id="l00440" name="l00440"></a><span class="lineno"> 440</span> xbInt16 iKeySts; <span class="comment">// key updated? set in method CreateKey, checked in AddKey and DeleteKey routines</span></div>
+<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"> 441</span> <span class="comment">// old key filtered new key filtered iKeySts</span></div>
+<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"> 442</span> <span class="comment">// Y Y XB_UPD_KEY 2 - update key if changed (delete and add)</span></div>
+<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"> 443</span> <span class="comment">// Y N XB_DEL_KEY 3 - delete key</span></div>
+<div class="line"><a id="l00444" name="l00444"></a><span class="lineno"> 444</span> <span class="comment">// N Y XB_ADD_KEY 1 - add key</span></div>
+<div class="line"><a id="l00445" name="l00445"></a><span class="lineno"> 445</span> <span class="comment">// N N 0 - no update</span></div>
+<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"> 446</span> </div>
+<div class="line"><a id="l00447" name="l00447"></a><span class="lineno"> 447</span> </div>
+<div class="line"><a id="l00448" name="l00448"></a><span class="lineno"> 448</span>};</div>
+<div class="line"><a id="l00449" name="l00449"></a><span class="lineno"> 449</span> </div>
+<div class="line"><a id="l00450" name="l00450"></a><span class="lineno"> 450</span> </div>
+<div class="line"><a id="l00451" name="l00451"></a><span class="lineno"> 451</span><span class="keyword">class </span>XBDLLEXPORT xbIxMdx : <span class="keyword">public</span> xbIx {</div>
+<div class="line"><a id="l00452" name="l00452"></a><span class="lineno"> 452</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00453" name="l00453"></a><span class="lineno"> 453</span> xbIxMdx( <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> * d );</div>
+<div class="line"><a id="l00454" name="l00454"></a><span class="lineno"> 454</span> ~xbIxMdx();</div>
+<div class="line"><a id="l00455" name="l00455"></a><span class="lineno"> 455</span> <span class="keyword">virtual</span> xbInt16 CheckTagIntegrity( <span class="keywordtype">void</span> *vpTag, xbInt16 iOpt );</div>
+<div class="line"><a id="l00456" name="l00456"></a><span class="lineno"> 456</span> <span class="keyword">virtual</span> xbInt16 CreateTag( <span class="keyword">const</span> xbString &amp;sName, <span class="keyword">const</span> xbString &amp;sKey, <span class="keyword">const</span> xbString &amp;sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, <span class="keywordtype">void</span> **vpTag );</div>
+<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"> 457</span> <span class="keyword">virtual</span> xbInt16 FindKey( <span class="keywordtype">void</span> *vpTag, <span class="keyword">const</span> <span class="keywordtype">void</span> *vKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw );</div>
+<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"> 458</span> <span class="keyword">virtual</span> xbInt16 FindKey( <span class="keywordtype">void</span> *vpTag, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dKey, xbInt16 iRetrieveSw );</div>
+<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"> 459</span> <span class="keyword">virtual</span> xbInt16 GetFirstKey( <span class="keywordtype">void</span> *vpTag, xbInt16 lRetrieveSw );</div>
+<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"> 460</span> <span class="keyword">virtual</span> xbString &amp;GetKeyExpression( <span class="keyword">const</span> <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00461" name="l00461"></a><span class="lineno"> 461</span> <span class="keyword">virtual</span> xbString &amp;GetKeyFilter( <span class="keyword">const</span> <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00462" name="l00462"></a><span class="lineno"> 462</span> <span class="keyword">virtual</span> <span class="keywordtype">char</span> GetKeyType( <span class="keyword">const</span> <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00463" name="l00463"></a><span class="lineno"> 463</span> <span class="keyword">virtual</span> xbInt16 GetLastKey( <span class="keywordtype">void</span> *vpTag, xbInt16 lRetrieveSw );</div>
+<div class="line"><a id="l00464" name="l00464"></a><span class="lineno"> 464</span> <span class="keyword">virtual</span> xbInt16 GetNextKey( <span class="keywordtype">void</span> *vpTag, xbInt16 lRetrieveSw );</div>
+<div class="line"><a id="l00465" name="l00465"></a><span class="lineno"> 465</span> <span class="keyword">virtual</span> xbInt16 GetPrevKey( <span class="keywordtype">void</span> *vpTag, xbInt16 lRetrieveSw );</div>
+<div class="line"><a id="l00466" name="l00466"></a><span class="lineno"> 466</span> <span class="keyword">virtual</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetReuseEmptyNodesSw() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00467" name="l00467"></a><span class="lineno"> 467</span> <span class="keyword">virtual</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetSortOrder( <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00468" name="l00468"></a><span class="lineno"> 468</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> *GetTag( xbInt16 iTagNo ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00469" name="l00469"></a><span class="lineno"> 469</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> *GetTag( xbString &amp;sTagName ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00470" name="l00470"></a><span class="lineno"> 470</span> <span class="keyword">virtual</span> xbInt16 GetTagCount() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00471" name="l00471"></a><span class="lineno"> 471</span> </div>
+<div class="line"><a id="l00472" name="l00472"></a><span class="lineno"> 472</span> <span class="keyword">virtual</span> xbString &amp;GetTagName( <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00473" name="l00473"></a><span class="lineno"> 473</span> <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * GetTagName( <span class="keywordtype">void</span> *vpTag, xbInt16 iOpt ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00474" name="l00474"></a><span class="lineno"> 474</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> GetTagName( <span class="keywordtype">void</span> *vpTag, xbString &amp;sTagName );</div>
+<div class="line"><a id="l00475" name="l00475"></a><span class="lineno"> 475</span> </div>
+<div class="line"><a id="l00476" name="l00476"></a><span class="lineno"> 476</span> <span class="keyword">virtual</span> xbInt16 GetUnique( <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00477" name="l00477"></a><span class="lineno"> 477</span> <span class="keyword">virtual</span> xbInt16 SetCurTag( xbInt16 iTagNo );</div>
+<div class="line"><a id="l00478" name="l00478"></a><span class="lineno"> 478</span> <span class="keyword">virtual</span> xbInt16 SetCurTag( xbString &amp;sTagName );</div>
+<div class="line"><a id="l00479" name="l00479"></a><span class="lineno"> 479</span> <span class="keywordtype">void</span> SetReuseEmptyNodesSw( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bReuse );</div>
+<div class="line"><a id="l00480" name="l00480"></a><span class="lineno"> 480</span> </div>
+<div class="line"><a id="l00481" name="l00481"></a><span class="lineno"> 481</span> <span class="keywordtype">void</span> TestStub( <span class="keywordtype">char</span> *s, <span class="keywordtype">void</span> *vpTag );</div>
+<div class="line"><a id="l00482" name="l00482"></a><span class="lineno"> 482</span> </div>
+<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"> 483</span> </div>
+<div class="line"><a id="l00484" name="l00484"></a><span class="lineno"> 484</span> <span class="keyword">virtual</span> xbInt16 Reindex( <span class="keywordtype">void</span> **vpTag );</div>
+<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"> 485</span> </div>
+<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</span> </div>
+<div class="line"><a id="l00487" name="l00487"></a><span class="lineno"> 487</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a id="l00488" name="l00488"></a><span class="lineno"> 488</span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a>;</div>
+<div class="line"><a id="l00489" name="l00489"></a><span class="lineno"> 489</span> </div>
+<div class="line"><a id="l00490" name="l00490"></a><span class="lineno"> 490</span> xbInt16 AddKey( <span class="keywordtype">void</span> *vpTag, xbUInt32 ulRecNo );</div>
+<div class="line"><a id="l00491" name="l00491"></a><span class="lineno"> 491</span> xbIxNode *AllocateIxNode( xbMdxTag * mpTag, xbUInt32 ulBufSize, xbUInt32 ulBlock2 );</div>
+<div class="line"><a id="l00492" name="l00492"></a><span class="lineno"> 492</span> <span class="keywordtype">void</span> CalcBtreePointers();</div>
+<div class="line"><a id="l00493" name="l00493"></a><span class="lineno"> 493</span> <span class="keywordtype">char</span> CalcTagKeyFmt( xbExp &amp;exp );</div>
+<div class="line"><a id="l00494" name="l00494"></a><span class="lineno"> 494</span> </div>
+<div class="line"><a id="l00495" name="l00495"></a><span class="lineno"> 495</span> xbInt16 CheckForDupKey( <span class="keywordtype">void</span> *vpTag );</div>
+<div class="line"><a id="l00496" name="l00496"></a><span class="lineno"> 496</span> <span class="keyword">virtual</span> xbInt16 Close();</div>
+<div class="line"><a id="l00497" name="l00497"></a><span class="lineno"> 497</span> xbInt16 CreateKey( <span class="keywordtype">void</span> * vpTag, xbInt16 iOpt );</div>
+<div class="line"><a id="l00498" name="l00498"></a><span class="lineno"> 498</span> xbInt16 DeleteFromNode( <span class="keywordtype">void</span> *vpTag, xbIxNode * npNode, xbInt16 iSlotNo );</div>
+<div class="line"><a id="l00499" name="l00499"></a><span class="lineno"> 499</span> xbInt16 DeleteKey( <span class="keywordtype">void</span> *vpTag );</div>
+<div class="line"><a id="l00500" name="l00500"></a><span class="lineno"> 500</span> </div>
+<div class="line"><a id="l00501" name="l00501"></a><span class="lineno"> 501</span> <span class="keyword">virtual</span> xbInt16 DeleteTag( <span class="keywordtype">void</span> *vpTag );</div>
+<div class="line"><a id="l00502" name="l00502"></a><span class="lineno"> 502</span> </div>
+<div class="line"><a id="l00503" name="l00503"></a><span class="lineno"> 503</span> xbInt16 FindKeyForCurRec( <span class="keywordtype">void</span> *vpTag );</div>
+<div class="line"><a id="l00504" name="l00504"></a><span class="lineno"> 504</span> xbInt16 GetKeySts( <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00505" name="l00505"></a><span class="lineno"> 505</span> xbInt16 GetLastKey( xbUInt32 ulBlockNo, <span class="keywordtype">void</span> *vpTag, xbInt16 lRetrieveSw );</div>
+<div class="line"><a id="l00506" name="l00506"></a><span class="lineno"> 506</span> <span class="keywordtype">void</span> *GetTagTblPtr() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00507" name="l00507"></a><span class="lineno"> 507</span> </div>
+<div class="line"><a id="l00508" name="l00508"></a><span class="lineno"> 508</span> xbInt16 HarvestTagNodes( xbMdxTag *mpTag, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bRecycleRoot = <a class="code hl_define" href="xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc">xbFalse</a> );</div>
+<div class="line"><a id="l00509" name="l00509"></a><span class="lineno"> 509</span> <span class="keywordtype">void</span> Init( xbInt16 iOpt = 0 );</div>
+<div class="line"><a id="l00510" name="l00510"></a><span class="lineno"> 510</span> xbInt16 InsertNodeI( <span class="keywordtype">void</span> *vpTag, xbIxNode *npNode, xbInt16 iSlotNo, xbUInt32 uiPtr );</div>
+<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"> 511</span> xbInt16 InsertNodeL( <span class="keywordtype">void</span> *vpTag, xbIxNode *npNode, xbInt16 iSlotNo, <span class="keywordtype">char</span> *cpKeyBuf, xbUInt32 uiPtr );</div>
+<div class="line"><a id="l00512" name="l00512"></a><span class="lineno"> 512</span> xbInt16 KeyExists( <span class="keywordtype">void</span> * );</div>
+<div class="line"><a id="l00513" name="l00513"></a><span class="lineno"> 513</span> xbInt16 LoadTagTable();</div>
+<div class="line"><a id="l00514" name="l00514"></a><span class="lineno"> 514</span> xbInt16 ReadHeadBlock(xbInt16 iOpt); <span class="comment">// read the header node of the disk file</span></div>
+<div class="line"><a id="l00515" name="l00515"></a><span class="lineno"> 515</span> <span class="comment">//virtual xbInt16 Reindex( void **vpTag );</span></div>
+<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"> 516</span> xbInt16 SplitNodeI( <span class="keywordtype">void</span> *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 uiPtr );</div>
+<div class="line"><a id="l00517" name="l00517"></a><span class="lineno"> 517</span> xbInt16 SplitNodeL( <span class="keywordtype">void</span> *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, <span class="keywordtype">char</span> *cpKeyBuf, xbUInt32 uiPtr );</div>
+<div class="line"><a id="l00518" name="l00518"></a><span class="lineno"> 518</span> xbInt16 UpdateTagKey( <span class="keywordtype">char</span> cAction, <span class="keywordtype">void</span> *vpTag, xbUInt32 ulRecNo = 0 );</div>
+<div class="line"><a id="l00519" name="l00519"></a><span class="lineno"> 519</span> xbInt16 WriteHeadBlock( xbInt16 iOption );</div>
+<div class="line"><a id="l00520" name="l00520"></a><span class="lineno"> 520</span> </div>
+<div class="line"><a id="l00521" name="l00521"></a><span class="lineno"> 521</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
+<div class="line"><a id="l00522" name="l00522"></a><span class="lineno"> 522</span> xbInt16 DumpTagBlocks( xbInt16 iOpt = 1, <span class="keywordtype">void</span> *vpTag = NULL );</div>
+<div class="line"><a id="l00523" name="l00523"></a><span class="lineno"> 523</span> xbInt16 DumpFreeBlocks( xbInt16 iOpt = 0 );</div>
+<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"> 524</span> xbInt16 DumpHeader( xbInt16 iOpt = 0, xbInt16 iFmtOpt = 0 );</div>
+<div class="line"><a id="l00525" name="l00525"></a><span class="lineno"> 525</span> xbInt16 DumpIxForTag( <span class="keywordtype">void</span> *vpTag, xbInt16 iOutputOpt );</div>
+<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"> 526</span> <span class="keywordtype">void</span> DumpIxNodeChain( <span class="keywordtype">void</span> *vpTag, xbInt16 iOutputOpt ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00527" name="l00527"></a><span class="lineno"> 527</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00528" name="l00528"></a><span class="lineno"> 528</span> </div>
+<div class="line"><a id="l00529" name="l00529"></a><span class="lineno"> 529</span> </div>
+<div class="line"><a id="l00530" name="l00530"></a><span class="lineno"> 530</span> xbMdxTag *mdxTagTbl;</div>
+<div class="line"><a id="l00531" name="l00531"></a><span class="lineno"> 531</span> </div>
+<div class="line"><a id="l00532" name="l00532"></a><span class="lineno"> 532</span><span class="comment">// MDX File Header Fields</span></div>
+<div class="line"><a id="l00533" name="l00533"></a><span class="lineno"> 533</span> <span class="keywordtype">char</span> cVersion;</div>
+<div class="line"><a id="l00534" name="l00534"></a><span class="lineno"> 534</span> <span class="keywordtype">char</span> cCreateYY;</div>
+<div class="line"><a id="l00535" name="l00535"></a><span class="lineno"> 535</span> <span class="keywordtype">char</span> cCreateMM;</div>
+<div class="line"><a id="l00536" name="l00536"></a><span class="lineno"> 536</span> <span class="keywordtype">char</span> cCreateDD;</div>
+<div class="line"><a id="l00537" name="l00537"></a><span class="lineno"> 537</span> xbString sFileName;</div>
+<div class="line"><a id="l00538" name="l00538"></a><span class="lineno"> 538</span> xbInt16 iBlockFactor; <span class="comment">// 1-32 #of 512 byte segments in a block</span></div>
+<div class="line"><a id="l00539" name="l00539"></a><span class="lineno"> 539</span> </div>
+<div class="line"><a id="l00540" name="l00540"></a><span class="lineno"> 540</span> <span class="comment">// use file version</span></div>
+<div class="line"><a id="l00541" name="l00541"></a><span class="lineno"> 541</span> <span class="comment">// xbInt16 iBlockSize; // Stored at the xbFile level</span></div>
+<div class="line"><a id="l00542" name="l00542"></a><span class="lineno"> 542</span> </div>
+<div class="line"><a id="l00543" name="l00543"></a><span class="lineno"> 543</span> <span class="keywordtype">char</span> cProdIxFlag;</div>
+<div class="line"><a id="l00544" name="l00544"></a><span class="lineno"> 544</span> <span class="keywordtype">char</span> cTagEntryCnt;</div>
+<div class="line"><a id="l00545" name="l00545"></a><span class="lineno"> 545</span> xbInt16 iTagLen;</div>
+<div class="line"><a id="l00546" name="l00546"></a><span class="lineno"> 546</span> xbInt16 iTagUseCnt;</div>
+<div class="line"><a id="l00547" name="l00547"></a><span class="lineno"> 547</span> <span class="keywordtype">char</span> cNextTag; <span class="comment">// byte 28 +1</span></div>
+<div class="line"><a id="l00548" name="l00548"></a><span class="lineno"> 548</span> <span class="keywordtype">char</span> c1B; <span class="comment">// always 0x1B</span></div>
+<div class="line"><a id="l00549" name="l00549"></a><span class="lineno"> 549</span> xbUInt32 ulPageCnt; <span class="comment">// number of 512 byte pages in the mdx file</span></div>
+<div class="line"><a id="l00550" name="l00550"></a><span class="lineno"> 550</span> xbUInt32 ulFirstFreePage; <span class="comment">// page number corresponding to the next free block</span></div>
+<div class="line"><a id="l00551" name="l00551"></a><span class="lineno"> 551</span> xbUInt32 ulNoOfBlockAvail; <span class="comment">// might be improperly named?? not sure how it is used</span></div>
+<div class="line"><a id="l00552" name="l00552"></a><span class="lineno"> 552</span> <span class="keywordtype">char</span> cUpdateYY;</div>
+<div class="line"><a id="l00553" name="l00553"></a><span class="lineno"> 553</span> <span class="keywordtype">char</span> cUpdateMM;</div>
+<div class="line"><a id="l00554" name="l00554"></a><span class="lineno"> 554</span> <span class="keywordtype">char</span> cUpdateDD;</div>
+<div class="line"><a id="l00555" name="l00555"></a><span class="lineno"> 555</span> <span class="comment">// end of MDX Header fields</span></div>
+<div class="line"><a id="l00556" name="l00556"></a><span class="lineno"> 556</span> </div>
+<div class="line"><a id="l00557" name="l00557"></a><span class="lineno"> 557</span> </div>
+<div class="line"><a id="l00558" name="l00558"></a><span class="lineno"> 558</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bReuseEmptyNodes; <span class="comment">// Reuese empty MDX nodes when all keys deleted?</span></div>
+<div class="line"><a id="l00559" name="l00559"></a><span class="lineno"> 559</span> <span class="comment">// DBase 7.x and MS ODBC drivers do not reuse empty nodes, leaves them stranded in the file</span></div>
+<div class="line"><a id="l00560" name="l00560"></a><span class="lineno"> 560</span> <span class="comment">// Codebase 6.x reuses empty nodes.</span></div>
+<div class="line"><a id="l00561" name="l00561"></a><span class="lineno"> 561</span> <span class="comment">// Setting this to True will reuse empty nodes in the same manner Codebase 6.x reuses them.</span></div>
+<div class="line"><a id="l00562" name="l00562"></a><span class="lineno"> 562</span> </div>
+<div class="line"><a id="l00563" name="l00563"></a><span class="lineno"> 563</span> </div>
+<div class="line"><a id="l00564" name="l00564"></a><span class="lineno"> 564</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00565" name="l00565"></a><span class="lineno"> 565</span> xbInt16 AddKeyNewRoot( xbMdxTag *npTag, xbIxNode *npLeft, xbIxNode *npRight );</div>
+<div class="line"><a id="l00566" name="l00566"></a><span class="lineno"> 566</span> <span class="keywordtype">void</span> AppendNodeChain( <span class="keywordtype">void</span> *vpTag, xbIxNode *npNode );</div>
+<div class="line"><a id="l00567" name="l00567"></a><span class="lineno"> 567</span> xbUInt32 BlockToPage( xbUInt32 ulBlockNo );</div>
+<div class="line"><a id="l00568" name="l00568"></a><span class="lineno"> 568</span> xbMdxTag *ClearTagTable();</div>
+<div class="line"><a id="l00569" name="l00569"></a><span class="lineno"> 569</span> xbInt16 DumpBlock( xbInt16 iOpt, xbUInt32 ulBlockNo, xbMdxTag * mpTag );</div>
+<div class="line"><a id="l00570" name="l00570"></a><span class="lineno"> 570</span> xbInt16 GetDbfPtr( <span class="keywordtype">void</span> *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 &amp;ulDbfPtr ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00571" name="l00571"></a><span class="lineno"> 571</span> xbInt16 GetKeyPtr( <span class="keywordtype">void</span> *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 &amp;ulKeyPtr ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00572" name="l00572"></a><span class="lineno"> 572</span> xbInt16 GetLastKeyForBlockNo( <span class="keywordtype">void</span> *vpTag, xbUInt32 ulBlockNo, <span class="keywordtype">char</span> *cpKeyBuf );</div>
+<div class="line"><a id="l00573" name="l00573"></a><span class="lineno"> 573</span> xbInt16 HarvestEmptyNode( xbMdxTag *mpTag, xbIxNode *npNode, xbInt16 iOpt, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bHarvestRoot = <a class="code hl_define" href="xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc">xbFalse</a> );</div>
+<div class="line"><a id="l00574" name="l00574"></a><span class="lineno"> 574</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsLeaf( <span class="keywordtype">void</span> *vpTag, xbIxNode *npNode ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00575" name="l00575"></a><span class="lineno"> 575</span> xbInt16 KeySetPosAdd( xbMdxTag *mpTag, xbUInt32 ulAddKeyRecNo );</div>
+<div class="line"><a id="l00576" name="l00576"></a><span class="lineno"> 576</span> xbInt16 KeySetPosDel( xbMdxTag *mpTag );</div>
+<div class="line"><a id="l00577" name="l00577"></a><span class="lineno"> 577</span> xbInt16 LoadTagDetail( xbInt16 iOption, xbMdxTag *tte );</div>
+<div class="line"><a id="l00578" name="l00578"></a><span class="lineno"> 578</span> xbUInt32 PageToBlock( xbUInt32 ulPageNo );</div>
+<div class="line"><a id="l00579" name="l00579"></a><span class="lineno"> 579</span> xbInt16 TagSerialNo( xbInt16 iOption, xbMdxTag *mpTag );</div>
+<div class="line"><a id="l00580" name="l00580"></a><span class="lineno"> 580</span> xbInt16 UpdateTagSize( xbMdxTag *mpTag, xbUInt32 ulTagSz );</div>
+<div class="line"><a id="l00581" name="l00581"></a><span class="lineno"> 581</span> </div>
+<div class="line"><a id="l00582" name="l00582"></a><span class="lineno"> 582</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
+<div class="line"><a id="l00583" name="l00583"></a><span class="lineno"> 583</span> xbInt16 PrintKey( <span class="keywordtype">void</span> *vpTag, xbIxNode *npNode, xbInt16 iKeyNo, xbInt16 iDepth, <span class="keywordtype">char</span> cType, xbInt16 iOutputOpt );</div>
+<div class="line"><a id="l00584" name="l00584"></a><span class="lineno"> 584</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00585" name="l00585"></a><span class="lineno"> 585</span> </div>
+<div class="line"><a id="l00586" name="l00586"></a><span class="lineno"> 586</span> </div>
+<div class="line"><a id="l00587" name="l00587"></a><span class="lineno"> 587</span> };</div>
+<div class="line"><a id="l00588" name="l00588"></a><span class="lineno"> 588</span><span class="preprocessor"> #endif </span><span class="comment">/* XB_MDX_SUPPORT */</span><span class="preprocessor"></span></div>
+<div class="line"><a id="l00589" name="l00589"></a><span class="lineno"> 589</span> </div>
+<div class="line"><a id="l00590" name="l00590"></a><span class="lineno"> 590</span> </div>
+<div class="line"><a id="l00591" name="l00591"></a><span class="lineno"> 591</span><span class="preprocessor">#ifdef XB_TDX_SUPPORT</span></div>
+<div class="line"><a id="l00592" name="l00592"></a><span class="lineno"> 592</span> </div>
+<div class="line"><a id="l00593" name="l00593"></a><span class="lineno"> 593</span><span class="keyword">class </span>XBDLLEXPORT xbIxTdx : <span class="keyword">public</span> xbIxMdx {</div>
+<div class="line"><a id="l00594" name="l00594"></a><span class="lineno"> 594</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00595" name="l00595"></a><span class="lineno"> 595</span> xbIxTdx( <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> * d );</div>
+<div class="line"><a id="l00596" name="l00596"></a><span class="lineno"> 596</span> ~xbIxTdx();</div>
+<div class="line"><a id="l00597" name="l00597"></a><span class="lineno"> 597</span> </div>
+<div class="line"><a id="l00598" name="l00598"></a><span class="lineno"> 598</span> xbInt16 CreateTag( <span class="keyword">const</span> xbString &amp;sName, <span class="keyword">const</span> xbString &amp;sKey, <span class="keyword">const</span> xbString &amp;sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, <span class="keywordtype">void</span> **vpTag );</div>
+<div class="line"><a id="l00599" name="l00599"></a><span class="lineno"> 599</span> </div>
+<div class="line"><a id="l00600" name="l00600"></a><span class="lineno"> 600</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a id="l00601" name="l00601"></a><span class="lineno"> 601</span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a>;</div>
+<div class="line"><a id="l00602" name="l00602"></a><span class="lineno"> 602</span> xbInt16 Close();</div>
+<div class="line"><a id="l00603" name="l00603"></a><span class="lineno"> 603</span> xbInt16 DeleteTag( <span class="keywordtype">void</span> *vpTag );</div>
+<div class="line"><a id="l00604" name="l00604"></a><span class="lineno"> 604</span> </div>
+<div class="line"><a id="l00605" name="l00605"></a><span class="lineno"> 605</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00606" name="l00606"></a><span class="lineno"> 606</span>};</div>
+<div class="line"><a id="l00607" name="l00607"></a><span class="lineno"> 607</span> </div>
+<div class="line"><a id="l00608" name="l00608"></a><span class="lineno"> 608</span><span class="preprocessor">#endif </span><span class="comment">/* XB_TDX_SUPPORT */</span><span class="preprocessor"></span></div>
+<div class="line"><a id="l00609" name="l00609"></a><span class="lineno"> 609</span> </div>
+<div class="line"><a id="l00610" name="l00610"></a><span class="lineno"> 610</span> </div>
+<div class="line"><a id="l00611" name="l00611"></a><span class="lineno"> 611</span> } <span class="comment">/* namespace xb */</span></div>
+<div class="line"><a id="l00612" name="l00612"></a><span class="lineno"> 612</span><span class="preprocessor"> #endif </span><span class="comment">/* XB_INDEX_SUPPORT */</span><span class="preprocessor"></span></div>
+<div class="line"><a id="l00613" name="l00613"></a><span class="lineno"> 613</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_INDEX_H__ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
+<div class="ttc" id="anamespacexb_html_a25f47b226ce924a5c78f97989b0744a2"><div class="ttname"><a href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xb::xbDouble</a></div><div class="ttdeci">double xbDouble</div><div class="ttdef"><b>Definition:</b> xbtypes.h:23</div></div>
+<div class="ttc" id="anamespacexb_html_ab1a750481dd487f0d384aa1d200dff0f"><div class="ttname"><a href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xb::xbBool</a></div><div class="ttdeci">short int xbBool</div><div class="ttdef"><b>Definition:</b> xbtypes.h:24</div></div>
+<div class="ttc" id="anamespacexb_html_ab2eae4b4732466698a7fdd89d77ba53b"><div class="ttname"><a href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xb::xbDbf</a></div><div class="ttdeci">class XBDLLEXPORT xbDbf</div><div class="ttdef"><b>Definition:</b> xbtblmgr.h:28</div></div>
+<div class="ttc" id="axbretcod_8h_html_ac720d5b4ec45bfd606f5865d40816e23"><div class="ttname"><a href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a></div><div class="ttdeci">#define XB_NO_ERROR</div><div class="ttdef"><b>Definition:</b> xbretcod.h:24</div></div>
+<div class="ttc" id="axbtypes_8h_html_adc4b6ca5ad299f63675136d9e03938cc"><div class="ttname"><a href="xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc">xbFalse</a></div><div class="ttdeci">#define xbFalse</div><div class="ttdef"><b>Definition:</b> xbtypes.h:29</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbinsert_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbinsert_8cpp.html
new file mode 100644
index 0000000..e460688
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbinsert_8cpp.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/sql/xbinsert.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_25b94c3afce00ed38231227d8141f932.html">sql</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbinsert.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbixbase_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbixbase_8cpp.html
new file mode 100644
index 0000000..150f9fd
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbixbase_8cpp.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbixbase.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbixbase.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbixmdx_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbixmdx_8cpp.html
new file mode 100644
index 0000000..f6dc5f6
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbixmdx_8cpp.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbixmdx.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbixmdx.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbixndx_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbixndx_8cpp.html
new file mode 100644
index 0000000..fd2aad2
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbixndx_8cpp.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbixndx.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbixndx.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbixtdx_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbixtdx_8cpp.html
new file mode 100644
index 0000000..77685ef
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbixtdx_8cpp.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbixtdx.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbixtdx.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xblnklst_8h.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xblnklst_8h.html
new file mode 100644
index 0000000..0208dc2
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xblnklst_8h.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xblnklst.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xblnklst.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="xblnklst_8h_source.html">Go to the source code of this file.</a></p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xblnklst_8h_source.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xblnklst_8h_source.html
new file mode 100644
index 0000000..8e0e24a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xblnklst_8h_source.html
@@ -0,0 +1,341 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xblnklst.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xblnklst.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="xblnklst_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xblnklst.h</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022 Gary A Kunkel</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">*/</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#ifndef __XB_XBLNKLST_H__</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#define __XB_XBLNKLST_H__</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifdef XB_LINKLIST_SUPPORT</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="keyword">class </span>XBDLLEXPORT xbLinkList {</div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> xbLinkList();</div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> ~xbLinkList();</div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> xbLinkListNode&lt;xbNodeType&gt; *GetHeadNode() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> xbLinkListNode&lt;xbNodeType&gt; *GetEndNode() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> xbLinkListNode&lt;xbNodeType&gt; *GetNodeForNo( xbUInt32 ulNodeNo ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> <span class="keywordtype">void</span> Clear();</div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> xbUInt32 GetNodeCnt () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> xbInt16 InsertAtEnd ( <span class="keyword">const</span> xbNodeType &amp;xbLLN );</div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> xbInt16 InsertAtFront ( <span class="keyword">const</span> xbNodeType &amp;xbLLN );</div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> xbInt16 RemoveByVal ( <span class="keyword">const</span> xbNodeType &amp;xbLLN );</div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> xbInt16 RemoveFromEnd ();</div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> xbInt16 RemoveFromEnd ( xbNodeType &amp;xbLLN );</div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> xbInt16 RemoveFromFront( xbNodeType &amp;xbLLN );</div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> xbInt16 SearchFor ( <span class="keyword">const</span> xbNodeType &amp;xbLLN );</div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> xbUInt32 ulNodeCnt;</div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> xbLinkListNode&lt;xbNodeType&gt; *llStartPtr;</div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> xbLinkListNode&lt;xbNodeType&gt; *llEndPtr;</div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span>};</div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> </div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span>xbLinkList&lt;xbNodeType&gt;::xbLinkList(){</div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> ulNodeCnt = 0;</div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> llStartPtr = NULL;</div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> llEndPtr = NULL;</div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span>}</div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span>xbLinkList&lt;xbNodeType&gt;::~xbLinkList(){</div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> Clear();</div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span>}</div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="keywordtype">void</span> xbLinkList&lt;xbNodeType&gt;::Clear(){</div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> xbLinkListNode&lt;xbNodeType&gt; *cPtr = llStartPtr, *tPtr;</div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="keywordflow">for</span>( xbUInt32 i = 0; i &lt; ulNodeCnt; i++ ){</div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> tPtr = cPtr;</div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> cPtr = cPtr-&gt;GetNextNode();</div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <span class="keyword">delete</span> tPtr;</div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> }</div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> ulNodeCnt = 0;</div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> llStartPtr = NULL;</div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> llEndPtr = NULL;</div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span>}</div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> </div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span>xbLinkListNode&lt;xbNodeType&gt; *xbLinkList&lt;xbNodeType&gt;::GetHeadNode()<span class="keyword"> const</span>{</div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">return</span> llStartPtr;</div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span>}</div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span>xbLinkListNode&lt;xbNodeType&gt; *xbLinkList&lt;xbNodeType&gt;::GetEndNode()<span class="keyword"> const</span>{</div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <span class="keywordflow">return</span> llEndPtr;</div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span>}</div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> </div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span>xbLinkListNode&lt;xbNodeType&gt; *xbLinkList&lt;xbNodeType&gt;::GetNodeForNo( xbUInt32 ulNo )<span class="keyword"> const</span>{</div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> </div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> xbLinkListNode&lt;xbNodeType&gt; *cPtr = llStartPtr;</div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> xbUInt32 i;</div>
+<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <span class="keywordflow">for</span>( i = 0; i &lt; ulNo &amp;&amp; i &lt; ulNodeCnt; i++ )</div>
+<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> cPtr = cPtr-&gt;GetNextNode();</div>
+<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="keywordflow">if</span>( i == ulNo )</div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <span class="keywordflow">return</span> cPtr;</div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">else</span> </div>
+<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span>}</div>
+<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> </div>
+<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> </div>
+<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> </div>
+<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span>xbUInt32 xbLinkList&lt;xbNodeType&gt;::GetNodeCnt()<span class="keyword"> const</span>{</div>
+<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <span class="keywordflow">return</span> ulNodeCnt;</div>
+<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span>}</div>
+<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span>xbInt16 xbLinkList&lt;xbNodeType&gt;::InsertAtFront( <span class="keyword">const</span> xbNodeType &amp; ntKey ){</div>
+<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> </div>
+<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> xbLinkListNode&lt;xbNodeType&gt; *p = <span class="keyword">new</span> xbLinkListNode&lt;xbNodeType&gt;( ntKey );</div>
+<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <span class="keywordflow">if</span>( p == 0 )</div>
+<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ae687fc7d872ba0475a8477e4447f9b54">XB_NO_MEMORY</a>;</div>
+<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> </div>
+<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">if</span>( ulNodeCnt &gt; 0 ){</div>
+<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> llStartPtr-&gt;SetPrevNode( p );</div>
+<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> p-&gt;SetNextNode( llStartPtr );</div>
+<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> } <span class="keywordflow">else</span> {</div>
+<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> llEndPtr = p;</div>
+<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> }</div>
+<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> </div>
+<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> llStartPtr = p;</div>
+<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> ulNodeCnt++;</div>
+<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a>;</div>
+<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span>}</div>
+<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span>xbInt16 xbLinkList&lt;xbNodeType&gt;::InsertAtEnd( <span class="keyword">const</span> xbNodeType &amp; ntKey ){</div>
+<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> </div>
+<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> xbLinkListNode&lt;xbNodeType&gt; *p = <span class="keyword">new</span> xbLinkListNode&lt;xbNodeType&gt;( ntKey );</div>
+<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <span class="keywordflow">if</span>( p == 0 )</div>
+<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ae687fc7d872ba0475a8477e4447f9b54">XB_NO_MEMORY</a>;</div>
+<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> </div>
+<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">if</span>( ulNodeCnt &gt; 0 ){</div>
+<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> llEndPtr-&gt;SetNextNode( p );</div>
+<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> p-&gt;SetPrevNode( llEndPtr );</div>
+<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> llEndPtr = p;</div>
+<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> } <span class="keywordflow">else</span> {</div>
+<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> llStartPtr = p;</div>
+<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> }</div>
+<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> </div>
+<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> llEndPtr = p;</div>
+<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> ulNodeCnt++;</div>
+<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a>;</div>
+<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span>}</div>
+<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> </div>
+<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> </div>
+<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> </div>
+<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span>xbInt16 xbLinkList&lt;xbNodeType&gt;::RemoveByVal( <span class="keyword">const</span> xbNodeType &amp; ntKey ){</div>
+<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="comment">// Remove the first instance of ntKey from the node chain</span></div>
+<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> xbLinkListNode&lt;xbNodeType&gt; *currPtr = llStartPtr;</div>
+<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> xbLinkListNode&lt;xbNodeType&gt; *prevPtr = NULL;</div>
+<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> </div>
+<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="keywordflow">for</span>( xbUInt32 i = 0; i &lt; ulNodeCnt; i++ ){</div>
+<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">if</span>( currPtr-&gt;GetKey() == ntKey ){</div>
+<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <span class="keywordflow">if</span>( prevPtr == NULL ){ <span class="comment">//then this is the first node</span></div>
+<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> llStartPtr = currPtr-&gt;GetNextNode();</div>
+<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> <span class="keywordflow">if</span>( llStartPtr ) <span class="comment">// if more than one link in the linked list</span></div>
+<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> llStartPtr-&gt;SetPrevNode( NULL );</div>
+<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <span class="keyword">delete</span> currPtr;</div>
+<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> ulNodeCnt--;</div>
+<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> <span class="keywordflow">return</span> i + 1;</div>
+<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> }</div>
+<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> <span class="keywordflow">else</span> {</div>
+<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> prevPtr-&gt;SetNextNode( currPtr-&gt;GetNextNode());</div>
+<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <span class="keywordflow">if</span>( currPtr-&gt;GetNextNode())</div>
+<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> currPtr-&gt;GetNextNode()-&gt;SetPrevNode( prevPtr );</div>
+<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> <span class="keyword">delete</span> currPtr;</div>
+<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> ulNodeCnt--;</div>
+<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="keywordflow">return</span> i + 1;</div>
+<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> }</div>
+<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> }</div>
+<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> prevPtr = currPtr;</div>
+<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> currPtr = currPtr-&gt;GetNextNode();</div>
+<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> }</div>
+<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac2606659a54111334f5b02861e533700">XB_NOT_FOUND</a>;</div>
+<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span>}</div>
+<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> </div>
+<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> </div>
+<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span>xbInt16 xbLinkList&lt;xbNodeType&gt;::RemoveFromFront( xbNodeType &amp; ntKey ){</div>
+<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> </div>
+<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <span class="keywordflow">if</span>( ulNodeCnt &lt;= 0 )</div>
+<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb">XB_INVALID_NODELINK</a>;</div>
+<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> xbLinkListNode&lt;xbNodeType&gt; *p = llStartPtr;</div>
+<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> llStartPtr = p-&gt;GetNextNode();</div>
+<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> <span class="keywordflow">if</span>( llStartPtr )</div>
+<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> llStartPtr-&gt;SetPrevNode( NULL );</div>
+<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> ntKey = p-&gt;GetKey();</div>
+<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> <span class="keyword">delete</span> p;</div>
+<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> ulNodeCnt--;</div>
+<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a>;</div>
+<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span>}</div>
+<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> </div>
+<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> </div>
+<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span>xbInt16 xbLinkList&lt;xbNodeType&gt;::RemoveFromEnd( xbNodeType &amp; ntKey ){</div>
+<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> </div>
+<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">if</span>( ulNodeCnt &lt;= 0 )</div>
+<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb">XB_INVALID_NODELINK</a>;</div>
+<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> xbLinkListNode&lt;xbNodeType&gt; *p = llEndPtr;</div>
+<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> <span class="keywordflow">if</span>( p-&gt;GetPrevNode()){</div>
+<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> llEndPtr = p-&gt;GetPrevNode();</div>
+<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> llEndPtr-&gt;SetNextNode( NULL );</div>
+<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> } <span class="keywordflow">else</span> {</div>
+<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> <span class="comment">// there are no more nodes</span></div>
+<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> llStartPtr = NULL;</div>
+<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> llEndPtr = NULL;</div>
+<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> }</div>
+<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> ntKey = p-&gt;GetKey();</div>
+<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> <span class="keyword">delete</span> p;</div>
+<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> ulNodeCnt--;</div>
+<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a>;</div>
+<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span>}</div>
+<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> </div>
+<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> </div>
+<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span>xbInt16 xbLinkList&lt;xbNodeType&gt;::RemoveFromEnd(){</div>
+<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> </div>
+<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> <span class="keywordflow">if</span>( ulNodeCnt &lt;= 0 )</div>
+<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb">XB_INVALID_NODELINK</a>;</div>
+<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> xbLinkListNode&lt;xbNodeType&gt; *p = llEndPtr;</div>
+<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <span class="keywordflow">if</span>( p-&gt;GetPrevNode()){</div>
+<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> llEndPtr = p-&gt;GetPrevNode();</div>
+<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> llEndPtr-&gt;SetNextNode( NULL );</div>
+<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> } <span class="keywordflow">else</span> {</div>
+<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> <span class="comment">// there are no more nodes</span></div>
+<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> llStartPtr = NULL;</div>
+<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> llEndPtr = NULL;</div>
+<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> }</div>
+<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> <span class="keyword">delete</span> p-&gt;GetKey();</div>
+<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> <span class="keyword">delete</span> p;</div>
+<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> ulNodeCnt--;</div>
+<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a>;</div>
+<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span>}</div>
+<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> </div>
+<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> </div>
+<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span>xbInt16 xbLinkList&lt;xbNodeType&gt;::SearchFor( <span class="keyword">const</span> xbNodeType &amp; ntKey ){</div>
+<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> </div>
+<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> xbLinkListNode&lt;xbNodeType&gt; *cPtr = llStartPtr;</div>
+<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> <span class="keywordflow">for</span>( xbUInt32 i = 0; i &lt; ulNodeCnt; i++ ){</div>
+<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> <span class="keywordflow">if</span>( cPtr-&gt;GetKey() == ntKey )</div>
+<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> <span class="keywordflow">return</span> i+1;</div>
+<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> cPtr = cPtr-&gt;GetNextNode();</div>
+<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> }</div>
+<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a>;</div>
+<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> </div>
+<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span>}</div>
+<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span>} <span class="comment">// namespace</span></div>
+<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> </div>
+<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span><span class="preprocessor">#endif </span><span class="comment">// XB_LINKLIST_SUPPORT</span></div>
+<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span><span class="preprocessor">#endif </span><span class="comment">// XB_XBLNKLST_H__</span></div>
+<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> </div>
+<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> </div>
+<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
+<div class="ttc" id="axbretcod_8h_html_a13e6876470bd34c8c4e5533f115e04eb"><div class="ttname"><a href="xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb">XB_INVALID_NODELINK</a></div><div class="ttdeci">#define XB_INVALID_NODELINK</div><div class="ttdef"><b>Definition:</b> xbretcod.h:29</div></div>
+<div class="ttc" id="axbretcod_8h_html_ac2606659a54111334f5b02861e533700"><div class="ttname"><a href="xbretcod_8h.html#ac2606659a54111334f5b02861e533700">XB_NOT_FOUND</a></div><div class="ttdeci">#define XB_NOT_FOUND</div><div class="ttdef"><b>Definition:</b> xbretcod.h:41</div></div>
+<div class="ttc" id="axbretcod_8h_html_ac720d5b4ec45bfd606f5865d40816e23"><div class="ttname"><a href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a></div><div class="ttdeci">#define XB_NO_ERROR</div><div class="ttdef"><b>Definition:</b> xbretcod.h:24</div></div>
+<div class="ttc" id="axbretcod_8h_html_ae687fc7d872ba0475a8477e4447f9b54"><div class="ttname"><a href="xbretcod_8h.html#ae687fc7d872ba0475a8477e4447f9b54">XB_NO_MEMORY</a></div><div class="ttdeci">#define XB_NO_MEMORY</div><div class="ttdef"><b>Definition:</b> xbretcod.h:25</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xblnklstord_8h.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xblnklstord_8h.html
new file mode 100644
index 0000000..630dd10
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xblnklstord_8h.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xblnklstord.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xblnklstord.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="xblnklstord_8h_source.html">Go to the source code of this file.</a></p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xblnklstord_8h_source.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xblnklstord_8h_source.html
new file mode 100644
index 0000000..af441c9
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xblnklstord_8h_source.html
@@ -0,0 +1,455 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xblnklstord.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xblnklstord.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="xblnklstord_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xblnklstord.h</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2019,2022 Gary A Kunkel</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">*/</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment">// Ordered link list</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#ifndef __XB_XBLNKLSTORD_H__</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="preprocessor">#define __XB_XBLNKLSTORD_H__</span></div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#ifdef XB_LINKLIST_SUPPORT</span></div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="keyword">class </span>XBDLLEXPORT xbLinkListOrd {</div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> xbLinkListOrd();</div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> ~xbLinkListOrd();</div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <span class="keywordtype">void</span> Clear();</div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> xbLinkListNode&lt;xbNodeType&gt; *GetHeadNode() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> xbLinkListNode&lt;xbNodeType&gt; *GetEndNode() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> xbLinkListNode&lt;xbNodeType&gt; *GetNodeForKey( <span class="keyword">const</span> xbString &amp;sKey ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> xbInt16 GetDataForKey ( <span class="keyword">const</span> xbNodeType &amp;ntKey, xbString &amp;sData );</div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetDupKeys ();</div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> xbUInt32 GetNodeCnt () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> xbUInt32 GetNodeCnt ( <span class="keyword">const</span> xbString &amp;sNodeKey ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> xbInt16 InsertKey ( <span class="keyword">const</span> xbNodeType &amp;ntKey );</div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> xbInt16 InsertKey ( <span class="keyword">const</span> xbNodeType &amp;ntKey, <span class="keyword">const</span> xbString &amp;sData );</div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> xbInt16 InsertKey ( <span class="keyword">const</span> xbNodeType &amp;ntKey, xbUInt32 ulData );</div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> </div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> KeyExists ( <span class="keyword">const</span> xbNodeType &amp;ntKey ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> xbInt16 RemoveKey ( <span class="keyword">const</span> xbNodeType &amp;ntKey );</div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> xbInt16 RemoveFromEnd ( xbNodeType &amp;ntKey );</div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> xbInt16 RemoveFromFront( xbNodeType &amp;ntKey );</div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> xbInt16 RemoveFromFront();</div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="keywordtype">void</span> SetDupKeys ( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bAllowDupKeys );</div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> xbInt16 UpdateForKey ( <span class="keyword">const</span> xbNodeType &amp;ntKey, <span class="keyword">const</span> xbString &amp;sData );</div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> </div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> xbUInt32 ulNodeCnt;</div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bAllowDupKeys;</div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> xbLinkListNode&lt;xbNodeType&gt; *llStartPtr;</div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> xbLinkListNode&lt;xbNodeType&gt; *llEndPtr;</div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span>};</div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> </div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span>xbLinkListOrd&lt;xbNodeType&gt;::xbLinkListOrd(){</div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> bAllowDupKeys = <a class="code hl_define" href="xbtypes_8h.html#ab0ae00665298fe7f5292691cb98ec2d9">xbTrue</a>; <span class="comment">// default setting - allow duplicate keys</span></div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> ulNodeCnt = 0;</div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> llStartPtr = NULL;</div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> llEndPtr = NULL;</div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span>}</div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span>xbLinkListOrd&lt;xbNodeType&gt;::~xbLinkListOrd(){</div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> Clear();</div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span>}</div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span><span class="keywordtype">void</span> xbLinkListOrd&lt;xbNodeType&gt;::Clear(){</div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> xbLinkListNode&lt;xbNodeType&gt; *cPtr = llStartPtr, *tPtr;</div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">for</span>( xbUInt32 i = 0; i &lt; ulNodeCnt; i++ ){</div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> tPtr = cPtr;</div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> cPtr = cPtr-&gt;GetNextNode();</div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <span class="comment">// next line might cause seg faults</span></div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="comment">// delete tPtr-&gt;GetData();</span></div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> </div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> <span class="keyword">delete</span> tPtr;</div>
+<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> }</div>
+<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> ulNodeCnt = 0;</div>
+<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> llStartPtr = NULL;</div>
+<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> llEndPtr = NULL;</div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span>}</div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> </div>
+<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span>xbLinkListNode&lt;xbNodeType&gt; * xbLinkListOrd&lt;xbNodeType&gt;::GetHeadNode()<span class="keyword"> const</span>{</div>
+<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <span class="keywordflow">return</span> llStartPtr;</div>
+<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span>}</div>
+<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> </div>
+<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span>xbLinkListNode&lt;xbNodeType&gt; * xbLinkListOrd&lt;xbNodeType&gt;::GetEndNode()<span class="keyword"> const</span>{</div>
+<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <span class="keywordflow">return</span> llEndPtr;</div>
+<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span>}</div>
+<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span>xbUInt32 xbLinkListOrd&lt;xbNodeType&gt;::GetNodeCnt()<span class="keyword"> const</span>{</div>
+<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="keywordflow">return</span> ulNodeCnt;</div>
+<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span>}</div>
+<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> </div>
+<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span>xbUInt32 xbLinkListOrd&lt;xbNodeType&gt;::GetNodeCnt( <span class="keyword">const</span> xbString &amp;sNodeKey )<span class="keyword"> const</span>{</div>
+<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> </div>
+<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="comment">// won&#39;t work if nodekey is not a string</span></div>
+<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> xbLinkListNode&lt;xbNodeType&gt; *currPtr = llStartPtr;</div>
+<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <span class="comment">// skip to sNodeKey</span></div>
+<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <span class="keywordflow">while</span>( currPtr &amp;&amp; ( sNodeKey &gt; currPtr-&gt;GetKey())) {</div>
+<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> currPtr = currPtr-&gt;GetNextNode();</div>
+<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> }</div>
+<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <span class="comment">// count entries for sNodeKey</span></div>
+<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> xbInt16 iKeyCnt = 0;</div>
+<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">while</span>( currPtr &amp;&amp; ( sNodeKey == currPtr-&gt;GetKey())) {</div>
+<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> iKeyCnt++;</div>
+<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> currPtr = currPtr-&gt;GetNextNode();</div>
+<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> }</div>
+<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="keywordflow">return</span> iKeyCnt;</div>
+<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span>}</div>
+<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> </div>
+<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> </div>
+<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span>xbInt16 xbLinkListOrd&lt;xbNodeType&gt;::InsertKey( <span class="keyword">const</span> xbNodeType &amp;ntKey ){</div>
+<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> xbString s;</div>
+<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">return</span> InsertKey( ntKey, s );</div>
+<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span>}</div>
+<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> </div>
+<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> </div>
+<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> </div>
+<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> </div>
+<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span>xbInt16 xbLinkListOrd&lt;xbNodeType&gt;::InsertKey( <span class="keyword">const</span> xbNodeType &amp;ntKey, xbUInt32 ul ){</div>
+<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> </div>
+<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> xbString s;</div>
+<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> s.Sprintf( <span class="stringliteral">&quot;%ld&quot;</span>, ul );</div>
+<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="keywordflow">return</span> InsertKey( ntKey, s );</div>
+<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span>}</div>
+<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> </div>
+<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> </div>
+<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span>xbInt16 xbLinkListOrd&lt;xbNodeType&gt;::InsertKey( <span class="keyword">const</span> xbNodeType &amp;ntKey, <span class="keyword">const</span> xbString &amp;sData ){</div>
+<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> </div>
+<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> xbLinkListNode&lt;xbNodeType&gt; *p = <span class="keyword">new</span> xbLinkListNode&lt;xbNodeType&gt;( ntKey, sData );</div>
+<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="keywordflow">if</span>( p == 0 )</div>
+<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ae687fc7d872ba0475a8477e4447f9b54">XB_NO_MEMORY</a>;</div>
+<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> </div>
+<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <span class="keywordflow">if</span>( ulNodeCnt &gt; 0 ){</div>
+<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> xbLinkListNode&lt;xbNodeType&gt; *currPtr = llStartPtr;</div>
+<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> xbLinkListNode&lt;xbNodeType&gt; *prevPtr = NULL;</div>
+<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> </div>
+<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <span class="comment">// find location in the chain</span></div>
+<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> <span class="keywordflow">while</span>( currPtr &amp;&amp; ntKey &gt; currPtr-&gt;GetKey() ){</div>
+<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> prevPtr = currPtr;</div>
+<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> currPtr = currPtr-&gt;GetNextNode();</div>
+<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> }</div>
+<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> <span class="keywordflow">if</span>( currPtr &amp;&amp; ntKey == currPtr-&gt;GetKey() &amp;&amp; bAllowDupKeys == 0 ){</div>
+<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <span class="keyword">delete</span> p;</div>
+<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ad60dbb1862c0c1c2dc0464cfbfd93a34">XB_KEY_NOT_UNIQUE</a>;</div>
+<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> }</div>
+<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> </div>
+<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="keywordflow">if</span>( currPtr == NULL ){</div>
+<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <span class="comment">// std::cout &lt;&lt; &quot;at the end of the chain\n&quot;;</span></div>
+<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> llEndPtr = p;</div>
+<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> prevPtr-&gt;SetNextNode( p );</div>
+<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> p-&gt;SetPrevNode( prevPtr );</div>
+<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> </div>
+<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span>( currPtr-&gt;GetPrevNode() == NULL ){</div>
+<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> <span class="comment">// std::cout &lt;&lt; &quot;at the beginning of the chain\n&quot;;</span></div>
+<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> p-&gt;SetNextNode( llStartPtr );</div>
+<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> llStartPtr-&gt;SetPrevNode( p );</div>
+<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> llStartPtr = p;</div>
+<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> </div>
+<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> } <span class="keywordflow">else</span> {</div>
+<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <span class="comment">// std::cout &lt;&lt; &quot;in the middle of the chain\n&quot;;</span></div>
+<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> p-&gt;SetNextNode( currPtr ); </div>
+<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> p-&gt;SetPrevNode( currPtr-&gt;GetPrevNode());</div>
+<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> currPtr-&gt;SetPrevNode( p );</div>
+<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> prevPtr-&gt;SetNextNode( p );</div>
+<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> }</div>
+<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> } <span class="keywordflow">else</span> {</div>
+<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> <span class="comment">// std::cout &lt;&lt; &quot;first addition to the chain\n&quot;;</span></div>
+<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> llStartPtr = p;</div>
+<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> llEndPtr = p;</div>
+<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> }</div>
+<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> ulNodeCnt++;</div>
+<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a>;</div>
+<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span>}</div>
+<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> </div>
+<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span>xbInt16 xbLinkListOrd&lt;xbNodeType&gt;::RemoveKey( <span class="keyword">const</span> xbNodeType &amp;ntKey ){</div>
+<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> <span class="comment">// Remove the first instance of ntKey from the node chain</span></div>
+<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> xbLinkListNode&lt;xbNodeType&gt; *currPtr = llStartPtr;</div>
+<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> xbLinkListNode&lt;xbNodeType&gt; *prevPtr = NULL;</div>
+<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> </div>
+<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> <span class="keywordflow">while</span>( currPtr &amp;&amp; ntKey &gt; currPtr-&gt;GetKey() ){</div>
+<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> prevPtr = currPtr;</div>
+<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> currPtr = currPtr-&gt;GetNextNode();</div>
+<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> }</div>
+<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> </div>
+<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> <span class="keywordflow">if</span>( currPtr &amp;&amp; ntKey == currPtr-&gt;GetKey()){</div>
+<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span><span class="comment">// ntKey = currPtr-&gt;GetKey();</span></div>
+<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> <span class="keywordflow">if</span>( prevPtr == NULL ){ <span class="comment">// this is the first node</span></div>
+<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> llStartPtr = currPtr-&gt;GetNextNode();</div>
+<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> <span class="comment">// next line fails</span></div>
+<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> <span class="keywordflow">if</span>( llStartPtr ){</div>
+<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> llStartPtr-&gt;SetPrevNode( NULL );</div>
+<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> }</div>
+<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> <span class="keyword">delete</span> currPtr;</div>
+<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> ulNodeCnt--;</div>
+<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a>;</div>
+<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span>( currPtr-&gt;GetNextNode() == NULL ){ <span class="comment">// this is the last node</span></div>
+<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> llEndPtr = prevPtr;</div>
+<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> prevPtr-&gt;SetNextNode( NULL );</div>
+<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <span class="keyword">delete</span> currPtr;</div>
+<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> ulNodeCnt--;</div>
+<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a>;</div>
+<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> } <span class="keywordflow">else</span> {</div>
+<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> </div>
+<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> prevPtr-&gt;SetNextNode( currPtr-&gt;GetNextNode());</div>
+<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> currPtr-&gt;GetNextNode()-&gt;SetPrevNode( prevPtr );</div>
+<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> <span class="keyword">delete</span> currPtr;</div>
+<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> ulNodeCnt--;</div>
+<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a>;</div>
+<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> }</div>
+<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> } <span class="keywordflow">else</span> {</div>
+<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac2606659a54111334f5b02861e533700">XB_NOT_FOUND</a>;</div>
+<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> }</div>
+<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span>}</div>
+<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> </div>
+<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span>xbInt16 xbLinkListOrd&lt;xbNodeType&gt;::RemoveFromFront( xbNodeType &amp;ntKey ){</div>
+<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> </div>
+<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> <span class="keywordflow">if</span>( ulNodeCnt &lt;= 0 )</div>
+<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb">XB_INVALID_NODELINK</a>;</div>
+<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> xbLinkListNode&lt;xbNodeType&gt; *p = llStartPtr;</div>
+<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> llStartPtr = p-&gt;GetNextNode();</div>
+<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> <span class="keywordflow">if</span>( llStartPtr )</div>
+<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> llStartPtr-&gt;SetPrevNode( NULL );</div>
+<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> ntKey = p-&gt;GetKey();</div>
+<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> <span class="keyword">delete</span> p;</div>
+<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> ulNodeCnt--;</div>
+<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a>;</div>
+<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span>}</div>
+<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> </div>
+<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span>xbInt16 xbLinkListOrd&lt;xbNodeType&gt;::RemoveFromFront(){</div>
+<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> </div>
+<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> <span class="keywordflow">if</span>( ulNodeCnt &lt;= 0 )</div>
+<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb">XB_INVALID_NODELINK</a>;</div>
+<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> xbLinkListNode&lt;xbNodeType&gt; *p = llStartPtr;</div>
+<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> llStartPtr = p-&gt;GetNextNode();</div>
+<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> <span class="keywordflow">if</span>( llStartPtr )</div>
+<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> llStartPtr-&gt;SetPrevNode( NULL );</div>
+<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> </div>
+<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> <span class="keywordflow">if</span>( p-&gt;GetKey())</div>
+<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> <span class="keyword">delete</span> p-&gt;GetKey();</div>
+<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> </div>
+<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> <span class="keyword">delete</span> p;</div>
+<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> ulNodeCnt--;</div>
+<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> </div>
+<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a>;</div>
+<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span>}</div>
+<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> </div>
+<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> </div>
+<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span>xbInt16 xbLinkListOrd&lt;xbNodeType&gt;::RemoveFromEnd( xbNodeType &amp;ntKey ){</div>
+<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> </div>
+<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> <span class="keywordflow">if</span>( ulNodeCnt &lt;= 0 )</div>
+<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb">XB_INVALID_NODELINK</a>;</div>
+<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> xbLinkListNode&lt;xbNodeType&gt; *p = llEndPtr;</div>
+<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> llEndPtr = p-&gt;GetPrevNode();</div>
+<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> llEndPtr-&gt;SetNextNode( NULL );</div>
+<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> ntKey = p-&gt;GetKey();</div>
+<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> <span class="keyword">delete</span> p;</div>
+<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> ulNodeCnt--;</div>
+<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a>;</div>
+<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span>}</div>
+<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> </div>
+<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span><a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xbLinkListOrd&lt;xbNodeType&gt;::GetDupKeys(){</div>
+<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> <span class="keywordflow">return</span> bAllowDupKeys;</div>
+<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span>}</div>
+<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> </div>
+<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span><span class="keywordtype">void</span> xbLinkListOrd&lt;xbNodeType&gt;::SetDupKeys( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bAllowDupKeys ){</div>
+<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> this-&gt;bAllowDupKeys = bAllowDupKeys;</div>
+<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span>}</div>
+<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> </div>
+<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> </div>
+<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span><a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xbLinkListOrd&lt;xbNodeType&gt;::KeyExists( <span class="keyword">const</span> xbNodeType &amp;ntKey )<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> </div>
+<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> xbLinkListNode&lt;xbNodeType&gt; *currPtr = llStartPtr;</div>
+<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> <span class="keywordflow">while</span>( currPtr &amp;&amp; ntKey &gt; currPtr-&gt;GetKey() ){</div>
+<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> currPtr = currPtr-&gt;GetNextNode();</div>
+<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> }</div>
+<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> <span class="keywordflow">if</span>( currPtr &amp;&amp; ntKey == currPtr-&gt;GetKey()){</div>
+<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbtypes_8h.html#ab0ae00665298fe7f5292691cb98ec2d9">xbTrue</a>;</div>
+<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> } <span class="keywordflow">else</span> {</div>
+<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc">xbFalse</a>;</div>
+<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> }</div>
+<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span>}</div>
+<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> </div>
+<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> </div>
+<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span>xbInt16 xbLinkListOrd&lt;xbNodeType&gt;::GetDataForKey( <span class="keyword">const</span> xbNodeType &amp;ntKey, xbString &amp;sData ){</div>
+<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> </div>
+<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> xbLinkListNode&lt;xbNodeType&gt; *currPtr = llStartPtr;</div>
+<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> <span class="keywordflow">while</span>( currPtr &amp;&amp; ntKey &gt; currPtr-&gt;GetKey() ){</div>
+<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> currPtr = currPtr-&gt;GetNextNode();</div>
+<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> }</div>
+<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> </div>
+<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> <span class="keywordflow">if</span>( currPtr &amp;&amp; ntKey == currPtr-&gt;GetKey()){</div>
+<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> sData = currPtr-&gt;GetData();</div>
+<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a>;</div>
+<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> } <span class="keywordflow">else</span> {</div>
+<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac2606659a54111334f5b02861e533700">XB_NOT_FOUND</a>;</div>
+<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span> }</div>
+<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span>}</div>
+<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> </div>
+<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span> </div>
+<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span>xbInt16 xbLinkListOrd&lt;xbNodeType&gt;::UpdateForKey( <span class="keyword">const</span> xbNodeType &amp;ntKey, <span class="keyword">const</span> xbString &amp;sData ){</div>
+<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span> </div>
+<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> <span class="keywordflow">if</span>( ulNodeCnt == 0 )</div>
+<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> <span class="keywordflow">return</span> InsertKey( ntKey, sData );</div>
+<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> xbLinkListNode&lt;xbNodeType&gt; * currPtr = llStartPtr;</div>
+<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> xbLinkListNode&lt;xbNodeType&gt; * prevPtr = NULL;</div>
+<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> <span class="keywordflow">while</span>( currPtr &amp;&amp; ntKey &gt; currPtr-&gt;GetKey() ) {</div>
+<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span> prevPtr = currPtr;</div>
+<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span> currPtr = currPtr-&gt;GetNextNode();</div>
+<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> }</div>
+<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> </div>
+<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> <span class="keywordflow">if</span>( currPtr &amp;&amp; ntKey == currPtr-&gt;GetKey() ) {</div>
+<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> xbLinkListNode&lt;xbNodeType&gt; *p = <span class="keyword">new</span> xbLinkListNode&lt;xbNodeType&gt;( ntKey, sData );</div>
+<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> <span class="keywordflow">if</span>( prevPtr )</div>
+<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> prevPtr-&gt;SetNextNode( p );</div>
+<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span> <span class="keywordflow">else</span></div>
+<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span> llStartPtr = p;</div>
+<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> p-&gt;SetNextNode( currPtr-&gt;GetNextNode() );</div>
+<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> p-&gt;SetPrevNode( currPtr-&gt;GetPrevNode() );</div>
+<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> <span class="keyword">delete</span> currPtr;</div>
+<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a>;</div>
+<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> }</div>
+<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> </div>
+<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span> <span class="keywordflow">return</span> InsertKey( ntKey, sData );</div>
+<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span> </div>
+<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span><span class="comment">// return 0;</span></div>
+<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span>}</div>
+<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> </div>
+<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span>} <span class="comment">// namespace</span></div>
+<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> </div>
+<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span><span class="preprocessor">#endif </span><span class="comment">// XB_LINKLIST_SUPPORT</span></div>
+<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span><span class="preprocessor">#endif </span><span class="comment">// XB_XBLNKLSTORD_H__</span></div>
+<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span> </div>
+<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> </div>
+<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
+<div class="ttc" id="anamespacexb_html_ab1a750481dd487f0d384aa1d200dff0f"><div class="ttname"><a href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xb::xbBool</a></div><div class="ttdeci">short int xbBool</div><div class="ttdef"><b>Definition:</b> xbtypes.h:24</div></div>
+<div class="ttc" id="axbretcod_8h_html_a13e6876470bd34c8c4e5533f115e04eb"><div class="ttname"><a href="xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb">XB_INVALID_NODELINK</a></div><div class="ttdeci">#define XB_INVALID_NODELINK</div><div class="ttdef"><b>Definition:</b> xbretcod.h:29</div></div>
+<div class="ttc" id="axbretcod_8h_html_ac2606659a54111334f5b02861e533700"><div class="ttname"><a href="xbretcod_8h.html#ac2606659a54111334f5b02861e533700">XB_NOT_FOUND</a></div><div class="ttdeci">#define XB_NOT_FOUND</div><div class="ttdef"><b>Definition:</b> xbretcod.h:41</div></div>
+<div class="ttc" id="axbretcod_8h_html_ac720d5b4ec45bfd606f5865d40816e23"><div class="ttname"><a href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a></div><div class="ttdeci">#define XB_NO_ERROR</div><div class="ttdef"><b>Definition:</b> xbretcod.h:24</div></div>
+<div class="ttc" id="axbretcod_8h_html_ad60dbb1862c0c1c2dc0464cfbfd93a34"><div class="ttname"><a href="xbretcod_8h.html#ad60dbb1862c0c1c2dc0464cfbfd93a34">XB_KEY_NOT_UNIQUE</a></div><div class="ttdeci">#define XB_KEY_NOT_UNIQUE</div><div class="ttdef"><b>Definition:</b> xbretcod.h:30</div></div>
+<div class="ttc" id="axbretcod_8h_html_ae687fc7d872ba0475a8477e4447f9b54"><div class="ttname"><a href="xbretcod_8h.html#ae687fc7d872ba0475a8477e4447f9b54">XB_NO_MEMORY</a></div><div class="ttdeci">#define XB_NO_MEMORY</div><div class="ttdef"><b>Definition:</b> xbretcod.h:25</div></div>
+<div class="ttc" id="axbtypes_8h_html_ab0ae00665298fe7f5292691cb98ec2d9"><div class="ttname"><a href="xbtypes_8h.html#ab0ae00665298fe7f5292691cb98ec2d9">xbTrue</a></div><div class="ttdeci">#define xbTrue</div><div class="ttdef"><b>Definition:</b> xbtypes.h:28</div></div>
+<div class="ttc" id="axbtypes_8h_html_adc4b6ca5ad299f63675136d9e03938cc"><div class="ttname"><a href="xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc">xbFalse</a></div><div class="ttdeci">#define xbFalse</div><div class="ttdef"><b>Definition:</b> xbtypes.h:29</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xblnknod_8h.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xblnknod_8h.html
new file mode 100644
index 0000000..a26256b
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xblnknod_8h.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xblnknod.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xblnknod.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="xblnknod_8h_source.html">Go to the source code of this file.</a></p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xblnknod_8h_source.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xblnknod_8h_source.html
new file mode 100644
index 0000000..5594d65
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xblnknod_8h_source.html
@@ -0,0 +1,174 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xblnknod.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xblnknod.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="xblnknod_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xblnknod.h</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022 Gary A Kunkel</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">*/</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#ifndef __XB_XBLNKNOD_H__</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#define __XB_XBLNKNOD_H__</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="preprocessor">#ifdef XB_LINKLIST_SUPPORT</span></div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="keyword">class </span>XBDLLEXPORT xbLinkListNode {</div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> xbLinkListNode( <span class="keyword">const</span> xbNodeType &amp; );</div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> xbLinkListNode( <span class="keyword">const</span> xbNodeType &amp;, <span class="keyword">const</span> xbString &amp; );</div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> xbNodeType GetKey() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> xbString &amp;GetData();</div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> xbLinkListNode&lt;xbNodeType&gt; *GetNextNode() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> xbLinkListNode&lt;xbNodeType&gt; *GetPrevNode() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> <span class="keywordtype">void</span> SetNextNode( xbLinkListNode&lt;xbNodeType&gt; *llNext );</div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <span class="keywordtype">void</span> SetPrevNode( xbLinkListNode&lt;xbNodeType&gt; *llPrev );</div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> xbNodeType ntKey;</div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> xbString sData;</div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> xbLinkListNode *llNext;</div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> xbLinkListNode *llPrev;</div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span>};</div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> xbLinkListNode&lt;xbNodeType&gt;::xbLinkListNode( <span class="keyword">const</span> xbNodeType &amp;key ){</div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> ntKey = key;</div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> llNext = NULL;</div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> llPrev = NULL;</div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> }</div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> xbLinkListNode&lt;xbNodeType&gt;::xbLinkListNode( <span class="keyword">const</span> xbNodeType &amp;key, <span class="keyword">const</span> xbString &amp;s ){</div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> ntKey = key;</div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> sData = s;</div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> llNext = NULL;</div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> llPrev = NULL;</div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> }</div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> xbNodeType xbLinkListNode&lt;xbNodeType&gt;::GetKey()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <span class="keywordflow">return</span> ntKey;</div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> }</div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> xbString &amp;xbLinkListNode&lt;xbNodeType&gt;::GetData(){</div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="keywordflow">return</span> sData;</div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> }</div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> </div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> xbLinkListNode&lt;xbNodeType&gt; *xbLinkListNode&lt;xbNodeType&gt;::GetNextNode()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="keywordflow">return</span> llNext;</div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> }</div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> xbLinkListNode&lt;xbNodeType&gt; *xbLinkListNode&lt;xbNodeType&gt;::GetPrevNode()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">return</span> llPrev;</div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> }</div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> </div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <span class="keywordtype">void</span> xbLinkListNode&lt;xbNodeType&gt;::SetNextNode( xbLinkListNode&lt;xbNodeType&gt; *lln ){</div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> llNext = lln;</div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> }</div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> </div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <span class="keywordtype">void</span> xbLinkListNode&lt;xbNodeType&gt;::SetPrevNode( xbLinkListNode&lt;xbNodeType&gt; *llp ){</div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> llPrev = llp;</div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> }</div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> </div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span>} <span class="comment">// namespace</span></div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span><span class="preprocessor">#endif </span><span class="comment">// XB_LINKLIST_SUPPORT</span></div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span><span class="preprocessor">#endif </span><span class="comment">// XB_XBLNKNOD_H__</span></div>
+<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> </div>
+<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xblog_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xblog_8cpp.html
new file mode 100644
index 0000000..a273dfe
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xblog_8cpp.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xblog.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xblog.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xblog_8h.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xblog_8h.html
new file mode 100644
index 0000000..fc7b6f1
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xblog_8h.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xblog.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#namespaces">Namespaces</a> </div>
+ <div class="headertitle"><div class="title">xblog.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="xblog_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
+Namespaces</h2></td></tr>
+<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xblog_8h_source.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xblog_8h_source.html
new file mode 100644
index 0000000..db2c10f
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xblog_8h_source.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xblog.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xblog.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="xblog_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xblog.h</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022 Gary A Kunkel</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">*/</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#ifndef __XB_XBLOG_H__</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#define __XB_XBLOG_H__</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#ifdef CMAKE_COMPILER_IS_GNUCC</span></div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#pragma interface</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="preprocessor">#ifdef XB_LOGGING_SUPPORT</span></div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="keyword">class </span>XBDLLEXPORT <a class="code hl_variable" href="namespacexb.html#a4a31fbe9110c9e55495ce71e642d785c">xbLog</a> : <span class="keyword">public</span> xbFile {</div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> <a class="code hl_variable" href="namespacexb.html#a4a31fbe9110c9e55495ce71e642d785c">xbLog</a>();</div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <a class="code hl_variable" href="namespacexb.html#a4a31fbe9110c9e55495ce71e642d785c">xbLog</a>( <span class="keyword">const</span> xbString &amp;sLogFileName );</div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> ~xbLog();</div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> </div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> xbInt16 LogClose ();</div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> xbInt16 LogGetStatus ();</div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> xbInt16 LogOpen ();</div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <span class="keywordtype">void</span> LogSetStatus ( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bLogStatus );</div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keywordtype">void</span> LogSetLogSize( <span class="keywordtype">size_t</span> lSize ); <span class="comment">// { LogSize = size; }</span></div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> xbInt16 LogWrite ( <span class="keyword">const</span> xbString &amp;LogEntry, xbInt16 iOutputOption = 0 );</div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> xbInt16 LogWriteBytes( xbUInt32 lByteCnt, <span class="keyword">const</span> <span class="keywordtype">char</span> *p );</div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> <span class="keywordtype">size_t</span> LogGetLogSize()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lLogSize; }</div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bLoggingStatus; <span class="comment">// false = logging off</span></div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <span class="comment">// true = logging on</span></div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <span class="keywordtype">size_t</span> lLogSize;</div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> xbInt16 iShareMode;</div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span>};</div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span><span class="preprocessor">#endif </span><span class="comment">// XB_LOGGING_SUPPORT</span></div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span>} <span class="comment">// namespace</span></div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><span class="preprocessor">#endif </span><span class="comment">// XB_XBLOG_H__</span></div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> </div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
+<div class="ttc" id="anamespacexb_html_a4a31fbe9110c9e55495ce71e642d785c"><div class="ttname"><a href="namespacexb.html#a4a31fbe9110c9e55495ce71e642d785c">xb::xbLog</a></div><div class="ttdeci">class XBDLLEXPORT xbLog</div><div class="ttdef"><b>Definition:</b> xbxbase.h:26</div></div>
+<div class="ttc" id="anamespacexb_html_ab1a750481dd487f0d384aa1d200dff0f"><div class="ttname"><a href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xb::xbBool</a></div><div class="ttdeci">short int xbBool</div><div class="ttdef"><b>Definition:</b> xbtypes.h:24</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbmemo3_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbmemo3_8cpp.html
new file mode 100644
index 0000000..ab331c3
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbmemo3_8cpp.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbmemo3.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbmemo3.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbmemo4_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbmemo4_8cpp.html
new file mode 100644
index 0000000..cc3596b
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbmemo4_8cpp.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbmemo4.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbmemo4.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbmemo_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbmemo_8cpp.html
new file mode 100644
index 0000000..8ff00bd
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbmemo_8cpp.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbmemo.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbmemo.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbmemo_8h.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbmemo_8h.html
new file mode 100644
index 0000000..3aca233
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbmemo_8h.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbmemo.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbmemo.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="xbmemo_8h_source.html">Go to the source code of this file.</a></p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbmemo_8h_source.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbmemo_8h_source.html
new file mode 100644
index 0000000..52c2335
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbmemo_8h_source.html
@@ -0,0 +1,263 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbmemo.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbmemo.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="xbmemo_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbmemo.h</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022 Gary A Kunkel</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">*/</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#ifndef __XB_XBMEMO_H__</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#define __XB_XBMEMO_H__</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="comment">// dont use &quot;#pragma interface&quot; with abstract classes</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="comment">// #ifdef CMAKE_COMPILER_IS_GNUCC</span></div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="comment">// #pragma interface</span></div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="comment">// #endif</span></div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor">#ifdef XB_MEMO_SUPPORT</span></div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="keyword">class </span>XBDLLEXPORT xbMemo : <span class="keyword">public</span> xbFile {</div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> xbMemo( <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *dbf, xbString <span class="keyword">const</span> &amp;sFileName );</div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="comment">/* virtual methods */</span></div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <span class="keyword">virtual</span> ~xbMemo();</div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <span class="keyword">virtual</span> xbInt16 Abort () = 0;</div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="keyword">virtual</span> xbInt16 CloseMemoFile ();</div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="keyword">virtual</span> xbInt16 Commit () = 0;</div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="keyword">virtual</span> xbInt16 CreateMemoFile () = 0;</div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> </div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="keyword">virtual</span> xbInt16 DumpMemoHeader () = 0;</div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> </div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> </div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <span class="keyword">virtual</span> xbInt16 GetMemoField ( xbInt16 iFieldNo, xbString &amp;sMemoData ) = 0;</div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keyword">virtual</span> xbInt16 GetMemoFieldLen ( xbInt16 iFieldNo, xbUInt32 &amp;ulMemoFieldLen ) = 0;</div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="keyword">virtual</span> xbInt16 OpenMemoFile () = 0;</div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <span class="keyword">virtual</span> xbInt16 GetMemoFileType ();</div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="keyword">virtual</span> xbInt16 PackMemo ( <span class="keywordtype">void</span> (*memoStatusFunc)(xbUInt32 ulItemNum, xbUInt32 ulNumItems)) = 0;</div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="keyword">virtual</span> xbInt16 UpdateMemoField ( xbInt16 iFieldNo, <span class="keyword">const</span> xbString &amp;sMemoData ) = 0;</div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keyword">virtual</span> xbInt16 DumpMemoFreeChain() = 0;</div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span><span class="preprocessor"> #ifdef XB_LOCKING_SUPPORT</span></div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <span class="keyword">virtual</span> xbInt16 LockMemo ( xbInt16 iLockFunction );</div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="keyword">virtual</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetMemoLocked () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> </div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> </div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> <span class="comment">// *********** FIXME *************</span></div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <span class="comment">// next two methods should be protected but are called in the xb_test_xxxx programs testing routines</span></div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="comment">// so for now, they are kept as public</span></div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <span class="keyword">virtual</span> xbInt16 CalcLastDataBlock ( xbUInt32 &amp;lLastDataBlock );</div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> <span class="keyword">virtual</span> xbInt16 GetHdrNextBlock ( xbUInt32 &amp;ulBlockNo );</div>
+<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a>;</div>
+<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> </div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <span class="keyword">virtual</span> xbInt16 ReadDbtHeader ( xbInt16 iOption ) = 0;</div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keyword">virtual</span> xbInt16 UpdateHeaderName () = 0;</div>
+<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <span class="keyword">virtual</span> xbInt16 UpdateHeadNextNode();</div>
+<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="keyword">virtual</span> xbInt16 Zap () = 0;</div>
+<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> </div>
+<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *dbf; <span class="comment">/* pointer to related dbf instance */</span></div>
+<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> <span class="keywordtype">char</span> cVersion; <span class="comment">/* byte 16 off the header block, 0x03 for V3, version IV - ? */</span></div>
+<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> xbInt16 iMemoFileType; <span class="comment">/* 3 = version III, 4 = version IV */</span></div>
+<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> xbUInt32 ulHdrNextBlock; <span class="comment">/* next available block , bytes 0-3 of the memo header */</span></div>
+<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <span class="keywordtype">void</span> * mbb; <span class="comment">/* memo block buffer */</span></div>
+<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> </div>
+<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> </div>
+<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span><span class="preprocessor"> #ifdef XB_LOCKING_SUPPORT</span></div>
+<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bFileLocked; <span class="comment">/* memo file locked */</span></div>
+<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> </div>
+<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span>};</div>
+<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> </div>
+<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> </div>
+<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> </div>
+<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span><span class="preprocessor">#ifdef XB_DBF3_SUPPORT</span></div>
+<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> </div>
+<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span><span class="keyword">class </span>XBDLLEXPORT xbMemoDbt3 : <span class="keyword">public</span> xbMemo {</div>
+<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> xbMemoDbt3( <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *dbf, xbString <span class="keyword">const</span> &amp;sFileName );</div>
+<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> ~xbMemoDbt3();</div>
+<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <span class="keyword">virtual</span> xbInt16 Abort ();</div>
+<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keyword">virtual</span> xbInt16 Commit ();</div>
+<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keyword">virtual</span> xbInt16 CreateMemoFile ();</div>
+<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <span class="keyword">virtual</span> xbInt16 DumpMemoHeader ();</div>
+<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="keyword">virtual</span> xbInt16 GetMemoField ( xbInt16 iFieldNo, xbString &amp;sMemoData );</div>
+<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="keyword">virtual</span> xbInt16 GetMemoFieldLen( xbInt16 iFieldNo, xbUInt32 &amp;ulMemoFieldLen );</div>
+<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <span class="keyword">virtual</span> xbInt16 OpenMemoFile ();</div>
+<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> <span class="keyword">virtual</span> xbInt16 PackMemo ( <span class="keywordtype">void</span> (*memoStatusFunc) (xbUInt32 ulItemNum, xbUInt32 ulNumItems));</div>
+<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="keyword">virtual</span> xbInt16 UpdateMemoField( xbInt16 iFieldNo, <span class="keyword">const</span> xbString &amp;sMemoData );</div>
+<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> </div>
+<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
+<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="keyword">virtual</span> xbInt16 DumpMemoFreeChain();</div>
+<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> </div>
+<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="keyword">virtual</span> xbInt16 ReadDbtHeader( xbInt16 iOption );</div>
+<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <span class="keyword">virtual</span> xbInt16 UpdateHeaderName();</div>
+<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="keyword">virtual</span> xbInt16 Zap();</div>
+<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> </div>
+<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span>};</div>
+<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> </div>
+<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> </div>
+<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span><span class="preprocessor">#ifdef XB_DBF4_SUPPORT</span></div>
+<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> </div>
+<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> </div>
+<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span><span class="keyword">class </span>XBDLLEXPORT xbMemoDbt4 : <span class="keyword">public</span> xbMemo {</div>
+<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> xbMemoDbt4( <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *dbf, xbString <span class="keyword">const</span> &amp;sFileName );</div>
+<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> ~xbMemoDbt4();</div>
+<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> <span class="keyword">virtual</span> xbInt16 Abort ();</div>
+<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> <span class="keyword">virtual</span> xbInt16 Commit ();</div>
+<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> <span class="keyword">virtual</span> xbInt16 CreateMemoFile ();</div>
+<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> <span class="keyword">virtual</span> xbInt16 DumpMemoHeader ();</div>
+<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> <span class="keyword">virtual</span> xbInt16 GetMemoField ( xbInt16 iFieldNo, xbString &amp;sMemoData );</div>
+<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <span class="keyword">virtual</span> xbInt16 GetMemoFieldLen ( xbInt16 iFieldNo, xbUInt32 &amp;ulMemoFieldLen );</div>
+<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> <span class="keyword">virtual</span> xbInt16 GetMemoFieldLen ( xbInt16 iFieldNo, xbUInt32 &amp;ulMemoFieldLen, xbUInt32 &amp;lBlockNo );</div>
+<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <span class="keyword">virtual</span> xbInt16 OpenMemoFile ();</div>
+<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <span class="keyword">virtual</span> xbInt16 PackMemo ( <span class="keywordtype">void</span> (*memoStatusFunc) (xbUInt32 ulItemNum, xbUInt32 ulNumItems));</div>
+<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <span class="keyword">virtual</span> xbInt16 UpdateMemoField ( xbInt16 iFieldNo, <span class="keyword">const</span> xbString &amp;sMemoData );</div>
+<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> </div>
+<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
+<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> <span class="keyword">virtual</span> xbInt16 DumpMemoFreeChain ();</div>
+<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> <span class="keyword">virtual</span> xbInt16 DumpMemoInternals ();</div>
+<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> <span class="keyword">virtual</span> xbInt16 ReadFreeBlockHeader( xbUInt32 ulBlockNo, xbUInt32 &amp;ulNextBlock, xbUInt32 &amp;ulFreeBlockCnt );</div>
+<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> </div>
+<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> <span class="keyword">virtual</span> xbInt16 FindBlockSetInChain( xbUInt32 ulBlocksNeeded, xbUInt32 &amp;ulLastDataBlock, xbUInt32 &amp;ulLocation, xbUInt32 &amp;ulPrevNode, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bFound );</div>
+<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> <span class="keyword">virtual</span> xbInt16 FreeMemoBlockChain( xbUInt32 ulBlockNo );</div>
+<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> <span class="keyword">virtual</span> xbInt16 FreeMemoBlockChain( xbUInt32 ulBlockNo, xbUInt32 &amp;ulLastDataBlock );</div>
+<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> <span class="keyword">virtual</span> xbInt16 GetBlockSetFromChain( xbUInt32 ulBlocksNeeded, xbUInt32 ulLocation, xbUInt32 ulPrevNode );</div>
+<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> <span class="keyword">virtual</span> xbInt16 ReadDbtHeader( xbInt16 iOption );</div>
+<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <span class="keyword">virtual</span> xbInt16 ReadBlockHeader( xbUInt32 ulBlockNo, xbInt16 iOption );</div>
+<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> <span class="keyword">virtual</span> xbInt16 UpdateHeaderName ();</div>
+<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> <span class="keyword">virtual</span> xbInt16 WriteBlockHeader( xbUInt32 ulBlockNo, xbInt16 iOption );</div>
+<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> <span class="keyword">virtual</span> xbInt16 Zap();</div>
+<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> </div>
+<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> xbString sDbfFileNameWoExt;</div>
+<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> xbUInt32 ulNextFreeBlock;</div>
+<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> xbUInt32 ulFreeBlockCnt;</div>
+<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> xbInt16 iField1;</div>
+<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> xbInt16 iStartPos;</div>
+<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> xbUInt32 ulFieldLen;</div>
+<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> </div>
+<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> xbLinkList&lt;xbUInt32&gt; llOldBlocks; <span class="comment">// list of previously used memo blocks for field, used by Commit() / Abort()</span></div>
+<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> xbLinkList&lt;xbUInt32&gt; llNewBlocks; <span class="comment">// list of newly updated memo blocks for field, used by Commit() / Abort()</span></div>
+<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> </div>
+<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span>};</div>
+<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> </div>
+<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> </div>
+<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span>} <span class="comment">/* namespace xb */</span></div>
+<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span><span class="preprocessor">#endif </span><span class="comment">/* XB_MEMO_SUPPORT */</span><span class="preprocessor"></span></div>
+<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_MEMO_H__ */</span><span class="preprocessor"></span></div>
+<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> </div>
+<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
+<div class="ttc" id="anamespacexb_html_ab1a750481dd487f0d384aa1d200dff0f"><div class="ttname"><a href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xb::xbBool</a></div><div class="ttdeci">short int xbBool</div><div class="ttdef"><b>Definition:</b> xbtypes.h:24</div></div>
+<div class="ttc" id="anamespacexb_html_ab2eae4b4732466698a7fdd89d77ba53b"><div class="ttname"><a href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xb::xbDbf</a></div><div class="ttdeci">class XBDLLEXPORT xbDbf</div><div class="ttdef"><b>Definition:</b> xbtblmgr.h:28</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbretcod_8h.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbretcod_8h.html
new file mode 100644
index 0000000..baa24b3
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbretcod_8h.html
@@ -0,0 +1,1022 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbretcod.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#namespaces">Namespaces</a> &#124;
+<a href="#define-members">Macros</a> </div>
+ <div class="headertitle"><div class="title">xbretcod.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="xbretcod_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
+Namespaces</h2></td></tr>
+<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ac720d5b4ec45bfd606f5865d40816e23"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a>&#160;&#160;&#160;0</td></tr>
+<tr class="separator:ac720d5b4ec45bfd606f5865d40816e23"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae687fc7d872ba0475a8477e4447f9b54"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#ae687fc7d872ba0475a8477e4447f9b54">XB_NO_MEMORY</a>&#160;&#160;&#160;-100</td></tr>
+<tr class="separator:ae687fc7d872ba0475a8477e4447f9b54"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af1cd0baf346cad686fa4dd11f700012a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#af1cd0baf346cad686fa4dd11f700012a">XB_INVALID_OPTION</a>&#160;&#160;&#160;-101</td></tr>
+<tr class="separator:af1cd0baf346cad686fa4dd11f700012a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1b78533ada854b4185c51ad8a5ce9f02"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a1b78533ada854b4185c51ad8a5ce9f02">XB_INVALID_PARAMETER</a>&#160;&#160;&#160;-102</td></tr>
+<tr class="separator:a1b78533ada854b4185c51ad8a5ce9f02"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac18036408d10e5eee1bf76cf92352b95"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#ac18036408d10e5eee1bf76cf92352b95">XB_DUP_TABLE_OR_ALIAS</a>&#160;&#160;&#160;-110</td></tr>
+<tr class="separator:ac18036408d10e5eee1bf76cf92352b95"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a13e6876470bd34c8c4e5533f115e04eb"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb">XB_INVALID_NODELINK</a>&#160;&#160;&#160;-120</td></tr>
+<tr class="separator:a13e6876470bd34c8c4e5533f115e04eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad60dbb1862c0c1c2dc0464cfbfd93a34"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#ad60dbb1862c0c1c2dc0464cfbfd93a34">XB_KEY_NOT_UNIQUE</a>&#160;&#160;&#160;-121</td></tr>
+<tr class="separator:ad60dbb1862c0c1c2dc0464cfbfd93a34"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa2925f035e3b186d7efa14648ea0e86d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#aa2925f035e3b186d7efa14648ea0e86d">XB_MEMCPY_ERROR</a>&#160;&#160;&#160;-122</td></tr>
+<tr class="separator:aa2925f035e3b186d7efa14648ea0e86d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a54303a9677dbd5342233f33dd08c64d0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a54303a9677dbd5342233f33dd08c64d0">XB_FILE_EXISTS</a>&#160;&#160;&#160;-200</td></tr>
+<tr class="separator:a54303a9677dbd5342233f33dd08c64d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa2ff8301503f446c6a5f6510090e520f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#aa2ff8301503f446c6a5f6510090e520f">XB_ALREADY_OPEN</a>&#160;&#160;&#160;-201</td></tr>
+<tr class="separator:aa2ff8301503f446c6a5f6510090e520f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8104510b347c87998eadd0b27201e3c2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a8104510b347c87998eadd0b27201e3c2">XB_DBF_FILE_NOT_OPEN</a>&#160;&#160;&#160;-202</td></tr>
+<tr class="separator:a8104510b347c87998eadd0b27201e3c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad090af330c93111d12f6de35dbb065bc"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#ad090af330c93111d12f6de35dbb065bc">XB_FILE_NOT_FOUND</a>&#160;&#160;&#160;-203</td></tr>
+<tr class="separator:ad090af330c93111d12f6de35dbb065bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab7b9130a5f1df9975cfeaf6241933596"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#ab7b9130a5f1df9975cfeaf6241933596">XB_FILE_TYPE_NOT_SUPPORTED</a>&#160;&#160;&#160;-204</td></tr>
+<tr class="separator:ab7b9130a5f1df9975cfeaf6241933596"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a373f30b2efcbbab9f6d060fb3fe8cba3"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a373f30b2efcbbab9f6d060fb3fe8cba3">XB_RENAME_ERROR</a>&#160;&#160;&#160;-205</td></tr>
+<tr class="separator:a373f30b2efcbbab9f6d060fb3fe8cba3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a418c047353bc683d0fd6ecbbdd5b7885"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a418c047353bc683d0fd6ecbbdd5b7885">XB_INVALID_OBJECT</a>&#160;&#160;&#160;-206</td></tr>
+<tr class="separator:a418c047353bc683d0fd6ecbbdd5b7885"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9474b400f647bdefbbb07e5177e8d7a1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a9474b400f647bdefbbb07e5177e8d7a1">XB_NOT_OPEN</a>&#160;&#160;&#160;-207</td></tr>
+<tr class="separator:a9474b400f647bdefbbb07e5177e8d7a1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac2606659a54111334f5b02861e533700"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#ac2606659a54111334f5b02861e533700">XB_NOT_FOUND</a>&#160;&#160;&#160;-208</td></tr>
+<tr class="separator:ac2606659a54111334f5b02861e533700"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaab55236993a1d3acb29206252a904c8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#aaab55236993a1d3acb29206252a904c8">XB_OPEN_ERROR</a>&#160;&#160;&#160;-209</td></tr>
+<tr class="separator:aaab55236993a1d3acb29206252a904c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a030684d5541cf6127a76d81b0684b235"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a030684d5541cf6127a76d81b0684b235">XB_CLOSE_ERROR</a>&#160;&#160;&#160;-210</td></tr>
+<tr class="separator:a030684d5541cf6127a76d81b0684b235"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0455ad8719e153b08ec68b10c81e9f41"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a0455ad8719e153b08ec68b10c81e9f41">XB_SEEK_ERROR</a>&#160;&#160;&#160;-211</td></tr>
+<tr class="separator:a0455ad8719e153b08ec68b10c81e9f41"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adbd40585db8bb748d191f94a33bac710"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#adbd40585db8bb748d191f94a33bac710">XB_READ_ERROR</a>&#160;&#160;&#160;-212</td></tr>
+<tr class="separator:adbd40585db8bb748d191f94a33bac710"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aef34ebe6726057f805d6063130280549"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#aef34ebe6726057f805d6063130280549">XB_WRITE_ERROR</a>&#160;&#160;&#160;-213</td></tr>
+<tr class="separator:aef34ebe6726057f805d6063130280549"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8b47031e90c3f86306c7058e4490d3b7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a8b47031e90c3f86306c7058e4490d3b7">XB_EOF</a>&#160;&#160;&#160;-214</td></tr>
+<tr class="separator:a8b47031e90c3f86306c7058e4490d3b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ade5f3a7cf1467d12761e4e21b5e4200f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#ade5f3a7cf1467d12761e4e21b5e4200f">XB_BOF</a>&#160;&#160;&#160;-215</td></tr>
+<tr class="separator:ade5f3a7cf1467d12761e4e21b5e4200f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1bd22921612389c37f6b2eac438c62c5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a1bd22921612389c37f6b2eac438c62c5">XB_INVALID_BLOCK_SIZE</a>&#160;&#160;&#160;-216</td></tr>
+<tr class="separator:a1bd22921612389c37f6b2eac438c62c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4e13b529b486c43ca600ce7d8ddbf3c2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a4e13b529b486c43ca600ce7d8ddbf3c2">XB_INVALID_BLOCK_NO</a>&#160;&#160;&#160;-217</td></tr>
+<tr class="separator:a4e13b529b486c43ca600ce7d8ddbf3c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0fd212f912b2e62700a66bae95bd73a1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a0fd212f912b2e62700a66bae95bd73a1">XB_INVALID_RECORD</a>&#160;&#160;&#160;-218</td></tr>
+<tr class="separator:a0fd212f912b2e62700a66bae95bd73a1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ada15513935d5ede9216f07c0438f34d2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#ada15513935d5ede9216f07c0438f34d2">XB_DELETE_FAILED</a>&#160;&#160;&#160;-219</td></tr>
+<tr class="separator:ada15513935d5ede9216f07c0438f34d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a53891c95a78483704d2a8e14c4499f92"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a53891c95a78483704d2a8e14c4499f92">XB_INVALID_TABLE_NAME</a>&#160;&#160;&#160;-220</td></tr>
+<tr class="separator:a53891c95a78483704d2a8e14c4499f92"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a18068d0cbe0c7a1b4dd3176220180c29"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a18068d0cbe0c7a1b4dd3176220180c29">XB_EMPTY</a>&#160;&#160;&#160;-221</td></tr>
+<tr class="separator:a18068d0cbe0c7a1b4dd3176220180c29"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a59f1a8a6aca19595c2d1804349a24850"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a59f1a8a6aca19595c2d1804349a24850">XB_LIMIT_REACHED</a>&#160;&#160;&#160;-222</td></tr>
+<tr class="separator:a59f1a8a6aca19595c2d1804349a24850"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aae9241d91cfb37f5d236128b3bce0a4a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#aae9241d91cfb37f5d236128b3bce0a4a">XB_BLOCKREAD_NOT_ENABLED</a>&#160;&#160;&#160;-223</td></tr>
+<tr class="separator:aae9241d91cfb37f5d236128b3bce0a4a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af532df74147ce2d872f61abfee49c53e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#af532df74147ce2d872f61abfee49c53e">XB_DIRECTORY_ERROR</a>&#160;&#160;&#160;-224</td></tr>
+<tr class="separator:af532df74147ce2d872f61abfee49c53e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a79e2588f067d6e236c0e5a2c0728ba9f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a79e2588f067d6e236c0e5a2c0728ba9f">XB_INVALID_FIELD_TYPE</a>&#160;&#160;&#160;-300</td></tr>
+<tr class="separator:a79e2588f067d6e236c0e5a2c0728ba9f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a09d6c08a44316f551108a74003efd381"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a09d6c08a44316f551108a74003efd381">XB_INVALID_FIELD_NO</a>&#160;&#160;&#160;-301</td></tr>
+<tr class="separator:a09d6c08a44316f551108a74003efd381"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afb40bbed323ecb369dd430a2e1242f9a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#afb40bbed323ecb369dd430a2e1242f9a">XB_INVALID_DATA</a>&#160;&#160;&#160;-302</td></tr>
+<tr class="separator:afb40bbed323ecb369dd430a2e1242f9a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a59403978784130834cf39434cb73f96e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a59403978784130834cf39434cb73f96e">XB_INVALID_FIELD_NAME</a>&#160;&#160;&#160;-303</td></tr>
+<tr class="separator:a59403978784130834cf39434cb73f96e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a187c50745f51bfe4aa6f70a92f16c59f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a187c50745f51bfe4aa6f70a92f16c59f">XB_INVALID_MEMO_FIELD</a>&#160;&#160;&#160;-304</td></tr>
+<tr class="separator:a187c50745f51bfe4aa6f70a92f16c59f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a34180b2e2bd350ba2ebcdd1335e15d7e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a34180b2e2bd350ba2ebcdd1335e15d7e">XB_INVALID_FIELD</a>&#160;&#160;&#160;-305</td></tr>
+<tr class="separator:a34180b2e2bd350ba2ebcdd1335e15d7e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7bd322c0efbba17f68ccccd6cf624411"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a7bd322c0efbba17f68ccccd6cf624411">XB_INVALID_FIELD_LEN</a>&#160;&#160;&#160;-306</td></tr>
+<tr class="separator:a7bd322c0efbba17f68ccccd6cf624411"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a702475500357a27b8a34463be3e11925"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a702475500357a27b8a34463be3e11925">XB_INVALID_DATE</a>&#160;&#160;&#160;-307</td></tr>
+<tr class="separator:a702475500357a27b8a34463be3e11925"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab45735e63c208eb7e6d6df31fd527aec"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#ab45735e63c208eb7e6d6df31fd527aec">XB_INVALID_LOCK_OPTION</a>&#160;&#160;&#160;-400</td></tr>
+<tr class="separator:ab45735e63c208eb7e6d6df31fd527aec"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a001e24b39e0f155fb1e892f5b1b9cff1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a001e24b39e0f155fb1e892f5b1b9cff1">XB_LOCK_FAILED</a>&#160;&#160;&#160;-401</td></tr>
+<tr class="separator:a001e24b39e0f155fb1e892f5b1b9cff1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af6aaf779fddecca521d785666f6dc56b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#af6aaf779fddecca521d785666f6dc56b">XB_TABLE_NOT_LOCKED</a>&#160;&#160;&#160;-402</td></tr>
+<tr class="separator:af6aaf779fddecca521d785666f6dc56b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aec713cac2b03a0d536a2d16336ae7c0b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#aec713cac2b03a0d536a2d16336ae7c0b">XB_PARSE_ERROR</a>&#160;&#160;&#160;-500</td></tr>
+<tr class="separator:aec713cac2b03a0d536a2d16336ae7c0b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2b7e5e440dbcf5e6dc885b24dbe28742"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a2b7e5e440dbcf5e6dc885b24dbe28742">XB_INVALID_FUNCTION</a>&#160;&#160;&#160;-501</td></tr>
+<tr class="separator:a2b7e5e440dbcf5e6dc885b24dbe28742"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4cedf96581c9cbc9c14d07494143702d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a4cedf96581c9cbc9c14d07494143702d">XB_INVALID_PARM</a>&#160;&#160;&#160;-502</td></tr>
+<tr class="separator:a4cedf96581c9cbc9c14d07494143702d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adc4b24bfffa202f8df25409894e547b9"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#adc4b24bfffa202f8df25409894e547b9">XB_INCONSISTENT_PARM_LENS</a>&#160;&#160;&#160;-503</td></tr>
+<tr class="separator:adc4b24bfffa202f8df25409894e547b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af141ec58b7ca7360e0be6c61d015ea74"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#af141ec58b7ca7360e0be6c61d015ea74">XB_INCOMPATIBLE_OPERANDS</a>&#160;&#160;&#160;-504</td></tr>
+<tr class="separator:af141ec58b7ca7360e0be6c61d015ea74"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aff5646a6b0884ff81004de6961473ea6"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#aff5646a6b0884ff81004de6961473ea6">XB_UNBALANCED_PARENS</a>&#160;&#160;&#160;-505</td></tr>
+<tr class="separator:aff5646a6b0884ff81004de6961473ea6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aedfa20a6c4eb9ba3063ba56be8280eac"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#aedfa20a6c4eb9ba3063ba56be8280eac">XB_UNBALANCED_QUOTES</a>&#160;&#160;&#160;-506</td></tr>
+<tr class="separator:aedfa20a6c4eb9ba3063ba56be8280eac"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a54db562c3cae97581812b4fccd52b71a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a54db562c3cae97581812b4fccd52b71a">XB_INVALID_EXPRESSION</a>&#160;&#160;&#160;-507</td></tr>
+<tr class="separator:a54db562c3cae97581812b4fccd52b71a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aec2c0ac2bd62e0329ef130e4fbda39f8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#aec2c0ac2bd62e0329ef130e4fbda39f8">XB_INVALID_KEYNO</a>&#160;&#160;&#160;-600</td></tr>
+<tr class="separator:aec2c0ac2bd62e0329ef130e4fbda39f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acd175ef0541e2cad424791bd87619dd4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#acd175ef0541e2cad424791bd87619dd4">XB_INVALID_INDEX</a>&#160;&#160;&#160;-601</td></tr>
+<tr class="separator:acd175ef0541e2cad424791bd87619dd4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a176d917912d3433f065483f905a4c50a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a176d917912d3433f065483f905a4c50a">XB_INVALID_TAG</a>&#160;&#160;&#160;-602</td></tr>
+<tr class="separator:a176d917912d3433f065483f905a4c50a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad0aba12b5ae2137f8d6abd28b47f95f0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#ad0aba12b5ae2137f8d6abd28b47f95f0">XB_INVALID_PAGE</a>&#160;&#160;&#160;-603</td></tr>
+<tr class="separator:ad0aba12b5ae2137f8d6abd28b47f95f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5db3a90f215534143bdde81253729c7f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a5db3a90f215534143bdde81253729c7f">XB_SYNTAX_ERROR</a>&#160;&#160;&#160;-700</td></tr>
+<tr class="separator:a5db3a90f215534143bdde81253729c7f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a299419a9c80e000b74bf97a2d24d6a3d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a299419a9c80e000b74bf97a2d24d6a3d">XB_MAX_ERROR_NO</a>&#160;&#160;&#160;-999</td></tr>
+<tr class="separator:a299419a9c80e000b74bf97a2d24d6a3d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a id="aa2ff8301503f446c6a5f6510090e520f" name="aa2ff8301503f446c6a5f6510090e520f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa2ff8301503f446c6a5f6510090e520f">&#9670;&nbsp;</a></span>XB_ALREADY_OPEN</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_ALREADY_OPEN&#160;&#160;&#160;-201</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aae9241d91cfb37f5d236128b3bce0a4a" name="aae9241d91cfb37f5d236128b3bce0a4a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aae9241d91cfb37f5d236128b3bce0a4a">&#9670;&nbsp;</a></span>XB_BLOCKREAD_NOT_ENABLED</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_BLOCKREAD_NOT_ENABLED&#160;&#160;&#160;-223</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ade5f3a7cf1467d12761e4e21b5e4200f" name="ade5f3a7cf1467d12761e4e21b5e4200f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ade5f3a7cf1467d12761e4e21b5e4200f">&#9670;&nbsp;</a></span>XB_BOF</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_BOF&#160;&#160;&#160;-215</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a030684d5541cf6127a76d81b0684b235" name="a030684d5541cf6127a76d81b0684b235"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a030684d5541cf6127a76d81b0684b235">&#9670;&nbsp;</a></span>XB_CLOSE_ERROR</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_CLOSE_ERROR&#160;&#160;&#160;-210</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8104510b347c87998eadd0b27201e3c2" name="a8104510b347c87998eadd0b27201e3c2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8104510b347c87998eadd0b27201e3c2">&#9670;&nbsp;</a></span>XB_DBF_FILE_NOT_OPEN</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_DBF_FILE_NOT_OPEN&#160;&#160;&#160;-202</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ada15513935d5ede9216f07c0438f34d2" name="ada15513935d5ede9216f07c0438f34d2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ada15513935d5ede9216f07c0438f34d2">&#9670;&nbsp;</a></span>XB_DELETE_FAILED</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_DELETE_FAILED&#160;&#160;&#160;-219</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af532df74147ce2d872f61abfee49c53e" name="af532df74147ce2d872f61abfee49c53e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af532df74147ce2d872f61abfee49c53e">&#9670;&nbsp;</a></span>XB_DIRECTORY_ERROR</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_DIRECTORY_ERROR&#160;&#160;&#160;-224</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac18036408d10e5eee1bf76cf92352b95" name="ac18036408d10e5eee1bf76cf92352b95"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac18036408d10e5eee1bf76cf92352b95">&#9670;&nbsp;</a></span>XB_DUP_TABLE_OR_ALIAS</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_DUP_TABLE_OR_ALIAS&#160;&#160;&#160;-110</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a18068d0cbe0c7a1b4dd3176220180c29" name="a18068d0cbe0c7a1b4dd3176220180c29"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a18068d0cbe0c7a1b4dd3176220180c29">&#9670;&nbsp;</a></span>XB_EMPTY</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_EMPTY&#160;&#160;&#160;-221</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8b47031e90c3f86306c7058e4490d3b7" name="a8b47031e90c3f86306c7058e4490d3b7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8b47031e90c3f86306c7058e4490d3b7">&#9670;&nbsp;</a></span>XB_EOF</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_EOF&#160;&#160;&#160;-214</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a54303a9677dbd5342233f33dd08c64d0" name="a54303a9677dbd5342233f33dd08c64d0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a54303a9677dbd5342233f33dd08c64d0">&#9670;&nbsp;</a></span>XB_FILE_EXISTS</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_FILE_EXISTS&#160;&#160;&#160;-200</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad090af330c93111d12f6de35dbb065bc" name="ad090af330c93111d12f6de35dbb065bc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad090af330c93111d12f6de35dbb065bc">&#9670;&nbsp;</a></span>XB_FILE_NOT_FOUND</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_FILE_NOT_FOUND&#160;&#160;&#160;-203</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab7b9130a5f1df9975cfeaf6241933596" name="ab7b9130a5f1df9975cfeaf6241933596"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab7b9130a5f1df9975cfeaf6241933596">&#9670;&nbsp;</a></span>XB_FILE_TYPE_NOT_SUPPORTED</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_FILE_TYPE_NOT_SUPPORTED&#160;&#160;&#160;-204</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af141ec58b7ca7360e0be6c61d015ea74" name="af141ec58b7ca7360e0be6c61d015ea74"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af141ec58b7ca7360e0be6c61d015ea74">&#9670;&nbsp;</a></span>XB_INCOMPATIBLE_OPERANDS</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_INCOMPATIBLE_OPERANDS&#160;&#160;&#160;-504</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="adc4b24bfffa202f8df25409894e547b9" name="adc4b24bfffa202f8df25409894e547b9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adc4b24bfffa202f8df25409894e547b9">&#9670;&nbsp;</a></span>XB_INCONSISTENT_PARM_LENS</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_INCONSISTENT_PARM_LENS&#160;&#160;&#160;-503</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a4e13b529b486c43ca600ce7d8ddbf3c2" name="a4e13b529b486c43ca600ce7d8ddbf3c2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4e13b529b486c43ca600ce7d8ddbf3c2">&#9670;&nbsp;</a></span>XB_INVALID_BLOCK_NO</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_INVALID_BLOCK_NO&#160;&#160;&#160;-217</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1bd22921612389c37f6b2eac438c62c5" name="a1bd22921612389c37f6b2eac438c62c5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1bd22921612389c37f6b2eac438c62c5">&#9670;&nbsp;</a></span>XB_INVALID_BLOCK_SIZE</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_INVALID_BLOCK_SIZE&#160;&#160;&#160;-216</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="afb40bbed323ecb369dd430a2e1242f9a" name="afb40bbed323ecb369dd430a2e1242f9a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afb40bbed323ecb369dd430a2e1242f9a">&#9670;&nbsp;</a></span>XB_INVALID_DATA</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_INVALID_DATA&#160;&#160;&#160;-302</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a702475500357a27b8a34463be3e11925" name="a702475500357a27b8a34463be3e11925"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a702475500357a27b8a34463be3e11925">&#9670;&nbsp;</a></span>XB_INVALID_DATE</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_INVALID_DATE&#160;&#160;&#160;-307</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a54db562c3cae97581812b4fccd52b71a" name="a54db562c3cae97581812b4fccd52b71a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a54db562c3cae97581812b4fccd52b71a">&#9670;&nbsp;</a></span>XB_INVALID_EXPRESSION</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_INVALID_EXPRESSION&#160;&#160;&#160;-507</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a34180b2e2bd350ba2ebcdd1335e15d7e" name="a34180b2e2bd350ba2ebcdd1335e15d7e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a34180b2e2bd350ba2ebcdd1335e15d7e">&#9670;&nbsp;</a></span>XB_INVALID_FIELD</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_INVALID_FIELD&#160;&#160;&#160;-305</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7bd322c0efbba17f68ccccd6cf624411" name="a7bd322c0efbba17f68ccccd6cf624411"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7bd322c0efbba17f68ccccd6cf624411">&#9670;&nbsp;</a></span>XB_INVALID_FIELD_LEN</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_INVALID_FIELD_LEN&#160;&#160;&#160;-306</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a59403978784130834cf39434cb73f96e" name="a59403978784130834cf39434cb73f96e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a59403978784130834cf39434cb73f96e">&#9670;&nbsp;</a></span>XB_INVALID_FIELD_NAME</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_INVALID_FIELD_NAME&#160;&#160;&#160;-303</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a09d6c08a44316f551108a74003efd381" name="a09d6c08a44316f551108a74003efd381"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a09d6c08a44316f551108a74003efd381">&#9670;&nbsp;</a></span>XB_INVALID_FIELD_NO</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_INVALID_FIELD_NO&#160;&#160;&#160;-301</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a79e2588f067d6e236c0e5a2c0728ba9f" name="a79e2588f067d6e236c0e5a2c0728ba9f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a79e2588f067d6e236c0e5a2c0728ba9f">&#9670;&nbsp;</a></span>XB_INVALID_FIELD_TYPE</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_INVALID_FIELD_TYPE&#160;&#160;&#160;-300</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2b7e5e440dbcf5e6dc885b24dbe28742" name="a2b7e5e440dbcf5e6dc885b24dbe28742"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2b7e5e440dbcf5e6dc885b24dbe28742">&#9670;&nbsp;</a></span>XB_INVALID_FUNCTION</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_INVALID_FUNCTION&#160;&#160;&#160;-501</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="acd175ef0541e2cad424791bd87619dd4" name="acd175ef0541e2cad424791bd87619dd4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acd175ef0541e2cad424791bd87619dd4">&#9670;&nbsp;</a></span>XB_INVALID_INDEX</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_INVALID_INDEX&#160;&#160;&#160;-601</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aec2c0ac2bd62e0329ef130e4fbda39f8" name="aec2c0ac2bd62e0329ef130e4fbda39f8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aec2c0ac2bd62e0329ef130e4fbda39f8">&#9670;&nbsp;</a></span>XB_INVALID_KEYNO</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_INVALID_KEYNO&#160;&#160;&#160;-600</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab45735e63c208eb7e6d6df31fd527aec" name="ab45735e63c208eb7e6d6df31fd527aec"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab45735e63c208eb7e6d6df31fd527aec">&#9670;&nbsp;</a></span>XB_INVALID_LOCK_OPTION</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_INVALID_LOCK_OPTION&#160;&#160;&#160;-400</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a187c50745f51bfe4aa6f70a92f16c59f" name="a187c50745f51bfe4aa6f70a92f16c59f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a187c50745f51bfe4aa6f70a92f16c59f">&#9670;&nbsp;</a></span>XB_INVALID_MEMO_FIELD</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_INVALID_MEMO_FIELD&#160;&#160;&#160;-304</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a13e6876470bd34c8c4e5533f115e04eb" name="a13e6876470bd34c8c4e5533f115e04eb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a13e6876470bd34c8c4e5533f115e04eb">&#9670;&nbsp;</a></span>XB_INVALID_NODELINK</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_INVALID_NODELINK&#160;&#160;&#160;-120</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a418c047353bc683d0fd6ecbbdd5b7885" name="a418c047353bc683d0fd6ecbbdd5b7885"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a418c047353bc683d0fd6ecbbdd5b7885">&#9670;&nbsp;</a></span>XB_INVALID_OBJECT</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_INVALID_OBJECT&#160;&#160;&#160;-206</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af1cd0baf346cad686fa4dd11f700012a" name="af1cd0baf346cad686fa4dd11f700012a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af1cd0baf346cad686fa4dd11f700012a">&#9670;&nbsp;</a></span>XB_INVALID_OPTION</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_INVALID_OPTION&#160;&#160;&#160;-101</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad0aba12b5ae2137f8d6abd28b47f95f0" name="ad0aba12b5ae2137f8d6abd28b47f95f0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad0aba12b5ae2137f8d6abd28b47f95f0">&#9670;&nbsp;</a></span>XB_INVALID_PAGE</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_INVALID_PAGE&#160;&#160;&#160;-603</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1b78533ada854b4185c51ad8a5ce9f02" name="a1b78533ada854b4185c51ad8a5ce9f02"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1b78533ada854b4185c51ad8a5ce9f02">&#9670;&nbsp;</a></span>XB_INVALID_PARAMETER</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_INVALID_PARAMETER&#160;&#160;&#160;-102</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a4cedf96581c9cbc9c14d07494143702d" name="a4cedf96581c9cbc9c14d07494143702d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4cedf96581c9cbc9c14d07494143702d">&#9670;&nbsp;</a></span>XB_INVALID_PARM</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_INVALID_PARM&#160;&#160;&#160;-502</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0fd212f912b2e62700a66bae95bd73a1" name="a0fd212f912b2e62700a66bae95bd73a1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0fd212f912b2e62700a66bae95bd73a1">&#9670;&nbsp;</a></span>XB_INVALID_RECORD</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_INVALID_RECORD&#160;&#160;&#160;-218</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a53891c95a78483704d2a8e14c4499f92" name="a53891c95a78483704d2a8e14c4499f92"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a53891c95a78483704d2a8e14c4499f92">&#9670;&nbsp;</a></span>XB_INVALID_TABLE_NAME</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_INVALID_TABLE_NAME&#160;&#160;&#160;-220</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a176d917912d3433f065483f905a4c50a" name="a176d917912d3433f065483f905a4c50a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a176d917912d3433f065483f905a4c50a">&#9670;&nbsp;</a></span>XB_INVALID_TAG</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_INVALID_TAG&#160;&#160;&#160;-602</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad60dbb1862c0c1c2dc0464cfbfd93a34" name="ad60dbb1862c0c1c2dc0464cfbfd93a34"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad60dbb1862c0c1c2dc0464cfbfd93a34">&#9670;&nbsp;</a></span>XB_KEY_NOT_UNIQUE</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_KEY_NOT_UNIQUE&#160;&#160;&#160;-121</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a59f1a8a6aca19595c2d1804349a24850" name="a59f1a8a6aca19595c2d1804349a24850"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a59f1a8a6aca19595c2d1804349a24850">&#9670;&nbsp;</a></span>XB_LIMIT_REACHED</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_LIMIT_REACHED&#160;&#160;&#160;-222</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a001e24b39e0f155fb1e892f5b1b9cff1" name="a001e24b39e0f155fb1e892f5b1b9cff1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a001e24b39e0f155fb1e892f5b1b9cff1">&#9670;&nbsp;</a></span>XB_LOCK_FAILED</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_LOCK_FAILED&#160;&#160;&#160;-401</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a299419a9c80e000b74bf97a2d24d6a3d" name="a299419a9c80e000b74bf97a2d24d6a3d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a299419a9c80e000b74bf97a2d24d6a3d">&#9670;&nbsp;</a></span>XB_MAX_ERROR_NO</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_MAX_ERROR_NO&#160;&#160;&#160;-999</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa2925f035e3b186d7efa14648ea0e86d" name="aa2925f035e3b186d7efa14648ea0e86d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa2925f035e3b186d7efa14648ea0e86d">&#9670;&nbsp;</a></span>XB_MEMCPY_ERROR</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_MEMCPY_ERROR&#160;&#160;&#160;-122</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac720d5b4ec45bfd606f5865d40816e23" name="ac720d5b4ec45bfd606f5865d40816e23"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac720d5b4ec45bfd606f5865d40816e23">&#9670;&nbsp;</a></span>XB_NO_ERROR</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_NO_ERROR&#160;&#160;&#160;0</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae687fc7d872ba0475a8477e4447f9b54" name="ae687fc7d872ba0475a8477e4447f9b54"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae687fc7d872ba0475a8477e4447f9b54">&#9670;&nbsp;</a></span>XB_NO_MEMORY</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_NO_MEMORY&#160;&#160;&#160;-100</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac2606659a54111334f5b02861e533700" name="ac2606659a54111334f5b02861e533700"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac2606659a54111334f5b02861e533700">&#9670;&nbsp;</a></span>XB_NOT_FOUND</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_NOT_FOUND&#160;&#160;&#160;-208</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9474b400f647bdefbbb07e5177e8d7a1" name="a9474b400f647bdefbbb07e5177e8d7a1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9474b400f647bdefbbb07e5177e8d7a1">&#9670;&nbsp;</a></span>XB_NOT_OPEN</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_NOT_OPEN&#160;&#160;&#160;-207</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aaab55236993a1d3acb29206252a904c8" name="aaab55236993a1d3acb29206252a904c8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaab55236993a1d3acb29206252a904c8">&#9670;&nbsp;</a></span>XB_OPEN_ERROR</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_OPEN_ERROR&#160;&#160;&#160;-209</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aec713cac2b03a0d536a2d16336ae7c0b" name="aec713cac2b03a0d536a2d16336ae7c0b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aec713cac2b03a0d536a2d16336ae7c0b">&#9670;&nbsp;</a></span>XB_PARSE_ERROR</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_PARSE_ERROR&#160;&#160;&#160;-500</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="adbd40585db8bb748d191f94a33bac710" name="adbd40585db8bb748d191f94a33bac710"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adbd40585db8bb748d191f94a33bac710">&#9670;&nbsp;</a></span>XB_READ_ERROR</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_READ_ERROR&#160;&#160;&#160;-212</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a373f30b2efcbbab9f6d060fb3fe8cba3" name="a373f30b2efcbbab9f6d060fb3fe8cba3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a373f30b2efcbbab9f6d060fb3fe8cba3">&#9670;&nbsp;</a></span>XB_RENAME_ERROR</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_RENAME_ERROR&#160;&#160;&#160;-205</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0455ad8719e153b08ec68b10c81e9f41" name="a0455ad8719e153b08ec68b10c81e9f41"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0455ad8719e153b08ec68b10c81e9f41">&#9670;&nbsp;</a></span>XB_SEEK_ERROR</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_SEEK_ERROR&#160;&#160;&#160;-211</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5db3a90f215534143bdde81253729c7f" name="a5db3a90f215534143bdde81253729c7f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5db3a90f215534143bdde81253729c7f">&#9670;&nbsp;</a></span>XB_SYNTAX_ERROR</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_SYNTAX_ERROR&#160;&#160;&#160;-700</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af6aaf779fddecca521d785666f6dc56b" name="af6aaf779fddecca521d785666f6dc56b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af6aaf779fddecca521d785666f6dc56b">&#9670;&nbsp;</a></span>XB_TABLE_NOT_LOCKED</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_TABLE_NOT_LOCKED&#160;&#160;&#160;-402</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aff5646a6b0884ff81004de6961473ea6" name="aff5646a6b0884ff81004de6961473ea6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aff5646a6b0884ff81004de6961473ea6">&#9670;&nbsp;</a></span>XB_UNBALANCED_PARENS</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_UNBALANCED_PARENS&#160;&#160;&#160;-505</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aedfa20a6c4eb9ba3063ba56be8280eac" name="aedfa20a6c4eb9ba3063ba56be8280eac"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aedfa20a6c4eb9ba3063ba56be8280eac">&#9670;&nbsp;</a></span>XB_UNBALANCED_QUOTES</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_UNBALANCED_QUOTES&#160;&#160;&#160;-506</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aef34ebe6726057f805d6063130280549" name="aef34ebe6726057f805d6063130280549"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aef34ebe6726057f805d6063130280549">&#9670;&nbsp;</a></span>XB_WRITE_ERROR</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_WRITE_ERROR&#160;&#160;&#160;-213</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbretcod_8h_source.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbretcod_8h_source.html
new file mode 100644
index 0000000..182f78a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbretcod_8h_source.html
@@ -0,0 +1,178 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbretcod.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbretcod.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="xbretcod_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbretcod.h</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">*/</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#ifndef __XB_RETCODES_H__</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#define __XB_RETCODES_H__</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="comment">/***********************************************/</span></div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="comment">/* Return Codes and Error Messages */</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23"> 24</a></span><span class="preprocessor"> #define XB_NO_ERROR 0 </span><span class="comment">// general</span></div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ae687fc7d872ba0475a8477e4447f9b54"> 25</a></span><span class="preprocessor"> #define XB_NO_MEMORY -100 </span><span class="comment">// general</span></div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#af1cd0baf346cad686fa4dd11f700012a"> 26</a></span><span class="preprocessor"> #define XB_INVALID_OPTION -101 </span><span class="comment">// general</span></div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a1b78533ada854b4185c51ad8a5ce9f02"> 27</a></span><span class="preprocessor"> #define XB_INVALID_PARAMETER -102 </span><span class="comment">// general</span></div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ac18036408d10e5eee1bf76cf92352b95"> 28</a></span><span class="preprocessor"> #define XB_DUP_TABLE_OR_ALIAS -110 </span><span class="comment">// table manager</span></div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb"> 29</a></span><span class="preprocessor"> #define XB_INVALID_NODELINK -120 </span><span class="comment">// linklist</span></div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ad60dbb1862c0c1c2dc0464cfbfd93a34"> 30</a></span><span class="preprocessor"> #define XB_KEY_NOT_UNIQUE -121 </span><span class="comment">// linklist, index</span></div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#aa2925f035e3b186d7efa14648ea0e86d"> 31</a></span><span class="preprocessor"> #define XB_MEMCPY_ERROR -122 </span><span class="comment">// memcpy failure</span></div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a54303a9677dbd5342233f33dd08c64d0"> 33</a></span><span class="preprocessor"> #define XB_FILE_EXISTS -200 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#aa2ff8301503f446c6a5f6510090e520f"> 34</a></span><span class="preprocessor"> #define XB_ALREADY_OPEN -201 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a8104510b347c87998eadd0b27201e3c2"> 35</a></span><span class="preprocessor"> #define XB_DBF_FILE_NOT_OPEN -202 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ad090af330c93111d12f6de35dbb065bc"> 36</a></span><span class="preprocessor"> #define XB_FILE_NOT_FOUND -203 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ab7b9130a5f1df9975cfeaf6241933596"> 37</a></span><span class="preprocessor"> #define XB_FILE_TYPE_NOT_SUPPORTED -204 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a373f30b2efcbbab9f6d060fb3fe8cba3"> 38</a></span><span class="preprocessor"> #define XB_RENAME_ERROR -205 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a418c047353bc683d0fd6ecbbdd5b7885"> 39</a></span><span class="preprocessor"> #define XB_INVALID_OBJECT -206 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a9474b400f647bdefbbb07e5177e8d7a1"> 40</a></span><span class="preprocessor"> #define XB_NOT_OPEN -207 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ac2606659a54111334f5b02861e533700"> 41</a></span><span class="preprocessor"> #define XB_NOT_FOUND -208 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#aaab55236993a1d3acb29206252a904c8"> 42</a></span><span class="preprocessor"> #define XB_OPEN_ERROR -209 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a030684d5541cf6127a76d81b0684b235"> 43</a></span><span class="preprocessor"> #define XB_CLOSE_ERROR -210 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a0455ad8719e153b08ec68b10c81e9f41"> 44</a></span><span class="preprocessor"> #define XB_SEEK_ERROR -211 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#adbd40585db8bb748d191f94a33bac710"> 45</a></span><span class="preprocessor"> #define XB_READ_ERROR -212 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#aef34ebe6726057f805d6063130280549"> 46</a></span><span class="preprocessor"> #define XB_WRITE_ERROR -213 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a8b47031e90c3f86306c7058e4490d3b7"> 47</a></span><span class="preprocessor"> #define XB_EOF -214 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ade5f3a7cf1467d12761e4e21b5e4200f"> 48</a></span><span class="preprocessor"> #define XB_BOF -215 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a1bd22921612389c37f6b2eac438c62c5"> 49</a></span><span class="preprocessor"> #define XB_INVALID_BLOCK_SIZE -216 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a4e13b529b486c43ca600ce7d8ddbf3c2"> 50</a></span><span class="preprocessor"> #define XB_INVALID_BLOCK_NO -217 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a0fd212f912b2e62700a66bae95bd73a1"> 51</a></span><span class="preprocessor"> #define XB_INVALID_RECORD -218 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ada15513935d5ede9216f07c0438f34d2"> 52</a></span><span class="preprocessor"> #define XB_DELETE_FAILED -219 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a53891c95a78483704d2a8e14c4499f92"> 53</a></span><span class="preprocessor"> #define XB_INVALID_TABLE_NAME -220 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a18068d0cbe0c7a1b4dd3176220180c29"> 54</a></span><span class="preprocessor"> #define XB_EMPTY -221 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a59f1a8a6aca19595c2d1804349a24850"> 55</a></span><span class="preprocessor"> #define XB_LIMIT_REACHED -222 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#aae9241d91cfb37f5d236128b3bce0a4a"> 56</a></span><span class="preprocessor"> #define XB_BLOCKREAD_NOT_ENABLED -223 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#af532df74147ce2d872f61abfee49c53e"> 57</a></span><span class="preprocessor"> #define XB_DIRECTORY_ERROR -224 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> </div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a79e2588f067d6e236c0e5a2c0728ba9f"> 59</a></span><span class="preprocessor"> #define XB_INVALID_FIELD_TYPE -300 </span><span class="comment">// field</span></div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a09d6c08a44316f551108a74003efd381"> 60</a></span><span class="preprocessor"> #define XB_INVALID_FIELD_NO -301 </span><span class="comment">// field</span></div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#afb40bbed323ecb369dd430a2e1242f9a"> 61</a></span><span class="preprocessor"> #define XB_INVALID_DATA -302 </span><span class="comment">// field</span></div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a59403978784130834cf39434cb73f96e"> 62</a></span><span class="preprocessor"> #define XB_INVALID_FIELD_NAME -303 </span><span class="comment">// field</span></div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a187c50745f51bfe4aa6f70a92f16c59f"> 63</a></span><span class="preprocessor"> #define XB_INVALID_MEMO_FIELD -304 </span><span class="comment">// field</span></div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a34180b2e2bd350ba2ebcdd1335e15d7e"> 64</a></span><span class="preprocessor"> #define XB_INVALID_FIELD -305 </span><span class="comment">// field</span></div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a7bd322c0efbba17f68ccccd6cf624411"> 65</a></span><span class="preprocessor"> #define XB_INVALID_FIELD_LEN -306 </span><span class="comment">// field</span></div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a702475500357a27b8a34463be3e11925"> 66</a></span><span class="preprocessor"> #define XB_INVALID_DATE -307 </span><span class="comment">// date field</span></div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ab45735e63c208eb7e6d6df31fd527aec"> 68</a></span><span class="preprocessor"> #define XB_INVALID_LOCK_OPTION -400 </span><span class="comment">// lock</span></div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a001e24b39e0f155fb1e892f5b1b9cff1"> 69</a></span><span class="preprocessor"> #define XB_LOCK_FAILED -401 </span><span class="comment">// lock</span></div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#af6aaf779fddecca521d785666f6dc56b"> 70</a></span><span class="preprocessor"> #define XB_TABLE_NOT_LOCKED -402 </span><span class="comment">// lock - need table locked for operation</span></div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#aec713cac2b03a0d536a2d16336ae7c0b"> 72</a></span><span class="preprocessor"> #define XB_PARSE_ERROR -500 </span><span class="comment">// expression</span></div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a2b7e5e440dbcf5e6dc885b24dbe28742"> 73</a></span><span class="preprocessor"> #define XB_INVALID_FUNCTION -501 </span><span class="comment">// expression</span></div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a4cedf96581c9cbc9c14d07494143702d"> 74</a></span><span class="preprocessor"> #define XB_INVALID_PARM -502 </span><span class="comment">// expression</span></div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#adc4b24bfffa202f8df25409894e547b9"> 75</a></span><span class="preprocessor"> #define XB_INCONSISTENT_PARM_LENS -503 </span><span class="comment">// expression</span></div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#af141ec58b7ca7360e0be6c61d015ea74"> 76</a></span><span class="preprocessor"> #define XB_INCOMPATIBLE_OPERANDS -504 </span><span class="comment">// expression</span></div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#aff5646a6b0884ff81004de6961473ea6"> 77</a></span><span class="preprocessor"> #define XB_UNBALANCED_PARENS -505 </span><span class="comment">// expression</span></div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#aedfa20a6c4eb9ba3063ba56be8280eac"> 78</a></span><span class="preprocessor"> #define XB_UNBALANCED_QUOTES -506 </span><span class="comment">// expression</span></div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a54db562c3cae97581812b4fccd52b71a"> 79</a></span><span class="preprocessor"> #define XB_INVALID_EXPRESSION -507 </span><span class="comment">// expression</span></div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#aec2c0ac2bd62e0329ef130e4fbda39f8"> 81</a></span><span class="preprocessor"> #define XB_INVALID_KEYNO -600 </span><span class="comment">// index</span></div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#acd175ef0541e2cad424791bd87619dd4"> 82</a></span><span class="preprocessor"> #define XB_INVALID_INDEX -601 </span><span class="comment">// index file error</span></div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a176d917912d3433f065483f905a4c50a"> 83</a></span><span class="preprocessor"> #define XB_INVALID_TAG -602 </span><span class="comment">// invalid index tag name, must be &lt;= 10 bytes</span></div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ad0aba12b5ae2137f8d6abd28b47f95f0"> 84</a></span><span class="preprocessor"> #define XB_INVALID_PAGE -603 </span><span class="comment">// invalid index page</span></div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> </div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a5db3a90f215534143bdde81253729c7f"> 87</a></span><span class="preprocessor"> #define XB_SYNTAX_ERROR -700 </span><span class="comment">// sql syntax error</span></div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> </div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a299419a9c80e000b74bf97a2d24d6a3d"> 90</a></span><span class="preprocessor"> #define XB_MAX_ERROR_NO -999</span></div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> </div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> </div>
+<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span><span class="comment">/* when updating this table, also need to update messages in xbssv.cpp */</span></div>
+<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> </div>
+<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span>} <span class="comment">/* namespace */</span></div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_RETCODES_H__ */</span><span class="preprocessor"></span></div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> </div>
+<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbselect_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbselect_8cpp.html
new file mode 100644
index 0000000..c5bb12f
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbselect_8cpp.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/sql/xbselect.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_25b94c3afce00ed38231227d8141f932.html">sql</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbselect.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbset_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbset_8cpp.html
new file mode 100644
index 0000000..39420f4
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbset_8cpp.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/sql/xbset.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_25b94c3afce00ed38231227d8141f932.html">sql</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbset.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbsql_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbsql_8cpp.html
new file mode 100644
index 0000000..bd491a0
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbsql_8cpp.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/sql/xbsql.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_25b94c3afce00ed38231227d8141f932.html">sql</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbsql.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbsql_8h.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbsql_8h.html
new file mode 100644
index 0000000..527128d
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbsql_8h.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbsql.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbsql.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="xbsql_8h_source.html">Go to the source code of this file.</a></p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbsql_8h_source.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbsql_8h_source.html
new file mode 100644
index 0000000..a49c0a5
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbsql_8h_source.html
@@ -0,0 +1,243 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbsql.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbsql.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="xbsql_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbsql.h</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022 Gary A Kunkel</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">This class manages a list of open tables, open indices are connected to the open tables</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"></span> </div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment">*/</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> </div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#ifndef __XB_XBSQL_H__</span></div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#define __XB_XBSQL_H__</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="preprocessor">#ifdef CMAKE_COMPILER_IS_GNUCC</span></div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#pragma interface</span></div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="preprocessor">#ifdef XB_SQL_SUPPORT</span></div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="keyword">struct </span>XBDLLEXPORT xbSqlFld{</div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <span class="keywordtype">char</span> cType; <span class="comment">// F - Database field</span></div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> <span class="comment">// L - Literal</span></div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> <span class="comment">// E - Expression</span></div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> xbInt16 iFldNo; <span class="comment">// Field number if db field</span></div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> xbExp * pExp; <span class="comment">// If cType=E, pointer to parsed expression</span></div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> xbString sFldAlias; <span class="comment">// Alias name for query display</span></div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> xbSqlFld * Next; <span class="comment">// Next field in list</span></div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span>};</div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> </div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="keyword">class </span>xbStmt;</div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="keyword">struct </span>XBDLLEXPORT xbTblJoin { <span class="comment">// structure for defining joined tables in the query</span></div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> </div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> xbString sTableName;</div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> xbString sAlias;</div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> xbString sJoinExp; <span class="comment">// table join expression</span></div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *pDbf; <span class="comment">// pointer the the dbf structure for this table</span></div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> xbTag *pTag; <span class="comment">// pointer to relevant tag for this table, null for record order</span></div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> xbExp *pLinkExp; <span class="comment">// pointer to parsed linkage expression</span></div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <span class="keywordtype">char</span> cJoinType; <span class="comment">// M - Master</span></div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> <span class="comment">// L - Left or Full Left</span></div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="comment">// R - Right or Full Right</span></div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="comment">// I - Inner</span></div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <span class="comment">// O - Outer or Full Outer Outer</span></div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> </div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> xbTblJoin *pMaster; <span class="comment">// pointer to master table, null if this is the primary master</span></div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> xbLinkList&lt;xbTblJoin *&gt; llSubList; <span class="comment">// linked list of subordinate tables</span></div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span><span class="comment">// xbStmt *pSubQuery; // pointer to sub query</span></div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> xbTblJoin *next; <span class="comment">// next tbl</span></div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span>};</div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span><span class="keyword">class </span>XBDLLEXPORT xbStmt : <span class="keyword">public</span> xbSsv{</div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> xbStmt( <a class="code hl_variable" href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xbXBase</a> *x );</div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> ~xbStmt();</div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> xbInt16 DumpStmtInternals();</div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> xbInt16 Test();</div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> xbInt16 ExecuteQuery( <span class="keyword">const</span> xbString &amp;sCmdLine ); </div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span><span class="comment">// xbInt16 FetchFirst();</span></div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span><span class="comment">// xbInt16 FetchNext();</span></div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span><span class="comment">// xbInt16 FetchPrev();</span></div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span><span class="comment">// xbInt16 FetchLast();</span></div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span><span class="comment">// xbString &amp;GetField( const xbString sFldName );</span></div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> </div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> xbInt16 AddQryTbl( <span class="keyword">const</span> xbString &amp;sTable, <span class="keyword">const</span> xbString &amp;sAlias, <span class="keyword">const</span> xbString &amp;sExpression, <span class="keyword">const</span> <span class="keywordtype">char</span> cJoinType );</div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> xbInt16 CvtSqlExp2DbaseExp( <span class="keyword">const</span> xbString &amp;sExpIn, xbString &amp;sExpOut );</div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> xbInt16 GetNextFromSeg( <span class="keyword">const</span> xbString &amp;sLineIn, xbString &amp;sFromSegOut );</div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> xbUInt32 GetNextToken( <span class="keyword">const</span> xbString &amp;sCmdLineIn, xbString &amp;sTokenOut, xbUInt32 ulStartPos );</div>
+<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> xbInt16 GetParenCnt( <span class="keyword">const</span> xbString &amp;sToken );</div>
+<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> xbInt16 ParseFromStmt( <span class="keyword">const</span> xbString &amp;sFromLine );</div>
+<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> xbInt16 ParseStmt( <span class="keyword">const</span> xbString &amp;sCmdLine );</div>
+<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> xbInt16 ProcessFromSeg( <span class="keyword">const</span> xbString &amp;sFromStmtSeg );</div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> xbInt16 UpdateJoinList( <span class="keywordtype">char</span> cType, <span class="keyword">const</span> xbString &amp;sTableName, <span class="keyword">const</span> xbString &amp;sAlias, <span class="keyword">const</span> xbString &amp;sExp, <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *d, xbExp *e ); <span class="comment">//, xbTag *t);</span></div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> </div>
+<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <a class="code hl_variable" href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xbXBase</a> *xbase; <span class="comment">// pointer to xbase structure</span></div>
+<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> </div>
+<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> </div>
+<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> xbTblJoin * pTblList;</div>
+<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> xbSqlFld *fl; <span class="comment">// field list in sql select statement</span></div>
+<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> xbString sStmt; <span class="comment">// complete query statment</span></div>
+<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> xbString sFields; <span class="comment">// list of fields</span></div>
+<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> xbString sFrom; <span class="comment">// from statment</span></div>
+<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> xbString sWhere; <span class="comment">// where clause</span></div>
+<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> xbString sOrderBy; <span class="comment">// sort order</span></div>
+<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> xbString sGroupBy; <span class="comment">// group by</span></div>
+<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> xbString sHaving; <span class="comment">// having</span></div>
+<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> xbUInt32 ulFromPos;</div>
+<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> xbUInt32 ulWherePos;</div>
+<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> xbUInt32 ulOrderByPos;</div>
+<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> xbUInt32 ulGroupByPos;</div>
+<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> xbUInt32 ulHavingPos;</div>
+<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> </div>
+<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> </div>
+<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span>};</div>
+<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> </div>
+<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> </div>
+<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span><span class="keyword">class </span>XBDLLEXPORT xbSql : <span class="keyword">public</span> xbSsv {</div>
+<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <span class="comment">// xbSql();</span></div>
+<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> xbSql( <a class="code hl_variable" href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xbXBase</a> *x );</div>
+<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> ~xbSql();</div>
+<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> </div>
+<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> xbInt16 ExecuteNonQuery( <span class="keyword">const</span> xbString &amp;sCmdLine );</div>
+<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <a class="code hl_variable" href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xbXBase</a> *GetXbasePtr() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> </div>
+<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> </div>
+<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> </div>
+<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> xbInt16 SqlAlterTable( <span class="keyword">const</span> xbString &amp;sCmdLine );</div>
+<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> xbInt16 SqlCreateTable( <span class="keyword">const</span> xbString &amp;sCmdLine );</div>
+<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> xbInt16 SqlDelete( <span class="keyword">const</span> xbString &amp;sCmdLine );</div>
+<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> xbInt16 SqlDropTable( <span class="keyword">const</span> xbString &amp;sCmdLine );</div>
+<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> </div>
+<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span><span class="preprocessor"> #ifdef XB_INDEX_SUPPORT</span></div>
+<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> xbInt16 SqlCreateIndex( <span class="keyword">const</span> xbString &amp;sCmdLine );</div>
+<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> xbInt16 SqlDropIndex( <span class="keyword">const</span> xbString &amp;sCmdLine );</div>
+<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INDEX_SUPPORT</span></div>
+<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> </div>
+<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span><span class="comment">// xbInt16 SqlCreateView( const xbString &amp;sCmdLine );</span></div>
+<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span><span class="comment">// xbInt16 SqlDropView( const xbString &amp;sCmdLine );</span></div>
+<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span><span class="comment">// xbInt16 SqlUpdate( const xbString &amp;sCmdLine );</span></div>
+<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span><span class="comment">// xbInt16 SqlSelect( const xbString &amp;sCmdLine );</span></div>
+<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> </div>
+<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="keywordtype">void</span> SqlHelp() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> xbInt16 SqlInsert( <span class="keyword">const</span> xbString &amp;sCmLine );</div>
+<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> xbInt16 SqlSet( <span class="keyword">const</span> xbString &amp;sCmdLine );</div>
+<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> xbInt16 SqlUse( <span class="keyword">const</span> xbString &amp;sCmdLine );</div>
+<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> </div>
+<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <a class="code hl_variable" href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xbXBase</a> *xbase;</div>
+<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> xbUda uda;</div>
+<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> </div>
+<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span>};</div>
+<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> </div>
+<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span>} <span class="comment">/* namespace xb */</span></div>
+<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span><span class="preprocessor">#endif </span><span class="comment">/* XB_SQL_SUPPORT */</span><span class="preprocessor"></span></div>
+<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_XBSQL_H__ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
+<div class="ttc" id="anamespacexb_html_a97858ddeb1c4b0100f3edc1a46d3a8b0"><div class="ttname"><a href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xb::xbXBase</a></div><div class="ttdeci">class XBDLLEXPORT xbXBase</div><div class="ttdef"><b>Definition:</b> xbssv.h:27</div></div>
+<div class="ttc" id="anamespacexb_html_ab2eae4b4732466698a7fdd89d77ba53b"><div class="ttname"><a href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xb::xbDbf</a></div><div class="ttdeci">class XBDLLEXPORT xbDbf</div><div class="ttdef"><b>Definition:</b> xbtblmgr.h:28</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbssv_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbssv_8cpp.html
new file mode 100644
index 0000000..aeda0bc
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbssv_8cpp.html
@@ -0,0 +1,94 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbssv.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#namespaces">Namespaces</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle"><div class="title">xbssv.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
+Namespaces</h2></td></tr>
+<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="var-members" name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:a04be228a037d220dd5564f5ef618adcc"><td class="memItemLeft" align="right" valign="top">const xbErrorMessage&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html#a04be228a037d220dd5564f5ef618adcc">xb::xbErrorMessages</a> []</td></tr>
+<tr class="separator:a04be228a037d220dd5564f5ef618adcc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbssv_8h.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbssv_8h.html
new file mode 100644
index 0000000..3d47c42
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbssv_8h.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbssv.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#namespaces">Namespaces</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle"><div class="title">xbssv.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="xbssv_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html">xb::xbSsv</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Class for handling shared system variables. <a href="classxb_1_1xbSsv.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
+Namespaces</h2></td></tr>
+<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="var-members" name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:a97858ddeb1c4b0100f3edc1a46d3a8b0"><td class="memItemLeft" align="right" valign="top">class XBDLLEXPORT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xb::xbXBase</a></td></tr>
+<tr class="separator:a97858ddeb1c4b0100f3edc1a46d3a8b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbssv_8h_source.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbssv_8h_source.html
new file mode 100644
index 0000000..4cc8c82
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbssv_8h_source.html
@@ -0,0 +1,267 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbssv.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbssv.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="xbssv_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbssv.h</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">*/</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#ifndef __XB_XBSSV_H__</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#define __XB_XBSSV_H__</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifdef CMAKE_COMPILER_IS_GNUCC</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#pragma interface</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"><a class="line" href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0"> 27</a></span><span class="keyword">class </span>XBDLLEXPORT <a class="code hl_class" href="classxb_1_1xbXBase.html">xbXBase</a>;</div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="keyword">struct </span>XBDLLEXPORT xbErrorMessage{</div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> xbInt16 iErrorNo;</div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *sErrorText;</div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span>};</div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="comment">// By design, DBase allows mutliple records in a table all having the same key, but only one entry in a unique index</span></div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="comment">// XB_HALT_ON_DUP_KEY tells the library to not allow appending records which generate duplicate keys in a unique index</span></div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span><span class="comment">//</span></div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><span class="preprocessor">#if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)</span></div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span><span class="preprocessor">#define XB_HALT_ON_DUPKEY 0</span></div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span><span class="preprocessor">#define XB_EMULATE_DBASE 1</span></div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> </div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> </div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"><a class="line" href="classxb_1_1xbSsv.html"> 59</a></span><span class="keyword">class </span>XBDLLEXPORT <a class="code hl_class" href="classxb_1_1xbSsv.html">xbSsv</a>{</div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <a class="code hl_class" href="classxb_1_1xbSsv.html">xbSsv</a>();</div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"><a class="line" href="classxb_1_1xbSsv.html#a6219f1b5e24ea12fe158cd5aea56988e"> 62</a></span> <span class="keyword">const</span> <span class="keyword">static</span> <span class="keywordtype">char</span> *ErrorCodeText[];</div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> </div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="keywordtype">void</span> DisplayError ( xbInt16 ErrorCode ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; GetDefaultDateFormat () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; GetDataDirectory () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; GetTempDirectory () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> </div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <span class="keywordtype">void</span> GetHomeDir ( <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sHomeDirOut );</div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> </div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> xbInt16 GetEndianType () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *GetErrorMessage ( xbInt16 ErrorCode ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="keywordtype">char</span> GetPathSeparator () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> </div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keywordtype">void</span> SetDataDirectory ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sDataDirectory );</div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keywordtype">void</span> SetDefaultDateFormat ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sDefaultDateFormat );</div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keywordtype">void</span> SetTempDirectory ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTempDirectory );</div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> </div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> BitSet ( <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c, xbInt16 iBitNo ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <span class="keywordtype">void</span> BitDump ( <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="keywordtype">void</span> BitDump ( <span class="keywordtype">char</span> c ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> </div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetDefaultAutoCommit () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <span class="keywordtype">void</span> SetDefaultAutoCommit ( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bDefaultAutoCommit );</div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> </div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; GetLogDirectory () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; GetLogFileName () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="keywordtype">void</span> SetLogDirectory ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sLogDirectory );</div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <span class="keywordtype">void</span> SetLogFileName ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sLogFileName );</div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> </div>
+<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetMultiUser () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="keywordtype">void</span> SetMultiUser ( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bMultiUser );</div>
+<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> </div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span><span class="preprocessor"> #if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)</span></div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> xbInt16 GetUniqueKeyOpt () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> xbInt16 SetUniqueKeyOpt ( xbInt16 iUniqueKeyOpt );</div>
+<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span><span class="preprocessor"> #endif </span><span class="comment">// (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)</span></div>
+<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> </div>
+<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span><span class="preprocessor"> #ifdef XB_LOCKING_SUPPORT</span></div>
+<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> xbInt16 GetDefaultLockRetries () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="keywordtype">void</span> SetDefaultLockRetries ( xbInt16 iRetryCount );</div>
+<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> xbInt32 GetDefaultLockWait () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <span class="keywordtype">void</span> SetDefaultLockWait ( xbInt32 lRetryWait );</div>
+<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> xbInt16 GetDefaultLockFlavor () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="keywordtype">void</span> SetDefaultLockFlavor ( xbInt16 iLockFlavor );</div>
+<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetDefaultAutoLock () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="keywordtype">void</span> SetDefaultAutoLock ( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bAutoLock );</div>
+<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="keywordtype">void</span> EnableDefaultAutoLock ();</div>
+<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> <span class="keywordtype">void</span> DisableDefaultAutoLock ();</div>
+<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span><span class="preprocessor"> #endif </span><span class="comment">// XB_LOCKING_SUPPORT</span></div>
+<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> </div>
+<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span><span class="preprocessor"> #ifdef XB_MDX_SUPPORT</span></div>
+<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> xbInt16 GetCreateMdxBlockSize() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );</div>
+<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span><span class="preprocessor"> #endif </span><span class="comment">// XB_MDX_SUPPORT</span></div>
+<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> </div>
+<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span><span class="preprocessor"> #ifdef XB_BLOCKREAD_SUPPORT</span></div>
+<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> xbUInt32 GetDefaultBlockReadSize() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <span class="keywordtype">void</span> SetDefaultBlockReadSize( xbUInt32 ulDfltBlockReadSize );</div>
+<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span><span class="preprocessor"> #endif </span><span class="comment">// XB_BLOCKREAD_SUPPORT</span></div>
+<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> </div>
+<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> </div>
+<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <span class="keywordtype">void</span> SetEndianType ();</div>
+<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> </div>
+<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"><a class="line" href="classxb_1_1xbSsv.html#a5849e813f5e8e1cd180f0366637adbf3"> 130</a></span> <span class="keyword">static</span> xbInt16 <a class="code hl_variable" href="classxb_1_1xbSsv.html#a5849e813f5e8e1cd180f0366637adbf3">iEndianType</a>; <span class="comment">// B=Big Endian L=Little Endian</span></div>
+<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"><a class="line" href="classxb_1_1xbSsv.html#a9dec3164c3b264882df634915ecf21da"> 131</a></span> <span class="keyword">static</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> <a class="code hl_variable" href="classxb_1_1xbSsv.html#a9dec3164c3b264882df634915ecf21da">sNullString</a>; <span class="comment">// Null String</span></div>
+<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> </div>
+<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> </div>
+<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> </div>
+<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="keyword">static</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sDefaultDateFormat;</div>
+<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <span class="keyword">static</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sDataDirectory; <span class="comment">//Data file directory</span></div>
+<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keyword">static</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sTempDirectory; <span class="comment">//Temp file directory</span></div>
+<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> </div>
+<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span><span class="preprocessor"> #ifdef XB_LOGGING_SUPPORT</span></div>
+<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="keyword">static</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sLogDirectory; <span class="comment">//Default location to store log files</span></div>
+<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="keyword">static</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sLogFileName; <span class="comment">//Default LogFileName</span></div>
+<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> </div>
+<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="keyword">static</span> xbInt16 iDefaultFileVersion; <span class="comment">// 3 = DBase 3</span></div>
+<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <span class="comment">// 4 = DBase 4</span></div>
+<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="comment">// default version used in CreateTable command</span></div>
+<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="comment">// can be over ridden at the Xbase level, or table level</span></div>
+<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="comment">// Different versions can be open simultaneously</span></div>
+<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> </div>
+<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> <span class="keyword">static</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bDefaultAutoCommit; <span class="comment">// Default dbf auto commit switch</span></div>
+<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> </div>
+<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <span class="keyword">static</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bMultiUser; <span class="comment">// True if multi user mode is turned on</span></div>
+<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="comment">// Turn this off for better performance in single user mode</span></div>
+<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="comment">// This needs to be turned on or off before any data tables are opened</span></div>
+<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="comment">// turning this on after tables are opened, can result in out of date</span></div>
+<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> <span class="comment">// file buffers if multiple users are sharing the files</span></div>
+<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> </div>
+<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span><span class="preprocessor">#ifdef XB_LOCKING_SUPPORT</span></div>
+<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> <span class="keyword">static</span> xbInt32 lDefaultLockWait; <span class="comment">// Number of milliseconds between lock retries</span></div>
+<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> <span class="keyword">static</span> xbInt16 iDefaultLockRetries; <span class="comment">// Number of times to retry a lock before conceding</span></div>
+<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <span class="keyword">static</span> xbInt16 bDefaultAutoLock; <span class="comment">// Autolocking enabled?</span></div>
+<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> <span class="keyword">static</span> xbInt16 iDefaultLockFlavor; <span class="comment">// 1 = DBase</span></div>
+<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> <span class="comment">// 2 = Clipper - not developed yet</span></div>
+<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <span class="comment">// 3 = FoxPro - not developed yet</span></div>
+<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> <span class="comment">// 9 = Xbase64 - not developed yet</span></div>
+<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> </div>
+<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> </div>
+<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span><span class="preprocessor">#if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)</span></div>
+<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> </div>
+<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="keyword">static</span> xbInt16 iUniqueKeyOpt;</div>
+<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> </div>
+<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> <span class="comment">// is one of:</span></div>
+<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <span class="comment">// XB_HALT_ON_DUPKEY</span></div>
+<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <span class="comment">// XB_EMULATE_DBASE</span></div>
+<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> </div>
+<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> </div>
+<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> </div>
+<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span><span class="preprocessor">#ifdef XB_MDX_SUPPORT</span></div>
+<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> <span class="keyword">static</span> xbInt16 iCreateMdxBlockSize; <span class="comment">// System level Mdx Block Size</span></div>
+<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span><span class="preprocessor">#endif </span><span class="comment">// XB_MDX_SUPPORT</span></div>
+<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> </div>
+<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> </div>
+<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span><span class="preprocessor">#ifdef XB_BLOCKREAD_SUPPORT</span></div>
+<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <span class="keyword">static</span> xbUInt32 ulDefaultBlockReadSize;</div>
+<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span><span class="preprocessor">#endif </span><span class="comment">// XB_BLOCKREAD_SUPPORT</span></div>
+<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> </div>
+<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> </div>
+<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span>};</div>
+<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> </div>
+<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span>} <span class="comment">/* namespace xb */</span></div>
+<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_XBSSV_H__ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="aclassxb_1_1xbSsv_html"><div class="ttname"><a href="classxb_1_1xbSsv.html">xb::xbSsv</a></div><div class="ttdoc">Class for handling shared system variables.</div><div class="ttdef"><b>Definition:</b> xbssv.h:59</div></div>
+<div class="ttc" id="aclassxb_1_1xbSsv_html_a5849e813f5e8e1cd180f0366637adbf3"><div class="ttname"><a href="classxb_1_1xbSsv.html#a5849e813f5e8e1cd180f0366637adbf3">xb::xbSsv::iEndianType</a></div><div class="ttdeci">static xbInt16 iEndianType</div><div class="ttdef"><b>Definition:</b> xbssv.h:130</div></div>
+<div class="ttc" id="aclassxb_1_1xbSsv_html_a9dec3164c3b264882df634915ecf21da"><div class="ttname"><a href="classxb_1_1xbSsv.html#a9dec3164c3b264882df634915ecf21da">xb::xbSsv::sNullString</a></div><div class="ttdeci">static xbString sNullString</div><div class="ttdef"><b>Definition:</b> xbssv.h:131</div></div>
+<div class="ttc" id="aclassxb_1_1xbString_html"><div class="ttname"><a href="classxb_1_1xbString.html">xb::xbString</a></div><div class="ttdoc">Class for handling string data.</div><div class="ttdef"><b>Definition:</b> xbstring.h:50</div></div>
+<div class="ttc" id="aclassxb_1_1xbXBase_html"><div class="ttname"><a href="classxb_1_1xbXBase.html">xb::xbXBase</a></div><div class="ttdoc">xbXbase class.</div><div class="ttdef"><b>Definition:</b> xbxbase.h:123</div></div>
+<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
+<div class="ttc" id="anamespacexb_html_ab1a750481dd487f0d384aa1d200dff0f"><div class="ttname"><a href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xb::xbBool</a></div><div class="ttdeci">short int xbBool</div><div class="ttdef"><b>Definition:</b> xbtypes.h:24</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbstmt_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbstmt_8cpp.html
new file mode 100644
index 0000000..3d89cef
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbstmt_8cpp.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/sql/xbstmt.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_25b94c3afce00ed38231227d8141f932.html">sql</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbstmt.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbstring_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbstring_8cpp.html
new file mode 100644
index 0000000..dbe8419
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbstring_8cpp.html
@@ -0,0 +1,95 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbstring.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#namespaces">Namespaces</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xbstring.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
+Namespaces</h2></td></tr>
+<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ad27f348219e895c44f74addba8e1889a"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html#ad27f348219e895c44f74addba8e1889a">xb::operator&lt;&lt;</a> (std::ostream &amp;os, const xbString &amp;s)</td></tr>
+<tr class="memdesc:ad27f348219e895c44f74addba8e1889a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stream insertion operator &lt;&lt;. <a href="namespacexb.html#ad27f348219e895c44f74addba8e1889a">More...</a><br /></td></tr>
+<tr class="separator:ad27f348219e895c44f74addba8e1889a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbstring_8h.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbstring_8h.html
new file mode 100644
index 0000000..bc3a683
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbstring_8h.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbstring.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#namespaces">Namespaces</a> </div>
+ <div class="headertitle"><div class="title">xbstring.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;stdlib.h&gt;</code><br />
+<code>#include &lt;iostream&gt;</code><br />
+</div>
+<p><a href="xbstring_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html">xb::xbString</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Class for handling string data. <a href="classxb_1_1xbString.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
+Namespaces</h2></td></tr>
+<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbstring_8h_source.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbstring_8h_source.html
new file mode 100644
index 0000000..67e1d2e
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbstring_8h_source.html
@@ -0,0 +1,252 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbstring.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbstring.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="xbstring_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbstring.h</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022 Gary A Kunkel</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">*/</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#ifndef __XBSTRING_H__</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#define __XBSTRING_H__</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#ifdef CMAKE_COMPILER_IS_GNUCC</span></div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#pragma interface</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#include &lt;stdlib.h&gt;</span></div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#include &lt;iostream&gt;</span></div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"><a class="line" href="classxb_1_1xbString.html"> 50</a></span><span class="keyword">class </span>XBDLLEXPORT <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> {</div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <span class="comment">//Various constructors</span></div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>(xbUInt32 size);</div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>(<span class="keywordtype">char</span> c);</div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *s, xbUInt32 lMaxLen);</div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>(<span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s);</div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> * = <span class="stringliteral">&quot;&quot;</span>);</div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> d );</div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <a class="code hl_class" href="classxb_1_1xbString.html">~xbString</a>();</div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> </div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <span class="comment">//operators</span></div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;operator= (<span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s);</div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;operator= (<span class="keyword">const</span> <span class="keywordtype">char</span> *s);</div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="keyword">operator</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="keywordtype">char</span> &amp;operator[](xbUInt32 n) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="keywordtype">char</span> &amp;operator[](xbInt32 n) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> </div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;operator+=(<span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s);</div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;operator+=(<span class="keyword">const</span> <span class="keywordtype">char</span> *s);</div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;operator+=(<span class="keywordtype">char</span> c);</div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;operator-=(<span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s);</div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;operator-=(<span class="keyword">const</span> <span class="keywordtype">char</span> *s);</div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;operator-=(<span class="keywordtype">char</span> c);</div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> </div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator == ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator == ( <span class="keyword">const</span> <span class="keywordtype">char</span> * ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator != ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator != ( <span class="keyword">const</span> <span class="keywordtype">char</span> * ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator &lt; ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator &gt; ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator &lt;= ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator &gt;= ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> </div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> operator-( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s );</div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> operator+( <span class="keyword">const</span> <span class="keywordtype">char</span> *s );</div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> operator+( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s );</div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> operator+( <span class="keyword">const</span> <span class="keywordtype">char</span> c );</div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> </div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;AddBackSlash( <span class="keywordtype">char</span> c );</div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Append(<span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s);</div>
+<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Append(<span class="keyword">const</span> <span class="keywordtype">char</span> *s);</div>
+<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Append(<span class="keyword">const</span> <span class="keywordtype">char</span> *s, xbUInt32 iByteCount );</div>
+<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Append(<span class="keywordtype">char</span> c);</div>
+<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Assign(<span class="keyword">const</span> <span class="keywordtype">char</span> *srcStr, xbUInt32 lStartPos, xbUInt32 lCopyLen );</div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Assign(<span class="keyword">const</span> <span class="keywordtype">char</span> *srcStr, xbUInt32 lStartPos );</div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Assign(<span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s, xbUInt32 ulStartPos, xbUInt32 lCopyLen );</div>
+<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Assign(<span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s, xbUInt32 ulStartPos );</div>
+<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> </div>
+<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> Copy() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> xbUInt32 CountChar( <span class="keywordtype">char</span> c ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> xbUInt32 CountChar( <span class="keywordtype">char</span> c, xbInt16 iOpt ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> xbInt16 CvtHexChar( <span class="keywordtype">char</span> &amp;cOut );</div>
+<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> xbInt16 CvtHexString( <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
+<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> xbInt16 CvtULongLong( xbUInt64 &amp;ullOut );</div>
+<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> xbInt16 CvtLongLong( xbInt64 &amp;llOut );</div>
+<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
+<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="keywordtype">void</span> Dump( <span class="keyword">const</span> <span class="keywordtype">char</span> *title ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="keywordtype">void</span> Dump( <span class="keyword">const</span> <span class="keywordtype">char</span> *title, xbInt16 iOption ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> <span class="keywordtype">void</span> DumpHex( <span class="keyword">const</span> <span class="keywordtype">char</span> *title ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> </div>
+<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;ExtractElement(<a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s, <span class="keywordtype">char</span> delim, xbUInt32 iCnt, xbInt16 iOpt = 0 );</div>
+<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;ExtractElement(<span class="keyword">const</span> <span class="keywordtype">char</span> *src, <span class="keywordtype">char</span> delim, xbUInt32 iCnt, xbInt16 iOpt = 0 );</div>
+<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> </div>
+<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> <span class="keywordtype">char</span> GetCharacter( xbUInt32 lPos ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> xbUInt32 GetLastPos(<span class="keywordtype">char</span> c) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> xbUInt32 GetLastPos(<span class="keyword">const</span> <span class="keywordtype">char</span> *s) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> <span class="keywordtype">char</span> GetPathSeparator() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> xbUInt32 GetSize() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> </div>
+<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> HasAlphaChars() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsEmpty() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsNull() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Left( xbUInt32 ulLen );</div>
+<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> xbUInt32 Len() <span class="keyword">const</span>; <span class="comment">// returns the length of the string</span></div>
+<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Ltrim();</div>
+<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Ltrunc( xbUInt32 ulCnt );</div>
+<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> </div>
+<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Mid(xbUInt32 ulPos, xbUInt32 lLen );</div>
+<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;PadLeft( <span class="keywordtype">char</span> c, xbUInt32 ulLen );</div>
+<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;PadRight( <span class="keywordtype">char</span> c, xbUInt32 ulLen );</div>
+<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> </div>
+<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> xbUInt32 Pos(<span class="keywordtype">char</span> c, xbUInt32 ulStartPos ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> xbUInt32 Pos(<span class="keywordtype">char</span> c) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> xbUInt32 Pos(<span class="keyword">const</span> <span class="keywordtype">char</span> *s) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;PutAt(xbUInt32 ulPos, <span class="keywordtype">char</span> c);</div>
+<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> </div>
+<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Remove( xbUInt32 ulPos, xbUInt32 ulN );</div>
+<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Replace( <span class="keyword">const</span> <span class="keywordtype">char</span> *sReplace, <span class="keyword">const</span> <span class="keywordtype">char</span> *sReplaceWith, xbInt16 iOpt = 0 );</div>
+<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Resize( xbUInt32 lSize );</div>
+<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Rtrim();</div>
+<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> </div>
+<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Set( <span class="keyword">const</span> <span class="keywordtype">char</span> *s );</div>
+<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Set( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s );</div>
+<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Set( <span class="keyword">const</span> <span class="keywordtype">char</span> *s, xbUInt32 ulSize );</div>
+<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;SetNum( xbInt32 lNum );</div>
+<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Sprintf(<span class="keyword">const</span> <span class="keywordtype">char</span> *format, ...);</div>
+<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> </div>
+<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *Str() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="keywordtype">char</span> *strncpy( <span class="keywordtype">char</span> * cDest, xbUInt32 n ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;SwapChars( <span class="keywordtype">char</span> from, <span class="keywordtype">char</span> to );</div>
+<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> </div>
+<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;ToLowerCase();</div>
+<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;ToUpperCase();</div>
+<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Trim();</div>
+<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> </div>
+<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> ValidLogicalValue() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> ValidNumericValue() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;ZapChar( <span class="keywordtype">char</span> c );</div>
+<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;ZapLeadingChar( <span class="keywordtype">char</span> c );</div>
+<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;ZapTrailingChar( <span class="keywordtype">char</span> c );</div>
+<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> </div>
+<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> <span class="keyword">friend</span> std::ostream&amp; <a class="code hl_function" href="namespacexb.html#ad27f348219e895c44f74addba8e1889a">operator&lt;&lt; </a>( std::ostream&amp; os, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; s );</div>
+<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> </div>
+<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> </div>
+<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * NullString;</div>
+<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="keyword">static</span> <span class="keywordtype">char</span> cJunkBuf;</div>
+<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> </div>
+<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> <span class="keywordtype">char</span> *data; <span class="comment">// pointer to actual string data</span></div>
+<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> xbUInt32 size; <span class="comment">// size of string plus null terminating byte</span></div>
+<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> </div>
+<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> <span class="keywordtype">void</span> ctor(<span class="keyword">const</span> <span class="keywordtype">char</span> *s);</div>
+<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span><span class="comment">// xbUInt32 CalcSprintfBufSize(const char *format, ...);</span></div>
+<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> </div>
+<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span><span class="comment">// char * xb_realloc( char *pIn, xbUInt32 iLen );</span></div>
+<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> </div>
+<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> <span class="comment">// next routine could result in buffer over runs if used with improperly sized buffers</span></div>
+<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <span class="keywordtype">char</span> * xb_strcpy ( <span class="keywordtype">char</span> *target, <span class="keyword">const</span> <span class="keywordtype">char</span> *source);</div>
+<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> </div>
+<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span>};</div>
+<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> </div>
+<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span>} <span class="comment">/* namespace */</span></div>
+<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span><span class="preprocessor">#endif </span><span class="comment">/* __XBSTRING_H__ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="aclassxb_1_1xbString_html"><div class="ttname"><a href="classxb_1_1xbString.html">xb::xbString</a></div><div class="ttdoc">Class for handling string data.</div><div class="ttdef"><b>Definition:</b> xbstring.h:50</div></div>
+<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
+<div class="ttc" id="anamespacexb_html_a25f47b226ce924a5c78f97989b0744a2"><div class="ttname"><a href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xb::xbDouble</a></div><div class="ttdeci">double xbDouble</div><div class="ttdef"><b>Definition:</b> xbtypes.h:23</div></div>
+<div class="ttc" id="anamespacexb_html_ab1a750481dd487f0d384aa1d200dff0f"><div class="ttname"><a href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xb::xbBool</a></div><div class="ttdeci">short int xbBool</div><div class="ttdef"><b>Definition:</b> xbtypes.h:24</div></div>
+<div class="ttc" id="anamespacexb_html_ad27f348219e895c44f74addba8e1889a"><div class="ttname"><a href="namespacexb.html#ad27f348219e895c44f74addba8e1889a">xb::operator&lt;&lt;</a></div><div class="ttdeci">std::ostream &amp; operator&lt;&lt;(std::ostream &amp;os, const xbString &amp;s)</div><div class="ttdoc">Stream insertion operator &lt;&lt;.</div><div class="ttdef"><b>Definition:</b> xbstring.cpp:148</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbtag_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbtag_8cpp.html
new file mode 100644
index 0000000..1c6a4b8
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbtag_8cpp.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbtag.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbtag.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbtag_8h.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbtag_8h.html
new file mode 100644
index 0000000..593119e
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbtag_8h.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbtag.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#namespaces">Namespaces</a> </div>
+ <div class="headertitle"><div class="title">xbtag.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="xbtag_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
+Namespaces</h2></td></tr>
+<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbtag_8h_source.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbtag_8h_source.html
new file mode 100644
index 0000000..0b07092
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbtag_8h_source.html
@@ -0,0 +1,144 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbtag.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbtag.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="xbtag_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbtag.h</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022 Gary A Kunkel</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">*/</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#ifndef __XB_XBTAG_H__</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#define __XB_XBTAG_H__</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="comment">//#ifdef CMAKE_COMPILER_IS_GNUCC</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="comment">//#pragma interface</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="comment">//#endif</span></div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="preprocessor">#ifdef XB_INDEX_SUPPORT</span></div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="keyword">class </span>XBDLLEXPORT xbIx;</div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="keyword">class </span>XBDLLEXPORT xbTag {</div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> </div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> xbTag( xbIx *pIx, <span class="keywordtype">void</span> *vpTag, xbString &amp;sType, xbString &amp;sTagName, xbString &amp;sExpression, xbString &amp;sFilter, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bUnique, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bSort );</div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> xbIx *GetIx() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keywordtype">void</span> *GetVpTag() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keyword">const</span> xbString &amp;GetType() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <span class="keyword">const</span> xbString &amp;GetTagName() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> <span class="keyword">const</span> xbString &amp;GetExpression() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="keyword">const</span> xbString &amp;GetFilter() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetUnique() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetSort() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> </div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> xbIx *pIx;</div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <span class="keywordtype">void</span> *vpTag;</div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> xbString sType;</div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> xbString sTagName;</div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> xbString sExpression;</div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> xbString sFilter;</div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bUnique;</div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bSort; <span class="comment">// 0 = Ascending, 1 = Descending</span></div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span>};</div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> </div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span><span class="preprocessor">#endif </span><span class="comment">// XB_INDEX_SUPPORT</span></div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> </div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span>} <span class="comment">/* namespace xb */</span></div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_TAG_H__ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
+<div class="ttc" id="anamespacexb_html_ab1a750481dd487f0d384aa1d200dff0f"><div class="ttname"><a href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xb::xbBool</a></div><div class="ttdeci">short int xbBool</div><div class="ttdef"><b>Definition:</b> xbtypes.h:24</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbtblmgr_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbtblmgr_8cpp.html
new file mode 100644
index 0000000..c39335b
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbtblmgr_8cpp.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbtblmgr.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#namespaces">Namespaces</a> </div>
+ <div class="headertitle"><div class="title">xbtblmgr.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
+Namespaces</h2></td></tr>
+<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbtblmgr_8h.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbtblmgr_8h.html
new file mode 100644
index 0000000..4254153
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbtblmgr_8h.html
@@ -0,0 +1,103 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbtblmgr.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#namespaces">Namespaces</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle"><div class="title">xbtblmgr.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="xbtblmgr_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structxb_1_1xbTblList.html">xb::xbTblList</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html">xb::xbTblMgr</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
+Namespaces</h2></td></tr>
+<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="var-members" name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:ab2eae4b4732466698a7fdd89d77ba53b"><td class="memItemLeft" align="right" valign="top">class XBDLLEXPORT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xb::xbDbf</a></td></tr>
+<tr class="separator:ab2eae4b4732466698a7fdd89d77ba53b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbtblmgr_8h_source.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbtblmgr_8h_source.html
new file mode 100644
index 0000000..3d3c51e
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbtblmgr_8h_source.html
@@ -0,0 +1,153 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbtblmgr.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbtblmgr.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="xbtblmgr_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbtblmgr.h</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022 Gary A Kunkel</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">This class manages a list of open tables, open indices are connected to the open tables</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"></span> </div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment">*/</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> </div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#ifndef __XB_XBMGR_H__</span></div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#define __XB_XBMGR_H__</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="preprocessor">#ifdef CMAKE_COMPILER_IS_GNUCC</span></div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#pragma interface</span></div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"><a class="line" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b"> 28</a></span><span class="keyword">class </span>XBDLLEXPORT <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a>;</div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="comment">/* this structure is a linked list of open tables */</span></div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="structxb_1_1xbTblList.html"> 31</a></span><span class="keyword">struct </span>XBDLLEXPORT <a class="code hl_struct" href="structxb_1_1xbTblList.html">xbTblList</a>{</div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"><a class="line" href="structxb_1_1xbTblList.html#a3fd169fcf0fd4df927544e5342db583c"> 32</a></span> <a class="code hl_struct" href="structxb_1_1xbTblList.html">xbTblList</a> *<a class="code hl_variable" href="structxb_1_1xbTblList.html#a3fd169fcf0fd4df927544e5342db583c">pNext</a>;</div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"><a class="line" href="structxb_1_1xbTblList.html#aceec65f6f6b585788cf98e8dabd2737d"> 33</a></span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> *<a class="code hl_variable" href="structxb_1_1xbTblList.html#aceec65f6f6b585788cf98e8dabd2737d">psFqTblName</a>; <span class="comment">// Fully qualified name of table - same table can be opened multiple times, but must have unique alias</span></div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"><a class="line" href="structxb_1_1xbTblList.html#a02c3b0c47fd104ef9758b375ecdcfd0f"> 34</a></span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> *<a class="code hl_variable" href="structxb_1_1xbTblList.html#a02c3b0c47fd104ef9758b375ecdcfd0f">psTblName</a>; <span class="comment">// Table name without path, without extension</span></div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"><a class="line" href="structxb_1_1xbTblList.html#ac87742c8a6b1cf2e7e35218e96966a05"> 35</a></span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> *<a class="code hl_variable" href="structxb_1_1xbTblList.html#ac87742c8a6b1cf2e7e35218e96966a05">psTblAlias</a>; <span class="comment">// TblAliasName must be unique, same as TblNAme if Alias not provided</span></div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"><a class="line" href="structxb_1_1xbTblList.html#a387d3f6bbf291a1fb96d276ed9bb96b6"> 36</a></span> <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> *<a class="code hl_variable" href="structxb_1_1xbTblList.html#a387d3f6bbf291a1fb96d276ed9bb96b6">pDbf</a>;</div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span>};</div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"><a class="line" href="classxb_1_1xbTblMgr.html"> 39</a></span><span class="keyword">class </span>XBDLLEXPORT <a class="code hl_class" href="classxb_1_1xbTblMgr.html">xbTblMgr</a> : <span class="keyword">public</span> <a class="code hl_class" href="classxb_1_1xbSsv.html">xbSsv</a> {</div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <a class="code hl_class" href="classxb_1_1xbTblMgr.html">xbTblMgr</a>();</div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <a class="code hl_class" href="classxb_1_1xbTblMgr.html">~xbTblMgr</a>();</div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> xbInt16 AddTblToTblList ( <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> *d, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFqTblName );</div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> xbInt16 AddTblToTblList ( <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> *d, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFqTblName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTblAlias );</div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> xbInt16 DisplayTableList () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> * GetDbfPtr ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTblAlias ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> * GetDbfPtr ( xbInt16 sItemNo ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> <a class="code hl_struct" href="structxb_1_1xbTblList.html">xbTblList</a> * GetTblListEntry ( <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> *d );</div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> xbInt16 GetOpenTableCount () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> xbInt16 RemoveTblFromTblList ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTblAlias );</div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> xbInt16 RemoveTblFromTblList ( <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> *d );</div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> </div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <a class="code hl_struct" href="structxb_1_1xbTblList.html">xbTblList</a> * TblList; <span class="comment">// List of open database tables</span></div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> xbInt16 iOpenTableCount; <span class="comment">// Number of open tables</span></div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> </div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span>};</div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span>} <span class="comment">/* namespace xb */</span></div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_XBMGR_H__ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="aclassxb_1_1xbDbf_html"><div class="ttname"><a href="classxb_1_1xbDbf.html">xb::xbDbf</a></div><div class="ttdoc">Base class for handling dbf files/tables.</div><div class="ttdef"><b>Definition:</b> xbdbf.h:150</div></div>
+<div class="ttc" id="aclassxb_1_1xbSsv_html"><div class="ttname"><a href="classxb_1_1xbSsv.html">xb::xbSsv</a></div><div class="ttdoc">Class for handling shared system variables.</div><div class="ttdef"><b>Definition:</b> xbssv.h:59</div></div>
+<div class="ttc" id="aclassxb_1_1xbString_html"><div class="ttname"><a href="classxb_1_1xbString.html">xb::xbString</a></div><div class="ttdoc">Class for handling string data.</div><div class="ttdef"><b>Definition:</b> xbstring.h:50</div></div>
+<div class="ttc" id="aclassxb_1_1xbTblMgr_html"><div class="ttname"><a href="classxb_1_1xbTblMgr.html">xb::xbTblMgr</a></div><div class="ttdef"><b>Definition:</b> xbtblmgr.h:39</div></div>
+<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
+<div class="ttc" id="astructxb_1_1xbTblList_html"><div class="ttname"><a href="structxb_1_1xbTblList.html">xb::xbTblList</a></div><div class="ttdef"><b>Definition:</b> xbtblmgr.h:31</div></div>
+<div class="ttc" id="astructxb_1_1xbTblList_html_a02c3b0c47fd104ef9758b375ecdcfd0f"><div class="ttname"><a href="structxb_1_1xbTblList.html#a02c3b0c47fd104ef9758b375ecdcfd0f">xb::xbTblList::psTblName</a></div><div class="ttdeci">xbString * psTblName</div><div class="ttdef"><b>Definition:</b> xbtblmgr.h:34</div></div>
+<div class="ttc" id="astructxb_1_1xbTblList_html_a387d3f6bbf291a1fb96d276ed9bb96b6"><div class="ttname"><a href="structxb_1_1xbTblList.html#a387d3f6bbf291a1fb96d276ed9bb96b6">xb::xbTblList::pDbf</a></div><div class="ttdeci">xbDbf * pDbf</div><div class="ttdef"><b>Definition:</b> xbtblmgr.h:36</div></div>
+<div class="ttc" id="astructxb_1_1xbTblList_html_a3fd169fcf0fd4df927544e5342db583c"><div class="ttname"><a href="structxb_1_1xbTblList.html#a3fd169fcf0fd4df927544e5342db583c">xb::xbTblList::pNext</a></div><div class="ttdeci">xbTblList * pNext</div><div class="ttdef"><b>Definition:</b> xbtblmgr.h:32</div></div>
+<div class="ttc" id="astructxb_1_1xbTblList_html_ac87742c8a6b1cf2e7e35218e96966a05"><div class="ttname"><a href="structxb_1_1xbTblList.html#ac87742c8a6b1cf2e7e35218e96966a05">xb::xbTblList::psTblAlias</a></div><div class="ttdeci">xbString * psTblAlias</div><div class="ttdef"><b>Definition:</b> xbtblmgr.h:35</div></div>
+<div class="ttc" id="astructxb_1_1xbTblList_html_aceec65f6f6b585788cf98e8dabd2737d"><div class="ttname"><a href="structxb_1_1xbTblList.html#aceec65f6f6b585788cf98e8dabd2737d">xb::xbTblList::psFqTblName</a></div><div class="ttdeci">xbString * psFqTblName</div><div class="ttdef"><b>Definition:</b> xbtblmgr.h:33</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbtypes_8h.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbtypes_8h.html
new file mode 100644
index 0000000..24f5dde
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbtypes_8h.html
@@ -0,0 +1,154 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbtypes.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#namespaces">Namespaces</a> &#124;
+<a href="#define-members">Macros</a> &#124;
+<a href="#typedef-members">Typedefs</a> </div>
+ <div class="headertitle"><div class="title">xbtypes.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="xbtypes_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
+Namespaces</h2></td></tr>
+<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ab0ae00665298fe7f5292691cb98ec2d9"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbtypes_8h.html#ab0ae00665298fe7f5292691cb98ec2d9">xbTrue</a>&#160;&#160;&#160;1</td></tr>
+<tr class="separator:ab0ae00665298fe7f5292691cb98ec2d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adc4b6ca5ad299f63675136d9e03938cc"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc">xbFalse</a>&#160;&#160;&#160;0</td></tr>
+<tr class="separator:adc4b6ca5ad299f63675136d9e03938cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2c65f692ac861990861575e18f72f6eb"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbtypes_8h.html#a2c65f692ac861990861575e18f72f6eb">xbFileNo</a>&#160;&#160;&#160;fileno</td></tr>
+<tr class="separator:a2c65f692ac861990861575e18f72f6eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="typedef-members" name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:a83aa6a550398db55973aa9fb4257e66e"><td class="memItemLeft" align="right" valign="top">typedef float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html#a83aa6a550398db55973aa9fb4257e66e">xb::xbFloat</a></td></tr>
+<tr class="separator:a83aa6a550398db55973aa9fb4257e66e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a25f47b226ce924a5c78f97989b0744a2"><td class="memItemLeft" align="right" valign="top">typedef double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xb::xbDouble</a></td></tr>
+<tr class="separator:a25f47b226ce924a5c78f97989b0744a2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab1a750481dd487f0d384aa1d200dff0f"><td class="memItemLeft" align="right" valign="top">typedef short int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xb::xbBool</a></td></tr>
+<tr class="separator:ab1a750481dd487f0d384aa1d200dff0f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac963d9fde6debb416303cfbed35fb793"><td class="memItemLeft" align="right" valign="top">typedef xbUInt64&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html#ac963d9fde6debb416303cfbed35fb793">xb::xbOffT</a></td></tr>
+<tr class="separator:ac963d9fde6debb416303cfbed35fb793"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a id="adc4b6ca5ad299f63675136d9e03938cc" name="adc4b6ca5ad299f63675136d9e03938cc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adc4b6ca5ad299f63675136d9e03938cc">&#9670;&nbsp;</a></span>xbFalse</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define xbFalse&#160;&#160;&#160;0</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2c65f692ac861990861575e18f72f6eb" name="a2c65f692ac861990861575e18f72f6eb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2c65f692ac861990861575e18f72f6eb">&#9670;&nbsp;</a></span>xbFileNo</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define xbFileNo&#160;&#160;&#160;fileno</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab0ae00665298fe7f5292691cb98ec2d9" name="ab0ae00665298fe7f5292691cb98ec2d9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab0ae00665298fe7f5292691cb98ec2d9">&#9670;&nbsp;</a></span>xbTrue</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define xbTrue&#160;&#160;&#160;1</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbtypes_8h_source.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbtypes_8h_source.html
new file mode 100644
index 0000000..60d9e5b
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbtypes_8h_source.html
@@ -0,0 +1,139 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbtypes.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbtypes.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="xbtypes_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbtypes.h</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022 Gary A Kunkel</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">*/</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#ifndef __XB_XTYPES_H__</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#define __XB_XTYPES_H__</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"><a class="line" href="namespacexb.html#a83aa6a550398db55973aa9fb4257e66e"> 22</a></span><span class="keyword">typedef</span> <span class="keywordtype">float</span> <a class="code hl_typedef" href="namespacexb.html#a83aa6a550398db55973aa9fb4257e66e">xbFloat</a>;</div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"><a class="line" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2"> 23</a></span><span class="keyword">typedef</span> <span class="keywordtype">double</span> <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a>;</div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"><a class="line" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f"> 24</a></span><span class="keyword">typedef</span> <span class="keywordtype">short</span> <span class="keywordtype">int</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>;</div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"><a class="line" href="namespacexb.html#ac963d9fde6debb416303cfbed35fb793"> 25</a></span><span class="keyword">typedef</span> xbUInt64 <a class="code hl_typedef" href="namespacexb.html#ac963d9fde6debb416303cfbed35fb793">xbOffT</a>;</div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"><a class="line" href="xbtypes_8h.html#ab0ae00665298fe7f5292691cb98ec2d9"> 28</a></span><span class="preprocessor">#define xbTrue 1</span></div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc"> 29</a></span><span class="preprocessor">#define xbFalse 0</span></div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="preprocessor">#ifdef HAVE__FILENO_F</span></div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="preprocessor"> #define xbFileNo _fileno</span></div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="preprocessor">#else</span></div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"><a class="line" href="xbtypes_8h.html#a2c65f692ac861990861575e18f72f6eb"> 35</a></span><span class="preprocessor"> #define xbFileNo fileno</span></div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="preprocessor">#ifdef XB_LOCKING_SUPPORT</span></div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="preprocessor"> #if defined( HAVE_LONG_LONG )</span></div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="preprocessor"> #define LK4026531839 4026531839LL</span></div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="preprocessor"> #define LK4026531838 4026531838LL</span></div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="preprocessor"> #define LK3026531838 3026531838LL</span></div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span><span class="preprocessor"> #define LK1000000000 1000000000LL</span></div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="preprocessor"> #else</span></div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="preprocessor"> #define LK4026531839 4026531839L</span></div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="preprocessor"> #define LK4026531838 4026531838L</span></div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="preprocessor"> #define LK3026531838 3026531838L</span></div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="preprocessor"> #define LK1000000000 1000000000L</span></div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span>} <span class="comment">/* namespace */</span></div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_XTYPES_H__ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
+<div class="ttc" id="anamespacexb_html_a25f47b226ce924a5c78f97989b0744a2"><div class="ttname"><a href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xb::xbDouble</a></div><div class="ttdeci">double xbDouble</div><div class="ttdef"><b>Definition:</b> xbtypes.h:23</div></div>
+<div class="ttc" id="anamespacexb_html_a83aa6a550398db55973aa9fb4257e66e"><div class="ttname"><a href="namespacexb.html#a83aa6a550398db55973aa9fb4257e66e">xb::xbFloat</a></div><div class="ttdeci">float xbFloat</div><div class="ttdef"><b>Definition:</b> xbtypes.h:22</div></div>
+<div class="ttc" id="anamespacexb_html_ab1a750481dd487f0d384aa1d200dff0f"><div class="ttname"><a href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xb::xbBool</a></div><div class="ttdeci">short int xbBool</div><div class="ttdef"><b>Definition:</b> xbtypes.h:24</div></div>
+<div class="ttc" id="anamespacexb_html_ac963d9fde6debb416303cfbed35fb793"><div class="ttname"><a href="namespacexb.html#ac963d9fde6debb416303cfbed35fb793">xb::xbOffT</a></div><div class="ttdeci">xbUInt64 xbOffT</div><div class="ttdef"><b>Definition:</b> xbtypes.h:25</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbuda_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbuda_8cpp.html
new file mode 100644
index 0000000..5930c72
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbuda_8cpp.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbuda.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbuda.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbuda_8h.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbuda_8h.html
new file mode 100644
index 0000000..7efa3fa
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbuda_8h.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbuda.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbuda.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="xbuda_8h_source.html">Go to the source code of this file.</a></p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbuda_8h_source.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbuda_8h_source.html
new file mode 100644
index 0000000..325b01f
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbuda_8h_source.html
@@ -0,0 +1,132 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbuda.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbuda.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="xbuda_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbuda.h</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">This class manages the user data area (UDA)</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"></span> </div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment">*/</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> </div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#ifndef __XB_XBUDA_H__</span></div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#define __XB_XBUDA_H__</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="preprocessor">#ifdef CMAKE_COMPILER_IS_GNUCC</span></div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#pragma interface</span></div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="preprocessor">#ifdef XB_EXPRESSION_SUPPORT</span></div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="keyword">class </span>XBDLLEXPORT xbUda {</div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> xbUda();</div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> ~xbUda();</div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> xbInt16 AddTokenForKey( <span class="keyword">const</span> xbString &amp;sKey, <span class="keyword">const</span> xbString &amp;sToken );</div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="keywordtype">void</span> Clear();</div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> xbInt16 DelTokenForKey( <span class="keyword">const</span> xbString &amp;sKey );</div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> xbInt16 GetTokenCnt() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> xbInt16 GetTokenForKey( <span class="keyword">const</span> xbString &amp;sKey, xbString &amp;sData );</div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> xbInt16 UpdTokenForKey( <span class="keyword">const</span> xbString &amp;sKey, <span class="keyword">const</span> xbString &amp;sToken );</div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <span class="keywordtype">void</span> DumpUda() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> xbLinkListOrd&lt;xbString&gt; llOrd;</div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span>};</div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span>} <span class="comment">/* namespace */</span></div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span><span class="preprocessor">#endif </span><span class="comment">/* XB_EXPRESSION_SUPPORT */</span><span class="preprocessor"></span></div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><span class="preprocessor">#endif </span><span class="comment">/* __XBUDA_H__ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbxbase_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbxbase_8cpp.html
new file mode 100644
index 0000000..b71ed75
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbxbase_8cpp.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbxbase.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#namespaces">Namespaces</a> </div>
+ <div class="headertitle"><div class="title">xbxbase.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
+Namespaces</h2></td></tr>
+<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbxbase_8h.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbxbase_8h.html
new file mode 100644
index 0000000..9e40b92
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbxbase_8h.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbxbase.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#namespaces">Namespaces</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle"><div class="title">xbxbase.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="xbxbase_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html">xb::xbXBase</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">xbXbase class. <a href="classxb_1_1xbXBase.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
+Namespaces</h2></td></tr>
+<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="var-members" name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:a4a31fbe9110c9e55495ce71e642d785c"><td class="memItemLeft" align="right" valign="top">class XBDLLEXPORT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html#a4a31fbe9110c9e55495ce71e642d785c">xb::xbLog</a></td></tr>
+<tr class="separator:a4a31fbe9110c9e55495ce71e642d785c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbxbase_8h_source.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbxbase_8h_source.html
new file mode 100644
index 0000000..0166967
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xbxbase_8h_source.html
@@ -0,0 +1,323 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbxbase.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbxbase.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="xbxbase_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbxbase.h</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">*/</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#ifndef __XB_XBDBLIST_H__</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#define __XB_XBDBLIST_H__</span></div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifdef CMAKE_COMPILER_IS_GNUCC</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#pragma interface</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"><a class="line" href="namespacexb.html#a4a31fbe9110c9e55495ce71e642d785c"> 26</a></span><span class="keyword">class </span>XBDLLEXPORT <a class="code hl_variable" href="namespacexb.html#a4a31fbe9110c9e55495ce71e642d785c">xbLog</a>;</div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="comment">/************************************************************************/</span></div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="comment">/* </span></div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="comment"> Xbase functions</span></div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="comment"></span> </div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="comment"> Min Parm Count is the minimum number of input parms needed by the function</span></div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="comment"></span> </div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="comment"> Return Type</span></div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="comment"> C Char or string</span></div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="comment"> D Date</span></div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="comment"> L Logical</span></div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="comment"> N Numeric</span></div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="comment"> 1 Varies - pull return type from first sibling</span></div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="comment"> 2 Varies - pull return type from second sibling</span></div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="comment">*/</span></div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span><span class="preprocessor">#ifdef XB_FUNCTION_SUPPORT</span></div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="comment">/*</span></div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="comment">struct XBDLLEXPORT xbFunctionInfo {</span></div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="comment"> const char * FuncName; // function name</span></div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="comment"> char ReturnType; // return type of function</span></div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="comment"> xbInt16 iReturnLenCalc; // used to calculate the function return value is</span></div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="comment"> // 1 = use value specified in iReturnLenVal</span></div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span><span class="comment"> // 2 = use length of operand specified in col 4</span></div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><span class="comment"> // 3 = use valued of numeric operand specified in col 4</span></div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span><span class="comment"> // 4 = length of parm 1 * numeric value parm</span></div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span><span class="comment"> // 5 = larger length of parm 2 or length of parm 3</span></div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="comment"> // 6 = if two or more parms, use numeric value from second parm,</span></div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span><span class="comment"> // otherwise use col4 value</span></div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span><span class="comment"> xbInt16 iReturnLenVal; // Used in combination with iReturnLenCalc</span></div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><span class="comment"></span> </div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span><span class="comment">};</span></div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span><span class="comment">*/</span></div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span><span class="comment">/*</span></div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="comment">static xbFunctionInfo FunctionList[] =</span></div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span><span class="comment">// Func Return -Rtrn Len-</span></div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="comment">// Name Type -Calc Val-</span></div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><span class="comment">{</span></div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span><span class="comment"> { &quot;ABS&quot;, &#39;N&#39;, 1, 4 },</span></div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span><span class="comment"> { &quot;ALLTRIM&quot;, &#39;C&#39;, 2, 1 },</span></div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span><span class="comment"> { &quot;ASC&quot;, &#39;N&#39;, 1, 4 },</span></div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span><span class="comment"> { &quot;AT&quot;, &#39;N&#39;, 1, 4 },</span></div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span><span class="comment"> { &quot;CDOW&quot;, &#39;C&#39;, 1, 9 },</span></div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span><span class="comment"> { &quot;CHR&quot;, &#39;C&#39;, 1, 1 },</span></div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span><span class="comment"> { &quot;CMONTH&quot;, &#39;C&#39;, 1, 9 },</span></div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span><span class="comment"> { &quot;CTOD&quot;, &#39;D&#39;, 1, 8 },</span></div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span><span class="comment"> { &quot;DATE&quot;, &#39;D&#39;, 1, 8 },</span></div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="comment"> { &quot;DAY&quot;, &#39;N&#39;, 1, 4 },</span></div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span><span class="comment"> { &quot;DEL&quot;, &#39;C&#39;, 1, 1 },</span></div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="comment"> { &quot;DELETED&quot;, &#39;L&#39;, 1, 1 },</span></div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span><span class="comment"> { &quot;DESCEND&quot;, &#39;1&#39;, 2, 1 },</span></div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span><span class="comment"> { &quot;DOW&quot;, &#39;N&#39;, 1, 4 },</span></div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span><span class="comment"> { &quot;DTOC&quot;, &#39;C&#39;, 1, 8 },</span></div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span><span class="comment"> { &quot;DTOS&quot;, &#39;C&#39;, 1, 8 },</span></div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span><span class="comment"> { &quot;EXP&quot;, &#39;N&#39;, 1, 4 },</span></div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span><span class="comment"> { &quot;IIF&quot;, &#39;C&#39;, 5, 0 },</span></div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span><span class="comment"> { &quot;INT&quot;, &#39;N&#39;, 1, 4 },</span></div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span><span class="comment"> { &quot;ISALPHA&quot;, &#39;L&#39;, 1, 1 },</span></div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span><span class="comment"> { &quot;ISLOWER&quot;, &#39;L&#39;, 1, 1 },</span></div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span><span class="comment"> { &quot;ISUPPER&quot;, &#39;L&#39;, 1, 1 },</span></div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span><span class="comment"> { &quot;LEFT&quot;, &#39;C&#39;, 3, 2 },</span></div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span><span class="comment"> { &quot;LEN&quot;, &#39;N&#39;, 1, 4 },</span></div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span><span class="comment"> { &quot;LOG&quot;, &#39;N&#39;, 1, 4 },</span></div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span><span class="comment"> { &quot;LOWER&quot;, &#39;C&#39;, 2, 1 },</span></div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span><span class="comment"> { &quot;LTRIM&quot;, &#39;C&#39;, 2, 1 },</span></div>
+<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span><span class="comment"> { &quot;MAX&quot;, &#39;N&#39;, 1, 4 },</span></div>
+<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span><span class="comment"> { &quot;MIN&quot;, &#39;N&#39;, 1, 4 },</span></div>
+<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span><span class="comment"> { &quot;MONTH&quot;, &#39;N&#39;, 1, 4 },</span></div>
+<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span><span class="comment"> { &quot;RECNO&quot;, &#39;N&#39;, 1, 4 },</span></div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span><span class="comment"> { &quot;RECCOUNT&quot;, &#39;N&#39;, 1, 4 },</span></div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span><span class="comment"> { &quot;REPLICATE&quot;, &#39;C&#39;, 4, 0 },</span></div>
+<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span><span class="comment"> { &quot;RIGHT&quot;, &#39;C&#39;, 3, 2 },</span></div>
+<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span><span class="comment"> { &quot;RTRIM&quot;, &#39;C&#39;, 2, 1 },</span></div>
+<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span><span class="comment"> { &quot;SPACE&quot;, &#39;C&#39;, 3, 1 },</span></div>
+<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span><span class="comment"> { &quot;SQRT&quot;, &#39;N&#39;, 1, 4 },</span></div>
+<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span><span class="comment"> { &quot;STOD&quot;, &#39;D&#39;, 1, 8 },</span></div>
+<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span><span class="comment"> { &quot;STR&quot;, &#39;C&#39;, 6, 10 },</span></div>
+<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span><span class="comment"> { &quot;STRZERO&quot;, &#39;C&#39;, 3, 2 },</span></div>
+<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span><span class="comment"> { &quot;SUBSTR&quot;, &#39;C&#39;, 3, 3 },</span></div>
+<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span><span class="comment"> { &quot;TRIM&quot;, &#39;C&#39;, 2, 1 },</span></div>
+<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span><span class="comment"> { &quot;UPPER&quot;, &#39;C&#39;, 2, 1 },</span></div>
+<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span><span class="comment"> { &quot;VAL&quot;, &#39;N&#39;, 1, 4 },</span></div>
+<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span><span class="comment"> { &quot;YEAR&quot;, &#39;N&#39;, 1, 4 },</span></div>
+<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span><span class="comment"> { 0, 0, 0, 0 },</span></div>
+<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span><span class="comment">};</span></div>
+<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span><span class="comment">*/</span></div>
+<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> </div>
+<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> </div>
+<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> </div>
+<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> </div>
+<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"><a class="line" href="classxb_1_1xbXBase.html"> 123</a></span><span class="keyword">class </span>XBDLLEXPORT <a class="code hl_class" href="classxb_1_1xbXBase.html">xbXBase</a> : <span class="keyword">public</span> <a class="code hl_class" href="classxb_1_1xbTblMgr.html">xbTblMgr</a>{</div>
+<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <a class="code hl_variable" href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xbXBase</a>();</div>
+<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <a class="code hl_class" href="classxb_1_1xbXBase.html">~xbXBase</a>();</div>
+<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> xbInt16 CloseAllTables();</div>
+<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> xbInt16 CreateFqn( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sDirIn, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sNameIn, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sExtIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFqfnOut );</div>
+<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <span class="keywordtype">void</span> DisableMsgLogging();</div>
+<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <span class="keywordtype">void</span> EnableMsgLogging ();</div>
+<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> xbInt16 FlushLog();</div>
+<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> </div>
+<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="comment">//const xbString &amp;GetLogDirectory () const;</span></div>
+<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="comment">//const xbString &amp;GetLogFileName () const;</span></div>
+<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;GetLogFqFileName() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetLogStatus () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> </div>
+<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"><a class="line" href="classxb_1_1xbXBase.html#aa957eb502ecd076e5df89e7415cb094b"> 139</a></span> xbInt16 <a class="code hl_function" href="classxb_1_1xbXBase.html#aa957eb502ecd076e5df89e7415cb094b">OpenHighestVersion</a>( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sAlias, <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> &amp;dbf, <span class="keywordtype">int</span> dummy );</div>
+<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> xbInt16 OpenHighestVersion( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sAlias, <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> **dbf );</div>
+<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> </div>
+<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> * Open( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, xbInt16 &amp;iRc );</div>
+<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> * Open( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sAlias, xbInt16 iOpenMode, xbInt16 iShareMode, xbInt16 iVersion, xbInt16 &amp;iRc );</div>
+<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> </div>
+<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="comment">// next three methods moved to xbssv for consistency</span></div>
+<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <span class="comment">// void SetLogDirectory( const xbString &amp;sLogFileDirectory );</span></div>
+<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="comment">// void SetLogFileName ( const xbString &amp;sLogFileName );</span></div>
+<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="keywordtype">void</span> SetLogSize ( <span class="keywordtype">size_t</span> lSize );</div>
+<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"><a class="line" href="classxb_1_1xbXBase.html#aedb4c2aa2c90e4529915198a2305b355"> 149</a></span> <span class="keywordtype">size_t</span> <a class="code hl_function" href="classxb_1_1xbXBase.html#aedb4c2aa2c90e4529915198a2305b355">GetLogSize</a> () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> </div>
+<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> xbInt16 WriteLogMessage( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sLogMessage, xbInt16 iOutputOpt = 0 );</div>
+<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> xbInt16 WriteLogBytes ( xbUInt32 lCnt, <span class="keyword">const</span> <span class="keywordtype">char</span> *p );</div>
+<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> </div>
+<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="keywordtype">void</span> xbSleep ( xbInt32 lMillisecs );</div>
+<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> </div>
+<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> xbInt16 GetCmdLineOpt ( xbInt32 lArgc, <span class="keywordtype">char</span> **argv, <span class="keyword">const</span> <span class="keywordtype">char</span> *sOptRqst, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sParmOut );</div>
+<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> xbInt16 GetCmdLineOpt ( xbInt32 lArgc, <span class="keywordtype">char</span> **argv, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOptRqst, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sParmOut );</div>
+<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> </div>
+<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> </div>
+<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> <span class="comment">/* xbase functions */</span></div>
+<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span><span class="preprocessor"> #ifdef XB_FUNCTION_SUPPORT</span></div>
+<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> xbInt16 ABS( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dOut );</div>
+<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> xbInt16 ALLTRIM( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
+<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> xbInt16 ASC( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dAscOut );</div>
+<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> xbInt16 AT( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sSrchFor, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sBase, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dPos );</div>
+<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> xbInt16 CDOW( <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dInDate, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOutDow );</div>
+<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> xbInt16 CHR( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dAsciCd, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
+<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> xbInt16 CMONTH( <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dInDate, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOutMonth );</div>
+<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> xbInt16 CTOD( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sInDate, <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dOutDate );</div>
+<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> xbInt16 DATE( <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dOutDate );</div>
+<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> xbInt16 DAY( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dInDate, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dOutDay );</div>
+<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> xbInt16 DEL( <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> * d, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut, xbInt16 iRecBufSw = 0 );</div>
+<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> xbInt16 DELETED( <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> * d, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bOut, xbInt16 iRecBufSw = 0 );</div>
+<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> xbInt16 DESCEND( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
+<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> xbInt16 DESCEND( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dInDate, <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dOutDate );</div>
+<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> xbInt16 DESCEND( <span class="keyword">const</span> <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dsOut );</div>
+<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> xbInt16 DOW( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;sInDate, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dDowOut );</div>
+<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> xbInt16 DTOC( <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dInDate, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOutFmtDate );</div>
+<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> xbInt16 DTOS( <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dInDate, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOutFmtDate );</div>
+<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> xbInt16 EXP( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dOut );</div>
+<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> xbInt16 IIF( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bResult, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTrueResult, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFalseResult, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sResult );</div>
+<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> xbInt16 INT( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dOut );</div>
+<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> xbInt16 ISALPHA( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bResult );</div>
+<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> xbInt16 ISLOWER( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bResult );</div>
+<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> xbInt16 ISUPPER( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bResult );</div>
+<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> xbInt16 LEFT( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, xbUInt32 lCharCnt, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
+<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> xbInt16 LEN( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dLen );</div>
+<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> xbInt16 LOG( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dOut );</div>
+<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> xbInt16 LOWER( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
+<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> xbInt16 LTRIM( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp; sOut );</div>
+<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> xbInt16 MAX( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn1, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn2, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dOut );</div>
+<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> xbInt16 MIN( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn1, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn2, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dOut );</div>
+<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> xbInt16 MONTH( <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dInDate, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dMonthOut );</div>
+<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> xbInt16 RECCOUNT( <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> * d, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dRecOut );</div>
+<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> xbInt16 RECNO( <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> * d, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dRecOut );</div>
+<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> xbInt16 REPLICATE( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, xbUInt32 ulRepCnt, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
+<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> xbInt16 RIGHT( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, xbUInt32 iCharCnt, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
+<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> xbInt16 RTRIM( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
+<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> xbInt16 SPACE( xbInt32 lCnt, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
+<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> xbInt16 SQRT( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dBase, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dSqrRt );</div>
+<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> xbInt16 STOD( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;sDateOut );</div>
+<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> xbInt16 STR( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
+<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> xbInt16 STR( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, xbUInt32 ulLen, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
+<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> xbInt16 STR( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, xbUInt32 ulLen, xbUInt32 ulDec, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
+<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> xbInt16 STR( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, xbUInt32 ulLen, xbUInt32 ulDec, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sPadChar, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
+<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> xbInt16 STRZERO( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, xbUInt32 ulLen, xbUInt32 ulDec, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
+<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> xbInt16 SUBSTR( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, xbUInt32 ulStartPos, xbUInt32 ulLen, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
+<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> xbInt16 TRIM( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
+<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> xbInt16 UPPER( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
+<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> xbInt16 VAL( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dOut );</div>
+<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> xbInt16 YEAR( <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dInDate, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dOutYear );</div>
+<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> </div>
+<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"><a class="line" href="classxb_1_1xbXBase.html#a86a53ce3efbf910996df0f853f1c0add"> 215</a></span> <span class="keyword">friend</span> <span class="keyword">class </span>xbBcd;</div>
+<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"><a class="line" href="classxb_1_1xbXBase.html#a3c3e5617be811d732472fe2cc8fb18cc"> 216</a></span> <span class="keyword">friend</span> <span class="keyword">class </span>xbExp;</div>
+<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> </div>
+<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span><span class="preprocessor"> #ifdef XB_BLOCKREAD_SUPPORT</span></div>
+<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> <span class="keyword">friend</span> <span class="keyword">class </span>xbBlockRead;</div>
+<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span><span class="preprocessor"> #endif </span><span class="comment">// XB_BLOCKREAD_SUPPORT</span></div>
+<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> </div>
+<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> </div>
+<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"><a class="line" href="classxb_1_1xbXBase.html#ae52e53340593b4253936c1372ec15ee1"> 223</a></span> xbInt16 <a class="code hl_function" href="classxb_1_1xbXBase.html#ae52e53340593b4253936c1372ec15ee1">GetFunctionInfo</a>( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sExpLine, <span class="keywordtype">char</span> &amp;cReturnType, xbInt16 &amp;iReturnLenCalc, xbInt32 &amp;lReturnLenVal ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> <span class="keyword">static</span> xbInt16 xbMemcmp( <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *s1, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *s2, <span class="keywordtype">size_t</span> n );</div>
+<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> </div>
+<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> </div>
+<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span><span class="preprocessor">#ifdef XB_LOGGING_SUPPORT</span></div>
+<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> <a class="code hl_variable" href="namespacexb.html#a4a31fbe9110c9e55495ce71e642d785c">xbLog</a> *xLog;</div>
+<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> </div>
+<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span>};</div>
+<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> </div>
+<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span>} <span class="comment">/* namespace xb */</span></div>
+<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_DBLIST_H__ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="aclassxb_1_1xbDate_html"><div class="ttname"><a href="classxb_1_1xbDate.html">xb::xbDate</a></div><div class="ttdoc">xbDate class.</div><div class="ttdef"><b>Definition:</b> xbdate.h:62</div></div>
+<div class="ttc" id="aclassxb_1_1xbDbf_html"><div class="ttname"><a href="classxb_1_1xbDbf.html">xb::xbDbf</a></div><div class="ttdoc">Base class for handling dbf files/tables.</div><div class="ttdef"><b>Definition:</b> xbdbf.h:150</div></div>
+<div class="ttc" id="aclassxb_1_1xbString_html"><div class="ttname"><a href="classxb_1_1xbString.html">xb::xbString</a></div><div class="ttdoc">Class for handling string data.</div><div class="ttdef"><b>Definition:</b> xbstring.h:50</div></div>
+<div class="ttc" id="aclassxb_1_1xbTblMgr_html"><div class="ttname"><a href="classxb_1_1xbTblMgr.html">xb::xbTblMgr</a></div><div class="ttdef"><b>Definition:</b> xbtblmgr.h:39</div></div>
+<div class="ttc" id="aclassxb_1_1xbXBase_html"><div class="ttname"><a href="classxb_1_1xbXBase.html">xb::xbXBase</a></div><div class="ttdoc">xbXbase class.</div><div class="ttdef"><b>Definition:</b> xbxbase.h:123</div></div>
+<div class="ttc" id="aclassxb_1_1xbXBase_html_aa957eb502ecd076e5df89e7415cb094b"><div class="ttname"><a href="classxb_1_1xbXBase.html#aa957eb502ecd076e5df89e7415cb094b">xb::xbXBase::OpenHighestVersion</a></div><div class="ttdeci">xbInt16 OpenHighestVersion(const xbString &amp;sTableName, const xbString &amp;sAlias, xbDbf &amp;dbf, int dummy)</div></div>
+<div class="ttc" id="aclassxb_1_1xbXBase_html_ae52e53340593b4253936c1372ec15ee1"><div class="ttname"><a href="classxb_1_1xbXBase.html#ae52e53340593b4253936c1372ec15ee1">xb::xbXBase::GetFunctionInfo</a></div><div class="ttdeci">xbInt16 GetFunctionInfo(const xbString &amp;sExpLine, char &amp;cReturnType, xbInt16 &amp;iReturnLenCalc, xbInt32 &amp;lReturnLenVal) const</div></div>
+<div class="ttc" id="aclassxb_1_1xbXBase_html_aedb4c2aa2c90e4529915198a2305b355"><div class="ttname"><a href="classxb_1_1xbXBase.html#aedb4c2aa2c90e4529915198a2305b355">xb::xbXBase::GetLogSize</a></div><div class="ttdeci">size_t GetLogSize() const</div></div>
+<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
+<div class="ttc" id="anamespacexb_html_a25f47b226ce924a5c78f97989b0744a2"><div class="ttname"><a href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xb::xbDouble</a></div><div class="ttdeci">double xbDouble</div><div class="ttdef"><b>Definition:</b> xbtypes.h:23</div></div>
+<div class="ttc" id="anamespacexb_html_a4a31fbe9110c9e55495ce71e642d785c"><div class="ttname"><a href="namespacexb.html#a4a31fbe9110c9e55495ce71e642d785c">xb::xbLog</a></div><div class="ttdeci">class XBDLLEXPORT xbLog</div><div class="ttdef"><b>Definition:</b> xbxbase.h:26</div></div>
+<div class="ttc" id="anamespacexb_html_a97858ddeb1c4b0100f3edc1a46d3a8b0"><div class="ttname"><a href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xb::xbXBase</a></div><div class="ttdeci">class XBDLLEXPORT xbXBase</div><div class="ttdef"><b>Definition:</b> xbssv.h:27</div></div>
+<div class="ttc" id="anamespacexb_html_ab1a750481dd487f0d384aa1d200dff0f"><div class="ttname"><a href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xb::xbBool</a></div><div class="ttdeci">short int xbBool</div><div class="ttdef"><b>Definition:</b> xbtypes.h:24</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/docs/doxygen/latex/Makefile b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/Makefile
index 877c9cc..877c9cc 100644
--- a/docs/doxygen/latex/Makefile
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/Makefile
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/annotated.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/annotated.tex
new file mode 100644
index 0000000..c670b75
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/annotated.tex
@@ -0,0 +1,13 @@
+\doxysection{Data Structures}
+Here are the data structures with brief descriptions\+:\begin{DoxyCompactList}
+\item\contentsline{section}{\mbox{\hyperlink{structsFldMap}{s\+Fld\+Map}} }{\pageref{structsFldMap}}{}
+\item\contentsline{section}{\mbox{\hyperlink{classxb_1_1xbDate}{xb\+::xb\+Date}} \\*Xb\+Date class }{\pageref{classxb_1_1xbDate}}{}
+\item\contentsline{section}{\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+::xb\+Dbf}} \\*Base class for handling dbf files/tables }{\pageref{classxb_1_1xbDbf}}{}
+\item\contentsline{section}{\mbox{\hyperlink{classxb_1_1xbFile}{xb\+::xb\+File}} \\*Class for handling low level file I/O }{\pageref{classxb_1_1xbFile}}{}
+\item\contentsline{section}{\mbox{\hyperlink{structxb_1_1xbSchema}{xb\+::xb\+Schema}} \\*Schema used for defining tables with Create\+Table methods }{\pageref{structxb_1_1xbSchema}}{}
+\item\contentsline{section}{\mbox{\hyperlink{classxb_1_1xbSsv}{xb\+::xb\+Ssv}} \\*Class for handling shared system variables }{\pageref{classxb_1_1xbSsv}}{}
+\item\contentsline{section}{\mbox{\hyperlink{classxb_1_1xbString}{xb\+::xb\+String}} \\*Class for handling string data }{\pageref{classxb_1_1xbString}}{}
+\item\contentsline{section}{\mbox{\hyperlink{structxb_1_1xbTblList}{xb\+::xb\+Tbl\+List}} }{\pageref{structxb_1_1xbTblList}}{}
+\item\contentsline{section}{\mbox{\hyperlink{classxb_1_1xbTblMgr}{xb\+::xb\+Tbl\+Mgr}} }{\pageref{classxb_1_1xbTblMgr}}{}
+\item\contentsline{section}{\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+::xb\+XBase}} \\*Xb\+Xbase class }{\pageref{classxb_1_1xbXBase}}{}
+\end{DoxyCompactList}
diff --git a/docs/doxygen/latex/checkndx_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/checkndx_8cpp.tex
index d2155ae..d2155ae 100644
--- a/docs/doxygen/latex/checkndx_8cpp.tex
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/checkndx_8cpp.tex
diff --git a/docs/doxygen/latex/classxb_1_1xbDate.eps b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbDate.eps
index 80ed36f..80ed36f 100644
--- a/docs/doxygen/latex/classxb_1_1xbDate.eps
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbDate.eps
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbDate.pdf b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbDate.pdf
new file mode 100644
index 0000000..566204d
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbDate.pdf
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbDate.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbDate.tex
new file mode 100644
index 0000000..a7a9988
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbDate.tex
@@ -0,0 +1,1149 @@
+\hypertarget{classxb_1_1xbDate}{}\doxysection{xb\+::xb\+Date Class Reference}
+\label{classxb_1_1xbDate}\index{xb::xbDate@{xb::xbDate}}
+
+
+\mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} class.
+
+
+
+
+{\ttfamily \#include $<$xbdate.\+h$>$}
+
+Inheritance diagram for xb\+::xb\+Date\+:\begin{figure}[H]
+\begin{center}
+\leavevmode
+\includegraphics[height=2.000000cm]{classxb_1_1xbDate}
+\end{center}
+\end{figure}
+\doxysubsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\hyperlink{classxb_1_1xbDate_ab3150e7db0ab5db10a07d748b55465eb}{xb\+Date}} ()
+\begin{DoxyCompactList}\small\item\em Constructor. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbDate_ac8a4d9330221a3daee21b3c28c1d9719}{xb\+Date}} (const char $\ast$Date8)
+\begin{DoxyCompactList}\small\item\em Constructor. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbDate_acf4546f5681735ede18210f60bab68d4}{xb\+Date}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&Date8)
+\begin{DoxyCompactList}\small\item\em Constructor. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbDate_a7ab727a7ec184a086ad36ef83b948170}{xb\+Date}} (xb\+Int32 l\+Jul\+Date)
+\begin{DoxyCompactList}\small\item\em Constructor. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbDate_a8dfc827b466be3c5e3def599277dfa43}{xb\+Date}} (xb\+UInt16 i\+Init)
+\begin{DoxyCompactList}\small\item\em Constructor. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbDate_a05c9680c6eb9fe07ecf13a189b596c37}{$\sim$xb\+Date}} ()
+\begin{DoxyCompactList}\small\item\em Destructor. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbDate_a2e33ad9415c32e820e08fd8084198690}{operator=}} (const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&d)
+\begin{DoxyCompactList}\small\item\em Set operator=. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbDate_a947ba156d04fe063aaa4c9964ae5d163}{operator+=}} (xb\+Int32 i)
+\begin{DoxyCompactList}\small\item\em operator += \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbDate_a4a8f207d759540114373f5e9d6d375f7}{operator-\/=}} (xb\+Int32 i)
+\begin{DoxyCompactList}\small\item\em operator -\/= \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbDate_a1c7d9e3718c43df18b21646072c8605e}{operator++}} (xb\+Int32 i)
+\begin{DoxyCompactList}\small\item\em operator ++ \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbDate_ae2b33dfee60d324916d833b2098b5a6b}{operator-\/-\/}} (xb\+Int32 i)
+\begin{DoxyCompactList}\small\item\em operator -- \end{DoxyCompactList}\item
+xb\+Int32 \mbox{\hyperlink{classxb_1_1xbDate_a3f3a8802c96098c85aa8d0e19717a979}{operator-\/}} (const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&) const
+\begin{DoxyCompactList}\small\item\em operator -\/ \end{DoxyCompactList}\item
+const char $\ast$ \mbox{\hyperlink{classxb_1_1xbDate_a73ff5c037046ac0a0bb7d73f74e25cbb}{operator-\/}} (xb\+Int32 i)
+\begin{DoxyCompactList}\small\item\em operator -\/ \end{DoxyCompactList}\item
+const char $\ast$ \mbox{\hyperlink{classxb_1_1xbDate_ad09609bf78cf038886a4f9cd19423f9c}{operator+}} (xb\+Int32 i)
+\begin{DoxyCompactList}\small\item\em operator + \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbDate_aaaf98c1a672066021895f0953b6e94d0}{operator==}} (const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&) const
+\begin{DoxyCompactList}\small\item\em operator == \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbDate_ac3aaf8997fc0c36676085e7741f33a8a}{operator!=}} (const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&) const
+\begin{DoxyCompactList}\small\item\em operator != \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbDate_a11f09d97ed527e7ef00ba6f17b9fb02c}{operator$<$}} (const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&) const
+\begin{DoxyCompactList}\small\item\em operator \texorpdfstring{$<$}{<} \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbDate_a744031c4031d6ec4595d34acbd1c5860}{operator$>$}} (const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&) const
+\begin{DoxyCompactList}\small\item\em \texorpdfstring{$>$}{>} \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbDate_a6d8fa4df4664f3fd8d4cc15e77f6d046}{operator$<$=}} (const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&) const
+\begin{DoxyCompactList}\small\item\em operator \texorpdfstring{$<$}{<}= \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbDate_a1d81959ea55440588068ea7f82617c99}{operator$>$=}} (const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&) const
+\begin{DoxyCompactList}\small\item\em operator \texorpdfstring{$>$}{>}= \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDate_a9df58caa54105c489c314785c457e8cb}{Calc\+Rolling\+Century\+For\+Year}} (xb\+Int16 year) const
+\begin{DoxyCompactList}\small\item\em Calculate century for a given year. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDate_a38b2c5285c69ed65e94ece6c22dafde0}{Century\+Of}} () const
+\begin{DoxyCompactList}\small\item\em Get century for date. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDate_a9fc29730b66cddfbb58c69992a99cc7c}{Char\+Day\+Of}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Out\+Char\+Day)
+\begin{DoxyCompactList}\small\item\em Get the day of the week. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDate_afffc84f02bd421335ff8ebe9fb3db0ac}{Char\+Month\+Of}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Out\+Char\+Month)
+\begin{DoxyCompactList}\small\item\em Get the month from the date. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbDate_a367f66ef0c03c1747c12a18784554ccb}{Date\+Is\+Valid}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Date8) const
+\begin{DoxyCompactList}\small\item\em Check a date for valid data. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDate_ad6417a900ce64a46f8909c0c7a2ddea2}{Day\+Of}} (xb\+Int16 i\+Format) const
+\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDate_abb1eb4b0394e4a67aadab15779b1b8c5}{CTOD}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Ctod\+In\+Date)
+\begin{DoxyCompactList}\small\item\em Format MM/\+DD/\+YY date. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDate_a01de44dc869f7db99f33046fc91f2c6a}{Format\+Date}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Fmt\+In, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Fmt\+Out)
+\item
+const char $\ast$ \mbox{\hyperlink{classxb_1_1xbDate_ab43a5d8d929767c0ffdd722972bb8cc0}{Str}} () const
+\begin{DoxyCompactList}\small\item\em Return the date value. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbDate_af2bd33a72448e2c5ee00d8b711dc5d95}{Is\+Leap\+Year}} (xb\+Int16 i\+Year) const
+\begin{DoxyCompactList}\small\item\em Determine if date is a leap year. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbDate_a5f8051c31b29244265e8f26ac3547b9b}{Is\+Leap\+Year}} () const
+\begin{DoxyCompactList}\small\item\em Determine if date is a leap year. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbDate_a611a64b14ff89ad3c20b34081ea1e658}{Is\+Null}} () const
+\begin{DoxyCompactList}\small\item\em Determine if date is null date. \end{DoxyCompactList}\item
+xb\+Int32 \mbox{\hyperlink{classxb_1_1xbDate_a1ee3377d4ead9d31099eee539d9b13a7}{Julian\+Days}} () const
+\begin{DoxyCompactList}\small\item\em Calculate julian days for a given date. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDate_a9d28b2a46d8aaa284b92f44eeb96b2ff}{Jul\+To\+Date8}} (xb\+Int32 l\+Jul\+Date)
+\begin{DoxyCompactList}\small\item\em Convert the number of julian days to gregorian date. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDate_a15847866bb7642aa42bc254e0cf2038a}{Last\+Day\+Of\+Month}} ()
+\begin{DoxyCompactList}\small\item\em Set the date to the last day of month for a given date. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDate_a08bd84c67e1119d8c5c1748cd89d092e}{Month\+Of}} () const
+\begin{DoxyCompactList}\small\item\em Return the month for the date. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDate_a4b0cde152b5de0f7d26608d1445110b6}{Set}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&Date8)
+\begin{DoxyCompactList}\small\item\em Set the date. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDate_a40ba54a58d64cf56266f020f91584192}{Sysdate}} ()
+\begin{DoxyCompactList}\small\item\em Set the date equal to the system date. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDate_a31057dfaa36389a16e40e3db82c46262}{Year\+Of}} () const
+\begin{DoxyCompactList}\small\item\em Returns the year of the date. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}{Display\+Error}} (xb\+Int16 Error\+Code) const
+\begin{DoxyCompactList}\small\item\em Display error message on console for a given error number. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a6fbb9c3a550ab0b3378f9586a57791d2}{Get\+Default\+Date\+Format}} () const
+\begin{DoxyCompactList}\small\item\em Get the default date format. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}{Get\+Data\+Directory}} () const
+\begin{DoxyCompactList}\small\item\em Get the current data directory. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_abfaeef85935331073d213465bb362a61}{Get\+Temp\+Directory}} () const
+\begin{DoxyCompactList}\small\item\em Get the current temp directory. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}{Get\+Home\+Dir}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Home\+Dir\+Out)
+\begin{DoxyCompactList}\small\item\em Get home directory. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}{Get\+Endian\+Type}} () const
+\begin{DoxyCompactList}\small\item\em Get the Endian type. \end{DoxyCompactList}\item
+const char $\ast$ \mbox{\hyperlink{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}{Get\+Error\+Message}} (xb\+Int16 Error\+Code) const
+\begin{DoxyCompactList}\small\item\em Get an error message. \end{DoxyCompactList}\item
+char \mbox{\hyperlink{classxb_1_1xbSsv_a63cee13b473ee13970e93b11837b9e35}{Get\+Path\+Separator}} () const
+\begin{DoxyCompactList}\small\item\em Get the OS dependent path separator. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}{Set\+Data\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Data\+Directory)
+\begin{DoxyCompactList}\small\item\em Set the data directory. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}{Set\+Default\+Date\+Format}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Default\+Date\+Format)
+\begin{DoxyCompactList}\small\item\em Set the default date format. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a17c229a20ef9ab4034df8f9cd657adb2}{Set\+Temp\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Temp\+Directory)
+\begin{DoxyCompactList}\small\item\em Set the temp directory. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}{Bit\+Set}} (unsigned char c, xb\+Int16 i\+Bit\+No) const
+\begin{DoxyCompactList}\small\item\em Check a bit in a one byte field and see if it is set. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}{Bit\+Dump}} (unsigned char c) const
+\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}{Bit\+Dump}} (char c) const
+\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}{Get\+Default\+Auto\+Commit}} () const
+\begin{DoxyCompactList}\small\item\em Get the default auto commit setting. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}{Set\+Default\+Auto\+Commit}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Default\+Auto\+Commit)
+\begin{DoxyCompactList}\small\item\em Set the default auto commit. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}{Get\+Log\+Directory}} () const
+\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}{Get\+Log\+File\+Name}} () const
+\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}{Set\+Log\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Log\+Directory)
+\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a7f05738e7dfd759e89990242ef503544}{Set\+Log\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Log\+File\+Name)
+\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}{Get\+Multi\+User}} () const
+\begin{DoxyCompactList}\small\item\em Get the multi user setting. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}{Set\+Multi\+User}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Multi\+User)
+\begin{DoxyCompactList}\small\item\em Get the multi user setting. \end{DoxyCompactList}\end{DoxyCompactItemize}
+\doxysubsection*{Static Public Attributes}
+\begin{DoxyCompactItemize}
+\item
+static const char $\ast$ \mbox{\hyperlink{classxb_1_1xbSsv_a6219f1b5e24ea12fe158cd5aea56988e}{Error\+Code\+Text}} \mbox{[}$\,$\mbox{]}
+\end{DoxyCompactItemize}
+\doxysubsection*{Protected Member Functions}
+\begin{DoxyCompactItemize}
+\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a904ec348fd029d4a76e72b8fde636108}{Set\+Endian\+Type}} ()
+\begin{DoxyCompactList}\small\item\em Set the endian type. \end{DoxyCompactList}\end{DoxyCompactItemize}
+\doxysubsection*{Static Protected Attributes}
+\begin{DoxyCompactItemize}
+\item
+static xb\+Int16 \mbox{\hyperlink{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}{i\+Endian\+Type}} = 0
+\item
+static \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \mbox{\hyperlink{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}{s\+Null\+String}} = \char`\"{}\char`\"{}
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+\mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} class.
+
+This \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} class handles two type of date values\+:~\newline
+
+
+1) Gregorian dates with a format of CCYYMMDD. This is how dates are stored in dbf files.~\newline
+ 2) Julian dates calculated as the number of days since 1901-\/01-\/01 + 1721425.~\newline
+
+
+Leap Years\+: The routines in the class support both leap years (one every four years) and leap centuries (one every four hundred years.)
+
+A leap year is a year having 366 days, which can be evenly divisible by 4 and not by 100.~\newline
+ Leap centuries are years which are evenly divisible by 400.~\newline
+
+
+From a programming perspective, Julian dates are useful for date arithmetic, determining the difference between two dates or calculating a future or past date.~\newline
+
+
+To determine the difference between two dates, convert both dates to a Julian date and subtract one from the other.~\newline
+
+
+To calculate a future or past date, convert the base date to a Julian date, add (or subtract) the number of days necessary to (from) it and convert the julian date back to a Gregorian date.
+
+\doxysubsection{Constructor \& Destructor Documentation}
+\mbox{\Hypertarget{classxb_1_1xbDate_ab3150e7db0ab5db10a07d748b55465eb}\label{classxb_1_1xbDate_ab3150e7db0ab5db10a07d748b55465eb}}
+\index{xb::xbDate@{xb::xbDate}!xbDate@{xbDate}}
+\index{xbDate@{xbDate}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{xbDate()}{xbDate()}\hspace{0.1cm}{\footnotesize\ttfamily [1/5]}}
+{\footnotesize\ttfamily xb\+::xb\+Date\+::xb\+Date (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+
+
+Constructor.
+
+\mbox{\Hypertarget{classxb_1_1xbDate_ac8a4d9330221a3daee21b3c28c1d9719}\label{classxb_1_1xbDate_ac8a4d9330221a3daee21b3c28c1d9719}}
+\index{xb::xbDate@{xb::xbDate}!xbDate@{xbDate}}
+\index{xbDate@{xbDate}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{xbDate()}{xbDate()}\hspace{0.1cm}{\footnotesize\ttfamily [2/5]}}
+{\footnotesize\ttfamily xb\+::xb\+Date\+::xb\+Date (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s\+Date8\+In }\end{DoxyParamCaption})}
+
+
+
+Constructor.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Date8\+In} & -\/ Input date. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbDate_acf4546f5681735ede18210f60bab68d4}\label{classxb_1_1xbDate_acf4546f5681735ede18210f60bab68d4}}
+\index{xb::xbDate@{xb::xbDate}!xbDate@{xbDate}}
+\index{xbDate@{xbDate}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{xbDate()}{xbDate()}\hspace{0.1cm}{\footnotesize\ttfamily [3/5]}}
+{\footnotesize\ttfamily xb\+::xb\+Date\+::xb\+Date (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Date8\+In }\end{DoxyParamCaption})}
+
+
+
+Constructor.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Date8\+In} & -\/ Input date. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbDate_a7ab727a7ec184a086ad36ef83b948170}\label{classxb_1_1xbDate_a7ab727a7ec184a086ad36ef83b948170}}
+\index{xb::xbDate@{xb::xbDate}!xbDate@{xbDate}}
+\index{xbDate@{xbDate}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{xbDate()}{xbDate()}\hspace{0.1cm}{\footnotesize\ttfamily [4/5]}}
+{\footnotesize\ttfamily xb\+::xb\+Date\+::xb\+Date (\begin{DoxyParamCaption}\item[{xb\+Int32}]{l\+Jul\+Date }\end{DoxyParamCaption})}
+
+
+
+Constructor.
+
+
+\begin{DoxyParams}{Parameters}
+{\em l\+Jul\+Date} & -\/ Input julian date. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbDate_a8dfc827b466be3c5e3def599277dfa43}\label{classxb_1_1xbDate_a8dfc827b466be3c5e3def599277dfa43}}
+\index{xb::xbDate@{xb::xbDate}!xbDate@{xbDate}}
+\index{xbDate@{xbDate}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{xbDate()}{xbDate()}\hspace{0.1cm}{\footnotesize\ttfamily [5/5]}}
+{\footnotesize\ttfamily xb\+::xb\+Date\+::xb\+Date (\begin{DoxyParamCaption}\item[{xb\+UInt16}]{i\+Init }\end{DoxyParamCaption})}
+
+
+
+Constructor.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Init\+Opt} & -\/ Constructor to use to initialize date static variables Called by the main xb\+Xbase\+::xb\+XBase constructor \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbDate_a05c9680c6eb9fe07ecf13a189b596c37}\label{classxb_1_1xbDate_a05c9680c6eb9fe07ecf13a189b596c37}}
+\index{xb::xbDate@{xb::xbDate}!````~xbDate@{$\sim$xbDate}}
+\index{````~xbDate@{$\sim$xbDate}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{$\sim$xbDate()}{~xbDate()}}
+{\footnotesize\ttfamily xb\+::xb\+Date\+::$\sim$xb\+Date (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+
+
+Destructor.
+
+
+
+\doxysubsection{Member Function Documentation}
+\mbox{\Hypertarget{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}\label{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}}
+\index{xb::xbDate@{xb::xbDate}!BitDump@{BitDump}}
+\index{BitDump@{BitDump}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{BitDump()}{BitDump()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Bit\+Dump (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}\label{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}}
+\index{xb::xbDate@{xb::xbDate}!BitDump@{BitDump}}
+\index{BitDump@{BitDump}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{BitDump()}{BitDump()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Bit\+Dump (\begin{DoxyParamCaption}\item[{unsigned char}]{c }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}\label{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}}
+\index{xb::xbDate@{xb::xbDate}!BitSet@{BitSet}}
+\index{BitSet@{BitSet}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{BitSet()}{BitSet()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Ssv\+::\+Bit\+Set (\begin{DoxyParamCaption}\item[{unsigned char}]{c, }\item[{xb\+Int16}]{i\+Bit\+No }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Check a bit in a one byte field and see if it is set.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c} & One byte char field to examine. \\
+\hline
+{\em i\+Bit\+No} & which bit to examine. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+xb\+True Bit is set~\newline
+ xb\+False Bit is not set
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDate_a9df58caa54105c489c314785c457e8cb}\label{classxb_1_1xbDate_a9df58caa54105c489c314785c457e8cb}}
+\index{xb::xbDate@{xb::xbDate}!CalcRollingCenturyForYear@{CalcRollingCenturyForYear}}
+\index{CalcRollingCenturyForYear@{CalcRollingCenturyForYear}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{CalcRollingCenturyForYear()}{CalcRollingCenturyForYear()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Date\+::\+Calc\+Rolling\+Century\+For\+Year (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Calc\+Year }\end{DoxyParamCaption}) const}
+
+
+
+Calculate century for a given year.
+
+This routine calculates a century for a given year. It uses an 80/20 rolling date window to calculate the century.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Calc\+Year} & -\/ Two digit year to calculate a century for. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Century calculated for the two digit year.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDate_a38b2c5285c69ed65e94ece6c22dafde0}\label{classxb_1_1xbDate_a38b2c5285c69ed65e94ece6c22dafde0}}
+\index{xb::xbDate@{xb::xbDate}!CenturyOf@{CenturyOf}}
+\index{CenturyOf@{CenturyOf}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{CenturyOf()}{CenturyOf()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Date\+::\+Century\+Of (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+
+
+Get century for date.
+
+\begin{DoxyReturn}{Returns}
+the century from the valid date. or 0 for a null date.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDate_a9fc29730b66cddfbb58c69992a99cc7c}\label{classxb_1_1xbDate_a9fc29730b66cddfbb58c69992a99cc7c}}
+\index{xb::xbDate@{xb::xbDate}!CharDayOf@{CharDayOf}}
+\index{CharDayOf@{CharDayOf}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{CharDayOf()}{CharDayOf()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Date\+::\+Char\+Day\+Of (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Out\+Char\+Day }\end{DoxyParamCaption})}
+
+
+
+Get the day of the week.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Out\+Char\+Day} & -\/ Output character day of week (Sun-\/\+Sat). \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+XB\+\_\+\+INVALID\+\_\+\+DATE~\newline
+XB\+\_\+\+NO\+\_\+\+ERROR
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDate_afffc84f02bd421335ff8ebe9fb3db0ac}\label{classxb_1_1xbDate_afffc84f02bd421335ff8ebe9fb3db0ac}}
+\index{xb::xbDate@{xb::xbDate}!CharMonthOf@{CharMonthOf}}
+\index{CharMonthOf@{CharMonthOf}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{CharMonthOf()}{CharMonthOf()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Date\+::\+Char\+Month\+Of (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Out\+Char\+Month }\end{DoxyParamCaption})}
+
+
+
+Get the month from the date.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Out\+Char\+Month} & -\/ Output character month. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+XB\+\_\+\+INVALID\+\_\+\+DATE~\newline
+XB\+\_\+\+NO\+\_\+\+ERROR
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDate_abb1eb4b0394e4a67aadab15779b1b8c5}\label{classxb_1_1xbDate_abb1eb4b0394e4a67aadab15779b1b8c5}}
+\index{xb::xbDate@{xb::xbDate}!CTOD@{CTOD}}
+\index{CTOD@{CTOD}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{CTOD()}{CTOD()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Date\+::\+CTOD (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Ctod\+In\+Date }\end{DoxyParamCaption})}
+
+
+
+Format MM/\+DD/\+YY date.
+
+This routine takes an MM/\+DD/\+YY format date as input and populates a date class with the appropriate YYYYMMDD data.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Ctod\+In\+Date} & -\/ MM/\+DD/\+YY formatted date as input. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+XB\+\_\+\+INVALID\+\_\+\+OPTION~\newline
+XB\+\_\+\+NO\+\_\+\+ERROR
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDate_a367f66ef0c03c1747c12a18784554ccb}\label{classxb_1_1xbDate_a367f66ef0c03c1747c12a18784554ccb}}
+\index{xb::xbDate@{xb::xbDate}!DateIsValid@{DateIsValid}}
+\index{DateIsValid@{DateIsValid}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{DateIsValid()}{DateIsValid()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Date\+::\+Date\+Is\+Valid (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Date\+In }\end{DoxyParamCaption}) const}
+
+
+
+Check a date for valid data.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Date\+In} & -\/ Date to check for valid formaat of CCYYMMDD. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+xb\+True -\/ Valid date.~\newline
+xb\+False -\/ Not a valid date.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDate_ad6417a900ce64a46f8909c0c7a2ddea2}\label{classxb_1_1xbDate_ad6417a900ce64a46f8909c0c7a2ddea2}}
+\index{xb::xbDate@{xb::xbDate}!DayOf@{DayOf}}
+\index{DayOf@{DayOf}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{DayOf()}{DayOf()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Date\+::\+Day\+Of (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Format }\end{DoxyParamCaption}) const}
+
+This routine returns the numeric day.
+\begin{DoxyParams}{Parameters}
+{\em i\+Format} & XB\+\_\+\+FMT\+\_\+\+WEEK Number of day in WEEK 0-\/6 ( Sat -\/ Fri )~\newline
+ XB\+\_\+\+FMT\+\_\+\+MONTH Number of day in MONTH 1-\/31~\newline
+ XB\+\_\+\+FMT\+\_\+\+YEAR Number of day in YEAR 1-\/366 \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+XB\+\_\+\+INVALID\+\_\+\+OPTION~\newline
+XB\+\_\+\+NO\+\_\+\+ERROR
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}\label{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}}
+\index{xb::xbDate@{xb::xbDate}!DisplayError@{DisplayError}}
+\index{DisplayError@{DisplayError}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{DisplayError()}{DisplayError()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Display\+Error (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Error\+Code }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Display error message on console for a given error number.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Error\+Code} & Error number to reference \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbDate_a01de44dc869f7db99f33046fc91f2c6a}\label{classxb_1_1xbDate_a01de44dc869f7db99f33046fc91f2c6a}}
+\index{xb::xbDate@{xb::xbDate}!FormatDate@{FormatDate}}
+\index{FormatDate@{FormatDate}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{FormatDate()}{FormatDate()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Date\+::\+Format\+Date (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Fmt\+In, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Out\+Fmt\+Date }\end{DoxyParamCaption})}
+
+This routine will reformat a date based on the format specifiers entered in s\+Fmt\+In. If no input format is specified, the routine will use the system default date format.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Fmt\+In} & -\/ A format specifier with the following paramaters\+:~\newline
+ \begin{DoxyVerb} 1) YYDDD - A julian date format
+ 2) YY or YYYY will print a 2 or 4 digit year
+ 3) M,MM,MMM or MMMM
+ M - one digit month if no leading zero
+ MM - two digit month, contains leading zero
+ MMM - Jan through Dec
+ MMMM - January through December
+ 4) D,DD,DDD or DDDD
+ D - one digit dayif no leading zero
+ DD - two digit day, contains leading zero
+ DDD - Sun through Sat (or julian if YYDDD)
+ DDDD - Sunday through Saturday
+\end{DoxyVerb}
+ \\
+\hline
+{\em s\+Out\+Fmt\+Date} & -\/ Reformatted output date. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+XB\+\_\+\+NO\+\_\+\+ERROR ~\newline
+~\newline
+ Format Examples\+:~\newline
+ MM/\+DD/\+YY~\newline
+ YYYY-\/\+MM-\/\+DD~\newline
+ DDDDDDDDDDD MMMMMMMMMMM DD,YYYY
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}\label{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}}
+\index{xb::xbDate@{xb::xbDate}!GetDataDirectory@{GetDataDirectory}}
+\index{GetDataDirectory@{GetDataDirectory}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{GetDataDirectory()}{GetDataDirectory()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Data\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the current data directory.
+
+\begin{DoxyReturn}{Returns}
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing the current data directory where the database files are stored.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}\label{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}}
+\index{xb::xbDate@{xb::xbDate}!GetDefaultAutoCommit@{GetDefaultAutoCommit}}
+\index{GetDefaultAutoCommit@{GetDefaultAutoCommit}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{GetDefaultAutoCommit()}{GetDefaultAutoCommit()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Ssv\+::\+Get\+Default\+Auto\+Commit (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the default auto commit setting.
+
+When auto commit is enabled, the library will automatically post any updates when moving off an updated record or closing files. If auto commit is disabled, the application program will need to explicitly update the tables using using dbf-\/\texorpdfstring{$>$}{>}Put() and dbf-\/\texorpdfstring{$>$}{>}Append\+Record().
+
+\begin{DoxyReturn}{Returns}
+xb\+True if auto commit is turned on~\newline
+ xb\+False is auto commit is turned off
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a6fbb9c3a550ab0b3378f9586a57791d2}\label{classxb_1_1xbSsv_a6fbb9c3a550ab0b3378f9586a57791d2}}
+\index{xb::xbDate@{xb::xbDate}!GetDefaultDateFormat@{GetDefaultDateFormat}}
+\index{GetDefaultDateFormat@{GetDefaultDateFormat}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{GetDefaultDateFormat()}{GetDefaultDateFormat()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Default\+Date\+Format (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the default date format.
+
+\begin{DoxyReturn}{Returns}
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing the default date format.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}\label{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}}
+\index{xb::xbDate@{xb::xbDate}!GetEndianType@{GetEndianType}}
+\index{GetEndianType@{GetEndianType}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{GetEndianType()}{GetEndianType()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Ssv\+::\+Get\+Endian\+Type (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the Endian type.
+
+\begin{DoxyReturn}{Returns}
+B -\/ Big endian~\newline
+ L -\/ Little endian~\newline
+
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}\label{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}}
+\index{xb::xbDate@{xb::xbDate}!GetErrorMessage@{GetErrorMessage}}
+\index{GetErrorMessage@{GetErrorMessage}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{GetErrorMessage()}{GetErrorMessage()}}
+{\footnotesize\ttfamily const char $\ast$ xb\+::xb\+Ssv\+::\+Get\+Error\+Message (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Error\+Code }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get an error message.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Error\+Code} & Error\+Code is the error number of description to be returned. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Returns a pointer to a string containing a text description for the error code.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}\label{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}}
+\index{xb::xbDate@{xb::xbDate}!GetHomeDir@{GetHomeDir}}
+\index{GetHomeDir@{GetHomeDir}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{GetHomeDir()}{GetHomeDir()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Get\+Home\+Dir (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Home\+Dir\+Out }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get home directory.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Home\+Dir\+Out} & -\/ Output home directory for current user. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}\label{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}}
+\index{xb::xbDate@{xb::xbDate}!GetLogDirectory@{GetLogDirectory}}
+\index{GetLogDirectory@{GetLogDirectory}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{GetLogDirectory()}{GetLogDirectory()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Log\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}\label{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}}
+\index{xb::xbDate@{xb::xbDate}!GetLogFileName@{GetLogFileName}}
+\index{GetLogFileName@{GetLogFileName}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{GetLogFileName()}{GetLogFileName()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Log\+File\+Name (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}\label{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}}
+\index{xb::xbDate@{xb::xbDate}!GetMultiUser@{GetMultiUser}}
+\index{GetMultiUser@{GetMultiUser}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{GetMultiUser()}{GetMultiUser()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Ssv\+::\+Get\+Multi\+User (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the multi user setting.
+
+\begin{DoxyReturn}{Returns}
+xb\+True -\/ Multi user mode turned on.~\newline
+ xb\+False -\/ Multi user mode turned off.~\newline
+
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a63cee13b473ee13970e93b11837b9e35}\label{classxb_1_1xbSsv_a63cee13b473ee13970e93b11837b9e35}}
+\index{xb::xbDate@{xb::xbDate}!GetPathSeparator@{GetPathSeparator}}
+\index{GetPathSeparator@{GetPathSeparator}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{GetPathSeparator()}{GetPathSeparator()}}
+{\footnotesize\ttfamily char xb\+::xb\+Ssv\+::\+Get\+Path\+Separator (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the OS dependent path separator.
+
+\begin{DoxyReturn}{Returns}
+Returns \textquotesingle{}\textbackslash{}\textquotesingle{} for windows environment, otherwise returns \textquotesingle{}/\textquotesingle{}.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_abfaeef85935331073d213465bb362a61}\label{classxb_1_1xbSsv_abfaeef85935331073d213465bb362a61}}
+\index{xb::xbDate@{xb::xbDate}!GetTempDirectory@{GetTempDirectory}}
+\index{GetTempDirectory@{GetTempDirectory}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{GetTempDirectory()}{GetTempDirectory()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Temp\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the current temp directory.
+
+\begin{DoxyReturn}{Returns}
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing the current data directory where the database files are stored.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDate_a5f8051c31b29244265e8f26ac3547b9b}\label{classxb_1_1xbDate_a5f8051c31b29244265e8f26ac3547b9b}}
+\index{xb::xbDate@{xb::xbDate}!IsLeapYear@{IsLeapYear}}
+\index{IsLeapYear@{IsLeapYear}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{IsLeapYear()}{IsLeapYear()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Date\+::\+Is\+Leap\+Year (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+
+
+Determine if date is a leap year.
+
+\begin{DoxyReturn}{Returns}
+xb\+True -\/ Is leapyear.~\newline
+ xb\+False -\/ Not a leap year.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDate_af2bd33a72448e2c5ee00d8b711dc5d95}\label{classxb_1_1xbDate_af2bd33a72448e2c5ee00d8b711dc5d95}}
+\index{xb::xbDate@{xb::xbDate}!IsLeapYear@{IsLeapYear}}
+\index{IsLeapYear@{IsLeapYear}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{IsLeapYear()}{IsLeapYear()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Date\+::\+Is\+Leap\+Year (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Year }\end{DoxyParamCaption}) const}
+
+
+
+Determine if date is a leap year.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Year} & -\/ Year to check for leap year status. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+xb\+True -\/ Is leapyear.~\newline
+ xb\+False -\/ Not a leap year.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDate_a611a64b14ff89ad3c20b34081ea1e658}\label{classxb_1_1xbDate_a611a64b14ff89ad3c20b34081ea1e658}}
+\index{xb::xbDate@{xb::xbDate}!IsNull@{IsNull}}
+\index{IsNull@{IsNull}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{IsNull()}{IsNull()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Date\+::\+Is\+Null (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+
+
+Determine if date is null date.
+
+\begin{DoxyReturn}{Returns}
+xb\+True -\/ If null date.~\newline
+ xb\+False -\/ Not a null date.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDate_a1ee3377d4ead9d31099eee539d9b13a7}\label{classxb_1_1xbDate_a1ee3377d4ead9d31099eee539d9b13a7}}
+\index{xb::xbDate@{xb::xbDate}!JulianDays@{JulianDays}}
+\index{JulianDays@{JulianDays}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{JulianDays()}{JulianDays()}}
+{\footnotesize\ttfamily xb\+Int32 xb\+::xb\+Date\+::\+Julian\+Days (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+
+
+Calculate julian days for a given date.
+
+\begin{DoxyReturn}{Returns}
+The number of days since 01/01/0001 + JUL\+\_\+\+OFFSET.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDate_a9d28b2a46d8aaa284b92f44eeb96b2ff}\label{classxb_1_1xbDate_a9d28b2a46d8aaa284b92f44eeb96b2ff}}
+\index{xb::xbDate@{xb::xbDate}!JulToDate8@{JulToDate8}}
+\index{JulToDate8@{JulToDate8}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{JulToDate8()}{JulToDate8()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Date\+::\+Jul\+To\+Date8 (\begin{DoxyParamCaption}\item[{xb\+Int32}]{l\+Jul\+Days }\end{DoxyParamCaption})}
+
+
+
+Convert the number of julian days to gregorian date.
+
+
+\begin{DoxyParams}{Parameters}
+{\em l\+Jul\+Days} & -\/ Julian days. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+XB\+\_\+\+NO\+\_\+\+ERROR
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDate_a15847866bb7642aa42bc254e0cf2038a}\label{classxb_1_1xbDate_a15847866bb7642aa42bc254e0cf2038a}}
+\index{xb::xbDate@{xb::xbDate}!LastDayOfMonth@{LastDayOfMonth}}
+\index{LastDayOfMonth@{LastDayOfMonth}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{LastDayOfMonth()}{LastDayOfMonth()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Date\+::\+Last\+Day\+Of\+Month (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+
+
+Set the date to the last day of month for a given date.
+
+This routine sets the last date of the month. \begin{DoxyReturn}{Returns}
+XB\+\_\+\+NO\+\_\+\+ERROR
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDate_a08bd84c67e1119d8c5c1748cd89d092e}\label{classxb_1_1xbDate_a08bd84c67e1119d8c5c1748cd89d092e}}
+\index{xb::xbDate@{xb::xbDate}!MonthOf@{MonthOf}}
+\index{MonthOf@{MonthOf}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{MonthOf()}{MonthOf()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Date\+::\+Month\+Of (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+
+
+Return the month for the date.
+
+\begin{DoxyReturn}{Returns}
+The month of the date.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDate_ac3aaf8997fc0c36676085e7741f33a8a}\label{classxb_1_1xbDate_ac3aaf8997fc0c36676085e7741f33a8a}}
+\index{xb::xbDate@{xb::xbDate}!operator"!=@{operator"!=}}
+\index{operator"!=@{operator"!=}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{operator"!=()}{operator!=()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Date\+::operator!= (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&}]{dt }\end{DoxyParamCaption}) const}
+
+
+
+operator !=
+
+This routine compares two dates for inequality.
+\begin{DoxyParams}{Parameters}
+{\em dt} & -\/ Date to compare. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+xb\+True -\/ Dates don\textquotesingle{}t match.~\newline
+xb\+False -\/ Dates match.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDate_ad09609bf78cf038886a4f9cd19423f9c}\label{classxb_1_1xbDate_ad09609bf78cf038886a4f9cd19423f9c}}
+\index{xb::xbDate@{xb::xbDate}!operator+@{operator+}}
+\index{operator+@{operator+}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{operator+()}{operator+()}}
+{\footnotesize\ttfamily const char $\ast$ xb\+::xb\+Date\+::operator+ (\begin{DoxyParamCaption}\item[{xb\+Int32}]{l\+Count }\end{DoxyParamCaption})}
+
+
+
+operator +
+
+This routine adds additional days to a valid date field.
+\begin{DoxyParams}{Parameters}
+{\em l\+Count} & -\/ Number of days to add. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+New date in CCYYMMDD format.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDate_a1c7d9e3718c43df18b21646072c8605e}\label{classxb_1_1xbDate_a1c7d9e3718c43df18b21646072c8605e}}
+\index{xb::xbDate@{xb::xbDate}!operator++@{operator++}}
+\index{operator++@{operator++}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{operator++()}{operator++()}}
+{\footnotesize\ttfamily void xb\+::xb\+Date\+::operator++ (\begin{DoxyParamCaption}\item[{xb\+Int32}]{i }\end{DoxyParamCaption})}
+
+
+
+operator ++
+
+This routine adds one day to the date field if the date is not null. \mbox{\Hypertarget{classxb_1_1xbDate_a947ba156d04fe063aaa4c9964ae5d163}\label{classxb_1_1xbDate_a947ba156d04fe063aaa4c9964ae5d163}}
+\index{xb::xbDate@{xb::xbDate}!operator+=@{operator+=}}
+\index{operator+=@{operator+=}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{operator+=()}{operator+=()}}
+{\footnotesize\ttfamily void xb\+::xb\+Date\+::operator+= (\begin{DoxyParamCaption}\item[{xb\+Int32}]{l\+Days }\end{DoxyParamCaption})}
+
+
+
+operator +=
+
+This routine adds l\+Days to the date if the date is not null.
+\begin{DoxyParams}{Parameters}
+{\em l\+Days} & -\/ Number of days to add to the date. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbDate_a3f3a8802c96098c85aa8d0e19717a979}\label{classxb_1_1xbDate_a3f3a8802c96098c85aa8d0e19717a979}}
+\index{xb::xbDate@{xb::xbDate}!operator-\/@{operator-\/}}
+\index{operator-\/@{operator-\/}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{operator-\/()}{operator-()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+Int32 xb\+::xb\+Date\+::operator-\/ (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&}]{dt }\end{DoxyParamCaption}) const}
+
+
+
+operator -\/
+
+This routine subtracts one date from another date returning the difference.
+\begin{DoxyParams}{Parameters}
+{\em dt} & -\/ Date to subtract \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Number of days difference or zero if one of the dates is null.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDate_a73ff5c037046ac0a0bb7d73f74e25cbb}\label{classxb_1_1xbDate_a73ff5c037046ac0a0bb7d73f74e25cbb}}
+\index{xb::xbDate@{xb::xbDate}!operator-\/@{operator-\/}}
+\index{operator-\/@{operator-\/}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{operator-\/()}{operator-()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily const char $\ast$ xb\+::xb\+Date\+::operator-\/ (\begin{DoxyParamCaption}\item[{xb\+Int32}]{l\+Count }\end{DoxyParamCaption})}
+
+
+
+operator -\/
+
+This routine subtracts days from a valid date field.
+\begin{DoxyParams}{Parameters}
+{\em l\+Count} & -\/ Number of days to subtract. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+New date in CCYYMMDD format.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDate_ae2b33dfee60d324916d833b2098b5a6b}\label{classxb_1_1xbDate_ae2b33dfee60d324916d833b2098b5a6b}}
+\index{xb::xbDate@{xb::xbDate}!operator-\/-\/@{operator-\/-\/}}
+\index{operator-\/-\/@{operator-\/-\/}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{operator-\/-\/()}{operator--()}}
+{\footnotesize\ttfamily void xb\+::xb\+Date\+::operator-\/-\/ (\begin{DoxyParamCaption}\item[{xb\+Int32}]{i }\end{DoxyParamCaption})}
+
+
+
+operator --
+
+This routine subtracts one day from the date field if the date is not null. \mbox{\Hypertarget{classxb_1_1xbDate_a4a8f207d759540114373f5e9d6d375f7}\label{classxb_1_1xbDate_a4a8f207d759540114373f5e9d6d375f7}}
+\index{xb::xbDate@{xb::xbDate}!operator-\/=@{operator-\/=}}
+\index{operator-\/=@{operator-\/=}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{operator-\/=()}{operator-=()}}
+{\footnotesize\ttfamily void xb\+::xb\+Date\+::operator-\/= (\begin{DoxyParamCaption}\item[{xb\+Int32}]{l\+Days }\end{DoxyParamCaption})}
+
+
+
+operator -\/=
+
+This routine subtracts l\+Days from the date if the date is not null.
+\begin{DoxyParams}{Parameters}
+{\em l\+Days} & -\/ Number of days to subtract from the date. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbDate_a11f09d97ed527e7ef00ba6f17b9fb02c}\label{classxb_1_1xbDate_a11f09d97ed527e7ef00ba6f17b9fb02c}}
+\index{xb::xbDate@{xb::xbDate}!operator$<$@{operator$<$}}
+\index{operator$<$@{operator$<$}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{operator$<$()}{operator<()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Date\+::operator$<$ (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&}]{dt }\end{DoxyParamCaption}) const}
+
+
+
+operator \texorpdfstring{$<$}{<}
+
+This routine compares two dates
+\begin{DoxyParams}{Parameters}
+{\em dt} & -\/ Date to compare. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+xb\+True -\/ Left date is less than right date.~\newline
+ xb\+False -\/ Left date is not less than right date.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDate_a6d8fa4df4664f3fd8d4cc15e77f6d046}\label{classxb_1_1xbDate_a6d8fa4df4664f3fd8d4cc15e77f6d046}}
+\index{xb::xbDate@{xb::xbDate}!operator$<$=@{operator$<$=}}
+\index{operator$<$=@{operator$<$=}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{operator$<$=()}{operator<=()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Date\+::operator$<$= (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&}]{dt }\end{DoxyParamCaption}) const}
+
+
+
+operator \texorpdfstring{$<$}{<}=
+
+This routine compares two dates
+\begin{DoxyParams}{Parameters}
+{\em dt} & -\/ Date to compare. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+xb\+True -\/ Left date is less than or equal to right date.~\newline
+ xb\+False -\/ Left date is not less than or equal to right date.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDate_a2e33ad9415c32e820e08fd8084198690}\label{classxb_1_1xbDate_a2e33ad9415c32e820e08fd8084198690}}
+\index{xb::xbDate@{xb::xbDate}!operator=@{operator=}}
+\index{operator=@{operator=}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{operator=()}{operator=()}}
+{\footnotesize\ttfamily void xb\+::xb\+Date\+::operator= (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&}]{dt }\end{DoxyParamCaption})}
+
+
+
+Set operator=.
+
+
+\begin{DoxyParams}{Parameters}
+{\em dt} & -\/ Date value for set operation. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbDate_aaaf98c1a672066021895f0953b6e94d0}\label{classxb_1_1xbDate_aaaf98c1a672066021895f0953b6e94d0}}
+\index{xb::xbDate@{xb::xbDate}!operator==@{operator==}}
+\index{operator==@{operator==}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{operator==()}{operator==()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Date\+::operator== (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&}]{dt }\end{DoxyParamCaption}) const}
+
+
+
+operator ==
+
+This routine compares two dates for equality.
+\begin{DoxyParams}{Parameters}
+{\em dt} & -\/ Date to compare. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+xb\+True -\/ Dates match.~\newline
+xb\+False -\/ Dates don\textquotesingle{}t match.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDate_a744031c4031d6ec4595d34acbd1c5860}\label{classxb_1_1xbDate_a744031c4031d6ec4595d34acbd1c5860}}
+\index{xb::xbDate@{xb::xbDate}!operator$>$@{operator$>$}}
+\index{operator$>$@{operator$>$}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{operator$>$()}{operator>()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Date\+::operator$>$ (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&}]{dt }\end{DoxyParamCaption}) const}
+
+
+
+\texorpdfstring{$>$}{>}
+
+This routine compares two dates
+\begin{DoxyParams}{Parameters}
+{\em dt} & -\/ Date to compare. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+xb\+True -\/ Left date is greater than right date.~\newline
+ xb\+False -\/ Left date is not greater than right date.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDate_a1d81959ea55440588068ea7f82617c99}\label{classxb_1_1xbDate_a1d81959ea55440588068ea7f82617c99}}
+\index{xb::xbDate@{xb::xbDate}!operator$>$=@{operator$>$=}}
+\index{operator$>$=@{operator$>$=}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{operator$>$=()}{operator>=()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Date\+::operator$>$= (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&}]{dt }\end{DoxyParamCaption}) const}
+
+
+
+operator \texorpdfstring{$>$}{>}=
+
+This routine compares two dates
+\begin{DoxyParams}{Parameters}
+{\em dt} & -\/ Date to compare. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+xb\+True -\/ Left date is greater than or equal to right date.~\newline
+ xb\+False -\/ Left date is not greater than or equal to right date.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDate_a4b0cde152b5de0f7d26608d1445110b6}\label{classxb_1_1xbDate_a4b0cde152b5de0f7d26608d1445110b6}}
+\index{xb::xbDate@{xb::xbDate}!Set@{Set}}
+\index{Set@{Set}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{Set()}{Set()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Date\+::\+Set (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Date\+In }\end{DoxyParamCaption})}
+
+
+
+Set the date.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Date\+In} & -\/ Input date. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+XB\+\_\+\+NO\+\_\+\+ERROR
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}\label{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}}
+\index{xb::xbDate@{xb::xbDate}!SetDataDirectory@{SetDataDirectory}}
+\index{SetDataDirectory@{SetDataDirectory}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{SetDataDirectory()}{SetDataDirectory()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Data\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Data\+Directory }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Set the data directory.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Data\+Directory} & Set the data directory. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}\label{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}}
+\index{xb::xbDate@{xb::xbDate}!SetDefaultAutoCommit@{SetDefaultAutoCommit}}
+\index{SetDefaultAutoCommit@{SetDefaultAutoCommit}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{SetDefaultAutoCommit()}{SetDefaultAutoCommit()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Default\+Auto\+Commit (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}}}]{b\+Default\+Auto\+Commit }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Set the default auto commit.
+
+Disabling auto commit requires the application execute explicit updates using dbf-\/\texorpdfstring{$>$}{>}Put() and dbf-\/\texorpdfstring{$>$}{>}Append\+Record(). With auto commit on, the library posts updates automatically when moving off the current record or closing a file.
+
+
+\begin{DoxyParams}{Parameters}
+{\em b\+Default\+Auto\+Commit} & xb\+True -\/ Enable default auto commit.~\newline
+ xb\+False -\/ Disable default auto commit.~\newline
+ \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}\label{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}}
+\index{xb::xbDate@{xb::xbDate}!SetDefaultDateFormat@{SetDefaultDateFormat}}
+\index{SetDefaultDateFormat@{SetDefaultDateFormat}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{SetDefaultDateFormat()}{SetDefaultDateFormat()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Default\+Date\+Format (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Default\+Date\+Format }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Set the default date format.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Default\+Date\+Format} & Set the default date format. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a904ec348fd029d4a76e72b8fde636108}\label{classxb_1_1xbSsv_a904ec348fd029d4a76e72b8fde636108}}
+\index{xb::xbDate@{xb::xbDate}!SetEndianType@{SetEndianType}}
+\index{SetEndianType@{SetEndianType}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{SetEndianType()}{SetEndianType()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Endian\+Type (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [protected]}, {\ttfamily [inherited]}}
+
+
+
+Set the endian type.
+
+This routine determines the Endian-\/ness at run time instead of compile time as some processers (ie; Sparc,ARM) can be switched either way. This routine is called automatically by the library at startup and does not need to be called in an application program. \mbox{\Hypertarget{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}\label{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}}
+\index{xb::xbDate@{xb::xbDate}!SetLogDirectory@{SetLogDirectory}}
+\index{SetLogDirectory@{SetLogDirectory}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{SetLogDirectory()}{SetLogDirectory()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Log\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Log\+Directory }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_a7f05738e7dfd759e89990242ef503544}\label{classxb_1_1xbSsv_a7f05738e7dfd759e89990242ef503544}}
+\index{xb::xbDate@{xb::xbDate}!SetLogFileName@{SetLogFileName}}
+\index{SetLogFileName@{SetLogFileName}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{SetLogFileName()}{SetLogFileName()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Log\+File\+Name (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Log\+File\+Name }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}\label{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}}
+\index{xb::xbDate@{xb::xbDate}!SetMultiUser@{SetMultiUser}}
+\index{SetMultiUser@{SetMultiUser}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{SetMultiUser()}{SetMultiUser()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Multi\+User (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}}}]{b\+Multi\+User }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the multi user setting.
+
+
+\begin{DoxyParams}{Parameters}
+{\em b\+Multi\+User} & xb\+True -\/ Turn on Multi user mode.~\newline
+ xb\+False -\/ Turn off Multi user mode.~\newline
+ \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a17c229a20ef9ab4034df8f9cd657adb2}\label{classxb_1_1xbSsv_a17c229a20ef9ab4034df8f9cd657adb2}}
+\index{xb::xbDate@{xb::xbDate}!SetTempDirectory@{SetTempDirectory}}
+\index{SetTempDirectory@{SetTempDirectory}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{SetTempDirectory()}{SetTempDirectory()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Temp\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Temp\+Directory }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Set the temp directory.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Temp\+Directory} & Set the data direcroty. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbDate_ab43a5d8d929767c0ffdd722972bb8cc0}\label{classxb_1_1xbDate_ab43a5d8d929767c0ffdd722972bb8cc0}}
+\index{xb::xbDate@{xb::xbDate}!Str@{Str}}
+\index{Str@{Str}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{Str()}{Str()}}
+{\footnotesize\ttfamily const char $\ast$ xb\+::xb\+Date\+::\+Str (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+
+
+Return the date value.
+
+\begin{DoxyReturn}{Returns}
+char ptr to date value.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDate_a40ba54a58d64cf56266f020f91584192}\label{classxb_1_1xbDate_a40ba54a58d64cf56266f020f91584192}}
+\index{xb::xbDate@{xb::xbDate}!Sysdate@{Sysdate}}
+\index{Sysdate@{Sysdate}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{Sysdate()}{Sysdate()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Date\+::\+Sysdate (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+
+
+Set the date equal to the system date.
+
+\begin{DoxyReturn}{Returns}
+XB\+\_\+\+NO\+\_\+\+ERROR
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDate_a31057dfaa36389a16e40e3db82c46262}\label{classxb_1_1xbDate_a31057dfaa36389a16e40e3db82c46262}}
+\index{xb::xbDate@{xb::xbDate}!YearOf@{YearOf}}
+\index{YearOf@{YearOf}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{YearOf()}{YearOf()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Date\+::\+Year\+Of (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+
+
+Returns the year of the date.
+
+\begin{DoxyReturn}{Returns}
+The year of the date.
+\end{DoxyReturn}
+
+
+\doxysubsection{Field Documentation}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a6219f1b5e24ea12fe158cd5aea56988e}\label{classxb_1_1xbSsv_a6219f1b5e24ea12fe158cd5aea56988e}}
+\index{xb::xbDate@{xb::xbDate}!ErrorCodeText@{ErrorCodeText}}
+\index{ErrorCodeText@{ErrorCodeText}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{ErrorCodeText}{ErrorCodeText}}
+{\footnotesize\ttfamily const char$\ast$ xb\+::xb\+Ssv\+::\+Error\+Code\+Text\mbox{[}$\,$\mbox{]}\hspace{0.3cm}{\ttfamily [static]}, {\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}\label{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}}
+\index{xb::xbDate@{xb::xbDate}!iEndianType@{iEndianType}}
+\index{iEndianType@{iEndianType}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{iEndianType}{iEndianType}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Ssv\+::i\+Endian\+Type = 0\hspace{0.3cm}{\ttfamily [static]}, {\ttfamily [protected]}, {\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}\label{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}}
+\index{xb::xbDate@{xb::xbDate}!sNullString@{sNullString}}
+\index{sNullString@{sNullString}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{sNullString}{sNullString}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} xb\+::xb\+Ssv\+::s\+Null\+String = \char`\"{}\char`\"{}\hspace{0.3cm}{\ttfamily [static]}, {\ttfamily [protected]}, {\ttfamily [inherited]}}
+
+
+
+The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
+\item
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbdate_8h}{xbdate.\+h}}\item
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbdate_8cpp}{xbdate.\+cpp}}\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/classxb_1_1xbDbf.eps b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbDbf.eps
index 26ff00c..26ff00c 100644
--- a/docs/doxygen/latex/classxb_1_1xbDbf.eps
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbDbf.eps
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbDbf.pdf b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbDbf.pdf
new file mode 100644
index 0000000..73fad18
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbDbf.pdf
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbDbf.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbDbf.tex
new file mode 100644
index 0000000..248e693
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbDbf.tex
@@ -0,0 +1,4523 @@
+\hypertarget{classxb_1_1xbDbf}{}\doxysection{xb\+::xb\+Dbf Class Reference}
+\label{classxb_1_1xbDbf}\index{xb::xbDbf@{xb::xbDbf}}
+
+
+Base class for handling dbf files/tables.
+
+
+
+
+{\ttfamily \#include $<$xbdbf.\+h$>$}
+
+Inheritance diagram for xb\+::xb\+Dbf\+:\begin{figure}[H]
+\begin{center}
+\leavevmode
+\includegraphics[height=3.000000cm]{classxb_1_1xbDbf}
+\end{center}
+\end{figure}
+\doxysubsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\hyperlink{classxb_1_1xbDbf_a84a75f80bc0e9b8a22b728767949c204}{xb\+Dbf}} (\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$x)
+\begin{DoxyCompactList}\small\item\em Constructor. \end{DoxyCompactList}\item
+virtual \mbox{\hyperlink{classxb_1_1xbDbf_a7eb87521fba8a939c613056d9918d880}{$\sim$xb\+Dbf}} ()
+\begin{DoxyCompactList}\small\item\em Destructor. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a4edcf31390fbdc8c3558004770fd9f2f}{Abort}} ()
+\begin{DoxyCompactList}\small\item\em Abort any uncommited changes for the current record buffer. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a5b412dd796241673eb1aa2c93513d69b}{Append\+Record}} ()
+\begin{DoxyCompactList}\small\item\em Append the current record to the data file. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a78da5a3d2011a3f2e7618cbdd3ba02d6}{Blank\+Record}} ()
+\begin{DoxyCompactList}\small\item\em Blank the record buffer. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_abd69532c885ab72bcf3fb5066b318f4f}{Commit}} ()
+\begin{DoxyCompactList}\small\item\em Commit updates to disk. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ad68d73113e54e1b5f326e90f45e9989d}{Close}} ()
+\begin{DoxyCompactList}\small\item\em Close DBF file/table. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a829c615a130a1fdf609d93438d8a6264}{Copy\+Dbf\+Structure}} (\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$d\+New\+Table, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Table\+Name, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Table\+Alias, xb\+Int16 i\+Overlay, xb\+Int16 i\+Share\+Mode)
+\begin{DoxyCompactList}\small\item\em Copy table (dbf) file structure. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a73e41bfe679dd06ab16c436652df93f1}{Create\+Table}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Table\+Name, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&\mbox{\hyperlink{classxb_1_1xbDbf_a73f9c792d0a769e2e604c1855245a276}{s\+Alias}}, \mbox{\hyperlink{structxb_1_1xbSchema}{xb\+Schema}} $\ast$p\+Schema, xb\+Int16 i\+Overlay, xb\+Int16 i\+Share\+Mode)=0
+\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a4085ed4f049d976124d8edc3d3c56397}{Delete\+Table}} ()
+\begin{DoxyCompactList}\small\item\em Delete a table. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a01c26b67e312be1e674b3da710e031b9}{Delete\+All}} (xb\+Int16 i\+Option)
+\begin{DoxyCompactList}\small\item\em Delete or undelete all records in a dbf file (table). \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a3067fdfa3a7a5c15651f6e89d1102176}{Delete\+All\+Records}} ()
+\begin{DoxyCompactList}\small\item\em Delete all records. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_acd8c10579229f3a2e2c5fdb7fcef90db}{Delete\+Record}} ()
+\begin{DoxyCompactList}\small\item\em Delete the current record. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a47643728f74cf3b6e0ffc55259895bdb}{Dump\+Header}} (xb\+Int16 i\+Option)
+\begin{DoxyCompactList}\small\item\em Dump dbf file header. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_aba30399f15885a07f87f904c0d0656fa}{Dump\+Record}} (xb\+UInt32 ul\+Rec\+No, xb\+Int16 i\+Output\+Dest=0, xb\+Int16 i\+Output\+Fmt=0)
+\begin{DoxyCompactList}\small\item\em Dump record. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_abb9e20c5efacd4fea80f1515abbc6b55}{Get\+Auto\+Commit}} () const
+\begin{DoxyCompactList}\small\item\em Get auto commit setting. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ae0c00226fd2ea7a67f101e795467ed68}{Get\+Auto\+Commit}} (xb\+Int16 i\+Option) const
+\begin{DoxyCompactList}\small\item\em Get auto commit setting. \end{DoxyCompactList}\item
+virtual \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbDbf_ad0827a43c025c1184ffebab74cc9e779}{Get\+Bof}} ()
+\begin{DoxyCompactList}\small\item\em Get a pointer to the current index object. \end{DoxyCompactList}\item
+virtual xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbDbf_a643a80a3792a52760c8e09ba18719503}{Get\+Cur\+Rec\+No}} () const
+\begin{DoxyCompactList}\small\item\em Return the current record number. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ac1110d867ba297a52c8b0e83e88f05e6}{Get\+Dbf\+Status}} () const
+\begin{DoxyCompactList}\small\item\em Return the current dbf status. \end{DoxyCompactList}\item
+virtual \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbDbf_a256dc1f98626fa77da24e91a38ab5b4d}{Get\+Eof}} ()
+\begin{DoxyCompactList}\small\item\em Return true if dbf file empty or positioned to the last record. \end{DoxyCompactList}\item
+virtual xb\+Int32 \mbox{\hyperlink{classxb_1_1xbDbf_add27d8ef555a13b336b8c804165dc15e}{Get\+Field\+Cnt}} () const
+\begin{DoxyCompactList}\small\item\em Return the number of fields in the table. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a6fc5b8a3e2f177d5ceaf9d975cbb5226}{Get\+First\+Record}} ()
+\begin{DoxyCompactList}\small\item\em Get the first record. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_acb78991e8435edd36318c653cb977c1a}{Get\+First\+Record}} (xb\+Int16 i\+Option)
+\begin{DoxyCompactList}\small\item\em Get the first record. \end{DoxyCompactList}\item
+virtual xb\+UInt16 \mbox{\hyperlink{classxb_1_1xbDbf_ad56be2756b7a9f8318d9ba5cf215dafb}{Get\+Header\+Len}} () const
+\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a49e667f9c8ee55c36444702663fc5964}{Get\+Last\+Record}} ()
+\begin{DoxyCompactList}\small\item\em Get the last record. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a8ccfa2291417412b6894940d1b92f9a6}{Get\+Last\+Record}} (xb\+Int16 i\+Option)
+\begin{DoxyCompactList}\small\item\em Get the last record. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ab896fe3b734f556de578d30f92b18fe2}{Get\+Next\+Record}} ()
+\begin{DoxyCompactList}\small\item\em Get the next record. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a3191428a7a92d9107d8d42448884f2ac}{Get\+Next\+Record}} (xb\+Int16 i\+Option)
+\begin{DoxyCompactList}\small\item\em Get the next record. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a18fdcb4ab15b36cd47fa6f6f7a540d1a}{Get\+Next\+Record}} (xb\+Int16 i\+Option, xb\+UInt32 ul\+Start\+Rec)
+\begin{DoxyCompactList}\small\item\em Get the next record. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ab3d248e5221b4f0809897cd43af17a1e}{Get\+Prev\+Record}} ()
+\begin{DoxyCompactList}\small\item\em Get the previous record. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a7eadc7b08d73003802b90584f7b33387}{Get\+Prev\+Record}} (xb\+Int16 i\+Option)
+\begin{DoxyCompactList}\small\item\em Get the previous record. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a26fba086b07caeab95066bf1c8d25161}{Get\+Record}} (xb\+UInt32 ul\+Rec\+No)
+\begin{DoxyCompactList}\small\item\em Get record for specified record number. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ac196ad55335e1f4789d698748434dc89}{Get\+Record\+Cnt}} (xb\+UInt32 \&ul\+Rec\+Cnt)
+\begin{DoxyCompactList}\small\item\em Get the current number of records in the dbf data file. \end{DoxyCompactList}\item
+virtual char $\ast$ \mbox{\hyperlink{classxb_1_1xbDbf_aa3e38c4057d726a28a27d07a1610d124}{Get\+Record\+Buf}} (xb\+Int16 i\+Opt=0) const
+\begin{DoxyCompactList}\small\item\em Get pointer to record buffer. \end{DoxyCompactList}\item
+virtual xb\+UInt16 \mbox{\hyperlink{classxb_1_1xbDbf_ab50d76c6e29e81e347a6feb04c2f62bb}{Get\+Record\+Len}} () const
+\begin{DoxyCompactList}\small\item\em Get the dbf record length. \end{DoxyCompactList}\item
+virtual const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbDbf_a27758a325c097f204247908b65ba7fbd}{Get\+Tbl\+Alias}} () const
+\begin{DoxyCompactList}\small\item\em Get the table alias. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a49212a9eb17f7fa9f303e08d5fc50fc6}{Get\+Version}} () const =0
+\item
+virtual \mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$ \mbox{\hyperlink{classxb_1_1xbDbf_ab21ec23c076b0c9affdc0f6672bd133f}{Get\+Xbase\+Ptr}} () const
+\begin{DoxyCompactList}\small\item\em Get the pointer to the xb\+Xbase structure,. \end{DoxyCompactList}\item
+virtual \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbDbf_a013dc8c51fc1aa988de39cf3da6da950}{Memo\+Fields\+Exist}} () const
+\begin{DoxyCompactList}\small\item\em Check for existence of any memo fields. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a69824d7bafc3f5a15bf7d09f2f511768}{Open}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Table\+Name)
+\begin{DoxyCompactList}\small\item\em Open a table/dbf file. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ae388c5e02adc86e6e9988e697e061610}{Open}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Table\+Name, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&\mbox{\hyperlink{classxb_1_1xbDbf_a73f9c792d0a769e2e604c1855245a276}{s\+Alias}})
+\begin{DoxyCompactList}\small\item\em Open a table/dbf file. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a4d018cbf44d8d8b2145c9acab02c8adf}{Open}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Table\+Name, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&\mbox{\hyperlink{classxb_1_1xbDbf_a73f9c792d0a769e2e604c1855245a276}{s\+Alias}}, xb\+Int16 i\+Open\+Mode, xb\+Int16 i\+Share\+Mode)=0
+\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a8a52bf3ef2123c0d17e6b1f67bf0dc55}{Pack}} ()
+\begin{DoxyCompactList}\small\item\em Pack dbf file. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a93bb14ad0451355bfa3379128120988a}{Pack}} (xb\+UInt32 \&ul\+Deleted\+Rec\+Cnt)
+\begin{DoxyCompactList}\small\item\em Pack dbf file. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a3c36a5ffbc7067a1abbcb526dd3b981d}{Put\+Record}} ()
+\begin{DoxyCompactList}\small\item\em Write the current record to disk. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_aacbc7bac3ea0c502ee75b838f4f0fcbf}{Put\+Record}} (xb\+UInt32 ul\+Rec\+No)
+\begin{DoxyCompactList}\small\item\em Write record to disk. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a94d7d626ba691fd4b740c034673e6fc6}{Record\+Deleted}} (xb\+Int16 i\+Opt=0) const
+\begin{DoxyCompactList}\small\item\em Return record deletion status. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_aeeeb2eb5fabcd0f91d457df07b0e0708}{Rename}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} s\+New\+Name)=0
+\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a4cf7f0d423164f3cf074ae41f96f4e90}{Set\+Auto\+Commit}} (xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ab506450954bc86e7bf1d7c4efe681f43}{i\+Auto\+Commit}})
+\begin{DoxyCompactList}\small\item\em Set auto commit. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ae94cb1bf9f75184f39d9e1a80ab49d4a}{Undelete\+All\+Records}} ()
+\begin{DoxyCompactList}\small\item\em Set auto lock. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a255681976a04fc722538bb630507b3a0}{Undelete\+Record}} ()
+\begin{DoxyCompactList}\small\item\em Undelete one record. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a8ed0693b10b95aaa4e46037758d160ed}{Zap}} ()
+\begin{DoxyCompactList}\small\item\em Zap (remove) everything from the file,. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ad245a26eb8b79610c9ae7bab19e05513}{Get\+Field}} (xb\+Int16 i\+Field\+No, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Value, xb\+Int16 i\+Rec\+Buf\+Sw) const
+\begin{DoxyCompactList}\small\item\em Get field data for field number. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ac81f078f3c932f0da60ad1fbdd848d3e}{Get\+Field}} (xb\+Int16 i\+Field\+No, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Value) const
+\begin{DoxyCompactList}\small\item\em Get field data for field number. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a9a0fcf7e2040ab483e3807927833cb26}{Get\+Field}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Value) const
+\begin{DoxyCompactList}\small\item\em Get \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} field for field name. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_abcb4defad2e1b6e67f63cc60737ad840}{Get\+Field\+Decimal}} (xb\+Int16 i\+Field\+No, xb\+Int16 \&i\+Field\+Decimal) const
+\begin{DoxyCompactList}\small\item\em Get decimal for field number. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a607f774fcd6dc0b9913d7a7801b60db2}{Get\+Field\+Decimal}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name, xb\+Int16 \&i\+Field\+Decimal) const
+\begin{DoxyCompactList}\small\item\em Get decimal for field name. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_adda4302b58cc6109b048f19d9b68bbd4}{Get\+Field\+Len}} (xb\+Int16 i\+Field\+No, xb\+Int16 \&i\+Field\+Len) const
+\begin{DoxyCompactList}\small\item\em Get field length for field number. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_acf06dbccdba1a4bcd90fa0bea6cca59b}{Get\+Field\+Len}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name, xb\+Int16 \&i\+Field\+Len) const
+\begin{DoxyCompactList}\small\item\em Get field length for field name. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a5e3e4368bfba1724c016b8859023e34c}{Get\+Field\+Name}} (xb\+Int16 i\+Field\+No, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name) const
+\begin{DoxyCompactList}\small\item\em Returns the name of the specified field. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_aed9113b5095c6df1b9c854cbd0d8047b}{Get\+Field\+No}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name, xb\+Int16 \&i\+Field\+No) const
+\begin{DoxyCompactList}\small\item\em Get the field number for name. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_aad9029e63909aeb77d8473256d88bea8}{Get\+Field\+No}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name) const
+\begin{DoxyCompactList}\small\item\em Get field ID number for a given field name. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a5143973e4f165651152aa13c8fd45f84}{Get\+Field\+Type}} (xb\+Int16 i\+Field\+No, char \&c\+Field\+Type) const
+\begin{DoxyCompactList}\small\item\em Get field type for field number. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a181db879f1a75f93a34c03513a0b2fea}{Get\+Field\+Type}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name, char \&c\+Field\+Type) const
+\begin{DoxyCompactList}\small\item\em Get field type for field name. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a7862215dd2f83a1c488e539cd1f9aec0}{Put\+Field}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Data)
+\begin{DoxyCompactList}\small\item\em Put field for field name. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a142b0c0dc904917f3c68c5572c1237b5}{Put\+Field}} (xb\+Int16 i\+Field\+No, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Data)
+\begin{DoxyCompactList}\small\item\em Put field for field number. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ab39ac4269ac63bc7ea4f638733bb17f0}{Put\+Logical\+Field}} (xb\+Int16 i\+Field\+No, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Data)
+\begin{DoxyCompactList}\small\item\em Put logical field for field number. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a507e400ca6526a9e0391cf06dd6a014e}{Put\+Logical\+Field}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Data)
+\begin{DoxyCompactList}\small\item\em Put logical field for field name. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a3254f091fc4a1404abed3dd2bcdd6ce6}{Get\+Logical\+Field}} (xb\+Int16 i\+Field\+No, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Data) const
+\begin{DoxyCompactList}\small\item\em Get logical field for field number. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a9cd6819bfd932ff8507e54d9cb9a624e}{Get\+Logical\+Field}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Data) const
+\begin{DoxyCompactList}\small\item\em Get logical field for field name. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a423a0cb7bd252cedf956ace4954f275d}{Put\+Logical\+Field}} (xb\+Int16 i\+Field\+No, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Field\+Data)
+\begin{DoxyCompactList}\small\item\em Put logical field for field number. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a623ca3ef5520c42308c1a16b518e7ff3}{Put\+Logical\+Field}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Field\+Data)
+\begin{DoxyCompactList}\small\item\em Put logical field for field name. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_aaf615ddcf08f8cd14efc713c2a8d7ae1}{Get\+Logical\+Field}} (xb\+Int16 i\+Field\+No, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \&b\+Field\+Data) const
+\begin{DoxyCompactList}\small\item\em Get logical field for field number. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ab28feef20c988b0a6f1c1911a45377b0}{Get\+Logical\+Field}} (xb\+Int16 i\+Field\+No, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \&b\+Field\+Data, xb\+Int16 i\+Rec\+Buf\+Sw) const
+\begin{DoxyCompactList}\small\item\em Get logical field for field number. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a943cea7fde1b06c1a05184193eff8d2d}{Get\+Logical\+Field}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \&b\+Field\+Data) const
+\begin{DoxyCompactList}\small\item\em Get logical field for field name. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_abe525c0820640e0a9e169d0b7913cfa1}{Get\+Long\+Field}} (xb\+Int16 i\+Field\+No, xb\+Int32 \&l\+Field\+Value) const
+\begin{DoxyCompactList}\small\item\em Get long field for field number. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a7b8ef75b17941beac17e50e969b2d3db}{Get\+Long\+Field}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name, xb\+Int32 \&l\+Field\+Value) const
+\begin{DoxyCompactList}\small\item\em Get long field for field name. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a56c8f924284bf88aabf90b7930b4eb47}{Put\+Long\+Field}} (xb\+Int16 i\+Field\+No, xb\+Int32 l\+Field\+Value)
+\begin{DoxyCompactList}\small\item\em Put long field for field number. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a0692d1776a725c2f61d4c14677e9307c}{Put\+Long\+Field}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name, xb\+Int32 l\+Field\+Value)
+\begin{DoxyCompactList}\small\item\em Put long field for field name. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a67e3a050f9090edf69eee75aef7f5d83}{Get\+ULong\+Field}} (xb\+Int16 i\+Field\+No, xb\+UInt32 \&l\+Field\+Value) const
+\begin{DoxyCompactList}\small\item\em Get unsigned long field for field number. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a039eb02418ec4ca862adbc0f95b9cbec}{Get\+ULong\+Field}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name, xb\+UInt32 \&l\+Field\+Value) const
+\begin{DoxyCompactList}\small\item\em Get unsigned long field for field name. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_af5dec5c9ff903efffdb0490a44d296d2}{Put\+ULong\+Field}} (xb\+Int16 i\+Field\+No, xb\+UInt32 l\+Field\+Value)
+\begin{DoxyCompactList}\small\item\em Put unsigned long field for field number. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ac62cb97c4e678c83f41788b1ae4d0381}{Put\+ULong\+Field}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+No, xb\+UInt32 l\+Field\+Value)
+\begin{DoxyCompactList}\small\item\em Put unsigned long field for field name. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a4556041a7ff2f6b6f986729901c11f08}{Get\+Double\+Field}} (xb\+Int16 Field\+No, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} \&d\+Field\+Value) const
+\begin{DoxyCompactList}\small\item\em Get xb\+Double field for field number. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a2370b5e736931441a5968649291b9ef4}{Get\+Double\+Field}} (xb\+Int16 Field\+No, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} \&d\+Field\+Value, xb\+Int16 i\+Rec\+Buf\+Sw) const
+\begin{DoxyCompactList}\small\item\em Get xb\+Double field for field number. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a6e6774df0f2d7733f4b25a9989596d95}{Get\+Double\+Field}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} \&d\+Field\+Value) const
+\begin{DoxyCompactList}\small\item\em Get xb\+Double field for field name. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a4f34842d7e8ff1f16992c2ece2fc38a5}{Put\+Double\+Field}} (xb\+Int16 Field\+No, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} d\+Field\+Value)
+\begin{DoxyCompactList}\small\item\em Put double field for field number. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ae695bbc71c19abc71c0c5f2ff2e1f971}{Put\+Double\+Field}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&Field\+Name, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} d\+Field\+Value)
+\begin{DoxyCompactList}\small\item\em Put double field for field name. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a3443f646038ced14425f067a59c0f2da}{Get\+Float\+Field}} (xb\+Int16 i\+Field\+No, \mbox{\hyperlink{namespacexb_a83aa6a550398db55973aa9fb4257e66e}{xb\+Float}} \&f\+Field\+Value) const
+\begin{DoxyCompactList}\small\item\em Get xb\+Float field for field number. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a81ef2f36f921d7ece066a592eb6393eb}{Get\+Float\+Field}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name, \mbox{\hyperlink{namespacexb_a83aa6a550398db55973aa9fb4257e66e}{xb\+Float}} \&f\+Field\+Value) const
+\begin{DoxyCompactList}\small\item\em Get xb\+Float field for field name. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a64161eb50d72e424b11bf3732657ebd8}{Put\+Float\+Field}} (xb\+Int16 i\+Field\+No, \mbox{\hyperlink{namespacexb_a83aa6a550398db55973aa9fb4257e66e}{xb\+Float}} f\+Field\+Value)
+\begin{DoxyCompactList}\small\item\em Put float field for field number. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a4ea3241bc710d57e5f755efda62288ad}{Put\+Float\+Field}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name, \mbox{\hyperlink{namespacexb_a83aa6a550398db55973aa9fb4257e66e}{xb\+Float}} f\+Field\+Value)
+\begin{DoxyCompactList}\small\item\em Put float field for field name. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_af78ef1fba949463ff7f829d3cffc4555}{Get\+Date\+Field}} (xb\+Int16 i\+Field\+No, \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&dt) const
+\begin{DoxyCompactList}\small\item\em Get \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} field for field number. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ac624e06a97666bfd64b4f252b4548b36}{Get\+Date\+Field}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name, \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&dt) const
+\begin{DoxyCompactList}\small\item\em Get \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} field for field name. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a873f04af528a9d81e6a367a59d998ec5}{Put\+Date\+Field}} (xb\+Int16 i\+Field\+No, const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&dt)
+\begin{DoxyCompactList}\small\item\em Put date field for field number. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a571b36b3a940b1a16d5e834f329b33b9}{Put\+Date\+Field}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name, const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&dt)
+\begin{DoxyCompactList}\small\item\em Put date field for field name. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ae9a3f726ce5229ed021bfce0515050fc}{Get\+Null\+Sts}} (xb\+Int16 i\+Field\+No, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \&b\+Is\+Null) const
+\begin{DoxyCompactList}\small\item\em Get field null status. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a909788123ce0694b65dfcf036380d918}{Get\+Null\+Sts}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \&b\+Is\+Null) const
+\begin{DoxyCompactList}\small\item\em Get field null status. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a7930fe8b930c6d646b7b0d3df576fe9e}{Get\+Null\+Sts}} (xb\+Int16 i\+Field\+No, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \&b\+Is\+Null, xb\+Int16 i\+Rec\+Buf\+Sw) const
+\begin{DoxyCompactList}\small\item\em Get field null status. \end{DoxyCompactList}\item
+const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbFile_acd0fb2166b2bff7e8a1cf65a7bc8be1e}{Get\+Directory}} () const
+\begin{DoxyCompactList}\small\item\em Get the directory name. \end{DoxyCompactList}\item
+const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbFile_ac95cb882ccbcdedc9a233c6ad9fed07a}{Get\+File\+Name}} () const
+\begin{DoxyCompactList}\small\item\em Get the file name. \end{DoxyCompactList}\item
+const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbFile_a31b4e641f93206ba23e2a5a27491dcd4}{Get\+Fq\+File\+Name}} () const
+\begin{DoxyCompactList}\small\item\em Get the fully qualified file name. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ad39797624a752b9d62533d00fad9feff}{Create\+Unique\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Dir\+In, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Ext\+In, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Fqn\+Out, xb\+Int16 i\+Option=0)
+\begin{DoxyCompactList}\small\item\em Create a unique file name. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ae2b6ac26018dc28f77afbb3f008c3f66}{Determine\+Xbase\+Table\+Version}} (unsigned char c\+File\+Type\+Byte) const
+\begin{DoxyCompactList}\small\item\em Determine xbase dbf version. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a5a740033664c9ad2611c90e2a6d0c2d3}{Determine\+Xbase\+Memo\+Version}} (unsigned char c\+File\+Type\+Byte) const
+\begin{DoxyCompactList}\small\item\em Determine which version the memo (dbt) file is. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} \mbox{\hyperlink{classxb_1_1xbFile_ab14e4a11427f5efb81cba1dd32bd1aa1}{e\+Get\+Double}} (const char $\ast$p) const
+\begin{DoxyCompactList}\small\item\em Get a portable double value. \end{DoxyCompactList}\item
+xb\+Int32 \mbox{\hyperlink{classxb_1_1xbFile_a60b24a5afc984c586bf384c7e915ba0d}{e\+Get\+Int32}} (const char $\ast$p) const
+\begin{DoxyCompactList}\small\item\em Get a portable long value. \end{DoxyCompactList}\item
+xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbFile_a78f052529d39a18deaface5a0d47d0b0}{e\+Get\+UInt32}} (const char $\ast$p) const
+\begin{DoxyCompactList}\small\item\em Get a portable unsigned long value. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ac40c991110ddc6fb30a72d90f4652762}{e\+Get\+Int16}} (const char $\ast$p) const
+\begin{DoxyCompactList}\small\item\em Get a portable short value. \end{DoxyCompactList}\item
+xb\+UInt16 \mbox{\hyperlink{classxb_1_1xbFile_a936ade458e6d5e6d29f9b5031888d189}{e\+Get\+UInt16}} (const char $\ast$p) const
+\begin{DoxyCompactList}\small\item\em Get a portable unsigned short value. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbFile_a98b6ff533ae93f90c977a2ba23eeb105}{e\+Put\+Double}} (char $\ast$p, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} d)
+\begin{DoxyCompactList}\small\item\em Write a portable double value to memory location. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbFile_a19c37f76a2ccbb45019cb0fc373d3f46}{e\+Put\+Int32}} (char $\ast$p, xb\+Int32 l)
+\begin{DoxyCompactList}\small\item\em Write a portable long value to memory location. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbFile_aa3f6ceae4b96f24875d86848bf13a173}{e\+Put\+UInt32}} (char $\ast$p, xb\+UInt32 ul)
+\begin{DoxyCompactList}\small\item\em Write a portable unsigned long value to memory location. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbFile_a29130f12739ac8fa837f4eaedf1338b2}{e\+Put\+Int16}} (char $\ast$p, xb\+Int16 s)
+\begin{DoxyCompactList}\small\item\em Write a portable short value to memory location. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbFile_a65e9839f92b96eac7b0d071fac3bbe40}{e\+Put\+UInt16}} (char $\ast$p, xb\+UInt16 s)
+\begin{DoxyCompactList}\small\item\em Write a portable unsigned short value to memory location. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a78bd8a11dce102647095baf3aff2b006}{File\+Exists}} () const
+\begin{DoxyCompactList}\small\item\em Determines if a file exists. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a174d8a6aabc9cfcd32fedbd1e5b13ddd}{File\+Exists}} (xb\+Int16 i\+Option) const
+\begin{DoxyCompactList}\small\item\em Determines if a file exists. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a61130b4fbf4cf9d5972dcb4993de2f94}{File\+Exists}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name) const
+\begin{DoxyCompactList}\small\item\em Determines if a file exists. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a0592168f39a10f2a401a88ef781f6148}{File\+Exists}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, xb\+Int16 i\+Option) const
+\begin{DoxyCompactList}\small\item\em Determines if a file exists. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a7fa837938a32dc9ca3fbc81cbaf50f59}{File\+Is\+Open}} () const
+\begin{DoxyCompactList}\small\item\em Determines if file is open. \end{DoxyCompactList}\item
+xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbFile_a638e14262410a1627819f016a16cdce2}{Get\+Block\+Size}} () const
+\begin{DoxyCompactList}\small\item\em Get the block size. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a60c53998e3d1b694134b20a87bc9bf5a}{Get\+File\+Dir\+Part}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Dir\+Part\+Out) const
+\begin{DoxyCompactList}\small\item\em Get the directory part of the file name. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_af5127c92892816e9bbc5c19653c4147a}{Get\+File\+Dir\+Part}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Complete\+File\+Name\+In, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Dir\+Part\+Out) const
+\begin{DoxyCompactList}\small\item\em Get the directory part of the file name. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a57a9222e5cbb51019d4eeb2c3ac89fa2}{Get\+File\+Ext\+Part}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Ext\+Part\+Out) const
+\begin{DoxyCompactList}\small\item\em Get the extension part of the file name. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ab289b6ffe955321160c1f90220c22e25}{Get\+File\+Ext\+Part}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Complete\+File\+Name\+In, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Ext\+Part\+Out) const
+\begin{DoxyCompactList}\small\item\em Get the extension part of the file name. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a02df78f4c90313243f508fc56b95aba8}{Get\+File\+Mtime}} (time\+\_\+t \&mtime)
+\begin{DoxyCompactList}\small\item\em Get the time of last file modification timestamp as reported by the OS. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a81422b3dd52763d2cc6c77237ec9af0a}{Get\+File\+Name\+Part}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name\+Part\+Out) const
+\begin{DoxyCompactList}\small\item\em Get the name part of the file name. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a6110763c5ae996b72c7a62c15bdecc73}{Get\+File\+Name\+Part}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Complete\+File\+Name\+In, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name\+Part\+Out) const
+\begin{DoxyCompactList}\small\item\em Get the name part of the file name. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a50b63c39e49d44e52078038027b24cc5}{Get\+File\+Size}} (xb\+UInt64 \&ull\+File\+Size)
+\begin{DoxyCompactList}\small\item\em Get the size of the file as reported by the OS. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a5548236d38d43b89ae29b9a015b1f678}{Get\+File\+Type}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Type) const
+\begin{DoxyCompactList}\small\item\em Get the file type aka Capitalized file extension. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a3c500dc9dac22c49496e4b29386b2dd3}{Get\+Open\+Mode}} () const
+\begin{DoxyCompactList}\small\item\em Get the open mode of the file. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a9b63e05b77f477ff6109ff7b9432c1b6}{Get\+Share\+Mode}} () const
+\begin{DoxyCompactList}\small\item\em Get the share mode of the file. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_aaf2e697751a0beff41432a66bb83fb5e}{Get\+Xbase\+File\+Type\+Byte}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, xb\+Int16 \&i\+Version)
+\begin{DoxyCompactList}\small\item\em Get the file type byte and version of the dbf file. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a7af337808919680b90710ad5e8a99232}{Get\+Xbase\+File\+Type\+Byte}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, unsigned char \&c\+File\+Type\+Byte)
+\begin{DoxyCompactList}\small\item\em Get the file type byte and version of the dbf file. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a78aebdd21d3de46a450d5f835e3027f6}{Get\+Xbase\+File\+Type\+Byte}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, unsigned char \&c\+File\+Type\+Byte, xb\+Int16 \&i\+Version)
+\begin{DoxyCompactList}\small\item\em Get the file type byte and version of the dbf file. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a361e3cc318bbf1c4d10f069e0800a24e}{Name\+Suffix\+Missing}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, xb\+Int16 i\+Option) const
+\begin{DoxyCompactList}\small\item\em Determines status of file extension. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_aa1bb80340abc7a5c22f87f878e9dc825}{Read\+Block}} (xb\+UInt32 ul\+Block\+No, size\+\_\+t read\+Size, void $\ast$buf)
+\begin{DoxyCompactList}\small\item\em Read a block of data from file. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_aef696b1c4c0ef5338e818599f695d485}{Read\+Block}} (xb\+UInt32 ul\+Block\+No, xb\+UInt32 ul\+Block\+Size, size\+\_\+t read\+Size, void $\ast$buf)
+\begin{DoxyCompactList}\small\item\em Read a block of data from file. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a991c5676a6f38fa752435390989f413e}{Set\+Block\+Size}} (xb\+UInt32 ul\+Block\+Size)
+\begin{DoxyCompactList}\small\item\em Set the block size. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbFile_ae78a85255488bc78964c16946dbaead3}{Set\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Directory)
+\begin{DoxyCompactList}\small\item\em Set the directory. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbFile_a5419eb27e56822f828b2b88a9502a636}{Set\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name)
+\begin{DoxyCompactList}\small\item\em Set the filename. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbFile_aee832fa11db2077a532f49e1329bd05a}{Set\+Fq\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Fq\+Name)
+\begin{DoxyCompactList}\small\item\em Set the fully qualifed filename. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a060acbfaa8d528f86cb59301814b414a}{Set\+Home\+Folders}} ()
+\begin{DoxyCompactList}\small\item\em Set Home Folders. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a5d871dcfecc2b4338f7a13722aab766c}{Write\+Block}} (xb\+UInt32 ul\+Block\+No, size\+\_\+t write\+Size, void $\ast$buf)
+\begin{DoxyCompactList}\small\item\em Write a block of data to file. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a18830b5755d74818f60d9c7ce38ddf2d}{xb\+Fclose}} ()
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fclose. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_af5b6356832d2a67212070a1aa605f170}{xb\+Feof}} ()
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary feof. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ad205184d43409f04216540ae22f15009}{xb\+Fflush}} ()
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fflush. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_afb1c584d2895ffb7834df80aea7eb1e4}{xb\+Fgetc}} (xb\+Int32 \&c)
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fgetc. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a5ee229bda4d7d6695e122200e581e7a6}{xb\+Fgetc}} (char \&c)
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fgetc. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ad245955ace26e5dde85fd4373b30d026}{xb\+Fgets}} (size\+\_\+t l\+Size, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Line)
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fgets. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a7cdfef5ede9ac98d44a28a6b7a70972c}{xb\+Fopen}} (xb\+Int16 i\+Open\+Mode)
+\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a0548cedf0f26b7d8ac221f75b0cd048c}{xb\+Fopen}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Open\+Mode, xb\+Int16 i\+Share\+Mode)
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fopen. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_aabd113333b49c36cad23244b392baab4}{xb\+Fopen}} (xb\+Int16 i\+Open\+Mode, xb\+Int16 i\+Share\+Mode)
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fopen. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ab0fa19686ca8953ff4b556fb5b249135}{xb\+Fopen}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Mode, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, xb\+Int16 i\+Share\+Mode)
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fopen. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_af2e940c78956e5cb6824f9a1bc404896}{xb\+Fputc}} (xb\+Int32 c)
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fputc. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a863f74cf17df8186d88586b4d2a6441a}{xb\+Fputc}} (xb\+Int32 c, xb\+Int32 i\+No\+Times)
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fputc. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a698f3b40216778562e639e6ca1a47573}{xb\+Fputs}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s)
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fputs. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ab4f6afaa1f77539f27a4f05c26e54e2f}{xb\+Fread}} (void $\ast$ptr, size\+\_\+t size, size\+\_\+t nmemb)
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fread. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a5337ab8918df240910c0d19b4f298e3d}{xb\+Fseek}} (xb\+Int64 ll\+Offset, xb\+Int32 whence)
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fseek. \end{DoxyCompactList}\item
+size\+\_\+t \mbox{\hyperlink{classxb_1_1xbFile_a0e1c06aedfa7fbcb92e117f891edd13b}{xb\+Ftell}} ()
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary ftell. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbFile_a9891b792f585a696f38a5cf959e30918}{xb\+FTurn\+Off\+File\+Buffering}} ()
+\begin{DoxyCompactList}\small\item\em Turn off file buffering. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a08463f506f425c2385acbe1a561506e9}{xb\+Read\+Until}} (const char c\+Delim, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Out)
+\begin{DoxyCompactList}\small\item\em Read file until a particular character is encountered on input stream. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a6d919366c2ec95e529906bf8842cbf07}{xb\+Remove}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, xb\+Int16 i\+Option)
+\begin{DoxyCompactList}\small\item\em Delete file. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a58f6a6751fdf7e9549c273bb75d93eb5}{xb\+Remove}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name)
+\begin{DoxyCompactList}\small\item\em Delete file. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ab3c668a8570433188382d31d7c60bd48}{xb\+Remove}} ()
+\begin{DoxyCompactList}\small\item\em Delete file. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_afc8ce113aa72611a278233f9bb170012}{xb\+Rename}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Old\+Name, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+New\+Name)
+\begin{DoxyCompactList}\small\item\em Rename file. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbFile_a7996b6e084665c37c3892faea64b3505}{xb\+Rewind}} ()
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for rewind. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a6aadd871d1782944703fed773d44b85f}{xb\+Fwrite}} (const void $\ast$ptr, size\+\_\+t l\+Size, size\+\_\+t l\+Nmemb)
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fwrite. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a518bfcbfa3699d883cf89affee383296}{xb\+Truncate}} (xb\+Int64 ll\+Size)
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for ftruncate. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}{Display\+Error}} (xb\+Int16 Error\+Code) const
+\begin{DoxyCompactList}\small\item\em Display error message on console for a given error number. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a6fbb9c3a550ab0b3378f9586a57791d2}{Get\+Default\+Date\+Format}} () const
+\begin{DoxyCompactList}\small\item\em Get the default date format. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}{Get\+Data\+Directory}} () const
+\begin{DoxyCompactList}\small\item\em Get the current data directory. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_abfaeef85935331073d213465bb362a61}{Get\+Temp\+Directory}} () const
+\begin{DoxyCompactList}\small\item\em Get the current temp directory. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}{Get\+Home\+Dir}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Home\+Dir\+Out)
+\begin{DoxyCompactList}\small\item\em Get home directory. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}{Get\+Endian\+Type}} () const
+\begin{DoxyCompactList}\small\item\em Get the Endian type. \end{DoxyCompactList}\item
+const char $\ast$ \mbox{\hyperlink{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}{Get\+Error\+Message}} (xb\+Int16 Error\+Code) const
+\begin{DoxyCompactList}\small\item\em Get an error message. \end{DoxyCompactList}\item
+char \mbox{\hyperlink{classxb_1_1xbSsv_a63cee13b473ee13970e93b11837b9e35}{Get\+Path\+Separator}} () const
+\begin{DoxyCompactList}\small\item\em Get the OS dependent path separator. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}{Set\+Data\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Data\+Directory)
+\begin{DoxyCompactList}\small\item\em Set the data directory. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}{Set\+Default\+Date\+Format}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Default\+Date\+Format)
+\begin{DoxyCompactList}\small\item\em Set the default date format. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a17c229a20ef9ab4034df8f9cd657adb2}{Set\+Temp\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Temp\+Directory)
+\begin{DoxyCompactList}\small\item\em Set the temp directory. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}{Bit\+Set}} (unsigned char c, xb\+Int16 i\+Bit\+No) const
+\begin{DoxyCompactList}\small\item\em Check a bit in a one byte field and see if it is set. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}{Bit\+Dump}} (unsigned char c) const
+\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}{Bit\+Dump}} (char c) const
+\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}{Get\+Default\+Auto\+Commit}} () const
+\begin{DoxyCompactList}\small\item\em Get the default auto commit setting. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}{Set\+Default\+Auto\+Commit}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Default\+Auto\+Commit)
+\begin{DoxyCompactList}\small\item\em Set the default auto commit. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}{Get\+Log\+Directory}} () const
+\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}{Get\+Log\+File\+Name}} () const
+\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}{Set\+Log\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Log\+Directory)
+\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a7f05738e7dfd759e89990242ef503544}{Set\+Log\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Log\+File\+Name)
+\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}{Get\+Multi\+User}} () const
+\begin{DoxyCompactList}\small\item\em Get the multi user setting. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}{Set\+Multi\+User}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Multi\+User)
+\begin{DoxyCompactList}\small\item\em Get the multi user setting. \end{DoxyCompactList}\end{DoxyCompactItemize}
+\doxysubsection*{Static Public Attributes}
+\begin{DoxyCompactItemize}
+\item
+static const char $\ast$ \mbox{\hyperlink{classxb_1_1xbSsv_a6219f1b5e24ea12fe158cd5aea56988e}{Error\+Code\+Text}} \mbox{[}$\,$\mbox{]}
+\end{DoxyCompactItemize}
+\doxysubsection*{Protected Member Functions}
+\begin{DoxyCompactItemize}
+\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a060541addb5bb1f0fe12959ed6f66fb9}{Read\+Header}} (xb\+Int16 i\+File\+Position\+Option, xb\+Int16 i\+Read\+Option)
+\begin{DoxyCompactList}\small\item\em Read dbf file header information. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_aabd146c0e1054ab905ec96aedd84b02e}{Get\+Raw\+Field}} (xb\+Int16 i\+Field\+No, char $\ast$Buf, xb\+UInt32 Buf\+Size, xb\+Int16 i\+Rec\+Buf\+Sw) const
+\begin{DoxyCompactList}\small\item\em Get raw field data for field number. \end{DoxyCompactList}\item
+virtual void \mbox{\hyperlink{classxb_1_1xbDbf_ad06fe0f7975fb81125d27d82504e6829}{Init\+Vars}} ()
+\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a7e63e852418f337eb7c44de5dcd50323}{Set\+Version}} ()=0
+\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_aba5dcac3b4092261bc1669740cdd669d}{Validate\+Schema}} (\mbox{\hyperlink{structxb_1_1xbSchema}{xb\+Schema}} $\ast$s)=0
+\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a44e1410109ef7b3d11a6af4b704b62b2}{Write\+Header}} (xb\+Int16 i\+Position\+Option, xb\+Int16 i\+Write\+Option)
+\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a904ec348fd029d4a76e72b8fde636108}{Set\+Endian\+Type}} ()
+\begin{DoxyCompactList}\small\item\em Set the endian type. \end{DoxyCompactList}\end{DoxyCompactItemize}
+\doxysubsection*{Protected Attributes}
+\begin{DoxyCompactItemize}
+\item
+xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbDbf_afcd99924606be0a9e1e25180bcd1abf8}{ul\+Cur\+Rec}}
+\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ab506450954bc86e7bf1d7c4efe681f43}{i\+Auto\+Commit}}
+\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a15f495446f0d75bcf2fa89e3b699d388}{i\+File\+Version}}
+\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \mbox{\hyperlink{classxb_1_1xbDbf_a73f9c792d0a769e2e604c1855245a276}{s\+Alias}}
+\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a5056757614c39f725cc775332494966a}{i\+No\+Of\+Fields}}
+\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a6d8e193da3ca414eef1e8866ec5ca81b}{i\+Dbf\+Status}}
+\item
+xb\+Schema\+Rec $\ast$ \mbox{\hyperlink{classxb_1_1xbDbf_ad8c8b5eb12063bb898da1b2cc02cfce7}{Schema\+Ptr}}
+\item
+char $\ast$ \mbox{\hyperlink{classxb_1_1xbDbf_a8a9b3bce0b741e73473d3ebbd6e6f1cd}{Rec\+Buf}}
+\item
+char $\ast$ \mbox{\hyperlink{classxb_1_1xbDbf_a353ebfc8a2960ef827f429ec74025606}{Rec\+Buf2}}
+\item
+unsigned char \mbox{\hyperlink{classxb_1_1xbDbf_a3a262abf658e5fa968b57ef457a69470}{c\+Version}}
+\item
+char \mbox{\hyperlink{classxb_1_1xbDbf_a4fcd6a86ddd32d4a9d76a4074573440a}{c\+Update\+YY}}
+\item
+char \mbox{\hyperlink{classxb_1_1xbDbf_a9340a5e8ee53eb0f3b6601eec2d71e1b}{c\+Update\+MM}}
+\item
+char \mbox{\hyperlink{classxb_1_1xbDbf_a6021789d314cd41488991e708fcd0df2}{c\+Update\+DD}}
+\item
+xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbDbf_acb594ab61dd35b17bdf28394083f8e87}{ul\+No\+Of\+Recs}}
+\item
+xb\+UInt16 \mbox{\hyperlink{classxb_1_1xbDbf_a62f5fa9149ae0f6dc75642823de66918}{ui\+Header\+Len}}
+\item
+xb\+UInt16 \mbox{\hyperlink{classxb_1_1xbDbf_a1760e222567e2c849f9c799b9d896e91}{ui\+Record\+Len}}
+\item
+char \mbox{\hyperlink{classxb_1_1xbDbf_ac3c89fc3bc6a6abf385478a8adbed970}{c\+Transaction\+Flag}}
+\item
+char \mbox{\hyperlink{classxb_1_1xbDbf_a8734e799707582f022fc341d515650f4}{c\+Encryption\+Flag}}
+\item
+char \mbox{\hyperlink{classxb_1_1xbDbf_ad59074633641e03647e54d2b66c9102b}{c\+Index\+Flag}}
+\item
+char \mbox{\hyperlink{classxb_1_1xbDbf_aea1dfe5cbd1f9cdbcfc8eb04b2c3d5f1}{c\+Lang\+Driver}}
+\item
+\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$ \mbox{\hyperlink{classxb_1_1xbFile_ae39a67ea391b46055d4ca299cb222004}{xbase}}
+\end{DoxyCompactItemize}
+\doxysubsection*{Static Protected Attributes}
+\begin{DoxyCompactItemize}
+\item
+static xb\+Int16 \mbox{\hyperlink{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}{i\+Endian\+Type}} = 0
+\item
+static \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \mbox{\hyperlink{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}{s\+Null\+String}} = \char`\"{}\char`\"{}
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Base class for handling dbf files/tables.
+
+The \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} class is used as a base class for accessing dbf files. ~\newline
+ In line with relational theory, a each dbf file can be considered as a table. The documentation uses the terms dbf and table interchangeably.~\newline
+
+
+This module handles methods for accessing and updating dbf files.
+
+~\newline
+ The class is designed to support additional file layouts with a minimal amount of effort. If you are wanting to update the library to support a new dbf file type not currently supported by the library, create a derived class using \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} as a base class and modify methods needed to support the new dbf file version.~\newline
+ See the following for examples on how to start on this\+:~\newline
+ xb\+Dbf3 is a derived class from \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} and supports the original Dbase III+ file version.~\newline
+ xb\+Dbf4 is a derived class from \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} and supports the original Dbase IV file version.~\newline
+
+
+\doxysubsection{Constructor \& Destructor Documentation}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a84a75f80bc0e9b8a22b728767949c204}\label{classxb_1_1xbDbf_a84a75f80bc0e9b8a22b728767949c204}}
+\index{xb::xbDbf@{xb::xbDbf}!xbDbf@{xbDbf}}
+\index{xbDbf@{xbDbf}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{xbDbf()}{xbDbf()}}
+{\footnotesize\ttfamily xb\+::xb\+Dbf\+::xb\+Dbf (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$}]{x }\end{DoxyParamCaption})}
+
+
+
+Constructor.
+
+
+\begin{DoxyParams}{Parameters}
+{\em x} & Pointer to xb\+Xbase \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a7eb87521fba8a939c613056d9918d880}\label{classxb_1_1xbDbf_a7eb87521fba8a939c613056d9918d880}}
+\index{xb::xbDbf@{xb::xbDbf}!````~xbDbf@{$\sim$xbDbf}}
+\index{````~xbDbf@{$\sim$xbDbf}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{$\sim$xbDbf()}{~xbDbf()}}
+{\footnotesize\ttfamily xb\+::xb\+Dbf\+::$\sim$xb\+Dbf (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Destructor.
+
+
+
+\doxysubsection{Member Function Documentation}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a4edcf31390fbdc8c3558004770fd9f2f}\label{classxb_1_1xbDbf_a4edcf31390fbdc8c3558004770fd9f2f}}
+\index{xb::xbDbf@{xb::xbDbf}!Abort@{Abort}}
+\index{Abort@{Abort}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{Abort()}{Abort()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Abort (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Abort any uncommited changes for the current record buffer.
+
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a5b412dd796241673eb1aa2c93513d69b}\label{classxb_1_1xbDbf_a5b412dd796241673eb1aa2c93513d69b}}
+\index{xb::xbDbf@{xb::xbDbf}!AppendRecord@{AppendRecord}}
+\index{AppendRecord@{AppendRecord}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{AppendRecord()}{AppendRecord()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Append\+Record (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Append the current record to the data file.
+
+This method attempts to append the contents of the current record buffer to the end of the DBF file, updates the file date, number of records in the file and updates any open indices associated with this data file.~\newline
+
+
+To add a record, an application would typically blank the record buffer, update various fields in the record buffer, then append the record.~\newline
+
+
+The append method performs the following tasks\+:~\newline
+ 1) Create new index key values~\newline
+ 2) Lock the table~\newline
+ 3) Lock append bytes~\newline
+ 4) Lock indices~\newline
+ 5) Read the dbf header~\newline
+ 6) Check for dup keys~\newline
+ 7) Calc last update date, no of recs~\newline
+ 8) Add keys~\newline
+ 9) Unlock indices~\newline
+ 10) Update file header~\newline
+ 11) Unlock file header~\newline
+ 12) Append record~\newline
+ 13) Unlock append bytes~\newline
+
+
+Note\+: Locking memo files is not needed as the memo file updates are handled outside of the append method.~\newline
+
+
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}\label{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}}
+\index{xb::xbDbf@{xb::xbDbf}!BitDump@{BitDump}}
+\index{BitDump@{BitDump}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{BitDump()}{BitDump()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Bit\+Dump (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}\label{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}}
+\index{xb::xbDbf@{xb::xbDbf}!BitDump@{BitDump}}
+\index{BitDump@{BitDump}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{BitDump()}{BitDump()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Bit\+Dump (\begin{DoxyParamCaption}\item[{unsigned char}]{c }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}\label{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}}
+\index{xb::xbDbf@{xb::xbDbf}!BitSet@{BitSet}}
+\index{BitSet@{BitSet}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{BitSet()}{BitSet()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Ssv\+::\+Bit\+Set (\begin{DoxyParamCaption}\item[{unsigned char}]{c, }\item[{xb\+Int16}]{i\+Bit\+No }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Check a bit in a one byte field and see if it is set.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c} & One byte char field to examine. \\
+\hline
+{\em i\+Bit\+No} & which bit to examine. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+xb\+True Bit is set~\newline
+ xb\+False Bit is not set
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a78da5a3d2011a3f2e7618cbdd3ba02d6}\label{classxb_1_1xbDbf_a78da5a3d2011a3f2e7618cbdd3ba02d6}}
+\index{xb::xbDbf@{xb::xbDbf}!BlankRecord@{BlankRecord}}
+\index{BlankRecord@{BlankRecord}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{BlankRecord()}{BlankRecord()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Blank\+Record (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Blank the record buffer.
+
+This method would typically be called to initialize the record buffer before updates are applied to append a new record.
+
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_ad68d73113e54e1b5f326e90f45e9989d}\label{classxb_1_1xbDbf_ad68d73113e54e1b5f326e90f45e9989d}}
+\index{xb::xbDbf@{xb::xbDbf}!Close@{Close}}
+\index{Close@{Close}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{Close()}{Close()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Close (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Close DBF file/table.
+
+This routine flushes any remaining updates to disk, closes the DBF file and any associated memo and index files.
+
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_abd69532c885ab72bcf3fb5066b318f4f}\label{classxb_1_1xbDbf_abd69532c885ab72bcf3fb5066b318f4f}}
+\index{xb::xbDbf@{xb::xbDbf}!Commit@{Commit}}
+\index{Commit@{Commit}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{Commit()}{Commit()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Commit (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Commit updates to disk.
+
+This routine commits any pending updates to disk.
+
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a829c615a130a1fdf609d93438d8a6264}\label{classxb_1_1xbDbf_a829c615a130a1fdf609d93438d8a6264}}
+\index{xb::xbDbf@{xb::xbDbf}!CopyDbfStructure@{CopyDbfStructure}}
+\index{CopyDbfStructure@{CopyDbfStructure}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{CopyDbfStructure()}{CopyDbfStructure()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Copy\+Dbf\+Structure (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$}]{d\+New\+Table, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+New\+Table\+Name, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+New\+Table\+Alias, }\item[{xb\+Int16}]{i\+Overlay, }\item[{xb\+Int16}]{i\+Share\+Mode }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Copy table (dbf) file structure.
+
+This routine will copy the structure of a dbf file and if successful return a pointer to the new table in an open state.
+
+
+\begin{DoxyParams}{Parameters}
+{\em d\+New\+Table} & Reference to new table object. \\
+\hline
+{\em s\+New\+Table\+Name} & New table (dbf) name. \\
+\hline
+{\em s\+New\+Table\+Alias} & Alias name of new table. \\
+\hline
+{\em i\+Overlay} & xb\+True -\/ Overlay existing file.~\newline
+ xb\+False -\/ Don\textquotesingle{}t overlay existing file. \\
+\hline
+{\em i\+Share\+Mode} & XB\+\_\+\+SINGLE\+\_\+\+USER~\newline
+ XB\+\_\+\+MULTI\+\_\+\+USER \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}} Copy DBF structure
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a73e41bfe679dd06ab16c436652df93f1}\label{classxb_1_1xbDbf_a73e41bfe679dd06ab16c436652df93f1}}
+\index{xb::xbDbf@{xb::xbDbf}!CreateTable@{CreateTable}}
+\index{CreateTable@{CreateTable}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{CreateTable()}{CreateTable()}}
+{\footnotesize\ttfamily virtual xb\+Int16 xb\+::xb\+Dbf\+::\+Create\+Table (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Table\+Name, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Alias, }\item[{\mbox{\hyperlink{structxb_1_1xbSchema}{xb\+Schema}} $\ast$}]{p\+Schema, }\item[{xb\+Int16}]{i\+Overlay, }\item[{xb\+Int16}]{i\+Share\+Mode }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}
+
+\mbox{\Hypertarget{classxb_1_1xbFile_ad39797624a752b9d62533d00fad9feff}\label{classxb_1_1xbFile_ad39797624a752b9d62533d00fad9feff}}
+\index{xb::xbDbf@{xb::xbDbf}!CreateUniqueFileName@{CreateUniqueFileName}}
+\index{CreateUniqueFileName@{CreateUniqueFileName}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{CreateUniqueFileName()}{CreateUniqueFileName()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Create\+Unique\+File\+Name (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Dir\+In, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Ext\+In, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Fqn\+Out, }\item[{xb\+Int16}]{i\+Option = {\ttfamily 0} }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Create a unique file name.
+
+Given a directory and file extension as inputs, create a unique file name.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Dir\+In} & Directory \\
+\hline
+{\em s\+Ext\+In} & File Extension \\
+\hline
+{\em s\+Fqn\+Out} & A fully qualifed unique file name as output \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+Create a unique file name.
+
+Given a directory and file extension as inputs, create a unique file name.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Dir\+In} & Directory \\
+\hline
+{\em s\+Ext\+In} & File Extension \\
+\hline
+{\em i\+Option} & 0 -\/ look only for one file for a given directory and extension~\newline
+ 1 -\/ if file name extension is \char`\"{}dbf\char`\"{} or \char`\"{}\+DBF\char`\"{}, verify unique dbt or DBT (memo) file is also available~\newline
+ \\
+\hline
+{\em s\+Fqn\+Out} & A fully qualifed unique file name as output \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a01c26b67e312be1e674b3da710e031b9}\label{classxb_1_1xbDbf_a01c26b67e312be1e674b3da710e031b9}}
+\index{xb::xbDbf@{xb::xbDbf}!DeleteAll@{DeleteAll}}
+\index{DeleteAll@{DeleteAll}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{DeleteAll()}{DeleteAll()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Delete\+All (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Option }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Delete or undelete all records in a dbf file (table).
+
+This routine deletes or un-\/deletes all records. The xbase file format contains a leading one byte character used for flagging a record as deleted. When a record is deleted, it\textquotesingle{}s not physically removed from the file, the first byte is flagged as deleted.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Option} & 0 -\/ Delete all records.~\newline
+ 1 -\/ Un-\/delete all deleted records. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a3067fdfa3a7a5c15651f6e89d1102176}\label{classxb_1_1xbDbf_a3067fdfa3a7a5c15651f6e89d1102176}}
+\index{xb::xbDbf@{xb::xbDbf}!DeleteAllRecords@{DeleteAllRecords}}
+\index{DeleteAllRecords@{DeleteAllRecords}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{DeleteAllRecords()}{DeleteAllRecords()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Delete\+All\+Records (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Delete all records.
+
+This routine deletes all the records in a table / dbf file.
+
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_acd8c10579229f3a2e2c5fdb7fcef90db}\label{classxb_1_1xbDbf_acd8c10579229f3a2e2c5fdb7fcef90db}}
+\index{xb::xbDbf@{xb::xbDbf}!DeleteRecord@{DeleteRecord}}
+\index{DeleteRecord@{DeleteRecord}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{DeleteRecord()}{DeleteRecord()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Delete\+Record (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Delete the current record.
+
+This routine flags the current record for deletion if it\textquotesingle{}s not already flagged.
+
+\begin{DoxyReturn}{Returns}
+XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+ XB\+\_\+\+INVALID\+\_\+\+RECORD
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a4085ed4f049d976124d8edc3d3c56397}\label{classxb_1_1xbDbf_a4085ed4f049d976124d8edc3d3c56397}}
+\index{xb::xbDbf@{xb::xbDbf}!DeleteTable@{DeleteTable}}
+\index{DeleteTable@{DeleteTable}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{DeleteTable()}{DeleteTable()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Delete\+Table (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Delete a table.
+
+This routine deletes a given table, associated index files if any, the memo file if any and the .INF file if any. \begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a5a740033664c9ad2611c90e2a6d0c2d3}\label{classxb_1_1xbFile_a5a740033664c9ad2611c90e2a6d0c2d3}}
+\index{xb::xbDbf@{xb::xbDbf}!DetermineXbaseMemoVersion@{DetermineXbaseMemoVersion}}
+\index{DetermineXbaseMemoVersion@{DetermineXbaseMemoVersion}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{DetermineXbaseMemoVersion()}{DetermineXbaseMemoVersion()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Determine\+Xbase\+Memo\+Version (\begin{DoxyParamCaption}\item[{unsigned char}]{c\+File\+Type\+Byte }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Determine which version the memo (dbt) file is.
+
+This routine uses the first byte in the dbf file to determine which memo file version is in use. The main difference between version 3 and 4 is that version 4 will reuse blocks if they become available. Version 3 does not.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c\+File\+Type\+Byte} & is an output field and is one of\+:~\newline
+ ~\newline
+ 0 -\/ none~\newline
+ 3 -\/ Dbase III+~\newline
+ 4 -\/ Dbase IV~\newline
+\\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_ae2b6ac26018dc28f77afbb3f008c3f66}\label{classxb_1_1xbFile_ae2b6ac26018dc28f77afbb3f008c3f66}}
+\index{xb::xbDbf@{xb::xbDbf}!DetermineXbaseTableVersion@{DetermineXbaseTableVersion}}
+\index{DetermineXbaseTableVersion@{DetermineXbaseTableVersion}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{DetermineXbaseTableVersion()}{DetermineXbaseTableVersion()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Determine\+Xbase\+Table\+Version (\begin{DoxyParamCaption}\item[{unsigned char}]{c\+File\+Type\+Byte }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Determine xbase dbf version.
+
+This routine is used to determine which version of the Xbase classes can be used for a given DBF file.~\newline
+
+
+It attempts to use the highest version compiled into the library.~\newline
+
+
+References\+:~\newline
+ This routine uses the first byte from the dbf file.~\newline
+ Per DBase documentation\+:~\newline
+ Valid d\+BASE for Windows table file, bits 0-\/2 indicate version number\+: 3 for d\+BASE Level 5, 4 for d\+BASE Level 7.~\newline
+ Bit 3 and bit 7 indicate presence of a d\+BASE IV or d\+BASE for Windows memo file;~\newline
+ Bits 4-\/6 indicate the presence of a d\+BASE IV SQL table;~\newline
+ Bit 7 indicates the presence of any .DBT memo file (either a d\+BASE III PLUS type or a d\+BASE IV or d\+BASE for Windows memo file).~\newline
+ ~\newline
+ Bachmann spec (used extensively in library build), page 7 -\/ does not match DBase documentation~\newline
+ ~\newline
+ returns~\newline
+ 0 -\/ unknown~\newline
+ 3 -\/ Dbase level 3~\newline
+ 4 -\/ Dbase level 4~\newline
+ 5 -\/ Dbase Level 5 (future)~\newline
+ 7 -\/ Dbase Level 7 (future)~\newline
+ ~\newline
+ 1x -\/ Clipper files (future)~\newline
+ 2x -\/ Foxbase files (future)~\newline
+ ~\newline
+ \mbox{\Hypertarget{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}\label{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}}
+\index{xb::xbDbf@{xb::xbDbf}!DisplayError@{DisplayError}}
+\index{DisplayError@{DisplayError}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{DisplayError()}{DisplayError()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Display\+Error (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Error\+Code }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Display error message on console for a given error number.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Error\+Code} & Error number to reference \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a47643728f74cf3b6e0ffc55259895bdb}\label{classxb_1_1xbDbf_a47643728f74cf3b6e0ffc55259895bdb}}
+\index{xb::xbDbf@{xb::xbDbf}!DumpHeader@{DumpHeader}}
+\index{DumpHeader@{DumpHeader}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{DumpHeader()}{DumpHeader()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Dump\+Header (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Option }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Dump dbf file header.
+
+This routine dumps dbf header information to the console.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Option} & 1 = Print header only~\newline
+ 2 = Field data only~\newline
+ 3 = Header and Field data~\newline
+ 4 = Header, Field and Memo header data if applicable \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_aba30399f15885a07f87f904c0d0656fa}\label{classxb_1_1xbDbf_aba30399f15885a07f87f904c0d0656fa}}
+\index{xb::xbDbf@{xb::xbDbf}!DumpRecord@{DumpRecord}}
+\index{DumpRecord@{DumpRecord}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{DumpRecord()}{DumpRecord()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Dump\+Record (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{ul\+Rec\+No, }\item[{xb\+Int16}]{i\+Output\+Dest = {\ttfamily 0}, }\item[{xb\+Int16}]{i\+Output\+Fmt = {\ttfamily 0} }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Dump record.
+
+Dump the contents of the specified record
+
+
+\begin{DoxyParams}{Parameters}
+{\em ul\+Rec\+No} & Record number of record to be dumped. \\
+\hline
+{\em i\+Output\+Dest} & 0 = stdout~\newline
+ 1 = Syslog~\newline
+ 2 = Both~\newline
+\\
+\hline
+{\em i\+Output\+Fmt} & 0 = with field names~\newline
+ 1 = 1 line per rec, no field names~\newline
+ 2 = 1 line per rec, first line is a list of field names. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_ab14e4a11427f5efb81cba1dd32bd1aa1}\label{classxb_1_1xbFile_ab14e4a11427f5efb81cba1dd32bd1aa1}}
+\index{xb::xbDbf@{xb::xbDbf}!eGetDouble@{eGetDouble}}
+\index{eGetDouble@{eGetDouble}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{eGetDouble()}{eGetDouble()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} xb\+::xb\+File\+::e\+Get\+Double (\begin{DoxyParamCaption}\item[{const char $\ast$}]{p }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get a portable double value.
+
+This routine returns a double value from an 8 byte character stream, accounting for endian type.
+
+Converts a double (64 bit floating point) value stored at p from a portable format to the machine format.
+
+
+\begin{DoxyParams}{Parameters}
+{\em p} & pointer to memory containing the portable double value\\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+the double value.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_ac40c991110ddc6fb30a72d90f4652762}\label{classxb_1_1xbFile_ac40c991110ddc6fb30a72d90f4652762}}
+\index{xb::xbDbf@{xb::xbDbf}!eGetInt16@{eGetInt16}}
+\index{eGetInt16@{eGetInt16}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{eGetInt16()}{eGetInt16()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::e\+Get\+Int16 (\begin{DoxyParamCaption}\item[{const char $\ast$}]{p }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get a portable short value.
+
+This routine returns a short int value from a 2 byte character stream, accounting for endian type.
+
+
+\begin{DoxyParams}{Parameters}
+{\em p} & pointer to memory containing the portable long value\\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+the short value.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a60b24a5afc984c586bf384c7e915ba0d}\label{classxb_1_1xbFile_a60b24a5afc984c586bf384c7e915ba0d}}
+\index{xb::xbDbf@{xb::xbDbf}!eGetInt32@{eGetInt32}}
+\index{eGetInt32@{eGetInt32}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{eGetInt32()}{eGetInt32()}}
+{\footnotesize\ttfamily xb\+Int32 xb\+::xb\+File\+::e\+Get\+Int32 (\begin{DoxyParamCaption}\item[{const char $\ast$}]{p }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get a portable long value.
+
+This routine returns a long int value from a 4 byte character stream, accounting for endian type.
+
+
+\begin{DoxyParams}{Parameters}
+{\em p} & pointer to memory containing the portable long value\\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+the long value.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a936ade458e6d5e6d29f9b5031888d189}\label{classxb_1_1xbFile_a936ade458e6d5e6d29f9b5031888d189}}
+\index{xb::xbDbf@{xb::xbDbf}!eGetUInt16@{eGetUInt16}}
+\index{eGetUInt16@{eGetUInt16}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{eGetUInt16()}{eGetUInt16()}}
+{\footnotesize\ttfamily xb\+UInt16 xb\+::xb\+File\+::e\+Get\+UInt16 (\begin{DoxyParamCaption}\item[{const char $\ast$}]{p }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get a portable unsigned short value.
+
+This routine returns a short unsigned int value from a 2 byte character stream, accounting for endian type.
+
+
+\begin{DoxyParams}{Parameters}
+{\em p} & pointer to memory containing the portable long value\\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+the short value.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a78f052529d39a18deaface5a0d47d0b0}\label{classxb_1_1xbFile_a78f052529d39a18deaface5a0d47d0b0}}
+\index{xb::xbDbf@{xb::xbDbf}!eGetUInt32@{eGetUInt32}}
+\index{eGetUInt32@{eGetUInt32}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{eGetUInt32()}{eGetUInt32()}}
+{\footnotesize\ttfamily xb\+UInt32 xb\+::xb\+File\+::e\+Get\+UInt32 (\begin{DoxyParamCaption}\item[{const char $\ast$}]{p }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get a portable unsigned long value.
+
+This routine returns an unsigned long int value from a 4 byte character stream, accounting for endian type.
+
+
+\begin{DoxyParams}{Parameters}
+{\em p} & pointer to memory containing the portable long value\\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+the unsigned long value.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a98b6ff533ae93f90c977a2ba23eeb105}\label{classxb_1_1xbFile_a98b6ff533ae93f90c977a2ba23eeb105}}
+\index{xb::xbDbf@{xb::xbDbf}!ePutDouble@{ePutDouble}}
+\index{ePutDouble@{ePutDouble}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{ePutDouble()}{ePutDouble()}}
+{\footnotesize\ttfamily void xb\+::xb\+File\+::e\+Put\+Double (\begin{DoxyParamCaption}\item[{char $\ast$}]{c, }\item[{\mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}}}]{d }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Write a portable double value to memory location.
+
+Converts a double (64 bit floating point) value from machine format to a portable format and stores the converted value in the memory referenced by c.
+
+This routine puts a double value to an 8 byte character stream
+
+
+\begin{DoxyParams}{Parameters}
+{\em c} & Pointer to memory to hold converted value \\
+\hline
+{\em d} & Input value to be converted \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbFile_a29130f12739ac8fa837f4eaedf1338b2}\label{classxb_1_1xbFile_a29130f12739ac8fa837f4eaedf1338b2}}
+\index{xb::xbDbf@{xb::xbDbf}!ePutInt16@{ePutInt16}}
+\index{ePutInt16@{ePutInt16}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{ePutInt16()}{ePutInt16()}}
+{\footnotesize\ttfamily void xb\+::xb\+File\+::e\+Put\+Int16 (\begin{DoxyParamCaption}\item[{char $\ast$}]{c, }\item[{xb\+Int16}]{s }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Write a portable short value to memory location.
+
+Converts a short (16 bit integer) value from machine format to a portable format and stores the converted value in the memory referenced by c.
+
+This routine puts a short value to a 2 byte character stream
+
+
+\begin{DoxyParams}{Parameters}
+{\em c} & Pointer to memory to hold converted value \\
+\hline
+{\em s} & Input value to be converted \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbFile_a19c37f76a2ccbb45019cb0fc373d3f46}\label{classxb_1_1xbFile_a19c37f76a2ccbb45019cb0fc373d3f46}}
+\index{xb::xbDbf@{xb::xbDbf}!ePutInt32@{ePutInt32}}
+\index{ePutInt32@{ePutInt32}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{ePutInt32()}{ePutInt32()}}
+{\footnotesize\ttfamily void xb\+::xb\+File\+::e\+Put\+Int32 (\begin{DoxyParamCaption}\item[{char $\ast$}]{c, }\item[{xb\+Int32}]{l }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Write a portable long value to memory location.
+
+Converts a long (32 bit integer) value from machine format to a portable format and stores the converted value in the memory referenced by c.
+
+This routine puts a long value to a 4 byte character stream.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c} & Pointer to memory to hold converted value \\
+\hline
+{\em l} & Input value to be converted \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbFile_a65e9839f92b96eac7b0d071fac3bbe40}\label{classxb_1_1xbFile_a65e9839f92b96eac7b0d071fac3bbe40}}
+\index{xb::xbDbf@{xb::xbDbf}!ePutUInt16@{ePutUInt16}}
+\index{ePutUInt16@{ePutUInt16}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{ePutUInt16()}{ePutUInt16()}}
+{\footnotesize\ttfamily void xb\+::xb\+File\+::e\+Put\+UInt16 (\begin{DoxyParamCaption}\item[{char $\ast$}]{c, }\item[{xb\+UInt16}]{s }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Write a portable unsigned short value to memory location.
+
+Converts an unsigned short (16 bit integer) value from machine format to a portable format and stores the converted value in the memory referenced by c.
+
+This routine puts an unsigned short value to a 2 byte character stream
+
+
+\begin{DoxyParams}{Parameters}
+{\em c} & Pointer to memory to hold converted value \\
+\hline
+{\em s} & Input value to be converted \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbFile_aa3f6ceae4b96f24875d86848bf13a173}\label{classxb_1_1xbFile_aa3f6ceae4b96f24875d86848bf13a173}}
+\index{xb::xbDbf@{xb::xbDbf}!ePutUInt32@{ePutUInt32}}
+\index{ePutUInt32@{ePutUInt32}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{ePutUInt32()}{ePutUInt32()}}
+{\footnotesize\ttfamily void xb\+::xb\+File\+::e\+Put\+UInt32 (\begin{DoxyParamCaption}\item[{char $\ast$}]{c, }\item[{xb\+UInt32}]{ul }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Write a portable unsigned long value to memory location.
+
+Converts an unsigned long (32 bit integer) value from machine format to a portable format and stores the converted value in the memory referenced by c.
+
+This routine puts an unsigned long value to a 4 byte character stream.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c} & Pointer to memory to hold converted value \\
+\hline
+{\em ul} & Input value to be converted \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbFile_a78bd8a11dce102647095baf3aff2b006}\label{classxb_1_1xbFile_a78bd8a11dce102647095baf3aff2b006}}
+\index{xb::xbDbf@{xb::xbDbf}!FileExists@{FileExists}}
+\index{FileExists@{FileExists}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{FileExists()}{FileExists()}\hspace{0.1cm}{\footnotesize\ttfamily [1/4]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+File\+::\+File\+Exists (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Determines if a file exists.
+
+\begin{DoxyReturn}{Returns}
+xb\+True if file exists~\newline
+ xb\+False if file does not exist
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a61130b4fbf4cf9d5972dcb4993de2f94}\label{classxb_1_1xbFile_a61130b4fbf4cf9d5972dcb4993de2f94}}
+\index{xb::xbDbf@{xb::xbDbf}!FileExists@{FileExists}}
+\index{FileExists@{FileExists}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{FileExists()}{FileExists()}\hspace{0.1cm}{\footnotesize\ttfamily [2/4]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+File\+::\+File\+Exists (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Determines if a file exists.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+File\+Name} & -\/ file name to check for\\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+xb\+True if file exists~\newline
+ xb\+False if file does not exist
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a0592168f39a10f2a401a88ef781f6148}\label{classxb_1_1xbFile_a0592168f39a10f2a401a88ef781f6148}}
+\index{xb::xbDbf@{xb::xbDbf}!FileExists@{FileExists}}
+\index{FileExists@{FileExists}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{FileExists()}{FileExists()}\hspace{0.1cm}{\footnotesize\ttfamily [3/4]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+File\+::\+File\+Exists (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name, }\item[{xb\+Int16}]{i\+Option }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Determines if a file exists.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+File\+Name} & -\/ file name to check for \\
+\hline
+{\em i\+Option} & if 1, assume this is a request for a dbf file and check for the a dbt memo file also, returns true if both files are found\\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+xb\+True if both dbf and dbt files exist~\newline
+ xb\+False if file does not exist
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a174d8a6aabc9cfcd32fedbd1e5b13ddd}\label{classxb_1_1xbFile_a174d8a6aabc9cfcd32fedbd1e5b13ddd}}
+\index{xb::xbDbf@{xb::xbDbf}!FileExists@{FileExists}}
+\index{FileExists@{FileExists}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{FileExists()}{FileExists()}\hspace{0.1cm}{\footnotesize\ttfamily [4/4]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+File\+::\+File\+Exists (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Option }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Determines if a file exists.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Option} & if 1, assume this is a request for a dbf file and check for the a dbt memo file also, returns true if both files are found\\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+xb\+True if both files exist~\newline
+ xb\+False if file does not exist
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a7fa837938a32dc9ca3fbc81cbaf50f59}\label{classxb_1_1xbFile_a7fa837938a32dc9ca3fbc81cbaf50f59}}
+\index{xb::xbDbf@{xb::xbDbf}!FileIsOpen@{FileIsOpen}}
+\index{FileIsOpen@{FileIsOpen}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{FileIsOpen()}{FileIsOpen()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+File\+::\+File\+Is\+Open (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Determines if file is open.
+
+\begin{DoxyReturn}{Returns}
+xb\+True if file is open~\newline
+ xb\+False if file is not open
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_abb9e20c5efacd4fea80f1515abbc6b55}\label{classxb_1_1xbDbf_abb9e20c5efacd4fea80f1515abbc6b55}}
+\index{xb::xbDbf@{xb::xbDbf}!GetAutoCommit@{GetAutoCommit}}
+\index{GetAutoCommit@{GetAutoCommit}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetAutoCommit()}{GetAutoCommit()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Auto\+Commit (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get auto commit setting.
+
+This routine returns the table setting if set, otherwise returns the system level setting.
+
+\begin{DoxyReturn}{Returns}
+Not 0 -\/ Auto commit on for this table.~\newline
+ 0 -\/ Auto commit off for this table.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_ae0c00226fd2ea7a67f101e795467ed68}\label{classxb_1_1xbDbf_ae0c00226fd2ea7a67f101e795467ed68}}
+\index{xb::xbDbf@{xb::xbDbf}!GetAutoCommit@{GetAutoCommit}}
+\index{GetAutoCommit@{GetAutoCommit}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetAutoCommit()}{GetAutoCommit()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Auto\+Commit (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Option }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get auto commit setting.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Option} & 0 -\/ Specific setting for this table~\newline
+ 1 -\/ If this table should be auto updated (takes DBMS setting into account) \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Not 0 -\/ Auto commit on for this table.~\newline
+ 0 -\/ Auto commit off for this table.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a638e14262410a1627819f016a16cdce2}\label{classxb_1_1xbFile_a638e14262410a1627819f016a16cdce2}}
+\index{xb::xbDbf@{xb::xbDbf}!GetBlockSize@{GetBlockSize}}
+\index{GetBlockSize@{GetBlockSize}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetBlockSize()}{GetBlockSize()}}
+{\footnotesize\ttfamily xb\+UInt32 xb\+::xb\+File\+::\+Get\+Block\+Size (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the block size.
+
+\begin{DoxyReturn}{Returns}
+Block Size
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_ad0827a43c025c1184ffebab74cc9e779}\label{classxb_1_1xbDbf_ad0827a43c025c1184ffebab74cc9e779}}
+\index{xb::xbDbf@{xb::xbDbf}!GetBof@{GetBof}}
+\index{GetBof@{GetBof}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetBof()}{GetBof()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Dbf\+::\+Get\+Bof (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get a pointer to the current index object.
+
+\begin{DoxyReturn}{Returns}
+Pointer to current index.
+\end{DoxyReturn}
+Return true if dbf file empty or positioned to the first record
+
+\begin{DoxyReturn}{Returns}
+Returns true if dbf file is empty or positioned on the first record.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a643a80a3792a52760c8e09ba18719503}\label{classxb_1_1xbDbf_a643a80a3792a52760c8e09ba18719503}}
+\index{xb::xbDbf@{xb::xbDbf}!GetCurRecNo@{GetCurRecNo}}
+\index{GetCurRecNo@{GetCurRecNo}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetCurRecNo()}{GetCurRecNo()}}
+{\footnotesize\ttfamily xb\+UInt32 xb\+::xb\+Dbf\+::\+Get\+Cur\+Rec\+No (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Return the current record number.
+
+\begin{DoxyReturn}{Returns}
+Returns the current record number.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}\label{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}}
+\index{xb::xbDbf@{xb::xbDbf}!GetDataDirectory@{GetDataDirectory}}
+\index{GetDataDirectory@{GetDataDirectory}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetDataDirectory()}{GetDataDirectory()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Data\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the current data directory.
+
+\begin{DoxyReturn}{Returns}
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing the current data directory where the database files are stored.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_ac624e06a97666bfd64b4f252b4548b36}\label{classxb_1_1xbDbf_ac624e06a97666bfd64b4f252b4548b36}}
+\index{xb::xbDbf@{xb::xbDbf}!GetDateField@{GetDateField}}
+\index{GetDateField@{GetDateField}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetDateField()}{GetDateField()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Date\+Field (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{\mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&}]{dt\+Field\+Value }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} field for field name.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Field\+Name} & Name of field to retrieve. \\
+\hline
+{\em dt\+Field\+Value} & Output field value. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_af78ef1fba949463ff7f829d3cffc4555}\label{classxb_1_1xbDbf_af78ef1fba949463ff7f829d3cffc4555}}
+\index{xb::xbDbf@{xb::xbDbf}!GetDateField@{GetDateField}}
+\index{GetDateField@{GetDateField}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetDateField()}{GetDateField()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Date\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{\mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&}]{dt\+Field\+Value }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} field for field number.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Field\+No} & Number of field to retrieve. \\
+\hline
+{\em dt\+Field\+Value} & Output field value. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_ac1110d867ba297a52c8b0e83e88f05e6}\label{classxb_1_1xbDbf_ac1110d867ba297a52c8b0e83e88f05e6}}
+\index{xb::xbDbf@{xb::xbDbf}!GetDbfStatus@{GetDbfStatus}}
+\index{GetDbfStatus@{GetDbfStatus}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetDbfStatus()}{GetDbfStatus()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Dbf\+Status (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Return the current dbf status.
+
+\begin{DoxyReturn}{Returns}
+0 = closed~\newline
+ 1 = open~\newline
+ 2 = updates pending~\newline
+
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}\label{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}}
+\index{xb::xbDbf@{xb::xbDbf}!GetDefaultAutoCommit@{GetDefaultAutoCommit}}
+\index{GetDefaultAutoCommit@{GetDefaultAutoCommit}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetDefaultAutoCommit()}{GetDefaultAutoCommit()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Ssv\+::\+Get\+Default\+Auto\+Commit (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the default auto commit setting.
+
+When auto commit is enabled, the library will automatically post any updates when moving off an updated record or closing files. If auto commit is disabled, the application program will need to explicitly update the tables using using dbf-\/\texorpdfstring{$>$}{>}Put() and dbf-\/\texorpdfstring{$>$}{>}\mbox{\hyperlink{classxb_1_1xbDbf_a5b412dd796241673eb1aa2c93513d69b}{Append\+Record()}}.
+
+\begin{DoxyReturn}{Returns}
+xb\+True if auto commit is turned on~\newline
+ xb\+False is auto commit is turned off
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a6fbb9c3a550ab0b3378f9586a57791d2}\label{classxb_1_1xbSsv_a6fbb9c3a550ab0b3378f9586a57791d2}}
+\index{xb::xbDbf@{xb::xbDbf}!GetDefaultDateFormat@{GetDefaultDateFormat}}
+\index{GetDefaultDateFormat@{GetDefaultDateFormat}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetDefaultDateFormat()}{GetDefaultDateFormat()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Default\+Date\+Format (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the default date format.
+
+\begin{DoxyReturn}{Returns}
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing the default date format.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_acd0fb2166b2bff7e8a1cf65a7bc8be1e}\label{classxb_1_1xbFile_acd0fb2166b2bff7e8a1cf65a7bc8be1e}}
+\index{xb::xbDbf@{xb::xbDbf}!GetDirectory@{GetDirectory}}
+\index{GetDirectory@{GetDirectory}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetDirectory()}{GetDirectory()}}
+{\footnotesize\ttfamily const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+File\+::\+Get\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the directory name.
+
+\begin{DoxyReturn}{Returns}
+the directory name of the file
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a6e6774df0f2d7733f4b25a9989596d95}\label{classxb_1_1xbDbf_a6e6774df0f2d7733f4b25a9989596d95}}
+\index{xb::xbDbf@{xb::xbDbf}!GetDoubleField@{GetDoubleField}}
+\index{GetDoubleField@{GetDoubleField}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetDoubleField()}{GetDoubleField()}\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Double\+Field (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{\mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} \&}]{d\+Field\+Value }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get xb\+Double field for field name.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Field\+Name} & Name of field to retrieve. \\
+\hline
+{\em d\+Field\+Value} & Output field value. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a4556041a7ff2f6b6f986729901c11f08}\label{classxb_1_1xbDbf_a4556041a7ff2f6b6f986729901c11f08}}
+\index{xb::xbDbf@{xb::xbDbf}!GetDoubleField@{GetDoubleField}}
+\index{GetDoubleField@{GetDoubleField}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetDoubleField()}{GetDoubleField()}\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Double\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{\mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} \&}]{d\+Field\+Value }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get xb\+Double field for field number.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Field\+No} & Number of field to retrieve. \\
+\hline
+{\em d\+Field\+Value} & Output field value. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a2370b5e736931441a5968649291b9ef4}\label{classxb_1_1xbDbf_a2370b5e736931441a5968649291b9ef4}}
+\index{xb::xbDbf@{xb::xbDbf}!GetDoubleField@{GetDoubleField}}
+\index{GetDoubleField@{GetDoubleField}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetDoubleField()}{GetDoubleField()}\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Double\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{\mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} \&}]{d\+Field\+Value, }\item[{xb\+Int16}]{i\+Rec\+Buf\+Sw }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get xb\+Double field for field number.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Field\+No} & Number of field to retrieve. \\
+\hline
+{\em d\+Field\+Value} & Output field value. \\
+\hline
+{\em i\+Rec\+Buf\+Sw} & 0 -\/ Record buffer with any updates.~\newline
+1 -\/ Record buffer with original data. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}\label{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}}
+\index{xb::xbDbf@{xb::xbDbf}!GetEndianType@{GetEndianType}}
+\index{GetEndianType@{GetEndianType}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetEndianType()}{GetEndianType()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Ssv\+::\+Get\+Endian\+Type (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the Endian type.
+
+\begin{DoxyReturn}{Returns}
+B -\/ Big endian~\newline
+ L -\/ Little endian~\newline
+
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a256dc1f98626fa77da24e91a38ab5b4d}\label{classxb_1_1xbDbf_a256dc1f98626fa77da24e91a38ab5b4d}}
+\index{xb::xbDbf@{xb::xbDbf}!GetEof@{GetEof}}
+\index{GetEof@{GetEof}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetEof()}{GetEof()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Dbf\+::\+Get\+Eof (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Return true if dbf file empty or positioned to the last record.
+
+\begin{DoxyReturn}{Returns}
+Returns true if error, dbf file is empty or positioned on the last record.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}\label{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}}
+\index{xb::xbDbf@{xb::xbDbf}!GetErrorMessage@{GetErrorMessage}}
+\index{GetErrorMessage@{GetErrorMessage}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetErrorMessage()}{GetErrorMessage()}}
+{\footnotesize\ttfamily const char $\ast$ xb\+::xb\+Ssv\+::\+Get\+Error\+Message (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Error\+Code }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get an error message.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Error\+Code} & Error\+Code is the error number of description to be returned. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Returns a pointer to a string containing a text description for the error code.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a9a0fcf7e2040ab483e3807927833cb26}\label{classxb_1_1xbDbf_a9a0fcf7e2040ab483e3807927833cb26}}
+\index{xb::xbDbf@{xb::xbDbf}!GetField@{GetField}}
+\index{GetField@{GetField}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetField()}{GetField()}\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Field (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Value }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} field for field name.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Field\+Name} & Name of field to retrieve \\
+\hline
+{\em s\+Field\+Value} & Output field value. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_ac81f078f3c932f0da60ad1fbdd848d3e}\label{classxb_1_1xbDbf_ac81f078f3c932f0da60ad1fbdd848d3e}}
+\index{xb::xbDbf@{xb::xbDbf}!GetField@{GetField}}
+\index{GetField@{GetField}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetField()}{GetField()}\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Value }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get field data for field number.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Field\+No} & Number of field to retrieve. \\
+\hline
+{\em s\+Field\+Value} & Output field value. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_ad245a26eb8b79610c9ae7bab19e05513}\label{classxb_1_1xbDbf_ad245a26eb8b79610c9ae7bab19e05513}}
+\index{xb::xbDbf@{xb::xbDbf}!GetField@{GetField}}
+\index{GetField@{GetField}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetField()}{GetField()}\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Value, }\item[{xb\+Int16}]{i\+Rec\+Buf\+Sw }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get field data for field number.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Field\+No} & Number of field to retrieve. \\
+\hline
+{\em s\+Field\+Value} & Output field value. \\
+\hline
+{\em i\+Rec\+Buf\+Sw} & 0 -\/ Record buffer with any updates.~\newline
+1 -\/ Record buffer with original data. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_add27d8ef555a13b336b8c804165dc15e}\label{classxb_1_1xbDbf_add27d8ef555a13b336b8c804165dc15e}}
+\index{xb::xbDbf@{xb::xbDbf}!GetFieldCnt@{GetFieldCnt}}
+\index{GetFieldCnt@{GetFieldCnt}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetFieldCnt()}{GetFieldCnt()}}
+{\footnotesize\ttfamily xb\+Int32 xb\+::xb\+Dbf\+::\+Get\+Field\+Cnt (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Return the number of fields in the table.
+
+\begin{DoxyReturn}{Returns}
+The number of fields in the table.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a607f774fcd6dc0b9913d7a7801b60db2}\label{classxb_1_1xbDbf_a607f774fcd6dc0b9913d7a7801b60db2}}
+\index{xb::xbDbf@{xb::xbDbf}!GetFieldDecimal@{GetFieldDecimal}}
+\index{GetFieldDecimal@{GetFieldDecimal}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetFieldDecimal()}{GetFieldDecimal()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Field\+Decimal (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{xb\+Int16 \&}]{i\+Field\+Decimal }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get decimal for field name.
+
+This routine retreives a field\textquotesingle{}s decimal length.
+\begin{DoxyParams}{Parameters}
+{\em s\+Field\+Name} & Name of field to retrieve \\
+\hline
+{\em i\+Field\+Decimal} & Output field value. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_abcb4defad2e1b6e67f63cc60737ad840}\label{classxb_1_1xbDbf_abcb4defad2e1b6e67f63cc60737ad840}}
+\index{xb::xbDbf@{xb::xbDbf}!GetFieldDecimal@{GetFieldDecimal}}
+\index{GetFieldDecimal@{GetFieldDecimal}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetFieldDecimal()}{GetFieldDecimal()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Field\+Decimal (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{xb\+Int16 \&}]{i\+Field\+Decimal }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get decimal for field number.
+
+This routine retreives a field\textquotesingle{}s decimal length.
+\begin{DoxyParams}{Parameters}
+{\em i\+Field\+No} & Number of field to retrieve \\
+\hline
+{\em i\+Field\+Decimal} & Output field value. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_acf06dbccdba1a4bcd90fa0bea6cca59b}\label{classxb_1_1xbDbf_acf06dbccdba1a4bcd90fa0bea6cca59b}}
+\index{xb::xbDbf@{xb::xbDbf}!GetFieldLen@{GetFieldLen}}
+\index{GetFieldLen@{GetFieldLen}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetFieldLen()}{GetFieldLen()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Field\+Len (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{xb\+Int16 \&}]{i\+Field\+Len }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get field length for field name.
+
+This function retrieves a field\textquotesingle{}s length.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Field\+Name} & Name of field to retrieve \\
+\hline
+{\em i\+Field\+Len} & Output field length value. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_adda4302b58cc6109b048f19d9b68bbd4}\label{classxb_1_1xbDbf_adda4302b58cc6109b048f19d9b68bbd4}}
+\index{xb::xbDbf@{xb::xbDbf}!GetFieldLen@{GetFieldLen}}
+\index{GetFieldLen@{GetFieldLen}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetFieldLen()}{GetFieldLen()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Field\+Len (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{xb\+Int16 \&}]{i\+Field\+Len }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get field length for field number.
+
+This function retrieves a field\textquotesingle{}s length.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Field\+No} & Name of field to retrieve \\
+\hline
+{\em i\+Field\+Len} & Output field length value. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a5e3e4368bfba1724c016b8859023e34c}\label{classxb_1_1xbDbf_a5e3e4368bfba1724c016b8859023e34c}}
+\index{xb::xbDbf@{xb::xbDbf}!GetFieldName@{GetFieldName}}
+\index{GetFieldName@{GetFieldName}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetFieldName()}{GetFieldName()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Field\+Name (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Returns the name of the specified field.
+
+Returns a pointer to the name for the field specified by i\+Field\+No.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Field\+No} & Number of field. \\
+\hline
+{\em s\+Field\+Name} & Output variable containing the field name. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_aad9029e63909aeb77d8473256d88bea8}\label{classxb_1_1xbDbf_aad9029e63909aeb77d8473256d88bea8}}
+\index{xb::xbDbf@{xb::xbDbf}!GetFieldNo@{GetFieldNo}}
+\index{GetFieldNo@{GetFieldNo}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetFieldNo()}{GetFieldNo()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Field\+No (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get field ID number for a given field name.
+
+Returns the field number for the named field.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Field\+Name} & Name of field. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Number of field or XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_aed9113b5095c6df1b9c854cbd0d8047b}\label{classxb_1_1xbDbf_aed9113b5095c6df1b9c854cbd0d8047b}}
+\index{xb::xbDbf@{xb::xbDbf}!GetFieldNo@{GetFieldNo}}
+\index{GetFieldNo@{GetFieldNo}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetFieldNo()}{GetFieldNo()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Field\+No (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{xb\+Int16 \&}]{i\+Field\+No }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get the field number for name.
+
+Returns the field number for the named field.
+
+All field get/put methods require either a field number or field name as one of the parameters. Using the methods that take the field numbers will yield slightly better performance because the methods that take a name, have to look up the number.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Field\+Name} & Name of field. \\
+\hline
+{\em i\+Field\+No} & Output field number for the given name. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Number of field named fld\+Name.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a181db879f1a75f93a34c03513a0b2fea}\label{classxb_1_1xbDbf_a181db879f1a75f93a34c03513a0b2fea}}
+\index{xb::xbDbf@{xb::xbDbf}!GetFieldType@{GetFieldType}}
+\index{GetFieldType@{GetFieldType}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetFieldType()}{GetFieldType()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Field\+Type (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{char \&}]{c\+Field\+Type }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get field type for field name.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Field\+Name} & Field name. \\
+\hline
+{\em c\+Field\+Type} & Output field type. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a5143973e4f165651152aa13c8fd45f84}\label{classxb_1_1xbDbf_a5143973e4f165651152aa13c8fd45f84}}
+\index{xb::xbDbf@{xb::xbDbf}!GetFieldType@{GetFieldType}}
+\index{GetFieldType@{GetFieldType}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetFieldType()}{GetFieldType()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Field\+Type (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{char \&}]{c\+Field\+Type }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get field type for field number.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Field\+No} & Field number. \\
+\hline
+{\em c\+Field\+Type} & Output field type. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_af5127c92892816e9bbc5c19653c4147a}\label{classxb_1_1xbFile_af5127c92892816e9bbc5c19653c4147a}}
+\index{xb::xbDbf@{xb::xbDbf}!GetFileDirPart@{GetFileDirPart}}
+\index{GetFileDirPart@{GetFileDirPart}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetFileDirPart()}{GetFileDirPart()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+File\+Dir\+Part (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Complete\+File\+Name\+In, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Dir\+Part\+Out }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the directory part of the file name.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Complete\+File\+Name\+In} & -\/ a fully qualfied input file name \\
+\hline
+{\em s\+File\+Dir\+Part\+Out} & -\/ the returned directory name part out of s\+Complete\+File\+Name\+In \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a60c53998e3d1b694134b20a87bc9bf5a}\label{classxb_1_1xbFile_a60c53998e3d1b694134b20a87bc9bf5a}}
+\index{xb::xbDbf@{xb::xbDbf}!GetFileDirPart@{GetFileDirPart}}
+\index{GetFileDirPart@{GetFileDirPart}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetFileDirPart()}{GetFileDirPart()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+File\+Dir\+Part (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Dir\+Part\+Out }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the directory part of the file name.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+File\+Dir\+Part\+Out} & -\/ the returned directory name \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_ab289b6ffe955321160c1f90220c22e25}\label{classxb_1_1xbFile_ab289b6ffe955321160c1f90220c22e25}}
+\index{xb::xbDbf@{xb::xbDbf}!GetFileExtPart@{GetFileExtPart}}
+\index{GetFileExtPart@{GetFileExtPart}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetFileExtPart()}{GetFileExtPart()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+File\+Ext\+Part (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Complete\+File\+Name\+In, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Ext\+Part\+Out }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the extension part of the file name.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Complete\+File\+Name\+In} & -\/ a fully qualfied input file name\\
+\hline
+{\em s\+File\+Ext\+Part\+Out} & -\/ the returned directory name part out of s\+Complete\+File\+Name\+In \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a57a9222e5cbb51019d4eeb2c3ac89fa2}\label{classxb_1_1xbFile_a57a9222e5cbb51019d4eeb2c3ac89fa2}}
+\index{xb::xbDbf@{xb::xbDbf}!GetFileExtPart@{GetFileExtPart}}
+\index{GetFileExtPart@{GetFileExtPart}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetFileExtPart()}{GetFileExtPart()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+File\+Ext\+Part (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name\+Ext\+Out }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the extension part of the file name.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+File\+Name\+Ext\+Out} & -\/ the returned extension part out of s\+Complete\+File\+Name\+In \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a02df78f4c90313243f508fc56b95aba8}\label{classxb_1_1xbFile_a02df78f4c90313243f508fc56b95aba8}}
+\index{xb::xbDbf@{xb::xbDbf}!GetFileMtime@{GetFileMtime}}
+\index{GetFileMtime@{GetFileMtime}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetFileMtime()}{GetFileMtime()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+File\+Mtime (\begin{DoxyParamCaption}\item[{time\+\_\+t \&}]{mtime }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the time of last file modification timestamp as reported by the OS.
+
+
+\begin{DoxyParams}{Parameters}
+{\em mtime} & -\/ returned time of last file modification \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_ac95cb882ccbcdedc9a233c6ad9fed07a}\label{classxb_1_1xbFile_ac95cb882ccbcdedc9a233c6ad9fed07a}}
+\index{xb::xbDbf@{xb::xbDbf}!GetFileName@{GetFileName}}
+\index{GetFileName@{GetFileName}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetFileName()}{GetFileName()}}
+{\footnotesize\ttfamily const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+File\+::\+Get\+File\+Name (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the file name.
+
+\begin{DoxyReturn}{Returns}
+the file name portion of the file
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a6110763c5ae996b72c7a62c15bdecc73}\label{classxb_1_1xbFile_a6110763c5ae996b72c7a62c15bdecc73}}
+\index{xb::xbDbf@{xb::xbDbf}!GetFileNamePart@{GetFileNamePart}}
+\index{GetFileNamePart@{GetFileNamePart}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetFileNamePart()}{GetFileNamePart()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+File\+Name\+Part (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Complete\+File\+Name\+In, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name\+Part\+Out }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the name part of the file name.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Complete\+File\+Name\+In} & -\/ a fully qualified input file name \\
+\hline
+{\em s\+File\+Name\+Part\+Out} & -\/ the returned file name part out of s\+Complete\+File\+Name\+In \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a81422b3dd52763d2cc6c77237ec9af0a}\label{classxb_1_1xbFile_a81422b3dd52763d2cc6c77237ec9af0a}}
+\index{xb::xbDbf@{xb::xbDbf}!GetFileNamePart@{GetFileNamePart}}
+\index{GetFileNamePart@{GetFileNamePart}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetFileNamePart()}{GetFileNamePart()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+File\+Name\+Part (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name\+Part\+Out }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the name part of the file name.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+File\+Name\+Part\+Out} & -\/ the returned file name part out of s\+Complete\+File\+Name\+In \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a50b63c39e49d44e52078038027b24cc5}\label{classxb_1_1xbFile_a50b63c39e49d44e52078038027b24cc5}}
+\index{xb::xbDbf@{xb::xbDbf}!GetFileSize@{GetFileSize}}
+\index{GetFileSize@{GetFileSize}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetFileSize()}{GetFileSize()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+File\+Size (\begin{DoxyParamCaption}\item[{xb\+UInt64 \&}]{ull\+File\+Size }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the size of the file as reported by the OS.
+
+
+\begin{DoxyParams}{Parameters}
+{\em ull\+File\+Size} & -\/ unsigned long long field as output \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a5548236d38d43b89ae29b9a015b1f678}\label{classxb_1_1xbFile_a5548236d38d43b89ae29b9a015b1f678}}
+\index{xb::xbDbf@{xb::xbDbf}!GetFileType@{GetFileType}}
+\index{GetFileType@{GetFileType}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetFileType()}{GetFileType()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+File\+Type (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Type\+Out }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the file type aka Capitalized file extension.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+File\+Type\+Out} & -\/ the returned extension part out of s\+Complete\+File\+Name\+In \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a6fc5b8a3e2f177d5ceaf9d975cbb5226}\label{classxb_1_1xbDbf_a6fc5b8a3e2f177d5ceaf9d975cbb5226}}
+\index{xb::xbDbf@{xb::xbDbf}!GetFirstRecord@{GetFirstRecord}}
+\index{GetFirstRecord@{GetFirstRecord}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetFirstRecord()}{GetFirstRecord()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+First\+Record (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get the first record.
+
+Get the first not deleted record. This routines skips over any deleted records. \begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_acb78991e8435edd36318c653cb977c1a}\label{classxb_1_1xbDbf_acb78991e8435edd36318c653cb977c1a}}
+\index{xb::xbDbf@{xb::xbDbf}!GetFirstRecord@{GetFirstRecord}}
+\index{GetFirstRecord@{GetFirstRecord}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetFirstRecord()}{GetFirstRecord()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+First\+Record (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Option }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get the first record.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Option} & XB\+\_\+\+ALL\+\_\+\+RECS -\/ Get the first record, deleted or not.~\newline
+ XB\+\_\+\+ACTIVE\+\_\+\+RECS -\/ Get the first active record.~\newline
+ XB\+\_\+\+DELETED\+\_\+\+RECS -\/ Get the first deleted record.~\newline
+ \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a81ef2f36f921d7ece066a592eb6393eb}\label{classxb_1_1xbDbf_a81ef2f36f921d7ece066a592eb6393eb}}
+\index{xb::xbDbf@{xb::xbDbf}!GetFloatField@{GetFloatField}}
+\index{GetFloatField@{GetFloatField}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetFloatField()}{GetFloatField()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Float\+Field (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{\mbox{\hyperlink{namespacexb_a83aa6a550398db55973aa9fb4257e66e}{xb\+Float}} \&}]{f\+Field\+Value }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get xb\+Float field for field name.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Field\+Name} & Number of field to retrieve. \\
+\hline
+{\em f\+Field\+Value} & Output field value. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a3443f646038ced14425f067a59c0f2da}\label{classxb_1_1xbDbf_a3443f646038ced14425f067a59c0f2da}}
+\index{xb::xbDbf@{xb::xbDbf}!GetFloatField@{GetFloatField}}
+\index{GetFloatField@{GetFloatField}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetFloatField()}{GetFloatField()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Float\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{\mbox{\hyperlink{namespacexb_a83aa6a550398db55973aa9fb4257e66e}{xb\+Float}} \&}]{f\+Field\+Value }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get xb\+Float field for field number.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Field\+No} & Number of field to retrieve. \\
+\hline
+{\em f\+Field\+Value} & Output field value. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a31b4e641f93206ba23e2a5a27491dcd4}\label{classxb_1_1xbFile_a31b4e641f93206ba23e2a5a27491dcd4}}
+\index{xb::xbDbf@{xb::xbDbf}!GetFqFileName@{GetFqFileName}}
+\index{GetFqFileName@{GetFqFileName}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetFqFileName()}{GetFqFileName()}}
+{\footnotesize\ttfamily const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+File\+::\+Get\+Fq\+File\+Name (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the fully qualified file name.
+
+\begin{DoxyReturn}{Returns}
+the fully qualfied name of the file
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_ad56be2756b7a9f8318d9ba5cf215dafb}\label{classxb_1_1xbDbf_ad56be2756b7a9f8318d9ba5cf215dafb}}
+\index{xb::xbDbf@{xb::xbDbf}!GetHeaderLen@{GetHeaderLen}}
+\index{GetHeaderLen@{GetHeaderLen}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetHeaderLen()}{GetHeaderLen()}}
+{\footnotesize\ttfamily virtual xb\+UInt16 xb\+::xb\+Dbf\+::\+Get\+Header\+Len (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}\label{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}}
+\index{xb::xbDbf@{xb::xbDbf}!GetHomeDir@{GetHomeDir}}
+\index{GetHomeDir@{GetHomeDir}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetHomeDir()}{GetHomeDir()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Get\+Home\+Dir (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Home\+Dir\+Out }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get home directory.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Home\+Dir\+Out} & -\/ Output home directory for current user. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a49e667f9c8ee55c36444702663fc5964}\label{classxb_1_1xbDbf_a49e667f9c8ee55c36444702663fc5964}}
+\index{xb::xbDbf@{xb::xbDbf}!GetLastRecord@{GetLastRecord}}
+\index{GetLastRecord@{GetLastRecord}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetLastRecord()}{GetLastRecord()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Last\+Record (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get the last record.
+
+Get the last not deleted record. This routines skips over any deleted records. \begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a8ccfa2291417412b6894940d1b92f9a6}\label{classxb_1_1xbDbf_a8ccfa2291417412b6894940d1b92f9a6}}
+\index{xb::xbDbf@{xb::xbDbf}!GetLastRecord@{GetLastRecord}}
+\index{GetLastRecord@{GetLastRecord}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetLastRecord()}{GetLastRecord()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Last\+Record (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Option }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get the last record.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Option} & XB\+\_\+\+ALL\+\_\+\+RECS -\/ Get the last record, deleted or not.~\newline
+ XB\+\_\+\+ACTIVE\+\_\+\+RECS -\/ Get the last active record.~\newline
+ XB\+\_\+\+DELETED\+\_\+\+RECS -\/ Get the last deleted record.~\newline
+ \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}\label{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}}
+\index{xb::xbDbf@{xb::xbDbf}!GetLogDirectory@{GetLogDirectory}}
+\index{GetLogDirectory@{GetLogDirectory}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetLogDirectory()}{GetLogDirectory()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Log\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}\label{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}}
+\index{xb::xbDbf@{xb::xbDbf}!GetLogFileName@{GetLogFileName}}
+\index{GetLogFileName@{GetLogFileName}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetLogFileName()}{GetLogFileName()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Log\+File\+Name (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbDbf_a943cea7fde1b06c1a05184193eff8d2d}\label{classxb_1_1xbDbf_a943cea7fde1b06c1a05184193eff8d2d}}
+\index{xb::xbDbf@{xb::xbDbf}!GetLogicalField@{GetLogicalField}}
+\index{GetLogicalField@{GetLogicalField}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetLogicalField()}{GetLogicalField()}\hspace{0.1cm}{\footnotesize\ttfamily [1/5]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Logical\+Field (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \&}]{b\+Field\+Value }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get logical field for field name.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Field\+Name} & Name of field to retrieve. \\
+\hline
+{\em b\+Field\+Value} & Output field value. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a9cd6819bfd932ff8507e54d9cb9a624e}\label{classxb_1_1xbDbf_a9cd6819bfd932ff8507e54d9cb9a624e}}
+\index{xb::xbDbf@{xb::xbDbf}!GetLogicalField@{GetLogicalField}}
+\index{GetLogicalField@{GetLogicalField}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetLogicalField()}{GetLogicalField()}\hspace{0.1cm}{\footnotesize\ttfamily [2/5]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Logical\+Field (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Value }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get logical field for field name.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Field\+Name} & Name of field to retrieve. \\
+\hline
+{\em s\+Field\+Value} & Output field value. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_aaf615ddcf08f8cd14efc713c2a8d7ae1}\label{classxb_1_1xbDbf_aaf615ddcf08f8cd14efc713c2a8d7ae1}}
+\index{xb::xbDbf@{xb::xbDbf}!GetLogicalField@{GetLogicalField}}
+\index{GetLogicalField@{GetLogicalField}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetLogicalField()}{GetLogicalField()}\hspace{0.1cm}{\footnotesize\ttfamily [3/5]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Logical\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \&}]{b\+Field\+Value }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get logical field for field number.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Field\+No} & Number of field to retrieve. \\
+\hline
+{\em b\+Field\+Value} & Output field value. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_ab28feef20c988b0a6f1c1911a45377b0}\label{classxb_1_1xbDbf_ab28feef20c988b0a6f1c1911a45377b0}}
+\index{xb::xbDbf@{xb::xbDbf}!GetLogicalField@{GetLogicalField}}
+\index{GetLogicalField@{GetLogicalField}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetLogicalField()}{GetLogicalField()}\hspace{0.1cm}{\footnotesize\ttfamily [4/5]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Logical\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \&}]{b\+Field\+Value, }\item[{xb\+Int16}]{i\+Rec\+Buf\+Sw }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get logical field for field number.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Field\+No} & Number of field to retrieve. \\
+\hline
+{\em b\+Field\+Value} & Output field value. \\
+\hline
+{\em i\+Rec\+Buf\+Sw} & 0 -\/ Record buffer with any updates.~\newline
+1 -\/ Record buffer with original data. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a3254f091fc4a1404abed3dd2bcdd6ce6}\label{classxb_1_1xbDbf_a3254f091fc4a1404abed3dd2bcdd6ce6}}
+\index{xb::xbDbf@{xb::xbDbf}!GetLogicalField@{GetLogicalField}}
+\index{GetLogicalField@{GetLogicalField}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetLogicalField()}{GetLogicalField()}\hspace{0.1cm}{\footnotesize\ttfamily [5/5]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Logical\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Value }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get logical field for field number.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Field\+No} & Number of field to retrieve. \\
+\hline
+{\em s\+Field\+Value} & Output field value. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a7b8ef75b17941beac17e50e969b2d3db}\label{classxb_1_1xbDbf_a7b8ef75b17941beac17e50e969b2d3db}}
+\index{xb::xbDbf@{xb::xbDbf}!GetLongField@{GetLongField}}
+\index{GetLongField@{GetLongField}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetLongField()}{GetLongField()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Long\+Field (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{xb\+Int32 \&}]{l\+Field\+Value }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get long field for field name.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Field\+Name} & Number of field to retrieve. \\
+\hline
+{\em l\+Field\+Value} & Output field value. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_abe525c0820640e0a9e169d0b7913cfa1}\label{classxb_1_1xbDbf_abe525c0820640e0a9e169d0b7913cfa1}}
+\index{xb::xbDbf@{xb::xbDbf}!GetLongField@{GetLongField}}
+\index{GetLongField@{GetLongField}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetLongField()}{GetLongField()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Long\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{xb\+Int32 \&}]{l\+Field\+Value }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get long field for field number.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Field\+No} & Number of field to retrieve. \\
+\hline
+{\em l\+Field\+Value} & Output field value. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}\label{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}}
+\index{xb::xbDbf@{xb::xbDbf}!GetMultiUser@{GetMultiUser}}
+\index{GetMultiUser@{GetMultiUser}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetMultiUser()}{GetMultiUser()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Ssv\+::\+Get\+Multi\+User (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the multi user setting.
+
+\begin{DoxyReturn}{Returns}
+xb\+True -\/ Multi user mode turned on.~\newline
+ xb\+False -\/ Multi user mode turned off.~\newline
+
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_ab896fe3b734f556de578d30f92b18fe2}\label{classxb_1_1xbDbf_ab896fe3b734f556de578d30f92b18fe2}}
+\index{xb::xbDbf@{xb::xbDbf}!GetNextRecord@{GetNextRecord}}
+\index{GetNextRecord@{GetNextRecord}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetNextRecord()}{GetNextRecord()}\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Next\+Record (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get the next record.
+
+Get the next not deleted record. This routines skips over any deleted records. \begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a3191428a7a92d9107d8d42448884f2ac}\label{classxb_1_1xbDbf_a3191428a7a92d9107d8d42448884f2ac}}
+\index{xb::xbDbf@{xb::xbDbf}!GetNextRecord@{GetNextRecord}}
+\index{GetNextRecord@{GetNextRecord}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetNextRecord()}{GetNextRecord()}\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Next\+Record (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Option }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get the next record.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Option} & XB\+\_\+\+ALL\+\_\+\+RECS -\/ Get the next record, deleted or not.~\newline
+ XB\+\_\+\+ACTIVE\+\_\+\+RECS -\/ Get the next active record.~\newline
+ XB\+\_\+\+DELETED\+\_\+\+RECS -\/ Get the next deleted record.~\newline
+ \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a18fdcb4ab15b36cd47fa6f6f7a540d1a}\label{classxb_1_1xbDbf_a18fdcb4ab15b36cd47fa6f6f7a540d1a}}
+\index{xb::xbDbf@{xb::xbDbf}!GetNextRecord@{GetNextRecord}}
+\index{GetNextRecord@{GetNextRecord}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetNextRecord()}{GetNextRecord()}\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Next\+Record (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Option, }\item[{xb\+UInt32}]{ul\+Start\+Rec }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get the next record.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Option} & XB\+\_\+\+ALL\+\_\+\+RECS -\/ Get the next record, deleted or not.~\newline
+ XB\+\_\+\+ACTIVE\+\_\+\+RECS -\/ Get the next active record.~\newline
+ XB\+\_\+\+DELETED\+\_\+\+RECS -\/ Get the next deleted record.~\newline
+ \\
+\hline
+{\em ul\+Start\+Rec} & Get next record, starting from ul\+Start\+Rec. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a909788123ce0694b65dfcf036380d918}\label{classxb_1_1xbDbf_a909788123ce0694b65dfcf036380d918}}
+\index{xb::xbDbf@{xb::xbDbf}!GetNullSts@{GetNullSts}}
+\index{GetNullSts@{GetNullSts}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetNullSts()}{GetNullSts()}\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Null\+Sts (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \&}]{b\+Is\+Null }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get field null status.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Field\+Name} & Field Name of field to retrieve. \\
+\hline
+{\em b\+Is\+Null} & Output field value. If field is all spaces on record buffer, returns true. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_ae9a3f726ce5229ed021bfce0515050fc}\label{classxb_1_1xbDbf_ae9a3f726ce5229ed021bfce0515050fc}}
+\index{xb::xbDbf@{xb::xbDbf}!GetNullSts@{GetNullSts}}
+\index{GetNullSts@{GetNullSts}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetNullSts()}{GetNullSts()}\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Null\+Sts (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \&}]{b\+Is\+Null }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get field null status.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Field\+No} & Number of field to retrieve. \\
+\hline
+{\em b\+Is\+Null} & Output field value. If field is all spaces on record buffer, returns true. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a7930fe8b930c6d646b7b0d3df576fe9e}\label{classxb_1_1xbDbf_a7930fe8b930c6d646b7b0d3df576fe9e}}
+\index{xb::xbDbf@{xb::xbDbf}!GetNullSts@{GetNullSts}}
+\index{GetNullSts@{GetNullSts}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetNullSts()}{GetNullSts()}\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Null\+Sts (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \&}]{b\+Is\+Null, }\item[{xb\+Int16}]{i\+Rec\+Buf\+Sw }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get field null status.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Field\+No} & Number of field to retrieve. \\
+\hline
+{\em b\+Is\+Null} & Output field value. If field is all spaces on record buffer, returns true. \\
+\hline
+{\em i\+Rec\+Buf\+Sw} & 0 -\/ Record buffer with any updates.~\newline
+1 -\/ Record buffer with original data. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a3c500dc9dac22c49496e4b29386b2dd3}\label{classxb_1_1xbFile_a3c500dc9dac22c49496e4b29386b2dd3}}
+\index{xb::xbDbf@{xb::xbDbf}!GetOpenMode@{GetOpenMode}}
+\index{GetOpenMode@{GetOpenMode}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetOpenMode()}{GetOpenMode()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+Open\+Mode (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the open mode of the file.
+
+\begin{DoxyReturn}{Returns}
+XB\+\_\+\+READ~\newline
+ XB\+\_\+\+READ\+\_\+\+WRITE~\newline
+ XB\+\_\+\+WRITE~\newline
+
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a63cee13b473ee13970e93b11837b9e35}\label{classxb_1_1xbSsv_a63cee13b473ee13970e93b11837b9e35}}
+\index{xb::xbDbf@{xb::xbDbf}!GetPathSeparator@{GetPathSeparator}}
+\index{GetPathSeparator@{GetPathSeparator}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetPathSeparator()}{GetPathSeparator()}}
+{\footnotesize\ttfamily char xb\+::xb\+Ssv\+::\+Get\+Path\+Separator (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the OS dependent path separator.
+
+\begin{DoxyReturn}{Returns}
+Returns \textquotesingle{}\textbackslash{}\textquotesingle{} for windows environment, otherwise returns \textquotesingle{}/\textquotesingle{}.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_ab3d248e5221b4f0809897cd43af17a1e}\label{classxb_1_1xbDbf_ab3d248e5221b4f0809897cd43af17a1e}}
+\index{xb::xbDbf@{xb::xbDbf}!GetPrevRecord@{GetPrevRecord}}
+\index{GetPrevRecord@{GetPrevRecord}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetPrevRecord()}{GetPrevRecord()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Prev\+Record (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get the previous record.
+
+Get the previous not deleted record. This routine skips over any deleted records. \begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a7eadc7b08d73003802b90584f7b33387}\label{classxb_1_1xbDbf_a7eadc7b08d73003802b90584f7b33387}}
+\index{xb::xbDbf@{xb::xbDbf}!GetPrevRecord@{GetPrevRecord}}
+\index{GetPrevRecord@{GetPrevRecord}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetPrevRecord()}{GetPrevRecord()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Prev\+Record (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Option }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get the previous record.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Option} & XB\+\_\+\+ALL\+\_\+\+RECS -\/ Get the previous record, deleted or not.~\newline
+ XB\+\_\+\+ACTIVE\+\_\+\+RECS -\/ Get the previous active record.~\newline
+ XB\+\_\+\+DELETED\+\_\+\+RECS -\/ Get the previous deleted record.~\newline
+ \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_aabd146c0e1054ab905ec96aedd84b02e}\label{classxb_1_1xbDbf_aabd146c0e1054ab905ec96aedd84b02e}}
+\index{xb::xbDbf@{xb::xbDbf}!GetRawField@{GetRawField}}
+\index{GetRawField@{GetRawField}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetRawField()}{GetRawField()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Raw\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{char $\ast$}]{c\+Buf, }\item[{xb\+UInt32}]{ul\+Buf\+Size, }\item[{xb\+Int16}]{i\+Rec\+Buf\+Sw }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [protected]}, {\ttfamily [virtual]}}
+
+
+
+Get raw field data for field number.
+
+This is a protected method, used by other methods. This method would be subject to buffer overflows if made public.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Field\+No} & Number of field to retrieve. \\
+\hline
+{\em c\+Buf} & Pointer to buffer area provided by calling application program. \\
+\hline
+{\em ul\+Buf\+Size} & Size of data to copy \\
+\hline
+{\em i\+Rec\+Buf\+Sw} & 0 -\/ Record buffer with any updates.~\newline
+1 -\/ Record buffer with original data. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a26fba086b07caeab95066bf1c8d25161}\label{classxb_1_1xbDbf_a26fba086b07caeab95066bf1c8d25161}}
+\index{xb::xbDbf@{xb::xbDbf}!GetRecord@{GetRecord}}
+\index{GetRecord@{GetRecord}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetRecord()}{GetRecord()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Record (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{ul\+Rec\+No }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get record for specified record number.
+
+Retrieve a record from disk and load it into the record buffer. If auto commit is enabled and there are pending updates, this routine will flush the updates to disk before proceeding to ul\+Rec\+No.
+
+
+\begin{DoxyParams}{Parameters}
+{\em ul\+Rec\+No} & -\/ Record number to retrieve. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_aa3e38c4057d726a28a27d07a1610d124}\label{classxb_1_1xbDbf_aa3e38c4057d726a28a27d07a1610d124}}
+\index{xb::xbDbf@{xb::xbDbf}!GetRecordBuf@{GetRecordBuf}}
+\index{GetRecordBuf@{GetRecordBuf}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetRecordBuf()}{GetRecordBuf()}}
+{\footnotesize\ttfamily char $\ast$ xb\+::xb\+Dbf\+::\+Get\+Record\+Buf (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Opt = {\ttfamily 0} }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get pointer to record buffer.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Opt} & 0 for Rec\+Buf (current) or 1 for Rec\+Buf2 (original contents)\\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Pointer to record buffer.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_ac196ad55335e1f4789d698748434dc89}\label{classxb_1_1xbDbf_ac196ad55335e1f4789d698748434dc89}}
+\index{xb::xbDbf@{xb::xbDbf}!GetRecordCnt@{GetRecordCnt}}
+\index{GetRecordCnt@{GetRecordCnt}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetRecordCnt()}{GetRecordCnt()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Record\+Cnt (\begin{DoxyParamCaption}\item[{xb\+UInt32 \&}]{ul\+Rec\+Cnt }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get the current number of records in the dbf data file.
+
+\begin{DoxyReturn}{Returns}
+Record count or \href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+Get the current number of records in the dbf data file.
+
+
+\begin{DoxyParams}{Parameters}
+{\em ul\+Rec\+Cnt} & Output number of records in file. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_ab50d76c6e29e81e347a6feb04c2f62bb}\label{classxb_1_1xbDbf_ab50d76c6e29e81e347a6feb04c2f62bb}}
+\index{xb::xbDbf@{xb::xbDbf}!GetRecordLen@{GetRecordLen}}
+\index{GetRecordLen@{GetRecordLen}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetRecordLen()}{GetRecordLen()}}
+{\footnotesize\ttfamily xb\+UInt16 xb\+::xb\+Dbf\+::\+Get\+Record\+Len (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get the dbf record length.
+
+\begin{DoxyReturn}{Returns}
+Record length.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a9b63e05b77f477ff6109ff7b9432c1b6}\label{classxb_1_1xbFile_a9b63e05b77f477ff6109ff7b9432c1b6}}
+\index{xb::xbDbf@{xb::xbDbf}!GetShareMode@{GetShareMode}}
+\index{GetShareMode@{GetShareMode}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetShareMode()}{GetShareMode()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+Share\+Mode (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the share mode of the file.
+
+\begin{DoxyReturn}{Returns}
+XB\+\_\+\+SINGLE\+\_\+\+USER -\/ (file buffering on\texorpdfstring{$>$}{>}~\newline
+ XB\+\_\+\+MULTI\+\_\+\+USER -\/ (file buffering off)~\newline
+
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a27758a325c097f204247908b65ba7fbd}\label{classxb_1_1xbDbf_a27758a325c097f204247908b65ba7fbd}}
+\index{xb::xbDbf@{xb::xbDbf}!GetTblAlias@{GetTblAlias}}
+\index{GetTblAlias@{GetTblAlias}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetTblAlias()}{GetTblAlias()}}
+{\footnotesize\ttfamily const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Dbf\+::\+Get\+Tbl\+Alias (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get the table alias.
+
+This routine returns the table alias. \begin{DoxyReturn}{Returns}
+Table alias
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_abfaeef85935331073d213465bb362a61}\label{classxb_1_1xbSsv_abfaeef85935331073d213465bb362a61}}
+\index{xb::xbDbf@{xb::xbDbf}!GetTempDirectory@{GetTempDirectory}}
+\index{GetTempDirectory@{GetTempDirectory}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetTempDirectory()}{GetTempDirectory()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Temp\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the current temp directory.
+
+\begin{DoxyReturn}{Returns}
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing the current data directory where the database files are stored.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a039eb02418ec4ca862adbc0f95b9cbec}\label{classxb_1_1xbDbf_a039eb02418ec4ca862adbc0f95b9cbec}}
+\index{xb::xbDbf@{xb::xbDbf}!GetULongField@{GetULongField}}
+\index{GetULongField@{GetULongField}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetULongField()}{GetULongField()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+ULong\+Field (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{xb\+UInt32 \&}]{ul\+Field\+Value }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get unsigned long field for field name.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Field\+Name} & Number of field to retrieve. \\
+\hline
+{\em ul\+Field\+Value} & Output field value. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a67e3a050f9090edf69eee75aef7f5d83}\label{classxb_1_1xbDbf_a67e3a050f9090edf69eee75aef7f5d83}}
+\index{xb::xbDbf@{xb::xbDbf}!GetULongField@{GetULongField}}
+\index{GetULongField@{GetULongField}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetULongField()}{GetULongField()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+ULong\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{xb\+UInt32 \&}]{ul\+Field\+Value }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get unsigned long field for field number.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Field\+No} & Number of field to retrieve. \\
+\hline
+{\em ul\+Field\+Value} & Output field value. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a49212a9eb17f7fa9f303e08d5fc50fc6}\label{classxb_1_1xbDbf_a49212a9eb17f7fa9f303e08d5fc50fc6}}
+\index{xb::xbDbf@{xb::xbDbf}!GetVersion@{GetVersion}}
+\index{GetVersion@{GetVersion}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetVersion()}{GetVersion()}}
+{\footnotesize\ttfamily virtual xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Version (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [pure virtual]}}
+
+\mbox{\Hypertarget{classxb_1_1xbFile_a7af337808919680b90710ad5e8a99232}\label{classxb_1_1xbFile_a7af337808919680b90710ad5e8a99232}}
+\index{xb::xbDbf@{xb::xbDbf}!GetXbaseFileTypeByte@{GetXbaseFileTypeByte}}
+\index{GetXbaseFileTypeByte@{GetXbaseFileTypeByte}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetXbaseFileTypeByte()}{GetXbaseFileTypeByte()}\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+Xbase\+File\+Type\+Byte (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name, }\item[{unsigned char \&}]{c\+File\+Type\+Byte }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the file type byte and version of the dbf file.
+
+Pull the first bye off the DBF file for further inspection. First byte has various bits set to determine what the file format is.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+File\+Name} & -\/ Name of file to examine \\
+\hline
+{\em c\+File\+Type\+Byte} & -\/ Retruned first byte of dbf file \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a78aebdd21d3de46a450d5f835e3027f6}\label{classxb_1_1xbFile_a78aebdd21d3de46a450d5f835e3027f6}}
+\index{xb::xbDbf@{xb::xbDbf}!GetXbaseFileTypeByte@{GetXbaseFileTypeByte}}
+\index{GetXbaseFileTypeByte@{GetXbaseFileTypeByte}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetXbaseFileTypeByte()}{GetXbaseFileTypeByte()}\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+Xbase\+File\+Type\+Byte (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name, }\item[{unsigned char \&}]{c\+File\+Type\+Byte, }\item[{xb\+Int16 \&}]{i\+Version }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the file type byte and version of the dbf file.
+
+Pull the first bye off the DBF file for further inspection. First byte has various bits set to determine what the file format is.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+File\+Name} & -\/ Name of file to examine \\
+\hline
+{\em c\+File\+Type\+Byte} & -\/ Returned first byte of dbf file \\
+\hline
+{\em i\+Version} & -\/ Returned file version \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_aaf2e697751a0beff41432a66bb83fb5e}\label{classxb_1_1xbFile_aaf2e697751a0beff41432a66bb83fb5e}}
+\index{xb::xbDbf@{xb::xbDbf}!GetXbaseFileTypeByte@{GetXbaseFileTypeByte}}
+\index{GetXbaseFileTypeByte@{GetXbaseFileTypeByte}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetXbaseFileTypeByte()}{GetXbaseFileTypeByte()}\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+Xbase\+File\+Type\+Byte (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name, }\item[{xb\+Int16 \&}]{i\+Version }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the file type byte and version of the dbf file.
+
+Pull the first bye off the DBF file for further inspection. First byte has various bits set to determine what the file format is.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+File\+Name} & -\/ Name of file to examine \\
+\hline
+{\em i\+Version} & -\/ Returned file version \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_ab21ec23c076b0c9affdc0f6672bd133f}\label{classxb_1_1xbDbf_ab21ec23c076b0c9affdc0f6672bd133f}}
+\index{xb::xbDbf@{xb::xbDbf}!GetXbasePtr@{GetXbasePtr}}
+\index{GetXbasePtr@{GetXbasePtr}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetXbasePtr()}{GetXbasePtr()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$ xb\+::xb\+Dbf\+::\+Get\+Xbase\+Ptr (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get the pointer to the xb\+Xbase structure,.
+
+\begin{DoxyReturn}{Returns}
+Pointer to xb\+Xbase structure.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_ad06fe0f7975fb81125d27d82504e6829}\label{classxb_1_1xbDbf_ad06fe0f7975fb81125d27d82504e6829}}
+\index{xb::xbDbf@{xb::xbDbf}!InitVars@{InitVars}}
+\index{InitVars@{InitVars}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{InitVars()}{InitVars()}}
+{\footnotesize\ttfamily void xb\+::xb\+Dbf\+::\+Init\+Vars (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [protected]}, {\ttfamily [virtual]}}
+
+\mbox{\Hypertarget{classxb_1_1xbDbf_a013dc8c51fc1aa988de39cf3da6da950}\label{classxb_1_1xbDbf_a013dc8c51fc1aa988de39cf3da6da950}}
+\index{xb::xbDbf@{xb::xbDbf}!MemoFieldsExist@{MemoFieldsExist}}
+\index{MemoFieldsExist@{MemoFieldsExist}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{MemoFieldsExist()}{MemoFieldsExist()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Dbf\+::\+Memo\+Fields\+Exist (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Check for existence of any memo fields.
+
+\begin{DoxyReturn}{Returns}
+xb\+True -\/ Memo fields exist.~\newline
+xb\+False -\/ Memo fields don\textquotesingle{}t exist.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a361e3cc318bbf1c4d10f069e0800a24e}\label{classxb_1_1xbFile_a361e3cc318bbf1c4d10f069e0800a24e}}
+\index{xb::xbDbf@{xb::xbDbf}!NameSuffixMissing@{NameSuffixMissing}}
+\index{NameSuffixMissing@{NameSuffixMissing}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{NameSuffixMissing()}{NameSuffixMissing()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Name\+Suffix\+Missing (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name, }\item[{xb\+Int16}]{i\+Option }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Determines status of file extension.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+File\+Name} & -\/ Name of file to examine \\
+\hline
+{\em i\+Option} & -\/ Inspection type~\newline
+ 1 check for DBF~\newline
+ 2 check for NDX~\newline
+ 3 check for MDX~\newline
+ 4 check for NTX~\newline
+\\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+0 if suffix found~\newline
+ 1 if suffix not found, lower case~\newline
+ 2 is suffix not found, upper case~\newline
+
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a69824d7bafc3f5a15bf7d09f2f511768}\label{classxb_1_1xbDbf_a69824d7bafc3f5a15bf7d09f2f511768}}
+\index{xb::xbDbf@{xb::xbDbf}!Open@{Open}}
+\index{Open@{Open}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{Open()}{Open()}\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Open (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Table\+Name }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Open a table/dbf file.
+
+This routine sets the alias name to the same as the table name.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Table\+Name} & Table name to open, Include the .dbf or .DBF extension. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_ae388c5e02adc86e6e9988e697e061610}\label{classxb_1_1xbDbf_ae388c5e02adc86e6e9988e697e061610}}
+\index{xb::xbDbf@{xb::xbDbf}!Open@{Open}}
+\index{Open@{Open}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{Open()}{Open()}\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Open (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Table\+Name, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Alias }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Open a table/dbf file.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Table\+Name} & Table name to open, Include the .dbf or .DBF extension. \\
+\hline
+{\em s\+Alias} & Alias name to assign to this entry. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a4d018cbf44d8d8b2145c9acab02c8adf}\label{classxb_1_1xbDbf_a4d018cbf44d8d8b2145c9acab02c8adf}}
+\index{xb::xbDbf@{xb::xbDbf}!Open@{Open}}
+\index{Open@{Open}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{Open()}{Open()}\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}}
+{\footnotesize\ttfamily virtual xb\+Int16 xb\+::xb\+Dbf\+::\+Open (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Table\+Name, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Alias, }\item[{xb\+Int16}]{i\+Open\+Mode, }\item[{xb\+Int16}]{i\+Share\+Mode }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}
+
+\mbox{\Hypertarget{classxb_1_1xbDbf_a8a52bf3ef2123c0d17e6b1f67bf0dc55}\label{classxb_1_1xbDbf_a8a52bf3ef2123c0d17e6b1f67bf0dc55}}
+\index{xb::xbDbf@{xb::xbDbf}!Pack@{Pack}}
+\index{Pack@{Pack}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{Pack()}{Pack()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Pack (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Pack dbf file.
+
+This routine eliminates all deleted records from the file. \begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a93bb14ad0451355bfa3379128120988a}\label{classxb_1_1xbDbf_a93bb14ad0451355bfa3379128120988a}}
+\index{xb::xbDbf@{xb::xbDbf}!Pack@{Pack}}
+\index{Pack@{Pack}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{Pack()}{Pack()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Pack (\begin{DoxyParamCaption}\item[{xb\+UInt32 \&}]{ul\+Deleted\+Rec\+Cnt }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Pack dbf file.
+
+This routine eliminates all deleted records from the file and clears out any unused blocks in the memo file if one exists.
+\begin{DoxyParams}{Parameters}
+{\em ul\+Deleted\+Rec\+Cnt} & -\/ Output -\/ number of recrods removed from the file. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a571b36b3a940b1a16d5e834f329b33b9}\label{classxb_1_1xbDbf_a571b36b3a940b1a16d5e834f329b33b9}}
+\index{xb::xbDbf@{xb::xbDbf}!PutDateField@{PutDateField}}
+\index{PutDateField@{PutDateField}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{PutDateField()}{PutDateField()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Put\+Date\+Field (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&}]{dt\+Field\+Value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Put date field for field name.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Field\+Name} & Name of field to update. \\
+\hline
+{\em dt\+Field\+Value} & Field value. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a873f04af528a9d81e6a367a59d998ec5}\label{classxb_1_1xbDbf_a873f04af528a9d81e6a367a59d998ec5}}
+\index{xb::xbDbf@{xb::xbDbf}!PutDateField@{PutDateField}}
+\index{PutDateField@{PutDateField}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{PutDateField()}{PutDateField()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Put\+Date\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&}]{dt\+Field\+Value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Put date field for field number.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Field\+No} & Number of field to update. \\
+\hline
+{\em dt\+Field\+Value} & Field value. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_ae695bbc71c19abc71c0c5f2ff2e1f971}\label{classxb_1_1xbDbf_ae695bbc71c19abc71c0c5f2ff2e1f971}}
+\index{xb::xbDbf@{xb::xbDbf}!PutDoubleField@{PutDoubleField}}
+\index{PutDoubleField@{PutDoubleField}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{PutDoubleField()}{PutDoubleField()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Put\+Double\+Field (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{\mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}}}]{d\+Field\+Value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Put double field for field name.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Field\+Name} & Name of field to update. \\
+\hline
+{\em d\+Field\+Value} & Field value. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a4f34842d7e8ff1f16992c2ece2fc38a5}\label{classxb_1_1xbDbf_a4f34842d7e8ff1f16992c2ece2fc38a5}}
+\index{xb::xbDbf@{xb::xbDbf}!PutDoubleField@{PutDoubleField}}
+\index{PutDoubleField@{PutDoubleField}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{PutDoubleField()}{PutDoubleField()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Put\+Double\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{\mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}}}]{d\+Field\+Value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Put double field for field number.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Field\+No} & Number of field to update. \\
+\hline
+{\em d\+Field\+Value} & Field value. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a7862215dd2f83a1c488e539cd1f9aec0}\label{classxb_1_1xbDbf_a7862215dd2f83a1c488e539cd1f9aec0}}
+\index{xb::xbDbf@{xb::xbDbf}!PutField@{PutField}}
+\index{PutField@{PutField}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{PutField()}{PutField()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Put\+Field (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Put field for field name.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Field\+Name} & Name of field to update. \\
+\hline
+{\em s\+Field\+Value} & Field value. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a142b0c0dc904917f3c68c5572c1237b5}\label{classxb_1_1xbDbf_a142b0c0dc904917f3c68c5572c1237b5}}
+\index{xb::xbDbf@{xb::xbDbf}!PutField@{PutField}}
+\index{PutField@{PutField}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{PutField()}{PutField()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Put\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Put field for field number.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Field\+No} & Number of field to update. \\
+\hline
+{\em s\+Field\+Value} & Field value. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a4ea3241bc710d57e5f755efda62288ad}\label{classxb_1_1xbDbf_a4ea3241bc710d57e5f755efda62288ad}}
+\index{xb::xbDbf@{xb::xbDbf}!PutFloatField@{PutFloatField}}
+\index{PutFloatField@{PutFloatField}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{PutFloatField()}{PutFloatField()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Put\+Float\+Field (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{\mbox{\hyperlink{namespacexb_a83aa6a550398db55973aa9fb4257e66e}{xb\+Float}}}]{f\+Field\+Value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Put float field for field name.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Field\+Name} & Name of field to update. \\
+\hline
+{\em f\+Field\+Value} & Field value. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a64161eb50d72e424b11bf3732657ebd8}\label{classxb_1_1xbDbf_a64161eb50d72e424b11bf3732657ebd8}}
+\index{xb::xbDbf@{xb::xbDbf}!PutFloatField@{PutFloatField}}
+\index{PutFloatField@{PutFloatField}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{PutFloatField()}{PutFloatField()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Put\+Float\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{\mbox{\hyperlink{namespacexb_a83aa6a550398db55973aa9fb4257e66e}{xb\+Float}}}]{f\+Field\+Value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Put float field for field number.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Field\+No} & Number of field to update. \\
+\hline
+{\em f\+Field\+Value} & Field value. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a507e400ca6526a9e0391cf06dd6a014e}\label{classxb_1_1xbDbf_a507e400ca6526a9e0391cf06dd6a014e}}
+\index{xb::xbDbf@{xb::xbDbf}!PutLogicalField@{PutLogicalField}}
+\index{PutLogicalField@{PutLogicalField}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{PutLogicalField()}{PutLogicalField()}\hspace{0.1cm}{\footnotesize\ttfamily [1/4]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Put\+Logical\+Field (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Put logical field for field name.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Field\+Name} & Name of field to update. \\
+\hline
+{\em s\+Field\+Value} & Field value. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a623ca3ef5520c42308c1a16b518e7ff3}\label{classxb_1_1xbDbf_a623ca3ef5520c42308c1a16b518e7ff3}}
+\index{xb::xbDbf@{xb::xbDbf}!PutLogicalField@{PutLogicalField}}
+\index{PutLogicalField@{PutLogicalField}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{PutLogicalField()}{PutLogicalField()}\hspace{0.1cm}{\footnotesize\ttfamily [2/4]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Put\+Logical\+Field (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}}}]{b\+Field\+Value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Put logical field for field name.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Field\+Name} & Name of field to update. \\
+\hline
+{\em b\+Field\+Value} & Field value. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_ab39ac4269ac63bc7ea4f638733bb17f0}\label{classxb_1_1xbDbf_ab39ac4269ac63bc7ea4f638733bb17f0}}
+\index{xb::xbDbf@{xb::xbDbf}!PutLogicalField@{PutLogicalField}}
+\index{PutLogicalField@{PutLogicalField}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{PutLogicalField()}{PutLogicalField()}\hspace{0.1cm}{\footnotesize\ttfamily [3/4]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Put\+Logical\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Put logical field for field number.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Field\+No} & Number of field to update. \\
+\hline
+{\em s\+Field\+Value} & Field value. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a423a0cb7bd252cedf956ace4954f275d}\label{classxb_1_1xbDbf_a423a0cb7bd252cedf956ace4954f275d}}
+\index{xb::xbDbf@{xb::xbDbf}!PutLogicalField@{PutLogicalField}}
+\index{PutLogicalField@{PutLogicalField}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{PutLogicalField()}{PutLogicalField()}\hspace{0.1cm}{\footnotesize\ttfamily [4/4]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Put\+Logical\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}}}]{b\+Field\+Value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Put logical field for field number.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Field\+No} & Number of field to update. \\
+\hline
+{\em b\+Field\+Value} & Field value. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a0692d1776a725c2f61d4c14677e9307c}\label{classxb_1_1xbDbf_a0692d1776a725c2f61d4c14677e9307c}}
+\index{xb::xbDbf@{xb::xbDbf}!PutLongField@{PutLongField}}
+\index{PutLongField@{PutLongField}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{PutLongField()}{PutLongField()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Put\+Long\+Field (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{xb\+Int32}]{l\+Field\+Value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Put long field for field name.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Field\+Name} & Name of field to update. \\
+\hline
+{\em l\+Field\+Value} & Field value. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a56c8f924284bf88aabf90b7930b4eb47}\label{classxb_1_1xbDbf_a56c8f924284bf88aabf90b7930b4eb47}}
+\index{xb::xbDbf@{xb::xbDbf}!PutLongField@{PutLongField}}
+\index{PutLongField@{PutLongField}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{PutLongField()}{PutLongField()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Put\+Long\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{xb\+Int32}]{l\+Field\+Value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Put long field for field number.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Field\+No} & Number of field to update. \\
+\hline
+{\em l\+Field\+Value} & Field value. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a3c36a5ffbc7067a1abbcb526dd3b981d}\label{classxb_1_1xbDbf_a3c36a5ffbc7067a1abbcb526dd3b981d}}
+\index{xb::xbDbf@{xb::xbDbf}!PutRecord@{PutRecord}}
+\index{PutRecord@{PutRecord}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{PutRecord()}{PutRecord()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Put\+Record (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Write the current record to disk.
+
+This routine is used to write any updates to the current record buffer to disk.
+
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_aacbc7bac3ea0c502ee75b838f4f0fcbf}\label{classxb_1_1xbDbf_aacbc7bac3ea0c502ee75b838f4f0fcbf}}
+\index{xb::xbDbf@{xb::xbDbf}!PutRecord@{PutRecord}}
+\index{PutRecord@{PutRecord}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{PutRecord()}{PutRecord()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Put\+Record (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{ul\+Rec\+No }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Write record to disk.
+
+This routine is used to write a copy of the current record buffer to disk for a given record number.
+
+
+\begin{DoxyParams}{Parameters}
+{\em ul\+Rec\+No} & Record number to update. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_ac62cb97c4e678c83f41788b1ae4d0381}\label{classxb_1_1xbDbf_ac62cb97c4e678c83f41788b1ae4d0381}}
+\index{xb::xbDbf@{xb::xbDbf}!PutULongField@{PutULongField}}
+\index{PutULongField@{PutULongField}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{PutULongField()}{PutULongField()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Put\+ULong\+Field (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{xb\+UInt32}]{ul\+Field\+Value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Put unsigned long field for field name.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Field\+Name} & Name of field to update. \\
+\hline
+{\em ul\+Field\+Value} & Field value. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_af5dec5c9ff903efffdb0490a44d296d2}\label{classxb_1_1xbDbf_af5dec5c9ff903efffdb0490a44d296d2}}
+\index{xb::xbDbf@{xb::xbDbf}!PutULongField@{PutULongField}}
+\index{PutULongField@{PutULongField}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{PutULongField()}{PutULongField()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Put\+ULong\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{xb\+UInt32}]{ul\+Field\+Value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Put unsigned long field for field number.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Field\+No} & Number of field to update. \\
+\hline
+{\em ul\+Field\+Value} & Field value. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_aa1bb80340abc7a5c22f87f878e9dc825}\label{classxb_1_1xbFile_aa1bb80340abc7a5c22f87f878e9dc825}}
+\index{xb::xbDbf@{xb::xbDbf}!ReadBlock@{ReadBlock}}
+\index{ReadBlock@{ReadBlock}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{ReadBlock()}{ReadBlock()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Read\+Block (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{ul\+Block\+No, }\item[{size\+\_\+t}]{l\+Read\+Size, }\item[{void $\ast$}]{buf }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Read a block of data from file.
+
+
+\begin{DoxyParams}{Parameters}
+{\em ul\+Block\+No} & -\/ block number to read \\
+\hline
+{\em l\+Read\+Size} & -\/ size of data to read at block location, set to 0 to read blocksize \\
+\hline
+{\em $\ast$buf} & -\/ pointer to buffer to write output data, assumed to be previosuly allocated and large enough to contain data \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_aef696b1c4c0ef5338e818599f695d485}\label{classxb_1_1xbFile_aef696b1c4c0ef5338e818599f695d485}}
+\index{xb::xbDbf@{xb::xbDbf}!ReadBlock@{ReadBlock}}
+\index{ReadBlock@{ReadBlock}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{ReadBlock()}{ReadBlock()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Read\+Block (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{ul\+Block\+No, }\item[{xb\+UInt32}]{ul\+Block\+Size, }\item[{size\+\_\+t}]{l\+Read\+Size, }\item[{void $\ast$}]{buf }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Read a block of data from file.
+
+
+\begin{DoxyParams}{Parameters}
+{\em ul\+Block\+No} & -\/ block number to read \\
+\hline
+{\em ul\+Block\+Size} & -\/ block size \\
+\hline
+{\em l\+Read\+Size} & -\/ size of data to read at block location, set to 0 to read blocksize \\
+\hline
+{\em buf} & -\/ pointer to buffer to write output data, assumed to be previosuly allocated and large enough to contain data \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a060541addb5bb1f0fe12959ed6f66fb9}\label{classxb_1_1xbDbf_a060541addb5bb1f0fe12959ed6f66fb9}}
+\index{xb::xbDbf@{xb::xbDbf}!ReadHeader@{ReadHeader}}
+\index{ReadHeader@{ReadHeader}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{ReadHeader()}{ReadHeader()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Read\+Header (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Position\+Option, }\item[{xb\+Int16}]{i\+Read\+Option }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [protected]}, {\ttfamily [virtual]}}
+
+
+
+Read dbf file header information.
+
+This method assumes the header has been locked appropriately in a multi user environment
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Position\+Option} & 0 -\/ Don\textquotesingle{}t fseek to beginning of file before read.~\newline
+ 1 -\/ Start from beginning of file.\\
+\hline
+{\em i\+Read\+Option} & 0 -\/ Read entire 32 byte header~\newline
+ 1 -\/ Read first eight bytes which includes the last update date and number of records.\\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a94d7d626ba691fd4b740c034673e6fc6}\label{classxb_1_1xbDbf_a94d7d626ba691fd4b740c034673e6fc6}}
+\index{xb::xbDbf@{xb::xbDbf}!RecordDeleted@{RecordDeleted}}
+\index{RecordDeleted@{RecordDeleted}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{RecordDeleted()}{RecordDeleted()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Record\+Deleted (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Opt = {\ttfamily 0} }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Return record deletion status.
+
+This routine returns the record deletion status.
+\begin{DoxyParams}{Parameters}
+{\em i\+Opt} & 0 = Current record buffer, 1 = Original record buffer \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+xb\+True -\/ Record deleted.~\newline
+xb\+False -\/ Record not deleted.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_aeeeb2eb5fabcd0f91d457df07b0e0708}\label{classxb_1_1xbDbf_aeeeb2eb5fabcd0f91d457df07b0e0708}}
+\index{xb::xbDbf@{xb::xbDbf}!Rename@{Rename}}
+\index{Rename@{Rename}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{Rename()}{Rename()}}
+{\footnotesize\ttfamily virtual xb\+Int16 xb\+::xb\+Dbf\+::\+Rename (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}}}]{s\+New\+Name }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}
+
+\mbox{\Hypertarget{classxb_1_1xbDbf_a4cf7f0d423164f3cf074ae41f96f4e90}\label{classxb_1_1xbDbf_a4cf7f0d423164f3cf074ae41f96f4e90}}
+\index{xb::xbDbf@{xb::xbDbf}!SetAutoCommit@{SetAutoCommit}}
+\index{SetAutoCommit@{SetAutoCommit}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{SetAutoCommit()}{SetAutoCommit()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Set\+Auto\+Commit (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Auto\+Commit }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Set auto commit.
+
+This routine sets the auto commit setting for this table. \begin{DoxyReturn}{Returns}
+XB\+\_\+\+NO\+\_\+\+ERROR;
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a991c5676a6f38fa752435390989f413e}\label{classxb_1_1xbFile_a991c5676a6f38fa752435390989f413e}}
+\index{xb::xbDbf@{xb::xbDbf}!SetBlockSize@{SetBlockSize}}
+\index{SetBlockSize@{SetBlockSize}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{SetBlockSize()}{SetBlockSize()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Set\+Block\+Size (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{ul\+Block\+Size }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Set the block size.
+
+
+\begin{DoxyParams}{Parameters}
+{\em ul\+Block\+Size} & -\/ unsigned long block size, divisible by 512 \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}\label{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}}
+\index{xb::xbDbf@{xb::xbDbf}!SetDataDirectory@{SetDataDirectory}}
+\index{SetDataDirectory@{SetDataDirectory}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{SetDataDirectory()}{SetDataDirectory()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Data\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Data\+Directory }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Set the data directory.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Data\+Directory} & Set the data directory. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}\label{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}}
+\index{xb::xbDbf@{xb::xbDbf}!SetDefaultAutoCommit@{SetDefaultAutoCommit}}
+\index{SetDefaultAutoCommit@{SetDefaultAutoCommit}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{SetDefaultAutoCommit()}{SetDefaultAutoCommit()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Default\+Auto\+Commit (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}}}]{b\+Default\+Auto\+Commit }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Set the default auto commit.
+
+Disabling auto commit requires the application execute explicit updates using dbf-\/\texorpdfstring{$>$}{>}Put() and dbf-\/\texorpdfstring{$>$}{>}\mbox{\hyperlink{classxb_1_1xbDbf_a5b412dd796241673eb1aa2c93513d69b}{Append\+Record()}}. With auto commit on, the library posts updates automatically when moving off the current record or closing a file.
+
+
+\begin{DoxyParams}{Parameters}
+{\em b\+Default\+Auto\+Commit} & xb\+True -\/ Enable default auto commit.~\newline
+ xb\+False -\/ Disable default auto commit.~\newline
+ \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}\label{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}}
+\index{xb::xbDbf@{xb::xbDbf}!SetDefaultDateFormat@{SetDefaultDateFormat}}
+\index{SetDefaultDateFormat@{SetDefaultDateFormat}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{SetDefaultDateFormat()}{SetDefaultDateFormat()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Default\+Date\+Format (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Default\+Date\+Format }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Set the default date format.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Default\+Date\+Format} & Set the default date format. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbFile_ae78a85255488bc78964c16946dbaead3}\label{classxb_1_1xbFile_ae78a85255488bc78964c16946dbaead3}}
+\index{xb::xbDbf@{xb::xbDbf}!SetDirectory@{SetDirectory}}
+\index{SetDirectory@{SetDirectory}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{SetDirectory()}{SetDirectory()}}
+{\footnotesize\ttfamily void xb\+::xb\+File\+::\+Set\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Directory }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Set the directory.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Directory} & -\/ Valid directory name \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a904ec348fd029d4a76e72b8fde636108}\label{classxb_1_1xbSsv_a904ec348fd029d4a76e72b8fde636108}}
+\index{xb::xbDbf@{xb::xbDbf}!SetEndianType@{SetEndianType}}
+\index{SetEndianType@{SetEndianType}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{SetEndianType()}{SetEndianType()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Endian\+Type (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [protected]}, {\ttfamily [inherited]}}
+
+
+
+Set the endian type.
+
+This routine determines the Endian-\/ness at run time instead of compile time as some processers (ie; Sparc,ARM) can be switched either way. This routine is called automatically by the library at startup and does not need to be called in an application program. \mbox{\Hypertarget{classxb_1_1xbFile_a5419eb27e56822f828b2b88a9502a636}\label{classxb_1_1xbFile_a5419eb27e56822f828b2b88a9502a636}}
+\index{xb::xbDbf@{xb::xbDbf}!SetFileName@{SetFileName}}
+\index{SetFileName@{SetFileName}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{SetFileName()}{SetFileName()}}
+{\footnotesize\ttfamily void xb\+::xb\+File\+::\+Set\+File\+Name (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Set the filename.
+
+This routine builds out two internal variables from the input file name~\newline
+ s\+File\+Name -\/ the file name part~\newline
+ s\+Fq\+File\+Name -\/ the fully qualified file name~\newline
+
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+File\+Name} & -\/ Input file name \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbFile_aee832fa11db2077a532f49e1329bd05a}\label{classxb_1_1xbFile_aee832fa11db2077a532f49e1329bd05a}}
+\index{xb::xbDbf@{xb::xbDbf}!SetFqFileName@{SetFqFileName}}
+\index{SetFqFileName@{SetFqFileName}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{SetFqFileName()}{SetFqFileName()}}
+{\footnotesize\ttfamily void xb\+::xb\+File\+::\+Set\+Fq\+File\+Name (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Fq\+File\+Name }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Set the fully qualifed filename.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Fq\+File\+Name} & -\/ Fully qualifed input file name \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbFile_a060acbfaa8d528f86cb59301814b414a}\label{classxb_1_1xbFile_a060acbfaa8d528f86cb59301814b414a}}
+\index{xb::xbDbf@{xb::xbDbf}!SetHomeFolders@{SetHomeFolders}}
+\index{SetHomeFolders@{SetHomeFolders}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{SetHomeFolders()}{SetHomeFolders()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Set\+Home\+Folders (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Set Home Folders.
+
+Create xbase64 log, data and temp folders in the home directory for current usre.
+
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}\label{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}}
+\index{xb::xbDbf@{xb::xbDbf}!SetLogDirectory@{SetLogDirectory}}
+\index{SetLogDirectory@{SetLogDirectory}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{SetLogDirectory()}{SetLogDirectory()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Log\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Log\+Directory }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_a7f05738e7dfd759e89990242ef503544}\label{classxb_1_1xbSsv_a7f05738e7dfd759e89990242ef503544}}
+\index{xb::xbDbf@{xb::xbDbf}!SetLogFileName@{SetLogFileName}}
+\index{SetLogFileName@{SetLogFileName}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{SetLogFileName()}{SetLogFileName()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Log\+File\+Name (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Log\+File\+Name }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}\label{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}}
+\index{xb::xbDbf@{xb::xbDbf}!SetMultiUser@{SetMultiUser}}
+\index{SetMultiUser@{SetMultiUser}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{SetMultiUser()}{SetMultiUser()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Multi\+User (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}}}]{b\+Multi\+User }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the multi user setting.
+
+
+\begin{DoxyParams}{Parameters}
+{\em b\+Multi\+User} & xb\+True -\/ Turn on Multi user mode.~\newline
+ xb\+False -\/ Turn off Multi user mode.~\newline
+ \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a17c229a20ef9ab4034df8f9cd657adb2}\label{classxb_1_1xbSsv_a17c229a20ef9ab4034df8f9cd657adb2}}
+\index{xb::xbDbf@{xb::xbDbf}!SetTempDirectory@{SetTempDirectory}}
+\index{SetTempDirectory@{SetTempDirectory}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{SetTempDirectory()}{SetTempDirectory()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Temp\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Temp\+Directory }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Set the temp directory.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Temp\+Directory} & Set the data direcroty. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a7e63e852418f337eb7c44de5dcd50323}\label{classxb_1_1xbDbf_a7e63e852418f337eb7c44de5dcd50323}}
+\index{xb::xbDbf@{xb::xbDbf}!SetVersion@{SetVersion}}
+\index{SetVersion@{SetVersion}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{SetVersion()}{SetVersion()}}
+{\footnotesize\ttfamily virtual xb\+Int16 xb\+::xb\+Dbf\+::\+Set\+Version (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [protected]}, {\ttfamily [pure virtual]}}
+
+\mbox{\Hypertarget{classxb_1_1xbDbf_ae94cb1bf9f75184f39d9e1a80ab49d4a}\label{classxb_1_1xbDbf_ae94cb1bf9f75184f39d9e1a80ab49d4a}}
+\index{xb::xbDbf@{xb::xbDbf}!UndeleteAllRecords@{UndeleteAllRecords}}
+\index{UndeleteAllRecords@{UndeleteAllRecords}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{UndeleteAllRecords()}{UndeleteAllRecords()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Undelete\+All\+Records (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Set auto lock.
+
+This routine sets the auto lock setting for this table. There is an overall system level auto lock default setting and each table can have it\textquotesingle{}s own autolock setting. This method controls the table level auto lock setting.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Auto\+Lock} & 1 -\/ Use auto lock for this table.~\newline
+ 0 -\/ Don\textquotesingle{}t use auto lock for this table.~\newline
+ -\/1 -\/ (minus one) Use system default.~\newline
+ \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+Set the header locked status.
+
+
+\begin{DoxyParams}{Parameters}
+{\em b\+Header\+Locked} & xb\+True -\/ Locked~\newline
+xb\+False -\/ Not locked. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+void
+\end{DoxyReturn}
+Set lock flavor.
+
+This routine is for future expansion.
+\begin{DoxyParams}{Parameters}
+{\em i\+Lock\+Flavor} & 1 -\/ Use Dbase (tm) style locking. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+void
+\end{DoxyReturn}
+Set table locked status.
+
+
+\begin{DoxyParams}{Parameters}
+{\em b\+Table\+Locked} & -\/ xb\+True Table locked.~\newline
+xb\+False Table unlocked. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+void
+\end{DoxyReturn}
+Undelete all records.
+
+This routine will remove the deletion flag on any deleted records in the table. \begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a255681976a04fc722538bb630507b3a0}\label{classxb_1_1xbDbf_a255681976a04fc722538bb630507b3a0}}
+\index{xb::xbDbf@{xb::xbDbf}!UndeleteRecord@{UndeleteRecord}}
+\index{UndeleteRecord@{UndeleteRecord}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{UndeleteRecord()}{UndeleteRecord()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Undelete\+Record (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Undelete one record.
+
+This routine will undelete the current record, if it is deleted. \begin{DoxyReturn}{Returns}
+XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+RECORD
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_aba5dcac3b4092261bc1669740cdd669d}\label{classxb_1_1xbDbf_aba5dcac3b4092261bc1669740cdd669d}}
+\index{xb::xbDbf@{xb::xbDbf}!ValidateSchema@{ValidateSchema}}
+\index{ValidateSchema@{ValidateSchema}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{ValidateSchema()}{ValidateSchema()}}
+{\footnotesize\ttfamily virtual xb\+Int16 xb\+::xb\+Dbf\+::\+Validate\+Schema (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{structxb_1_1xbSchema}{xb\+Schema}} $\ast$}]{s }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [protected]}, {\ttfamily [pure virtual]}}
+
+\mbox{\Hypertarget{classxb_1_1xbFile_a5d871dcfecc2b4338f7a13722aab766c}\label{classxb_1_1xbFile_a5d871dcfecc2b4338f7a13722aab766c}}
+\index{xb::xbDbf@{xb::xbDbf}!WriteBlock@{WriteBlock}}
+\index{WriteBlock@{WriteBlock}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{WriteBlock()}{WriteBlock()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Write\+Block (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{ul\+Block\+No, }\item[{size\+\_\+t}]{l\+Write\+Size, }\item[{void $\ast$}]{buf }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Write a block of data to file.
+
+
+\begin{DoxyParams}{Parameters}
+{\em ul\+Block\+No} & -\/ block number to write \\
+\hline
+{\em l\+Write\+Size} & -\/ size of data to write, set to 0 to write blocksize \\
+\hline
+{\em $\ast$buf} & -\/ pointer to buffer of data to be written \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a44e1410109ef7b3d11a6af4b704b62b2}\label{classxb_1_1xbDbf_a44e1410109ef7b3d11a6af4b704b62b2}}
+\index{xb::xbDbf@{xb::xbDbf}!WriteHeader@{WriteHeader}}
+\index{WriteHeader@{WriteHeader}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{WriteHeader()}{WriteHeader()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Write\+Header (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Position\+Option, }\item[{xb\+Int16}]{i\+Write\+Option }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [protected]}}
+
+\mbox{\Hypertarget{classxb_1_1xbFile_a18830b5755d74818f60d9c7ce38ddf2d}\label{classxb_1_1xbFile_a18830b5755d74818f60d9c7ce38ddf2d}}
+\index{xb::xbDbf@{xb::xbDbf}!xbFclose@{xbFclose}}
+\index{xbFclose@{xbFclose}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{xbFclose()}{xbFclose()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fclose (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Xbase wrapper for standard libary fclose.
+
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_af5b6356832d2a67212070a1aa605f170}\label{classxb_1_1xbFile_af5b6356832d2a67212070a1aa605f170}}
+\index{xb::xbDbf@{xb::xbDbf}!xbFeof@{xbFeof}}
+\index{xbFeof@{xbFeof}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{xbFeof()}{xbFeof()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Feof (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Xbase wrapper for standard libary feof.
+
+\begin{DoxyReturn}{Returns}
+non zero if end-\/of-\/file is set for the stream.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_ad205184d43409f04216540ae22f15009}\label{classxb_1_1xbFile_ad205184d43409f04216540ae22f15009}}
+\index{xb::xbDbf@{xb::xbDbf}!xbFflush@{xbFflush}}
+\index{xbFflush@{xbFflush}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{xbFflush()}{xbFflush()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fflush (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Xbase wrapper for standard libary fflush.
+
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a5ee229bda4d7d6695e122200e581e7a6}\label{classxb_1_1xbFile_a5ee229bda4d7d6695e122200e581e7a6}}
+\index{xb::xbDbf@{xb::xbDbf}!xbFgetc@{xbFgetc}}
+\index{xbFgetc@{xbFgetc}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{xbFgetc()}{xbFgetc()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fgetc (\begin{DoxyParamCaption}\item[{char \&}]{c }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Xbase wrapper for standard libary fgetc.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c} & -\/ output character returned by fgetc \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_afb1c584d2895ffb7834df80aea7eb1e4}\label{classxb_1_1xbFile_afb1c584d2895ffb7834df80aea7eb1e4}}
+\index{xb::xbDbf@{xb::xbDbf}!xbFgetc@{xbFgetc}}
+\index{xbFgetc@{xbFgetc}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{xbFgetc()}{xbFgetc()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fgetc (\begin{DoxyParamCaption}\item[{xb\+Int32 \&}]{c }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Xbase wrapper for standard libary fgetc.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c} & -\/ output integer returned by fgetc \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_ad245955ace26e5dde85fd4373b30d026}\label{classxb_1_1xbFile_ad245955ace26e5dde85fd4373b30d026}}
+\index{xb::xbDbf@{xb::xbDbf}!xbFgets@{xbFgets}}
+\index{xbFgets@{xbFgets}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{xbFgets()}{xbFgets()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fgets (\begin{DoxyParamCaption}\item[{size\+\_\+t}]{l\+Size, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Xbase wrapper for standard libary fgets.
+
+
+\begin{DoxyParams}{Parameters}
+{\em l\+Size} & -\/ reads in at most, one character less than l\+Size \\
+\hline
+{\em s} & -\/ an \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing data returned by fseek \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_ab0fa19686ca8953ff4b556fb5b249135}\label{classxb_1_1xbFile_ab0fa19686ca8953ff4b556fb5b249135}}
+\index{xb::xbDbf@{xb::xbDbf}!xbFopen@{xbFopen}}
+\index{xbFopen@{xbFopen}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{xbFopen()}{xbFopen()}\hspace{0.1cm}{\footnotesize\ttfamily [1/4]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fopen (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Open\+Mode, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name, }\item[{xb\+Int16}]{i\+Share\+Mode }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Xbase wrapper for standard libary fopen.
+
+This routine supports all the standard C library open modes. The Xbase routines only use \char`\"{}r\char`\"{} and \char`\"{}r+b\char`\"{}.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Open\+Mode} & {\begin{tabularx}{\linewidth}{|*{2}{>{\raggedright\arraybackslash}X|}}\hline
+\cellcolor{\tableheadbgcolor}\textbf{ Open\+Mode}&\cellcolor{\tableheadbgcolor}\textbf{ Description }\\\cline{1-2}
+r&Reading \\\cline{1-2}
+r+&Reading and Writing \\\cline{1-2}
+w&Open for writing. Truncate to zero bytes if it exists \\\cline{1-2}
+w+&Open for reading and writing, truncate to zero bytes if it exists \\\cline{1-2}
+a&Open for append \\\cline{1-2}
+a+&Open for reading and writing (at end). \\\cline{1-2}
+\end{tabularx}}
+The mode can also include the letter \char`\"{}b\char`\"{} for binary ie; \char`\"{}r+b\char`\"{}. The \char`\"{}b\char`\"{} is ignored on POSIX compliant systems, but is included for cross platform compatibility. \\
+\hline
+{\em s\+File\+Name} & File name to open \\
+\hline
+{\em i\+Share\+Mode} & XB\+\_\+\+SINGLE\+\_\+\+USER~\newline
+ XB\+\_\+\+MULTI\+\_\+\+USER~\newline
+ \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a0548cedf0f26b7d8ac221f75b0cd048c}\label{classxb_1_1xbFile_a0548cedf0f26b7d8ac221f75b0cd048c}}
+\index{xb::xbDbf@{xb::xbDbf}!xbFopen@{xbFopen}}
+\index{xbFopen@{xbFopen}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{xbFopen()}{xbFopen()}\hspace{0.1cm}{\footnotesize\ttfamily [2/4]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fopen (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Open\+Mode, }\item[{xb\+Int16}]{i\+Share\+Mode }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Xbase wrapper for standard libary fopen.
+
+This routine supports all the standard C library open modes. The Xbase routines only use \char`\"{}r\char`\"{} and \char`\"{}r+\char`\"{}.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Open\+Mode} & {\begin{tabularx}{\linewidth}{|*{2}{>{\raggedright\arraybackslash}X|}}\hline
+\cellcolor{\tableheadbgcolor}\textbf{ Open\+Mode}&\cellcolor{\tableheadbgcolor}\textbf{ Description }\\\cline{1-2}
+r&Reading \\\cline{1-2}
+r+&Reading and Writing \\\cline{1-2}
+w&Open for writing. Truncate to zero bytes if it exists \\\cline{1-2}
+w+&Open for reading and writing, truncate to zero bytes if it exists \\\cline{1-2}
+a&Open for append \\\cline{1-2}
+a+&Open for reading and writing (at end). \\\cline{1-2}
+\end{tabularx}}
+The mode can also include the letter \char`\"{}b\char`\"{} for binary ie; \char`\"{}r+b\char`\"{}. The \char`\"{}b\char`\"{} is ignored on POSIX compliant systems, but is included for cross platform compatibility. \\
+\hline
+{\em i\+Share\+Mode} & XB\+\_\+\+SINGLE\+\_\+\+USER~\newline
+ XB\+\_\+\+MULTI\+\_\+\+USER~\newline
+ \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a7cdfef5ede9ac98d44a28a6b7a70972c}\label{classxb_1_1xbFile_a7cdfef5ede9ac98d44a28a6b7a70972c}}
+\index{xb::xbDbf@{xb::xbDbf}!xbFopen@{xbFopen}}
+\index{xbFopen@{xbFopen}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{xbFopen()}{xbFopen()}\hspace{0.1cm}{\footnotesize\ttfamily [3/4]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fopen (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Open\+Mode }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbFile_aabd113333b49c36cad23244b392baab4}\label{classxb_1_1xbFile_aabd113333b49c36cad23244b392baab4}}
+\index{xb::xbDbf@{xb::xbDbf}!xbFopen@{xbFopen}}
+\index{xbFopen@{xbFopen}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{xbFopen()}{xbFopen()}\hspace{0.1cm}{\footnotesize\ttfamily [4/4]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fopen (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Open\+Mode, }\item[{xb\+Int16}]{i\+Share\+Mode }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Xbase wrapper for standard libary fopen.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Open\+Mode} & XB\+\_\+\+READ~\newline
+ XB\+\_\+\+READ\+\_\+\+WRITE~\newline
+ \\
+\hline
+{\em i\+Share\+Mode} & XB\+\_\+\+SINGLE\+\_\+\+USER~\newline
+ XB\+\_\+\+MULTI\+\_\+\+USER~\newline
+ \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_af2e940c78956e5cb6824f9a1bc404896}\label{classxb_1_1xbFile_af2e940c78956e5cb6824f9a1bc404896}}
+\index{xb::xbDbf@{xb::xbDbf}!xbFputc@{xbFputc}}
+\index{xbFputc@{xbFputc}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{xbFputc()}{xbFputc()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fputc (\begin{DoxyParamCaption}\item[{xb\+Int32}]{c }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Xbase wrapper for standard libary fputc.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c} & Character to write \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a863f74cf17df8186d88586b4d2a6441a}\label{classxb_1_1xbFile_a863f74cf17df8186d88586b4d2a6441a}}
+\index{xb::xbDbf@{xb::xbDbf}!xbFputc@{xbFputc}}
+\index{xbFputc@{xbFputc}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{xbFputc()}{xbFputc()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fputc (\begin{DoxyParamCaption}\item[{xb\+Int32}]{c, }\item[{xb\+Int32}]{i\+No\+Of\+Times }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Xbase wrapper for standard libary fputc.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c} & Character to write \\
+\hline
+{\em i\+No\+Of\+Times} & Number of times to write the character \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a698f3b40216778562e639e6ca1a47573}\label{classxb_1_1xbFile_a698f3b40216778562e639e6ca1a47573}}
+\index{xb::xbDbf@{xb::xbDbf}!xbFputs@{xbFputs}}
+\index{xbFputs@{xbFputs}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{xbFputs()}{xbFputs()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fputs (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Xbase wrapper for standard libary fputs.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s} & \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} to write to file \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_ab4f6afaa1f77539f27a4f05c26e54e2f}\label{classxb_1_1xbFile_ab4f6afaa1f77539f27a4f05c26e54e2f}}
+\index{xb::xbDbf@{xb::xbDbf}!xbFread@{xbFread}}
+\index{xbFread@{xbFread}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{xbFread()}{xbFread()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fread (\begin{DoxyParamCaption}\item[{void $\ast$}]{p, }\item[{size\+\_\+t}]{size, }\item[{size\+\_\+t}]{nmemb }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Xbase wrapper for standard libary fread.
+
+
+\begin{DoxyParams}{Parameters}
+{\em p} & Pointer to data to write \\
+\hline
+{\em size} & size of write \\
+\hline
+{\em nmemb} & Number of times to read it \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a5337ab8918df240910c0d19b4f298e3d}\label{classxb_1_1xbFile_a5337ab8918df240910c0d19b4f298e3d}}
+\index{xb::xbDbf@{xb::xbDbf}!xbFseek@{xbFseek}}
+\index{xbFseek@{xbFseek}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{xbFseek()}{xbFseek()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fseek (\begin{DoxyParamCaption}\item[{xb\+Int64}]{l\+Offset, }\item[{xb\+Int32}]{i\+Whence }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Xbase wrapper for standard libary fseek.
+
+
+\begin{DoxyParams}{Parameters}
+{\em l\+Offset} & Position in file to seek to \\
+\hline
+{\em i\+Whence} & SEEK\+\_\+\+SET -\/ from beginning of file~\newline
+ SEEK\+\_\+\+CUR -\/ from current position~\newline
+ SEEK\+\_\+\+END -\/ from end of file~\newline
+ \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a0e1c06aedfa7fbcb92e117f891edd13b}\label{classxb_1_1xbFile_a0e1c06aedfa7fbcb92e117f891edd13b}}
+\index{xb::xbDbf@{xb::xbDbf}!xbFtell@{xbFtell}}
+\index{xbFtell@{xbFtell}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{xbFtell()}{xbFtell()}}
+{\footnotesize\ttfamily size\+\_\+t xb\+::xb\+File\+::xb\+Ftell (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Xbase wrapper for standard libary ftell.
+
+Returns the current file position. \begin{DoxyReturn}{Returns}
+Current file position.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a9891b792f585a696f38a5cf959e30918}\label{classxb_1_1xbFile_a9891b792f585a696f38a5cf959e30918}}
+\index{xb::xbDbf@{xb::xbDbf}!xbFTurnOffFileBuffering@{xbFTurnOffFileBuffering}}
+\index{xbFTurnOffFileBuffering@{xbFTurnOffFileBuffering}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{xbFTurnOffFileBuffering()}{xbFTurnOffFileBuffering()}}
+{\footnotesize\ttfamily void xb\+::xb\+File\+::xb\+FTurn\+Off\+File\+Buffering (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Turn off file buffering.
+
+Turns off file buffering. File buffering can\textquotesingle{}t be used while in multi user mode. \mbox{\Hypertarget{classxb_1_1xbFile_a6aadd871d1782944703fed773d44b85f}\label{classxb_1_1xbFile_a6aadd871d1782944703fed773d44b85f}}
+\index{xb::xbDbf@{xb::xbDbf}!xbFwrite@{xbFwrite}}
+\index{xbFwrite@{xbFwrite}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{xbFwrite()}{xbFwrite()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fwrite (\begin{DoxyParamCaption}\item[{const void $\ast$}]{p, }\item[{size\+\_\+t}]{size, }\item[{size\+\_\+t}]{nmemb }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Xbase wrapper for standard libary fwrite.
+
+
+\begin{DoxyParams}{Parameters}
+{\em p} & Pointer to data buffer to write \\
+\hline
+{\em size} & Size of data to write \\
+\hline
+{\em nmemb} & Number of times to write data buffer \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a08463f506f425c2385acbe1a561506e9}\label{classxb_1_1xbFile_a08463f506f425c2385acbe1a561506e9}}
+\index{xb::xbDbf@{xb::xbDbf}!xbReadUntil@{xbReadUntil}}
+\index{xbReadUntil@{xbReadUntil}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{xbReadUntil()}{xbReadUntil()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Read\+Until (\begin{DoxyParamCaption}\item[{const char}]{c\+Delim, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Out }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Read file until a particular character is encountered on input stream.
+
+This routine will read until c\+Delim is encountered or eof, which ever occurs first.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c\+Delim} & Delimiter to stop writing at. \\
+\hline
+{\em s\+Out} & Output \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing data read \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_ab3c668a8570433188382d31d7c60bd48}\label{classxb_1_1xbFile_ab3c668a8570433188382d31d7c60bd48}}
+\index{xb::xbDbf@{xb::xbDbf}!xbRemove@{xbRemove}}
+\index{xbRemove@{xbRemove}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{xbRemove()}{xbRemove()}\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Remove (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Delete file.
+
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a58f6a6751fdf7e9549c273bb75d93eb5}\label{classxb_1_1xbFile_a58f6a6751fdf7e9549c273bb75d93eb5}}
+\index{xb::xbDbf@{xb::xbDbf}!xbRemove@{xbRemove}}
+\index{xbRemove@{xbRemove}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{xbRemove()}{xbRemove()}\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Remove (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name\+In }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Delete file.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+File\+Name\+In} & Name of file to delete \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a6d919366c2ec95e529906bf8842cbf07}\label{classxb_1_1xbFile_a6d919366c2ec95e529906bf8842cbf07}}
+\index{xb::xbDbf@{xb::xbDbf}!xbRemove@{xbRemove}}
+\index{xbRemove@{xbRemove}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{xbRemove()}{xbRemove()}\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Remove (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name\+In, }\item[{xb\+Int16}]{i\+Option }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Delete file.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+File\+Name\+In} & Name of file to delete \\
+\hline
+{\em i\+Option} & If Set to 1, assume this is a delete request for a dbf file, and should rename the dbt file also \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_afc8ce113aa72611a278233f9bb170012}\label{classxb_1_1xbFile_afc8ce113aa72611a278233f9bb170012}}
+\index{xb::xbDbf@{xb::xbDbf}!xbRename@{xbRename}}
+\index{xbRename@{xbRename}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{xbRename()}{xbRename()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Rename (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Old\+Name, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+New\+Name }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Rename file.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Old\+Name} & Original file name \\
+\hline
+{\em s\+New\+Name} & New file name \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a7996b6e084665c37c3892faea64b3505}\label{classxb_1_1xbFile_a7996b6e084665c37c3892faea64b3505}}
+\index{xb::xbDbf@{xb::xbDbf}!xbRewind@{xbRewind}}
+\index{xbRewind@{xbRewind}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{xbRewind()}{xbRewind()}}
+{\footnotesize\ttfamily void xb\+::xb\+File\+::xb\+Rewind (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Xbase wrapper for rewind.
+
+Set file pointer at beginning of file. \mbox{\Hypertarget{classxb_1_1xbFile_a518bfcbfa3699d883cf89affee383296}\label{classxb_1_1xbFile_a518bfcbfa3699d883cf89affee383296}}
+\index{xb::xbDbf@{xb::xbDbf}!xbTruncate@{xbTruncate}}
+\index{xbTruncate@{xbTruncate}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{xbTruncate()}{xbTruncate()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Truncate (\begin{DoxyParamCaption}\item[{xb\+Int64}]{ll\+Size }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Xbase wrapper for ftruncate.
+
+Set file size to ll\+Size
+\begin{DoxyParams}{Parameters}
+{\em ll\+Size} & New file size. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a8ed0693b10b95aaa4e46037758d160ed}\label{classxb_1_1xbDbf_a8ed0693b10b95aaa4e46037758d160ed}}
+\index{xb::xbDbf@{xb::xbDbf}!Zap@{Zap}}
+\index{Zap@{Zap}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{Zap()}{Zap()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Zap (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Zap (remove) everything from the file,.
+
+This routine eliminates everything from the dbf file and dbt memo file. \begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+
+
+\doxysubsection{Field Documentation}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a8734e799707582f022fc341d515650f4}\label{classxb_1_1xbDbf_a8734e799707582f022fc341d515650f4}}
+\index{xb::xbDbf@{xb::xbDbf}!cEncryptionFlag@{cEncryptionFlag}}
+\index{cEncryptionFlag@{cEncryptionFlag}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{cEncryptionFlag}{cEncryptionFlag}}
+{\footnotesize\ttfamily char xb\+::xb\+Dbf\+::c\+Encryption\+Flag\hspace{0.3cm}{\ttfamily [protected]}}
+
+\mbox{\Hypertarget{classxb_1_1xbDbf_ad59074633641e03647e54d2b66c9102b}\label{classxb_1_1xbDbf_ad59074633641e03647e54d2b66c9102b}}
+\index{xb::xbDbf@{xb::xbDbf}!cIndexFlag@{cIndexFlag}}
+\index{cIndexFlag@{cIndexFlag}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{cIndexFlag}{cIndexFlag}}
+{\footnotesize\ttfamily char xb\+::xb\+Dbf\+::c\+Index\+Flag\hspace{0.3cm}{\ttfamily [protected]}}
+
+\mbox{\Hypertarget{classxb_1_1xbDbf_aea1dfe5cbd1f9cdbcfc8eb04b2c3d5f1}\label{classxb_1_1xbDbf_aea1dfe5cbd1f9cdbcfc8eb04b2c3d5f1}}
+\index{xb::xbDbf@{xb::xbDbf}!cLangDriver@{cLangDriver}}
+\index{cLangDriver@{cLangDriver}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{cLangDriver}{cLangDriver}}
+{\footnotesize\ttfamily char xb\+::xb\+Dbf\+::c\+Lang\+Driver\hspace{0.3cm}{\ttfamily [protected]}}
+
+\mbox{\Hypertarget{classxb_1_1xbDbf_ac3c89fc3bc6a6abf385478a8adbed970}\label{classxb_1_1xbDbf_ac3c89fc3bc6a6abf385478a8adbed970}}
+\index{xb::xbDbf@{xb::xbDbf}!cTransactionFlag@{cTransactionFlag}}
+\index{cTransactionFlag@{cTransactionFlag}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{cTransactionFlag}{cTransactionFlag}}
+{\footnotesize\ttfamily char xb\+::xb\+Dbf\+::c\+Transaction\+Flag\hspace{0.3cm}{\ttfamily [protected]}}
+
+\mbox{\Hypertarget{classxb_1_1xbDbf_a6021789d314cd41488991e708fcd0df2}\label{classxb_1_1xbDbf_a6021789d314cd41488991e708fcd0df2}}
+\index{xb::xbDbf@{xb::xbDbf}!cUpdateDD@{cUpdateDD}}
+\index{cUpdateDD@{cUpdateDD}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{cUpdateDD}{cUpdateDD}}
+{\footnotesize\ttfamily char xb\+::xb\+Dbf\+::c\+Update\+DD\hspace{0.3cm}{\ttfamily [protected]}}
+
+\mbox{\Hypertarget{classxb_1_1xbDbf_a9340a5e8ee53eb0f3b6601eec2d71e1b}\label{classxb_1_1xbDbf_a9340a5e8ee53eb0f3b6601eec2d71e1b}}
+\index{xb::xbDbf@{xb::xbDbf}!cUpdateMM@{cUpdateMM}}
+\index{cUpdateMM@{cUpdateMM}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{cUpdateMM}{cUpdateMM}}
+{\footnotesize\ttfamily char xb\+::xb\+Dbf\+::c\+Update\+MM\hspace{0.3cm}{\ttfamily [protected]}}
+
+\mbox{\Hypertarget{classxb_1_1xbDbf_a4fcd6a86ddd32d4a9d76a4074573440a}\label{classxb_1_1xbDbf_a4fcd6a86ddd32d4a9d76a4074573440a}}
+\index{xb::xbDbf@{xb::xbDbf}!cUpdateYY@{cUpdateYY}}
+\index{cUpdateYY@{cUpdateYY}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{cUpdateYY}{cUpdateYY}}
+{\footnotesize\ttfamily char xb\+::xb\+Dbf\+::c\+Update\+YY\hspace{0.3cm}{\ttfamily [protected]}}
+
+\mbox{\Hypertarget{classxb_1_1xbDbf_a3a262abf658e5fa968b57ef457a69470}\label{classxb_1_1xbDbf_a3a262abf658e5fa968b57ef457a69470}}
+\index{xb::xbDbf@{xb::xbDbf}!cVersion@{cVersion}}
+\index{cVersion@{cVersion}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{cVersion}{cVersion}}
+{\footnotesize\ttfamily unsigned char xb\+::xb\+Dbf\+::c\+Version\hspace{0.3cm}{\ttfamily [protected]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_a6219f1b5e24ea12fe158cd5aea56988e}\label{classxb_1_1xbSsv_a6219f1b5e24ea12fe158cd5aea56988e}}
+\index{xb::xbDbf@{xb::xbDbf}!ErrorCodeText@{ErrorCodeText}}
+\index{ErrorCodeText@{ErrorCodeText}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{ErrorCodeText}{ErrorCodeText}}
+{\footnotesize\ttfamily const char$\ast$ xb\+::xb\+Ssv\+::\+Error\+Code\+Text\mbox{[}$\,$\mbox{]}\hspace{0.3cm}{\ttfamily [static]}, {\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbDbf_ab506450954bc86e7bf1d7c4efe681f43}\label{classxb_1_1xbDbf_ab506450954bc86e7bf1d7c4efe681f43}}
+\index{xb::xbDbf@{xb::xbDbf}!iAutoCommit@{iAutoCommit}}
+\index{iAutoCommit@{iAutoCommit}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{iAutoCommit}{iAutoCommit}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::i\+Auto\+Commit\hspace{0.3cm}{\ttfamily [protected]}}
+
+\mbox{\Hypertarget{classxb_1_1xbDbf_a6d8e193da3ca414eef1e8866ec5ca81b}\label{classxb_1_1xbDbf_a6d8e193da3ca414eef1e8866ec5ca81b}}
+\index{xb::xbDbf@{xb::xbDbf}!iDbfStatus@{iDbfStatus}}
+\index{iDbfStatus@{iDbfStatus}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{iDbfStatus}{iDbfStatus}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::i\+Dbf\+Status\hspace{0.3cm}{\ttfamily [protected]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}\label{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}}
+\index{xb::xbDbf@{xb::xbDbf}!iEndianType@{iEndianType}}
+\index{iEndianType@{iEndianType}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{iEndianType}{iEndianType}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Ssv\+::i\+Endian\+Type = 0\hspace{0.3cm}{\ttfamily [static]}, {\ttfamily [protected]}, {\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbDbf_a15f495446f0d75bcf2fa89e3b699d388}\label{classxb_1_1xbDbf_a15f495446f0d75bcf2fa89e3b699d388}}
+\index{xb::xbDbf@{xb::xbDbf}!iFileVersion@{iFileVersion}}
+\index{iFileVersion@{iFileVersion}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{iFileVersion}{iFileVersion}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::i\+File\+Version\hspace{0.3cm}{\ttfamily [protected]}}
+
+\mbox{\Hypertarget{classxb_1_1xbDbf_a5056757614c39f725cc775332494966a}\label{classxb_1_1xbDbf_a5056757614c39f725cc775332494966a}}
+\index{xb::xbDbf@{xb::xbDbf}!iNoOfFields@{iNoOfFields}}
+\index{iNoOfFields@{iNoOfFields}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{iNoOfFields}{iNoOfFields}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::i\+No\+Of\+Fields\hspace{0.3cm}{\ttfamily [protected]}}
+
+\mbox{\Hypertarget{classxb_1_1xbDbf_a8a9b3bce0b741e73473d3ebbd6e6f1cd}\label{classxb_1_1xbDbf_a8a9b3bce0b741e73473d3ebbd6e6f1cd}}
+\index{xb::xbDbf@{xb::xbDbf}!RecBuf@{RecBuf}}
+\index{RecBuf@{RecBuf}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{RecBuf}{RecBuf}}
+{\footnotesize\ttfamily char$\ast$ xb\+::xb\+Dbf\+::\+Rec\+Buf\hspace{0.3cm}{\ttfamily [protected]}}
+
+\mbox{\Hypertarget{classxb_1_1xbDbf_a353ebfc8a2960ef827f429ec74025606}\label{classxb_1_1xbDbf_a353ebfc8a2960ef827f429ec74025606}}
+\index{xb::xbDbf@{xb::xbDbf}!RecBuf2@{RecBuf2}}
+\index{RecBuf2@{RecBuf2}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{RecBuf2}{RecBuf2}}
+{\footnotesize\ttfamily char$\ast$ xb\+::xb\+Dbf\+::\+Rec\+Buf2\hspace{0.3cm}{\ttfamily [protected]}}
+
+\mbox{\Hypertarget{classxb_1_1xbDbf_a73f9c792d0a769e2e604c1855245a276}\label{classxb_1_1xbDbf_a73f9c792d0a769e2e604c1855245a276}}
+\index{xb::xbDbf@{xb::xbDbf}!sAlias@{sAlias}}
+\index{sAlias@{sAlias}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{sAlias}{sAlias}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} xb\+::xb\+Dbf\+::s\+Alias\hspace{0.3cm}{\ttfamily [protected]}}
+
+\mbox{\Hypertarget{classxb_1_1xbDbf_ad8c8b5eb12063bb898da1b2cc02cfce7}\label{classxb_1_1xbDbf_ad8c8b5eb12063bb898da1b2cc02cfce7}}
+\index{xb::xbDbf@{xb::xbDbf}!SchemaPtr@{SchemaPtr}}
+\index{SchemaPtr@{SchemaPtr}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{SchemaPtr}{SchemaPtr}}
+{\footnotesize\ttfamily xb\+Schema\+Rec$\ast$ xb\+::xb\+Dbf\+::\+Schema\+Ptr\hspace{0.3cm}{\ttfamily [protected]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}\label{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}}
+\index{xb::xbDbf@{xb::xbDbf}!sNullString@{sNullString}}
+\index{sNullString@{sNullString}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{sNullString}{sNullString}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} xb\+::xb\+Ssv\+::s\+Null\+String = \char`\"{}\char`\"{}\hspace{0.3cm}{\ttfamily [static]}, {\ttfamily [protected]}, {\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbDbf_a62f5fa9149ae0f6dc75642823de66918}\label{classxb_1_1xbDbf_a62f5fa9149ae0f6dc75642823de66918}}
+\index{xb::xbDbf@{xb::xbDbf}!uiHeaderLen@{uiHeaderLen}}
+\index{uiHeaderLen@{uiHeaderLen}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{uiHeaderLen}{uiHeaderLen}}
+{\footnotesize\ttfamily xb\+UInt16 xb\+::xb\+Dbf\+::ui\+Header\+Len\hspace{0.3cm}{\ttfamily [protected]}}
+
+\mbox{\Hypertarget{classxb_1_1xbDbf_a1760e222567e2c849f9c799b9d896e91}\label{classxb_1_1xbDbf_a1760e222567e2c849f9c799b9d896e91}}
+\index{xb::xbDbf@{xb::xbDbf}!uiRecordLen@{uiRecordLen}}
+\index{uiRecordLen@{uiRecordLen}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{uiRecordLen}{uiRecordLen}}
+{\footnotesize\ttfamily xb\+UInt16 xb\+::xb\+Dbf\+::ui\+Record\+Len\hspace{0.3cm}{\ttfamily [protected]}}
+
+\mbox{\Hypertarget{classxb_1_1xbDbf_afcd99924606be0a9e1e25180bcd1abf8}\label{classxb_1_1xbDbf_afcd99924606be0a9e1e25180bcd1abf8}}
+\index{xb::xbDbf@{xb::xbDbf}!ulCurRec@{ulCurRec}}
+\index{ulCurRec@{ulCurRec}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{ulCurRec}{ulCurRec}}
+{\footnotesize\ttfamily xb\+UInt32 xb\+::xb\+Dbf\+::ul\+Cur\+Rec\hspace{0.3cm}{\ttfamily [protected]}}
+
+\mbox{\Hypertarget{classxb_1_1xbDbf_acb594ab61dd35b17bdf28394083f8e87}\label{classxb_1_1xbDbf_acb594ab61dd35b17bdf28394083f8e87}}
+\index{xb::xbDbf@{xb::xbDbf}!ulNoOfRecs@{ulNoOfRecs}}
+\index{ulNoOfRecs@{ulNoOfRecs}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{ulNoOfRecs}{ulNoOfRecs}}
+{\footnotesize\ttfamily xb\+UInt32 xb\+::xb\+Dbf\+::ul\+No\+Of\+Recs\hspace{0.3cm}{\ttfamily [protected]}}
+
+\mbox{\Hypertarget{classxb_1_1xbFile_ae39a67ea391b46055d4ca299cb222004}\label{classxb_1_1xbFile_ae39a67ea391b46055d4ca299cb222004}}
+\index{xb::xbDbf@{xb::xbDbf}!xbase@{xbase}}
+\index{xbase@{xbase}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{xbase}{xbase}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}}$\ast$ xb\+::xb\+File\+::xbase\hspace{0.3cm}{\ttfamily [protected]}, {\ttfamily [inherited]}}
+
+
+
+The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
+\item
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbdbf_8h}{xbdbf.\+h}}\item
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbdbf_8cpp}{xbdbf.\+cpp}}\item
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbfields_8cpp}{xbfields.\+cpp}}\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/classxb_1_1xbFile.eps b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbFile.eps
index defac03..defac03 100644
--- a/docs/doxygen/latex/classxb_1_1xbFile.eps
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbFile.eps
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbFile.pdf b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbFile.pdf
new file mode 100644
index 0000000..11aea00
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbFile.pdf
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbFile.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbFile.tex
new file mode 100644
index 0000000..e5e63ad
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbFile.tex
@@ -0,0 +1,1953 @@
+\hypertarget{classxb_1_1xbFile}{}\doxysection{xb\+::xb\+File Class Reference}
+\label{classxb_1_1xbFile}\index{xb::xbFile@{xb::xbFile}}
+
+
+Class for handling low level file I/O.
+
+
+
+
+{\ttfamily \#include $<$xbfile.\+h$>$}
+
+Inheritance diagram for xb\+::xb\+File\+:\begin{figure}[H]
+\begin{center}
+\leavevmode
+\includegraphics[height=3.000000cm]{classxb_1_1xbFile}
+\end{center}
+\end{figure}
+\doxysubsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\hyperlink{classxb_1_1xbFile_a869eedd74c6eddc308852eb546c87176}{xb\+File}} (\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$x)
+\begin{DoxyCompactList}\small\item\em Class Constructor. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbFile_a491f6c48076e89da2e791a42b2727a90}{$\sim$xb\+File}} ()
+\begin{DoxyCompactList}\small\item\em Class Destructor. \end{DoxyCompactList}\item
+const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbFile_acd0fb2166b2bff7e8a1cf65a7bc8be1e}{Get\+Directory}} () const
+\begin{DoxyCompactList}\small\item\em Get the directory name. \end{DoxyCompactList}\item
+const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbFile_ac95cb882ccbcdedc9a233c6ad9fed07a}{Get\+File\+Name}} () const
+\begin{DoxyCompactList}\small\item\em Get the file name. \end{DoxyCompactList}\item
+const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbFile_a31b4e641f93206ba23e2a5a27491dcd4}{Get\+Fq\+File\+Name}} () const
+\begin{DoxyCompactList}\small\item\em Get the fully qualified file name. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ad39797624a752b9d62533d00fad9feff}{Create\+Unique\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Dir\+In, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Ext\+In, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Fqn\+Out, xb\+Int16 i\+Option=0)
+\begin{DoxyCompactList}\small\item\em Create a unique file name. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ae2b6ac26018dc28f77afbb3f008c3f66}{Determine\+Xbase\+Table\+Version}} (unsigned char c\+File\+Type\+Byte) const
+\begin{DoxyCompactList}\small\item\em Determine xbase dbf version. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a5a740033664c9ad2611c90e2a6d0c2d3}{Determine\+Xbase\+Memo\+Version}} (unsigned char c\+File\+Type\+Byte) const
+\begin{DoxyCompactList}\small\item\em Determine which version the memo (dbt) file is. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} \mbox{\hyperlink{classxb_1_1xbFile_ab14e4a11427f5efb81cba1dd32bd1aa1}{e\+Get\+Double}} (const char $\ast$p) const
+\begin{DoxyCompactList}\small\item\em Get a portable double value. \end{DoxyCompactList}\item
+xb\+Int32 \mbox{\hyperlink{classxb_1_1xbFile_a60b24a5afc984c586bf384c7e915ba0d}{e\+Get\+Int32}} (const char $\ast$p) const
+\begin{DoxyCompactList}\small\item\em Get a portable long value. \end{DoxyCompactList}\item
+xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbFile_a78f052529d39a18deaface5a0d47d0b0}{e\+Get\+UInt32}} (const char $\ast$p) const
+\begin{DoxyCompactList}\small\item\em Get a portable unsigned long value. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ac40c991110ddc6fb30a72d90f4652762}{e\+Get\+Int16}} (const char $\ast$p) const
+\begin{DoxyCompactList}\small\item\em Get a portable short value. \end{DoxyCompactList}\item
+xb\+UInt16 \mbox{\hyperlink{classxb_1_1xbFile_a936ade458e6d5e6d29f9b5031888d189}{e\+Get\+UInt16}} (const char $\ast$p) const
+\begin{DoxyCompactList}\small\item\em Get a portable unsigned short value. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbFile_a98b6ff533ae93f90c977a2ba23eeb105}{e\+Put\+Double}} (char $\ast$p, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} d)
+\begin{DoxyCompactList}\small\item\em Write a portable double value to memory location. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbFile_a19c37f76a2ccbb45019cb0fc373d3f46}{e\+Put\+Int32}} (char $\ast$p, xb\+Int32 l)
+\begin{DoxyCompactList}\small\item\em Write a portable long value to memory location. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbFile_aa3f6ceae4b96f24875d86848bf13a173}{e\+Put\+UInt32}} (char $\ast$p, xb\+UInt32 ul)
+\begin{DoxyCompactList}\small\item\em Write a portable unsigned long value to memory location. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbFile_a29130f12739ac8fa837f4eaedf1338b2}{e\+Put\+Int16}} (char $\ast$p, xb\+Int16 s)
+\begin{DoxyCompactList}\small\item\em Write a portable short value to memory location. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbFile_a65e9839f92b96eac7b0d071fac3bbe40}{e\+Put\+UInt16}} (char $\ast$p, xb\+UInt16 s)
+\begin{DoxyCompactList}\small\item\em Write a portable unsigned short value to memory location. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a78bd8a11dce102647095baf3aff2b006}{File\+Exists}} () const
+\begin{DoxyCompactList}\small\item\em Determines if a file exists. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a174d8a6aabc9cfcd32fedbd1e5b13ddd}{File\+Exists}} (xb\+Int16 i\+Option) const
+\begin{DoxyCompactList}\small\item\em Determines if a file exists. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a61130b4fbf4cf9d5972dcb4993de2f94}{File\+Exists}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name) const
+\begin{DoxyCompactList}\small\item\em Determines if a file exists. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a0592168f39a10f2a401a88ef781f6148}{File\+Exists}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, xb\+Int16 i\+Option) const
+\begin{DoxyCompactList}\small\item\em Determines if a file exists. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a7fa837938a32dc9ca3fbc81cbaf50f59}{File\+Is\+Open}} () const
+\begin{DoxyCompactList}\small\item\em Determines if file is open. \end{DoxyCompactList}\item
+xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbFile_a638e14262410a1627819f016a16cdce2}{Get\+Block\+Size}} () const
+\begin{DoxyCompactList}\small\item\em Get the block size. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a60c53998e3d1b694134b20a87bc9bf5a}{Get\+File\+Dir\+Part}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Dir\+Part\+Out) const
+\begin{DoxyCompactList}\small\item\em Get the directory part of the file name. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_af5127c92892816e9bbc5c19653c4147a}{Get\+File\+Dir\+Part}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Complete\+File\+Name\+In, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Dir\+Part\+Out) const
+\begin{DoxyCompactList}\small\item\em Get the directory part of the file name. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a57a9222e5cbb51019d4eeb2c3ac89fa2}{Get\+File\+Ext\+Part}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Ext\+Part\+Out) const
+\begin{DoxyCompactList}\small\item\em Get the extension part of the file name. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ab289b6ffe955321160c1f90220c22e25}{Get\+File\+Ext\+Part}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Complete\+File\+Name\+In, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Ext\+Part\+Out) const
+\begin{DoxyCompactList}\small\item\em Get the extension part of the file name. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a02df78f4c90313243f508fc56b95aba8}{Get\+File\+Mtime}} (time\+\_\+t \&mtime)
+\begin{DoxyCompactList}\small\item\em Get the time of last file modification timestamp as reported by the OS. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a81422b3dd52763d2cc6c77237ec9af0a}{Get\+File\+Name\+Part}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name\+Part\+Out) const
+\begin{DoxyCompactList}\small\item\em Get the name part of the file name. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a6110763c5ae996b72c7a62c15bdecc73}{Get\+File\+Name\+Part}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Complete\+File\+Name\+In, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name\+Part\+Out) const
+\begin{DoxyCompactList}\small\item\em Get the name part of the file name. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a50b63c39e49d44e52078038027b24cc5}{Get\+File\+Size}} (xb\+UInt64 \&ull\+File\+Size)
+\begin{DoxyCompactList}\small\item\em Get the size of the file as reported by the OS. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a5548236d38d43b89ae29b9a015b1f678}{Get\+File\+Type}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Type) const
+\begin{DoxyCompactList}\small\item\em Get the file type aka Capitalized file extension. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a3c500dc9dac22c49496e4b29386b2dd3}{Get\+Open\+Mode}} () const
+\begin{DoxyCompactList}\small\item\em Get the open mode of the file. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a9b63e05b77f477ff6109ff7b9432c1b6}{Get\+Share\+Mode}} () const
+\begin{DoxyCompactList}\small\item\em Get the share mode of the file. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_aaf2e697751a0beff41432a66bb83fb5e}{Get\+Xbase\+File\+Type\+Byte}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, xb\+Int16 \&i\+Version)
+\begin{DoxyCompactList}\small\item\em Get the file type byte and version of the dbf file. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a7af337808919680b90710ad5e8a99232}{Get\+Xbase\+File\+Type\+Byte}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, unsigned char \&c\+File\+Type\+Byte)
+\begin{DoxyCompactList}\small\item\em Get the file type byte and version of the dbf file. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a78aebdd21d3de46a450d5f835e3027f6}{Get\+Xbase\+File\+Type\+Byte}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, unsigned char \&c\+File\+Type\+Byte, xb\+Int16 \&i\+Version)
+\begin{DoxyCompactList}\small\item\em Get the file type byte and version of the dbf file. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a361e3cc318bbf1c4d10f069e0800a24e}{Name\+Suffix\+Missing}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, xb\+Int16 i\+Option) const
+\begin{DoxyCompactList}\small\item\em Determines status of file extension. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_aa1bb80340abc7a5c22f87f878e9dc825}{Read\+Block}} (xb\+UInt32 ul\+Block\+No, size\+\_\+t read\+Size, void $\ast$buf)
+\begin{DoxyCompactList}\small\item\em Read a block of data from file. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_aef696b1c4c0ef5338e818599f695d485}{Read\+Block}} (xb\+UInt32 ul\+Block\+No, xb\+UInt32 ul\+Block\+Size, size\+\_\+t read\+Size, void $\ast$buf)
+\begin{DoxyCompactList}\small\item\em Read a block of data from file. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a991c5676a6f38fa752435390989f413e}{Set\+Block\+Size}} (xb\+UInt32 ul\+Block\+Size)
+\begin{DoxyCompactList}\small\item\em Set the block size. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbFile_ae78a85255488bc78964c16946dbaead3}{Set\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Directory)
+\begin{DoxyCompactList}\small\item\em Set the directory. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbFile_a5419eb27e56822f828b2b88a9502a636}{Set\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name)
+\begin{DoxyCompactList}\small\item\em Set the filename. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbFile_aee832fa11db2077a532f49e1329bd05a}{Set\+Fq\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Fq\+Name)
+\begin{DoxyCompactList}\small\item\em Set the fully qualifed filename. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a060acbfaa8d528f86cb59301814b414a}{Set\+Home\+Folders}} ()
+\begin{DoxyCompactList}\small\item\em Set Home Folders. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a5d871dcfecc2b4338f7a13722aab766c}{Write\+Block}} (xb\+UInt32 ul\+Block\+No, size\+\_\+t write\+Size, void $\ast$buf)
+\begin{DoxyCompactList}\small\item\em Write a block of data to file. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a18830b5755d74818f60d9c7ce38ddf2d}{xb\+Fclose}} ()
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fclose. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_af5b6356832d2a67212070a1aa605f170}{xb\+Feof}} ()
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary feof. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ad205184d43409f04216540ae22f15009}{xb\+Fflush}} ()
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fflush. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_afb1c584d2895ffb7834df80aea7eb1e4}{xb\+Fgetc}} (xb\+Int32 \&c)
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fgetc. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a5ee229bda4d7d6695e122200e581e7a6}{xb\+Fgetc}} (char \&c)
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fgetc. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ad245955ace26e5dde85fd4373b30d026}{xb\+Fgets}} (size\+\_\+t l\+Size, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Line)
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fgets. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a7cdfef5ede9ac98d44a28a6b7a70972c}{xb\+Fopen}} (xb\+Int16 i\+Open\+Mode)
+\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a0548cedf0f26b7d8ac221f75b0cd048c}{xb\+Fopen}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Open\+Mode, xb\+Int16 i\+Share\+Mode)
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fopen. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_aabd113333b49c36cad23244b392baab4}{xb\+Fopen}} (xb\+Int16 i\+Open\+Mode, xb\+Int16 i\+Share\+Mode)
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fopen. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ab0fa19686ca8953ff4b556fb5b249135}{xb\+Fopen}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Mode, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, xb\+Int16 i\+Share\+Mode)
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fopen. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_af2e940c78956e5cb6824f9a1bc404896}{xb\+Fputc}} (xb\+Int32 c)
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fputc. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a863f74cf17df8186d88586b4d2a6441a}{xb\+Fputc}} (xb\+Int32 c, xb\+Int32 i\+No\+Times)
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fputc. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a698f3b40216778562e639e6ca1a47573}{xb\+Fputs}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s)
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fputs. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ab4f6afaa1f77539f27a4f05c26e54e2f}{xb\+Fread}} (void $\ast$ptr, size\+\_\+t size, size\+\_\+t nmemb)
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fread. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a5337ab8918df240910c0d19b4f298e3d}{xb\+Fseek}} (xb\+Int64 ll\+Offset, xb\+Int32 whence)
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fseek. \end{DoxyCompactList}\item
+size\+\_\+t \mbox{\hyperlink{classxb_1_1xbFile_a0e1c06aedfa7fbcb92e117f891edd13b}{xb\+Ftell}} ()
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary ftell. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbFile_a9891b792f585a696f38a5cf959e30918}{xb\+FTurn\+Off\+File\+Buffering}} ()
+\begin{DoxyCompactList}\small\item\em Turn off file buffering. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a08463f506f425c2385acbe1a561506e9}{xb\+Read\+Until}} (const char c\+Delim, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Out)
+\begin{DoxyCompactList}\small\item\em Read file until a particular character is encountered on input stream. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a6d919366c2ec95e529906bf8842cbf07}{xb\+Remove}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, xb\+Int16 i\+Option)
+\begin{DoxyCompactList}\small\item\em Delete file. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a58f6a6751fdf7e9549c273bb75d93eb5}{xb\+Remove}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name)
+\begin{DoxyCompactList}\small\item\em Delete file. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ab3c668a8570433188382d31d7c60bd48}{xb\+Remove}} ()
+\begin{DoxyCompactList}\small\item\em Delete file. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_afc8ce113aa72611a278233f9bb170012}{xb\+Rename}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Old\+Name, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+New\+Name)
+\begin{DoxyCompactList}\small\item\em Rename file. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbFile_a7996b6e084665c37c3892faea64b3505}{xb\+Rewind}} ()
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for rewind. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a6aadd871d1782944703fed773d44b85f}{xb\+Fwrite}} (const void $\ast$ptr, size\+\_\+t l\+Size, size\+\_\+t l\+Nmemb)
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fwrite. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a518bfcbfa3699d883cf89affee383296}{xb\+Truncate}} (xb\+Int64 ll\+Size)
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for ftruncate. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}{Display\+Error}} (xb\+Int16 Error\+Code) const
+\begin{DoxyCompactList}\small\item\em Display error message on console for a given error number. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a6fbb9c3a550ab0b3378f9586a57791d2}{Get\+Default\+Date\+Format}} () const
+\begin{DoxyCompactList}\small\item\em Get the default date format. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}{Get\+Data\+Directory}} () const
+\begin{DoxyCompactList}\small\item\em Get the current data directory. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_abfaeef85935331073d213465bb362a61}{Get\+Temp\+Directory}} () const
+\begin{DoxyCompactList}\small\item\em Get the current temp directory. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}{Get\+Home\+Dir}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Home\+Dir\+Out)
+\begin{DoxyCompactList}\small\item\em Get home directory. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}{Get\+Endian\+Type}} () const
+\begin{DoxyCompactList}\small\item\em Get the Endian type. \end{DoxyCompactList}\item
+const char $\ast$ \mbox{\hyperlink{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}{Get\+Error\+Message}} (xb\+Int16 Error\+Code) const
+\begin{DoxyCompactList}\small\item\em Get an error message. \end{DoxyCompactList}\item
+char \mbox{\hyperlink{classxb_1_1xbSsv_a63cee13b473ee13970e93b11837b9e35}{Get\+Path\+Separator}} () const
+\begin{DoxyCompactList}\small\item\em Get the OS dependent path separator. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}{Set\+Data\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Data\+Directory)
+\begin{DoxyCompactList}\small\item\em Set the data directory. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}{Set\+Default\+Date\+Format}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Default\+Date\+Format)
+\begin{DoxyCompactList}\small\item\em Set the default date format. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a17c229a20ef9ab4034df8f9cd657adb2}{Set\+Temp\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Temp\+Directory)
+\begin{DoxyCompactList}\small\item\em Set the temp directory. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}{Bit\+Set}} (unsigned char c, xb\+Int16 i\+Bit\+No) const
+\begin{DoxyCompactList}\small\item\em Check a bit in a one byte field and see if it is set. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}{Bit\+Dump}} (unsigned char c) const
+\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}{Bit\+Dump}} (char c) const
+\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}{Get\+Default\+Auto\+Commit}} () const
+\begin{DoxyCompactList}\small\item\em Get the default auto commit setting. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}{Set\+Default\+Auto\+Commit}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Default\+Auto\+Commit)
+\begin{DoxyCompactList}\small\item\em Set the default auto commit. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}{Get\+Log\+Directory}} () const
+\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}{Get\+Log\+File\+Name}} () const
+\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}{Set\+Log\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Log\+Directory)
+\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a7f05738e7dfd759e89990242ef503544}{Set\+Log\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Log\+File\+Name)
+\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}{Get\+Multi\+User}} () const
+\begin{DoxyCompactList}\small\item\em Get the multi user setting. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}{Set\+Multi\+User}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Multi\+User)
+\begin{DoxyCompactList}\small\item\em Get the multi user setting. \end{DoxyCompactList}\end{DoxyCompactItemize}
+\doxysubsection*{Static Public Attributes}
+\begin{DoxyCompactItemize}
+\item
+static const char $\ast$ \mbox{\hyperlink{classxb_1_1xbSsv_a6219f1b5e24ea12fe158cd5aea56988e}{Error\+Code\+Text}} \mbox{[}$\,$\mbox{]}
+\end{DoxyCompactItemize}
+\doxysubsection*{Protected Member Functions}
+\begin{DoxyCompactItemize}
+\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a904ec348fd029d4a76e72b8fde636108}{Set\+Endian\+Type}} ()
+\begin{DoxyCompactList}\small\item\em Set the endian type. \end{DoxyCompactList}\end{DoxyCompactItemize}
+\doxysubsection*{Protected Attributes}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$ \mbox{\hyperlink{classxb_1_1xbFile_ae39a67ea391b46055d4ca299cb222004}{xbase}}
+\end{DoxyCompactItemize}
+\doxysubsection*{Static Protected Attributes}
+\begin{DoxyCompactItemize}
+\item
+static xb\+Int16 \mbox{\hyperlink{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}{i\+Endian\+Type}} = 0
+\item
+static \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \mbox{\hyperlink{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}{s\+Null\+String}} = \char`\"{}\char`\"{}
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Class for handling low level file I/O.
+
+The \mbox{\hyperlink{classxb_1_1xbFile}{xb\+File}} class is used as an abstraction layer to isolate the library from the nuances of different operating systems and machine architectures.
+
+This module handles low level file I/O and is a base class for the (dbf) table, (dbt) memo and (ndx,mdx) index classes. Files are opened and manipulated via methods in the \mbox{\hyperlink{classxb_1_1xbFile}{xb\+File}} class.~\newline
+ This class handles\+:~\newline
+ 1) Big and little endian reads/writes~\newline
+ 2) 32 or 64 bit system calls, depending on OS~\newline
+ 3) Various different c/c++ calls to open/close/read/write based on OS and compiler version~\newline
+ ~\newline
+ If you are wanting to port this library to a new platform, start with this class. This class could be used if you want to write a platform independent program that needs R/W file access.
+
+\doxysubsection{Constructor \& Destructor Documentation}
+\mbox{\Hypertarget{classxb_1_1xbFile_a869eedd74c6eddc308852eb546c87176}\label{classxb_1_1xbFile_a869eedd74c6eddc308852eb546c87176}}
+\index{xb::xbFile@{xb::xbFile}!xbFile@{xbFile}}
+\index{xbFile@{xbFile}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{xbFile()}{xbFile()}}
+{\footnotesize\ttfamily xb\+::xb\+File\+::xb\+File (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$}]{x }\end{DoxyParamCaption})}
+
+
+
+Class Constructor.
+
+\mbox{\Hypertarget{classxb_1_1xbFile_a491f6c48076e89da2e791a42b2727a90}\label{classxb_1_1xbFile_a491f6c48076e89da2e791a42b2727a90}}
+\index{xb::xbFile@{xb::xbFile}!````~xbFile@{$\sim$xbFile}}
+\index{````~xbFile@{$\sim$xbFile}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{$\sim$xbFile()}{~xbFile()}}
+{\footnotesize\ttfamily xb\+::xb\+File\+::$\sim$xb\+File (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+
+
+Class Destructor.
+
+
+
+\doxysubsection{Member Function Documentation}
+\mbox{\Hypertarget{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}\label{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}}
+\index{xb::xbFile@{xb::xbFile}!BitDump@{BitDump}}
+\index{BitDump@{BitDump}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{BitDump()}{BitDump()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Bit\+Dump (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}\label{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}}
+\index{xb::xbFile@{xb::xbFile}!BitDump@{BitDump}}
+\index{BitDump@{BitDump}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{BitDump()}{BitDump()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Bit\+Dump (\begin{DoxyParamCaption}\item[{unsigned char}]{c }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}\label{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}}
+\index{xb::xbFile@{xb::xbFile}!BitSet@{BitSet}}
+\index{BitSet@{BitSet}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{BitSet()}{BitSet()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Ssv\+::\+Bit\+Set (\begin{DoxyParamCaption}\item[{unsigned char}]{c, }\item[{xb\+Int16}]{i\+Bit\+No }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Check a bit in a one byte field and see if it is set.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c} & One byte char field to examine. \\
+\hline
+{\em i\+Bit\+No} & which bit to examine. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+xb\+True Bit is set~\newline
+ xb\+False Bit is not set
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_ad39797624a752b9d62533d00fad9feff}\label{classxb_1_1xbFile_ad39797624a752b9d62533d00fad9feff}}
+\index{xb::xbFile@{xb::xbFile}!CreateUniqueFileName@{CreateUniqueFileName}}
+\index{CreateUniqueFileName@{CreateUniqueFileName}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{CreateUniqueFileName()}{CreateUniqueFileName()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Create\+Unique\+File\+Name (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Dir\+In, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Ext\+In, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Fqn\+Out, }\item[{xb\+Int16}]{i\+Option = {\ttfamily 0} }\end{DoxyParamCaption})}
+
+
+
+Create a unique file name.
+
+Given a directory and file extension as inputs, create a unique file name.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Dir\+In} & Directory \\
+\hline
+{\em s\+Ext\+In} & File Extension \\
+\hline
+{\em s\+Fqn\+Out} & A fully qualifed unique file name as output \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+Create a unique file name.
+
+Given a directory and file extension as inputs, create a unique file name.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Dir\+In} & Directory \\
+\hline
+{\em s\+Ext\+In} & File Extension \\
+\hline
+{\em i\+Option} & 0 -\/ look only for one file for a given directory and extension~\newline
+ 1 -\/ if file name extension is \char`\"{}dbf\char`\"{} or \char`\"{}\+DBF\char`\"{}, verify unique dbt or DBT (memo) file is also available~\newline
+ \\
+\hline
+{\em s\+Fqn\+Out} & A fully qualifed unique file name as output \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a5a740033664c9ad2611c90e2a6d0c2d3}\label{classxb_1_1xbFile_a5a740033664c9ad2611c90e2a6d0c2d3}}
+\index{xb::xbFile@{xb::xbFile}!DetermineXbaseMemoVersion@{DetermineXbaseMemoVersion}}
+\index{DetermineXbaseMemoVersion@{DetermineXbaseMemoVersion}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{DetermineXbaseMemoVersion()}{DetermineXbaseMemoVersion()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Determine\+Xbase\+Memo\+Version (\begin{DoxyParamCaption}\item[{unsigned char}]{c\+File\+Type\+Byte }\end{DoxyParamCaption}) const}
+
+
+
+Determine which version the memo (dbt) file is.
+
+This routine uses the first byte in the dbf file to determine which memo file version is in use. The main difference between version 3 and 4 is that version 4 will reuse blocks if they become available. Version 3 does not.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c\+File\+Type\+Byte} & is an output field and is one of\+:~\newline
+ ~\newline
+ 0 -\/ none~\newline
+ 3 -\/ Dbase III+~\newline
+ 4 -\/ Dbase IV~\newline
+\\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_ae2b6ac26018dc28f77afbb3f008c3f66}\label{classxb_1_1xbFile_ae2b6ac26018dc28f77afbb3f008c3f66}}
+\index{xb::xbFile@{xb::xbFile}!DetermineXbaseTableVersion@{DetermineXbaseTableVersion}}
+\index{DetermineXbaseTableVersion@{DetermineXbaseTableVersion}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{DetermineXbaseTableVersion()}{DetermineXbaseTableVersion()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Determine\+Xbase\+Table\+Version (\begin{DoxyParamCaption}\item[{unsigned char}]{c\+File\+Type\+Byte }\end{DoxyParamCaption}) const}
+
+
+
+Determine xbase dbf version.
+
+This routine is used to determine which version of the Xbase classes can be used for a given DBF file.~\newline
+
+
+It attempts to use the highest version compiled into the library.~\newline
+
+
+References\+:~\newline
+ This routine uses the first byte from the dbf file.~\newline
+ Per DBase documentation\+:~\newline
+ Valid d\+BASE for Windows table file, bits 0-\/2 indicate version number\+: 3 for d\+BASE Level 5, 4 for d\+BASE Level 7.~\newline
+ Bit 3 and bit 7 indicate presence of a d\+BASE IV or d\+BASE for Windows memo file;~\newline
+ Bits 4-\/6 indicate the presence of a d\+BASE IV SQL table;~\newline
+ Bit 7 indicates the presence of any .DBT memo file (either a d\+BASE III PLUS type or a d\+BASE IV or d\+BASE for Windows memo file).~\newline
+ ~\newline
+ Bachmann spec (used extensively in library build), page 7 -\/ does not match DBase documentation~\newline
+ ~\newline
+ returns~\newline
+ 0 -\/ unknown~\newline
+ 3 -\/ Dbase level 3~\newline
+ 4 -\/ Dbase level 4~\newline
+ 5 -\/ Dbase Level 5 (future)~\newline
+ 7 -\/ Dbase Level 7 (future)~\newline
+ ~\newline
+ 1x -\/ Clipper files (future)~\newline
+ 2x -\/ Foxbase files (future)~\newline
+ ~\newline
+ \mbox{\Hypertarget{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}\label{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}}
+\index{xb::xbFile@{xb::xbFile}!DisplayError@{DisplayError}}
+\index{DisplayError@{DisplayError}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{DisplayError()}{DisplayError()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Display\+Error (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Error\+Code }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Display error message on console for a given error number.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Error\+Code} & Error number to reference \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbFile_ab14e4a11427f5efb81cba1dd32bd1aa1}\label{classxb_1_1xbFile_ab14e4a11427f5efb81cba1dd32bd1aa1}}
+\index{xb::xbFile@{xb::xbFile}!eGetDouble@{eGetDouble}}
+\index{eGetDouble@{eGetDouble}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{eGetDouble()}{eGetDouble()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} xb\+::xb\+File\+::e\+Get\+Double (\begin{DoxyParamCaption}\item[{const char $\ast$}]{p }\end{DoxyParamCaption}) const}
+
+
+
+Get a portable double value.
+
+This routine returns a double value from an 8 byte character stream, accounting for endian type.
+
+Converts a double (64 bit floating point) value stored at p from a portable format to the machine format.
+
+
+\begin{DoxyParams}{Parameters}
+{\em p} & pointer to memory containing the portable double value\\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+the double value.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_ac40c991110ddc6fb30a72d90f4652762}\label{classxb_1_1xbFile_ac40c991110ddc6fb30a72d90f4652762}}
+\index{xb::xbFile@{xb::xbFile}!eGetInt16@{eGetInt16}}
+\index{eGetInt16@{eGetInt16}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{eGetInt16()}{eGetInt16()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::e\+Get\+Int16 (\begin{DoxyParamCaption}\item[{const char $\ast$}]{p }\end{DoxyParamCaption}) const}
+
+
+
+Get a portable short value.
+
+This routine returns a short int value from a 2 byte character stream, accounting for endian type.
+
+
+\begin{DoxyParams}{Parameters}
+{\em p} & pointer to memory containing the portable long value\\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+the short value.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a60b24a5afc984c586bf384c7e915ba0d}\label{classxb_1_1xbFile_a60b24a5afc984c586bf384c7e915ba0d}}
+\index{xb::xbFile@{xb::xbFile}!eGetInt32@{eGetInt32}}
+\index{eGetInt32@{eGetInt32}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{eGetInt32()}{eGetInt32()}}
+{\footnotesize\ttfamily xb\+Int32 xb\+::xb\+File\+::e\+Get\+Int32 (\begin{DoxyParamCaption}\item[{const char $\ast$}]{p }\end{DoxyParamCaption}) const}
+
+
+
+Get a portable long value.
+
+This routine returns a long int value from a 4 byte character stream, accounting for endian type.
+
+
+\begin{DoxyParams}{Parameters}
+{\em p} & pointer to memory containing the portable long value\\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+the long value.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a936ade458e6d5e6d29f9b5031888d189}\label{classxb_1_1xbFile_a936ade458e6d5e6d29f9b5031888d189}}
+\index{xb::xbFile@{xb::xbFile}!eGetUInt16@{eGetUInt16}}
+\index{eGetUInt16@{eGetUInt16}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{eGetUInt16()}{eGetUInt16()}}
+{\footnotesize\ttfamily xb\+UInt16 xb\+::xb\+File\+::e\+Get\+UInt16 (\begin{DoxyParamCaption}\item[{const char $\ast$}]{p }\end{DoxyParamCaption}) const}
+
+
+
+Get a portable unsigned short value.
+
+This routine returns a short unsigned int value from a 2 byte character stream, accounting for endian type.
+
+
+\begin{DoxyParams}{Parameters}
+{\em p} & pointer to memory containing the portable long value\\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+the short value.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a78f052529d39a18deaface5a0d47d0b0}\label{classxb_1_1xbFile_a78f052529d39a18deaface5a0d47d0b0}}
+\index{xb::xbFile@{xb::xbFile}!eGetUInt32@{eGetUInt32}}
+\index{eGetUInt32@{eGetUInt32}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{eGetUInt32()}{eGetUInt32()}}
+{\footnotesize\ttfamily xb\+UInt32 xb\+::xb\+File\+::e\+Get\+UInt32 (\begin{DoxyParamCaption}\item[{const char $\ast$}]{p }\end{DoxyParamCaption}) const}
+
+
+
+Get a portable unsigned long value.
+
+This routine returns an unsigned long int value from a 4 byte character stream, accounting for endian type.
+
+
+\begin{DoxyParams}{Parameters}
+{\em p} & pointer to memory containing the portable long value\\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+the unsigned long value.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a98b6ff533ae93f90c977a2ba23eeb105}\label{classxb_1_1xbFile_a98b6ff533ae93f90c977a2ba23eeb105}}
+\index{xb::xbFile@{xb::xbFile}!ePutDouble@{ePutDouble}}
+\index{ePutDouble@{ePutDouble}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{ePutDouble()}{ePutDouble()}}
+{\footnotesize\ttfamily void xb\+::xb\+File\+::e\+Put\+Double (\begin{DoxyParamCaption}\item[{char $\ast$}]{c, }\item[{\mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}}}]{d }\end{DoxyParamCaption})}
+
+
+
+Write a portable double value to memory location.
+
+Converts a double (64 bit floating point) value from machine format to a portable format and stores the converted value in the memory referenced by c.
+
+This routine puts a double value to an 8 byte character stream
+
+
+\begin{DoxyParams}{Parameters}
+{\em c} & Pointer to memory to hold converted value \\
+\hline
+{\em d} & Input value to be converted \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbFile_a29130f12739ac8fa837f4eaedf1338b2}\label{classxb_1_1xbFile_a29130f12739ac8fa837f4eaedf1338b2}}
+\index{xb::xbFile@{xb::xbFile}!ePutInt16@{ePutInt16}}
+\index{ePutInt16@{ePutInt16}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{ePutInt16()}{ePutInt16()}}
+{\footnotesize\ttfamily void xb\+::xb\+File\+::e\+Put\+Int16 (\begin{DoxyParamCaption}\item[{char $\ast$}]{c, }\item[{xb\+Int16}]{s }\end{DoxyParamCaption})}
+
+
+
+Write a portable short value to memory location.
+
+Converts a short (16 bit integer) value from machine format to a portable format and stores the converted value in the memory referenced by c.
+
+This routine puts a short value to a 2 byte character stream
+
+
+\begin{DoxyParams}{Parameters}
+{\em c} & Pointer to memory to hold converted value \\
+\hline
+{\em s} & Input value to be converted \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbFile_a19c37f76a2ccbb45019cb0fc373d3f46}\label{classxb_1_1xbFile_a19c37f76a2ccbb45019cb0fc373d3f46}}
+\index{xb::xbFile@{xb::xbFile}!ePutInt32@{ePutInt32}}
+\index{ePutInt32@{ePutInt32}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{ePutInt32()}{ePutInt32()}}
+{\footnotesize\ttfamily void xb\+::xb\+File\+::e\+Put\+Int32 (\begin{DoxyParamCaption}\item[{char $\ast$}]{c, }\item[{xb\+Int32}]{l }\end{DoxyParamCaption})}
+
+
+
+Write a portable long value to memory location.
+
+Converts a long (32 bit integer) value from machine format to a portable format and stores the converted value in the memory referenced by c.
+
+This routine puts a long value to a 4 byte character stream.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c} & Pointer to memory to hold converted value \\
+\hline
+{\em l} & Input value to be converted \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbFile_a65e9839f92b96eac7b0d071fac3bbe40}\label{classxb_1_1xbFile_a65e9839f92b96eac7b0d071fac3bbe40}}
+\index{xb::xbFile@{xb::xbFile}!ePutUInt16@{ePutUInt16}}
+\index{ePutUInt16@{ePutUInt16}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{ePutUInt16()}{ePutUInt16()}}
+{\footnotesize\ttfamily void xb\+::xb\+File\+::e\+Put\+UInt16 (\begin{DoxyParamCaption}\item[{char $\ast$}]{c, }\item[{xb\+UInt16}]{s }\end{DoxyParamCaption})}
+
+
+
+Write a portable unsigned short value to memory location.
+
+Converts an unsigned short (16 bit integer) value from machine format to a portable format and stores the converted value in the memory referenced by c.
+
+This routine puts an unsigned short value to a 2 byte character stream
+
+
+\begin{DoxyParams}{Parameters}
+{\em c} & Pointer to memory to hold converted value \\
+\hline
+{\em s} & Input value to be converted \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbFile_aa3f6ceae4b96f24875d86848bf13a173}\label{classxb_1_1xbFile_aa3f6ceae4b96f24875d86848bf13a173}}
+\index{xb::xbFile@{xb::xbFile}!ePutUInt32@{ePutUInt32}}
+\index{ePutUInt32@{ePutUInt32}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{ePutUInt32()}{ePutUInt32()}}
+{\footnotesize\ttfamily void xb\+::xb\+File\+::e\+Put\+UInt32 (\begin{DoxyParamCaption}\item[{char $\ast$}]{c, }\item[{xb\+UInt32}]{ul }\end{DoxyParamCaption})}
+
+
+
+Write a portable unsigned long value to memory location.
+
+Converts an unsigned long (32 bit integer) value from machine format to a portable format and stores the converted value in the memory referenced by c.
+
+This routine puts an unsigned long value to a 4 byte character stream.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c} & Pointer to memory to hold converted value \\
+\hline
+{\em ul} & Input value to be converted \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbFile_a78bd8a11dce102647095baf3aff2b006}\label{classxb_1_1xbFile_a78bd8a11dce102647095baf3aff2b006}}
+\index{xb::xbFile@{xb::xbFile}!FileExists@{FileExists}}
+\index{FileExists@{FileExists}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{FileExists()}{FileExists()}\hspace{0.1cm}{\footnotesize\ttfamily [1/4]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+File\+::\+File\+Exists (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+
+
+Determines if a file exists.
+
+\begin{DoxyReturn}{Returns}
+xb\+True if file exists~\newline
+ xb\+False if file does not exist
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a61130b4fbf4cf9d5972dcb4993de2f94}\label{classxb_1_1xbFile_a61130b4fbf4cf9d5972dcb4993de2f94}}
+\index{xb::xbFile@{xb::xbFile}!FileExists@{FileExists}}
+\index{FileExists@{FileExists}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{FileExists()}{FileExists()}\hspace{0.1cm}{\footnotesize\ttfamily [2/4]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+File\+::\+File\+Exists (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name }\end{DoxyParamCaption}) const}
+
+
+
+Determines if a file exists.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+File\+Name} & -\/ file name to check for\\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+xb\+True if file exists~\newline
+ xb\+False if file does not exist
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a0592168f39a10f2a401a88ef781f6148}\label{classxb_1_1xbFile_a0592168f39a10f2a401a88ef781f6148}}
+\index{xb::xbFile@{xb::xbFile}!FileExists@{FileExists}}
+\index{FileExists@{FileExists}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{FileExists()}{FileExists()}\hspace{0.1cm}{\footnotesize\ttfamily [3/4]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+File\+::\+File\+Exists (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name, }\item[{xb\+Int16}]{i\+Option }\end{DoxyParamCaption}) const}
+
+
+
+Determines if a file exists.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+File\+Name} & -\/ file name to check for \\
+\hline
+{\em i\+Option} & if 1, assume this is a request for a dbf file and check for the a dbt memo file also, returns true if both files are found\\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+xb\+True if both dbf and dbt files exist~\newline
+ xb\+False if file does not exist
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a174d8a6aabc9cfcd32fedbd1e5b13ddd}\label{classxb_1_1xbFile_a174d8a6aabc9cfcd32fedbd1e5b13ddd}}
+\index{xb::xbFile@{xb::xbFile}!FileExists@{FileExists}}
+\index{FileExists@{FileExists}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{FileExists()}{FileExists()}\hspace{0.1cm}{\footnotesize\ttfamily [4/4]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+File\+::\+File\+Exists (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Option }\end{DoxyParamCaption}) const}
+
+
+
+Determines if a file exists.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Option} & if 1, assume this is a request for a dbf file and check for the a dbt memo file also, returns true if both files are found\\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+xb\+True if both files exist~\newline
+ xb\+False if file does not exist
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a7fa837938a32dc9ca3fbc81cbaf50f59}\label{classxb_1_1xbFile_a7fa837938a32dc9ca3fbc81cbaf50f59}}
+\index{xb::xbFile@{xb::xbFile}!FileIsOpen@{FileIsOpen}}
+\index{FileIsOpen@{FileIsOpen}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{FileIsOpen()}{FileIsOpen()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+File\+::\+File\+Is\+Open (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+
+
+Determines if file is open.
+
+\begin{DoxyReturn}{Returns}
+xb\+True if file is open~\newline
+ xb\+False if file is not open
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a638e14262410a1627819f016a16cdce2}\label{classxb_1_1xbFile_a638e14262410a1627819f016a16cdce2}}
+\index{xb::xbFile@{xb::xbFile}!GetBlockSize@{GetBlockSize}}
+\index{GetBlockSize@{GetBlockSize}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{GetBlockSize()}{GetBlockSize()}}
+{\footnotesize\ttfamily xb\+UInt32 xb\+::xb\+File\+::\+Get\+Block\+Size (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+
+
+Get the block size.
+
+\begin{DoxyReturn}{Returns}
+Block Size
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}\label{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}}
+\index{xb::xbFile@{xb::xbFile}!GetDataDirectory@{GetDataDirectory}}
+\index{GetDataDirectory@{GetDataDirectory}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{GetDataDirectory()}{GetDataDirectory()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Data\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the current data directory.
+
+\begin{DoxyReturn}{Returns}
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing the current data directory where the database files are stored.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}\label{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}}
+\index{xb::xbFile@{xb::xbFile}!GetDefaultAutoCommit@{GetDefaultAutoCommit}}
+\index{GetDefaultAutoCommit@{GetDefaultAutoCommit}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{GetDefaultAutoCommit()}{GetDefaultAutoCommit()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Ssv\+::\+Get\+Default\+Auto\+Commit (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the default auto commit setting.
+
+When auto commit is enabled, the library will automatically post any updates when moving off an updated record or closing files. If auto commit is disabled, the application program will need to explicitly update the tables using using dbf-\/\texorpdfstring{$>$}{>}Put() and dbf-\/\texorpdfstring{$>$}{>}Append\+Record().
+
+\begin{DoxyReturn}{Returns}
+xb\+True if auto commit is turned on~\newline
+ xb\+False is auto commit is turned off
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a6fbb9c3a550ab0b3378f9586a57791d2}\label{classxb_1_1xbSsv_a6fbb9c3a550ab0b3378f9586a57791d2}}
+\index{xb::xbFile@{xb::xbFile}!GetDefaultDateFormat@{GetDefaultDateFormat}}
+\index{GetDefaultDateFormat@{GetDefaultDateFormat}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{GetDefaultDateFormat()}{GetDefaultDateFormat()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Default\+Date\+Format (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the default date format.
+
+\begin{DoxyReturn}{Returns}
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing the default date format.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_acd0fb2166b2bff7e8a1cf65a7bc8be1e}\label{classxb_1_1xbFile_acd0fb2166b2bff7e8a1cf65a7bc8be1e}}
+\index{xb::xbFile@{xb::xbFile}!GetDirectory@{GetDirectory}}
+\index{GetDirectory@{GetDirectory}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{GetDirectory()}{GetDirectory()}}
+{\footnotesize\ttfamily const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+File\+::\+Get\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+
+
+Get the directory name.
+
+\begin{DoxyReturn}{Returns}
+the directory name of the file
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}\label{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}}
+\index{xb::xbFile@{xb::xbFile}!GetEndianType@{GetEndianType}}
+\index{GetEndianType@{GetEndianType}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{GetEndianType()}{GetEndianType()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Ssv\+::\+Get\+Endian\+Type (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the Endian type.
+
+\begin{DoxyReturn}{Returns}
+B -\/ Big endian~\newline
+ L -\/ Little endian~\newline
+
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}\label{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}}
+\index{xb::xbFile@{xb::xbFile}!GetErrorMessage@{GetErrorMessage}}
+\index{GetErrorMessage@{GetErrorMessage}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{GetErrorMessage()}{GetErrorMessage()}}
+{\footnotesize\ttfamily const char $\ast$ xb\+::xb\+Ssv\+::\+Get\+Error\+Message (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Error\+Code }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get an error message.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Error\+Code} & Error\+Code is the error number of description to be returned. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Returns a pointer to a string containing a text description for the error code.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_af5127c92892816e9bbc5c19653c4147a}\label{classxb_1_1xbFile_af5127c92892816e9bbc5c19653c4147a}}
+\index{xb::xbFile@{xb::xbFile}!GetFileDirPart@{GetFileDirPart}}
+\index{GetFileDirPart@{GetFileDirPart}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{GetFileDirPart()}{GetFileDirPart()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+File\+Dir\+Part (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Complete\+File\+Name\+In, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Dir\+Part\+Out }\end{DoxyParamCaption}) const}
+
+
+
+Get the directory part of the file name.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Complete\+File\+Name\+In} & -\/ a fully qualfied input file name \\
+\hline
+{\em s\+File\+Dir\+Part\+Out} & -\/ the returned directory name part out of s\+Complete\+File\+Name\+In \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a60c53998e3d1b694134b20a87bc9bf5a}\label{classxb_1_1xbFile_a60c53998e3d1b694134b20a87bc9bf5a}}
+\index{xb::xbFile@{xb::xbFile}!GetFileDirPart@{GetFileDirPart}}
+\index{GetFileDirPart@{GetFileDirPart}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{GetFileDirPart()}{GetFileDirPart()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+File\+Dir\+Part (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Dir\+Part\+Out }\end{DoxyParamCaption}) const}
+
+
+
+Get the directory part of the file name.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+File\+Dir\+Part\+Out} & -\/ the returned directory name \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_ab289b6ffe955321160c1f90220c22e25}\label{classxb_1_1xbFile_ab289b6ffe955321160c1f90220c22e25}}
+\index{xb::xbFile@{xb::xbFile}!GetFileExtPart@{GetFileExtPart}}
+\index{GetFileExtPart@{GetFileExtPart}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{GetFileExtPart()}{GetFileExtPart()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+File\+Ext\+Part (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Complete\+File\+Name\+In, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Ext\+Part\+Out }\end{DoxyParamCaption}) const}
+
+
+
+Get the extension part of the file name.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Complete\+File\+Name\+In} & -\/ a fully qualfied input file name\\
+\hline
+{\em s\+File\+Ext\+Part\+Out} & -\/ the returned directory name part out of s\+Complete\+File\+Name\+In \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a57a9222e5cbb51019d4eeb2c3ac89fa2}\label{classxb_1_1xbFile_a57a9222e5cbb51019d4eeb2c3ac89fa2}}
+\index{xb::xbFile@{xb::xbFile}!GetFileExtPart@{GetFileExtPart}}
+\index{GetFileExtPart@{GetFileExtPart}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{GetFileExtPart()}{GetFileExtPart()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+File\+Ext\+Part (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name\+Ext\+Out }\end{DoxyParamCaption}) const}
+
+
+
+Get the extension part of the file name.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+File\+Name\+Ext\+Out} & -\/ the returned extension part out of s\+Complete\+File\+Name\+In \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a02df78f4c90313243f508fc56b95aba8}\label{classxb_1_1xbFile_a02df78f4c90313243f508fc56b95aba8}}
+\index{xb::xbFile@{xb::xbFile}!GetFileMtime@{GetFileMtime}}
+\index{GetFileMtime@{GetFileMtime}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{GetFileMtime()}{GetFileMtime()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+File\+Mtime (\begin{DoxyParamCaption}\item[{time\+\_\+t \&}]{mtime }\end{DoxyParamCaption})}
+
+
+
+Get the time of last file modification timestamp as reported by the OS.
+
+
+\begin{DoxyParams}{Parameters}
+{\em mtime} & -\/ returned time of last file modification \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_ac95cb882ccbcdedc9a233c6ad9fed07a}\label{classxb_1_1xbFile_ac95cb882ccbcdedc9a233c6ad9fed07a}}
+\index{xb::xbFile@{xb::xbFile}!GetFileName@{GetFileName}}
+\index{GetFileName@{GetFileName}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{GetFileName()}{GetFileName()}}
+{\footnotesize\ttfamily const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+File\+::\+Get\+File\+Name (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+
+
+Get the file name.
+
+\begin{DoxyReturn}{Returns}
+the file name portion of the file
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a6110763c5ae996b72c7a62c15bdecc73}\label{classxb_1_1xbFile_a6110763c5ae996b72c7a62c15bdecc73}}
+\index{xb::xbFile@{xb::xbFile}!GetFileNamePart@{GetFileNamePart}}
+\index{GetFileNamePart@{GetFileNamePart}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{GetFileNamePart()}{GetFileNamePart()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+File\+Name\+Part (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Complete\+File\+Name\+In, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name\+Part\+Out }\end{DoxyParamCaption}) const}
+
+
+
+Get the name part of the file name.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Complete\+File\+Name\+In} & -\/ a fully qualified input file name \\
+\hline
+{\em s\+File\+Name\+Part\+Out} & -\/ the returned file name part out of s\+Complete\+File\+Name\+In \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a81422b3dd52763d2cc6c77237ec9af0a}\label{classxb_1_1xbFile_a81422b3dd52763d2cc6c77237ec9af0a}}
+\index{xb::xbFile@{xb::xbFile}!GetFileNamePart@{GetFileNamePart}}
+\index{GetFileNamePart@{GetFileNamePart}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{GetFileNamePart()}{GetFileNamePart()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+File\+Name\+Part (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name\+Part\+Out }\end{DoxyParamCaption}) const}
+
+
+
+Get the name part of the file name.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+File\+Name\+Part\+Out} & -\/ the returned file name part out of s\+Complete\+File\+Name\+In \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a50b63c39e49d44e52078038027b24cc5}\label{classxb_1_1xbFile_a50b63c39e49d44e52078038027b24cc5}}
+\index{xb::xbFile@{xb::xbFile}!GetFileSize@{GetFileSize}}
+\index{GetFileSize@{GetFileSize}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{GetFileSize()}{GetFileSize()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+File\+Size (\begin{DoxyParamCaption}\item[{xb\+UInt64 \&}]{ull\+File\+Size }\end{DoxyParamCaption})}
+
+
+
+Get the size of the file as reported by the OS.
+
+
+\begin{DoxyParams}{Parameters}
+{\em ull\+File\+Size} & -\/ unsigned long long field as output \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a5548236d38d43b89ae29b9a015b1f678}\label{classxb_1_1xbFile_a5548236d38d43b89ae29b9a015b1f678}}
+\index{xb::xbFile@{xb::xbFile}!GetFileType@{GetFileType}}
+\index{GetFileType@{GetFileType}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{GetFileType()}{GetFileType()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+File\+Type (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Type\+Out }\end{DoxyParamCaption}) const}
+
+
+
+Get the file type aka Capitalized file extension.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+File\+Type\+Out} & -\/ the returned extension part out of s\+Complete\+File\+Name\+In \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a31b4e641f93206ba23e2a5a27491dcd4}\label{classxb_1_1xbFile_a31b4e641f93206ba23e2a5a27491dcd4}}
+\index{xb::xbFile@{xb::xbFile}!GetFqFileName@{GetFqFileName}}
+\index{GetFqFileName@{GetFqFileName}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{GetFqFileName()}{GetFqFileName()}}
+{\footnotesize\ttfamily const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+File\+::\+Get\+Fq\+File\+Name (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+
+
+Get the fully qualified file name.
+
+\begin{DoxyReturn}{Returns}
+the fully qualfied name of the file
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}\label{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}}
+\index{xb::xbFile@{xb::xbFile}!GetHomeDir@{GetHomeDir}}
+\index{GetHomeDir@{GetHomeDir}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{GetHomeDir()}{GetHomeDir()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Get\+Home\+Dir (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Home\+Dir\+Out }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get home directory.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Home\+Dir\+Out} & -\/ Output home directory for current user. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}\label{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}}
+\index{xb::xbFile@{xb::xbFile}!GetLogDirectory@{GetLogDirectory}}
+\index{GetLogDirectory@{GetLogDirectory}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{GetLogDirectory()}{GetLogDirectory()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Log\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}\label{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}}
+\index{xb::xbFile@{xb::xbFile}!GetLogFileName@{GetLogFileName}}
+\index{GetLogFileName@{GetLogFileName}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{GetLogFileName()}{GetLogFileName()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Log\+File\+Name (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}\label{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}}
+\index{xb::xbFile@{xb::xbFile}!GetMultiUser@{GetMultiUser}}
+\index{GetMultiUser@{GetMultiUser}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{GetMultiUser()}{GetMultiUser()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Ssv\+::\+Get\+Multi\+User (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the multi user setting.
+
+\begin{DoxyReturn}{Returns}
+xb\+True -\/ Multi user mode turned on.~\newline
+ xb\+False -\/ Multi user mode turned off.~\newline
+
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a3c500dc9dac22c49496e4b29386b2dd3}\label{classxb_1_1xbFile_a3c500dc9dac22c49496e4b29386b2dd3}}
+\index{xb::xbFile@{xb::xbFile}!GetOpenMode@{GetOpenMode}}
+\index{GetOpenMode@{GetOpenMode}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{GetOpenMode()}{GetOpenMode()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+Open\+Mode (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+
+
+Get the open mode of the file.
+
+\begin{DoxyReturn}{Returns}
+XB\+\_\+\+READ~\newline
+ XB\+\_\+\+READ\+\_\+\+WRITE~\newline
+ XB\+\_\+\+WRITE~\newline
+
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a63cee13b473ee13970e93b11837b9e35}\label{classxb_1_1xbSsv_a63cee13b473ee13970e93b11837b9e35}}
+\index{xb::xbFile@{xb::xbFile}!GetPathSeparator@{GetPathSeparator}}
+\index{GetPathSeparator@{GetPathSeparator}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{GetPathSeparator()}{GetPathSeparator()}}
+{\footnotesize\ttfamily char xb\+::xb\+Ssv\+::\+Get\+Path\+Separator (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the OS dependent path separator.
+
+\begin{DoxyReturn}{Returns}
+Returns \textquotesingle{}\textbackslash{}\textquotesingle{} for windows environment, otherwise returns \textquotesingle{}/\textquotesingle{}.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a9b63e05b77f477ff6109ff7b9432c1b6}\label{classxb_1_1xbFile_a9b63e05b77f477ff6109ff7b9432c1b6}}
+\index{xb::xbFile@{xb::xbFile}!GetShareMode@{GetShareMode}}
+\index{GetShareMode@{GetShareMode}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{GetShareMode()}{GetShareMode()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+Share\+Mode (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+
+
+Get the share mode of the file.
+
+\begin{DoxyReturn}{Returns}
+XB\+\_\+\+SINGLE\+\_\+\+USER -\/ (file buffering on\texorpdfstring{$>$}{>}~\newline
+ XB\+\_\+\+MULTI\+\_\+\+USER -\/ (file buffering off)~\newline
+
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_abfaeef85935331073d213465bb362a61}\label{classxb_1_1xbSsv_abfaeef85935331073d213465bb362a61}}
+\index{xb::xbFile@{xb::xbFile}!GetTempDirectory@{GetTempDirectory}}
+\index{GetTempDirectory@{GetTempDirectory}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{GetTempDirectory()}{GetTempDirectory()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Temp\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the current temp directory.
+
+\begin{DoxyReturn}{Returns}
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing the current data directory where the database files are stored.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a7af337808919680b90710ad5e8a99232}\label{classxb_1_1xbFile_a7af337808919680b90710ad5e8a99232}}
+\index{xb::xbFile@{xb::xbFile}!GetXbaseFileTypeByte@{GetXbaseFileTypeByte}}
+\index{GetXbaseFileTypeByte@{GetXbaseFileTypeByte}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{GetXbaseFileTypeByte()}{GetXbaseFileTypeByte()}\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+Xbase\+File\+Type\+Byte (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name, }\item[{unsigned char \&}]{c\+File\+Type\+Byte }\end{DoxyParamCaption})}
+
+
+
+Get the file type byte and version of the dbf file.
+
+Pull the first bye off the DBF file for further inspection. First byte has various bits set to determine what the file format is.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+File\+Name} & -\/ Name of file to examine \\
+\hline
+{\em c\+File\+Type\+Byte} & -\/ Retruned first byte of dbf file \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a78aebdd21d3de46a450d5f835e3027f6}\label{classxb_1_1xbFile_a78aebdd21d3de46a450d5f835e3027f6}}
+\index{xb::xbFile@{xb::xbFile}!GetXbaseFileTypeByte@{GetXbaseFileTypeByte}}
+\index{GetXbaseFileTypeByte@{GetXbaseFileTypeByte}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{GetXbaseFileTypeByte()}{GetXbaseFileTypeByte()}\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+Xbase\+File\+Type\+Byte (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name, }\item[{unsigned char \&}]{c\+File\+Type\+Byte, }\item[{xb\+Int16 \&}]{i\+Version }\end{DoxyParamCaption})}
+
+
+
+Get the file type byte and version of the dbf file.
+
+Pull the first bye off the DBF file for further inspection. First byte has various bits set to determine what the file format is.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+File\+Name} & -\/ Name of file to examine \\
+\hline
+{\em c\+File\+Type\+Byte} & -\/ Returned first byte of dbf file \\
+\hline
+{\em i\+Version} & -\/ Returned file version \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_aaf2e697751a0beff41432a66bb83fb5e}\label{classxb_1_1xbFile_aaf2e697751a0beff41432a66bb83fb5e}}
+\index{xb::xbFile@{xb::xbFile}!GetXbaseFileTypeByte@{GetXbaseFileTypeByte}}
+\index{GetXbaseFileTypeByte@{GetXbaseFileTypeByte}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{GetXbaseFileTypeByte()}{GetXbaseFileTypeByte()}\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+Xbase\+File\+Type\+Byte (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name, }\item[{xb\+Int16 \&}]{i\+Version }\end{DoxyParamCaption})}
+
+
+
+Get the file type byte and version of the dbf file.
+
+Pull the first bye off the DBF file for further inspection. First byte has various bits set to determine what the file format is.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+File\+Name} & -\/ Name of file to examine \\
+\hline
+{\em i\+Version} & -\/ Returned file version \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a361e3cc318bbf1c4d10f069e0800a24e}\label{classxb_1_1xbFile_a361e3cc318bbf1c4d10f069e0800a24e}}
+\index{xb::xbFile@{xb::xbFile}!NameSuffixMissing@{NameSuffixMissing}}
+\index{NameSuffixMissing@{NameSuffixMissing}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{NameSuffixMissing()}{NameSuffixMissing()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Name\+Suffix\+Missing (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name, }\item[{xb\+Int16}]{i\+Option }\end{DoxyParamCaption}) const}
+
+
+
+Determines status of file extension.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+File\+Name} & -\/ Name of file to examine \\
+\hline
+{\em i\+Option} & -\/ Inspection type~\newline
+ 1 check for DBF~\newline
+ 2 check for NDX~\newline
+ 3 check for MDX~\newline
+ 4 check for NTX~\newline
+\\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+0 if suffix found~\newline
+ 1 if suffix not found, lower case~\newline
+ 2 is suffix not found, upper case~\newline
+
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_aa1bb80340abc7a5c22f87f878e9dc825}\label{classxb_1_1xbFile_aa1bb80340abc7a5c22f87f878e9dc825}}
+\index{xb::xbFile@{xb::xbFile}!ReadBlock@{ReadBlock}}
+\index{ReadBlock@{ReadBlock}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{ReadBlock()}{ReadBlock()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Read\+Block (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{ul\+Block\+No, }\item[{size\+\_\+t}]{l\+Read\+Size, }\item[{void $\ast$}]{buf }\end{DoxyParamCaption})}
+
+
+
+Read a block of data from file.
+
+
+\begin{DoxyParams}{Parameters}
+{\em ul\+Block\+No} & -\/ block number to read \\
+\hline
+{\em l\+Read\+Size} & -\/ size of data to read at block location, set to 0 to read blocksize \\
+\hline
+{\em $\ast$buf} & -\/ pointer to buffer to write output data, assumed to be previosuly allocated and large enough to contain data \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_aef696b1c4c0ef5338e818599f695d485}\label{classxb_1_1xbFile_aef696b1c4c0ef5338e818599f695d485}}
+\index{xb::xbFile@{xb::xbFile}!ReadBlock@{ReadBlock}}
+\index{ReadBlock@{ReadBlock}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{ReadBlock()}{ReadBlock()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Read\+Block (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{ul\+Block\+No, }\item[{xb\+UInt32}]{ul\+Block\+Size, }\item[{size\+\_\+t}]{l\+Read\+Size, }\item[{void $\ast$}]{buf }\end{DoxyParamCaption})}
+
+
+
+Read a block of data from file.
+
+
+\begin{DoxyParams}{Parameters}
+{\em ul\+Block\+No} & -\/ block number to read \\
+\hline
+{\em ul\+Block\+Size} & -\/ block size \\
+\hline
+{\em l\+Read\+Size} & -\/ size of data to read at block location, set to 0 to read blocksize \\
+\hline
+{\em buf} & -\/ pointer to buffer to write output data, assumed to be previosuly allocated and large enough to contain data \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a991c5676a6f38fa752435390989f413e}\label{classxb_1_1xbFile_a991c5676a6f38fa752435390989f413e}}
+\index{xb::xbFile@{xb::xbFile}!SetBlockSize@{SetBlockSize}}
+\index{SetBlockSize@{SetBlockSize}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{SetBlockSize()}{SetBlockSize()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Set\+Block\+Size (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{ul\+Block\+Size }\end{DoxyParamCaption})}
+
+
+
+Set the block size.
+
+
+\begin{DoxyParams}{Parameters}
+{\em ul\+Block\+Size} & -\/ unsigned long block size, divisible by 512 \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}\label{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}}
+\index{xb::xbFile@{xb::xbFile}!SetDataDirectory@{SetDataDirectory}}
+\index{SetDataDirectory@{SetDataDirectory}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{SetDataDirectory()}{SetDataDirectory()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Data\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Data\+Directory }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Set the data directory.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Data\+Directory} & Set the data directory. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}\label{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}}
+\index{xb::xbFile@{xb::xbFile}!SetDefaultAutoCommit@{SetDefaultAutoCommit}}
+\index{SetDefaultAutoCommit@{SetDefaultAutoCommit}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{SetDefaultAutoCommit()}{SetDefaultAutoCommit()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Default\+Auto\+Commit (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}}}]{b\+Default\+Auto\+Commit }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Set the default auto commit.
+
+Disabling auto commit requires the application execute explicit updates using dbf-\/\texorpdfstring{$>$}{>}Put() and dbf-\/\texorpdfstring{$>$}{>}Append\+Record(). With auto commit on, the library posts updates automatically when moving off the current record or closing a file.
+
+
+\begin{DoxyParams}{Parameters}
+{\em b\+Default\+Auto\+Commit} & xb\+True -\/ Enable default auto commit.~\newline
+ xb\+False -\/ Disable default auto commit.~\newline
+ \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}\label{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}}
+\index{xb::xbFile@{xb::xbFile}!SetDefaultDateFormat@{SetDefaultDateFormat}}
+\index{SetDefaultDateFormat@{SetDefaultDateFormat}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{SetDefaultDateFormat()}{SetDefaultDateFormat()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Default\+Date\+Format (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Default\+Date\+Format }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Set the default date format.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Default\+Date\+Format} & Set the default date format. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbFile_ae78a85255488bc78964c16946dbaead3}\label{classxb_1_1xbFile_ae78a85255488bc78964c16946dbaead3}}
+\index{xb::xbFile@{xb::xbFile}!SetDirectory@{SetDirectory}}
+\index{SetDirectory@{SetDirectory}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{SetDirectory()}{SetDirectory()}}
+{\footnotesize\ttfamily void xb\+::xb\+File\+::\+Set\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Directory }\end{DoxyParamCaption})}
+
+
+
+Set the directory.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Directory} & -\/ Valid directory name \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a904ec348fd029d4a76e72b8fde636108}\label{classxb_1_1xbSsv_a904ec348fd029d4a76e72b8fde636108}}
+\index{xb::xbFile@{xb::xbFile}!SetEndianType@{SetEndianType}}
+\index{SetEndianType@{SetEndianType}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{SetEndianType()}{SetEndianType()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Endian\+Type (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [protected]}, {\ttfamily [inherited]}}
+
+
+
+Set the endian type.
+
+This routine determines the Endian-\/ness at run time instead of compile time as some processers (ie; Sparc,ARM) can be switched either way. This routine is called automatically by the library at startup and does not need to be called in an application program. \mbox{\Hypertarget{classxb_1_1xbFile_a5419eb27e56822f828b2b88a9502a636}\label{classxb_1_1xbFile_a5419eb27e56822f828b2b88a9502a636}}
+\index{xb::xbFile@{xb::xbFile}!SetFileName@{SetFileName}}
+\index{SetFileName@{SetFileName}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{SetFileName()}{SetFileName()}}
+{\footnotesize\ttfamily void xb\+::xb\+File\+::\+Set\+File\+Name (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name }\end{DoxyParamCaption})}
+
+
+
+Set the filename.
+
+This routine builds out two internal variables from the input file name~\newline
+ s\+File\+Name -\/ the file name part~\newline
+ s\+Fq\+File\+Name -\/ the fully qualified file name~\newline
+
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+File\+Name} & -\/ Input file name \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbFile_aee832fa11db2077a532f49e1329bd05a}\label{classxb_1_1xbFile_aee832fa11db2077a532f49e1329bd05a}}
+\index{xb::xbFile@{xb::xbFile}!SetFqFileName@{SetFqFileName}}
+\index{SetFqFileName@{SetFqFileName}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{SetFqFileName()}{SetFqFileName()}}
+{\footnotesize\ttfamily void xb\+::xb\+File\+::\+Set\+Fq\+File\+Name (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Fq\+File\+Name }\end{DoxyParamCaption})}
+
+
+
+Set the fully qualifed filename.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Fq\+File\+Name} & -\/ Fully qualifed input file name \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbFile_a060acbfaa8d528f86cb59301814b414a}\label{classxb_1_1xbFile_a060acbfaa8d528f86cb59301814b414a}}
+\index{xb::xbFile@{xb::xbFile}!SetHomeFolders@{SetHomeFolders}}
+\index{SetHomeFolders@{SetHomeFolders}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{SetHomeFolders()}{SetHomeFolders()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Set\+Home\+Folders (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+
+
+Set Home Folders.
+
+Create xbase64 log, data and temp folders in the home directory for current usre.
+
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}\label{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}}
+\index{xb::xbFile@{xb::xbFile}!SetLogDirectory@{SetLogDirectory}}
+\index{SetLogDirectory@{SetLogDirectory}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{SetLogDirectory()}{SetLogDirectory()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Log\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Log\+Directory }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_a7f05738e7dfd759e89990242ef503544}\label{classxb_1_1xbSsv_a7f05738e7dfd759e89990242ef503544}}
+\index{xb::xbFile@{xb::xbFile}!SetLogFileName@{SetLogFileName}}
+\index{SetLogFileName@{SetLogFileName}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{SetLogFileName()}{SetLogFileName()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Log\+File\+Name (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Log\+File\+Name }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}\label{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}}
+\index{xb::xbFile@{xb::xbFile}!SetMultiUser@{SetMultiUser}}
+\index{SetMultiUser@{SetMultiUser}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{SetMultiUser()}{SetMultiUser()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Multi\+User (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}}}]{b\+Multi\+User }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the multi user setting.
+
+
+\begin{DoxyParams}{Parameters}
+{\em b\+Multi\+User} & xb\+True -\/ Turn on Multi user mode.~\newline
+ xb\+False -\/ Turn off Multi user mode.~\newline
+ \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a17c229a20ef9ab4034df8f9cd657adb2}\label{classxb_1_1xbSsv_a17c229a20ef9ab4034df8f9cd657adb2}}
+\index{xb::xbFile@{xb::xbFile}!SetTempDirectory@{SetTempDirectory}}
+\index{SetTempDirectory@{SetTempDirectory}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{SetTempDirectory()}{SetTempDirectory()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Temp\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Temp\+Directory }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Set the temp directory.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Temp\+Directory} & Set the data direcroty. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbFile_a5d871dcfecc2b4338f7a13722aab766c}\label{classxb_1_1xbFile_a5d871dcfecc2b4338f7a13722aab766c}}
+\index{xb::xbFile@{xb::xbFile}!WriteBlock@{WriteBlock}}
+\index{WriteBlock@{WriteBlock}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{WriteBlock()}{WriteBlock()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Write\+Block (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{ul\+Block\+No, }\item[{size\+\_\+t}]{l\+Write\+Size, }\item[{void $\ast$}]{buf }\end{DoxyParamCaption})}
+
+
+
+Write a block of data to file.
+
+
+\begin{DoxyParams}{Parameters}
+{\em ul\+Block\+No} & -\/ block number to write \\
+\hline
+{\em l\+Write\+Size} & -\/ size of data to write, set to 0 to write blocksize \\
+\hline
+{\em $\ast$buf} & -\/ pointer to buffer of data to be written \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a18830b5755d74818f60d9c7ce38ddf2d}\label{classxb_1_1xbFile_a18830b5755d74818f60d9c7ce38ddf2d}}
+\index{xb::xbFile@{xb::xbFile}!xbFclose@{xbFclose}}
+\index{xbFclose@{xbFclose}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{xbFclose()}{xbFclose()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fclose (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+
+
+Xbase wrapper for standard libary fclose.
+
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_af5b6356832d2a67212070a1aa605f170}\label{classxb_1_1xbFile_af5b6356832d2a67212070a1aa605f170}}
+\index{xb::xbFile@{xb::xbFile}!xbFeof@{xbFeof}}
+\index{xbFeof@{xbFeof}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{xbFeof()}{xbFeof()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Feof (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+
+
+Xbase wrapper for standard libary feof.
+
+\begin{DoxyReturn}{Returns}
+non zero if end-\/of-\/file is set for the stream.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_ad205184d43409f04216540ae22f15009}\label{classxb_1_1xbFile_ad205184d43409f04216540ae22f15009}}
+\index{xb::xbFile@{xb::xbFile}!xbFflush@{xbFflush}}
+\index{xbFflush@{xbFflush}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{xbFflush()}{xbFflush()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fflush (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+
+
+Xbase wrapper for standard libary fflush.
+
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a5ee229bda4d7d6695e122200e581e7a6}\label{classxb_1_1xbFile_a5ee229bda4d7d6695e122200e581e7a6}}
+\index{xb::xbFile@{xb::xbFile}!xbFgetc@{xbFgetc}}
+\index{xbFgetc@{xbFgetc}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{xbFgetc()}{xbFgetc()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fgetc (\begin{DoxyParamCaption}\item[{char \&}]{c }\end{DoxyParamCaption})}
+
+
+
+Xbase wrapper for standard libary fgetc.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c} & -\/ output character returned by fgetc \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_afb1c584d2895ffb7834df80aea7eb1e4}\label{classxb_1_1xbFile_afb1c584d2895ffb7834df80aea7eb1e4}}
+\index{xb::xbFile@{xb::xbFile}!xbFgetc@{xbFgetc}}
+\index{xbFgetc@{xbFgetc}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{xbFgetc()}{xbFgetc()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fgetc (\begin{DoxyParamCaption}\item[{xb\+Int32 \&}]{c }\end{DoxyParamCaption})}
+
+
+
+Xbase wrapper for standard libary fgetc.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c} & -\/ output integer returned by fgetc \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_ad245955ace26e5dde85fd4373b30d026}\label{classxb_1_1xbFile_ad245955ace26e5dde85fd4373b30d026}}
+\index{xb::xbFile@{xb::xbFile}!xbFgets@{xbFgets}}
+\index{xbFgets@{xbFgets}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{xbFgets()}{xbFgets()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fgets (\begin{DoxyParamCaption}\item[{size\+\_\+t}]{l\+Size, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s }\end{DoxyParamCaption})}
+
+
+
+Xbase wrapper for standard libary fgets.
+
+
+\begin{DoxyParams}{Parameters}
+{\em l\+Size} & -\/ reads in at most, one character less than l\+Size \\
+\hline
+{\em s} & -\/ an \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing data returned by fseek \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_ab0fa19686ca8953ff4b556fb5b249135}\label{classxb_1_1xbFile_ab0fa19686ca8953ff4b556fb5b249135}}
+\index{xb::xbFile@{xb::xbFile}!xbFopen@{xbFopen}}
+\index{xbFopen@{xbFopen}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{xbFopen()}{xbFopen()}\hspace{0.1cm}{\footnotesize\ttfamily [1/4]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fopen (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Open\+Mode, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name, }\item[{xb\+Int16}]{i\+Share\+Mode }\end{DoxyParamCaption})}
+
+
+
+Xbase wrapper for standard libary fopen.
+
+This routine supports all the standard C library open modes. The Xbase routines only use \char`\"{}r\char`\"{} and \char`\"{}r+b\char`\"{}.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Open\+Mode} & {\begin{tabularx}{\linewidth}{|*{2}{>{\raggedright\arraybackslash}X|}}\hline
+\cellcolor{\tableheadbgcolor}\textbf{ Open\+Mode}&\cellcolor{\tableheadbgcolor}\textbf{ Description }\\\cline{1-2}
+r&Reading \\\cline{1-2}
+r+&Reading and Writing \\\cline{1-2}
+w&Open for writing. Truncate to zero bytes if it exists \\\cline{1-2}
+w+&Open for reading and writing, truncate to zero bytes if it exists \\\cline{1-2}
+a&Open for append \\\cline{1-2}
+a+&Open for reading and writing (at end). \\\cline{1-2}
+\end{tabularx}}
+The mode can also include the letter \char`\"{}b\char`\"{} for binary ie; \char`\"{}r+b\char`\"{}. The \char`\"{}b\char`\"{} is ignored on POSIX compliant systems, but is included for cross platform compatibility. \\
+\hline
+{\em s\+File\+Name} & File name to open \\
+\hline
+{\em i\+Share\+Mode} & XB\+\_\+\+SINGLE\+\_\+\+USER~\newline
+ XB\+\_\+\+MULTI\+\_\+\+USER~\newline
+ \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a0548cedf0f26b7d8ac221f75b0cd048c}\label{classxb_1_1xbFile_a0548cedf0f26b7d8ac221f75b0cd048c}}
+\index{xb::xbFile@{xb::xbFile}!xbFopen@{xbFopen}}
+\index{xbFopen@{xbFopen}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{xbFopen()}{xbFopen()}\hspace{0.1cm}{\footnotesize\ttfamily [2/4]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fopen (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Open\+Mode, }\item[{xb\+Int16}]{i\+Share\+Mode }\end{DoxyParamCaption})}
+
+
+
+Xbase wrapper for standard libary fopen.
+
+This routine supports all the standard C library open modes. The Xbase routines only use \char`\"{}r\char`\"{} and \char`\"{}r+\char`\"{}.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Open\+Mode} & {\begin{tabularx}{\linewidth}{|*{2}{>{\raggedright\arraybackslash}X|}}\hline
+\cellcolor{\tableheadbgcolor}\textbf{ Open\+Mode}&\cellcolor{\tableheadbgcolor}\textbf{ Description }\\\cline{1-2}
+r&Reading \\\cline{1-2}
+r+&Reading and Writing \\\cline{1-2}
+w&Open for writing. Truncate to zero bytes if it exists \\\cline{1-2}
+w+&Open for reading and writing, truncate to zero bytes if it exists \\\cline{1-2}
+a&Open for append \\\cline{1-2}
+a+&Open for reading and writing (at end). \\\cline{1-2}
+\end{tabularx}}
+The mode can also include the letter \char`\"{}b\char`\"{} for binary ie; \char`\"{}r+b\char`\"{}. The \char`\"{}b\char`\"{} is ignored on POSIX compliant systems, but is included for cross platform compatibility. \\
+\hline
+{\em i\+Share\+Mode} & XB\+\_\+\+SINGLE\+\_\+\+USER~\newline
+ XB\+\_\+\+MULTI\+\_\+\+USER~\newline
+ \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a7cdfef5ede9ac98d44a28a6b7a70972c}\label{classxb_1_1xbFile_a7cdfef5ede9ac98d44a28a6b7a70972c}}
+\index{xb::xbFile@{xb::xbFile}!xbFopen@{xbFopen}}
+\index{xbFopen@{xbFopen}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{xbFopen()}{xbFopen()}\hspace{0.1cm}{\footnotesize\ttfamily [3/4]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fopen (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Open\+Mode }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{classxb_1_1xbFile_aabd113333b49c36cad23244b392baab4}\label{classxb_1_1xbFile_aabd113333b49c36cad23244b392baab4}}
+\index{xb::xbFile@{xb::xbFile}!xbFopen@{xbFopen}}
+\index{xbFopen@{xbFopen}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{xbFopen()}{xbFopen()}\hspace{0.1cm}{\footnotesize\ttfamily [4/4]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fopen (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Open\+Mode, }\item[{xb\+Int16}]{i\+Share\+Mode }\end{DoxyParamCaption})}
+
+
+
+Xbase wrapper for standard libary fopen.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Open\+Mode} & XB\+\_\+\+READ~\newline
+ XB\+\_\+\+READ\+\_\+\+WRITE~\newline
+ \\
+\hline
+{\em i\+Share\+Mode} & XB\+\_\+\+SINGLE\+\_\+\+USER~\newline
+ XB\+\_\+\+MULTI\+\_\+\+USER~\newline
+ \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_af2e940c78956e5cb6824f9a1bc404896}\label{classxb_1_1xbFile_af2e940c78956e5cb6824f9a1bc404896}}
+\index{xb::xbFile@{xb::xbFile}!xbFputc@{xbFputc}}
+\index{xbFputc@{xbFputc}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{xbFputc()}{xbFputc()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fputc (\begin{DoxyParamCaption}\item[{xb\+Int32}]{c }\end{DoxyParamCaption})}
+
+
+
+Xbase wrapper for standard libary fputc.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c} & Character to write \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a863f74cf17df8186d88586b4d2a6441a}\label{classxb_1_1xbFile_a863f74cf17df8186d88586b4d2a6441a}}
+\index{xb::xbFile@{xb::xbFile}!xbFputc@{xbFputc}}
+\index{xbFputc@{xbFputc}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{xbFputc()}{xbFputc()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fputc (\begin{DoxyParamCaption}\item[{xb\+Int32}]{c, }\item[{xb\+Int32}]{i\+No\+Of\+Times }\end{DoxyParamCaption})}
+
+
+
+Xbase wrapper for standard libary fputc.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c} & Character to write \\
+\hline
+{\em i\+No\+Of\+Times} & Number of times to write the character \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a698f3b40216778562e639e6ca1a47573}\label{classxb_1_1xbFile_a698f3b40216778562e639e6ca1a47573}}
+\index{xb::xbFile@{xb::xbFile}!xbFputs@{xbFputs}}
+\index{xbFputs@{xbFputs}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{xbFputs()}{xbFputs()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fputs (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s }\end{DoxyParamCaption})}
+
+
+
+Xbase wrapper for standard libary fputs.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s} & \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} to write to file \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_ab4f6afaa1f77539f27a4f05c26e54e2f}\label{classxb_1_1xbFile_ab4f6afaa1f77539f27a4f05c26e54e2f}}
+\index{xb::xbFile@{xb::xbFile}!xbFread@{xbFread}}
+\index{xbFread@{xbFread}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{xbFread()}{xbFread()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fread (\begin{DoxyParamCaption}\item[{void $\ast$}]{p, }\item[{size\+\_\+t}]{size, }\item[{size\+\_\+t}]{nmemb }\end{DoxyParamCaption})}
+
+
+
+Xbase wrapper for standard libary fread.
+
+
+\begin{DoxyParams}{Parameters}
+{\em p} & Pointer to data to write \\
+\hline
+{\em size} & size of write \\
+\hline
+{\em nmemb} & Number of times to read it \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a5337ab8918df240910c0d19b4f298e3d}\label{classxb_1_1xbFile_a5337ab8918df240910c0d19b4f298e3d}}
+\index{xb::xbFile@{xb::xbFile}!xbFseek@{xbFseek}}
+\index{xbFseek@{xbFseek}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{xbFseek()}{xbFseek()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fseek (\begin{DoxyParamCaption}\item[{xb\+Int64}]{l\+Offset, }\item[{xb\+Int32}]{i\+Whence }\end{DoxyParamCaption})}
+
+
+
+Xbase wrapper for standard libary fseek.
+
+
+\begin{DoxyParams}{Parameters}
+{\em l\+Offset} & Position in file to seek to \\
+\hline
+{\em i\+Whence} & SEEK\+\_\+\+SET -\/ from beginning of file~\newline
+ SEEK\+\_\+\+CUR -\/ from current position~\newline
+ SEEK\+\_\+\+END -\/ from end of file~\newline
+ \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a0e1c06aedfa7fbcb92e117f891edd13b}\label{classxb_1_1xbFile_a0e1c06aedfa7fbcb92e117f891edd13b}}
+\index{xb::xbFile@{xb::xbFile}!xbFtell@{xbFtell}}
+\index{xbFtell@{xbFtell}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{xbFtell()}{xbFtell()}}
+{\footnotesize\ttfamily size\+\_\+t xb\+::xb\+File\+::xb\+Ftell (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+
+
+Xbase wrapper for standard libary ftell.
+
+Returns the current file position. \begin{DoxyReturn}{Returns}
+Current file position.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a9891b792f585a696f38a5cf959e30918}\label{classxb_1_1xbFile_a9891b792f585a696f38a5cf959e30918}}
+\index{xb::xbFile@{xb::xbFile}!xbFTurnOffFileBuffering@{xbFTurnOffFileBuffering}}
+\index{xbFTurnOffFileBuffering@{xbFTurnOffFileBuffering}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{xbFTurnOffFileBuffering()}{xbFTurnOffFileBuffering()}}
+{\footnotesize\ttfamily void xb\+::xb\+File\+::xb\+FTurn\+Off\+File\+Buffering (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+
+
+Turn off file buffering.
+
+Turns off file buffering. File buffering can\textquotesingle{}t be used while in multi user mode. \mbox{\Hypertarget{classxb_1_1xbFile_a6aadd871d1782944703fed773d44b85f}\label{classxb_1_1xbFile_a6aadd871d1782944703fed773d44b85f}}
+\index{xb::xbFile@{xb::xbFile}!xbFwrite@{xbFwrite}}
+\index{xbFwrite@{xbFwrite}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{xbFwrite()}{xbFwrite()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fwrite (\begin{DoxyParamCaption}\item[{const void $\ast$}]{p, }\item[{size\+\_\+t}]{size, }\item[{size\+\_\+t}]{nmemb }\end{DoxyParamCaption})}
+
+
+
+Xbase wrapper for standard libary fwrite.
+
+
+\begin{DoxyParams}{Parameters}
+{\em p} & Pointer to data buffer to write \\
+\hline
+{\em size} & Size of data to write \\
+\hline
+{\em nmemb} & Number of times to write data buffer \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a08463f506f425c2385acbe1a561506e9}\label{classxb_1_1xbFile_a08463f506f425c2385acbe1a561506e9}}
+\index{xb::xbFile@{xb::xbFile}!xbReadUntil@{xbReadUntil}}
+\index{xbReadUntil@{xbReadUntil}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{xbReadUntil()}{xbReadUntil()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Read\+Until (\begin{DoxyParamCaption}\item[{const char}]{c\+Delim, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Out }\end{DoxyParamCaption})}
+
+
+
+Read file until a particular character is encountered on input stream.
+
+This routine will read until c\+Delim is encountered or eof, which ever occurs first.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c\+Delim} & Delimiter to stop writing at. \\
+\hline
+{\em s\+Out} & Output \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing data read \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_ab3c668a8570433188382d31d7c60bd48}\label{classxb_1_1xbFile_ab3c668a8570433188382d31d7c60bd48}}
+\index{xb::xbFile@{xb::xbFile}!xbRemove@{xbRemove}}
+\index{xbRemove@{xbRemove}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{xbRemove()}{xbRemove()}\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Remove (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+
+
+Delete file.
+
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a58f6a6751fdf7e9549c273bb75d93eb5}\label{classxb_1_1xbFile_a58f6a6751fdf7e9549c273bb75d93eb5}}
+\index{xb::xbFile@{xb::xbFile}!xbRemove@{xbRemove}}
+\index{xbRemove@{xbRemove}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{xbRemove()}{xbRemove()}\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Remove (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name\+In }\end{DoxyParamCaption})}
+
+
+
+Delete file.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+File\+Name\+In} & Name of file to delete \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a6d919366c2ec95e529906bf8842cbf07}\label{classxb_1_1xbFile_a6d919366c2ec95e529906bf8842cbf07}}
+\index{xb::xbFile@{xb::xbFile}!xbRemove@{xbRemove}}
+\index{xbRemove@{xbRemove}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{xbRemove()}{xbRemove()}\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Remove (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name\+In, }\item[{xb\+Int16}]{i\+Option }\end{DoxyParamCaption})}
+
+
+
+Delete file.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+File\+Name\+In} & Name of file to delete \\
+\hline
+{\em i\+Option} & If Set to 1, assume this is a delete request for a dbf file, and should rename the dbt file also \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_afc8ce113aa72611a278233f9bb170012}\label{classxb_1_1xbFile_afc8ce113aa72611a278233f9bb170012}}
+\index{xb::xbFile@{xb::xbFile}!xbRename@{xbRename}}
+\index{xbRename@{xbRename}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{xbRename()}{xbRename()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Rename (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Old\+Name, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+New\+Name }\end{DoxyParamCaption})}
+
+
+
+Rename file.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Old\+Name} & Original file name \\
+\hline
+{\em s\+New\+Name} & New file name \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbFile_a7996b6e084665c37c3892faea64b3505}\label{classxb_1_1xbFile_a7996b6e084665c37c3892faea64b3505}}
+\index{xb::xbFile@{xb::xbFile}!xbRewind@{xbRewind}}
+\index{xbRewind@{xbRewind}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{xbRewind()}{xbRewind()}}
+{\footnotesize\ttfamily void xb\+::xb\+File\+::xb\+Rewind (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+
+
+Xbase wrapper for rewind.
+
+Set file pointer at beginning of file. \mbox{\Hypertarget{classxb_1_1xbFile_a518bfcbfa3699d883cf89affee383296}\label{classxb_1_1xbFile_a518bfcbfa3699d883cf89affee383296}}
+\index{xb::xbFile@{xb::xbFile}!xbTruncate@{xbTruncate}}
+\index{xbTruncate@{xbTruncate}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{xbTruncate()}{xbTruncate()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Truncate (\begin{DoxyParamCaption}\item[{xb\+Int64}]{ll\+Size }\end{DoxyParamCaption})}
+
+
+
+Xbase wrapper for ftruncate.
+
+Set file size to ll\+Size
+\begin{DoxyParams}{Parameters}
+{\em ll\+Size} & New file size. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+
+
+\doxysubsection{Field Documentation}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a6219f1b5e24ea12fe158cd5aea56988e}\label{classxb_1_1xbSsv_a6219f1b5e24ea12fe158cd5aea56988e}}
+\index{xb::xbFile@{xb::xbFile}!ErrorCodeText@{ErrorCodeText}}
+\index{ErrorCodeText@{ErrorCodeText}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{ErrorCodeText}{ErrorCodeText}}
+{\footnotesize\ttfamily const char$\ast$ xb\+::xb\+Ssv\+::\+Error\+Code\+Text\mbox{[}$\,$\mbox{]}\hspace{0.3cm}{\ttfamily [static]}, {\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}\label{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}}
+\index{xb::xbFile@{xb::xbFile}!iEndianType@{iEndianType}}
+\index{iEndianType@{iEndianType}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{iEndianType}{iEndianType}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Ssv\+::i\+Endian\+Type = 0\hspace{0.3cm}{\ttfamily [static]}, {\ttfamily [protected]}, {\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}\label{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}}
+\index{xb::xbFile@{xb::xbFile}!sNullString@{sNullString}}
+\index{sNullString@{sNullString}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{sNullString}{sNullString}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} xb\+::xb\+Ssv\+::s\+Null\+String = \char`\"{}\char`\"{}\hspace{0.3cm}{\ttfamily [static]}, {\ttfamily [protected]}, {\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbFile_ae39a67ea391b46055d4ca299cb222004}\label{classxb_1_1xbFile_ae39a67ea391b46055d4ca299cb222004}}
+\index{xb::xbFile@{xb::xbFile}!xbase@{xbase}}
+\index{xbase@{xbase}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{xbase}{xbase}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}}$\ast$ xb\+::xb\+File\+::xbase\hspace{0.3cm}{\ttfamily [protected]}}
+
+
+
+The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
+\item
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbfile_8h}{xbfile.\+h}}\item
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbfile_8cpp}{xbfile.\+cpp}}\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/classxb_1_1xbSsv.eps b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbSsv.eps
index 2cceb9d..2cceb9d 100644
--- a/docs/doxygen/latex/classxb_1_1xbSsv.eps
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbSsv.eps
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbSsv.pdf b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbSsv.pdf
new file mode 100644
index 0000000..526c8c1
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbSsv.pdf
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbSsv.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbSsv.tex
new file mode 100644
index 0000000..b98b436
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbSsv.tex
@@ -0,0 +1,427 @@
+\hypertarget{classxb_1_1xbSsv}{}\doxysection{xb\+::xb\+Ssv Class Reference}
+\label{classxb_1_1xbSsv}\index{xb::xbSsv@{xb::xbSsv}}
+
+
+Class for handling shared system variables.
+
+
+
+
+{\ttfamily \#include $<$xbssv.\+h$>$}
+
+Inheritance diagram for xb\+::xb\+Ssv\+:\begin{figure}[H]
+\begin{center}
+\leavevmode
+\includegraphics[height=3.000000cm]{classxb_1_1xbSsv}
+\end{center}
+\end{figure}
+\doxysubsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\hyperlink{classxb_1_1xbSsv_a58f85692c3167af20b1a7c17c621523b}{xb\+Ssv}} ()
+\begin{DoxyCompactList}\small\item\em Class Constructor. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}{Display\+Error}} (xb\+Int16 Error\+Code) const
+\begin{DoxyCompactList}\small\item\em Display error message on console for a given error number. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a6fbb9c3a550ab0b3378f9586a57791d2}{Get\+Default\+Date\+Format}} () const
+\begin{DoxyCompactList}\small\item\em Get the default date format. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}{Get\+Data\+Directory}} () const
+\begin{DoxyCompactList}\small\item\em Get the current data directory. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_abfaeef85935331073d213465bb362a61}{Get\+Temp\+Directory}} () const
+\begin{DoxyCompactList}\small\item\em Get the current temp directory. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}{Get\+Home\+Dir}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Home\+Dir\+Out)
+\begin{DoxyCompactList}\small\item\em Get home directory. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}{Get\+Endian\+Type}} () const
+\begin{DoxyCompactList}\small\item\em Get the Endian type. \end{DoxyCompactList}\item
+const char $\ast$ \mbox{\hyperlink{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}{Get\+Error\+Message}} (xb\+Int16 Error\+Code) const
+\begin{DoxyCompactList}\small\item\em Get an error message. \end{DoxyCompactList}\item
+char \mbox{\hyperlink{classxb_1_1xbSsv_a63cee13b473ee13970e93b11837b9e35}{Get\+Path\+Separator}} () const
+\begin{DoxyCompactList}\small\item\em Get the OS dependent path separator. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}{Set\+Data\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Data\+Directory)
+\begin{DoxyCompactList}\small\item\em Set the data directory. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}{Set\+Default\+Date\+Format}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Default\+Date\+Format)
+\begin{DoxyCompactList}\small\item\em Set the default date format. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a17c229a20ef9ab4034df8f9cd657adb2}{Set\+Temp\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Temp\+Directory)
+\begin{DoxyCompactList}\small\item\em Set the temp directory. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}{Bit\+Set}} (unsigned char c, xb\+Int16 i\+Bit\+No) const
+\begin{DoxyCompactList}\small\item\em Check a bit in a one byte field and see if it is set. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}{Bit\+Dump}} (unsigned char c) const
+\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}{Bit\+Dump}} (char c) const
+\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}{Get\+Default\+Auto\+Commit}} () const
+\begin{DoxyCompactList}\small\item\em Get the default auto commit setting. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}{Set\+Default\+Auto\+Commit}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Default\+Auto\+Commit)
+\begin{DoxyCompactList}\small\item\em Set the default auto commit. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}{Get\+Log\+Directory}} () const
+\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}{Get\+Log\+File\+Name}} () const
+\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}{Set\+Log\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Log\+Directory)
+\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a7f05738e7dfd759e89990242ef503544}{Set\+Log\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Log\+File\+Name)
+\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}{Get\+Multi\+User}} () const
+\begin{DoxyCompactList}\small\item\em Get the multi user setting. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}{Set\+Multi\+User}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Multi\+User)
+\begin{DoxyCompactList}\small\item\em Get the multi user setting. \end{DoxyCompactList}\end{DoxyCompactItemize}
+\doxysubsection*{Static Public Attributes}
+\begin{DoxyCompactItemize}
+\item
+static const char $\ast$ \mbox{\hyperlink{classxb_1_1xbSsv_a6219f1b5e24ea12fe158cd5aea56988e}{Error\+Code\+Text}} \mbox{[}$\,$\mbox{]}
+\end{DoxyCompactItemize}
+\doxysubsection*{Protected Member Functions}
+\begin{DoxyCompactItemize}
+\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a904ec348fd029d4a76e72b8fde636108}{Set\+Endian\+Type}} ()
+\begin{DoxyCompactList}\small\item\em Set the endian type. \end{DoxyCompactList}\end{DoxyCompactItemize}
+\doxysubsection*{Static Protected Attributes}
+\begin{DoxyCompactItemize}
+\item
+static xb\+Int16 \mbox{\hyperlink{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}{i\+Endian\+Type}} = 0
+\item
+static \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \mbox{\hyperlink{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}{s\+Null\+String}} = \char`\"{}\char`\"{}
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Class for handling shared system variables.
+
+This class defines static variables which are referenced across class instances.
+
+This class is designed to have the variables set when the \mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} class constructor is called (\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} is a derived class). The xb\+Xbase class is designed to be called first in an application programs, and it is only called once. The static values in this class are typically initialized at program startup and don\textquotesingle{}t require additional updates.
+
+\doxysubsection{Constructor \& Destructor Documentation}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a58f85692c3167af20b1a7c17c621523b}\label{classxb_1_1xbSsv_a58f85692c3167af20b1a7c17c621523b}}
+\index{xb::xbSsv@{xb::xbSsv}!xbSsv@{xbSsv}}
+\index{xbSsv@{xbSsv}!xb::xbSsv@{xb::xbSsv}}
+\doxysubsubsection{\texorpdfstring{xbSsv()}{xbSsv()}}
+{\footnotesize\ttfamily xb\+::xb\+Ssv\+::xb\+Ssv (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+
+
+Class Constructor.
+
+
+
+\doxysubsection{Member Function Documentation}
+\mbox{\Hypertarget{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}\label{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}}
+\index{xb::xbSsv@{xb::xbSsv}!BitDump@{BitDump}}
+\index{BitDump@{BitDump}!xb::xbSsv@{xb::xbSsv}}
+\doxysubsubsection{\texorpdfstring{BitDump()}{BitDump()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Bit\+Dump (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption}) const}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}\label{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}}
+\index{xb::xbSsv@{xb::xbSsv}!BitDump@{BitDump}}
+\index{BitDump@{BitDump}!xb::xbSsv@{xb::xbSsv}}
+\doxysubsubsection{\texorpdfstring{BitDump()}{BitDump()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Bit\+Dump (\begin{DoxyParamCaption}\item[{unsigned char}]{c }\end{DoxyParamCaption}) const}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}\label{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}}
+\index{xb::xbSsv@{xb::xbSsv}!BitSet@{BitSet}}
+\index{BitSet@{BitSet}!xb::xbSsv@{xb::xbSsv}}
+\doxysubsubsection{\texorpdfstring{BitSet()}{BitSet()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Ssv\+::\+Bit\+Set (\begin{DoxyParamCaption}\item[{unsigned char}]{c, }\item[{xb\+Int16}]{i\+Bit\+No }\end{DoxyParamCaption}) const}
+
+
+
+Check a bit in a one byte field and see if it is set.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c} & One byte char field to examine. \\
+\hline
+{\em i\+Bit\+No} & which bit to examine. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+xb\+True Bit is set~\newline
+ xb\+False Bit is not set
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}\label{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}}
+\index{xb::xbSsv@{xb::xbSsv}!DisplayError@{DisplayError}}
+\index{DisplayError@{DisplayError}!xb::xbSsv@{xb::xbSsv}}
+\doxysubsubsection{\texorpdfstring{DisplayError()}{DisplayError()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Display\+Error (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Error\+Code }\end{DoxyParamCaption}) const}
+
+
+
+Display error message on console for a given error number.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Error\+Code} & Error number to reference \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}\label{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}}
+\index{xb::xbSsv@{xb::xbSsv}!GetDataDirectory@{GetDataDirectory}}
+\index{GetDataDirectory@{GetDataDirectory}!xb::xbSsv@{xb::xbSsv}}
+\doxysubsubsection{\texorpdfstring{GetDataDirectory()}{GetDataDirectory()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Data\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+
+
+Get the current data directory.
+
+\begin{DoxyReturn}{Returns}
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing the current data directory where the database files are stored.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}\label{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}}
+\index{xb::xbSsv@{xb::xbSsv}!GetDefaultAutoCommit@{GetDefaultAutoCommit}}
+\index{GetDefaultAutoCommit@{GetDefaultAutoCommit}!xb::xbSsv@{xb::xbSsv}}
+\doxysubsubsection{\texorpdfstring{GetDefaultAutoCommit()}{GetDefaultAutoCommit()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Ssv\+::\+Get\+Default\+Auto\+Commit (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+
+
+Get the default auto commit setting.
+
+When auto commit is enabled, the library will automatically post any updates when moving off an updated record or closing files. If auto commit is disabled, the application program will need to explicitly update the tables using using dbf-\/\texorpdfstring{$>$}{>}Put() and dbf-\/\texorpdfstring{$>$}{>}Append\+Record().
+
+\begin{DoxyReturn}{Returns}
+xb\+True if auto commit is turned on~\newline
+ xb\+False is auto commit is turned off
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a6fbb9c3a550ab0b3378f9586a57791d2}\label{classxb_1_1xbSsv_a6fbb9c3a550ab0b3378f9586a57791d2}}
+\index{xb::xbSsv@{xb::xbSsv}!GetDefaultDateFormat@{GetDefaultDateFormat}}
+\index{GetDefaultDateFormat@{GetDefaultDateFormat}!xb::xbSsv@{xb::xbSsv}}
+\doxysubsubsection{\texorpdfstring{GetDefaultDateFormat()}{GetDefaultDateFormat()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Default\+Date\+Format (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+
+
+Get the default date format.
+
+\begin{DoxyReturn}{Returns}
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing the default date format.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}\label{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}}
+\index{xb::xbSsv@{xb::xbSsv}!GetEndianType@{GetEndianType}}
+\index{GetEndianType@{GetEndianType}!xb::xbSsv@{xb::xbSsv}}
+\doxysubsubsection{\texorpdfstring{GetEndianType()}{GetEndianType()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Ssv\+::\+Get\+Endian\+Type (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+
+
+Get the Endian type.
+
+\begin{DoxyReturn}{Returns}
+B -\/ Big endian~\newline
+ L -\/ Little endian~\newline
+
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}\label{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}}
+\index{xb::xbSsv@{xb::xbSsv}!GetErrorMessage@{GetErrorMessage}}
+\index{GetErrorMessage@{GetErrorMessage}!xb::xbSsv@{xb::xbSsv}}
+\doxysubsubsection{\texorpdfstring{GetErrorMessage()}{GetErrorMessage()}}
+{\footnotesize\ttfamily const char $\ast$ xb\+::xb\+Ssv\+::\+Get\+Error\+Message (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Error\+Code }\end{DoxyParamCaption}) const}
+
+
+
+Get an error message.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Error\+Code} & Error\+Code is the error number of description to be returned. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Returns a pointer to a string containing a text description for the error code.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}\label{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}}
+\index{xb::xbSsv@{xb::xbSsv}!GetHomeDir@{GetHomeDir}}
+\index{GetHomeDir@{GetHomeDir}!xb::xbSsv@{xb::xbSsv}}
+\doxysubsubsection{\texorpdfstring{GetHomeDir()}{GetHomeDir()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Get\+Home\+Dir (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Home\+Dir\+Out }\end{DoxyParamCaption})}
+
+
+
+Get home directory.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Home\+Dir\+Out} & -\/ Output home directory for current user. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}\label{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}}
+\index{xb::xbSsv@{xb::xbSsv}!GetLogDirectory@{GetLogDirectory}}
+\index{GetLogDirectory@{GetLogDirectory}!xb::xbSsv@{xb::xbSsv}}
+\doxysubsubsection{\texorpdfstring{GetLogDirectory()}{GetLogDirectory()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Log\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}\label{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}}
+\index{xb::xbSsv@{xb::xbSsv}!GetLogFileName@{GetLogFileName}}
+\index{GetLogFileName@{GetLogFileName}!xb::xbSsv@{xb::xbSsv}}
+\doxysubsubsection{\texorpdfstring{GetLogFileName()}{GetLogFileName()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Log\+File\+Name (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}\label{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}}
+\index{xb::xbSsv@{xb::xbSsv}!GetMultiUser@{GetMultiUser}}
+\index{GetMultiUser@{GetMultiUser}!xb::xbSsv@{xb::xbSsv}}
+\doxysubsubsection{\texorpdfstring{GetMultiUser()}{GetMultiUser()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Ssv\+::\+Get\+Multi\+User (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+
+
+Get the multi user setting.
+
+\begin{DoxyReturn}{Returns}
+xb\+True -\/ Multi user mode turned on.~\newline
+ xb\+False -\/ Multi user mode turned off.~\newline
+
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a63cee13b473ee13970e93b11837b9e35}\label{classxb_1_1xbSsv_a63cee13b473ee13970e93b11837b9e35}}
+\index{xb::xbSsv@{xb::xbSsv}!GetPathSeparator@{GetPathSeparator}}
+\index{GetPathSeparator@{GetPathSeparator}!xb::xbSsv@{xb::xbSsv}}
+\doxysubsubsection{\texorpdfstring{GetPathSeparator()}{GetPathSeparator()}}
+{\footnotesize\ttfamily char xb\+::xb\+Ssv\+::\+Get\+Path\+Separator (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+
+
+Get the OS dependent path separator.
+
+\begin{DoxyReturn}{Returns}
+Returns \textquotesingle{}\textbackslash{}\textquotesingle{} for windows environment, otherwise returns \textquotesingle{}/\textquotesingle{}.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_abfaeef85935331073d213465bb362a61}\label{classxb_1_1xbSsv_abfaeef85935331073d213465bb362a61}}
+\index{xb::xbSsv@{xb::xbSsv}!GetTempDirectory@{GetTempDirectory}}
+\index{GetTempDirectory@{GetTempDirectory}!xb::xbSsv@{xb::xbSsv}}
+\doxysubsubsection{\texorpdfstring{GetTempDirectory()}{GetTempDirectory()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Temp\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+
+
+Get the current temp directory.
+
+\begin{DoxyReturn}{Returns}
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing the current data directory where the database files are stored.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}\label{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}}
+\index{xb::xbSsv@{xb::xbSsv}!SetDataDirectory@{SetDataDirectory}}
+\index{SetDataDirectory@{SetDataDirectory}!xb::xbSsv@{xb::xbSsv}}
+\doxysubsubsection{\texorpdfstring{SetDataDirectory()}{SetDataDirectory()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Data\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Data\+Directory }\end{DoxyParamCaption})}
+
+
+
+Set the data directory.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Data\+Directory} & Set the data directory. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}\label{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}}
+\index{xb::xbSsv@{xb::xbSsv}!SetDefaultAutoCommit@{SetDefaultAutoCommit}}
+\index{SetDefaultAutoCommit@{SetDefaultAutoCommit}!xb::xbSsv@{xb::xbSsv}}
+\doxysubsubsection{\texorpdfstring{SetDefaultAutoCommit()}{SetDefaultAutoCommit()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Default\+Auto\+Commit (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}}}]{b\+Default\+Auto\+Commit }\end{DoxyParamCaption})}
+
+
+
+Set the default auto commit.
+
+Disabling auto commit requires the application execute explicit updates using dbf-\/\texorpdfstring{$>$}{>}Put() and dbf-\/\texorpdfstring{$>$}{>}Append\+Record(). With auto commit on, the library posts updates automatically when moving off the current record or closing a file.
+
+
+\begin{DoxyParams}{Parameters}
+{\em b\+Default\+Auto\+Commit} & xb\+True -\/ Enable default auto commit.~\newline
+ xb\+False -\/ Disable default auto commit.~\newline
+ \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}\label{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}}
+\index{xb::xbSsv@{xb::xbSsv}!SetDefaultDateFormat@{SetDefaultDateFormat}}
+\index{SetDefaultDateFormat@{SetDefaultDateFormat}!xb::xbSsv@{xb::xbSsv}}
+\doxysubsubsection{\texorpdfstring{SetDefaultDateFormat()}{SetDefaultDateFormat()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Default\+Date\+Format (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Default\+Date\+Format }\end{DoxyParamCaption})}
+
+
+
+Set the default date format.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Default\+Date\+Format} & Set the default date format. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a904ec348fd029d4a76e72b8fde636108}\label{classxb_1_1xbSsv_a904ec348fd029d4a76e72b8fde636108}}
+\index{xb::xbSsv@{xb::xbSsv}!SetEndianType@{SetEndianType}}
+\index{SetEndianType@{SetEndianType}!xb::xbSsv@{xb::xbSsv}}
+\doxysubsubsection{\texorpdfstring{SetEndianType()}{SetEndianType()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Endian\+Type (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [protected]}}
+
+
+
+Set the endian type.
+
+This routine determines the Endian-\/ness at run time instead of compile time as some processers (ie; Sparc,ARM) can be switched either way. This routine is called automatically by the library at startup and does not need to be called in an application program. \mbox{\Hypertarget{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}\label{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}}
+\index{xb::xbSsv@{xb::xbSsv}!SetLogDirectory@{SetLogDirectory}}
+\index{SetLogDirectory@{SetLogDirectory}!xb::xbSsv@{xb::xbSsv}}
+\doxysubsubsection{\texorpdfstring{SetLogDirectory()}{SetLogDirectory()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Log\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Log\+Directory }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_a7f05738e7dfd759e89990242ef503544}\label{classxb_1_1xbSsv_a7f05738e7dfd759e89990242ef503544}}
+\index{xb::xbSsv@{xb::xbSsv}!SetLogFileName@{SetLogFileName}}
+\index{SetLogFileName@{SetLogFileName}!xb::xbSsv@{xb::xbSsv}}
+\doxysubsubsection{\texorpdfstring{SetLogFileName()}{SetLogFileName()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Log\+File\+Name (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Log\+File\+Name }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}\label{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}}
+\index{xb::xbSsv@{xb::xbSsv}!SetMultiUser@{SetMultiUser}}
+\index{SetMultiUser@{SetMultiUser}!xb::xbSsv@{xb::xbSsv}}
+\doxysubsubsection{\texorpdfstring{SetMultiUser()}{SetMultiUser()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Multi\+User (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}}}]{b\+Multi\+User }\end{DoxyParamCaption})}
+
+
+
+Get the multi user setting.
+
+
+\begin{DoxyParams}{Parameters}
+{\em b\+Multi\+User} & xb\+True -\/ Turn on Multi user mode.~\newline
+ xb\+False -\/ Turn off Multi user mode.~\newline
+ \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a17c229a20ef9ab4034df8f9cd657adb2}\label{classxb_1_1xbSsv_a17c229a20ef9ab4034df8f9cd657adb2}}
+\index{xb::xbSsv@{xb::xbSsv}!SetTempDirectory@{SetTempDirectory}}
+\index{SetTempDirectory@{SetTempDirectory}!xb::xbSsv@{xb::xbSsv}}
+\doxysubsubsection{\texorpdfstring{SetTempDirectory()}{SetTempDirectory()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Temp\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Temp\+Directory }\end{DoxyParamCaption})}
+
+
+
+Set the temp directory.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Temp\+Directory} & Set the data direcroty. \\
+\hline
+\end{DoxyParams}
+
+
+\doxysubsection{Field Documentation}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a6219f1b5e24ea12fe158cd5aea56988e}\label{classxb_1_1xbSsv_a6219f1b5e24ea12fe158cd5aea56988e}}
+\index{xb::xbSsv@{xb::xbSsv}!ErrorCodeText@{ErrorCodeText}}
+\index{ErrorCodeText@{ErrorCodeText}!xb::xbSsv@{xb::xbSsv}}
+\doxysubsubsection{\texorpdfstring{ErrorCodeText}{ErrorCodeText}}
+{\footnotesize\ttfamily const char$\ast$ xb\+::xb\+Ssv\+::\+Error\+Code\+Text\mbox{[}$\,$\mbox{]}\hspace{0.3cm}{\ttfamily [static]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}\label{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}}
+\index{xb::xbSsv@{xb::xbSsv}!iEndianType@{iEndianType}}
+\index{iEndianType@{iEndianType}!xb::xbSsv@{xb::xbSsv}}
+\doxysubsubsection{\texorpdfstring{iEndianType}{iEndianType}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Ssv\+::i\+Endian\+Type = 0\hspace{0.3cm}{\ttfamily [static]}, {\ttfamily [protected]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}\label{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}}
+\index{xb::xbSsv@{xb::xbSsv}!sNullString@{sNullString}}
+\index{sNullString@{sNullString}!xb::xbSsv@{xb::xbSsv}}
+\doxysubsubsection{\texorpdfstring{sNullString}{sNullString}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} xb\+::xb\+Ssv\+::s\+Null\+String = \char`\"{}\char`\"{}\hspace{0.3cm}{\ttfamily [static]}, {\ttfamily [protected]}}
+
+
+
+The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
+\item
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbssv_8h}{xbssv.\+h}}\item
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbssv_8cpp}{xbssv.\+cpp}}\end{DoxyCompactItemize}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbString.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbString.tex
new file mode 100644
index 0000000..d589549
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbString.tex
@@ -0,0 +1,1776 @@
+\hypertarget{classxb_1_1xbString}{}\doxysection{xb\+::xb\+String Class Reference}
+\label{classxb_1_1xbString}\index{xb::xbString@{xb::xbString}}
+
+
+Class for handling string data.
+
+
+
+
+{\ttfamily \#include $<$xbstring.\+h$>$}
+
+\doxysubsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\hyperlink{classxb_1_1xbString_a63f9313217e0ff3c9789ec59316216a1}{xb\+String}} (xb\+UInt32 size)
+\begin{DoxyCompactList}\small\item\em Constructor. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString_a14bbaa293c8d40dd6c64332f2668a92e}{xb\+String}} (char c)
+\begin{DoxyCompactList}\small\item\em Constructor. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString_a18f3598dcdf2ec5692274fc8ee769ad7}{xb\+String}} (const char $\ast$s, xb\+UInt32 l\+Max\+Len)
+\begin{DoxyCompactList}\small\item\em Constructor. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString_a0d81016b93fc36ebbbafacf35c677f07}{xb\+String}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s)
+\begin{DoxyCompactList}\small\item\em Constructor. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString_a25856311106c5fb15d39017b63f0ddc7}{xb\+String}} (const char $\ast$=\char`\"{}\char`\"{})
+\begin{DoxyCompactList}\small\item\em Constructor. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString_ad865b55e3b08dffd527afee8e7e8e3fe}{xb\+String}} (\mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} d)
+\begin{DoxyCompactList}\small\item\em Constructor. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString_a10a6549efab02bc76ab33b15916b1eb1}{$\sim$xb\+String}} ()
+\begin{DoxyCompactList}\small\item\em Destructor. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a4f69d11cbd43edf71725a606d0ca8f40}{operator=}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s)
+\begin{DoxyCompactList}\small\item\em Set operator =. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a84ae7d16c5d73c5aa2270aa9895a7f7c}{operator=}} (const char $\ast$s)
+\begin{DoxyCompactList}\small\item\em Set operator =. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString_a545df0ae9590f0ea5844a165e38a6388}{operator const char $\ast$}} () const
+\begin{DoxyCompactList}\small\item\em Operator const char $\ast$. \end{DoxyCompactList}\item
+char \& \mbox{\hyperlink{classxb_1_1xbString_abe45e463226ac8e18550ced18c5a9df3}{operator\mbox{[}$\,$\mbox{]}}} (xb\+UInt32 n) const
+\begin{DoxyCompactList}\small\item\em operator \mbox{[}\mbox{]} \end{DoxyCompactList}\item
+char \& \mbox{\hyperlink{classxb_1_1xbString_a4deaa68d9571753349c29baacb5613e8}{operator\mbox{[}$\,$\mbox{]}}} (xb\+Int32 n) const
+\begin{DoxyCompactList}\small\item\em operator \mbox{[}\mbox{]} \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a76a47af239797a266ada6141c150001c}{operator+=}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s)
+\begin{DoxyCompactList}\small\item\em Append operator +=. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_ab319120dbad9107e1e7090139c956100}{operator+=}} (const char $\ast$s)
+\begin{DoxyCompactList}\small\item\em Append operator +=. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_ae12f45b8be84e438e032c0b860f985c6}{operator+=}} (char c)
+\begin{DoxyCompactList}\small\item\em Append operator +=. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_aa7f4db1b4eae9dfad46346db6e17ea15}{operator-\/=}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s)
+\begin{DoxyCompactList}\small\item\em Append operator -\/=. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_aaae97e6eda3d18c9f463993ade985bf4}{operator-\/=}} (const char $\ast$s)
+\begin{DoxyCompactList}\small\item\em Append operator -\/=. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_adcafd019df23bb5724c46e34f3f31194}{operator-\/=}} (char c)
+\begin{DoxyCompactList}\small\item\em Append operator -\/=. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbString_a2df3ed2fc9456214f5fd2fcf77b69bc1}{operator==}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&) const
+\begin{DoxyCompactList}\small\item\em operator == \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbString_a94031269af3c433393d4cf0ff9b4be38}{operator==}} (const char $\ast$) const
+\begin{DoxyCompactList}\small\item\em operator == \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbString_acf89691607050b0505dc6af28d059c38}{operator!=}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&) const
+\begin{DoxyCompactList}\small\item\em operator != \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbString_a822448f2a0ce653473d4c1de5763a3a6}{operator!=}} (const char $\ast$) const
+\begin{DoxyCompactList}\small\item\em operator != \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbString_a71c7aafa0d523c72cbe58c474be2270a}{operator$<$}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&) const
+\begin{DoxyCompactList}\small\item\em operator \texorpdfstring{$<$}{<} \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbString_ae46f6a45da5686b607a4edf2786a2fff}{operator$>$}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&) const
+\begin{DoxyCompactList}\small\item\em operator \texorpdfstring{$>$}{>} \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbString_a461f245e60cddfdf5f78a972a46e5880}{operator$<$=}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&) const
+\begin{DoxyCompactList}\small\item\em operator \texorpdfstring{$<$}{<}= \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbString_a8f16643cb7ba3ee9cf685422c9ea0e67}{operator$>$=}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&) const
+\begin{DoxyCompactList}\small\item\em operator \texorpdfstring{$>$}{>}= \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \mbox{\hyperlink{classxb_1_1xbString_a06abec236b95f6933ba17bf67089f7cf}{operator-\/}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s)
+\begin{DoxyCompactList}\small\item\em Concatonate operator -\/. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \mbox{\hyperlink{classxb_1_1xbString_aab556e8c3cb478dd95643327d72a48bd}{operator+}} (const char $\ast$s)
+\begin{DoxyCompactList}\small\item\em Concatonate operator +. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \mbox{\hyperlink{classxb_1_1xbString_a1f289d577ba90c500bc1be3ec7bb0206}{operator+}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s)
+\begin{DoxyCompactList}\small\item\em Concatonate operator +. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \mbox{\hyperlink{classxb_1_1xbString_af559654baba81c3c0c19823c0b7a69d3}{operator+}} (const char c)
+\begin{DoxyCompactList}\small\item\em Concatonate operator +. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a6c4fdb689d27a9d19a0b5b4236e1ca62}{Add\+Back\+Slash}} (char c)
+\begin{DoxyCompactList}\small\item\em Add a prefixing back slash to specified characters in the string. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a8f202e4798491f2ae9ce51ff58dd5815}{Append}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s)
+\begin{DoxyCompactList}\small\item\em Append data to string. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a1922319303feb6da1f40b5994c5e8240}{Append}} (const char $\ast$s)
+\begin{DoxyCompactList}\small\item\em Append data to string. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a097453cb71fbf0b5511cf1259ddce4fb}{Append}} (const char $\ast$s, xb\+UInt32 i\+Byte\+Count)
+\begin{DoxyCompactList}\small\item\em Append data to string. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a093c6ab5df375a2589755bb8f48fa5c7}{Append}} (char c)
+\begin{DoxyCompactList}\small\item\em Append data to string. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a85bef82dfa22122a1ab8dfe58a107d96}{Assign}} (const char $\ast$src\+Str, xb\+UInt32 l\+Start\+Pos, xb\+UInt32 l\+Copy\+Len)
+\begin{DoxyCompactList}\small\item\em Assign portion of string. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a08eb7ca6740423acab4e8bd7a6c8043d}{Assign}} (const char $\ast$src\+Str, xb\+UInt32 l\+Start\+Pos)
+\begin{DoxyCompactList}\small\item\em Assign portion of string. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a430119df844bd80d67c23c48b045af30}{Assign}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s, xb\+UInt32 ul\+Start\+Pos, xb\+UInt32 l\+Copy\+Len)
+\begin{DoxyCompactList}\small\item\em Assign portion of string. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a97df314be5b3b2611be11ff50a19533d}{Assign}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s, xb\+UInt32 ul\+Start\+Pos)
+\begin{DoxyCompactList}\small\item\em Assign portion of string. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \mbox{\hyperlink{classxb_1_1xbString_ac7a8466b03c04df838bd182ef244f792}{Copy}} () const
+\begin{DoxyCompactList}\small\item\em Copy a string. \end{DoxyCompactList}\item
+xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbString_a26bc14d92dc7ce1f2bf31cd74af0db0f}{Count\+Char}} (char c) const
+\begin{DoxyCompactList}\small\item\em Count the number of characters in the string. \end{DoxyCompactList}\item
+xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbString_adc0204bcfd1c052b9aea9229b10acf72}{Count\+Char}} (char c, xb\+Int16 i\+Opt) const
+\begin{DoxyCompactList}\small\item\em Count the number of characters in the string. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbString_a0a737bd408a94903f214eb2879eb56de}{Cvt\+Hex\+Char}} (char \&c\+Out)
+\begin{DoxyCompactList}\small\item\em Convert hex character to string. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbString_ab5eb6918a0ae9ab6c0e961318f3d1eb0}{Cvt\+Hex\+String}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Out)
+\begin{DoxyCompactList}\small\item\em Convert string of hex characters to string. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbString_a1528b30b84a41c3564ef31d1f4496b15}{Cvt\+ULong\+Long}} (xb\+UInt64 \&ull\+Out)
+\begin{DoxyCompactList}\small\item\em Convert string to xb\+UInt64 number. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbString_ae3ab18365e132323f8ae4c99eb72181c}{Cvt\+Long\+Long}} (xb\+Int64 \&ll\+Out)
+\begin{DoxyCompactList}\small\item\em Convert string to xb\+Int64 number. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a6b33a8df49cdcb76033cbce5d8dc59d7}{Extract\+Element}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s, char delim, xb\+UInt32 i\+Cnt, xb\+Int16 i\+Opt=0)
+\begin{DoxyCompactList}\small\item\em Extract an element out of a delimited string. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a77195fc4957952625cb33bb503517a3e}{Extract\+Element}} (const char $\ast$src, char delim, xb\+UInt32 i\+Cnt, xb\+Int16 i\+Opt=0)
+\begin{DoxyCompactList}\small\item\em Extract an element out of a delimited string. \end{DoxyCompactList}\item
+char \mbox{\hyperlink{classxb_1_1xbString_a685187a5f8401b322fc61f3fbe56330d}{Get\+Character}} (xb\+UInt32 l\+Pos) const
+\begin{DoxyCompactList}\small\item\em Get a character by position. \end{DoxyCompactList}\item
+xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbString_ac7698665f44413a5e99a5b5bc573c6df}{Get\+Last\+Pos}} (char c) const
+\begin{DoxyCompactList}\small\item\em Get the position of the last occurrence of a given character. \end{DoxyCompactList}\item
+xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbString_a1c55587904fe7e534290559d0ecb8646}{Get\+Last\+Pos}} (const char $\ast$s) const
+\begin{DoxyCompactList}\small\item\em Get the position of the last occurrence of a given string. \end{DoxyCompactList}\item
+char \mbox{\hyperlink{classxb_1_1xbString_af8b8b808cf43cd352321b43f500142db}{Get\+Path\+Separator}} () const
+\begin{DoxyCompactList}\small\item\em Get the path separator out of the string. \end{DoxyCompactList}\item
+xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbString_a6c33e73659f8e98819289d2661c7271c}{Get\+Size}} () const
+\begin{DoxyCompactList}\small\item\em Retrieve the size of the string buffer. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbString_aa13f6b72e5a529eab04545892bbc98b4}{Has\+Alpha\+Chars}} () const
+\begin{DoxyCompactList}\small\item\em Determine if the string has any alpha characters. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbString_a4a255a30d683acd62ea09c1617b53cb3}{Is\+Empty}} () const
+\begin{DoxyCompactList}\small\item\em Determine if string is empty. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbString_a3fa34fa31bcb7244ecb054ab628ad500}{Is\+Null}} () const
+\begin{DoxyCompactList}\small\item\em Determine if string is NULL. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_acdc3a6d6955b99f0a6b1d181fb3098b9}{Left}} (xb\+UInt32 ul\+Len)
+\begin{DoxyCompactList}\small\item\em Retain left part of string, drop rightmost characters. \end{DoxyCompactList}\item
+xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbString_a998b240eedac311aea5843047f55649b}{Len}} () const
+\begin{DoxyCompactList}\small\item\em Retrieve length of current string. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a90e0d0be4fd0d82dd2ebbe689adf18ee}{Ltrim}} ()
+\begin{DoxyCompactList}\small\item\em Left trim white space from string. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a656f5854f74064b7257ff96d96dfb68b}{Ltrunc}} (xb\+UInt32 ul\+Cnt)
+\begin{DoxyCompactList}\small\item\em Left truncate string. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a0f9eefc836b24c4ee7c5a316c5d812b7}{Mid}} (xb\+UInt32 ul\+Pos, xb\+UInt32 l\+Len)
+\begin{DoxyCompactList}\small\item\em Extract portion of data from string. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a6a09cfed22066b0c72432f26960f9e7b}{Pad\+Left}} (char c, xb\+UInt32 ul\+Len)
+\begin{DoxyCompactList}\small\item\em Left pad string. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_aba13f0c77eb6c4a22996039569fad284}{Pad\+Right}} (char c, xb\+UInt32 ul\+Len)
+\begin{DoxyCompactList}\small\item\em Right pad string. \end{DoxyCompactList}\item
+xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbString_a1b586890138da8bf0e23090bd8b34581}{Pos}} (char c, xb\+UInt32 ul\+Start\+Pos) const
+\begin{DoxyCompactList}\small\item\em Determine position of a given character. \end{DoxyCompactList}\item
+xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbString_a3baf59d15099589ff631995f129e582b}{Pos}} (char c) const
+\begin{DoxyCompactList}\small\item\em Determine position of a given character. \end{DoxyCompactList}\item
+xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbString_a8705d7277b72f5aa98021e84438914da}{Pos}} (const char $\ast$s) const
+\begin{DoxyCompactList}\small\item\em Determine position of a given substring. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a1bae6fa8f608261f6e889616482f6e39}{Put\+At}} (xb\+UInt32 ul\+Pos, char c)
+\begin{DoxyCompactList}\small\item\em Insert character into string. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_afaac65eaa6d9ef1596d6a0e7b91ed0f2}{Remove}} (xb\+UInt32 ul\+Pos, xb\+UInt32 ulN)
+\begin{DoxyCompactList}\small\item\em Remove portion of string. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_ac721d643c60b5c5acf60c2bce99596fa}{Replace}} (const char $\ast$s\+Replace, const char $\ast$s\+Replace\+With, xb\+Int16 i\+Opt=0)
+\begin{DoxyCompactList}\small\item\em Replace a value within a string with another value. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_aa6d346ab04e5bb8852f0bb996163a35e}{Resize}} (xb\+UInt32 l\+Size)
+\begin{DoxyCompactList}\small\item\em Resize a string. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_aaf330188d67c347ecae0d16f65b22077}{Rtrim}} ()
+\begin{DoxyCompactList}\small\item\em Right trim the string. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_ab85753d2c39882e946a8468cbb587700}{Set}} (const char $\ast$s)
+\begin{DoxyCompactList}\small\item\em Set the value of the string. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_ac0d08bd688fd0e3707e32886d0dfeb09}{Set}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s)
+\begin{DoxyCompactList}\small\item\em Set the value of the string. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a6eba6ccd0c805a22516de2c18a30f8a3}{Set}} (const char $\ast$s, xb\+UInt32 ul\+Size)
+\begin{DoxyCompactList}\small\item\em Set the value of the string. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a3af5b1f111f94b0667551fcbd1d97abd}{Set\+Num}} (xb\+Int32 l\+Num)
+\begin{DoxyCompactList}\small\item\em Set the string to long integer numeric value. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a9e9bfa29d86377b915f1628aeb0e9195}{Sprintf}} (const char $\ast$format,...)
+\begin{DoxyCompactList}\small\item\em Printf routine for formatting a string. \end{DoxyCompactList}\item
+const char $\ast$ \mbox{\hyperlink{classxb_1_1xbString_a6715f4c0010f3ab487c9d787838a29b3}{Str}} () const
+\begin{DoxyCompactList}\small\item\em Return string data. \end{DoxyCompactList}\item
+char $\ast$ \mbox{\hyperlink{classxb_1_1xbString_a3bc9e856c34f0c240a6e36e5b6e3ea7b}{strncpy}} (char $\ast$c\+Dest, xb\+UInt32 n) const
+\begin{DoxyCompactList}\small\item\em Copy all or part of string to character array. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a054683872e1f05d11c2cf8683a63a6fe}{Swap\+Chars}} (char from, char to)
+\begin{DoxyCompactList}\small\item\em Swap characters. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a602cac1a6ef3f6b52f587ac4c0ef4fb2}{To\+Lower\+Case}} ()
+\begin{DoxyCompactList}\small\item\em Replace all upper case charaters with lower case characters. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a68001d0a44e6b4fe61e29a4e41ded9d4}{To\+Upper\+Case}} ()
+\begin{DoxyCompactList}\small\item\em Replace all lower case charaters with lower case characters. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_abc9bd33687d4e03ca52d77885721d626}{Trim}} ()
+\begin{DoxyCompactList}\small\item\em Trim all leading and trailing white space from string. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbString_a72b16c15fd8822efaa5f158c34df7b1e}{Valid\+Logical\+Value}} () const
+\begin{DoxyCompactList}\small\item\em Check for valid logical field data. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbString_aeed920d2a25111f776ddde2d530eb81b}{Valid\+Numeric\+Value}} () const
+\begin{DoxyCompactList}\small\item\em This function returns true if the data is valid numeric data. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a2fd30956a26a260d1ef6fdbe73dd93f9}{Zap\+Char}} (char c)
+\begin{DoxyCompactList}\small\item\em Remove every instance of a character from a string. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_addc3a470f6cd85d4c21bf9da38cf5ac9}{Zap\+Leading\+Char}} (char c)
+\begin{DoxyCompactList}\small\item\em Remove leading character from a string. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_afe3415bfa2e1089b792aeda0462fb99e}{Zap\+Trailing\+Char}} (char c)
+\begin{DoxyCompactList}\small\item\em Remove trailing character from a string. \end{DoxyCompactList}\end{DoxyCompactItemize}
+\doxysubsection*{Friends}
+\begin{DoxyCompactItemize}
+\item
+std\+::ostream \& \mbox{\hyperlink{classxb_1_1xbString_a3fa915061156521e9dd772a8d7e5f8fb}{operator$<$$<$}} (std\+::ostream \&os, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s)
+\begin{DoxyCompactList}\small\item\em Stream insertion operator \texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<}. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Class for handling string data.
+
+This class defines a basic string class with all the functions one would expect in a string class.
+
+For purposes of the \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} class, a string is defined as a variable sized array of one byte characters terminated with a null (0x00 or \textbackslash{}0) byte.~\newline
+~\newline
+
+
+This version of the \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} class does not support wide (wchar\+\_\+t) characters. Perhaps you would be interested in creating a class for supporting wide characters.~\newline
+~\newline
+
+
+This string class handle strings in a 1-\/based (not 0 based) fashion. Any string routines taking an offset use a 1-\/based value. That is, the first position of the string is position 1, not 0.~\newline
+~\newline
+ ~\newline
+
+
+Position 1 (not 0) is considered the first position in a string. ~\newline
+ A return of 0 would indicate a not found condition. A return of 1, would be the first byte.
+
+\doxysubsection{Constructor \& Destructor Documentation}
+\mbox{\Hypertarget{classxb_1_1xbString_a63f9313217e0ff3c9789ec59316216a1}\label{classxb_1_1xbString_a63f9313217e0ff3c9789ec59316216a1}}
+\index{xb::xbString@{xb::xbString}!xbString@{xbString}}
+\index{xbString@{xbString}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{xbString()}{xbString()}\hspace{0.1cm}{\footnotesize\ttfamily [1/6]}}
+{\footnotesize\ttfamily xb\+::xb\+String\+::xb\+String (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{ul\+Size }\end{DoxyParamCaption})}
+
+
+
+Constructor.
+
+
+\begin{DoxyParams}{Parameters}
+{\em ul\+Size} & -\/ Allocation size. The allocation size is normally handled internally by the class, but it can be set in this constructor. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbString_a14bbaa293c8d40dd6c64332f2668a92e}\label{classxb_1_1xbString_a14bbaa293c8d40dd6c64332f2668a92e}}
+\index{xb::xbString@{xb::xbString}!xbString@{xbString}}
+\index{xbString@{xbString}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{xbString()}{xbString()}\hspace{0.1cm}{\footnotesize\ttfamily [2/6]}}
+{\footnotesize\ttfamily xb\+::xb\+String\+::xb\+String (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption})}
+
+
+
+Constructor.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c} & -\/ Initialize string to c. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbString_a18f3598dcdf2ec5692274fc8ee769ad7}\label{classxb_1_1xbString_a18f3598dcdf2ec5692274fc8ee769ad7}}
+\index{xb::xbString@{xb::xbString}!xbString@{xbString}}
+\index{xbString@{xbString}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{xbString()}{xbString()}\hspace{0.1cm}{\footnotesize\ttfamily [3/6]}}
+{\footnotesize\ttfamily xb\+::xb\+String\+::xb\+String (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s, }\item[{xb\+UInt32}]{ul\+Max\+Len }\end{DoxyParamCaption})}
+
+
+
+Constructor.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s} & Initialize string to s. \\
+\hline
+{\em ul\+Max\+Len} & Maximum length of string. Truncate any characters greater than ul\+Max\+Len. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbString_a0d81016b93fc36ebbbafacf35c677f07}\label{classxb_1_1xbString_a0d81016b93fc36ebbbafacf35c677f07}}
+\index{xb::xbString@{xb::xbString}!xbString@{xbString}}
+\index{xbString@{xbString}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{xbString()}{xbString()}\hspace{0.1cm}{\footnotesize\ttfamily [4/6]}}
+{\footnotesize\ttfamily xb\+::xb\+String\+::xb\+String (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s }\end{DoxyParamCaption})}
+
+
+
+Constructor.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s} & Initialize string to s. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbString_a25856311106c5fb15d39017b63f0ddc7}\label{classxb_1_1xbString_a25856311106c5fb15d39017b63f0ddc7}}
+\index{xb::xbString@{xb::xbString}!xbString@{xbString}}
+\index{xbString@{xbString}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{xbString()}{xbString()}\hspace{0.1cm}{\footnotesize\ttfamily [5/6]}}
+{\footnotesize\ttfamily xb\+::xb\+String\+::xb\+String (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s = {\ttfamily \char`\"{}\char`\"{}} }\end{DoxyParamCaption})}
+
+
+
+Constructor.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s} & -\/ Initialize string to s. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbString_ad865b55e3b08dffd527afee8e7e8e3fe}\label{classxb_1_1xbString_ad865b55e3b08dffd527afee8e7e8e3fe}}
+\index{xb::xbString@{xb::xbString}!xbString@{xbString}}
+\index{xbString@{xbString}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{xbString()}{xbString()}\hspace{0.1cm}{\footnotesize\ttfamily [6/6]}}
+{\footnotesize\ttfamily xb\+::xb\+String\+::xb\+String (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}}}]{d }\end{DoxyParamCaption})}
+
+
+
+Constructor.
+
+
+\begin{DoxyParams}{Parameters}
+{\em d} & -\/ Initiailize string to d. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbString_a10a6549efab02bc76ab33b15916b1eb1}\label{classxb_1_1xbString_a10a6549efab02bc76ab33b15916b1eb1}}
+\index{xb::xbString@{xb::xbString}!````~xbString@{$\sim$xbString}}
+\index{````~xbString@{$\sim$xbString}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{$\sim$xbString()}{~xbString()}}
+{\footnotesize\ttfamily xb\+::xb\+String\+::$\sim$xb\+String (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+
+
+Destructor.
+
+
+
+\doxysubsection{Member Function Documentation}
+\mbox{\Hypertarget{classxb_1_1xbString_a6c4fdb689d27a9d19a0b5b4236e1ca62}\label{classxb_1_1xbString_a6c4fdb689d27a9d19a0b5b4236e1ca62}}
+\index{xb::xbString@{xb::xbString}!AddBackSlash@{AddBackSlash}}
+\index{AddBackSlash@{AddBackSlash}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{AddBackSlash()}{AddBackSlash()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Add\+Back\+Slash (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption})}
+
+
+
+Add a prefixing back slash to specified characters in the string.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c} & Character to prefix with a backslash. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Reference to this string.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a093c6ab5df375a2589755bb8f48fa5c7}\label{classxb_1_1xbString_a093c6ab5df375a2589755bb8f48fa5c7}}
+\index{xb::xbString@{xb::xbString}!Append@{Append}}
+\index{Append@{Append}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{Append()}{Append()}\hspace{0.1cm}{\footnotesize\ttfamily [1/4]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Append (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption})}
+
+
+
+Append data to string.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c} & String data to append. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Reference to this string.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a1922319303feb6da1f40b5994c5e8240}\label{classxb_1_1xbString_a1922319303feb6da1f40b5994c5e8240}}
+\index{xb::xbString@{xb::xbString}!Append@{Append}}
+\index{Append@{Append}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{Append()}{Append()}\hspace{0.1cm}{\footnotesize\ttfamily [2/4]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Append (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s }\end{DoxyParamCaption})}
+
+
+
+Append data to string.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s} & String data to append. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Reference to this string.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a097453cb71fbf0b5511cf1259ddce4fb}\label{classxb_1_1xbString_a097453cb71fbf0b5511cf1259ddce4fb}}
+\index{xb::xbString@{xb::xbString}!Append@{Append}}
+\index{Append@{Append}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{Append()}{Append()}\hspace{0.1cm}{\footnotesize\ttfamily [3/4]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Append (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s, }\item[{xb\+UInt32}]{ul\+Byte\+Count }\end{DoxyParamCaption})}
+
+
+
+Append data to string.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s} & String data to append. ~\newline
+ \\
+\hline
+{\em ul\+Byte\+Count} & Maximum number of bytes to append. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Reference to this string.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a8f202e4798491f2ae9ce51ff58dd5815}\label{classxb_1_1xbString_a8f202e4798491f2ae9ce51ff58dd5815}}
+\index{xb::xbString@{xb::xbString}!Append@{Append}}
+\index{Append@{Append}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{Append()}{Append()}\hspace{0.1cm}{\footnotesize\ttfamily [4/4]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Append (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s }\end{DoxyParamCaption})}
+
+
+
+Append data to string.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s} & String data to append. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Reference to this string.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a08eb7ca6740423acab4e8bd7a6c8043d}\label{classxb_1_1xbString_a08eb7ca6740423acab4e8bd7a6c8043d}}
+\index{xb::xbString@{xb::xbString}!Assign@{Assign}}
+\index{Assign@{Assign}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{Assign()}{Assign()}\hspace{0.1cm}{\footnotesize\ttfamily [1/4]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Assign (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s\+Str, }\item[{xb\+UInt32}]{ul\+Start\+Pos }\end{DoxyParamCaption})}
+
+
+
+Assign portion of string.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Str} & -\/ Source string for copy operation. s\+Str needs to be a Null terminated string. \\
+\hline
+{\em ul\+Start\+Pos} & -\/ Starting position within source string. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Reference to this string.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a85bef82dfa22122a1ab8dfe58a107d96}\label{classxb_1_1xbString_a85bef82dfa22122a1ab8dfe58a107d96}}
+\index{xb::xbString@{xb::xbString}!Assign@{Assign}}
+\index{Assign@{Assign}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{Assign()}{Assign()}\hspace{0.1cm}{\footnotesize\ttfamily [2/4]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Assign (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s\+Str, }\item[{xb\+UInt32}]{ul\+Start\+Pos, }\item[{xb\+UInt32}]{ul\+Copy\+Len }\end{DoxyParamCaption})}
+
+
+
+Assign portion of string.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Str} & -\/ Source string for copy operation. s\+Str needs to be a Null terminated string. \\
+\hline
+{\em ul\+Start\+Pos} & -\/ Starting position within source string. \\
+\hline
+{\em ul\+Copy\+Len} & -\/ Length of data to copy. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Reference to this string.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a97df314be5b3b2611be11ff50a19533d}\label{classxb_1_1xbString_a97df314be5b3b2611be11ff50a19533d}}
+\index{xb::xbString@{xb::xbString}!Assign@{Assign}}
+\index{Assign@{Assign}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{Assign()}{Assign()}\hspace{0.1cm}{\footnotesize\ttfamily [3/4]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Assign (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Str, }\item[{xb\+UInt32}]{ul\+Start\+Pos }\end{DoxyParamCaption})}
+
+
+
+Assign portion of string.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Str} & -\/ Source string for copy operation. s\+Str needs to be a Null terminated string. \\
+\hline
+{\em ul\+Start\+Pos} & -\/ Starting position within source string. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Reference to this string.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a430119df844bd80d67c23c48b045af30}\label{classxb_1_1xbString_a430119df844bd80d67c23c48b045af30}}
+\index{xb::xbString@{xb::xbString}!Assign@{Assign}}
+\index{Assign@{Assign}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{Assign()}{Assign()}\hspace{0.1cm}{\footnotesize\ttfamily [4/4]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Assign (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Str, }\item[{xb\+UInt32}]{ul\+Start\+Pos, }\item[{xb\+UInt32}]{ul\+Copy\+Len }\end{DoxyParamCaption})}
+
+
+
+Assign portion of string.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Str} & -\/ Source string for copy operation. s\+Str needs to be a Null terminated string. \\
+\hline
+{\em ul\+Start\+Pos} & -\/ Starting position within source string. \\
+\hline
+{\em ul\+Copy\+Len} & -\/ Length of data to copy. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Reference to this string.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_ac7a8466b03c04df838bd182ef244f792}\label{classxb_1_1xbString_ac7a8466b03c04df838bd182ef244f792}}
+\index{xb::xbString@{xb::xbString}!Copy@{Copy}}
+\index{Copy@{Copy}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{Copy()}{Copy()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} xb\+::xb\+String\+::\+Copy (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+
+
+Copy a string.
+
+\begin{DoxyReturn}{Returns}
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}}.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a26bc14d92dc7ce1f2bf31cd74af0db0f}\label{classxb_1_1xbString_a26bc14d92dc7ce1f2bf31cd74af0db0f}}
+\index{xb::xbString@{xb::xbString}!CountChar@{CountChar}}
+\index{CountChar@{CountChar}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{CountChar()}{CountChar()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+UInt32 xb\+::xb\+String\+::\+Count\+Char (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption}) const}
+
+
+
+Count the number of characters in the string.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c} & Character to count. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The number of characters.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_adc0204bcfd1c052b9aea9229b10acf72}\label{classxb_1_1xbString_adc0204bcfd1c052b9aea9229b10acf72}}
+\index{xb::xbString@{xb::xbString}!CountChar@{CountChar}}
+\index{CountChar@{CountChar}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{CountChar()}{CountChar()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+UInt32 xb\+::xb\+String\+::\+Count\+Char (\begin{DoxyParamCaption}\item[{char}]{c, }\item[{xb\+Int16}]{i\+Opt }\end{DoxyParamCaption}) const}
+
+
+
+Count the number of characters in the string.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c} & Character to count. \\
+\hline
+{\em i\+Opt} & 0 -\/ Count the number of characters.~\newline
+ 1 -\/ Count the number of characters not between single or double quotes. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The number of characters.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a0a737bd408a94903f214eb2879eb56de}\label{classxb_1_1xbString_a0a737bd408a94903f214eb2879eb56de}}
+\index{xb::xbString@{xb::xbString}!CvtHexChar@{CvtHexChar}}
+\index{CvtHexChar@{CvtHexChar}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{CvtHexChar()}{CvtHexChar()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+String\+::\+Cvt\+Hex\+Char (\begin{DoxyParamCaption}\item[{char \&}]{c\+Out }\end{DoxyParamCaption})}
+
+
+
+Convert hex character to string.
+
+This routine converts a four byte string in the format of 0x00 to a one byte char value. The first four bytes of the string must be in the format 0x00. Anything past the first four bytes is disregarded.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c\+Out} & Output character. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+XB\+\_\+\+INVALID\+\_\+\+PARM on error~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR on success.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_ab5eb6918a0ae9ab6c0e961318f3d1eb0}\label{classxb_1_1xbString_ab5eb6918a0ae9ab6c0e961318f3d1eb0}}
+\index{xb::xbString@{xb::xbString}!CvtHexString@{CvtHexString}}
+\index{CvtHexString@{CvtHexString}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{CvtHexString()}{CvtHexString()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+String\+::\+Cvt\+Hex\+String (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Out }\end{DoxyParamCaption})}
+
+
+
+Convert string of hex characters to string.
+
+This routine converts a string of four byte format of 0x00 to a string of one byte chars.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Out} & Output string of converted characters. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+XB\+\_\+\+INVALID\+\_\+\+PARM on error~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR on success.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_ae3ab18365e132323f8ae4c99eb72181c}\label{classxb_1_1xbString_ae3ab18365e132323f8ae4c99eb72181c}}
+\index{xb::xbString@{xb::xbString}!CvtLongLong@{CvtLongLong}}
+\index{CvtLongLong@{CvtLongLong}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{CvtLongLong()}{CvtLongLong()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+String\+::\+Cvt\+Long\+Long (\begin{DoxyParamCaption}\item[{xb\+Int64 \&}]{ll\+Out }\end{DoxyParamCaption})}
+
+
+
+Convert string to xb\+Int64 number.
+
+
+\begin{DoxyParams}{Parameters}
+{\em ll\+Out} & -\/ output long long. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+XB\+\_\+\+NO\+\_\+\+ERROR
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a1528b30b84a41c3564ef31d1f4496b15}\label{classxb_1_1xbString_a1528b30b84a41c3564ef31d1f4496b15}}
+\index{xb::xbString@{xb::xbString}!CvtULongLong@{CvtULongLong}}
+\index{CvtULongLong@{CvtULongLong}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{CvtULongLong()}{CvtULongLong()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+String\+::\+Cvt\+ULong\+Long (\begin{DoxyParamCaption}\item[{xb\+UInt64 \&}]{ull\+Out }\end{DoxyParamCaption})}
+
+
+
+Convert string to xb\+UInt64 number.
+
+
+\begin{DoxyParams}{Parameters}
+{\em ull\+Out} & -\/ output unsigned long long. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+XB\+\_\+\+NO\+\_\+\+ERROR
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a77195fc4957952625cb33bb503517a3e}\label{classxb_1_1xbString_a77195fc4957952625cb33bb503517a3e}}
+\index{xb::xbString@{xb::xbString}!ExtractElement@{ExtractElement}}
+\index{ExtractElement@{ExtractElement}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{ExtractElement()}{ExtractElement()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Extract\+Element (\begin{DoxyParamCaption}\item[{const char $\ast$}]{p\+Src, }\item[{char}]{c\+Delim, }\item[{xb\+UInt32}]{l\+Skip\+Cnt, }\item[{xb\+Int16}]{i\+Opt = {\ttfamily 0} }\end{DoxyParamCaption})}
+
+
+
+Extract an element out of a delimited string.
+
+
+\begin{DoxyParams}{Parameters}
+{\em p\+Src} & Source string. \\
+\hline
+{\em c\+Delim} & Delimiter. \\
+\hline
+{\em l\+Skip\+Cnt} & Number of delimiters to skip. \\
+\hline
+{\em i\+Opt} & 0 -\/ ignore single and double quotes.~\newline
+ 1 -\/ ignore delimiters between single or double quotes. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Reference to string extracted from element.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a6b33a8df49cdcb76033cbce5d8dc59d7}\label{classxb_1_1xbString_a6b33a8df49cdcb76033cbce5d8dc59d7}}
+\index{xb::xbString@{xb::xbString}!ExtractElement@{ExtractElement}}
+\index{ExtractElement@{ExtractElement}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{ExtractElement()}{ExtractElement()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Extract\+Element (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Src, }\item[{char}]{c\+Delim, }\item[{xb\+UInt32}]{l\+Skip\+Cnt, }\item[{xb\+Int16}]{i\+Opt = {\ttfamily 0} }\end{DoxyParamCaption})}
+
+
+
+Extract an element out of a delimited string.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Src} & Source string. \\
+\hline
+{\em c\+Delim} & Delimiter. \\
+\hline
+{\em l\+Skip\+Cnt} & Number of delimiters to skip. \\
+\hline
+{\em i\+Opt} & 0 -\/ ignore single and double quotes.~\newline
+ 1 -\/ ignore delimiters between single or double quotes. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Reference to string extracted from element.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a685187a5f8401b322fc61f3fbe56330d}\label{classxb_1_1xbString_a685187a5f8401b322fc61f3fbe56330d}}
+\index{xb::xbString@{xb::xbString}!GetCharacter@{GetCharacter}}
+\index{GetCharacter@{GetCharacter}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{GetCharacter()}{GetCharacter()}}
+{\footnotesize\ttfamily char xb\+::xb\+String\+::\+Get\+Character (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{n }\end{DoxyParamCaption}) const}
+
+
+
+Get a character by position.
+
+
+\begin{DoxyParams}{Parameters}
+{\em n} & -\/ Position in string to extract. First position is 1 (not 0). \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Character from position n, or null.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_ac7698665f44413a5e99a5b5bc573c6df}\label{classxb_1_1xbString_ac7698665f44413a5e99a5b5bc573c6df}}
+\index{xb::xbString@{xb::xbString}!GetLastPos@{GetLastPos}}
+\index{GetLastPos@{GetLastPos}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{GetLastPos()}{GetLastPos()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+UInt32 xb\+::xb\+String\+::\+Get\+Last\+Pos (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption}) const}
+
+
+
+Get the position of the last occurrence of a given character.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c} & -\/ Character to search for. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Last position of character in the string.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a1c55587904fe7e534290559d0ecb8646}\label{classxb_1_1xbString_a1c55587904fe7e534290559d0ecb8646}}
+\index{xb::xbString@{xb::xbString}!GetLastPos@{GetLastPos}}
+\index{GetLastPos@{GetLastPos}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{GetLastPos()}{GetLastPos()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+UInt32 xb\+::xb\+String\+::\+Get\+Last\+Pos (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s }\end{DoxyParamCaption}) const}
+
+
+
+Get the position of the last occurrence of a given string.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s} & -\/ String to search for. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Last position of character in the string.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_af8b8b808cf43cd352321b43f500142db}\label{classxb_1_1xbString_af8b8b808cf43cd352321b43f500142db}}
+\index{xb::xbString@{xb::xbString}!GetPathSeparator@{GetPathSeparator}}
+\index{GetPathSeparator@{GetPathSeparator}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{GetPathSeparator()}{GetPathSeparator()}}
+{\footnotesize\ttfamily char xb\+::xb\+String\+::\+Get\+Path\+Separator (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+
+
+Get the path separator out of the string.
+
+This method assumes the string is a valid path name. If it is, it returns either / or . \begin{DoxyReturn}{Returns}
+Char value containing either / or \textbackslash{} depending on OS.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a6c33e73659f8e98819289d2661c7271c}\label{classxb_1_1xbString_a6c33e73659f8e98819289d2661c7271c}}
+\index{xb::xbString@{xb::xbString}!GetSize@{GetSize}}
+\index{GetSize@{GetSize}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{GetSize()}{GetSize()}}
+{\footnotesize\ttfamily xb\+UInt32 xb\+::xb\+String\+::\+Get\+Size (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+
+
+Retrieve the size of the string buffer.
+
+\begin{DoxyReturn}{Returns}
+Size of string buffer including the null terminating byte.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_aa13f6b72e5a529eab04545892bbc98b4}\label{classxb_1_1xbString_aa13f6b72e5a529eab04545892bbc98b4}}
+\index{xb::xbString@{xb::xbString}!HasAlphaChars@{HasAlphaChars}}
+\index{HasAlphaChars@{HasAlphaChars}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{HasAlphaChars()}{HasAlphaChars()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+String\+::\+Has\+Alpha\+Chars (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+
+
+Determine if the string has any alpha characters.
+
+\begin{DoxyReturn}{Returns}
+xb\+True -\/ String contains one or more aloha characters.~\newline
+ xb\+False -\/ String contains no alpha characters.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a4a255a30d683acd62ea09c1617b53cb3}\label{classxb_1_1xbString_a4a255a30d683acd62ea09c1617b53cb3}}
+\index{xb::xbString@{xb::xbString}!IsEmpty@{IsEmpty}}
+\index{IsEmpty@{IsEmpty}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{IsEmpty()}{IsEmpty()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+String\+::\+Is\+Empty (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+
+
+Determine if string is empty.
+
+\begin{DoxyReturn}{Returns}
+xb\+True if string is empty.~\newline
+ xb\+False if string is not empty.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a3fa34fa31bcb7244ecb054ab628ad500}\label{classxb_1_1xbString_a3fa34fa31bcb7244ecb054ab628ad500}}
+\index{xb::xbString@{xb::xbString}!IsNull@{IsNull}}
+\index{IsNull@{IsNull}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{IsNull()}{IsNull()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+String\+::\+Is\+Null (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+
+
+Determine if string is NULL.
+
+\begin{DoxyReturn}{Returns}
+xb\+True if string is NULL.~\newline
+ xb\+False if string is not NULL.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_acdc3a6d6955b99f0a6b1d181fb3098b9}\label{classxb_1_1xbString_acdc3a6d6955b99f0a6b1d181fb3098b9}}
+\index{xb::xbString@{xb::xbString}!Left@{Left}}
+\index{Left@{Left}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{Left()}{Left()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Left (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{ul\+Len }\end{DoxyParamCaption})}
+
+
+
+Retain left part of string, drop rightmost characters.
+
+
+\begin{DoxyParams}{Parameters}
+{\em ul\+Len} & New string length, truncate rightmost excess. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Reference to string.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a998b240eedac311aea5843047f55649b}\label{classxb_1_1xbString_a998b240eedac311aea5843047f55649b}}
+\index{xb::xbString@{xb::xbString}!Len@{Len}}
+\index{Len@{Len}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{Len()}{Len()}}
+{\footnotesize\ttfamily xb\+UInt32 xb\+::xb\+String\+::\+Len (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+
+
+Retrieve length of current string.
+
+\begin{DoxyReturn}{Returns}
+String length, excluding the terminating null byte.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a90e0d0be4fd0d82dd2ebbe689adf18ee}\label{classxb_1_1xbString_a90e0d0be4fd0d82dd2ebbe689adf18ee}}
+\index{xb::xbString@{xb::xbString}!Ltrim@{Ltrim}}
+\index{Ltrim@{Ltrim}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{Ltrim()}{Ltrim()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Ltrim (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+
+
+Left trim white space from string.
+
+\begin{DoxyReturn}{Returns}
+Reference to this string.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a656f5854f74064b7257ff96d96dfb68b}\label{classxb_1_1xbString_a656f5854f74064b7257ff96d96dfb68b}}
+\index{xb::xbString@{xb::xbString}!Ltrunc@{Ltrunc}}
+\index{Ltrunc@{Ltrunc}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{Ltrunc()}{Ltrunc()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Ltrunc (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{ul\+Cnt }\end{DoxyParamCaption})}
+
+
+
+Left truncate string.
+
+
+\begin{DoxyParams}{Parameters}
+{\em ul\+Cnt} & Number of bytes to remove from the left. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Reference to this string.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a0f9eefc836b24c4ee7c5a316c5d812b7}\label{classxb_1_1xbString_a0f9eefc836b24c4ee7c5a316c5d812b7}}
+\index{xb::xbString@{xb::xbString}!Mid@{Mid}}
+\index{Mid@{Mid}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{Mid()}{Mid()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Mid (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{ul\+Start\+Pos, }\item[{xb\+UInt32}]{ul\+Targ\+Len }\end{DoxyParamCaption})}
+
+
+
+Extract portion of data from string.
+
+
+\begin{DoxyParams}{Parameters}
+{\em ul\+Start\+Pos} & Starting position \\
+\hline
+{\em ul\+Targ\+Len} & Length \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Reference to string
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a545df0ae9590f0ea5844a165e38a6388}\label{classxb_1_1xbString_a545df0ae9590f0ea5844a165e38a6388}}
+\index{xb::xbString@{xb::xbString}!operator const char $\ast$@{operator const char $\ast$}}
+\index{operator const char $\ast$@{operator const char $\ast$}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{operator const char $\ast$()}{operator const char *()}}
+{\footnotesize\ttfamily xb\+::xb\+String\+::operator const char $\ast$ (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+
+
+Operator const char $\ast$.
+
+\begin{DoxyReturn}{Returns}
+Pointer to string data.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a822448f2a0ce653473d4c1de5763a3a6}\label{classxb_1_1xbString_a822448f2a0ce653473d4c1de5763a3a6}}
+\index{xb::xbString@{xb::xbString}!operator"!=@{operator"!=}}
+\index{operator"!=@{operator"!=}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{operator"!=()}{operator!=()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+String\+::operator!= (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s }\end{DoxyParamCaption}) const}
+
+
+
+operator !=
+
+
+\begin{DoxyParams}{Parameters}
+{\em s} & String to compare \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+xb\+True -\/ Strings don\textquotesingle{}t match.~\newline
+ zb\+False -\/ Strings match.~\newline
+
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_acf89691607050b0505dc6af28d059c38}\label{classxb_1_1xbString_acf89691607050b0505dc6af28d059c38}}
+\index{xb::xbString@{xb::xbString}!operator"!=@{operator"!=}}
+\index{operator"!=@{operator"!=}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{operator"!=()}{operator!=()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+String\+::operator!= (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s }\end{DoxyParamCaption}) const}
+
+
+
+operator !=
+
+
+\begin{DoxyParams}{Parameters}
+{\em s} & String to compare \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+xb\+True -\/ Strings don\textquotesingle{}t match.~\newline
+ xb\+False -\/ Strings match.~\newline
+
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_aab556e8c3cb478dd95643327d72a48bd}\label{classxb_1_1xbString_aab556e8c3cb478dd95643327d72a48bd}}
+\index{xb::xbString@{xb::xbString}!operator+@{operator+}}
+\index{operator+@{operator+}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{operator+()}{operator+()}\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} xb\+::xb\+String\+::operator+ (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s1 }\end{DoxyParamCaption})}
+
+
+
+Concatonate operator +.
+
+Concatonate left string with right string returning reference to new string.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s1} & Right string operator. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbString_af559654baba81c3c0c19823c0b7a69d3}\label{classxb_1_1xbString_af559654baba81c3c0c19823c0b7a69d3}}
+\index{xb::xbString@{xb::xbString}!operator+@{operator+}}
+\index{operator+@{operator+}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{operator+()}{operator+()}\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} xb\+::xb\+String\+::operator+ (\begin{DoxyParamCaption}\item[{const char}]{c }\end{DoxyParamCaption})}
+
+
+
+Concatonate operator +.
+
+Concatonate left string with right string returning reference to new string.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c} & Right string operator. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbString_a1f289d577ba90c500bc1be3ec7bb0206}\label{classxb_1_1xbString_a1f289d577ba90c500bc1be3ec7bb0206}}
+\index{xb::xbString@{xb::xbString}!operator+@{operator+}}
+\index{operator+@{operator+}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{operator+()}{operator+()}\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} xb\+::xb\+String\+::operator+ (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s1 }\end{DoxyParamCaption})}
+
+
+
+Concatonate operator +.
+
+Concatonate left string with right string returning reference to new string.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s1} & Right string operator. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbString_ae12f45b8be84e438e032c0b860f985c6}\label{classxb_1_1xbString_ae12f45b8be84e438e032c0b860f985c6}}
+\index{xb::xbString@{xb::xbString}!operator+=@{operator+=}}
+\index{operator+=@{operator+=}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{operator+=()}{operator+=()}\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::operator+= (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption})}
+
+
+
+Append operator +=.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c} & -\/ Append c to the string. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbString_ab319120dbad9107e1e7090139c956100}\label{classxb_1_1xbString_ab319120dbad9107e1e7090139c956100}}
+\index{xb::xbString@{xb::xbString}!operator+=@{operator+=}}
+\index{operator+=@{operator+=}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{operator+=()}{operator+=()}\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::operator+= (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s }\end{DoxyParamCaption})}
+
+
+
+Append operator +=.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s} & -\/ Append s to the string. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbString_a76a47af239797a266ada6141c150001c}\label{classxb_1_1xbString_a76a47af239797a266ada6141c150001c}}
+\index{xb::xbString@{xb::xbString}!operator+=@{operator+=}}
+\index{operator+=@{operator+=}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{operator+=()}{operator+=()}\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::operator+= (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s }\end{DoxyParamCaption})}
+
+
+
+Append operator +=.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s} & -\/ Append s to the string. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbString_a06abec236b95f6933ba17bf67089f7cf}\label{classxb_1_1xbString_a06abec236b95f6933ba17bf67089f7cf}}
+\index{xb::xbString@{xb::xbString}!operator-\/@{operator-\/}}
+\index{operator-\/@{operator-\/}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{operator-\/()}{operator-()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} xb\+::xb\+String\+::operator-\/ (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s1 }\end{DoxyParamCaption})}
+
+
+
+Concatonate operator -\/.
+
+Concatonate left string with right string returning reference to new string. Both strings are trimmed.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s1} & Right string operator. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbString_adcafd019df23bb5724c46e34f3f31194}\label{classxb_1_1xbString_adcafd019df23bb5724c46e34f3f31194}}
+\index{xb::xbString@{xb::xbString}!operator-\/=@{operator-\/=}}
+\index{operator-\/=@{operator-\/=}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{operator-\/=()}{operator-=()}\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::operator-\/= (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption})}
+
+
+
+Append operator -\/=.
+
+Append c to the right of this string, trimming right space on this string first.
+\begin{DoxyParams}{Parameters}
+{\em c} & -\/ Append s to the right of the string value. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbString_aaae97e6eda3d18c9f463993ade985bf4}\label{classxb_1_1xbString_aaae97e6eda3d18c9f463993ade985bf4}}
+\index{xb::xbString@{xb::xbString}!operator-\/=@{operator-\/=}}
+\index{operator-\/=@{operator-\/=}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{operator-\/=()}{operator-=()}\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::operator-\/= (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s }\end{DoxyParamCaption})}
+
+
+
+Append operator -\/=.
+
+Append s to the right of this string, right trimming both strings.
+\begin{DoxyParams}{Parameters}
+{\em s} & -\/ Append s to the right of the string value. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbString_aa7f4db1b4eae9dfad46346db6e17ea15}\label{classxb_1_1xbString_aa7f4db1b4eae9dfad46346db6e17ea15}}
+\index{xb::xbString@{xb::xbString}!operator-\/=@{operator-\/=}}
+\index{operator-\/=@{operator-\/=}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{operator-\/=()}{operator-=()}\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::operator-\/= (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s }\end{DoxyParamCaption})}
+
+
+
+Append operator -\/=.
+
+Append s to the right of this string, right trimming both strings.
+\begin{DoxyParams}{Parameters}
+{\em s} & -\/ Append s to the right of the string value. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbString_a71c7aafa0d523c72cbe58c474be2270a}\label{classxb_1_1xbString_a71c7aafa0d523c72cbe58c474be2270a}}
+\index{xb::xbString@{xb::xbString}!operator$<$@{operator$<$}}
+\index{operator$<$@{operator$<$}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{operator$<$()}{operator<()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+String\+::operator$<$ (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s }\end{DoxyParamCaption}) const}
+
+
+
+operator \texorpdfstring{$<$}{<}
+
+
+\begin{DoxyParams}{Parameters}
+{\em s} & String to compare \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+xb\+True -\/ Left string is less than the right string.~\newline
+ zb\+False -\/ Left string is not less than the right string.~\newline
+
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a461f245e60cddfdf5f78a972a46e5880}\label{classxb_1_1xbString_a461f245e60cddfdf5f78a972a46e5880}}
+\index{xb::xbString@{xb::xbString}!operator$<$=@{operator$<$=}}
+\index{operator$<$=@{operator$<$=}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{operator$<$=()}{operator<=()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+String\+::operator$<$= (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s }\end{DoxyParamCaption}) const}
+
+
+
+operator \texorpdfstring{$<$}{<}=
+
+
+\begin{DoxyParams}{Parameters}
+{\em s} & String to compare \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+xb\+True -\/ Left string is less than or equal to the right string.~\newline
+ zb\+False -\/ Left string is not less than or equal to the right string.~\newline
+
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a84ae7d16c5d73c5aa2270aa9895a7f7c}\label{classxb_1_1xbString_a84ae7d16c5d73c5aa2270aa9895a7f7c}}
+\index{xb::xbString@{xb::xbString}!operator=@{operator=}}
+\index{operator=@{operator=}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{operator=()}{operator=()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::operator= (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s }\end{DoxyParamCaption})}
+
+
+
+Set operator =.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s} & -\/ Set the string to the string on the right of the equal sign. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbString_a4f69d11cbd43edf71725a606d0ca8f40}\label{classxb_1_1xbString_a4f69d11cbd43edf71725a606d0ca8f40}}
+\index{xb::xbString@{xb::xbString}!operator=@{operator=}}
+\index{operator=@{operator=}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{operator=()}{operator=()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::operator= (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s }\end{DoxyParamCaption})}
+
+
+
+Set operator =.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s} & -\/ Set the string to the string on the right of the equal sign. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbString_a94031269af3c433393d4cf0ff9b4be38}\label{classxb_1_1xbString_a94031269af3c433393d4cf0ff9b4be38}}
+\index{xb::xbString@{xb::xbString}!operator==@{operator==}}
+\index{operator==@{operator==}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{operator==()}{operator==()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+String\+::operator== (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s }\end{DoxyParamCaption}) const}
+
+
+
+operator ==
+
+
+\begin{DoxyParams}{Parameters}
+{\em s} & String to compare \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+xb\+True -\/ Strings match.~\newline
+ zb\+False -\/ Strings don\textquotesingle{}t match.~\newline
+
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a2df3ed2fc9456214f5fd2fcf77b69bc1}\label{classxb_1_1xbString_a2df3ed2fc9456214f5fd2fcf77b69bc1}}
+\index{xb::xbString@{xb::xbString}!operator==@{operator==}}
+\index{operator==@{operator==}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{operator==()}{operator==()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+String\+::operator== (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s }\end{DoxyParamCaption}) const}
+
+
+
+operator ==
+
+
+\begin{DoxyParams}{Parameters}
+{\em s} & String to compare \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+xb\+True -\/ Strings match.~\newline
+ zb\+False -\/ Strings don\textquotesingle{}t match.~\newline
+
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_ae46f6a45da5686b607a4edf2786a2fff}\label{classxb_1_1xbString_ae46f6a45da5686b607a4edf2786a2fff}}
+\index{xb::xbString@{xb::xbString}!operator$>$@{operator$>$}}
+\index{operator$>$@{operator$>$}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{operator$>$()}{operator>()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+String\+::operator$>$ (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s }\end{DoxyParamCaption}) const}
+
+
+
+operator \texorpdfstring{$>$}{>}
+
+
+\begin{DoxyParams}{Parameters}
+{\em s} & String to compare \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+xb\+True -\/ Left string is greater than the right string.~\newline
+ zb\+False -\/ Left string is not greater than the right string.~\newline
+
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a8f16643cb7ba3ee9cf685422c9ea0e67}\label{classxb_1_1xbString_a8f16643cb7ba3ee9cf685422c9ea0e67}}
+\index{xb::xbString@{xb::xbString}!operator$>$=@{operator$>$=}}
+\index{operator$>$=@{operator$>$=}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{operator$>$=()}{operator>=()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+String\+::operator$>$= (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s }\end{DoxyParamCaption}) const}
+
+
+
+operator \texorpdfstring{$>$}{>}=
+
+
+\begin{DoxyParams}{Parameters}
+{\em s} & String to compare \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+xb\+True -\/ Left string is greater than or equal to the right string.~\newline
+ zb\+False -\/ Left string is not greater than or equal to the right string.~\newline
+
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a4deaa68d9571753349c29baacb5613e8}\label{classxb_1_1xbString_a4deaa68d9571753349c29baacb5613e8}}
+\index{xb::xbString@{xb::xbString}!operator\mbox{[}\mbox{]}@{operator[]}}
+\index{operator\mbox{[}\mbox{]}@{operator[]}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{operator[]()}{operator[]()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily char \& xb\+::xb\+String\+::operator\mbox{[}$\,$\mbox{]} (\begin{DoxyParamCaption}\item[{xb\+Int32}]{n }\end{DoxyParamCaption}) const}
+
+
+
+operator \mbox{[}\mbox{]}
+
+
+\begin{DoxyParams}{Parameters}
+{\em n} & -\/ Offset into the string of the byte to retrieve. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+c -\/ The character to return from the offset within the \mbox{[}\mbox{]} brackets.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_abe45e463226ac8e18550ced18c5a9df3}\label{classxb_1_1xbString_abe45e463226ac8e18550ced18c5a9df3}}
+\index{xb::xbString@{xb::xbString}!operator\mbox{[}\mbox{]}@{operator[]}}
+\index{operator\mbox{[}\mbox{]}@{operator[]}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{operator[]()}{operator[]()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily char \& xb\+::xb\+String\+::operator\mbox{[}$\,$\mbox{]} (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{n }\end{DoxyParamCaption}) const}
+
+
+
+operator \mbox{[}\mbox{]}
+
+
+\begin{DoxyParams}{Parameters}
+{\em n} & -\/ Offset into the string of the byte to retrieve. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+c -\/ The character to return from the offset within the \mbox{[}\mbox{]} brackets.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a6a09cfed22066b0c72432f26960f9e7b}\label{classxb_1_1xbString_a6a09cfed22066b0c72432f26960f9e7b}}
+\index{xb::xbString@{xb::xbString}!PadLeft@{PadLeft}}
+\index{PadLeft@{PadLeft}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{PadLeft()}{PadLeft()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Pad\+Left (\begin{DoxyParamCaption}\item[{char}]{c, }\item[{xb\+UInt32}]{ul\+New\+Len }\end{DoxyParamCaption})}
+
+
+
+Left pad string.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c} & Padding character. \\
+\hline
+{\em ul\+New\+Len} & New string length. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Reference to this string.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_aba13f0c77eb6c4a22996039569fad284}\label{classxb_1_1xbString_aba13f0c77eb6c4a22996039569fad284}}
+\index{xb::xbString@{xb::xbString}!PadRight@{PadRight}}
+\index{PadRight@{PadRight}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{PadRight()}{PadRight()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Pad\+Right (\begin{DoxyParamCaption}\item[{char}]{c, }\item[{xb\+UInt32}]{ul\+New\+Len }\end{DoxyParamCaption})}
+
+
+
+Right pad string.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c} & Padding character. \\
+\hline
+{\em ul\+New\+Len} & New string length. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Reference to this string.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a3baf59d15099589ff631995f129e582b}\label{classxb_1_1xbString_a3baf59d15099589ff631995f129e582b}}
+\index{xb::xbString@{xb::xbString}!Pos@{Pos}}
+\index{Pos@{Pos}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{Pos()}{Pos()}\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}}
+{\footnotesize\ttfamily xb\+UInt32 xb\+::xb\+String\+::\+Pos (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption}) const}
+
+
+
+Determine position of a given character.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c} & Seek character \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Position within string. Returns 0 if not found.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a1b586890138da8bf0e23090bd8b34581}\label{classxb_1_1xbString_a1b586890138da8bf0e23090bd8b34581}}
+\index{xb::xbString@{xb::xbString}!Pos@{Pos}}
+\index{Pos@{Pos}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{Pos()}{Pos()}\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}}
+{\footnotesize\ttfamily xb\+UInt32 xb\+::xb\+String\+::\+Pos (\begin{DoxyParamCaption}\item[{char}]{c, }\item[{xb\+UInt32}]{ul\+Start\+Pos }\end{DoxyParamCaption}) const}
+
+
+
+Determine position of a given character.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c} & Seek character \\
+\hline
+{\em ul\+Start\+Pos} & starting position for search, first position is 1 \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Position within string. Returns 0 if not found.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a8705d7277b72f5aa98021e84438914da}\label{classxb_1_1xbString_a8705d7277b72f5aa98021e84438914da}}
+\index{xb::xbString@{xb::xbString}!Pos@{Pos}}
+\index{Pos@{Pos}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{Pos()}{Pos()}\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}}
+{\footnotesize\ttfamily xb\+UInt32 xb\+::xb\+String\+::\+Pos (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s }\end{DoxyParamCaption}) const}
+
+
+
+Determine position of a given substring.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s} & Substring \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Position within string. Returns 0 if not found.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a1bae6fa8f608261f6e889616482f6e39}\label{classxb_1_1xbString_a1bae6fa8f608261f6e889616482f6e39}}
+\index{xb::xbString@{xb::xbString}!PutAt@{PutAt}}
+\index{PutAt@{PutAt}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{PutAt()}{PutAt()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Put\+At (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{ul\+Pos, }\item[{char}]{c }\end{DoxyParamCaption})}
+
+
+
+Insert character into string.
+
+
+\begin{DoxyParams}{Parameters}
+{\em ul\+Pos} & Insertion position. \\
+\hline
+{\em c} & Character to insert. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Reference to this string.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_afaac65eaa6d9ef1596d6a0e7b91ed0f2}\label{classxb_1_1xbString_afaac65eaa6d9ef1596d6a0e7b91ed0f2}}
+\index{xb::xbString@{xb::xbString}!Remove@{Remove}}
+\index{Remove@{Remove}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{Remove()}{Remove()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Remove (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{ul\+Start\+Pos, }\item[{xb\+UInt32}]{ul\+Del\+Size }\end{DoxyParamCaption})}
+
+
+
+Remove portion of string.
+
+
+\begin{DoxyParams}{Parameters}
+{\em ul\+Start\+Pos} & Starting position for removal operation. \\
+\hline
+{\em ul\+Del\+Size} & Size of deletion. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Reference to string.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_ac721d643c60b5c5acf60c2bce99596fa}\label{classxb_1_1xbString_ac721d643c60b5c5acf60c2bce99596fa}}
+\index{xb::xbString@{xb::xbString}!Replace@{Replace}}
+\index{Replace@{Replace}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{Replace()}{Replace()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Replace (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s\+Replace, }\item[{const char $\ast$}]{s\+Replace\+With, }\item[{xb\+Int16}]{i\+Option = {\ttfamily 0} }\end{DoxyParamCaption})}
+
+
+
+Replace a value within a string with another value.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Replace} & -\/ Character string to replace. \\
+\hline
+{\em s\+Replace\+With} & -\/ Character string to replace with \\
+\hline
+{\em i\+Option} & -\/ 0 = All occurrences, 1 = first occurrence \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Reference to this string.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_aa6d346ab04e5bb8852f0bb996163a35e}\label{classxb_1_1xbString_aa6d346ab04e5bb8852f0bb996163a35e}}
+\index{xb::xbString@{xb::xbString}!Resize@{Resize}}
+\index{Resize@{Resize}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{Resize()}{Resize()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Resize (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{ul\+Size }\end{DoxyParamCaption})}
+
+
+
+Resize a string.
+
+
+\begin{DoxyParams}{Parameters}
+{\em ul\+Size} & -\/ New string size, including null termination byte. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Reference to this string.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_aaf330188d67c347ecae0d16f65b22077}\label{classxb_1_1xbString_aaf330188d67c347ecae0d16f65b22077}}
+\index{xb::xbString@{xb::xbString}!Rtrim@{Rtrim}}
+\index{Rtrim@{Rtrim}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{Rtrim()}{Rtrim()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Rtrim (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+
+
+Right trim the string.
+
+This routine removes any trailing white space on the string.
+
+\begin{DoxyReturn}{Returns}
+Reference to string.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_ab85753d2c39882e946a8468cbb587700}\label{classxb_1_1xbString_ab85753d2c39882e946a8468cbb587700}}
+\index{xb::xbString@{xb::xbString}!Set@{Set}}
+\index{Set@{Set}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{Set()}{Set()}\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Set (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s }\end{DoxyParamCaption})}
+
+
+
+Set the value of the string.
+
+Note\+: This routine fails if you try to set the string to itself or some part of itself.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s} & Value to set the string. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Reference to string.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a6eba6ccd0c805a22516de2c18a30f8a3}\label{classxb_1_1xbString_a6eba6ccd0c805a22516de2c18a30f8a3}}
+\index{xb::xbString@{xb::xbString}!Set@{Set}}
+\index{Set@{Set}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{Set()}{Set()}\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Set (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s, }\item[{xb\+UInt32}]{ul\+Size }\end{DoxyParamCaption})}
+
+
+
+Set the value of the string.
+
+Note\+: This routine fails if you try to set the string to itself or some part of itself.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s} & Value to set the string. \\
+\hline
+{\em ul\+Size} & Maximum size of resultant string. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Reference to string.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_ac0d08bd688fd0e3707e32886d0dfeb09}\label{classxb_1_1xbString_ac0d08bd688fd0e3707e32886d0dfeb09}}
+\index{xb::xbString@{xb::xbString}!Set@{Set}}
+\index{Set@{Set}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{Set()}{Set()}\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Set (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s }\end{DoxyParamCaption})}
+
+
+
+Set the value of the string.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s} & Value to set the string. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Reference to string.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a3af5b1f111f94b0667551fcbd1d97abd}\label{classxb_1_1xbString_a3af5b1f111f94b0667551fcbd1d97abd}}
+\index{xb::xbString@{xb::xbString}!SetNum@{SetNum}}
+\index{SetNum@{SetNum}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{SetNum()}{SetNum()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Set\+Num (\begin{DoxyParamCaption}\item[{xb\+Int32}]{l\+Num }\end{DoxyParamCaption})}
+
+
+
+Set the string to long integer numeric value.
+
+
+\begin{DoxyParams}{Parameters}
+{\em l\+Num} & Value to set the string \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Reference to this string.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a9e9bfa29d86377b915f1628aeb0e9195}\label{classxb_1_1xbString_a9e9bfa29d86377b915f1628aeb0e9195}}
+\index{xb::xbString@{xb::xbString}!Sprintf@{Sprintf}}
+\index{Sprintf@{Sprintf}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{Sprintf()}{Sprintf()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Sprintf (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s\+Format, }\item[{}]{... }\end{DoxyParamCaption})}
+
+
+
+Printf routine for formatting a string.
+
+See documentation on the standard C printf function for how to use this.
+
+My\+String.\+Sprintf( \char`\"{}a number \%d some text \%s\char`\"{}, 100, \char`\"{}test text data\char`\"{} );
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Format} & A format specifier \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Reference to a formatted string
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a6715f4c0010f3ab487c9d787838a29b3}\label{classxb_1_1xbString_a6715f4c0010f3ab487c9d787838a29b3}}
+\index{xb::xbString@{xb::xbString}!Str@{Str}}
+\index{Str@{Str}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{Str()}{Str()}}
+{\footnotesize\ttfamily const char $\ast$ xb\+::xb\+String\+::\+Str (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+
+
+Return string data.
+
+\begin{DoxyReturn}{Returns}
+char $\ast$ to string data or NULL if string is empty
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a3bc9e856c34f0c240a6e36e5b6e3ea7b}\label{classxb_1_1xbString_a3bc9e856c34f0c240a6e36e5b6e3ea7b}}
+\index{xb::xbString@{xb::xbString}!strncpy@{strncpy}}
+\index{strncpy@{strncpy}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{strncpy()}{strncpy()}}
+{\footnotesize\ttfamily char $\ast$ xb\+::xb\+String\+::strncpy (\begin{DoxyParamCaption}\item[{char $\ast$}]{c\+Dest, }\item[{xb\+UInt32}]{n }\end{DoxyParamCaption}) const}
+
+
+
+Copy all or part of string to character array.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c\+Dest} & pointer to destination buffer. \\
+\hline
+{\em n} & Number of bytest to copy. It is the responsibility of the application to verify the buffer is large enough to hold the string contents. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+char $\ast$ to result
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a054683872e1f05d11c2cf8683a63a6fe}\label{classxb_1_1xbString_a054683872e1f05d11c2cf8683a63a6fe}}
+\index{xb::xbString@{xb::xbString}!SwapChars@{SwapChars}}
+\index{SwapChars@{SwapChars}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{SwapChars()}{SwapChars()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Swap\+Chars (\begin{DoxyParamCaption}\item[{char}]{c\+From, }\item[{char}]{c\+To }\end{DoxyParamCaption})}
+
+
+
+Swap characters.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c\+From} & character to replace. \\
+\hline
+{\em c\+To} & character to replace with. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Reference to this string.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a602cac1a6ef3f6b52f587ac4c0ef4fb2}\label{classxb_1_1xbString_a602cac1a6ef3f6b52f587ac4c0ef4fb2}}
+\index{xb::xbString@{xb::xbString}!ToLowerCase@{ToLowerCase}}
+\index{ToLowerCase@{ToLowerCase}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{ToLowerCase()}{ToLowerCase()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+To\+Lower\+Case (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+
+
+Replace all upper case charaters with lower case characters.
+
+\begin{DoxyReturn}{Returns}
+Reference to this string.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a68001d0a44e6b4fe61e29a4e41ded9d4}\label{classxb_1_1xbString_a68001d0a44e6b4fe61e29a4e41ded9d4}}
+\index{xb::xbString@{xb::xbString}!ToUpperCase@{ToUpperCase}}
+\index{ToUpperCase@{ToUpperCase}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{ToUpperCase()}{ToUpperCase()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+To\+Upper\+Case (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+
+
+Replace all lower case charaters with lower case characters.
+
+\begin{DoxyReturn}{Returns}
+Reference to this string.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_abc9bd33687d4e03ca52d77885721d626}\label{classxb_1_1xbString_abc9bd33687d4e03ca52d77885721d626}}
+\index{xb::xbString@{xb::xbString}!Trim@{Trim}}
+\index{Trim@{Trim}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{Trim()}{Trim()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Trim (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+
+
+Trim all leading and trailing white space from string.
+
+\begin{DoxyReturn}{Returns}
+Reference to string.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a72b16c15fd8822efaa5f158c34df7b1e}\label{classxb_1_1xbString_a72b16c15fd8822efaa5f158c34df7b1e}}
+\index{xb::xbString@{xb::xbString}!ValidLogicalValue@{ValidLogicalValue}}
+\index{ValidLogicalValue@{ValidLogicalValue}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{ValidLogicalValue()}{ValidLogicalValue()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+String\+::\+Valid\+Logical\+Value (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+
+
+Check for valid logical field data.
+
+Valid logical data is one \textquotesingle{}T\textquotesingle{}, \textquotesingle{}F\textquotesingle{}, \textquotesingle{}N\textquotesingle{} or \textquotesingle{}Y\textquotesingle{}.~\newline
+
+
+\begin{DoxyReturn}{Returns}
+xb\+True if the data is valid logical data.~\newline
+ xb\+False if not valid logical data.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_aeed920d2a25111f776ddde2d530eb81b}\label{classxb_1_1xbString_aeed920d2a25111f776ddde2d530eb81b}}
+\index{xb::xbString@{xb::xbString}!ValidNumericValue@{ValidNumericValue}}
+\index{ValidNumericValue@{ValidNumericValue}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{ValidNumericValue()}{ValidNumericValue()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+String\+::\+Valid\+Numeric\+Value (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+
+
+This function returns true if the data is valid numeric data.
+
+\begin{DoxyReturn}{Returns}
+xb\+True if valid numeric data.~\newline
+ xb\+False if not valid numeric daata.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a2fd30956a26a260d1ef6fdbe73dd93f9}\label{classxb_1_1xbString_a2fd30956a26a260d1ef6fdbe73dd93f9}}
+\index{xb::xbString@{xb::xbString}!ZapChar@{ZapChar}}
+\index{ZapChar@{ZapChar}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{ZapChar()}{ZapChar()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Zap\+Char (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption})}
+
+
+
+Remove every instance of a character from a string.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c} & character to remove from string. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Reference to this stirng.\+void
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_addc3a470f6cd85d4c21bf9da38cf5ac9}\label{classxb_1_1xbString_addc3a470f6cd85d4c21bf9da38cf5ac9}}
+\index{xb::xbString@{xb::xbString}!ZapLeadingChar@{ZapLeadingChar}}
+\index{ZapLeadingChar@{ZapLeadingChar}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{ZapLeadingChar()}{ZapLeadingChar()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Zap\+Leading\+Char (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption})}
+
+
+
+Remove leading character from a string.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c} & character to remove from beginning of string. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Reference to this string.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_afe3415bfa2e1089b792aeda0462fb99e}\label{classxb_1_1xbString_afe3415bfa2e1089b792aeda0462fb99e}}
+\index{xb::xbString@{xb::xbString}!ZapTrailingChar@{ZapTrailingChar}}
+\index{ZapTrailingChar@{ZapTrailingChar}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{ZapTrailingChar()}{ZapTrailingChar()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Zap\+Trailing\+Char (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption})}
+
+
+
+Remove trailing character from a string.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c} & character to remove from ending of string. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Reference to this string.
+\end{DoxyReturn}
+
+
+\doxysubsection{Friends And Related Function Documentation}
+\mbox{\Hypertarget{classxb_1_1xbString_a3fa915061156521e9dd772a8d7e5f8fb}\label{classxb_1_1xbString_a3fa915061156521e9dd772a8d7e5f8fb}}
+\index{xb::xbString@{xb::xbString}!operator$<$$<$@{operator$<$$<$}}
+\index{operator$<$$<$@{operator$<$$<$}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{operator$<$$<$}{operator<<}}
+{\footnotesize\ttfamily std\+::ostream \& operator$<$$<$ (\begin{DoxyParamCaption}\item[{std\+::ostream \&}]{os, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [friend]}}
+
+
+
+Stream insertion operator \texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<}.
+
+std\+::cout \texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<} My\+String \texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<} std\+::endl;
+
+
+\begin{DoxyParams}{Parameters}
+{\em os} & Output stream \\
+\hline
+{\em s} & String to send to output stream \\
+\hline
+\end{DoxyParams}
+
+
+The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
+\item
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbstring_8h}{xbstring.\+h}}\item
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbstring_8cpp}{xbstring.\+cpp}}\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/classxb_1_1xbTblMgr.eps b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbTblMgr.eps
index 12fb841..12fb841 100644
--- a/docs/doxygen/latex/classxb_1_1xbTblMgr.eps
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbTblMgr.eps
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbTblMgr.pdf b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbTblMgr.pdf
new file mode 100644
index 0000000..f31039e
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbTblMgr.pdf
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbTblMgr.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbTblMgr.tex
new file mode 100644
index 0000000..bbf8bbf
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbTblMgr.tex
@@ -0,0 +1,491 @@
+\hypertarget{classxb_1_1xbTblMgr}{}\doxysection{xb\+::xb\+Tbl\+Mgr Class Reference}
+\label{classxb_1_1xbTblMgr}\index{xb::xbTblMgr@{xb::xbTblMgr}}
+
+
+{\ttfamily \#include $<$xbtblmgr.\+h$>$}
+
+Inheritance diagram for xb\+::xb\+Tbl\+Mgr\+:\begin{figure}[H]
+\begin{center}
+\leavevmode
+\includegraphics[height=3.000000cm]{classxb_1_1xbTblMgr}
+\end{center}
+\end{figure}
+\doxysubsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\hyperlink{classxb_1_1xbTblMgr_aad83f5ecc184ca6cbdfc6f356b598d6c}{xb\+Tbl\+Mgr}} ()
+\item
+\mbox{\hyperlink{classxb_1_1xbTblMgr_aad6be32d7b3378c71d47fa27ebfe6cbf}{$\sim$xb\+Tbl\+Mgr}} ()
+\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbTblMgr_af16832ff2bfaee09265652e0fc03709a}{Add\+Tbl\+To\+Tbl\+List}} (\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$d, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Fq\+Tbl\+Name)
+\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbTblMgr_a2033188e9b08778188a034a6fc90ca85}{Add\+Tbl\+To\+Tbl\+List}} (\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$d, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Fq\+Tbl\+Name, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Tbl\+Alias)
+\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbTblMgr_a5eebffb9e8cc64141e35c2622045cb50}{Display\+Table\+List}} () const
+\item
+\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$ \mbox{\hyperlink{classxb_1_1xbTblMgr_ad8a5d28a2ee6720a9aa74bcb45662cf5}{Get\+Dbf\+Ptr}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Tbl\+Alias) const
+\item
+\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$ \mbox{\hyperlink{classxb_1_1xbTblMgr_a801dfecf7fc216954b4197b2c31b25d6}{Get\+Dbf\+Ptr}} (xb\+Int16 s\+Item\+No) const
+\item
+\mbox{\hyperlink{structxb_1_1xbTblList}{xb\+Tbl\+List}} $\ast$ \mbox{\hyperlink{classxb_1_1xbTblMgr_acbf148ddba4297021cfb980a161ebef9}{Get\+Tbl\+List\+Entry}} (\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$d)
+\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbTblMgr_ad0d2d4adabc0dc0e761cfdee63c84069}{Get\+Open\+Table\+Count}} () const
+\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbTblMgr_ac8eaef41acf08911b90f900aac8e70af}{Remove\+Tbl\+From\+Tbl\+List}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Tbl\+Alias)
+\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbTblMgr_a3d82b6e73d5c0bc8cac22b9a260389c1}{Remove\+Tbl\+From\+Tbl\+List}} (\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$d)
+\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}{Display\+Error}} (xb\+Int16 Error\+Code) const
+\begin{DoxyCompactList}\small\item\em Display error message on console for a given error number. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a6fbb9c3a550ab0b3378f9586a57791d2}{Get\+Default\+Date\+Format}} () const
+\begin{DoxyCompactList}\small\item\em Get the default date format. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}{Get\+Data\+Directory}} () const
+\begin{DoxyCompactList}\small\item\em Get the current data directory. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_abfaeef85935331073d213465bb362a61}{Get\+Temp\+Directory}} () const
+\begin{DoxyCompactList}\small\item\em Get the current temp directory. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}{Get\+Home\+Dir}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Home\+Dir\+Out)
+\begin{DoxyCompactList}\small\item\em Get home directory. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}{Get\+Endian\+Type}} () const
+\begin{DoxyCompactList}\small\item\em Get the Endian type. \end{DoxyCompactList}\item
+const char $\ast$ \mbox{\hyperlink{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}{Get\+Error\+Message}} (xb\+Int16 Error\+Code) const
+\begin{DoxyCompactList}\small\item\em Get an error message. \end{DoxyCompactList}\item
+char \mbox{\hyperlink{classxb_1_1xbSsv_a63cee13b473ee13970e93b11837b9e35}{Get\+Path\+Separator}} () const
+\begin{DoxyCompactList}\small\item\em Get the OS dependent path separator. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}{Set\+Data\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Data\+Directory)
+\begin{DoxyCompactList}\small\item\em Set the data directory. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}{Set\+Default\+Date\+Format}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Default\+Date\+Format)
+\begin{DoxyCompactList}\small\item\em Set the default date format. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a17c229a20ef9ab4034df8f9cd657adb2}{Set\+Temp\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Temp\+Directory)
+\begin{DoxyCompactList}\small\item\em Set the temp directory. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}{Bit\+Set}} (unsigned char c, xb\+Int16 i\+Bit\+No) const
+\begin{DoxyCompactList}\small\item\em Check a bit in a one byte field and see if it is set. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}{Bit\+Dump}} (unsigned char c) const
+\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}{Bit\+Dump}} (char c) const
+\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}{Get\+Default\+Auto\+Commit}} () const
+\begin{DoxyCompactList}\small\item\em Get the default auto commit setting. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}{Set\+Default\+Auto\+Commit}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Default\+Auto\+Commit)
+\begin{DoxyCompactList}\small\item\em Set the default auto commit. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}{Get\+Log\+Directory}} () const
+\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}{Get\+Log\+File\+Name}} () const
+\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}{Set\+Log\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Log\+Directory)
+\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a7f05738e7dfd759e89990242ef503544}{Set\+Log\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Log\+File\+Name)
+\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}{Get\+Multi\+User}} () const
+\begin{DoxyCompactList}\small\item\em Get the multi user setting. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}{Set\+Multi\+User}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Multi\+User)
+\begin{DoxyCompactList}\small\item\em Get the multi user setting. \end{DoxyCompactList}\end{DoxyCompactItemize}
+\doxysubsection*{Static Public Attributes}
+\begin{DoxyCompactItemize}
+\item
+static const char $\ast$ \mbox{\hyperlink{classxb_1_1xbSsv_a6219f1b5e24ea12fe158cd5aea56988e}{Error\+Code\+Text}} \mbox{[}$\,$\mbox{]}
+\end{DoxyCompactItemize}
+\doxysubsection*{Protected Member Functions}
+\begin{DoxyCompactItemize}
+\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a904ec348fd029d4a76e72b8fde636108}{Set\+Endian\+Type}} ()
+\begin{DoxyCompactList}\small\item\em Set the endian type. \end{DoxyCompactList}\end{DoxyCompactItemize}
+\doxysubsection*{Static Protected Attributes}
+\begin{DoxyCompactItemize}
+\item
+static xb\+Int16 \mbox{\hyperlink{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}{i\+Endian\+Type}} = 0
+\item
+static \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \mbox{\hyperlink{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}{s\+Null\+String}} = \char`\"{}\char`\"{}
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Constructor \& Destructor Documentation}
+\mbox{\Hypertarget{classxb_1_1xbTblMgr_aad83f5ecc184ca6cbdfc6f356b598d6c}\label{classxb_1_1xbTblMgr_aad83f5ecc184ca6cbdfc6f356b598d6c}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!xbTblMgr@{xbTblMgr}}
+\index{xbTblMgr@{xbTblMgr}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{xbTblMgr()}{xbTblMgr()}}
+{\footnotesize\ttfamily xb\+::xb\+Tbl\+Mgr\+::xb\+Tbl\+Mgr (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{classxb_1_1xbTblMgr_aad6be32d7b3378c71d47fa27ebfe6cbf}\label{classxb_1_1xbTblMgr_aad6be32d7b3378c71d47fa27ebfe6cbf}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!````~xbTblMgr@{$\sim$xbTblMgr}}
+\index{````~xbTblMgr@{$\sim$xbTblMgr}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{$\sim$xbTblMgr()}{~xbTblMgr()}}
+{\footnotesize\ttfamily xb\+::xb\+Tbl\+Mgr\+::$\sim$xb\+Tbl\+Mgr (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+
+
+\doxysubsection{Member Function Documentation}
+\mbox{\Hypertarget{classxb_1_1xbTblMgr_af16832ff2bfaee09265652e0fc03709a}\label{classxb_1_1xbTblMgr_af16832ff2bfaee09265652e0fc03709a}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!AddTblToTblList@{AddTblToTblList}}
+\index{AddTblToTblList@{AddTblToTblList}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{AddTblToTblList()}{AddTblToTblList()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Tbl\+Mgr\+::\+Add\+Tbl\+To\+Tbl\+List (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$}]{d, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Fq\+Tbl\+Name }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{classxb_1_1xbTblMgr_a2033188e9b08778188a034a6fc90ca85}\label{classxb_1_1xbTblMgr_a2033188e9b08778188a034a6fc90ca85}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!AddTblToTblList@{AddTblToTblList}}
+\index{AddTblToTblList@{AddTblToTblList}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{AddTblToTblList()}{AddTblToTblList()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Tbl\+Mgr\+::\+Add\+Tbl\+To\+Tbl\+List (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$}]{d, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Fq\+Tbl\+Name, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Tbl\+Alias }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}\label{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!BitDump@{BitDump}}
+\index{BitDump@{BitDump}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{BitDump()}{BitDump()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Bit\+Dump (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}\label{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!BitDump@{BitDump}}
+\index{BitDump@{BitDump}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{BitDump()}{BitDump()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Bit\+Dump (\begin{DoxyParamCaption}\item[{unsigned char}]{c }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}\label{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!BitSet@{BitSet}}
+\index{BitSet@{BitSet}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{BitSet()}{BitSet()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Ssv\+::\+Bit\+Set (\begin{DoxyParamCaption}\item[{unsigned char}]{c, }\item[{xb\+Int16}]{i\+Bit\+No }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Check a bit in a one byte field and see if it is set.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c} & One byte char field to examine. \\
+\hline
+{\em i\+Bit\+No} & which bit to examine. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+xb\+True Bit is set~\newline
+ xb\+False Bit is not set
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}\label{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!DisplayError@{DisplayError}}
+\index{DisplayError@{DisplayError}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{DisplayError()}{DisplayError()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Display\+Error (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Error\+Code }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Display error message on console for a given error number.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Error\+Code} & Error number to reference \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbTblMgr_a5eebffb9e8cc64141e35c2622045cb50}\label{classxb_1_1xbTblMgr_a5eebffb9e8cc64141e35c2622045cb50}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!DisplayTableList@{DisplayTableList}}
+\index{DisplayTableList@{DisplayTableList}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{DisplayTableList()}{DisplayTableList()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Tbl\+Mgr\+::\+Display\+Table\+List (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}\label{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!GetDataDirectory@{GetDataDirectory}}
+\index{GetDataDirectory@{GetDataDirectory}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{GetDataDirectory()}{GetDataDirectory()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Data\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the current data directory.
+
+\begin{DoxyReturn}{Returns}
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing the current data directory where the database files are stored.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbTblMgr_ad8a5d28a2ee6720a9aa74bcb45662cf5}\label{classxb_1_1xbTblMgr_ad8a5d28a2ee6720a9aa74bcb45662cf5}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!GetDbfPtr@{GetDbfPtr}}
+\index{GetDbfPtr@{GetDbfPtr}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{GetDbfPtr()}{GetDbfPtr()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$ xb\+::xb\+Tbl\+Mgr\+::\+Get\+Dbf\+Ptr (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Tbl\+Alias }\end{DoxyParamCaption}) const}
+
+\mbox{\Hypertarget{classxb_1_1xbTblMgr_a801dfecf7fc216954b4197b2c31b25d6}\label{classxb_1_1xbTblMgr_a801dfecf7fc216954b4197b2c31b25d6}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!GetDbfPtr@{GetDbfPtr}}
+\index{GetDbfPtr@{GetDbfPtr}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{GetDbfPtr()}{GetDbfPtr()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$ xb\+::xb\+Tbl\+Mgr\+::\+Get\+Dbf\+Ptr (\begin{DoxyParamCaption}\item[{xb\+Int16}]{s\+Item\+No }\end{DoxyParamCaption}) const}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}\label{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!GetDefaultAutoCommit@{GetDefaultAutoCommit}}
+\index{GetDefaultAutoCommit@{GetDefaultAutoCommit}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{GetDefaultAutoCommit()}{GetDefaultAutoCommit()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Ssv\+::\+Get\+Default\+Auto\+Commit (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the default auto commit setting.
+
+When auto commit is enabled, the library will automatically post any updates when moving off an updated record or closing files. If auto commit is disabled, the application program will need to explicitly update the tables using using dbf-\/\texorpdfstring{$>$}{>}Put() and dbf-\/\texorpdfstring{$>$}{>}Append\+Record().
+
+\begin{DoxyReturn}{Returns}
+xb\+True if auto commit is turned on~\newline
+ xb\+False is auto commit is turned off
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a6fbb9c3a550ab0b3378f9586a57791d2}\label{classxb_1_1xbSsv_a6fbb9c3a550ab0b3378f9586a57791d2}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!GetDefaultDateFormat@{GetDefaultDateFormat}}
+\index{GetDefaultDateFormat@{GetDefaultDateFormat}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{GetDefaultDateFormat()}{GetDefaultDateFormat()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Default\+Date\+Format (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the default date format.
+
+\begin{DoxyReturn}{Returns}
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing the default date format.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}\label{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!GetEndianType@{GetEndianType}}
+\index{GetEndianType@{GetEndianType}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{GetEndianType()}{GetEndianType()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Ssv\+::\+Get\+Endian\+Type (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the Endian type.
+
+\begin{DoxyReturn}{Returns}
+B -\/ Big endian~\newline
+ L -\/ Little endian~\newline
+
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}\label{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!GetErrorMessage@{GetErrorMessage}}
+\index{GetErrorMessage@{GetErrorMessage}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{GetErrorMessage()}{GetErrorMessage()}}
+{\footnotesize\ttfamily const char $\ast$ xb\+::xb\+Ssv\+::\+Get\+Error\+Message (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Error\+Code }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get an error message.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Error\+Code} & Error\+Code is the error number of description to be returned. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Returns a pointer to a string containing a text description for the error code.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}\label{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!GetHomeDir@{GetHomeDir}}
+\index{GetHomeDir@{GetHomeDir}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{GetHomeDir()}{GetHomeDir()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Get\+Home\+Dir (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Home\+Dir\+Out }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get home directory.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Home\+Dir\+Out} & -\/ Output home directory for current user. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}\label{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!GetLogDirectory@{GetLogDirectory}}
+\index{GetLogDirectory@{GetLogDirectory}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{GetLogDirectory()}{GetLogDirectory()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Log\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}\label{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!GetLogFileName@{GetLogFileName}}
+\index{GetLogFileName@{GetLogFileName}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{GetLogFileName()}{GetLogFileName()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Log\+File\+Name (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}\label{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!GetMultiUser@{GetMultiUser}}
+\index{GetMultiUser@{GetMultiUser}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{GetMultiUser()}{GetMultiUser()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Ssv\+::\+Get\+Multi\+User (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the multi user setting.
+
+\begin{DoxyReturn}{Returns}
+xb\+True -\/ Multi user mode turned on.~\newline
+ xb\+False -\/ Multi user mode turned off.~\newline
+
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbTblMgr_ad0d2d4adabc0dc0e761cfdee63c84069}\label{classxb_1_1xbTblMgr_ad0d2d4adabc0dc0e761cfdee63c84069}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!GetOpenTableCount@{GetOpenTableCount}}
+\index{GetOpenTableCount@{GetOpenTableCount}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{GetOpenTableCount()}{GetOpenTableCount()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Tbl\+Mgr\+::\+Get\+Open\+Table\+Count (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_a63cee13b473ee13970e93b11837b9e35}\label{classxb_1_1xbSsv_a63cee13b473ee13970e93b11837b9e35}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!GetPathSeparator@{GetPathSeparator}}
+\index{GetPathSeparator@{GetPathSeparator}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{GetPathSeparator()}{GetPathSeparator()}}
+{\footnotesize\ttfamily char xb\+::xb\+Ssv\+::\+Get\+Path\+Separator (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the OS dependent path separator.
+
+\begin{DoxyReturn}{Returns}
+Returns \textquotesingle{}\textbackslash{}\textquotesingle{} for windows environment, otherwise returns \textquotesingle{}/\textquotesingle{}.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbTblMgr_acbf148ddba4297021cfb980a161ebef9}\label{classxb_1_1xbTblMgr_acbf148ddba4297021cfb980a161ebef9}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!GetTblListEntry@{GetTblListEntry}}
+\index{GetTblListEntry@{GetTblListEntry}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{GetTblListEntry()}{GetTblListEntry()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{structxb_1_1xbTblList}{xb\+Tbl\+List}} $\ast$ xb\+::xb\+Tbl\+Mgr\+::\+Get\+Tbl\+List\+Entry (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$}]{d }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_abfaeef85935331073d213465bb362a61}\label{classxb_1_1xbSsv_abfaeef85935331073d213465bb362a61}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!GetTempDirectory@{GetTempDirectory}}
+\index{GetTempDirectory@{GetTempDirectory}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{GetTempDirectory()}{GetTempDirectory()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Temp\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the current temp directory.
+
+\begin{DoxyReturn}{Returns}
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing the current data directory where the database files are stored.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbTblMgr_ac8eaef41acf08911b90f900aac8e70af}\label{classxb_1_1xbTblMgr_ac8eaef41acf08911b90f900aac8e70af}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!RemoveTblFromTblList@{RemoveTblFromTblList}}
+\index{RemoveTblFromTblList@{RemoveTblFromTblList}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{RemoveTblFromTblList()}{RemoveTblFromTblList()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Tbl\+Mgr\+::\+Remove\+Tbl\+From\+Tbl\+List (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Tbl\+Alias }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{classxb_1_1xbTblMgr_a3d82b6e73d5c0bc8cac22b9a260389c1}\label{classxb_1_1xbTblMgr_a3d82b6e73d5c0bc8cac22b9a260389c1}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!RemoveTblFromTblList@{RemoveTblFromTblList}}
+\index{RemoveTblFromTblList@{RemoveTblFromTblList}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{RemoveTblFromTblList()}{RemoveTblFromTblList()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Tbl\+Mgr\+::\+Remove\+Tbl\+From\+Tbl\+List (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$}]{d }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}\label{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!SetDataDirectory@{SetDataDirectory}}
+\index{SetDataDirectory@{SetDataDirectory}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{SetDataDirectory()}{SetDataDirectory()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Data\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Data\+Directory }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Set the data directory.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Data\+Directory} & Set the data directory. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}\label{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!SetDefaultAutoCommit@{SetDefaultAutoCommit}}
+\index{SetDefaultAutoCommit@{SetDefaultAutoCommit}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{SetDefaultAutoCommit()}{SetDefaultAutoCommit()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Default\+Auto\+Commit (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}}}]{b\+Default\+Auto\+Commit }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Set the default auto commit.
+
+Disabling auto commit requires the application execute explicit updates using dbf-\/\texorpdfstring{$>$}{>}Put() and dbf-\/\texorpdfstring{$>$}{>}Append\+Record(). With auto commit on, the library posts updates automatically when moving off the current record or closing a file.
+
+
+\begin{DoxyParams}{Parameters}
+{\em b\+Default\+Auto\+Commit} & xb\+True -\/ Enable default auto commit.~\newline
+ xb\+False -\/ Disable default auto commit.~\newline
+ \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}\label{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!SetDefaultDateFormat@{SetDefaultDateFormat}}
+\index{SetDefaultDateFormat@{SetDefaultDateFormat}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{SetDefaultDateFormat()}{SetDefaultDateFormat()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Default\+Date\+Format (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Default\+Date\+Format }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Set the default date format.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Default\+Date\+Format} & Set the default date format. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a904ec348fd029d4a76e72b8fde636108}\label{classxb_1_1xbSsv_a904ec348fd029d4a76e72b8fde636108}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!SetEndianType@{SetEndianType}}
+\index{SetEndianType@{SetEndianType}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{SetEndianType()}{SetEndianType()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Endian\+Type (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [protected]}, {\ttfamily [inherited]}}
+
+
+
+Set the endian type.
+
+This routine determines the Endian-\/ness at run time instead of compile time as some processers (ie; Sparc,ARM) can be switched either way. This routine is called automatically by the library at startup and does not need to be called in an application program. \mbox{\Hypertarget{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}\label{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!SetLogDirectory@{SetLogDirectory}}
+\index{SetLogDirectory@{SetLogDirectory}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{SetLogDirectory()}{SetLogDirectory()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Log\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Log\+Directory }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_a7f05738e7dfd759e89990242ef503544}\label{classxb_1_1xbSsv_a7f05738e7dfd759e89990242ef503544}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!SetLogFileName@{SetLogFileName}}
+\index{SetLogFileName@{SetLogFileName}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{SetLogFileName()}{SetLogFileName()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Log\+File\+Name (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Log\+File\+Name }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}\label{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!SetMultiUser@{SetMultiUser}}
+\index{SetMultiUser@{SetMultiUser}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{SetMultiUser()}{SetMultiUser()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Multi\+User (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}}}]{b\+Multi\+User }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the multi user setting.
+
+
+\begin{DoxyParams}{Parameters}
+{\em b\+Multi\+User} & xb\+True -\/ Turn on Multi user mode.~\newline
+ xb\+False -\/ Turn off Multi user mode.~\newline
+ \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a17c229a20ef9ab4034df8f9cd657adb2}\label{classxb_1_1xbSsv_a17c229a20ef9ab4034df8f9cd657adb2}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!SetTempDirectory@{SetTempDirectory}}
+\index{SetTempDirectory@{SetTempDirectory}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{SetTempDirectory()}{SetTempDirectory()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Temp\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Temp\+Directory }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Set the temp directory.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Temp\+Directory} & Set the data direcroty. \\
+\hline
+\end{DoxyParams}
+
+
+\doxysubsection{Field Documentation}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a6219f1b5e24ea12fe158cd5aea56988e}\label{classxb_1_1xbSsv_a6219f1b5e24ea12fe158cd5aea56988e}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!ErrorCodeText@{ErrorCodeText}}
+\index{ErrorCodeText@{ErrorCodeText}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{ErrorCodeText}{ErrorCodeText}}
+{\footnotesize\ttfamily const char$\ast$ xb\+::xb\+Ssv\+::\+Error\+Code\+Text\mbox{[}$\,$\mbox{]}\hspace{0.3cm}{\ttfamily [static]}, {\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}\label{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!iEndianType@{iEndianType}}
+\index{iEndianType@{iEndianType}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{iEndianType}{iEndianType}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Ssv\+::i\+Endian\+Type = 0\hspace{0.3cm}{\ttfamily [static]}, {\ttfamily [protected]}, {\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}\label{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!sNullString@{sNullString}}
+\index{sNullString@{sNullString}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{sNullString}{sNullString}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} xb\+::xb\+Ssv\+::s\+Null\+String = \char`\"{}\char`\"{}\hspace{0.3cm}{\ttfamily [static]}, {\ttfamily [protected]}, {\ttfamily [inherited]}}
+
+
+
+The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
+\item
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbtblmgr_8h}{xbtblmgr.\+h}}\item
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbtblmgr_8cpp}{xbtblmgr.\+cpp}}\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/classxb_1_1xbXBase.eps b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbXBase.eps
index c5ffd19..c5ffd19 100644
--- a/docs/doxygen/latex/classxb_1_1xbXBase.eps
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbXBase.eps
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbXBase.pdf b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbXBase.pdf
new file mode 100644
index 0000000..e2b00e7
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbXBase.pdf
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbXBase.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbXBase.tex
new file mode 100644
index 0000000..420cffe
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbXBase.tex
@@ -0,0 +1,817 @@
+\hypertarget{classxb_1_1xbXBase}{}\doxysection{xb\+::xb\+XBase Class Reference}
+\label{classxb_1_1xbXBase}\index{xb::xbXBase@{xb::xbXBase}}
+
+
+xb\+Xbase class.
+
+
+
+
+{\ttfamily \#include $<$xbxbase.\+h$>$}
+
+Inheritance diagram for xb\+::xb\+XBase\+:\begin{figure}[H]
+\begin{center}
+\leavevmode
+\includegraphics[height=3.000000cm]{classxb_1_1xbXBase}
+\end{center}
+\end{figure}
+\doxysubsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\hyperlink{classxb_1_1xbXBase_a6c68588e33946fb5416af3f86fe83224}{xb\+XBase}} ()
+\begin{DoxyCompactList}\small\item\em Class Constructor. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbXBase_a204f8634894ac2066d3209117803306d}{$\sim$xb\+XBase}} ()
+\begin{DoxyCompactList}\small\item\em Class Deconstructor. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbXBase_afccb552ca0daff779c0500ff20d22c2b}{Close\+All\+Tables}} ()
+\begin{DoxyCompactList}\small\item\em Close all tables / files. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbXBase_aa41240d920b604dcbd91dce7eecb78e1}{Create\+Fqn}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Dir\+In, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Name\+In, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Ext\+In, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Fqfn\+Out)
+\begin{DoxyCompactList}\small\item\em Fully qualified file name from a directory, filename and extension. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbXBase_ae357fac4fdebdf49e46563cf611caf65}{Disable\+Msg\+Logging}} ()
+\item
+void \mbox{\hyperlink{classxb_1_1xbXBase_a470e6eb0ed0be60338f9b40976d3ad48}{Enable\+Msg\+Logging}} ()
+\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbXBase_a5a5ecaed9777978344902446c9ae3b8e}{Flush\+Log}} ()
+\item
+const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbXBase_ab5d63cd7d9137eba8a1d4d9c3df522b7}{Get\+Log\+Fq\+File\+Name}} () const
+\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbXBase_ade34cd72c2a7e70fb55429a8a6f6c028}{Get\+Log\+Status}} () const
+\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbXBase_aa957eb502ecd076e5df89e7415cb094b}{Open\+Highest\+Version}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Table\+Name, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Alias, \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} \&dbf, int dummy)
+\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbXBase_afa7bbac08a4601f49cd53b457196ee0e}{Open\+Highest\+Version}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Table\+Name, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Alias, \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$$\ast$dbf)
+\item
+\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$ \mbox{\hyperlink{classxb_1_1xbXBase_aafb1abd6b6124cddf635adaf9f615a4a}{Open}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Table\+Name, xb\+Int16 \&i\+Rc)
+\begin{DoxyCompactList}\small\item\em Open highest qualified class available for dbf file. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$ \mbox{\hyperlink{classxb_1_1xbXBase_ab35cec5ac8f0fa95f10653ca7ac817f6}{Open}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Table\+Name, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Alias, xb\+Int16 i\+Open\+Mode, xb\+Int16 i\+Share\+Mode, xb\+Int16 i\+Version, xb\+Int16 \&i\+Rc)
+\begin{DoxyCompactList}\small\item\em Open highest qualified class available for dbf file. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbXBase_a666a0cb5b76ec7a9a3677d339e0c6b42}{Set\+Log\+Size}} (size\+\_\+t l\+Size)
+\item
+size\+\_\+t \mbox{\hyperlink{classxb_1_1xbXBase_aedb4c2aa2c90e4529915198a2305b355}{Get\+Log\+Size}} () const
+\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbXBase_a9ca5be73abffd0fdd18bdc799877272a}{Write\+Log\+Message}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Log\+Message, xb\+Int16 i\+Output\+Opt=0)
+\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbXBase_a0dff00b9ee3c288841e137ca01168116}{Write\+Log\+Bytes}} (xb\+UInt32 l\+Cnt, const char $\ast$p)
+\item
+void \mbox{\hyperlink{classxb_1_1xbXBase_a0915aff7be4b2dd3e881f3c5d0da4baf}{xb\+Sleep}} (xb\+Int32 l\+Millisecs)
+\begin{DoxyCompactList}\small\item\em Cross platform sleep function. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbXBase_aadecb3ac460d8e94b88b2e809e22f48e}{Get\+Cmd\+Line\+Opt}} (xb\+Int32 l\+Argc, char $\ast$$\ast$argv, const char $\ast$s\+Opt\+Rqst, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Parm\+Out)
+\begin{DoxyCompactList}\small\item\em Parse commmand line options for a given parm request. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbXBase_a8612e0c5334349fbceb9394b47817fd5}{Get\+Cmd\+Line\+Opt}} (xb\+Int32 l\+Argc, char $\ast$$\ast$argv, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Opt\+Rqst, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Parm\+Out)
+\begin{DoxyCompactList}\small\item\em Parse commmand line options for a given parm request. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbTblMgr_af16832ff2bfaee09265652e0fc03709a}{Add\+Tbl\+To\+Tbl\+List}} (\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$d, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Fq\+Tbl\+Name)
+\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbTblMgr_a2033188e9b08778188a034a6fc90ca85}{Add\+Tbl\+To\+Tbl\+List}} (\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$d, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Fq\+Tbl\+Name, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Tbl\+Alias)
+\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbTblMgr_a5eebffb9e8cc64141e35c2622045cb50}{Display\+Table\+List}} () const
+\item
+\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$ \mbox{\hyperlink{classxb_1_1xbTblMgr_ad8a5d28a2ee6720a9aa74bcb45662cf5}{Get\+Dbf\+Ptr}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Tbl\+Alias) const
+\item
+\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$ \mbox{\hyperlink{classxb_1_1xbTblMgr_a801dfecf7fc216954b4197b2c31b25d6}{Get\+Dbf\+Ptr}} (xb\+Int16 s\+Item\+No) const
+\item
+\mbox{\hyperlink{structxb_1_1xbTblList}{xb\+Tbl\+List}} $\ast$ \mbox{\hyperlink{classxb_1_1xbTblMgr_acbf148ddba4297021cfb980a161ebef9}{Get\+Tbl\+List\+Entry}} (\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$d)
+\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbTblMgr_ad0d2d4adabc0dc0e761cfdee63c84069}{Get\+Open\+Table\+Count}} () const
+\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbTblMgr_ac8eaef41acf08911b90f900aac8e70af}{Remove\+Tbl\+From\+Tbl\+List}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Tbl\+Alias)
+\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbTblMgr_a3d82b6e73d5c0bc8cac22b9a260389c1}{Remove\+Tbl\+From\+Tbl\+List}} (\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$d)
+\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}{Display\+Error}} (xb\+Int16 Error\+Code) const
+\begin{DoxyCompactList}\small\item\em Display error message on console for a given error number. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a6fbb9c3a550ab0b3378f9586a57791d2}{Get\+Default\+Date\+Format}} () const
+\begin{DoxyCompactList}\small\item\em Get the default date format. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}{Get\+Data\+Directory}} () const
+\begin{DoxyCompactList}\small\item\em Get the current data directory. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_abfaeef85935331073d213465bb362a61}{Get\+Temp\+Directory}} () const
+\begin{DoxyCompactList}\small\item\em Get the current temp directory. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}{Get\+Home\+Dir}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Home\+Dir\+Out)
+\begin{DoxyCompactList}\small\item\em Get home directory. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}{Get\+Endian\+Type}} () const
+\begin{DoxyCompactList}\small\item\em Get the Endian type. \end{DoxyCompactList}\item
+const char $\ast$ \mbox{\hyperlink{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}{Get\+Error\+Message}} (xb\+Int16 Error\+Code) const
+\begin{DoxyCompactList}\small\item\em Get an error message. \end{DoxyCompactList}\item
+char \mbox{\hyperlink{classxb_1_1xbSsv_a63cee13b473ee13970e93b11837b9e35}{Get\+Path\+Separator}} () const
+\begin{DoxyCompactList}\small\item\em Get the OS dependent path separator. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}{Set\+Data\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Data\+Directory)
+\begin{DoxyCompactList}\small\item\em Set the data directory. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}{Set\+Default\+Date\+Format}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Default\+Date\+Format)
+\begin{DoxyCompactList}\small\item\em Set the default date format. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a17c229a20ef9ab4034df8f9cd657adb2}{Set\+Temp\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Temp\+Directory)
+\begin{DoxyCompactList}\small\item\em Set the temp directory. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}{Bit\+Set}} (unsigned char c, xb\+Int16 i\+Bit\+No) const
+\begin{DoxyCompactList}\small\item\em Check a bit in a one byte field and see if it is set. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}{Bit\+Dump}} (unsigned char c) const
+\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}{Bit\+Dump}} (char c) const
+\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}{Get\+Default\+Auto\+Commit}} () const
+\begin{DoxyCompactList}\small\item\em Get the default auto commit setting. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}{Set\+Default\+Auto\+Commit}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Default\+Auto\+Commit)
+\begin{DoxyCompactList}\small\item\em Set the default auto commit. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}{Get\+Log\+Directory}} () const
+\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}{Get\+Log\+File\+Name}} () const
+\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}{Set\+Log\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Log\+Directory)
+\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a7f05738e7dfd759e89990242ef503544}{Set\+Log\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Log\+File\+Name)
+\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}{Get\+Multi\+User}} () const
+\begin{DoxyCompactList}\small\item\em Get the multi user setting. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}{Set\+Multi\+User}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Multi\+User)
+\begin{DoxyCompactList}\small\item\em Get the multi user setting. \end{DoxyCompactList}\end{DoxyCompactItemize}
+\doxysubsection*{Static Public Attributes}
+\begin{DoxyCompactItemize}
+\item
+static const char $\ast$ \mbox{\hyperlink{classxb_1_1xbSsv_a6219f1b5e24ea12fe158cd5aea56988e}{Error\+Code\+Text}} \mbox{[}$\,$\mbox{]}
+\end{DoxyCompactItemize}
+\doxysubsection*{Protected Member Functions}
+\begin{DoxyCompactItemize}
+\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbXBase_ae52e53340593b4253936c1372ec15ee1}{Get\+Function\+Info}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Exp\+Line, char \&c\+Return\+Type, xb\+Int16 \&i\+Return\+Len\+Calc, xb\+Int32 \&l\+Return\+Len\+Val) const
+\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a904ec348fd029d4a76e72b8fde636108}{Set\+Endian\+Type}} ()
+\begin{DoxyCompactList}\small\item\em Set the endian type. \end{DoxyCompactList}\end{DoxyCompactItemize}
+\doxysubsection*{Static Protected Member Functions}
+\begin{DoxyCompactItemize}
+\item
+static xb\+Int16 \mbox{\hyperlink{classxb_1_1xbXBase_a1b239c021358476382942522911b5c66}{xb\+Memcmp}} (const unsigned char $\ast$s1, const unsigned char $\ast$s2, size\+\_\+t n)
+\begin{DoxyCompactList}\small\item\em Cross memcmp function. \end{DoxyCompactList}\end{DoxyCompactItemize}
+\doxysubsection*{Static Protected Attributes}
+\begin{DoxyCompactItemize}
+\item
+static xb\+Int16 \mbox{\hyperlink{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}{i\+Endian\+Type}} = 0
+\item
+static \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \mbox{\hyperlink{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}{s\+Null\+String}} = \char`\"{}\char`\"{}
+\end{DoxyCompactItemize}
+\doxysubsection*{Friends}
+\begin{DoxyCompactItemize}
+\item
+class \mbox{\hyperlink{classxb_1_1xbXBase_a86a53ce3efbf910996df0f853f1c0add}{xb\+Bcd}}
+\item
+class \mbox{\hyperlink{classxb_1_1xbXBase_a3c3e5617be811d732472fe2cc8fb18cc}{xb\+Exp}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+xb\+Xbase class.
+
+The \mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} class is the core class that needs to be in every application program.
+
+\doxysubsection{Constructor \& Destructor Documentation}
+\mbox{\Hypertarget{classxb_1_1xbXBase_a6c68588e33946fb5416af3f86fe83224}\label{classxb_1_1xbXBase_a6c68588e33946fb5416af3f86fe83224}}
+\index{xb::xbXBase@{xb::xbXBase}!xbXBase@{xbXBase}}
+\index{xbXBase@{xbXBase}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{xbXBase()}{xbXBase()}}
+{\footnotesize\ttfamily xb\+::xb\+XBase\+::xb\+XBase (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+
+
+Class Constructor.
+
+\mbox{\Hypertarget{classxb_1_1xbXBase_a204f8634894ac2066d3209117803306d}\label{classxb_1_1xbXBase_a204f8634894ac2066d3209117803306d}}
+\index{xb::xbXBase@{xb::xbXBase}!````~xbXBase@{$\sim$xbXBase}}
+\index{````~xbXBase@{$\sim$xbXBase}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{$\sim$xbXBase()}{~xbXBase()}}
+{\footnotesize\ttfamily xb\+::xb\+XBase\+::$\sim$xb\+XBase (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+
+
+Class Deconstructor.
+
+
+
+\doxysubsection{Member Function Documentation}
+\mbox{\Hypertarget{classxb_1_1xbTblMgr_af16832ff2bfaee09265652e0fc03709a}\label{classxb_1_1xbTblMgr_af16832ff2bfaee09265652e0fc03709a}}
+\index{xb::xbXBase@{xb::xbXBase}!AddTblToTblList@{AddTblToTblList}}
+\index{AddTblToTblList@{AddTblToTblList}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{AddTblToTblList()}{AddTblToTblList()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Tbl\+Mgr\+::\+Add\+Tbl\+To\+Tbl\+List (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$}]{d, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Fq\+Tbl\+Name }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbTblMgr_a2033188e9b08778188a034a6fc90ca85}\label{classxb_1_1xbTblMgr_a2033188e9b08778188a034a6fc90ca85}}
+\index{xb::xbXBase@{xb::xbXBase}!AddTblToTblList@{AddTblToTblList}}
+\index{AddTblToTblList@{AddTblToTblList}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{AddTblToTblList()}{AddTblToTblList()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Tbl\+Mgr\+::\+Add\+Tbl\+To\+Tbl\+List (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$}]{d, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Fq\+Tbl\+Name, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Tbl\+Alias }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}\label{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}}
+\index{xb::xbXBase@{xb::xbXBase}!BitDump@{BitDump}}
+\index{BitDump@{BitDump}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{BitDump()}{BitDump()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Bit\+Dump (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}\label{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}}
+\index{xb::xbXBase@{xb::xbXBase}!BitDump@{BitDump}}
+\index{BitDump@{BitDump}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{BitDump()}{BitDump()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Bit\+Dump (\begin{DoxyParamCaption}\item[{unsigned char}]{c }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}\label{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}}
+\index{xb::xbXBase@{xb::xbXBase}!BitSet@{BitSet}}
+\index{BitSet@{BitSet}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{BitSet()}{BitSet()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Ssv\+::\+Bit\+Set (\begin{DoxyParamCaption}\item[{unsigned char}]{c, }\item[{xb\+Int16}]{i\+Bit\+No }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Check a bit in a one byte field and see if it is set.
+
+
+\begin{DoxyParams}{Parameters}
+{\em c} & One byte char field to examine. \\
+\hline
+{\em i\+Bit\+No} & which bit to examine. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+xb\+True Bit is set~\newline
+ xb\+False Bit is not set
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbXBase_afccb552ca0daff779c0500ff20d22c2b}\label{classxb_1_1xbXBase_afccb552ca0daff779c0500ff20d22c2b}}
+\index{xb::xbXBase@{xb::xbXBase}!CloseAllTables@{CloseAllTables}}
+\index{CloseAllTables@{CloseAllTables}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{CloseAllTables()}{CloseAllTables()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+XBase\+::\+Close\+All\+Tables (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+
+
+Close all tables / files.
+
+This closes everything and deletes references to the associated \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} objects. \begin{DoxyReturn}{Returns}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbXBase_aa41240d920b604dcbd91dce7eecb78e1}\label{classxb_1_1xbXBase_aa41240d920b604dcbd91dce7eecb78e1}}
+\index{xb::xbXBase@{xb::xbXBase}!CreateFqn@{CreateFqn}}
+\index{CreateFqn@{CreateFqn}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{CreateFqn()}{CreateFqn()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+XBase\+::\+Create\+Fqn (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Dir\+In, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Name\+In, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Ext\+In, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Fqn\+Out }\end{DoxyParamCaption})}
+
+
+
+Fully qualified file name from a directory, filename and extension.
+
+Given a directory, file name and file extension as inputs, create a fully qualified file name.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Dir\+In} & Directory \\
+\hline
+{\em s\+File\+In} & File Name \\
+\hline
+{\em s\+Ext\+In} & File Extension \\
+\hline
+{\em s\+Fqn\+Out} & A fully qualifed unique file name as output \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+XB\+\_\+\+INVALIED\+\_\+\+PARAMETER or XB\+\_\+\+NO\+\_\+\+ERROR
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbXBase_ae357fac4fdebdf49e46563cf611caf65}\label{classxb_1_1xbXBase_ae357fac4fdebdf49e46563cf611caf65}}
+\index{xb::xbXBase@{xb::xbXBase}!DisableMsgLogging@{DisableMsgLogging}}
+\index{DisableMsgLogging@{DisableMsgLogging}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{DisableMsgLogging()}{DisableMsgLogging()}}
+{\footnotesize\ttfamily void xb\+::xb\+XBase\+::\+Disable\+Msg\+Logging (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}\label{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}}
+\index{xb::xbXBase@{xb::xbXBase}!DisplayError@{DisplayError}}
+\index{DisplayError@{DisplayError}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{DisplayError()}{DisplayError()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Display\+Error (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Error\+Code }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Display error message on console for a given error number.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Error\+Code} & Error number to reference \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbTblMgr_a5eebffb9e8cc64141e35c2622045cb50}\label{classxb_1_1xbTblMgr_a5eebffb9e8cc64141e35c2622045cb50}}
+\index{xb::xbXBase@{xb::xbXBase}!DisplayTableList@{DisplayTableList}}
+\index{DisplayTableList@{DisplayTableList}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{DisplayTableList()}{DisplayTableList()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Tbl\+Mgr\+::\+Display\+Table\+List (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbXBase_a470e6eb0ed0be60338f9b40976d3ad48}\label{classxb_1_1xbXBase_a470e6eb0ed0be60338f9b40976d3ad48}}
+\index{xb::xbXBase@{xb::xbXBase}!EnableMsgLogging@{EnableMsgLogging}}
+\index{EnableMsgLogging@{EnableMsgLogging}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{EnableMsgLogging()}{EnableMsgLogging()}}
+{\footnotesize\ttfamily void xb\+::xb\+XBase\+::\+Enable\+Msg\+Logging (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{classxb_1_1xbXBase_a5a5ecaed9777978344902446c9ae3b8e}\label{classxb_1_1xbXBase_a5a5ecaed9777978344902446c9ae3b8e}}
+\index{xb::xbXBase@{xb::xbXBase}!FlushLog@{FlushLog}}
+\index{FlushLog@{FlushLog}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{FlushLog()}{FlushLog()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+XBase\+::\+Flush\+Log (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{classxb_1_1xbXBase_aadecb3ac460d8e94b88b2e809e22f48e}\label{classxb_1_1xbXBase_aadecb3ac460d8e94b88b2e809e22f48e}}
+\index{xb::xbXBase@{xb::xbXBase}!GetCmdLineOpt@{GetCmdLineOpt}}
+\index{GetCmdLineOpt@{GetCmdLineOpt}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{GetCmdLineOpt()}{GetCmdLineOpt()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+XBase\+::\+Get\+Cmd\+Line\+Opt (\begin{DoxyParamCaption}\item[{xb\+Int32}]{l\+Argc, }\item[{char $\ast$$\ast$}]{s\+Argv, }\item[{const char $\ast$}]{s\+Opt\+Rqst, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Parm\+Out }\end{DoxyParamCaption})}
+
+
+
+Parse commmand line options for a given parm request.
+
+
+\begin{DoxyParams}{Parameters}
+{\em l\+Argc} & Value passed from main( argc, argv\mbox{[}$\,$\mbox{]} ) \\
+\hline
+{\em s\+Argv} & Valued passed from main \\
+\hline
+{\em s\+Opt\+Rqst} & Option to search for in the arguments list \\
+\hline
+{\em s\+Parm\+Out} & String token immediately to the right of the the option request, if found \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+0 -\/ paramater request not found~\newline
+ 1 -\/ Parameter found
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbXBase_a8612e0c5334349fbceb9394b47817fd5}\label{classxb_1_1xbXBase_a8612e0c5334349fbceb9394b47817fd5}}
+\index{xb::xbXBase@{xb::xbXBase}!GetCmdLineOpt@{GetCmdLineOpt}}
+\index{GetCmdLineOpt@{GetCmdLineOpt}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{GetCmdLineOpt()}{GetCmdLineOpt()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+XBase\+::\+Get\+Cmd\+Line\+Opt (\begin{DoxyParamCaption}\item[{xb\+Int32}]{l\+Argc, }\item[{char $\ast$$\ast$}]{s\+Argv, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Opt\+Rqst, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Parm\+Out }\end{DoxyParamCaption})}
+
+
+
+Parse commmand line options for a given parm request.
+
+
+\begin{DoxyParams}{Parameters}
+{\em l\+Argc} & Value passed from main( argc, argv\mbox{[}$\,$\mbox{]} ) \\
+\hline
+{\em s\+Argv} & Valued passed from main \\
+\hline
+{\em s\+Opt\+Rqst} & Option to search for in the arguments list \\
+\hline
+{\em s\+Parm\+Out} & String token immediately to the right of the the option request, if found \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+0 -\/ paramater request not found~\newline
+ 1 -\/ Parameter found
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}\label{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}}
+\index{xb::xbXBase@{xb::xbXBase}!GetDataDirectory@{GetDataDirectory}}
+\index{GetDataDirectory@{GetDataDirectory}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{GetDataDirectory()}{GetDataDirectory()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Data\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the current data directory.
+
+\begin{DoxyReturn}{Returns}
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing the current data directory where the database files are stored.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbTblMgr_ad8a5d28a2ee6720a9aa74bcb45662cf5}\label{classxb_1_1xbTblMgr_ad8a5d28a2ee6720a9aa74bcb45662cf5}}
+\index{xb::xbXBase@{xb::xbXBase}!GetDbfPtr@{GetDbfPtr}}
+\index{GetDbfPtr@{GetDbfPtr}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{GetDbfPtr()}{GetDbfPtr()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$ xb\+::xb\+Tbl\+Mgr\+::\+Get\+Dbf\+Ptr (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Tbl\+Alias }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbTblMgr_a801dfecf7fc216954b4197b2c31b25d6}\label{classxb_1_1xbTblMgr_a801dfecf7fc216954b4197b2c31b25d6}}
+\index{xb::xbXBase@{xb::xbXBase}!GetDbfPtr@{GetDbfPtr}}
+\index{GetDbfPtr@{GetDbfPtr}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{GetDbfPtr()}{GetDbfPtr()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$ xb\+::xb\+Tbl\+Mgr\+::\+Get\+Dbf\+Ptr (\begin{DoxyParamCaption}\item[{xb\+Int16}]{s\+Item\+No }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}\label{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}}
+\index{xb::xbXBase@{xb::xbXBase}!GetDefaultAutoCommit@{GetDefaultAutoCommit}}
+\index{GetDefaultAutoCommit@{GetDefaultAutoCommit}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{GetDefaultAutoCommit()}{GetDefaultAutoCommit()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Ssv\+::\+Get\+Default\+Auto\+Commit (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the default auto commit setting.
+
+When auto commit is enabled, the library will automatically post any updates when moving off an updated record or closing files. If auto commit is disabled, the application program will need to explicitly update the tables using using dbf-\/\texorpdfstring{$>$}{>}Put() and dbf-\/\texorpdfstring{$>$}{>}Append\+Record().
+
+\begin{DoxyReturn}{Returns}
+xb\+True if auto commit is turned on~\newline
+ xb\+False is auto commit is turned off
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a6fbb9c3a550ab0b3378f9586a57791d2}\label{classxb_1_1xbSsv_a6fbb9c3a550ab0b3378f9586a57791d2}}
+\index{xb::xbXBase@{xb::xbXBase}!GetDefaultDateFormat@{GetDefaultDateFormat}}
+\index{GetDefaultDateFormat@{GetDefaultDateFormat}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{GetDefaultDateFormat()}{GetDefaultDateFormat()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Default\+Date\+Format (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the default date format.
+
+\begin{DoxyReturn}{Returns}
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing the default date format.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}\label{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}}
+\index{xb::xbXBase@{xb::xbXBase}!GetEndianType@{GetEndianType}}
+\index{GetEndianType@{GetEndianType}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{GetEndianType()}{GetEndianType()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Ssv\+::\+Get\+Endian\+Type (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the Endian type.
+
+\begin{DoxyReturn}{Returns}
+B -\/ Big endian~\newline
+ L -\/ Little endian~\newline
+
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}\label{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}}
+\index{xb::xbXBase@{xb::xbXBase}!GetErrorMessage@{GetErrorMessage}}
+\index{GetErrorMessage@{GetErrorMessage}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{GetErrorMessage()}{GetErrorMessage()}}
+{\footnotesize\ttfamily const char $\ast$ xb\+::xb\+Ssv\+::\+Get\+Error\+Message (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Error\+Code }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get an error message.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Error\+Code} & Error\+Code is the error number of description to be returned. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Returns a pointer to a string containing a text description for the error code.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbXBase_ae52e53340593b4253936c1372ec15ee1}\label{classxb_1_1xbXBase_ae52e53340593b4253936c1372ec15ee1}}
+\index{xb::xbXBase@{xb::xbXBase}!GetFunctionInfo@{GetFunctionInfo}}
+\index{GetFunctionInfo@{GetFunctionInfo}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{GetFunctionInfo()}{GetFunctionInfo()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+XBase\+::\+Get\+Function\+Info (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Exp\+Line, }\item[{char \&}]{c\+Return\+Type, }\item[{xb\+Int16 \&}]{i\+Return\+Len\+Calc, }\item[{xb\+Int32 \&}]{l\+Return\+Len\+Val }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [protected]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}\label{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}}
+\index{xb::xbXBase@{xb::xbXBase}!GetHomeDir@{GetHomeDir}}
+\index{GetHomeDir@{GetHomeDir}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{GetHomeDir()}{GetHomeDir()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Get\+Home\+Dir (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Home\+Dir\+Out }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get home directory.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Home\+Dir\+Out} & -\/ Output home directory for current user. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}\label{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}}
+\index{xb::xbXBase@{xb::xbXBase}!GetLogDirectory@{GetLogDirectory}}
+\index{GetLogDirectory@{GetLogDirectory}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{GetLogDirectory()}{GetLogDirectory()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Log\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}\label{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}}
+\index{xb::xbXBase@{xb::xbXBase}!GetLogFileName@{GetLogFileName}}
+\index{GetLogFileName@{GetLogFileName}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{GetLogFileName()}{GetLogFileName()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Log\+File\+Name (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbXBase_ab5d63cd7d9137eba8a1d4d9c3df522b7}\label{classxb_1_1xbXBase_ab5d63cd7d9137eba8a1d4d9c3df522b7}}
+\index{xb::xbXBase@{xb::xbXBase}!GetLogFqFileName@{GetLogFqFileName}}
+\index{GetLogFqFileName@{GetLogFqFileName}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{GetLogFqFileName()}{GetLogFqFileName()}}
+{\footnotesize\ttfamily const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+XBase\+::\+Get\+Log\+Fq\+File\+Name (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+\mbox{\Hypertarget{classxb_1_1xbXBase_aedb4c2aa2c90e4529915198a2305b355}\label{classxb_1_1xbXBase_aedb4c2aa2c90e4529915198a2305b355}}
+\index{xb::xbXBase@{xb::xbXBase}!GetLogSize@{GetLogSize}}
+\index{GetLogSize@{GetLogSize}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{GetLogSize()}{GetLogSize()}}
+{\footnotesize\ttfamily size\+\_\+t xb\+::xb\+XBase\+::\+Get\+Log\+Size (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+\mbox{\Hypertarget{classxb_1_1xbXBase_ade34cd72c2a7e70fb55429a8a6f6c028}\label{classxb_1_1xbXBase_ade34cd72c2a7e70fb55429a8a6f6c028}}
+\index{xb::xbXBase@{xb::xbXBase}!GetLogStatus@{GetLogStatus}}
+\index{GetLogStatus@{GetLogStatus}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{GetLogStatus()}{GetLogStatus()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+XBase\+::\+Get\+Log\+Status (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}\label{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}}
+\index{xb::xbXBase@{xb::xbXBase}!GetMultiUser@{GetMultiUser}}
+\index{GetMultiUser@{GetMultiUser}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{GetMultiUser()}{GetMultiUser()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Ssv\+::\+Get\+Multi\+User (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the multi user setting.
+
+\begin{DoxyReturn}{Returns}
+xb\+True -\/ Multi user mode turned on.~\newline
+ xb\+False -\/ Multi user mode turned off.~\newline
+
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbTblMgr_ad0d2d4adabc0dc0e761cfdee63c84069}\label{classxb_1_1xbTblMgr_ad0d2d4adabc0dc0e761cfdee63c84069}}
+\index{xb::xbXBase@{xb::xbXBase}!GetOpenTableCount@{GetOpenTableCount}}
+\index{GetOpenTableCount@{GetOpenTableCount}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{GetOpenTableCount()}{GetOpenTableCount()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Tbl\+Mgr\+::\+Get\+Open\+Table\+Count (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_a63cee13b473ee13970e93b11837b9e35}\label{classxb_1_1xbSsv_a63cee13b473ee13970e93b11837b9e35}}
+\index{xb::xbXBase@{xb::xbXBase}!GetPathSeparator@{GetPathSeparator}}
+\index{GetPathSeparator@{GetPathSeparator}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{GetPathSeparator()}{GetPathSeparator()}}
+{\footnotesize\ttfamily char xb\+::xb\+Ssv\+::\+Get\+Path\+Separator (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the OS dependent path separator.
+
+\begin{DoxyReturn}{Returns}
+Returns \textquotesingle{}\textbackslash{}\textquotesingle{} for windows environment, otherwise returns \textquotesingle{}/\textquotesingle{}.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbTblMgr_acbf148ddba4297021cfb980a161ebef9}\label{classxb_1_1xbTblMgr_acbf148ddba4297021cfb980a161ebef9}}
+\index{xb::xbXBase@{xb::xbXBase}!GetTblListEntry@{GetTblListEntry}}
+\index{GetTblListEntry@{GetTblListEntry}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{GetTblListEntry()}{GetTblListEntry()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{structxb_1_1xbTblList}{xb\+Tbl\+List}} $\ast$ xb\+::xb\+Tbl\+Mgr\+::\+Get\+Tbl\+List\+Entry (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$}]{d }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_abfaeef85935331073d213465bb362a61}\label{classxb_1_1xbSsv_abfaeef85935331073d213465bb362a61}}
+\index{xb::xbXBase@{xb::xbXBase}!GetTempDirectory@{GetTempDirectory}}
+\index{GetTempDirectory@{GetTempDirectory}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{GetTempDirectory()}{GetTempDirectory()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Temp\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the current temp directory.
+
+\begin{DoxyReturn}{Returns}
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing the current data directory where the database files are stored.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbXBase_ab35cec5ac8f0fa95f10653ca7ac817f6}\label{classxb_1_1xbXBase_ab35cec5ac8f0fa95f10653ca7ac817f6}}
+\index{xb::xbXBase@{xb::xbXBase}!Open@{Open}}
+\index{Open@{Open}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{Open()}{Open()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$ xb\+::xb\+XBase\+::\+Open (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Table\+Name, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Alias, }\item[{xb\+Int16}]{i\+Open\+Mode, }\item[{xb\+Int16}]{i\+Share\+Mode, }\item[{xb\+Int16}]{i\+Request\+Version, }\item[{xb\+Int16 \&}]{i\+Rc }\end{DoxyParamCaption})}
+
+
+
+Open highest qualified class available for dbf file.
+
+This routine can open various versions of the dbf file dependent on the i\+Version field
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Table\+Name} & -\/ Table name to open. \\
+\hline
+{\em s\+Alias} & -\/ Optional alias name. \\
+\hline
+{\em i\+Open\+Mode} & -\/ XB\+\_\+\+READ\+\_\+\+WRITE or XB\+\_\+\+READ \\
+\hline
+{\em i\+Share\+Mode} & -\/ XB\+\_\+\+SINGLE\+\_\+\+USER or XB\+\_\+\+MULTI\+\_\+\+USER \\
+\hline
+{\em i\+Request\+Version} & 0 -\/ Highest available 4 -\/ Version four dbf 3 -\/ Version three dbf \\
+\hline
+{\em i\+Rc} & -\/ Return code from open request \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+param dbf -\/ Output pointer to dbf file opened or null if error
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbXBase_aafb1abd6b6124cddf635adaf9f615a4a}\label{classxb_1_1xbXBase_aafb1abd6b6124cddf635adaf9f615a4a}}
+\index{xb::xbXBase@{xb::xbXBase}!Open@{Open}}
+\index{Open@{Open}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{Open()}{Open()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$ xb\+::xb\+XBase\+::\+Open (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Table\+Name, }\item[{xb\+Int16 \&}]{i\+Rc }\end{DoxyParamCaption})}
+
+
+
+Open highest qualified class available for dbf file.
+
+This routine opens the highest available version of the dbf file. Defaults to XB\+\_\+\+READ\+\_\+\+WRITE and XB\+\_\+\+MULTI\+\_\+\+USER mode. \begin{DoxyReturn}{Returns}
+param dbf -\/ Output pointer to dbf file opened or null if error
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbXBase_aa957eb502ecd076e5df89e7415cb094b}\label{classxb_1_1xbXBase_aa957eb502ecd076e5df89e7415cb094b}}
+\index{xb::xbXBase@{xb::xbXBase}!OpenHighestVersion@{OpenHighestVersion}}
+\index{OpenHighestVersion@{OpenHighestVersion}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{OpenHighestVersion()}{OpenHighestVersion()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+XBase\+::\+Open\+Highest\+Version (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Table\+Name, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Alias, }\item[{\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} \&}]{dbf, }\item[{int}]{dummy }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{classxb_1_1xbXBase_afa7bbac08a4601f49cd53b457196ee0e}\label{classxb_1_1xbXBase_afa7bbac08a4601f49cd53b457196ee0e}}
+\index{xb::xbXBase@{xb::xbXBase}!OpenHighestVersion@{OpenHighestVersion}}
+\index{OpenHighestVersion@{OpenHighestVersion}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{OpenHighestVersion()}{OpenHighestVersion()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+XBase\+::\+Open\+Highest\+Version (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Table\+Name, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Alias, }\item[{\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$$\ast$}]{dbf }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{classxb_1_1xbTblMgr_ac8eaef41acf08911b90f900aac8e70af}\label{classxb_1_1xbTblMgr_ac8eaef41acf08911b90f900aac8e70af}}
+\index{xb::xbXBase@{xb::xbXBase}!RemoveTblFromTblList@{RemoveTblFromTblList}}
+\index{RemoveTblFromTblList@{RemoveTblFromTblList}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{RemoveTblFromTblList()}{RemoveTblFromTblList()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Tbl\+Mgr\+::\+Remove\+Tbl\+From\+Tbl\+List (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Tbl\+Alias }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbTblMgr_a3d82b6e73d5c0bc8cac22b9a260389c1}\label{classxb_1_1xbTblMgr_a3d82b6e73d5c0bc8cac22b9a260389c1}}
+\index{xb::xbXBase@{xb::xbXBase}!RemoveTblFromTblList@{RemoveTblFromTblList}}
+\index{RemoveTblFromTblList@{RemoveTblFromTblList}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{RemoveTblFromTblList()}{RemoveTblFromTblList()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Tbl\+Mgr\+::\+Remove\+Tbl\+From\+Tbl\+List (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$}]{d }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}\label{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}}
+\index{xb::xbXBase@{xb::xbXBase}!SetDataDirectory@{SetDataDirectory}}
+\index{SetDataDirectory@{SetDataDirectory}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{SetDataDirectory()}{SetDataDirectory()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Data\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Data\+Directory }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Set the data directory.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Data\+Directory} & Set the data directory. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}\label{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}}
+\index{xb::xbXBase@{xb::xbXBase}!SetDefaultAutoCommit@{SetDefaultAutoCommit}}
+\index{SetDefaultAutoCommit@{SetDefaultAutoCommit}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{SetDefaultAutoCommit()}{SetDefaultAutoCommit()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Default\+Auto\+Commit (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}}}]{b\+Default\+Auto\+Commit }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Set the default auto commit.
+
+Disabling auto commit requires the application execute explicit updates using dbf-\/\texorpdfstring{$>$}{>}Put() and dbf-\/\texorpdfstring{$>$}{>}Append\+Record(). With auto commit on, the library posts updates automatically when moving off the current record or closing a file.
+
+
+\begin{DoxyParams}{Parameters}
+{\em b\+Default\+Auto\+Commit} & xb\+True -\/ Enable default auto commit.~\newline
+ xb\+False -\/ Disable default auto commit.~\newline
+ \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}\label{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}}
+\index{xb::xbXBase@{xb::xbXBase}!SetDefaultDateFormat@{SetDefaultDateFormat}}
+\index{SetDefaultDateFormat@{SetDefaultDateFormat}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{SetDefaultDateFormat()}{SetDefaultDateFormat()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Default\+Date\+Format (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Default\+Date\+Format }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Set the default date format.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Default\+Date\+Format} & Set the default date format. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a904ec348fd029d4a76e72b8fde636108}\label{classxb_1_1xbSsv_a904ec348fd029d4a76e72b8fde636108}}
+\index{xb::xbXBase@{xb::xbXBase}!SetEndianType@{SetEndianType}}
+\index{SetEndianType@{SetEndianType}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{SetEndianType()}{SetEndianType()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Endian\+Type (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [protected]}, {\ttfamily [inherited]}}
+
+
+
+Set the endian type.
+
+This routine determines the Endian-\/ness at run time instead of compile time as some processers (ie; Sparc,ARM) can be switched either way. This routine is called automatically by the library at startup and does not need to be called in an application program. \mbox{\Hypertarget{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}\label{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}}
+\index{xb::xbXBase@{xb::xbXBase}!SetLogDirectory@{SetLogDirectory}}
+\index{SetLogDirectory@{SetLogDirectory}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{SetLogDirectory()}{SetLogDirectory()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Log\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Log\+Directory }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_a7f05738e7dfd759e89990242ef503544}\label{classxb_1_1xbSsv_a7f05738e7dfd759e89990242ef503544}}
+\index{xb::xbXBase@{xb::xbXBase}!SetLogFileName@{SetLogFileName}}
+\index{SetLogFileName@{SetLogFileName}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{SetLogFileName()}{SetLogFileName()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Log\+File\+Name (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Log\+File\+Name }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbXBase_a666a0cb5b76ec7a9a3677d339e0c6b42}\label{classxb_1_1xbXBase_a666a0cb5b76ec7a9a3677d339e0c6b42}}
+\index{xb::xbXBase@{xb::xbXBase}!SetLogSize@{SetLogSize}}
+\index{SetLogSize@{SetLogSize}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{SetLogSize()}{SetLogSize()}}
+{\footnotesize\ttfamily void xb\+::xb\+XBase\+::\+Set\+Log\+Size (\begin{DoxyParamCaption}\item[{size\+\_\+t}]{l\+Size }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}\label{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}}
+\index{xb::xbXBase@{xb::xbXBase}!SetMultiUser@{SetMultiUser}}
+\index{SetMultiUser@{SetMultiUser}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{SetMultiUser()}{SetMultiUser()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Multi\+User (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}}}]{b\+Multi\+User }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the multi user setting.
+
+
+\begin{DoxyParams}{Parameters}
+{\em b\+Multi\+User} & xb\+True -\/ Turn on Multi user mode.~\newline
+ xb\+False -\/ Turn off Multi user mode.~\newline
+ \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a17c229a20ef9ab4034df8f9cd657adb2}\label{classxb_1_1xbSsv_a17c229a20ef9ab4034df8f9cd657adb2}}
+\index{xb::xbXBase@{xb::xbXBase}!SetTempDirectory@{SetTempDirectory}}
+\index{SetTempDirectory@{SetTempDirectory}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{SetTempDirectory()}{SetTempDirectory()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Temp\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Temp\+Directory }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Set the temp directory.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Temp\+Directory} & Set the data direcroty. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbXBase_a0dff00b9ee3c288841e137ca01168116}\label{classxb_1_1xbXBase_a0dff00b9ee3c288841e137ca01168116}}
+\index{xb::xbXBase@{xb::xbXBase}!WriteLogBytes@{WriteLogBytes}}
+\index{WriteLogBytes@{WriteLogBytes}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{WriteLogBytes()}{WriteLogBytes()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+XBase\+::\+Write\+Log\+Bytes (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{l\+Cnt, }\item[{const char $\ast$}]{p }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{classxb_1_1xbXBase_a9ca5be73abffd0fdd18bdc799877272a}\label{classxb_1_1xbXBase_a9ca5be73abffd0fdd18bdc799877272a}}
+\index{xb::xbXBase@{xb::xbXBase}!WriteLogMessage@{WriteLogMessage}}
+\index{WriteLogMessage@{WriteLogMessage}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{WriteLogMessage()}{WriteLogMessage()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+XBase\+::\+Write\+Log\+Message (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Log\+Message, }\item[{xb\+Int16}]{i\+Output\+Opt = {\ttfamily 0} }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{classxb_1_1xbXBase_a1b239c021358476382942522911b5c66}\label{classxb_1_1xbXBase_a1b239c021358476382942522911b5c66}}
+\index{xb::xbXBase@{xb::xbXBase}!xbMemcmp@{xbMemcmp}}
+\index{xbMemcmp@{xbMemcmp}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{xbMemcmp()}{xbMemcmp()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+XBase\+::xb\+Memcmp (\begin{DoxyParamCaption}\item[{const unsigned char $\ast$}]{s1, }\item[{const unsigned char $\ast$}]{s2, }\item[{size\+\_\+t}]{n }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}, {\ttfamily [protected]}}
+
+
+
+Cross memcmp function.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s1} & Left operand to compare. \\
+\hline
+{\em s2} & Right operand to compare. \\
+\hline
+{\em n} & Number of bytes to compare. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+1 s1 \texorpdfstring{$>$}{>} s2~\newline
+ 0 s1 == s2~\newline
+ -\/1 s1 \texorpdfstring{$<$}{<} s2
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbXBase_a0915aff7be4b2dd3e881f3c5d0da4baf}\label{classxb_1_1xbXBase_a0915aff7be4b2dd3e881f3c5d0da4baf}}
+\index{xb::xbXBase@{xb::xbXBase}!xbSleep@{xbSleep}}
+\index{xbSleep@{xbSleep}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{xbSleep()}{xbSleep()}}
+{\footnotesize\ttfamily void xb\+::xb\+XBase\+::xb\+Sleep (\begin{DoxyParamCaption}\item[{xb\+Int32}]{l\+Millisecs }\end{DoxyParamCaption})}
+
+
+
+Cross platform sleep function.
+
+
+\begin{DoxyParams}{Parameters}
+{\em l\+Millisecs} & Milliseconds to sleep. \\
+\hline
+\end{DoxyParams}
+
+
+\doxysubsection{Friends And Related Function Documentation}
+\mbox{\Hypertarget{classxb_1_1xbXBase_a86a53ce3efbf910996df0f853f1c0add}\label{classxb_1_1xbXBase_a86a53ce3efbf910996df0f853f1c0add}}
+\index{xb::xbXBase@{xb::xbXBase}!xbBcd@{xbBcd}}
+\index{xbBcd@{xbBcd}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{xbBcd}{xbBcd}}
+{\footnotesize\ttfamily friend class xb\+Bcd\hspace{0.3cm}{\ttfamily [friend]}}
+
+\mbox{\Hypertarget{classxb_1_1xbXBase_a3c3e5617be811d732472fe2cc8fb18cc}\label{classxb_1_1xbXBase_a3c3e5617be811d732472fe2cc8fb18cc}}
+\index{xb::xbXBase@{xb::xbXBase}!xbExp@{xbExp}}
+\index{xbExp@{xbExp}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{xbExp}{xbExp}}
+{\footnotesize\ttfamily friend class xb\+Exp\hspace{0.3cm}{\ttfamily [friend]}}
+
+
+
+\doxysubsection{Field Documentation}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a6219f1b5e24ea12fe158cd5aea56988e}\label{classxb_1_1xbSsv_a6219f1b5e24ea12fe158cd5aea56988e}}
+\index{xb::xbXBase@{xb::xbXBase}!ErrorCodeText@{ErrorCodeText}}
+\index{ErrorCodeText@{ErrorCodeText}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{ErrorCodeText}{ErrorCodeText}}
+{\footnotesize\ttfamily const char$\ast$ xb\+::xb\+Ssv\+::\+Error\+Code\+Text\mbox{[}$\,$\mbox{]}\hspace{0.3cm}{\ttfamily [static]}, {\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}\label{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}}
+\index{xb::xbXBase@{xb::xbXBase}!iEndianType@{iEndianType}}
+\index{iEndianType@{iEndianType}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{iEndianType}{iEndianType}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Ssv\+::i\+Endian\+Type = 0\hspace{0.3cm}{\ttfamily [static]}, {\ttfamily [protected]}, {\ttfamily [inherited]}}
+
+\mbox{\Hypertarget{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}\label{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}}
+\index{xb::xbXBase@{xb::xbXBase}!sNullString@{sNullString}}
+\index{sNullString@{sNullString}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{sNullString}{sNullString}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} xb\+::xb\+Ssv\+::s\+Null\+String = \char`\"{}\char`\"{}\hspace{0.3cm}{\ttfamily [static]}, {\ttfamily [protected]}, {\ttfamily [inherited]}}
+
+
+
+The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
+\item
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbxbase_8h}{xbxbase.\+h}}\item
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbxbase_8cpp}{xbxbase.\+cpp}}\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/dbfxtrct_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/dbfxtrct_8cpp.tex
index dafa6b6..dafa6b6 100644
--- a/docs/doxygen/latex/dbfxtrct_8cpp.tex
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/dbfxtrct_8cpp.tex
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/dir_25b94c3afce00ed38231227d8141f932.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/dir_25b94c3afce00ed38231227d8141f932.tex
new file mode 100644
index 0000000..640eef3
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/dir_25b94c3afce00ed38231227d8141f932.tex
@@ -0,0 +1,27 @@
+\hypertarget{dir_25b94c3afce00ed38231227d8141f932}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/sql Directory Reference}
+\label{dir_25b94c3afce00ed38231227d8141f932}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql Directory Reference}}
+\doxysubsection*{Files}
+\begin{DoxyCompactItemize}
+\item
+file \mbox{\hyperlink{xbalttbl_8cpp}{xbalttbl.\+cpp}}
+\item
+file \mbox{\hyperlink{sql_2xbcrix_8cpp}{xbcrix.\+cpp}}
+\item
+file \mbox{\hyperlink{xbcrtbl_8cpp}{xbcrtbl.\+cpp}}
+\item
+file \mbox{\hyperlink{xbdelete_8cpp}{xbdelete.\+cpp}}
+\item
+file \mbox{\hyperlink{xbdrpix_8cpp}{xbdrpix.\+cpp}}
+\item
+file \mbox{\hyperlink{xbdrptbl_8cpp}{xbdrptbl.\+cpp}}
+\item
+file \mbox{\hyperlink{xbinsert_8cpp}{xbinsert.\+cpp}}
+\item
+file \mbox{\hyperlink{xbselect_8cpp}{xbselect.\+cpp}}
+\item
+file \mbox{\hyperlink{xbset_8cpp}{xbset.\+cpp}}
+\item
+file \mbox{\hyperlink{xbsql_8cpp}{xbsql.\+cpp}}
+\item
+file \mbox{\hyperlink{xbstmt_8cpp}{xbstmt.\+cpp}}
+\end{DoxyCompactItemize}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/dir_313caf1132e152dd9b58bea13a4052ca.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/dir_313caf1132e152dd9b58bea13a4052ca.tex
new file mode 100644
index 0000000..a9d4086
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/dir_313caf1132e152dd9b58bea13a4052ca.tex
@@ -0,0 +1,27 @@
+\hypertarget{dir_313caf1132e152dd9b58bea13a4052ca}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/utils Directory Reference}
+\label{dir_313caf1132e152dd9b58bea13a4052ca}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils Directory Reference}}
+\doxysubsection*{Files}
+\begin{DoxyCompactItemize}
+\item
+file \mbox{\hyperlink{xb__cfg__check_8cpp}{xb\+\_\+cfg\+\_\+check.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__copydbf_8cpp}{xb\+\_\+copydbf.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__dbfutil_8cpp}{xb\+\_\+dbfutil.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__deletall_8cpp}{xb\+\_\+deletall.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__dumpdbt_8cpp}{xb\+\_\+dumpdbt.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__dumprecs_8cpp}{xb\+\_\+dumprecs.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__execsql_8cpp}{xb\+\_\+execsql.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__import_8cpp}{xb\+\_\+import.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__pack_8cpp}{xb\+\_\+pack.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__tblinfo_8cpp}{xb\+\_\+tblinfo.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__undelall_8cpp}{xb\+\_\+undelall.\+cpp}}
+\end{DoxyCompactItemize}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/dir_68267d1309a1af8e8297ef4c3efbcdba.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/dir_68267d1309a1af8e8297ef4c3efbcdba.tex
new file mode 100644
index 0000000..134f23a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/dir_68267d1309a1af8e8297ef4c3efbcdba.tex
@@ -0,0 +1,17 @@
+\hypertarget{dir_68267d1309a1af8e8297ef4c3efbcdba}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src Directory Reference}
+\label{dir_68267d1309a1af8e8297ef4c3efbcdba}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src Directory Reference}}
+\doxysubsection*{Directories}
+\begin{DoxyCompactItemize}
+\item
+directory \mbox{\hyperlink{dir_aebb8dcc11953d78e620bbef0b9e2183}{core}}
+\item
+directory \mbox{\hyperlink{dir_e931c1a3f0014e624d0645a271726ad2}{examples}}
+\item
+directory \mbox{\hyperlink{dir_b0856f6b0d80ccb263b2f415c91f9e17}{include}}
+\item
+directory \mbox{\hyperlink{dir_25b94c3afce00ed38231227d8141f932}{sql}}
+\item
+directory \mbox{\hyperlink{dir_d93a1d4020dea85bb71b237545b5e722}{tests}}
+\item
+directory \mbox{\hyperlink{dir_313caf1132e152dd9b58bea13a4052ca}{utils}}
+\end{DoxyCompactItemize}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/dir_aebb8dcc11953d78e620bbef0b9e2183.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/dir_aebb8dcc11953d78e620bbef0b9e2183.tex
new file mode 100644
index 0000000..7dcdd4d
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/dir_aebb8dcc11953d78e620bbef0b9e2183.tex
@@ -0,0 +1,57 @@
+\hypertarget{dir_aebb8dcc11953d78e620bbef0b9e2183}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core Directory Reference}
+\label{dir_aebb8dcc11953d78e620bbef0b9e2183}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core Directory Reference}}
+\doxysubsection*{Files}
+\begin{DoxyCompactItemize}
+\item
+file \mbox{\hyperlink{xbbcd_8cpp}{xbbcd.\+cpp}}
+\item
+file \mbox{\hyperlink{xbblockread_8cpp}{xbblockread.\+cpp}}
+\item
+file \mbox{\hyperlink{xbdate_8cpp}{xbdate.\+cpp}}
+\item
+file \mbox{\hyperlink{xbdbf_8cpp}{xbdbf.\+cpp}}
+\item
+file \mbox{\hyperlink{xbdbf3_8cpp}{xbdbf3.\+cpp}}
+\item
+file \mbox{\hyperlink{xbdbf4_8cpp}{xbdbf4.\+cpp}}
+\item
+file \mbox{\hyperlink{xbexp_8cpp}{xbexp.\+cpp}}
+\item
+file \mbox{\hyperlink{xbexpnode_8cpp}{xbexpnode.\+cpp}}
+\item
+file \mbox{\hyperlink{xbfields_8cpp}{xbfields.\+cpp}}
+\item
+file \mbox{\hyperlink{xbfile_8cpp}{xbfile.\+cpp}}
+\item
+file \mbox{\hyperlink{xbfilter_8cpp}{xbfilter.\+cpp}}
+\item
+file \mbox{\hyperlink{xbfuncs_8cpp}{xbfuncs.\+cpp}}
+\item
+file \mbox{\hyperlink{xbixbase_8cpp}{xbixbase.\+cpp}}
+\item
+file \mbox{\hyperlink{xbixmdx_8cpp}{xbixmdx.\+cpp}}
+\item
+file \mbox{\hyperlink{xbixndx_8cpp}{xbixndx.\+cpp}}
+\item
+file \mbox{\hyperlink{xbixtdx_8cpp}{xbixtdx.\+cpp}}
+\item
+file \mbox{\hyperlink{xblog_8cpp}{xblog.\+cpp}}
+\item
+file \mbox{\hyperlink{xbmemo_8cpp}{xbmemo.\+cpp}}
+\item
+file \mbox{\hyperlink{xbmemo3_8cpp}{xbmemo3.\+cpp}}
+\item
+file \mbox{\hyperlink{xbmemo4_8cpp}{xbmemo4.\+cpp}}
+\item
+file \mbox{\hyperlink{xbssv_8cpp}{xbssv.\+cpp}}
+\item
+file \mbox{\hyperlink{xbstring_8cpp}{xbstring.\+cpp}}
+\item
+file \mbox{\hyperlink{xbtag_8cpp}{xbtag.\+cpp}}
+\item
+file \mbox{\hyperlink{xbtblmgr_8cpp}{xbtblmgr.\+cpp}}
+\item
+file \mbox{\hyperlink{xbuda_8cpp}{xbuda.\+cpp}}
+\item
+file \mbox{\hyperlink{xbxbase_8cpp}{xbxbase.\+cpp}}
+\end{DoxyCompactItemize}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/dir_b0856f6b0d80ccb263b2f415c91f9e17.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/dir_b0856f6b0d80ccb263b2f415c91f9e17.tex
new file mode 100644
index 0000000..48ddc2a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/dir_b0856f6b0d80ccb263b2f415c91f9e17.tex
@@ -0,0 +1,55 @@
+\hypertarget{dir_b0856f6b0d80ccb263b2f415c91f9e17}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include Directory Reference}
+\label{dir_b0856f6b0d80ccb263b2f415c91f9e17}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include Directory Reference}}
+\doxysubsection*{Files}
+\begin{DoxyCompactItemize}
+\item
+file \mbox{\hyperlink{xbase_8h}{xbase.\+h}}
+\item
+file \mbox{\hyperlink{xbbcd_8h}{xbbcd.\+h}}
+\item
+file \mbox{\hyperlink{xbblkread_8h}{xbblkread.\+h}}
+\item
+file \mbox{\hyperlink{include_2xbcrix_8cpp}{xbcrix.\+cpp}}
+\item
+file \mbox{\hyperlink{xbdate_8h}{xbdate.\+h}}
+\item
+file \mbox{\hyperlink{xbdbf_8h}{xbdbf.\+h}}
+\item
+file \mbox{\hyperlink{xbexp_8h}{xbexp.\+h}}
+\item
+file \mbox{\hyperlink{xbexpnode_8h}{xbexpnode.\+h}}
+\item
+file \mbox{\hyperlink{xbfile_8h}{xbfile.\+h}}
+\item
+file \mbox{\hyperlink{xbfilter_8h}{xbfilter.\+h}}
+\item
+file \mbox{\hyperlink{xbindex_8h}{xbindex.\+h}}
+\item
+file \mbox{\hyperlink{xblnklst_8h}{xblnklst.\+h}}
+\item
+file \mbox{\hyperlink{xblnklstord_8h}{xblnklstord.\+h}}
+\item
+file \mbox{\hyperlink{xblnknod_8h}{xblnknod.\+h}}
+\item
+file \mbox{\hyperlink{xblog_8h}{xblog.\+h}}
+\item
+file \mbox{\hyperlink{xbmemo_8h}{xbmemo.\+h}}
+\item
+file \mbox{\hyperlink{xbretcod_8h}{xbretcod.\+h}}
+\item
+file \mbox{\hyperlink{xbsql_8h}{xbsql.\+h}}
+\item
+file \mbox{\hyperlink{xbssv_8h}{xbssv.\+h}}
+\item
+file \mbox{\hyperlink{xbstring_8h}{xbstring.\+h}}
+\item
+file \mbox{\hyperlink{xbtag_8h}{xbtag.\+h}}
+\item
+file \mbox{\hyperlink{xbtblmgr_8h}{xbtblmgr.\+h}}
+\item
+file \mbox{\hyperlink{xbtypes_8h}{xbtypes.\+h}}
+\item
+file \mbox{\hyperlink{xbuda_8h}{xbuda.\+h}}
+\item
+file \mbox{\hyperlink{xbxbase_8h}{xbxbase.\+h}}
+\end{DoxyCompactItemize}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/dir_d93a1d4020dea85bb71b237545b5e722.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/dir_d93a1d4020dea85bb71b237545b5e722.tex
new file mode 100644
index 0000000..5534e90
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/dir_d93a1d4020dea85bb71b237545b5e722.tex
@@ -0,0 +1,55 @@
+\hypertarget{dir_d93a1d4020dea85bb71b237545b5e722}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests Directory Reference}
+\label{dir_d93a1d4020dea85bb71b237545b5e722}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests Directory Reference}}
+\doxysubsection*{Files}
+\begin{DoxyCompactItemize}
+\item
+file \mbox{\hyperlink{tstfuncs_8cpp}{tstfuncs.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__test__bcd_8cpp}{xb\+\_\+test\+\_\+bcd.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__test__blockread_8cpp}{xb\+\_\+test\+\_\+blockread.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__test__date_8cpp}{xb\+\_\+test\+\_\+date.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__test__dbf__v3__memos_8cpp}{xb\+\_\+test\+\_\+dbf\+\_\+v3\+\_\+memos.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__test__dbf__v3__nomemos_8cpp}{xb\+\_\+test\+\_\+dbf\+\_\+v3\+\_\+nomemos.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__test__dbf__v4__memos_8cpp}{xb\+\_\+test\+\_\+dbf\+\_\+v4\+\_\+memos.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__test__dbf__v4__nomemos_8cpp}{xb\+\_\+test\+\_\+dbf\+\_\+v4\+\_\+nomemos.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__test__expnode_8cpp}{xb\+\_\+test\+\_\+expnode.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__test__expression_8cpp}{xb\+\_\+test\+\_\+expression.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__test__file_8cpp}{xb\+\_\+test\+\_\+file.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__test__filter_8cpp}{xb\+\_\+test\+\_\+filter.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__test__funcs_8cpp}{xb\+\_\+test\+\_\+funcs.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__test__linklist_8cpp}{xb\+\_\+test\+\_\+linklist.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__test__lock_8cpp}{xb\+\_\+test\+\_\+lock.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__test__lock2_8cpp}{xb\+\_\+test\+\_\+lock2.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__test__log_8cpp}{xb\+\_\+test\+\_\+log.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__test__mdx_8cpp}{xb\+\_\+test\+\_\+mdx.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__test__ndx_8cpp}{xb\+\_\+test\+\_\+ndx.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__test__sql_8cpp}{xb\+\_\+test\+\_\+sql.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__test__string_8cpp}{xb\+\_\+test\+\_\+string.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__test__tblmgr_8cpp}{xb\+\_\+test\+\_\+tblmgr.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__test__tdx_8cpp}{xb\+\_\+test\+\_\+tdx.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__test__uda_8cpp}{xb\+\_\+test\+\_\+uda.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__test__xbase_8cpp}{xb\+\_\+test\+\_\+xbase.\+cpp}}
+\end{DoxyCompactItemize}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/dir_e931c1a3f0014e624d0645a271726ad2.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/dir_e931c1a3f0014e624d0645a271726ad2.tex
new file mode 100644
index 0000000..f1faa43
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/dir_e931c1a3f0014e624d0645a271726ad2.tex
@@ -0,0 +1,25 @@
+\hypertarget{dir_e931c1a3f0014e624d0645a271726ad2}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/examples Directory Reference}
+\label{dir_e931c1a3f0014e624d0645a271726ad2}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples Directory Reference}}
+\doxysubsection*{Files}
+\begin{DoxyCompactItemize}
+\item
+file \mbox{\hyperlink{xb__ex__date_8cpp}{xb\+\_\+ex\+\_\+date.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__ex__expression_8cpp}{xb\+\_\+ex\+\_\+expression.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__ex__log_8cpp}{xb\+\_\+ex\+\_\+log.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__ex__sql_8cpp}{xb\+\_\+ex\+\_\+sql.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__ex__ssv_8cpp}{xb\+\_\+ex\+\_\+ssv.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__ex__string_8cpp}{xb\+\_\+ex\+\_\+string.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__ex__v3__create__dbf_8cpp}{xb\+\_\+ex\+\_\+v3\+\_\+create\+\_\+dbf.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__ex__v3__upd__dbf_8cpp}{xb\+\_\+ex\+\_\+v3\+\_\+upd\+\_\+dbf.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__ex__v4__create__dbf_8cpp}{xb\+\_\+ex\+\_\+v4\+\_\+create\+\_\+dbf.\+cpp}}
+\item
+file \mbox{\hyperlink{xb__ex__v4__upd__dbf_8cpp}{xb\+\_\+ex\+\_\+v4\+\_\+upd\+\_\+dbf.\+cpp}}
+\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/doxygen.sty b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/doxygen.sty
index 7e01991..7e01991 100644
--- a/docs/doxygen/latex/doxygen.sty
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/doxygen.sty
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/files.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/files.tex
new file mode 100644
index 0000000..cfb7be3
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/files.tex
@@ -0,0 +1,111 @@
+\doxysection{File List}
+Here is a list of all files with brief descriptions\+:\begin{DoxyCompactList}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbbcd_8cpp}{xbbcd.\+cpp}} }{\pageref{xbbcd_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbblockread_8cpp}{xbblockread.\+cpp}} }{\pageref{xbblockread_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbdate_8cpp}{xbdate.\+cpp}} }{\pageref{xbdate_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbdbf_8cpp}{xbdbf.\+cpp}} }{\pageref{xbdbf_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbdbf3_8cpp}{xbdbf3.\+cpp}} }{\pageref{xbdbf3_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbdbf4_8cpp}{xbdbf4.\+cpp}} }{\pageref{xbdbf4_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbexp_8cpp}{xbexp.\+cpp}} }{\pageref{xbexp_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbexpnode_8cpp}{xbexpnode.\+cpp}} }{\pageref{xbexpnode_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbfields_8cpp}{xbfields.\+cpp}} }{\pageref{xbfields_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbfile_8cpp}{xbfile.\+cpp}} }{\pageref{xbfile_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbfilter_8cpp}{xbfilter.\+cpp}} }{\pageref{xbfilter_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbfuncs_8cpp}{xbfuncs.\+cpp}} }{\pageref{xbfuncs_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbixbase_8cpp}{xbixbase.\+cpp}} }{\pageref{xbixbase_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbixmdx_8cpp}{xbixmdx.\+cpp}} }{\pageref{xbixmdx_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbixndx_8cpp}{xbixndx.\+cpp}} }{\pageref{xbixndx_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbixtdx_8cpp}{xbixtdx.\+cpp}} }{\pageref{xbixtdx_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xblog_8cpp}{xblog.\+cpp}} }{\pageref{xblog_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbmemo_8cpp}{xbmemo.\+cpp}} }{\pageref{xbmemo_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbmemo3_8cpp}{xbmemo3.\+cpp}} }{\pageref{xbmemo3_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbmemo4_8cpp}{xbmemo4.\+cpp}} }{\pageref{xbmemo4_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbssv_8cpp}{xbssv.\+cpp}} }{\pageref{xbssv_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbstring_8cpp}{xbstring.\+cpp}} }{\pageref{xbstring_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbtag_8cpp}{xbtag.\+cpp}} }{\pageref{xbtag_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbtblmgr_8cpp}{xbtblmgr.\+cpp}} }{\pageref{xbtblmgr_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbuda_8cpp}{xbuda.\+cpp}} }{\pageref{xbuda_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbxbase_8cpp}{xbxbase.\+cpp}} }{\pageref{xbxbase_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/examples/\mbox{\hyperlink{xb__ex__date_8cpp}{xb\+\_\+ex\+\_\+date.\+cpp}} }{\pageref{xb__ex__date_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/examples/\mbox{\hyperlink{xb__ex__expression_8cpp}{xb\+\_\+ex\+\_\+expression.\+cpp}} }{\pageref{xb__ex__expression_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/examples/\mbox{\hyperlink{xb__ex__log_8cpp}{xb\+\_\+ex\+\_\+log.\+cpp}} }{\pageref{xb__ex__log_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/examples/\mbox{\hyperlink{xb__ex__sql_8cpp}{xb\+\_\+ex\+\_\+sql.\+cpp}} }{\pageref{xb__ex__sql_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/examples/\mbox{\hyperlink{xb__ex__ssv_8cpp}{xb\+\_\+ex\+\_\+ssv.\+cpp}} }{\pageref{xb__ex__ssv_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/examples/\mbox{\hyperlink{xb__ex__string_8cpp}{xb\+\_\+ex\+\_\+string.\+cpp}} }{\pageref{xb__ex__string_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/examples/\mbox{\hyperlink{xb__ex__v3__create__dbf_8cpp}{xb\+\_\+ex\+\_\+v3\+\_\+create\+\_\+dbf.\+cpp}} }{\pageref{xb__ex__v3__create__dbf_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/examples/\mbox{\hyperlink{xb__ex__v3__upd__dbf_8cpp}{xb\+\_\+ex\+\_\+v3\+\_\+upd\+\_\+dbf.\+cpp}} }{\pageref{xb__ex__v3__upd__dbf_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/examples/\mbox{\hyperlink{xb__ex__v4__create__dbf_8cpp}{xb\+\_\+ex\+\_\+v4\+\_\+create\+\_\+dbf.\+cpp}} }{\pageref{xb__ex__v4__create__dbf_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/examples/\mbox{\hyperlink{xb__ex__v4__upd__dbf_8cpp}{xb\+\_\+ex\+\_\+v4\+\_\+upd\+\_\+dbf.\+cpp}} }{\pageref{xb__ex__v4__upd__dbf_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbase_8h}{xbase.\+h}} }{\pageref{xbase_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbbcd_8h}{xbbcd.\+h}} }{\pageref{xbbcd_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbblkread_8h}{xbblkread.\+h}} }{\pageref{xbblkread_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{include_2xbcrix_8cpp}{xbcrix.\+cpp}} }{\pageref{include_2xbcrix_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbdate_8h}{xbdate.\+h}} }{\pageref{xbdate_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbdbf_8h}{xbdbf.\+h}} }{\pageref{xbdbf_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbexp_8h}{xbexp.\+h}} }{\pageref{xbexp_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbexpnode_8h}{xbexpnode.\+h}} }{\pageref{xbexpnode_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbfile_8h}{xbfile.\+h}} }{\pageref{xbfile_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbfilter_8h}{xbfilter.\+h}} }{\pageref{xbfilter_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbindex_8h}{xbindex.\+h}} }{\pageref{xbindex_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xblnklst_8h}{xblnklst.\+h}} }{\pageref{xblnklst_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xblnklstord_8h}{xblnklstord.\+h}} }{\pageref{xblnklstord_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xblnknod_8h}{xblnknod.\+h}} }{\pageref{xblnknod_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xblog_8h}{xblog.\+h}} }{\pageref{xblog_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbmemo_8h}{xbmemo.\+h}} }{\pageref{xbmemo_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbretcod_8h}{xbretcod.\+h}} }{\pageref{xbretcod_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbsql_8h}{xbsql.\+h}} }{\pageref{xbsql_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbssv_8h}{xbssv.\+h}} }{\pageref{xbssv_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbstring_8h}{xbstring.\+h}} }{\pageref{xbstring_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbtag_8h}{xbtag.\+h}} }{\pageref{xbtag_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbtblmgr_8h}{xbtblmgr.\+h}} }{\pageref{xbtblmgr_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbtypes_8h}{xbtypes.\+h}} }{\pageref{xbtypes_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbuda_8h}{xbuda.\+h}} }{\pageref{xbuda_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbxbase_8h}{xbxbase.\+h}} }{\pageref{xbxbase_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/sql/\mbox{\hyperlink{xbalttbl_8cpp}{xbalttbl.\+cpp}} }{\pageref{xbalttbl_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/sql/\mbox{\hyperlink{sql_2xbcrix_8cpp}{xbcrix.\+cpp}} }{\pageref{sql_2xbcrix_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/sql/\mbox{\hyperlink{xbcrtbl_8cpp}{xbcrtbl.\+cpp}} }{\pageref{xbcrtbl_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/sql/\mbox{\hyperlink{xbdelete_8cpp}{xbdelete.\+cpp}} }{\pageref{xbdelete_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/sql/\mbox{\hyperlink{xbdrpix_8cpp}{xbdrpix.\+cpp}} }{\pageref{xbdrpix_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/sql/\mbox{\hyperlink{xbdrptbl_8cpp}{xbdrptbl.\+cpp}} }{\pageref{xbdrptbl_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/sql/\mbox{\hyperlink{xbinsert_8cpp}{xbinsert.\+cpp}} }{\pageref{xbinsert_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/sql/\mbox{\hyperlink{xbselect_8cpp}{xbselect.\+cpp}} }{\pageref{xbselect_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/sql/\mbox{\hyperlink{xbset_8cpp}{xbset.\+cpp}} }{\pageref{xbset_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/sql/\mbox{\hyperlink{xbsql_8cpp}{xbsql.\+cpp}} }{\pageref{xbsql_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/sql/\mbox{\hyperlink{xbstmt_8cpp}{xbstmt.\+cpp}} }{\pageref{xbstmt_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{tstfuncs_8cpp}{tstfuncs.\+cpp}} }{\pageref{tstfuncs_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__bcd_8cpp}{xb\+\_\+test\+\_\+bcd.\+cpp}} }{\pageref{xb__test__bcd_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__blockread_8cpp}{xb\+\_\+test\+\_\+blockread.\+cpp}} }{\pageref{xb__test__blockread_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__date_8cpp}{xb\+\_\+test\+\_\+date.\+cpp}} }{\pageref{xb__test__date_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__dbf__v3__memos_8cpp}{xb\+\_\+test\+\_\+dbf\+\_\+v3\+\_\+memos.\+cpp}} }{\pageref{xb__test__dbf__v3__memos_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__dbf__v3__nomemos_8cpp}{xb\+\_\+test\+\_\+dbf\+\_\+v3\+\_\+nomemos.\+cpp}} }{\pageref{xb__test__dbf__v3__nomemos_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__dbf__v4__memos_8cpp}{xb\+\_\+test\+\_\+dbf\+\_\+v4\+\_\+memos.\+cpp}} }{\pageref{xb__test__dbf__v4__memos_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__dbf__v4__nomemos_8cpp}{xb\+\_\+test\+\_\+dbf\+\_\+v4\+\_\+nomemos.\+cpp}} }{\pageref{xb__test__dbf__v4__nomemos_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__expnode_8cpp}{xb\+\_\+test\+\_\+expnode.\+cpp}} }{\pageref{xb__test__expnode_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__expression_8cpp}{xb\+\_\+test\+\_\+expression.\+cpp}} }{\pageref{xb__test__expression_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__file_8cpp}{xb\+\_\+test\+\_\+file.\+cpp}} }{\pageref{xb__test__file_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__filter_8cpp}{xb\+\_\+test\+\_\+filter.\+cpp}} }{\pageref{xb__test__filter_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__funcs_8cpp}{xb\+\_\+test\+\_\+funcs.\+cpp}} }{\pageref{xb__test__funcs_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__linklist_8cpp}{xb\+\_\+test\+\_\+linklist.\+cpp}} }{\pageref{xb__test__linklist_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__lock_8cpp}{xb\+\_\+test\+\_\+lock.\+cpp}} }{\pageref{xb__test__lock_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__lock2_8cpp}{xb\+\_\+test\+\_\+lock2.\+cpp}} }{\pageref{xb__test__lock2_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__log_8cpp}{xb\+\_\+test\+\_\+log.\+cpp}} }{\pageref{xb__test__log_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__mdx_8cpp}{xb\+\_\+test\+\_\+mdx.\+cpp}} }{\pageref{xb__test__mdx_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__ndx_8cpp}{xb\+\_\+test\+\_\+ndx.\+cpp}} }{\pageref{xb__test__ndx_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__sql_8cpp}{xb\+\_\+test\+\_\+sql.\+cpp}} }{\pageref{xb__test__sql_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__string_8cpp}{xb\+\_\+test\+\_\+string.\+cpp}} }{\pageref{xb__test__string_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__tblmgr_8cpp}{xb\+\_\+test\+\_\+tblmgr.\+cpp}} }{\pageref{xb__test__tblmgr_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__tdx_8cpp}{xb\+\_\+test\+\_\+tdx.\+cpp}} }{\pageref{xb__test__tdx_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__uda_8cpp}{xb\+\_\+test\+\_\+uda.\+cpp}} }{\pageref{xb__test__uda_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__xbase_8cpp}{xb\+\_\+test\+\_\+xbase.\+cpp}} }{\pageref{xb__test__xbase_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/utils/\mbox{\hyperlink{xb__cfg__check_8cpp}{xb\+\_\+cfg\+\_\+check.\+cpp}} }{\pageref{xb__cfg__check_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/utils/\mbox{\hyperlink{xb__copydbf_8cpp}{xb\+\_\+copydbf.\+cpp}} }{\pageref{xb__copydbf_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/utils/\mbox{\hyperlink{xb__dbfutil_8cpp}{xb\+\_\+dbfutil.\+cpp}} }{\pageref{xb__dbfutil_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/utils/\mbox{\hyperlink{xb__deletall_8cpp}{xb\+\_\+deletall.\+cpp}} }{\pageref{xb__deletall_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/utils/\mbox{\hyperlink{xb__dumpdbt_8cpp}{xb\+\_\+dumpdbt.\+cpp}} }{\pageref{xb__dumpdbt_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/utils/\mbox{\hyperlink{xb__dumprecs_8cpp}{xb\+\_\+dumprecs.\+cpp}} }{\pageref{xb__dumprecs_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/utils/\mbox{\hyperlink{xb__execsql_8cpp}{xb\+\_\+execsql.\+cpp}} }{\pageref{xb__execsql_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/utils/\mbox{\hyperlink{xb__import_8cpp}{xb\+\_\+import.\+cpp}} }{\pageref{xb__import_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/utils/\mbox{\hyperlink{xb__pack_8cpp}{xb\+\_\+pack.\+cpp}} }{\pageref{xb__pack_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/utils/\mbox{\hyperlink{xb__tblinfo_8cpp}{xb\+\_\+tblinfo.\+cpp}} }{\pageref{xb__tblinfo_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/utils/\mbox{\hyperlink{xb__undelall_8cpp}{xb\+\_\+undelall.\+cpp}} }{\pageref{xb__undelall_8cpp}}{}
+\end{DoxyCompactList}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/hierarchy.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/hierarchy.tex
new file mode 100644
index 0000000..3e597ac
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/hierarchy.tex
@@ -0,0 +1,19 @@
+\doxysection{Class Hierarchy}
+This inheritance list is sorted roughly, but not completely, alphabetically\+:\begin{DoxyCompactList}
+\item \contentsline{section}{s\+Fld\+Map}{\pageref{structsFldMap}}{}
+\item \contentsline{section}{xb\+::xb\+Schema}{\pageref{structxb_1_1xbSchema}}{}
+\item \contentsline{section}{xb\+::xb\+Ssv}{\pageref{classxb_1_1xbSsv}}{}
+\begin{DoxyCompactList}
+\item \contentsline{section}{xb\+::xb\+Date}{\pageref{classxb_1_1xbDate}}{}
+\item \contentsline{section}{xb\+::xb\+File}{\pageref{classxb_1_1xbFile}}{}
+\begin{DoxyCompactList}
+\item \contentsline{section}{xb\+::xb\+Dbf}{\pageref{classxb_1_1xbDbf}}{}
+\end{DoxyCompactList}
+\item \contentsline{section}{xb\+::xb\+Tbl\+Mgr}{\pageref{classxb_1_1xbTblMgr}}{}
+\begin{DoxyCompactList}
+\item \contentsline{section}{xb\+::xb\+XBase}{\pageref{classxb_1_1xbXBase}}{}
+\end{DoxyCompactList}
+\end{DoxyCompactList}
+\item \contentsline{section}{xb\+::xb\+String}{\pageref{classxb_1_1xbString}}{}
+\item \contentsline{section}{xb\+::xb\+Tbl\+List}{\pageref{structxb_1_1xbTblList}}{}
+\end{DoxyCompactList}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/include_2xbcrix_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/include_2xbcrix_8cpp.tex
new file mode 100644
index 0000000..80208b7
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/include_2xbcrix_8cpp.tex
@@ -0,0 +1,3 @@
+\hypertarget{include_2xbcrix_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbcrix.cpp File Reference}
+\label{include_2xbcrix_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbcrix.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbcrix.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/longtable_doxygen.sty b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/longtable_doxygen.sty
index a0eb314..a0eb314 100644
--- a/docs/doxygen/latex/longtable_doxygen.sty
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/longtable_doxygen.sty
diff --git a/docs/doxygen/latex/namespaces.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/namespaces.tex
index bac4907..bac4907 100644
--- a/docs/doxygen/latex/namespaces.tex
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/namespaces.tex
diff --git a/docs/doxygen/latex/namespacexb.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/namespacexb.tex
index 4abf6a2..4abf6a2 100644
--- a/docs/doxygen/latex/namespacexb.tex
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/namespacexb.tex
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/refman.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/refman.tex
new file mode 100644
index 0000000..76e319a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/refman.tex
@@ -0,0 +1,341 @@
+ % Handle batch mode
+ % to overcome problems with too many open files
+ \let\mypdfximage\pdfximage\def\pdfximage{\immediate\mypdfximage}
+ % Set document class depending on configuration
+ \documentclass[twoside]{book}
+ %% moved from doxygen.sty due to workaround for LaTex 2019 version and unmaintained tabu package
+ \usepackage{ifthen}
+ \ifx\requestedLaTeXdate\undefined
+ \usepackage{array}
+ \else
+ \usepackage{array}[=2016-10-06]
+ \fi
+ %%
+ % Packages required by doxygen
+ \usepackage{fixltx2e} % for \textsubscript
+ \usepackage{doxygen}
+ \usepackage{graphicx}
+ \usepackage[utf8]{inputenc}
+ \usepackage{makeidx}
+ \PassOptionsToPackage{warn}{textcomp}
+ \usepackage{textcomp}
+ \usepackage[nointegrals]{wasysym}
+ \usepackage{ifxetex}
+ % NLS support packages
+ % Define default fonts
+ % Font selection
+ \usepackage[T1]{fontenc}
+ % set main and monospaced font
+ \usepackage[scaled=.90]{helvet}
+\usepackage{courier}
+\renewcommand{\familydefault}{\sfdefault}
+ \usepackage{sectsty}
+ \allsectionsfont{%
+ \fontseries{bc}\selectfont%
+ \color{darkgray}%
+ }
+ \renewcommand{\DoxyLabelFont}{%
+ \fontseries{bc}\selectfont%
+ \color{darkgray}%
+ }
+ \newcommand{\+}{\discretionary{\mbox{\scriptsize$\hookleftarrow$}}{}{}}
+ % Arguments of doxygenemoji:
+ % 1) ':<text>:' form of the emoji, already LaTeX-escaped
+ % 2) file with the name of the emoji without the .png extension
+ % in case image exist use this otherwise use the ':<text>:' form
+ \newcommand{\doxygenemoji}[2]{%
+ \IfFileExists{./#2.png}{\raisebox{-0.1em}{\includegraphics[height=0.9em]{./#2.png}}}{#1}%
+ }
+ % Page & text layout
+ \usepackage{geometry}
+ \geometry{%
+ a4paper,%
+ top=2.5cm,%
+ bottom=2.5cm,%
+ left=2.5cm,%
+ right=2.5cm%
+ }
+ % Allow a bit of overflow to go unnoticed by other means
+ \tolerance=750
+ \hfuzz=15pt
+ \hbadness=750
+ \setlength{\emergencystretch}{15pt}
+ \setlength{\parindent}{0cm}
+ \newcommand{\doxynormalparskip}{\setlength{\parskip}{3ex plus 2ex minus 2ex}}
+ \newcommand{\doxytocparskip}{\setlength{\parskip}{1ex plus 0ex minus 0ex}}
+ \doxynormalparskip
+ % Redefine paragraph/subparagraph environments, using sectsty fonts
+ \makeatletter
+ \renewcommand{\paragraph}{%
+ \@startsection{paragraph}{4}{0ex}{-1.0ex}{1.0ex}{%
+ \normalfont\normalsize\bfseries\SS@parafont%
+ }%
+ }
+ \renewcommand{\subparagraph}{%
+ \@startsection{subparagraph}{5}{0ex}{-1.0ex}{1.0ex}{%
+ \normalfont\normalsize\bfseries\SS@subparafont%
+ }%
+ }
+ \makeatother
+ \makeatletter
+ \newcommand\hrulefilll{\leavevmode\leaders\hrule\hskip 0pt plus 1filll\kern\z@}
+ \makeatother
+ % Headers & footers
+ \usepackage{fancyhdr}
+ \pagestyle{fancyplain}
+ \renewcommand{\footrulewidth}{0.4pt}
+ \fancypagestyle{fancyplain}{
+ \fancyhf{}
+ \fancyhead[LE, RO]{\bfseries\thepage}
+ \fancyhead[LO]{\bfseries\rightmark}
+ \fancyhead[RE]{\bfseries\leftmark}
+ \fancyfoot[LO, RE]{\bfseries\scriptsize Generated by Doxygen }
+ }
+ \fancypagestyle{plain}{
+ \fancyhf{}
+ \fancyfoot[LO, RE]{\bfseries\scriptsize Generated by Doxygen }
+ \renewcommand{\headrulewidth}{0pt}
+ }
+ \pagestyle{fancyplain}
+ \renewcommand{\chaptermark}[1]{%
+ \markboth{#1}{}%
+ }
+ \renewcommand{\sectionmark}[1]{%
+ \markright{\thesection\ #1}%
+ }
+ % ToC, LoF, LoT, bibliography, and index
+ % Indices & bibliography
+ \usepackage{natbib}
+ \usepackage[titles]{tocloft}
+ \setcounter{tocdepth}{3}
+ \setcounter{secnumdepth}{5}
+ % creating indexes
+ \makeindex
+ \usepackage{newunicodechar}
+ \newunicodechar{⁻}{${}^{-}$}% Superscript minus
+ \newunicodechar{²}{${}^{2}$}% Superscript two
+ \newunicodechar{³}{${}^{3}$}% Superscript three
+ % Hyperlinks
+ % Hyperlinks (required, but should be loaded last)
+ \ifpdf
+ \usepackage[pdftex,pagebackref=true]{hyperref}
+ \else
+ \ifxetex
+ \usepackage[pagebackref=true]{hyperref}
+ \else
+ \usepackage[ps2pdf,pagebackref=true]{hyperref}
+ \fi
+ \fi
+ \hypersetup{%
+ colorlinks=true,%
+ linkcolor=blue,%
+ citecolor=blue,%
+ unicode,%
+ pdftitle=Xbase64,%
+ pdfsubject=C++ Library for handling Xbase (\+DBF) format type files%
+ }
+ % Custom commands used by the header
+ % Custom commands
+ \newcommand{\clearemptydoublepage}{%
+ \newpage{\pagestyle{empty}\cleardoublepage}%
+ }
+ % caption style definition
+ \usepackage{caption}
+ \captionsetup{labelsep=space,justification=centering,font={bf},singlelinecheck=off,skip=4pt,position=top}
+ % in page table of contents
+ \usepackage{etoc}
+ \etocsettocstyle{\doxytocparskip}{\doxynormalparskip}
+ % prevent numbers overlap the titles in toc
+ \renewcommand{\numberline}[1]{#1~}
+% End of preamble, now comes the document contents
+%===== C O N T E N T S =====
+\begin{document}
+ \raggedbottom
+ % Titlepage & ToC
+ % To avoid duplicate page anchors due to reuse of same numbers for
+ % the index (be it as roman numbers)
+ \hypersetup{pageanchor=false,
+ bookmarksnumbered=true,
+ pdfencoding=unicode
+ }
+ \pagenumbering{alph}
+ \begin{titlepage}
+ \vspace*{7cm}
+ \begin{center}%
+ {\Large Xbase64}\\
+ \vspace*{1cm}
+ {\large Generated by Doxygen 1.9.3}\\
+ \end{center}
+ \end{titlepage}
+ \clearemptydoublepage
+ \pagenumbering{roman}
+ \tableofcontents
+ \clearemptydoublepage
+ \pagenumbering{arabic}
+ % re-enable anchors again
+ \hypersetup{pageanchor=true}
+%--- Begin generated contents ---
+\chapter{Namespace Index}
+\input{namespaces}
+\chapter{Hierarchical Index}
+\input{hierarchy}
+\chapter{Data Structure Index}
+\input{annotated}
+\chapter{File Index}
+\input{files}
+\chapter{Namespace Documentation}
+\input{namespacexb}
+\chapter{Data Structure Documentation}
+\input{structsFldMap}
+\input{classxb_1_1xbDate}
+\input{classxb_1_1xbDbf}
+\input{classxb_1_1xbFile}
+\input{structxb_1_1xbSchema}
+\input{classxb_1_1xbSsv}
+\input{classxb_1_1xbString}
+\input{structxb_1_1xbTblList}
+\input{classxb_1_1xbTblMgr}
+\input{classxb_1_1xbXBase}
+\chapter{File Documentation}
+\input{xbbcd_8cpp}
+\input{xbblockread_8cpp}
+\input{xbdate_8cpp}
+\input{xbdbf_8cpp}
+\input{xbdbf3_8cpp}
+\input{xbdbf4_8cpp}
+\input{xbexp_8cpp}
+\input{xbexpnode_8cpp}
+\input{xbfields_8cpp}
+\input{xbfile_8cpp}
+\input{xbfilter_8cpp}
+\input{xbfuncs_8cpp}
+\input{xbixbase_8cpp}
+\input{xbixmdx_8cpp}
+\input{xbixndx_8cpp}
+\input{xbixtdx_8cpp}
+\input{xblog_8cpp}
+\input{xbmemo_8cpp}
+\input{xbmemo3_8cpp}
+\input{xbmemo4_8cpp}
+\input{xbssv_8cpp}
+\input{xbstring_8cpp}
+\input{xbtag_8cpp}
+\input{xbtblmgr_8cpp}
+\input{xbuda_8cpp}
+\input{xbxbase_8cpp}
+\input{xb__ex__date_8cpp}
+\input{xb__ex__expression_8cpp}
+\input{xb__ex__log_8cpp}
+\input{xb__ex__sql_8cpp}
+\input{xb__ex__ssv_8cpp}
+\input{xb__ex__string_8cpp}
+\input{xb__ex__v3__create__dbf_8cpp}
+\input{xb__ex__v3__upd__dbf_8cpp}
+\input{xb__ex__v4__create__dbf_8cpp}
+\input{xb__ex__v4__upd__dbf_8cpp}
+\input{xbase_8h}
+\input{xbase_8h_source}
+\input{xbbcd_8h}
+\input{xbbcd_8h_source}
+\input{xbblkread_8h}
+\input{xbblkread_8h_source}
+\input{include_2xbcrix_8cpp}
+\input{sql_2xbcrix_8cpp}
+\input{xbdate_8h}
+\input{xbdate_8h_source}
+\input{xbdbf_8h}
+\input{xbdbf_8h_source}
+\input{xbexp_8h}
+\input{xbexp_8h_source}
+\input{xbexpnode_8h}
+\input{xbexpnode_8h_source}
+\input{xbfile_8h}
+\input{xbfile_8h_source}
+\input{xbfilter_8h}
+\input{xbfilter_8h_source}
+\input{xbindex_8h}
+\input{xbindex_8h_source}
+\input{xblnklst_8h}
+\input{xblnklst_8h_source}
+\input{xblnklstord_8h}
+\input{xblnklstord_8h_source}
+\input{xblnknod_8h}
+\input{xblnknod_8h_source}
+\input{xblog_8h}
+\input{xblog_8h_source}
+\input{xbmemo_8h}
+\input{xbmemo_8h_source}
+\input{xbretcod_8h}
+\input{xbretcod_8h_source}
+\input{xbsql_8h}
+\input{xbsql_8h_source}
+\input{xbssv_8h}
+\input{xbssv_8h_source}
+\input{xbstring_8h}
+\input{xbstring_8h_source}
+\input{xbtag_8h}
+\input{xbtag_8h_source}
+\input{xbtblmgr_8h}
+\input{xbtblmgr_8h_source}
+\input{xbtypes_8h}
+\input{xbtypes_8h_source}
+\input{xbuda_8h}
+\input{xbuda_8h_source}
+\input{xbxbase_8h}
+\input{xbxbase_8h_source}
+\input{xbalttbl_8cpp}
+\input{xbcrtbl_8cpp}
+\input{xbdelete_8cpp}
+\input{xbdrpix_8cpp}
+\input{xbdrptbl_8cpp}
+\input{xbinsert_8cpp}
+\input{xbselect_8cpp}
+\input{xbset_8cpp}
+\input{xbsql_8cpp}
+\input{xbstmt_8cpp}
+\input{tstfuncs_8cpp}
+\input{xb__test__bcd_8cpp}
+\input{xb__test__blockread_8cpp}
+\input{xb__test__date_8cpp}
+\input{xb__test__dbf__v3__memos_8cpp}
+\input{xb__test__dbf__v3__nomemos_8cpp}
+\input{xb__test__dbf__v4__memos_8cpp}
+\input{xb__test__dbf__v4__nomemos_8cpp}
+\input{xb__test__expnode_8cpp}
+\input{xb__test__expression_8cpp}
+\input{xb__test__file_8cpp}
+\input{xb__test__filter_8cpp}
+\input{xb__test__funcs_8cpp}
+\input{xb__test__linklist_8cpp}
+\input{xb__test__lock_8cpp}
+\input{xb__test__lock2_8cpp}
+\input{xb__test__log_8cpp}
+\input{xb__test__mdx_8cpp}
+\input{xb__test__ndx_8cpp}
+\input{xb__test__sql_8cpp}
+\input{xb__test__string_8cpp}
+\input{xb__test__tblmgr_8cpp}
+\input{xb__test__tdx_8cpp}
+\input{xb__test__uda_8cpp}
+\input{xb__test__xbase_8cpp}
+\input{xb__cfg__check_8cpp}
+\input{xb__copydbf_8cpp}
+\input{xb__dbfutil_8cpp}
+\input{xb__deletall_8cpp}
+\input{xb__dumpdbt_8cpp}
+\input{xb__dumprecs_8cpp}
+\input{xb__execsql_8cpp}
+\input{xb__import_8cpp}
+\input{xb__pack_8cpp}
+\input{xb__tblinfo_8cpp}
+\input{xb__undelall_8cpp}
+%--- End generated contents ---
+% Index
+ \backmatter
+ \newpage
+ \phantomsection
+ \clearemptydoublepage
+ \addcontentsline{toc}{chapter}{\indexname}
+ \printindex
+% Required for some languages (in combination with latexdocumentpre from the header)
+\end{document}
diff --git a/docs/doxygen/latex/reindex_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/reindex_8cpp.tex
index 043a116..043a116 100644
--- a/docs/doxygen/latex/reindex_8cpp.tex
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/reindex_8cpp.tex
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/sql_2xbcrix_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/sql_2xbcrix_8cpp.tex
new file mode 100644
index 0000000..da0bd97
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/sql_2xbcrix_8cpp.tex
@@ -0,0 +1,3 @@
+\hypertarget{sql_2xbcrix_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/sql/xbcrix.cpp File Reference}
+\label{sql_2xbcrix_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbcrix.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbcrix.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/structsFldMap.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/structsFldMap.tex
new file mode 100644
index 0000000..84b0861
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/structsFldMap.tex
@@ -0,0 +1,45 @@
+\hypertarget{structsFldMap}{}\doxysection{s\+Fld\+Map Struct Reference}
+\label{structsFldMap}\index{sFldMap@{sFldMap}}
+\doxysubsection*{Data Fields}
+\begin{DoxyCompactItemize}
+\item
+xb\+UInt32 \mbox{\hyperlink{structsFldMap_a02facce45c24ebecc13975c17fd52b8f}{i\+Rec\+Pos}}
+\item
+xb\+Int16 \mbox{\hyperlink{structsFldMap_a42eb801a85d8b60f06c4fe1be13ca723}{i\+Fld\+No}}
+\item
+char \mbox{\hyperlink{structsFldMap_af89b26b2d4bc6e26c597f8c48b97b1a3}{c\+Fld\+Type}}
+\item
+\mbox{\hyperlink{structsFldMap}{s\+Fld\+Map}} $\ast$ \mbox{\hyperlink{structsFldMap_a16eaff8fc09adc3faf453bfaa0d3baaa}{next}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Field Documentation}
+\mbox{\Hypertarget{structsFldMap_af89b26b2d4bc6e26c597f8c48b97b1a3}\label{structsFldMap_af89b26b2d4bc6e26c597f8c48b97b1a3}}
+\index{sFldMap@{sFldMap}!cFldType@{cFldType}}
+\index{cFldType@{cFldType}!sFldMap@{sFldMap}}
+\doxysubsubsection{\texorpdfstring{cFldType}{cFldType}}
+{\footnotesize\ttfamily char s\+Fld\+Map\+::c\+Fld\+Type}
+
+\mbox{\Hypertarget{structsFldMap_a42eb801a85d8b60f06c4fe1be13ca723}\label{structsFldMap_a42eb801a85d8b60f06c4fe1be13ca723}}
+\index{sFldMap@{sFldMap}!iFldNo@{iFldNo}}
+\index{iFldNo@{iFldNo}!sFldMap@{sFldMap}}
+\doxysubsubsection{\texorpdfstring{iFldNo}{iFldNo}}
+{\footnotesize\ttfamily xb\+Int16 s\+Fld\+Map\+::i\+Fld\+No}
+
+\mbox{\Hypertarget{structsFldMap_a02facce45c24ebecc13975c17fd52b8f}\label{structsFldMap_a02facce45c24ebecc13975c17fd52b8f}}
+\index{sFldMap@{sFldMap}!iRecPos@{iRecPos}}
+\index{iRecPos@{iRecPos}!sFldMap@{sFldMap}}
+\doxysubsubsection{\texorpdfstring{iRecPos}{iRecPos}}
+{\footnotesize\ttfamily xb\+UInt32 s\+Fld\+Map\+::i\+Rec\+Pos}
+
+\mbox{\Hypertarget{structsFldMap_a16eaff8fc09adc3faf453bfaa0d3baaa}\label{structsFldMap_a16eaff8fc09adc3faf453bfaa0d3baaa}}
+\index{sFldMap@{sFldMap}!next@{next}}
+\index{next@{next}!sFldMap@{sFldMap}}
+\doxysubsubsection{\texorpdfstring{next}{next}}
+{\footnotesize\ttfamily \mbox{\hyperlink{structsFldMap}{s\+Fld\+Map}}$\ast$ s\+Fld\+Map\+::next}
+
+
+
+The documentation for this struct was generated from the following file\+:\begin{DoxyCompactItemize}
+\item
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/utils/\mbox{\hyperlink{xb__import_8cpp}{xb\+\_\+import.\+cpp}}\end{DoxyCompactItemize}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/structxb_1_1xbSchema.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/structxb_1_1xbSchema.tex
new file mode 100644
index 0000000..74cc2bc
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/structxb_1_1xbSchema.tex
@@ -0,0 +1,77 @@
+\hypertarget{structxb_1_1xbSchema}{}\doxysection{xb\+::xb\+Schema Struct Reference}
+\label{structxb_1_1xbSchema}\index{xb::xbSchema@{xb::xbSchema}}
+
+
+Schema used for defining tables with Create\+Table methods.
+
+
+
+
+{\ttfamily \#include $<$xbdbf.\+h$>$}
+
+\doxysubsection*{Data Fields}
+\begin{DoxyCompactItemize}
+\item
+char \mbox{\hyperlink{structxb_1_1xbSchema_a514183856094123fd37df67885b4681e}{c\+Field\+Name}} \mbox{[}11\mbox{]}
+\item
+char \mbox{\hyperlink{structxb_1_1xbSchema_a1d612b2ed5dc0b0289c9e91b3cda3a25}{c\+Type}}
+\item
+xb\+Int16 \mbox{\hyperlink{structxb_1_1xbSchema_a2da554af25ef628acf59bb52996056ac}{i\+Field\+Len}}
+\item
+xb\+Int16 \mbox{\hyperlink{structxb_1_1xbSchema_a55bab3bb69dee3508d168c93e182d4b9}{i\+No\+Of\+Decs}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Schema used for defining tables with Create\+Table methods.
+
+See program \mbox{\hyperlink{xb__ex__v3__create__dbf_8cpp}{xb\+\_\+ex\+\_\+v3\+\_\+create\+\_\+dbf.\+cpp}} or \mbox{\hyperlink{xb__ex__v4__create__dbf_8cpp}{xb\+\_\+ex\+\_\+v4\+\_\+create\+\_\+dbf.\+cpp}} as examples on how to use.
+
+
+\begin{DoxyCode}{0}
+\DoxyCodeLine{xbSchema MyRecord[] = \{}
+\DoxyCodeLine{\textcolor{comment}{// FieldName, Type, Len, Dec}}
+\DoxyCodeLine{ \{ \textcolor{stringliteral}{"{}FIRSTNAME"{}}, \mbox{\hyperlink{xbdbf_8h_a20f739b9d9dc6a002a246a999e76aeaa}{XB\_CHAR\_FLD}}, 15, 0 \},}
+\DoxyCodeLine{ \{ \textcolor{stringliteral}{"{}LASTNAME"{}}, \mbox{\hyperlink{xbdbf_8h_a20f739b9d9dc6a002a246a999e76aeaa}{XB\_CHAR\_FLD}}, 20, 0 \},}
+\DoxyCodeLine{ \{ \textcolor{stringliteral}{"{}BIRTHDATE"{}}, \mbox{\hyperlink{xbdbf_8h_a7f685e6f5fe804b2174725a27ce73adc}{XB\_DATE\_FLD}}, 8, 0 \},}
+\DoxyCodeLine{ \{ \textcolor{stringliteral}{"{}AMOUNT"{}}, \mbox{\hyperlink{xbdbf_8h_ae9fb6d69cc5edc94d36ae403c22ec1c6}{XB\_NUMERIC\_FLD}}, 9, 2 \},}
+\DoxyCodeLine{ \{ \textcolor{stringliteral}{"{}RETIRED?"{}}, \mbox{\hyperlink{xbdbf_8h_a2f6d5073af761bc1a806a2c7b1c1d886}{XB\_LOGICAL\_FLD}}, 1, 0 \},}
+\DoxyCodeLine{ \{ \textcolor{stringliteral}{"{}ZIPCODE"{}}, \mbox{\hyperlink{xbdbf_8h_ae9fb6d69cc5edc94d36ae403c22ec1c6}{XB\_NUMERIC\_FLD}}, 5, 0 \},}
+\DoxyCodeLine{ \{ \textcolor{stringliteral}{"{}NUMFLD1"{}}, \mbox{\hyperlink{xbdbf_8h_a96ab4218d70ab603b4866354ce8c18cd}{XB\_FLOAT\_FLD}}, 12, 2 \},}
+\DoxyCodeLine{ \{ \textcolor{stringliteral}{"{}NUMFLD2"{}}, \mbox{\hyperlink{xbdbf_8h_a96ab4218d70ab603b4866354ce8c18cd}{XB\_FLOAT\_FLD}}, 14, 2 \},}
+\DoxyCodeLine{ \{ \textcolor{stringliteral}{"{}MEMO1"{}}, \mbox{\hyperlink{xbdbf_8h_a23fa19b19cb43bd6dcc59a5a3f6c30ad}{XB\_MEMO\_FLD}}, 10, 0 \},}
+\DoxyCodeLine{ \{ \textcolor{stringliteral}{"{}"{}},0,0,0 \}\};}
+
+\end{DoxyCode}
+
+
+\doxysubsection{Field Documentation}
+\mbox{\Hypertarget{structxb_1_1xbSchema_a514183856094123fd37df67885b4681e}\label{structxb_1_1xbSchema_a514183856094123fd37df67885b4681e}}
+\index{xb::xbSchema@{xb::xbSchema}!cFieldName@{cFieldName}}
+\index{cFieldName@{cFieldName}!xb::xbSchema@{xb::xbSchema}}
+\doxysubsubsection{\texorpdfstring{cFieldName}{cFieldName}}
+{\footnotesize\ttfamily char xb\+::xb\+Schema\+::c\+Field\+Name\mbox{[}11\mbox{]}}
+
+\mbox{\Hypertarget{structxb_1_1xbSchema_a1d612b2ed5dc0b0289c9e91b3cda3a25}\label{structxb_1_1xbSchema_a1d612b2ed5dc0b0289c9e91b3cda3a25}}
+\index{xb::xbSchema@{xb::xbSchema}!cType@{cType}}
+\index{cType@{cType}!xb::xbSchema@{xb::xbSchema}}
+\doxysubsubsection{\texorpdfstring{cType}{cType}}
+{\footnotesize\ttfamily char xb\+::xb\+Schema\+::c\+Type}
+
+\mbox{\Hypertarget{structxb_1_1xbSchema_a2da554af25ef628acf59bb52996056ac}\label{structxb_1_1xbSchema_a2da554af25ef628acf59bb52996056ac}}
+\index{xb::xbSchema@{xb::xbSchema}!iFieldLen@{iFieldLen}}
+\index{iFieldLen@{iFieldLen}!xb::xbSchema@{xb::xbSchema}}
+\doxysubsubsection{\texorpdfstring{iFieldLen}{iFieldLen}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Schema\+::i\+Field\+Len}
+
+\mbox{\Hypertarget{structxb_1_1xbSchema_a55bab3bb69dee3508d168c93e182d4b9}\label{structxb_1_1xbSchema_a55bab3bb69dee3508d168c93e182d4b9}}
+\index{xb::xbSchema@{xb::xbSchema}!iNoOfDecs@{iNoOfDecs}}
+\index{iNoOfDecs@{iNoOfDecs}!xb::xbSchema@{xb::xbSchema}}
+\doxysubsubsection{\texorpdfstring{iNoOfDecs}{iNoOfDecs}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Schema\+::i\+No\+Of\+Decs}
+
+
+
+The documentation for this struct was generated from the following file\+:\begin{DoxyCompactItemize}
+\item
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbdbf_8h}{xbdbf.\+h}}\end{DoxyCompactItemize}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/structxb_1_1xbTblList.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/structxb_1_1xbTblList.tex
new file mode 100644
index 0000000..5984665
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/structxb_1_1xbTblList.tex
@@ -0,0 +1,57 @@
+\hypertarget{structxb_1_1xbTblList}{}\doxysection{xb\+::xb\+Tbl\+List Struct Reference}
+\label{structxb_1_1xbTblList}\index{xb::xbTblList@{xb::xbTblList}}
+
+
+{\ttfamily \#include $<$xbtblmgr.\+h$>$}
+
+\doxysubsection*{Data Fields}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\hyperlink{structxb_1_1xbTblList}{xb\+Tbl\+List}} $\ast$ \mbox{\hyperlink{structxb_1_1xbTblList_a3fd169fcf0fd4df927544e5342db583c}{p\+Next}}
+\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} $\ast$ \mbox{\hyperlink{structxb_1_1xbTblList_aceec65f6f6b585788cf98e8dabd2737d}{ps\+Fq\+Tbl\+Name}}
+\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} $\ast$ \mbox{\hyperlink{structxb_1_1xbTblList_a02c3b0c47fd104ef9758b375ecdcfd0f}{ps\+Tbl\+Name}}
+\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} $\ast$ \mbox{\hyperlink{structxb_1_1xbTblList_ac87742c8a6b1cf2e7e35218e96966a05}{ps\+Tbl\+Alias}}
+\item
+\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$ \mbox{\hyperlink{structxb_1_1xbTblList_a387d3f6bbf291a1fb96d276ed9bb96b6}{p\+Dbf}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Field Documentation}
+\mbox{\Hypertarget{structxb_1_1xbTblList_a387d3f6bbf291a1fb96d276ed9bb96b6}\label{structxb_1_1xbTblList_a387d3f6bbf291a1fb96d276ed9bb96b6}}
+\index{xb::xbTblList@{xb::xbTblList}!pDbf@{pDbf}}
+\index{pDbf@{pDbf}!xb::xbTblList@{xb::xbTblList}}
+\doxysubsubsection{\texorpdfstring{pDbf}{pDbf}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}}$\ast$ xb\+::xb\+Tbl\+List\+::p\+Dbf}
+
+\mbox{\Hypertarget{structxb_1_1xbTblList_a3fd169fcf0fd4df927544e5342db583c}\label{structxb_1_1xbTblList_a3fd169fcf0fd4df927544e5342db583c}}
+\index{xb::xbTblList@{xb::xbTblList}!pNext@{pNext}}
+\index{pNext@{pNext}!xb::xbTblList@{xb::xbTblList}}
+\doxysubsubsection{\texorpdfstring{pNext}{pNext}}
+{\footnotesize\ttfamily \mbox{\hyperlink{structxb_1_1xbTblList}{xb\+Tbl\+List}}$\ast$ xb\+::xb\+Tbl\+List\+::p\+Next}
+
+\mbox{\Hypertarget{structxb_1_1xbTblList_aceec65f6f6b585788cf98e8dabd2737d}\label{structxb_1_1xbTblList_aceec65f6f6b585788cf98e8dabd2737d}}
+\index{xb::xbTblList@{xb::xbTblList}!psFqTblName@{psFqTblName}}
+\index{psFqTblName@{psFqTblName}!xb::xbTblList@{xb::xbTblList}}
+\doxysubsubsection{\texorpdfstring{psFqTblName}{psFqTblName}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}}$\ast$ xb\+::xb\+Tbl\+List\+::ps\+Fq\+Tbl\+Name}
+
+\mbox{\Hypertarget{structxb_1_1xbTblList_ac87742c8a6b1cf2e7e35218e96966a05}\label{structxb_1_1xbTblList_ac87742c8a6b1cf2e7e35218e96966a05}}
+\index{xb::xbTblList@{xb::xbTblList}!psTblAlias@{psTblAlias}}
+\index{psTblAlias@{psTblAlias}!xb::xbTblList@{xb::xbTblList}}
+\doxysubsubsection{\texorpdfstring{psTblAlias}{psTblAlias}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}}$\ast$ xb\+::xb\+Tbl\+List\+::ps\+Tbl\+Alias}
+
+\mbox{\Hypertarget{structxb_1_1xbTblList_a02c3b0c47fd104ef9758b375ecdcfd0f}\label{structxb_1_1xbTblList_a02c3b0c47fd104ef9758b375ecdcfd0f}}
+\index{xb::xbTblList@{xb::xbTblList}!psTblName@{psTblName}}
+\index{psTblName@{psTblName}!xb::xbTblList@{xb::xbTblList}}
+\doxysubsubsection{\texorpdfstring{psTblName}{psTblName}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}}$\ast$ xb\+::xb\+Tbl\+List\+::ps\+Tbl\+Name}
+
+
+
+The documentation for this struct was generated from the following file\+:\begin{DoxyCompactItemize}
+\item
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbtblmgr_8h}{xbtblmgr.\+h}}\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/tabu_doxygen.sty b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/tabu_doxygen.sty
index 3f17d1d..3f17d1d 100644
--- a/docs/doxygen/latex/tabu_doxygen.sty
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/tabu_doxygen.sty
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/tstfuncs_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/tstfuncs_8cpp.tex
new file mode 100644
index 0000000..86ee7de
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/tstfuncs_8cpp.tex
@@ -0,0 +1,118 @@
+\hypertarget{tstfuncs_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/tstfuncs.cpp File Reference}
+\label{tstfuncs_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/tstfuncs.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/tstfuncs.cpp}}
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+xb\+Double \mbox{\hyperlink{tstfuncs_8cpp_af990eed1e43605771a5810196b4043f7}{Chron\+Time}} ()
+\item
+void \mbox{\hyperlink{tstfuncs_8cpp_ab1f17da15e67a8b2460d5a88b7a3db6e}{Init\+Time}} ()
+\item
+xb\+Bool \mbox{\hyperlink{tstfuncs_8cpp_a8b8e417213c57f2ea0bcb61a7fb28860}{dbl\+Equals}} (xb\+Double a, xb\+Double b, xb\+Double epsilon)
+\item
+xb\+Int16 \mbox{\hyperlink{tstfuncs_8cpp_a265547b80a3aef5836952bede5288e2c}{Test\+Method}} (xb\+Int16 Print\+Option, const char $\ast$title, const xb\+String \&result, const char $\ast$expected\+Result, size\+\_\+t expected\+Len)
+\item
+xb\+Int16 \mbox{\hyperlink{tstfuncs_8cpp_a9c27703ef863c9d29680844fc5124953}{Test\+Method}} (xb\+Int16 Print\+Option, const char $\ast$title, char result, char expected\+Result)
+\item
+xb\+Int16 \mbox{\hyperlink{tstfuncs_8cpp_ae6536e920580382389126d5f66655f90}{Test\+Method}} (xb\+Int16 Print\+Option, const char $\ast$title, xb\+Int32 result, xb\+Int32 expected\+Result)
+\item
+xb\+Int16 \mbox{\hyperlink{tstfuncs_8cpp_a000fca67bc0fffea3d3da7a5317a06e4}{Test\+Method}} (xb\+Int16 Print\+Option, const char $\ast$title, xb\+UInt64 result, xb\+UInt64 expected\+Result)
+\item
+xb\+Int16 \mbox{\hyperlink{tstfuncs_8cpp_a663f3dd7bd8574a35c1b1b9a22081c6d}{Test\+Method}} (xb\+Int16 Print\+Option, const char $\ast$title, xb\+Float result, xb\+Float expected\+Result)
+\item
+xb\+Int16 \mbox{\hyperlink{tstfuncs_8cpp_af1c78fb72bcd39eb86f11aa2887fe62c}{Test\+Method}} (xb\+Int16 Print\+Option, const char $\ast$title, xb\+Double result, xb\+Double expected\+Result)
+\item
+xb\+Int16 \mbox{\hyperlink{tstfuncs_8cpp_ac64a0bed74ba10b638456709f128f893}{Test\+Method}} (xb\+Int16 Print\+Option, const char $\ast$title, xb\+Double result, xb\+Double expected\+Result, xb\+Double d\+Epsilon)
+\item
+xb\+Double \mbox{\hyperlink{tstfuncs_8cpp_a69a6e718e066af7f8392e5f1fea40d1b}{dbl\+Max}} (xb\+Double a, xb\+Double b)
+\item
+xb\+Double \mbox{\hyperlink{tstfuncs_8cpp_a4d7b8f3f1ce52c6c0a281f25419f4c93}{dbl\+Min}} (xb\+Double a, xb\+Double b)
+\end{DoxyCompactItemize}
+\doxysubsection*{Variables}
+\begin{DoxyCompactItemize}
+\item
+time\+\_\+t \mbox{\hyperlink{tstfuncs_8cpp_ae2281da6157495d69406c35f69a61f9f}{timer}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{tstfuncs_8cpp_af990eed1e43605771a5810196b4043f7}\label{tstfuncs_8cpp_af990eed1e43605771a5810196b4043f7}}
+\index{tstfuncs.cpp@{tstfuncs.cpp}!ChronTime@{ChronTime}}
+\index{ChronTime@{ChronTime}!tstfuncs.cpp@{tstfuncs.cpp}}
+\doxysubsubsection{\texorpdfstring{ChronTime()}{ChronTime()}}
+{\footnotesize\ttfamily xb\+Double Chron\+Time (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{tstfuncs_8cpp_a8b8e417213c57f2ea0bcb61a7fb28860}\label{tstfuncs_8cpp_a8b8e417213c57f2ea0bcb61a7fb28860}}
+\index{tstfuncs.cpp@{tstfuncs.cpp}!dblEquals@{dblEquals}}
+\index{dblEquals@{dblEquals}!tstfuncs.cpp@{tstfuncs.cpp}}
+\doxysubsubsection{\texorpdfstring{dblEquals()}{dblEquals()}}
+{\footnotesize\ttfamily xb\+Bool dbl\+Equals (\begin{DoxyParamCaption}\item[{xb\+Double}]{a, }\item[{xb\+Double}]{b, }\item[{xb\+Double}]{epsilon = {\ttfamily 0.0001} }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{tstfuncs_8cpp_a69a6e718e066af7f8392e5f1fea40d1b}\label{tstfuncs_8cpp_a69a6e718e066af7f8392e5f1fea40d1b}}
+\index{tstfuncs.cpp@{tstfuncs.cpp}!dblMax@{dblMax}}
+\index{dblMax@{dblMax}!tstfuncs.cpp@{tstfuncs.cpp}}
+\doxysubsubsection{\texorpdfstring{dblMax()}{dblMax()}}
+{\footnotesize\ttfamily xb\+Double dbl\+Max (\begin{DoxyParamCaption}\item[{xb\+Double}]{a, }\item[{xb\+Double}]{b }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{tstfuncs_8cpp_a4d7b8f3f1ce52c6c0a281f25419f4c93}\label{tstfuncs_8cpp_a4d7b8f3f1ce52c6c0a281f25419f4c93}}
+\index{tstfuncs.cpp@{tstfuncs.cpp}!dblMin@{dblMin}}
+\index{dblMin@{dblMin}!tstfuncs.cpp@{tstfuncs.cpp}}
+\doxysubsubsection{\texorpdfstring{dblMin()}{dblMin()}}
+{\footnotesize\ttfamily xb\+Double dbl\+Min (\begin{DoxyParamCaption}\item[{xb\+Double}]{a, }\item[{xb\+Double}]{b }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{tstfuncs_8cpp_ab1f17da15e67a8b2460d5a88b7a3db6e}\label{tstfuncs_8cpp_ab1f17da15e67a8b2460d5a88b7a3db6e}}
+\index{tstfuncs.cpp@{tstfuncs.cpp}!InitTime@{InitTime}}
+\index{InitTime@{InitTime}!tstfuncs.cpp@{tstfuncs.cpp}}
+\doxysubsubsection{\texorpdfstring{InitTime()}{InitTime()}}
+{\footnotesize\ttfamily void Init\+Time (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{tstfuncs_8cpp_a9c27703ef863c9d29680844fc5124953}\label{tstfuncs_8cpp_a9c27703ef863c9d29680844fc5124953}}
+\index{tstfuncs.cpp@{tstfuncs.cpp}!TestMethod@{TestMethod}}
+\index{TestMethod@{TestMethod}!tstfuncs.cpp@{tstfuncs.cpp}}
+\doxysubsubsection{\texorpdfstring{TestMethod()}{TestMethod()}\hspace{0.1cm}{\footnotesize\ttfamily [1/7]}}
+{\footnotesize\ttfamily xb\+Int16 Test\+Method (\begin{DoxyParamCaption}\item[{xb\+Int16}]{Print\+Option, }\item[{const char $\ast$}]{title, }\item[{char}]{result, }\item[{char}]{expected\+Result }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{tstfuncs_8cpp_a265547b80a3aef5836952bede5288e2c}\label{tstfuncs_8cpp_a265547b80a3aef5836952bede5288e2c}}
+\index{tstfuncs.cpp@{tstfuncs.cpp}!TestMethod@{TestMethod}}
+\index{TestMethod@{TestMethod}!tstfuncs.cpp@{tstfuncs.cpp}}
+\doxysubsubsection{\texorpdfstring{TestMethod()}{TestMethod()}\hspace{0.1cm}{\footnotesize\ttfamily [2/7]}}
+{\footnotesize\ttfamily xb\+Int16 Test\+Method (\begin{DoxyParamCaption}\item[{xb\+Int16}]{Print\+Option, }\item[{const char $\ast$}]{title, }\item[{const xb\+String \&}]{result, }\item[{const char $\ast$}]{expected\+Result, }\item[{size\+\_\+t}]{expected\+Len }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{tstfuncs_8cpp_af1c78fb72bcd39eb86f11aa2887fe62c}\label{tstfuncs_8cpp_af1c78fb72bcd39eb86f11aa2887fe62c}}
+\index{tstfuncs.cpp@{tstfuncs.cpp}!TestMethod@{TestMethod}}
+\index{TestMethod@{TestMethod}!tstfuncs.cpp@{tstfuncs.cpp}}
+\doxysubsubsection{\texorpdfstring{TestMethod()}{TestMethod()}\hspace{0.1cm}{\footnotesize\ttfamily [3/7]}}
+{\footnotesize\ttfamily xb\+Int16 Test\+Method (\begin{DoxyParamCaption}\item[{xb\+Int16}]{Print\+Option, }\item[{const char $\ast$}]{title, }\item[{xb\+Double}]{result, }\item[{xb\+Double}]{expected\+Result }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{tstfuncs_8cpp_ac64a0bed74ba10b638456709f128f893}\label{tstfuncs_8cpp_ac64a0bed74ba10b638456709f128f893}}
+\index{tstfuncs.cpp@{tstfuncs.cpp}!TestMethod@{TestMethod}}
+\index{TestMethod@{TestMethod}!tstfuncs.cpp@{tstfuncs.cpp}}
+\doxysubsubsection{\texorpdfstring{TestMethod()}{TestMethod()}\hspace{0.1cm}{\footnotesize\ttfamily [4/7]}}
+{\footnotesize\ttfamily xb\+Int16 Test\+Method (\begin{DoxyParamCaption}\item[{xb\+Int16}]{Print\+Option, }\item[{const char $\ast$}]{title, }\item[{xb\+Double}]{result, }\item[{xb\+Double}]{expected\+Result, }\item[{xb\+Double}]{d\+Epsilon }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{tstfuncs_8cpp_a663f3dd7bd8574a35c1b1b9a22081c6d}\label{tstfuncs_8cpp_a663f3dd7bd8574a35c1b1b9a22081c6d}}
+\index{tstfuncs.cpp@{tstfuncs.cpp}!TestMethod@{TestMethod}}
+\index{TestMethod@{TestMethod}!tstfuncs.cpp@{tstfuncs.cpp}}
+\doxysubsubsection{\texorpdfstring{TestMethod()}{TestMethod()}\hspace{0.1cm}{\footnotesize\ttfamily [5/7]}}
+{\footnotesize\ttfamily xb\+Int16 Test\+Method (\begin{DoxyParamCaption}\item[{xb\+Int16}]{Print\+Option, }\item[{const char $\ast$}]{title, }\item[{xb\+Float}]{result, }\item[{xb\+Float}]{expected\+Result }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{tstfuncs_8cpp_ae6536e920580382389126d5f66655f90}\label{tstfuncs_8cpp_ae6536e920580382389126d5f66655f90}}
+\index{tstfuncs.cpp@{tstfuncs.cpp}!TestMethod@{TestMethod}}
+\index{TestMethod@{TestMethod}!tstfuncs.cpp@{tstfuncs.cpp}}
+\doxysubsubsection{\texorpdfstring{TestMethod()}{TestMethod()}\hspace{0.1cm}{\footnotesize\ttfamily [6/7]}}
+{\footnotesize\ttfamily xb\+Int16 Test\+Method (\begin{DoxyParamCaption}\item[{xb\+Int16}]{Print\+Option, }\item[{const char $\ast$}]{title, }\item[{xb\+Int32}]{result, }\item[{xb\+Int32}]{expected\+Result }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{tstfuncs_8cpp_a000fca67bc0fffea3d3da7a5317a06e4}\label{tstfuncs_8cpp_a000fca67bc0fffea3d3da7a5317a06e4}}
+\index{tstfuncs.cpp@{tstfuncs.cpp}!TestMethod@{TestMethod}}
+\index{TestMethod@{TestMethod}!tstfuncs.cpp@{tstfuncs.cpp}}
+\doxysubsubsection{\texorpdfstring{TestMethod()}{TestMethod()}\hspace{0.1cm}{\footnotesize\ttfamily [7/7]}}
+{\footnotesize\ttfamily xb\+Int16 Test\+Method (\begin{DoxyParamCaption}\item[{xb\+Int16}]{Print\+Option, }\item[{const char $\ast$}]{title, }\item[{xb\+UInt64}]{result, }\item[{xb\+UInt64}]{expected\+Result }\end{DoxyParamCaption})}
+
+
+
+\doxysubsection{Variable Documentation}
+\mbox{\Hypertarget{tstfuncs_8cpp_ae2281da6157495d69406c35f69a61f9f}\label{tstfuncs_8cpp_ae2281da6157495d69406c35f69a61f9f}}
+\index{tstfuncs.cpp@{tstfuncs.cpp}!timer@{timer}}
+\index{timer@{timer}!tstfuncs.cpp@{tstfuncs.cpp}}
+\doxysubsubsection{\texorpdfstring{timer}{timer}}
+{\footnotesize\ttfamily time\+\_\+t timer}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__cfg__check_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__cfg__check_8cpp.tex
new file mode 100644
index 0000000..89a9502
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__cfg__check_8cpp.tex
@@ -0,0 +1,19 @@
+\hypertarget{xb__cfg__check_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\+\_\+cfg\+\_\+check.cpp File Reference}
+\label{xb__cfg__check_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_cfg\_check.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_cfg\_check.cpp}}
+{\ttfamily \#include $<$stdio.\+h$>$}\newline
+{\ttfamily \#include $<$stdlib.\+h$>$}\newline
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{xb__cfg__check_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}{main}} ()
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__cfg__check_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}\label{xb__cfg__check_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}}
+\index{xb\_cfg\_check.cpp@{xb\_cfg\_check.cpp}!main@{main}}
+\index{main@{main}!xb\_cfg\_check.cpp@{xb\_cfg\_check.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__copydbf_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__copydbf_8cpp.tex
new file mode 100644
index 0000000..f16df05
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__copydbf_8cpp.tex
@@ -0,0 +1,33 @@
+\hypertarget{xb__copydbf_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\+\_\+copydbf.cpp File Reference}
+\label{xb__copydbf_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_copydbf.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_copydbf.cpp}}
+{\ttfamily \#include $<$xbase.\+h$>$}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+void \mbox{\hyperlink{xb__copydbf_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}{Print\+Help}} ()
+\item
+void \mbox{\hyperlink{xb__copydbf_8cpp_a1fae5968f70747445d63f63065fb7ef3}{Print\+Version}} ()
+\item
+int \mbox{\hyperlink{xb__copydbf_8cpp_a0ddf1224851353fc92bfbff6f499fa97}{main}} (int argc, char $\ast$argv\mbox{[}$\,$\mbox{]})
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__copydbf_8cpp_a0ddf1224851353fc92bfbff6f499fa97}\label{xb__copydbf_8cpp_a0ddf1224851353fc92bfbff6f499fa97}}
+\index{xb\_copydbf.cpp@{xb\_copydbf.cpp}!main@{main}}
+\index{main@{main}!xb\_copydbf.cpp@{xb\_copydbf.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{argc, }\item[{char $\ast$}]{argv\mbox{[}$\,$\mbox{]} }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{xb__copydbf_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}\label{xb__copydbf_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}}
+\index{xb\_copydbf.cpp@{xb\_copydbf.cpp}!PrintHelp@{PrintHelp}}
+\index{PrintHelp@{PrintHelp}!xb\_copydbf.cpp@{xb\_copydbf.cpp}}
+\doxysubsubsection{\texorpdfstring{PrintHelp()}{PrintHelp()}}
+{\footnotesize\ttfamily void Print\+Help (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{xb__copydbf_8cpp_a1fae5968f70747445d63f63065fb7ef3}\label{xb__copydbf_8cpp_a1fae5968f70747445d63f63065fb7ef3}}
+\index{xb\_copydbf.cpp@{xb\_copydbf.cpp}!PrintVersion@{PrintVersion}}
+\index{PrintVersion@{PrintVersion}!xb\_copydbf.cpp@{xb\_copydbf.cpp}}
+\doxysubsubsection{\texorpdfstring{PrintVersion()}{PrintVersion()}}
+{\footnotesize\ttfamily void Print\+Version (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__dbfutil_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__dbfutil_8cpp.tex
new file mode 100644
index 0000000..1d05027
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__dbfutil_8cpp.tex
@@ -0,0 +1,33 @@
+\hypertarget{xb__dbfutil_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\+\_\+dbfutil.cpp File Reference}
+\label{xb__dbfutil_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_dbfutil.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_dbfutil.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+DOXYOFF void \mbox{\hyperlink{xb__dbfutil_8cpp_a9c55a055e1cd4249c7f47e19dc7ac564}{Print\+Help}} ()
+\item
+void \mbox{\hyperlink{xb__dbfutil_8cpp_a1fae5968f70747445d63f63065fb7ef3}{Print\+Version}} ()
+\item
+int \mbox{\hyperlink{xb__dbfutil_8cpp_a0ddf1224851353fc92bfbff6f499fa97}{main}} (int argc, char $\ast$argv\mbox{[}$\,$\mbox{]})
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__dbfutil_8cpp_a0ddf1224851353fc92bfbff6f499fa97}\label{xb__dbfutil_8cpp_a0ddf1224851353fc92bfbff6f499fa97}}
+\index{xb\_dbfutil.cpp@{xb\_dbfutil.cpp}!main@{main}}
+\index{main@{main}!xb\_dbfutil.cpp@{xb\_dbfutil.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{argc, }\item[{char $\ast$}]{argv\mbox{[}$\,$\mbox{]} }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{xb__dbfutil_8cpp_a9c55a055e1cd4249c7f47e19dc7ac564}\label{xb__dbfutil_8cpp_a9c55a055e1cd4249c7f47e19dc7ac564}}
+\index{xb\_dbfutil.cpp@{xb\_dbfutil.cpp}!PrintHelp@{PrintHelp}}
+\index{PrintHelp@{PrintHelp}!xb\_dbfutil.cpp@{xb\_dbfutil.cpp}}
+\doxysubsubsection{\texorpdfstring{PrintHelp()}{PrintHelp()}}
+{\footnotesize\ttfamily DOXYOFF void Print\+Help (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{xb__dbfutil_8cpp_a1fae5968f70747445d63f63065fb7ef3}\label{xb__dbfutil_8cpp_a1fae5968f70747445d63f63065fb7ef3}}
+\index{xb\_dbfutil.cpp@{xb\_dbfutil.cpp}!PrintVersion@{PrintVersion}}
+\index{PrintVersion@{PrintVersion}!xb\_dbfutil.cpp@{xb\_dbfutil.cpp}}
+\doxysubsubsection{\texorpdfstring{PrintVersion()}{PrintVersion()}}
+{\footnotesize\ttfamily void Print\+Version (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__deletall_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__deletall_8cpp.tex
new file mode 100644
index 0000000..4cdfbc0
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__deletall_8cpp.tex
@@ -0,0 +1,33 @@
+\hypertarget{xb__deletall_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\+\_\+deletall.cpp File Reference}
+\label{xb__deletall_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_deletall.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_deletall.cpp}}
+{\ttfamily \#include $<$xbase.\+h$>$}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+void \mbox{\hyperlink{xb__deletall_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}{Print\+Help}} ()
+\item
+void \mbox{\hyperlink{xb__deletall_8cpp_a1fae5968f70747445d63f63065fb7ef3}{Print\+Version}} ()
+\item
+int \mbox{\hyperlink{xb__deletall_8cpp_a0ddf1224851353fc92bfbff6f499fa97}{main}} (int argc, char $\ast$argv\mbox{[}$\,$\mbox{]})
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__deletall_8cpp_a0ddf1224851353fc92bfbff6f499fa97}\label{xb__deletall_8cpp_a0ddf1224851353fc92bfbff6f499fa97}}
+\index{xb\_deletall.cpp@{xb\_deletall.cpp}!main@{main}}
+\index{main@{main}!xb\_deletall.cpp@{xb\_deletall.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{argc, }\item[{char $\ast$}]{argv\mbox{[}$\,$\mbox{]} }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{xb__deletall_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}\label{xb__deletall_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}}
+\index{xb\_deletall.cpp@{xb\_deletall.cpp}!PrintHelp@{PrintHelp}}
+\index{PrintHelp@{PrintHelp}!xb\_deletall.cpp@{xb\_deletall.cpp}}
+\doxysubsubsection{\texorpdfstring{PrintHelp()}{PrintHelp()}}
+{\footnotesize\ttfamily void Print\+Help (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{xb__deletall_8cpp_a1fae5968f70747445d63f63065fb7ef3}\label{xb__deletall_8cpp_a1fae5968f70747445d63f63065fb7ef3}}
+\index{xb\_deletall.cpp@{xb\_deletall.cpp}!PrintVersion@{PrintVersion}}
+\index{PrintVersion@{PrintVersion}!xb\_deletall.cpp@{xb\_deletall.cpp}}
+\doxysubsubsection{\texorpdfstring{PrintVersion()}{PrintVersion()}}
+{\footnotesize\ttfamily void Print\+Version (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__dumpdbt_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__dumpdbt_8cpp.tex
new file mode 100644
index 0000000..391ee23
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__dumpdbt_8cpp.tex
@@ -0,0 +1,33 @@
+\hypertarget{xb__dumpdbt_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\+\_\+dumpdbt.cpp File Reference}
+\label{xb__dumpdbt_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_dumpdbt.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_dumpdbt.cpp}}
+{\ttfamily \#include $<$xbase.\+h$>$}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+void \mbox{\hyperlink{xb__dumpdbt_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}{Print\+Help}} ()
+\item
+void \mbox{\hyperlink{xb__dumpdbt_8cpp_a1fae5968f70747445d63f63065fb7ef3}{Print\+Version}} ()
+\item
+int \mbox{\hyperlink{xb__dumpdbt_8cpp_a0ddf1224851353fc92bfbff6f499fa97}{main}} (int argc, char $\ast$argv\mbox{[}$\,$\mbox{]})
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__dumpdbt_8cpp_a0ddf1224851353fc92bfbff6f499fa97}\label{xb__dumpdbt_8cpp_a0ddf1224851353fc92bfbff6f499fa97}}
+\index{xb\_dumpdbt.cpp@{xb\_dumpdbt.cpp}!main@{main}}
+\index{main@{main}!xb\_dumpdbt.cpp@{xb\_dumpdbt.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{argc, }\item[{char $\ast$}]{argv\mbox{[}$\,$\mbox{]} }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{xb__dumpdbt_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}\label{xb__dumpdbt_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}}
+\index{xb\_dumpdbt.cpp@{xb\_dumpdbt.cpp}!PrintHelp@{PrintHelp}}
+\index{PrintHelp@{PrintHelp}!xb\_dumpdbt.cpp@{xb\_dumpdbt.cpp}}
+\doxysubsubsection{\texorpdfstring{PrintHelp()}{PrintHelp()}}
+{\footnotesize\ttfamily void Print\+Help (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{xb__dumpdbt_8cpp_a1fae5968f70747445d63f63065fb7ef3}\label{xb__dumpdbt_8cpp_a1fae5968f70747445d63f63065fb7ef3}}
+\index{xb\_dumpdbt.cpp@{xb\_dumpdbt.cpp}!PrintVersion@{PrintVersion}}
+\index{PrintVersion@{PrintVersion}!xb\_dumpdbt.cpp@{xb\_dumpdbt.cpp}}
+\doxysubsubsection{\texorpdfstring{PrintVersion()}{PrintVersion()}}
+{\footnotesize\ttfamily void Print\+Version (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
diff --git a/docs/doxygen/latex/xb__dumphdr_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__dumphdr_8cpp.tex
index 2f7ac2a..2f7ac2a 100644
--- a/docs/doxygen/latex/xb__dumphdr_8cpp.tex
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__dumphdr_8cpp.tex
diff --git a/docs/doxygen/latex/xb__dumpix_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__dumpix_8cpp.tex
index b6d917e..b6d917e 100644
--- a/docs/doxygen/latex/xb__dumpix_8cpp.tex
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__dumpix_8cpp.tex
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__dumprecs_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__dumprecs_8cpp.tex
new file mode 100644
index 0000000..eb00bb6
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__dumprecs_8cpp.tex
@@ -0,0 +1,33 @@
+\hypertarget{xb__dumprecs_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\+\_\+dumprecs.cpp File Reference}
+\label{xb__dumprecs_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_dumprecs.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_dumprecs.cpp}}
+{\ttfamily \#include $<$xbase.\+h$>$}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+void \mbox{\hyperlink{xb__dumprecs_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}{Print\+Help}} ()
+\item
+void \mbox{\hyperlink{xb__dumprecs_8cpp_a1fae5968f70747445d63f63065fb7ef3}{Print\+Version}} ()
+\item
+int \mbox{\hyperlink{xb__dumprecs_8cpp_a0ddf1224851353fc92bfbff6f499fa97}{main}} (int argc, char $\ast$argv\mbox{[}$\,$\mbox{]})
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__dumprecs_8cpp_a0ddf1224851353fc92bfbff6f499fa97}\label{xb__dumprecs_8cpp_a0ddf1224851353fc92bfbff6f499fa97}}
+\index{xb\_dumprecs.cpp@{xb\_dumprecs.cpp}!main@{main}}
+\index{main@{main}!xb\_dumprecs.cpp@{xb\_dumprecs.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{argc, }\item[{char $\ast$}]{argv\mbox{[}$\,$\mbox{]} }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{xb__dumprecs_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}\label{xb__dumprecs_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}}
+\index{xb\_dumprecs.cpp@{xb\_dumprecs.cpp}!PrintHelp@{PrintHelp}}
+\index{PrintHelp@{PrintHelp}!xb\_dumprecs.cpp@{xb\_dumprecs.cpp}}
+\doxysubsubsection{\texorpdfstring{PrintHelp()}{PrintHelp()}}
+{\footnotesize\ttfamily void Print\+Help (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{xb__dumprecs_8cpp_a1fae5968f70747445d63f63065fb7ef3}\label{xb__dumprecs_8cpp_a1fae5968f70747445d63f63065fb7ef3}}
+\index{xb\_dumprecs.cpp@{xb\_dumprecs.cpp}!PrintVersion@{PrintVersion}}
+\index{PrintVersion@{PrintVersion}!xb\_dumprecs.cpp@{xb\_dumprecs.cpp}}
+\doxysubsubsection{\texorpdfstring{PrintVersion()}{PrintVersion()}}
+{\footnotesize\ttfamily void Print\+Version (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__date_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__date_8cpp.tex
new file mode 100644
index 0000000..4aa2f8f
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__date_8cpp.tex
@@ -0,0 +1,17 @@
+\hypertarget{xb__ex__date_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\+\_\+ex\+\_\+date.cpp File Reference}
+\label{xb__ex__date_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_date.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_date.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{xb__ex__date_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}{main}} ()
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__ex__date_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}\label{xb__ex__date_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}}
+\index{xb\_ex\_date.cpp@{xb\_ex\_date.cpp}!main@{main}}
+\index{main@{main}!xb\_ex\_date.cpp@{xb\_ex\_date.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__expression_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__expression_8cpp.tex
new file mode 100644
index 0000000..403730f
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__expression_8cpp.tex
@@ -0,0 +1,51 @@
+\hypertarget{xb__ex__expression_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\+\_\+ex\+\_\+expression.cpp File Reference}
+\label{xb__ex__expression_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_expression.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_expression.cpp}}
+{\ttfamily \#include $<$xbase.\+h$>$}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+void \mbox{\hyperlink{xb__ex__expression_8cpp_a3234afc912211aec54c10d363d28cbda}{Print\+Result}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} $\ast$s\+Expression, xb\+Exp $\ast$exp)
+\item
+int \mbox{\hyperlink{xb__ex__expression_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}{main}} ()
+\end{DoxyCompactItemize}
+\doxysubsection*{Variables}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\hyperlink{structxb_1_1xbSchema}{xb\+Schema}} \mbox{\hyperlink{xb__ex__expression_8cpp_a2122b9562802e2fd799b20454000dc99}{My\+V4\+Record}} \mbox{[}$\,$\mbox{]}
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__ex__expression_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}\label{xb__ex__expression_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}}
+\index{xb\_ex\_expression.cpp@{xb\_ex\_expression.cpp}!main@{main}}
+\index{main@{main}!xb\_ex\_expression.cpp@{xb\_ex\_expression.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{xb__ex__expression_8cpp_a3234afc912211aec54c10d363d28cbda}\label{xb__ex__expression_8cpp_a3234afc912211aec54c10d363d28cbda}}
+\index{xb\_ex\_expression.cpp@{xb\_ex\_expression.cpp}!PrintResult@{PrintResult}}
+\index{PrintResult@{PrintResult}!xb\_ex\_expression.cpp@{xb\_ex\_expression.cpp}}
+\doxysubsubsection{\texorpdfstring{PrintResult()}{PrintResult()}}
+{\footnotesize\ttfamily void Print\+Result (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} $\ast$}]{s\+Expression, }\item[{xb\+Exp $\ast$}]{exp }\end{DoxyParamCaption})}
+
+
+
+\doxysubsection{Variable Documentation}
+\mbox{\Hypertarget{xb__ex__expression_8cpp_a2122b9562802e2fd799b20454000dc99}\label{xb__ex__expression_8cpp_a2122b9562802e2fd799b20454000dc99}}
+\index{xb\_ex\_expression.cpp@{xb\_ex\_expression.cpp}!MyV4Record@{MyV4Record}}
+\index{MyV4Record@{MyV4Record}!xb\_ex\_expression.cpp@{xb\_ex\_expression.cpp}}
+\doxysubsubsection{\texorpdfstring{MyV4Record}{MyV4Record}}
+{\footnotesize\ttfamily \mbox{\hyperlink{structxb_1_1xbSchema}{xb\+Schema}} My\+V4\+Record\mbox{[}$\,$\mbox{]}}
+
+{\bfseries Initial value\+:}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{= }
+\DoxyCodeLine{ \{}
+\DoxyCodeLine{ \{ \textcolor{stringliteral}{"{}CFLD1"{}}, \mbox{\hyperlink{xbdbf_8h_a20f739b9d9dc6a002a246a999e76aeaa}{XB\_CHAR\_FLD}}, 20, 0 \},}
+\DoxyCodeLine{ \{ \textcolor{stringliteral}{"{}CFLD2"{}}, \mbox{\hyperlink{xbdbf_8h_a20f739b9d9dc6a002a246a999e76aeaa}{XB\_CHAR\_FLD}}, 10, 0 \},}
+\DoxyCodeLine{ \{ \textcolor{stringliteral}{"{}NFLD1"{}}, \mbox{\hyperlink{xbdbf_8h_ae9fb6d69cc5edc94d36ae403c22ec1c6}{XB\_NUMERIC\_FLD}}, 5, 0 \},}
+\DoxyCodeLine{ \{ \textcolor{stringliteral}{"{}DATE1"{}}, \mbox{\hyperlink{xbdbf_8h_a7f685e6f5fe804b2174725a27ce73adc}{XB\_DATE\_FLD}}, 8, 0 \},}
+\DoxyCodeLine{ \{ \textcolor{stringliteral}{"{}"{}},0,0,0 \}}
+\DoxyCodeLine{ \}}
+
+\end{DoxyCode}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__log_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__log_8cpp.tex
new file mode 100644
index 0000000..2309d5b
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__log_8cpp.tex
@@ -0,0 +1,17 @@
+\hypertarget{xb__ex__log_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\+\_\+ex\+\_\+log.cpp File Reference}
+\label{xb__ex__log_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_log.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_log.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{xb__ex__log_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__ex__log_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__ex__log_8cpp_a1470527971db41f828c26074cde7e15a}}
+\index{xb\_ex\_log.cpp@{xb\_ex\_log.cpp}!main@{main}}
+\index{main@{main}!xb\_ex\_log.cpp@{xb\_ex\_log.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__sql_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__sql_8cpp.tex
new file mode 100644
index 0000000..8d616c1
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__sql_8cpp.tex
@@ -0,0 +1,17 @@
+\hypertarget{xb__ex__sql_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\+\_\+ex\+\_\+sql.cpp File Reference}
+\label{xb__ex__sql_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_sql.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_sql.cpp}}
+{\ttfamily \#include $<$xbase.\+h$>$}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{xb__ex__sql_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__ex__sql_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__ex__sql_8cpp_a1470527971db41f828c26074cde7e15a}}
+\index{xb\_ex\_sql.cpp@{xb\_ex\_sql.cpp}!main@{main}}
+\index{main@{main}!xb\_ex\_sql.cpp@{xb\_ex\_sql.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__ssv_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__ssv_8cpp.tex
new file mode 100644
index 0000000..8afd63a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__ssv_8cpp.tex
@@ -0,0 +1,17 @@
+\hypertarget{xb__ex__ssv_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\+\_\+ex\+\_\+ssv.cpp File Reference}
+\label{xb__ex__ssv_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_ssv.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_ssv.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{xb__ex__ssv_8cpp_a6438fb6826a353355708e08b4395d689}{main}} (int, char $\ast$$\ast$av)
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__ex__ssv_8cpp_a6438fb6826a353355708e08b4395d689}\label{xb__ex__ssv_8cpp_a6438fb6826a353355708e08b4395d689}}
+\index{xb\_ex\_ssv.cpp@{xb\_ex\_ssv.cpp}!main@{main}}
+\index{main@{main}!xb\_ex\_ssv.cpp@{xb\_ex\_ssv.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__string_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__string_8cpp.tex
new file mode 100644
index 0000000..1e9b704
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__string_8cpp.tex
@@ -0,0 +1,17 @@
+\hypertarget{xb__ex__string_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\+\_\+ex\+\_\+string.cpp File Reference}
+\label{xb__ex__string_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_string.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_string.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{xb__ex__string_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}{main}} ()
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__ex__string_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}\label{xb__ex__string_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}}
+\index{xb\_ex\_string.cpp@{xb\_ex\_string.cpp}!main@{main}}
+\index{main@{main}!xb\_ex\_string.cpp@{xb\_ex\_string.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__v3__create__dbf_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__v3__create__dbf_8cpp.tex
new file mode 100644
index 0000000..f5dcd9d
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__v3__create__dbf_8cpp.tex
@@ -0,0 +1,17 @@
+\hypertarget{xb__ex__v3__create__dbf_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\+\_\+ex\+\_\+v3\+\_\+create\+\_\+dbf.cpp File Reference}
+\label{xb__ex__v3__create__dbf_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_v3\_create\_dbf.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_v3\_create\_dbf.cpp}}
+{\ttfamily \#include $<$xbase.\+h$>$}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{xb__ex__v3__create__dbf_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}{main}} ()
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__ex__v3__create__dbf_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}\label{xb__ex__v3__create__dbf_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}}
+\index{xb\_ex\_v3\_create\_dbf.cpp@{xb\_ex\_v3\_create\_dbf.cpp}!main@{main}}
+\index{main@{main}!xb\_ex\_v3\_create\_dbf.cpp@{xb\_ex\_v3\_create\_dbf.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__v3__upd__dbf_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__v3__upd__dbf_8cpp.tex
new file mode 100644
index 0000000..8b088aa
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__v3__upd__dbf_8cpp.tex
@@ -0,0 +1,17 @@
+\hypertarget{xb__ex__v3__upd__dbf_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\+\_\+ex\+\_\+v3\+\_\+upd\+\_\+dbf.cpp File Reference}
+\label{xb__ex__v3__upd__dbf_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_v3\_upd\_dbf.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_v3\_upd\_dbf.cpp}}
+{\ttfamily \#include $<$xbase.\+h$>$}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{xb__ex__v3__upd__dbf_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}{main}} ()
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__ex__v3__upd__dbf_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}\label{xb__ex__v3__upd__dbf_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}}
+\index{xb\_ex\_v3\_upd\_dbf.cpp@{xb\_ex\_v3\_upd\_dbf.cpp}!main@{main}}
+\index{main@{main}!xb\_ex\_v3\_upd\_dbf.cpp@{xb\_ex\_v3\_upd\_dbf.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__v4__create__dbf_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__v4__create__dbf_8cpp.tex
new file mode 100644
index 0000000..8ebb219
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__v4__create__dbf_8cpp.tex
@@ -0,0 +1,17 @@
+\hypertarget{xb__ex__v4__create__dbf_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\+\_\+ex\+\_\+v4\+\_\+create\+\_\+dbf.cpp File Reference}
+\label{xb__ex__v4__create__dbf_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_v4\_create\_dbf.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_v4\_create\_dbf.cpp}}
+{\ttfamily \#include $<$xbase.\+h$>$}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{xb__ex__v4__create__dbf_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}{main}} ()
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__ex__v4__create__dbf_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}\label{xb__ex__v4__create__dbf_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}}
+\index{xb\_ex\_v4\_create\_dbf.cpp@{xb\_ex\_v4\_create\_dbf.cpp}!main@{main}}
+\index{main@{main}!xb\_ex\_v4\_create\_dbf.cpp@{xb\_ex\_v4\_create\_dbf.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__v4__upd__dbf_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__v4__upd__dbf_8cpp.tex
new file mode 100644
index 0000000..020f2a9
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__ex__v4__upd__dbf_8cpp.tex
@@ -0,0 +1,17 @@
+\hypertarget{xb__ex__v4__upd__dbf_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\+\_\+ex\+\_\+v4\+\_\+upd\+\_\+dbf.cpp File Reference}
+\label{xb__ex__v4__upd__dbf_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_v4\_upd\_dbf.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_v4\_upd\_dbf.cpp}}
+{\ttfamily \#include $<$xbase.\+h$>$}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{xb__ex__v4__upd__dbf_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}{main}} ()
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__ex__v4__upd__dbf_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}\label{xb__ex__v4__upd__dbf_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}}
+\index{xb\_ex\_v4\_upd\_dbf.cpp@{xb\_ex\_v4\_upd\_dbf.cpp}!main@{main}}
+\index{main@{main}!xb\_ex\_v4\_upd\_dbf.cpp@{xb\_ex\_v4\_upd\_dbf.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__execsql_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__execsql_8cpp.tex
new file mode 100644
index 0000000..3c77216
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__execsql_8cpp.tex
@@ -0,0 +1,41 @@
+\hypertarget{xb__execsql_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\+\_\+execsql.cpp File Reference}
+\label{xb__execsql_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_execsql.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_execsql.cpp}}
+{\ttfamily \#include $<$xbase.\+h$>$}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+void \mbox{\hyperlink{xb__execsql_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}{Print\+Help}} ()
+\item
+void \mbox{\hyperlink{xb__execsql_8cpp_a1fae5968f70747445d63f63065fb7ef3}{Print\+Version}} ()
+\item
+xb\+Int16 \mbox{\hyperlink{xb__execsql_8cpp_adb176b752e38521fdb334b4976965945}{Get\+Next\+Sql\+Cmd}} (\mbox{\hyperlink{classxb_1_1xbFile}{xb\+File}} \&f, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Cmd, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Quiet)
+\item
+int \mbox{\hyperlink{xb__execsql_8cpp_a0ddf1224851353fc92bfbff6f499fa97}{main}} (int argc, char $\ast$argv\mbox{[}$\,$\mbox{]})
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__execsql_8cpp_adb176b752e38521fdb334b4976965945}\label{xb__execsql_8cpp_adb176b752e38521fdb334b4976965945}}
+\index{xb\_execsql.cpp@{xb\_execsql.cpp}!GetNextSqlCmd@{GetNextSqlCmd}}
+\index{GetNextSqlCmd@{GetNextSqlCmd}!xb\_execsql.cpp@{xb\_execsql.cpp}}
+\doxysubsubsection{\texorpdfstring{GetNextSqlCmd()}{GetNextSqlCmd()}}
+{\footnotesize\ttfamily xb\+Int16 Get\+Next\+Sql\+Cmd (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbFile}{xb\+File}} \&}]{f, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Cmd, }\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}}}]{b\+Quiet }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{xb__execsql_8cpp_a0ddf1224851353fc92bfbff6f499fa97}\label{xb__execsql_8cpp_a0ddf1224851353fc92bfbff6f499fa97}}
+\index{xb\_execsql.cpp@{xb\_execsql.cpp}!main@{main}}
+\index{main@{main}!xb\_execsql.cpp@{xb\_execsql.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{argc, }\item[{char $\ast$}]{argv\mbox{[}$\,$\mbox{]} }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{xb__execsql_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}\label{xb__execsql_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}}
+\index{xb\_execsql.cpp@{xb\_execsql.cpp}!PrintHelp@{PrintHelp}}
+\index{PrintHelp@{PrintHelp}!xb\_execsql.cpp@{xb\_execsql.cpp}}
+\doxysubsubsection{\texorpdfstring{PrintHelp()}{PrintHelp()}}
+{\footnotesize\ttfamily void Print\+Help (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{xb__execsql_8cpp_a1fae5968f70747445d63f63065fb7ef3}\label{xb__execsql_8cpp_a1fae5968f70747445d63f63065fb7ef3}}
+\index{xb\_execsql.cpp@{xb\_execsql.cpp}!PrintVersion@{PrintVersion}}
+\index{PrintVersion@{PrintVersion}!xb\_execsql.cpp@{xb\_execsql.cpp}}
+\doxysubsubsection{\texorpdfstring{PrintVersion()}{PrintVersion()}}
+{\footnotesize\ttfamily void Print\+Version (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__import_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__import_8cpp.tex
new file mode 100644
index 0000000..7d6cfd5
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__import_8cpp.tex
@@ -0,0 +1,38 @@
+\hypertarget{xb__import_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\+\_\+import.cpp File Reference}
+\label{xb__import_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_import.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_import.cpp}}
+{\ttfamily \#include $<$xbase.\+h$>$}\newline
+\doxysubsection*{Data Structures}
+\begin{DoxyCompactItemize}
+\item
+struct \mbox{\hyperlink{structsFldMap}{s\+Fld\+Map}}
+\end{DoxyCompactItemize}
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+void \mbox{\hyperlink{xb__import_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}{Print\+Help}} ()
+\item
+void \mbox{\hyperlink{xb__import_8cpp_a1fae5968f70747445d63f63065fb7ef3}{Print\+Version}} ()
+\item
+int \mbox{\hyperlink{xb__import_8cpp_a0ddf1224851353fc92bfbff6f499fa97}{main}} (int argc, char $\ast$argv\mbox{[}$\,$\mbox{]})
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__import_8cpp_a0ddf1224851353fc92bfbff6f499fa97}\label{xb__import_8cpp_a0ddf1224851353fc92bfbff6f499fa97}}
+\index{xb\_import.cpp@{xb\_import.cpp}!main@{main}}
+\index{main@{main}!xb\_import.cpp@{xb\_import.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{argc, }\item[{char $\ast$}]{argv\mbox{[}$\,$\mbox{]} }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{xb__import_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}\label{xb__import_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}}
+\index{xb\_import.cpp@{xb\_import.cpp}!PrintHelp@{PrintHelp}}
+\index{PrintHelp@{PrintHelp}!xb\_import.cpp@{xb\_import.cpp}}
+\doxysubsubsection{\texorpdfstring{PrintHelp()}{PrintHelp()}}
+{\footnotesize\ttfamily void Print\+Help (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{xb__import_8cpp_a1fae5968f70747445d63f63065fb7ef3}\label{xb__import_8cpp_a1fae5968f70747445d63f63065fb7ef3}}
+\index{xb\_import.cpp@{xb\_import.cpp}!PrintVersion@{PrintVersion}}
+\index{PrintVersion@{PrintVersion}!xb\_import.cpp@{xb\_import.cpp}}
+\doxysubsubsection{\texorpdfstring{PrintVersion()}{PrintVersion()}}
+{\footnotesize\ttfamily void Print\+Version (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__pack_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__pack_8cpp.tex
new file mode 100644
index 0000000..0161316
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__pack_8cpp.tex
@@ -0,0 +1,33 @@
+\hypertarget{xb__pack_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\+\_\+pack.cpp File Reference}
+\label{xb__pack_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_pack.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_pack.cpp}}
+{\ttfamily \#include $<$xbase.\+h$>$}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+void \mbox{\hyperlink{xb__pack_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}{Print\+Help}} ()
+\item
+void \mbox{\hyperlink{xb__pack_8cpp_a1fae5968f70747445d63f63065fb7ef3}{Print\+Version}} ()
+\item
+int \mbox{\hyperlink{xb__pack_8cpp_a0ddf1224851353fc92bfbff6f499fa97}{main}} (int argc, char $\ast$argv\mbox{[}$\,$\mbox{]})
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__pack_8cpp_a0ddf1224851353fc92bfbff6f499fa97}\label{xb__pack_8cpp_a0ddf1224851353fc92bfbff6f499fa97}}
+\index{xb\_pack.cpp@{xb\_pack.cpp}!main@{main}}
+\index{main@{main}!xb\_pack.cpp@{xb\_pack.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{argc, }\item[{char $\ast$}]{argv\mbox{[}$\,$\mbox{]} }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{xb__pack_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}\label{xb__pack_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}}
+\index{xb\_pack.cpp@{xb\_pack.cpp}!PrintHelp@{PrintHelp}}
+\index{PrintHelp@{PrintHelp}!xb\_pack.cpp@{xb\_pack.cpp}}
+\doxysubsubsection{\texorpdfstring{PrintHelp()}{PrintHelp()}}
+{\footnotesize\ttfamily void Print\+Help (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{xb__pack_8cpp_a1fae5968f70747445d63f63065fb7ef3}\label{xb__pack_8cpp_a1fae5968f70747445d63f63065fb7ef3}}
+\index{xb\_pack.cpp@{xb\_pack.cpp}!PrintVersion@{PrintVersion}}
+\index{PrintVersion@{PrintVersion}!xb\_pack.cpp@{xb\_pack.cpp}}
+\doxysubsubsection{\texorpdfstring{PrintVersion()}{PrintVersion()}}
+{\footnotesize\ttfamily void Print\+Version (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__tblinfo_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__tblinfo_8cpp.tex
new file mode 100644
index 0000000..6faf127
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__tblinfo_8cpp.tex
@@ -0,0 +1,33 @@
+\hypertarget{xb__tblinfo_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\+\_\+tblinfo.cpp File Reference}
+\label{xb__tblinfo_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_tblinfo.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_tblinfo.cpp}}
+{\ttfamily \#include $<$xbase.\+h$>$}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+void \mbox{\hyperlink{xb__tblinfo_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}{Print\+Help}} ()
+\item
+void \mbox{\hyperlink{xb__tblinfo_8cpp_a1fae5968f70747445d63f63065fb7ef3}{Print\+Version}} ()
+\item
+int \mbox{\hyperlink{xb__tblinfo_8cpp_a0ddf1224851353fc92bfbff6f499fa97}{main}} (int argc, char $\ast$argv\mbox{[}$\,$\mbox{]})
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__tblinfo_8cpp_a0ddf1224851353fc92bfbff6f499fa97}\label{xb__tblinfo_8cpp_a0ddf1224851353fc92bfbff6f499fa97}}
+\index{xb\_tblinfo.cpp@{xb\_tblinfo.cpp}!main@{main}}
+\index{main@{main}!xb\_tblinfo.cpp@{xb\_tblinfo.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{argc, }\item[{char $\ast$}]{argv\mbox{[}$\,$\mbox{]} }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{xb__tblinfo_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}\label{xb__tblinfo_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}}
+\index{xb\_tblinfo.cpp@{xb\_tblinfo.cpp}!PrintHelp@{PrintHelp}}
+\index{PrintHelp@{PrintHelp}!xb\_tblinfo.cpp@{xb\_tblinfo.cpp}}
+\doxysubsubsection{\texorpdfstring{PrintHelp()}{PrintHelp()}}
+{\footnotesize\ttfamily void Print\+Help (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{xb__tblinfo_8cpp_a1fae5968f70747445d63f63065fb7ef3}\label{xb__tblinfo_8cpp_a1fae5968f70747445d63f63065fb7ef3}}
+\index{xb\_tblinfo.cpp@{xb\_tblinfo.cpp}!PrintVersion@{PrintVersion}}
+\index{PrintVersion@{PrintVersion}!xb\_tblinfo.cpp@{xb\_tblinfo.cpp}}
+\doxysubsubsection{\texorpdfstring{PrintVersion()}{PrintVersion()}}
+{\footnotesize\ttfamily void Print\+Version (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__bcd_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__bcd_8cpp.tex
new file mode 100644
index 0000000..f807898
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__bcd_8cpp.tex
@@ -0,0 +1,18 @@
+\hypertarget{xb__test__bcd_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+bcd.cpp File Reference}
+\label{xb__test__bcd_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_bcd.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_bcd.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{xb__test__bcd_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__test__bcd_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__bcd_8cpp_a1470527971db41f828c26074cde7e15a}}
+\index{xb\_test\_bcd.cpp@{xb\_test\_bcd.cpp}!main@{main}}
+\index{main@{main}!xb\_test\_bcd.cpp@{xb\_test\_bcd.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__blockread_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__blockread_8cpp.tex
new file mode 100644
index 0000000..7881514
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__blockread_8cpp.tex
@@ -0,0 +1,42 @@
+\hypertarget{xb__test__blockread_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+blockread.cpp File Reference}
+\label{xb__test__blockread_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_blockread.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_blockread.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{xb__test__blockread_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
+\end{DoxyCompactItemize}
+\doxysubsection*{Variables}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\hyperlink{structxb_1_1xbSchema}{xb\+Schema}} \mbox{\hyperlink{xb__test__blockread_8cpp_af68c3291a63fdf20ffa0e477460d148e}{My\+Dbf\+Rec}} \mbox{[}$\,$\mbox{]}
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__test__blockread_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__blockread_8cpp_a1470527971db41f828c26074cde7e15a}}
+\index{xb\_test\_blockread.cpp@{xb\_test\_blockread.cpp}!main@{main}}
+\index{main@{main}!xb\_test\_blockread.cpp@{xb\_test\_blockread.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
+
+
+
+\doxysubsection{Variable Documentation}
+\mbox{\Hypertarget{xb__test__blockread_8cpp_af68c3291a63fdf20ffa0e477460d148e}\label{xb__test__blockread_8cpp_af68c3291a63fdf20ffa0e477460d148e}}
+\index{xb\_test\_blockread.cpp@{xb\_test\_blockread.cpp}!MyDbfRec@{MyDbfRec}}
+\index{MyDbfRec@{MyDbfRec}!xb\_test\_blockread.cpp@{xb\_test\_blockread.cpp}}
+\doxysubsubsection{\texorpdfstring{MyDbfRec}{MyDbfRec}}
+{\footnotesize\ttfamily \mbox{\hyperlink{structxb_1_1xbSchema}{xb\+Schema}} My\+Dbf\+Rec\mbox{[}$\,$\mbox{]}}
+
+{\bfseries Initial value\+:}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{= }
+\DoxyCodeLine{ \{}
+\DoxyCodeLine{ \{ \textcolor{stringliteral}{"{}NFLD"{}}, \mbox{\hyperlink{xbdbf_8h_ae9fb6d69cc5edc94d36ae403c22ec1c6}{XB\_NUMERIC\_FLD}}, 10, 0 \},}
+\DoxyCodeLine{ \{ \textcolor{stringliteral}{"{}CFLD"{}}, \mbox{\hyperlink{xbdbf_8h_a20f739b9d9dc6a002a246a999e76aeaa}{XB\_CHAR\_FLD}}, 89, 0 \},}
+\DoxyCodeLine{ \{ \textcolor{stringliteral}{"{}"{}},0,0,0 \}}
+\DoxyCodeLine{ \}}
+
+\end{DoxyCode}
diff --git a/docs/doxygen/latex/xb__test__blockread__save_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__blockread__save_8cpp.tex
index d09d1b3..d09d1b3 100644
--- a/docs/doxygen/latex/xb__test__blockread__save_8cpp.tex
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__blockread__save_8cpp.tex
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__date_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__date_8cpp.tex
new file mode 100644
index 0000000..f8ee6ba
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__date_8cpp.tex
@@ -0,0 +1,18 @@
+\hypertarget{xb__test__date_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+date.cpp File Reference}
+\label{xb__test__date_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_date.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_date.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{xb__test__date_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__test__date_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__date_8cpp_a1470527971db41f828c26074cde7e15a}}
+\index{xb\_test\_date.cpp@{xb\_test\_date.cpp}!main@{main}}
+\index{main@{main}!xb\_test\_date.cpp@{xb\_test\_date.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__dbf__v3__memos_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__dbf__v3__memos_8cpp.tex
new file mode 100644
index 0000000..5da1b42
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__dbf__v3__memos_8cpp.tex
@@ -0,0 +1,18 @@
+\hypertarget{xb__test__dbf__v3__memos_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+dbf\+\_\+v3\+\_\+memos.cpp File Reference}
+\label{xb__test__dbf__v3__memos_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_dbf\_v3\_memos.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_dbf\_v3\_memos.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{xb__test__dbf__v3__memos_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__test__dbf__v3__memos_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__dbf__v3__memos_8cpp_a1470527971db41f828c26074cde7e15a}}
+\index{xb\_test\_dbf\_v3\_memos.cpp@{xb\_test\_dbf\_v3\_memos.cpp}!main@{main}}
+\index{main@{main}!xb\_test\_dbf\_v3\_memos.cpp@{xb\_test\_dbf\_v3\_memos.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__dbf__v3__nomemos_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__dbf__v3__nomemos_8cpp.tex
new file mode 100644
index 0000000..faff200
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__dbf__v3__nomemos_8cpp.tex
@@ -0,0 +1,18 @@
+\hypertarget{xb__test__dbf__v3__nomemos_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+dbf\+\_\+v3\+\_\+nomemos.cpp File Reference}
+\label{xb__test__dbf__v3__nomemos_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_dbf\_v3\_nomemos.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_dbf\_v3\_nomemos.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{xb__test__dbf__v3__nomemos_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__test__dbf__v3__nomemos_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__dbf__v3__nomemos_8cpp_a1470527971db41f828c26074cde7e15a}}
+\index{xb\_test\_dbf\_v3\_nomemos.cpp@{xb\_test\_dbf\_v3\_nomemos.cpp}!main@{main}}
+\index{main@{main}!xb\_test\_dbf\_v3\_nomemos.cpp@{xb\_test\_dbf\_v3\_nomemos.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__dbf__v4__memos_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__dbf__v4__memos_8cpp.tex
new file mode 100644
index 0000000..fead1df
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__dbf__v4__memos_8cpp.tex
@@ -0,0 +1,18 @@
+\hypertarget{xb__test__dbf__v4__memos_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+dbf\+\_\+v4\+\_\+memos.cpp File Reference}
+\label{xb__test__dbf__v4__memos_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_dbf\_v4\_memos.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_dbf\_v4\_memos.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{xb__test__dbf__v4__memos_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__test__dbf__v4__memos_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__dbf__v4__memos_8cpp_a1470527971db41f828c26074cde7e15a}}
+\index{xb\_test\_dbf\_v4\_memos.cpp@{xb\_test\_dbf\_v4\_memos.cpp}!main@{main}}
+\index{main@{main}!xb\_test\_dbf\_v4\_memos.cpp@{xb\_test\_dbf\_v4\_memos.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__dbf__v4__nomemos_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__dbf__v4__nomemos_8cpp.tex
new file mode 100644
index 0000000..feac4e8
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__dbf__v4__nomemos_8cpp.tex
@@ -0,0 +1,18 @@
+\hypertarget{xb__test__dbf__v4__nomemos_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+dbf\+\_\+v4\+\_\+nomemos.cpp File Reference}
+\label{xb__test__dbf__v4__nomemos_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_dbf\_v4\_nomemos.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_dbf\_v4\_nomemos.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{xb__test__dbf__v4__nomemos_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__test__dbf__v4__nomemos_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__dbf__v4__nomemos_8cpp_a1470527971db41f828c26074cde7e15a}}
+\index{xb\_test\_dbf\_v4\_nomemos.cpp@{xb\_test\_dbf\_v4\_nomemos.cpp}!main@{main}}
+\index{main@{main}!xb\_test\_dbf\_v4\_nomemos.cpp@{xb\_test\_dbf\_v4\_nomemos.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__expnode_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__expnode_8cpp.tex
new file mode 100644
index 0000000..defbe12
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__expnode_8cpp.tex
@@ -0,0 +1,18 @@
+\hypertarget{xb__test__expnode_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+expnode.cpp File Reference}
+\label{xb__test__expnode_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_expnode.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_expnode.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{xb__test__expnode_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__test__expnode_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__expnode_8cpp_a1470527971db41f828c26074cde7e15a}}
+\index{xb\_test\_expnode.cpp@{xb\_test\_expnode.cpp}!main@{main}}
+\index{main@{main}!xb\_test\_expnode.cpp@{xb\_test\_expnode.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__expression_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__expression_8cpp.tex
new file mode 100644
index 0000000..c8c37e8
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__expression_8cpp.tex
@@ -0,0 +1,74 @@
+\hypertarget{xb__test__expression_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+expression.cpp File Reference}
+\label{xb__test__expression_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_expression.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_expression.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+DOXYOFF xb\+Int16 \mbox{\hyperlink{xb__test__expression_8cpp_aee57237c5f5b9b4d80e84bf530eb42bc}{Dev\+Tester}} (\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$xb, \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$dbf, const char $\ast$s\+Exp\+In)
+\item
+xb\+Int16 \mbox{\hyperlink{xb__test__expression_8cpp_af56b6dbc38e0d23caaf6531526315379}{Test\+Weight}} (\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$xb, xb\+Int16 i\+Print\+Option, const char $\ast$title, const char $\ast$s\+Operator, xb\+Int16 i\+Expected\+Weight)
+\item
+xb\+Int16 \mbox{\hyperlink{xb__test__expression_8cpp_a440d64b55abaa9e14e73ecc132d1084d}{Test\+Token\+Method}} (\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$xb, xb\+Int16 i\+Print\+Option, const char $\ast$title, const char $\ast$s\+Expression, const char $\ast$s\+Expected\+Token, const char $\ast$s\+Expected\+Remainder, char c\+Expected\+Node\+Type, char c\+Expected\+Return\+Type, xb\+Int16 i\+Erc, xb\+Int16 i\+Trc)
+\item
+xb\+Int16 \mbox{\hyperlink{xb__test__expression_8cpp_ad52c27685018dda7c5c4b26fb445860e}{Test\+Method}} (\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$xb, \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$d, xb\+Int16 Print\+Option, const char $\ast$title, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Expression, const char $\ast$s\+Expected\+Result, xb\+Int16 i\+Expected\+Result\+Len)
+\item
+xb\+Int16 \mbox{\hyperlink{xb__test__expression_8cpp_a7030149316fe8d8195ffbb18132e0cf9}{Test\+Method}} (\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$xb, \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$d, xb\+Int16 Print\+Option, const char $\ast$title, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Expression, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} d\+Expected\+Result)
+\item
+xb\+Int16 \mbox{\hyperlink{xb__test__expression_8cpp_a10e637a203841bd2b6a92e6217509e23}{Test\+Method}} (\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$xb, \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$d, xb\+Int16 Print\+Option, const char $\ast$title, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Expression, \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} dt\+Expected\+Result)
+\item
+xb\+Int16 \mbox{\hyperlink{xb__test__expression_8cpp_aa385c5f9fa8b4cfd63763b4a28852b64}{Test\+Method}} (\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$xb, \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$d, xb\+Int16 Print\+Option, const char $\ast$title, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Expression, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Expected\+Result)
+\item
+int \mbox{\hyperlink{xb__test__expression_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__test__expression_8cpp_aee57237c5f5b9b4d80e84bf530eb42bc}\label{xb__test__expression_8cpp_aee57237c5f5b9b4d80e84bf530eb42bc}}
+\index{xb\_test\_expression.cpp@{xb\_test\_expression.cpp}!DevTester@{DevTester}}
+\index{DevTester@{DevTester}!xb\_test\_expression.cpp@{xb\_test\_expression.cpp}}
+\doxysubsubsection{\texorpdfstring{DevTester()}{DevTester()}}
+{\footnotesize\ttfamily DOXYOFF xb\+Int16 Dev\+Tester (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$}]{xb, }\item[{\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$}]{dbf, }\item[{const char $\ast$}]{s\+Exp\+In }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{xb__test__expression_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__expression_8cpp_a1470527971db41f828c26074cde7e15a}}
+\index{xb\_test\_expression.cpp@{xb\_test\_expression.cpp}!main@{main}}
+\index{main@{main}!xb\_test\_expression.cpp@{xb\_test\_expression.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{xb__test__expression_8cpp_ad52c27685018dda7c5c4b26fb445860e}\label{xb__test__expression_8cpp_ad52c27685018dda7c5c4b26fb445860e}}
+\index{xb\_test\_expression.cpp@{xb\_test\_expression.cpp}!TestMethod@{TestMethod}}
+\index{TestMethod@{TestMethod}!xb\_test\_expression.cpp@{xb\_test\_expression.cpp}}
+\doxysubsubsection{\texorpdfstring{TestMethod()}{TestMethod()}\hspace{0.1cm}{\footnotesize\ttfamily [1/4]}}
+{\footnotesize\ttfamily xb\+Int16 Test\+Method (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$}]{xb, }\item[{\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$}]{d, }\item[{xb\+Int16}]{Print\+Option, }\item[{const char $\ast$}]{title, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Expression, }\item[{const char $\ast$}]{s\+Expected\+Result, }\item[{xb\+Int16}]{i\+Expected\+Result\+Len }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{xb__test__expression_8cpp_aa385c5f9fa8b4cfd63763b4a28852b64}\label{xb__test__expression_8cpp_aa385c5f9fa8b4cfd63763b4a28852b64}}
+\index{xb\_test\_expression.cpp@{xb\_test\_expression.cpp}!TestMethod@{TestMethod}}
+\index{TestMethod@{TestMethod}!xb\_test\_expression.cpp@{xb\_test\_expression.cpp}}
+\doxysubsubsection{\texorpdfstring{TestMethod()}{TestMethod()}\hspace{0.1cm}{\footnotesize\ttfamily [2/4]}}
+{\footnotesize\ttfamily xb\+Int16 Test\+Method (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$}]{xb, }\item[{\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$}]{d, }\item[{xb\+Int16}]{Print\+Option, }\item[{const char $\ast$}]{title, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Expression, }\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}}}]{b\+Expected\+Result }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{xb__test__expression_8cpp_a10e637a203841bd2b6a92e6217509e23}\label{xb__test__expression_8cpp_a10e637a203841bd2b6a92e6217509e23}}
+\index{xb\_test\_expression.cpp@{xb\_test\_expression.cpp}!TestMethod@{TestMethod}}
+\index{TestMethod@{TestMethod}!xb\_test\_expression.cpp@{xb\_test\_expression.cpp}}
+\doxysubsubsection{\texorpdfstring{TestMethod()}{TestMethod()}\hspace{0.1cm}{\footnotesize\ttfamily [3/4]}}
+{\footnotesize\ttfamily xb\+Int16 Test\+Method (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$}]{xb, }\item[{\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$}]{d, }\item[{xb\+Int16}]{Print\+Option, }\item[{const char $\ast$}]{title, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Expression, }\item[{\mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}}}]{dt\+Expected\+Result }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{xb__test__expression_8cpp_a7030149316fe8d8195ffbb18132e0cf9}\label{xb__test__expression_8cpp_a7030149316fe8d8195ffbb18132e0cf9}}
+\index{xb\_test\_expression.cpp@{xb\_test\_expression.cpp}!TestMethod@{TestMethod}}
+\index{TestMethod@{TestMethod}!xb\_test\_expression.cpp@{xb\_test\_expression.cpp}}
+\doxysubsubsection{\texorpdfstring{TestMethod()}{TestMethod()}\hspace{0.1cm}{\footnotesize\ttfamily [4/4]}}
+{\footnotesize\ttfamily xb\+Int16 Test\+Method (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$}]{xb, }\item[{\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$}]{d, }\item[{xb\+Int16}]{Print\+Option, }\item[{const char $\ast$}]{title, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Expression, }\item[{\mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}}}]{d\+Expected\+Result }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{xb__test__expression_8cpp_a440d64b55abaa9e14e73ecc132d1084d}\label{xb__test__expression_8cpp_a440d64b55abaa9e14e73ecc132d1084d}}
+\index{xb\_test\_expression.cpp@{xb\_test\_expression.cpp}!TestTokenMethod@{TestTokenMethod}}
+\index{TestTokenMethod@{TestTokenMethod}!xb\_test\_expression.cpp@{xb\_test\_expression.cpp}}
+\doxysubsubsection{\texorpdfstring{TestTokenMethod()}{TestTokenMethod()}}
+{\footnotesize\ttfamily xb\+Int16 Test\+Token\+Method (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$}]{xb, }\item[{xb\+Int16}]{i\+Print\+Option, }\item[{const char $\ast$}]{title, }\item[{const char $\ast$}]{s\+Expression, }\item[{const char $\ast$}]{s\+Expected\+Token, }\item[{const char $\ast$}]{s\+Expected\+Remainder, }\item[{char}]{c\+Expected\+Node\+Type, }\item[{char}]{c\+Expected\+Return\+Type, }\item[{xb\+Int16}]{i\+Erc, }\item[{xb\+Int16}]{i\+Trc }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{xb__test__expression_8cpp_af56b6dbc38e0d23caaf6531526315379}\label{xb__test__expression_8cpp_af56b6dbc38e0d23caaf6531526315379}}
+\index{xb\_test\_expression.cpp@{xb\_test\_expression.cpp}!TestWeight@{TestWeight}}
+\index{TestWeight@{TestWeight}!xb\_test\_expression.cpp@{xb\_test\_expression.cpp}}
+\doxysubsubsection{\texorpdfstring{TestWeight()}{TestWeight()}}
+{\footnotesize\ttfamily xb\+Int16 Test\+Weight (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$}]{xb, }\item[{xb\+Int16}]{i\+Print\+Option, }\item[{const char $\ast$}]{title, }\item[{const char $\ast$}]{s\+Operator, }\item[{xb\+Int16}]{i\+Expected\+Weight }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__file_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__file_8cpp.tex
new file mode 100644
index 0000000..182d123
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__file_8cpp.tex
@@ -0,0 +1,18 @@
+\hypertarget{xb__test__file_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+file.cpp File Reference}
+\label{xb__test__file_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_file.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_file.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{xb__test__file_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__test__file_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__file_8cpp_a1470527971db41f828c26074cde7e15a}}
+\index{xb\_test\_file.cpp@{xb\_test\_file.cpp}!main@{main}}
+\index{main@{main}!xb\_test\_file.cpp@{xb\_test\_file.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__filter_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__filter_8cpp.tex
new file mode 100644
index 0000000..47053c9
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__filter_8cpp.tex
@@ -0,0 +1,18 @@
+\hypertarget{xb__test__filter_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+filter.cpp File Reference}
+\label{xb__test__filter_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_filter.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_filter.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{xb__test__filter_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__test__filter_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__filter_8cpp_a1470527971db41f828c26074cde7e15a}}
+\index{xb\_test\_filter.cpp@{xb\_test\_filter.cpp}!main@{main}}
+\index{main@{main}!xb\_test\_filter.cpp@{xb\_test\_filter.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__funcs_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__funcs_8cpp.tex
new file mode 100644
index 0000000..1b406c1
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__funcs_8cpp.tex
@@ -0,0 +1,18 @@
+\hypertarget{xb__test__funcs_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+funcs.cpp File Reference}
+\label{xb__test__funcs_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_funcs.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_funcs.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{xb__test__funcs_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__test__funcs_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__funcs_8cpp_a1470527971db41f828c26074cde7e15a}}
+\index{xb\_test\_funcs.cpp@{xb\_test\_funcs.cpp}!main@{main}}
+\index{main@{main}!xb\_test\_funcs.cpp@{xb\_test\_funcs.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__linklist_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__linklist_8cpp.tex
new file mode 100644
index 0000000..77b113d
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__linklist_8cpp.tex
@@ -0,0 +1,18 @@
+\hypertarget{xb__test__linklist_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+linklist.cpp File Reference}
+\label{xb__test__linklist_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_linklist.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_linklist.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{xb__test__linklist_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__test__linklist_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__linklist_8cpp_a1470527971db41f828c26074cde7e15a}}
+\index{xb\_test\_linklist.cpp@{xb\_test\_linklist.cpp}!main@{main}}
+\index{main@{main}!xb\_test\_linklist.cpp@{xb\_test\_linklist.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__lock2_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__lock2_8cpp.tex
new file mode 100644
index 0000000..16889dd
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__lock2_8cpp.tex
@@ -0,0 +1,18 @@
+\hypertarget{xb__test__lock2_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+lock2.cpp File Reference}
+\label{xb__test__lock2_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_lock2.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_lock2.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{xb__test__lock2_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__test__lock2_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__lock2_8cpp_a1470527971db41f828c26074cde7e15a}}
+\index{xb\_test\_lock2.cpp@{xb\_test\_lock2.cpp}!main@{main}}
+\index{main@{main}!xb\_test\_lock2.cpp@{xb\_test\_lock2.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__lock_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__lock_8cpp.tex
new file mode 100644
index 0000000..ccbf3ef
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__lock_8cpp.tex
@@ -0,0 +1,18 @@
+\hypertarget{xb__test__lock_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+lock.cpp File Reference}
+\label{xb__test__lock_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_lock.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_lock.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{xb__test__lock_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__test__lock_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__lock_8cpp_a1470527971db41f828c26074cde7e15a}}
+\index{xb\_test\_lock.cpp@{xb\_test\_lock.cpp}!main@{main}}
+\index{main@{main}!xb\_test\_lock.cpp@{xb\_test\_lock.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__log_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__log_8cpp.tex
new file mode 100644
index 0000000..e0fdd31
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__log_8cpp.tex
@@ -0,0 +1,18 @@
+\hypertarget{xb__test__log_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+log.cpp File Reference}
+\label{xb__test__log_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_log.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_log.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{xb__test__log_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__test__log_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__log_8cpp_a1470527971db41f828c26074cde7e15a}}
+\index{xb\_test\_log.cpp@{xb\_test\_log.cpp}!main@{main}}
+\index{main@{main}!xb\_test\_log.cpp@{xb\_test\_log.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__mdx_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__mdx_8cpp.tex
new file mode 100644
index 0000000..81fb465
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__mdx_8cpp.tex
@@ -0,0 +1,18 @@
+\hypertarget{xb__test__mdx_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+mdx.cpp File Reference}
+\label{xb__test__mdx_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_mdx.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_mdx.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{xb__test__mdx_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__test__mdx_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__mdx_8cpp_a1470527971db41f828c26074cde7e15a}}
+\index{xb\_test\_mdx.cpp@{xb\_test\_mdx.cpp}!main@{main}}
+\index{main@{main}!xb\_test\_mdx.cpp@{xb\_test\_mdx.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
+
diff --git a/docs/doxygen/latex/xb__test__ndx2_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__ndx2_8cpp.tex
index 921dfb6..921dfb6 100644
--- a/docs/doxygen/latex/xb__test__ndx2_8cpp.tex
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__ndx2_8cpp.tex
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__ndx_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__ndx_8cpp.tex
new file mode 100644
index 0000000..dc9782c
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__ndx_8cpp.tex
@@ -0,0 +1,18 @@
+\hypertarget{xb__test__ndx_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+ndx.cpp File Reference}
+\label{xb__test__ndx_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_ndx.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_ndx.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{xb__test__ndx_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__test__ndx_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__ndx_8cpp_a1470527971db41f828c26074cde7e15a}}
+\index{xb\_test\_ndx.cpp@{xb\_test\_ndx.cpp}!main@{main}}
+\index{main@{main}!xb\_test\_ndx.cpp@{xb\_test\_ndx.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__sql_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__sql_8cpp.tex
new file mode 100644
index 0000000..4d7441a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__sql_8cpp.tex
@@ -0,0 +1,18 @@
+\hypertarget{xb__test__sql_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+sql.cpp File Reference}
+\label{xb__test__sql_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_sql.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_sql.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{xb__test__sql_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__test__sql_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__sql_8cpp_a1470527971db41f828c26074cde7e15a}}
+\index{xb\_test\_sql.cpp@{xb\_test\_sql.cpp}!main@{main}}
+\index{main@{main}!xb\_test\_sql.cpp@{xb\_test\_sql.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__string_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__string_8cpp.tex
new file mode 100644
index 0000000..cf8c6ed
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__string_8cpp.tex
@@ -0,0 +1,32 @@
+\hypertarget{xb__test__string_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+string.cpp File Reference}
+\label{xb__test__string_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_string.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_string.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
+\doxysubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{xb__test__string_8cpp_a42f8c497a1968074f38bf5055c650dca}{VERBOSE}}
+\end{DoxyCompactItemize}
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{xb__test__string_8cpp_aabf71bc9adb6daf457b2ea8879ae537f}{main}} (int arg\+Cnt, char $\ast$$\ast$av=NULL)
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{xb__test__string_8cpp_a42f8c497a1968074f38bf5055c650dca}\label{xb__test__string_8cpp_a42f8c497a1968074f38bf5055c650dca}}
+\index{xb\_test\_string.cpp@{xb\_test\_string.cpp}!VERBOSE@{VERBOSE}}
+\index{VERBOSE@{VERBOSE}!xb\_test\_string.cpp@{xb\_test\_string.cpp}}
+\doxysubsubsection{\texorpdfstring{VERBOSE}{VERBOSE}}
+{\footnotesize\ttfamily \#define VERBOSE}
+
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__test__string_8cpp_aabf71bc9adb6daf457b2ea8879ae537f}\label{xb__test__string_8cpp_aabf71bc9adb6daf457b2ea8879ae537f}}
+\index{xb\_test\_string.cpp@{xb\_test\_string.cpp}!main@{main}}
+\index{main@{main}!xb\_test\_string.cpp@{xb\_test\_string.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av = {\ttfamily NULL} }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__tblmgr_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__tblmgr_8cpp.tex
new file mode 100644
index 0000000..a7405f7
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__tblmgr_8cpp.tex
@@ -0,0 +1,18 @@
+\hypertarget{xb__test__tblmgr_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+tblmgr.cpp File Reference}
+\label{xb__test__tblmgr_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_tblmgr.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_tblmgr.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{xb__test__tblmgr_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__test__tblmgr_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__tblmgr_8cpp_a1470527971db41f828c26074cde7e15a}}
+\index{xb\_test\_tblmgr.cpp@{xb\_test\_tblmgr.cpp}!main@{main}}
+\index{main@{main}!xb\_test\_tblmgr.cpp@{xb\_test\_tblmgr.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__tdx_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__tdx_8cpp.tex
new file mode 100644
index 0000000..49086da
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__tdx_8cpp.tex
@@ -0,0 +1,18 @@
+\hypertarget{xb__test__tdx_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+tdx.cpp File Reference}
+\label{xb__test__tdx_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_tdx.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_tdx.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{xb__test__tdx_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__test__tdx_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__tdx_8cpp_a1470527971db41f828c26074cde7e15a}}
+\index{xb\_test\_tdx.cpp@{xb\_test\_tdx.cpp}!main@{main}}
+\index{main@{main}!xb\_test\_tdx.cpp@{xb\_test\_tdx.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__uda_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__uda_8cpp.tex
new file mode 100644
index 0000000..c59eb0b
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__uda_8cpp.tex
@@ -0,0 +1,18 @@
+\hypertarget{xb__test__uda_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+uda.cpp File Reference}
+\label{xb__test__uda_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_uda.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_uda.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{xb__test__uda_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__test__uda_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__uda_8cpp_a1470527971db41f828c26074cde7e15a}}
+\index{xb\_test\_uda.cpp@{xb\_test\_uda.cpp}!main@{main}}
+\index{main@{main}!xb\_test\_uda.cpp@{xb\_test\_uda.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__xbase_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__xbase_8cpp.tex
new file mode 100644
index 0000000..c90dfb0
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__xbase_8cpp.tex
@@ -0,0 +1,18 @@
+\hypertarget{xb__test__xbase_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+xbase.cpp File Reference}
+\label{xb__test__xbase_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_xbase.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_xbase.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{xb__test__xbase_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__test__xbase_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__xbase_8cpp_a1470527971db41f828c26074cde7e15a}}
+\index{xb\_test\_xbase.cpp@{xb\_test\_xbase.cpp}!main@{main}}
+\index{main@{main}!xb\_test\_xbase.cpp@{xb\_test\_xbase.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__undelall_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__undelall_8cpp.tex
new file mode 100644
index 0000000..1d8b7c5
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__undelall_8cpp.tex
@@ -0,0 +1,33 @@
+\hypertarget{xb__undelall_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\+\_\+undelall.cpp File Reference}
+\label{xb__undelall_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_undelall.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_undelall.cpp}}
+{\ttfamily \#include $<$xbase.\+h$>$}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+void \mbox{\hyperlink{xb__undelall_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}{Print\+Help}} ()
+\item
+void \mbox{\hyperlink{xb__undelall_8cpp_a1fae5968f70747445d63f63065fb7ef3}{Print\+Version}} ()
+\item
+int \mbox{\hyperlink{xb__undelall_8cpp_a0ddf1224851353fc92bfbff6f499fa97}{main}} (int argc, char $\ast$argv\mbox{[}$\,$\mbox{]})
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__undelall_8cpp_a0ddf1224851353fc92bfbff6f499fa97}\label{xb__undelall_8cpp_a0ddf1224851353fc92bfbff6f499fa97}}
+\index{xb\_undelall.cpp@{xb\_undelall.cpp}!main@{main}}
+\index{main@{main}!xb\_undelall.cpp@{xb\_undelall.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{argc, }\item[{char $\ast$}]{argv\mbox{[}$\,$\mbox{]} }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{xb__undelall_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}\label{xb__undelall_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}}
+\index{xb\_undelall.cpp@{xb\_undelall.cpp}!PrintHelp@{PrintHelp}}
+\index{PrintHelp@{PrintHelp}!xb\_undelall.cpp@{xb\_undelall.cpp}}
+\doxysubsubsection{\texorpdfstring{PrintHelp()}{PrintHelp()}}
+{\footnotesize\ttfamily void Print\+Help (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{xb__undelall_8cpp_a1fae5968f70747445d63f63065fb7ef3}\label{xb__undelall_8cpp_a1fae5968f70747445d63f63065fb7ef3}}
+\index{xb\_undelall.cpp@{xb\_undelall.cpp}!PrintVersion@{PrintVersion}}
+\index{PrintVersion@{PrintVersion}!xb\_undelall.cpp@{xb\_undelall.cpp}}
+\doxysubsubsection{\texorpdfstring{PrintVersion()}{PrintVersion()}}
+{\footnotesize\ttfamily void Print\+Version (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
diff --git a/docs/doxygen/latex/xb__zap_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__zap_8cpp.tex
index 43e396d..43e396d 100644
--- a/docs/doxygen/latex/xb__zap_8cpp.tex
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__zap_8cpp.tex
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbalttbl_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbalttbl_8cpp.tex
new file mode 100644
index 0000000..f28e58f
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbalttbl_8cpp.tex
@@ -0,0 +1,3 @@
+\hypertarget{xbalttbl_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/sql/xbalttbl.cpp File Reference}
+\label{xbalttbl_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbalttbl.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbalttbl.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbase_8h.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbase_8h.tex
new file mode 100644
index 0000000..9d9620a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbase_8h.tex
@@ -0,0 +1,31 @@
+\hypertarget{xbase_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbase.h File Reference}
+\label{xbase_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbase.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbase.h}}
+{\ttfamily \#include $<$xbconfig.\+h$>$}\newline
+{\ttfamily \#include $<$stdio.\+h$>$}\newline
+{\ttfamily \#include $<$errno.\+h$>$}\newline
+{\ttfamily \#include $<$time.\+h$>$}\newline
+{\ttfamily \#include $<$math.\+h$>$}\newline
+{\ttfamily \#include $<$iomanip$>$}\newline
+{\ttfamily \#include $<$xbretcod.\+h$>$}\newline
+{\ttfamily \#include $<$xbtypes.\+h$>$}\newline
+{\ttfamily \#include $<$xbstring.\+h$>$}\newline
+{\ttfamily \#include $<$xbssv.\+h$>$}\newline
+{\ttfamily \#include $<$xbdate.\+h$>$}\newline
+{\ttfamily \#include $<$xbtblmgr.\+h$>$}\newline
+{\ttfamily \#include $<$xbxbase.\+h$>$}\newline
+{\ttfamily \#include $<$xblnknod.\+h$>$}\newline
+{\ttfamily \#include $<$xblnklst.\+h$>$}\newline
+{\ttfamily \#include $<$xblnklstord.\+h$>$}\newline
+{\ttfamily \#include $<$xbfile.\+h$>$}\newline
+{\ttfamily \#include $<$xblog.\+h$>$}\newline
+{\ttfamily \#include $<$xbmemo.\+h$>$}\newline
+{\ttfamily \#include $<$xbbcd.\+h$>$}\newline
+{\ttfamily \#include $<$xbuda.\+h$>$}\newline
+{\ttfamily \#include $<$xbexpnode.\+h$>$}\newline
+{\ttfamily \#include $<$xbexp.\+h$>$}\newline
+{\ttfamily \#include $<$xbtag.\+h$>$}\newline
+{\ttfamily \#include $<$xbblkread.\+h$>$}\newline
+{\ttfamily \#include $<$xbdbf.\+h$>$}\newline
+{\ttfamily \#include $<$xbindex.\+h$>$}\newline
+{\ttfamily \#include $<$xbfilter.\+h$>$}\newline
+{\ttfamily \#include $<$xbsql.\+h$>$}\newline
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbase_8h_source.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbase_8h_source.tex
new file mode 100644
index 0000000..29b6992
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbase_8h_source.tex
@@ -0,0 +1,106 @@
+\hypertarget{xbase_8h_source}{}\doxysection{xbase.\+h}
+\label{xbase_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbase.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbase.h}}
+\mbox{\hyperlink{xbase_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{comment}{/* xbase.h}}
+\DoxyCodeLine{2 \textcolor{comment}{}}
+\DoxyCodeLine{3 \textcolor{comment}{}}
+\DoxyCodeLine{4 \textcolor{comment}{Xbase64 Software Library}}
+\DoxyCodeLine{5 \textcolor{comment}{}}
+\DoxyCodeLine{6 \textcolor{comment}{Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel}}
+\DoxyCodeLine{7 \textcolor{comment}{}}
+\DoxyCodeLine{8 \textcolor{comment}{The xb64 software library is covered under the terms of the GPL Version 3, 2007 license}}
+\DoxyCodeLine{9 \textcolor{comment}{}}
+\DoxyCodeLine{10 \textcolor{comment}{Email Contact:}}
+\DoxyCodeLine{11 \textcolor{comment}{}}
+\DoxyCodeLine{12 \textcolor{comment}{ XDB-\/devel@lists.sourceforge.net}}
+\DoxyCodeLine{13 \textcolor{comment}{ XDB-\/users@lists.sourceforge.net}}
+\DoxyCodeLine{14 \textcolor{comment}{}}
+\DoxyCodeLine{15 \textcolor{comment}{*/}}
+\DoxyCodeLine{16 }
+\DoxyCodeLine{17 \textcolor{preprocessor}{\#include <xbconfig.h>}}
+\DoxyCodeLine{18 \textcolor{preprocessor}{\#include <stdio.h>}}
+\DoxyCodeLine{19 \textcolor{preprocessor}{\#include <errno.h>}}
+\DoxyCodeLine{20 \textcolor{preprocessor}{\#include <time.h>}}
+\DoxyCodeLine{21 \textcolor{preprocessor}{\#include <math.h>}}
+\DoxyCodeLine{22 }
+\DoxyCodeLine{23 \textcolor{preprocessor}{\#ifdef HAVE\_INTTYPES\_H}}
+\DoxyCodeLine{24 \textcolor{preprocessor}{\#include <inttypes.h>}}
+\DoxyCodeLine{25 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{26 }
+\DoxyCodeLine{27 \textcolor{preprocessor}{\#ifdef HAVE\_STRING\_H}}
+\DoxyCodeLine{28 \textcolor{preprocessor}{\#include <string.h>}}
+\DoxyCodeLine{29 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{30 }
+\DoxyCodeLine{31 \textcolor{preprocessor}{\#ifdef HAVE\_STRINGS\_H}}
+\DoxyCodeLine{32 \textcolor{preprocessor}{\#include <strings.h>}}
+\DoxyCodeLine{33 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{34 }
+\DoxyCodeLine{35 \textcolor{comment}{// \#ifdef STDC\_HEADERS}}
+\DoxyCodeLine{36 \textcolor{preprocessor}{\#ifdef HAVE\_STDARGS\_H}}
+\DoxyCodeLine{37 \textcolor{preprocessor}{\#include <stdargs.h>}}
+\DoxyCodeLine{38 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{39 }
+\DoxyCodeLine{40 \textcolor{preprocessor}{\#ifdef HAVE\_CTYPE\_H}}
+\DoxyCodeLine{41 \textcolor{preprocessor}{\#include <ctype.h>}}
+\DoxyCodeLine{42 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{43 }
+\DoxyCodeLine{44 \textcolor{preprocessor}{\#ifdef HAVE\_PWD\_H}}
+\DoxyCodeLine{45 \textcolor{preprocessor}{\#include <pwd.h>}}
+\DoxyCodeLine{46 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{47 }
+\DoxyCodeLine{48 \textcolor{preprocessor}{\#ifdef HAVE\_STDARG\_H}}
+\DoxyCodeLine{49 \textcolor{preprocessor}{\#include <stdarg.h>}}
+\DoxyCodeLine{50 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{51 }
+\DoxyCodeLine{52 \textcolor{preprocessor}{\#ifdef HAVE\_STAT\_H}}
+\DoxyCodeLine{53 \textcolor{preprocessor}{\#include <sys/stat.h>}}
+\DoxyCodeLine{54 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{55 }
+\DoxyCodeLine{56 \textcolor{preprocessor}{\#ifdef HAVE\_FCNTL\_H}}
+\DoxyCodeLine{57 \textcolor{preprocessor}{\#include <fcntl.h>}}
+\DoxyCodeLine{58 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{59 }
+\DoxyCodeLine{60 \textcolor{preprocessor}{\#ifdef HAVE\_UNISTD\_H}}
+\DoxyCodeLine{61 \textcolor{preprocessor}{\#include <unistd.h>}}
+\DoxyCodeLine{62 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{63 }
+\DoxyCodeLine{64 \textcolor{preprocessor}{\#ifdef HAVE\_VARARGS\_H}}
+\DoxyCodeLine{65 \textcolor{preprocessor}{\#ifndef HAVE\_STDARG\_H}}
+\DoxyCodeLine{66 \textcolor{preprocessor}{\#include <varargs.h>}}
+\DoxyCodeLine{67 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{68 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{69 }
+\DoxyCodeLine{70 \textcolor{preprocessor}{\#ifdef HAVE\_WINDOWS\_H}}
+\DoxyCodeLine{71 \textcolor{preprocessor}{\#include <windows.h>}}
+\DoxyCodeLine{72 \textcolor{preprocessor}{\#include <io.h>}}
+\DoxyCodeLine{73 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{74 }
+\DoxyCodeLine{75 \textcolor{preprocessor}{\#include <iomanip>}}
+\DoxyCodeLine{76 }
+\DoxyCodeLine{77 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbretcod_8h}{xbretcod.h}}>}}
+\DoxyCodeLine{78 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbtypes_8h}{xbtypes.h}}>}}
+\DoxyCodeLine{79 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbstring_8h}{xbstring.h}}>}}
+\DoxyCodeLine{80 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbssv_8h}{xbssv.h}}>}}
+\DoxyCodeLine{81 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbdate_8h}{xbdate.h}}>}}
+\DoxyCodeLine{82 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbtblmgr_8h}{xbtblmgr.h}}>}}
+\DoxyCodeLine{83 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbxbase_8h}{xbxbase.h}}>}}
+\DoxyCodeLine{84 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xblnknod_8h}{xblnknod.h}}>}}
+\DoxyCodeLine{85 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xblnklst_8h}{xblnklst.h}}>}}
+\DoxyCodeLine{86 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xblnklstord_8h}{xblnklstord.h}}>}}
+\DoxyCodeLine{87 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbfile_8h}{xbfile.h}}>}}
+\DoxyCodeLine{88 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xblog_8h}{xblog.h}}>}}
+\DoxyCodeLine{89 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbmemo_8h}{xbmemo.h}}>}}
+\DoxyCodeLine{90 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbbcd_8h}{xbbcd.h}}>}}
+\DoxyCodeLine{91 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbuda_8h}{xbuda.h}}>}}
+\DoxyCodeLine{92 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbexpnode_8h}{xbexpnode.h}}>}}
+\DoxyCodeLine{93 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbexp_8h}{xbexp.h}}>}}
+\DoxyCodeLine{94 }
+\DoxyCodeLine{95 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbtag_8h}{xbtag.h}}>}}
+\DoxyCodeLine{96 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbblkread_8h}{xbblkread.h}}>}}
+\DoxyCodeLine{97 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbdbf_8h}{xbdbf.h}}>} \textcolor{comment}{/* dbf base class */}}
+\DoxyCodeLine{98 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbindex_8h}{xbindex.h}}>} \textcolor{comment}{/* index base class */}}
+\DoxyCodeLine{99 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbfilter_8h}{xbfilter.h}}>}}
+\DoxyCodeLine{100 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbsql_8h}{xbsql.h}}>}}
+
+\end{DoxyCode}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbbcd_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbbcd_8cpp.tex
new file mode 100644
index 0000000..82db089
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbbcd_8cpp.tex
@@ -0,0 +1,3 @@
+\hypertarget{xbbcd_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbbcd.cpp File Reference}
+\label{xbbcd_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbbcd.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbbcd.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbbcd_8h.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbbcd_8h.tex
new file mode 100644
index 0000000..fde0b26
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbbcd_8h.tex
@@ -0,0 +1,2 @@
+\hypertarget{xbbcd_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbbcd.h File Reference}
+\label{xbbcd_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbbcd.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbbcd.h}}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbbcd_8h_source.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbbcd_8h_source.tex
new file mode 100644
index 0000000..a771647
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbbcd_8h_source.tex
@@ -0,0 +1,97 @@
+\hypertarget{xbbcd_8h_source}{}\doxysection{xbbcd.\+h}
+\label{xbbcd_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbbcd.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbbcd.h}}
+\mbox{\hyperlink{xbbcd_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{comment}{/* xbbcd.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, 2018, 2019, 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 \textcolor{preprocessor}{\#ifndef \_\_XB\_BCD\_H\_\_}}
+\DoxyCodeLine{17 \textcolor{preprocessor}{\#define \_\_XB\_BCD\_H\_\_}}
+\DoxyCodeLine{18 \textcolor{preprocessor}{\#ifdef XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{19 }
+\DoxyCodeLine{21 }
+\DoxyCodeLine{22 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
+\DoxyCodeLine{23 }
+\DoxyCodeLine{24 \textcolor{comment}{// structure for bcd value}}
+\DoxyCodeLine{25 \textcolor{comment}{// next structure superceeded. Different compilers allocate different}}
+\DoxyCodeLine{26 \textcolor{comment}{// sizes to structures with bit fields, can't count on the size}}
+\DoxyCodeLine{27 }
+\DoxyCodeLine{28 \textcolor{comment}{/*}}
+\DoxyCodeLine{29 \textcolor{comment}{struct XBDLLEXPORT xbBcdStrucOld \{}}
+\DoxyCodeLine{30 \textcolor{comment}{ unsigned SigDigits : 8; // significant digit count}}
+\DoxyCodeLine{31 \textcolor{comment}{ unsigned Filler : 2; // always set to 1}}
+\DoxyCodeLine{32 \textcolor{comment}{ unsigned EncDigits : 5; // encoded digit count}}
+\DoxyCodeLine{33 \textcolor{comment}{ unsigned Sign : 1; // +/-\/ sign}}
+\DoxyCodeLine{34 \textcolor{comment}{ unsigned char Data[10];}}
+\DoxyCodeLine{35 \textcolor{comment}{\};}}
+\DoxyCodeLine{36 \textcolor{comment}{*/}}
+\DoxyCodeLine{37 }
+\DoxyCodeLine{38 \textcolor{keyword}{struct }XBDLLEXPORT xbBcdStruct \{}
+\DoxyCodeLine{39 \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} cSigDigits; \textcolor{comment}{// significant digit count}}
+\DoxyCodeLine{40 \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} cEncDigits; \textcolor{comment}{// encoded digit count}}
+\DoxyCodeLine{41 \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} cData[10]; \textcolor{comment}{// data}}
+\DoxyCodeLine{42 \};}
+\DoxyCodeLine{43 }
+\DoxyCodeLine{44 \textcolor{keyword}{struct }XBDLLEXPORT xbByteSplit \{}
+\DoxyCodeLine{45 \textcolor{keywordtype}{unsigned} c1 : 4;}
+\DoxyCodeLine{46 \textcolor{keywordtype}{unsigned} c2 : 4;}
+\DoxyCodeLine{47 \};}
+\DoxyCodeLine{48 }
+\DoxyCodeLine{49 \textcolor{keyword}{class }XBDLLEXPORT xbBcd \{}
+\DoxyCodeLine{50 \textcolor{keyword}{public}:}
+\DoxyCodeLine{51 }
+\DoxyCodeLine{52 xbBcd( \textcolor{keyword}{const} xbString \&sIn );}
+\DoxyCodeLine{53 xbBcd( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn );}
+\DoxyCodeLine{54 xbBcd( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vBcd12In );}
+\DoxyCodeLine{55 \textcolor{keywordtype}{void} Set( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn );}
+\DoxyCodeLine{56 \textcolor{keywordtype}{void} Set( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *cBcd12In );}
+\DoxyCodeLine{57 \textcolor{keywordtype}{void} Set( \textcolor{keyword}{const} xbString \&sIn );}
+\DoxyCodeLine{58 }
+\DoxyCodeLine{59 }
+\DoxyCodeLine{60 \textcolor{keywordtype}{void} ToString( xbString \&sOut );}
+\DoxyCodeLine{61 \textcolor{keywordtype}{void} ToDouble( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dOut );}
+\DoxyCodeLine{62 \textcolor{keywordtype}{void} ToBcd( xbBcdStruct \&bcdOut );}
+\DoxyCodeLine{63 \textcolor{keywordtype}{void} ToChar( \textcolor{keywordtype}{char} *cOut );}
+\DoxyCodeLine{64 }
+\DoxyCodeLine{65 \textcolor{comment}{// const unsigned char * GetBcd() const;}}
+\DoxyCodeLine{66 \textcolor{keywordtype}{void} StringToBcd( \textcolor{keyword}{const} xbString \&sStringIn );}
+\DoxyCodeLine{67 }
+\DoxyCodeLine{68 xbInt16 Compare( \textcolor{keyword}{const} xbBcd \&bcdIn );}
+\DoxyCodeLine{69 xbInt16 Compare( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} d );}
+\DoxyCodeLine{70 }
+\DoxyCodeLine{71 \textcolor{keyword}{const} \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} *GetData() \textcolor{keyword}{const};}
+\DoxyCodeLine{72 \textcolor{keyword}{const} \textcolor{keywordtype}{void} * GetBcd() \textcolor{keyword}{const};}
+\DoxyCodeLine{73 }
+\DoxyCodeLine{74 }
+\DoxyCodeLine{75 \textcolor{keyword}{private}:}
+\DoxyCodeLine{76 \textcolor{keywordtype}{void} ctor();}
+\DoxyCodeLine{77 \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} GetEncDigitsNoSign() \textcolor{keyword}{const};}
+\DoxyCodeLine{78 \textcolor{keywordtype}{unsigned} GetSign() \textcolor{keyword}{const};}
+\DoxyCodeLine{79 \textcolor{keywordtype}{unsigned} GetSigDigits() \textcolor{keyword}{const};}
+\DoxyCodeLine{80 \textcolor{keywordtype}{unsigned} GetActualSigDigits() \textcolor{keyword}{const};}
+\DoxyCodeLine{81 }
+\DoxyCodeLine{82 }
+\DoxyCodeLine{83 \textcolor{comment}{// xbBcdStruc bcdOld;}}
+\DoxyCodeLine{84 xbBcdStruct bcd;}
+\DoxyCodeLine{85 \};}
+\DoxyCodeLine{86 }
+\DoxyCodeLine{87 \} \textcolor{comment}{/* namespace xb */}}
+\DoxyCodeLine{88 }
+\DoxyCodeLine{89 }
+\DoxyCodeLine{91 }
+\DoxyCodeLine{92 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* XB\_INDEX\_SUPPORT */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{93 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_BCD\_H\_\_ */}\textcolor{preprocessor}{}}
+
+\end{DoxyCode}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbblkread_8h.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbblkread_8h.tex
new file mode 100644
index 0000000..b1c8544
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbblkread_8h.tex
@@ -0,0 +1,7 @@
+\hypertarget{xbblkread_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbblkread.h File Reference}
+\label{xbblkread_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbblkread.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbblkread.h}}
+\doxysubsection*{Namespaces}
+\begin{DoxyCompactItemize}
+\item
+namespace \mbox{\hyperlink{namespacexb}{xb}}
+\end{DoxyCompactItemize}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbblkread_8h_source.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbblkread_8h_source.tex
new file mode 100644
index 0000000..ab6cc57
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbblkread_8h_source.tex
@@ -0,0 +1,69 @@
+\hypertarget{xbblkread_8h_source}{}\doxysection{xbblkread.\+h}
+\label{xbblkread_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbblkread.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbblkread.h}}
+\mbox{\hyperlink{xbblkread_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{comment}{/* xbblkread.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 \textcolor{preprocessor}{\#ifndef \_\_XB\_BLKREAD\_H\_\_}}
+\DoxyCodeLine{17 \textcolor{preprocessor}{\#define \_\_XB\_BLKREAD\_H\_\_}}
+\DoxyCodeLine{18 }
+\DoxyCodeLine{19 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
+\DoxyCodeLine{20 \textcolor{preprocessor}{\#ifdef XB\_BLOCKREAD\_SUPPORT}}
+\DoxyCodeLine{21 }
+\DoxyCodeLine{22 }
+\DoxyCodeLine{23 }
+\DoxyCodeLine{25 }
+\DoxyCodeLine{32 \textcolor{keyword}{class }XBDLLEXPORT xbBlockRead \{}
+\DoxyCodeLine{33 }
+\DoxyCodeLine{34 \textcolor{keyword}{public}:}
+\DoxyCodeLine{35 xbBlockRead( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} * d );}
+\DoxyCodeLine{36 \string~xbBlockRead();}
+\DoxyCodeLine{37 }
+\DoxyCodeLine{38 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
+\DoxyCodeLine{39 \textcolor{keywordtype}{void} DumpReadBlockInternals();}
+\DoxyCodeLine{40 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{41 }
+\DoxyCodeLine{42 xbInt16 Init( xbUInt32 ulBlkSize = 0 );}
+\DoxyCodeLine{43 }
+\DoxyCodeLine{44 xbUInt32 GetBlockFirstRecNo() \textcolor{keyword}{const};}
+\DoxyCodeLine{45 xbUInt32 GetBlockRecCnt() \textcolor{keyword}{const};}
+\DoxyCodeLine{46 xbUInt32 GetBlockSize() \textcolor{keyword}{const};}
+\DoxyCodeLine{47 }
+\DoxyCodeLine{48 xbInt16 GetRecord( xbUInt32 ulRecNo ); \textcolor{comment}{// retrieve a data record from a block to RecBuf}}
+\DoxyCodeLine{49 xbInt16 SetBlockSize( xbUInt32 ulBlkSize );}
+\DoxyCodeLine{50 }
+\DoxyCodeLine{51 }
+\DoxyCodeLine{52 \textcolor{keyword}{private}:}
+\DoxyCodeLine{53 }
+\DoxyCodeLine{54 xbInt16 GetBlockForRecNo( xbUInt32 ulRecNo ); \textcolor{comment}{// retrieve block from disk for a given record number}}
+\DoxyCodeLine{55 }
+\DoxyCodeLine{56 \textcolor{keywordtype}{char} *pBlock; \textcolor{comment}{// block pointer}}
+\DoxyCodeLine{57 xbUInt32 ulBlkSize; \textcolor{comment}{// block size in bytes}}
+\DoxyCodeLine{58 xbUInt32 ulFirstBlkRec; \textcolor{comment}{// first recod number in the block}}
+\DoxyCodeLine{59 xbUInt32 ulRecCnt; \textcolor{comment}{// number of records in block}}
+\DoxyCodeLine{60 xbUInt32 ulMaxRecs; \textcolor{comment}{// max number of records block can handle}}
+\DoxyCodeLine{61 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bEof; \textcolor{comment}{// EOF flag}}
+\DoxyCodeLine{62 \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf; \textcolor{comment}{// reference to associated dbf file}}
+\DoxyCodeLine{63 \textcolor{comment}{// xbXBase *xbase; // reference to main xbXBase structure}}
+\DoxyCodeLine{64 time\_t tFmTime; \textcolor{comment}{// file modify time at time of block read}}
+\DoxyCodeLine{65 }
+\DoxyCodeLine{66 \};}
+\DoxyCodeLine{67 }
+\DoxyCodeLine{68 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_BLOCKREAD}}
+\DoxyCodeLine{69 \} \textcolor{comment}{/* namespace */}}
+\DoxyCodeLine{70 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_BLOCKREAD\_H\_\_ */}\textcolor{preprocessor}{}}
+
+\end{DoxyCode}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbblockread_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbblockread_8cpp.tex
new file mode 100644
index 0000000..2cf0efe
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbblockread_8cpp.tex
@@ -0,0 +1,3 @@
+\hypertarget{xbblockread_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbblockread.cpp File Reference}
+\label{xbblockread_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbblockread.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbblockread.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbcrix_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbcrix_8cpp.tex
new file mode 100644
index 0000000..a354cfa
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbcrix_8cpp.tex
@@ -0,0 +1,3 @@
+\hypertarget{xbcrix_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.2/src/sql/xbcrix.cpp File Reference}
+\label{xbcrix_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.2/src/sql/xbcrix.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.2/src/sql/xbcrix.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbcrtbl_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbcrtbl_8cpp.tex
new file mode 100644
index 0000000..f91094a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbcrtbl_8cpp.tex
@@ -0,0 +1,3 @@
+\hypertarget{xbcrtbl_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/sql/xbcrtbl.cpp File Reference}
+\label{xbcrtbl_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbcrtbl.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbcrtbl.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbcrtbl_8save2_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbcrtbl_8save2_8cpp.tex
new file mode 100644
index 0000000..9ea8f2f
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbcrtbl_8save2_8cpp.tex
@@ -0,0 +1,3 @@
+\hypertarget{xbcrtbl_8save2_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.2/src/sql/xbcrtbl.save2.\+cpp File Reference}
+\label{xbcrtbl_8save2_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.2/src/sql/xbcrtbl.save2.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.2/src/sql/xbcrtbl.save2.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbcrtbl_8save_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbcrtbl_8save_8cpp.tex
new file mode 100644
index 0000000..8113b76
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbcrtbl_8save_8cpp.tex
@@ -0,0 +1,3 @@
+\hypertarget{xbcrtbl_8save_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.2/src/sql/xbcrtbl.save.\+cpp File Reference}
+\label{xbcrtbl_8save_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.2/src/sql/xbcrtbl.save.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.2/src/sql/xbcrtbl.save.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdate_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdate_8cpp.tex
new file mode 100644
index 0000000..a70d185
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdate_8cpp.tex
@@ -0,0 +1,9 @@
+\hypertarget{xbdate_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbdate.cpp File Reference}
+\label{xbdate_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbdate.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbdate.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+{\ttfamily \#include $<$time.\+h$>$}\newline
+\doxysubsection*{Namespaces}
+\begin{DoxyCompactItemize}
+\item
+namespace \mbox{\hyperlink{namespacexb}{xb}}
+\end{DoxyCompactItemize}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdate_8h.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdate_8h.tex
new file mode 100644
index 0000000..478b326
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdate_8h.tex
@@ -0,0 +1,50 @@
+\hypertarget{xbdate_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbdate.h File Reference}
+\label{xbdate_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbdate.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbdate.h}}
+\doxysubsection*{Data Structures}
+\begin{DoxyCompactItemize}
+\item
+class \mbox{\hyperlink{classxb_1_1xbDate}{xb\+::xb\+Date}}
+\begin{DoxyCompactList}\small\item\em \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} class. \end{DoxyCompactList}\end{DoxyCompactItemize}
+\doxysubsection*{Namespaces}
+\begin{DoxyCompactItemize}
+\item
+namespace \mbox{\hyperlink{namespacexb}{xb}}
+\end{DoxyCompactItemize}
+\doxysubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{xbdate_8h_a8f22704d3fd93fa85dd93b6c699e8178}{XB\+\_\+\+FMT\+\_\+\+WEEK}}~1
+\item
+\#define \mbox{\hyperlink{xbdate_8h_aeacf2f7cc897ab5bd64781c0fb52b75d}{XB\+\_\+\+FMT\+\_\+\+MONTH}}~2
+\item
+\#define \mbox{\hyperlink{xbdate_8h_aa29d78982a9e007874af1c4f4e4d1aa4}{XB\+\_\+\+FMT\+\_\+\+YEAR}}~3
+\item
+\#define \mbox{\hyperlink{xbdate_8h_a119f32fda399e2ebc2d734012a130e8f}{JUL\+\_\+\+OFFSET}}~1721425L
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{xbdate_8h_a119f32fda399e2ebc2d734012a130e8f}\label{xbdate_8h_a119f32fda399e2ebc2d734012a130e8f}}
+\index{xbdate.h@{xbdate.h}!JUL\_OFFSET@{JUL\_OFFSET}}
+\index{JUL\_OFFSET@{JUL\_OFFSET}!xbdate.h@{xbdate.h}}
+\doxysubsubsection{\texorpdfstring{JUL\_OFFSET}{JUL\_OFFSET}}
+{\footnotesize\ttfamily \#define JUL\+\_\+\+OFFSET~1721425L}
+
+\mbox{\Hypertarget{xbdate_8h_aeacf2f7cc897ab5bd64781c0fb52b75d}\label{xbdate_8h_aeacf2f7cc897ab5bd64781c0fb52b75d}}
+\index{xbdate.h@{xbdate.h}!XB\_FMT\_MONTH@{XB\_FMT\_MONTH}}
+\index{XB\_FMT\_MONTH@{XB\_FMT\_MONTH}!xbdate.h@{xbdate.h}}
+\doxysubsubsection{\texorpdfstring{XB\_FMT\_MONTH}{XB\_FMT\_MONTH}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+FMT\+\_\+\+MONTH~2}
+
+\mbox{\Hypertarget{xbdate_8h_a8f22704d3fd93fa85dd93b6c699e8178}\label{xbdate_8h_a8f22704d3fd93fa85dd93b6c699e8178}}
+\index{xbdate.h@{xbdate.h}!XB\_FMT\_WEEK@{XB\_FMT\_WEEK}}
+\index{XB\_FMT\_WEEK@{XB\_FMT\_WEEK}!xbdate.h@{xbdate.h}}
+\doxysubsubsection{\texorpdfstring{XB\_FMT\_WEEK}{XB\_FMT\_WEEK}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+FMT\+\_\+\+WEEK~1}
+
+\mbox{\Hypertarget{xbdate_8h_aa29d78982a9e007874af1c4f4e4d1aa4}\label{xbdate_8h_aa29d78982a9e007874af1c4f4e4d1aa4}}
+\index{xbdate.h@{xbdate.h}!XB\_FMT\_YEAR@{XB\_FMT\_YEAR}}
+\index{XB\_FMT\_YEAR@{XB\_FMT\_YEAR}!xbdate.h@{xbdate.h}}
+\doxysubsubsection{\texorpdfstring{XB\_FMT\_YEAR}{XB\_FMT\_YEAR}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+FMT\+\_\+\+YEAR~3}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdate_8h_source.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdate_8h_source.tex
new file mode 100644
index 0000000..3478aea
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdate_8h_source.tex
@@ -0,0 +1,106 @@
+\hypertarget{xbdate_8h_source}{}\doxysection{xbdate.\+h}
+\label{xbdate_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbdate.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbdate.h}}
+\mbox{\hyperlink{xbdate_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{comment}{/* xbdate.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\_XBDATE\_H\_\_}}
+\DoxyCodeLine{18 \textcolor{preprocessor}{\#define \_\_XB\_XBDATE\_H\_\_}}
+\DoxyCodeLine{19 }
+\DoxyCodeLine{20 \textcolor{preprocessor}{\#ifdef CMAKE\_COMPILER\_IS\_GNUCC}}
+\DoxyCodeLine{21 \textcolor{preprocessor}{\#pragma interface}}
+\DoxyCodeLine{22 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{23 }
+\DoxyCodeLine{24 }
+\DoxyCodeLine{25 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
+\DoxyCodeLine{26 }
+\DoxyCodeLine{27 \textcolor{preprocessor}{\#define XB\_FMT\_WEEK 1}}
+\DoxyCodeLine{28 \textcolor{preprocessor}{\#define XB\_FMT\_MONTH 2}}
+\DoxyCodeLine{29 \textcolor{preprocessor}{\#define XB\_FMT\_YEAR 3}}
+\DoxyCodeLine{30 }
+\DoxyCodeLine{31 \textcolor{comment}{// next value is added to the date calculation to match dbase calculation}}
+\DoxyCodeLine{32 \textcolor{comment}{// first valid dbase date is 01/01/0001}}
+\DoxyCodeLine{33 \textcolor{preprocessor}{\#define JUL\_OFFSET 1721425L}}
+\DoxyCodeLine{34 }
+\DoxyCodeLine{35 }
+\DoxyCodeLine{37 }
+\DoxyCodeLine{62 \textcolor{keyword}{class }XBDLLEXPORT \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} : \textcolor{keyword}{public} \mbox{\hyperlink{classxb_1_1xbSsv}{xbSsv}} \{}
+\DoxyCodeLine{63 \textcolor{keyword}{public}:}
+\DoxyCodeLine{64 }
+\DoxyCodeLine{65 \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}}();}
+\DoxyCodeLine{66 \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}}( \textcolor{keyword}{const} \textcolor{keywordtype}{char} * Date8 );}
+\DoxyCodeLine{67 \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}}( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Date8 );}
+\DoxyCodeLine{68 \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}}( xbInt32 lJulDate );}
+\DoxyCodeLine{69 \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}}( xbUInt16 iInit ); \textcolor{comment}{// Constructor used to set the static variables, also defaults to sysdate}}
+\DoxyCodeLine{70 \mbox{\hyperlink{classxb_1_1xbDate}{\string~xbDate}}();}
+\DoxyCodeLine{71 }
+\DoxyCodeLine{72 \textcolor{keywordtype}{void} operator=( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&d );}
+\DoxyCodeLine{73 \textcolor{keywordtype}{void} operator+=( xbInt32 i );}
+\DoxyCodeLine{74 \textcolor{keywordtype}{void} operator-\/=( xbInt32 i );}
+\DoxyCodeLine{75 \textcolor{keywordtype}{void} operator++( xbInt32 i );}
+\DoxyCodeLine{76 \textcolor{keywordtype}{void} operator-\/-\/( xbInt32 i );}
+\DoxyCodeLine{77 }
+\DoxyCodeLine{78 xbInt32 operator-\/( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \& ) \textcolor{keyword}{const};}
+\DoxyCodeLine{79 \textcolor{keyword}{const} \textcolor{keywordtype}{char} * operator-\/( xbInt32 i );}
+\DoxyCodeLine{80 \textcolor{keyword}{const} \textcolor{keywordtype}{char} * operator+( xbInt32 i );}
+\DoxyCodeLine{81 }
+\DoxyCodeLine{82 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator==( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \& ) \textcolor{keyword}{const};}
+\DoxyCodeLine{83 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator!=( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \& ) \textcolor{keyword}{const};}
+\DoxyCodeLine{84 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator< ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \& ) \textcolor{keyword}{const};}
+\DoxyCodeLine{85 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator> ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \& ) \textcolor{keyword}{const};}
+\DoxyCodeLine{86 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator<=( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \& ) \textcolor{keyword}{const};}
+\DoxyCodeLine{87 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator>=( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \& ) \textcolor{keyword}{const};}
+\DoxyCodeLine{88 }
+\DoxyCodeLine{89 xbInt16 CalcRollingCenturyForYear( xbInt16 year ) \textcolor{keyword}{const};}
+\DoxyCodeLine{90 xbInt16 CenturyOf() \textcolor{keyword}{const};}
+\DoxyCodeLine{91 xbInt16 CharDayOf( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOutCharDay );}
+\DoxyCodeLine{92 xbInt16 CharMonthOf( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOutCharMonth );}
+\DoxyCodeLine{93 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} DateIsValid ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sDate8 ) \textcolor{keyword}{const};}
+\DoxyCodeLine{94 xbInt16 DayOf( xbInt16 iFormat ) \textcolor{keyword}{const};}
+\DoxyCodeLine{95 xbInt16 CTOD( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sCtodInDate );}
+\DoxyCodeLine{96 xbInt16 FormatDate( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFmtIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFmtOut );}
+\DoxyCodeLine{97 \textcolor{keyword}{const} \textcolor{keywordtype}{char} *Str() \textcolor{keyword}{const};}
+\DoxyCodeLine{98 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsLeapYear( xbInt16 iYear ) \textcolor{keyword}{const};}
+\DoxyCodeLine{99 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsLeapYear() \textcolor{keyword}{const};}
+\DoxyCodeLine{100 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsNull() \textcolor{keyword}{const};}
+\DoxyCodeLine{101 xbInt32 JulianDays() \textcolor{keyword}{const};}
+\DoxyCodeLine{102 xbInt16 JulToDate8( xbInt32 lJulDate );}
+\DoxyCodeLine{103 xbInt16 LastDayOfMonth();}
+\DoxyCodeLine{104 xbInt16 MonthOf() \textcolor{keyword}{const};}
+\DoxyCodeLine{105 xbInt16 Set( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Date8 );}
+\DoxyCodeLine{106 xbInt16 Sysdate();}
+\DoxyCodeLine{107 xbInt16 YearOf() \textcolor{keyword}{const};}
+\DoxyCodeLine{108 }
+\DoxyCodeLine{109 \textcolor{preprocessor}{\#ifdef XB\_DEBUG\_SUPPORT}}
+\DoxyCodeLine{110 \textcolor{keywordtype}{void} Dump( \textcolor{keyword}{const} \textcolor{keywordtype}{char} * title );}
+\DoxyCodeLine{111 \textcolor{keywordtype}{void} DumpDateTables();}
+\DoxyCodeLine{112 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{113 }
+\DoxyCodeLine{114 \textcolor{keyword}{private}:}
+\DoxyCodeLine{115 \textcolor{keywordtype}{void} SetDateTables();}
+\DoxyCodeLine{116 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sDate8; \textcolor{comment}{// CCYYMMDD date format ie; 20140718}}
+\DoxyCodeLine{117 \textcolor{comment}{// Null date is identified by sDate.Len() < 8}}
+\DoxyCodeLine{118 }
+\DoxyCodeLine{119 \textcolor{keyword}{static} \textcolor{keywordtype}{int} iAggregatedDaysInMonths[2][13];}
+\DoxyCodeLine{120 \textcolor{keyword}{static} \textcolor{keywordtype}{int} iDaysInMonths[2][13];}
+\DoxyCodeLine{121 \};}
+\DoxyCodeLine{122 }
+\DoxyCodeLine{123 \} \textcolor{comment}{/* namespace */}}
+\DoxyCodeLine{124 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/*\_\_XB\_XBDATE\_H\_\_ */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{125 }
+
+\end{DoxyCode}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdbf3_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdbf3_8cpp.tex
new file mode 100644
index 0000000..ed9be8b
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdbf3_8cpp.tex
@@ -0,0 +1,3 @@
+\hypertarget{xbdbf3_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbdbf3.cpp File Reference}
+\label{xbdbf3_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbdbf3.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbdbf3.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdbf4_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdbf4_8cpp.tex
new file mode 100644
index 0000000..db4c64e
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdbf4_8cpp.tex
@@ -0,0 +1,3 @@
+\hypertarget{xbdbf4_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbdbf4.cpp File Reference}
+\label{xbdbf4_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbdbf4.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbdbf4.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdbf_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdbf_8cpp.tex
new file mode 100644
index 0000000..a96b643
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdbf_8cpp.tex
@@ -0,0 +1,8 @@
+\hypertarget{xbdbf_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbdbf.cpp File Reference}
+\label{xbdbf_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbdbf.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbdbf.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+\doxysubsection*{Namespaces}
+\begin{DoxyCompactItemize}
+\item
+namespace \mbox{\hyperlink{namespacexb}{xb}}
+\end{DoxyCompactItemize}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdbf_8h.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdbf_8h.tex
new file mode 100644
index 0000000..3efbf47
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdbf_8h.tex
@@ -0,0 +1,196 @@
+\hypertarget{xbdbf_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbdbf.h File Reference}
+\label{xbdbf_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbdbf.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbdbf.h}}
+\doxysubsection*{Data Structures}
+\begin{DoxyCompactItemize}
+\item
+struct \mbox{\hyperlink{structxb_1_1xbSchema}{xb\+::xb\+Schema}}
+\begin{DoxyCompactList}\small\item\em Schema used for defining tables with Create\+Table methods. \end{DoxyCompactList}\item
+class \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+::xb\+Dbf}}
+\begin{DoxyCompactList}\small\item\em Base class for handling dbf files/tables. \end{DoxyCompactList}\end{DoxyCompactItemize}
+\doxysubsection*{Namespaces}
+\begin{DoxyCompactItemize}
+\item
+namespace \mbox{\hyperlink{namespacexb}{xb}}
+\end{DoxyCompactItemize}
+\doxysubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{xbdbf_8h_a20f739b9d9dc6a002a246a999e76aeaa}{XB\+\_\+\+CHAR\+\_\+\+FLD}}~\textquotesingle{}C\textquotesingle{}
+\item
+\#define \mbox{\hyperlink{xbdbf_8h_a2f6d5073af761bc1a806a2c7b1c1d886}{XB\+\_\+\+LOGICAL\+\_\+\+FLD}}~\textquotesingle{}L\textquotesingle{}
+\item
+\#define \mbox{\hyperlink{xbdbf_8h_ae9fb6d69cc5edc94d36ae403c22ec1c6}{XB\+\_\+\+NUMERIC\+\_\+\+FLD}}~\textquotesingle{}N\textquotesingle{}
+\item
+\#define \mbox{\hyperlink{xbdbf_8h_a7f685e6f5fe804b2174725a27ce73adc}{XB\+\_\+\+DATE\+\_\+\+FLD}}~\textquotesingle{}D\textquotesingle{}
+\item
+\#define \mbox{\hyperlink{xbdbf_8h_a23fa19b19cb43bd6dcc59a5a3f6c30ad}{XB\+\_\+\+MEMO\+\_\+\+FLD}}~\textquotesingle{}M\textquotesingle{}
+\item
+\#define \mbox{\hyperlink{xbdbf_8h_a96ab4218d70ab603b4866354ce8c18cd}{XB\+\_\+\+FLOAT\+\_\+\+FLD}}~\textquotesingle{}F\textquotesingle{}
+\item
+\#define \mbox{\hyperlink{xbdbf_8h_a843ca4569326dbd1d0647899b0eb512f}{XB\+\_\+\+CLOSED}}~0
+\item
+\#define \mbox{\hyperlink{xbdbf_8h_a9a6dafbb07cac744eb14094efa739409}{XB\+\_\+\+OPEN}}~1
+\item
+\#define \mbox{\hyperlink{xbdbf_8h_a26e7eeda69f32bc88b08a208ca9e7991}{XB\+\_\+\+UPDATED}}~2
+\item
+\#define \mbox{\hyperlink{xbdbf_8h_a395a2e101a793bacabf6bc079d178e29}{XB\+\_\+\+LOCK}}~0
+\item
+\#define \mbox{\hyperlink{xbdbf_8h_a21389b73e7b4e7e185fa635b9e354c2e}{XB\+\_\+\+UNLOCK}}~1
+\item
+\#define \mbox{\hyperlink{xbdbf_8h_a4c08d01bd69e295b001bd00a228d8106}{LK\+\_\+\+DBASE}}~1
+\item
+\#define \mbox{\hyperlink{xbdbf_8h_a01d6d7910b0da2170eb904a97d864a41}{LK\+\_\+\+CLIPPER}}~2
+\item
+\#define \mbox{\hyperlink{xbdbf_8h_a65e29186276222f460a7171803e07adf}{LK\+\_\+\+FOX}}~3
+\item
+\#define \mbox{\hyperlink{xbdbf_8h_a42aea0ccd94f7422c8e0d7422dce85a4}{LK\+\_\+\+XBASE64}}~9
+\item
+\#define \mbox{\hyperlink{xbdbf_8h_a8bd17730da3ba5c55a6a07bc482dd0e4}{XB\+\_\+\+ALL\+\_\+\+RECS}}~0
+\item
+\#define \mbox{\hyperlink{xbdbf_8h_a1c44bb25bf2e23a3a9d3d2312df0b592}{XB\+\_\+\+ACTIVE\+\_\+\+RECS}}~1
+\item
+\#define \mbox{\hyperlink{xbdbf_8h_acc0a441854ed92b9d65d1181a97cad43}{XB\+\_\+\+DELETED\+\_\+\+RECS}}~2
+\item
+\#define \mbox{\hyperlink{xbdbf_8h_a6fe10b307878b4612b04c2c876a4a592}{XB\+\_\+\+OVERLAY}}~1
+\item
+\#define \mbox{\hyperlink{xbdbf_8h_a7b797840abdb3291373d15978103a778}{XB\+\_\+\+DONTOVERLAY}}~0
+\item
+\#define \mbox{\hyperlink{xbdbf_8h_ada1115f596131888c04df61546b198c4}{XB\+\_\+\+CHAREOF}}~\textquotesingle{}\textbackslash{}x1A\textquotesingle{} /$\ast$ end of DBF $\ast$/
+\item
+\#define \mbox{\hyperlink{xbdbf_8h_a35d56cac7959c1e5c761684ced3f1e17}{XB\+\_\+\+CHARHDR}}~\textquotesingle{}\textbackslash{}x0D\textquotesingle{} /$\ast$ header terminator $\ast$/
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{xbdbf_8h_a01d6d7910b0da2170eb904a97d864a41}\label{xbdbf_8h_a01d6d7910b0da2170eb904a97d864a41}}
+\index{xbdbf.h@{xbdbf.h}!LK\_CLIPPER@{LK\_CLIPPER}}
+\index{LK\_CLIPPER@{LK\_CLIPPER}!xbdbf.h@{xbdbf.h}}
+\doxysubsubsection{\texorpdfstring{LK\_CLIPPER}{LK\_CLIPPER}}
+{\footnotesize\ttfamily \#define LK\+\_\+\+CLIPPER~2}
+
+\mbox{\Hypertarget{xbdbf_8h_a4c08d01bd69e295b001bd00a228d8106}\label{xbdbf_8h_a4c08d01bd69e295b001bd00a228d8106}}
+\index{xbdbf.h@{xbdbf.h}!LK\_DBASE@{LK\_DBASE}}
+\index{LK\_DBASE@{LK\_DBASE}!xbdbf.h@{xbdbf.h}}
+\doxysubsubsection{\texorpdfstring{LK\_DBASE}{LK\_DBASE}}
+{\footnotesize\ttfamily \#define LK\+\_\+\+DBASE~1}
+
+\mbox{\Hypertarget{xbdbf_8h_a65e29186276222f460a7171803e07adf}\label{xbdbf_8h_a65e29186276222f460a7171803e07adf}}
+\index{xbdbf.h@{xbdbf.h}!LK\_FOX@{LK\_FOX}}
+\index{LK\_FOX@{LK\_FOX}!xbdbf.h@{xbdbf.h}}
+\doxysubsubsection{\texorpdfstring{LK\_FOX}{LK\_FOX}}
+{\footnotesize\ttfamily \#define LK\+\_\+\+FOX~3}
+
+\mbox{\Hypertarget{xbdbf_8h_a42aea0ccd94f7422c8e0d7422dce85a4}\label{xbdbf_8h_a42aea0ccd94f7422c8e0d7422dce85a4}}
+\index{xbdbf.h@{xbdbf.h}!LK\_XBASE64@{LK\_XBASE64}}
+\index{LK\_XBASE64@{LK\_XBASE64}!xbdbf.h@{xbdbf.h}}
+\doxysubsubsection{\texorpdfstring{LK\_XBASE64}{LK\_XBASE64}}
+{\footnotesize\ttfamily \#define LK\+\_\+\+XBASE64~9}
+
+\mbox{\Hypertarget{xbdbf_8h_a1c44bb25bf2e23a3a9d3d2312df0b592}\label{xbdbf_8h_a1c44bb25bf2e23a3a9d3d2312df0b592}}
+\index{xbdbf.h@{xbdbf.h}!XB\_ACTIVE\_RECS@{XB\_ACTIVE\_RECS}}
+\index{XB\_ACTIVE\_RECS@{XB\_ACTIVE\_RECS}!xbdbf.h@{xbdbf.h}}
+\doxysubsubsection{\texorpdfstring{XB\_ACTIVE\_RECS}{XB\_ACTIVE\_RECS}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+ACTIVE\+\_\+\+RECS~1}
+
+\mbox{\Hypertarget{xbdbf_8h_a8bd17730da3ba5c55a6a07bc482dd0e4}\label{xbdbf_8h_a8bd17730da3ba5c55a6a07bc482dd0e4}}
+\index{xbdbf.h@{xbdbf.h}!XB\_ALL\_RECS@{XB\_ALL\_RECS}}
+\index{XB\_ALL\_RECS@{XB\_ALL\_RECS}!xbdbf.h@{xbdbf.h}}
+\doxysubsubsection{\texorpdfstring{XB\_ALL\_RECS}{XB\_ALL\_RECS}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+ALL\+\_\+\+RECS~0}
+
+\mbox{\Hypertarget{xbdbf_8h_a20f739b9d9dc6a002a246a999e76aeaa}\label{xbdbf_8h_a20f739b9d9dc6a002a246a999e76aeaa}}
+\index{xbdbf.h@{xbdbf.h}!XB\_CHAR\_FLD@{XB\_CHAR\_FLD}}
+\index{XB\_CHAR\_FLD@{XB\_CHAR\_FLD}!xbdbf.h@{xbdbf.h}}
+\doxysubsubsection{\texorpdfstring{XB\_CHAR\_FLD}{XB\_CHAR\_FLD}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+CHAR\+\_\+\+FLD~\textquotesingle{}C\textquotesingle{}}
+
+\mbox{\Hypertarget{xbdbf_8h_ada1115f596131888c04df61546b198c4}\label{xbdbf_8h_ada1115f596131888c04df61546b198c4}}
+\index{xbdbf.h@{xbdbf.h}!XB\_CHAREOF@{XB\_CHAREOF}}
+\index{XB\_CHAREOF@{XB\_CHAREOF}!xbdbf.h@{xbdbf.h}}
+\doxysubsubsection{\texorpdfstring{XB\_CHAREOF}{XB\_CHAREOF}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+CHAREOF~\textquotesingle{}\textbackslash{}x1A\textquotesingle{} /$\ast$ end of DBF $\ast$/}
+
+\mbox{\Hypertarget{xbdbf_8h_a35d56cac7959c1e5c761684ced3f1e17}\label{xbdbf_8h_a35d56cac7959c1e5c761684ced3f1e17}}
+\index{xbdbf.h@{xbdbf.h}!XB\_CHARHDR@{XB\_CHARHDR}}
+\index{XB\_CHARHDR@{XB\_CHARHDR}!xbdbf.h@{xbdbf.h}}
+\doxysubsubsection{\texorpdfstring{XB\_CHARHDR}{XB\_CHARHDR}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+CHARHDR~\textquotesingle{}\textbackslash{}x0D\textquotesingle{} /$\ast$ header terminator $\ast$/}
+
+\mbox{\Hypertarget{xbdbf_8h_a843ca4569326dbd1d0647899b0eb512f}\label{xbdbf_8h_a843ca4569326dbd1d0647899b0eb512f}}
+\index{xbdbf.h@{xbdbf.h}!XB\_CLOSED@{XB\_CLOSED}}
+\index{XB\_CLOSED@{XB\_CLOSED}!xbdbf.h@{xbdbf.h}}
+\doxysubsubsection{\texorpdfstring{XB\_CLOSED}{XB\_CLOSED}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+CLOSED~0}
+
+\mbox{\Hypertarget{xbdbf_8h_a7f685e6f5fe804b2174725a27ce73adc}\label{xbdbf_8h_a7f685e6f5fe804b2174725a27ce73adc}}
+\index{xbdbf.h@{xbdbf.h}!XB\_DATE\_FLD@{XB\_DATE\_FLD}}
+\index{XB\_DATE\_FLD@{XB\_DATE\_FLD}!xbdbf.h@{xbdbf.h}}
+\doxysubsubsection{\texorpdfstring{XB\_DATE\_FLD}{XB\_DATE\_FLD}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+DATE\+\_\+\+FLD~\textquotesingle{}D\textquotesingle{}}
+
+\mbox{\Hypertarget{xbdbf_8h_acc0a441854ed92b9d65d1181a97cad43}\label{xbdbf_8h_acc0a441854ed92b9d65d1181a97cad43}}
+\index{xbdbf.h@{xbdbf.h}!XB\_DELETED\_RECS@{XB\_DELETED\_RECS}}
+\index{XB\_DELETED\_RECS@{XB\_DELETED\_RECS}!xbdbf.h@{xbdbf.h}}
+\doxysubsubsection{\texorpdfstring{XB\_DELETED\_RECS}{XB\_DELETED\_RECS}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+DELETED\+\_\+\+RECS~2}
+
+\mbox{\Hypertarget{xbdbf_8h_a7b797840abdb3291373d15978103a778}\label{xbdbf_8h_a7b797840abdb3291373d15978103a778}}
+\index{xbdbf.h@{xbdbf.h}!XB\_DONTOVERLAY@{XB\_DONTOVERLAY}}
+\index{XB\_DONTOVERLAY@{XB\_DONTOVERLAY}!xbdbf.h@{xbdbf.h}}
+\doxysubsubsection{\texorpdfstring{XB\_DONTOVERLAY}{XB\_DONTOVERLAY}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+DONTOVERLAY~0}
+
+\mbox{\Hypertarget{xbdbf_8h_a96ab4218d70ab603b4866354ce8c18cd}\label{xbdbf_8h_a96ab4218d70ab603b4866354ce8c18cd}}
+\index{xbdbf.h@{xbdbf.h}!XB\_FLOAT\_FLD@{XB\_FLOAT\_FLD}}
+\index{XB\_FLOAT\_FLD@{XB\_FLOAT\_FLD}!xbdbf.h@{xbdbf.h}}
+\doxysubsubsection{\texorpdfstring{XB\_FLOAT\_FLD}{XB\_FLOAT\_FLD}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+FLOAT\+\_\+\+FLD~\textquotesingle{}F\textquotesingle{}}
+
+\mbox{\Hypertarget{xbdbf_8h_a395a2e101a793bacabf6bc079d178e29}\label{xbdbf_8h_a395a2e101a793bacabf6bc079d178e29}}
+\index{xbdbf.h@{xbdbf.h}!XB\_LOCK@{XB\_LOCK}}
+\index{XB\_LOCK@{XB\_LOCK}!xbdbf.h@{xbdbf.h}}
+\doxysubsubsection{\texorpdfstring{XB\_LOCK}{XB\_LOCK}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+LOCK~0}
+
+\mbox{\Hypertarget{xbdbf_8h_a2f6d5073af761bc1a806a2c7b1c1d886}\label{xbdbf_8h_a2f6d5073af761bc1a806a2c7b1c1d886}}
+\index{xbdbf.h@{xbdbf.h}!XB\_LOGICAL\_FLD@{XB\_LOGICAL\_FLD}}
+\index{XB\_LOGICAL\_FLD@{XB\_LOGICAL\_FLD}!xbdbf.h@{xbdbf.h}}
+\doxysubsubsection{\texorpdfstring{XB\_LOGICAL\_FLD}{XB\_LOGICAL\_FLD}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+LOGICAL\+\_\+\+FLD~\textquotesingle{}L\textquotesingle{}}
+
+\mbox{\Hypertarget{xbdbf_8h_a23fa19b19cb43bd6dcc59a5a3f6c30ad}\label{xbdbf_8h_a23fa19b19cb43bd6dcc59a5a3f6c30ad}}
+\index{xbdbf.h@{xbdbf.h}!XB\_MEMO\_FLD@{XB\_MEMO\_FLD}}
+\index{XB\_MEMO\_FLD@{XB\_MEMO\_FLD}!xbdbf.h@{xbdbf.h}}
+\doxysubsubsection{\texorpdfstring{XB\_MEMO\_FLD}{XB\_MEMO\_FLD}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+MEMO\+\_\+\+FLD~\textquotesingle{}M\textquotesingle{}}
+
+\mbox{\Hypertarget{xbdbf_8h_ae9fb6d69cc5edc94d36ae403c22ec1c6}\label{xbdbf_8h_ae9fb6d69cc5edc94d36ae403c22ec1c6}}
+\index{xbdbf.h@{xbdbf.h}!XB\_NUMERIC\_FLD@{XB\_NUMERIC\_FLD}}
+\index{XB\_NUMERIC\_FLD@{XB\_NUMERIC\_FLD}!xbdbf.h@{xbdbf.h}}
+\doxysubsubsection{\texorpdfstring{XB\_NUMERIC\_FLD}{XB\_NUMERIC\_FLD}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+NUMERIC\+\_\+\+FLD~\textquotesingle{}N\textquotesingle{}}
+
+\mbox{\Hypertarget{xbdbf_8h_a9a6dafbb07cac744eb14094efa739409}\label{xbdbf_8h_a9a6dafbb07cac744eb14094efa739409}}
+\index{xbdbf.h@{xbdbf.h}!XB\_OPEN@{XB\_OPEN}}
+\index{XB\_OPEN@{XB\_OPEN}!xbdbf.h@{xbdbf.h}}
+\doxysubsubsection{\texorpdfstring{XB\_OPEN}{XB\_OPEN}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+OPEN~1}
+
+\mbox{\Hypertarget{xbdbf_8h_a6fe10b307878b4612b04c2c876a4a592}\label{xbdbf_8h_a6fe10b307878b4612b04c2c876a4a592}}
+\index{xbdbf.h@{xbdbf.h}!XB\_OVERLAY@{XB\_OVERLAY}}
+\index{XB\_OVERLAY@{XB\_OVERLAY}!xbdbf.h@{xbdbf.h}}
+\doxysubsubsection{\texorpdfstring{XB\_OVERLAY}{XB\_OVERLAY}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+OVERLAY~1}
+
+\mbox{\Hypertarget{xbdbf_8h_a21389b73e7b4e7e185fa635b9e354c2e}\label{xbdbf_8h_a21389b73e7b4e7e185fa635b9e354c2e}}
+\index{xbdbf.h@{xbdbf.h}!XB\_UNLOCK@{XB\_UNLOCK}}
+\index{XB\_UNLOCK@{XB\_UNLOCK}!xbdbf.h@{xbdbf.h}}
+\doxysubsubsection{\texorpdfstring{XB\_UNLOCK}{XB\_UNLOCK}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+UNLOCK~1}
+
+\mbox{\Hypertarget{xbdbf_8h_a26e7eeda69f32bc88b08a208ca9e7991}\label{xbdbf_8h_a26e7eeda69f32bc88b08a208ca9e7991}}
+\index{xbdbf.h@{xbdbf.h}!XB\_UPDATED@{XB\_UPDATED}}
+\index{XB\_UPDATED@{XB\_UPDATED}!xbdbf.h@{xbdbf.h}}
+\doxysubsubsection{\texorpdfstring{XB\_UPDATED}{XB\_UPDATED}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+UPDATED~2}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdbf_8h_source.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdbf_8h_source.tex
new file mode 100644
index 0000000..d982681
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdbf_8h_source.tex
@@ -0,0 +1,521 @@
+\hypertarget{xbdbf_8h_source}{}\doxysection{xbdbf.\+h}
+\label{xbdbf_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbdbf.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbdbf.h}}
+\mbox{\hyperlink{xbdbf_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{comment}{/* xbdbf.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,2023 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\_XBDBF\_H\_\_}}
+\DoxyCodeLine{18 \textcolor{preprocessor}{\#define \_\_XB\_XBDBF\_H\_\_}}
+\DoxyCodeLine{19 }
+\DoxyCodeLine{20 \textcolor{comment}{//\#ifdef CMAKE\_COMPILER\_IS\_GNUCC}}
+\DoxyCodeLine{21 \textcolor{comment}{//\#pragma interface}}
+\DoxyCodeLine{22 \textcolor{comment}{//\#endif}}
+\DoxyCodeLine{23 }
+\DoxyCodeLine{24 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
+\DoxyCodeLine{25 }
+\DoxyCodeLine{26 \textcolor{comment}{/*****************************/}}
+\DoxyCodeLine{27 \textcolor{comment}{/* Field Types */}}
+\DoxyCodeLine{28 }
+\DoxyCodeLine{29 \textcolor{preprocessor}{\#define XB\_CHAR\_FLD 'C'}}
+\DoxyCodeLine{30 \textcolor{preprocessor}{\#define XB\_LOGICAL\_FLD 'L'}}
+\DoxyCodeLine{31 \textcolor{preprocessor}{\#define XB\_NUMERIC\_FLD 'N'}}
+\DoxyCodeLine{32 \textcolor{preprocessor}{\#define XB\_DATE\_FLD 'D'}}
+\DoxyCodeLine{33 \textcolor{preprocessor}{\#define XB\_MEMO\_FLD 'M'}}
+\DoxyCodeLine{34 \textcolor{preprocessor}{\#define XB\_FLOAT\_FLD 'F'}}
+\DoxyCodeLine{35 }
+\DoxyCodeLine{36 \textcolor{comment}{/*****************************/}}
+\DoxyCodeLine{37 \textcolor{comment}{/* File Status Codes */}}
+\DoxyCodeLine{38 }
+\DoxyCodeLine{39 \textcolor{preprocessor}{\#define XB\_CLOSED 0}}
+\DoxyCodeLine{40 \textcolor{preprocessor}{\#define XB\_OPEN 1}}
+\DoxyCodeLine{41 \textcolor{preprocessor}{\#define XB\_UPDATED 2}}
+\DoxyCodeLine{42 }
+\DoxyCodeLine{43 }
+\DoxyCodeLine{44 \textcolor{comment}{/*****************************/}}
+\DoxyCodeLine{45 \textcolor{comment}{/* File Access Modes */}}
+\DoxyCodeLine{46 \textcolor{comment}{// \#define XB\_SINGLE\_USER 0 // file buffering on}}
+\DoxyCodeLine{47 \textcolor{comment}{// \#define XB\_MULTI\_USER 1 // file buffering off}}
+\DoxyCodeLine{48 }
+\DoxyCodeLine{49 \textcolor{comment}{/*****************************/}}
+\DoxyCodeLine{50 \textcolor{comment}{/* File Lock Functions */}}
+\DoxyCodeLine{51 \textcolor{preprocessor}{\#define XB\_LOCK 0}}
+\DoxyCodeLine{52 \textcolor{preprocessor}{\#define XB\_UNLOCK 1}}
+\DoxyCodeLine{53 }
+\DoxyCodeLine{54 \textcolor{preprocessor}{\#define LK\_DBASE 1}}
+\DoxyCodeLine{55 \textcolor{preprocessor}{\#define LK\_CLIPPER 2 }\textcolor{comment}{// future}}
+\DoxyCodeLine{56 \textcolor{preprocessor}{\#define LK\_FOX 3 }\textcolor{comment}{// future}}
+\DoxyCodeLine{57 \textcolor{preprocessor}{\#define LK\_XBASE64 9 }\textcolor{comment}{// future}}
+\DoxyCodeLine{58 }
+\DoxyCodeLine{59 \textcolor{comment}{/*****************************/}}
+\DoxyCodeLine{60 \textcolor{comment}{/* Record retrieve options */}}
+\DoxyCodeLine{61 \textcolor{preprocessor}{\#define XB\_ALL\_RECS 0}}
+\DoxyCodeLine{62 \textcolor{preprocessor}{\#define XB\_ACTIVE\_RECS 1}}
+\DoxyCodeLine{63 \textcolor{preprocessor}{\#define XB\_DELETED\_RECS 2}}
+\DoxyCodeLine{64 }
+\DoxyCodeLine{65 }
+\DoxyCodeLine{66 \textcolor{comment}{/*****************************/}}
+\DoxyCodeLine{67 \textcolor{comment}{/* Other defines */}}
+\DoxyCodeLine{68 }
+\DoxyCodeLine{69 \textcolor{preprocessor}{\#define XB\_OVERLAY 1}}
+\DoxyCodeLine{70 \textcolor{preprocessor}{\#define XB\_DONTOVERLAY 0}}
+\DoxyCodeLine{71 \textcolor{preprocessor}{\#define XB\_CHAREOF '\(\backslash\)x1A' }\textcolor{comment}{/* end of DBF */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{72 \textcolor{preprocessor}{\#define XB\_CHARHDR '\(\backslash\)x0D' }\textcolor{comment}{/* header terminator */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{73 }
+\DoxyCodeLine{74 }
+\DoxyCodeLine{76 }
+\DoxyCodeLine{95 \textcolor{keyword}{struct }XBDLLEXPORT \mbox{\hyperlink{structxb_1_1xbSchema}{xbSchema}} \{}
+\DoxyCodeLine{96 \textcolor{keywordtype}{char} cFieldName[11];}
+\DoxyCodeLine{97 \textcolor{keywordtype}{char} \mbox{\hyperlink{structxb_1_1xbSchema_a1d612b2ed5dc0b0289c9e91b3cda3a25}{cType}};}
+\DoxyCodeLine{98 xbInt16 \mbox{\hyperlink{structxb_1_1xbSchema_a2da554af25ef628acf59bb52996056ac}{iFieldLen}}; \textcolor{comment}{/* fields are stored as one byte on record*/}}
+\DoxyCodeLine{99 xbInt16 \mbox{\hyperlink{structxb_1_1xbSchema_a55bab3bb69dee3508d168c93e182d4b9}{iNoOfDecs}};}
+\DoxyCodeLine{100 \};}
+\DoxyCodeLine{101 }
+\DoxyCodeLine{103 \textcolor{keyword}{struct }XBDLLEXPORT xbSchemaRec \{}
+\DoxyCodeLine{104 \textcolor{keywordtype}{char} cFieldName[11]; \textcolor{comment}{/* ASCIIZ field name */}}
+\DoxyCodeLine{105 \textcolor{keywordtype}{char} cType; \textcolor{comment}{/* field type */}}
+\DoxyCodeLine{106 \textcolor{keywordtype}{char} *pAddress; \textcolor{comment}{/* pointer to field in record buffer 1 */}}
+\DoxyCodeLine{107 \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} cFieldLen; \textcolor{comment}{/* fields are stored as one byte on record */}}
+\DoxyCodeLine{108 \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} cNoOfDecs;}
+\DoxyCodeLine{109 \textcolor{keywordtype}{char} *pAddress2; \textcolor{comment}{/* pointer to field in record buffer 2 */}}
+\DoxyCodeLine{110 xbInt16 iLongFieldLen; \textcolor{comment}{/* to handle long field lengths */}}
+\DoxyCodeLine{111 \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} cIxFlag; \textcolor{comment}{/* DBase IV Index field flag */}}
+\DoxyCodeLine{112 \};}
+\DoxyCodeLine{114 }
+\DoxyCodeLine{115 }
+\DoxyCodeLine{116 }
+\DoxyCodeLine{118 \textcolor{preprocessor}{\#ifdef XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{119 \textcolor{keyword}{class }XBDLLEXPORT xbIx;}
+\DoxyCodeLine{120 \textcolor{comment}{// structure for file list, each open DBF file can have one or more index files}}
+\DoxyCodeLine{121 \textcolor{keyword}{struct }XBDLLEXPORT xbIxList \{}
+\DoxyCodeLine{122 xbIxList *next;}
+\DoxyCodeLine{123 xbIx *ix;}
+\DoxyCodeLine{124 xbString *sFmt;}
+\DoxyCodeLine{125 \};}
+\DoxyCodeLine{126 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{128 \textcolor{comment}{}}
+\DoxyCodeLine{129 }
+\DoxyCodeLine{131 }
+\DoxyCodeLine{150 \textcolor{keyword}{class }XBDLLEXPORT \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} : \textcolor{keyword}{public} \mbox{\hyperlink{classxb_1_1xbFile}{xbFile}} \{}
+\DoxyCodeLine{151 }
+\DoxyCodeLine{152 \textcolor{keyword}{public}:}
+\DoxyCodeLine{153 \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}}( \mbox{\hyperlink{classxb_1_1xbXBase}{xbXBase}} *x );}
+\DoxyCodeLine{154 \textcolor{keyword}{virtual} \mbox{\hyperlink{classxb_1_1xbDbf}{\string~xbDbf}}();}
+\DoxyCodeLine{155 }
+\DoxyCodeLine{156 \textcolor{keyword}{virtual} xbInt16 Abort();}
+\DoxyCodeLine{157 \textcolor{keyword}{virtual} xbInt16 AppendRecord();}
+\DoxyCodeLine{158 \textcolor{keyword}{virtual} xbInt16 BlankRecord();}
+\DoxyCodeLine{159 \textcolor{keyword}{virtual} xbInt16 Commit();}
+\DoxyCodeLine{160 \textcolor{keyword}{virtual} xbInt16 Close();}
+\DoxyCodeLine{161 \textcolor{keyword}{virtual} xbInt16 CopyDbfStructure( \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} *dNewTable, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTableName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTableAlias, xbInt16 iOverlay, xbInt16 iShareMode );}
+\DoxyCodeLine{162 \textcolor{keyword}{virtual} xbInt16 \mbox{\hyperlink{classxb_1_1xbDbf_a73e41bfe679dd06ab16c436652df93f1}{CreateTable}} ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTableName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sAlias, \mbox{\hyperlink{structxb_1_1xbSchema}{xbSchema}} *pSchema, xbInt16 iOverlay, xbInt16 iShareMode ) = 0;}
+\DoxyCodeLine{163 \textcolor{keyword}{virtual} xbInt16 DeleteTable ();}
+\DoxyCodeLine{164 \textcolor{keyword}{virtual} xbInt16 DeleteAll ( xbInt16 iOption );}
+\DoxyCodeLine{165 \textcolor{keyword}{virtual} xbInt16 DeleteAllRecords ();}
+\DoxyCodeLine{166 \textcolor{keyword}{virtual} xbInt16 DeleteRecord ();}
+\DoxyCodeLine{167 \textcolor{keyword}{virtual} xbInt16 DumpHeader ( xbInt16 iOption );}
+\DoxyCodeLine{168 \textcolor{keyword}{virtual} xbInt16 DumpRecord ( xbUInt32 ulRecNo, xbInt16 iOutputDest = 0, xbInt16 iOutputFmt = 0 );}
+\DoxyCodeLine{169 \textcolor{keyword}{virtual} xbInt16 GetAutoCommit () \textcolor{keyword}{const};}
+\DoxyCodeLine{170 \textcolor{keyword}{virtual} xbInt16 GetAutoCommit ( xbInt16 iOption ) \textcolor{keyword}{const};}
+\DoxyCodeLine{171 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetBof ();}
+\DoxyCodeLine{172 \textcolor{keyword}{virtual} xbUInt32 GetCurRecNo () \textcolor{keyword}{const};}
+\DoxyCodeLine{173 \textcolor{keyword}{virtual} xbInt16 GetDbfStatus () \textcolor{keyword}{const};}
+\DoxyCodeLine{174 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetEof ();}
+\DoxyCodeLine{175 \textcolor{keyword}{virtual} xbInt32 GetFieldCnt () \textcolor{keyword}{const};}
+\DoxyCodeLine{176 \textcolor{keyword}{virtual} xbInt16 GetFirstRecord ();}
+\DoxyCodeLine{177 \textcolor{keyword}{virtual} xbInt16 GetFirstRecord ( xbInt16 iOption );}
+\DoxyCodeLine{178 \textcolor{keyword}{virtual} xbUInt16 \mbox{\hyperlink{classxb_1_1xbDbf_ad56be2756b7a9f8318d9ba5cf215dafb}{GetHeaderLen}} () \textcolor{keyword}{const};}
+\DoxyCodeLine{179 \textcolor{keyword}{virtual} xbInt16 GetLastRecord ();}
+\DoxyCodeLine{180 \textcolor{keyword}{virtual} xbInt16 GetLastRecord ( xbInt16 iOption );}
+\DoxyCodeLine{181 }
+\DoxyCodeLine{182 \textcolor{keyword}{virtual} xbInt16 GetNextRecord ();}
+\DoxyCodeLine{183 \textcolor{keyword}{virtual} xbInt16 GetNextRecord ( xbInt16 iOption );}
+\DoxyCodeLine{184 \textcolor{keyword}{virtual} xbInt16 GetNextRecord ( xbInt16 iOption, xbUInt32 ulStartRec );}
+\DoxyCodeLine{185 \textcolor{keyword}{virtual} xbInt16 GetPrevRecord ();}
+\DoxyCodeLine{186 \textcolor{keyword}{virtual} xbInt16 GetPrevRecord ( xbInt16 iOption );}
+\DoxyCodeLine{187 \textcolor{keyword}{virtual} xbInt16 GetRecord ( xbUInt32 ulRecNo );}
+\DoxyCodeLine{188 }
+\DoxyCodeLine{189 \textcolor{comment}{// virtual xbUInt32 GetRecordCount ();}}
+\DoxyCodeLine{190 \textcolor{keyword}{virtual} xbInt16 GetRecordCnt ( xbUInt32 \& ulRecCnt );}
+\DoxyCodeLine{191 }
+\DoxyCodeLine{192 \textcolor{keyword}{virtual} \textcolor{keywordtype}{char} * GetRecordBuf ( xbInt16 iOpt = 0 ) \textcolor{keyword}{const};}
+\DoxyCodeLine{193 \textcolor{keyword}{virtual} xbUInt16 GetRecordLen () \textcolor{keyword}{const};}
+\DoxyCodeLine{194 \textcolor{keyword}{virtual} \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&GetTblAlias() \textcolor{keyword}{const};}
+\DoxyCodeLine{195 \textcolor{keyword}{virtual} xbInt16 \mbox{\hyperlink{classxb_1_1xbDbf_a49212a9eb17f7fa9f303e08d5fc50fc6}{GetVersion}} () \textcolor{keyword}{const} = 0; }
+\DoxyCodeLine{196 \textcolor{keyword}{virtual} \mbox{\hyperlink{classxb_1_1xbXBase}{xbXBase}} *GetXbasePtr () \textcolor{keyword}{const}; \textcolor{comment}{// return xbase pointer}}
+\DoxyCodeLine{197 }
+\DoxyCodeLine{198 }
+\DoxyCodeLine{199 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} MemoFieldsExist () \textcolor{keyword}{const};}
+\DoxyCodeLine{200 }
+\DoxyCodeLine{201 \textcolor{keyword}{virtual} xbInt16 Open ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTableName );}
+\DoxyCodeLine{202 \textcolor{keyword}{virtual} xbInt16 Open ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTableName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sAlias );}
+\DoxyCodeLine{203 \textcolor{keyword}{virtual} xbInt16 \mbox{\hyperlink{classxb_1_1xbDbf_a4d018cbf44d8d8b2145c9acab02c8adf}{Open}} ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTableName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sAlias, xbInt16 iOpenMode, xbInt16 iShareMode ) = 0;}
+\DoxyCodeLine{204 \textcolor{keyword}{virtual} xbInt16 Pack ();}
+\DoxyCodeLine{205 \textcolor{keyword}{virtual} xbInt16 Pack ( xbUInt32 \&ulDeletedRecCnt );}
+\DoxyCodeLine{206 }
+\DoxyCodeLine{207 }
+\DoxyCodeLine{208 \textcolor{keyword}{virtual} xbInt16 PutRecord (); \textcolor{comment}{// Put record to current location}}
+\DoxyCodeLine{209 \textcolor{keyword}{virtual} xbInt16 PutRecord ( xbUInt32 ulRecNo );}
+\DoxyCodeLine{210 \textcolor{comment}{// virtual xbInt16 ReadHeader ( xbInt16 iFilePositionOption, xbInt16 iReadOption );}}
+\DoxyCodeLine{211 \textcolor{keyword}{virtual} xbInt16 RecordDeleted ( xbInt16 iOpt = 0 ) \textcolor{keyword}{const};}
+\DoxyCodeLine{212 \textcolor{keyword}{virtual} xbInt16 \mbox{\hyperlink{classxb_1_1xbDbf_aeeeb2eb5fabcd0f91d457df07b0e0708}{Rename}} ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sNewName ) = 0;}
+\DoxyCodeLine{213 }
+\DoxyCodeLine{214 \textcolor{keyword}{virtual} xbInt16 SetAutoCommit ( xbInt16 iAutoCommit );}
+\DoxyCodeLine{215 }
+\DoxyCodeLine{216 \textcolor{keyword}{virtual} xbInt16 UndeleteAllRecords();}
+\DoxyCodeLine{217 \textcolor{keyword}{virtual} xbInt16 UndeleteRecord ();}
+\DoxyCodeLine{218 \textcolor{keyword}{virtual} xbInt16 Zap ();}
+\DoxyCodeLine{219 }
+\DoxyCodeLine{220 }
+\DoxyCodeLine{221 \textcolor{comment}{/* field methods */}}
+\DoxyCodeLine{222 \textcolor{comment}{//virtual xbInt16 GetRawField( xbInt16 iFieldNo, char *Buf, xbUInt32 BufSize, xbInt16 iRecBufSw ) const;}}
+\DoxyCodeLine{223 \textcolor{keyword}{virtual} xbInt16 GetField(xbInt16 iFieldNo, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldValue, xbInt16 iRecBufSw ) \textcolor{keyword}{const};}
+\DoxyCodeLine{224 \textcolor{keyword}{virtual} xbInt16 GetField(xbInt16 iFieldNo, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldValue) \textcolor{keyword}{const};}
+\DoxyCodeLine{225 \textcolor{keyword}{virtual} xbInt16 GetField(\textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldValue) \textcolor{keyword}{const};}
+\DoxyCodeLine{226 \textcolor{keyword}{virtual} xbInt16 GetFieldDecimal( xbInt16 iFieldNo, xbInt16 \&iFieldDecimal ) \textcolor{keyword}{const};}
+\DoxyCodeLine{227 \textcolor{keyword}{virtual} xbInt16 GetFieldDecimal( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, xbInt16 \&iFieldDecimal ) \textcolor{keyword}{const};}
+\DoxyCodeLine{228 \textcolor{keyword}{virtual} xbInt16 GetFieldLen( xbInt16 iFieldNo, xbInt16 \&iFieldLen ) \textcolor{keyword}{const};}
+\DoxyCodeLine{229 \textcolor{keyword}{virtual} xbInt16 GetFieldLen( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, xbInt16 \&iFieldLen ) \textcolor{keyword}{const};}
+\DoxyCodeLine{230 \textcolor{keyword}{virtual} xbInt16 GetFieldName( xbInt16 iFieldNo, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName ) \textcolor{keyword}{const};}
+\DoxyCodeLine{231 }
+\DoxyCodeLine{232 \textcolor{keyword}{virtual} xbInt16 GetFieldNo( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, xbInt16 \&iFieldNo ) \textcolor{keyword}{const};}
+\DoxyCodeLine{233 \textcolor{keyword}{virtual} xbInt16 GetFieldNo( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName ) \textcolor{keyword}{const};}
+\DoxyCodeLine{234 }
+\DoxyCodeLine{235 \textcolor{keyword}{virtual} xbInt16 GetFieldType( xbInt16 iFieldNo, \textcolor{keywordtype}{char} \&cFieldType ) \textcolor{keyword}{const};}
+\DoxyCodeLine{236 \textcolor{keyword}{virtual} xbInt16 GetFieldType( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, \textcolor{keywordtype}{char} \&cFieldType ) \textcolor{keyword}{const};}
+\DoxyCodeLine{237 \textcolor{keyword}{virtual} xbInt16 PutField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldData );}
+\DoxyCodeLine{238 \textcolor{keyword}{virtual} xbInt16 PutField( xbInt16 iFieldNo, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldData );}
+\DoxyCodeLine{239 }
+\DoxyCodeLine{240 \textcolor{keyword}{virtual} xbInt16 PutLogicalField( xbInt16 iFieldNo, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldData );}
+\DoxyCodeLine{241 \textcolor{keyword}{virtual} xbInt16 PutLogicalField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldData );}
+\DoxyCodeLine{242 \textcolor{keyword}{virtual} xbInt16 GetLogicalField( xbInt16 iFieldNo, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldData ) \textcolor{keyword}{const};}
+\DoxyCodeLine{243 \textcolor{keyword}{virtual} xbInt16 GetLogicalField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldData) \textcolor{keyword}{const};}
+\DoxyCodeLine{244 }
+\DoxyCodeLine{245 \textcolor{keyword}{virtual} xbInt16 PutLogicalField( xbInt16 iFieldNo, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bFieldData );}
+\DoxyCodeLine{246 \textcolor{keyword}{virtual} xbInt16 PutLogicalField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bFieldData );}
+\DoxyCodeLine{247 \textcolor{keyword}{virtual} xbInt16 GetLogicalField( xbInt16 iFieldNo, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bFieldData ) \textcolor{keyword}{const};}
+\DoxyCodeLine{248 \textcolor{keyword}{virtual} xbInt16 GetLogicalField( xbInt16 iFieldNo, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bFieldData, xbInt16 iRecBufSw ) \textcolor{keyword}{const};}
+\DoxyCodeLine{249 \textcolor{keyword}{virtual} xbInt16 GetLogicalField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bFieldData) \textcolor{keyword}{const};}
+\DoxyCodeLine{250 }
+\DoxyCodeLine{251 \textcolor{keyword}{virtual} xbInt16 GetLongField( xbInt16 iFieldNo, xbInt32 \&lFieldValue ) \textcolor{keyword}{const};}
+\DoxyCodeLine{252 \textcolor{keyword}{virtual} xbInt16 GetLongField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, xbInt32 \&lFieldValue ) \textcolor{keyword}{const};}
+\DoxyCodeLine{253 \textcolor{keyword}{virtual} xbInt16 PutLongField( xbInt16 iFieldNo, xbInt32 lFieldValue );}
+\DoxyCodeLine{254 \textcolor{keyword}{virtual} xbInt16 PutLongField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, xbInt32 lFieldValue );}
+\DoxyCodeLine{255 }
+\DoxyCodeLine{256 \textcolor{keyword}{virtual} xbInt16 GetULongField( xbInt16 iFieldNo, xbUInt32 \&lFieldValue ) \textcolor{keyword}{const};}
+\DoxyCodeLine{257 \textcolor{keyword}{virtual} xbInt16 GetULongField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, xbUInt32 \&lFieldValue ) \textcolor{keyword}{const};}
+\DoxyCodeLine{258 \textcolor{keyword}{virtual} xbInt16 PutULongField( xbInt16 iFieldNo, xbUInt32 lFieldValue );}
+\DoxyCodeLine{259 \textcolor{keyword}{virtual} xbInt16 PutULongField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldNo, xbUInt32 lFieldValue );}
+\DoxyCodeLine{260 }
+\DoxyCodeLine{261 \textcolor{keyword}{virtual} xbInt16 GetDoubleField( xbInt16 FieldNo, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dFieldValue ) \textcolor{keyword}{const};}
+\DoxyCodeLine{262 \textcolor{keyword}{virtual} xbInt16 GetDoubleField( xbInt16 FieldNo, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dFieldValue, xbInt16 iRecBufSw ) \textcolor{keyword}{const};}
+\DoxyCodeLine{263 \textcolor{keyword}{virtual} xbInt16 GetDoubleField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dFieldValue ) \textcolor{keyword}{const};}
+\DoxyCodeLine{264 \textcolor{keyword}{virtual} xbInt16 PutDoubleField( xbInt16 FieldNo, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dFieldValue );}
+\DoxyCodeLine{265 \textcolor{keyword}{virtual} xbInt16 PutDoubleField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&FieldName, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dFieldValue );}
+\DoxyCodeLine{266 }
+\DoxyCodeLine{267 \textcolor{keyword}{virtual} xbInt16 GetFloatField( xbInt16 iFieldNo, \mbox{\hyperlink{namespacexb_a83aa6a550398db55973aa9fb4257e66e}{xbFloat}} \&fFieldValue ) \textcolor{keyword}{const};}
+\DoxyCodeLine{268 \textcolor{keyword}{virtual} xbInt16 GetFloatField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, \mbox{\hyperlink{namespacexb_a83aa6a550398db55973aa9fb4257e66e}{xbFloat}} \&fFieldValue ) \textcolor{keyword}{const};}
+\DoxyCodeLine{269 \textcolor{keyword}{virtual} xbInt16 PutFloatField( xbInt16 iFieldNo, \mbox{\hyperlink{namespacexb_a83aa6a550398db55973aa9fb4257e66e}{xbFloat}} fFieldValue );}
+\DoxyCodeLine{270 \textcolor{keyword}{virtual} xbInt16 PutFloatField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, \mbox{\hyperlink{namespacexb_a83aa6a550398db55973aa9fb4257e66e}{xbFloat}} fFieldValue );}
+\DoxyCodeLine{271 }
+\DoxyCodeLine{272 \textcolor{keyword}{virtual} xbInt16 GetDateField( xbInt16 iFieldNo, \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dt ) \textcolor{keyword}{const};}
+\DoxyCodeLine{273 \textcolor{keyword}{virtual} xbInt16 GetDateField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dt ) \textcolor{keyword}{const};}
+\DoxyCodeLine{274 \textcolor{keyword}{virtual} xbInt16 PutDateField( xbInt16 iFieldNo, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dt );}
+\DoxyCodeLine{275 \textcolor{keyword}{virtual} xbInt16 PutDateField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dt );}
+\DoxyCodeLine{276 }
+\DoxyCodeLine{277 \textcolor{keyword}{virtual} xbInt16 GetNullSts( xbInt16 iFieldNo, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bIsNull ) \textcolor{keyword}{const};}
+\DoxyCodeLine{278 \textcolor{keyword}{virtual} xbInt16 GetNullSts( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bIsNull ) \textcolor{keyword}{const};}
+\DoxyCodeLine{279 \textcolor{keyword}{virtual} xbInt16 GetNullSts( xbInt16 iFieldNo, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bIsNull, xbInt16 iRecBufSw ) \textcolor{keyword}{const};}
+\DoxyCodeLine{280 }
+\DoxyCodeLine{281 }
+\DoxyCodeLine{282 }
+\DoxyCodeLine{283 \textcolor{preprocessor}{ \#ifdef XB\_MEMO\_SUPPORT}}
+\DoxyCodeLine{284 \textcolor{keyword}{virtual} xbInt16 GetMemoFieldCnt () \textcolor{keyword}{const};}
+\DoxyCodeLine{285 \textcolor{keyword}{virtual} xbMemo *GetMemoPtr ();}
+\DoxyCodeLine{286 \textcolor{keyword}{virtual} xbUInt32 GetCreateMemoBlockSize() \textcolor{keyword}{const};}
+\DoxyCodeLine{287 \textcolor{keyword}{virtual} xbInt16 GetMemoField ( xbInt16 iFldNo, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sMemoData );}
+\DoxyCodeLine{288 \textcolor{keyword}{virtual} xbInt16 GetMemoField ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \& sFldName, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sMemoData );}
+\DoxyCodeLine{289 \textcolor{keyword}{virtual} xbInt16 GetMemoFieldLen ( xbInt16 iFldNo, xbUInt32 \&ulMemoFieldLen );}
+\DoxyCodeLine{290 \textcolor{keyword}{virtual} xbInt16 GetMemoFieldLen ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \& sFldName, xbUInt32 \&ulMemoFieldLen );}
+\DoxyCodeLine{291 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} MemoFieldExists ( xbInt16 iFieldNo ) \textcolor{keyword}{const};}
+\DoxyCodeLine{292 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} MemoFieldExists ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName ) \textcolor{keyword}{const};}
+\DoxyCodeLine{293 \textcolor{keyword}{virtual} xbInt16 SetCreateMemoBlockSize( xbUInt32 ulBlockSize ) = 0;}
+\DoxyCodeLine{294 \textcolor{keyword}{virtual} xbInt16 UpdateMemoField ( xbInt16 iFldNo, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sMemoData );}
+\DoxyCodeLine{295 \textcolor{keyword}{virtual} xbInt16 UpdateMemoField ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \& sFldName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sMemoData );}
+\DoxyCodeLine{296 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_MEMO\_SUPPORT}}
+\DoxyCodeLine{297 }
+\DoxyCodeLine{298 }
+\DoxyCodeLine{299 \textcolor{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
+\DoxyCodeLine{300 \textcolor{keyword}{virtual} xbInt16 LockTable ( xbInt16 iLockFunction );}
+\DoxyCodeLine{301 \textcolor{keyword}{virtual} xbInt16 LockRecord ( xbInt16 iLockFunction, xbUInt32 ulRecNo );}
+\DoxyCodeLine{302 \textcolor{keyword}{virtual} xbInt16 LockAppend ( xbInt16 iLockFunction );}
+\DoxyCodeLine{303 \textcolor{keyword}{virtual} xbInt16 LockHeader ( xbInt16 iLockFunction );}
+\DoxyCodeLine{304 }
+\DoxyCodeLine{305 \textcolor{preprocessor}{ \#ifdef XB\_MEMO\_SUPPORT}}
+\DoxyCodeLine{306 \textcolor{keyword}{virtual} xbInt16 LockMemo ( xbInt16 iLockFunction );}
+\DoxyCodeLine{307 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetMemoLocked () \textcolor{keyword}{const}; }
+\DoxyCodeLine{308 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_MEMO\_LOCK}}
+\DoxyCodeLine{309 }
+\DoxyCodeLine{310 \textcolor{preprocessor}{ \#ifdef XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{311 \textcolor{keyword}{virtual} xbInt16 LockIndices ( xbInt16 iLockFunction );}
+\DoxyCodeLine{312 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{313 }
+\DoxyCodeLine{314 xbInt16 GetAutoLock () \textcolor{keyword}{const};}
+\DoxyCodeLine{315 \textcolor{keywordtype}{void} SetAutoLock ( xbInt16 iAutoLock );}
+\DoxyCodeLine{316 xbInt16 GetLockFlavor () \textcolor{keyword}{const};}
+\DoxyCodeLine{317 \textcolor{keywordtype}{void} SetLockFlavor ( xbInt16 iLockFlavor );}
+\DoxyCodeLine{318 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetTableLocked () \textcolor{keyword}{const};}
+\DoxyCodeLine{319 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetHeaderLocked () \textcolor{keyword}{const};}
+\DoxyCodeLine{320 xbUInt32 GetAppendLocked () \textcolor{keyword}{const};}
+\DoxyCodeLine{321 xbLinkListNode<xbUInt32> * GetFirstRecLock () \textcolor{keyword}{const};}
+\DoxyCodeLine{322 }
+\DoxyCodeLine{323 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
+\DoxyCodeLine{324 \textcolor{keywordtype}{void} DumpTableLockStatus() \textcolor{keyword}{const};}
+\DoxyCodeLine{325 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_DEBUG\_SUPPORT}}
+\DoxyCodeLine{326 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_LOCKING\_SUPPORT}}
+\DoxyCodeLine{327 }
+\DoxyCodeLine{328 }
+\DoxyCodeLine{329 \textcolor{preprocessor}{ \#ifdef XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{330 \textcolor{keyword}{virtual} xbInt16 CheckTagIntegrity( xbInt16 iTagOpt, xbInt16 iOutputOpt );}
+\DoxyCodeLine{331 \textcolor{keyword}{virtual} xbInt16 CloseIndexFile( xbIx *pIx );}
+\DoxyCodeLine{332 \textcolor{keyword}{virtual} xbInt16 CreateTag( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIxType, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sKey, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFilter, }
+\DoxyCodeLine{333 xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverLay, xbIx **xbIxOut, \textcolor{keywordtype}{void} **vpTagOut );}
+\DoxyCodeLine{334 \textcolor{keyword}{virtual} xbInt16 DeleteTag( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIxType, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sName );}
+\DoxyCodeLine{335 \textcolor{keyword}{virtual} xbInt16 DeleteAllIndexFiles();}
+\DoxyCodeLine{336 \textcolor{keyword}{virtual} xbInt16 Find( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sKey );}
+\DoxyCodeLine{337 \textcolor{keyword}{virtual} xbInt16 Find( \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dtKey );}
+\DoxyCodeLine{338 \textcolor{keyword}{virtual} xbInt16 Find( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dKey );}
+\DoxyCodeLine{339 \textcolor{keyword}{virtual} xbIx *GetCurIx() \textcolor{keyword}{const};}
+\DoxyCodeLine{340 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} *GetCurTag() \textcolor{keyword}{const};}
+\DoxyCodeLine{341 }
+\DoxyCodeLine{342 \textcolor{keyword}{virtual} xbInt16 GetFirstKey();}
+\DoxyCodeLine{343 \textcolor{keyword}{virtual} xbInt16 GetNextKey();}
+\DoxyCodeLine{344 \textcolor{keyword}{virtual} xbInt16 GetPrevKey();}
+\DoxyCodeLine{345 \textcolor{keyword}{virtual} xbInt16 GetLastKey();}
+\DoxyCodeLine{346 }
+\DoxyCodeLine{347 \textcolor{keyword}{virtual} \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&GetCurIxType() \textcolor{keyword}{const};}
+\DoxyCodeLine{348 \textcolor{keyword}{virtual} \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&GetCurTagName() \textcolor{keyword}{const};}
+\DoxyCodeLine{349 \textcolor{keyword}{virtual} xbIxList *GetIxList() \textcolor{keyword}{const};}
+\DoxyCodeLine{350 \textcolor{keyword}{virtual} xbInt32 GetPhysicalIxCnt () \textcolor{keyword}{const};}
+\DoxyCodeLine{351 xbLinkListNode<xbTag *> *GetTagList () \textcolor{keyword}{const};}
+\DoxyCodeLine{352 }
+\DoxyCodeLine{353 \textcolor{keyword}{virtual} xbInt16 OpenIndex( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIxType, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIndexName );}
+\DoxyCodeLine{354 \textcolor{keyword}{virtual} xbInt16 Reindex( xbInt16 iTagOpt = 0, xbInt16 iErrorOpt = 1, xbIx **pIx = NULL, \textcolor{keywordtype}{void} **vpTag = NULL );}
+\DoxyCodeLine{355 \textcolor{keyword}{virtual} xbInt16 SetCurTag( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTagName );}
+\DoxyCodeLine{356 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} SetCurTag( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIxType, xbIx *pIx, \textcolor{keywordtype}{void} *vpTag );}
+\DoxyCodeLine{357 }
+\DoxyCodeLine{358 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{359 }
+\DoxyCodeLine{360 \textcolor{preprocessor}{ \#ifdef XB\_INF\_SUPPORT}}
+\DoxyCodeLine{361 \textcolor{keyword}{virtual} xbInt16 AssociateIndex( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sType, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sName, xbInt16 iOption );}
+\DoxyCodeLine{362 xbLinkListNode<xbString> *GetInfList() \textcolor{keyword}{const};}
+\DoxyCodeLine{363 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INF\_SUPPORT}}
+\DoxyCodeLine{364 }
+\DoxyCodeLine{365 \textcolor{comment}{//\#ifdef XB\_MDX\_SUPPORT}}
+\DoxyCodeLine{366 \textcolor{comment}{//virtual xbInt16 GetCreateMdxBlockSize() const;}}
+\DoxyCodeLine{367 \textcolor{comment}{//virtual xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );}}
+\DoxyCodeLine{368 \textcolor{comment}{//\#endif}}
+\DoxyCodeLine{369 }
+\DoxyCodeLine{370 \textcolor{preprocessor}{ \#ifdef XB\_BLOCKREAD\_SUPPORT}}
+\DoxyCodeLine{371 xbInt16 DisableBlockReadProcessing();}
+\DoxyCodeLine{372 xbInt16 EnableBlockReadProcessing();}
+\DoxyCodeLine{373 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetBlockReadStatus() \textcolor{keyword}{const};}
+\DoxyCodeLine{374 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_BLOCKREAD\_SUPPORT}}
+\DoxyCodeLine{375 }
+\DoxyCodeLine{376 \textcolor{keyword}{protected}:}
+\DoxyCodeLine{377 \textcolor{preprocessor}{ \#ifdef XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{378 \textcolor{keyword}{friend} \textcolor{keyword}{class }xbIx;}
+\DoxyCodeLine{379 \textcolor{keyword}{friend} \textcolor{keyword}{class }xbIxMdx;}
+\DoxyCodeLine{380 \textcolor{keyword}{friend} \textcolor{keyword}{class }xbIxTdx;}
+\DoxyCodeLine{381 }
+\DoxyCodeLine{382 xbInt16 AddIndex( xbIx *ix, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFmt );}
+\DoxyCodeLine{383 \textcolor{keywordtype}{void} ClearTagList();}
+\DoxyCodeLine{384 xbInt16 RemoveIndex( xbIx * ix );}
+\DoxyCodeLine{385 \textcolor{keywordtype}{void} UpdateSchemaIxFlag( xbInt16 iFldNo, \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} cVal );}
+\DoxyCodeLine{386 }
+\DoxyCodeLine{387 }
+\DoxyCodeLine{388 \textcolor{keyword}{virtual} xbInt16 UpdateTagList ();}
+\DoxyCodeLine{389 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{390 }
+\DoxyCodeLine{391 \textcolor{keyword}{virtual} xbInt16 ReadHeader ( xbInt16 iFilePositionOption, xbInt16 iReadOption );}
+\DoxyCodeLine{392 }
+\DoxyCodeLine{393 }
+\DoxyCodeLine{394 \textcolor{preprocessor}{ \#ifdef XB\_INF\_SUPPORT}}
+\DoxyCodeLine{395 \textcolor{keyword}{virtual} xbInt16 GetInfFileName( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sNdxIdxFileName );}
+\DoxyCodeLine{396 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INF\_SUPPORT}}
+\DoxyCodeLine{397 }
+\DoxyCodeLine{398 \textcolor{preprocessor}{ \#ifdef XB\_BLOCKREAD\_SUPPORT}}
+\DoxyCodeLine{399 \textcolor{keyword}{friend} \textcolor{keyword}{class }xbBlockRead;}
+\DoxyCodeLine{400 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_BLOCKREAD\_SUPPORT}}
+\DoxyCodeLine{401 }
+\DoxyCodeLine{402 }
+\DoxyCodeLine{403 \textcolor{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
+\DoxyCodeLine{404 \textcolor{keywordtype}{void} SetHeaderLocked ( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bTableLocked );}
+\DoxyCodeLine{405 \textcolor{keywordtype}{void} SetTableLocked ( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bTableLocked );}
+\DoxyCodeLine{406 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_LOCKING\_SUPORT}}
+\DoxyCodeLine{407 }
+\DoxyCodeLine{408 \textcolor{preprocessor}{ \#ifdef XB\_MEMO\_SUPPORT}}
+\DoxyCodeLine{409 xbInt16 iMemoFieldCnt; \textcolor{comment}{// Memo field cnt in the table}}
+\DoxyCodeLine{410 xbMemo *Memo; \textcolor{comment}{// Pointer to memo class}}
+\DoxyCodeLine{411 xbUInt32 ulCreateMemoBlockSize; \textcolor{comment}{// blocksize to use when creating dbt file}}
+\DoxyCodeLine{412 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{413 }
+\DoxyCodeLine{414 \textcolor{preprocessor}{ \#ifdef XB\_INF\_SUPPORT}}
+\DoxyCodeLine{415 \textcolor{keyword}{virtual} xbInt16 DeleteInfData();}
+\DoxyCodeLine{416 \textcolor{keyword}{virtual} xbInt16 LoadInfData();}
+\DoxyCodeLine{417 \textcolor{keyword}{virtual} xbInt16 SaveInfData();}
+\DoxyCodeLine{418 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INF\_SUPPORT}}
+\DoxyCodeLine{419 }
+\DoxyCodeLine{420 \textcolor{comment}{/*}}
+\DoxyCodeLine{421 \textcolor{comment}{ \#ifdef XB\_MDX\_SUPPORT}}
+\DoxyCodeLine{422 \textcolor{comment}{ xbInt16 iCreateMdxBlockSize;}}
+\DoxyCodeLine{423 \textcolor{comment}{ \#endif // XB\_MDX\_SUPPORT}}
+\DoxyCodeLine{424 \textcolor{comment}{*/}}
+\DoxyCodeLine{425 }
+\DoxyCodeLine{426 \textcolor{keyword}{virtual} xbInt16 GetRawField( xbInt16 iFieldNo, \textcolor{keywordtype}{char} *Buf, xbUInt32 BufSize, xbInt16 iRecBufSw ) \textcolor{keyword}{const};}
+\DoxyCodeLine{427 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} InitVars(); }
+\DoxyCodeLine{428 \textcolor{keyword}{virtual} xbInt16 SetVersion() = 0;}
+\DoxyCodeLine{429 \textcolor{keyword}{virtual} xbInt16 ValidateSchema( \mbox{\hyperlink{structxb_1_1xbSchema}{xbSchema}} * s ) = 0;}
+\DoxyCodeLine{430 xbInt16 WriteHeader( xbInt16 iPositionOption, xbInt16 iWriteOption );}
+\DoxyCodeLine{431 }
+\DoxyCodeLine{432 }
+\DoxyCodeLine{433 xbUInt32 ulCurRec; \textcolor{comment}{// Current record or zero}}
+\DoxyCodeLine{434 xbInt16 iAutoCommit; \textcolor{comment}{// Auto commit updates if not explicitly performed before moving off record?}}
+\DoxyCodeLine{435 \textcolor{comment}{// -\/1 -\/-\/> Use DBMS default}}
+\DoxyCodeLine{436 \textcolor{comment}{// 0 -\/-\/> No auto update on this table, regardless of DBMS setting}}
+\DoxyCodeLine{437 \textcolor{comment}{// 1 -\/-\/> Auto update on this table, regardless of DBMS setting}}
+\DoxyCodeLine{438 }
+\DoxyCodeLine{439 xbInt16 iFileVersion; \textcolor{comment}{// xBase file version -\/ which class is in play}}
+\DoxyCodeLine{440 }
+\DoxyCodeLine{441 }
+\DoxyCodeLine{442 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sAlias; \textcolor{comment}{// table alias}}
+\DoxyCodeLine{443 xbInt16 iNoOfFields;}
+\DoxyCodeLine{444 xbInt16 iDbfStatus; \textcolor{comment}{// 0 = closed}}
+\DoxyCodeLine{445 \textcolor{comment}{// 1 = open}}
+\DoxyCodeLine{446 \textcolor{comment}{// 2 = updates pending}}
+\DoxyCodeLine{447 }
+\DoxyCodeLine{448 xbSchemaRec *SchemaPtr; \textcolor{comment}{// Pointer to field data}}
+\DoxyCodeLine{449 \textcolor{keywordtype}{char} *RecBuf; \textcolor{comment}{// Pointer to record buffer}}
+\DoxyCodeLine{450 \textcolor{keywordtype}{char} *RecBuf2; \textcolor{comment}{// Pointer to original rec buf allocation}}
+\DoxyCodeLine{451 }
+\DoxyCodeLine{452 }
+\DoxyCodeLine{453 \textcolor{comment}{/* Next several variables are database header fields, up through dbase V */}}
+\DoxyCodeLine{454 \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} cVersion;}
+\DoxyCodeLine{455 \textcolor{keywordtype}{char} cUpdateYY;}
+\DoxyCodeLine{456 \textcolor{keywordtype}{char} cUpdateMM;}
+\DoxyCodeLine{457 \textcolor{keywordtype}{char} cUpdateDD;}
+\DoxyCodeLine{458 xbUInt32 ulNoOfRecs;}
+\DoxyCodeLine{459 xbUInt16 uiHeaderLen;}
+\DoxyCodeLine{460 xbUInt16 uiRecordLen;}
+\DoxyCodeLine{461 \textcolor{keywordtype}{char} cTransactionFlag;}
+\DoxyCodeLine{462 \textcolor{keywordtype}{char} cEncryptionFlag;}
+\DoxyCodeLine{463 \textcolor{keywordtype}{char} cIndexFlag;}
+\DoxyCodeLine{464 \textcolor{keywordtype}{char} cLangDriver; \textcolor{comment}{// dbase 7 sets to 1B}}
+\DoxyCodeLine{465 }
+\DoxyCodeLine{466 }
+\DoxyCodeLine{467 }
+\DoxyCodeLine{468 \textcolor{keyword}{private}:}
+\DoxyCodeLine{469 \textcolor{keywordtype}{void} ResetNoOfRecords(); }
+\DoxyCodeLine{470 }
+\DoxyCodeLine{471 }
+\DoxyCodeLine{472 \textcolor{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
+\DoxyCodeLine{473 xbInt16 iAutoLock; \textcolor{comment}{// 0 -\/ autolock off, 1 -\/ autolock on}}
+\DoxyCodeLine{474 xbInt16 iLockFlavor;}
+\DoxyCodeLine{475 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bTableLocked; \textcolor{comment}{// is the table locked}}
+\DoxyCodeLine{476 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bHeaderLocked; \textcolor{comment}{// is the header locked}}
+\DoxyCodeLine{477 xbUInt32 ulAppendLocked; \textcolor{comment}{// record number of the new record for the append lock operation}}
+\DoxyCodeLine{478 xbLinkListOrd<xbUInt32> lloRecLocks; \textcolor{comment}{// ordered link list of locked records}}
+\DoxyCodeLine{479 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{480 }
+\DoxyCodeLine{481 \textcolor{preprocessor}{ \#ifdef XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{482 xbIxList *ixList; \textcolor{comment}{// pointer to a list of indices associated with the table}}
+\DoxyCodeLine{483 xbIx *pCurIx; \textcolor{comment}{// Pointer to current index class}}
+\DoxyCodeLine{484 \textcolor{keywordtype}{void} *vpCurIxTag; \textcolor{comment}{// Pointer to current tag}}
+\DoxyCodeLine{485 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sCurIxType; \textcolor{comment}{// Current index type}}
+\DoxyCodeLine{486 xbLinkList<xbTag *> llTags; \textcolor{comment}{// linked list of open tags}}
+\DoxyCodeLine{487 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{488 }
+\DoxyCodeLine{489 \textcolor{preprocessor}{ \#ifdef XB\_INF\_SUPPORT}}
+\DoxyCodeLine{490 xbLinkList<xbString> llInfData; \textcolor{comment}{// linked list of strings containing ndx file entries}}
+\DoxyCodeLine{491 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INF\_SUPPORT}}
+\DoxyCodeLine{492 }
+\DoxyCodeLine{493 \textcolor{preprocessor}{ \#ifdef XB\_BLOCKREAD\_SUPPORT}}
+\DoxyCodeLine{494 xbBlockRead *pRb;}
+\DoxyCodeLine{495 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bBlockReadEnabled; \textcolor{comment}{// if true, then block read mode is on}}
+\DoxyCodeLine{496 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{497 }
+\DoxyCodeLine{498 }
+\DoxyCodeLine{499 }
+\DoxyCodeLine{500 \};}
+\DoxyCodeLine{501 }
+\DoxyCodeLine{502 }
+\DoxyCodeLine{503 \textcolor{preprocessor}{\#ifdef XB\_DBF3\_SUPPORT}}
+\DoxyCodeLine{505 }
+\DoxyCodeLine{511 \textcolor{keyword}{class }XBDLLEXPORT xbDbf3 : \textcolor{keyword}{public} \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} \{}
+\DoxyCodeLine{512 \textcolor{keyword}{public}:}
+\DoxyCodeLine{513 xbDbf3(\mbox{\hyperlink{classxb_1_1xbXBase}{xbXBase}} *x);}
+\DoxyCodeLine{514 \string~xbDbf3();}
+\DoxyCodeLine{515 \textcolor{keyword}{virtual} xbInt16 CreateTable ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTableName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sAlias, \mbox{\hyperlink{structxb_1_1xbSchema}{xbSchema}} *, xbInt16 iOverlay, xbInt16 iShareMode );}
+\DoxyCodeLine{516 \textcolor{keyword}{virtual} xbInt16 GetVersion () \textcolor{keyword}{const};}
+\DoxyCodeLine{517 \textcolor{keyword}{virtual} xbInt16 Open ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTableName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sAlias, xbInt16 iOpenMode, xbInt16 iShareMode );}
+\DoxyCodeLine{518 \textcolor{keyword}{virtual} xbInt16 Rename ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sNewName );}
+\DoxyCodeLine{519 }
+\DoxyCodeLine{520 \textcolor{preprocessor}{ \#ifdef XB\_MEMO\_SUPPORT}}
+\DoxyCodeLine{521 \textcolor{keyword}{virtual} xbInt16 SetCreateMemoBlockSize( xbUInt32 iBlockSize );}
+\DoxyCodeLine{522 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{523 }
+\DoxyCodeLine{524 \textcolor{keyword}{protected}:}
+\DoxyCodeLine{525 xbInt16 SetVersion ();}
+\DoxyCodeLine{526 \textcolor{keyword}{virtual} xbInt16 ValidateSchema( \mbox{\hyperlink{structxb_1_1xbSchema}{xbSchema}} *s );}
+\DoxyCodeLine{527 }
+\DoxyCodeLine{528 \textcolor{keyword}{private}:}
+\DoxyCodeLine{529 }
+\DoxyCodeLine{530 \};}
+\DoxyCodeLine{531 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* XB\_DBF3\_SUPPORT */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{532 }
+\DoxyCodeLine{533 }
+\DoxyCodeLine{534 \textcolor{preprocessor}{\#ifdef XB\_DBF4\_SUPPORT}}
+\DoxyCodeLine{536 }
+\DoxyCodeLine{541 \textcolor{keyword}{class }XBDLLEXPORT xbDbf4 : \textcolor{keyword}{public} \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} \{}
+\DoxyCodeLine{542 \textcolor{keyword}{public}:}
+\DoxyCodeLine{543 xbDbf4( \mbox{\hyperlink{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}{xbXBase}} *x );}
+\DoxyCodeLine{544 }
+\DoxyCodeLine{545 \string~xbDbf4();}
+\DoxyCodeLine{546 }
+\DoxyCodeLine{547 \textcolor{keyword}{virtual} xbInt16 CreateTable ( \textcolor{keyword}{const} xbString \&sTableName, \textcolor{keyword}{const} xbString \&sAlias, xbSchema *, xbInt16 iOverlay, xbInt16 iShareMode );}
+\DoxyCodeLine{548 \textcolor{keyword}{virtual} xbInt16 GetVersion () \textcolor{keyword}{const};}
+\DoxyCodeLine{549 \textcolor{keyword}{virtual} xbInt16 Open ( \textcolor{keyword}{const} xbString \&sTableName, \textcolor{keyword}{const} xbString \&sAlias, xbInt16 iOpenMode, xbInt16 iShareMode );}
+\DoxyCodeLine{550 \textcolor{keyword}{virtual} xbInt16 Rename ( \textcolor{keyword}{const} xbString sNewName );}
+\DoxyCodeLine{551 }
+\DoxyCodeLine{552 \textcolor{preprocessor}{ \#ifdef XB\_MEMO\_SUPPORT}}
+\DoxyCodeLine{553 \textcolor{keyword}{virtual} xbInt16 SetCreateMemoBlockSize( xbUInt32 iBlockSize );}
+\DoxyCodeLine{554 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{555 }
+\DoxyCodeLine{556 \textcolor{keyword}{protected}:}
+\DoxyCodeLine{557 \textcolor{comment}{// void InitVars ();}}
+\DoxyCodeLine{558 xbInt16 SetVersion();}
+\DoxyCodeLine{559 \textcolor{keyword}{virtual} xbInt16 ValidateSchema ( xbSchema *s );}
+\DoxyCodeLine{560 }
+\DoxyCodeLine{561 \textcolor{keyword}{private}:}
+\DoxyCodeLine{562 }
+\DoxyCodeLine{563 \};}
+\DoxyCodeLine{564 }
+\DoxyCodeLine{565 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* XB\_DBF4\_SUPPORT */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{566 }
+\DoxyCodeLine{567 \} \textcolor{comment}{/* namespace xb */}}
+\DoxyCodeLine{568 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_DBF\_H\_\_ */}\textcolor{preprocessor}{}}
+
+\end{DoxyCode}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdelete_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdelete_8cpp.tex
new file mode 100644
index 0000000..739077c
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdelete_8cpp.tex
@@ -0,0 +1,3 @@
+\hypertarget{xbdelete_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/sql/xbdelete.cpp File Reference}
+\label{xbdelete_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbdelete.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbdelete.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdrpix_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdrpix_8cpp.tex
new file mode 100644
index 0000000..595716d
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdrpix_8cpp.tex
@@ -0,0 +1,3 @@
+\hypertarget{xbdrpix_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/sql/xbdrpix.cpp File Reference}
+\label{xbdrpix_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbdrpix.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbdrpix.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdrptbl_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdrptbl_8cpp.tex
new file mode 100644
index 0000000..dc9f5c3
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbdrptbl_8cpp.tex
@@ -0,0 +1,3 @@
+\hypertarget{xbdrptbl_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/sql/xbdrptbl.cpp File Reference}
+\label{xbdrptbl_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbdrptbl.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbdrptbl.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbexp_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbexp_8cpp.tex
new file mode 100644
index 0000000..fa163fe
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbexp_8cpp.tex
@@ -0,0 +1,3 @@
+\hypertarget{xbexp_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbexp.cpp File Reference}
+\label{xbexp_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbexp.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbexp.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbexp_8h.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbexp_8h.tex
new file mode 100644
index 0000000..bf47046
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbexp_8h.tex
@@ -0,0 +1,16 @@
+\hypertarget{xbexp_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbexp.h File Reference}
+\label{xbexp_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbexp.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbexp.h}}
+\doxysubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{xbexp_8h_a6e9d2ccba2b3ac6e44ab411ffda488c2}{XB\+\_\+\+NULL\+\_\+\+DATE}}~21474835648
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{xbexp_8h_a6e9d2ccba2b3ac6e44ab411ffda488c2}\label{xbexp_8h_a6e9d2ccba2b3ac6e44ab411ffda488c2}}
+\index{xbexp.h@{xbexp.h}!XB\_NULL\_DATE@{XB\_NULL\_DATE}}
+\index{XB\_NULL\_DATE@{XB\_NULL\_DATE}!xbexp.h@{xbexp.h}}
+\doxysubsubsection{\texorpdfstring{XB\_NULL\_DATE}{XB\_NULL\_DATE}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+NULL\+\_\+\+DATE~21474835648}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbexp_8h_source.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbexp_8h_source.tex
new file mode 100644
index 0000000..af4609a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbexp_8h_source.tex
@@ -0,0 +1,165 @@
+\hypertarget{xbexp_8h_source}{}\doxysection{xbexp.\+h}
+\label{xbexp_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbexp.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbexp.h}}
+\mbox{\hyperlink{xbexp_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{comment}{/* xbexp.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\_EXP\_H\_\_}}
+\DoxyCodeLine{18 \textcolor{preprocessor}{\#define \_\_XB\_EXP\_H\_\_}}
+\DoxyCodeLine{19 }
+\DoxyCodeLine{20 }
+\DoxyCodeLine{21 \textcolor{comment}{// \#ifdef CMAKE\_COMPILER\_IS\_GNUCC}}
+\DoxyCodeLine{22 \textcolor{comment}{// \#pragma interface}}
+\DoxyCodeLine{23 \textcolor{comment}{// \#endif}}
+\DoxyCodeLine{24 }
+\DoxyCodeLine{25 \textcolor{preprocessor}{\#define XB\_NULL\_DATE 21474835648}}
+\DoxyCodeLine{26 }
+\DoxyCodeLine{27 }
+\DoxyCodeLine{28 \textcolor{preprocessor}{\#ifdef XB\_FUNCTION\_SUPPORT}}
+\DoxyCodeLine{29 \textcolor{preprocessor}{\#define XB\_EXP\_CHAR 'C'}}
+\DoxyCodeLine{30 \textcolor{preprocessor}{\#define XB\_EXP\_DATE 'D'}}
+\DoxyCodeLine{31 \textcolor{preprocessor}{\#define XB\_EXP\_LOGICAL 'L'}}
+\DoxyCodeLine{32 \textcolor{preprocessor}{\#define XB\_EXP\_NUMERIC 'N'}}
+\DoxyCodeLine{33 \textcolor{preprocessor}{\#define XB\_EXP\_UNKNOWN 'U'}}
+\DoxyCodeLine{34 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{35 }
+\DoxyCodeLine{36 \textcolor{preprocessor}{\#ifdef XB\_EXPRESSION\_SUPPORT}}
+\DoxyCodeLine{37 }
+\DoxyCodeLine{38 \textcolor{preprocessor}{\#define XB\_EXP\_CONSTANT 'C'}}
+\DoxyCodeLine{39 \textcolor{preprocessor}{\#define XB\_EXP\_FUNCTION 'F'}}
+\DoxyCodeLine{40 \textcolor{preprocessor}{\#define XB\_EXP\_FIELD 'D'}}
+\DoxyCodeLine{41 \textcolor{preprocessor}{\#define XB\_EXP\_OPERATOR 'O'}}
+\DoxyCodeLine{42 \textcolor{preprocessor}{\#define XB\_EXP\_NOTROOT 'N' }\textcolor{comment}{// not root node, needs further parsing}}
+\DoxyCodeLine{43 \textcolor{preprocessor}{\#define XB\_EXP\_PRE\_OPERATOR 'B' }\textcolor{comment}{// (B)efore) pre increment, pre decrement}}
+\DoxyCodeLine{44 \textcolor{preprocessor}{\#define XB\_EXP\_POST\_OPERATOR 'A' }\textcolor{comment}{// (A)fter) post increment, pre decrement}}
+\DoxyCodeLine{45 }
+\DoxyCodeLine{46 \textcolor{preprocessor}{\#define XB\_END\_OF\_EXPRESSION -\/100}}
+\DoxyCodeLine{47 }
+\DoxyCodeLine{48 \textcolor{comment}{// \#define XB\_UNBALANCED\_PARENS -\/101}}
+\DoxyCodeLine{49 \textcolor{comment}{// \#define XB\_UNBALANCED\_QUOTES -\/102}}
+\DoxyCodeLine{50 }
+\DoxyCodeLine{51 }
+\DoxyCodeLine{52 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
+\DoxyCodeLine{53 }
+\DoxyCodeLine{55 \textcolor{keyword}{struct }XBDLLEXPORT xbExpToken \{}
+\DoxyCodeLine{56 xbString sExpression; \textcolor{comment}{// in -\/ expression to pull next token from}}
+\DoxyCodeLine{57 \textcolor{comment}{// out -\/ remainder of the expression after token removed}}
+\DoxyCodeLine{58 xbString sToken; \textcolor{comment}{// next token pulled from the expression}}
+\DoxyCodeLine{59 \textcolor{keywordtype}{char} cNodeType; \textcolor{comment}{// one of XB\_EXP\_CONSTANT, XB\_EXP\_FUNCTION, XB\_EXP\_FIELD, XB\_EXP\_OPERATOR, XB\_EXP\_NOTROOT}}
+\DoxyCodeLine{60 \textcolor{keywordtype}{char} cReturnType; \textcolor{comment}{// one of XB\_EXP\_CHAR, XB\_EXP\_DATE, XB\_EXP\_LOGICAL, XB\_EXP\_NUMERIC, XB\_EXP\_UNKNOWN}}
+\DoxyCodeLine{61 xbInt16 iSts; \textcolor{comment}{// return status after retrieving or attempting next token from expression}}
+\DoxyCodeLine{62 \textcolor{comment}{// 0 = no error}}
+\DoxyCodeLine{63 \textcolor{comment}{// XB\_END\_OF\_EXPRESSION}}
+\DoxyCodeLine{64 \textcolor{comment}{// XB\_UNBALANCED\_PARENS}}
+\DoxyCodeLine{65 \textcolor{comment}{// XB\_UNBALANCED\_QUOTES}}
+\DoxyCodeLine{66 \textcolor{keywordtype}{char} cPrevNodeType; \textcolor{comment}{// previous node type}}
+\DoxyCodeLine{67 \textcolor{keywordtype}{char} cPrevReturnType; \textcolor{comment}{// previous return type}}
+\DoxyCodeLine{68 }
+\DoxyCodeLine{69 \textcolor{comment}{// constructor}}
+\DoxyCodeLine{70 xbExpToken() \{ cNodeType = 0; cReturnType = 0; iSts = 0; cPrevNodeType = 0; cPrevReturnType = 0; \}}
+\DoxyCodeLine{71 \};}
+\DoxyCodeLine{73 }
+\DoxyCodeLine{74 }
+\DoxyCodeLine{75 \textcolor{comment}{/************************************************************************/}}
+\DoxyCodeLine{76 }
+\DoxyCodeLine{78 }
+\DoxyCodeLine{133 \textcolor{keyword}{class }XBDLLEXPORT xbExp\{}
+\DoxyCodeLine{134 }
+\DoxyCodeLine{135 \textcolor{keyword}{public}:}
+\DoxyCodeLine{136 xbExp( \mbox{\hyperlink{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}{xbXBase}} * );}
+\DoxyCodeLine{137 xbExp( \mbox{\hyperlink{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}{xbXBase}} *, \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} * );}
+\DoxyCodeLine{138 \textcolor{keyword}{virtual} \string~xbExp();}
+\DoxyCodeLine{139 \textcolor{keywordtype}{void} ClearTreeHandle();}
+\DoxyCodeLine{140 }
+\DoxyCodeLine{141 }
+\DoxyCodeLine{142 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
+\DoxyCodeLine{143 \textcolor{keywordtype}{void} DumpTree( xbInt16 iOption );}
+\DoxyCodeLine{144 \textcolor{keywordtype}{void} DumpToken( xbExpToken \&t, xbInt16 iOption = 0 );}
+\DoxyCodeLine{145 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{146 }
+\DoxyCodeLine{147 xbInt16 GetResultLen() \textcolor{keyword}{const};}
+\DoxyCodeLine{148 \textcolor{keywordtype}{char} GetReturnType() \textcolor{keyword}{const};}
+\DoxyCodeLine{149 xbInt16 GetBoolResult( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bResult );}
+\DoxyCodeLine{150 xbInt16 GetDateResult( xbDate \&dtResult );}
+\DoxyCodeLine{151 xbInt16 GetNumericResult( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dResult );}
+\DoxyCodeLine{152 xbInt16 GetStringResult( xbString \&sResult );}
+\DoxyCodeLine{153 xbInt16 GetStringResult( \textcolor{keywordtype}{char} * vpResult, xbUInt32 ulLen );}
+\DoxyCodeLine{154 xbExpNode *GetTreeHandle();}
+\DoxyCodeLine{155 xbInt16 ParseExpression( \textcolor{keyword}{const} xbString \&sExpression );}
+\DoxyCodeLine{156 xbInt16 ParseExpression( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf, \textcolor{keyword}{const} xbString \&sExpression );}
+\DoxyCodeLine{157 xbInt16 ProcessExpression();}
+\DoxyCodeLine{158 xbInt16 ProcessExpression( xbInt16 iRecBufSw );}
+\DoxyCodeLine{159 }
+\DoxyCodeLine{160 }
+\DoxyCodeLine{161 \textcolor{keyword}{protected}:}
+\DoxyCodeLine{162 xbInt16 GetNextToken( xbExpToken \&t );}
+\DoxyCodeLine{163 xbInt16 OperatorWeight( \textcolor{keyword}{const} xbString \&sOperator );}
+\DoxyCodeLine{164 xbExpNode *GetNextNode( xbExpNode * n ) \textcolor{keyword}{const}; \textcolor{comment}{// traverses the tree from bottom left node, right, then up}}
+\DoxyCodeLine{165 }
+\DoxyCodeLine{166 \textcolor{keyword}{private}: \textcolor{comment}{// methods}}
+\DoxyCodeLine{167 }
+\DoxyCodeLine{168 \textcolor{comment}{// xbInt16 CalcExpressionResultLen();}}
+\DoxyCodeLine{169 xbInt16 CalcFunctionResultLen( xbExpNode *n ) \textcolor{keyword}{const};}
+\DoxyCodeLine{170 xbInt16 CalcCharNodeLen( xbExpNode *n );}
+\DoxyCodeLine{171 xbInt16 CheckParensAndQuotes( \textcolor{keyword}{const} xbString \&sExpression );}
+\DoxyCodeLine{172 xbInt16 GetExpressionResultLen() \textcolor{keyword}{const};}
+\DoxyCodeLine{173 }
+\DoxyCodeLine{174 xbInt16 GetTokenCharConstant ( xbExpToken \&t );}
+\DoxyCodeLine{175 xbInt16 GetTokenDatabaseField ( xbExpToken \&t );}
+\DoxyCodeLine{176 xbInt16 GetTokenDateConstant ( xbExpToken \&t );}
+\DoxyCodeLine{177 xbInt16 GetTokenFunction ( xbExpToken \&t );}
+\DoxyCodeLine{178 xbInt16 GetTokenLogicalConstant( xbExpToken \&t );}
+\DoxyCodeLine{179 xbInt16 GetTokenNumericConstant( xbExpToken \&t );}
+\DoxyCodeLine{180 xbInt16 GetTokenOperator ( xbExpToken \&t );}
+\DoxyCodeLine{181 xbInt16 GetTokenParen ( xbExpToken \&t );}
+\DoxyCodeLine{182 }
+\DoxyCodeLine{183 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsFunction ( \textcolor{keyword}{const} xbString \&sExp, \textcolor{keywordtype}{char} \&cReturnType );}
+\DoxyCodeLine{184 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsLogicalConstant ( \textcolor{keyword}{const} xbString \&sExp );}
+\DoxyCodeLine{185 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsNumericConstant ( \textcolor{keyword}{const} xbString \&sExp, \textcolor{keywordtype}{char} cPrevNodeType );}
+\DoxyCodeLine{186 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsOperator ( \textcolor{keyword}{const} xbString \&sExp );}
+\DoxyCodeLine{187 \textcolor{keywordtype}{char} IsTokenSeparator ( \textcolor{keywordtype}{char} c );}
+\DoxyCodeLine{188 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsWhiteSpace ( \textcolor{keywordtype}{char} c );}
+\DoxyCodeLine{189 }
+\DoxyCodeLine{190 xbInt16 ParseExpression ( \textcolor{keyword}{const} xbString \&sExpression, xbInt16 iWeight );}
+\DoxyCodeLine{191 xbInt16 ParseExpressionConstant( xbExpToken \&t, xbExpNode *n );}
+\DoxyCodeLine{192 xbInt16 ParseExpressionFunction( xbExpToken \&t, xbExpNode *n, xbInt16 iWeight );}
+\DoxyCodeLine{193 xbInt16 ParseExpressionFunctionParms( \textcolor{keyword}{const} xbString \&sParms, xbLinkList<xbString> \&llParms );}
+\DoxyCodeLine{194 xbInt16 ParseExpressionField ( xbExpToken \&t, xbExpNode *n );}
+\DoxyCodeLine{195 xbInt16 ParseExpressionOperator( xbExpToken \&t, xbExpNode *n, xbInt16 iWeight );}
+\DoxyCodeLine{196 }
+\DoxyCodeLine{197 xbInt16 ProcessExpressionFunction( xbExpNode *n, xbInt16 iRecBufSw = 0 );}
+\DoxyCodeLine{198 xbInt16 ProcessExpressionOperator( xbExpNode *n );}
+\DoxyCodeLine{199 }
+\DoxyCodeLine{200 \textcolor{keyword}{private}: \textcolor{comment}{// fields}}
+\DoxyCodeLine{201 \mbox{\hyperlink{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}{xbXBase}} *xbase;}
+\DoxyCodeLine{202 \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf;}
+\DoxyCodeLine{203 xbExpNode *nTree; \textcolor{comment}{// pointer to tree of expNodes}}
+\DoxyCodeLine{204 \textcolor{comment}{// xbInt16 iExpLen; // size of expression result}}
+\DoxyCodeLine{205 }
+\DoxyCodeLine{206 }
+\DoxyCodeLine{207 \};}
+\DoxyCodeLine{208 }
+\DoxyCodeLine{209 \textcolor{comment}{/* Expression handler */}}
+\DoxyCodeLine{210 }
+\DoxyCodeLine{211 }
+\DoxyCodeLine{212 \};}
+\DoxyCodeLine{213 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_EXPRESSION\_SUPPORT}}
+\DoxyCodeLine{214 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// \_\_XB\_EXP\_H\_\_}}
+\DoxyCodeLine{215 }
+\DoxyCodeLine{216 }
+
+\end{DoxyCode}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbexpnode_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbexpnode_8cpp.tex
new file mode 100644
index 0000000..dc7203f
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbexpnode_8cpp.tex
@@ -0,0 +1,3 @@
+\hypertarget{xbexpnode_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbexpnode.cpp File Reference}
+\label{xbexpnode_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbexpnode.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbexpnode.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbexpnode_8h.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbexpnode_8h.tex
new file mode 100644
index 0000000..c544ba1
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbexpnode_8h.tex
@@ -0,0 +1,2 @@
+\hypertarget{xbexpnode_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbexpnode.h File Reference}
+\label{xbexpnode_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbexpnode.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbexpnode.h}}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbexpnode_8h_source.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbexpnode_8h_source.tex
new file mode 100644
index 0000000..bc3271b
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbexpnode_8h_source.tex
@@ -0,0 +1,113 @@
+\hypertarget{xbexpnode_8h_source}{}\doxysection{xbexpnode.\+h}
+\label{xbexpnode_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbexpnode.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbexpnode.h}}
+\mbox{\hyperlink{xbexpnode_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{comment}{/* xbexpnode.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\_EXPNODE\_H\_\_}}
+\DoxyCodeLine{18 \textcolor{preprocessor}{\#define \_\_XB\_EXPNODE\_H\_\_}}
+\DoxyCodeLine{19 }
+\DoxyCodeLine{20 \textcolor{comment}{// \#ifdef CMAKE\_COMPILER\_IS\_GNUCC}}
+\DoxyCodeLine{21 \textcolor{comment}{// \#pragma interface}}
+\DoxyCodeLine{22 \textcolor{comment}{// \#endif}}
+\DoxyCodeLine{23 }
+\DoxyCodeLine{24 \textcolor{preprocessor}{\#ifdef XB\_EXPRESSION\_SUPPORT}}
+\DoxyCodeLine{25 }
+\DoxyCodeLine{26 }
+\DoxyCodeLine{27 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
+\DoxyCodeLine{28 }
+\DoxyCodeLine{29 \textcolor{comment}{//class XBDLLEXPORT xbDbf;}}
+\DoxyCodeLine{30 }
+\DoxyCodeLine{31 \textcolor{comment}{/************************************************************************/}}
+\DoxyCodeLine{33 }
+\DoxyCodeLine{46 \textcolor{keyword}{class }XBDLLEXPORT xbExpNode \{}
+\DoxyCodeLine{47 \textcolor{keyword}{public}:}
+\DoxyCodeLine{48 xbExpNode();}
+\DoxyCodeLine{49 xbExpNode( xbString \&sNodeText, \textcolor{keywordtype}{char} cReturnType, \textcolor{keywordtype}{char} cNodeType );}
+\DoxyCodeLine{50 xbExpNode( xbString \&sNodeText, \textcolor{keywordtype}{char} cNodeType );}
+\DoxyCodeLine{51 xbExpNode( \textcolor{keywordtype}{char} cNodeType );}
+\DoxyCodeLine{52 }
+\DoxyCodeLine{53 \textcolor{keyword}{virtual} \string~xbExpNode();}
+\DoxyCodeLine{54 xbInt16 AddChild( xbExpNode *n );}
+\DoxyCodeLine{55 xbExpNode *GetChild( xbUInt32 ulChildNo ) \textcolor{keyword}{const};}
+\DoxyCodeLine{56 xbUInt32 GetChildCnt() \textcolor{keyword}{const};}
+\DoxyCodeLine{57 xbUInt32 GetChildNo() \textcolor{keyword}{const};}
+\DoxyCodeLine{58 \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *GetDbf() \textcolor{keyword}{const};}
+\DoxyCodeLine{59 xbInt16 GetFieldNo() \textcolor{keyword}{const};}
+\DoxyCodeLine{60 xbExpNode *GetFirstNode();}
+\DoxyCodeLine{61 xbExpNode *GetNextNode() \textcolor{keyword}{const};}
+\DoxyCodeLine{62 \textcolor{keywordtype}{void} GetNodeText( xbString \&sNodeText ) \textcolor{keyword}{const};}
+\DoxyCodeLine{63 \textcolor{keywordtype}{char} GetNodeType() \textcolor{keyword}{const};}
+\DoxyCodeLine{64 xbExpNode *GetParent() \textcolor{keyword}{const};}
+\DoxyCodeLine{65 xbString \&GetStringResult();}
+\DoxyCodeLine{66 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetBoolResult() \textcolor{keyword}{const};}
+\DoxyCodeLine{67 \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} GetNumericResult() \textcolor{keyword}{const};}
+\DoxyCodeLine{68 xbUInt32 GetResultLen() \textcolor{keyword}{const};}
+\DoxyCodeLine{69 xbExpNode *GetRightSibling() \textcolor{keyword}{const};}
+\DoxyCodeLine{70 \textcolor{keywordtype}{char} GetReturnType() \textcolor{keyword}{const};}
+\DoxyCodeLine{71 xbInt16 GetWeight() \textcolor{keyword}{const};}
+\DoxyCodeLine{72 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} HasRightSibling() \textcolor{keyword}{const};}
+\DoxyCodeLine{73 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsOperator() \textcolor{keyword}{const};}
+\DoxyCodeLine{74 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsUnaryOperator() \textcolor{keyword}{const};}
+\DoxyCodeLine{75 \textcolor{keywordtype}{void} RemoveLastChild();}
+\DoxyCodeLine{76 \textcolor{keywordtype}{void} SetResultLen( xbUInt32 ulResultLen );}
+\DoxyCodeLine{77 \textcolor{keywordtype}{void} SetDbfInfo( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf );}
+\DoxyCodeLine{78 \textcolor{keywordtype}{void} SetDbfInfo( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf, xbInt16 iFieldNo );}
+\DoxyCodeLine{79 \textcolor{keywordtype}{void} SetNodeText( xbString \&sNodeText );}
+\DoxyCodeLine{80 \textcolor{keywordtype}{void} SetNodeType( \textcolor{keywordtype}{char} cNodeType );}
+\DoxyCodeLine{81 \textcolor{keywordtype}{void} SetParent( xbExpNode *n );}
+\DoxyCodeLine{82 \textcolor{keywordtype}{void} SetResult( xbString \&sResult );}
+\DoxyCodeLine{83 \textcolor{keywordtype}{void} SetResult( xbDate \&dtResult );}
+\DoxyCodeLine{84 \textcolor{keywordtype}{void} SetResult( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bResult );}
+\DoxyCodeLine{85 \textcolor{keywordtype}{void} SetResult( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dResult );}
+\DoxyCodeLine{86 \textcolor{keywordtype}{void} SetReturnType( \textcolor{keywordtype}{char} cReturnType );}
+\DoxyCodeLine{87 \textcolor{keywordtype}{void} SetWeight( xbInt16 iWeight );}
+\DoxyCodeLine{88 }
+\DoxyCodeLine{89 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
+\DoxyCodeLine{90 \textcolor{keywordtype}{void} DumpNode( xbInt16 iOption ) \textcolor{keyword}{const}; \textcolor{comment}{// 0 = no children, 1 = and children}}
+\DoxyCodeLine{91 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{92 }
+\DoxyCodeLine{93 \textcolor{keyword}{private}:}
+\DoxyCodeLine{94 xbString sNodeText; \textcolor{comment}{// expression text}}
+\DoxyCodeLine{95 \textcolor{keywordtype}{char} cReturnType; \textcolor{comment}{// one of: XB\_EXP\_CHAR, XB\_EXP\_DATE, XB\_EXP\_LOGICAL, XB\_EXP\_NUMERIC}}
+\DoxyCodeLine{96 \textcolor{keywordtype}{char} cNodeType; \textcolor{comment}{// one of: XB\_EXP\_CONSTANT, XB\_EXP\_FUNCTION, XB\_EXP\_FIELD, XB\_EXP\_OPERATOR}}
+\DoxyCodeLine{97 xbString sResult; \textcolor{comment}{// char result, and operator}}
+\DoxyCodeLine{98 \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dResult; \textcolor{comment}{// numeric and bool results}}
+\DoxyCodeLine{99 xbExpNode * nParent; \textcolor{comment}{// pointer to parent}}
+\DoxyCodeLine{100 xbLinkList<xbExpNode *> llChildren; \textcolor{comment}{// linked list of descendent nodes}}
+\DoxyCodeLine{101 \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf; \textcolor{comment}{// pointer to dbf, used for field, RECNO() and RECCOUNT()}}
+\DoxyCodeLine{102 xbInt16 iFieldNo; \textcolor{comment}{// field no if DBF field}}
+\DoxyCodeLine{103 xbUInt32 ulResultLen; \textcolor{comment}{// for string results, accumulated length of character operations}}
+\DoxyCodeLine{104 \textcolor{comment}{// includes the sum of all nodes under this + this}}
+\DoxyCodeLine{105 \textcolor{comment}{// date = 8, numeric = 4, logical = 1}}
+\DoxyCodeLine{106 xbInt16 iWeight; \textcolor{comment}{// used for building the tree of nodes, assigned to operators}}
+\DoxyCodeLine{107 \textcolor{comment}{// the higher the number, the lower it goes on the tree}}
+\DoxyCodeLine{108 }
+\DoxyCodeLine{109 \};}
+\DoxyCodeLine{110 }
+\DoxyCodeLine{111 \textcolor{comment}{/************************************************************************/}}
+\DoxyCodeLine{112 }
+\DoxyCodeLine{113 \textcolor{comment}{/* Expression handler */}}
+\DoxyCodeLine{114 }
+\DoxyCodeLine{115 }
+\DoxyCodeLine{116 \};}
+\DoxyCodeLine{117 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_EXPRESSION\_SUPPORT}}
+\DoxyCodeLine{118 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// \_\_XB\_EXP\_H\_\_}}
+\DoxyCodeLine{119 }
+\DoxyCodeLine{120 }
+
+\end{DoxyCode}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbfields_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbfields_8cpp.tex
new file mode 100644
index 0000000..71ab977
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbfields_8cpp.tex
@@ -0,0 +1,8 @@
+\hypertarget{xbfields_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbfields.cpp File Reference}
+\label{xbfields_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbfields.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbfields.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+\doxysubsection*{Namespaces}
+\begin{DoxyCompactItemize}
+\item
+namespace \mbox{\hyperlink{namespacexb}{xb}}
+\end{DoxyCompactItemize}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbfile_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbfile_8cpp.tex
new file mode 100644
index 0000000..0547c81
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbfile_8cpp.tex
@@ -0,0 +1,8 @@
+\hypertarget{xbfile_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbfile.cpp File Reference}
+\label{xbfile_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbfile.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbfile.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+\doxysubsection*{Namespaces}
+\begin{DoxyCompactItemize}
+\item
+namespace \mbox{\hyperlink{namespacexb}{xb}}
+\end{DoxyCompactItemize}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbfile_8h.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbfile_8h.tex
new file mode 100644
index 0000000..7d7b3b4
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbfile_8h.tex
@@ -0,0 +1,58 @@
+\hypertarget{xbfile_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbfile.h File Reference}
+\label{xbfile_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbfile.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbfile.h}}
+\doxysubsection*{Data Structures}
+\begin{DoxyCompactItemize}
+\item
+class \mbox{\hyperlink{classxb_1_1xbFile}{xb\+::xb\+File}}
+\begin{DoxyCompactList}\small\item\em Class for handling low level file I/O. \end{DoxyCompactList}\end{DoxyCompactItemize}
+\doxysubsection*{Namespaces}
+\begin{DoxyCompactItemize}
+\item
+namespace \mbox{\hyperlink{namespacexb}{xb}}
+\end{DoxyCompactItemize}
+\doxysubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{xbfile_8h_ae58c73e0ba237fcf67ee20feea6c2743}{XB\+\_\+\+READ}}~0
+\item
+\#define \mbox{\hyperlink{xbfile_8h_af991a288c327f6857e90156ea734a633}{XB\+\_\+\+READ\+\_\+\+WRITE}}~1
+\item
+\#define \mbox{\hyperlink{xbfile_8h_abbf99e259c2f31572c886da6d85b1359}{XB\+\_\+\+WRITE}}~2
+\item
+\#define \mbox{\hyperlink{xbfile_8h_a9ec4d60a008c667d9861e3b3814f0232}{XB\+\_\+\+SINGLE\+\_\+\+USER}}~0
+\item
+\#define \mbox{\hyperlink{xbfile_8h_a05c0fc99ba71cf953d046d12f3f874bc}{XB\+\_\+\+MULTI\+\_\+\+USER}}~1
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{xbfile_8h_a05c0fc99ba71cf953d046d12f3f874bc}\label{xbfile_8h_a05c0fc99ba71cf953d046d12f3f874bc}}
+\index{xbfile.h@{xbfile.h}!XB\_MULTI\_USER@{XB\_MULTI\_USER}}
+\index{XB\_MULTI\_USER@{XB\_MULTI\_USER}!xbfile.h@{xbfile.h}}
+\doxysubsubsection{\texorpdfstring{XB\_MULTI\_USER}{XB\_MULTI\_USER}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+MULTI\+\_\+\+USER~1}
+
+\mbox{\Hypertarget{xbfile_8h_ae58c73e0ba237fcf67ee20feea6c2743}\label{xbfile_8h_ae58c73e0ba237fcf67ee20feea6c2743}}
+\index{xbfile.h@{xbfile.h}!XB\_READ@{XB\_READ}}
+\index{XB\_READ@{XB\_READ}!xbfile.h@{xbfile.h}}
+\doxysubsubsection{\texorpdfstring{XB\_READ}{XB\_READ}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+READ~0}
+
+\mbox{\Hypertarget{xbfile_8h_af991a288c327f6857e90156ea734a633}\label{xbfile_8h_af991a288c327f6857e90156ea734a633}}
+\index{xbfile.h@{xbfile.h}!XB\_READ\_WRITE@{XB\_READ\_WRITE}}
+\index{XB\_READ\_WRITE@{XB\_READ\_WRITE}!xbfile.h@{xbfile.h}}
+\doxysubsubsection{\texorpdfstring{XB\_READ\_WRITE}{XB\_READ\_WRITE}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+READ\+\_\+\+WRITE~1}
+
+\mbox{\Hypertarget{xbfile_8h_a9ec4d60a008c667d9861e3b3814f0232}\label{xbfile_8h_a9ec4d60a008c667d9861e3b3814f0232}}
+\index{xbfile.h@{xbfile.h}!XB\_SINGLE\_USER@{XB\_SINGLE\_USER}}
+\index{XB\_SINGLE\_USER@{XB\_SINGLE\_USER}!xbfile.h@{xbfile.h}}
+\doxysubsubsection{\texorpdfstring{XB\_SINGLE\_USER}{XB\_SINGLE\_USER}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+SINGLE\+\_\+\+USER~0}
+
+\mbox{\Hypertarget{xbfile_8h_abbf99e259c2f31572c886da6d85b1359}\label{xbfile_8h_abbf99e259c2f31572c886da6d85b1359}}
+\index{xbfile.h@{xbfile.h}!XB\_WRITE@{XB\_WRITE}}
+\index{XB\_WRITE@{XB\_WRITE}!xbfile.h@{xbfile.h}}
+\doxysubsubsection{\texorpdfstring{XB\_WRITE}{XB\_WRITE}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+WRITE~2}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbfile_8h_source.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbfile_8h_source.tex
new file mode 100644
index 0000000..9254dd4
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbfile_8h_source.tex
@@ -0,0 +1,184 @@
+\hypertarget{xbfile_8h_source}{}\doxysection{xbfile.\+h}
+\label{xbfile_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbfile.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbfile.h}}
+\mbox{\hyperlink{xbfile_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{comment}{/* xbfile.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 \textcolor{preprocessor}{\#ifndef \_\_XB\_FILE\_H\_\_}}
+\DoxyCodeLine{17 \textcolor{preprocessor}{\#define \_\_XB\_FILE\_H\_\_}}
+\DoxyCodeLine{18 }
+\DoxyCodeLine{19 \textcolor{preprocessor}{\#ifdef CMAKE\_COMPILER\_IS\_GNUCC}}
+\DoxyCodeLine{20 \textcolor{preprocessor}{\#pragma interface}}
+\DoxyCodeLine{21 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{22 }
+\DoxyCodeLine{23 \textcolor{comment}{/*****************************/}}
+\DoxyCodeLine{24 \textcolor{comment}{/* File Open Modes */}}
+\DoxyCodeLine{25 \textcolor{preprocessor}{\#define XB\_READ 0}}
+\DoxyCodeLine{26 \textcolor{preprocessor}{\#define XB\_READ\_WRITE 1}}
+\DoxyCodeLine{27 \textcolor{preprocessor}{\#define XB\_WRITE 2}}
+\DoxyCodeLine{28 }
+\DoxyCodeLine{29 \textcolor{comment}{/*****************************/}}
+\DoxyCodeLine{30 \textcolor{comment}{/* File Access Modes */}}
+\DoxyCodeLine{31 \textcolor{preprocessor}{\#define XB\_SINGLE\_USER 0 }\textcolor{comment}{// file buffering on}}
+\DoxyCodeLine{32 \textcolor{preprocessor}{\#define XB\_MULTI\_USER 1 }\textcolor{comment}{// file buffering off}}
+\DoxyCodeLine{33 }
+\DoxyCodeLine{34 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
+\DoxyCodeLine{35 }
+\DoxyCodeLine{56 \textcolor{keyword}{class }XBDLLEXPORT \mbox{\hyperlink{classxb_1_1xbFile}{xbFile}} : \textcolor{keyword}{public} \mbox{\hyperlink{classxb_1_1xbSsv}{xbSsv}} \{}
+\DoxyCodeLine{57 }
+\DoxyCodeLine{58 \textcolor{keyword}{public}:}
+\DoxyCodeLine{59 \mbox{\hyperlink{classxb_1_1xbFile}{xbFile}}( \mbox{\hyperlink{classxb_1_1xbXBase}{xbXBase}} * x );}
+\DoxyCodeLine{60 \mbox{\hyperlink{classxb_1_1xbFile}{\string~xbFile}}();}
+\DoxyCodeLine{61 }
+\DoxyCodeLine{62 \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& GetDirectory() \textcolor{keyword}{const};}
+\DoxyCodeLine{63 \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& GetFileName() \textcolor{keyword}{const};}
+\DoxyCodeLine{64 \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& GetFqFileName() \textcolor{keyword}{const};}
+\DoxyCodeLine{65 }
+\DoxyCodeLine{66 }
+\DoxyCodeLine{67 xbInt16 CreateUniqueFileName( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sDirIn, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sExtIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFqnOut, xbInt16 iOption = 0 );}
+\DoxyCodeLine{68 }
+\DoxyCodeLine{69 xbInt16 DetermineXbaseTableVersion( \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} cFileTypeByte ) \textcolor{keyword}{const};}
+\DoxyCodeLine{70 xbInt16 DetermineXbaseMemoVersion( \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} cFileTypeByte ) \textcolor{keyword}{const};}
+\DoxyCodeLine{71 }
+\DoxyCodeLine{72 \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} eGetDouble ( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *p ) \textcolor{keyword}{const};}
+\DoxyCodeLine{73 xbInt32 eGetInt32 ( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *p ) \textcolor{keyword}{const};}
+\DoxyCodeLine{74 xbUInt32 eGetUInt32 ( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *p ) \textcolor{keyword}{const};}
+\DoxyCodeLine{75 xbInt16 eGetInt16 ( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *p ) \textcolor{keyword}{const};}
+\DoxyCodeLine{76 xbUInt16 eGetUInt16 ( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *p ) \textcolor{keyword}{const};}
+\DoxyCodeLine{77 \textcolor{keywordtype}{void} ePutDouble ( \textcolor{keywordtype}{char} *p, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} d );}
+\DoxyCodeLine{78 \textcolor{keywordtype}{void} ePutInt32 ( \textcolor{keywordtype}{char} *p, xbInt32 l );}
+\DoxyCodeLine{79 \textcolor{keywordtype}{void} ePutUInt32 ( \textcolor{keywordtype}{char} *p, xbUInt32 ul );}
+\DoxyCodeLine{80 \textcolor{keywordtype}{void} ePutInt16 ( \textcolor{keywordtype}{char} *p, xbInt16 s );}
+\DoxyCodeLine{81 \textcolor{keywordtype}{void} ePutUInt16 ( \textcolor{keywordtype}{char} *p, xbUInt16 s );}
+\DoxyCodeLine{82 }
+\DoxyCodeLine{83 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} FileExists () \textcolor{keyword}{const};}
+\DoxyCodeLine{84 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} FileExists ( xbInt16 iOption ) \textcolor{keyword}{const};}
+\DoxyCodeLine{85 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} FileExists ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName ) \textcolor{keyword}{const};}
+\DoxyCodeLine{86 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} FileExists ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName, xbInt16 iOption ) \textcolor{keyword}{const};}
+\DoxyCodeLine{87 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} FileIsOpen () \textcolor{keyword}{const};}
+\DoxyCodeLine{88 }
+\DoxyCodeLine{89 xbUInt32 GetBlockSize () \textcolor{keyword}{const};}
+\DoxyCodeLine{90 }
+\DoxyCodeLine{91 xbInt16 GetFileDirPart ( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileDirPartOut ) \textcolor{keyword}{const};}
+\DoxyCodeLine{92 xbInt16 GetFileDirPart ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sCompleteFileNameIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileDirPartOut ) \textcolor{keyword}{const};}
+\DoxyCodeLine{93 xbInt16 GetFileExtPart ( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileExtPartOut ) \textcolor{keyword}{const};}
+\DoxyCodeLine{94 xbInt16 GetFileExtPart ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sCompleteFileNameIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileExtPartOut ) \textcolor{keyword}{const};}
+\DoxyCodeLine{95 xbInt16 GetFileMtime ( time\_t \&mtime );}
+\DoxyCodeLine{96 xbInt16 GetFileNamePart( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileNamePartOut ) \textcolor{keyword}{const};}
+\DoxyCodeLine{97 xbInt16 GetFileNamePart( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sCompleteFileNameIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileNamePartOut ) \textcolor{keyword}{const};}
+\DoxyCodeLine{98 xbInt16 GetFileSize ( xbUInt64 \&ullFileSize );}
+\DoxyCodeLine{99 xbInt16 GetFileType ( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileType ) \textcolor{keyword}{const};}
+\DoxyCodeLine{100 }
+\DoxyCodeLine{101 }
+\DoxyCodeLine{102 xbInt16 GetOpenMode () \textcolor{keyword}{const};}
+\DoxyCodeLine{103 xbInt16 GetShareMode () \textcolor{keyword}{const};}
+\DoxyCodeLine{104 }
+\DoxyCodeLine{105 }
+\DoxyCodeLine{106 xbInt16 GetXbaseFileTypeByte( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName, xbInt16 \&iVersion );}
+\DoxyCodeLine{107 xbInt16 GetXbaseFileTypeByte( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName, \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} \&cFileTypeByte );}
+\DoxyCodeLine{108 xbInt16 GetXbaseFileTypeByte( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName, \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} \&cFileTypeByte, xbInt16 \&iVersion );}
+\DoxyCodeLine{109 }
+\DoxyCodeLine{110 xbInt16 NameSuffixMissing( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName, xbInt16 iOption ) \textcolor{keyword}{const};}
+\DoxyCodeLine{111 }
+\DoxyCodeLine{112 xbInt16 ReadBlock ( xbUInt32 ulBlockNo, \textcolor{keywordtype}{size\_t} readSize, \textcolor{keywordtype}{void} *buf );}
+\DoxyCodeLine{113 xbInt16 ReadBlock ( xbUInt32 ulBlockNo, xbUInt32 ulBlockSize, \textcolor{keywordtype}{size\_t} readSize, \textcolor{keywordtype}{void} *buf );}
+\DoxyCodeLine{114 }
+\DoxyCodeLine{115 xbInt16 SetBlockSize ( xbUInt32 ulBlockSize );}
+\DoxyCodeLine{116 \textcolor{keywordtype}{void} SetDirectory ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sDirectory);}
+\DoxyCodeLine{117 \textcolor{keywordtype}{void} SetFileName ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName );}
+\DoxyCodeLine{118 \textcolor{keywordtype}{void} SetFqFileName ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFqName );}
+\DoxyCodeLine{119 xbInt16 SetHomeFolders();}
+\DoxyCodeLine{120 }
+\DoxyCodeLine{121 xbInt16 WriteBlock ( xbUInt32 ulBlockNo, \textcolor{keywordtype}{size\_t} writeSize, \textcolor{keywordtype}{void} *buf );}
+\DoxyCodeLine{122 }
+\DoxyCodeLine{123 xbInt16 xbFclose ();}
+\DoxyCodeLine{124 xbInt16 xbFeof ();}
+\DoxyCodeLine{125 xbInt16 xbFflush ();}
+\DoxyCodeLine{126 xbInt16 xbFgetc ( xbInt32 \&c );}
+\DoxyCodeLine{127 xbInt16 xbFgetc ( \textcolor{keywordtype}{char} \&c );}
+\DoxyCodeLine{128 xbInt16 xbFgets ( \textcolor{keywordtype}{size\_t} lSize, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sLine );}
+\DoxyCodeLine{129 }
+\DoxyCodeLine{130 }
+\DoxyCodeLine{131 xbInt16 \mbox{\hyperlink{classxb_1_1xbFile_a7cdfef5ede9ac98d44a28a6b7a70972c}{xbFopen}} ( xbInt16 iOpenMode );}
+\DoxyCodeLine{132 xbInt16 xbFopen ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOpenMode, xbInt16 iShareMode );}
+\DoxyCodeLine{133 xbInt16 xbFopen ( xbInt16 iOpenMode, xbInt16 iShareMode );}
+\DoxyCodeLine{134 xbInt16 xbFopen ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sMode, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName, xbInt16 iShareMode );}
+\DoxyCodeLine{135 }
+\DoxyCodeLine{136 xbInt16 xbFputc ( xbInt32 c );}
+\DoxyCodeLine{137 xbInt16 xbFputc ( xbInt32 c, xbInt32 iNoTimes );}
+\DoxyCodeLine{138 xbInt16 xbFputs ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s );}
+\DoxyCodeLine{139 xbInt16 xbFread ( \textcolor{keywordtype}{void} *ptr, \textcolor{keywordtype}{size\_t} size, \textcolor{keywordtype}{size\_t} nmemb );}
+\DoxyCodeLine{140 xbInt16 xbFseek ( xbInt64 llOffset, xbInt32 whence );}
+\DoxyCodeLine{141 \textcolor{keywordtype}{size\_t} xbFtell ();}
+\DoxyCodeLine{142 \textcolor{keywordtype}{void} xbFTurnOffFileBuffering();}
+\DoxyCodeLine{143 }
+\DoxyCodeLine{144 xbInt16 xbReadUntil ( \textcolor{keyword}{const} \textcolor{keywordtype}{char} cDelim, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
+\DoxyCodeLine{145 xbInt16 xbRemove ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName, xbInt16 iOption );}
+\DoxyCodeLine{146 xbInt16 xbRemove ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName );}
+\DoxyCodeLine{147 xbInt16 xbRemove ();}
+\DoxyCodeLine{148 }
+\DoxyCodeLine{149 xbInt16 xbRename ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOldName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sNewName );}
+\DoxyCodeLine{150 \textcolor{keywordtype}{void} xbRewind ();}
+\DoxyCodeLine{151 }
+\DoxyCodeLine{152 xbInt16 xbFwrite ( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *ptr, \textcolor{keywordtype}{size\_t} lSize, \textcolor{keywordtype}{size\_t} lNmemb );}
+\DoxyCodeLine{153 }
+\DoxyCodeLine{154 xbInt16 xbTruncate ( xbInt64 llSize );}
+\DoxyCodeLine{155 }
+\DoxyCodeLine{156 }
+\DoxyCodeLine{157 \textcolor{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
+\DoxyCodeLine{158 xbInt16 xbLock ( xbInt16 iFunction, xbInt64 llOffset, \textcolor{keywordtype}{size\_t} stLen );}
+\DoxyCodeLine{159 xbInt16 GetLockRetryCount() \textcolor{keyword}{const};}
+\DoxyCodeLine{160 \textcolor{keywordtype}{void} SetLockRetryCount( xbInt16 iLockRetries );}
+\DoxyCodeLine{161 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{162 }
+\DoxyCodeLine{163 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
+\DoxyCodeLine{164 xbInt16 DumpBlockToDisk( xbUInt32 ulBlockNo, \textcolor{keywordtype}{size\_t} lBlockSize );}
+\DoxyCodeLine{165 xbInt16 DumpMemToDisk ( \textcolor{keywordtype}{char} *p, \textcolor{keywordtype}{size\_t} lBlockSize );}
+\DoxyCodeLine{166 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{167 }
+\DoxyCodeLine{168 }
+\DoxyCodeLine{169 \textcolor{keyword}{protected}:}
+\DoxyCodeLine{170 }
+\DoxyCodeLine{171 \mbox{\hyperlink{classxb_1_1xbXBase}{xbXBase}} *\mbox{\hyperlink{classxb_1_1xbFile_ae39a67ea391b46055d4ca299cb222004}{xbase}}; \textcolor{comment}{/* pointer to the main structures */}}
+\DoxyCodeLine{172 }
+\DoxyCodeLine{173 \textcolor{keyword}{private}:}
+\DoxyCodeLine{174 FILE *fp;}
+\DoxyCodeLine{175 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sFqFileName; \textcolor{comment}{/* fully qualified file name */}}
+\DoxyCodeLine{176 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sFileName; \textcolor{comment}{/* file name */}}
+\DoxyCodeLine{177 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sDirectory; \textcolor{comment}{/* directory, ends with / or \(\backslash\) */}}
+\DoxyCodeLine{178 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bFileOpen; \textcolor{comment}{/* true if file is open */}}
+\DoxyCodeLine{179 xbUInt32 ulBlockSize; \textcolor{comment}{/* used for memo and index files */}}
+\DoxyCodeLine{180 }
+\DoxyCodeLine{181 xbInt16 iOpenMode; \textcolor{comment}{/* XB\_READ || XB\_READ\_WRITE || XB\_WRITE */}}
+\DoxyCodeLine{182 xbInt16 iShareMode; \textcolor{comment}{/* XB\_SINGLE\_USER || XB\_MULTI\_USER -\/ set file buffering */}}
+\DoxyCodeLine{183 xbInt32 iFileNo; \textcolor{comment}{/* Library File No */}}
+\DoxyCodeLine{184 }
+\DoxyCodeLine{185 \textcolor{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
+\DoxyCodeLine{186 xbInt16 iLockRetries; \textcolor{comment}{/* file override number of lock attempts */}}
+\DoxyCodeLine{187 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{188 }
+\DoxyCodeLine{189 \textcolor{preprocessor}{ \#ifdef HAVE\_SETENDOFFILE\_F}}
+\DoxyCodeLine{190 HANDLE fHandle;}
+\DoxyCodeLine{191 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{192 }
+\DoxyCodeLine{193 }
+\DoxyCodeLine{194 \};}
+\DoxyCodeLine{195 }
+\DoxyCodeLine{196 \} \textcolor{comment}{/* namespace */}}
+\DoxyCodeLine{197 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XBFILE\_H\_\_ */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{198 }
+
+\end{DoxyCode}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbfilter_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbfilter_8cpp.tex
new file mode 100644
index 0000000..fd07d41
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbfilter_8cpp.tex
@@ -0,0 +1,3 @@
+\hypertarget{xbfilter_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbfilter.cpp File Reference}
+\label{xbfilter_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbfilter.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbfilter.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbfilter_8h.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbfilter_8h.tex
new file mode 100644
index 0000000..85a7296
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbfilter_8h.tex
@@ -0,0 +1,2 @@
+\hypertarget{xbfilter_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbfilter.h File Reference}
+\label{xbfilter_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbfilter.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbfilter.h}}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbfilter_8h_source.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbfilter_8h_source.tex
new file mode 100644
index 0000000..7baffe4
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbfilter_8h_source.tex
@@ -0,0 +1,84 @@
+\hypertarget{xbfilter_8h_source}{}\doxysection{xbfilter.\+h}
+\label{xbfilter_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbfilter.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbfilter.h}}
+\mbox{\hyperlink{xbfilter_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{comment}{/* xbfilter.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}{This class manages the user data area (UDA)}}
+\DoxyCodeLine{15 \textcolor{comment}{}}
+\DoxyCodeLine{16 \textcolor{comment}{*/}}
+\DoxyCodeLine{17 }
+\DoxyCodeLine{18 }
+\DoxyCodeLine{19 \textcolor{preprocessor}{\#ifndef \_\_XB\_XBFILTER\_H\_\_}}
+\DoxyCodeLine{20 \textcolor{preprocessor}{\#define \_\_XB\_XBFILTER\_H\_\_}}
+\DoxyCodeLine{21 }
+\DoxyCodeLine{22 \textcolor{preprocessor}{\#ifdef CMAKE\_COMPILER\_IS\_GNUCC}}
+\DoxyCodeLine{23 \textcolor{preprocessor}{\#pragma interface}}
+\DoxyCodeLine{24 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{25 }
+\DoxyCodeLine{26 }
+\DoxyCodeLine{27 \textcolor{preprocessor}{\#ifdef XB\_FILTER\_SUPPORT}}
+\DoxyCodeLine{28 }
+\DoxyCodeLine{29 }
+\DoxyCodeLine{30 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
+\DoxyCodeLine{31 }
+\DoxyCodeLine{32 \textcolor{comment}{//\#ifdef XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{33 \textcolor{comment}{//class XBDLLEXPORT xbIx;}}
+\DoxyCodeLine{34 \textcolor{comment}{//\#endif // XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{35 }
+\DoxyCodeLine{36 }
+\DoxyCodeLine{37 \textcolor{keyword}{class }XBDLLEXPORT xbFilter \{}
+\DoxyCodeLine{38 }
+\DoxyCodeLine{39 \textcolor{keyword}{public}:}
+\DoxyCodeLine{40 xbFilter( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf );}
+\DoxyCodeLine{41 \string~xbFilter();}
+\DoxyCodeLine{42 xbInt16 Set( xbString \&sFilterExpression );}
+\DoxyCodeLine{43 xbInt16 Set( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *sFilterExpression );}
+\DoxyCodeLine{44 xbInt16 GetFirstRecord( xbInt16 iOpt = 1 );}
+\DoxyCodeLine{45 xbInt16 GetNextRecord ( xbInt16 iOpt = 1 );}
+\DoxyCodeLine{46 xbInt16 GetPrevRecord ( xbInt16 iOpt = 1 );}
+\DoxyCodeLine{47 xbInt16 GetLastRecord ( xbInt16 iOpt = 1 );}
+\DoxyCodeLine{48 \textcolor{keywordtype}{void} SetLimit( xbInt32 ulLimit );}
+\DoxyCodeLine{49 xbInt32 GetLimit() \textcolor{keyword}{const};}
+\DoxyCodeLine{50 \textcolor{keywordtype}{void} ResetQryCnt();}
+\DoxyCodeLine{51 xbInt32 GetQryCnt() \textcolor{keyword}{const};}
+\DoxyCodeLine{52 }
+\DoxyCodeLine{53 \textcolor{preprocessor}{ \#ifdef XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{54 xbInt16 GetFirstRecordIx( xbInt16 iOpt = 1 );}
+\DoxyCodeLine{55 xbInt16 GetNextRecordIx ( xbInt16 iOpt = 1 );}
+\DoxyCodeLine{56 xbInt16 GetPrevRecordIx ( xbInt16 iOpt = 1 );}
+\DoxyCodeLine{57 xbInt16 GetLastRecordIx ( xbInt16 iOpt = 1 );}
+\DoxyCodeLine{58 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{59 }
+\DoxyCodeLine{60 }
+\DoxyCodeLine{61 \textcolor{keyword}{private}:}
+\DoxyCodeLine{62 \textcolor{comment}{// xbXBase *xbase;}}
+\DoxyCodeLine{63 \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf;}
+\DoxyCodeLine{64 xbExp *exp;}
+\DoxyCodeLine{65 }
+\DoxyCodeLine{66 xbInt32 lLimit; \textcolor{comment}{// max number rows returned}}
+\DoxyCodeLine{67 xbInt32 lCurQryCnt; \textcolor{comment}{// current count of rows returned, neg\# is moving from bottom to top}}
+\DoxyCodeLine{68 \textcolor{comment}{// pos\# is moving from top to bottom}}
+\DoxyCodeLine{69 \textcolor{preprocessor}{ \#ifdef XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{70 xbIx *pIx; \textcolor{comment}{// if index is set, the class uses the index tag, otherwise table}}
+\DoxyCodeLine{71 \textcolor{keywordtype}{void} *vpTag;}
+\DoxyCodeLine{72 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{73 }
+\DoxyCodeLine{74 }
+\DoxyCodeLine{75 \};}
+\DoxyCodeLine{76 \} \textcolor{comment}{/* namespace */}}
+\DoxyCodeLine{77 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* XB\_FILTER\_SUPPORT */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{78 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XBFILTER\_H\_\_ */}\textcolor{preprocessor}{}}
+
+\end{DoxyCode}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbfuncs_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbfuncs_8cpp.tex
new file mode 100644
index 0000000..1ed3326
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbfuncs_8cpp.tex
@@ -0,0 +1,3 @@
+\hypertarget{xbfuncs_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbfuncs.cpp File Reference}
+\label{xbfuncs_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbfuncs.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbfuncs.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbindex_8h.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbindex_8h.tex
new file mode 100644
index 0000000..92e2b3d
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbindex_8h.tex
@@ -0,0 +1,2 @@
+\hypertarget{xbindex_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbindex.h File Reference}
+\label{xbindex_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbindex.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbindex.h}}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbindex_8h_source.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbindex_8h_source.tex
new file mode 100644
index 0000000..1572730
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbindex_8h_source.tex
@@ -0,0 +1,521 @@
+\hypertarget{xbindex_8h_source}{}\doxysection{xbindex.\+h}
+\label{xbindex_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbindex.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbindex.h}}
+\mbox{\hyperlink{xbindex_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{comment}{/* xbindex.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, 2018, 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\_INDEX\_H\_\_}}
+\DoxyCodeLine{18 \textcolor{preprocessor}{\#define \_\_XB\_INDEX\_H\_\_}}
+\DoxyCodeLine{19 }
+\DoxyCodeLine{20 \textcolor{preprocessor}{\#ifdef XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{21 }
+\DoxyCodeLine{22 }
+\DoxyCodeLine{23 \textcolor{preprocessor}{\#define XB\_ADD\_KEY 1}}
+\DoxyCodeLine{24 \textcolor{preprocessor}{\#define XB\_UPD\_KEY 2}}
+\DoxyCodeLine{25 \textcolor{preprocessor}{\#define XB\_DEL\_KEY 3}}
+\DoxyCodeLine{26 }
+\DoxyCodeLine{27 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
+\DoxyCodeLine{28 }
+\DoxyCodeLine{29 }
+\DoxyCodeLine{30 }
+\DoxyCodeLine{32 \textcolor{comment}{// structure for index nodes, each node contains information regarding one block}}
+\DoxyCodeLine{33 \textcolor{keyword}{struct }XBDLLEXPORT xbIxNode \{}
+\DoxyCodeLine{34 xbIxNode *npPrev; \textcolor{comment}{// pointer to previous node in chain}}
+\DoxyCodeLine{35 xbIxNode *npNext; \textcolor{comment}{// pointer to next node in chain}}
+\DoxyCodeLine{36 xbUInt32 iCurKeyNo; \textcolor{comment}{// current key number in the node, 0 offset}}
+\DoxyCodeLine{37 xbUInt32 ulBlockNo; \textcolor{comment}{// this block number}}
+\DoxyCodeLine{38 xbUInt32 ulBufSize; \textcolor{comment}{// size of cpBlockData}}
+\DoxyCodeLine{39 \textcolor{keywordtype}{char} *cpBlockData; \textcolor{comment}{// pointer to memory version of block data stored in file}}
+\DoxyCodeLine{40 \};}
+\DoxyCodeLine{42 }
+\DoxyCodeLine{43 }
+\DoxyCodeLine{45 }
+\DoxyCodeLine{120 \textcolor{keyword}{class }XBDLLEXPORT xbIx : \textcolor{keyword}{public} xbFile \{}
+\DoxyCodeLine{121 \textcolor{keyword}{public}:}
+\DoxyCodeLine{122 xbIx( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} * d );}
+\DoxyCodeLine{123 \textcolor{keyword}{virtual} \string~xbIx();}
+\DoxyCodeLine{124 }
+\DoxyCodeLine{125 \textcolor{keyword}{virtual} xbInt16 CheckTagIntegrity( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOpt ) = 0;}
+\DoxyCodeLine{126 \textcolor{keyword}{virtual} xbInt16 Close();}
+\DoxyCodeLine{127 \textcolor{keyword}{virtual} xbInt16 CreateTag( \textcolor{keyword}{const} xbString \&sName, \textcolor{keyword}{const} xbString \&sKey, \textcolor{keyword}{const} xbString \&sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, \textcolor{keywordtype}{void} **vpTag ) = 0;}
+\DoxyCodeLine{128 \textcolor{keyword}{virtual} xbInt16 FindKey( \textcolor{keywordtype}{void} *vpTag, \textcolor{keyword}{const} xbString \&sKey, xbInt16 iRetrieveSw );}
+\DoxyCodeLine{129 \textcolor{keyword}{virtual} xbInt16 FindKey( \textcolor{keywordtype}{void} *vpTag, \textcolor{keyword}{const} \textcolor{keywordtype}{char} * cKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw );}
+\DoxyCodeLine{130 \textcolor{keyword}{virtual} xbInt16 FindKey( \textcolor{keywordtype}{void} *vpTag, \textcolor{keyword}{const} xbBcd \&bcd, xbInt16 iRetrieveSw );}
+\DoxyCodeLine{131 \textcolor{keyword}{virtual} xbInt16 FindKey( \textcolor{keywordtype}{void} *vpTag, \textcolor{keyword}{const} xbDate \&dtKey, xbInt16 iRetrieveSw );}
+\DoxyCodeLine{132 \textcolor{keyword}{virtual} xbInt16 FindKey( \textcolor{keywordtype}{void} *vpTag, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dKey, xbInt16 iRetrieveSw );}
+\DoxyCodeLine{133 \textcolor{keyword}{virtual} xbInt16 FindKey( \textcolor{keywordtype}{void} *vpTag, \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw ) = 0;}
+\DoxyCodeLine{134 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} *GetCurTag() \textcolor{keyword}{const};}
+\DoxyCodeLine{135 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *GetDbf() \textcolor{keyword}{const};}
+\DoxyCodeLine{136 }
+\DoxyCodeLine{137 \textcolor{keyword}{virtual} xbString \&GetKeyExpression( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const} = 0;}
+\DoxyCodeLine{138 \textcolor{keyword}{virtual} xbString \&GetKeyFilter( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const} = 0;}
+\DoxyCodeLine{139 \textcolor{keyword}{virtual} \textcolor{keywordtype}{char} GetKeyType( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const} = 0;}
+\DoxyCodeLine{140 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetLocked() \textcolor{keyword}{const};}
+\DoxyCodeLine{141 }
+\DoxyCodeLine{142 \textcolor{keyword}{virtual} xbInt16 GetFirstKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 iRetrieveSw ) = 0;}
+\DoxyCodeLine{143 \textcolor{keyword}{virtual} xbInt16 GetFirstKey( \textcolor{keywordtype}{void} *vpTag );}
+\DoxyCodeLine{144 \textcolor{keyword}{virtual} xbInt16 GetFirstKey();}
+\DoxyCodeLine{145 }
+\DoxyCodeLine{146 \textcolor{keyword}{virtual} xbInt16 GetLastKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 lRetrieveSw ) = 0;}
+\DoxyCodeLine{147 \textcolor{keyword}{virtual} xbInt16 GetLastKey( \textcolor{keywordtype}{void} *vpTag );}
+\DoxyCodeLine{148 \textcolor{keyword}{virtual} xbInt16 GetLastKey();}
+\DoxyCodeLine{149 }
+\DoxyCodeLine{150 \textcolor{keyword}{virtual} xbInt16 GetNextKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 iRetrieveSw ) = 0;}
+\DoxyCodeLine{151 \textcolor{keyword}{virtual} xbInt16 GetNextKey( \textcolor{keywordtype}{void} *vpTag );}
+\DoxyCodeLine{152 \textcolor{keyword}{virtual} xbInt16 GetNextKey();}
+\DoxyCodeLine{153 }
+\DoxyCodeLine{154 \textcolor{keyword}{virtual} xbInt16 GetPrevKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 iRetrieveSw ) = 0;}
+\DoxyCodeLine{155 \textcolor{keyword}{virtual} xbInt16 GetPrevKey( \textcolor{keywordtype}{void} *vpTag );}
+\DoxyCodeLine{156 \textcolor{keyword}{virtual} xbInt16 GetPrevKey();}
+\DoxyCodeLine{157 }
+\DoxyCodeLine{158 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} *GetTag( xbInt16 iTagNo ) \textcolor{keyword}{const} = 0;}
+\DoxyCodeLine{159 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} *GetTag( xbString \&sTagName ) \textcolor{keyword}{const} = 0;}
+\DoxyCodeLine{160 \textcolor{keyword}{virtual} xbInt16 GetTagCount() \textcolor{keyword}{const} = 0;}
+\DoxyCodeLine{161 }
+\DoxyCodeLine{162 \textcolor{keyword}{virtual} xbString \&GetTagName( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const} = 0;}
+\DoxyCodeLine{163 \textcolor{keyword}{virtual} \textcolor{keyword}{const} \textcolor{keywordtype}{char} * GetTagName( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOpt ) \textcolor{keyword}{const} = 0;}
+\DoxyCodeLine{164 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} GetTagName( \textcolor{keywordtype}{void} *vpTag, xbString \&sTagName ) \{\};}
+\DoxyCodeLine{165 }
+\DoxyCodeLine{166 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetUnique( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const} = 0;}
+\DoxyCodeLine{167 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetSortOrder( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const} = 0;}
+\DoxyCodeLine{168 }
+\DoxyCodeLine{169 \textcolor{keyword}{virtual} xbInt16 Open( \textcolor{keyword}{const} xbString \&sFileName );}
+\DoxyCodeLine{170 \textcolor{keyword}{virtual} xbInt16 SetCurTag( xbInt16 iTagNo ) = 0;}
+\DoxyCodeLine{171 \textcolor{keyword}{virtual} xbInt16 SetCurTag( xbString \&sTagName ) = 0;}
+\DoxyCodeLine{172 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} SetCurTag( \textcolor{keywordtype}{void} * vpCurTag );}
+\DoxyCodeLine{173 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} SetLocked( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bLocked );}
+\DoxyCodeLine{174 }
+\DoxyCodeLine{175 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} TestStub( \textcolor{keywordtype}{char} *s, \textcolor{keywordtype}{void} *vpTag ) \{\};}
+\DoxyCodeLine{176 }
+\DoxyCodeLine{177 }
+\DoxyCodeLine{178 }
+\DoxyCodeLine{179 \textcolor{keyword}{virtual} xbInt16 Reindex( \textcolor{keywordtype}{void} **vpTag ) = 0;}
+\DoxyCodeLine{180 }
+\DoxyCodeLine{181 }
+\DoxyCodeLine{182 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
+\DoxyCodeLine{183 \textcolor{keyword}{virtual} xbInt16 DumpFreeBlocks( xbInt16 iOpt = 0 ) \{ \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}{XB\_NO\_ERROR}}; \}}
+\DoxyCodeLine{184 \textcolor{keyword}{virtual} xbInt16 DumpHeader( xbInt16 iDestOpt = 0, xbInt16 iFmtOpt = 0 ) = 0;}
+\DoxyCodeLine{185 \textcolor{keyword}{virtual} xbInt16 DumpIxForTag( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOutputOpt ) = 0;}
+\DoxyCodeLine{186 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} DumpIxNodeChain( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOutputOpt ) \textcolor{keyword}{const} = 0;}
+\DoxyCodeLine{187 \textcolor{keyword}{virtual} xbInt16 DumpNode( \textcolor{keywordtype}{void} * vpTag, xbIxNode * pNode, xbInt16 iOption ) \textcolor{keyword}{const};}
+\DoxyCodeLine{188 \textcolor{keyword}{virtual} xbInt16 DumpTagBlocks( xbInt16 iOpt = 1, \textcolor{keywordtype}{void} *vpTag = NULL ) = 0;}
+\DoxyCodeLine{189 }
+\DoxyCodeLine{190 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{191 }
+\DoxyCodeLine{192 \textcolor{keyword}{protected}:}
+\DoxyCodeLine{193 \textcolor{keyword}{friend} \textcolor{keyword}{class }\mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}};}
+\DoxyCodeLine{194 }
+\DoxyCodeLine{195 \textcolor{keyword}{virtual} xbInt16 AddKey( \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulRecNo ) = 0;}
+\DoxyCodeLine{196 \textcolor{keyword}{virtual} xbInt16 AddKeys( xbUInt32 ulRecNo );}
+\DoxyCodeLine{197 \textcolor{keyword}{virtual} xbIxNode *AllocateIxNode( xbUInt32 ulBufSize = 0, xbInt16 iOption = 0 );}
+\DoxyCodeLine{198 \textcolor{keyword}{virtual} xbInt16 BSearchBlock( \textcolor{keywordtype}{char} cKeyType, xbIxNode *npNode, xbInt32 lKeyLen, \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpKey, xbInt32 lSearchKeyLen, xbInt16 \&iCompRc, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bDescending = \mbox{\hyperlink{xbtypes_8h_adc4b6ca5ad299f63675136d9e03938cc}{xbFalse}} ) \textcolor{keyword}{const};}
+\DoxyCodeLine{199 \textcolor{keyword}{virtual} xbInt16 CheckForDupKeys();}
+\DoxyCodeLine{200 \textcolor{keyword}{virtual} xbInt16 CheckForDupKey( \textcolor{keywordtype}{void} *vpTag ) = 0;}
+\DoxyCodeLine{201 \textcolor{keyword}{virtual} xbInt16 CompareKey( \textcolor{keywordtype}{char} cKeyType, \textcolor{keyword}{const} \textcolor{keywordtype}{void} *v1, \textcolor{keyword}{const} \textcolor{keywordtype}{void} *v2, \textcolor{keywordtype}{size\_t} lKeyLen ) \textcolor{keyword}{const};}
+\DoxyCodeLine{202 \textcolor{keyword}{virtual} xbInt16 CreateKeys( xbInt16 iOpt );}
+\DoxyCodeLine{203 \textcolor{keyword}{virtual} xbInt16 CreateKey( \textcolor{keywordtype}{void} * vpTag, xbInt16 iOpt ) = 0;}
+\DoxyCodeLine{204 \textcolor{keyword}{virtual} xbInt16 DeleteFromNode( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npNode, xbInt16 iSlotNo ) = 0;}
+\DoxyCodeLine{205 \textcolor{keyword}{virtual} xbInt16 DeleteKeys();}
+\DoxyCodeLine{206 \textcolor{keyword}{virtual} xbInt16 DeleteKey( \textcolor{keywordtype}{void} *vpTag ) = 0;}
+\DoxyCodeLine{207 \textcolor{keyword}{virtual} xbInt16 DeleteTag( \textcolor{keywordtype}{void} *vpTag ) = 0;}
+\DoxyCodeLine{208 }
+\DoxyCodeLine{209 \textcolor{keyword}{virtual} xbInt16 FindKeyForCurRec( \textcolor{keywordtype}{void} *vpTag ) = 0;}
+\DoxyCodeLine{210 \textcolor{keyword}{virtual} xbIxNode *FreeNodeChain( xbIxNode *np );}
+\DoxyCodeLine{211 \textcolor{keyword}{virtual} xbInt16 GetBlock( \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulBlockNo, xbInt16 iOpt, xbUInt32 ulAddlBuf = 0 );}
+\DoxyCodeLine{212 \textcolor{keyword}{virtual} xbInt32 GetKeyCount( xbIxNode *npNode ) \textcolor{keyword}{const};}
+\DoxyCodeLine{213 \textcolor{keyword}{virtual} \textcolor{keywordtype}{char} *GetKeyData( xbIxNode *npNode, xbInt16 iKeyNo, xbInt16 iKeyItemLen ) \textcolor{keyword}{const};}
+\DoxyCodeLine{214 \textcolor{keyword}{virtual} xbInt16 GetKeySts( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const} = 0;}
+\DoxyCodeLine{215 \textcolor{keyword}{virtual} xbInt16 GetLastKey( xbUInt32 ulNodeNo, \textcolor{keywordtype}{void} *vpTag, xbInt16 lRetrieveSw ) = 0;}
+\DoxyCodeLine{216 \textcolor{keyword}{virtual} xbInt16 InsertNodeL( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, \textcolor{keywordtype}{char} * cpKeyBuf, xbUInt32 uiPtr ) = 0;}
+\DoxyCodeLine{217 \textcolor{keyword}{virtual} xbInt16 InsertNodeI( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, xbUInt32 uiPtr ) = 0;}
+\DoxyCodeLine{218 \textcolor{keyword}{virtual} xbInt16 KeyExists( \textcolor{keywordtype}{void} * ) = 0;}
+\DoxyCodeLine{219 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} NodeFree( xbIxNode * ixNode );}
+\DoxyCodeLine{220 \textcolor{keyword}{virtual} xbInt16 ReadHeadBlock( xbInt16 iOpt = 0 ) = 0;}
+\DoxyCodeLine{221 \textcolor{comment}{// virtual xbInt16 Reindex( void **vpTag ) = 0;}}
+\DoxyCodeLine{222 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} SetDbf( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf );}
+\DoxyCodeLine{223 \textcolor{keyword}{virtual} xbInt16 SplitNodeL( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, \textcolor{keywordtype}{char} *cpKeyBuf, xbUInt32 uiPtr ) = 0;}
+\DoxyCodeLine{224 \textcolor{keyword}{virtual} xbInt16 SplitNodeI( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 uiPtr ) = 0;}
+\DoxyCodeLine{225 \textcolor{keyword}{virtual} xbInt16 UpdateTagKey( \textcolor{keywordtype}{char} cAction, \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulRecNo = 0 ) = 0;}
+\DoxyCodeLine{226 \textcolor{keyword}{virtual} xbInt16 WriteHeadBlock( xbInt16 iOption ) = 0;}
+\DoxyCodeLine{227 }
+\DoxyCodeLine{228 \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf;}
+\DoxyCodeLine{229 \textcolor{keywordtype}{char} *cNodeBuf; \textcolor{comment}{// pointer to memory for processing in a block of index data}}
+\DoxyCodeLine{230 \textcolor{keywordtype}{void} *vpCurTag; \textcolor{comment}{// pointer to active tag. Single index files have only one tag}}
+\DoxyCodeLine{231 }
+\DoxyCodeLine{232 \textcolor{keyword}{private}:}
+\DoxyCodeLine{233 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} AppendNodeChain( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode ) = 0;}
+\DoxyCodeLine{234 \textcolor{keyword}{virtual} xbInt16 GetKeyPtr( \textcolor{keywordtype}{void} *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 \&ulKeyPtr ) \textcolor{keyword}{const} = 0;}
+\DoxyCodeLine{235 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsLeaf( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode ) \textcolor{keyword}{const} = 0;}
+\DoxyCodeLine{236 \textcolor{comment}{// virtual void SetCurNode( void *vpTag, xbIxNode *npNode ) = 0;}}
+\DoxyCodeLine{237 }
+\DoxyCodeLine{238 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bLocked; \textcolor{comment}{// index file locked?}}
+\DoxyCodeLine{239 \};}
+\DoxyCodeLine{240 }
+\DoxyCodeLine{241 \textcolor{preprocessor}{\#ifdef XB\_NDX\_SUPPORT}}
+\DoxyCodeLine{242 }
+\DoxyCodeLine{243 \textcolor{preprocessor}{\#define XB\_NDX\_BLOCK\_SIZE 512}}
+\DoxyCodeLine{244 }
+\DoxyCodeLine{245 }
+\DoxyCodeLine{247 \textcolor{keyword}{struct }XBDLLEXPORT xbNdxTag \{}
+\DoxyCodeLine{248 }
+\DoxyCodeLine{249 \textcolor{comment}{// NDX File Header Fields}}
+\DoxyCodeLine{250 xbUInt32 ulRootBlock; \textcolor{comment}{// header node is 0}}
+\DoxyCodeLine{251 xbUInt32 ulTotalBlocks; \textcolor{comment}{// includes header node}}
+\DoxyCodeLine{252 \textcolor{keywordtype}{char} cKeyType; \textcolor{comment}{// C = Char, F = Numeric, D = Date}}
+\DoxyCodeLine{253 xbInt16 iKeyLen; \textcolor{comment}{// length of key data}}
+\DoxyCodeLine{254 xbInt16 iKeysPerBlock; \textcolor{comment}{// max number keys per block <=100}}
+\DoxyCodeLine{255 xbInt16 iKeyType; \textcolor{comment}{// 00 = Char, 01 = Numeric}}
+\DoxyCodeLine{256 xbInt16 iKeyItemLen; \textcolor{comment}{// KeyLen + 8 bytes}}
+\DoxyCodeLine{257 \textcolor{keywordtype}{char} cSerNo; \textcolor{comment}{// rolling incrementing serial number +1 on each index update}}
+\DoxyCodeLine{258 xbInt16 iUnique; \textcolor{comment}{// True if unique}}
+\DoxyCodeLine{259 xbString sKeyExpression; \textcolor{comment}{// index expression}}
+\DoxyCodeLine{260 \textcolor{comment}{// end of NDX Header field}}
+\DoxyCodeLine{261 }
+\DoxyCodeLine{262 xbExp *exp; \textcolor{comment}{// pointer to expression for expression keys}}
+\DoxyCodeLine{263 time\_t tNodeChainTs; \textcolor{comment}{// node chain time stamp}}
+\DoxyCodeLine{264 xbIxNode *npNodeChain;}
+\DoxyCodeLine{265 xbIxNode *npCurNode;}
+\DoxyCodeLine{266 \textcolor{keywordtype}{char} *cpKeyBuf; \textcolor{comment}{// key buffer, for searches and adds}}
+\DoxyCodeLine{267 \textcolor{keywordtype}{char} *cpKeyBuf2; \textcolor{comment}{// key buffer, for deletes}}
+\DoxyCodeLine{268 xbString sTagName; \textcolor{comment}{// tag name -\/ is the file name without the extension}}
+\DoxyCodeLine{269 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bFoundSts; \textcolor{comment}{// key found? used to determine if new key should be added in XB\_EMULATE\_DBASE mode in AddKey}}
+\DoxyCodeLine{270 }
+\DoxyCodeLine{271 }
+\DoxyCodeLine{272 xbInt16 iKeySts; \textcolor{comment}{// key updated? set in method CreateKey, checked in AddKey and DeleteKey routines}}
+\DoxyCodeLine{273 \textcolor{comment}{// old key filtered new key filtered iKeySts}}
+\DoxyCodeLine{274 \textcolor{comment}{// Y Y XB\_UPD\_KEY 2 -\/ update key if changed (delete and add)}}
+\DoxyCodeLine{275 \textcolor{comment}{// Y N XB\_DEL\_KEY 3 -\/ delete key}}
+\DoxyCodeLine{276 \textcolor{comment}{// N Y XB\_ADD\_KEY 1 -\/ add key}}
+\DoxyCodeLine{277 \textcolor{comment}{// N N 0 -\/ no update}}
+\DoxyCodeLine{278 }
+\DoxyCodeLine{279 \};}
+\DoxyCodeLine{281 }
+\DoxyCodeLine{283 }
+\DoxyCodeLine{302 \textcolor{keyword}{class }XBDLLEXPORT xbIxNdx : \textcolor{keyword}{public} xbIx \{}
+\DoxyCodeLine{303 \textcolor{keyword}{public}:}
+\DoxyCodeLine{304 xbIxNdx( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} * d );}
+\DoxyCodeLine{305 \string~xbIxNdx();}
+\DoxyCodeLine{306 xbInt16 CheckTagIntegrity( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOpt );}
+\DoxyCodeLine{307 xbInt16 CreateTag( \textcolor{keyword}{const} xbString \&sName, \textcolor{keyword}{const} xbString \&sKey, \textcolor{keyword}{const} xbString \&sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, \textcolor{keywordtype}{void} **vpTag );}
+\DoxyCodeLine{308 xbInt16 FindKey( \textcolor{keywordtype}{void} *vpTag, \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw );}
+\DoxyCodeLine{309 xbInt16 GetFirstKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 iRetrieveSw );}
+\DoxyCodeLine{310 }
+\DoxyCodeLine{311 xbInt16 GetLastKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 iRetrieveSw = 1 );}
+\DoxyCodeLine{312 xbInt16 GetNextKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 iRetrieveSw = 1 );}
+\DoxyCodeLine{313 xbInt16 GetPrevKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 iRetrieveSw = 1 );}
+\DoxyCodeLine{314 xbInt32 GetKeyLen ( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
+\DoxyCodeLine{315 \textcolor{keywordtype}{char} GetKeyType ( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
+\DoxyCodeLine{316 xbString \&GetKeyExpression( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
+\DoxyCodeLine{317 xbString \&GetKeyFilter( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
+\DoxyCodeLine{318 \textcolor{keywordtype}{void} *GetTag( xbInt16 iTagNo ) \textcolor{keyword}{const};}
+\DoxyCodeLine{319 \textcolor{keywordtype}{void} *GetTag( xbString \&sTagName ) \textcolor{keyword}{const};}
+\DoxyCodeLine{320 xbString \&GetTagName( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
+\DoxyCodeLine{321 \textcolor{keyword}{const} \textcolor{keywordtype}{char} * GetTagName( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOpt ) \textcolor{keyword}{const};}
+\DoxyCodeLine{322 }
+\DoxyCodeLine{323 xbInt16 GetTagCount() \textcolor{keyword}{const};}
+\DoxyCodeLine{324 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetUnique( \textcolor{keywordtype}{void} *vpTag = NULL ) \textcolor{keyword}{const};}
+\DoxyCodeLine{325 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetSortOrder( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
+\DoxyCodeLine{326 xbInt16 SetCurTag( xbInt16 iTagNo );}
+\DoxyCodeLine{327 xbInt16 SetCurTag( xbString \&sTagName );}
+\DoxyCodeLine{328 }
+\DoxyCodeLine{329 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
+\DoxyCodeLine{330 xbInt16 DumpTagBlocks( xbInt16 iOpt = 1, \textcolor{keywordtype}{void} *vpTag = NULL );}
+\DoxyCodeLine{331 xbInt16 DumpHeader( xbInt16 iOpt = 0, xbInt16 iFmt = 0 );}
+\DoxyCodeLine{332 xbInt16 DumpIxForTag( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOutputOpt );}
+\DoxyCodeLine{333 \textcolor{keywordtype}{void} DumpIxNodeChain( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOutputOpt ) \textcolor{keyword}{const};}
+\DoxyCodeLine{334 xbInt16 DumpNode( \textcolor{keywordtype}{void} * vpTag, xbIxNode * pNode, xbInt16 iOption ) \textcolor{keyword}{const};}
+\DoxyCodeLine{335 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{336 }
+\DoxyCodeLine{337 xbInt16 Reindex( \textcolor{keywordtype}{void} **vpTag );}
+\DoxyCodeLine{338 }
+\DoxyCodeLine{339 }
+\DoxyCodeLine{340 \textcolor{keyword}{protected}:}
+\DoxyCodeLine{341 \textcolor{keyword}{friend} \textcolor{keyword}{class }\mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}};}
+\DoxyCodeLine{342 xbInt16 AddKey( \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulRecNo );}
+\DoxyCodeLine{343 xbIxNode *AllocateIxNode( xbUInt32 ulBufSize = 0, xbInt16 iOption = 0 );}
+\DoxyCodeLine{344 xbInt16 CheckForDupKey( \textcolor{keywordtype}{void} *vpTag );}
+\DoxyCodeLine{345 xbIxNode *CreateIxNode( xbUInt32 ulBufSize );}
+\DoxyCodeLine{346 xbInt16 CreateKey( \textcolor{keywordtype}{void} * vpTag, xbInt16 iOpt );}
+\DoxyCodeLine{347 xbInt16 DeleteFromNode( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npNode, xbInt16 iSlotNo );}
+\DoxyCodeLine{348 xbInt16 DeleteKey( \textcolor{keywordtype}{void} *vpTag );}
+\DoxyCodeLine{349 xbInt16 DeleteTag( \textcolor{keywordtype}{void} *vpTag );}
+\DoxyCodeLine{350 xbInt16 FindKeyForCurRec( \textcolor{keywordtype}{void} *vpTag );}
+\DoxyCodeLine{351 xbInt16 GetKeyTypeN( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
+\DoxyCodeLine{352 xbInt16 GetKeySts( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
+\DoxyCodeLine{353 xbInt16 GetLastKey( xbUInt32 ulNodeNo, \textcolor{keywordtype}{void} *vpTag, xbInt16 iRetrieveSw = 1 );}
+\DoxyCodeLine{354 xbInt16 InsertNodeI( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, xbUInt32 uiPtr );}
+\DoxyCodeLine{355 xbInt16 InsertNodeL( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, \textcolor{keywordtype}{char} * cpKeyBuf, xbUInt32 uiPtr );}
+\DoxyCodeLine{356 xbInt16 KeyExists( \textcolor{keywordtype}{void} *vpTag = NULL );}
+\DoxyCodeLine{357 xbInt16 ReadHeadBlock(xbInt16 iOpt); \textcolor{comment}{// read the header node of the disk NDX file}}
+\DoxyCodeLine{358 \textcolor{comment}{// xbInt16 Reindex( void **vpTag );}}
+\DoxyCodeLine{359 xbInt16 SplitNodeI( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 uiPtr );}
+\DoxyCodeLine{360 xbInt16 SplitNodeL( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, \textcolor{keywordtype}{char} *cpKeyBuf, xbUInt32 uiPtr );}
+\DoxyCodeLine{361 xbInt16 UpdateTagKey( \textcolor{keywordtype}{char} cAction, \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulRecNo = 0 );}
+\DoxyCodeLine{362 xbInt16 WriteHeadBlock( xbInt16 iOption );}
+\DoxyCodeLine{363 }
+\DoxyCodeLine{364 \textcolor{keyword}{private}:}
+\DoxyCodeLine{365 xbInt16 AddKeyNewRoot( xbNdxTag *npTag, xbIxNode *npLeft, xbIxNode *npRight );}
+\DoxyCodeLine{366 \textcolor{keywordtype}{void} AppendNodeChain( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode );}
+\DoxyCodeLine{367 xbInt16 GetDbfPtr( \textcolor{keywordtype}{void} *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 \&ulDbfPtr ) \textcolor{keyword}{const};}
+\DoxyCodeLine{368 xbInt16 GetKeyPtr( \textcolor{keywordtype}{void} *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 \&ulKeyPtr ) \textcolor{keyword}{const};}
+\DoxyCodeLine{369 xbInt16 GetLastKeyForBlockNo( \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulBlockNo, \textcolor{keywordtype}{char} *cpKeyBuf );}
+\DoxyCodeLine{370 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsLeaf( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode ) \textcolor{keyword}{const};}
+\DoxyCodeLine{371 xbInt16 KeySetPosAdd( xbNdxTag *npTag, xbUInt32 ulAddKeyRecNo );}
+\DoxyCodeLine{372 xbInt16 KeySetPosDel( xbNdxTag *npTag );}
+\DoxyCodeLine{373 xbNdxTag *ndxTag;}
+\DoxyCodeLine{374 \};}
+\DoxyCodeLine{375 }
+\DoxyCodeLine{376 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* XB\_NDX\_SUPPORT */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{377 }
+\DoxyCodeLine{378 }
+\DoxyCodeLine{379 \textcolor{preprocessor}{\#ifdef XB\_MDX\_SUPPORT}}
+\DoxyCodeLine{380 \textcolor{comment}{//\#define XB\_MDX\_BLOCK\_SIZE 1024}}
+\DoxyCodeLine{381 }
+\DoxyCodeLine{382 \textcolor{keyword}{struct }XBDLLEXPORT xbMdxTag \{}
+\DoxyCodeLine{383 }
+\DoxyCodeLine{384 \textcolor{comment}{// next 7 fields comprise the tag table entry}}
+\DoxyCodeLine{385 xbUInt32 ulTagHdrPageNo; \textcolor{comment}{// 512 byte page number, NOT block number}}
+\DoxyCodeLine{386 \textcolor{keywordtype}{char} cTagName[11];}
+\DoxyCodeLine{387 \textcolor{keywordtype}{char} cKeyFmt; \textcolor{comment}{// always 0x10 w/ DBase V7}}
+\DoxyCodeLine{388 \textcolor{keywordtype}{char} cLeftChild; \textcolor{comment}{// cFwdTagThread}}
+\DoxyCodeLine{389 \textcolor{keywordtype}{char} cRightChild; \textcolor{comment}{// cFwdTagThread2}}
+\DoxyCodeLine{390 \textcolor{keywordtype}{char} cParent; \textcolor{comment}{// cBwdTagThread}}
+\DoxyCodeLine{391 \textcolor{keywordtype}{char} c2;}
+\DoxyCodeLine{392 \textcolor{keywordtype}{char} cKeyType; \textcolor{comment}{// C,D,N}}
+\DoxyCodeLine{393 }
+\DoxyCodeLine{394 xbUInt32 ulRootPage; \textcolor{comment}{// 512 byte page number, NOT block number}}
+\DoxyCodeLine{395 xbUInt32 ulTagSize; \textcolor{comment}{// Number of 512 byte pages allocated to the tag. Tag size of two is a single 1024 block}}
+\DoxyCodeLine{396 }
+\DoxyCodeLine{397 \textcolor{keywordtype}{char} cKeyFmt2; \textcolor{comment}{// 0x10 -\/ base}}
+\DoxyCodeLine{398 \textcolor{comment}{// 0x08 -\/ descending}}
+\DoxyCodeLine{399 \textcolor{comment}{// 0x40 -\/ unique}}
+\DoxyCodeLine{400 \textcolor{keywordtype}{char} cKeyType2;}
+\DoxyCodeLine{401 \textcolor{comment}{// one unused byte fits here}}
+\DoxyCodeLine{402 }
+\DoxyCodeLine{403 \textcolor{keywordtype}{char} cTag11; \textcolor{comment}{// dbase sets to 0x1B}}
+\DoxyCodeLine{404 xbInt16 iKeyLen;}
+\DoxyCodeLine{405 xbInt16 iKeysPerBlock;}
+\DoxyCodeLine{406 xbInt16 iSecKeyType;}
+\DoxyCodeLine{407 xbInt16 iKeyItemLen; \textcolor{comment}{// iKeyLen + 4}}
+\DoxyCodeLine{408 }
+\DoxyCodeLine{409 \textcolor{keywordtype}{char} cSerialNo; \textcolor{comment}{// Increments +1 for each tag update}}
+\DoxyCodeLine{410 \textcolor{keywordtype}{char} cUnique;}
+\DoxyCodeLine{411 xbString *sKeyExp; \textcolor{comment}{// Key expression}}
+\DoxyCodeLine{412 \textcolor{keywordtype}{char} cHasFilter; \textcolor{comment}{// 0x00 or 0x01}}
+\DoxyCodeLine{413 \textcolor{keywordtype}{char} cHasKeys; \textcolor{comment}{// 0x00 or 0x01}}
+\DoxyCodeLine{414 xbUInt32 ulLeftChild; \textcolor{comment}{// dbase 7 sets this to the root page on tag creation}}
+\DoxyCodeLine{415 xbUInt32 ulRightChild; \textcolor{comment}{// dbase 7 sets this to the root page on tag creation}}
+\DoxyCodeLine{416 }
+\DoxyCodeLine{417 \textcolor{keywordtype}{char} cTagYY;}
+\DoxyCodeLine{418 \textcolor{keywordtype}{char} cTagMM;}
+\DoxyCodeLine{419 \textcolor{keywordtype}{char} cTagDD;}
+\DoxyCodeLine{420 }
+\DoxyCodeLine{421 \textcolor{keywordtype}{char} cKeyFmt3; \textcolor{comment}{// dbase 7 sets this 0x01 if discreet field or 0x00 if calculated or combination field key expression on tag creation}}
+\DoxyCodeLine{422 }
+\DoxyCodeLine{423 xbString *sFiltExp; \textcolor{comment}{// Filter expression}}
+\DoxyCodeLine{424 }
+\DoxyCodeLine{425 time\_t tNodeChainTs;}
+\DoxyCodeLine{426 xbIxNode *npNodeChain;}
+\DoxyCodeLine{427 xbIxNode *npCurNode;}
+\DoxyCodeLine{428 xbExp *exp; \textcolor{comment}{// pointer to expression for expression based tags}}
+\DoxyCodeLine{429 xbExp *filter; \textcolor{comment}{// pointer to expression for index filter}}
+\DoxyCodeLine{430 }
+\DoxyCodeLine{431 \textcolor{keywordtype}{char} *cpKeyBuf; \textcolor{comment}{// key buffer}}
+\DoxyCodeLine{432 \textcolor{keywordtype}{char} *cpKeyBuf2; \textcolor{comment}{// key buffer}}
+\DoxyCodeLine{433 xbString *sTagName; \textcolor{comment}{// string tag name}}
+\DoxyCodeLine{434 }
+\DoxyCodeLine{435 }
+\DoxyCodeLine{436 xbMdxTag *next;}
+\DoxyCodeLine{437 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bFoundSts; \textcolor{comment}{// key found? used to determine if new key should be added in XB\_EMULATE\_DBASE mode in AddKey}}
+\DoxyCodeLine{438 }
+\DoxyCodeLine{439 }
+\DoxyCodeLine{440 xbInt16 iKeySts; \textcolor{comment}{// key updated? set in method CreateKey, checked in AddKey and DeleteKey routines}}
+\DoxyCodeLine{441 \textcolor{comment}{// old key filtered new key filtered iKeySts}}
+\DoxyCodeLine{442 \textcolor{comment}{// Y Y XB\_UPD\_KEY 2 -\/ update key if changed (delete and add)}}
+\DoxyCodeLine{443 \textcolor{comment}{// Y N XB\_DEL\_KEY 3 -\/ delete key}}
+\DoxyCodeLine{444 \textcolor{comment}{// N Y XB\_ADD\_KEY 1 -\/ add key}}
+\DoxyCodeLine{445 \textcolor{comment}{// N N 0 -\/ no update}}
+\DoxyCodeLine{446 }
+\DoxyCodeLine{447 }
+\DoxyCodeLine{448 \};}
+\DoxyCodeLine{449 }
+\DoxyCodeLine{450 }
+\DoxyCodeLine{451 \textcolor{keyword}{class }XBDLLEXPORT xbIxMdx : \textcolor{keyword}{public} xbIx \{}
+\DoxyCodeLine{452 \textcolor{keyword}{public}:}
+\DoxyCodeLine{453 xbIxMdx( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} * d );}
+\DoxyCodeLine{454 \string~xbIxMdx();}
+\DoxyCodeLine{455 \textcolor{keyword}{virtual} xbInt16 CheckTagIntegrity( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOpt );}
+\DoxyCodeLine{456 \textcolor{keyword}{virtual} xbInt16 CreateTag( \textcolor{keyword}{const} xbString \&sName, \textcolor{keyword}{const} xbString \&sKey, \textcolor{keyword}{const} xbString \&sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, \textcolor{keywordtype}{void} **vpTag );}
+\DoxyCodeLine{457 \textcolor{keyword}{virtual} xbInt16 FindKey( \textcolor{keywordtype}{void} *vpTag, \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw );}
+\DoxyCodeLine{458 \textcolor{keyword}{virtual} xbInt16 FindKey( \textcolor{keywordtype}{void} *vpTag, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dKey, xbInt16 iRetrieveSw );}
+\DoxyCodeLine{459 \textcolor{keyword}{virtual} xbInt16 GetFirstKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 lRetrieveSw );}
+\DoxyCodeLine{460 \textcolor{keyword}{virtual} xbString \&GetKeyExpression( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
+\DoxyCodeLine{461 \textcolor{keyword}{virtual} xbString \&GetKeyFilter( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
+\DoxyCodeLine{462 \textcolor{keyword}{virtual} \textcolor{keywordtype}{char} GetKeyType( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
+\DoxyCodeLine{463 \textcolor{keyword}{virtual} xbInt16 GetLastKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 lRetrieveSw );}
+\DoxyCodeLine{464 \textcolor{keyword}{virtual} xbInt16 GetNextKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 lRetrieveSw );}
+\DoxyCodeLine{465 \textcolor{keyword}{virtual} xbInt16 GetPrevKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 lRetrieveSw );}
+\DoxyCodeLine{466 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetReuseEmptyNodesSw() \textcolor{keyword}{const};}
+\DoxyCodeLine{467 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetSortOrder( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
+\DoxyCodeLine{468 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} *GetTag( xbInt16 iTagNo ) \textcolor{keyword}{const};}
+\DoxyCodeLine{469 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} *GetTag( xbString \&sTagName ) \textcolor{keyword}{const};}
+\DoxyCodeLine{470 \textcolor{keyword}{virtual} xbInt16 GetTagCount() \textcolor{keyword}{const};}
+\DoxyCodeLine{471 }
+\DoxyCodeLine{472 \textcolor{keyword}{virtual} xbString \&GetTagName( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
+\DoxyCodeLine{473 \textcolor{keyword}{virtual} \textcolor{keyword}{const} \textcolor{keywordtype}{char} * GetTagName( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOpt ) \textcolor{keyword}{const};}
+\DoxyCodeLine{474 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} GetTagName( \textcolor{keywordtype}{void} *vpTag, xbString \&sTagName );}
+\DoxyCodeLine{475 }
+\DoxyCodeLine{476 \textcolor{keyword}{virtual} xbInt16 GetUnique( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
+\DoxyCodeLine{477 \textcolor{keyword}{virtual} xbInt16 SetCurTag( xbInt16 iTagNo );}
+\DoxyCodeLine{478 \textcolor{keyword}{virtual} xbInt16 SetCurTag( xbString \&sTagName );}
+\DoxyCodeLine{479 \textcolor{keywordtype}{void} SetReuseEmptyNodesSw( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bReuse );}
+\DoxyCodeLine{480 }
+\DoxyCodeLine{481 \textcolor{keywordtype}{void} TestStub( \textcolor{keywordtype}{char} *s, \textcolor{keywordtype}{void} *vpTag );}
+\DoxyCodeLine{482 }
+\DoxyCodeLine{483 }
+\DoxyCodeLine{484 \textcolor{keyword}{virtual} xbInt16 Reindex( \textcolor{keywordtype}{void} **vpTag );}
+\DoxyCodeLine{485 }
+\DoxyCodeLine{486 }
+\DoxyCodeLine{487 \textcolor{keyword}{protected}:}
+\DoxyCodeLine{488 \textcolor{keyword}{friend} \textcolor{keyword}{class }\mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}};}
+\DoxyCodeLine{489 }
+\DoxyCodeLine{490 xbInt16 AddKey( \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulRecNo );}
+\DoxyCodeLine{491 xbIxNode *AllocateIxNode( xbMdxTag * mpTag, xbUInt32 ulBufSize, xbUInt32 ulBlock2 );}
+\DoxyCodeLine{492 \textcolor{keywordtype}{void} CalcBtreePointers();}
+\DoxyCodeLine{493 \textcolor{keywordtype}{char} CalcTagKeyFmt( xbExp \&exp );}
+\DoxyCodeLine{494 }
+\DoxyCodeLine{495 xbInt16 CheckForDupKey( \textcolor{keywordtype}{void} *vpTag );}
+\DoxyCodeLine{496 \textcolor{keyword}{virtual} xbInt16 Close();}
+\DoxyCodeLine{497 xbInt16 CreateKey( \textcolor{keywordtype}{void} * vpTag, xbInt16 iOpt );}
+\DoxyCodeLine{498 xbInt16 DeleteFromNode( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npNode, xbInt16 iSlotNo );}
+\DoxyCodeLine{499 xbInt16 DeleteKey( \textcolor{keywordtype}{void} *vpTag );}
+\DoxyCodeLine{500 }
+\DoxyCodeLine{501 \textcolor{keyword}{virtual} xbInt16 DeleteTag( \textcolor{keywordtype}{void} *vpTag );}
+\DoxyCodeLine{502 }
+\DoxyCodeLine{503 xbInt16 FindKeyForCurRec( \textcolor{keywordtype}{void} *vpTag );}
+\DoxyCodeLine{504 xbInt16 GetKeySts( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
+\DoxyCodeLine{505 xbInt16 GetLastKey( xbUInt32 ulBlockNo, \textcolor{keywordtype}{void} *vpTag, xbInt16 lRetrieveSw );}
+\DoxyCodeLine{506 \textcolor{keywordtype}{void} *GetTagTblPtr() \textcolor{keyword}{const};}
+\DoxyCodeLine{507 }
+\DoxyCodeLine{508 xbInt16 HarvestTagNodes( xbMdxTag *mpTag, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bRecycleRoot = \mbox{\hyperlink{xbtypes_8h_adc4b6ca5ad299f63675136d9e03938cc}{xbFalse}} );}
+\DoxyCodeLine{509 \textcolor{keywordtype}{void} Init( xbInt16 iOpt = 0 );}
+\DoxyCodeLine{510 xbInt16 InsertNodeI( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode, xbInt16 iSlotNo, xbUInt32 uiPtr );}
+\DoxyCodeLine{511 xbInt16 InsertNodeL( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode, xbInt16 iSlotNo, \textcolor{keywordtype}{char} *cpKeyBuf, xbUInt32 uiPtr );}
+\DoxyCodeLine{512 xbInt16 KeyExists( \textcolor{keywordtype}{void} * );}
+\DoxyCodeLine{513 xbInt16 LoadTagTable();}
+\DoxyCodeLine{514 xbInt16 ReadHeadBlock(xbInt16 iOpt); \textcolor{comment}{// read the header node of the disk file}}
+\DoxyCodeLine{515 \textcolor{comment}{//virtual xbInt16 Reindex( void **vpTag );}}
+\DoxyCodeLine{516 xbInt16 SplitNodeI( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 uiPtr );}
+\DoxyCodeLine{517 xbInt16 SplitNodeL( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, \textcolor{keywordtype}{char} *cpKeyBuf, xbUInt32 uiPtr );}
+\DoxyCodeLine{518 xbInt16 UpdateTagKey( \textcolor{keywordtype}{char} cAction, \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulRecNo = 0 );}
+\DoxyCodeLine{519 xbInt16 WriteHeadBlock( xbInt16 iOption );}
+\DoxyCodeLine{520 }
+\DoxyCodeLine{521 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
+\DoxyCodeLine{522 xbInt16 DumpTagBlocks( xbInt16 iOpt = 1, \textcolor{keywordtype}{void} *vpTag = NULL );}
+\DoxyCodeLine{523 xbInt16 DumpFreeBlocks( xbInt16 iOpt = 0 );}
+\DoxyCodeLine{524 xbInt16 DumpHeader( xbInt16 iOpt = 0, xbInt16 iFmtOpt = 0 );}
+\DoxyCodeLine{525 xbInt16 DumpIxForTag( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOutputOpt );}
+\DoxyCodeLine{526 \textcolor{keywordtype}{void} DumpIxNodeChain( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOutputOpt ) \textcolor{keyword}{const};}
+\DoxyCodeLine{527 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{528 }
+\DoxyCodeLine{529 }
+\DoxyCodeLine{530 xbMdxTag *mdxTagTbl;}
+\DoxyCodeLine{531 }
+\DoxyCodeLine{532 \textcolor{comment}{// MDX File Header Fields}}
+\DoxyCodeLine{533 \textcolor{keywordtype}{char} cVersion;}
+\DoxyCodeLine{534 \textcolor{keywordtype}{char} cCreateYY;}
+\DoxyCodeLine{535 \textcolor{keywordtype}{char} cCreateMM;}
+\DoxyCodeLine{536 \textcolor{keywordtype}{char} cCreateDD;}
+\DoxyCodeLine{537 xbString sFileName;}
+\DoxyCodeLine{538 xbInt16 iBlockFactor; \textcolor{comment}{// 1-\/32 \#of 512 byte segments in a block}}
+\DoxyCodeLine{539 }
+\DoxyCodeLine{540 \textcolor{comment}{// use file version}}
+\DoxyCodeLine{541 \textcolor{comment}{// xbInt16 iBlockSize; // Stored at the xbFile level}}
+\DoxyCodeLine{542 }
+\DoxyCodeLine{543 \textcolor{keywordtype}{char} cProdIxFlag;}
+\DoxyCodeLine{544 \textcolor{keywordtype}{char} cTagEntryCnt;}
+\DoxyCodeLine{545 xbInt16 iTagLen;}
+\DoxyCodeLine{546 xbInt16 iTagUseCnt;}
+\DoxyCodeLine{547 \textcolor{keywordtype}{char} cNextTag; \textcolor{comment}{// byte 28 +1}}
+\DoxyCodeLine{548 \textcolor{keywordtype}{char} c1B; \textcolor{comment}{// always 0x1B}}
+\DoxyCodeLine{549 xbUInt32 ulPageCnt; \textcolor{comment}{// number of 512 byte pages in the mdx file}}
+\DoxyCodeLine{550 xbUInt32 ulFirstFreePage; \textcolor{comment}{// page number corresponding to the next free block}}
+\DoxyCodeLine{551 xbUInt32 ulNoOfBlockAvail; \textcolor{comment}{// might be improperly named?? not sure how it is used}}
+\DoxyCodeLine{552 \textcolor{keywordtype}{char} cUpdateYY;}
+\DoxyCodeLine{553 \textcolor{keywordtype}{char} cUpdateMM;}
+\DoxyCodeLine{554 \textcolor{keywordtype}{char} cUpdateDD;}
+\DoxyCodeLine{555 \textcolor{comment}{// end of MDX Header fields}}
+\DoxyCodeLine{556 }
+\DoxyCodeLine{557 }
+\DoxyCodeLine{558 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bReuseEmptyNodes; \textcolor{comment}{// Reuese empty MDX nodes when all keys deleted?}}
+\DoxyCodeLine{559 \textcolor{comment}{// DBase 7.x and MS ODBC drivers do not reuse empty nodes, leaves them stranded in the file}}
+\DoxyCodeLine{560 \textcolor{comment}{// Codebase 6.x reuses empty nodes.}}
+\DoxyCodeLine{561 \textcolor{comment}{// Setting this to True will reuse empty nodes in the same manner Codebase 6.x reuses them.}}
+\DoxyCodeLine{562 }
+\DoxyCodeLine{563 }
+\DoxyCodeLine{564 \textcolor{keyword}{private}:}
+\DoxyCodeLine{565 xbInt16 AddKeyNewRoot( xbMdxTag *npTag, xbIxNode *npLeft, xbIxNode *npRight );}
+\DoxyCodeLine{566 \textcolor{keywordtype}{void} AppendNodeChain( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode );}
+\DoxyCodeLine{567 xbUInt32 BlockToPage( xbUInt32 ulBlockNo );}
+\DoxyCodeLine{568 xbMdxTag *ClearTagTable();}
+\DoxyCodeLine{569 xbInt16 DumpBlock( xbInt16 iOpt, xbUInt32 ulBlockNo, xbMdxTag * mpTag );}
+\DoxyCodeLine{570 xbInt16 GetDbfPtr( \textcolor{keywordtype}{void} *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 \&ulDbfPtr ) \textcolor{keyword}{const};}
+\DoxyCodeLine{571 xbInt16 GetKeyPtr( \textcolor{keywordtype}{void} *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 \&ulKeyPtr ) \textcolor{keyword}{const};}
+\DoxyCodeLine{572 xbInt16 GetLastKeyForBlockNo( \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulBlockNo, \textcolor{keywordtype}{char} *cpKeyBuf );}
+\DoxyCodeLine{573 xbInt16 HarvestEmptyNode( xbMdxTag *mpTag, xbIxNode *npNode, xbInt16 iOpt, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bHarvestRoot = \mbox{\hyperlink{xbtypes_8h_adc4b6ca5ad299f63675136d9e03938cc}{xbFalse}} );}
+\DoxyCodeLine{574 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsLeaf( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode ) \textcolor{keyword}{const};}
+\DoxyCodeLine{575 xbInt16 KeySetPosAdd( xbMdxTag *mpTag, xbUInt32 ulAddKeyRecNo );}
+\DoxyCodeLine{576 xbInt16 KeySetPosDel( xbMdxTag *mpTag );}
+\DoxyCodeLine{577 xbInt16 LoadTagDetail( xbInt16 iOption, xbMdxTag *tte );}
+\DoxyCodeLine{578 xbUInt32 PageToBlock( xbUInt32 ulPageNo );}
+\DoxyCodeLine{579 xbInt16 TagSerialNo( xbInt16 iOption, xbMdxTag *mpTag );}
+\DoxyCodeLine{580 xbInt16 UpdateTagSize( xbMdxTag *mpTag, xbUInt32 ulTagSz );}
+\DoxyCodeLine{581 }
+\DoxyCodeLine{582 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
+\DoxyCodeLine{583 xbInt16 PrintKey( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode, xbInt16 iKeyNo, xbInt16 iDepth, \textcolor{keywordtype}{char} cType, xbInt16 iOutputOpt );}
+\DoxyCodeLine{584 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{585 }
+\DoxyCodeLine{586 }
+\DoxyCodeLine{587 \};}
+\DoxyCodeLine{588 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{/* XB\_MDX\_SUPPORT */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{589 }
+\DoxyCodeLine{590 }
+\DoxyCodeLine{591 \textcolor{preprocessor}{\#ifdef XB\_TDX\_SUPPORT}}
+\DoxyCodeLine{592 }
+\DoxyCodeLine{593 \textcolor{keyword}{class }XBDLLEXPORT xbIxTdx : \textcolor{keyword}{public} xbIxMdx \{}
+\DoxyCodeLine{594 \textcolor{keyword}{public}:}
+\DoxyCodeLine{595 xbIxTdx( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} * d );}
+\DoxyCodeLine{596 \string~xbIxTdx();}
+\DoxyCodeLine{597 }
+\DoxyCodeLine{598 xbInt16 CreateTag( \textcolor{keyword}{const} xbString \&sName, \textcolor{keyword}{const} xbString \&sKey, \textcolor{keyword}{const} xbString \&sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, \textcolor{keywordtype}{void} **vpTag );}
+\DoxyCodeLine{599 }
+\DoxyCodeLine{600 \textcolor{keyword}{protected}:}
+\DoxyCodeLine{601 \textcolor{keyword}{friend} \textcolor{keyword}{class }\mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}};}
+\DoxyCodeLine{602 xbInt16 Close();}
+\DoxyCodeLine{603 xbInt16 DeleteTag( \textcolor{keywordtype}{void} *vpTag );}
+\DoxyCodeLine{604 }
+\DoxyCodeLine{605 \textcolor{keyword}{private}:}
+\DoxyCodeLine{606 \};}
+\DoxyCodeLine{607 }
+\DoxyCodeLine{608 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* XB\_TDX\_SUPPORT */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{609 }
+\DoxyCodeLine{610 }
+\DoxyCodeLine{611 \} \textcolor{comment}{/* namespace xb */}}
+\DoxyCodeLine{612 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{/* XB\_INDEX\_SUPPORT */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{613 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_INDEX\_H\_\_ */}\textcolor{preprocessor}{}}
+
+\end{DoxyCode}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbinsert_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbinsert_8cpp.tex
new file mode 100644
index 0000000..89624aa
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbinsert_8cpp.tex
@@ -0,0 +1,3 @@
+\hypertarget{xbinsert_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/sql/xbinsert.cpp File Reference}
+\label{xbinsert_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbinsert.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbinsert.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbixbase_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbixbase_8cpp.tex
new file mode 100644
index 0000000..ea21642
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbixbase_8cpp.tex
@@ -0,0 +1,3 @@
+\hypertarget{xbixbase_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbixbase.cpp File Reference}
+\label{xbixbase_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbixbase.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbixbase.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbixmdx_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbixmdx_8cpp.tex
new file mode 100644
index 0000000..cc0f82b
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbixmdx_8cpp.tex
@@ -0,0 +1,3 @@
+\hypertarget{xbixmdx_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbixmdx.cpp File Reference}
+\label{xbixmdx_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbixmdx.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbixmdx.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbixndx_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbixndx_8cpp.tex
new file mode 100644
index 0000000..a866f1e
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbixndx_8cpp.tex
@@ -0,0 +1,3 @@
+\hypertarget{xbixndx_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbixndx.cpp File Reference}
+\label{xbixndx_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbixndx.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbixndx.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbixtdx_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbixtdx_8cpp.tex
new file mode 100644
index 0000000..403fb98
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbixtdx_8cpp.tex
@@ -0,0 +1,3 @@
+\hypertarget{xbixtdx_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbixtdx.cpp File Reference}
+\label{xbixtdx_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbixtdx.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbixtdx.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xblnklst_8h.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xblnklst_8h.tex
new file mode 100644
index 0000000..24c4c5f
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xblnklst_8h.tex
@@ -0,0 +1,2 @@
+\hypertarget{xblnklst_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xblnklst.h File Reference}
+\label{xblnklst_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xblnklst.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xblnklst.h}}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xblnklst_8h_source.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xblnklst_8h_source.tex
new file mode 100644
index 0000000..7afdfce
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xblnklst_8h_source.tex
@@ -0,0 +1,263 @@
+\hypertarget{xblnklst_8h_source}{}\doxysection{xblnklst.\+h}
+\label{xblnklst_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xblnklst.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xblnklst.h}}
+\mbox{\hyperlink{xblnklst_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{comment}{/* xblnklst.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\_XBLNKLST\_H\_\_}}
+\DoxyCodeLine{18 \textcolor{preprocessor}{\#define \_\_XB\_XBLNKLST\_H\_\_}}
+\DoxyCodeLine{19 }
+\DoxyCodeLine{20 \textcolor{preprocessor}{\#ifdef XB\_LINKLIST\_SUPPORT}}
+\DoxyCodeLine{21 }
+\DoxyCodeLine{22 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
+\DoxyCodeLine{23 }
+\DoxyCodeLine{24 }
+\DoxyCodeLine{25 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{26 \textcolor{keyword}{class }XBDLLEXPORT xbLinkList \{}
+\DoxyCodeLine{27 \textcolor{keyword}{public}:}
+\DoxyCodeLine{28 xbLinkList();}
+\DoxyCodeLine{29 \string~xbLinkList();}
+\DoxyCodeLine{30 }
+\DoxyCodeLine{31 xbLinkListNode<xbNodeType> *GetHeadNode() \textcolor{keyword}{const};}
+\DoxyCodeLine{32 xbLinkListNode<xbNodeType> *GetEndNode() \textcolor{keyword}{const};}
+\DoxyCodeLine{33 xbLinkListNode<xbNodeType> *GetNodeForNo( xbUInt32 ulNodeNo ) \textcolor{keyword}{const};}
+\DoxyCodeLine{34 }
+\DoxyCodeLine{35 \textcolor{keywordtype}{void} Clear();}
+\DoxyCodeLine{36 xbUInt32 GetNodeCnt () \textcolor{keyword}{const};}
+\DoxyCodeLine{37 xbInt16 InsertAtEnd ( \textcolor{keyword}{const} xbNodeType \&xbLLN );}
+\DoxyCodeLine{38 xbInt16 InsertAtFront ( \textcolor{keyword}{const} xbNodeType \&xbLLN );}
+\DoxyCodeLine{39 xbInt16 RemoveByVal ( \textcolor{keyword}{const} xbNodeType \&xbLLN );}
+\DoxyCodeLine{40 xbInt16 RemoveFromEnd ();}
+\DoxyCodeLine{41 xbInt16 RemoveFromEnd ( xbNodeType \&xbLLN );}
+\DoxyCodeLine{42 xbInt16 RemoveFromFront( xbNodeType \&xbLLN );}
+\DoxyCodeLine{43 xbInt16 SearchFor ( \textcolor{keyword}{const} xbNodeType \&xbLLN );}
+\DoxyCodeLine{44 }
+\DoxyCodeLine{45 \textcolor{keyword}{private}:}
+\DoxyCodeLine{46 xbUInt32 ulNodeCnt;}
+\DoxyCodeLine{47 xbLinkListNode<xbNodeType> *llStartPtr;}
+\DoxyCodeLine{48 xbLinkListNode<xbNodeType> *llEndPtr;}
+\DoxyCodeLine{49 \};}
+\DoxyCodeLine{50 }
+\DoxyCodeLine{51 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{52 xbLinkList<xbNodeType>::xbLinkList()\{}
+\DoxyCodeLine{53 ulNodeCnt = 0;}
+\DoxyCodeLine{54 llStartPtr = NULL;}
+\DoxyCodeLine{55 llEndPtr = NULL;}
+\DoxyCodeLine{56 \}}
+\DoxyCodeLine{57 }
+\DoxyCodeLine{58 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{59 xbLinkList<xbNodeType>::\string~xbLinkList()\{}
+\DoxyCodeLine{60 Clear();}
+\DoxyCodeLine{61 \}}
+\DoxyCodeLine{62 }
+\DoxyCodeLine{63 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{64 \textcolor{keywordtype}{void} xbLinkList<xbNodeType>::Clear()\{}
+\DoxyCodeLine{65 xbLinkListNode<xbNodeType> *cPtr = llStartPtr, *tPtr;}
+\DoxyCodeLine{66 \textcolor{keywordflow}{for}( xbUInt32 i = 0; i < ulNodeCnt; i++ )\{}
+\DoxyCodeLine{67 tPtr = cPtr;}
+\DoxyCodeLine{68 cPtr = cPtr-\/>GetNextNode();}
+\DoxyCodeLine{69 \textcolor{keyword}{delete} tPtr;}
+\DoxyCodeLine{70 \}}
+\DoxyCodeLine{71 ulNodeCnt = 0;}
+\DoxyCodeLine{72 llStartPtr = NULL;}
+\DoxyCodeLine{73 llEndPtr = NULL;}
+\DoxyCodeLine{74 \}}
+\DoxyCodeLine{75 }
+\DoxyCodeLine{76 }
+\DoxyCodeLine{77 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{78 xbLinkListNode<xbNodeType> *xbLinkList<xbNodeType>::GetHeadNode()\textcolor{keyword}{ const}\{}
+\DoxyCodeLine{79 \textcolor{keywordflow}{return} llStartPtr;}
+\DoxyCodeLine{80 \}}
+\DoxyCodeLine{81 }
+\DoxyCodeLine{82 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{83 xbLinkListNode<xbNodeType> *xbLinkList<xbNodeType>::GetEndNode()\textcolor{keyword}{ const}\{}
+\DoxyCodeLine{84 \textcolor{keywordflow}{return} llEndPtr;}
+\DoxyCodeLine{85 \}}
+\DoxyCodeLine{86 }
+\DoxyCodeLine{87 }
+\DoxyCodeLine{88 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{89 xbLinkListNode<xbNodeType> *xbLinkList<xbNodeType>::GetNodeForNo( xbUInt32 ulNo )\textcolor{keyword}{ const}\{}
+\DoxyCodeLine{90 }
+\DoxyCodeLine{91 xbLinkListNode<xbNodeType> *cPtr = llStartPtr;}
+\DoxyCodeLine{92 xbUInt32 i;}
+\DoxyCodeLine{93 \textcolor{keywordflow}{for}( i = 0; i < ulNo \&\& i < ulNodeCnt; i++ )}
+\DoxyCodeLine{94 cPtr = cPtr-\/>GetNextNode();}
+\DoxyCodeLine{95 }
+\DoxyCodeLine{96 \textcolor{keywordflow}{if}( i == ulNo )}
+\DoxyCodeLine{97 \textcolor{keywordflow}{return} cPtr;}
+\DoxyCodeLine{98 \textcolor{keywordflow}{else} }
+\DoxyCodeLine{99 \textcolor{keywordflow}{return} 0;}
+\DoxyCodeLine{100 \}}
+\DoxyCodeLine{101 }
+\DoxyCodeLine{102 }
+\DoxyCodeLine{103 }
+\DoxyCodeLine{104 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{105 xbUInt32 xbLinkList<xbNodeType>::GetNodeCnt()\textcolor{keyword}{ const}\{}
+\DoxyCodeLine{106 \textcolor{keywordflow}{return} ulNodeCnt;}
+\DoxyCodeLine{107 \}}
+\DoxyCodeLine{108 }
+\DoxyCodeLine{109 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{110 xbInt16 xbLinkList<xbNodeType>::InsertAtFront( \textcolor{keyword}{const} xbNodeType \& ntKey )\{}
+\DoxyCodeLine{111 }
+\DoxyCodeLine{112 xbLinkListNode<xbNodeType> *p = \textcolor{keyword}{new} xbLinkListNode<xbNodeType>( ntKey );}
+\DoxyCodeLine{113 \textcolor{keywordflow}{if}( p == 0 )}
+\DoxyCodeLine{114 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ae687fc7d872ba0475a8477e4447f9b54}{XB\_NO\_MEMORY}};}
+\DoxyCodeLine{115 }
+\DoxyCodeLine{116 \textcolor{keywordflow}{if}( ulNodeCnt > 0 )\{}
+\DoxyCodeLine{117 llStartPtr-\/>SetPrevNode( p );}
+\DoxyCodeLine{118 p-\/>SetNextNode( llStartPtr );}
+\DoxyCodeLine{119 \} \textcolor{keywordflow}{else} \{}
+\DoxyCodeLine{120 llEndPtr = p;}
+\DoxyCodeLine{121 \}}
+\DoxyCodeLine{122 }
+\DoxyCodeLine{123 llStartPtr = p;}
+\DoxyCodeLine{124 ulNodeCnt++;}
+\DoxyCodeLine{125 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}{XB\_NO\_ERROR}};}
+\DoxyCodeLine{126 \}}
+\DoxyCodeLine{127 }
+\DoxyCodeLine{128 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{129 xbInt16 xbLinkList<xbNodeType>::InsertAtEnd( \textcolor{keyword}{const} xbNodeType \& ntKey )\{}
+\DoxyCodeLine{130 }
+\DoxyCodeLine{131 xbLinkListNode<xbNodeType> *p = \textcolor{keyword}{new} xbLinkListNode<xbNodeType>( ntKey );}
+\DoxyCodeLine{132 \textcolor{keywordflow}{if}( p == 0 )}
+\DoxyCodeLine{133 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ae687fc7d872ba0475a8477e4447f9b54}{XB\_NO\_MEMORY}};}
+\DoxyCodeLine{134 }
+\DoxyCodeLine{135 \textcolor{keywordflow}{if}( ulNodeCnt > 0 )\{}
+\DoxyCodeLine{136 llEndPtr-\/>SetNextNode( p );}
+\DoxyCodeLine{137 p-\/>SetPrevNode( llEndPtr );}
+\DoxyCodeLine{138 llEndPtr = p;}
+\DoxyCodeLine{139 \} \textcolor{keywordflow}{else} \{}
+\DoxyCodeLine{140 llStartPtr = p;}
+\DoxyCodeLine{141 \}}
+\DoxyCodeLine{142 }
+\DoxyCodeLine{143 llEndPtr = p;}
+\DoxyCodeLine{144 ulNodeCnt++;}
+\DoxyCodeLine{145 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}{XB\_NO\_ERROR}};}
+\DoxyCodeLine{146 \}}
+\DoxyCodeLine{147 }
+\DoxyCodeLine{148 }
+\DoxyCodeLine{149 }
+\DoxyCodeLine{150 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{151 xbInt16 xbLinkList<xbNodeType>::RemoveByVal( \textcolor{keyword}{const} xbNodeType \& ntKey )\{}
+\DoxyCodeLine{152 \textcolor{comment}{// Remove the first instance of ntKey from the node chain}}
+\DoxyCodeLine{153 xbLinkListNode<xbNodeType> *currPtr = llStartPtr;}
+\DoxyCodeLine{154 xbLinkListNode<xbNodeType> *prevPtr = NULL;}
+\DoxyCodeLine{155 }
+\DoxyCodeLine{156 \textcolor{keywordflow}{for}( xbUInt32 i = 0; i < ulNodeCnt; i++ )\{}
+\DoxyCodeLine{157 \textcolor{keywordflow}{if}( currPtr-\/>GetKey() == ntKey )\{}
+\DoxyCodeLine{158 \textcolor{keywordflow}{if}( prevPtr == NULL )\{ \textcolor{comment}{//then this is the first node}}
+\DoxyCodeLine{159 llStartPtr = currPtr-\/>GetNextNode();}
+\DoxyCodeLine{160 \textcolor{keywordflow}{if}( llStartPtr ) \textcolor{comment}{// if more than one link in the linked list}}
+\DoxyCodeLine{161 llStartPtr-\/>SetPrevNode( NULL );}
+\DoxyCodeLine{162 \textcolor{keyword}{delete} currPtr;}
+\DoxyCodeLine{163 ulNodeCnt-\/-\/;}
+\DoxyCodeLine{164 \textcolor{keywordflow}{return} i + 1;}
+\DoxyCodeLine{165 \}}
+\DoxyCodeLine{166 \textcolor{keywordflow}{else} \{}
+\DoxyCodeLine{167 prevPtr-\/>SetNextNode( currPtr-\/>GetNextNode());}
+\DoxyCodeLine{168 \textcolor{keywordflow}{if}( currPtr-\/>GetNextNode())}
+\DoxyCodeLine{169 currPtr-\/>GetNextNode()-\/>SetPrevNode( prevPtr );}
+\DoxyCodeLine{170 \textcolor{keyword}{delete} currPtr;}
+\DoxyCodeLine{171 ulNodeCnt-\/-\/;}
+\DoxyCodeLine{172 \textcolor{keywordflow}{return} i + 1;}
+\DoxyCodeLine{173 \}}
+\DoxyCodeLine{174 \}}
+\DoxyCodeLine{175 prevPtr = currPtr;}
+\DoxyCodeLine{176 currPtr = currPtr-\/>GetNextNode();}
+\DoxyCodeLine{177 \}}
+\DoxyCodeLine{178 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac2606659a54111334f5b02861e533700}{XB\_NOT\_FOUND}};}
+\DoxyCodeLine{179 \}}
+\DoxyCodeLine{180 }
+\DoxyCodeLine{181 }
+\DoxyCodeLine{182 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{183 xbInt16 xbLinkList<xbNodeType>::RemoveFromFront( xbNodeType \& ntKey )\{}
+\DoxyCodeLine{184 }
+\DoxyCodeLine{185 \textcolor{keywordflow}{if}( ulNodeCnt <= 0 )}
+\DoxyCodeLine{186 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_a13e6876470bd34c8c4e5533f115e04eb}{XB\_INVALID\_NODELINK}};}
+\DoxyCodeLine{187 xbLinkListNode<xbNodeType> *p = llStartPtr;}
+\DoxyCodeLine{188 llStartPtr = p-\/>GetNextNode();}
+\DoxyCodeLine{189 \textcolor{keywordflow}{if}( llStartPtr )}
+\DoxyCodeLine{190 llStartPtr-\/>SetPrevNode( NULL );}
+\DoxyCodeLine{191 ntKey = p-\/>GetKey();}
+\DoxyCodeLine{192 \textcolor{keyword}{delete} p;}
+\DoxyCodeLine{193 ulNodeCnt-\/-\/;}
+\DoxyCodeLine{194 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}{XB\_NO\_ERROR}};}
+\DoxyCodeLine{195 \}}
+\DoxyCodeLine{196 }
+\DoxyCodeLine{197 }
+\DoxyCodeLine{198 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{199 xbInt16 xbLinkList<xbNodeType>::RemoveFromEnd( xbNodeType \& ntKey )\{}
+\DoxyCodeLine{200 }
+\DoxyCodeLine{201 \textcolor{keywordflow}{if}( ulNodeCnt <= 0 )}
+\DoxyCodeLine{202 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_a13e6876470bd34c8c4e5533f115e04eb}{XB\_INVALID\_NODELINK}};}
+\DoxyCodeLine{203 xbLinkListNode<xbNodeType> *p = llEndPtr;}
+\DoxyCodeLine{204 \textcolor{keywordflow}{if}( p-\/>GetPrevNode())\{}
+\DoxyCodeLine{205 llEndPtr = p-\/>GetPrevNode();}
+\DoxyCodeLine{206 llEndPtr-\/>SetNextNode( NULL );}
+\DoxyCodeLine{207 \} \textcolor{keywordflow}{else} \{}
+\DoxyCodeLine{208 \textcolor{comment}{// there are no more nodes}}
+\DoxyCodeLine{209 llStartPtr = NULL;}
+\DoxyCodeLine{210 llEndPtr = NULL;}
+\DoxyCodeLine{211 \}}
+\DoxyCodeLine{212 ntKey = p-\/>GetKey();}
+\DoxyCodeLine{213 \textcolor{keyword}{delete} p;}
+\DoxyCodeLine{214 ulNodeCnt-\/-\/;}
+\DoxyCodeLine{215 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}{XB\_NO\_ERROR}};}
+\DoxyCodeLine{216 \}}
+\DoxyCodeLine{217 }
+\DoxyCodeLine{218 }
+\DoxyCodeLine{219 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{220 xbInt16 xbLinkList<xbNodeType>::RemoveFromEnd()\{}
+\DoxyCodeLine{221 }
+\DoxyCodeLine{222 \textcolor{keywordflow}{if}( ulNodeCnt <= 0 )}
+\DoxyCodeLine{223 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_a13e6876470bd34c8c4e5533f115e04eb}{XB\_INVALID\_NODELINK}};}
+\DoxyCodeLine{224 xbLinkListNode<xbNodeType> *p = llEndPtr;}
+\DoxyCodeLine{225 \textcolor{keywordflow}{if}( p-\/>GetPrevNode())\{}
+\DoxyCodeLine{226 llEndPtr = p-\/>GetPrevNode();}
+\DoxyCodeLine{227 llEndPtr-\/>SetNextNode( NULL );}
+\DoxyCodeLine{228 \} \textcolor{keywordflow}{else} \{}
+\DoxyCodeLine{229 \textcolor{comment}{// there are no more nodes}}
+\DoxyCodeLine{230 llStartPtr = NULL;}
+\DoxyCodeLine{231 llEndPtr = NULL;}
+\DoxyCodeLine{232 \}}
+\DoxyCodeLine{233 \textcolor{keyword}{delete} p-\/>GetKey();}
+\DoxyCodeLine{234 \textcolor{keyword}{delete} p;}
+\DoxyCodeLine{235 ulNodeCnt-\/-\/;}
+\DoxyCodeLine{236 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}{XB\_NO\_ERROR}};}
+\DoxyCodeLine{237 \}}
+\DoxyCodeLine{238 }
+\DoxyCodeLine{239 }
+\DoxyCodeLine{240 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{241 xbInt16 xbLinkList<xbNodeType>::SearchFor( \textcolor{keyword}{const} xbNodeType \& ntKey )\{}
+\DoxyCodeLine{242 }
+\DoxyCodeLine{243 xbLinkListNode<xbNodeType> *cPtr = llStartPtr;}
+\DoxyCodeLine{244 \textcolor{keywordflow}{for}( xbUInt32 i = 0; i < ulNodeCnt; i++ )\{}
+\DoxyCodeLine{245 \textcolor{keywordflow}{if}( cPtr-\/>GetKey() == ntKey )}
+\DoxyCodeLine{246 \textcolor{keywordflow}{return} i+1;}
+\DoxyCodeLine{247 cPtr = cPtr-\/>GetNextNode();}
+\DoxyCodeLine{248 \}}
+\DoxyCodeLine{249 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}{XB\_NO\_ERROR}};}
+\DoxyCodeLine{250 }
+\DoxyCodeLine{251 \}}
+\DoxyCodeLine{252 \} \textcolor{comment}{// namespace}}
+\DoxyCodeLine{253 }
+\DoxyCodeLine{254 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_LINKLIST\_SUPPORT}}
+\DoxyCodeLine{255 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_XBLNKLST\_H\_\_}}
+\DoxyCodeLine{256 }
+\DoxyCodeLine{257 }
+
+\end{DoxyCode}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xblnklstord_8h.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xblnklstord_8h.tex
new file mode 100644
index 0000000..a5a3847
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xblnklstord_8h.tex
@@ -0,0 +1,2 @@
+\hypertarget{xblnklstord_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xblnklstord.h File Reference}
+\label{xblnklstord_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xblnklstord.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xblnklstord.h}}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xblnklstord_8h_source.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xblnklstord_8h_source.tex
new file mode 100644
index 0000000..ab66e9c
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xblnklstord_8h_source.tex
@@ -0,0 +1,373 @@
+\hypertarget{xblnklstord_8h_source}{}\doxysection{xblnklstord.\+h}
+\label{xblnklstord_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xblnklstord.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xblnklstord.h}}
+\mbox{\hyperlink{xblnklstord_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{comment}{/* xblnklstord.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,2019,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{comment}{// Ordered link list}}
+\DoxyCodeLine{18 }
+\DoxyCodeLine{19 }
+\DoxyCodeLine{20 }
+\DoxyCodeLine{21 \textcolor{preprocessor}{\#ifndef \_\_XB\_XBLNKLSTORD\_H\_\_}}
+\DoxyCodeLine{22 \textcolor{preprocessor}{\#define \_\_XB\_XBLNKLSTORD\_H\_\_}}
+\DoxyCodeLine{23 }
+\DoxyCodeLine{24 \textcolor{preprocessor}{\#ifdef XB\_LINKLIST\_SUPPORT}}
+\DoxyCodeLine{25 }
+\DoxyCodeLine{26 }
+\DoxyCodeLine{27 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
+\DoxyCodeLine{28 }
+\DoxyCodeLine{29 }
+\DoxyCodeLine{30 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{31 \textcolor{keyword}{class }XBDLLEXPORT xbLinkListOrd \{}
+\DoxyCodeLine{32 \textcolor{keyword}{public}:}
+\DoxyCodeLine{33 xbLinkListOrd();}
+\DoxyCodeLine{34 \string~xbLinkListOrd();}
+\DoxyCodeLine{35 }
+\DoxyCodeLine{36 \textcolor{keywordtype}{void} Clear();}
+\DoxyCodeLine{37 xbLinkListNode<xbNodeType> *GetHeadNode() \textcolor{keyword}{const};}
+\DoxyCodeLine{38 xbLinkListNode<xbNodeType> *GetEndNode() \textcolor{keyword}{const};}
+\DoxyCodeLine{39 xbLinkListNode<xbNodeType> *GetNodeForKey( \textcolor{keyword}{const} xbString \&sKey ) \textcolor{keyword}{const};}
+\DoxyCodeLine{40 }
+\DoxyCodeLine{41 xbInt16 GetDataForKey ( \textcolor{keyword}{const} xbNodeType \&ntKey, xbString \&sData );}
+\DoxyCodeLine{42 }
+\DoxyCodeLine{43 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetDupKeys ();}
+\DoxyCodeLine{44 }
+\DoxyCodeLine{45 xbUInt32 GetNodeCnt () \textcolor{keyword}{const};}
+\DoxyCodeLine{46 xbUInt32 GetNodeCnt ( \textcolor{keyword}{const} xbString \&sNodeKey ) \textcolor{keyword}{const};}
+\DoxyCodeLine{47 xbInt16 InsertKey ( \textcolor{keyword}{const} xbNodeType \&ntKey );}
+\DoxyCodeLine{48 xbInt16 InsertKey ( \textcolor{keyword}{const} xbNodeType \&ntKey, \textcolor{keyword}{const} xbString \&sData );}
+\DoxyCodeLine{49 xbInt16 InsertKey ( \textcolor{keyword}{const} xbNodeType \&ntKey, xbUInt32 ulData );}
+\DoxyCodeLine{50 }
+\DoxyCodeLine{51 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} KeyExists ( \textcolor{keyword}{const} xbNodeType \&ntKey ) \textcolor{keyword}{const};}
+\DoxyCodeLine{52 xbInt16 RemoveKey ( \textcolor{keyword}{const} xbNodeType \&ntKey );}
+\DoxyCodeLine{53 xbInt16 RemoveFromEnd ( xbNodeType \&ntKey );}
+\DoxyCodeLine{54 xbInt16 RemoveFromFront( xbNodeType \&ntKey );}
+\DoxyCodeLine{55 xbInt16 RemoveFromFront();}
+\DoxyCodeLine{56 \textcolor{keywordtype}{void} SetDupKeys ( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bAllowDupKeys );}
+\DoxyCodeLine{57 xbInt16 UpdateForKey ( \textcolor{keyword}{const} xbNodeType \&ntKey, \textcolor{keyword}{const} xbString \&sData );}
+\DoxyCodeLine{58 }
+\DoxyCodeLine{59 }
+\DoxyCodeLine{60 \textcolor{keyword}{private}:}
+\DoxyCodeLine{61 xbUInt32 ulNodeCnt;}
+\DoxyCodeLine{62 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bAllowDupKeys;}
+\DoxyCodeLine{63 xbLinkListNode<xbNodeType> *llStartPtr;}
+\DoxyCodeLine{64 xbLinkListNode<xbNodeType> *llEndPtr;}
+\DoxyCodeLine{65 }
+\DoxyCodeLine{66 \};}
+\DoxyCodeLine{67 }
+\DoxyCodeLine{68 }
+\DoxyCodeLine{69 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{70 xbLinkListOrd<xbNodeType>::xbLinkListOrd()\{}
+\DoxyCodeLine{71 bAllowDupKeys = \mbox{\hyperlink{xbtypes_8h_ab0ae00665298fe7f5292691cb98ec2d9}{xbTrue}}; \textcolor{comment}{// default setting -\/ allow duplicate keys}}
+\DoxyCodeLine{72 ulNodeCnt = 0;}
+\DoxyCodeLine{73 llStartPtr = NULL;}
+\DoxyCodeLine{74 llEndPtr = NULL;}
+\DoxyCodeLine{75 \}}
+\DoxyCodeLine{76 }
+\DoxyCodeLine{77 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{78 xbLinkListOrd<xbNodeType>::\string~xbLinkListOrd()\{}
+\DoxyCodeLine{79 Clear();}
+\DoxyCodeLine{80 \}}
+\DoxyCodeLine{81 }
+\DoxyCodeLine{82 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{83 \textcolor{keywordtype}{void} xbLinkListOrd<xbNodeType>::Clear()\{}
+\DoxyCodeLine{84 xbLinkListNode<xbNodeType> *cPtr = llStartPtr, *tPtr;}
+\DoxyCodeLine{85 \textcolor{keywordflow}{for}( xbUInt32 i = 0; i < ulNodeCnt; i++ )\{}
+\DoxyCodeLine{86 tPtr = cPtr;}
+\DoxyCodeLine{87 cPtr = cPtr-\/>GetNextNode();}
+\DoxyCodeLine{88 }
+\DoxyCodeLine{89 \textcolor{comment}{// next line might cause seg faults}}
+\DoxyCodeLine{90 \textcolor{comment}{// delete tPtr-\/>GetData();}}
+\DoxyCodeLine{91 }
+\DoxyCodeLine{92 \textcolor{keyword}{delete} tPtr;}
+\DoxyCodeLine{93 \}}
+\DoxyCodeLine{94 ulNodeCnt = 0;}
+\DoxyCodeLine{95 llStartPtr = NULL;}
+\DoxyCodeLine{96 llEndPtr = NULL;}
+\DoxyCodeLine{97 \}}
+\DoxyCodeLine{98 }
+\DoxyCodeLine{99 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{100 xbLinkListNode<xbNodeType> * xbLinkListOrd<xbNodeType>::GetHeadNode()\textcolor{keyword}{ const}\{}
+\DoxyCodeLine{101 \textcolor{keywordflow}{return} llStartPtr;}
+\DoxyCodeLine{102 \}}
+\DoxyCodeLine{103 }
+\DoxyCodeLine{104 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{105 xbLinkListNode<xbNodeType> * xbLinkListOrd<xbNodeType>::GetEndNode()\textcolor{keyword}{ const}\{}
+\DoxyCodeLine{106 \textcolor{keywordflow}{return} llEndPtr;}
+\DoxyCodeLine{107 \}}
+\DoxyCodeLine{108 }
+\DoxyCodeLine{109 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{110 xbUInt32 xbLinkListOrd<xbNodeType>::GetNodeCnt()\textcolor{keyword}{ const}\{}
+\DoxyCodeLine{111 \textcolor{keywordflow}{return} ulNodeCnt;}
+\DoxyCodeLine{112 \}}
+\DoxyCodeLine{113 }
+\DoxyCodeLine{114 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{115 xbUInt32 xbLinkListOrd<xbNodeType>::GetNodeCnt( \textcolor{keyword}{const} xbString \&sNodeKey )\textcolor{keyword}{ const}\{}
+\DoxyCodeLine{116 }
+\DoxyCodeLine{117 \textcolor{comment}{// won't work if nodekey is not a string}}
+\DoxyCodeLine{118 xbLinkListNode<xbNodeType> *currPtr = llStartPtr;}
+\DoxyCodeLine{119 \textcolor{comment}{// skip to sNodeKey}}
+\DoxyCodeLine{120 \textcolor{keywordflow}{while}( currPtr \&\& ( sNodeKey > currPtr-\/>GetKey())) \{}
+\DoxyCodeLine{121 currPtr = currPtr-\/>GetNextNode();}
+\DoxyCodeLine{122 \}}
+\DoxyCodeLine{123 \textcolor{comment}{// count entries for sNodeKey}}
+\DoxyCodeLine{124 xbInt16 iKeyCnt = 0;}
+\DoxyCodeLine{125 \textcolor{keywordflow}{while}( currPtr \&\& ( sNodeKey == currPtr-\/>GetKey())) \{}
+\DoxyCodeLine{126 iKeyCnt++;}
+\DoxyCodeLine{127 currPtr = currPtr-\/>GetNextNode();}
+\DoxyCodeLine{128 \}}
+\DoxyCodeLine{129 \textcolor{keywordflow}{return} iKeyCnt;}
+\DoxyCodeLine{130 \}}
+\DoxyCodeLine{131 }
+\DoxyCodeLine{132 }
+\DoxyCodeLine{133 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{134 xbInt16 xbLinkListOrd<xbNodeType>::InsertKey( \textcolor{keyword}{const} xbNodeType \&ntKey )\{}
+\DoxyCodeLine{135 xbString s;}
+\DoxyCodeLine{136 \textcolor{keywordflow}{return} InsertKey( ntKey, s );}
+\DoxyCodeLine{137 \}}
+\DoxyCodeLine{138 }
+\DoxyCodeLine{139 }
+\DoxyCodeLine{140 }
+\DoxyCodeLine{141 }
+\DoxyCodeLine{142 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{143 xbInt16 xbLinkListOrd<xbNodeType>::InsertKey( \textcolor{keyword}{const} xbNodeType \&ntKey, xbUInt32 ul )\{}
+\DoxyCodeLine{144 }
+\DoxyCodeLine{145 xbString s;}
+\DoxyCodeLine{146 s.Sprintf( \textcolor{stringliteral}{"{}\%ld"{}}, ul );}
+\DoxyCodeLine{147 \textcolor{keywordflow}{return} InsertKey( ntKey, s );}
+\DoxyCodeLine{148 \}}
+\DoxyCodeLine{149 }
+\DoxyCodeLine{150 }
+\DoxyCodeLine{151 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{152 xbInt16 xbLinkListOrd<xbNodeType>::InsertKey( \textcolor{keyword}{const} xbNodeType \&ntKey, \textcolor{keyword}{const} xbString \&sData )\{}
+\DoxyCodeLine{153 }
+\DoxyCodeLine{154 xbLinkListNode<xbNodeType> *p = \textcolor{keyword}{new} xbLinkListNode<xbNodeType>( ntKey, sData );}
+\DoxyCodeLine{155 \textcolor{keywordflow}{if}( p == 0 )}
+\DoxyCodeLine{156 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ae687fc7d872ba0475a8477e4447f9b54}{XB\_NO\_MEMORY}};}
+\DoxyCodeLine{157 }
+\DoxyCodeLine{158 \textcolor{keywordflow}{if}( ulNodeCnt > 0 )\{}
+\DoxyCodeLine{159 xbLinkListNode<xbNodeType> *currPtr = llStartPtr;}
+\DoxyCodeLine{160 xbLinkListNode<xbNodeType> *prevPtr = NULL;}
+\DoxyCodeLine{161 }
+\DoxyCodeLine{162 \textcolor{comment}{// find location in the chain}}
+\DoxyCodeLine{163 \textcolor{keywordflow}{while}( currPtr \&\& ntKey > currPtr-\/>GetKey() )\{}
+\DoxyCodeLine{164 prevPtr = currPtr;}
+\DoxyCodeLine{165 currPtr = currPtr-\/>GetNextNode();}
+\DoxyCodeLine{166 \}}
+\DoxyCodeLine{167 \textcolor{keywordflow}{if}( currPtr \&\& ntKey == currPtr-\/>GetKey() \&\& bAllowDupKeys == 0 )\{}
+\DoxyCodeLine{168 \textcolor{keyword}{delete} p;}
+\DoxyCodeLine{169 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ad60dbb1862c0c1c2dc0464cfbfd93a34}{XB\_KEY\_NOT\_UNIQUE}};}
+\DoxyCodeLine{170 \}}
+\DoxyCodeLine{171 }
+\DoxyCodeLine{172 \textcolor{keywordflow}{if}( currPtr == NULL )\{}
+\DoxyCodeLine{173 \textcolor{comment}{// std::cout << "{}at the end of the chain\(\backslash\)n"{};}}
+\DoxyCodeLine{174 llEndPtr = p;}
+\DoxyCodeLine{175 prevPtr-\/>SetNextNode( p );}
+\DoxyCodeLine{176 p-\/>SetPrevNode( prevPtr );}
+\DoxyCodeLine{177 }
+\DoxyCodeLine{178 \} \textcolor{keywordflow}{else} \textcolor{keywordflow}{if}( currPtr-\/>GetPrevNode() == NULL )\{}
+\DoxyCodeLine{179 \textcolor{comment}{// std::cout << "{}at the beginning of the chain\(\backslash\)n"{};}}
+\DoxyCodeLine{180 p-\/>SetNextNode( llStartPtr );}
+\DoxyCodeLine{181 llStartPtr-\/>SetPrevNode( p );}
+\DoxyCodeLine{182 llStartPtr = p;}
+\DoxyCodeLine{183 }
+\DoxyCodeLine{184 \} \textcolor{keywordflow}{else} \{}
+\DoxyCodeLine{185 \textcolor{comment}{// std::cout << "{}in the middle of the chain\(\backslash\)n"{};}}
+\DoxyCodeLine{186 p-\/>SetNextNode( currPtr ); }
+\DoxyCodeLine{187 p-\/>SetPrevNode( currPtr-\/>GetPrevNode());}
+\DoxyCodeLine{188 currPtr-\/>SetPrevNode( p );}
+\DoxyCodeLine{189 prevPtr-\/>SetNextNode( p );}
+\DoxyCodeLine{190 \}}
+\DoxyCodeLine{191 \} \textcolor{keywordflow}{else} \{}
+\DoxyCodeLine{192 \textcolor{comment}{// std::cout << "{}first addition to the chain\(\backslash\)n"{};}}
+\DoxyCodeLine{193 llStartPtr = p;}
+\DoxyCodeLine{194 llEndPtr = p;}
+\DoxyCodeLine{195 \}}
+\DoxyCodeLine{196 ulNodeCnt++;}
+\DoxyCodeLine{197 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}{XB\_NO\_ERROR}};}
+\DoxyCodeLine{198 \}}
+\DoxyCodeLine{199 }
+\DoxyCodeLine{200 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{201 xbInt16 xbLinkListOrd<xbNodeType>::RemoveKey( \textcolor{keyword}{const} xbNodeType \&ntKey )\{}
+\DoxyCodeLine{202 \textcolor{comment}{// Remove the first instance of ntKey from the node chain}}
+\DoxyCodeLine{203 xbLinkListNode<xbNodeType> *currPtr = llStartPtr;}
+\DoxyCodeLine{204 xbLinkListNode<xbNodeType> *prevPtr = NULL;}
+\DoxyCodeLine{205 }
+\DoxyCodeLine{206 \textcolor{keywordflow}{while}( currPtr \&\& ntKey > currPtr-\/>GetKey() )\{}
+\DoxyCodeLine{207 prevPtr = currPtr;}
+\DoxyCodeLine{208 currPtr = currPtr-\/>GetNextNode();}
+\DoxyCodeLine{209 \}}
+\DoxyCodeLine{210 }
+\DoxyCodeLine{211 \textcolor{keywordflow}{if}( currPtr \&\& ntKey == currPtr-\/>GetKey())\{}
+\DoxyCodeLine{212 \textcolor{comment}{// ntKey = currPtr-\/>GetKey();}}
+\DoxyCodeLine{213 \textcolor{keywordflow}{if}( prevPtr == NULL )\{ \textcolor{comment}{// this is the first node}}
+\DoxyCodeLine{214 llStartPtr = currPtr-\/>GetNextNode();}
+\DoxyCodeLine{215 \textcolor{comment}{// next line fails}}
+\DoxyCodeLine{216 \textcolor{keywordflow}{if}( llStartPtr )\{}
+\DoxyCodeLine{217 llStartPtr-\/>SetPrevNode( NULL );}
+\DoxyCodeLine{218 \}}
+\DoxyCodeLine{219 \textcolor{keyword}{delete} currPtr;}
+\DoxyCodeLine{220 ulNodeCnt-\/-\/;}
+\DoxyCodeLine{221 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}{XB\_NO\_ERROR}};}
+\DoxyCodeLine{222 \} \textcolor{keywordflow}{else} \textcolor{keywordflow}{if}( currPtr-\/>GetNextNode() == NULL )\{ \textcolor{comment}{// this is the last node}}
+\DoxyCodeLine{223 llEndPtr = prevPtr;}
+\DoxyCodeLine{224 prevPtr-\/>SetNextNode( NULL );}
+\DoxyCodeLine{225 \textcolor{keyword}{delete} currPtr;}
+\DoxyCodeLine{226 ulNodeCnt-\/-\/;}
+\DoxyCodeLine{227 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}{XB\_NO\_ERROR}};}
+\DoxyCodeLine{228 \} \textcolor{keywordflow}{else} \{}
+\DoxyCodeLine{229 }
+\DoxyCodeLine{230 prevPtr-\/>SetNextNode( currPtr-\/>GetNextNode());}
+\DoxyCodeLine{231 currPtr-\/>GetNextNode()-\/>SetPrevNode( prevPtr );}
+\DoxyCodeLine{232 \textcolor{keyword}{delete} currPtr;}
+\DoxyCodeLine{233 ulNodeCnt-\/-\/;}
+\DoxyCodeLine{234 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}{XB\_NO\_ERROR}};}
+\DoxyCodeLine{235 \}}
+\DoxyCodeLine{236 \} \textcolor{keywordflow}{else} \{}
+\DoxyCodeLine{237 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac2606659a54111334f5b02861e533700}{XB\_NOT\_FOUND}};}
+\DoxyCodeLine{238 \}}
+\DoxyCodeLine{239 \}}
+\DoxyCodeLine{240 }
+\DoxyCodeLine{241 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{242 xbInt16 xbLinkListOrd<xbNodeType>::RemoveFromFront( xbNodeType \&ntKey )\{}
+\DoxyCodeLine{243 }
+\DoxyCodeLine{244 \textcolor{keywordflow}{if}( ulNodeCnt <= 0 )}
+\DoxyCodeLine{245 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_a13e6876470bd34c8c4e5533f115e04eb}{XB\_INVALID\_NODELINK}};}
+\DoxyCodeLine{246 xbLinkListNode<xbNodeType> *p = llStartPtr;}
+\DoxyCodeLine{247 llStartPtr = p-\/>GetNextNode();}
+\DoxyCodeLine{248 \textcolor{keywordflow}{if}( llStartPtr )}
+\DoxyCodeLine{249 llStartPtr-\/>SetPrevNode( NULL );}
+\DoxyCodeLine{250 ntKey = p-\/>GetKey();}
+\DoxyCodeLine{251 \textcolor{keyword}{delete} p;}
+\DoxyCodeLine{252 ulNodeCnt-\/-\/;}
+\DoxyCodeLine{253 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}{XB\_NO\_ERROR}};}
+\DoxyCodeLine{254 \}}
+\DoxyCodeLine{255 }
+\DoxyCodeLine{256 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{257 xbInt16 xbLinkListOrd<xbNodeType>::RemoveFromFront()\{}
+\DoxyCodeLine{258 }
+\DoxyCodeLine{259 \textcolor{keywordflow}{if}( ulNodeCnt <= 0 )}
+\DoxyCodeLine{260 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_a13e6876470bd34c8c4e5533f115e04eb}{XB\_INVALID\_NODELINK}};}
+\DoxyCodeLine{261 xbLinkListNode<xbNodeType> *p = llStartPtr;}
+\DoxyCodeLine{262 llStartPtr = p-\/>GetNextNode();}
+\DoxyCodeLine{263 \textcolor{keywordflow}{if}( llStartPtr )}
+\DoxyCodeLine{264 llStartPtr-\/>SetPrevNode( NULL );}
+\DoxyCodeLine{265 }
+\DoxyCodeLine{266 \textcolor{keywordflow}{if}( p-\/>GetKey())}
+\DoxyCodeLine{267 \textcolor{keyword}{delete} p-\/>GetKey();}
+\DoxyCodeLine{268 }
+\DoxyCodeLine{269 \textcolor{keyword}{delete} p;}
+\DoxyCodeLine{270 ulNodeCnt-\/-\/;}
+\DoxyCodeLine{271 }
+\DoxyCodeLine{272 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}{XB\_NO\_ERROR}};}
+\DoxyCodeLine{273 \}}
+\DoxyCodeLine{274 }
+\DoxyCodeLine{275 }
+\DoxyCodeLine{276 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{277 xbInt16 xbLinkListOrd<xbNodeType>::RemoveFromEnd( xbNodeType \&ntKey )\{}
+\DoxyCodeLine{278 }
+\DoxyCodeLine{279 \textcolor{keywordflow}{if}( ulNodeCnt <= 0 )}
+\DoxyCodeLine{280 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_a13e6876470bd34c8c4e5533f115e04eb}{XB\_INVALID\_NODELINK}};}
+\DoxyCodeLine{281 xbLinkListNode<xbNodeType> *p = llEndPtr;}
+\DoxyCodeLine{282 llEndPtr = p-\/>GetPrevNode();}
+\DoxyCodeLine{283 llEndPtr-\/>SetNextNode( NULL );}
+\DoxyCodeLine{284 ntKey = p-\/>GetKey();}
+\DoxyCodeLine{285 \textcolor{keyword}{delete} p;}
+\DoxyCodeLine{286 ulNodeCnt-\/-\/;}
+\DoxyCodeLine{287 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}{XB\_NO\_ERROR}};}
+\DoxyCodeLine{288 \}}
+\DoxyCodeLine{289 }
+\DoxyCodeLine{290 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{291 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} xbLinkListOrd<xbNodeType>::GetDupKeys()\{}
+\DoxyCodeLine{292 \textcolor{keywordflow}{return} bAllowDupKeys;}
+\DoxyCodeLine{293 \}}
+\DoxyCodeLine{294 }
+\DoxyCodeLine{295 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{296 \textcolor{keywordtype}{void} xbLinkListOrd<xbNodeType>::SetDupKeys( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bAllowDupKeys )\{}
+\DoxyCodeLine{297 this-\/>bAllowDupKeys = bAllowDupKeys;}
+\DoxyCodeLine{298 \}}
+\DoxyCodeLine{299 }
+\DoxyCodeLine{300 }
+\DoxyCodeLine{301 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{302 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} xbLinkListOrd<xbNodeType>::KeyExists( \textcolor{keyword}{const} xbNodeType \&ntKey )\textcolor{keyword}{ const }\{}
+\DoxyCodeLine{303 }
+\DoxyCodeLine{304 xbLinkListNode<xbNodeType> *currPtr = llStartPtr;}
+\DoxyCodeLine{305 \textcolor{keywordflow}{while}( currPtr \&\& ntKey > currPtr-\/>GetKey() )\{}
+\DoxyCodeLine{306 currPtr = currPtr-\/>GetNextNode();}
+\DoxyCodeLine{307 \}}
+\DoxyCodeLine{308 \textcolor{keywordflow}{if}( currPtr \&\& ntKey == currPtr-\/>GetKey())\{}
+\DoxyCodeLine{309 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbtypes_8h_ab0ae00665298fe7f5292691cb98ec2d9}{xbTrue}};}
+\DoxyCodeLine{310 \} \textcolor{keywordflow}{else} \{}
+\DoxyCodeLine{311 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbtypes_8h_adc4b6ca5ad299f63675136d9e03938cc}{xbFalse}};}
+\DoxyCodeLine{312 \}}
+\DoxyCodeLine{313 \}}
+\DoxyCodeLine{314 }
+\DoxyCodeLine{315 }
+\DoxyCodeLine{316 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{317 xbInt16 xbLinkListOrd<xbNodeType>::GetDataForKey( \textcolor{keyword}{const} xbNodeType \&ntKey, xbString \&sData )\{}
+\DoxyCodeLine{318 }
+\DoxyCodeLine{319 xbLinkListNode<xbNodeType> *currPtr = llStartPtr;}
+\DoxyCodeLine{320 \textcolor{keywordflow}{while}( currPtr \&\& ntKey > currPtr-\/>GetKey() )\{}
+\DoxyCodeLine{321 currPtr = currPtr-\/>GetNextNode();}
+\DoxyCodeLine{322 \}}
+\DoxyCodeLine{323 }
+\DoxyCodeLine{324 \textcolor{keywordflow}{if}( currPtr \&\& ntKey == currPtr-\/>GetKey())\{}
+\DoxyCodeLine{325 sData = currPtr-\/>GetData();}
+\DoxyCodeLine{326 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}{XB\_NO\_ERROR}};}
+\DoxyCodeLine{327 \} \textcolor{keywordflow}{else} \{}
+\DoxyCodeLine{328 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac2606659a54111334f5b02861e533700}{XB\_NOT\_FOUND}};}
+\DoxyCodeLine{329 \}}
+\DoxyCodeLine{330 \}}
+\DoxyCodeLine{331 }
+\DoxyCodeLine{332 }
+\DoxyCodeLine{333 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{334 xbInt16 xbLinkListOrd<xbNodeType>::UpdateForKey( \textcolor{keyword}{const} xbNodeType \&ntKey, \textcolor{keyword}{const} xbString \&sData )\{}
+\DoxyCodeLine{335 }
+\DoxyCodeLine{336 \textcolor{keywordflow}{if}( ulNodeCnt == 0 )}
+\DoxyCodeLine{337 \textcolor{keywordflow}{return} InsertKey( ntKey, sData );}
+\DoxyCodeLine{338 xbLinkListNode<xbNodeType> * currPtr = llStartPtr;}
+\DoxyCodeLine{339 xbLinkListNode<xbNodeType> * prevPtr = NULL;}
+\DoxyCodeLine{340 \textcolor{keywordflow}{while}( currPtr \&\& ntKey > currPtr-\/>GetKey() ) \{}
+\DoxyCodeLine{341 prevPtr = currPtr;}
+\DoxyCodeLine{342 currPtr = currPtr-\/>GetNextNode();}
+\DoxyCodeLine{343 \}}
+\DoxyCodeLine{344 }
+\DoxyCodeLine{345 \textcolor{keywordflow}{if}( currPtr \&\& ntKey == currPtr-\/>GetKey() ) \{}
+\DoxyCodeLine{346 xbLinkListNode<xbNodeType> *p = \textcolor{keyword}{new} xbLinkListNode<xbNodeType>( ntKey, sData );}
+\DoxyCodeLine{347 \textcolor{keywordflow}{if}( prevPtr )}
+\DoxyCodeLine{348 prevPtr-\/>SetNextNode( p );}
+\DoxyCodeLine{349 \textcolor{keywordflow}{else}}
+\DoxyCodeLine{350 llStartPtr = p;}
+\DoxyCodeLine{351 p-\/>SetNextNode( currPtr-\/>GetNextNode() );}
+\DoxyCodeLine{352 p-\/>SetPrevNode( currPtr-\/>GetPrevNode() );}
+\DoxyCodeLine{353 \textcolor{keyword}{delete} currPtr;}
+\DoxyCodeLine{354 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}{XB\_NO\_ERROR}};}
+\DoxyCodeLine{355 \}}
+\DoxyCodeLine{356 }
+\DoxyCodeLine{357 \textcolor{keywordflow}{return} InsertKey( ntKey, sData );}
+\DoxyCodeLine{358 }
+\DoxyCodeLine{359 \textcolor{comment}{// return 0;}}
+\DoxyCodeLine{360 \}}
+\DoxyCodeLine{361 }
+\DoxyCodeLine{362 \} \textcolor{comment}{// namespace}}
+\DoxyCodeLine{363 }
+\DoxyCodeLine{364 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_LINKLIST\_SUPPORT}}
+\DoxyCodeLine{365 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_XBLNKLSTORD\_H\_\_}}
+\DoxyCodeLine{366 }
+\DoxyCodeLine{367 }
+
+\end{DoxyCode}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xblnknod_8h.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xblnknod_8h.tex
new file mode 100644
index 0000000..cccd96b
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xblnknod_8h.tex
@@ -0,0 +1,2 @@
+\hypertarget{xblnknod_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xblnknod.h File Reference}
+\label{xblnknod_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xblnknod.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xblnknod.h}}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xblnknod_8h_source.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xblnknod_8h_source.tex
new file mode 100644
index 0000000..911fcbc
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xblnknod_8h_source.tex
@@ -0,0 +1,100 @@
+\hypertarget{xblnknod_8h_source}{}\doxysection{xblnknod.\+h}
+\label{xblnknod_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xblnknod.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xblnknod.h}}
+\mbox{\hyperlink{xblnknod_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{comment}{/* xblnknod.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\_XBLNKNOD\_H\_\_}}
+\DoxyCodeLine{18 \textcolor{preprocessor}{\#define \_\_XB\_XBLNKNOD\_H\_\_}}
+\DoxyCodeLine{19 }
+\DoxyCodeLine{20 }
+\DoxyCodeLine{21 }
+\DoxyCodeLine{22 \textcolor{preprocessor}{\#ifdef XB\_LINKLIST\_SUPPORT}}
+\DoxyCodeLine{23 }
+\DoxyCodeLine{24 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
+\DoxyCodeLine{25 }
+\DoxyCodeLine{26 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{27 \textcolor{keyword}{class }XBDLLEXPORT xbLinkListNode \{}
+\DoxyCodeLine{28 \textcolor{keyword}{public}:}
+\DoxyCodeLine{29 xbLinkListNode( \textcolor{keyword}{const} xbNodeType \& );}
+\DoxyCodeLine{30 xbLinkListNode( \textcolor{keyword}{const} xbNodeType \&, \textcolor{keyword}{const} xbString \& );}
+\DoxyCodeLine{31 xbNodeType GetKey() \textcolor{keyword}{const};}
+\DoxyCodeLine{32 xbString \&GetData();}
+\DoxyCodeLine{33 xbLinkListNode<xbNodeType> *GetNextNode() \textcolor{keyword}{const};}
+\DoxyCodeLine{34 xbLinkListNode<xbNodeType> *GetPrevNode() \textcolor{keyword}{const};}
+\DoxyCodeLine{35 \textcolor{keywordtype}{void} SetNextNode( xbLinkListNode<xbNodeType> *llNext );}
+\DoxyCodeLine{36 \textcolor{keywordtype}{void} SetPrevNode( xbLinkListNode<xbNodeType> *llPrev );}
+\DoxyCodeLine{37 }
+\DoxyCodeLine{38 \textcolor{keyword}{private}:}
+\DoxyCodeLine{39 xbNodeType ntKey;}
+\DoxyCodeLine{40 xbString sData;}
+\DoxyCodeLine{41 xbLinkListNode *llNext;}
+\DoxyCodeLine{42 xbLinkListNode *llPrev;}
+\DoxyCodeLine{43 \};}
+\DoxyCodeLine{44 }
+\DoxyCodeLine{45 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{46 xbLinkListNode<xbNodeType>::xbLinkListNode( \textcolor{keyword}{const} xbNodeType \&key )\{}
+\DoxyCodeLine{47 ntKey = key;}
+\DoxyCodeLine{48 llNext = NULL;}
+\DoxyCodeLine{49 llPrev = NULL;}
+\DoxyCodeLine{50 \}}
+\DoxyCodeLine{51 }
+\DoxyCodeLine{52 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{53 xbLinkListNode<xbNodeType>::xbLinkListNode( \textcolor{keyword}{const} xbNodeType \&key, \textcolor{keyword}{const} xbString \&s )\{}
+\DoxyCodeLine{54 ntKey = key;}
+\DoxyCodeLine{55 sData = s;}
+\DoxyCodeLine{56 llNext = NULL;}
+\DoxyCodeLine{57 llPrev = NULL;}
+\DoxyCodeLine{58 \}}
+\DoxyCodeLine{59 }
+\DoxyCodeLine{60 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{61 xbNodeType xbLinkListNode<xbNodeType>::GetKey()\textcolor{keyword}{ const }\{}
+\DoxyCodeLine{62 \textcolor{keywordflow}{return} ntKey;}
+\DoxyCodeLine{63 \}}
+\DoxyCodeLine{64 }
+\DoxyCodeLine{65 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{66 xbString \&xbLinkListNode<xbNodeType>::GetData()\{}
+\DoxyCodeLine{67 \textcolor{keywordflow}{return} sData;}
+\DoxyCodeLine{68 \}}
+\DoxyCodeLine{69 }
+\DoxyCodeLine{70 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{71 xbLinkListNode<xbNodeType> *xbLinkListNode<xbNodeType>::GetNextNode()\textcolor{keyword}{ const }\{}
+\DoxyCodeLine{72 \textcolor{keywordflow}{return} llNext;}
+\DoxyCodeLine{73 \}}
+\DoxyCodeLine{74 }
+\DoxyCodeLine{75 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{76 xbLinkListNode<xbNodeType> *xbLinkListNode<xbNodeType>::GetPrevNode()\textcolor{keyword}{ const }\{}
+\DoxyCodeLine{77 \textcolor{keywordflow}{return} llPrev;}
+\DoxyCodeLine{78 \}}
+\DoxyCodeLine{79 }
+\DoxyCodeLine{80 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{81 \textcolor{keywordtype}{void} xbLinkListNode<xbNodeType>::SetNextNode( xbLinkListNode<xbNodeType> *lln )\{}
+\DoxyCodeLine{82 llNext = lln;}
+\DoxyCodeLine{83 \}}
+\DoxyCodeLine{84 }
+\DoxyCodeLine{85 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
+\DoxyCodeLine{86 \textcolor{keywordtype}{void} xbLinkListNode<xbNodeType>::SetPrevNode( xbLinkListNode<xbNodeType> *llp )\{}
+\DoxyCodeLine{87 llPrev = llp;}
+\DoxyCodeLine{88 \}}
+\DoxyCodeLine{89 }
+\DoxyCodeLine{90 \} \textcolor{comment}{// namespace}}
+\DoxyCodeLine{91 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_LINKLIST\_SUPPORT}}
+\DoxyCodeLine{92 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_XBLNKNOD\_H\_\_}}
+\DoxyCodeLine{93 }
+\DoxyCodeLine{94 }
+
+\end{DoxyCode}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xblog_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xblog_8cpp.tex
new file mode 100644
index 0000000..38f3fb7
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xblog_8cpp.tex
@@ -0,0 +1,3 @@
+\hypertarget{xblog_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xblog.cpp File Reference}
+\label{xblog_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xblog.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xblog.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xblog_8h.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xblog_8h.tex
new file mode 100644
index 0000000..1317096
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xblog_8h.tex
@@ -0,0 +1,7 @@
+\hypertarget{xblog_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xblog.h File Reference}
+\label{xblog_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xblog.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xblog.h}}
+\doxysubsection*{Namespaces}
+\begin{DoxyCompactItemize}
+\item
+namespace \mbox{\hyperlink{namespacexb}{xb}}
+\end{DoxyCompactItemize}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xblog_8h_source.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xblog_8h_source.tex
new file mode 100644
index 0000000..bd8ac89
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xblog_8h_source.tex
@@ -0,0 +1,60 @@
+\hypertarget{xblog_8h_source}{}\doxysection{xblog.\+h}
+\label{xblog_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xblog.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xblog.h}}
+\mbox{\hyperlink{xblog_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{comment}{/* xblog.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 \textcolor{preprocessor}{\#ifndef \_\_XB\_XBLOG\_H\_\_}}
+\DoxyCodeLine{17 \textcolor{preprocessor}{\#define \_\_XB\_XBLOG\_H\_\_}}
+\DoxyCodeLine{18 }
+\DoxyCodeLine{19 \textcolor{preprocessor}{\#ifdef CMAKE\_COMPILER\_IS\_GNUCC}}
+\DoxyCodeLine{20 \textcolor{preprocessor}{\#pragma interface}}
+\DoxyCodeLine{21 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{22 }
+\DoxyCodeLine{23 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
+\DoxyCodeLine{24 }
+\DoxyCodeLine{25 \textcolor{preprocessor}{\#ifdef XB\_LOGGING\_SUPPORT}}
+\DoxyCodeLine{26 }
+\DoxyCodeLine{28 }
+\DoxyCodeLine{41 \textcolor{keyword}{class }XBDLLEXPORT \mbox{\hyperlink{namespacexb_a4a31fbe9110c9e55495ce71e642d785c}{xbLog}} : \textcolor{keyword}{public} xbFile \{}
+\DoxyCodeLine{42 \textcolor{keyword}{public}:}
+\DoxyCodeLine{43 \mbox{\hyperlink{namespacexb_a4a31fbe9110c9e55495ce71e642d785c}{xbLog}}();}
+\DoxyCodeLine{44 \mbox{\hyperlink{namespacexb_a4a31fbe9110c9e55495ce71e642d785c}{xbLog}}( \textcolor{keyword}{const} xbString \&sLogFileName );}
+\DoxyCodeLine{45 \string~xbLog();}
+\DoxyCodeLine{46 }
+\DoxyCodeLine{47 xbInt16 LogClose ();}
+\DoxyCodeLine{48 xbInt16 LogGetStatus ();}
+\DoxyCodeLine{49 xbInt16 LogOpen ();}
+\DoxyCodeLine{50 \textcolor{keywordtype}{void} LogSetStatus ( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bLogStatus );}
+\DoxyCodeLine{51 \textcolor{keywordtype}{void} LogSetLogSize( \textcolor{keywordtype}{size\_t} lSize ); \textcolor{comment}{// \{ LogSize = size; \}}}
+\DoxyCodeLine{52 xbInt16 LogWrite ( \textcolor{keyword}{const} xbString \&LogEntry, xbInt16 iOutputOption = 0 );}
+\DoxyCodeLine{53 xbInt16 LogWriteBytes( xbUInt32 lByteCnt, \textcolor{keyword}{const} \textcolor{keywordtype}{char} *p );}
+\DoxyCodeLine{54 \textcolor{keywordtype}{size\_t} LogGetLogSize()\textcolor{keyword}{ const }\{ \textcolor{keywordflow}{return} lLogSize; \}}
+\DoxyCodeLine{55 }
+\DoxyCodeLine{56 \textcolor{keyword}{private}:}
+\DoxyCodeLine{57 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bLoggingStatus; \textcolor{comment}{// false = logging off}}
+\DoxyCodeLine{58 \textcolor{comment}{// true = logging on}}
+\DoxyCodeLine{59 \textcolor{keywordtype}{size\_t} lLogSize;}
+\DoxyCodeLine{60 xbInt16 iShareMode;}
+\DoxyCodeLine{61 \};}
+\DoxyCodeLine{62 }
+\DoxyCodeLine{63 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_LOGGING\_SUPPORT}}
+\DoxyCodeLine{64 \} \textcolor{comment}{// namespace}}
+\DoxyCodeLine{65 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_XBLOG\_H\_\_}}
+\DoxyCodeLine{66 }
+\DoxyCodeLine{67 }
+
+\end{DoxyCode}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbmemo3_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbmemo3_8cpp.tex
new file mode 100644
index 0000000..5301f05
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbmemo3_8cpp.tex
@@ -0,0 +1,3 @@
+\hypertarget{xbmemo3_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbmemo3.cpp File Reference}
+\label{xbmemo3_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbmemo3.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbmemo3.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbmemo4_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbmemo4_8cpp.tex
new file mode 100644
index 0000000..ab18a1c
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbmemo4_8cpp.tex
@@ -0,0 +1,3 @@
+\hypertarget{xbmemo4_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbmemo4.cpp File Reference}
+\label{xbmemo4_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbmemo4.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbmemo4.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbmemo_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbmemo_8cpp.tex
new file mode 100644
index 0000000..1ba2932
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbmemo_8cpp.tex
@@ -0,0 +1,3 @@
+\hypertarget{xbmemo_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbmemo.cpp File Reference}
+\label{xbmemo_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbmemo.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbmemo.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbmemo_8h.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbmemo_8h.tex
new file mode 100644
index 0000000..fed4cff
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbmemo_8h.tex
@@ -0,0 +1,2 @@
+\hypertarget{xbmemo_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbmemo.h File Reference}
+\label{xbmemo_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbmemo.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbmemo.h}}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbmemo_8h_source.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbmemo_8h_source.tex
new file mode 100644
index 0000000..a394de6
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbmemo_8h_source.tex
@@ -0,0 +1,187 @@
+\hypertarget{xbmemo_8h_source}{}\doxysection{xbmemo.\+h}
+\label{xbmemo_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbmemo.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/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 \textcolor{keyword}{virtual} xbInt16 CreateMemoFile () = 0;}
+\DoxyCodeLine{66 }
+\DoxyCodeLine{67 \textcolor{keyword}{virtual} xbInt16 DumpMemoHeader () = 0;}
+\DoxyCodeLine{68 }
+\DoxyCodeLine{69 }
+\DoxyCodeLine{70 \textcolor{keyword}{virtual} xbInt16 GetMemoField ( xbInt16 iFieldNo, xbString \&sMemoData ) = 0;}
+\DoxyCodeLine{71 \textcolor{keyword}{virtual} xbInt16 GetMemoFieldLen ( xbInt16 iFieldNo, xbUInt32 \&ulMemoFieldLen ) = 0;}
+\DoxyCodeLine{72 \textcolor{keyword}{virtual} xbInt16 OpenMemoFile () = 0;}
+\DoxyCodeLine{73 \textcolor{keyword}{virtual} xbInt16 GetMemoFileType ();}
+\DoxyCodeLine{74 \textcolor{keyword}{virtual} xbInt16 PackMemo ( \textcolor{keywordtype}{void} (*memoStatusFunc)(xbUInt32 ulItemNum, xbUInt32 ulNumItems)) = 0;}
+\DoxyCodeLine{75 \textcolor{keyword}{virtual} xbInt16 UpdateMemoField ( xbInt16 iFieldNo, \textcolor{keyword}{const} xbString \&sMemoData ) = 0;}
+\DoxyCodeLine{76 }
+\DoxyCodeLine{77 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
+\DoxyCodeLine{78 \textcolor{keyword}{virtual} xbInt16 DumpMemoFreeChain() = 0;}
+\DoxyCodeLine{79 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{80 }
+\DoxyCodeLine{81 \textcolor{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
+\DoxyCodeLine{82 \textcolor{keyword}{virtual} xbInt16 LockMemo ( xbInt16 iLockFunction );}
+\DoxyCodeLine{83 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetMemoLocked () \textcolor{keyword}{const};}
+\DoxyCodeLine{84 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{85 }
+\DoxyCodeLine{86 }
+\DoxyCodeLine{87 }
+\DoxyCodeLine{88 \textcolor{comment}{// *********** FIXME *************}}
+\DoxyCodeLine{89 \textcolor{comment}{// next two methods should be protected but are called in the xb\_test\_xxxx programs testing routines}}
+\DoxyCodeLine{90 \textcolor{comment}{// so for now, they are kept as public}}
+\DoxyCodeLine{91 \textcolor{keyword}{virtual} xbInt16 CalcLastDataBlock ( xbUInt32 \&lLastDataBlock );}
+\DoxyCodeLine{92 \textcolor{keyword}{virtual} xbInt16 GetHdrNextBlock ( xbUInt32 \&ulBlockNo );}
+\DoxyCodeLine{93 }
+\DoxyCodeLine{94 \textcolor{keyword}{protected}:}
+\DoxyCodeLine{95 \textcolor{keyword}{friend} \textcolor{keyword}{class }\mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}};}
+\DoxyCodeLine{96 }
+\DoxyCodeLine{97 \textcolor{keyword}{virtual} xbInt16 ReadDbtHeader ( xbInt16 iOption ) = 0;}
+\DoxyCodeLine{98 \textcolor{keyword}{virtual} xbInt16 UpdateHeaderName () = 0;}
+\DoxyCodeLine{99 \textcolor{keyword}{virtual} xbInt16 UpdateHeadNextNode();}
+\DoxyCodeLine{100 \textcolor{keyword}{virtual} xbInt16 Zap () = 0;}
+\DoxyCodeLine{101 }
+\DoxyCodeLine{102 \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf; \textcolor{comment}{/* pointer to related dbf instance */}}
+\DoxyCodeLine{103 \textcolor{keywordtype}{char} cVersion; \textcolor{comment}{/* byte 16 off the header block, 0x03 for V3, version IV -\/ ? */}}
+\DoxyCodeLine{104 xbInt16 iMemoFileType; \textcolor{comment}{/* 3 = version III, 4 = version IV */}}
+\DoxyCodeLine{105 xbUInt32 ulHdrNextBlock; \textcolor{comment}{/* next available block , bytes 0-\/3 of the memo header */}}
+\DoxyCodeLine{106 \textcolor{keywordtype}{void} * mbb; \textcolor{comment}{/* memo block buffer */}}
+\DoxyCodeLine{107 }
+\DoxyCodeLine{108 }
+\DoxyCodeLine{109 \textcolor{keyword}{private}:}
+\DoxyCodeLine{110 }
+\DoxyCodeLine{111 \textcolor{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
+\DoxyCodeLine{112 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bFileLocked; \textcolor{comment}{/* memo file locked */}}
+\DoxyCodeLine{113 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{114 }
+\DoxyCodeLine{115 \};}
+\DoxyCodeLine{116 }
+\DoxyCodeLine{117 }
+\DoxyCodeLine{118 }
+\DoxyCodeLine{119 \textcolor{preprocessor}{\#ifdef XB\_DBF3\_SUPPORT}}
+\DoxyCodeLine{121 }
+\DoxyCodeLine{133 \textcolor{keyword}{class }XBDLLEXPORT xbMemoDbt3 : \textcolor{keyword}{public} xbMemo \{}
+\DoxyCodeLine{134 \textcolor{keyword}{public}:}
+\DoxyCodeLine{135 xbMemoDbt3( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf, xbString \textcolor{keyword}{const} \&sFileName );}
+\DoxyCodeLine{136 \string~xbMemoDbt3();}
+\DoxyCodeLine{137 \textcolor{keyword}{virtual} xbInt16 Abort ();}
+\DoxyCodeLine{138 \textcolor{keyword}{virtual} xbInt16 Commit ();}
+\DoxyCodeLine{139 \textcolor{keyword}{virtual} xbInt16 CreateMemoFile ();}
+\DoxyCodeLine{140 \textcolor{keyword}{virtual} xbInt16 DumpMemoHeader ();}
+\DoxyCodeLine{141 \textcolor{keyword}{virtual} xbInt16 GetMemoField ( xbInt16 iFieldNo, xbString \&sMemoData );}
+\DoxyCodeLine{142 \textcolor{keyword}{virtual} xbInt16 GetMemoFieldLen( xbInt16 iFieldNo, xbUInt32 \&ulMemoFieldLen );}
+\DoxyCodeLine{143 \textcolor{keyword}{virtual} xbInt16 OpenMemoFile ();}
+\DoxyCodeLine{144 \textcolor{keyword}{virtual} xbInt16 PackMemo ( \textcolor{keywordtype}{void} (*memoStatusFunc) (xbUInt32 ulItemNum, xbUInt32 ulNumItems));}
+\DoxyCodeLine{145 \textcolor{keyword}{virtual} xbInt16 UpdateMemoField( xbInt16 iFieldNo, \textcolor{keyword}{const} xbString \&sMemoData );}
+\DoxyCodeLine{146 }
+\DoxyCodeLine{147 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
+\DoxyCodeLine{148 \textcolor{keyword}{virtual} xbInt16 DumpMemoFreeChain();}
+\DoxyCodeLine{149 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{150 }
+\DoxyCodeLine{151 \textcolor{keyword}{protected}:}
+\DoxyCodeLine{152 \textcolor{keyword}{virtual} xbInt16 ReadDbtHeader( xbInt16 iOption );}
+\DoxyCodeLine{153 \textcolor{keyword}{virtual} xbInt16 UpdateHeaderName();}
+\DoxyCodeLine{154 \textcolor{keyword}{virtual} xbInt16 Zap();}
+\DoxyCodeLine{155 }
+\DoxyCodeLine{156 \textcolor{keyword}{private}:}
+\DoxyCodeLine{157 \};}
+\DoxyCodeLine{158 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{159 }
+\DoxyCodeLine{160 }
+\DoxyCodeLine{161 \textcolor{preprocessor}{\#ifdef XB\_DBF4\_SUPPORT}}
+\DoxyCodeLine{162 }
+\DoxyCodeLine{164 }
+\DoxyCodeLine{174 \textcolor{keyword}{class }XBDLLEXPORT xbMemoDbt4 : \textcolor{keyword}{public} xbMemo \{}
+\DoxyCodeLine{175 \textcolor{keyword}{public}:}
+\DoxyCodeLine{176 xbMemoDbt4( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf, xbString \textcolor{keyword}{const} \&sFileName );}
+\DoxyCodeLine{177 \string~xbMemoDbt4();}
+\DoxyCodeLine{178 \textcolor{keyword}{virtual} xbInt16 Abort ();}
+\DoxyCodeLine{179 \textcolor{keyword}{virtual} xbInt16 Commit ();}
+\DoxyCodeLine{180 \textcolor{keyword}{virtual} xbInt16 CreateMemoFile ();}
+\DoxyCodeLine{181 \textcolor{keyword}{virtual} xbInt16 DumpMemoHeader ();}
+\DoxyCodeLine{182 \textcolor{keyword}{virtual} xbInt16 GetMemoField ( xbInt16 iFieldNo, xbString \&sMemoData );}
+\DoxyCodeLine{183 \textcolor{keyword}{virtual} xbInt16 GetMemoFieldLen ( xbInt16 iFieldNo, xbUInt32 \&ulMemoFieldLen );}
+\DoxyCodeLine{184 \textcolor{keyword}{virtual} xbInt16 GetMemoFieldLen ( xbInt16 iFieldNo, xbUInt32 \&ulMemoFieldLen, xbUInt32 \&lBlockNo );}
+\DoxyCodeLine{185 \textcolor{keyword}{virtual} xbInt16 OpenMemoFile ();}
+\DoxyCodeLine{186 \textcolor{keyword}{virtual} xbInt16 PackMemo ( \textcolor{keywordtype}{void} (*memoStatusFunc) (xbUInt32 ulItemNum, xbUInt32 ulNumItems));}
+\DoxyCodeLine{187 \textcolor{keyword}{virtual} xbInt16 UpdateMemoField ( xbInt16 iFieldNo, \textcolor{keyword}{const} xbString \&sMemoData );}
+\DoxyCodeLine{188 }
+\DoxyCodeLine{189 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
+\DoxyCodeLine{190 \textcolor{keyword}{virtual} xbInt16 DumpMemoFreeChain ();}
+\DoxyCodeLine{191 \textcolor{keyword}{virtual} xbInt16 DumpMemoInternals ();}
+\DoxyCodeLine{192 \textcolor{keyword}{virtual} xbInt16 ReadFreeBlockHeader( xbUInt32 ulBlockNo, xbUInt32 \&ulNextBlock, xbUInt32 \&ulFreeBlockCnt );}
+\DoxyCodeLine{193 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{194 }
+\DoxyCodeLine{195 \textcolor{keyword}{protected}:}
+\DoxyCodeLine{196 \textcolor{keyword}{virtual} xbInt16 FindBlockSetInChain( xbUInt32 ulBlocksNeeded, xbUInt32 \&ulLastDataBlock, xbUInt32 \&ulLocation, xbUInt32 \&ulPrevNode, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bFound );}
+\DoxyCodeLine{197 \textcolor{keyword}{virtual} xbInt16 FreeMemoBlockChain( xbUInt32 ulBlockNo );}
+\DoxyCodeLine{198 \textcolor{keyword}{virtual} xbInt16 FreeMemoBlockChain( xbUInt32 ulBlockNo, xbUInt32 \&ulLastDataBlock );}
+\DoxyCodeLine{199 \textcolor{keyword}{virtual} xbInt16 GetBlockSetFromChain( xbUInt32 ulBlocksNeeded, xbUInt32 ulLocation, xbUInt32 ulPrevNode );}
+\DoxyCodeLine{200 \textcolor{keyword}{virtual} xbInt16 ReadDbtHeader( xbInt16 iOption );}
+\DoxyCodeLine{201 \textcolor{keyword}{virtual} xbInt16 ReadBlockHeader( xbUInt32 ulBlockNo, xbInt16 iOption );}
+\DoxyCodeLine{202 \textcolor{keyword}{virtual} xbInt16 UpdateHeaderName ();}
+\DoxyCodeLine{203 \textcolor{keyword}{virtual} xbInt16 WriteBlockHeader( xbUInt32 ulBlockNo, xbInt16 iOption );}
+\DoxyCodeLine{204 \textcolor{keyword}{virtual} xbInt16 Zap();}
+\DoxyCodeLine{205 }
+\DoxyCodeLine{206 \textcolor{keyword}{private}:}
+\DoxyCodeLine{207 xbString sDbfFileNameWoExt;}
+\DoxyCodeLine{208 xbUInt32 ulNextFreeBlock;}
+\DoxyCodeLine{209 xbUInt32 ulFreeBlockCnt;}
+\DoxyCodeLine{210 xbInt16 iField1;}
+\DoxyCodeLine{211 xbInt16 iStartPos;}
+\DoxyCodeLine{212 xbUInt32 ulFieldLen;}
+\DoxyCodeLine{213 }
+\DoxyCodeLine{214 xbLinkList<xbUInt32> llOldBlocks; \textcolor{comment}{// list of previously used memo blocks for field, used by Commit() / Abort()}}
+\DoxyCodeLine{215 xbLinkList<xbUInt32> llNewBlocks; \textcolor{comment}{// list of newly updated memo blocks for field, used by Commit() / Abort()}}
+\DoxyCodeLine{216 }
+\DoxyCodeLine{217 \};}
+\DoxyCodeLine{218 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{219 }
+\DoxyCodeLine{220 }
+\DoxyCodeLine{221 \} \textcolor{comment}{/* namespace xb */}}
+\DoxyCodeLine{222 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* XB\_MEMO\_SUPPORT */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{223 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_MEMO\_H\_\_ */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{224 }
+
+\end{DoxyCode}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbretcod_8h.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbretcod_8h.tex
new file mode 100644
index 0000000..ee2e1fc
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbretcod_8h.tex
@@ -0,0 +1,477 @@
+\hypertarget{xbretcod_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbretcod.h File Reference}
+\label{xbretcod_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbretcod.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbretcod.h}}
+\doxysubsection*{Namespaces}
+\begin{DoxyCompactItemize}
+\item
+namespace \mbox{\hyperlink{namespacexb}{xb}}
+\end{DoxyCompactItemize}
+\doxysubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}{XB\+\_\+\+NO\+\_\+\+ERROR}}~0
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_ae687fc7d872ba0475a8477e4447f9b54}{XB\+\_\+\+NO\+\_\+\+MEMORY}}~-\/100
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_af1cd0baf346cad686fa4dd11f700012a}{XB\+\_\+\+INVALID\+\_\+\+OPTION}}~-\/101
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_a1b78533ada854b4185c51ad8a5ce9f02}{XB\+\_\+\+INVALID\+\_\+\+PARAMETER}}~-\/102
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_ac18036408d10e5eee1bf76cf92352b95}{XB\+\_\+\+DUP\+\_\+\+TABLE\+\_\+\+OR\+\_\+\+ALIAS}}~-\/110
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_a13e6876470bd34c8c4e5533f115e04eb}{XB\+\_\+\+INVALID\+\_\+\+NODELINK}}~-\/120
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_ad60dbb1862c0c1c2dc0464cfbfd93a34}{XB\+\_\+\+KEY\+\_\+\+NOT\+\_\+\+UNIQUE}}~-\/121
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_aa2925f035e3b186d7efa14648ea0e86d}{XB\+\_\+\+MEMCPY\+\_\+\+ERROR}}~-\/122
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_a54303a9677dbd5342233f33dd08c64d0}{XB\+\_\+\+FILE\+\_\+\+EXISTS}}~-\/200
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_aa2ff8301503f446c6a5f6510090e520f}{XB\+\_\+\+ALREADY\+\_\+\+OPEN}}~-\/201
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_a8104510b347c87998eadd0b27201e3c2}{XB\+\_\+\+DBF\+\_\+\+FILE\+\_\+\+NOT\+\_\+\+OPEN}}~-\/202
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_ad090af330c93111d12f6de35dbb065bc}{XB\+\_\+\+FILE\+\_\+\+NOT\+\_\+\+FOUND}}~-\/203
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_ab7b9130a5f1df9975cfeaf6241933596}{XB\+\_\+\+FILE\+\_\+\+TYPE\+\_\+\+NOT\+\_\+\+SUPPORTED}}~-\/204
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_a373f30b2efcbbab9f6d060fb3fe8cba3}{XB\+\_\+\+RENAME\+\_\+\+ERROR}}~-\/205
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_a418c047353bc683d0fd6ecbbdd5b7885}{XB\+\_\+\+INVALID\+\_\+\+OBJECT}}~-\/206
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_a9474b400f647bdefbbb07e5177e8d7a1}{XB\+\_\+\+NOT\+\_\+\+OPEN}}~-\/207
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_ac2606659a54111334f5b02861e533700}{XB\+\_\+\+NOT\+\_\+\+FOUND}}~-\/208
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_aaab55236993a1d3acb29206252a904c8}{XB\+\_\+\+OPEN\+\_\+\+ERROR}}~-\/209
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_a030684d5541cf6127a76d81b0684b235}{XB\+\_\+\+CLOSE\+\_\+\+ERROR}}~-\/210
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_a0455ad8719e153b08ec68b10c81e9f41}{XB\+\_\+\+SEEK\+\_\+\+ERROR}}~-\/211
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_adbd40585db8bb748d191f94a33bac710}{XB\+\_\+\+READ\+\_\+\+ERROR}}~-\/212
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_aef34ebe6726057f805d6063130280549}{XB\+\_\+\+WRITE\+\_\+\+ERROR}}~-\/213
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_a8b47031e90c3f86306c7058e4490d3b7}{XB\+\_\+\+EOF}}~-\/214
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_ade5f3a7cf1467d12761e4e21b5e4200f}{XB\+\_\+\+BOF}}~-\/215
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_a1bd22921612389c37f6b2eac438c62c5}{XB\+\_\+\+INVALID\+\_\+\+BLOCK\+\_\+\+SIZE}}~-\/216
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_a4e13b529b486c43ca600ce7d8ddbf3c2}{XB\+\_\+\+INVALID\+\_\+\+BLOCK\+\_\+\+NO}}~-\/217
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_a0fd212f912b2e62700a66bae95bd73a1}{XB\+\_\+\+INVALID\+\_\+\+RECORD}}~-\/218
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_ada15513935d5ede9216f07c0438f34d2}{XB\+\_\+\+DELETE\+\_\+\+FAILED}}~-\/219
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_a53891c95a78483704d2a8e14c4499f92}{XB\+\_\+\+INVALID\+\_\+\+TABLE\+\_\+\+NAME}}~-\/220
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_a18068d0cbe0c7a1b4dd3176220180c29}{XB\+\_\+\+EMPTY}}~-\/221
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_a59f1a8a6aca19595c2d1804349a24850}{XB\+\_\+\+LIMIT\+\_\+\+REACHED}}~-\/222
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_aae9241d91cfb37f5d236128b3bce0a4a}{XB\+\_\+\+BLOCKREAD\+\_\+\+NOT\+\_\+\+ENABLED}}~-\/223
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_af532df74147ce2d872f61abfee49c53e}{XB\+\_\+\+DIRECTORY\+\_\+\+ERROR}}~-\/224
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_a79e2588f067d6e236c0e5a2c0728ba9f}{XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE}}~-\/300
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_a09d6c08a44316f551108a74003efd381}{XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO}}~-\/301
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_afb40bbed323ecb369dd430a2e1242f9a}{XB\+\_\+\+INVALID\+\_\+\+DATA}}~-\/302
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_a59403978784130834cf39434cb73f96e}{XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME}}~-\/303
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_a187c50745f51bfe4aa6f70a92f16c59f}{XB\+\_\+\+INVALID\+\_\+\+MEMO\+\_\+\+FIELD}}~-\/304
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_a34180b2e2bd350ba2ebcdd1335e15d7e}{XB\+\_\+\+INVALID\+\_\+\+FIELD}}~-\/305
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_a7bd322c0efbba17f68ccccd6cf624411}{XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+LEN}}~-\/306
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_a702475500357a27b8a34463be3e11925}{XB\+\_\+\+INVALID\+\_\+\+DATE}}~-\/307
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_ab45735e63c208eb7e6d6df31fd527aec}{XB\+\_\+\+INVALID\+\_\+\+LOCK\+\_\+\+OPTION}}~-\/400
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_a001e24b39e0f155fb1e892f5b1b9cff1}{XB\+\_\+\+LOCK\+\_\+\+FAILED}}~-\/401
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_af6aaf779fddecca521d785666f6dc56b}{XB\+\_\+\+TABLE\+\_\+\+NOT\+\_\+\+LOCKED}}~-\/402
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_aec713cac2b03a0d536a2d16336ae7c0b}{XB\+\_\+\+PARSE\+\_\+\+ERROR}}~-\/500
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_a2b7e5e440dbcf5e6dc885b24dbe28742}{XB\+\_\+\+INVALID\+\_\+\+FUNCTION}}~-\/501
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_a4cedf96581c9cbc9c14d07494143702d}{XB\+\_\+\+INVALID\+\_\+\+PARM}}~-\/502
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_adc4b24bfffa202f8df25409894e547b9}{XB\+\_\+\+INCONSISTENT\+\_\+\+PARM\+\_\+\+LENS}}~-\/503
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_af141ec58b7ca7360e0be6c61d015ea74}{XB\+\_\+\+INCOMPATIBLE\+\_\+\+OPERANDS}}~-\/504
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_aff5646a6b0884ff81004de6961473ea6}{XB\+\_\+\+UNBALANCED\+\_\+\+PARENS}}~-\/505
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_aedfa20a6c4eb9ba3063ba56be8280eac}{XB\+\_\+\+UNBALANCED\+\_\+\+QUOTES}}~-\/506
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_a54db562c3cae97581812b4fccd52b71a}{XB\+\_\+\+INVALID\+\_\+\+EXPRESSION}}~-\/507
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_aec2c0ac2bd62e0329ef130e4fbda39f8}{XB\+\_\+\+INVALID\+\_\+\+KEYNO}}~-\/600
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_acd175ef0541e2cad424791bd87619dd4}{XB\+\_\+\+INVALID\+\_\+\+INDEX}}~-\/601
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_a176d917912d3433f065483f905a4c50a}{XB\+\_\+\+INVALID\+\_\+\+TAG}}~-\/602
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_ad0aba12b5ae2137f8d6abd28b47f95f0}{XB\+\_\+\+INVALID\+\_\+\+PAGE}}~-\/603
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_a5db3a90f215534143bdde81253729c7f}{XB\+\_\+\+SYNTAX\+\_\+\+ERROR}}~-\/700
+\item
+\#define \mbox{\hyperlink{xbretcod_8h_a299419a9c80e000b74bf97a2d24d6a3d}{XB\+\_\+\+MAX\+\_\+\+ERROR\+\_\+\+NO}}~-\/999
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{xbretcod_8h_aa2ff8301503f446c6a5f6510090e520f}\label{xbretcod_8h_aa2ff8301503f446c6a5f6510090e520f}}
+\index{xbretcod.h@{xbretcod.h}!XB\_ALREADY\_OPEN@{XB\_ALREADY\_OPEN}}
+\index{XB\_ALREADY\_OPEN@{XB\_ALREADY\_OPEN}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_ALREADY\_OPEN}{XB\_ALREADY\_OPEN}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+ALREADY\+\_\+\+OPEN~-\/201}
+
+\mbox{\Hypertarget{xbretcod_8h_aae9241d91cfb37f5d236128b3bce0a4a}\label{xbretcod_8h_aae9241d91cfb37f5d236128b3bce0a4a}}
+\index{xbretcod.h@{xbretcod.h}!XB\_BLOCKREAD\_NOT\_ENABLED@{XB\_BLOCKREAD\_NOT\_ENABLED}}
+\index{XB\_BLOCKREAD\_NOT\_ENABLED@{XB\_BLOCKREAD\_NOT\_ENABLED}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_BLOCKREAD\_NOT\_ENABLED}{XB\_BLOCKREAD\_NOT\_ENABLED}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+BLOCKREAD\+\_\+\+NOT\+\_\+\+ENABLED~-\/223}
+
+\mbox{\Hypertarget{xbretcod_8h_ade5f3a7cf1467d12761e4e21b5e4200f}\label{xbretcod_8h_ade5f3a7cf1467d12761e4e21b5e4200f}}
+\index{xbretcod.h@{xbretcod.h}!XB\_BOF@{XB\_BOF}}
+\index{XB\_BOF@{XB\_BOF}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_BOF}{XB\_BOF}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+BOF~-\/215}
+
+\mbox{\Hypertarget{xbretcod_8h_a030684d5541cf6127a76d81b0684b235}\label{xbretcod_8h_a030684d5541cf6127a76d81b0684b235}}
+\index{xbretcod.h@{xbretcod.h}!XB\_CLOSE\_ERROR@{XB\_CLOSE\_ERROR}}
+\index{XB\_CLOSE\_ERROR@{XB\_CLOSE\_ERROR}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_CLOSE\_ERROR}{XB\_CLOSE\_ERROR}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+CLOSE\+\_\+\+ERROR~-\/210}
+
+\mbox{\Hypertarget{xbretcod_8h_a8104510b347c87998eadd0b27201e3c2}\label{xbretcod_8h_a8104510b347c87998eadd0b27201e3c2}}
+\index{xbretcod.h@{xbretcod.h}!XB\_DBF\_FILE\_NOT\_OPEN@{XB\_DBF\_FILE\_NOT\_OPEN}}
+\index{XB\_DBF\_FILE\_NOT\_OPEN@{XB\_DBF\_FILE\_NOT\_OPEN}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_DBF\_FILE\_NOT\_OPEN}{XB\_DBF\_FILE\_NOT\_OPEN}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+DBF\+\_\+\+FILE\+\_\+\+NOT\+\_\+\+OPEN~-\/202}
+
+\mbox{\Hypertarget{xbretcod_8h_ada15513935d5ede9216f07c0438f34d2}\label{xbretcod_8h_ada15513935d5ede9216f07c0438f34d2}}
+\index{xbretcod.h@{xbretcod.h}!XB\_DELETE\_FAILED@{XB\_DELETE\_FAILED}}
+\index{XB\_DELETE\_FAILED@{XB\_DELETE\_FAILED}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_DELETE\_FAILED}{XB\_DELETE\_FAILED}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+DELETE\+\_\+\+FAILED~-\/219}
+
+\mbox{\Hypertarget{xbretcod_8h_af532df74147ce2d872f61abfee49c53e}\label{xbretcod_8h_af532df74147ce2d872f61abfee49c53e}}
+\index{xbretcod.h@{xbretcod.h}!XB\_DIRECTORY\_ERROR@{XB\_DIRECTORY\_ERROR}}
+\index{XB\_DIRECTORY\_ERROR@{XB\_DIRECTORY\_ERROR}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_DIRECTORY\_ERROR}{XB\_DIRECTORY\_ERROR}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+DIRECTORY\+\_\+\+ERROR~-\/224}
+
+\mbox{\Hypertarget{xbretcod_8h_ac18036408d10e5eee1bf76cf92352b95}\label{xbretcod_8h_ac18036408d10e5eee1bf76cf92352b95}}
+\index{xbretcod.h@{xbretcod.h}!XB\_DUP\_TABLE\_OR\_ALIAS@{XB\_DUP\_TABLE\_OR\_ALIAS}}
+\index{XB\_DUP\_TABLE\_OR\_ALIAS@{XB\_DUP\_TABLE\_OR\_ALIAS}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_DUP\_TABLE\_OR\_ALIAS}{XB\_DUP\_TABLE\_OR\_ALIAS}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+DUP\+\_\+\+TABLE\+\_\+\+OR\+\_\+\+ALIAS~-\/110}
+
+\mbox{\Hypertarget{xbretcod_8h_a18068d0cbe0c7a1b4dd3176220180c29}\label{xbretcod_8h_a18068d0cbe0c7a1b4dd3176220180c29}}
+\index{xbretcod.h@{xbretcod.h}!XB\_EMPTY@{XB\_EMPTY}}
+\index{XB\_EMPTY@{XB\_EMPTY}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_EMPTY}{XB\_EMPTY}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+EMPTY~-\/221}
+
+\mbox{\Hypertarget{xbretcod_8h_a8b47031e90c3f86306c7058e4490d3b7}\label{xbretcod_8h_a8b47031e90c3f86306c7058e4490d3b7}}
+\index{xbretcod.h@{xbretcod.h}!XB\_EOF@{XB\_EOF}}
+\index{XB\_EOF@{XB\_EOF}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_EOF}{XB\_EOF}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+EOF~-\/214}
+
+\mbox{\Hypertarget{xbretcod_8h_a54303a9677dbd5342233f33dd08c64d0}\label{xbretcod_8h_a54303a9677dbd5342233f33dd08c64d0}}
+\index{xbretcod.h@{xbretcod.h}!XB\_FILE\_EXISTS@{XB\_FILE\_EXISTS}}
+\index{XB\_FILE\_EXISTS@{XB\_FILE\_EXISTS}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_FILE\_EXISTS}{XB\_FILE\_EXISTS}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+FILE\+\_\+\+EXISTS~-\/200}
+
+\mbox{\Hypertarget{xbretcod_8h_ad090af330c93111d12f6de35dbb065bc}\label{xbretcod_8h_ad090af330c93111d12f6de35dbb065bc}}
+\index{xbretcod.h@{xbretcod.h}!XB\_FILE\_NOT\_FOUND@{XB\_FILE\_NOT\_FOUND}}
+\index{XB\_FILE\_NOT\_FOUND@{XB\_FILE\_NOT\_FOUND}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_FILE\_NOT\_FOUND}{XB\_FILE\_NOT\_FOUND}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+FILE\+\_\+\+NOT\+\_\+\+FOUND~-\/203}
+
+\mbox{\Hypertarget{xbretcod_8h_ab7b9130a5f1df9975cfeaf6241933596}\label{xbretcod_8h_ab7b9130a5f1df9975cfeaf6241933596}}
+\index{xbretcod.h@{xbretcod.h}!XB\_FILE\_TYPE\_NOT\_SUPPORTED@{XB\_FILE\_TYPE\_NOT\_SUPPORTED}}
+\index{XB\_FILE\_TYPE\_NOT\_SUPPORTED@{XB\_FILE\_TYPE\_NOT\_SUPPORTED}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_FILE\_TYPE\_NOT\_SUPPORTED}{XB\_FILE\_TYPE\_NOT\_SUPPORTED}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+FILE\+\_\+\+TYPE\+\_\+\+NOT\+\_\+\+SUPPORTED~-\/204}
+
+\mbox{\Hypertarget{xbretcod_8h_af141ec58b7ca7360e0be6c61d015ea74}\label{xbretcod_8h_af141ec58b7ca7360e0be6c61d015ea74}}
+\index{xbretcod.h@{xbretcod.h}!XB\_INCOMPATIBLE\_OPERANDS@{XB\_INCOMPATIBLE\_OPERANDS}}
+\index{XB\_INCOMPATIBLE\_OPERANDS@{XB\_INCOMPATIBLE\_OPERANDS}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_INCOMPATIBLE\_OPERANDS}{XB\_INCOMPATIBLE\_OPERANDS}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+INCOMPATIBLE\+\_\+\+OPERANDS~-\/504}
+
+\mbox{\Hypertarget{xbretcod_8h_adc4b24bfffa202f8df25409894e547b9}\label{xbretcod_8h_adc4b24bfffa202f8df25409894e547b9}}
+\index{xbretcod.h@{xbretcod.h}!XB\_INCONSISTENT\_PARM\_LENS@{XB\_INCONSISTENT\_PARM\_LENS}}
+\index{XB\_INCONSISTENT\_PARM\_LENS@{XB\_INCONSISTENT\_PARM\_LENS}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_INCONSISTENT\_PARM\_LENS}{XB\_INCONSISTENT\_PARM\_LENS}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+INCONSISTENT\+\_\+\+PARM\+\_\+\+LENS~-\/503}
+
+\mbox{\Hypertarget{xbretcod_8h_a4e13b529b486c43ca600ce7d8ddbf3c2}\label{xbretcod_8h_a4e13b529b486c43ca600ce7d8ddbf3c2}}
+\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_BLOCK\_NO@{XB\_INVALID\_BLOCK\_NO}}
+\index{XB\_INVALID\_BLOCK\_NO@{XB\_INVALID\_BLOCK\_NO}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_INVALID\_BLOCK\_NO}{XB\_INVALID\_BLOCK\_NO}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+BLOCK\+\_\+\+NO~-\/217}
+
+\mbox{\Hypertarget{xbretcod_8h_a1bd22921612389c37f6b2eac438c62c5}\label{xbretcod_8h_a1bd22921612389c37f6b2eac438c62c5}}
+\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_BLOCK\_SIZE@{XB\_INVALID\_BLOCK\_SIZE}}
+\index{XB\_INVALID\_BLOCK\_SIZE@{XB\_INVALID\_BLOCK\_SIZE}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_INVALID\_BLOCK\_SIZE}{XB\_INVALID\_BLOCK\_SIZE}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+BLOCK\+\_\+\+SIZE~-\/216}
+
+\mbox{\Hypertarget{xbretcod_8h_afb40bbed323ecb369dd430a2e1242f9a}\label{xbretcod_8h_afb40bbed323ecb369dd430a2e1242f9a}}
+\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_DATA@{XB\_INVALID\_DATA}}
+\index{XB\_INVALID\_DATA@{XB\_INVALID\_DATA}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_INVALID\_DATA}{XB\_INVALID\_DATA}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+DATA~-\/302}
+
+\mbox{\Hypertarget{xbretcod_8h_a702475500357a27b8a34463be3e11925}\label{xbretcod_8h_a702475500357a27b8a34463be3e11925}}
+\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_DATE@{XB\_INVALID\_DATE}}
+\index{XB\_INVALID\_DATE@{XB\_INVALID\_DATE}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_INVALID\_DATE}{XB\_INVALID\_DATE}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+DATE~-\/307}
+
+\mbox{\Hypertarget{xbretcod_8h_a54db562c3cae97581812b4fccd52b71a}\label{xbretcod_8h_a54db562c3cae97581812b4fccd52b71a}}
+\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_EXPRESSION@{XB\_INVALID\_EXPRESSION}}
+\index{XB\_INVALID\_EXPRESSION@{XB\_INVALID\_EXPRESSION}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_INVALID\_EXPRESSION}{XB\_INVALID\_EXPRESSION}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+EXPRESSION~-\/507}
+
+\mbox{\Hypertarget{xbretcod_8h_a34180b2e2bd350ba2ebcdd1335e15d7e}\label{xbretcod_8h_a34180b2e2bd350ba2ebcdd1335e15d7e}}
+\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_FIELD@{XB\_INVALID\_FIELD}}
+\index{XB\_INVALID\_FIELD@{XB\_INVALID\_FIELD}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_INVALID\_FIELD}{XB\_INVALID\_FIELD}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+FIELD~-\/305}
+
+\mbox{\Hypertarget{xbretcod_8h_a7bd322c0efbba17f68ccccd6cf624411}\label{xbretcod_8h_a7bd322c0efbba17f68ccccd6cf624411}}
+\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_FIELD\_LEN@{XB\_INVALID\_FIELD\_LEN}}
+\index{XB\_INVALID\_FIELD\_LEN@{XB\_INVALID\_FIELD\_LEN}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_INVALID\_FIELD\_LEN}{XB\_INVALID\_FIELD\_LEN}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+LEN~-\/306}
+
+\mbox{\Hypertarget{xbretcod_8h_a59403978784130834cf39434cb73f96e}\label{xbretcod_8h_a59403978784130834cf39434cb73f96e}}
+\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_FIELD\_NAME@{XB\_INVALID\_FIELD\_NAME}}
+\index{XB\_INVALID\_FIELD\_NAME@{XB\_INVALID\_FIELD\_NAME}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_INVALID\_FIELD\_NAME}{XB\_INVALID\_FIELD\_NAME}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~-\/303}
+
+\mbox{\Hypertarget{xbretcod_8h_a09d6c08a44316f551108a74003efd381}\label{xbretcod_8h_a09d6c08a44316f551108a74003efd381}}
+\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_FIELD\_NO@{XB\_INVALID\_FIELD\_NO}}
+\index{XB\_INVALID\_FIELD\_NO@{XB\_INVALID\_FIELD\_NO}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_INVALID\_FIELD\_NO}{XB\_INVALID\_FIELD\_NO}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~-\/301}
+
+\mbox{\Hypertarget{xbretcod_8h_a79e2588f067d6e236c0e5a2c0728ba9f}\label{xbretcod_8h_a79e2588f067d6e236c0e5a2c0728ba9f}}
+\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_FIELD\_TYPE@{XB\_INVALID\_FIELD\_TYPE}}
+\index{XB\_INVALID\_FIELD\_TYPE@{XB\_INVALID\_FIELD\_TYPE}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_INVALID\_FIELD\_TYPE}{XB\_INVALID\_FIELD\_TYPE}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~-\/300}
+
+\mbox{\Hypertarget{xbretcod_8h_a2b7e5e440dbcf5e6dc885b24dbe28742}\label{xbretcod_8h_a2b7e5e440dbcf5e6dc885b24dbe28742}}
+\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_FUNCTION@{XB\_INVALID\_FUNCTION}}
+\index{XB\_INVALID\_FUNCTION@{XB\_INVALID\_FUNCTION}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_INVALID\_FUNCTION}{XB\_INVALID\_FUNCTION}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+FUNCTION~-\/501}
+
+\mbox{\Hypertarget{xbretcod_8h_acd175ef0541e2cad424791bd87619dd4}\label{xbretcod_8h_acd175ef0541e2cad424791bd87619dd4}}
+\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_INDEX@{XB\_INVALID\_INDEX}}
+\index{XB\_INVALID\_INDEX@{XB\_INVALID\_INDEX}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_INVALID\_INDEX}{XB\_INVALID\_INDEX}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+INDEX~-\/601}
+
+\mbox{\Hypertarget{xbretcod_8h_aec2c0ac2bd62e0329ef130e4fbda39f8}\label{xbretcod_8h_aec2c0ac2bd62e0329ef130e4fbda39f8}}
+\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_KEYNO@{XB\_INVALID\_KEYNO}}
+\index{XB\_INVALID\_KEYNO@{XB\_INVALID\_KEYNO}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_INVALID\_KEYNO}{XB\_INVALID\_KEYNO}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+KEYNO~-\/600}
+
+\mbox{\Hypertarget{xbretcod_8h_ab45735e63c208eb7e6d6df31fd527aec}\label{xbretcod_8h_ab45735e63c208eb7e6d6df31fd527aec}}
+\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_LOCK\_OPTION@{XB\_INVALID\_LOCK\_OPTION}}
+\index{XB\_INVALID\_LOCK\_OPTION@{XB\_INVALID\_LOCK\_OPTION}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_INVALID\_LOCK\_OPTION}{XB\_INVALID\_LOCK\_OPTION}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+LOCK\+\_\+\+OPTION~-\/400}
+
+\mbox{\Hypertarget{xbretcod_8h_a187c50745f51bfe4aa6f70a92f16c59f}\label{xbretcod_8h_a187c50745f51bfe4aa6f70a92f16c59f}}
+\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_MEMO\_FIELD@{XB\_INVALID\_MEMO\_FIELD}}
+\index{XB\_INVALID\_MEMO\_FIELD@{XB\_INVALID\_MEMO\_FIELD}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_INVALID\_MEMO\_FIELD}{XB\_INVALID\_MEMO\_FIELD}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+MEMO\+\_\+\+FIELD~-\/304}
+
+\mbox{\Hypertarget{xbretcod_8h_a13e6876470bd34c8c4e5533f115e04eb}\label{xbretcod_8h_a13e6876470bd34c8c4e5533f115e04eb}}
+\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_NODELINK@{XB\_INVALID\_NODELINK}}
+\index{XB\_INVALID\_NODELINK@{XB\_INVALID\_NODELINK}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_INVALID\_NODELINK}{XB\_INVALID\_NODELINK}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+NODELINK~-\/120}
+
+\mbox{\Hypertarget{xbretcod_8h_a418c047353bc683d0fd6ecbbdd5b7885}\label{xbretcod_8h_a418c047353bc683d0fd6ecbbdd5b7885}}
+\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_OBJECT@{XB\_INVALID\_OBJECT}}
+\index{XB\_INVALID\_OBJECT@{XB\_INVALID\_OBJECT}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_INVALID\_OBJECT}{XB\_INVALID\_OBJECT}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+OBJECT~-\/206}
+
+\mbox{\Hypertarget{xbretcod_8h_af1cd0baf346cad686fa4dd11f700012a}\label{xbretcod_8h_af1cd0baf346cad686fa4dd11f700012a}}
+\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_OPTION@{XB\_INVALID\_OPTION}}
+\index{XB\_INVALID\_OPTION@{XB\_INVALID\_OPTION}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_INVALID\_OPTION}{XB\_INVALID\_OPTION}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+OPTION~-\/101}
+
+\mbox{\Hypertarget{xbretcod_8h_ad0aba12b5ae2137f8d6abd28b47f95f0}\label{xbretcod_8h_ad0aba12b5ae2137f8d6abd28b47f95f0}}
+\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_PAGE@{XB\_INVALID\_PAGE}}
+\index{XB\_INVALID\_PAGE@{XB\_INVALID\_PAGE}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_INVALID\_PAGE}{XB\_INVALID\_PAGE}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+PAGE~-\/603}
+
+\mbox{\Hypertarget{xbretcod_8h_a1b78533ada854b4185c51ad8a5ce9f02}\label{xbretcod_8h_a1b78533ada854b4185c51ad8a5ce9f02}}
+\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_PARAMETER@{XB\_INVALID\_PARAMETER}}
+\index{XB\_INVALID\_PARAMETER@{XB\_INVALID\_PARAMETER}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_INVALID\_PARAMETER}{XB\_INVALID\_PARAMETER}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+PARAMETER~-\/102}
+
+\mbox{\Hypertarget{xbretcod_8h_a4cedf96581c9cbc9c14d07494143702d}\label{xbretcod_8h_a4cedf96581c9cbc9c14d07494143702d}}
+\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_PARM@{XB\_INVALID\_PARM}}
+\index{XB\_INVALID\_PARM@{XB\_INVALID\_PARM}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_INVALID\_PARM}{XB\_INVALID\_PARM}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+PARM~-\/502}
+
+\mbox{\Hypertarget{xbretcod_8h_a0fd212f912b2e62700a66bae95bd73a1}\label{xbretcod_8h_a0fd212f912b2e62700a66bae95bd73a1}}
+\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_RECORD@{XB\_INVALID\_RECORD}}
+\index{XB\_INVALID\_RECORD@{XB\_INVALID\_RECORD}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_INVALID\_RECORD}{XB\_INVALID\_RECORD}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+RECORD~-\/218}
+
+\mbox{\Hypertarget{xbretcod_8h_a53891c95a78483704d2a8e14c4499f92}\label{xbretcod_8h_a53891c95a78483704d2a8e14c4499f92}}
+\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_TABLE\_NAME@{XB\_INVALID\_TABLE\_NAME}}
+\index{XB\_INVALID\_TABLE\_NAME@{XB\_INVALID\_TABLE\_NAME}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_INVALID\_TABLE\_NAME}{XB\_INVALID\_TABLE\_NAME}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+TABLE\+\_\+\+NAME~-\/220}
+
+\mbox{\Hypertarget{xbretcod_8h_a176d917912d3433f065483f905a4c50a}\label{xbretcod_8h_a176d917912d3433f065483f905a4c50a}}
+\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_TAG@{XB\_INVALID\_TAG}}
+\index{XB\_INVALID\_TAG@{XB\_INVALID\_TAG}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_INVALID\_TAG}{XB\_INVALID\_TAG}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+TAG~-\/602}
+
+\mbox{\Hypertarget{xbretcod_8h_ad60dbb1862c0c1c2dc0464cfbfd93a34}\label{xbretcod_8h_ad60dbb1862c0c1c2dc0464cfbfd93a34}}
+\index{xbretcod.h@{xbretcod.h}!XB\_KEY\_NOT\_UNIQUE@{XB\_KEY\_NOT\_UNIQUE}}
+\index{XB\_KEY\_NOT\_UNIQUE@{XB\_KEY\_NOT\_UNIQUE}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_KEY\_NOT\_UNIQUE}{XB\_KEY\_NOT\_UNIQUE}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+KEY\+\_\+\+NOT\+\_\+\+UNIQUE~-\/121}
+
+\mbox{\Hypertarget{xbretcod_8h_a59f1a8a6aca19595c2d1804349a24850}\label{xbretcod_8h_a59f1a8a6aca19595c2d1804349a24850}}
+\index{xbretcod.h@{xbretcod.h}!XB\_LIMIT\_REACHED@{XB\_LIMIT\_REACHED}}
+\index{XB\_LIMIT\_REACHED@{XB\_LIMIT\_REACHED}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_LIMIT\_REACHED}{XB\_LIMIT\_REACHED}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+LIMIT\+\_\+\+REACHED~-\/222}
+
+\mbox{\Hypertarget{xbretcod_8h_a001e24b39e0f155fb1e892f5b1b9cff1}\label{xbretcod_8h_a001e24b39e0f155fb1e892f5b1b9cff1}}
+\index{xbretcod.h@{xbretcod.h}!XB\_LOCK\_FAILED@{XB\_LOCK\_FAILED}}
+\index{XB\_LOCK\_FAILED@{XB\_LOCK\_FAILED}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_LOCK\_FAILED}{XB\_LOCK\_FAILED}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+LOCK\+\_\+\+FAILED~-\/401}
+
+\mbox{\Hypertarget{xbretcod_8h_a299419a9c80e000b74bf97a2d24d6a3d}\label{xbretcod_8h_a299419a9c80e000b74bf97a2d24d6a3d}}
+\index{xbretcod.h@{xbretcod.h}!XB\_MAX\_ERROR\_NO@{XB\_MAX\_ERROR\_NO}}
+\index{XB\_MAX\_ERROR\_NO@{XB\_MAX\_ERROR\_NO}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_MAX\_ERROR\_NO}{XB\_MAX\_ERROR\_NO}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+MAX\+\_\+\+ERROR\+\_\+\+NO~-\/999}
+
+\mbox{\Hypertarget{xbretcod_8h_aa2925f035e3b186d7efa14648ea0e86d}\label{xbretcod_8h_aa2925f035e3b186d7efa14648ea0e86d}}
+\index{xbretcod.h@{xbretcod.h}!XB\_MEMCPY\_ERROR@{XB\_MEMCPY\_ERROR}}
+\index{XB\_MEMCPY\_ERROR@{XB\_MEMCPY\_ERROR}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_MEMCPY\_ERROR}{XB\_MEMCPY\_ERROR}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+MEMCPY\+\_\+\+ERROR~-\/122}
+
+\mbox{\Hypertarget{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}\label{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}}
+\index{xbretcod.h@{xbretcod.h}!XB\_NO\_ERROR@{XB\_NO\_ERROR}}
+\index{XB\_NO\_ERROR@{XB\_NO\_ERROR}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_NO\_ERROR}{XB\_NO\_ERROR}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+NO\+\_\+\+ERROR~0}
+
+\mbox{\Hypertarget{xbretcod_8h_ae687fc7d872ba0475a8477e4447f9b54}\label{xbretcod_8h_ae687fc7d872ba0475a8477e4447f9b54}}
+\index{xbretcod.h@{xbretcod.h}!XB\_NO\_MEMORY@{XB\_NO\_MEMORY}}
+\index{XB\_NO\_MEMORY@{XB\_NO\_MEMORY}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_NO\_MEMORY}{XB\_NO\_MEMORY}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+NO\+\_\+\+MEMORY~-\/100}
+
+\mbox{\Hypertarget{xbretcod_8h_ac2606659a54111334f5b02861e533700}\label{xbretcod_8h_ac2606659a54111334f5b02861e533700}}
+\index{xbretcod.h@{xbretcod.h}!XB\_NOT\_FOUND@{XB\_NOT\_FOUND}}
+\index{XB\_NOT\_FOUND@{XB\_NOT\_FOUND}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_NOT\_FOUND}{XB\_NOT\_FOUND}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+NOT\+\_\+\+FOUND~-\/208}
+
+\mbox{\Hypertarget{xbretcod_8h_a9474b400f647bdefbbb07e5177e8d7a1}\label{xbretcod_8h_a9474b400f647bdefbbb07e5177e8d7a1}}
+\index{xbretcod.h@{xbretcod.h}!XB\_NOT\_OPEN@{XB\_NOT\_OPEN}}
+\index{XB\_NOT\_OPEN@{XB\_NOT\_OPEN}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_NOT\_OPEN}{XB\_NOT\_OPEN}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+NOT\+\_\+\+OPEN~-\/207}
+
+\mbox{\Hypertarget{xbretcod_8h_aaab55236993a1d3acb29206252a904c8}\label{xbretcod_8h_aaab55236993a1d3acb29206252a904c8}}
+\index{xbretcod.h@{xbretcod.h}!XB\_OPEN\_ERROR@{XB\_OPEN\_ERROR}}
+\index{XB\_OPEN\_ERROR@{XB\_OPEN\_ERROR}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_OPEN\_ERROR}{XB\_OPEN\_ERROR}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+OPEN\+\_\+\+ERROR~-\/209}
+
+\mbox{\Hypertarget{xbretcod_8h_aec713cac2b03a0d536a2d16336ae7c0b}\label{xbretcod_8h_aec713cac2b03a0d536a2d16336ae7c0b}}
+\index{xbretcod.h@{xbretcod.h}!XB\_PARSE\_ERROR@{XB\_PARSE\_ERROR}}
+\index{XB\_PARSE\_ERROR@{XB\_PARSE\_ERROR}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_PARSE\_ERROR}{XB\_PARSE\_ERROR}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+PARSE\+\_\+\+ERROR~-\/500}
+
+\mbox{\Hypertarget{xbretcod_8h_adbd40585db8bb748d191f94a33bac710}\label{xbretcod_8h_adbd40585db8bb748d191f94a33bac710}}
+\index{xbretcod.h@{xbretcod.h}!XB\_READ\_ERROR@{XB\_READ\_ERROR}}
+\index{XB\_READ\_ERROR@{XB\_READ\_ERROR}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_READ\_ERROR}{XB\_READ\_ERROR}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+READ\+\_\+\+ERROR~-\/212}
+
+\mbox{\Hypertarget{xbretcod_8h_a373f30b2efcbbab9f6d060fb3fe8cba3}\label{xbretcod_8h_a373f30b2efcbbab9f6d060fb3fe8cba3}}
+\index{xbretcod.h@{xbretcod.h}!XB\_RENAME\_ERROR@{XB\_RENAME\_ERROR}}
+\index{XB\_RENAME\_ERROR@{XB\_RENAME\_ERROR}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_RENAME\_ERROR}{XB\_RENAME\_ERROR}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+RENAME\+\_\+\+ERROR~-\/205}
+
+\mbox{\Hypertarget{xbretcod_8h_a0455ad8719e153b08ec68b10c81e9f41}\label{xbretcod_8h_a0455ad8719e153b08ec68b10c81e9f41}}
+\index{xbretcod.h@{xbretcod.h}!XB\_SEEK\_ERROR@{XB\_SEEK\_ERROR}}
+\index{XB\_SEEK\_ERROR@{XB\_SEEK\_ERROR}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_SEEK\_ERROR}{XB\_SEEK\_ERROR}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+SEEK\+\_\+\+ERROR~-\/211}
+
+\mbox{\Hypertarget{xbretcod_8h_a5db3a90f215534143bdde81253729c7f}\label{xbretcod_8h_a5db3a90f215534143bdde81253729c7f}}
+\index{xbretcod.h@{xbretcod.h}!XB\_SYNTAX\_ERROR@{XB\_SYNTAX\_ERROR}}
+\index{XB\_SYNTAX\_ERROR@{XB\_SYNTAX\_ERROR}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_SYNTAX\_ERROR}{XB\_SYNTAX\_ERROR}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+SYNTAX\+\_\+\+ERROR~-\/700}
+
+\mbox{\Hypertarget{xbretcod_8h_af6aaf779fddecca521d785666f6dc56b}\label{xbretcod_8h_af6aaf779fddecca521d785666f6dc56b}}
+\index{xbretcod.h@{xbretcod.h}!XB\_TABLE\_NOT\_LOCKED@{XB\_TABLE\_NOT\_LOCKED}}
+\index{XB\_TABLE\_NOT\_LOCKED@{XB\_TABLE\_NOT\_LOCKED}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_TABLE\_NOT\_LOCKED}{XB\_TABLE\_NOT\_LOCKED}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+TABLE\+\_\+\+NOT\+\_\+\+LOCKED~-\/402}
+
+\mbox{\Hypertarget{xbretcod_8h_aff5646a6b0884ff81004de6961473ea6}\label{xbretcod_8h_aff5646a6b0884ff81004de6961473ea6}}
+\index{xbretcod.h@{xbretcod.h}!XB\_UNBALANCED\_PARENS@{XB\_UNBALANCED\_PARENS}}
+\index{XB\_UNBALANCED\_PARENS@{XB\_UNBALANCED\_PARENS}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_UNBALANCED\_PARENS}{XB\_UNBALANCED\_PARENS}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+UNBALANCED\+\_\+\+PARENS~-\/505}
+
+\mbox{\Hypertarget{xbretcod_8h_aedfa20a6c4eb9ba3063ba56be8280eac}\label{xbretcod_8h_aedfa20a6c4eb9ba3063ba56be8280eac}}
+\index{xbretcod.h@{xbretcod.h}!XB\_UNBALANCED\_QUOTES@{XB\_UNBALANCED\_QUOTES}}
+\index{XB\_UNBALANCED\_QUOTES@{XB\_UNBALANCED\_QUOTES}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_UNBALANCED\_QUOTES}{XB\_UNBALANCED\_QUOTES}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+UNBALANCED\+\_\+\+QUOTES~-\/506}
+
+\mbox{\Hypertarget{xbretcod_8h_aef34ebe6726057f805d6063130280549}\label{xbretcod_8h_aef34ebe6726057f805d6063130280549}}
+\index{xbretcod.h@{xbretcod.h}!XB\_WRITE\_ERROR@{XB\_WRITE\_ERROR}}
+\index{XB\_WRITE\_ERROR@{XB\_WRITE\_ERROR}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_WRITE\_ERROR}{XB\_WRITE\_ERROR}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+WRITE\+\_\+\+ERROR~-\/213}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbretcod_8h_source.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbretcod_8h_source.tex
new file mode 100644
index 0000000..54e20a0
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbretcod_8h_source.tex
@@ -0,0 +1,104 @@
+\hypertarget{xbretcod_8h_source}{}\doxysection{xbretcod.\+h}
+\label{xbretcod_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbretcod.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbretcod.h}}
+\mbox{\hyperlink{xbretcod_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{comment}{/* xbretcod.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,2023 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 \textcolor{preprocessor}{\#ifndef \_\_XB\_RETCODES\_H\_\_}}
+\DoxyCodeLine{17 \textcolor{preprocessor}{\#define \_\_XB\_RETCODES\_H\_\_}}
+\DoxyCodeLine{18 }
+\DoxyCodeLine{19 \textcolor{comment}{/***********************************************/}}
+\DoxyCodeLine{20 \textcolor{comment}{/* Return Codes and Error Messages */}}
+\DoxyCodeLine{21 }
+\DoxyCodeLine{22 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
+\DoxyCodeLine{23 }
+\DoxyCodeLine{24 \textcolor{preprocessor}{ \#define XB\_NO\_ERROR 0 }\textcolor{comment}{// general}}
+\DoxyCodeLine{25 \textcolor{preprocessor}{ \#define XB\_NO\_MEMORY -\/100 }\textcolor{comment}{// general}}
+\DoxyCodeLine{26 \textcolor{preprocessor}{ \#define XB\_INVALID\_OPTION -\/101 }\textcolor{comment}{// general}}
+\DoxyCodeLine{27 \textcolor{preprocessor}{ \#define XB\_INVALID\_PARAMETER -\/102 }\textcolor{comment}{// general}}
+\DoxyCodeLine{28 \textcolor{preprocessor}{ \#define XB\_DUP\_TABLE\_OR\_ALIAS -\/110 }\textcolor{comment}{// table manager}}
+\DoxyCodeLine{29 \textcolor{preprocessor}{ \#define XB\_INVALID\_NODELINK -\/120 }\textcolor{comment}{// linklist}}
+\DoxyCodeLine{30 \textcolor{preprocessor}{ \#define XB\_KEY\_NOT\_UNIQUE -\/121 }\textcolor{comment}{// linklist, index}}
+\DoxyCodeLine{31 \textcolor{preprocessor}{ \#define XB\_MEMCPY\_ERROR -\/122 }\textcolor{comment}{// memcpy failure}}
+\DoxyCodeLine{32 }
+\DoxyCodeLine{33 \textcolor{preprocessor}{ \#define XB\_FILE\_EXISTS -\/200 }\textcolor{comment}{// file}}
+\DoxyCodeLine{34 \textcolor{preprocessor}{ \#define XB\_ALREADY\_OPEN -\/201 }\textcolor{comment}{// file}}
+\DoxyCodeLine{35 \textcolor{preprocessor}{ \#define XB\_DBF\_FILE\_NOT\_OPEN -\/202 }\textcolor{comment}{// file}}
+\DoxyCodeLine{36 \textcolor{preprocessor}{ \#define XB\_FILE\_NOT\_FOUND -\/203 }\textcolor{comment}{// file}}
+\DoxyCodeLine{37 \textcolor{preprocessor}{ \#define XB\_FILE\_TYPE\_NOT\_SUPPORTED -\/204 }\textcolor{comment}{// file}}
+\DoxyCodeLine{38 \textcolor{preprocessor}{ \#define XB\_RENAME\_ERROR -\/205 }\textcolor{comment}{// file}}
+\DoxyCodeLine{39 \textcolor{preprocessor}{ \#define XB\_INVALID\_OBJECT -\/206 }\textcolor{comment}{// file}}
+\DoxyCodeLine{40 \textcolor{preprocessor}{ \#define XB\_NOT\_OPEN -\/207 }\textcolor{comment}{// file}}
+\DoxyCodeLine{41 \textcolor{preprocessor}{ \#define XB\_NOT\_FOUND -\/208 }\textcolor{comment}{// file}}
+\DoxyCodeLine{42 \textcolor{preprocessor}{ \#define XB\_OPEN\_ERROR -\/209 }\textcolor{comment}{// file}}
+\DoxyCodeLine{43 \textcolor{preprocessor}{ \#define XB\_CLOSE\_ERROR -\/210 }\textcolor{comment}{// file}}
+\DoxyCodeLine{44 \textcolor{preprocessor}{ \#define XB\_SEEK\_ERROR -\/211 }\textcolor{comment}{// file}}
+\DoxyCodeLine{45 \textcolor{preprocessor}{ \#define XB\_READ\_ERROR -\/212 }\textcolor{comment}{// file}}
+\DoxyCodeLine{46 \textcolor{preprocessor}{ \#define XB\_WRITE\_ERROR -\/213 }\textcolor{comment}{// file}}
+\DoxyCodeLine{47 \textcolor{preprocessor}{ \#define XB\_EOF -\/214 }\textcolor{comment}{// file}}
+\DoxyCodeLine{48 \textcolor{preprocessor}{ \#define XB\_BOF -\/215 }\textcolor{comment}{// file}}
+\DoxyCodeLine{49 \textcolor{preprocessor}{ \#define XB\_INVALID\_BLOCK\_SIZE -\/216 }\textcolor{comment}{// file}}
+\DoxyCodeLine{50 \textcolor{preprocessor}{ \#define XB\_INVALID\_BLOCK\_NO -\/217 }\textcolor{comment}{// file}}
+\DoxyCodeLine{51 \textcolor{preprocessor}{ \#define XB\_INVALID\_RECORD -\/218 }\textcolor{comment}{// file}}
+\DoxyCodeLine{52 \textcolor{preprocessor}{ \#define XB\_DELETE\_FAILED -\/219 }\textcolor{comment}{// file}}
+\DoxyCodeLine{53 \textcolor{preprocessor}{ \#define XB\_INVALID\_TABLE\_NAME -\/220 }\textcolor{comment}{// file}}
+\DoxyCodeLine{54 \textcolor{preprocessor}{ \#define XB\_EMPTY -\/221 }\textcolor{comment}{// file}}
+\DoxyCodeLine{55 \textcolor{preprocessor}{ \#define XB\_LIMIT\_REACHED -\/222 }\textcolor{comment}{// file}}
+\DoxyCodeLine{56 \textcolor{preprocessor}{ \#define XB\_BLOCKREAD\_NOT\_ENABLED -\/223 }\textcolor{comment}{// file}}
+\DoxyCodeLine{57 \textcolor{preprocessor}{ \#define XB\_DIRECTORY\_ERROR -\/224 }\textcolor{comment}{// file}}
+\DoxyCodeLine{58 }
+\DoxyCodeLine{59 \textcolor{preprocessor}{ \#define XB\_INVALID\_FIELD\_TYPE -\/300 }\textcolor{comment}{// field}}
+\DoxyCodeLine{60 \textcolor{preprocessor}{ \#define XB\_INVALID\_FIELD\_NO -\/301 }\textcolor{comment}{// field}}
+\DoxyCodeLine{61 \textcolor{preprocessor}{ \#define XB\_INVALID\_DATA -\/302 }\textcolor{comment}{// field}}
+\DoxyCodeLine{62 \textcolor{preprocessor}{ \#define XB\_INVALID\_FIELD\_NAME -\/303 }\textcolor{comment}{// field}}
+\DoxyCodeLine{63 \textcolor{preprocessor}{ \#define XB\_INVALID\_MEMO\_FIELD -\/304 }\textcolor{comment}{// field}}
+\DoxyCodeLine{64 \textcolor{preprocessor}{ \#define XB\_INVALID\_FIELD -\/305 }\textcolor{comment}{// field}}
+\DoxyCodeLine{65 \textcolor{preprocessor}{ \#define XB\_INVALID\_FIELD\_LEN -\/306 }\textcolor{comment}{// field}}
+\DoxyCodeLine{66 \textcolor{preprocessor}{ \#define XB\_INVALID\_DATE -\/307 }\textcolor{comment}{// date field}}
+\DoxyCodeLine{67 }
+\DoxyCodeLine{68 \textcolor{preprocessor}{ \#define XB\_INVALID\_LOCK\_OPTION -\/400 }\textcolor{comment}{// lock}}
+\DoxyCodeLine{69 \textcolor{preprocessor}{ \#define XB\_LOCK\_FAILED -\/401 }\textcolor{comment}{// lock}}
+\DoxyCodeLine{70 \textcolor{preprocessor}{ \#define XB\_TABLE\_NOT\_LOCKED -\/402 }\textcolor{comment}{// lock -\/ need table locked for operation}}
+\DoxyCodeLine{71 }
+\DoxyCodeLine{72 \textcolor{preprocessor}{ \#define XB\_PARSE\_ERROR -\/500 }\textcolor{comment}{// expression}}
+\DoxyCodeLine{73 \textcolor{preprocessor}{ \#define XB\_INVALID\_FUNCTION -\/501 }\textcolor{comment}{// expression}}
+\DoxyCodeLine{74 \textcolor{preprocessor}{ \#define XB\_INVALID\_PARM -\/502 }\textcolor{comment}{// expression}}
+\DoxyCodeLine{75 \textcolor{preprocessor}{ \#define XB\_INCONSISTENT\_PARM\_LENS -\/503 }\textcolor{comment}{// expression}}
+\DoxyCodeLine{76 \textcolor{preprocessor}{ \#define XB\_INCOMPATIBLE\_OPERANDS -\/504 }\textcolor{comment}{// expression}}
+\DoxyCodeLine{77 \textcolor{preprocessor}{ \#define XB\_UNBALANCED\_PARENS -\/505 }\textcolor{comment}{// expression}}
+\DoxyCodeLine{78 \textcolor{preprocessor}{ \#define XB\_UNBALANCED\_QUOTES -\/506 }\textcolor{comment}{// expression}}
+\DoxyCodeLine{79 \textcolor{preprocessor}{ \#define XB\_INVALID\_EXPRESSION -\/507 }\textcolor{comment}{// expression}}
+\DoxyCodeLine{80 }
+\DoxyCodeLine{81 \textcolor{preprocessor}{ \#define XB\_INVALID\_KEYNO -\/600 }\textcolor{comment}{// index}}
+\DoxyCodeLine{82 \textcolor{preprocessor}{ \#define XB\_INVALID\_INDEX -\/601 }\textcolor{comment}{// index file error}}
+\DoxyCodeLine{83 \textcolor{preprocessor}{ \#define XB\_INVALID\_TAG -\/602 }\textcolor{comment}{// invalid index tag name, must be <= 10 bytes}}
+\DoxyCodeLine{84 \textcolor{preprocessor}{ \#define XB\_INVALID\_PAGE -\/603 }\textcolor{comment}{// invalid index page}}
+\DoxyCodeLine{85 }
+\DoxyCodeLine{86 }
+\DoxyCodeLine{87 \textcolor{preprocessor}{ \#define XB\_SYNTAX\_ERROR -\/700 }\textcolor{comment}{// sql syntax error}}
+\DoxyCodeLine{88 }
+\DoxyCodeLine{89 }
+\DoxyCodeLine{90 \textcolor{preprocessor}{ \#define XB\_MAX\_ERROR\_NO -\/999}}
+\DoxyCodeLine{91 }
+\DoxyCodeLine{92 }
+\DoxyCodeLine{93 \textcolor{comment}{/* when updating this table, also need to update messages in xbssv.cpp */}}
+\DoxyCodeLine{94 }
+\DoxyCodeLine{95 }
+\DoxyCodeLine{96 \} \textcolor{comment}{/* namespace */}}
+\DoxyCodeLine{97 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_RETCODES\_H\_\_ */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{98 }
+
+\end{DoxyCode}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbselect_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbselect_8cpp.tex
new file mode 100644
index 0000000..220f74f
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbselect_8cpp.tex
@@ -0,0 +1,3 @@
+\hypertarget{xbselect_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/sql/xbselect.cpp File Reference}
+\label{xbselect_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbselect.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbselect.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbset_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbset_8cpp.tex
new file mode 100644
index 0000000..173e7aa
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbset_8cpp.tex
@@ -0,0 +1,3 @@
+\hypertarget{xbset_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/sql/xbset.cpp File Reference}
+\label{xbset_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbset.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbset.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbsql_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbsql_8cpp.tex
new file mode 100644
index 0000000..7838282
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbsql_8cpp.tex
@@ -0,0 +1,3 @@
+\hypertarget{xbsql_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/sql/xbsql.cpp File Reference}
+\label{xbsql_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbsql.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbsql.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbsql_8h.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbsql_8h.tex
new file mode 100644
index 0000000..aa01591
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbsql_8h.tex
@@ -0,0 +1,2 @@
+\hypertarget{xbsql_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbsql.h File Reference}
+\label{xbsql_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbsql.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbsql.h}}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbsql_8h_source.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbsql_8h_source.tex
new file mode 100644
index 0000000..44b5335
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbsql_8h_source.tex
@@ -0,0 +1,167 @@
+\hypertarget{xbsql_8h_source}{}\doxysection{xbsql.\+h}
+\label{xbsql_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbsql.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbsql.h}}
+\mbox{\hyperlink{xbsql_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{comment}{/* xbsql.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}{This class manages a list of open tables, open indices are connected to the open tables}}
+\DoxyCodeLine{15 \textcolor{comment}{}}
+\DoxyCodeLine{16 \textcolor{comment}{*/}}
+\DoxyCodeLine{17 }
+\DoxyCodeLine{18 }
+\DoxyCodeLine{19 \textcolor{preprocessor}{\#ifndef \_\_XB\_XBSQL\_H\_\_}}
+\DoxyCodeLine{20 \textcolor{preprocessor}{\#define \_\_XB\_XBSQL\_H\_\_}}
+\DoxyCodeLine{21 }
+\DoxyCodeLine{22 \textcolor{preprocessor}{\#ifdef CMAKE\_COMPILER\_IS\_GNUCC}}
+\DoxyCodeLine{23 \textcolor{preprocessor}{\#pragma interface}}
+\DoxyCodeLine{24 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{25 }
+\DoxyCodeLine{26 }
+\DoxyCodeLine{27 \textcolor{preprocessor}{\#ifdef XB\_SQL\_SUPPORT}}
+\DoxyCodeLine{28 }
+\DoxyCodeLine{29 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
+\DoxyCodeLine{30 }
+\DoxyCodeLine{31 }
+\DoxyCodeLine{32 \textcolor{keyword}{struct }XBDLLEXPORT xbSqlFld\{}
+\DoxyCodeLine{33 \textcolor{keywordtype}{char} cType; \textcolor{comment}{// F -\/ Database field}}
+\DoxyCodeLine{34 \textcolor{comment}{// L -\/ Literal}}
+\DoxyCodeLine{35 \textcolor{comment}{// E -\/ Expression}}
+\DoxyCodeLine{36 xbInt16 iFldNo; \textcolor{comment}{// Field number if db field}}
+\DoxyCodeLine{37 xbExp * pExp; \textcolor{comment}{// If cType=E, pointer to parsed expression}}
+\DoxyCodeLine{38 xbString sFldAlias; \textcolor{comment}{// Alias name for query display}}
+\DoxyCodeLine{39 xbSqlFld * Next; \textcolor{comment}{// Next field in list}}
+\DoxyCodeLine{40 \};}
+\DoxyCodeLine{41 }
+\DoxyCodeLine{42 \textcolor{keyword}{class }xbStmt;}
+\DoxyCodeLine{43 }
+\DoxyCodeLine{44 }
+\DoxyCodeLine{45 \textcolor{keyword}{struct }XBDLLEXPORT xbTblJoin \{ \textcolor{comment}{// structure for defining joined tables in the query}}
+\DoxyCodeLine{46 }
+\DoxyCodeLine{47 xbString sTableName;}
+\DoxyCodeLine{48 xbString sAlias;}
+\DoxyCodeLine{49 xbString sJoinExp; \textcolor{comment}{// table join expression}}
+\DoxyCodeLine{50 \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *pDbf; \textcolor{comment}{// pointer the the dbf structure for this table}}
+\DoxyCodeLine{51 xbTag *pTag; \textcolor{comment}{// pointer to relevant tag for this table, null for record order}}
+\DoxyCodeLine{52 xbExp *pLinkExp; \textcolor{comment}{// pointer to parsed linkage expression}}
+\DoxyCodeLine{53 \textcolor{keywordtype}{char} cJoinType; \textcolor{comment}{// M -\/ Master}}
+\DoxyCodeLine{54 \textcolor{comment}{// L -\/ Left or Full Left}}
+\DoxyCodeLine{55 \textcolor{comment}{// R -\/ Right or Full Right}}
+\DoxyCodeLine{56 \textcolor{comment}{// I -\/ Inner}}
+\DoxyCodeLine{57 \textcolor{comment}{// O -\/ Outer or Full Outer Outer}}
+\DoxyCodeLine{58 }
+\DoxyCodeLine{59 xbTblJoin *pMaster; \textcolor{comment}{// pointer to master table, null if this is the primary master}}
+\DoxyCodeLine{60 xbLinkList<xbTblJoin *> llSubList; \textcolor{comment}{// linked list of subordinate tables}}
+\DoxyCodeLine{61 \textcolor{comment}{// xbStmt *pSubQuery; // pointer to sub query}}
+\DoxyCodeLine{62 xbTblJoin *next; \textcolor{comment}{// next tbl}}
+\DoxyCodeLine{63 \};}
+\DoxyCodeLine{64 }
+\DoxyCodeLine{65 }
+\DoxyCodeLine{66 \textcolor{keyword}{class }XBDLLEXPORT xbStmt : \textcolor{keyword}{public} xbSsv\{}
+\DoxyCodeLine{67 }
+\DoxyCodeLine{68 \textcolor{keyword}{public}:}
+\DoxyCodeLine{69 xbStmt( \mbox{\hyperlink{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}{xbXBase}} *x );}
+\DoxyCodeLine{70 \string~xbStmt();}
+\DoxyCodeLine{71 }
+\DoxyCodeLine{72 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
+\DoxyCodeLine{73 xbInt16 DumpStmtInternals();}
+\DoxyCodeLine{74 xbInt16 Test();}
+\DoxyCodeLine{75 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{76 }
+\DoxyCodeLine{77 xbInt16 ExecuteQuery( \textcolor{keyword}{const} xbString \&sCmdLine ); }
+\DoxyCodeLine{78 }
+\DoxyCodeLine{79 \textcolor{comment}{// xbInt16 FetchFirst();}}
+\DoxyCodeLine{80 \textcolor{comment}{// xbInt16 FetchNext();}}
+\DoxyCodeLine{81 \textcolor{comment}{// xbInt16 FetchPrev();}}
+\DoxyCodeLine{82 \textcolor{comment}{// xbInt16 FetchLast();}}
+\DoxyCodeLine{83 \textcolor{comment}{// xbString \&GetField( const xbString sFldName );}}
+\DoxyCodeLine{84 }
+\DoxyCodeLine{85 \textcolor{keyword}{protected}:}
+\DoxyCodeLine{86 }
+\DoxyCodeLine{87 \textcolor{keyword}{private}:}
+\DoxyCodeLine{88 }
+\DoxyCodeLine{89 xbInt16 AddQryTbl( \textcolor{keyword}{const} xbString \&sTable, \textcolor{keyword}{const} xbString \&sAlias, \textcolor{keyword}{const} xbString \&sExpression, \textcolor{keyword}{const} \textcolor{keywordtype}{char} cJoinType );}
+\DoxyCodeLine{90 xbInt16 CvtSqlExp2DbaseExp( \textcolor{keyword}{const} xbString \&sExpIn, xbString \&sExpOut );}
+\DoxyCodeLine{91 xbInt16 GetNextFromSeg( \textcolor{keyword}{const} xbString \&sLineIn, xbString \&sFromSegOut );}
+\DoxyCodeLine{92 xbUInt32 GetNextToken( \textcolor{keyword}{const} xbString \&sCmdLineIn, xbString \&sTokenOut, xbUInt32 ulStartPos );}
+\DoxyCodeLine{93 xbInt16 GetParenCnt( \textcolor{keyword}{const} xbString \&sToken );}
+\DoxyCodeLine{94 xbInt16 ParseFromStmt( \textcolor{keyword}{const} xbString \&sFromLine );}
+\DoxyCodeLine{95 xbInt16 ParseStmt( \textcolor{keyword}{const} xbString \&sCmdLine );}
+\DoxyCodeLine{96 xbInt16 ProcessFromSeg( \textcolor{keyword}{const} xbString \&sFromStmtSeg );}
+\DoxyCodeLine{97 xbInt16 UpdateJoinList( \textcolor{keywordtype}{char} cType, \textcolor{keyword}{const} xbString \&sTableName, \textcolor{keyword}{const} xbString \&sAlias, \textcolor{keyword}{const} xbString \&sExp, \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *d, xbExp *e ); \textcolor{comment}{//, xbTag *t);}}
+\DoxyCodeLine{98 }
+\DoxyCodeLine{99 \mbox{\hyperlink{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}{xbXBase}} *xbase; \textcolor{comment}{// pointer to xbase structure}}
+\DoxyCodeLine{100 }
+\DoxyCodeLine{101 }
+\DoxyCodeLine{102 xbTblJoin * pTblList;}
+\DoxyCodeLine{103 xbSqlFld *fl; \textcolor{comment}{// field list in sql select statement}}
+\DoxyCodeLine{104 xbString sStmt; \textcolor{comment}{// complete query statment}}
+\DoxyCodeLine{105 xbString sFields; \textcolor{comment}{// list of fields}}
+\DoxyCodeLine{106 xbString sFrom; \textcolor{comment}{// from statment}}
+\DoxyCodeLine{107 xbString sWhere; \textcolor{comment}{// where clause}}
+\DoxyCodeLine{108 xbString sOrderBy; \textcolor{comment}{// sort order}}
+\DoxyCodeLine{109 xbString sGroupBy; \textcolor{comment}{// group by}}
+\DoxyCodeLine{110 xbString sHaving; \textcolor{comment}{// having}}
+\DoxyCodeLine{111 xbUInt32 ulFromPos;}
+\DoxyCodeLine{112 xbUInt32 ulWherePos;}
+\DoxyCodeLine{113 xbUInt32 ulOrderByPos;}
+\DoxyCodeLine{114 xbUInt32 ulGroupByPos;}
+\DoxyCodeLine{115 xbUInt32 ulHavingPos;}
+\DoxyCodeLine{116 }
+\DoxyCodeLine{117 }
+\DoxyCodeLine{118 \};}
+\DoxyCodeLine{119 }
+\DoxyCodeLine{120 }
+\DoxyCodeLine{121 \textcolor{keyword}{class }XBDLLEXPORT xbSql : \textcolor{keyword}{public} xbSsv \{}
+\DoxyCodeLine{122 \textcolor{keyword}{public}:}
+\DoxyCodeLine{123 \textcolor{comment}{// xbSql();}}
+\DoxyCodeLine{124 xbSql( \mbox{\hyperlink{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}{xbXBase}} *x );}
+\DoxyCodeLine{125 \string~xbSql();}
+\DoxyCodeLine{126 }
+\DoxyCodeLine{127 xbInt16 ExecuteNonQuery( \textcolor{keyword}{const} xbString \&sCmdLine );}
+\DoxyCodeLine{128 \mbox{\hyperlink{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}{xbXBase}} *GetXbasePtr() \textcolor{keyword}{const};}
+\DoxyCodeLine{129 }
+\DoxyCodeLine{130 \textcolor{keyword}{protected}:}
+\DoxyCodeLine{131 }
+\DoxyCodeLine{132 \textcolor{keyword}{private}:}
+\DoxyCodeLine{133 }
+\DoxyCodeLine{134 xbInt16 SqlAlterTable( \textcolor{keyword}{const} xbString \&sCmdLine );}
+\DoxyCodeLine{135 xbInt16 SqlCreateTable( \textcolor{keyword}{const} xbString \&sCmdLine );}
+\DoxyCodeLine{136 xbInt16 SqlDelete( \textcolor{keyword}{const} xbString \&sCmdLine );}
+\DoxyCodeLine{137 xbInt16 SqlDropTable( \textcolor{keyword}{const} xbString \&sCmdLine );}
+\DoxyCodeLine{138 }
+\DoxyCodeLine{139 \textcolor{preprocessor}{ \#ifdef XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{140 xbInt16 SqlCreateIndex( \textcolor{keyword}{const} xbString \&sCmdLine );}
+\DoxyCodeLine{141 xbInt16 SqlDropIndex( \textcolor{keyword}{const} xbString \&sCmdLine );}
+\DoxyCodeLine{142 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{143 }
+\DoxyCodeLine{144 \textcolor{comment}{// xbInt16 SqlCreateView( const xbString \&sCmdLine );}}
+\DoxyCodeLine{145 \textcolor{comment}{// xbInt16 SqlDropView( const xbString \&sCmdLine );}}
+\DoxyCodeLine{146 \textcolor{comment}{// xbInt16 SqlUpdate( const xbString \&sCmdLine );}}
+\DoxyCodeLine{147 \textcolor{comment}{// xbInt16 SqlSelect( const xbString \&sCmdLine );}}
+\DoxyCodeLine{148 }
+\DoxyCodeLine{149 \textcolor{keywordtype}{void} SqlHelp() \textcolor{keyword}{const};}
+\DoxyCodeLine{150 xbInt16 SqlInsert( \textcolor{keyword}{const} xbString \&sCmLine );}
+\DoxyCodeLine{151 xbInt16 SqlSet( \textcolor{keyword}{const} xbString \&sCmdLine );}
+\DoxyCodeLine{152 xbInt16 SqlUse( \textcolor{keyword}{const} xbString \&sCmdLine );}
+\DoxyCodeLine{153 }
+\DoxyCodeLine{154 \mbox{\hyperlink{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}{xbXBase}} *xbase;}
+\DoxyCodeLine{155 xbUda uda;}
+\DoxyCodeLine{156 }
+\DoxyCodeLine{157 \};}
+\DoxyCodeLine{158 }
+\DoxyCodeLine{159 \} \textcolor{comment}{/* namespace xb */}}
+\DoxyCodeLine{160 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* XB\_SQL\_SUPPORT */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{161 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_XBSQL\_H\_\_ */}\textcolor{preprocessor}{}}
+
+\end{DoxyCode}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbssv_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbssv_8cpp.tex
new file mode 100644
index 0000000..a9556e1
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbssv_8cpp.tex
@@ -0,0 +1,13 @@
+\hypertarget{xbssv_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbssv.cpp File Reference}
+\label{xbssv_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbssv.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbssv.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+\doxysubsection*{Namespaces}
+\begin{DoxyCompactItemize}
+\item
+namespace \mbox{\hyperlink{namespacexb}{xb}}
+\end{DoxyCompactItemize}
+\doxysubsection*{Variables}
+\begin{DoxyCompactItemize}
+\item
+const xb\+Error\+Message \mbox{\hyperlink{namespacexb_a04be228a037d220dd5564f5ef618adcc}{xb\+::xb\+Error\+Messages}} \mbox{[}$\,$\mbox{]}
+\end{DoxyCompactItemize}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbssv_8h.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbssv_8h.tex
new file mode 100644
index 0000000..d903266
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbssv_8h.tex
@@ -0,0 +1,17 @@
+\hypertarget{xbssv_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbssv.h File Reference}
+\label{xbssv_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbssv.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbssv.h}}
+\doxysubsection*{Data Structures}
+\begin{DoxyCompactItemize}
+\item
+class \mbox{\hyperlink{classxb_1_1xbSsv}{xb\+::xb\+Ssv}}
+\begin{DoxyCompactList}\small\item\em Class for handling shared system variables. \end{DoxyCompactList}\end{DoxyCompactItemize}
+\doxysubsection*{Namespaces}
+\begin{DoxyCompactItemize}
+\item
+namespace \mbox{\hyperlink{namespacexb}{xb}}
+\end{DoxyCompactItemize}
+\doxysubsection*{Variables}
+\begin{DoxyCompactItemize}
+\item
+class XBDLLEXPORT \mbox{\hyperlink{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}{xb\+::xb\+XBase}}
+\end{DoxyCompactItemize}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbssv_8h_source.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbssv_8h_source.tex
new file mode 100644
index 0000000..df22666
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbssv_8h_source.tex
@@ -0,0 +1,187 @@
+\hypertarget{xbssv_8h_source}{}\doxysection{xbssv.\+h}
+\label{xbssv_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbssv.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbssv.h}}
+\mbox{\hyperlink{xbssv_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{comment}{/* xbssv.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,2023 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\_XBSSV\_H\_\_}}
+\DoxyCodeLine{18 \textcolor{preprocessor}{\#define \_\_XB\_XBSSV\_H\_\_}}
+\DoxyCodeLine{19 }
+\DoxyCodeLine{20 \textcolor{preprocessor}{\#ifdef CMAKE\_COMPILER\_IS\_GNUCC}}
+\DoxyCodeLine{21 \textcolor{preprocessor}{\#pragma interface}}
+\DoxyCodeLine{22 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{23 }
+\DoxyCodeLine{24 }
+\DoxyCodeLine{25 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
+\DoxyCodeLine{26 }
+\DoxyCodeLine{27 \textcolor{keyword}{class }XBDLLEXPORT \mbox{\hyperlink{classxb_1_1xbXBase}{xbXBase}};}
+\DoxyCodeLine{28 }
+\DoxyCodeLine{30 \textcolor{keyword}{struct }XBDLLEXPORT xbErrorMessage\{}
+\DoxyCodeLine{31 xbInt16 iErrorNo;}
+\DoxyCodeLine{32 \textcolor{keyword}{const} \textcolor{keywordtype}{char} *sErrorText;}
+\DoxyCodeLine{33 \};}
+\DoxyCodeLine{35 }
+\DoxyCodeLine{36 }
+\DoxyCodeLine{38 }
+\DoxyCodeLine{49 \textcolor{comment}{// By design, DBase allows mutliple records in a table all having the same key, but only one entry in a unique index}}
+\DoxyCodeLine{50 \textcolor{comment}{// XB\_HALT\_ON\_DUP\_KEY tells the library to not allow appending records which generate duplicate keys in a unique index}}
+\DoxyCodeLine{51 \textcolor{comment}{//}}
+\DoxyCodeLine{52 \textcolor{preprocessor}{\#if defined (XB\_NDX\_SUPPORT) || defined (XB\_MDX\_SUPPORT)}}
+\DoxyCodeLine{53 \textcolor{preprocessor}{\#define XB\_HALT\_ON\_DUPKEY 0}}
+\DoxyCodeLine{54 \textcolor{preprocessor}{\#define XB\_EMULATE\_DBASE 1}}
+\DoxyCodeLine{55 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{56 }
+\DoxyCodeLine{57 }
+\DoxyCodeLine{58 }
+\DoxyCodeLine{59 \textcolor{keyword}{class }XBDLLEXPORT \mbox{\hyperlink{classxb_1_1xbSsv}{xbSsv}}\{}
+\DoxyCodeLine{60 \textcolor{keyword}{public}:}
+\DoxyCodeLine{61 \mbox{\hyperlink{classxb_1_1xbSsv}{xbSsv}}();}
+\DoxyCodeLine{62 \textcolor{keyword}{const} \textcolor{keyword}{static} \textcolor{keywordtype}{char} *ErrorCodeText[];}
+\DoxyCodeLine{63 }
+\DoxyCodeLine{64 \textcolor{keywordtype}{void} DisplayError ( xbInt16 ErrorCode ) \textcolor{keyword}{const};}
+\DoxyCodeLine{65 \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& GetDefaultDateFormat () \textcolor{keyword}{const};}
+\DoxyCodeLine{66 \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& GetDataDirectory () \textcolor{keyword}{const};}
+\DoxyCodeLine{67 \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& GetTempDirectory () \textcolor{keyword}{const};}
+\DoxyCodeLine{68 }
+\DoxyCodeLine{69 \textcolor{keywordtype}{void} GetHomeDir ( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sHomeDirOut );}
+\DoxyCodeLine{70 }
+\DoxyCodeLine{71 }
+\DoxyCodeLine{72 xbInt16 GetEndianType () \textcolor{keyword}{const};}
+\DoxyCodeLine{73 \textcolor{keyword}{const} \textcolor{keywordtype}{char} *GetErrorMessage ( xbInt16 ErrorCode ) \textcolor{keyword}{const};}
+\DoxyCodeLine{74 \textcolor{keywordtype}{char} GetPathSeparator () \textcolor{keyword}{const};}
+\DoxyCodeLine{75 }
+\DoxyCodeLine{76 \textcolor{keywordtype}{void} SetDataDirectory ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sDataDirectory );}
+\DoxyCodeLine{77 \textcolor{keywordtype}{void} SetDefaultDateFormat ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sDefaultDateFormat );}
+\DoxyCodeLine{78 \textcolor{keywordtype}{void} SetTempDirectory ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTempDirectory );}
+\DoxyCodeLine{79 }
+\DoxyCodeLine{80 }
+\DoxyCodeLine{81 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} BitSet ( \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} c, xbInt16 iBitNo ) \textcolor{keyword}{const};}
+\DoxyCodeLine{82 \textcolor{keywordtype}{void} BitDump ( \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} c ) \textcolor{keyword}{const};}
+\DoxyCodeLine{83 \textcolor{keywordtype}{void} BitDump ( \textcolor{keywordtype}{char} c ) \textcolor{keyword}{const};}
+\DoxyCodeLine{84 }
+\DoxyCodeLine{85 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetDefaultAutoCommit () \textcolor{keyword}{const};}
+\DoxyCodeLine{86 \textcolor{keywordtype}{void} SetDefaultAutoCommit ( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bDefaultAutoCommit );}
+\DoxyCodeLine{87 }
+\DoxyCodeLine{88 \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& GetLogDirectory () \textcolor{keyword}{const};}
+\DoxyCodeLine{89 \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& GetLogFileName () \textcolor{keyword}{const};}
+\DoxyCodeLine{90 \textcolor{keywordtype}{void} SetLogDirectory ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sLogDirectory );}
+\DoxyCodeLine{91 \textcolor{keywordtype}{void} SetLogFileName ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sLogFileName );}
+\DoxyCodeLine{92 }
+\DoxyCodeLine{93 }
+\DoxyCodeLine{94 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetMultiUser () \textcolor{keyword}{const};}
+\DoxyCodeLine{95 \textcolor{keywordtype}{void} SetMultiUser ( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bMultiUser );}
+\DoxyCodeLine{96 }
+\DoxyCodeLine{97 \textcolor{preprocessor}{ \#if defined (XB\_NDX\_SUPPORT) || defined (XB\_MDX\_SUPPORT)}}
+\DoxyCodeLine{98 xbInt16 GetUniqueKeyOpt () \textcolor{keyword}{const};}
+\DoxyCodeLine{99 xbInt16 SetUniqueKeyOpt ( xbInt16 iUniqueKeyOpt );}
+\DoxyCodeLine{100 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// (XB\_NDX\_SUPPORT) || defined (XB\_MDX\_SUPPORT)}}
+\DoxyCodeLine{101 }
+\DoxyCodeLine{102 \textcolor{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
+\DoxyCodeLine{103 xbInt16 GetDefaultLockRetries () \textcolor{keyword}{const};}
+\DoxyCodeLine{104 \textcolor{keywordtype}{void} SetDefaultLockRetries ( xbInt16 iRetryCount );}
+\DoxyCodeLine{105 xbInt32 GetDefaultLockWait () \textcolor{keyword}{const};}
+\DoxyCodeLine{106 \textcolor{keywordtype}{void} SetDefaultLockWait ( xbInt32 lRetryWait );}
+\DoxyCodeLine{107 xbInt16 GetDefaultLockFlavor () \textcolor{keyword}{const};}
+\DoxyCodeLine{108 \textcolor{keywordtype}{void} SetDefaultLockFlavor ( xbInt16 iLockFlavor );}
+\DoxyCodeLine{109 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetDefaultAutoLock () \textcolor{keyword}{const};}
+\DoxyCodeLine{110 \textcolor{keywordtype}{void} SetDefaultAutoLock ( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bAutoLock );}
+\DoxyCodeLine{111 \textcolor{keywordtype}{void} EnableDefaultAutoLock ();}
+\DoxyCodeLine{112 \textcolor{keywordtype}{void} DisableDefaultAutoLock ();}
+\DoxyCodeLine{113 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_LOCKING\_SUPPORT}}
+\DoxyCodeLine{114 }
+\DoxyCodeLine{115 \textcolor{preprocessor}{ \#ifdef XB\_MDX\_SUPPORT}}
+\DoxyCodeLine{116 xbInt16 GetCreateMdxBlockSize() \textcolor{keyword}{const};}
+\DoxyCodeLine{117 xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );}
+\DoxyCodeLine{118 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_MDX\_SUPPORT}}
+\DoxyCodeLine{119 }
+\DoxyCodeLine{120 \textcolor{preprocessor}{ \#ifdef XB\_BLOCKREAD\_SUPPORT}}
+\DoxyCodeLine{121 xbUInt32 GetDefaultBlockReadSize() \textcolor{keyword}{const};}
+\DoxyCodeLine{122 \textcolor{keywordtype}{void} SetDefaultBlockReadSize( xbUInt32 ulDfltBlockReadSize );}
+\DoxyCodeLine{123 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_BLOCKREAD\_SUPPORT}}
+\DoxyCodeLine{124 }
+\DoxyCodeLine{125 }
+\DoxyCodeLine{126 \textcolor{keyword}{protected}:}
+\DoxyCodeLine{127 }
+\DoxyCodeLine{128 \textcolor{keywordtype}{void} SetEndianType ();}
+\DoxyCodeLine{129 }
+\DoxyCodeLine{130 \textcolor{keyword}{static} xbInt16 \mbox{\hyperlink{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}{iEndianType}}; \textcolor{comment}{// B=Big Endian L=Little Endian}}
+\DoxyCodeLine{131 \textcolor{keyword}{static} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \mbox{\hyperlink{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}{sNullString}}; \textcolor{comment}{// Null String}}
+\DoxyCodeLine{132 }
+\DoxyCodeLine{133 }
+\DoxyCodeLine{134 \textcolor{keyword}{private}:}
+\DoxyCodeLine{135 }
+\DoxyCodeLine{136 \textcolor{keyword}{static} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sDefaultDateFormat;}
+\DoxyCodeLine{137 \textcolor{keyword}{static} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sDataDirectory; \textcolor{comment}{//Data file directory}}
+\DoxyCodeLine{138 \textcolor{keyword}{static} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sTempDirectory; \textcolor{comment}{//Temp file directory}}
+\DoxyCodeLine{139 }
+\DoxyCodeLine{140 \textcolor{preprocessor}{ \#ifdef XB\_LOGGING\_SUPPORT}}
+\DoxyCodeLine{141 \textcolor{keyword}{static} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sLogDirectory; \textcolor{comment}{//Default location to store log files}}
+\DoxyCodeLine{142 \textcolor{keyword}{static} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sLogFileName; \textcolor{comment}{//Default LogFileName}}
+\DoxyCodeLine{143 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{144 }
+\DoxyCodeLine{145 \textcolor{keyword}{static} xbInt16 iDefaultFileVersion; \textcolor{comment}{// 3 = DBase 3}}
+\DoxyCodeLine{146 \textcolor{comment}{// 4 = DBase 4}}
+\DoxyCodeLine{147 \textcolor{comment}{// default version used in CreateTable command}}
+\DoxyCodeLine{148 \textcolor{comment}{// can be over ridden at the Xbase level, or table level}}
+\DoxyCodeLine{149 \textcolor{comment}{// Different versions can be open simultaneously}}
+\DoxyCodeLine{150 }
+\DoxyCodeLine{151 \textcolor{keyword}{static} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bDefaultAutoCommit; \textcolor{comment}{// Default dbf auto commit switch}}
+\DoxyCodeLine{152 }
+\DoxyCodeLine{153 \textcolor{keyword}{static} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bMultiUser; \textcolor{comment}{// True if multi user mode is turned on}}
+\DoxyCodeLine{154 \textcolor{comment}{// Turn this off for better performance in single user mode}}
+\DoxyCodeLine{155 \textcolor{comment}{// This needs to be turned on or off before any data tables are opened}}
+\DoxyCodeLine{156 \textcolor{comment}{// turning this on after tables are opened, can result in out of date}}
+\DoxyCodeLine{157 \textcolor{comment}{// file buffers if multiple users are sharing the files}}
+\DoxyCodeLine{158 }
+\DoxyCodeLine{159 \textcolor{preprocessor}{\#ifdef XB\_LOCKING\_SUPPORT}}
+\DoxyCodeLine{160 \textcolor{keyword}{static} xbInt32 lDefaultLockWait; \textcolor{comment}{// Number of milliseconds between lock retries}}
+\DoxyCodeLine{161 \textcolor{keyword}{static} xbInt16 iDefaultLockRetries; \textcolor{comment}{// Number of times to retry a lock before conceding}}
+\DoxyCodeLine{162 \textcolor{keyword}{static} xbInt16 bDefaultAutoLock; \textcolor{comment}{// Autolocking enabled?}}
+\DoxyCodeLine{163 \textcolor{keyword}{static} xbInt16 iDefaultLockFlavor; \textcolor{comment}{// 1 = DBase}}
+\DoxyCodeLine{164 \textcolor{comment}{// 2 = Clipper -\/ not developed yet}}
+\DoxyCodeLine{165 \textcolor{comment}{// 3 = FoxPro -\/ not developed yet}}
+\DoxyCodeLine{166 \textcolor{comment}{// 9 = Xbase64 -\/ not developed yet}}
+\DoxyCodeLine{167 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{168 }
+\DoxyCodeLine{169 }
+\DoxyCodeLine{170 \textcolor{preprocessor}{\#if defined (XB\_NDX\_SUPPORT) || defined (XB\_MDX\_SUPPORT)}}
+\DoxyCodeLine{171 }
+\DoxyCodeLine{172 \textcolor{keyword}{static} xbInt16 iUniqueKeyOpt;}
+\DoxyCodeLine{173 }
+\DoxyCodeLine{174 \textcolor{comment}{// is one of:}}
+\DoxyCodeLine{175 \textcolor{comment}{// XB\_HALT\_ON\_DUPKEY}}
+\DoxyCodeLine{176 \textcolor{comment}{// XB\_EMULATE\_DBASE}}
+\DoxyCodeLine{177 }
+\DoxyCodeLine{178 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{179 }
+\DoxyCodeLine{180 }
+\DoxyCodeLine{181 \textcolor{preprocessor}{\#ifdef XB\_MDX\_SUPPORT}}
+\DoxyCodeLine{182 \textcolor{keyword}{static} xbInt16 iCreateMdxBlockSize; \textcolor{comment}{// System level Mdx Block Size}}
+\DoxyCodeLine{183 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_MDX\_SUPPORT}}
+\DoxyCodeLine{184 }
+\DoxyCodeLine{185 }
+\DoxyCodeLine{186 \textcolor{preprocessor}{\#ifdef XB\_BLOCKREAD\_SUPPORT}}
+\DoxyCodeLine{187 \textcolor{keyword}{static} xbUInt32 ulDefaultBlockReadSize;}
+\DoxyCodeLine{188 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_BLOCKREAD\_SUPPORT}}
+\DoxyCodeLine{189 }
+\DoxyCodeLine{190 }
+\DoxyCodeLine{191 \};}
+\DoxyCodeLine{192 }
+\DoxyCodeLine{193 \} \textcolor{comment}{/* namespace xb */}}
+\DoxyCodeLine{194 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_XBSSV\_H\_\_ */}\textcolor{preprocessor}{}}
+
+\end{DoxyCode}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbstmt_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbstmt_8cpp.tex
new file mode 100644
index 0000000..2063cf2
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbstmt_8cpp.tex
@@ -0,0 +1,3 @@
+\hypertarget{xbstmt_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/sql/xbstmt.cpp File Reference}
+\label{xbstmt_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbstmt.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbstmt.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbstring_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbstring_8cpp.tex
new file mode 100644
index 0000000..9523d9f
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbstring_8cpp.tex
@@ -0,0 +1,13 @@
+\hypertarget{xbstring_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbstring.cpp File Reference}
+\label{xbstring_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbstring.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbstring.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+\doxysubsection*{Namespaces}
+\begin{DoxyCompactItemize}
+\item
+namespace \mbox{\hyperlink{namespacexb}{xb}}
+\end{DoxyCompactItemize}
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+std\+::ostream \& \mbox{\hyperlink{namespacexb_ad27f348219e895c44f74addba8e1889a}{xb\+::operator$<$$<$}} (std\+::ostream \&os, const xb\+String \&s)
+\begin{DoxyCompactList}\small\item\em Stream insertion operator \texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<}. \end{DoxyCompactList}\end{DoxyCompactItemize}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbstring_8h.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbstring_8h.tex
new file mode 100644
index 0000000..f941482
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbstring_8h.tex
@@ -0,0 +1,14 @@
+\hypertarget{xbstring_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbstring.h File Reference}
+\label{xbstring_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbstring.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbstring.h}}
+{\ttfamily \#include $<$stdlib.\+h$>$}\newline
+{\ttfamily \#include $<$iostream$>$}\newline
+\doxysubsection*{Data Structures}
+\begin{DoxyCompactItemize}
+\item
+class \mbox{\hyperlink{classxb_1_1xbString}{xb\+::xb\+String}}
+\begin{DoxyCompactList}\small\item\em Class for handling string data. \end{DoxyCompactList}\end{DoxyCompactItemize}
+\doxysubsection*{Namespaces}
+\begin{DoxyCompactItemize}
+\item
+namespace \mbox{\hyperlink{namespacexb}{xb}}
+\end{DoxyCompactItemize}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbstring_8h_source.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbstring_8h_source.tex
new file mode 100644
index 0000000..522d37f
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbstring_8h_source.tex
@@ -0,0 +1,174 @@
+\hypertarget{xbstring_8h_source}{}\doxysection{xbstring.\+h}
+\label{xbstring_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbstring.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbstring.h}}
+\mbox{\hyperlink{xbstring_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{comment}{/* xbstring.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 \textcolor{preprocessor}{\#ifndef \_\_XBSTRING\_H\_\_}}
+\DoxyCodeLine{17 \textcolor{preprocessor}{\#define \_\_XBSTRING\_H\_\_}}
+\DoxyCodeLine{18 }
+\DoxyCodeLine{19 \textcolor{preprocessor}{\#ifdef CMAKE\_COMPILER\_IS\_GNUCC}}
+\DoxyCodeLine{20 \textcolor{preprocessor}{\#pragma interface}}
+\DoxyCodeLine{21 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{22 }
+\DoxyCodeLine{23 \textcolor{preprocessor}{\#include <stdlib.h>}}
+\DoxyCodeLine{24 \textcolor{preprocessor}{\#include <iostream>}}
+\DoxyCodeLine{25 }
+\DoxyCodeLine{26 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
+\DoxyCodeLine{27 }
+\DoxyCodeLine{28 }
+\DoxyCodeLine{30 }
+\DoxyCodeLine{50 \textcolor{keyword}{class }XBDLLEXPORT \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \{}
+\DoxyCodeLine{51 }
+\DoxyCodeLine{52 \textcolor{keyword}{public}:}
+\DoxyCodeLine{53 \textcolor{comment}{//Various constructors}}
+\DoxyCodeLine{54 \mbox{\hyperlink{classxb_1_1xbString}{xbString}}(xbUInt32 size);}
+\DoxyCodeLine{55 \mbox{\hyperlink{classxb_1_1xbString}{xbString}}(\textcolor{keywordtype}{char} c);}
+\DoxyCodeLine{56 \mbox{\hyperlink{classxb_1_1xbString}{xbString}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *s, xbUInt32 lMaxLen);}
+\DoxyCodeLine{57 \mbox{\hyperlink{classxb_1_1xbString}{xbString}}(\textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s);}
+\DoxyCodeLine{58 \mbox{\hyperlink{classxb_1_1xbString}{xbString}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char} * = \textcolor{stringliteral}{"{}"{}});}
+\DoxyCodeLine{59 \mbox{\hyperlink{classxb_1_1xbString}{xbString}}( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} d );}
+\DoxyCodeLine{60 \mbox{\hyperlink{classxb_1_1xbString}{\string~xbString}}();}
+\DoxyCodeLine{61 }
+\DoxyCodeLine{62 \textcolor{comment}{//operators}}
+\DoxyCodeLine{63 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&operator= (\textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s);}
+\DoxyCodeLine{64 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&operator= (\textcolor{keyword}{const} \textcolor{keywordtype}{char} *s);}
+\DoxyCodeLine{65 \textcolor{keyword}{operator} \textcolor{keyword}{const} \textcolor{keywordtype}{char} *() \textcolor{keyword}{const};}
+\DoxyCodeLine{66 \textcolor{keywordtype}{char} \&operator[](xbUInt32 n) \textcolor{keyword}{const};}
+\DoxyCodeLine{67 \textcolor{keywordtype}{char} \&operator[](xbInt32 n) \textcolor{keyword}{const};}
+\DoxyCodeLine{68 }
+\DoxyCodeLine{69 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&operator+=(\textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s);}
+\DoxyCodeLine{70 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&operator+=(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *s);}
+\DoxyCodeLine{71 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&operator+=(\textcolor{keywordtype}{char} c);}
+\DoxyCodeLine{72 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&operator-\/=(\textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s);}
+\DoxyCodeLine{73 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&operator-\/=(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *s);}
+\DoxyCodeLine{74 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&operator-\/=(\textcolor{keywordtype}{char} c);}
+\DoxyCodeLine{75 }
+\DoxyCodeLine{76 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator == ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& ) \textcolor{keyword}{const};}
+\DoxyCodeLine{77 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator == ( \textcolor{keyword}{const} \textcolor{keywordtype}{char} * ) \textcolor{keyword}{const};}
+\DoxyCodeLine{78 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator != ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& ) \textcolor{keyword}{const};}
+\DoxyCodeLine{79 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator != ( \textcolor{keyword}{const} \textcolor{keywordtype}{char} * ) \textcolor{keyword}{const};}
+\DoxyCodeLine{80 }
+\DoxyCodeLine{81 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator < ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& ) \textcolor{keyword}{const};}
+\DoxyCodeLine{82 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator > ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& ) \textcolor{keyword}{const};}
+\DoxyCodeLine{83 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator <= ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& ) \textcolor{keyword}{const};}
+\DoxyCodeLine{84 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator >= ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& ) \textcolor{keyword}{const};}
+\DoxyCodeLine{85 }
+\DoxyCodeLine{86 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} operator-\/( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s );}
+\DoxyCodeLine{87 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} operator+( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *s );}
+\DoxyCodeLine{88 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} operator+( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s );}
+\DoxyCodeLine{89 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} operator+( \textcolor{keyword}{const} \textcolor{keywordtype}{char} c );}
+\DoxyCodeLine{90 }
+\DoxyCodeLine{91 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&AddBackSlash( \textcolor{keywordtype}{char} c );}
+\DoxyCodeLine{92 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Append(\textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s);}
+\DoxyCodeLine{93 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Append(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *s);}
+\DoxyCodeLine{94 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Append(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *s, xbUInt32 iByteCount );}
+\DoxyCodeLine{95 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Append(\textcolor{keywordtype}{char} c);}
+\DoxyCodeLine{96 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Assign(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *srcStr, xbUInt32 lStartPos, xbUInt32 lCopyLen );}
+\DoxyCodeLine{97 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Assign(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *srcStr, xbUInt32 lStartPos );}
+\DoxyCodeLine{98 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Assign(\textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s, xbUInt32 ulStartPos, xbUInt32 lCopyLen );}
+\DoxyCodeLine{99 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Assign(\textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s, xbUInt32 ulStartPos );}
+\DoxyCodeLine{100 }
+\DoxyCodeLine{101 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} Copy() \textcolor{keyword}{const};}
+\DoxyCodeLine{102 xbUInt32 CountChar( \textcolor{keywordtype}{char} c ) \textcolor{keyword}{const};}
+\DoxyCodeLine{103 xbUInt32 CountChar( \textcolor{keywordtype}{char} c, xbInt16 iOpt ) \textcolor{keyword}{const};}
+\DoxyCodeLine{104 xbInt16 CvtHexChar( \textcolor{keywordtype}{char} \&cOut );}
+\DoxyCodeLine{105 xbInt16 CvtHexString( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
+\DoxyCodeLine{106 xbInt16 CvtULongLong( xbUInt64 \&ullOut );}
+\DoxyCodeLine{107 xbInt16 CvtLongLong( xbInt64 \&llOut );}
+\DoxyCodeLine{108 }
+\DoxyCodeLine{109 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
+\DoxyCodeLine{110 \textcolor{keywordtype}{void} Dump( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *title ) \textcolor{keyword}{const};}
+\DoxyCodeLine{111 \textcolor{keywordtype}{void} Dump( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *title, xbInt16 iOption ) \textcolor{keyword}{const};}
+\DoxyCodeLine{112 \textcolor{keywordtype}{void} DumpHex( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *title ) \textcolor{keyword}{const};}
+\DoxyCodeLine{113 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{114 }
+\DoxyCodeLine{115 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&ExtractElement(\mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s, \textcolor{keywordtype}{char} delim, xbUInt32 iCnt, xbInt16 iOpt = 0 );}
+\DoxyCodeLine{116 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&ExtractElement(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *src, \textcolor{keywordtype}{char} delim, xbUInt32 iCnt, xbInt16 iOpt = 0 );}
+\DoxyCodeLine{117 }
+\DoxyCodeLine{118 \textcolor{keywordtype}{char} GetCharacter( xbUInt32 lPos ) \textcolor{keyword}{const};}
+\DoxyCodeLine{119 xbUInt32 GetLastPos(\textcolor{keywordtype}{char} c) \textcolor{keyword}{const};}
+\DoxyCodeLine{120 xbUInt32 GetLastPos(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *s) \textcolor{keyword}{const};}
+\DoxyCodeLine{121 \textcolor{keywordtype}{char} GetPathSeparator() \textcolor{keyword}{const};}
+\DoxyCodeLine{122 xbUInt32 GetSize() \textcolor{keyword}{const};}
+\DoxyCodeLine{123 }
+\DoxyCodeLine{124 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} HasAlphaChars() \textcolor{keyword}{const};}
+\DoxyCodeLine{125 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsEmpty() \textcolor{keyword}{const};}
+\DoxyCodeLine{126 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsNull() \textcolor{keyword}{const};}
+\DoxyCodeLine{127 }
+\DoxyCodeLine{128 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Left( xbUInt32 ulLen );}
+\DoxyCodeLine{129 xbUInt32 Len() \textcolor{keyword}{const}; \textcolor{comment}{// returns the length of the string}}
+\DoxyCodeLine{130 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Ltrim();}
+\DoxyCodeLine{131 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Ltrunc( xbUInt32 ulCnt );}
+\DoxyCodeLine{132 }
+\DoxyCodeLine{133 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Mid(xbUInt32 ulPos, xbUInt32 lLen );}
+\DoxyCodeLine{134 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&PadLeft( \textcolor{keywordtype}{char} c, xbUInt32 ulLen );}
+\DoxyCodeLine{135 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&PadRight( \textcolor{keywordtype}{char} c, xbUInt32 ulLen );}
+\DoxyCodeLine{136 }
+\DoxyCodeLine{137 xbUInt32 Pos(\textcolor{keywordtype}{char} c, xbUInt32 ulStartPos ) \textcolor{keyword}{const};}
+\DoxyCodeLine{138 xbUInt32 Pos(\textcolor{keywordtype}{char} c) \textcolor{keyword}{const};}
+\DoxyCodeLine{139 xbUInt32 Pos(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *s) \textcolor{keyword}{const};}
+\DoxyCodeLine{140 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&PutAt(xbUInt32 ulPos, \textcolor{keywordtype}{char} c);}
+\DoxyCodeLine{141 }
+\DoxyCodeLine{142 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Remove( xbUInt32 ulPos, xbUInt32 ulN );}
+\DoxyCodeLine{143 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Replace( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *sReplace, \textcolor{keyword}{const} \textcolor{keywordtype}{char} *sReplaceWith, xbInt16 iOpt = 0 );}
+\DoxyCodeLine{144 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Resize( xbUInt32 lSize );}
+\DoxyCodeLine{145 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Rtrim();}
+\DoxyCodeLine{146 }
+\DoxyCodeLine{147 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Set( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *s );}
+\DoxyCodeLine{148 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Set( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s );}
+\DoxyCodeLine{149 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Set( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *s, xbUInt32 ulSize );}
+\DoxyCodeLine{150 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&SetNum( xbInt32 lNum );}
+\DoxyCodeLine{151 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Sprintf(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *format, ...);}
+\DoxyCodeLine{152 }
+\DoxyCodeLine{153 \textcolor{keyword}{const} \textcolor{keywordtype}{char} *Str() \textcolor{keyword}{const};}
+\DoxyCodeLine{154 \textcolor{keywordtype}{char} *strncpy( \textcolor{keywordtype}{char} * cDest, xbUInt32 n ) \textcolor{keyword}{const};}
+\DoxyCodeLine{155 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&SwapChars( \textcolor{keywordtype}{char} from, \textcolor{keywordtype}{char} to );}
+\DoxyCodeLine{156 }
+\DoxyCodeLine{157 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&ToLowerCase();}
+\DoxyCodeLine{158 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&ToUpperCase();}
+\DoxyCodeLine{159 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Trim();}
+\DoxyCodeLine{160 }
+\DoxyCodeLine{161 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} ValidLogicalValue() \textcolor{keyword}{const};}
+\DoxyCodeLine{162 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} ValidNumericValue() \textcolor{keyword}{const};}
+\DoxyCodeLine{163 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&ZapChar( \textcolor{keywordtype}{char} c );}
+\DoxyCodeLine{164 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&ZapLeadingChar( \textcolor{keywordtype}{char} c );}
+\DoxyCodeLine{165 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&ZapTrailingChar( \textcolor{keywordtype}{char} c );}
+\DoxyCodeLine{166 }
+\DoxyCodeLine{167 \textcolor{keyword}{friend} std::ostream\& \mbox{\hyperlink{namespacexb_ad27f348219e895c44f74addba8e1889a}{operator<< }}( std::ostream\& os, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& s );}
+\DoxyCodeLine{168 }
+\DoxyCodeLine{169 \textcolor{keyword}{private}:}
+\DoxyCodeLine{170 }
+\DoxyCodeLine{171 \textcolor{keyword}{static} \textcolor{keyword}{const} \textcolor{keywordtype}{char} * NullString;}
+\DoxyCodeLine{172 \textcolor{keyword}{static} \textcolor{keywordtype}{char} cJunkBuf;}
+\DoxyCodeLine{173 }
+\DoxyCodeLine{174 \textcolor{keywordtype}{char} *data; \textcolor{comment}{// pointer to actual string data}}
+\DoxyCodeLine{175 xbUInt32 size; \textcolor{comment}{// size of string plus null terminating byte}}
+\DoxyCodeLine{176 }
+\DoxyCodeLine{177 \textcolor{keywordtype}{void} ctor(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *s);}
+\DoxyCodeLine{178 \textcolor{comment}{// xbUInt32 CalcSprintfBufSize(const char *format, ...);}}
+\DoxyCodeLine{179 }
+\DoxyCodeLine{180 \textcolor{comment}{// char * xb\_realloc( char *pIn, xbUInt32 iLen );}}
+\DoxyCodeLine{181 }
+\DoxyCodeLine{182 \textcolor{comment}{// next routine could result in buffer over runs if used with improperly sized buffers}}
+\DoxyCodeLine{183 \textcolor{keywordtype}{char} * xb\_strcpy ( \textcolor{keywordtype}{char} *target, \textcolor{keyword}{const} \textcolor{keywordtype}{char} *source);}
+\DoxyCodeLine{184 }
+\DoxyCodeLine{185 \};}
+\DoxyCodeLine{186 }
+\DoxyCodeLine{187 \} \textcolor{comment}{/* namespace */}}
+\DoxyCodeLine{188 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XBSTRING\_H\_\_ */}\textcolor{preprocessor}{}}
+
+\end{DoxyCode}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbtag_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbtag_8cpp.tex
new file mode 100644
index 0000000..2b469eb
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbtag_8cpp.tex
@@ -0,0 +1,3 @@
+\hypertarget{xbtag_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbtag.cpp File Reference}
+\label{xbtag_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbtag.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbtag.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbtag_8h.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbtag_8h.tex
new file mode 100644
index 0000000..f625c69
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbtag_8h.tex
@@ -0,0 +1,7 @@
+\hypertarget{xbtag_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbtag.h File Reference}
+\label{xbtag_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbtag.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbtag.h}}
+\doxysubsection*{Namespaces}
+\begin{DoxyCompactItemize}
+\item
+namespace \mbox{\hyperlink{namespacexb}{xb}}
+\end{DoxyCompactItemize}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbtag_8h_source.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbtag_8h_source.tex
new file mode 100644
index 0000000..48fa14d
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbtag_8h_source.tex
@@ -0,0 +1,69 @@
+\hypertarget{xbtag_8h_source}{}\doxysection{xbtag.\+h}
+\label{xbtag_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbtag.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbtag.h}}
+\mbox{\hyperlink{xbtag_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{comment}{/* xbtag.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\_XBTAG\_H\_\_}}
+\DoxyCodeLine{18 \textcolor{preprocessor}{\#define \_\_XB\_XBTAG\_H\_\_}}
+\DoxyCodeLine{19 }
+\DoxyCodeLine{20 \textcolor{comment}{//\#ifdef CMAKE\_COMPILER\_IS\_GNUCC}}
+\DoxyCodeLine{21 \textcolor{comment}{//\#pragma interface}}
+\DoxyCodeLine{22 \textcolor{comment}{//\#endif}}
+\DoxyCodeLine{23 }
+\DoxyCodeLine{24 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
+\DoxyCodeLine{25 }
+\DoxyCodeLine{26 }
+\DoxyCodeLine{27 \textcolor{preprocessor}{\#ifdef XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{28 }
+\DoxyCodeLine{29 \textcolor{keyword}{class }XBDLLEXPORT xbIx;}
+\DoxyCodeLine{30 }
+\DoxyCodeLine{31 }
+\DoxyCodeLine{32 }
+\DoxyCodeLine{34 }
+\DoxyCodeLine{45 \textcolor{keyword}{class }XBDLLEXPORT xbTag \{}
+\DoxyCodeLine{46 }
+\DoxyCodeLine{47 \textcolor{keyword}{public}:}
+\DoxyCodeLine{48 xbTag( xbIx *pIx, \textcolor{keywordtype}{void} *vpTag, xbString \&sType, xbString \&sTagName, xbString \&sExpression, xbString \&sFilter, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bUnique, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bSort );}
+\DoxyCodeLine{49 }
+\DoxyCodeLine{50 xbIx *GetIx() \textcolor{keyword}{const};}
+\DoxyCodeLine{51 \textcolor{keywordtype}{void} *GetVpTag() \textcolor{keyword}{const};}
+\DoxyCodeLine{52 \textcolor{keyword}{const} xbString \&GetType() \textcolor{keyword}{const};}
+\DoxyCodeLine{53 \textcolor{keyword}{const} xbString \&GetTagName() \textcolor{keyword}{const};}
+\DoxyCodeLine{54 \textcolor{keyword}{const} xbString \&GetExpression() \textcolor{keyword}{const};}
+\DoxyCodeLine{55 \textcolor{keyword}{const} xbString \&GetFilter() \textcolor{keyword}{const};}
+\DoxyCodeLine{56 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetUnique() \textcolor{keyword}{const};}
+\DoxyCodeLine{57 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetSort() \textcolor{keyword}{const};}
+\DoxyCodeLine{58 }
+\DoxyCodeLine{59 \textcolor{keyword}{private}:}
+\DoxyCodeLine{60 xbIx *pIx;}
+\DoxyCodeLine{61 \textcolor{keywordtype}{void} *vpTag;}
+\DoxyCodeLine{62 xbString sType;}
+\DoxyCodeLine{63 xbString sTagName;}
+\DoxyCodeLine{64 xbString sExpression;}
+\DoxyCodeLine{65 xbString sFilter;}
+\DoxyCodeLine{66 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bUnique;}
+\DoxyCodeLine{67 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bSort; \textcolor{comment}{// 0 = Ascending, 1 = Descending}}
+\DoxyCodeLine{68 \};}
+\DoxyCodeLine{69 }
+\DoxyCodeLine{70 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{71 }
+\DoxyCodeLine{72 }
+\DoxyCodeLine{73 \} \textcolor{comment}{/* namespace xb */}}
+\DoxyCodeLine{74 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_TAG\_H\_\_ */}\textcolor{preprocessor}{}}
+
+\end{DoxyCode}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbtblmgr_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbtblmgr_8cpp.tex
new file mode 100644
index 0000000..0b658f5
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbtblmgr_8cpp.tex
@@ -0,0 +1,8 @@
+\hypertarget{xbtblmgr_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbtblmgr.cpp File Reference}
+\label{xbtblmgr_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbtblmgr.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbtblmgr.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+\doxysubsection*{Namespaces}
+\begin{DoxyCompactItemize}
+\item
+namespace \mbox{\hyperlink{namespacexb}{xb}}
+\end{DoxyCompactItemize}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbtblmgr_8h.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbtblmgr_8h.tex
new file mode 100644
index 0000000..4c0555b
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbtblmgr_8h.tex
@@ -0,0 +1,19 @@
+\hypertarget{xbtblmgr_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbtblmgr.h File Reference}
+\label{xbtblmgr_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbtblmgr.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbtblmgr.h}}
+\doxysubsection*{Data Structures}
+\begin{DoxyCompactItemize}
+\item
+struct \mbox{\hyperlink{structxb_1_1xbTblList}{xb\+::xb\+Tbl\+List}}
+\item
+class \mbox{\hyperlink{classxb_1_1xbTblMgr}{xb\+::xb\+Tbl\+Mgr}}
+\end{DoxyCompactItemize}
+\doxysubsection*{Namespaces}
+\begin{DoxyCompactItemize}
+\item
+namespace \mbox{\hyperlink{namespacexb}{xb}}
+\end{DoxyCompactItemize}
+\doxysubsection*{Variables}
+\begin{DoxyCompactItemize}
+\item
+class XBDLLEXPORT \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xb\+::xb\+Dbf}}
+\end{DoxyCompactItemize}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbtblmgr_8h_source.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbtblmgr_8h_source.tex
new file mode 100644
index 0000000..7a51811
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbtblmgr_8h_source.tex
@@ -0,0 +1,69 @@
+\hypertarget{xbtblmgr_8h_source}{}\doxysection{xbtblmgr.\+h}
+\label{xbtblmgr_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbtblmgr.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbtblmgr.h}}
+\mbox{\hyperlink{xbtblmgr_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{comment}{/* xbtblmgr.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}{This class manages a list of open tables, open indices are connected to the open tables}}
+\DoxyCodeLine{15 \textcolor{comment}{}}
+\DoxyCodeLine{16 \textcolor{comment}{*/}}
+\DoxyCodeLine{17 }
+\DoxyCodeLine{18 }
+\DoxyCodeLine{19 \textcolor{preprocessor}{\#ifndef \_\_XB\_XBMGR\_H\_\_}}
+\DoxyCodeLine{20 \textcolor{preprocessor}{\#define \_\_XB\_XBMGR\_H\_\_}}
+\DoxyCodeLine{21 }
+\DoxyCodeLine{22 \textcolor{preprocessor}{\#ifdef CMAKE\_COMPILER\_IS\_GNUCC}}
+\DoxyCodeLine{23 \textcolor{preprocessor}{\#pragma interface}}
+\DoxyCodeLine{24 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{25 }
+\DoxyCodeLine{26 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
+\DoxyCodeLine{27 }
+\DoxyCodeLine{28 \textcolor{keyword}{class }XBDLLEXPORT \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}};}
+\DoxyCodeLine{29 }
+\DoxyCodeLine{30 \textcolor{comment}{/* this structure is a linked list of open tables */}}
+\DoxyCodeLine{31 \textcolor{keyword}{struct }XBDLLEXPORT \mbox{\hyperlink{structxb_1_1xbTblList}{xbTblList}}\{}
+\DoxyCodeLine{32 \mbox{\hyperlink{structxb_1_1xbTblList}{xbTblList}} *\mbox{\hyperlink{structxb_1_1xbTblList_a3fd169fcf0fd4df927544e5342db583c}{pNext}};}
+\DoxyCodeLine{33 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} *\mbox{\hyperlink{structxb_1_1xbTblList_aceec65f6f6b585788cf98e8dabd2737d}{psFqTblName}}; \textcolor{comment}{// Fully qualified name of table -\/ same table can be opened multiple times, but must have unique alias}}
+\DoxyCodeLine{34 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} *\mbox{\hyperlink{structxb_1_1xbTblList_a02c3b0c47fd104ef9758b375ecdcfd0f}{psTblName}}; \textcolor{comment}{// Table name without path, without extension}}
+\DoxyCodeLine{35 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} *\mbox{\hyperlink{structxb_1_1xbTblList_ac87742c8a6b1cf2e7e35218e96966a05}{psTblAlias}}; \textcolor{comment}{// TblAliasName must be unique, same as TblNAme if Alias not provided}}
+\DoxyCodeLine{36 \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} *\mbox{\hyperlink{structxb_1_1xbTblList_a387d3f6bbf291a1fb96d276ed9bb96b6}{pDbf}};}
+\DoxyCodeLine{37 \};}
+\DoxyCodeLine{38 }
+\DoxyCodeLine{39 \textcolor{keyword}{class }XBDLLEXPORT \mbox{\hyperlink{classxb_1_1xbTblMgr}{xbTblMgr}} : \textcolor{keyword}{public} \mbox{\hyperlink{classxb_1_1xbSsv}{xbSsv}} \{}
+\DoxyCodeLine{40 \textcolor{keyword}{public}:}
+\DoxyCodeLine{41 \mbox{\hyperlink{classxb_1_1xbTblMgr}{xbTblMgr}}();}
+\DoxyCodeLine{42 \mbox{\hyperlink{classxb_1_1xbTblMgr}{\string~xbTblMgr}}();}
+\DoxyCodeLine{43 xbInt16 AddTblToTblList ( \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} *d, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFqTblName );}
+\DoxyCodeLine{44 xbInt16 AddTblToTblList ( \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} *d, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFqTblName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTblAlias );}
+\DoxyCodeLine{45 xbInt16 DisplayTableList () \textcolor{keyword}{const};}
+\DoxyCodeLine{46 \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} * GetDbfPtr ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTblAlias ) \textcolor{keyword}{const};}
+\DoxyCodeLine{47 \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} * GetDbfPtr ( xbInt16 sItemNo ) \textcolor{keyword}{const};}
+\DoxyCodeLine{48 \mbox{\hyperlink{structxb_1_1xbTblList}{xbTblList}} * GetTblListEntry ( \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} *d );}
+\DoxyCodeLine{49 xbInt16 GetOpenTableCount () \textcolor{keyword}{const};}
+\DoxyCodeLine{50 xbInt16 RemoveTblFromTblList ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTblAlias );}
+\DoxyCodeLine{51 xbInt16 RemoveTblFromTblList ( \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} *d );}
+\DoxyCodeLine{52 }
+\DoxyCodeLine{53 \textcolor{keyword}{protected}:}
+\DoxyCodeLine{54 }
+\DoxyCodeLine{55 \textcolor{keyword}{private}:}
+\DoxyCodeLine{56 \mbox{\hyperlink{structxb_1_1xbTblList}{xbTblList}} * TblList; \textcolor{comment}{// List of open database tables}}
+\DoxyCodeLine{57 xbInt16 iOpenTableCount; \textcolor{comment}{// Number of open tables}}
+\DoxyCodeLine{58 }
+\DoxyCodeLine{59 \};}
+\DoxyCodeLine{60 }
+\DoxyCodeLine{61 \} \textcolor{comment}{/* namespace xb */}}
+\DoxyCodeLine{62 }
+\DoxyCodeLine{63 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_XBMGR\_H\_\_ */}\textcolor{preprocessor}{}}
+
+\end{DoxyCode}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbtypes_8h.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbtypes_8h.tex
new file mode 100644
index 0000000..7317374
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbtypes_8h.tex
@@ -0,0 +1,48 @@
+\hypertarget{xbtypes_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbtypes.h File Reference}
+\label{xbtypes_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbtypes.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbtypes.h}}
+\doxysubsection*{Namespaces}
+\begin{DoxyCompactItemize}
+\item
+namespace \mbox{\hyperlink{namespacexb}{xb}}
+\end{DoxyCompactItemize}
+\doxysubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{xbtypes_8h_ab0ae00665298fe7f5292691cb98ec2d9}{xb\+True}}~1
+\item
+\#define \mbox{\hyperlink{xbtypes_8h_adc4b6ca5ad299f63675136d9e03938cc}{xb\+False}}~0
+\item
+\#define \mbox{\hyperlink{xbtypes_8h_a2c65f692ac861990861575e18f72f6eb}{xb\+File\+No}}~fileno
+\end{DoxyCompactItemize}
+\doxysubsection*{Typedefs}
+\begin{DoxyCompactItemize}
+\item
+typedef float \mbox{\hyperlink{namespacexb_a83aa6a550398db55973aa9fb4257e66e}{xb\+::xb\+Float}}
+\item
+typedef double \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+::xb\+Double}}
+\item
+typedef short int \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+::xb\+Bool}}
+\item
+typedef xb\+UInt64 \mbox{\hyperlink{namespacexb_ac963d9fde6debb416303cfbed35fb793}{xb\+::xb\+OffT}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{xbtypes_8h_adc4b6ca5ad299f63675136d9e03938cc}\label{xbtypes_8h_adc4b6ca5ad299f63675136d9e03938cc}}
+\index{xbtypes.h@{xbtypes.h}!xbFalse@{xbFalse}}
+\index{xbFalse@{xbFalse}!xbtypes.h@{xbtypes.h}}
+\doxysubsubsection{\texorpdfstring{xbFalse}{xbFalse}}
+{\footnotesize\ttfamily \#define xb\+False~0}
+
+\mbox{\Hypertarget{xbtypes_8h_a2c65f692ac861990861575e18f72f6eb}\label{xbtypes_8h_a2c65f692ac861990861575e18f72f6eb}}
+\index{xbtypes.h@{xbtypes.h}!xbFileNo@{xbFileNo}}
+\index{xbFileNo@{xbFileNo}!xbtypes.h@{xbtypes.h}}
+\doxysubsubsection{\texorpdfstring{xbFileNo}{xbFileNo}}
+{\footnotesize\ttfamily \#define xb\+File\+No~fileno}
+
+\mbox{\Hypertarget{xbtypes_8h_ab0ae00665298fe7f5292691cb98ec2d9}\label{xbtypes_8h_ab0ae00665298fe7f5292691cb98ec2d9}}
+\index{xbtypes.h@{xbtypes.h}!xbTrue@{xbTrue}}
+\index{xbTrue@{xbTrue}!xbtypes.h@{xbtypes.h}}
+\doxysubsubsection{\texorpdfstring{xbTrue}{xbTrue}}
+{\footnotesize\ttfamily \#define xb\+True~1}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbtypes_8h_source.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbtypes_8h_source.tex
new file mode 100644
index 0000000..cf28e55
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbtypes_8h_source.tex
@@ -0,0 +1,61 @@
+\hypertarget{xbtypes_8h_source}{}\doxysection{xbtypes.\+h}
+\label{xbtypes_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbtypes.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbtypes.h}}
+\mbox{\hyperlink{xbtypes_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{comment}{/* xbtypes.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 \textcolor{preprocessor}{\#ifndef \_\_XB\_XTYPES\_H\_\_}}
+\DoxyCodeLine{17 \textcolor{preprocessor}{\#define \_\_XB\_XTYPES\_H\_\_}}
+\DoxyCodeLine{18 }
+\DoxyCodeLine{19 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
+\DoxyCodeLine{20 }
+\DoxyCodeLine{21 }
+\DoxyCodeLine{22 \textcolor{keyword}{typedef} \textcolor{keywordtype}{float} \mbox{\hyperlink{namespacexb_a83aa6a550398db55973aa9fb4257e66e}{xbFloat}};}
+\DoxyCodeLine{23 \textcolor{keyword}{typedef} \textcolor{keywordtype}{double} \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}};}
+\DoxyCodeLine{24 \textcolor{keyword}{typedef} \textcolor{keywordtype}{short} \textcolor{keywordtype}{int} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}};}
+\DoxyCodeLine{25 \textcolor{keyword}{typedef} xbUInt64 \mbox{\hyperlink{namespacexb_ac963d9fde6debb416303cfbed35fb793}{xbOffT}};}
+\DoxyCodeLine{26 }
+\DoxyCodeLine{27 }
+\DoxyCodeLine{28 \textcolor{preprocessor}{\#define xbTrue 1}}
+\DoxyCodeLine{29 \textcolor{preprocessor}{\#define xbFalse 0}}
+\DoxyCodeLine{30 }
+\DoxyCodeLine{31 }
+\DoxyCodeLine{32 \textcolor{preprocessor}{\#ifdef HAVE\_\_FILENO\_F}}
+\DoxyCodeLine{33 \textcolor{preprocessor}{ \#define xbFileNo \_fileno}}
+\DoxyCodeLine{34 \textcolor{preprocessor}{\#else}}
+\DoxyCodeLine{35 \textcolor{preprocessor}{ \#define xbFileNo fileno}}
+\DoxyCodeLine{36 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{37 }
+\DoxyCodeLine{38 \textcolor{preprocessor}{\#ifdef XB\_LOCKING\_SUPPORT}}
+\DoxyCodeLine{39 \textcolor{preprocessor}{ \#if defined( HAVE\_LONG\_LONG )}}
+\DoxyCodeLine{40 \textcolor{preprocessor}{ \#define LK4026531839 4026531839LL}}
+\DoxyCodeLine{41 \textcolor{preprocessor}{ \#define LK4026531838 4026531838LL}}
+\DoxyCodeLine{42 \textcolor{preprocessor}{ \#define LK3026531838 3026531838LL}}
+\DoxyCodeLine{43 \textcolor{preprocessor}{ \#define LK1000000000 1000000000LL}}
+\DoxyCodeLine{44 \textcolor{preprocessor}{ \#else}}
+\DoxyCodeLine{45 \textcolor{preprocessor}{ \#define LK4026531839 4026531839L}}
+\DoxyCodeLine{46 \textcolor{preprocessor}{ \#define LK4026531838 4026531838L}}
+\DoxyCodeLine{47 \textcolor{preprocessor}{ \#define LK3026531838 3026531838L}}
+\DoxyCodeLine{48 \textcolor{preprocessor}{ \#define LK1000000000 1000000000L}}
+\DoxyCodeLine{49 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{50 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{51 }
+\DoxyCodeLine{52 }
+\DoxyCodeLine{53 }
+\DoxyCodeLine{54 \} \textcolor{comment}{/* namespace */}}
+\DoxyCodeLine{55 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_XTYPES\_H\_\_ */}\textcolor{preprocessor}{}}
+
+\end{DoxyCode}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbuda_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbuda_8cpp.tex
new file mode 100644
index 0000000..ff2ea98
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbuda_8cpp.tex
@@ -0,0 +1,3 @@
+\hypertarget{xbuda_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbuda.cpp File Reference}
+\label{xbuda_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbuda.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbuda.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbuda_8h.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbuda_8h.tex
new file mode 100644
index 0000000..2f35030
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbuda_8h.tex
@@ -0,0 +1,2 @@
+\hypertarget{xbuda_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbuda.h File Reference}
+\label{xbuda_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbuda.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbuda.h}}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbuda_8h_source.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbuda_8h_source.tex
new file mode 100644
index 0000000..326797c
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbuda_8h_source.tex
@@ -0,0 +1,58 @@
+\hypertarget{xbuda_8h_source}{}\doxysection{xbuda.\+h}
+\label{xbuda_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbuda.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbuda.h}}
+\mbox{\hyperlink{xbuda_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{comment}{/* xbuda.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,2023 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}{This class manages the user data area (UDA)}}
+\DoxyCodeLine{15 \textcolor{comment}{}}
+\DoxyCodeLine{16 \textcolor{comment}{*/}}
+\DoxyCodeLine{17 }
+\DoxyCodeLine{18 }
+\DoxyCodeLine{19 \textcolor{preprocessor}{\#ifndef \_\_XB\_XBUDA\_H\_\_}}
+\DoxyCodeLine{20 \textcolor{preprocessor}{\#define \_\_XB\_XBUDA\_H\_\_}}
+\DoxyCodeLine{21 }
+\DoxyCodeLine{22 \textcolor{preprocessor}{\#ifdef CMAKE\_COMPILER\_IS\_GNUCC}}
+\DoxyCodeLine{23 \textcolor{preprocessor}{\#pragma interface}}
+\DoxyCodeLine{24 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{25 }
+\DoxyCodeLine{26 }
+\DoxyCodeLine{27 \textcolor{preprocessor}{\#ifdef XB\_EXPRESSION\_SUPPORT}}
+\DoxyCodeLine{28 }
+\DoxyCodeLine{29 }
+\DoxyCodeLine{30 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
+\DoxyCodeLine{31 }
+\DoxyCodeLine{32 \textcolor{keyword}{class }XBDLLEXPORT xbUda \{}
+\DoxyCodeLine{33 }
+\DoxyCodeLine{34 \textcolor{keyword}{public}:}
+\DoxyCodeLine{35 xbUda();}
+\DoxyCodeLine{36 \string~xbUda();}
+\DoxyCodeLine{37 }
+\DoxyCodeLine{38 xbInt16 AddTokenForKey( \textcolor{keyword}{const} xbString \&sKey, \textcolor{keyword}{const} xbString \&sToken );}
+\DoxyCodeLine{39 \textcolor{keywordtype}{void} Clear();}
+\DoxyCodeLine{40 xbInt16 DelTokenForKey( \textcolor{keyword}{const} xbString \&sKey );}
+\DoxyCodeLine{41 xbInt16 GetTokenCnt() \textcolor{keyword}{const};}
+\DoxyCodeLine{42 xbInt16 GetTokenForKey( \textcolor{keyword}{const} xbString \&sKey, xbString \&sData );}
+\DoxyCodeLine{43 xbInt16 UpdTokenForKey( \textcolor{keyword}{const} xbString \&sKey, \textcolor{keyword}{const} xbString \&sToken );}
+\DoxyCodeLine{44 \textcolor{keywordtype}{void} DumpUda() \textcolor{keyword}{const};}
+\DoxyCodeLine{45 }
+\DoxyCodeLine{46 \textcolor{keyword}{private}:}
+\DoxyCodeLine{47 xbLinkListOrd<xbString> llOrd;}
+\DoxyCodeLine{48 }
+\DoxyCodeLine{49 \};}
+\DoxyCodeLine{50 \} \textcolor{comment}{/* namespace */}}
+\DoxyCodeLine{51 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* XB\_EXPRESSION\_SUPPORT */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{52 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XBUDA\_H\_\_ */}\textcolor{preprocessor}{}}
+
+\end{DoxyCode}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbxbase_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbxbase_8cpp.tex
new file mode 100644
index 0000000..8ad01f7
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbxbase_8cpp.tex
@@ -0,0 +1,8 @@
+\hypertarget{xbxbase_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbxbase.cpp File Reference}
+\label{xbxbase_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbxbase.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbxbase.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+\doxysubsection*{Namespaces}
+\begin{DoxyCompactItemize}
+\item
+namespace \mbox{\hyperlink{namespacexb}{xb}}
+\end{DoxyCompactItemize}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbxbase_8h.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbxbase_8h.tex
new file mode 100644
index 0000000..4a8de8f
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbxbase_8h.tex
@@ -0,0 +1,17 @@
+\hypertarget{xbxbase_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbxbase.h File Reference}
+\label{xbxbase_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbxbase.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbxbase.h}}
+\doxysubsection*{Data Structures}
+\begin{DoxyCompactItemize}
+\item
+class \mbox{\hyperlink{classxb_1_1xbXBase}{xb\+::xb\+XBase}}
+\begin{DoxyCompactList}\small\item\em xb\+Xbase class. \end{DoxyCompactList}\end{DoxyCompactItemize}
+\doxysubsection*{Namespaces}
+\begin{DoxyCompactItemize}
+\item
+namespace \mbox{\hyperlink{namespacexb}{xb}}
+\end{DoxyCompactItemize}
+\doxysubsection*{Variables}
+\begin{DoxyCompactItemize}
+\item
+class XBDLLEXPORT \mbox{\hyperlink{namespacexb_a4a31fbe9110c9e55495ce71e642d785c}{xb\+::xb\+Log}}
+\end{DoxyCompactItemize}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbxbase_8h_source.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbxbase_8h_source.tex
new file mode 100644
index 0000000..e208317
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xbxbase_8h_source.tex
@@ -0,0 +1,237 @@
+\hypertarget{xbxbase_8h_source}{}\doxysection{xbxbase.\+h}
+\label{xbxbase_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbxbase.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbxbase.h}}
+\mbox{\hyperlink{xbxbase_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{comment}{/* xbxbase.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,2023 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\_XBDBLIST\_H\_\_}}
+\DoxyCodeLine{18 \textcolor{preprocessor}{\#define \_\_XB\_XBDBLIST\_H\_\_}}
+\DoxyCodeLine{19 }
+\DoxyCodeLine{20 \textcolor{preprocessor}{\#ifdef CMAKE\_COMPILER\_IS\_GNUCC}}
+\DoxyCodeLine{21 \textcolor{preprocessor}{\#pragma interface}}
+\DoxyCodeLine{22 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{23 }
+\DoxyCodeLine{24 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
+\DoxyCodeLine{25 }
+\DoxyCodeLine{26 \textcolor{keyword}{class }XBDLLEXPORT \mbox{\hyperlink{namespacexb_a4a31fbe9110c9e55495ce71e642d785c}{xbLog}};}
+\DoxyCodeLine{27 }
+\DoxyCodeLine{28 \textcolor{comment}{/************************************************************************/}}
+\DoxyCodeLine{29 \textcolor{comment}{/* }}
+\DoxyCodeLine{30 \textcolor{comment}{ Xbase functions}}
+\DoxyCodeLine{31 \textcolor{comment}{}}
+\DoxyCodeLine{32 \textcolor{comment}{ Min Parm Count is the minimum number of input parms needed by the function}}
+\DoxyCodeLine{33 \textcolor{comment}{}}
+\DoxyCodeLine{34 \textcolor{comment}{ Return Type}}
+\DoxyCodeLine{35 \textcolor{comment}{ C Char or string}}
+\DoxyCodeLine{36 \textcolor{comment}{ D Date}}
+\DoxyCodeLine{37 \textcolor{comment}{ L Logical}}
+\DoxyCodeLine{38 \textcolor{comment}{ N Numeric}}
+\DoxyCodeLine{39 \textcolor{comment}{ 1 Varies -\/ pull return type from first sibling}}
+\DoxyCodeLine{40 \textcolor{comment}{ 2 Varies -\/ pull return type from second sibling}}
+\DoxyCodeLine{41 \textcolor{comment}{*/}}
+\DoxyCodeLine{42 }
+\DoxyCodeLine{43 \textcolor{preprocessor}{\#ifdef XB\_FUNCTION\_SUPPORT}}
+\DoxyCodeLine{44 }
+\DoxyCodeLine{45 \textcolor{comment}{/*}}
+\DoxyCodeLine{46 \textcolor{comment}{struct XBDLLEXPORT xbFunctionInfo \{}}
+\DoxyCodeLine{47 \textcolor{comment}{ const char * FuncName; // function name}}
+\DoxyCodeLine{48 \textcolor{comment}{ char ReturnType; // return type of function}}
+\DoxyCodeLine{49 \textcolor{comment}{ xbInt16 iReturnLenCalc; // used to calculate the function return value is}}
+\DoxyCodeLine{50 \textcolor{comment}{ // 1 = use value specified in iReturnLenVal}}
+\DoxyCodeLine{51 \textcolor{comment}{ // 2 = use length of operand specified in col 4}}
+\DoxyCodeLine{52 \textcolor{comment}{ // 3 = use valued of numeric operand specified in col 4}}
+\DoxyCodeLine{53 \textcolor{comment}{ // 4 = length of parm 1 * numeric value parm}}
+\DoxyCodeLine{54 \textcolor{comment}{ // 5 = larger length of parm 2 or length of parm 3}}
+\DoxyCodeLine{55 \textcolor{comment}{ // 6 = if two or more parms, use numeric value from second parm,}}
+\DoxyCodeLine{56 \textcolor{comment}{ // otherwise use col4 value}}
+\DoxyCodeLine{57 \textcolor{comment}{ xbInt16 iReturnLenVal; // Used in combination with iReturnLenCalc}}
+\DoxyCodeLine{58 \textcolor{comment}{}}
+\DoxyCodeLine{59 \textcolor{comment}{\};}}
+\DoxyCodeLine{60 \textcolor{comment}{*/}}
+\DoxyCodeLine{61 \textcolor{comment}{/*}}
+\DoxyCodeLine{62 \textcolor{comment}{static xbFunctionInfo FunctionList[] =}}
+\DoxyCodeLine{63 \textcolor{comment}{// Func Return -\/Rtrn Len-\/}}
+\DoxyCodeLine{64 \textcolor{comment}{// Name Type -\/Calc Val-\/}}
+\DoxyCodeLine{65 \textcolor{comment}{\{}}
+\DoxyCodeLine{66 \textcolor{comment}{ \{ "{}ABS"{}, 'N', 1, 4 \},}}
+\DoxyCodeLine{67 \textcolor{comment}{ \{ "{}ALLTRIM"{}, 'C', 2, 1 \},}}
+\DoxyCodeLine{68 \textcolor{comment}{ \{ "{}ASC"{}, 'N', 1, 4 \},}}
+\DoxyCodeLine{69 \textcolor{comment}{ \{ "{}AT"{}, 'N', 1, 4 \},}}
+\DoxyCodeLine{70 \textcolor{comment}{ \{ "{}CDOW"{}, 'C', 1, 9 \},}}
+\DoxyCodeLine{71 \textcolor{comment}{ \{ "{}CHR"{}, 'C', 1, 1 \},}}
+\DoxyCodeLine{72 \textcolor{comment}{ \{ "{}CMONTH"{}, 'C', 1, 9 \},}}
+\DoxyCodeLine{73 \textcolor{comment}{ \{ "{}CTOD"{}, 'D', 1, 8 \},}}
+\DoxyCodeLine{74 \textcolor{comment}{ \{ "{}DATE"{}, 'D', 1, 8 \},}}
+\DoxyCodeLine{75 \textcolor{comment}{ \{ "{}DAY"{}, 'N', 1, 4 \},}}
+\DoxyCodeLine{76 \textcolor{comment}{ \{ "{}DEL"{}, 'C', 1, 1 \},}}
+\DoxyCodeLine{77 \textcolor{comment}{ \{ "{}DELETED"{}, 'L', 1, 1 \},}}
+\DoxyCodeLine{78 \textcolor{comment}{ \{ "{}DESCEND"{}, '1', 2, 1 \},}}
+\DoxyCodeLine{79 \textcolor{comment}{ \{ "{}DOW"{}, 'N', 1, 4 \},}}
+\DoxyCodeLine{80 \textcolor{comment}{ \{ "{}DTOC"{}, 'C', 1, 8 \},}}
+\DoxyCodeLine{81 \textcolor{comment}{ \{ "{}DTOS"{}, 'C', 1, 8 \},}}
+\DoxyCodeLine{82 \textcolor{comment}{ \{ "{}EXP"{}, 'N', 1, 4 \},}}
+\DoxyCodeLine{83 \textcolor{comment}{ \{ "{}IIF"{}, 'C', 5, 0 \},}}
+\DoxyCodeLine{84 \textcolor{comment}{ \{ "{}INT"{}, 'N', 1, 4 \},}}
+\DoxyCodeLine{85 \textcolor{comment}{ \{ "{}ISALPHA"{}, 'L', 1, 1 \},}}
+\DoxyCodeLine{86 \textcolor{comment}{ \{ "{}ISLOWER"{}, 'L', 1, 1 \},}}
+\DoxyCodeLine{87 \textcolor{comment}{ \{ "{}ISUPPER"{}, 'L', 1, 1 \},}}
+\DoxyCodeLine{88 \textcolor{comment}{ \{ "{}LEFT"{}, 'C', 3, 2 \},}}
+\DoxyCodeLine{89 \textcolor{comment}{ \{ "{}LEN"{}, 'N', 1, 4 \},}}
+\DoxyCodeLine{90 \textcolor{comment}{ \{ "{}LOG"{}, 'N', 1, 4 \},}}
+\DoxyCodeLine{91 \textcolor{comment}{ \{ "{}LOWER"{}, 'C', 2, 1 \},}}
+\DoxyCodeLine{92 \textcolor{comment}{ \{ "{}LTRIM"{}, 'C', 2, 1 \},}}
+\DoxyCodeLine{93 \textcolor{comment}{ \{ "{}MAX"{}, 'N', 1, 4 \},}}
+\DoxyCodeLine{94 \textcolor{comment}{ \{ "{}MIN"{}, 'N', 1, 4 \},}}
+\DoxyCodeLine{95 \textcolor{comment}{ \{ "{}MONTH"{}, 'N', 1, 4 \},}}
+\DoxyCodeLine{96 \textcolor{comment}{ \{ "{}RECNO"{}, 'N', 1, 4 \},}}
+\DoxyCodeLine{97 \textcolor{comment}{ \{ "{}RECCOUNT"{}, 'N', 1, 4 \},}}
+\DoxyCodeLine{98 \textcolor{comment}{ \{ "{}REPLICATE"{}, 'C', 4, 0 \},}}
+\DoxyCodeLine{99 \textcolor{comment}{ \{ "{}RIGHT"{}, 'C', 3, 2 \},}}
+\DoxyCodeLine{100 \textcolor{comment}{ \{ "{}RTRIM"{}, 'C', 2, 1 \},}}
+\DoxyCodeLine{101 \textcolor{comment}{ \{ "{}SPACE"{}, 'C', 3, 1 \},}}
+\DoxyCodeLine{102 \textcolor{comment}{ \{ "{}SQRT"{}, 'N', 1, 4 \},}}
+\DoxyCodeLine{103 \textcolor{comment}{ \{ "{}STOD"{}, 'D', 1, 8 \},}}
+\DoxyCodeLine{104 \textcolor{comment}{ \{ "{}STR"{}, 'C', 6, 10 \},}}
+\DoxyCodeLine{105 \textcolor{comment}{ \{ "{}STRZERO"{}, 'C', 3, 2 \},}}
+\DoxyCodeLine{106 \textcolor{comment}{ \{ "{}SUBSTR"{}, 'C', 3, 3 \},}}
+\DoxyCodeLine{107 \textcolor{comment}{ \{ "{}TRIM"{}, 'C', 2, 1 \},}}
+\DoxyCodeLine{108 \textcolor{comment}{ \{ "{}UPPER"{}, 'C', 2, 1 \},}}
+\DoxyCodeLine{109 \textcolor{comment}{ \{ "{}VAL"{}, 'N', 1, 4 \},}}
+\DoxyCodeLine{110 \textcolor{comment}{ \{ "{}YEAR"{}, 'N', 1, 4 \},}}
+\DoxyCodeLine{111 \textcolor{comment}{ \{ 0, 0, 0, 0 \},}}
+\DoxyCodeLine{112 \textcolor{comment}{\};}}
+\DoxyCodeLine{113 \textcolor{comment}{*/}}
+\DoxyCodeLine{114 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{115 }
+\DoxyCodeLine{116 }
+\DoxyCodeLine{117 }
+\DoxyCodeLine{119 }
+\DoxyCodeLine{123 \textcolor{keyword}{class }XBDLLEXPORT \mbox{\hyperlink{classxb_1_1xbXBase}{xbXBase}} : \textcolor{keyword}{public} \mbox{\hyperlink{classxb_1_1xbTblMgr}{xbTblMgr}}\{}
+\DoxyCodeLine{124 \textcolor{keyword}{public}:}
+\DoxyCodeLine{125 \mbox{\hyperlink{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}{xbXBase}}();}
+\DoxyCodeLine{126 \mbox{\hyperlink{classxb_1_1xbXBase}{\string~xbXBase}}();}
+\DoxyCodeLine{127 }
+\DoxyCodeLine{128 xbInt16 CloseAllTables();}
+\DoxyCodeLine{129 xbInt16 CreateFqn( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sDirIn, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sNameIn, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sExtIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFqfnOut );}
+\DoxyCodeLine{130 \textcolor{keywordtype}{void} DisableMsgLogging();}
+\DoxyCodeLine{131 \textcolor{keywordtype}{void} EnableMsgLogging ();}
+\DoxyCodeLine{132 xbInt16 FlushLog();}
+\DoxyCodeLine{133 }
+\DoxyCodeLine{134 \textcolor{comment}{//const xbString \&GetLogDirectory () const;}}
+\DoxyCodeLine{135 \textcolor{comment}{//const xbString \&GetLogFileName () const;}}
+\DoxyCodeLine{136 \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&GetLogFqFileName() \textcolor{keyword}{const};}
+\DoxyCodeLine{137 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetLogStatus () \textcolor{keyword}{const};}
+\DoxyCodeLine{138 }
+\DoxyCodeLine{139 xbInt16 \mbox{\hyperlink{classxb_1_1xbXBase_aa957eb502ecd076e5df89e7415cb094b}{OpenHighestVersion}}( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTableName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sAlias, \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} \&dbf, \textcolor{keywordtype}{int} dummy );}
+\DoxyCodeLine{140 xbInt16 OpenHighestVersion( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTableName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sAlias, \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} **dbf );}
+\DoxyCodeLine{141 }
+\DoxyCodeLine{142 \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} * Open( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTableName, xbInt16 \&iRc );}
+\DoxyCodeLine{143 \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} * Open( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTableName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sAlias, xbInt16 iOpenMode, xbInt16 iShareMode, xbInt16 iVersion, xbInt16 \&iRc );}
+\DoxyCodeLine{144 }
+\DoxyCodeLine{145 \textcolor{comment}{// next three methods moved to xbssv for consistency}}
+\DoxyCodeLine{146 \textcolor{comment}{// void SetLogDirectory( const xbString \&sLogFileDirectory );}}
+\DoxyCodeLine{147 \textcolor{comment}{// void SetLogFileName ( const xbString \&sLogFileName );}}
+\DoxyCodeLine{148 \textcolor{keywordtype}{void} SetLogSize ( \textcolor{keywordtype}{size\_t} lSize );}
+\DoxyCodeLine{149 \textcolor{keywordtype}{size\_t} \mbox{\hyperlink{classxb_1_1xbXBase_aedb4c2aa2c90e4529915198a2305b355}{GetLogSize}} () \textcolor{keyword}{const};}
+\DoxyCodeLine{150 }
+\DoxyCodeLine{151 xbInt16 WriteLogMessage( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sLogMessage, xbInt16 iOutputOpt = 0 );}
+\DoxyCodeLine{152 xbInt16 WriteLogBytes ( xbUInt32 lCnt, \textcolor{keyword}{const} \textcolor{keywordtype}{char} *p );}
+\DoxyCodeLine{153 }
+\DoxyCodeLine{154 \textcolor{keywordtype}{void} xbSleep ( xbInt32 lMillisecs );}
+\DoxyCodeLine{155 }
+\DoxyCodeLine{156 xbInt16 GetCmdLineOpt ( xbInt32 lArgc, \textcolor{keywordtype}{char} **argv, \textcolor{keyword}{const} \textcolor{keywordtype}{char} *sOptRqst, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sParmOut );}
+\DoxyCodeLine{157 xbInt16 GetCmdLineOpt ( xbInt32 lArgc, \textcolor{keywordtype}{char} **argv, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOptRqst, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sParmOut );}
+\DoxyCodeLine{158 }
+\DoxyCodeLine{159 }
+\DoxyCodeLine{160 \textcolor{comment}{/* xbase functions */}}
+\DoxyCodeLine{161 \textcolor{preprocessor}{ \#ifdef XB\_FUNCTION\_SUPPORT}}
+\DoxyCodeLine{162 xbInt16 ABS( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dOut );}
+\DoxyCodeLine{163 xbInt16 ALLTRIM( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
+\DoxyCodeLine{164 xbInt16 ASC( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dAscOut );}
+\DoxyCodeLine{165 xbInt16 AT( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sSrchFor, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sBase, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dPos );}
+\DoxyCodeLine{166 xbInt16 CDOW( \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dInDate, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOutDow );}
+\DoxyCodeLine{167 xbInt16 CHR( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dAsciCd, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
+\DoxyCodeLine{168 xbInt16 CMONTH( \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dInDate, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOutMonth );}
+\DoxyCodeLine{169 xbInt16 CTOD( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sInDate, \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dOutDate );}
+\DoxyCodeLine{170 xbInt16 DATE( \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dOutDate );}
+\DoxyCodeLine{171 xbInt16 DAY( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dInDate, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dOutDay );}
+\DoxyCodeLine{172 xbInt16 DEL( \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} * d, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut, xbInt16 iRecBufSw = 0 );}
+\DoxyCodeLine{173 xbInt16 DELETED( \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} * d, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bOut, xbInt16 iRecBufSw = 0 );}
+\DoxyCodeLine{174 xbInt16 DESCEND( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
+\DoxyCodeLine{175 xbInt16 DESCEND( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dInDate, \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dOutDate );}
+\DoxyCodeLine{176 xbInt16 DESCEND( \textcolor{keyword}{const} \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dsOut );}
+\DoxyCodeLine{177 xbInt16 DOW( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&sInDate, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dDowOut );}
+\DoxyCodeLine{178 xbInt16 DTOC( \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dInDate, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOutFmtDate );}
+\DoxyCodeLine{179 xbInt16 DTOS( \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dInDate, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOutFmtDate );}
+\DoxyCodeLine{180 xbInt16 EXP( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dOut );}
+\DoxyCodeLine{181 xbInt16 IIF( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bResult, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTrueResult, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFalseResult, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sResult );}
+\DoxyCodeLine{182 xbInt16 INT( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dOut );}
+\DoxyCodeLine{183 xbInt16 ISALPHA( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bResult );}
+\DoxyCodeLine{184 xbInt16 ISLOWER( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bResult );}
+\DoxyCodeLine{185 xbInt16 ISUPPER( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bResult );}
+\DoxyCodeLine{186 xbInt16 LEFT( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, xbUInt32 lCharCnt, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
+\DoxyCodeLine{187 xbInt16 LEN( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dLen );}
+\DoxyCodeLine{188 xbInt16 LOG( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dOut );}
+\DoxyCodeLine{189 xbInt16 LOWER( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
+\DoxyCodeLine{190 xbInt16 LTRIM( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \& sOut );}
+\DoxyCodeLine{191 xbInt16 MAX( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn1, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn2, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dOut );}
+\DoxyCodeLine{192 xbInt16 MIN( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn1, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn2, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dOut );}
+\DoxyCodeLine{193 xbInt16 MONTH( \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dInDate, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dMonthOut );}
+\DoxyCodeLine{194 xbInt16 RECCOUNT( \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} * d, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dRecOut );}
+\DoxyCodeLine{195 xbInt16 RECNO( \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} * d, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dRecOut );}
+\DoxyCodeLine{196 xbInt16 REPLICATE( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, xbUInt32 ulRepCnt, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
+\DoxyCodeLine{197 xbInt16 RIGHT( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, xbUInt32 iCharCnt, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
+\DoxyCodeLine{198 xbInt16 RTRIM( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
+\DoxyCodeLine{199 xbInt16 SPACE( xbInt32 lCnt, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
+\DoxyCodeLine{200 xbInt16 SQRT( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dBase, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dSqrRt );}
+\DoxyCodeLine{201 xbInt16 STOD( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&sDateOut );}
+\DoxyCodeLine{202 xbInt16 STR( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
+\DoxyCodeLine{203 xbInt16 STR( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, xbUInt32 ulLen, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
+\DoxyCodeLine{204 xbInt16 STR( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, xbUInt32 ulLen, xbUInt32 ulDec, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
+\DoxyCodeLine{205 xbInt16 STR( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, xbUInt32 ulLen, xbUInt32 ulDec, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sPadChar, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
+\DoxyCodeLine{206 xbInt16 STRZERO( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, xbUInt32 ulLen, xbUInt32 ulDec, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
+\DoxyCodeLine{207 xbInt16 SUBSTR( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, xbUInt32 ulStartPos, xbUInt32 ulLen, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
+\DoxyCodeLine{208 xbInt16 TRIM( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
+\DoxyCodeLine{209 xbInt16 UPPER( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
+\DoxyCodeLine{210 xbInt16 VAL( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dOut );}
+\DoxyCodeLine{211 xbInt16 YEAR( \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dInDate, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dOutYear );}
+\DoxyCodeLine{212 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{213 }
+\DoxyCodeLine{214 \textcolor{keyword}{protected}:}
+\DoxyCodeLine{215 \textcolor{keyword}{friend} \textcolor{keyword}{class }xbBcd;}
+\DoxyCodeLine{216 \textcolor{keyword}{friend} \textcolor{keyword}{class }xbExp;}
+\DoxyCodeLine{217 }
+\DoxyCodeLine{218 \textcolor{preprocessor}{ \#ifdef XB\_BLOCKREAD\_SUPPORT}}
+\DoxyCodeLine{219 \textcolor{keyword}{friend} \textcolor{keyword}{class }xbBlockRead;}
+\DoxyCodeLine{220 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_BLOCKREAD\_SUPPORT}}
+\DoxyCodeLine{221 }
+\DoxyCodeLine{222 }
+\DoxyCodeLine{223 xbInt16 \mbox{\hyperlink{classxb_1_1xbXBase_ae52e53340593b4253936c1372ec15ee1}{GetFunctionInfo}}( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sExpLine, \textcolor{keywordtype}{char} \&cReturnType, xbInt16 \&iReturnLenCalc, xbInt32 \&lReturnLenVal ) \textcolor{keyword}{const};}
+\DoxyCodeLine{224 \textcolor{keyword}{static} xbInt16 xbMemcmp( \textcolor{keyword}{const} \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} *s1, \textcolor{keyword}{const} \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} *s2, \textcolor{keywordtype}{size\_t} n );}
+\DoxyCodeLine{225 }
+\DoxyCodeLine{226 \textcolor{keyword}{private}:}
+\DoxyCodeLine{227 }
+\DoxyCodeLine{228 \textcolor{preprocessor}{\#ifdef XB\_LOGGING\_SUPPORT}}
+\DoxyCodeLine{229 \mbox{\hyperlink{namespacexb_a4a31fbe9110c9e55495ce71e642d785c}{xbLog}} *xLog;}
+\DoxyCodeLine{230 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{231 }
+\DoxyCodeLine{232 \};}
+\DoxyCodeLine{233 }
+\DoxyCodeLine{234 \} \textcolor{comment}{/* namespace xb */}}
+\DoxyCodeLine{235 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_DBLIST\_H\_\_ */}\textcolor{preprocessor}{}}
+
+\end{DoxyCode}
diff --git a/docs/howto/AddAnIndex.txt b/1Tdata/xbase/xbase64-4.1.4/docs/howto/AddAnIndex.txt
index 251caf8..251caf8 100755
--- a/docs/howto/AddAnIndex.txt
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/howto/AddAnIndex.txt
diff --git a/docs/howto/AddNewMemoFileType.txt b/1Tdata/xbase/xbase64-4.1.4/docs/howto/AddNewMemoFileType.txt
index a784d69..a784d69 100755
--- a/docs/howto/AddNewMemoFileType.txt
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/howto/AddNewMemoFileType.txt
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/howto/GettingStarted.txt b/1Tdata/xbase/xbase64-4.1.4/docs/howto/GettingStarted.txt
new file mode 100755
index 0000000..d6497a2
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/howto/GettingStarted.txt
@@ -0,0 +1,86 @@
+
+To build the xbase library
+
+1) Verify you have the correct software prerequisites installed
+ A) cmake 2.6 or LATER
+ B) Compiler and linker
+
+2) Verify you have access to the target location of the library
+
+3) Unpack the tar or zip file
+
+4) For Linux 64 bit or 32 bit plat forms
+
+ cd xbase/build/Linux64 or xbase/build/Linux32
+ cmake .
+ make
+ make test
+ sudo make install
+
+ Verify the ld.so.conf file has the library target directory
+ For example
+ update file /etc/ld.so.conf to include /usr/local/lib
+ and run ldconfig
+ Your mileage may vary depending on Linux Distro
+
+
+ To update the configuration file
+ cd xbase/build/Linux64 or xbase/build/Linux32
+ ccmake .
+
+
+
+5) For Mac
+
+ Verify you have xcode installed and operational
+ cd xbase/build/Mac
+ cmake . -DCMAKE_OSX_SYSROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk
+ make
+ make test
+
+
+6) For Windows 64 bit with Visual Studio
+
+ Open a Visual Studio 64 bit Shell
+ cd xbase\build\Win64VS
+ buildwin.bat
+ nmake test
+
+ From a VS Studio 64 bit shell in admin mode
+ nmake install
+
+ Also of note: cleanwin.bat resets everything
+
+7) For Windows 32 bit with Visual Studio
+
+ Open a Visual Studio 32 bit Shell
+ cd xbase\build\Win32VS
+ buildwin.bat
+ nmake test
+
+ From a VS Studio 32 bit shell in admin mode
+ nmake install
+
+
+
+8) For Windows 32 bit with Borland 5.5 free compiler
+
+ cd xbase\build\Win32Borland
+ BuildBorland.bat
+ make test
+
+
+9) For other platforms
+
+ Here is something to start with...
+
+ cd xbase
+ md MyPlatform
+ cd MyPlatform
+ cp ../Cmake/CmakeLists.txt .
+
+ Enter the appropriate make command for your environment - check the cmake web site for help
+ On Linux, it is .cmake, then make
+ your mileage may vary
+
+ Send your results to the library maintainer so it can be added to this library
diff --git a/docs/howto/Hacking.txt b/1Tdata/xbase/xbase64-4.1.4/docs/howto/Hacking.txt
index 3447490..3447490 100755
--- a/docs/howto/Hacking.txt
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/howto/Hacking.txt
diff --git a/docs/howto/Locking.txt b/1Tdata/xbase/xbase64-4.1.4/docs/howto/Locking.txt
index b3cc832..b3cc832 100755
--- a/docs/howto/Locking.txt
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/howto/Locking.txt
diff --git a/docs/howto/mac_cmake_compile.txt b/1Tdata/xbase/xbase64-4.1.4/docs/howto/mac_cmake_compile.txt
index 4ec0ad6..4ec0ad6 100755
--- a/docs/howto/mac_cmake_compile.txt
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/howto/mac_cmake_compile.txt
diff --git a/docs/html/Xbase64ClassDiagram.jpg b/1Tdata/xbase/xbase64-4.1.4/docs/html/Xbase64ClassDiagram.jpg
index 81bb539..81bb539 100755
--- a/docs/html/Xbase64ClassDiagram.jpg
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/html/Xbase64ClassDiagram.jpg
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/html/Xbase64ClassDiagramV2.jpeg b/1Tdata/xbase/xbase64-4.1.4/docs/html/Xbase64ClassDiagramV2.jpeg
new file mode 100755
index 0000000..191b061
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/html/Xbase64ClassDiagramV2.jpeg
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/html/Xbase64ClassDiagramV2.jpeg.jpeg b/1Tdata/xbase/xbase64-4.1.4/docs/html/Xbase64ClassDiagramV2.jpeg.jpeg
new file mode 100755
index 0000000..6aa0a82
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/html/Xbase64ClassDiagramV2.jpeg.jpeg
Binary files differ
diff --git a/docs/html/gpl-3.0.txt b/1Tdata/xbase/xbase64-4.1.4/docs/html/gpl-3.0.txt
index 94a9ed0..94a9ed0 100755
--- a/docs/html/gpl-3.0.txt
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/html/gpl-3.0.txt
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/html/index.html b/1Tdata/xbase/xbase64-4.1.4/docs/html/index.html
new file mode 100755
index 0000000..f1e9590
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/html/index.html
@@ -0,0 +1,41 @@
+<!DOCTYPE HTML PUBLIC>
+<HTML><TITLE>Xbase DBMS Documentation Table of Contents</TITLE>
+<BODY BGCOLOR=#FFFFFF>
+<H1><p align="center">Xbase DBMS<br>
+Last Updated 04/17/23<br>Version 4.1.4</p></H1>
+<h2>Documentation Table Of Contents</h2>
+<h3>Section 1 - Xbase64 Concepts</h3>
+<h4>
+<A HREF="xbc1.html">Chapter 1 - Getting Started</A><br>
+<A HREF="xbc2.html">Chapter 2 - System Overview</A><br>
+<A HREF="xbc3.html">Chapter 3 - Fields, Strings and Dates</A><br>
+<A HREF="xbc4.html">Chapter 4 - Expression Handling</A><br>
+<A HREF="xbc5.html">Chapter 5 - Index Overview</A><br>
+
+
+<A HREF="xbc6.html">Chapter 6 - SQL Support</A><br>
+
+</h4>
+<h3>Section 2 - Classes and Objects</h3>
+<h4>
+<A HREF="xbc7.html">Chapter 7 - General Class Information</A><br>
+<A HREF="xbc8.html">Chapter 8 - Class xbSsv - Shared System Values</A><br>
+<A HREF="xbc9.html">Chapter 9 - Class xbXBase - The class that links it all together</A><br>
+<A HREF="xbc10.html">Chapter 10 - Class xbDbf - The DBF Table class</A><br>
+<A HREF="xbc11.html">Chapter 11 - Class xbLog - Class to support error logging and informational messaging.</A><br>
+<A HREF="xbc12.html">Chapter 12 - Class xbDate - Class to support dates and date fields.</A><br>
+
+</h4>
+<h3>Section 3 - Appendices</h3>
+<h4>
+<A HREF="gpl-3.0.txt">Appendix A - GPL Library License</A><br>
+<A HREF="xbab.html">Appendix B - Bibliography</A><br>
+<A HREF="xbac.html">Appendix C - Library Build Options</A><br>
+<A HREF="xbad.html">Appendix D - File Types</A><br>
+<A HREF="xbae.html">Appendix E - Error Codes</A><br>
+<A HREF="xbaf.html">Appendix F - Utility and Example Programs</A><br>
+
+</h4>
+<p><img src="xbase.jpg"><br><hr>
+</BODY>
+</HTML>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/html/ntx.index.html b/1Tdata/xbase/xbase64-4.1.4/docs/html/ntx.index.html
new file mode 100755
index 0000000..82d6dd5
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/html/ntx.index.html
@@ -0,0 +1,180 @@
+<!DOCTYPE HTML PUBLIC>
+<HTML>
+<TITLE>Xbase DBMS Chapter 10</TITLE>
+<BODY BGCOLOR=#FFFFFF>
+<H2><p align="center">NTX Indices</p></H2>
+<p align="center">Chapter Updated 04/13/23</p><hr>
+
+
+<h3>This chapter might be out of date. The NTX module is pending review and updates for release 4.x.x</h3>
+
+The objective of this chapter is to provide information regarding the
+basic concepts of how .NTX index files work in the Xbase environment.<br><br>
+
+The information in this chapter has been gathered by searching the internet
+and by examining the structure of known good NTX indexes.<br><br>
+
+<h4>NTX Index File Characteristics</h4>
+
+<ul><li>NTX indices maintain keys in ascending sort order only.<br><br>
+<li>NTX indices support <em>unique</em> or <em>non unique</em> keys.<br><br>
+
+<em>Unique</em> keys must be unique. The database update routines will
+fail if an attempt to add a non-unique key is performed.<br><br>
+
+<em>Non-unique</em> Keys are not required to be unique, duplicate
+keys are allowed if the index is created with the XB_NOT_UNIQUE
+setting. Duplicate keys are stored in record number order.<br><br>
+
+<li>NTX indexes are automatically updated by the Xbase library after the
+indices are opened.<br><br>
+
+<li>Character keys are left justified and padded on the right with spaces.<br><br>
+
+<li>Numeric keys are stored as eight byte double values.<br><br>
+
+The numeric key processing logic performs floating point numeric
+calculations on eight byte double values. This logic may be compute intensive
+and slow on older machines, especially the older intel processors without a
+math coprocessor chip.
+
+</ul>
+
+
+<h4>NTX File Internals</h4>
+
+NTX files are comprised of two or more 1024 byte blocks or nodes of
+information. There are three types of nodes: Head Nodes, Interior
+Nodes and Leaf Nodes.<br><br>
+
+The <em>Head Node</em> is the first node in the file starting at
+position zero (0) and contains information about the NTX file. There
+is only one Head Node in each index and it always starts at the
+beginning of the file.<br><br>
+
+
+<TABLE BORDER>
+<CAPTION ALIGN="TOP"><h3>NTX Header Node</H3></CAPTION>
+<TR VALIGN="BASELINE">
+<TR><TH ALIGN="LEFT">Type<TD>Size<TD>Field Name<TD>Description
+<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>Signature Byte<TD>The Clipper signature byte. 0x003h indicates Clipper 87. 0x006h indicates Clipper 5.x
+<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>Indexing Version Number<TD>Documented as the "Compiler Version" but I have observed an increasing number. Incremented whenever the index is changed.
+<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>First Node Offset<TD>The offset to the first node.
+<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>First Unused Page Offset<TD>The offset to the first unused node.
+<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>Key Size + 8<TD>The Key Size plus 8 bytes.
+<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>Key Size<TD>The size (length) of the key.
+<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>Number of Decimals<TD>Number of decimal places in key.
+<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>Max Items Per Node<TD>The maximum number of key per node.
+<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>1/2 The Max Items Per Node<TD>Half the maximum number of key per node. Important in a B-tree system, as this is the minimum number of keys that must be on a page.
+<TR><TH ALIGN="LEFT">char<TD>256<TD>KeyExpression<TD>Key expression string
+<TR><TH ALIGN="LEFT">char<TD>1<TD>Unique<TD>Unique indicator<br>
+ 00 - Not Unique - XB_NON_UNIQUE<br>
+ 01 - Unique - XB_UNIQUE
+<TR><TH ALIGN="LEFT">char<TD>745<TD>Unused<TD>Unused
+
+
+<TR><TH ALIGN="LEFT"><TD>1024<TD><TD>Total bytes in node
+</TABLE>
+<br><br>
+The following structure is used by the Xbase NTX routines:
+<xmp>
+
+struct NtxHeadNode { /* ntx header on disk */
+ xbUShort Signature; /* Clipper 5.x or Clipper 87 */
+ xbUShort Version; /* Compiler Version */
+ /* Also turns out to be */
+ /* a last modified counter */
+ xbULong StartNode; /* Offset in file for first node */
+ xbULong UnusedOffset; /* First free node offset */
+ xbUShort KeySize; /* Size of items (KeyLen + 8) */
+ xbUShort KeyLen; /* Size of the Key */
+ xbUShort DecimalCount; /* Number of decimal positions */
+ xbUShort KeysPerNode; /* Max number of keys per node */
+ xbUShort HalfKeysPerNode; /* Min number of keys per node */
+ char KeyExpression[256]; /* Null terminated key expression */
+ unsigned Unique; /* Unique Flag */
+ char NotUsed[745];
+};
+
+</xmp>
+
+<br><br>
+
+<h4>Interior and Leaf Nodes</h4>
+
+NTX files use a B-tree system to store keys. A B-tree is a balanced,
+on disk tree who's design minimizes disk access. Interior Nodes and
+Leaf Nodes share the same structure in an NTX file. The difference is
+that interior nodes point to other nodes. Leaf nodes point to
+nothing. Keys in both interior nodes and leaf nodes point to records
+in a DBF file.
+
+Interior nodes have field LeftNodeNo valued which points to the node
+which points to the keys which are less than the key value in the KeyVal
+field. There is one more LeftNodeNo value in the node than there are keys. The
+Last LeftNodeNo points to the node which is greater than the highest
+key value in the node. <br><br>
+
+Leaf nodes have 0 in the LeftNodeNo field.<br><br>
+
+
+<TABLE BORDER>
+<CAPTION ALIGN="TOP"><h3>NTX Interior Node and Leaf Node Structure</H3></CAPTION>
+<TR VALIGN="BASELINE">
+<TR><TH ALIGN="LEFT">Type<TD>Size<TD>Field Name<TD>Description
+<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>NoOfKeysThisNode<TD>The number of key values in this node. (N)
+<TR><TH ALIGN="LEFT">Array of xbUShort<TD>2<TD>offsets[]<TD>Array of
+ <pre>HeadNode.KeysPerNode +1</pre> unsigned longs.
+ These values are the offsets (in bytes) of each key
+ in this node, from the beginning of the node.
+<TR><TH ALIGN="LEFT">char<TD>variable<TD>KeyRecs<TD>A repeating structure of
+ pointers and keys. See the next table for the KeyRec structure.
+</TABLE>
+<br><br>
+
+One primary difference between NDX files and NTX files is that NTX
+files uses an array of offsets on all interior and leaf nodes. Each
+offset is the byte count from the beginning of the node where each
+KeyRec will be found. The order of the array of offsets determines
+the order of keys on a given node. When keys are added or deleted,
+thus changing the order of the keys on a node, only the order of the
+offset array is changed. All other key data is not moved. This results
+in slightly better index performance.
+
+<BR>
+<TABLE BORDER>
+<CAPTION ALIGN="TOP"><h3>KeyRec Structure</H3></CAPTION>
+<TR VALIGN="BASELINE">
+<TR><TH ALIGN="LEFT">Type<TD>Size<TD>Field Name<TD>Description
+<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>LeftNodeNo<TD>The node number (offset from beginning of file) of the lower node
+ for this key. 0 in Leaf Nodes.
+<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>DbfRecNo<TD>The DBF record number for this key.
+ 0 in Interior Nodes.
+<TR><TH ALIGN="LEFT">char<TD>KeyLen<TD>KeyValue<TD>The key value.
+</TABLE>
+
+<br><br>
+For those interested in knowing how the Xbase DBMS manipulates and
+navigates index files, the following discussion may be helpfull.<br><br>
+
+Xbase DBMS navigates through NTX files by using an in-memory chain of
+nodes of the current location / key in use. It starts by reading the
+Head Node of the index, which points to the first node of the
+file. The first node of the file will be a leaf node if the index is
+small or will be an interior node if the index has more than one leaf
+node. The first interior node is loaded into memory, added to the
+node chain and points to the next node to read. The node is made up
+of one or more keys. If it is a leaf node, the logic looks for a
+matching key on the node. It continues down the tree, adding the
+nodes to the in-memory node chain until it reaches the correct
+node. If it finds a matching key in the leaf node, it returns a XB_FOUND
+condition. If it doesn't find an exact match in the leaf node, it
+returns a XB_NOT_FOUND condition and stops on the key which is greater
+than the search key given.
+
+<hr>
+<A HREF="mailto:bob@#synxis.com">
+Author: Bob Cotton - bob@synxis.com</A><br>
+<p><img src="xbase.jpg"><br><hr>
+</BODY>
+</HTML>
diff --git a/docs/html/xbab.html b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbab.html
index 809c2ea..809c2ea 100755
--- a/docs/html/xbab.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbab.html
diff --git a/docs/html/xbac.html b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbac.html
index e022890..e022890 100755
--- a/docs/html/xbac.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbac.html
diff --git a/docs/html/xbad.html b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbad.html
index 7356b7b..7356b7b 100755
--- a/docs/html/xbad.html
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbad.html
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/html/xbae.html b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbae.html
new file mode 100755
index 0000000..3de3fb5
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbae.html
@@ -0,0 +1,97 @@
+<!DOCTYPE HTML PUBLIC>
+<HTML>
+<TITLE>Xbase DBMS Appendix E</TITLE>
+<BODY BGCOLOR=#FFFFFF>
+<H2><p align="center">Error Codes</p></H2>
+<p align="center">Chapter Updated 04/07/23</p><hr>
+
+<h3>Error Codes and Error Processing</h3>
+
+Alomost all Xbase64 methods and functions return and xbInt16 return code, which is zero or positive on success and negative
+if an error condition occurs.
+<br><br>
+As of the 4.x.x release, the library has been extensively updated to use exception processing and most error
+conditions will result in a mesage written to the logfile if logfile processing is enabled. The error routines
+typically write two values to the logfile, an error code value and an iErrorStop value which identifies where
+exactly in the library code the error occurred.
+<br><br>
+Error codes are defined in the xbretcod.h file.<br><br><br>
+
+
+<TR><TH>File Type</TH><TH>Description</TH></TR>
+<TR><TD>*.DBF</TD><TD>Main database file or Table</TD></TR>
+<TR><TD>*.DBT</TD><TD>Memo file data</TD></TR>
+<TR><TD>*.INF</TD><TD>INF - Behave like MS ODBC File. Used to auto open NDX index file</TD></TR>
+<TR><TD>*.MDX</TD><TD>Production V4 index file, contains up to 47 tags. Automatically opened.</TD></TR>
+<TR><TD>*.NDX</TD><TD>Non production V3 index files. Contains one tag per file. Automatically opened if included in ocrreespondin INF file.</TD></TR>
+
+
+<br><br><br>
+<table >
+<TABLE BORDER>
+<TR VALIGN="BASELINE">
+<TR><TH>Description</TH><TH>Error Code</TH><TH>Category</TH></TR>
+<TR><TD> XB_NO_ERROR </TD><TD> 0 </TD><TD> general </TD></TR>
+<TR><TD> XB_NO_MEMORY </TD><TD> -100 </TD><TD> general </TD></TR>
+<TR><TD> XB_INVALID_OPTION </TD><TD> -101 </TD><TD> general </TD></TR>
+<TR><TD> XB_INVALID_PARAMETER </TD><TD> -102 </TD><TD> general </TD></TR>
+<TR><TD> XB_DUP_TABLE_OR_ALIAS </TD><TD> -110 </TD><TD> table manager </TD></TR>
+<TR><TD> XB_INVALID_NODELINK </TD><TD> -120 </TD><TD> linklist </TD></TR>
+<TR><TD> XB_KEY_NOT_UNIQUE </TD><TD> -121 </TD><TD> linklist </TD></TR>
+<TR><TD> XB_FILE_EXISTS </TD><TD> -200 </TD><TD> file </TD></TR>
+<TR><TD> XB_ALREADY_OPEN </TD><TD> -201 </TD><TD> file </TD></TR>
+<TR><TD> XB_DBF_FILE_NOT_OPEN </TD><TD> -202 </TD><TD> file </TD></TR>
+<TR><TD> XB_FILE_NOT_FOUND </TD><TD> -203 </TD><TD> file </TD></TR>
+<TR><TD> XB_FILE_TYPE_NOT_SUPPORTED</TD><TD> -204 </TD><TD> file </TD></TR>
+<TR><TD> XB_RENAME_ERROR </TD><TD> -205 </TD><TD> file </TD></TR>
+<TR><TD> XB_INVALID_OBJECT </TD><TD> -206 </TD><TD> file </TD></TR>
+<TR><TD> XB_NOT_OPEN </TD><TD> -207 </TD><TD> file </TD></TR>
+<TR><TD> XB_NOT_FOUND </TD><TD> -208 </TD><TD> file </TD></TR>
+<TR><TD> XB_OPEN_ERROR </TD><TD> -209 </TD><TD> file </TD></TR>
+<TR><TD> XB_CLOSE_ERROR </TD><TD> -210 </TD><TD> file </TD></TR>
+<TR><TD> XB_SEEK_ERROR </TD><TD> -211 </TD><TD> file </TD></TR>
+<TR><TD> XB_READ_ERROR </TD><TD> -212 </TD><TD> file </TD></TR>
+<TR><TD> XB_WRITE_ERROR </TD><TD> -213 </TD><TD> file </TD></TR>
+<TR><TD> XB_EOF </TD><TD> -214 </TD><TD> file </TD></TR>
+<TR><TD> XB_BOF </TD><TD> -215 </TD><TD> file </TD></TR>
+<TR><TD> XB_INVALID_BLOCK_SIZE </TD><TD> -216 </TD><TD> file </TD></TR>
+<TR><TD> XB_INVALID_BLOCK_NO </TD><TD> -217 </TD><TD> file </TD></TR>
+<TR><TD> XB_INVALID_RECORD </TD><TD> -218 </TD><TD> file </TD></TR>
+<TR><TD> XB_DELETE_FAILED </TD><TD> -219 </TD><TD> file </TD></TR>
+<TR><TD> XB_INVALID_TABLE_NAME </TD><TD> -220 </TD><TD> file </TD></TR>
+<TR><TD> XB_EMPTY </TD><TD> -221 </TD><TD> file </TD></TR>
+<TR><TD> XB_LIMIT_REACHED </TD><TD> -222 </TD><TD> file </TD></TR>
+<TR><TD> XB_BLOCKREAD_NOT_ENABLED </TD><TD> -223 </TD><TD> file </TD></TR>
+<TR><TD> XB_DIRECTORY_ERROR </TD><TD> -224 </TD><TD file </TD></TR>
+<TR><TD> XB_INVALID_FIELD_TYPE </TD><TD> -300 </TD><TD> field </TD></TR>
+<TR><TD> XB_INVALID_FIELD_NO </TD><TD> -301 </TD><TD> field </TD></TR>
+<TR><TD> XB_INVALID_DATA </TD><TD> -302 </TD><TD> field </TD></TR>
+<TR><TD> XB_INVALID_FIELD_NAME </TD><TD> -303 </TD><TD> field </TD></TR>
+<TR><TD> XB_INVALID_MEMO_FIELD </TD><TD> -304 </TD><TD> field </TD></TR>
+<TR><TD> XB_INVALID_FIELD </TD><TD> -305 </TD><TD> field </TD></TR>
+<TR><TD> XB_INVALID_FIELD_LEN </TD><TD> -306 </TD><TD> field </TD></TR>
+<TR><TD> XB_INVALID_DATE </TD><TD> -307 </TD><TD> date field </TD></TR>
+<TR><TD> XB_INVALID_LOCK_OPTION </TD><TD> -400 </TD><TD> lock </TD></TR>
+<TR><TD> XB_LOCK_FAILED </TD><TD> -401 </TD><TD> lock </TD></TR>
+<TR><TD> XB_TABLE_NOT_LOCKED </TD><TD> -402 </TD><TD> lock - need table locked for operation </TD></TR>
+<TR><TD> XB_PARSE_ERROR </TD><TD> -500 </TD><TD> expression </TD></TR>
+<TR><TD> XB_INVALID_FUNCTION </TD><TD> -501 </TD><TD> expression </TD></TR>
+<TR><TD> XB_INVALID_PARM </TD><TD> -502 </TD><TD> expression </TD></TR>
+<TR><TD> XB_INCONSISTENT_PARM_LENS </TD><TD> -503 </TD><TD> expression </TD></TR>
+<TR><TD> XB_INCOMPATIBLE_OPERANDS </TD><TD> -504 </TD><TD> expression </TD></TR>
+<TR><TD> XB_UNBALANCED_PARENS </TD><TD> -505 </TD><TD> expression </TD></TR>
+<TR><TD> XB_UNBALANCED_QUOTES </TD><TD> -506 </TD><TD> expression </TD></TR>
+<TR><TD> XB_INVALID_EXPRESSION </TD><TD> -507 </TD><TD> expression </TD></TR>
+<TR><TD> XB_INVALID_KEYNO </TD><TD> -600 </TD><TD> index </TD></TR>
+<TR><TD> XB_INVALID_INDEX </TD><TD> -601 </TD><TD> index file error </TD></TR>
+<TR><TD> XB_INVALID_TAG </TD><TD> -602 </TD><TD> invalid index tag name, must be <= 10 bytes </TD></TR>
+<TR><TD> XB_INVALID_PAGE </TD><TD> -603 </TD><TD> invalid index page </TD></TR>
+<TR><TD> XB_SYNTAX_ERROR </TD><TD> -700 </TD><TD> sql syntax error </TD></TR>
+</TABLE>
+
+
+
+<br><hr><br>
+<p><img src="xbase.jpg"><br><hr>
+</BODY>
+</HTML>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/html/xbaf.html b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbaf.html
new file mode 100755
index 0000000..3ef171c
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbaf.html
@@ -0,0 +1,44 @@
+<!DOCTYPE HTML PUBLIC>
+<HTML>
+<TITLE>Xbase DBMS Chapter 15</TITLE>
+<BODY BGCOLOR=#FFFFFF>
+<H1><p align=center>Sample Programs</p></H1>
+<p align=center>Page Updated 05/12/23</p><hr><br><br>
+
+<CENTER>
+<TABLE BORDER>
+<CAPTION ALIGN=TOP><H3>XBase Example Programs</H3></CAPTION>
+<TR ALIGN=BASELINE>
+<TR><TH ALIGN=LEFT>Program<TD>Program Description
+<TR><TH ALIGN=LEFT>xb_ex_string<TD>Example program to demonstrate xbString class usage.
+<TR><TH ALIGN=LEFT>xb_ex_v3_create_dbf<TD>Example program to create V3 DBF file.
+<TR><TH ALIGN=LEFT>xb_ex_v3_upd_dbf<TD>Example program to update V3 DBF file.
+<TR><TH ALIGN=LEFT>xb_ex_v4_create_dbf<TD>Example Program to create V4 DBF file.
+<TR><TH ALIGN=LEFT>xb_ex_v4_upd_dbf<TD>Example program to update V4 DBF file.
+</TABLE></CENTER>
+<br><br>
+
+<CENTER>
+<TABLE BORDER>
+<CAPTION ALIGN=TOP><H3>XBase Utility Programs</H3></CAPTION>
+<TR ALIGN=BASELINE>
+<TR><TH ALIGN=LEFT>Program<TD>Program Description
+<TR><TH ALIGN=LEFT>xb_cfg_check<TD>This program prints the compile settings and options in use.
+<TR><TH ALIGN=LEFT>xb_copydbf<TD>This program copies a DBF file structure.
+<TR><TH ALIGN=LEFT>xb_dbfutil1<TD>Menu program for executing Xbase functions.
+<TR><TH ALIGN=LEFT>xb_deletall<TD>This program marks all records in a DBF file for deletion.
+<TR><TH ALIGN=LEFT>xb_dumpdbt<TD>Debug memo files.
+<TR><TH ALIGN=LEFT>xb_dumphdr<TD>This program opens an Xbase file and prints its header.
+<TR><TH ALIGN=LEFT>xb_dumprecs<TD>This program dumps records for an XBase file.
+<TR><TH ALIGN=LEFT>xb_execsql<TD>This program executes SQL statements.
+<TR><TH ALIGN=LEFT>xb_import<TD>This program is used to import delimited data into a DBF file/table.
+<TR><TH ALIGN=LEFT>xb_pack<TD>This program packs (removes deleted records) from a DBF database file.
+<TR><TH ALIGN=LEFT>xb_undelall<TD>This program undeletes all deleted records in a dbf file.
+<TR><TH ALIGN=LEFT>xb_zap<TD>This program removes all records from a DBF file.
+</TABLE></CENTER>
+<br><br>
+
+<hr>
+<p><img src="xbase.jpg"><br><hr>
+</BODY>
+</HTML>
diff --git a/docs/html/xbase.jpg b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbase.jpg
index 5070fcb..5070fcb 100755
--- a/docs/html/xbase.jpg
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbase.jpg
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/html/xbc1.html b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbc1.html
new file mode 100755
index 0000000..d042048
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbc1.html
@@ -0,0 +1,212 @@
+<!DOCTYPE HTML PUBLIC>
+<html>
+<title>Xbase DBMS Chapter 1</title>
+<body BGCOLOR=#FFFFFF>
+
+<h1><p align="center">Getting Started</p></h1>
+<p align="center">Chapter Updated 4/28/23</p>
+
+<hr><h2>Overview</h2>
+
+Welcome to Xbase64 DBMS, a collection of specifications, programs,
+utilities and a C++ class library for manipulating legacy Xbase (DBF) type
+data files and indices.
+<br><br>
+
+The term Xbase is often used used to describe the format of the original
+DBase, Clipper and Foxbase (.DBF) files. The XBase file format is well
+documented and has stood the test of time. Various popular programs
+still create and read xbase formatted files.<br><br>
+
+The purpose of the Xbase64 library is to provide reliable and usable
+programming tools for reading, writing and updating DBF databases,
+indices and memo fields. Version 4.x.x has been tested for compatability
+with DBase III (TM) and DBase IV (TM) version data files and indices
+*.DBF (data), *.NDX (single tag index), *.MDX (multi tag index) and
+*.DBT (memo).<br><br>
+
+Version 4.x.x is a major rewrite of the library to strengthen error
+processing and bring consistency across modules. It includes updates
+to the locking process and also includes a module to support MDX multi
+tag indices.<br><br>
+
+Earlier versions of the library have included NTX and CDX index formats
+and that code will be re-incorporated into the latest version in the
+future.
+
+
+<br><br>
+<B>Why use the Xbase library? </B>
+The DBF file format is a ubiquitous industry standard with
+widespread usage and application. Using this standard file format removes any
+<em>vender specific</em> locks that bind you to a particular platform.
+Additionally, with Xbase64 only the options needed can be compiled into or out of the library
+to provide a custom configuration specific to project requirements.
+For a small footprint, locking, memo fields and indices could be excluded from
+the library build which would reduce the library size.
+This tool is usefull for small to medium sized apps that don't need all the
+overhead, sophistication and cost of a complex client server configuration.
+The Xbase library is designed to be flexible in which options can be compiled
+into or out fo the library and also which environments it can be run on.
+
+
+<br><br>
+<h3>Library Features</h3>
+<li>Supports 32 and 64 bit architectures
+<li>Supports big endian and little endian architectures
+<li>Compatible code, same API across multiple platforms / archtiectures
+<li>Supports single and multi user configurations with record and file locking
+<li>Includes support for logfiles
+
+
+
+<br><br><br>
+
+<hr><h2>System Requirements</h2>
+
+To build the Xbase64 library, the following items are needed:<br><br>
+
+A computer, a C/C++ compiler and CMAKE.<br><br>
+
+The original source code was developed on a Linux platform with the GCC
+public domain C/C++ compiler.
+<br><br>
+
+Xbase64 DBMS has been successfully ported and runs on Linux, Mac and Windows.
+<br><br>
+
+<hr><h2>Classes and User Interface</h2>
+
+<a href="..\doxygen\html\index.html">Classes and User Interface Documentation via Doxygen</a>
+
+<br><br>
+<hr><h2>Portability, Type Defs and Structures</h2>
+
+To make the Xbase64 library as portable as possible, the following things occurred:
+<br><br>
+<li>The software was developed to compile and run on either 32 or 64 bit architectures.
+<li>The software was developed to compile and run on either big endian or little endian archtectures.
+<li>All numeric data is stored in little endian format.
+<li>The library is built using <a href="https://cmake.org">Cmake</a> to provide support on a wide variety of platforms.
+<li>Field types were defined to be consistent across various OS and CPU configurations.
+Xbase64 defines the following field types:<br><br><br>
+<CENTER>
+<TABLE BORDER>
+<CAPTION ALIGN=TOP><h3>Field Types</h3></CAPTION>
+<TR ALIGN=BASELINE>
+<TR><TH ALIGN=LEFT>Type<TD>Description
+<TR><TH ALIGN=LEFT>xbBool<TD>Contains xbTrue (0) or xbFalse (1)
+<TR><TH ALIGN=LEFT>xbInt16<TD>16 bit int
+<TR><TH ALIGN=LEFT>xbUInt16<TD>16 bit unsigned int
+<TR><TH ALIGN=LEFT>xbInt32<TD>32 bit int
+<TR><TH ALIGN=LEFT>xbUInt32<TD>32 bit unsigned int
+<TR><TH ALIGN=LEFT>xbInt64<TD>64 bit int
+<TR><TH ALIGN=LEFT>xbUInt64<TD>64 bit unsigned int
+<TR><TH ALIGN=LEFT>xbDouble<TD>double
+<TR><TH ALIGN=LEFT>char<TD>char
+<TR><TH ALIGN=LEFT>void<TD>void
+<TR><TH ALIGN=LEFT>struct SCHEMA<TD>Used for defining record structures
+</TABLE></CENTER>
+<br><br>
+
+Xbase64 was designed for portability utilizing standard ANSI-C/C++ compliant
+code. If you decide to write updates to the Xbase64 project, please try
+to keep your work to standard C/C++ generic calls and use the above predefined field types.<br><br>
+
+<hr><h2>Compilation Overview</h2>
+To build the xbase64 library, verify you have:<br>
+<li>Xbase64 source code
+<li>cmake 2.6 or LATER
+<li>Compiler and linker
+
+<br><br>
+If you run into issues, verify you have access rights to the target location of the library.
+
+<br><br>
+For Linux:
+<br><br>
+<li>cd build/linux64 or cd build/linux32
+<li>cmake .
+<li>make
+<li>make test
+<li>sudo make install
+<li>Verify the ld.so.conf file has the library target directory. For example
+update file /etc/ld.so.conf to include /usr/local/lib and run ldconfig.
+<br><br>
+
+For Mac:
+<br><br>
+<li>Verify you have xcode installed and operational.
+<li>cd build/mac64
+<li>cmake . -DCMAKE_OSX_SYSROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk
+<li>make
+<li>make test
+<br><br>
+
+For Windows 64 bit with Visual Studio:
+<br><br>
+<li>Open a Visual Studio 64 bit Shell
+<li>cd build\win64vs
+<li>buildwin.bat
+<li>nmake test
+<li>From a VS Studio 64 bit shell in admin mode: nmake install
+<br><br>
+
+For Windows 32 bit with Visual Studio:
+<br><br>
+<li>Open a Visual Studio 32 bit Shell
+<li>cd build\win32vs
+<li>buildwin.bat
+<li>nmake test
+<li>From a VS Studio 32 bit shell in admin mode: nmake install
+<br><br>
+
+For Windows 32 bit with Borland 5.5 free compiler
+<br><br>
+<li>cd build\borland5.5
+<li>BuildBorland.bat
+<li>make test
+<li>make install (if errors, run in administrator mode)
+<li>xb_cfg_check (if errors, add path c:\Program Files\xbase64\bin)
+
+<br><br>
+
+For other platforms:
+<br><br>
+Here is something to start with...
+<li>cd xbase
+<li>md MyPlatform
+<li>cd MyPlatform
+<li>cp ../Cmake/CmakeLists.txt.
+<li>Enter the appropriate make command for your environment. Check the cmake web site for help.<br>
+ On Linux, it is .cmake, then make
+ your mileage may vary
+
+ Send your results to the library maintainer so it can be added to this library
+
+
+
+To use the Xbase classes, include the following header file in the program:
+<br><br>
+
+#include &lt;xbase.h&gt;<br><br>
+
+For more information on getting started, check out the sample programs in the src/examples folder.
+<br><br>
+
+<hr><br>
+<h2>System Limitations</h2>
+<br>
+Maximum size of a database file is the size of LONG - 2,147,483,647 bytes<br>
+Total number of fields in a database - 255 <br>
+Total number of characters in all fields - 32767<br>
+Maximum number of characters in a field - 254<br>
+Total number of records in a file - 1 billion<br>
+Maximum index key length - 100 bytes<br>
+Maximum .DBT file memo block size - 32256<br>
+Maximum expression result length - 100 bytes<br>
+Maximum NDX index key length - 100 bytes<br><br>
+<hr><br>
+<p><img src=xbase.jpg><br><hr>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/html/xbc10.html b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbc10.html
new file mode 100755
index 0000000..2889e6d
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbc10.html
@@ -0,0 +1,938 @@
+<!DOCTYPE HTML PUBLIC>
+<HTML>
+<TITLE>Xbase DBMS Chapter 10</TITLE>
+<BODY BGCOLOR=#FFFFFF>
+<H2><p align="center">Class xbDbf, xbDbf3, xbDbf4</p></H2>
+<p align="center">Chapter Updated 04/28/23</p><hr>
+
+
+<h4>This chapter documents the following classes:</h4><br><br>
+<li>Class xbDbf - Base class for handling DBF files.
+<li>Class xbDbf3 - Derived class for handling DBF version III files.
+<li>Class xbDbf4 - Derived class for handling DBF version IV files.
+
+
+<br><br><br>
+<h4>Highlights</h4>
+
+<li>The xbDbf3 and xbDbf4 classes are used for accessing DBF data files.
+
+<li>In line with relational theory, a each DBF file can be considered as a table.
+The documentation uses the terms DBF and table interchangeably.<br>
+
+<li>These classes contain methods for accessing and updating DBF files.
+
+<li>The class structure is designed to support additional database file layouts.
+To modify the library to support a new file type not currently supported,
+create a derived class using xbDbf as a base class and create/modify methods needed
+to support the new dbf file version.<br>
+
+<li>Each open DBF file would have an associated instance of the approprate class.
+Each instance maintains a record buffer, an original record buffer (if changes applied)
+current reccord number, selected tag, lock status, record updated flag and other
+misc info.
+
+<li>The record updated flag tells the software to commit any updates to the data base
+automatically if the auto commit option is turned on (default setting is on).
+
+<li>To use a DBF data file, first open it or create it. When done, close it.
+
+<li>The first byte of each record is a deletion flag. Deleted records are marked for deletion
+and not physically removed from the DBF file. They and can be undeleted with xbDbf::UndeleteRecord().
+To physically remove deleted records from the DBF file, use xbDbf::Pack().
+
+
+<li>The library will automatically post any updates if Auto Commit is turned on (default setting).
+If Auto Commit is not on, the application program will need to issue xbDbf::Commit() or
+xbDbf::Abort() commands to post updates.
+
+<li>
+The library automatically updates any open indices. MDX indices are opened automatically.
+For NDX style indices, early versions of DBase required the NDX files be explicitly opened in the
+application. More current versions of available DBase ODBC drivers automatically open NDX indices
+with the addition of an <em>tablename.INF</em> file. Xbase64 supports both scenarios.
+
+<li>Xbase64 handles all record and file locking automatically and is programmed to work the same as the
+original DBase products as far as locking goes. If auto locking is be turned off, the application
+is responsible for all locking activities in multi user environments.
+
+<li>All field related methods operate on the current record.
+
+<li>When accessing fields on a given record, processing fields by field number offers slightly better
+performance than processing by field name because the number has to be looked up if
+the name is used. The field number can be retrieved with xbDbf::FieldNo() when the application program
+is initializing.
+
+<li>Unless otherwise specified, the methods return either XB_NO_ERROR or an error as defined here: <a href=xbae.html>Error Codes</a>
+
+
+<br><br><br><br>
+
+
+
+
+<center>
+<h2>Table Methods</h2>
+<table border=1>
+<tr><th width=35%>Method</th><th>Description</th><th>Parms</th></tr>
+<tr><td>virtual xbInt16 Abort()</td><td>Cancel any updates not already committed to the table.</td></tr>
+<tr><td>virtual xbInt16 AppendRecord()</td><td>Append the record buffer to the end of the table.</td></tr>
+<tr><td>virtual xbInt16 BlankRecord()</td><td>Blank the current record buffer.</td></tr>
+<tr><td>virtual xbInt16 Commit()</td><td>Commit any updates to the DBF file/table.</td></tr>
+<tr><td>virtual xbInt16 Close()</td><td>Close the DBF file/table.</td></tr>
+<tr><td>virtual xbInt16 CopyDbfStructure( xbDbf *dNewTable, const xbString &sTableName, const xbString &sTableAlias, xbInt16 iOverlay, xbInt16 iShareMode )</td><td>Copy structure to new DBF file.</td>
+ <td>
+ <em>dNewTable</em> - Pointer to new xbDbf class<br>
+ <em>sTableName</em> - New Table name<br>
+ <em>sTableAlias</em> - Alias for new table</br>
+ <em>iOverlay</em><br>
+ <li>xbTrue - Overlay if file exists<br>
+ <li>xbFalse - Don't overlay<br>
+ <em>iShareMode</em><br>
+ <li>XB_SINGLE_USER<br>
+ <li>XB_MULTI_USER
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 CreateTable( const xbString &sTableName, const xbString &sAlias, xbSchema *pSchema, xbInt16 iOverlay, xbInt16 iShareMode ) = 0</td><td>Create new table / DBF file.</td>
+ <td>
+ <em>sTableName</em> - New Table name<br>
+ <em>sAlias</em> - Alias for new table<br>
+ <em>pSchema</em> - Pointer to field definition structure<br>
+ <em>iOverlay</em><br>
+ <li>xbTrue - Overlay if file exists<br>
+ <li>xbFalse - Don't overlay<br>
+ <em>iShareMode</em><br>
+ <li>XB_SINGLE_USER<br>
+ <li>XB_MULTI_USER
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 DeleteTable()</td><td>Delete table / DBF file and all associated indices and memo files.</td></tr>
+
+<tr><td>virtual xbInt16 DeleteAll( xbInt16 iOption )</td><td>Set or remove delete flags for all records in the table.</td>
+ <td>
+ <em>iOption</em><br>
+ <li>0 - Set all delete flags<br>
+ <li>1 - Remove all delete flags
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 DeleteAllRecords()</td><td>Set delete flags for all records in the table.</td></tr>
+<tr><td>virtual xbInt16 DeleteRecord()</td><td>Delete the current record.</td></tr>
+
+<tr><td>virtual xbInt16 DumpHeader( xbInt16 iOption ) const</td><td>Dump DBF header information to the console.</td>
+ <td>
+ <em>iOption</em><br>
+ <li>1 = Print header only<br>
+ <li>2 = Field data only<br>
+ <li>3 = Header and Field data<br>
+ <li>4 = Header, Field and Memo header data if applicable
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 DumpRecord( xbUInt32 ulRecNo, xbInt16 iOutputDest = 0, xbInt16 iOutputFmt = 0 )</td><td>Dump the contents of the specified record.</td>
+ <td>
+ <em>ulRecNo</em> - Record number of record to be dumped
+ <em>iOutputDest</em><br>
+ <li>0 = stdout<br>
+ <li>1 = Syslog<br>
+ <li>2 = Both<br>
+ <em>iOutputFmt</em><br>
+ <li>0 = with field names<br>
+ <li>1 = 1 line per rec, no field names<br>
+ <li>2 = 1 line per rec, first line is a list of field names.
+ </td>
+ </tr>
+
+<tr><td>virtual xbInt16 GetAutoCommit() const</td><td>Get the Auto Commit status.</td></tr>
+<tr><td>virtual xbInt16 GetAutoCommit( xbInt16 iOption ) const</td><td>Get the Auto Commit status.</td><td><em>iOption:</em><br>0 = Table Status<br>1 = System Status.</td></tr>
+<tr><td>virtual xbBool GetBof()</td><td>Returns true if beginning of file.</td></tr>
+<tr><td>virtual xbUInt32 GetCurRecNo() const</td><td>Returns the current record number.</td></tr>
+<tr><td>virtual xbInt16 GetDbfStatus() const</td><td>Returns Status<br>
+ <li>0 - Closed<br>
+ <li>1 - Open<br>
+ <li>2 - Updates Pending
+ </td>
+</tr>
+
+<tr><td>virtual xbBool GetEof()</td><td>Returns true if end of file.</td></tr>
+<tr><td>virtual xbInt32 GetFieldCnt() const</td><td>Returns the number of fields in the table.</td></tr>
+<tr><td>virtual xbInt16 GetFirstRecord()</td><td>Retrieve the first active (not deleted) record in the table.</td></tr>
+<tr><td>virtual xbInt16 GetFirstRecord( xbInt16 iOption )</td><td>Retrieve the first record in the table.</td>
+ <td>
+ <em>iOption</em><br>
+ <li>XB_ALL_RECS<br>
+ <li>XB_ACTIVE_RECS<br>
+ <li>XB_DELETED_RECS
+ </td>
+</tr>
+<tr><td>virtual xbUInt16 GetHeaderLen() const</td><td>Returns the length of the header portion within the DBF file.</td></tr>
+<tr><td>virtual xbInt16 GetLastRecord()</td><td>Retrieve the last active (not deleted) record in the table.</td></tr>
+<tr><td>virtual xbInt16 GetLastRecord( xbInt16 iOption )</td><td>Retrieve the last record in the table.</td>
+ <td>
+ <em>iOption</em><br>
+ <li>XB_ALL_RECS<br>
+ <li>XB_ACTIVE_RECS<br>
+ <li>XB_DELETED_RECS
+ </td>
+</tr>
+
+
+<tr><td>virtual xbInt16 GetNextRecord()</td><td>Retrieve the next active (not deleted) record in the table.</td></tr>
+<tr><td>virtual xbInt16 GetNextRecord( xbInt16 iOption )</td><td>Retrieve the next record in the table.</td>
+ <td>
+ <em>iOption</em><br>
+ <li>XB_ALL_RECS<br>
+ <li>XB_ACTIVE_RECS<br>
+ <li>XB_DELETED_RECS
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetNextRecord( xbInt16 iOption, xbUInt32 ulStartRec )</td><td>Retrieve the next record in the table.</td>
+ <td>
+ <em>iOption</em><br>
+ <li>XB_ALL_RECS<br>
+ <li>XB_ACTIVE_RECS<br>
+ <li>XB_DELETED_RECS<br>
+ <em>ulStartRec</em> is the position to start from.
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetPrevRecord()</td><td>Retrieve the previous active (not deleted) record in the table.</td></tr>
+<tr><td>virtual xbInt16 GetPrevRecord( xbInt16 iOption )</td><td>Retrieve the previous record in the table.</td>
+ <td>
+ <em>iOption</em><br>
+ <li>XB_ALL_RECS<br>
+ <li>XB_ACTIVE_RECS<br>
+ <li>XB_DELETED_RECS
+ </td>
+</tr>
+<tr><td>virtual xbInt16 GetRecord( xbUInt32 ulRecNo )</td><td>Retrieve record <em>ulRecNo</em>.</td><td><em>ulRecNo</em> - Record number to retrieve</td></tr>
+
+<tr><td>virtual xbInt16 GetRecordCnt( xbUInt32 & ulRecCnt )</td><td>Returns record count in <em>ulRecCnt</em>.</td>
+ <td>
+ <em>ulRecCnt</em> - Output number of records in table</tr>
+
+<tr><td>virtual char * GetRecordBuf( xbInt16 iOpt = 0 ) const</td><td>Returns pointer to record buffer.</td>
+ <td>
+ <em>iOpt</em><br>
+ <li>0 for RecBuf (current contents)<br>
+ <li>1 for RecBuf2 (original contents)
+ </td>
+</tr>
+
+<tr><td>virtual xbUInt16 GetRecordLen() const</td><td>Returns the record length</td></tr>
+<tr><td>virtual const xbString &GetTblAlias() const</td><td>Returns the table alias. Aliases can be used to manage multiple instances of the same open table.</td></tr>
+<tr><td>virtual xbInt16 GetVersion() const = 0</td><td>Returns 3 for DBase III version files, returns 4 for DBase IV version files.</td></tr>
+<tr><td>virtual xbXBase *GetXbasePtr() const</td><td>Returns the xbase pointer.</td></tr>
+<tr><td>virtual xbBool MemoFieldsExist() const</td><td>Returns true if the table has any associated memo fields.</td></tr>
+
+<tr><td>virtual xbInt16 Open( const xbString &sTableName )</td><td>Open a table (DBF file).</td>
+ <td>
+ <em>sTableName</em> - Table name
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 Open( const xbString &sTableName, const xbString &sAlias )</td><td>Open a table (DBF file).</td>
+<td>
+ <em>sTableName</em> - Table name<br>
+ <em>sAlias</em> - Alias name
+ </td>
+</tr>
+
+
+<tr><td>virtual xbInt16 Open( const xbString &sTableName, const xbString &sAlias, xbInt16 iOpenMode, xbInt16 iShareMode ) = 0</td><td>Open a table (DBF file).</td>
+ <td>
+ <em>sTableName</em> - Table name<br>
+ <em>sAlias</em> - Alias name<br>
+ <em>iOpenMode</em><br>
+ <li>XB_READ<br>
+ <li>XB_READ_WRITE<br>
+ <em>iShareMode</em><br>
+ <li>XB_SINGLE_USER<br>
+ <li>XB_MULTI_USER
+ </td>
+</tr>
+
+
+<tr><td>virtual xbInt16 Pack()</td><td>Pack the table, physically remove any records flagged for deletion.</td></tr>
+<tr><td>virtual xbInt16 Pack( xbUInt32 &ulDeletedRecCnt )</td><td>Pack the table, physically remove any records flagged for deletion.<br></td>
+ <td><em>ulDeletedRecordCnt</em> - Output - number of deleted records.</td></tr>
+
+<tr><td>virtual xbInt16 PutRecord()</td><td>Write record buffer to current location</td></tr>
+
+<tr><td>virtual xbInt16 PutRecord( xbUInt32 ulRecNo )</td><td>Write record buffer to record position <em>ulRecNo</em>.</td>
+ <td>
+ <em>ulRecNo</em> - Record number to write.
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 RecordDeleted( xbInt16 iOpt = 0 ) const</td><td>Returns true if currect record is flagged for deletion, otherwise returns false.</td>
+ <td>
+ <em>iOpt</em><br>
+ <li>0 - check RecBuf (current contents)<br>
+ <li>1 - check RecBuf2 (original contents)
+ </td>
+</tr>
+
+
+<tr><td>virtual xbInt16 Rename( const xbString sNewName ) = 0</td><td>Rename the table.</td>
+ <td>
+ <em>sNewName</em> - New tablename.
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 SetAutoCommit( xbInt16 iAutoCommit )</td><td>Set table specific auto commit setting.</td>
+ <td>
+ <em>iAutoCommit</em><br>
+ <li>0 - Auto Commit off<br>
+ <li>1 - Auto Commit on
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 UndeleteAllRecords()</td><td>Undelete all records in table flagged for deletion.</td></tr>
+<tr><td>virtual xbInt16 UndeleteRecord()</td><td>Undelete the current record.</td></tr>
+<tr><td>virtual xbInt16 Zap()</td><td>Initialize the table.</td></tr>
+</table>
+
+<br><br><br>
+
+
+
+<h2>Field Methods</h2>
+
+<table border=1>
+<tr><th width=50%>Method</th><th>Description</th><th>Parms</th></tr>
+<tr><td>virtual xbInt16 GetField(xbInt16 iFieldNo, xbString &sFieldValue, xbInt16 iRecBufSw ) const</td><td>Get string field.</td>
+ <td>
+ <em>iFieldNo</em> Input - Field number to retrieve<br>
+ <em>sFieldValue</em> Output string<br>
+ <em>iRecBufSw</em> Record buffer to pull data from.<br>
+ <li>0 - current buffer
+ <li>1 - original buffer
+</td></tr>
+
+<tr><td>virtual xbInt16 GetField(xbInt16 iFieldNo, xbString &sFieldValue) const</td><td>Get string field.</td>
+ <td>
+ <em>iFieldNo</em> Input - Field number to retrieve<br>
+ <em>sFieldValue</em> Output string</td></tr>
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetField(const xbString &sFieldName, xbString &sFieldValue) const</td><td>Get string field.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to retrieve<br>
+ <em>sFieldValue</em> Output string</td></tr>
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetFieldDecimal( xbInt16 iFieldNo, xbInt16 &iFieldDecimal ) const</td><td>Get decimal field.</td>
+ <td>
+ <em>iFieldNo</em> Input - Field number to retrieve<br>
+ <em>iFieldDecimal</em> Output - Number of decimals defined for field
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetFieldDecimal( const xbString &sFieldName, xbInt16 &iFieldDecimal ) const</td><td>Get decimal field.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to retrieve<br>
+ <em>iFieldDecimal</em> Output - Number of decimals defined for field
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetFieldLen( xbInt16 iFieldNo, xbInt16 &iFieldLen ) const</td><td>Get field length.</td>
+ <td>
+ <em>iFieldNo</em> Input - Field number to retrieve<br>
+ <em>iFieldLen</em> Output - Field length of field
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetFieldLen( const xbString &sFieldName, xbInt16 &iFieldLen ) const</td><td>Get field length.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to retrieve<br>
+ <em>iFieldLen</em> Output - Field length of field
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetFieldName( xbInt16 iFieldNo, xbString &sFieldName ) const</td><td>Get field name.</td>
+ <td>
+ <em>iFieldNo</em> Input - Field number to retrieve<br>
+ <em>sFieldName</em> Output - Field name<br>
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetFieldNo( const xbString &sFieldName, xbInt16 &iFieldNo ) const</td><td>Get field number.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to retrieve<br>
+ <em>iFieldNo</em> Output - Field number<br>
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetFieldNo( const xbString &sFieldName ) const</td><td>Returns a field number for a given field name.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to retrieve<br>
+ </td>
+</tr>
+
+
+<tr><td>virtual xbInt16 GetFieldType( xbInt16 iFieldNo, char &cFieldType ) const</td><td>Get field type.</td>
+ <td>
+ <em>iFieldNo</em> Input - Field number to retrieve<br>
+ <em>cFieldType</em> Output - Field type
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetFieldType( const xbString &sFieldName, char &cFieldType ) const</td><td>Get field type.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to retrieve<br>
+ <em>cFieldType</em> Output - Field type
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 PutField( const xbString &sFieldName, const xbString &sFieldData )</td><td>Put string field.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to update<br>
+ <em>sFieldData</em> Input - Update value<br>
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 PutField( xbInt16 iFieldNo, const xbString &sFieldData )</td><td>Put string field.</td>
+ <td>
+ <em>sFieldNo</em> Input - Field number to update<br>
+ <em>sFieldData</em> Input - Update value<br>
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 PutLogicalField( xbInt16 iFieldNo, const xbString &sFieldData )</td><td>Put logicial field.</td>
+ <td>
+ <em>sFieldNo</em> Input - Field number to update<br>
+ <em>sFieldData</em> Input - Update value<br>
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 PutLogicalField( const xbString &sFieldName, const xbString &sFieldData )</td><td>Put logical field.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to update<br>
+ <em>sFieldData</em> Input - Update value<br></td></tr>
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetLogicalField( xbInt16 iFieldNo, xbString &sFieldData ) const</td><td>Get logical field.</td>
+ <td>
+ <em>iFieldNo</em> Input - Field number to retrieve<br>
+ <em>sFieldData</em> Output - String name to put result<br>
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetLogicalField( const xbString &sFieldName, xbString &sFieldData) const</td><td>Get logical field.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to retrieve<br>
+ <em>sFieldData</em> Output - String name to put result<br>
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 PutLogicalField( xbInt16 iFieldNo, xbBool bFieldData )</td><td>Put logical field.</td>
+ <td>
+ <em>sFieldNo</em> Input - Field number to update<br>
+ <em>bFieldData</em> Output - Bool value<br>
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 PutLogicalField( const xbString &sFieldName, xbBool bFieldData )</td><td>Put logical field.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to update<br>
+ <em>bFieldData</em> Output - Bool value<br>
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetLogicalField( xbInt16 iFieldNo, xbBool &bFieldData ) const</td><td>Get logical field.</td>
+ <td>
+ <em>iFieldNo</em> Input - Field number to retrieve<br>
+ <em>bFieldData</em> Output - Bool value<br>
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetLogicalField( xbInt16 iFieldNo, xbBool &bFieldData, xbInt16 iRecBufSw ) const</td><td>Get logical field.</td>
+ <td>
+ <em>iFieldNo</em> Input - Field number to retrieve<br>
+ <em>bFieldData</em> Output - Bool value<br>
+ <em>iRecBufSw</em> Record buffer to pull data from.<br>
+ <li>0 - current buffer
+ <li>1 - original buffer, before any updates
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetLogicalField( const xbString &sFieldName, xbBool &bFieldData) const</td><td>Get logical field.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to retrieve<br>
+ <em>bFieldData</em> Output - Bool value<br>
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetLongField( xbInt16 iFieldNo, xbInt32 &lFieldValue ) const</td><td>Get long field.</td>
+ <td>
+ <em>iFieldNo</em> Input - Field number to retrieve<br>
+ </em>lFieldValue<em> Output - xbInt32 field to put result
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetLongField( const xbString &sFieldName, xbInt32 &lFieldValue ) const</td><td>Get long field.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to retrieve<br>
+ </em>lFieldValue<em> Output - xbInt32 field to put result
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 PutLongField( xbInt16 iFieldNo, xbInt32 lFieldValue )</td><td>Put long field.</td>
+ <td>
+ <em>sFieldNo</em> Input - Field number to update<br>
+ <em>lFieldValue<em> Output - xbInt32 field to put result
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 PutLongField( const xbString &sFieldName, xbInt32 lFieldValue )</td><td>Put long field.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to retrieve<br>
+ <em>lFieldValue<em> Output - xbInt32 update value
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetULongField( xbInt16 iFieldNo, xbUInt32 &lFieldValue ) const</td><td>Get unsigned long field.</td>
+ <td>
+ <em>iFieldNo</em> Input - Field number to retrieve<br>
+ <em>ulFieldValue<em> Output - xbUInt32 field to put result
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetULongField( const xbString &sFieldName, xbUInt32 &lFieldValue ) const</td><td>Get unsigned long field.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to retrieve<br>
+ <em>ylFieldValue<em> Output - xbUInt32 field to put result
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 PutULongField( xbInt16 iFieldNo, xbUInt32 lFieldValue )</td><td>Put unsigned long field.</td>
+ <td>
+ <em>sFieldNo</em> Input - Field number to update<br>
+ <em>lFieldValue<em> Output - xbInt32 update value
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 PutULongField( const xbString &sFieldNo, xbUInt32 lFieldValue )</td><td>Put unsigned long field.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to update<br>
+ <em>lFieldValue<em> Output - xbUInt32 update value
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetDoubleField( xbInt16 FieldNo, xbDouble &dFieldValue ) const</td><td>Get double field.</td>
+ <td>
+ <em>iFieldNo</em> Input - Field number to retrieve<br>
+ <em>dFieldValue<em> Output - xbDouble field to put result
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetDoubleField( xbInt16 FieldNo, xbDouble &dFieldValue, xbInt16 iRecBufSw ) const</td><td>Get double field.</td>
+ <td>
+ <em>iFieldNo</em> Input - Field number to retrieve<br>
+ <em>dFieldValue<em> Output - xbDouble field to put result
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetDoubleField( const xbString &sFieldName, xbDouble &dFieldValue ) const</td><td>Get double field.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to retrieve<br>
+ <em>dFieldValue<em> Output - xbDouble field to put result
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 PutDoubleField( xbInt16 FieldNo, xbDouble dFieldValue )</td><td>Put double field.</td>
+ <td>
+ <em>sFieldNo</em> Input - Field number to update<br>
+ <em>dFieldValue<em> Output - xbDouble update value
+ </td>
+</tr>
+
+
+<tr><td>virtual xbInt16 PutDoubleField( const xbString &FieldName, xbDouble dFieldValue )</td><td>Put double field.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to update<br>
+ <em>dFieldValue<em> Output - xbDouble update value
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetFloatField( xbInt16 iFieldNo, xbFloat &fFieldValue ) const</td><td>Get float field.</td>
+ <td>
+ <em>iFieldNo</em> Input - Field number to retrieve<br>
+ <em>fFieldValue<em> Output - xbFloat field to put result
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetFloatField( const xbString &sFieldName, xbFloat &fFieldValue ) const</td><td>Get float field.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to retrieve<br>
+ <em>fFieldValue<em> Output - xbFloat field to put result
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 PutFloatField( xbInt16 iFieldNo, xbFloat fFieldValue )</td><td>Put float field.</td>
+ <td>
+ <em>sFieldName</em> Input - Field number to update<br>
+ <em>fFieldValue<em> Output - xbFloat update value
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 PutFloatField( const xbString &sFieldName, xbFloat fFieldValue )</td><td>Put float field.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to update<br>
+ <em>fFieldValue<em> Output - xbFloat update value
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetDateField( xbInt16 iFieldNo, xbDate &dt ) const</td><td>Get date field.</td>
+ <td>
+ <em>iFieldNo</em> Input - Field number to retrieve<br>
+ <em>dt<em> Output - xbDate field to put result
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetDateField( const xbString &sFieldName, xbDate &dt ) const</td><td>Get date field.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to retrieve<br>
+ <em>dt<em> Output - xbDate field to put result
+ </td
+</tr>
+
+<tr><td>virtual xbInt16 PutDateField( xbInt16 iFieldNo, const xbDate &dt )</td><td>Put date field.</td>
+ <td>
+ <em>sFieldName</em> Input - Field number to update<br>
+ <em>dt</em> Output - xbDate update value
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 PutDateField( const xbString &sFieldName, const xbDate &dt )</td><td>Put date field.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to update<br>
+ <em>dt</em> Output - xbDate update value
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetNullSts( xbInt16 iFieldNo, xbBool &bIsNull ) const<br>
+ virtual xbInt16 GetNullSts( const xbString &sFieldName, xbBool &bIsNull ) const<br>
+ virtual xbInt16 GetNullSts( xbInt16 iFieldNo, xbBool &bIsNull, xbInt16 iRecBufSw ) const</td>
+ <td>Get Field Null Status</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to check<br>
+ <em>iFieldNo</em> Input - Field no to check<br>
+ <em>bIsNull</em> Output - True if the field is null (all spaces).<br>
+ <em>iRecBufSw</em> Record buffer to pull data from.<br>
+ <li>0 - current buffer
+ <li>1 - original buffer
+ </td>
+</tr>
+
+</table>
+
+
+
+<br><br><br>
+<h2>Memo File/Field Methods</h2>
+
+<table border=1>
+<tr><th>Method</th><th>Description</th><th>Parms</th></tr>
+<tr><td>virtual xbInt16 GetMemoFieldCnt() const</td><td>Returns number of memo fields in the table.</td></tr>
+<tr><td>virtual xbMemo *GetMemoPtr()</td><td>Returns a pointer to the associated memo file instance.</td></tr>
+<tr><td>virtual xbUInt32 GetCreateMemoBlockSize() const</td><td>Returns the block size a new memo file will be created with. Block sizes are in 512 byte increments.</td></tr>
+<tr><td>virtual xbInt16 GetMemoField( xbInt16 iFldNo, xbString &sMemoData )</td><td>Get memo field data.</td>
+ <td>
+ <em>iFldNo</em> Input - Memo field number to retrieve<br>
+ <em>sMemoData</em> Output - xbString field to put result
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetMemoField( const xbString & sFldName, xbString &sMemoData )</td><td>Get memo field data.</td>
+ <td>
+ <em>iFldName</em> Input - Memo field name to retrieve<br>
+ <em>sMemoData</em> Output - xbString field to put result
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetMemoFieldLen( xbInt16 iFldNo, xbUInt32 &ulMemoFieldLen )</td><td>Get memo field length.</td>
+ <td>
+ <em>iFldNo</em> Input - Memo field number to retrieve<br>
+ <em>ulMemoFieldLen</em> Output - xbUInt32 field to put result
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetMemoFieldLen( const xbString & sFldName, xbUInt32 &ulMemoFieldLen )</td><td>Get memo field length.</td>
+ <td>
+ <em>iFldName</em> Input - Memo field name to retrieve<br>
+ <em>ulMemoFieldLen</em> Output - xbUInt32 field to put result
+ </td>
+</tr>
+
+<tr><td>virtual xbBool MemoFieldExists( xbInt16 iFieldNo ) const</td><td>Returns xbTrue if memo field exists, else returns xbFalse.</td>
+ <td>
+ <em>iFieldNo</em> Input - field number
+ </td>
+</tr>
+
+<tr><td>virtual xbBool MemoFieldExists( const xbString &sFieldName ) const</td><td>Returns xbTrue if memo field exists, else returns xbFalse.</td>
+ <td>
+ <em>sFieldName</em> Input - field name
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 SetCreateMemoBlockSize( xbUInt32 ulBlockSize ) = 0</td><td>Set the block size for the memo file. Must be called before memo file is created.</td>
+ <td>
+ <em>ulBlockSize</em> Input - New block size in 512 byte increments
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 UpdateMemoField( xbInt16 iFldNo, const xbString &sMemoData )</td><td>Update memo field.</td>
+ <td>
+ <em>iFldNo</em> Input - Memo field number to update<br>
+ <em>sMemoData</em> Input - Memo data to update
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 UpdateMemoField( const xbString & sFldName, const xbString &sMemoData )</td><td>Update memo field.</td>
+ <td>
+ <em>iFldName</em> Input - Memo field name to update<br>
+ <em>sMemoData</em> Input - Memo data to update
+ </td>
+</tr>
+</table>
+
+
+
+
+<br><br><br>
+<h2>Lock Methods</h2>
+<table border=1>
+<tr><td colspan=3>
+
+If auto locking is turned on (default setting), xbase64 handles locking automatically.<br>
+If auto locking is turned off and application is running in a multi user environment, then
+locking functions will need to be handled by the application program.
+</td></tr>
+
+<tr><th>Method</th><th>Description</th><th>Parms</th></tr>
+<tr><td>virtual xbInt16 LockTable( xbInt16 iLockFunction )</td><td>Lock the table.</td>
+ <td>
+ <em>LockFunction</em><br>
+ <li>XB_LOCK<br>
+ <li>XB_UNLOCK
+ </td>
+</tr>
+<tr><td>virtual xbInt16 LockRecord( xbInt16 iLockFunction, xbUInt32 ulRecNo )</td><td>Lock record.</td>
+ <td>
+ <em>iLockFunction</em><br>
+ <li>XB_LOCK <br>
+ <li>XB_UNLOCK<br>
+ <em>ulRecNo</em> - Record number to lock or unlock
+ </td>
+</tr>
+<tr><td>virtual xbInt16 LockAppend( xbInt16 iLockFunction )</td><td>Lock append bytes for adding new record.</td>
+ <td>
+ <em>iLockFunction</em><br>
+ <li>XB_LOCK<br>
+ <li>XB_UNLOCK
+ </td>
+</tr>
+<tr><td>virtual xbInt16 LockHeader( xbInt16 iLockFunction )</td><td>Lock table header bytes for updating table.</td>
+ <td>
+ <em>iLockFunction</em><br>
+ <li>XB_LOCK<br>
+ <li>XB_UNLOCK
+ </td>
+</tr>
+<tr><td>virtual xbInt16 LockMemo( xbInt16 iLockFunction )</td><td>Lock memo table for update.
+ <td>
+ <em>iLockFunction</em><br>
+ <li>XB_LOCK<br>
+ <li>XB_UNLOCK
+ </td>
+</tr>
+<tr><td>virtual xbBool GetMemoLocked() const</td><td>Returns the memo lock status.</td></tr>
+
+<tr><td>virtual xbInt16 LockIndices( xbInt16 iLockFunction )</td><td>Lock indices for update.</td>
+ <td>
+ <em>iLockFunction</em><br>
+ <li>XB_LOCK<br>
+ <li>XB_UNLOCK
+ </td>
+</tr>
+<tr><td>xbInt16 GetAutoLock() const</td><td>Retrieve current auto lock status.</td></tr>
+
+<tr><td>void SetAutoLock( xbInt16 iAutoLock )</td><td>Set autolock status for table</td>
+ <td>
+ <em>iAutoLock</em><br>
+ <li>1 - Use auto lock for this table.<br>
+ <li>0 - Don't use auto lock for this table.<br>
+ <li>-1 - (minus one) Use system default.
+ </td>
+</tr>
+
+<tr><td>xbInt16 GetLockFlavor() const</td><td>Always returns 1. Included for potential future alternative locking schemes.</td></tr>
+<tr><td>void SetLockFlavor( xbInt16 iLockFlavor )</td><td>For future use. Included for potential future alternative locking schemes.</td></tr>
+<tr><td>xbBool GetTableLocked() const</td><td>Returns Table Locked status.</td></tr>
+<tr><td>xbBool GetHeaderLocked() const</td><td>Returns Header Locked Status.</td></tr>
+<tr><td>xbUInt32 GetAppendLocked() const</td><td>Returns Append Bytes locked status.</td></tr>
+<tr><td>xbLinkListNode<xbUInt32> * GetFirstRecLock() const</td><td>Returns pointer to linked list of record locks.</td></tr>
+<tr><td>void DumpTableLockStatus() const</td><td>Dumps all lock information for debugging purposes.</td></tr>
+</table>
+
+
+
+<br><br><br>
+<h2>Index Methods</h2>
+<table border=1>
+<tr><th width=35%>Method</th><th width=35%>Description</th><th>Parms</th></tr>
+<tr><td> virtual xbInt16 CheckTagIntegrity( xbInt16 iTagOpt, xbInt16 iOutputOpt )</td><td>For debugging, check tag integrity.</td>
+ <td>
+ <em>iTagOpt</em><br>
+ <li>0 - Check current tag<br>
+ <li>1 - Check all tags<br>
+ <em>iOutputOpt</em><br>
+ <li>0 = stdout<br>
+ <li>1 = Syslog<br>
+ <li>2 = Both
+ </td>
+</tr>
+
+<tr><td> virtual xbInt16 CloseIndexFile( xbIx *pIx )</td><td>Close an index file.</td>
+ <td>
+ <em>pIx</em> Pointer to index file instance.
+</tr>
+
+<tr><td> virtual xbInt16 CreateTag( const xbString &sIxType, const xbString &sName, const xbString &sKey, const xbString &sFilter,
+ xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverLay, xbIx **xbIxOut, void **vpTagOut )</td>
+ <td>Create index tag</td>
+ <td>
+ <em>sIxType</em> Input - MDX or NDX<br>
+ <em>sName</em> Input - Tag Name<br>
+ <em>sKey</em> Input - Key Expression<br>
+ <em>sFilter</em> Input - Filter Expression (MDX only)<br>
+ <em>iDescending</em> Input - xbTrue for descending, xbFalse ascending<br>
+ <em>iUnique</em> Input - xbTrue for unique, xbFalse not unique<br>
+ <em>iOverlay</em> Input - xbTrue to overlay if existing file exists<br>
+ <em>**xbIxOut</em> Output - Pointer to ix instance<br>
+ <em>**vpTagOut</em> Output - Pointer to tag
+ </td>
+</tr>
+
+<tr><td> virtual xbInt16 DeleteTag( const xbString &sIxType, const xbString &sName )</td><td>Delete a tag.</td>
+ <td>
+ <em>sIxType</em> Input - MDX or NDX<br>
+ <em>sName</em> Input - Tag Name<br>
+ <em>sKey</em> Input - Key Expression
+ </td>
+</tr>
+
+<tr><td> virtual xbInt16 DeleteAllIndexFiles()</td><td>Delete all indices for table.</td></tr>
+
+<tr><td> virtual xbInt16 Find( xbString &sKey )</td><td>Find xbString key for current tag (assumes character index).</td>
+ <td>
+ <em>sKey</em> - String search key
+ </td>
+</tr>
+
+<tr><td> virtual xbInt16 Find( xbDate &dtKey )</td><td>Find xbDate key for current tag(assumes date index).</td>
+ <td>
+ <em>dtKey</em> - Date search key
+ </td>
+</tr>
+
+<tr><td> virtual xbInt16 Find( xbDouble &dKey )</td><td>Find numeric key for current tag (assumes numeric index).</td>
+ <td>
+ <em>dKey</em> - Nueric search key
+ </td>
+</tr>
+
+<tr><td> virtual xbIx *GetCurIx() const</td><td>Returns pointer to current index file.</td></tr>
+<tr><td> virtual void *GetCurTag() const</td><td>Returns pointer to current tag.</td></tr>
+<tr><td> virtual xbInt16 GetFirstKey()</td><td>Get the first key for the current tag, reposition current record.</td></tr>
+<tr><td> virtual xbInt16 GetNextKey()</td><td>Get the next key for the current tag, reposition current record.</td></tr>
+<tr><td> virtual xbInt16 GetPrevKey()</td><td>Get the previous key for the current tag, reposition current record.</td></tr>
+<tr><td> virtual xbInt16 GetLastKey()</td><td>Get the last key for the current tag, reposition current record.</td></tr>
+<tr><td> virtual const xbString &GetCurIxType() const</td><td>Returns the current index type.</td></tr>
+<tr><td> virtual const xbString &GetCurTagName() const</td><td>Returns the current tag name.</td></tr>
+<tr><td> virtual xbIxList *GetIxList() const</td><td>Returns a pointer to list of open indices.</td></tr>
+<tr><td> virtual xbInt32 GetPhysicalIxCnt () const</td><td>Returns the count of open index files for the table.</td></tr>
+<tr><td> xbLinkListNode<xbTag *> *GetTagList () const</td><td>Returns a pointer to a list of tags for the table.</td></tr>
+<tr><td> virtual xbInt16 OpenIndex( const xbString &sIxType, const xbString &sIndexName )</td>
+ <td>Open the index.<br>MDX index files are opened automatically.<br>NDX index files can be opened automatically.</td>
+ <td>
+ <em>sIxType</em><br>
+ <li>NDX<br>
+ <li>MDX<br>
+ <em>sIndexName</em> - index file name
+ </td>
+</tr>
+
+<tr><td> virtual xbInt16 Reindex( xbInt16 iTagOpt )</td><td>Reindex</td>
+ <td>
+ <em>iTagOpt</em><br>
+ <li>0 - Reindex current tag<br>
+ <li>1 - Reindex all tags
+ </td>
+</tr>
+
+<tr><td> virtual xbInt16 SetCurTag( const xbString &sTagName )</td><td>Set current tag.</td>
+ <td>
+ <em>sTagName</em> Tag name
+ </td>
+</tr>
+
+<tr><td> virtual void SetCurTag( const xbString &sIxType, xbIx *pIx, void *vpTag )</td><td>Set current tag.</td>
+ <td>
+ <em>sIxType</em><br>
+ <li>NDX<br>
+ <li>MDX<br>
+ <em>pIx</em> - Pointer to index object<br>
+ <em>vpTag</em> - Pointer to tag object
+ </td>
+</tr>
+
+<tr><td> virtual xbInt16 AssociateIndex( const xbString &sType, const xbString &sName, xbInt16 iOption )</td>
+ <td>Use this method to add an NDX index file name to an INF file.<br>
+ When a DBF file is opened, Xbase64 automatically opens NDX index files that are included in the appropriate INF file.
+ This is also used for ODBC compatibility with other xbase type tools.
+ </td>
+ <td>
+ <em>sIxType</em> Currently only NDX.<br> Future versions can support additional non prod index types.<br>
+ <em>sIxName</em> The index name.<br>
+ <em>iOpt</em><br>
+ <li>0 - Add index to .INF if not already there<br>
+ <li>1 - Remove index from .INF if it exists
+ </td>
+</tr>
+
+<tr><td> xbLinkListNode<xbString> *GetInfList() const</td><td>Returns list of INF file entries.</td></tr>
+</table>
+
+<br><br><br>
+<h2>Block Read Methods</h2>
+<table border=1>
+<tr><th>Method</th><th>Description</th></tr>
+<tr><td>xbInt16 DisableBlockReadProcessing()</td><td>Disable block read processing for table.
+<tr><td>xbInt16 EnableBlockReadProcessing()</td>
+ <td>Enable block read processing for table.<br>
+ This significantly speeds up processing speed if reading from the file sequentially.<br>
+ For random access, better performance will be achieved with block reading turned off.
+ </td>
+</tr>
+<tr><td>xbBool GetBlockReadStatus() const</td><td>Get block read status.</td></tr>
+</table>
+
+</center>
+
+
+
+<br><br>
+<hr>
+<p><img src="xbase.jpg"><br><hr>
+</BODY>
+</HTML>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/html/xbc11.html b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbc11.html
new file mode 100755
index 0000000..315ccc5
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbc11.html
@@ -0,0 +1,146 @@
+<!DOCTYPE HTML PUBLIC>
+<HTML>
+<TITLE>Xbase DBMS Chapter 11</TITLE>
+<BODY BGCOLOR=#FFFFFF>
+<H2><p align="center">Logging</p></H2>
+<p align="center">Chapter Updated 04/28/23</p><hr>
+
+<br><br>
+The objective of this chapter is to provide information regarding the logging funcitionality contained within the Xbase64 library.
+
+<br><br>
+When the Xbase64 generates an error, it writes an entry in the logfile if logging is enabled.
+The library generates an error mesage with an error code value and an error stop value.
+The error code identifies what the error is, the error stop identifies where it errored in the libary.
+
+<br><br>
+The xbLog class supports the following functionality:<br><br>
+<li>Error and message logging.
+<li>Rolling log files. When log file fills, full file is closed and new file is opened.
+<li>Configurable size.
+<li>Configurable name.
+<li>Configurable location.
+<br><br><br>
+
+
+<h3>Default Logfile Settings:</h3>
+<table border=1>
+<tr><th>Setting</th><th>Default Value</th><th>Initialization Source</th></tr>
+<tr><td>Folder:</td><td>#define PROJECT_LOG_DIR</td><td>CMakelists.txt</td></tr>
+<tr><td>Name:</td><td>#define PROJECT_DFLT_LOGFILE</td><td>xbconfig.h.in</td></tr>
+<tr><td>Size:</td><td>100000</td><td>xbLog::xbLog()</td></tr>
+</table>
+
+<br><br>
+<br><br>
+
+The logfile is controlled by the main xbXBase class via the methods listed in the table below.
+To change the logfile location or name or size, use the DisableMsgLogging() and EnableMessageLogging()
+to get the updates to take effect.
+
+<br><br>
+
+
+<h3>Methods for managing the logfile</h3>
+<table border=1>
+<tr><th>Method</th><th>Description</th></tr>
+<tr><td>xbString& xbSsv::GetLogDirectory() const</td><td>Get the log file directory.</td><tr>
+<tr><td>xbString& xbSsv::GetLogFileName() const</td><td>Get the log file name.</td></tr>
+<tr><td>xbString& xbSsv::SetLogDirectory( const xbString &sLogDirectory )</td><td>Set the log file directory.</td><tr>
+<tr><td>void xbSsv::SetLogFileName( const xbString &sLogFileName )</td><td>Set the log file name.</td></tr>
+<tr><td>void xbXBase::DisableMsgLogging()</td><td>Disable message logging.</td></tr>
+<tr><td>void xbXBase::EnableMsgLogging()</td><td>Enable message logging.</td></tr>
+<tr><td>xbInt16 xbXBase::FlushLog()</td><td>Flush any buffered log file messages to disk.</td></tr>
+<tr><td>const xbXBase::xbString &GetLogFqFileName() const</td><td>Get fully qualified logfile name.</td></tr>
+<tr><td>size_t xbXBase::GetLogSize() const</td><td>Get the log file roll over size.</td></tr>
+<tr><td>xbBool xbXBase::GetLogStatus() const</td><td>Get the logging file status.</td></tr>
+<tr><td>void xbXBase::SetLogSize( size_t lSize )</td><td>Set the logfile roll over size.</td></tr>
+</table>
+
+
+<br><br>
+<h3>Example program demonstrating logfile related methods.</h3>
+
+<xmp>
+/* xb_ex_log.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+// This program demostrates how to use logging
+
+
+#include "xbase.h"
+
+using namespace xb;
+
+int main( int argCnt, char **av )
+{
+
+ #ifdef XB_LOGGING_SUPPORT
+
+ xbXBase x;
+ xbString sMsg;
+
+
+ std::cout << "Default Logfile Name is: [" << x.GetLogFqFileName().Str()
+ << "] Rollover size = [" << x.GetLogSize()
+ << "]" << std::endl;
+
+ if( x.GetLogStatus() )
+ std::cout << "Logging is active" << std::endl;
+ else
+ std::cout << "Logging is inactive" << std::endl;
+
+ x.SetLogDirectory( PROJECT_LOG_DIR ); // use the library log directory
+ x.SetLogFileName ( "MySpecialLogFile.txt" ); // set to use a special name
+ x.SetLogSize ( x.GetLogSize() * 2 ); // double the log file size
+
+ // enable the logfile and write a message for the new settings to take effect
+ x.EnableMsgLogging();
+ sMsg.Sprintf( "Program [%s] initializing...", av[0] );
+ x.WriteLogMessage( sMsg );
+
+ std::cout << "New Logfile Name is: [" << x.GetLogFqFileName().Str()
+ << "] Rollover size = [" << x.GetLogSize()
+ << "]" << std::endl;
+
+ if( x.GetLogStatus() )
+ std::cout << "Logging is active" << std::endl;
+ else
+ std::cout << "Logging is inactive" << std::endl;
+
+ // write some messages to the logfile
+ for( int i = 0; i < 5; i++ ){
+ sMsg.Sprintf( "Test message [%d]", i );
+ x.WriteLogMessage( sMsg );
+ }
+
+ sMsg.Sprintf( "Program [%s] terminating..", av[0] );
+ x.WriteLogMessage( sMsg );
+
+ x.FlushLog(); // not really needed, but here for demonstration purposes
+
+ #endif // B_LOGGING_SUPPORT
+
+ return 0;
+}
+
+</xmp>
+
+
+<br><br>
+<hr>
+<p><img src="xbase.jpg"><br><hr>
+</BODY>
+</HTML>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/html/xbc12.html b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbc12.html
new file mode 100755
index 0000000..29d6dc1
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbc12.html
@@ -0,0 +1,279 @@
+<!DOCTYPE HTML PUBLIC>
+<HTML>
+<TITLE>Xbase DBMS Chapter 12</TITLE>
+<BODY BGCOLOR=#FFFFFF>
+<H2><p align="center">Dates</p></H2>
+<p align="center">Chapter Updated 04/28/23</p><hr>
+
+<br><br>
+
+<h3>Class xbDate methods</h3>
+<table border=1>
+<tr><th>Method</th><th>Description</th></tr>
+
+
+<tr><td>xbDate()<br>xbDate( const char * Date8 )<br>xbDate( const xbString &Date8 )<br>xbDate( xbInt32 lJulDate )</td><td>xbDate constructor.</td></tr>
+<tr><td>xbDate( xbUInt16 iInit )</td><td>Special xbDate constructor, called to initialize static variables and/or set to Sysdate</td></tr>
+
+<tr><td>void operator=( const xbDate &d )</td><td>Set a date equal to another date.</td></tr>
+<tr><td>void operator+=( xbInt32 i )</td><td>Increment a date.</td><tr>
+<tr><td>void operator-=( xbInt32 i )</td><td>Decrement a date.</td><tr>
+<tr><td>void operator++( xbInt32 i )</td><td>Increment a date.</td><tr>
+<tr><td>void operator--( xbInt32 i )</td><td>Decrement a date.</td><tr>
+
+<tr><td>xbInt32 operator-( const xbDate & ) const</td><td>Determine the number of days between two dates.</td><tr>
+<tr><td>const char * operator-( xbInt32 i )</td><td>Subtract <em>i</em> days from a date.</td><tr>
+<tr><td>const char * operator+( xbInt32 i )</td><td>Add <em>i</em> days to a date.</td><tr>
+
+<tr><td>xbBool operator==( const xbDate & ) const</td><td>Compare for equal dates.</td><tr>
+<tr><td>xbBool operator!=( const xbDate & ) const</td><td>Compare for not equal dates.</td><tr>
+<tr><td>xbBool operator< ( const xbDate & ) const</td><td>Compare for less than date.</td><tr>
+<tr><td>xbBool operator> ( const xbDate & ) const</td><td>Compare for greater than date.</td><tr>
+<tr><td>xbBool operator<=( const xbDate & ) const</td><td>Compare for less than or euql to date.</td><tr>
+<tr><td>xbBool operator>=( const xbDate & ) const</td><td>Compare for greater than or equal to date.</td><tr>
+
+
+<tr><td>xbInt16 CalcRollingCenturyForYear( xbInt16 year ) const</td><td>Calculate century for a give 2 digit year. Uses 80/20 method.</td><tr>
+<tr><td>xbInt16 CenturyOf() const</td><td>Return century of the date.</td><tr>
+<tr><td>xbInt16 CharDayOf( xbString &sOutCharDay )</td><td>Retrieve the character day.</td><tr>
+<tr><td>xbInt16 CharMonthOf( xbString &sOutCharMonth )</td><td>Retrive the character month.</td><tr>
+<tr><td>xbBool DateIsValid ( const xbString &sDate8 ) const;</td><td>Check if a given date is valid.</td><tr>
+<tr><td>xbInt16 DayOf( xbInt16 iFormat ) const</td><td>Return Day of week, month or year depending on the option.</td><tr>
+<tr><td>xbInt16 CTOD( const xbString &sCtodInDate )</td><td>Sets the date from input date in format MM/DD/YY</td><tr>
+<tr><td>xbInt16 FormatDate( const xbString &sFmtIn, xbString &sFmtOut )</td><td>Create a formatted date string based on input format.</td><tr>
+<tr><td>const char *Str() const</td><td>Return a pointer the date value.</td><tr>
+<tr><td>xbBool IsLeapYear( xbInt16 iYear ) const<br>IsLeapYear() const</td><td>Returns true if leap year, otherwise returns false.</td><tr>
+<tr><td>xbBool IsNull() const</td><td>Returns xbTrue is the date is null, else returns false.</td><tr>
+<tr><td>xbInt32 JulianDays() const</td><td>Return the Julian days value.</td><tr>
+<tr><td>xbInt16 JulToDate8( xbInt32 lJulDate )</td><td>Convert a Julian date to xbDate value.</td><tr>
+<tr><td>xbInt16 LastDayOfMonth()</td><td>Calculate the last day of a month for the given teat and month.</td><tr>
+<tr><td>xbInt16 MonthOf() const</td><td>Return the numeric month of the date.</td><tr>
+<tr><td>xbInt16 Set( const xbString &Date8 )</td><td>Set the date to valid input date.</td><tr>
+<tr><td>xbInt16 Sysdate()</td><td>Set the date to the system date.</td><tr>
+<tr><td>xbInt16 YearOf() const</td><td>Return the numeric year of the date.</td><tr>
+
+</table>
+
+<br><br><hr><br><br>
+<h2>Example program using xbDate class</h2>
+
+<xmp>
+/* xb_ex_date.cpp
+
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2021,2022 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+This program demonstrates using the xbDate class
+
+*/
+
+
+#include "xbase.h"
+
+using namespace xb;
+
+int main()
+{
+
+ xbXBase x; /* initial date static variables */
+
+ xbString StringDate( "19601007" ); /* oct 7 1960 */
+ char CharDate[9] = "19611109"; /* nov 9 1961 */
+
+ xbDate d1; /* today is default */
+ xbDate d2( StringDate ); /* from string data */
+ xbDate d3( CharDate ); /* from char data */
+ xbDate d4; /* another date class */
+ xbString s;
+
+ std::cout << "This program demonstrates usage of the xbDate class" << std::endl;
+ std::cout << "Date 1 (Sysdate) is " << d1.Str() << std::endl;
+ std::cout << "Date 2 (StringDate) is " << d2.Str() << std::endl;
+ std::cout << "Date 3 (CharDate) is " << d3.Str() << std::endl;
+
+ std::cout << "This year is " << d1.YearOf() << std::endl;
+ std::cout << "Year of xbString Date is " << d2.YearOf()
+ << std::endl;
+ std::cout << "Year of char Date is " << d3.YearOf()
+ << std::endl;
+
+ std::cout << "This Month is " << d1.MonthOf() << std::endl;
+ std::cout << "Month of xbString Date is " << d2.MonthOf()
+ << std::endl;
+ std::cout << "Month of char Date is " << d3.MonthOf()
+ << std::endl;
+
+ std::cout << "Today is day " << d1.DayOf( XB_FMT_WEEK ) << " of the week" << std::endl;
+ std::cout << "StringDate is day " << d2.DayOf( XB_FMT_MONTH ) << " of the month" << std::endl;
+ std::cout << "CharDate is day " << d3.DayOf( XB_FMT_YEAR ) << " of the year" << std::endl;
+
+ if( d1.IsLeapYear())
+ std::cout << "This is a leap year" << std::endl;
+ else
+ std::cout << "This is not a leap year." << std::endl;
+
+ if( d2.IsLeapYear())
+ std::cout << "StringDate is a leap year" << std::endl;
+ else
+ std::cout << "StringDate is not a leap year." << std::endl;
+
+ if( d3.IsLeapYear())
+ std::cout << "CharDate is a leap year" << std::endl;
+ else
+ std::cout << "CharDate is not a leap year." << std::endl;
+
+ std::cout << "Today is " << d1.Sysdate() << std::endl;
+
+ if( d1.DateIsValid( "19951301" ))
+ std::cout << "19951301 is a valid date" << std::endl;
+ else
+ std::cout << "19951301 is not a valid date" << std::endl;
+
+ if( d1.DateIsValid( "19920229" ))
+ std::cout << "19920229 is a valid date" << std::endl;
+ else
+ std::cout << "19920229 is not a valid date" << std::endl;
+
+ if( d2.DateIsValid( StringDate ))
+ std::cout << StringDate.Str() << " is a valid date" << std::endl;
+ else
+ std::cout << StringDate.Str() << " is not a valid date" << std::endl;
+
+ std::cout << "Today's Julian date " << d1.JulianDays() << std::endl;
+ std::cout << "Julian date of Jan 01, 1970 " << d2.JulianDays() << std::endl;
+ std::cout << "StringDate Julian date " << d2.JulianDays() << std::endl;
+
+ std::cout << "There are " << (d1.JulianDays() - d2.JulianDays()) << " days between " << d1.Str() << " and " << d2.Str() << std::endl;
+
+ std::cout << "Todays Julian date (Number of days since Jan 1 0100):" << d1.JulianDays() << std::endl;
+
+ d4 = d1; // set d4 class = to sysdate
+ std::cout << "Object d4 initialized to " << d4.Str() << std::endl;
+ std::cout << "This should be todays date: "
+ << d4.JulToDate8(d4.JulianDays()) << std::endl;
+ std::cout << "In 7 days it will be "
+ << d4.JulToDate8(d4.JulianDays() + 7L ) << std::endl;
+
+ d1.CharDayOf( s );
+ std::cout << "Today is " << s.Str() << std::endl;
+
+ d2.CharDayOf( s );
+ std::cout << "StringDate day is " << s.Str() << std::endl;
+ d1.CharMonthOf( s );
+ std::cout << "This month is " << s.Str() << std::endl;
+ d2.CharMonthOf( s );
+ std::cout << "StringDate month is " << s.Str() << std::endl;
+
+
+ /* various format routines using different formats, strings and chars */
+ xbString sOutDate;
+
+ d1.FormatDate( "YYDDD", sOutDate );
+ std::cout << "Format (YYDDD) = " << sOutDate.Str() << std::endl;
+
+ d1.FormatDate( "MM/DD/YY", sOutDate );
+ std::cout << "Format (MM/DD/YY) = " << sOutDate.Str() << std::endl;
+
+ d1.FormatDate( "YY-MM-DD", sOutDate );
+ std::cout << "Format (YY-MM-DD) = " << sOutDate.Str() << std::endl;
+
+ d1.FormatDate( "DDDDDDDDD, MMMMMMMMMM DD YYYY", sOutDate );
+ std::cout << "Format (DDDDDDDDD, MMMMMMMMMM DD YYYY) = " << sOutDate.Str() << std::endl;
+
+ std::cout << "Last day this month " << d1.LastDayOfMonth() << std::endl;
+ std::cout << "Last day of month for StringDate is " << d2.LastDayOfMonth() << std::endl;
+
+ std::cout << "Overloaded operators test..." << std::endl;
+
+ if( d1 == d2 )
+ std::cout << d1.Str() << " is equal to " << d2.Str()
+ << std::endl;
+ else
+ std::cout << d1.Str() << " is not equal to " << d2.Str()
+ << std::endl;
+
+ if( d1 != d3 )
+ std::cout << d1.Str() << " is not equal to " << d3.Str()
+ << std::endl;
+ else
+ std::cout << d1.Str() << " is equal to " << d3.Str()
+ << std::endl;
+
+ if( d1 < d2 )
+ std::cout << d1.Str() << " is less than " << d2.Str()
+ << std::endl;
+ else
+ std::cout << d1.Str() << " is not less than " << d2.Str()
+ << std::endl;
+
+ if( d1 > d2 )
+ std::cout << d1.Str() << " is greater than " << d2.Str()
+ << std::endl;
+ else
+ std::cout << d1.Str() << " is not greater than " << d2.Str()
+ << std::endl;
+
+ if( d1 <= d2 )
+ std::cout << d1.Str() << " is less than or equal to " << d2.Str()
+ << std::endl;
+ else
+ std::cout << d1.Str() << " is not less than or equal to "
+ << d2.Str() << std::endl;
+
+ if( d1 >= d2 )
+ std::cout << d1.Str() << " is greater than or equal to "
+ << d2.Str() << std::endl;
+ else
+ std::cout << d1.Str() << " is not greater than or equal to "
+ << d2.Str() << std::endl;
+
+ d1.Sysdate();
+ d1++;
+ std::cout << "Tomorrow is " << d1.Str() << std::endl;
+ d1-=2;
+ std::cout << "Yesterday was " << d1.Str() << std::endl;
+ std::cout << "There are " << d1 - d2 << " days between " << d1.Str()
+ << " and " << d2.Str() << std::endl;
+
+ d1="20140701";
+ std::cout << "Operator = example " << d1.Str() << std::endl;
+
+ d1+=5;
+ std::cout << "Operator += 5 example " << d1.Str() << std::endl;
+
+ d1--;
+ std::cout << "Operator -- example " << d1.Str() << std::endl;
+
+ d1-4;
+ std::cout << "Operator -4 example " << d1.Str() << std::endl;
+
+ d1+10;
+ std::cout << "Operator +10 example " << d1.Str() << std::endl;
+ std::cout << "CenturyOf() " << d1.CenturyOf() << std::endl;
+
+ xbString sWorkDate;
+ d1.CTOD( "10/07/60" );
+ std::cout << "CTOD( '10/07/60' ) " << d1.Str() << std::endl;
+
+ d1.Set( "19590118" );
+ std::cout << "Set( '19590118' ) " << d1.Str() << std::endl;
+
+ std::cout << "CalcRollingCenturyForYear( 95 ) = " << d1.CalcRollingCenturyForYear( 95 ) << std::endl;
+ return 0;
+}
+</xmp>
+
+<br><br>
+<hr>
+<p><img src="xbase.jpg"><br><hr>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/html/xbc2.html b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbc2.html
new file mode 100755
index 0000000..71d4585
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbc2.html
@@ -0,0 +1,368 @@
+<!DOCTYPE HTML PUBLIC>
+<HTML>
+<TITLE>Xbase DBMS Chapter 2</TITLE>
+<BODY BGCOLOR=#FFFFFF>
+<H2><p align="center">System Overview</p></H2>
+<p align="center">Chapter Updated 04/28/23</p><hr>
+
+<br><br>
+The <em>XBase64</em> library is a cross platform object oriented C++ set of classes for
+accessing and manipulating the following Xbase file types:<br><br>
+
+
+<table border=1>
+<tr><th>Extension</th><th>Description</th><th>Supported by Xbase64 library?</th></tr>
+<tr><td>*.DBF</td><td>Main DBF file or table name</td><td><center>Y</center></td></tr>
+<tr><td>*.DBT</td><td>Verson 3 or Version 4 memo file</td><td><center>Y</center></td></tr>
+<tr><td>*.NDX</td><td>Single tag index file</td><td><center>Y</center></td></tr>
+<tr><td>*.MDX</td><td>Multi tag index file</td><td><center>Y</center></td></tr>
+<tr><td>*.INF</td><td>ODBC file used for auto open of NDX files</td><td><center>Y</center></td></tr>
+<tr><td>*.NTX</td><td>Clipper indexfile </td><td><center>Future</center></td></tr>
+<tr><td>*.CDX</td><td>Fox Pro indexfile </td><td><center>Future</center></td></tr>
+<tr><td>*.IDX</td><td>Fox Pro index file</td><td><center>Future</center></td></tr>
+</table>
+
+
+
+
+<br><br>
+
+DBF files are comprised of a variable length header record which stores
+information about the file and describes he fixed length record format,
+followed by a series of fixed length data records.
+<br><br>
+
+Each fixed length data record is preceded by a one byte indicator
+which identifies if the record has been deleted. If the record is
+not deleted, the indicator is a space (0x20). If deleted, the
+indicator contains an asterisk (0x2A). Data fields are stored in records
+without field separators or record terminators.<br><br>
+
+In earlier releases of dBASE, there is an ASCII NULL character
+between the $0D end of header indicator and the start of the data.
+This NULL was removed starting with dBASE III Plus, making a Plus
+header one byte shorter than an identically structured III file.
+The methods documented in the Xbase software and documentation follow
+the more recent version where the NULL character is not included.
+<br><br>
+
+Each database file is comprised of zero, one or many records. A record is
+comprised of fields. Only one record is accessed at a time.<br><br>
+
+Zero, one or many database files can be open simultaneously.<br><br>
+
+<hr>
+
+<h3>The Record Buffer</h3>
+
+When using the Xbase routines, each open data file has a record buffer
+which is manipulated by calling the database, index and field routines.
+<br><br>
+
+If <i>AutoCommit</i> is turned on (Default), updates are committed from
+the record buffer to the database when a write, or append is performed.
+The library automatically writes updates to the database if the buffer has
+been updated and the record is repositioned or the database is closed.
+<br><br>
+
+If <i>AutoCommit</i> is turned off, updates will need to be explicity
+committed to the database file with one of <i>dbf->Put(), dbf->Append()
+or dbf->Commit()</i> command depending on context..
+Updates can be cancelled with the <i>Abort()</i> command.
+<br><br>
+The record buffer is not used for handling the actual data portion of
+memo fields. When working with memo fields, the application program must
+allocate enough buffer space for reading and writing memo fields or use
+the xbString class for handling memo data.<br><br>
+
+Internal to the library, there is an additional record buffer which
+stores the original value of the data record before any changes are made.
+This is used by the index routines for finding and deleting original key
+values from any open indices before adding the new keys. If the key values
+are not changed, no index updates occur. Additionally, calling the Abort()
+method will back out any updates to the record buffer.
+
+
+<br><br>
+<hr>
+<br>
+<h3>Xbase Database File Header - DBF Version III and Version IV</h3>
+
+The Xbase file header, located at the beginning of the database, describes
+the .DBF database. Knowledge of this structure is not necessary to
+effectively utilize the Xbase64 libraries.<br><br><br>
+
+<TABLE BORDER>
+<TR valign="BASELINE">
+<TR><TH ALIGN="LEFT">Position<TD>Length<TD>Description
+<TR><TH ALIGN="LEFT">0<TD>1 byte<TD>file version number<br>
+ (03H without a .DBT file)<br>
+ (83H with a .DBT file)
+<TR><TH ALIGN="LEFT">1-3<TD>3 bytes<TD>date of last update<br>
+ (YY MM DD) in binary format
+<TR><TH ALIGN="LEFT">4-7<TD>32 bit number<TD>number of records in data file
+<TR><TH ALIGN="LEFT">8-9<TD>16 bit number<TD>length of header structure
+<TR><TH ALIGN="LEFT">10-11<TD>16 bit number<TD>length of the record
+<TR><TH ALIGN="LEFT">12-31<TD>20 bytes<TD>reserved
+<TR><TH ALIGN="LEFT">32-n<TD>32 bytes each<TD>field descriptor record (see below)
+<TR><TH ALIGN="LEFT">n+1<TD>1 byte<TD>0DH as the field terminator
+</TABLE>
+<BR><BR>
+
+<hr>
+<br>
+<h3>Xbase Field Descriptor Record</h3>
+The Xbase field descriptor record stores information about each field in the
+database. Each database has from 1 to 1024 fields.
+Knowledge of this structure is not necessary to
+effectively utilize the Xbase libraries.<br><br><br>
+
+<TABLE BORDER>
+<TR VALIGN="BASELIGN">
+<TR><TH ALIGN="LEFT">Position<TD>Length<TD>Description
+<TR><TH ALIGN="LEFT">0-10<TD>11 bytes<TD>field name in ASCII zero-filled
+<TR><TH ALIGN="LEFT">11<TD>1 byte<TD>field type in ASCII (C N L D or M)
+<TR><TH ALIGN="LEFT">12-15<TD>32 bit number<TD>field data address
+<TR><TH ALIGN="LEFT">16<TD>1 byte<TD>field length in binary
+<TR><TH ALIGN="LEFT">17<TD>1 byte<TD>field decimal count in binary
+<TR><TH ALIGN="LEFT">18-31<TD>14 bytes<TD>reserved bytes (version 1.00)
+</TABLE>
+<BR><BR>
+<hr>
+<br>
+<h3>Field Data Format</h3>
+Data are stored in ASCII format in the database as follows:<br><br>
+<TABLE BORDER>
+<TR VALIGN="BASELIGN">
+<TR><TH ALIGN="LEFT">DATA TYPE<TD>DATA RECORD STORAGE
+<TR><TH ALIGN="LEFT">Character<TD>ASCII characters, left justified, right blank filled
+<TR><TH ALIGN="LEFT">Date<TD>(8 digits in YYYYMMDD format, such as<BR>
+ 19601007 for October 7, 1960)
+<TR><TH ALIGN="LEFT">Logical<TD>? Y y N n T t F f (? when not initialized)
+<TR><TH ALIGN="LEFT">Memo<TD>10 digits representing a .DBT block number
+<TR><TH ALIGN="LEFT">Numeric<TD>. 0 1 2 3 4 5 6 7 8 9 + -, right justified, left blank filled
+<TR><TH ALIGN="LEFT">Float (Version IV only)<TD>. 0 1 2 3 4 5 6 7 8 9 + -, right justified, left blank filled
+</TABLE>
+<BR><BR>
+
+<hr>
+<h3>Memo Fields</h3>
+
+Memo fields store variable length data elements in a seperate .DBT file.
+The main .DBF file maintains a ten byte field which is used by the Xbase
+routines for determining the location of the data in the .DBT file.
+<br><br>
+
+Xbase DBMS supports both dBASE III+ and dBASE IV version memo files.
+The version IV files are somewhat more efficient in that they reuse
+unused memo space when data are deleted or freed from use. With version
+III files, all new updates are appended to the end of the file and the
+unused space is not reclaimed until the datafiles are packed.
+<br><br>
+
+Memo fields can be used for storing a variety of date type. However,
+type 3 files are limited to storing textual data because most internal
+memo field processing in a type 3 file relies on two contiguous 0x1a
+charaters. <br><br>
+
+Type 4 memo fields can be used for storing BLOB (binary large object)
+data reliably, as the internal file structure does not rely on any
+special characters embedded in the data.<br><br>
+
+
+<h3>Technical memo file information</h3>
+
+The following info on memo fields is for the curious.
+It is not required
+reading if you don't need to know the internals.<br><br>
+
+<li>Memo files are made up of one or more blocks
+<li>For version III files, the block size is 512
+<li>For version IV files, the block size is a multiple of 512
+<li>The minimum amout of space necessary to store one memo field is
+one block or 512 bytes.
+<li>The default block size can be adjusted by manipulating the
+XB_DBT_BLOCK_SIZE macro in the options.h file.
+
+
+<li>The main .DBF file maintains a ten byte numeric field which is blank if
+no memo data exists for a given field. Otherwise it contains a number, which
+when multiplied by the block size, points to the offset in the file of the head
+block in the file/
+<br><br>
+
+For version 3 memo field files, there are two fields in the head block of
+the file, <em>NextBlockNo</em> and <em>Version</em>. Depending on the
+Xbase software, some vendors products update these two fields, some do not.
+The Xbase library keeps the fields updated, but does not rely on them to
+be valued with correct data. This helps to support maximum compatibility
+amoungst all Xbase tools available.<br><br>
+
+For version 4 memo field files,
+the first block in the .DBT file is a header block which is comprised of
+8 bytes of data which maintain the file's block size and the next free
+block available in the file. Blocks two through n contain the actual
+memo data. A chain of empty blocks is maintained within the file for
+potential future use. When an add or update routine executes, it first
+attempts to find a spot in a set of blocks which were earlier allocated,
+but not currently in use for the data. If no free spot is found, data are
+appended to the end of the file.
+
+The free block chain is sorted in block number order. When blocks of
+data are freed and added to the free block chain, the routines will attempt
+to concatonate free block chains togethor where possible. When a delete
+occurs, or an update which requires less space occurs, the new free space
+is added to the free block chain.
+
+<br><br>
+
+<h3>Various Memo File Block Types</h3>
+
+<TABLE BORDER>
+<TR VALIGN="BASELIGN">
+<TR><TH ALIGN="LEFT">Valid Block Types
+<TR><TH ALIGN="LEFT">Head Block
+<TR><TH ALIGN="LEFT">Only data block for memo field
+<TR><TH ALIGN="LEFT">First of several contiguous data block set
+<TR><TH ALIGN="LEFT">2-n of contiguous data block set
+<TR><TH ALIGN="LEFT">Only data block in free chain (version IV only)
+<TR><TH ALIGN="LEFT">First of several contiguous free block set (version IV only)
+<TR><TH ALIGN="LEFT">2-n of contiguous free block set (type 4 only)
+</TABLE>
+<BR><BR>
+
+<h3>Head Block Structure</h3>
+<TABLE BORDER>
+<TR VALIGN="BASELIGN">
+<TR><TH ALIGN="LEFT">1-4<TD>LONG<TD>Next Block ID
+<TR><TH ALIGN="LEFT">5-8<TD>LONG<TD>Not used all 0x00's
+<TR><TH ALIGN="LEFT">9-16<TD>CHAR(8)<TD>Filename (Version IV Only)
+<TR><TH ALIGN="LEFT">17<TD>CHAR<TD>Version (0x03 = Version III, 0x00 = Version IV)
+<TR><TH ALIGN="LEFT">18-20<TD>CHAR(3)<TD>Not used all 0x00's
+<TR><TH ALIGN="LEFT">21-22<TD>SHORT<TD>Block Size (Version IV only )
+<TR><TH ALIGN="LEFT">23-Remainder of block<TD>CHAR<TD>Not used
+</TABLE>
+<BR><BR>
+
+
+<h3>Version IV Head Data Block Structure</h3>
+<TABLE BORDER>
+<TR VALIGN="BASELIGN">
+<TR><TH ALIGN="LEFT">xbShort<TD>0-1<TD>-1
+<TR><TH ALIGN="LEFT">xbShort<TD>2-3<TD>Starting position of data (always 8 ?)
+<TR><TH ALIGN="LEFT">xbLong<TD>4-7<TD>Length of data includes first 8 bytes
+<TR><TH ALIGN="LEFT">char (9) - Blocksize<TD>8-15<TD>Data
+</TABLE>
+<BR><BR>
+
+<h3>Version IV Head Free Block Structure</h3>
+<TABLE BORDER>
+<TR VALIGN="BASELIGN">
+<TR><TH ALIGN="LEFT">xbLong<TD>0-3<TD>Next free block in the free block chain
+<TR><TH ALIGN="LEFT">xbLong<TD>4-7<TD>Number of free blocks in this contiguous free
+ block set
+</table>
+<br><br>
+Version 3 and 4 memo fields are terminated with two contiguous 0x1A bytes of data.
+<br><br>
+<hr>
+
+
+<h3>Block Reads</h3>
+
+As of release 4.1.1, the Xbase library includes functionality for reading a DBF file in blocks, rather than one record at a time.<br><br>
+
+This functionality can be used to improve application performance in situations where a data file is being read sequentially.
+For situations where records are retrieved randomly from the file, enabling this probably won't help much. In short, this
+can be turned on when accessing a file sequentially and should be left off when not processing sequentially.<br><br>
+
+The logic is handled internally within the library, all that is needed is to
+enable it and the library handles the rest. Additionally, the block read functionality
+was designed with for sequential file access and is designed with reporting in mind.
+It doesn't currently have any auto locking associated with it.
+<br><br>
+
+To enable and disable Block Reading for a DBF file, use
+<em>xbDbf::EnableBlockReadProcessing()</em>
+and <em>xbDbf::DisableBlockReadProcessing()</em>.
+<br><br>
+
+<hr>
+<h3>Locking Overview</h3>
+
+Xbase64 supports multi-user processing through file and record locks.
+Record locking restricts multiple cooperating programs from simultaneously
+accessing the same data and corrupting it. Without record and file locking
+in a multi-user environment, simultaneous access to the data and index files
+can cause the files to become inaccurate and unusable.<br><br>
+
+Automatic record locking is on by default in the Xbase64 library. To disable it,
+use method xbXBase::DisableDefaultAutoLock() and to enable it, use method xbXBase::EnableDefaultAutoLock().
+<br><br>
+Locking can also be enabled / disabled at the table level with with xbDbf::SetAutoLock().<br><br>
+If autolocking is disabled and the code base is being used in a multi user environment, it is
+up to the application program to verify the needed locks are set as there is no checking or
+setting any locks if autolocking is turned off. It is only safe to turn off the autolocking functionality
+if the library is being used in a single user environment.
+
+<br><br>
+The current Xbase64 record locking logic is modeled after DBase (tm) V7 locking.
+<br><br>
+
+The locking methods return either XB_LOCK_FAILED or XB_NO_ERROR. If they return
+XB_LOCK_FAILED the actual reason can be found in the global variable
+<em>errno</em> or function <em>perror()</em> can be executed to view the
+results.
+<br><br>
+
+The errno field may contain one of the following values if the lock was not
+successful.<br><br>
+<TABLE BORDER>
+<TR VALIGN="BASELINE">
+<TR><TH ALIGN="LEFT">Error Code<TD>Description
+<TR><TH ALIGN="LEFT">EBADF<TD>Invalid file descriptor
+<TR><TH ALIGN="LEFT">EINVAL<TD>Invalid lock information or file does not support locks
+<TR><TH ALIGN="LEFT">EACCESS<BR>EAGAIN<TD>Lock can not be set because it is blocked by an existing lock on the file.
+<TR><TH ALIGN="LEFT">ENOLCK<TD>The system is out of lock resources, too many file locks in place.
+<TR><TH ALIGN="LEFT">EDEADLK<TD>Deadlock condition
+<TR><TH ALIGN="LEFT">EINTR<TD>Process was interrupted by a signal while it was waiting
+</TABLE>
+<br><br>
+
+<h3>Linux/Windows File Locking Compatibility Issue</h3>
+
+There is a compatibility locking issue to be aware of. Windows environments allow for the exclusive
+opening of file handles and Linux/Unix platforms do not. If you are writing an application that will be
+using a tool like Dbase on a Windows machine, accessing a file on a Linux/Samba configure machine,
+be aware that the file could be opened in exclusive mode by DBase on the Windows system, and the same file could
+be simultaneously opened with a program on the Unix box. That could cause some issues.
+
+<br><br>
+In Unix, a program can not lock a file so another process can not access it.<br>
+In Windows, a program can lock a file so another process can not access it.<br>
+DBase(tm) supports routines to open files exclusively, preventing other users from opening a file.<br>
+Locking on the Mac/Apple platform only works on NFS shares. It does not work with SMB shares.
+
+<br><h3>Samba settings</h3>
+
+If you will be using Samba on Linux/Unix and sharing files between Linux and Windows machines,
+you will need to disable oplocks. In the smb.conf file, set:<br>
+<br>
+[sharename]<br>
+oplocks = False<br>
+level2 oplocks = False
+
+
+<br><h3>iLockFlavor</h3>
+
+The library was constructed in a manner so that it could be updated to support alternate lock "flavors".
+The 4.x.x library is built to mirror the DBase locking, but the structure is in place to expand to other locking
+types if needed.
+
+
+<br><br>
+<hr>
+<p><img src="xbase.jpg"><hr>
+</BODY>
+</HTML>
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/html/xbc3.html b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbc3.html
new file mode 100755
index 0000000..866850f
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbc3.html
@@ -0,0 +1,103 @@
+<!DOCTYPE HTML PUBLIC>
+<HTML>
+<TITLE>Xbase DBMS Chapter 3</TITLE>
+<BODY BGCOLOR=#FFFFFF>
+<H1><p align="center">Fields, Strings and Dates</p></H1>
+<p align="center">Chapter Updated 04/28/23</p><hr>
+
+<br><br>
+The main objective of this chapter is to provide basic information regarding
+various field types supported by the library.<br><br>
+
+Field names can be up to ten bytes in length and can contain characters, numbers
+or special characters in the name. The field methods are used to manipulate
+the data in a record of a data file. There are several types of fields.<br><br>
+
+<TABLE BORDER>
+<CAPTION ALIGN="TOP"><h3>Field Types</H3></CAPTION>
+<TR VALIGN="BASELINE">
+<TR><TH ALIGN="LEFT">Type<TD>Size<TD>Allowable Values<TD>Schema Value
+<TR><TH ALIGN="LEFT">Numeric<TD>0 - 17(include sign and decimal point<TD>+ - . 0 through 9<TD>XB_NUMERIC_FLD
+<TR><TH ALIGN="LEFT">Character<TD>0 - 254<TD>Anything<TD>XB_CHAR_FLD
+<TR><TH ALIGN="LEFT">Date<TD>8<TD>CCYYMMDD<TD>XB_DATE_FLD
+<TR><TH ALIGN="LEFT">Floating Point<TD>0 - 17 (includes sign and decimal point<TD>+ - . 0 through 9<TD>XB_FLOAT_FLD
+<TR><TH ALIGN="LEFT">Logical<TD>1<TD>? Y y N n T t F f (? - uninitialized)<TD>XB_LOGICAL_FLD
+<TR><TH ALIGN="LEFT">Memo<TD>Fixed length portion - 10<br>Variable length 0 - 32760
+<TD>Type III - Text<br>Type IV - Anything<TD>XB_MEMO_FLD
+</TABLE>
+
+<br><br>
+Field names, types and lengths are defined when a data file is created.
+After the file is created, the field characteristics can not be changed. To
+change field characteristics, a new database table must be defined with the new
+field requirements.<br><br>
+
+<h3>Memo Fields</h3>
+
+Memo fields are variable length data fields which are stored in two parts.
+This first part is a ten byte field which is stored
+in the fixed length record of the .DBF file. The variable data is stored in
+a seperate .DBT file in 512 byte blocks. The ten byte field in the fixed
+length portion of the record points to a .DBT block number.<br><br>
+
+There are two versions of memo data files type III and type IV. Type IV
+is more advanced in that released space can be reused and it also
+supports BLOB data. The type III file is older technology, does not
+support dynamic space reclamation and only supports string data.
+See method xbDbf::SetVersion for controlling which version type you are
+using.
+
+<br><br>
+To utilize memo fields, the application program must allocate a buffer
+which is large enough to handle the memo data.<br><br>
+
+<h3>Fields and Field Numbers</h3>
+
+The Xbase routines can access field data via using field names or field
+numbers. Field numbers are numbered 0-n where the first field in a datafile
+is field 0 going through the last field n. Accessing fields by number is
+slightly more efficient than accessing by name.<br><br>
+
+<h3>Strings</h3>
+
+Xbase64 includes support for a string class <em>xbString</em>.
+The xbString class interface was originally derived from the
+<em>Draft Standard C++ Library by P.J. Plauger</em> and modified.
+If you are familiar with other string classes, this one should be similar.
+Strings can be used to manage strings of character data.
+<br><br>
+
+<h3>Date Fields</h3>
+
+All dates are stored in the .DBF files as Gregorian dates with format CCYYMMDD.<br><br>
+The library date routines work with dates formated with the same CCYYMMDD format.<br><br>
+
+<h3>Null Dates</h3>
+Date fields in the database stored as eight spaces are considered null dates.<br><br>
+
+<h3>Leap Years</h3>
+
+A leap year is a year having 366 days, which can be evenly
+divisible by 4 and not by 100 or divisible by 400. There are also leap centuries.
+Leap centuries are years which are evenly divisible by 400.
+
+<h3>Julian Dates</h3>
+
+The Julian date routines calculate a Julian date as the number of days
+since 01/01/0001 with an offset of 1721425L.
+<br><br>
+
+Julian dates are useful for doing date arithmetic such as determining the
+difference between two dates or calculating a future or past date.<br><br>
+
+To determine the difference between two dates, convert both dates to a
+Julian date and subtract one from the other.<br><br>
+
+To calculate a future or past date, convert the base date to a Julian date,
+add (or subtract) the number of days necessary to (from) it and convert the
+Julian date back to a Gregorian date.<br><br>
+
+<hr>
+<p><img src="xbase.jpg"><hr>
+</BODY>
+</HTML>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/html/xbc4.html b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbc4.html
new file mode 100755
index 0000000..f8a48d9
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbc4.html
@@ -0,0 +1,208 @@
+<!DOCTYPE HTML PUBLIC>
+<html>
+<title>Xbase DBMS Chapter 4</title>
+<body bgcolor=#FFFFFF>
+<h1><p align="center">Expression Handling<br></h1>
+<p align="center">Chapter Updated 04/28/23</p><hr>
+
+<h3>Overview</h3>
+
+The main objective of this chapter is to provide information regarding the
+basic concepts of using the Xbase64 Expression module.<br><br>
+
+The Xbase64 library includes an expression parsing routine which assists
+application programmers by providing a high level data manipulation tool and
+also allows for building complex index keys.
+
+The functions included were derived from dBASE III Plus, dBASE IV and Clipper.
+<br><br>
+Expressions are primarily used for index key definitions and filter criteria, but
+can also be used for other tasks as well.
+<br><br>
+
+<h3>Internal fuctioning</h3>
+The expression module works in two phases. Firstly, method
+<em>ParseExpression</em> is called and builds an expression tree from
+all the components of the expression. The tree is made up of individual
+nodes. The expression is checked for valid field names, literals,
+operands and functions. Any field references are resolved. If fields
+are used in an expression and the database name for the field is not
+included in the name with the -> operand, the routines assume the
+associated database has been successfully opened.
+<br><br>
+Secondly, method <em>ProcessExpression</em> is called to process the
+expression tree created by ParseExpression(). The routine parses each
+node in the expression tree, executing functions, processing operands
+and manipulating data to produce the desired result.<br><br>
+
+If an expression will be processed repeatedly, it is best to pre-parse the
+tree using <em>ParseExpression</em>, then for each new call to the expression,
+execute method <em>ProcessExpression</em> which processes the tree.
+
+<h3>Expression Return Types</h3>
+Expressions will return a type of CHAR, NUMERIC, DATE or LOGICAL.<br><br>
+
+An expression return type can be determined with method <em>
+GetExpressionResultType</em> after parsing it.<br><br>
+
+Expressions returning a return type of CHAR are limited to a 200 byte internal
+buffer. There is also a 100 byte limit for NDX and MDX index key support. If
+the 200 byte limit is not large enough for your application, adjust field
+<em>enum { WorkBufMaxLen = 200 };</em> in file <em>exp.h</em>.
+
+<br><br>
+<table border=1>
+<tr><th>Return Type</th><th>XBase Type</th></tr>
+<tr><td>CHAR</td><td>xbString</td></tr>
+<tr><td>NUMERIC</td><td>xbDouble</td></tr>
+<tr><td>DATE</td><td>xbDate</td></tr>
+<tr><td>LOGICAL</td><td>xbBool</td></tr>
+</table>
+
+<br><br>
+Date routines return an xbDate result. In addition, the date value can be
+extracted using GetStringResult() which returns YYYYMMDD or GetDoubleResult()
+which returns a julian value.
+
+<br><br>
+<h3>Expression Functions</h3>
+Each expression function also has a corresponding C++ function. It is
+slightly more efficient to call the C++ functions directly, rather than
+execute the expression parsing routines.<br><br>
+
+To add a new function, find a function that is similar to what you need, copy
+the code and modify xbxbase.h, xbfuncs.cpp, xbexp.cpp and xb_test_expression.cpp.<br><br>
+
+
+<table border=1>
+<tr><th>Function Name</th><th>Return Type</th><th>Description</th></tr>
+<tr><td>ABS</td><td>N</td><td>Calculate absolute value of numeric expression</td></tr>
+<tr><td>ALLTRIM</td><td>C</td><td>Trim leading andtrailing whitespace from a string</td></tr>
+<tr><td>ASC</td><td>N</td><td>Return ASCII code for first character in a string</td></tr>
+<tr><td>AT</td><td>N</td><td>Return starting position of a string within a string</td></tr>
+<tr><td>CDOW</td><td>C</td><td>Retun character weekday name for a date</td></tr>
+<tr><td>CHR</td><td>C</td><td>Convert numeric expression to a character</td></tr>
+<tr><td>CMONTH</td><td>C</td><td>Return month name for a date</td></tr>
+<tr><td>CTOD</td><td>D</td><td>Return date from a character date input</td></tr>
+<tr><td>DATE</td><td>D</td><td>Return system date</td></tr>
+<tr><td>DAY</td><td>N</td><td>Return the day of the month from a date</td></tr>
+<tr><td>DEL</td><td>C</td><td>Return record deletion status for a record</td></tr>
+<tr><td>DELETED</td><td>L</td><td>Return record deletion status for a record<</td></tr>
+<tr><td>DESCEND</td><td>1</td><td>Clipper DESCEND function</td></tr>
+<tr><td>DOW</td><td>N</td><td>Return number of day of week</td></tr>
+<tr><td>DTOC</td><td>C</td><td>Return character date from input date</td></tr>
+<tr><td>DTOS</td><td>C</td><td>Return character CCYYMMDD date from input date</td></tr>
+<tr><td>EXP</td><td>N</td><td>Return exponent value</td></tr>
+<tr><td>IIF</td><td>C</td><td>Immediate If</td></tr>
+<tr><td>INT</td><td>N</td><td>Convert number to integer, truncate any decimals</td></tr>
+<tr><td>ISALPHA</td><td>L</td><td>Check if string begins with alpha character</td></tr>
+<tr><td>ISLOWER</td><td>L</td><td>Check if string begins with lower case alpha character</td></tr>
+<tr><td>ISUPPER</td><td>L</td><td>Check if string begins with upper case character</td></tr>
+<tr><td>LEFT</td><td>C</td><td>Return left characters from a string</td></tr>
+<tr><td>LEN</td><td>N</td><td>Return lenght of string</td></tr>
+<tr><td>LOG</td><td>N</td><td>Calculate logarithm</td></tr>
+<tr><td>LOWER</td><td>C</td><td>Convert upper case to lower case</td></tr>
+<tr><td>LTRIM</td><td>C</td><td>Trim left side of a string</td></tr>
+<tr><td>MAX</td><td>N</td><td>Return higher of two values</td></tr>
+<tr><td>MIN</td><td>N</td><td>Return lesser of two values</td></tr>
+<tr><td>MONTH</td><td>N</td><td>Return number of month for a given date</td></tr>
+<tr><td>RECNO</td><td>N</td><td>Return current rec number for a given table</td></tr>
+<tr><td>RECCOUNT</td><td>N</td><td>Return number of records in a given table</td></tr>
+<tr><td>REPLICATE</td><td>C</td><td>Repeat character expression N times</td></tr>
+<tr><td>RIGHT</td><td>C</td><td>Return right characters from as tring</td></tr>
+<tr><td>RTRIM</td><td>C</td><td>Trim right side of string</td></tr>
+<tr><td>SPACE</td><td>C</td><td>Generate a string of N spaces</td></tr>
+<tr><td>SQRT</td><td>N</td><td>Calculate square root</td></tr>
+<tr><td>STOD</td><td>D</td><td>Convert 8 byte CCYYMMDD date to date</td></tr>
+<tr><td>STR</td><td>C</td><td>Convert number to character string</td></tr>
+<tr><td>STRZERO</td><td>C</td><td>Convert number to character string with leading zeroes. Clipper Function.</td></tr>
+<tr><td>SUBSTR</td><td>C</td><td>Extract portion oif one string from another string</td></tr>
+<tr><td>TRIM</td><td>C</td><td>Trim left and right sides of a string</td></tr>
+<tr><td>UPPER</td><td>C</td><td>Conver lower case to upper case</td></tr>
+<tr><td>VAL</td><td>N</td><td>Convert numeric characters to number</td></tr>
+<tr><td>YEAR</td><td>N</td><td>Return year for a given date</td></tr>
+</table>
+
+<br><br>
+<h3>Expression Components</h3>
+Expressions are made up of one or more tokens. A token is one of literal,
+database field, operand or function. Literals are either numeric or character.
+Character literals are enclosed in 'single' or "double" quotes. numeric
+literals are a series of one or more contiguous numerals, ".", "+" or "-'".
+<br><br>
+A field is simply a field name in the default database, or is in the form
+of database->fieldname.
+
+
+<br><br>
+<h3>Expression Literals</h3>
+
+<table border=1>
+<tr><th>Type</th><th>Example</th></tr>
+<tr><td>CHAR</td><td>"literal" or 'literal'</td></tr>
+<tr><td>NUMERIC</td><td>+99999.99</td></tr>
+<tr><td>DATE</td><td>{10/07/60} or {02/09/1989}</td></tr>
+</table>
+
+<br><br>
+<h3>Expression Operators</h3>
+<table border=1>
+<tr><th>Type</th><th>Operator</th><th>Precedence</th><th>Result</th><th>Notes</th></tr>
+<tr><td>Parens</td><td>()</td><td>12</td></tr>
+<tr><td>Numeric Operator</td><td>+ (unary)</td><td>11</td><td>N</td></tr>
+<tr><td>Numeric Operator</td><td>- (unary)</td><td>11</td><td>N</td></tr>
+<tr><td>Numeric Operator</td><td>--X</td><td>10</td><td>N</td></tr>
+<tr><td>Numeric Operator</td><td>++X</td><td>10</td><td>N</td></tr>
+<tr><td>Numeric Operator</td><td>**</td><td>9</td><td>N</td></tr>
+<tr><td>Numeric Operator</td><td>^</td><td>9</td><td>N</td></tr>
+<tr><td>Numeric Operator</td><td>%</td><td>8</td><td>N</td></tr>
+<tr><td>Numeric Operator</td><td>*</td><td>8</td><td>N</td></tr>
+<tr><td>Numeric Operator</td><td>/</td><td>8</td><td>N</td></tr>
+<tr><td>Numeric Operator</td><td>+ Addition</td><td>7</td><td>N</td></tr>
+<tr><td>Numeric Operator</td><td>- Subtraction</td><td>7</td><td>N</td></tr>
+<tr><td>Numeric Operator</td><td>X--</td><td>6</td><td>N</td></tr>
+<tr><td>Numeric Operator</td><td>X++</td><td>6</td><td>N</td></tr>
+<tr></tr>
+<tr><td>String Operator</td><td>+</td><td>5</td><td>C</td><td>Concatonate 1</td></tr>
+<tr><td>String Operator</td><td>-</td><td>5</td><td>C</td><td>Concatonate 2</td></tr>
+<tr></tr>
+<tr><td>Relational Operator</td><td>=</td><td>4</td><td>L</td><td>N,C,D</td></tr>
+<tr><td>Relational Operator</td><td>#, <>, !=</td><td>4</td><td?L</td><td>N,C,D</td></tr>
+<tr><td>Relational Operator</td><td><</td><td>4</td><td>L</td><td>N,C,D</td></tr>
+<tr><td>Relational Operator</td><td>></td><td>4</td><td>L</td><td>N,C,D</td></tr>
+<tr><td>Relational Operator</td><td><=</td><td>4</td><td>L</td><td>N,C,D</td></tr>
+<tr><td>Relational Operator</td><td>>=</td><td>4</td><td>L</td><td>N,C,D</td></tr>
+<tr><td>Relational Operator</td><td>$</td><td>4</td><td>L</td><td>N,C,D</td></tr>
+<tr><td>Relational Operator</td><td>==</td><td></td><td></td><td>Clipper operator, not implemented yet</td></tr>
+<tr></tr>
+<tr><td>Logical Operator</td><td>NOT</td><td>3</td><td>L</td><td>Evaluated after all math and relational operators</td></tr>
+<tr><td>Logical Operator</td><td>.NOT.</td><td>3</td><td>L</td><td>Evaluated after all math and relational operators</td></tr>
+<tr><td>Logical Operator</td><td>AND</td><td>2</td><td>L</td><td>Evaluated after all math and relational operators</td></tr>
+<tr><td>Logical Operator</td><td>.AND.</td><td>2</td><td>L</td><td>Evaluated after all math and relational operators</td></tr>
+<tr><td>Logical Operator</td><td>OR</td><td>1</td><td>L</td><td>Evaluated after all math and relational operators</td></tr>
+<tr><td>Logical Operator</td><td>.OR.</td><td>1</td><td>L</td><td>Evaluated after all math and relational operators</td></tr>
+</table>
+
+<br><br>
+<h3>Example Expressions</h3>
+<li>CUSTOMERS->LNAME + ", " + CUSTOMERS->FNAME
+<li>LNAME + ", " + FNAME
+<li>STARTDT + 90
+<li>DATE() - 7
+<li>YEAR( TODAY() )
+<li>IIF( "A" = "N", "true result", "false result" )
+<li>IIF( "A" = "N" .OR. 2 > 1 , "true result", "false result" )
+<li>IIF( .NOT. "A" = "N", "true result", "false result" )
+<li>.NOT. DELETED()
+<br><br>
+
+
+<h3>Example program</h3>
+For an example on how to use the expression logic, see program
+<em>src/examples/xb_ex_expression.cpp</em>.
+<br><br>
+
+<hr>
+<p><img src="xbase.jpg"><br><hr>
+</BODY>
+</HTML>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/html/xbc5.html b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbc5.html
new file mode 100755
index 0000000..66b0f62
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbc5.html
@@ -0,0 +1,437 @@
+<!DOCTYPE HTML PUBLIC>
+<html>
+<title>Xbase DBMS Chapter 5</title>
+<body BGCOLOR=#FFFFFF>
+<H1><p align="center">Index Overview</p></H1>
+<p align="center">Chapter Updated 04/29/23</p><hr>
+
+The objective of this chapter is to provide information regarding
+the basic concepts of index processing for the Xbase library.<br><br>
+
+
+<h3>Overview</h3>
+
+The Xbase64 library is designed to support multiple index types simultaneously.
+Dbase, Clipper and Foxbase each had their own index formats and ultimately the
+goal is to provide support for all the legacy index file formats.
+
+<br><br>
+The 4.0.x rewrite includes the NDX and MDX formats. Earlier versions of the
+library included an NTX format which will be brought forward into the
+library rewrite at some point in the future.
+
+
+<h3>Tags</h3>
+
+Each index file contains one or more tags depending on the file type. Each tag is a sort order
+and has characteristics: Sort order (ASC or DESC), unique or not unique and some formats support filtering.
+Each open table (dbf file) has an "active tag" for database operations.
+
+<h3>Index processing design</h3>
+
+The library is construcuted to handle index files with multiple tags per file. Single tag files like the NDX indices
+are treated as a multi tag file, but there is only one tag. This allows for maximum flexibility for future
+additional index types.
+
+
+
+<h3>Index updates</h3>
+
+The library automatically updates all tags in all open index files.
+
+
+<br><br>
+<h3>Index File Types</h3>
+
+<table border=1>
+<tr><th>File<br>Type</th><th>Source</th><th>Max Tags<br>Per File</th><th>Auto Opened</th><th>Sort Order</th><th>Unique Keys</th>
+ <th>Reclaimed Nodes</th><th>Filter Support</th><th>Status</th></tr>
+<tr>
+ <td>NDX</td><td>dBase</td>
+ <td><center>1</center></td>
+ <td><center>Optional</center></td>
+ <td>ASC only</td>
+ <td><center>Y</center></td>
+ <td><center>N</center></td>
+ <td><center>N</center></td>
+ <td><center>Available in 4.0.1</center></td>
+</tr>
+<tr>
+ <td>MDX</td><td>dBase</td>
+ <td><center>47</center></td>
+ <td><center>Yes</center></td>
+ <td><center>ASC or DESC</center></td>
+ <td><center>Y</center></td>
+ <td><center>Y</center></td>
+ <td><center>Y</center></td>
+ <td><center>Available in 4.0.1</center></td>
+</tr>
+<tr>
+ <td>NTX</td>
+ <td>Clipper</td>
+ <td><center>1</center></td>
+ <td><center>Optional</center></td>
+ <td><center></center></td>
+ <td><center></center></td>
+ <td><center></center></td>
+ <td><center></center></td>
+ <td><center>Pending retrofit</center></td>
+</tr>
+<tr>
+ <td>CDX</td>
+ <td>Fox Pro</td>
+ <td><center></center></td>
+ <td><center></center></td>
+ <td><center></center></td>
+ <td><center></center></td>
+ <td><center></center></td>
+ <td><center></center></td>
+ <td><center>Pending development</center></td>
+<tr>
+<tr>
+ <td>IDX</td><td>Fox Pro</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td>Pending development</td>
+<tr>
+
+</table>
+
+<br><br>
+<h3>Index/Tag Methods</h3>
+
+
+<table border=1>
+<tr><th width=45%>Method</th><th>Description</th></tr>
+<tr>
+ <td>xbInt16 xbDbf::CheckTagIntegrity( xbInt16 iTagOpt, xbInt16 iOutputOpt )
+ </td><td>Checks a tag for missing or duplicate entries. Available if XB_DEBUG_SUPPORT is on.</td>
+</tr>
+<tr>
+ <td>xbInt16 xbDbf::CloseIndexFile( xbIx *pIx )
+ </td><td>Close an index file. Indices are automatically closed when the table is closed.
+ <br>Not typically called in an application program.</td>
+</tr>
+<tr>
+ <td>xbInt16 xbDbf::CreateTag( const xbString &sIxType, const xbString &sName, const xbString &sKey, const xbString &sFilter,
+ xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverLay, xbIx **xbIxOut, void **vpTagOut );
+ </td><td>Create a new tag.</td>
+</tr>
+<tr>
+ <td>xbInt16 xbDbf::DeleteTag( const xbString &sIxType, const xbString &sName )
+ </td><td>Delete existing tag.</td>
+</tr>
+<tr>
+ <td>xbInt16 xbDbf::Find( xbString &sKey )<br>xbInt16 xbDbf::Find( xbDate &dtKey )<br>xbInt16 xbDbf::Find( xbDouble &dKey )
+ </td><td>Find key value for the active tag.</td>
+</tr>
+<tr>
+ <td>xbIx * xbDbf::GetCurIx() const
+ </td><td>Returns a pointer to the current index object.</td>
+</tr>
+ <td>xbString & xbDbf::GetCurIxType() const
+ </td><td>Returns the current index type.</td>
+</tr>
+</tr>
+ <td>void * xbDbf::GetCurTag() const
+ </td><td>Retrieve pointer to the current active tag.</td>
+</tr>
+<tr>
+ <td>const xbString & xbDbf::GetCurTagName() const
+ </td><td>Returns the current tag name.</td>
+</tr>
+ <td>xbInt16 xbDbf::GetFirstKey()
+ </td><td>Retrieve the first key for the active tag.</td>
+</tr>
+<tr>
+ <td>xbIxList * xbDbf::GetIxList() const
+ </td><td>Returns a pointer to the list of active indices.
+</tr>
+<tr>
+ <td>xbInt16 xbDbf::GetLastKey()
+ </td><td>Retrieve the last key for the active tag.</td>
+</tr>
+<tr>
+ <td>xbInt16 xbDbf::GetNextKey()
+ </td><td>Retrieve the next key for the active tag.</td>
+</tr>
+<tr>
+ <td>xbInt32 xbDbf::GetPhysicalIxCnt() const
+ </td><td>Returns count of number of physical files opened for DBF table.</td>
+</tr>
+<tr>
+ <td>xbInt16 xbDbf::GetPrevKey()
+ </td><td>Retrieve the previous key for the active tag.</td>
+<tr>
+ <td>xbLinkListNode<xbTag *> * xbDbf::GetTagList() const
+ </td><td>Returns pointer to linked list of open tags for the DBF file/table.</td>
+</tr>
+<tr>
+ <td>xbInt16 xbDbf::OpenIndex( const xbString &sIxType, const xbString &sIndexName )
+ </td><td>Open an index file. Only used for index files that aren't automatically opened.</td>
+</tr>
+<tr>
+ <td>xbInt16 xbDbf::Reindex( xbInt16 iTagOpt )
+ </td><td>Rebuild a tag. Available if XB_DEBUG_SUPPORT is on.</td>
+</tr>
+<tr>
+ <td>xbInt16 xbDbf::SetCurTag( const xbString &sTagName )<br>
+ void xbDbf::SetCurTag( const xbString &sIxType, xbIx *pIx, void *vpTag )
+ </td><td>Set current tag.</td>
+</tr>
+</table>
+<br><br>
+
+
+<h3>Internal Data Storage</h3>
+
+<table border=1>
+<tr><th>Type<th>Stored in DBF as</th><th>Stored in NDX as</th><th>Stored in MDX as</th></tr>
+<tr><td>C</td><td>Character data</td><td>Character data</td><td>Character data</td></tr>
+<tr><td>F</td><td>Text numbers</td><td>xbDouble</td><td>xbBcd</td></tr>
+<tr><td>N</td><td>Text numbers</td><td>xbDouble</td><td>xbBcd</td></tr>
+<tr><td>D</td><td>Text YYYYMMDD</td><td>xbDouble Julian</td><td>xbDouble Julian</td></tr>
+</table>
+<br><br>
+
+<hr>
+<h2>NDX Indices</h2>
+The objective of this section is to provide information regarding the
+basic concepts of how .NDX index files work in the Xbase64 library.
+Information in this section has been acquired by searching the internet
+and by examining the structure of known good NDX indexes.<br><br>
+
+<h4>NDX Index File Characteristics</h4>
+
+<li>NDX indices maintain keys in ascending sort order only.<br><br>
+<li>NDX indices support <em>unique</em> or <em>non unique</em> keys.<br><br>
+
+<em>Unique</em> keys must be unique if the UniqueKeyOption is not set to XB_EMULATE_DBASE.
+If the UniqueKeyOption is set to XB_EMULATE_DBASE, then the database update routines will
+add a record to the table, but not add a corresponding duplicate key to the index tag.
+The UniqueKeyOption is off (don't allow duplicates) by default.
+<br><br>
+
+<em>Non-unique</em> Keys are not required to be unique, duplicate
+keys are allowed if the index is created with the XB_NOT_UNIQUE
+setting. Duplicate keys are stored in record number order.<br><br>
+
+<li>NDX indexes are automatically updated by the Xbase library after the
+indices are opened.<br>
+<li>Character keys are left justified and padded on the right with spaces.<br>
+<li>Numeric keys are stored as eight byte double values.<br>
+<li>Date kets are stored as julian eigth byte double values.<br>
+
+<h4>NDX File Internals</h4>
+
+NDX files are comprised of two or more 512 byte blocks or nodes of
+information. There are three types of nodes: Head Nodes, Interior
+Nodes and Leaf Nodes.<br><br>
+
+<li>The <em>Head Node</em> is the first node in the file starting at
+position zero (0) and contains information about the NDX file. There
+is only one Head Node in each index and it always starts at the
+beginning of the file.<br><br>
+
+
+<TABLE BORDER>
+<CAPTION ALIGN="TOP"><h3>NDX Header Node</H3></CAPTION>
+<TR VALIGN="BASELINE">
+<TR><TH ALIGN="LEFT">Type<TD>Size<TD>Field Name<TD>Description
+<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>StartNode<TD>This identifies the root node of
+ the index. The Header node is node 0.
+<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>Total Nodes<TD>This is the count of the total
+ nodes in the index. The count includes the header node.
+<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>NoOfKeys<TD>Total number of keys in the index +1
+<TR><TH ALIGN="LEFT">xbUShort<TD>2<TD>KeyLen<TD>The index key length
+<TR><TH ALIGN="LEFT">xbUShort<TD>2<TD>KeysPerNode<TD>The maximum number of keys per node
+<TR><TH ALIGN="LEFT">xbUShort<TD>2<TD>KeyType<TD>Type of key<br>
+00 - Character<br>01 - Numeric
+<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>Keysize<TD>Key record size + 8
+<TR><TH ALIGN="LEFT">char<TD>1<TD>Unknown<TD>Reserved
+<TR><TH ALIGN="LEFT">char<TD>1<TD>Unique<TD>Unique indicator<br>
+00 - Not Unique - XB_NON_UNIQUE<br>01 - Unique - XB_UNIQUE
+<TR><TH ALIGN="LEFT">char<TD>488<TD>KeyExpression<TD>Key expression string
+<TR><TH ALIGN="LEFT"><TD>512<TD><TD>Total bytes in node
+</TABLE>
+<br><br>
+The following structure is used by the Xbase64 NDX routines:
+<xmp>
+ struct NdxHeadNode{
+ xbLong StartNode; /* header node is node 0 */
+ xbLong TotalNodes; /* includes header node */
+ xbLong NoOfKeys; /* actual count + 1 */
+ xbUShort KeyLen; /* length of key data */
+ xbUShort KeysPerNode; /* max number of keys per node */
+ xbUShort KeyType; /* 00 = Char, 01 = Numeric */
+ xbLong KeySize; /* KeyLen + 8 */
+ char Reserved1; /* Not sure about this one */
+ char Unique; /* 00 = not unique, 01 = unique*/
+ char KeyExpression[488]; /* key definition */
+ }
+</xmp>
+<br><br>
+
+<h4>Interior and Leaf Nodes</h4>
+
+Interior Nodes and Leaf Nodes share the same structure in an NDX file.
+The difference between the two types is that interior nodes point to
+other interior nodes or leaf nodes and leaf nodes point to records in
+a DBF file. Interior nodes are optional nodes in an NDX file,
+however if there are more than a few keys in the index there will
+certainly be one or more interior nodes in the file. There will
+always be at least one leaf node in the file. Leaf nodes contain DBF
+record numbers which point to the location of the record in the
+DBF file.<br><br>
+
+Interior nodes have field LeftNodeNo valued which points to the node
+which points to the keys which are less than the key value in the KeyVal
+field. There is one more LeftNodeNo value in the node than there are keys.
+The Last LeftNodeNo points to the node which is greater than the highest
+key value in the node. Interior nodes have 0 in the value for the
+DbfRecNo field.<br><br>
+
+Leaf nodes have 0 in the LeftNodeNo field but do have a value in the
+DbfRecNo field which points to a DFB record.<br><br>
+
+
+<TABLE BORDER>
+<CAPTION ALIGN="TOP"><h3>NDX Interior Node and Leaf Node Structure</H3></CAPTION>
+<TR VALIGN="BASELINE">
+<TR><TH ALIGN="LEFT">Type<TD>Size<TD>Field Name<TD>Description
+<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>NoOfKeysThisNode<TD>The number of key values in this node.
+<TR><TH ALIGN="LEFT">char<TD>508<TD>KeyRec<TD>A repeating structure of
+ pointers and keys. See the next table for the KeyRec structure.
+</TABLE>
+<br><br>
+<TABLE BORDER>
+<CAPTION ALIGN="TOP"><h3>KeyRec Structure</H3></CAPTION>
+<TR VALIGN="BASELINE">
+<TR><TH ALIGN="LEFT">Type<TD>Size<TD>Field Name<TD>Description
+<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>LeftNodeNo<TD>The node number of the lower node
+ for this key. 0 in Leaf Nodes.
+<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>DbfRecNo<TD>The DBF record number for this key.
+ 0 in Interior Nodes.
+<TR><TH ALIGN="LEFT">char<TD>KeyLen<TD>KeyValue<TD>The key value.
+</TABLE>
+
+<br><br>
+For those interested in knowing how the Xbase64 DBMS manipulates and
+navigates index files, the following discussion may be helpfull.<br><br>
+
+Xbase64 DBMS navigates through NDX files by using an in-memory chain
+of nodes of the current location / key in use. It starts by reading the
+Head Node of the index, which points to the first node of the file. The
+first node of the file will be a leaf node if the index is small or will
+be an interior node if the index has more than one leaf node. The first
+interior node is loaded into memory, added to the node chain and points
+to the next node to read. The node is made up of one or more keys. If
+it is a leaf node, the logic looks for a matching key on the node.
+Otherwise, if it is an interior node, the logic looks at the keys until the
+search key is greater than or equal to the key in the node and then
+traverses down the tree to the next node. It continues down the tree,
+adding the nodes to the in-memory node chain until it reaches the correct
+leaf node. If it finds a matching key in the leaf node, it returns a
+XB_FOUND condition. If it doesn't find an exact match in the leaf node, it
+returns a XB_NOT_FOUND condition and stops on the key which is greater than
+the search key given.
+<br><br>
+<hr>
+
+<h2>MDX Indices</h2>
+The objective of this section is to provide information regarding the
+basic concepts of how .MDX index files work in the Xbase64 library.<br>
+Information for MDX files has been gathered by searching the internet
+and by examining the structure of known good MDX index files.<br><br>
+
+<h4>MDX Index File Characteristics</h4>
+
+<li>MDX files are the same name as the corresponding DBF file with an MDX extension.
+<li>MDX files are automatically opened by the library when the DBF file is opened.
+<li>MDX index files (aka prod indices) contain from one to 47 tags, where each tag has it's own key characteristics.
+<li>MDX indices maintain keys in either ascending or descending sort order.
+<li>MDX indices support filtered keys. For example, a filter of <b>.NOT. DELETED()</b> will keep deleted records out
+of the index tag.
+<li>MDX indices are automatically updated by the Xbase library after the
+indices are opened.
+<li>MDX indices support <em>unique</em> or <em>non unique</em> keys.<br><br>
+
+<em>Unique</em> keys must be unique if the UniqueKeyOption is not set to XB_EMULATE_DBASE.
+If the UniqueKeyOption is set to XB_EMULATE_DBASE, then the database update routines will
+add a record to the table, but not add a corresponding duplicate key to the index tag.
+The UniqueKeyOption is off (don't allow duplicates) by default.
+<br><br>
+
+<em>Non-unique</em> Keys are not required to be unique, duplicate
+keys are allowed if the index is created with the XB_NOT_UNIQUE
+setting. Duplicate keys are stored in record number order.<br><br>
+
+
+<li>Character keys are left justified and padded on the right with spaces.
+<li>Numeric keys are stored as twelve byte BCD values.
+<li>Date keys are stored as eight byte double julian values.
+
+<h4>MDX File Internals</h4>
+
+The following information is not needed to use the library, it is just included
+for general information.<br><br>
+
+MDX files are comprised of 512 pages where multiple pages make a block. The default
+setting is 1024 blocks, each block containing two pages.<br><br>
+
+The first four pages contain:
+<li>Bytes 0 - 543 contain general file information.
+<li>Bytes 544 - 2047 is a 47 item table containing specific tag information.
+<br><br>
+
+Pages five and beyound:
+<li>Bytes 2048 and beyond contain tag header blocks, interior nodes and leaf nodes.
+
+<br><br>
+
+<h4>Interior and Leaf Nodes</h4>
+
+Interior Nodes and Leaf Nodes share the same structure in an NDX file with
+the exception that interior nodes have a non zero number immediately
+after the rightmost key on the node.
+
+Interior nodes point to other interior nodes or leaf nodes and leaf nodes point
+to records in a DBF file. Interior nodes are optional nodes in an MDX file,
+however if there are more than a few keys in the index there will
+certainly be one or more interior nodes in the file. There will
+always be at least one leaf node per tag in the file. Leaf nodes
+contain DBF record numbers which point to the location of the record
+in the DBF file.<br><br>
+
+<hr>
+<br><br>
+<h2>TDX Indices</h2>
+TDX index files are an Xbase64 library specific implementation of indexing which
+can be used for creating temporary indices. They can be created as needed and are
+automatically deleted when the table/DBF file is closed.<br><br>
+
+TDX files are built on the MDX index logic and supports the following functionality:
+<li>Complex Key Expressions
+<li>Filters
+<li>Unique / Non-unique keys
+<li>Ascending / Descending keys
+<li>Max of 47 unique temporary index tags
+<br><br>
+
+To create a temporary index, set the Type field to "TDX" when using the xbDbf::CreateTag() method.
+All other functionality is the same when using temp indices. The only requirement is to set the
+type when creating it.<br><br>
+
+Additionally, the create tag only defines the index. If the table is populated with data and
+you need the index populated accordingly, use the xbDbf::Reindex() method to bring it up to data after
+creating it.
+<br><br>
+
+<hr>
+<p><img src="xbase.jpg"><br><hr>
+</BODY>
+</HTML>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/html/xbc6.html b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbc6.html
new file mode 100755
index 0000000..aa38ad4
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbc6.html
@@ -0,0 +1,113 @@
+<!DOCTYPE HTML PUBLIC>
+<HTML>
+<TITLE>Xbase DBMS Chapter 6</TITLE>
+<BODY BGCOLOR=#FFFFFF>
+<H2><p align="center">SQL Support</p></H2>
+<p align="center">Chapter Updated 04/28/23</p><hr>
+
+<h3>SQL Command Status</h3>
+
+Development of SQL support is still underway and very preliminary. As of the 4.0.3 version, the following SQL commands
+are available.<br><br>
+The SQL commands are modeled after industry standard SQL specifications and do what you would expect an SQL command to do.
+<br>
+Use of <em>[brackets]</em> in this chapter identifies optional components of a given command.
+<br><br>
+<hr>
+<h3>ALTER TABLE</h3>
+Expected format:<br>
+ALTER TABLE tablename.DBF RENAME TO newtablename.DBF
+<br><br>
+<hr>
+<h3>CREATE INDEX</h3>
+Expected format to create an Dbase 3, NDX index:<br>
+CREATE INDEX ixname.NDX ON tablename.dbf ( EXPRESSION ) [ASSOCIATE]
+
+<br><br>
+Expected format to create an Dbase 4, tag on an MDX index:<br>
+CREATE [UNIQUE] INDEX tagname ON tablename.DBF ( EXPRESSION ) [DESC] [FILTER .NOT. DELETED()]
+
+<br><br>
+The ASSOCIATE parameter is specific to Xbase64 library, it is used to associate non production (NDX) index file to a dbf
+file so it will be automatically opened with the dbf file whenever the dbf file is opened by the xbase64 routines.
+<br><br>
+The [ASSOCIATE] parameter is not used with MDX production indices
+<br><br>
+Xbase first looks for ".NDX" in the file name to determine if an NDX index should be created.
+If .NDX is not in the filename, it looks in the uda for "IXTYPE" for either NDX or MDX to
+detmermine the index type to create. if IXTYPE is not found, it creates an MDX tag.
+<br><br>
+The optional DESC parameter defines an entire index key as descending. This is
+different than other SQL implementations where specific fields can be descending.
+<br><br>
+The optional FILTER parameter is specific to the XBASE64 library, is it used to assign a filter to a tag in an
+MDX style index. Everything to the right of the keyword FILTER is considered part of the filter.
+<br><br>
+The original DBASE indices used to '+' to create an index on more than one field
+<br>ie: FIELD1+FIELD2+FIELD3
+<br><brSQL uses commas: ie: FIELD1, FIELD2, FIELD3
+<br>
+The Xbase library supports either '+' or ',' when creating mutli field indices.
+<br><br>
+<hr>
+
+
+
+<h3>CREATE TABLE</h3>
+Expected format:<br>
+CREATE TABLE tablename.dbf (Field1 CHAR(10), INTFLD1 INTEGER, ... )
+<br><br>
+<table border=1>
+<tr><th>SQL TYPE</th><th>XBASE Field Type</th></tr>
+<tr><td>SMALLINT</td><td>NUMERIC(6,0)</td></tr>
+<tr><td>INTEGER</td><td>NUMERIC(11,0)</td></tr>
+<tr><td>DECIMAL(x,y)</td><td>NUMERIC(x+1,y)</td></tr>
+<tr><td>NUMERIC(x,y)</td><td>NUMERIC(x,y)</td></tr>
+<tr><td>FLOAT(x,y)</td><td>FLOAT(x,y)</td></tr>
+<tr><td>CHAR(n)</td><td>CHARACTER(n)</td></tr>
+<tr><td>DATE</td><td>DATE</td></tr>
+<tr><td>VARCHAR</td><td>MEMO</td></tr>
+<tr><td>LOGICAL</td><td>LOGICAL</td></tr>
+</table>
+<br>
+<hr>
+
+
+<h3>DELETE</h3>
+Expected format:<br>
+DELETE FROM tablename.DBF [WHERE expression]
+<br><br>
+<hr>
+
+
+<h3>DROP INDEX</h3>
+Expected format:<br>
+DROP INDEX [IF EXISTS] ixname.NDX ON tablename.DBF<br>
+DROP INDEX [IF EXISTS] tagname ON tablename.DBF<br>
+<br>
+
+
+<hr>
+<h3>DROP TABLE</h3>
+Expected format:<br>
+DROP TABLE [IF EXISTS] tablename.DBF
+<br>
+<hr>
+<h3>INSERT</h3>
+Expexted format:<br>
+INSERT INTO tablename (field1, field2, field3,...) VALUES ( 'charval', numval, 'what is the correct odbc date format to use? CCYYMMDD');
+<br><br>
+<hr>
+<h3>SET</h3>
+Used to set a variable name<br>
+Expected format:<br>
+SET ATTRIBUTE = DATAVALUE<br>
+SET ATTRIBUTE = ^ (to delete an entry) <br>
+<br>
+<hr><br><br>
+<p><img src=xbase.jpg><br><hr>
+
+</BODY>
+</HTML>
+
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/html/xbc7.html b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbc7.html
new file mode 100755
index 0000000..6aa7135
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbc7.html
@@ -0,0 +1,53 @@
+<!DOCTYPE HTML PUBLIC>
+<HTML>
+<TITLE>Xbase DBMS Chapter 7</TITLE>
+<BODY BGCOLOR=#FFFFFF>
+<H2><p align="center">Class Inventory</p></H2>
+<p align="center">Chapter Updated 04/28/23</p><hr>
+<br>
+<center><h3>Class Descriptions</h3></center>
+
+<center>
+<table border=1>
+<tr><th>Class</th><th>Description</th></tr>
+<tr><td>xbBcd</td><td>Supports binary coded decimal data</td></tr>
+<tr><td>xbBlockRead<td>Supports block read functionality for improved sequential file access performance.</td></tr>
+<tr><td>xbDate</td><td>Support date operations on a given date formatted as YYYYMMDD</td></tr>
+<tr><td>xbDbf</td><td>Base class for DBF file handling. If you are adding support for a new file type, <br>derive new file type class from this.</td></tr>
+<tr><td>xbDbf3</td><td>Derived from xbDbf, supports DBase V3 files</td></tr>
+<tr><td>xbDbf4</td><td>Derived from xbDbf, supports DBase V4 files</td></tr>
+<tr><td>xbExp</td><td>Class for supporting expression logic</td></tr>
+<tr><td>xbExpNode</td><td>Class definition of a single node, utilized by xbExp</td></tr>
+<tr><td>xbFile</td><td>Main file class. If you are porting this library to another platform, start here</td></tr>
+<tr><td>xbFilter</td><td>Supports filters</td></tr>
+<tr><td>xbIx</td><td>Base class for index file support. If you are adding support for a new index type, <br>derive new index type class from this.</td></tr>
+<tr><td>xbIxNdx</td><td>Derived from xbIx, supports NDX style indices.</td></tr>
+<tr><td>xbIxMdx</td><td>Derived from xbIx, supports MDX style indices.</td></tr>
+<tr><td>xbIxTdx</td><td>Derived from xbIxMdx, supports TDX (temporary) style indices.<br>Exclusive to XBase64, not compatible with other XBase tools.</td></tr>
+<tr><td>xbLinkList</td><td>Class supporting linked list functionality</td></tr>
+<tr><td>xbLinkListOrd</td><td>Class supporting ordered linked list functionality</td></tr>
+<tr><td>xbLinkListNode</td><td>Class defining one node, used by xbLinkList and xbLinkListOrd</td></tr>
+<tr><td>xbLog</td><td>Class supporting general log file activity</td></tr>
+<tr><td>xbMemo</td><td>Base class for supporting memo (.DBT) files. If you are adding support for a new memo type, <br>derive new memo type class from this.</td></tr>
+<tr><td>xbMemoDbt3</td><td>Derived from xbMemo, supports V3 Memo files</td></tr>
+<tr><td>xbMemoDbt4</td><td>Derived from xbMemo, supports V3 Memo files</td></tr>
+<tr><td>xbSql</td><td>Supports SQL access</td></tr>
+<tr><td>xbSsv</td><td>Base class, shared system values</td></tr>
+<tr><td>xbString</td><td>String handling class</td></tr>
+<tr><td>xbTag</td><td>Class to support index tags</td></tr>
+<tr><td>xbTblMgr</td><td>Class used internally in the library for managing multiple open files/tables</td></tr>
+<tr><td>xbUda</td><td>Class for supporting fields for the xbSql functions. Stands for User data area</td></tr>
+<tr><td>xbXBase</td><td>Class to tie everything together. Every application program starts with one of these</td></tr>
+</table>
+</center>
+
+<hr>
+<br><br>
+Fix me...
+<p><img src="Xbase64ClassDiagramV2.jpeg" width=1800 height=1800><br>
+
+<br><br>
+<hr>
+<p><img src="xbase.jpg"><br><hr>
+</BODY>
+</HTML>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/html/xbc8.html b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbc8.html
new file mode 100755
index 0000000..c7fccbc
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbc8.html
@@ -0,0 +1,224 @@
+<!DOCTYPE HTML PUBLIC>
+<HTML>
+<TITLE>Xbase DBMS Chapter 8</TITLE>
+<BODY BGCOLOR=#FFFFFF>
+<H2><p align="center">Class xbSsv</p></H2>
+<p align="center">Chapter Updated 04/13/28</p><hr>
+
+<h3>Class xbSsv - Shared System Values.</h3>
+
+Base class xbSsv is used for maintaining static variables used system
+wide by the XBase library routines and is a base class that is used by the xbXBase class.
+See the diagram in chapter 15 to gain an understanding of where the xbSsv class sits in relation to the
+other classes. Accessing the methods in this class are done via the xbXBase class instance.<br><br>
+Additionally, there are a few other misc routines contained in this class that are available to all
+subordinate classes/objects.
+<br><br><br><br>
+
+<center>
+<table border=1>
+<tr><th width=40%>Method</th><th>Description</th></tr>
+
+<tr><td>void BitDump( unsigned char c ) const<br>void BitDump( char c ) const</td><td>These routines dump the bits for a specified char field to stdout.</td></tr>
+<tr><td>xbBool BitSet( unsigned char c, xbInt16 iBitNo ) const</td><td>This routine will set a specified bit in a char field.</td></tr>
+<tr><td>void DisplayError( xbInt16 ErrorCode ) const</td><td>This routine prints a description for a specifed error to stdout.</td></tr>
+
+<tr><td>xbString& GetDataDirectory() const<br>void SetDataDirectory( const xbString &sDataDirectory )</td>
+ <td>Get and Set the current directory where the library routines expect to find the .DBF, .DBT, .NDX and .MDX files.</td></tr>
+
+<tr><td>xbString& GetDefaultDateFormat() const<br>void SetDefaultDateFormat( const xbString &sDefaultDateFormat )</td>
+ <td>Get and Set the current default date format used by the date formatting routines if no format specifier is provided.</td></tr>
+
+<tr><td>xbInt16 GetEndianType() const</td><td>Returns the current Endian type of the machine the library is operating on.</td></tr>
+<tr><td>const char *GetErrorMessage( xbInt16 ErrorCode ) const</td><td>Returns a pointer to an error message for a given error number.</td></tr>
+
+<tr><td>xbBool GetDefaultAutoCommit() const<br>void SetDefaultAutoCommit( xbBool bDefaultAutoCommit )</td>
+ <td>Get and Set the default auto commit status. If auto commit is on, the library will automatically post any updates to the database when navigating away from an updated record.</td></tr>
+
+<tr><td>xbBool GetHomeDir( xbString &sHomeDirOut )</td><td>Get the home directory for the current user.</td></tr>
+
+<tr><td>xbString& GetLogDirectory() const<br>void SetLogDirectory( const xbString &sLogDirectory )</td>
+ <td>Get and set the directory location for any system generated logfiles.</td></tr>
+<tr><td>xbString& GetLogFileName() const<br>void SetLogFileName( const xbString &sLogFileName )</td><td>Returns the default log file name.</td></tr>
+
+
+<tr><td>xbBool GetMultiUser() const<br>void SetMultiUser( xbBool bMultiUser )</td>
+ <td>Get and set multi user status. This turns auto locking on and off. For better performance in single user applications, turn multuser off.</td></tr>
+
+<tr><td>char GetPathSeparator() const</td>
+ <td>Get the path separator value for the current environment. Returns either \ (for Windows environment) or / (for Unix environment).</td></tr>
+
+<tr><td>xbString& GetTempDirectory() const<br>void SetTempDirectory( const xbString &sTempDirectory )</td><td>Get and set the temp folder.</td></tr>
+
+
+<tr><td>xbInt16 GetUniqueKeyOpt() const<br>xbInt16 SetUniqueKeyOpt( xbInt16 iUniqueKeyOpt )</td>
+ <td>Determines library behavior for unique key processing. The original Dbase (tm) product allowed duplicate recrds in the .DBF file when the unique option was specified for a given index tag.
+ The Xbase library supports either the original DBase behavior (XB_EMULATE_DBASE), or the prevention of duplicate records for duplicate keys (XB_HALT_ON_DUPKEY).</td></tr>
+
+
+<tr><td>xbInt16 GetDefaultLockRetries() const<br>void SetDefaultLockRetries( xbInt16 iRetryCount )</td>
+ <td>Get and Set the number of times to attempt a lock</td></tr>
+
+<tr><td>xbInt32 GetDefaultLockWait() const<br>void SetDefaultLockWait( xbInt32 lRetryWait )
+ </td><td>Get and Set the wait time between lock attempts.</td></tr>
+
+<tr><td>xbInt16 GetDefaultLockFlavor() const<br>void SetDefaultLockFlavor( xbInt16 iLockFlavor )
+ </td><td>For future use. With current versions, only DBase (TM) locking offsets are supported.</td></tr>
+
+<tr><td>xbBool GetDefaultAutoLock() const<br>void SetDefaultAutoLock( xbBool bAutoLock )<br>void EnableDefaultAutoLock()<br>void DisableDefaultAutoLock()
+ </td><td>Set, Get or update Auto Lock Status</td></tr>
+
+
+<tr><td>xbInt16 GetCreateMdxBlockSize() const<br>xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize )
+ </td><td>Set or get MDX Index block size. Must be a multiple of 512.</td></tr>
+
+<tr><td>xbUInt32 GetDefaultBlockReadSize() const<br>void SetDefaultBlockReadSize( xbUInt32 ulDfltBlockReadSize )
+ </td><td>Set or Get the default block size for Block Read functionality. Block reading is used to improve sequentential access performance.</td></tr>
+</table>
+
+<br><br>
+
+<h3>Example program using xbSsv methods</h3>
+</center>
+<xmp>
+/* xb_ex_ssv.cpp
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2021,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+This program demonstrates using functionality of the xbSsv class (Shared system values)
+
+*/
+
+#include "xbase.h"
+
+using namespace xb;
+
+int main( int ac, char ** av ){
+
+ xbXBase x; // set up xbase for business
+ xbString sMsg; // a message string
+
+ sMsg.Sprintf( "Program [%s] initializing...", av[0] );
+ std::cout << sMsg.Str() << std::endl;
+
+ // example code to set up log file usage
+ #ifdef XB_LOGGING_SUPPORT
+ char cSeperator; // is this a unix (/) or windows (\) file system
+ xbString sLog; // general string for log file activities
+ sLog = x.GetLogFqFileName().Str(); // get the system default log file name
+ std::cout << "System default logfile is [" << sLog.Str() << "]" << std::endl;
+
+ cSeperator = sLog.GetPathSeparator(); // get the seperator from
+ std::cout << "Path seperator = [" << cSeperator << "]" << std::endl;
+
+ sLog.Sprintf( "..%c", cSeperator );
+ x.SetLogDirectory( sLog );
+ std::cout << "sLog = [" << sLog.Str() << "]\n";
+
+ sLog = x.GetLogFqFileName().Str(); // get the system default log file name
+ std::cout << "New logfile is [" << sLog.Str() << "]" << std::endl;
+
+ // turn on logging after file name set
+ x.EnableMsgLogging();
+ #endif // XB_LOGGING_SUPPORT
+
+ // const char *GetErrorMessage( xbInt16 ErrorCode ) const;
+ // void DisplayError( xbInt16 ErrorCode ) const;
+ std::cout << "DisplayError( -100 ) - ";
+ x.DisplayError( -100 );
+ // << "]" << std::endl;
+
+
+ // void SetDefaultDateFormat( const xbString &sDefaultDateFormat );
+ // xbString& GetDefaultDateFormat() const;
+ std::cout << "GetDefaultDateFormat() - " << x.GetDefaultDateFormat() << std::endl;
+
+ // void SetDataDirectory ( const xbString &sDataDirectory );
+ // xbString& GetDataDirectory() const;
+ std::cout << "GetDataDirectory() - " << x.GetDataDirectory() << std::endl;
+
+ // xbInt16 GetEndianType() const;
+ if( x.GetEndianType() == 'L' )
+ std::cout << "Little Endian Architecture." << std::endl;
+ else
+ std::cout << "Bid Endian Architecture." << std::endl;
+
+ //xbBool GetDefaultAutoCommit() const;
+ //void SetDefaultAutoCommit( xbBool bDefaultAutoCommit );
+ if( x.GetDefaultAutoCommit())
+ std::cout << "AutoCommit is on." << std::endl;
+ else
+ std::cout << "AutoCommit is off." << std::endl;
+
+ //xbBool GetMultiUser () const;
+ //void SetMultiUser ( xbBool bMultiUser );
+ if( x.GetMultiUser())
+ std::cout << "Multi user (locking) is enabled." << std::endl;
+ else
+ std::cout << "Multi user (locking) not enabled." << std::endl;
+
+ #if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
+ // xbInt16 GetUniqueKeyOpt () const;
+ // xbInt16 SetUniqueKeyOpt ( xbInt16 iUniqueKeyOpt );
+ // XB_HALT_ON_DUPKEY
+ // XB_EMULATE_DBASE
+ if( x.GetUniqueKeyOpt() == XB_HALT_ON_DUPKEY )
+ std::cout << "UniqueKey option - XB_HALT_ON_DUPKEY" << std::endl;
+ else if( x.GetUniqueKeyOpt() == XB_EMULATE_DBASE )
+ std::cout << "UniqueKey option - XB_EMULATE_DBASE" << std::endl;
+ #endif // (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
+
+ #ifdef XB_LOCKING_SUPPORT
+ //xbInt16 GetDefaultLockRetries () const;
+ //void SetDefaultLockRetries ( xbInt16 iRetryCount );
+ //xbInt32 GetDefaultLockWait () const;
+ //void SetDefaultLockWait ( xbInt32 lRetryWait );
+ //xbInt16 GetDefaultLockFlavor () const;
+ //void SetDefaultLockFlavor ( xbInt16 iLockFlavor );
+ //xbBool GetDefaultAutoLock () const;
+ //void SetDefaultAutoLock ( xbBool bAutoLock );
+ //void EnableDefaultAutoLock ();
+ //void DisableDefaultAutoLock ();
+
+ std::cout << "GetDefaultLockRetries() - " << x.GetDefaultLockRetries() << std::endl;
+ std::cout << "GetDefaultLockWait() - " << x.GetDefaultLockWait() << std::endl;
+ std::cout << "GetDefaultAutoLock() - " << x.GetDefaultAutoLock() << std::endl;
+ #endif // XB_LOCKING_SUPPORT
+
+ #ifdef XB_MDX_SUPPORT
+ // xbInt16 GetCreateMdxBlockSize() const;
+ // xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );
+ std::cout << "GetCreateMdxBlockSize() - " << x.GetCreateMdxBlockSize() << std::endl;
+ #endif // XB_MDX_SUPPORT
+
+ #ifdef XB_BLOCKREAD_SUPPORT
+ // xbUInt32 GetDefaultBlockReadSize() const;
+ // void SetDefaultBlockReadSize( xbUInt32 ulDfltBlockReadSize );
+ std::cout << "GetDefaultBlockReadSize() - " << x.GetDefaultBlockReadSize() << std::endl;
+ #endif // XB_BLOCKREAD_SUPPORT
+
+ //xbBool BitSet ( unsigned char c, xbInt16 iBitNo ) const;
+ //void BitDump ( unsigned char c ) const;
+ //void BitDump ( char c ) const;
+ std::cout << "BitDump( 'A' ) - ";
+ x.BitDump( 'A' );
+
+ return 0;
+}
+
+
+</xmp>
+
+<br><br>
+<hr>
+<p><img src="xbase.jpg"><br><hr>
+</BODY>
+</HTML>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/html/xbc9.html b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbc9.html
new file mode 100755
index 0000000..1d39a96
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbc9.html
@@ -0,0 +1,255 @@
+<!DOCTYPE HTML PUBLIC>
+<HTML>
+<TITLE>Xbase DBMS Chapter 9</TITLE>
+<BODY BGCOLOR=#FFFFFF>
+<H2><p align="center">Class xbXBase</p></H2>
+<p align="center">Chapter Updated 04/28/23</p><hr>
+
+<h3>Class xbXBase - Core Level Class</h3>
+
+
+The xbXBase class is the core class that needs to be in every application program.
+Established an instance of class xbXBase before any other Xbase calls are made.
+
+<i>xbXBase x</i>
+
+<br><br>
+xbXBase is derived from base classes xbTblMgr and xbSsv.
+<br><br><br><br>
+
+<center>
+<table border=1>
+<tr><th width=40%>Method</th><th>Description</th><th>Category</th></tr>
+
+
+<tr><td>xbInt16 CloseAllTables()</td><td>Close all open tables.</td><td>Table</tr>
+
+<tr><td>xbInt16 OpenHighestVersion( const xbString &sTableName, const xbString &sAlias, xbDbf &dbf, int dummy )</td><td>Open highest version available for sTableName.</td><td>Table</tr>
+<tr><td>xbInt16 OpenHighestVersion( const xbString &sTableName, const xbString &sAlias, xbDbf **dbf )</td><td>Open highest version available for sTableName.</td><td>Table</tr>
+<tr><td>xbDbf * Open( const xbString &sTableName, xbInt16 &iRc )</td><td>Open the highest available version of the dbf file. Defaults to XB_READ_WRITE and XB_MULTI_USER mode.</td><td>Table</tr>
+<tr><td>xbDbf * Open( const xbString &sTableName, const xbString &sAlias, xbInt16 iOpenMode, xbInt16 iShareMode, xbInt16 iVersion, xbInt16 &iRc )</td><td>Open table.</td><td>Table</tr>
+
+<tr><td colspan=3><hr></td></tr>
+<tr><td>void DisableMsgLogging()</td><td>Disable logging routines.</td><td>Logging</td></tr>
+<tr><td>void EnableMsgLogging ()</td><td>Enable logging routines.</td><td>Logging</td></tr>
+<tr><td>xbInt16 FlushLog()</td><td>Flush any queued logfile updates to disk.</td><td>Logging</td></tr>
+<tr><td>const xbString &GetLogDirectory () const</td><td>Get the current logfile directory.</td><td>Logging</td></tr>
+<tr><td>const xbString &GetLogFileName () const</td><td>Get the current logfile name.</td><td>Logging</td></tr>
+<tr><td>const xbString &GetLogFqFileName() const</td><td>Get fully qualified logfile name.</td><td>Logging</td></tr>
+<tr><td>xbBool GetLogStatus () const</td><td>Get the logging status.</td><td>Logging</td></tr>
+<tr><td>void SetLogDirectory( const xbString &sLogFileDirectory )</td><td>Set the log directory. Must be done while logging is off.</td><td>Logging</td></tr>
+<tr><td>void SetLogFileName( const xbString &sLogFileName )</td><td>Set the log file name. Must be done while logging is off.</td><td>Logging</td></tr>
+<tr><td>void SetLogSize( size_t lSize )</td><td>Set the logfile size. After the size is reached, the log file roll.</td><td>Logging</td></tr>
+<tr><td>xbInt16 WriteLogBytes ( xbUInt32 lCnt, const char *p )</td><td>Write lCnt bytes pointed to by pointer p to the logfile.</td><td>Logging</td></tr>
+<tr><td>xbInt16 WriteLogMessage( const xbString &sLogMessage, xbInt16 iOutputOpt = 0 )</td><td>Write a string to the logfile.</td><td>Logging</td></tr>
+
+<tr><td colspan=3><hr></td></tr>
+
+<tr><td>xbInt16 xbXBase::CreateFqn( const xbString &sDirIn, const xbString &sNameIn, const xbString &sExtIn, xbString &sFqnOut )</td>
+<td>Create fully qualified file name from directory, file name and optional extension. This routine sets the correct separators dependent on OS.
+</td><td>Misc</td></tr>
+
+
+<tr><td>xbInt16 xbXBase::GetCmdLineOpt( xbInt32 lArgc, char **sArgv, xbString &sOptRqst, xbString &sParmOut )<br>
+xbXBase::GetCmdLineOpt( xbInt32 lArgc, char **sArgv, const char *sOptRqst, xbString &sParmOut )</td><td>Parse command line values seeking given parameter info.</td><td>Misc</td></tr>
+
+<tr><td>void xbSleep( xbInt32 lMillisecs )</td><td>Sleep command, used mainly in lock commands for waiting between retries.</td><td>Misc</td></td></tr>
+
+<tr><td colspan=3><hr></td></tr>
+<tr><td>xbInt16 ABS( xbDouble dIn, xbDouble &dOut )</td><td>Dbase ABS function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 ALLTRIM( const xbString &sIn, xbString &sOut )</td><td>Dbase ALLTRIM function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 ASC( const xbString &s, xbDouble &dAscOut )</td><td>Dbase ASC function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 AT( const xbString &sSrchFor, const xbString &sBase, xbDouble &dPos )</td><td>Dbase AT function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 CDOW( xbDate &dInDate, xbString &sOutDow )</td><td>Dbase CDOW function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 CHR( xbDouble dAsciCd, xbString &sOut )</td><td>Dbase CHR function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 CMONTH( xbDate &dInDate, xbString &sOutMonth )</td><td>Dbase CMONTH function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 CTOD( const xbString &sInDate, xbDate &dOutDate )</td><td>Dbase CTOD function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 DATE( xbDate &dOutDate )</td><td>Dbase DATE function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 DAY( const xbDate &dInDate, xbDouble &dOutDay )</td><td>Dbase DAY function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 DEL( xbDbf * d, xbString &sOut, xbInt16 iRecBufSw = 0 )</td><td>Dbase DEL function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 DELETED( xbDbf * d, xbBool &bOut, xbInt16 iRecBufSw = 0 )</td><td>Dbase DELETED function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 DESCEND( const xbString &sIn,xbString &sOut )<br>xbInt16 DESCEND( const xbDate &dInDate, xbDate &dOutDate )<br>xbInt16 DESCEND( const xbDouble dIn, xbDouble &dsOut )</td><td>Dbase DESCEND function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 DOW( const xbDate &sInDate, xbDouble &dDowOut )</td><td>Dbase DOW function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 DTOC( xbDate &dInDate, xbString &sOutFmtDate )</td><td>Dbase DTOC function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 DTOS( xbDate &dInDate, xbString &sOutFmtDate )</td><td>Dbase DTOS function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 EXP( xbDouble dIn, xbDouble &dOut )</td><td>Dbase EXP function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 IIF( xbBool bResult, const xbString &sTrueResult, const xbString &sFalseResult, xbString &sResult )</td><td>Dbase IIF function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 INT( xbDouble dIn, xbDouble &dOut )</td><td>Dbase INT function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 ISALPHA( const xbString &s, xbBool &bResult )</td><td>Dbase ISALPHA function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 ISLOWER( const xbString &s, xbBool &bResult )</td><td>Dbase ISLOWER function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 ISUPPER( const xbString &s, xbBool &bResult )</td><td>Dbase ISUPPER function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 LEFT( const xbString &sIn, xbUInt32 lCharCnt, xbString &sOut )</td><td>Dbase LEF function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 LEN( const xbString &sIn, xbDouble &dLen )</td><td>Dbase LEN function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 LOG( xbDouble dIn, xbDouble &dOut )</td><td>Dbase LOG function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 LOWER( const xbString &sIn, xbString &sOut )</td><td>Dbase LOWER function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 LTRIM( const xbString &sIn, xbString & sOut )</td><td>Dbase LTRIM function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 MAX( xbDouble dIn1, xbDouble dIn2, xbDouble &dOut )</td><td>Dbase MAX function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 MIN( xbDouble dIn1, xbDouble dIn2, xbDouble &dOut )</td><td>Dbase MIN function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 MONTH( xbDate &dInDate, xbDouble &dMonthOut )</td><td>Dbase MONTH function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 RECCOUNT( xbDbf * d, xbDouble &dRecOut )</td><td>Dbase RECCOUNT function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 RECNO( xbDbf * d, xbDouble &dRecOut )</td><td>Dbase RECNO function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 REPLICATE( const xbString &sIn, xbUInt32 ulRepCnt, xbString &sOut )</td><td>Dbase REPLICATE function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 RIGHT( const xbString &sIn, xbUInt32 iCharCnt, xbString &sOut )</td><td>Dbase RIGHT function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 RTRIM( const xbString &sIn, xbString &sOut )</td><td>Dbase RTRIM function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 SPACE( xbInt32 lCnt, xbString &sOut )</td><td>Dbase SPACE function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 SQRT( xbDouble dBase, xbDouble &dSqrRt )</td><td>Dbase SQRT function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 STOD( const xbString &sIn, xbDate &sDateOut )</td><td>Dbase STOD function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 STR( xbDouble dIn, xbString &sOut )</td><td>Dbase function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 STR( xbDouble dIn, xbUInt32 ulLen, xbString &sOut )<br>
+ xbInt16 STR( xbDouble dIn, xbUInt32 ulLen, xbUInt32 ulDec, xbString &sOut )<br>
+ xbInt16 STR( xbDouble dIn, xbUInt32 ulLen, xbUInt32 ulDec, xbString &sPadChar, xbString &sOut )</td><td>Dbase STR function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 STRZERO( xbDouble dIn, xbUInt32 ulLen, xbUInt32 ulDec, xbString &sOut )</td><td>Dbase STRZERO function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 SUBSTR( const xbString &sIn, xbUInt32 ulStartPos, xbUInt32 ulLen, xbString &sOut )</td><td>Dbase SUBSTR function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 TRIM( const xbString &sIn, xbString &sOut )</td><td>Dbase TRIM function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 UPPER( const xbString &sIn, xbString &sOut )</td><td>Dbase UPPER function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 VAL( const xbString &sIn, xbDouble &dOut )</td><td>Dbase VAL function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 YEAR( xbDate &dInDate, xbDouble &dOutYear )</td><td>Dbase YEAR function.</td><td>Expression</td></tr>
+</table>
+
+<br><br>
+<hr>
+
+<h3>Example program using xbXbase methods</h3>
+</center>
+<xmp>
+/* xb_ex_ssv.cpp
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2021,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+This program demonstrates using functionality of the xbSsv class (Shared system values)
+
+*/
+
+#include "xbase.h"
+
+using namespace xb;
+
+int main( int ac, char ** av ){
+
+ xbXBase x; // set up xbase for business
+ xbString sMsg; // a message string
+
+ sMsg.Sprintf( "Program [%s] initializing...", av[0] );
+ std::cout << sMsg.Str() << std::endl;
+
+ // example code to set up log file usage
+ #ifdef XB_LOGGING_SUPPORT
+ char cSeperator; // is this a unix (/) or windows (\) file system
+ xbString sLog; // general string for log file activities
+ sLog = x.GetLogFqFileName().Str(); // get the system default log file name
+ std::cout << "System default logfile is [" << sLog.Str() << "]" << std::endl;
+
+ cSeperator = sLog.GetPathSeparator(); // get the seperator from
+ std::cout << "Path seperator = [" << cSeperator << "]" << std::endl;
+
+ sLog.Sprintf( "..%c", cSeperator );
+ x.SetLogDirectory( sLog );
+ std::cout << "sLog = [" << sLog.Str() << "]\n";
+
+ sLog = x.GetLogFqFileName().Str(); // get the system default log file name
+ std::cout << "New logfile is [" << sLog.Str() << "]" << std::endl;
+
+ // turn on logging after file name set
+ x.EnableMsgLogging();
+ #endif // XB_LOGGING_SUPPORT
+
+ // const char *GetErrorMessage( xbInt16 ErrorCode ) const;
+ // void DisplayError( xbInt16 ErrorCode ) const;
+ std::cout << "DisplayError( -100 ) - ";
+ x.DisplayError( -100 );
+ // << "]" << std::endl;
+
+
+ // void SetDefaultDateFormat( const xbString &sDefaultDateFormat );
+ // xbString& GetDefaultDateFormat() const;
+ std::cout << "GetDefaultDateFormat() - " << x.GetDefaultDateFormat() << std::endl;
+
+ // void SetDataDirectory ( const xbString &sDataDirectory );
+ // xbString& GetDataDirectory() const;
+ std::cout << "GetDataDirectory() - " << x.GetDataDirectory() << std::endl;
+
+ // xbInt16 GetEndianType() const;
+ if( x.GetEndianType() == 'L' )
+ std::cout << "Little Endian Architecture." << std::endl;
+ else
+ std::cout << "Bid Endian Architecture." << std::endl;
+
+ //xbBool GetDefaultAutoCommit() const;
+ //void SetDefaultAutoCommit( xbBool bDefaultAutoCommit );
+ if( x.GetDefaultAutoCommit())
+ std::cout << "AutoCommit is on." << std::endl;
+ else
+ std::cout << "AutoCommit is off." << std::endl;
+
+ //xbBool GetMultiUser () const;
+ //void SetMultiUser ( xbBool bMultiUser );
+ if( x.GetMultiUser())
+ std::cout << "Multi user (locking) is enabled." << std::endl;
+ else
+ std::cout << "Multi user (locking) not enabled." << std::endl;
+
+ #if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
+ // xbInt16 GetUniqueKeyOpt () const;
+ // xbInt16 SetUniqueKeyOpt ( xbInt16 iUniqueKeyOpt );
+ // XB_HALT_ON_DUPKEY
+ // XB_EMULATE_DBASE
+ if( x.GetUniqueKeyOpt() == XB_HALT_ON_DUPKEY )
+ std::cout << "UniqueKey option - XB_HALT_ON_DUPKEY" << std::endl;
+ else if( x.GetUniqueKeyOpt() == XB_EMULATE_DBASE )
+ std::cout << "UniqueKey option - XB_EMULATE_DBASE" << std::endl;
+ #endif // (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
+
+ #ifdef XB_LOCKING_SUPPORT
+ //xbInt16 GetDefaultLockRetries () const;
+ //void SetDefaultLockRetries ( xbInt16 iRetryCount );
+ //xbInt32 GetDefaultLockWait () const;
+ //void SetDefaultLockWait ( xbInt32 lRetryWait );
+ //xbInt16 GetDefaultLockFlavor () const;
+ //void SetDefaultLockFlavor ( xbInt16 iLockFlavor );
+ //xbBool GetDefaultAutoLock () const;
+ //void SetDefaultAutoLock ( xbBool bAutoLock );
+ //void EnableDefaultAutoLock ();
+ //void DisableDefaultAutoLock ();
+
+ std::cout << "GetDefaultLockRetries() - " << x.GetDefaultLockRetries() << std::endl;
+ std::cout << "GetDefaultLockWait() - " << x.GetDefaultLockWait() << std::endl;
+ std::cout << "GetDefaultAutoLock() - " << x.GetDefaultAutoLock() << std::endl;
+ #endif // XB_LOCKING_SUPPORT
+
+ #ifdef XB_MDX_SUPPORT
+ // xbInt16 GetCreateMdxBlockSize() const;
+ // xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );
+ std::cout << "GetCreateMdxBlockSize() - " << x.GetCreateMdxBlockSize() << std::endl;
+ #endif // XB_MDX_SUPPORT
+
+ #ifdef XB_BLOCKREAD_SUPPORT
+ // xbUInt32 GetDefaultBlockReadSize() const;
+ // void SetDefaultBlockReadSize( xbUInt32 ulDfltBlockReadSize );
+ std::cout << "GetDefaultBlockReadSize() - " << x.GetDefaultBlockReadSize() << std::endl;
+ #endif // XB_BLOCKREAD_SUPPORT
+
+ //xbBool BitSet ( unsigned char c, xbInt16 iBitNo ) const;
+ //void BitDump ( unsigned char c ) const;
+ //void BitDump ( char c ) const;
+ std::cout << "BitDump( 'A' ) - ";
+ x.BitDump( 'A' );
+
+ return 0;
+}
+
+
+</xmp>
+
+<br><br>
+<hr>
+<p><img src="xbase.jpg"><br><hr>
+</BODY>
+</HTML>
diff --git a/docs/license/gpl-3.0.txt b/1Tdata/xbase/xbase64-4.1.4/docs/license/gpl-3.0.txt
index 94a9ed0..94a9ed0 100755
--- a/docs/license/gpl-3.0.txt
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/license/gpl-3.0.txt
diff --git a/docs/license/preamble.txt b/1Tdata/xbase/xbase64-4.1.4/docs/license/preamble.txt
index a8988bf..a8988bf 100755
--- a/docs/license/preamble.txt
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/license/preamble.txt
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/man/xb_cfg_chk.1.gz b/1Tdata/xbase/xbase64-4.1.4/docs/man/xb_cfg_chk.1.gz
new file mode 100644
index 0000000..1014681
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/man/xb_cfg_chk.1.gz
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/man/xb_copydbf.1.gz b/1Tdata/xbase/xbase64-4.1.4/docs/man/xb_copydbf.1.gz
new file mode 100644
index 0000000..dd05eb8
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/man/xb_copydbf.1.gz
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/man/xb_dbfutil.1.gz b/1Tdata/xbase/xbase64-4.1.4/docs/man/xb_dbfutil.1.gz
new file mode 100644
index 0000000..b3e7eac
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/man/xb_dbfutil.1.gz
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/man/xb_deletall.1.gz b/1Tdata/xbase/xbase64-4.1.4/docs/man/xb_deletall.1.gz
new file mode 100644
index 0000000..01a2af5
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/man/xb_deletall.1.gz
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/man/xb_dumpdbt.1.gz b/1Tdata/xbase/xbase64-4.1.4/docs/man/xb_dumpdbt.1.gz
new file mode 100644
index 0000000..c6e6331
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/man/xb_dumpdbt.1.gz
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/man/xb_dumprecs.1.gz b/1Tdata/xbase/xbase64-4.1.4/docs/man/xb_dumprecs.1.gz
new file mode 100644
index 0000000..273ec78
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/man/xb_dumprecs.1.gz
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/man/xb_import.1.gz b/1Tdata/xbase/xbase64-4.1.4/docs/man/xb_import.1.gz
new file mode 100644
index 0000000..22f797a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/man/xb_import.1.gz
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/man/xb_pack.1.gz b/1Tdata/xbase/xbase64-4.1.4/docs/man/xb_pack.1.gz
new file mode 100644
index 0000000..55784b7
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/man/xb_pack.1.gz
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/man/xb_tblinfo.1.gz b/1Tdata/xbase/xbase64-4.1.4/docs/man/xb_tblinfo.1.gz
new file mode 100644
index 0000000..2af2fb6
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/man/xb_tblinfo.1.gz
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/man/xb_undelall.1.gz b/1Tdata/xbase/xbase64-4.1.4/docs/man/xb_undelall.1.gz
new file mode 100644
index 0000000..a3525d6
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/man/xb_undelall.1.gz
Binary files differ
diff --git a/docs/misc/AutoUpdate.txt b/1Tdata/xbase/xbase64-4.1.4/docs/misc/AutoUpdate.txt
index 909bc18..909bc18 100755
--- a/docs/misc/AutoUpdate.txt
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/misc/AutoUpdate.txt
diff --git a/docs/misc/DirectoryStructure.txt b/1Tdata/xbase/xbase64-4.1.4/docs/misc/DirectoryStructure.txt
index 9a7ba66..9a7ba66 100755
--- a/docs/misc/DirectoryStructure.txt
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/misc/DirectoryStructure.txt
diff --git a/docs/misc/ExpressionNotes.ods b/1Tdata/xbase/xbase64-4.1.4/docs/misc/ExpressionNotes.ods
index 6817de2..6817de2 100755
--- a/docs/misc/ExpressionNotes.ods
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/misc/ExpressionNotes.ods
Binary files differ
diff --git a/docs/misc/Expressions.txt b/1Tdata/xbase/xbase64-4.1.4/docs/misc/Expressions.txt
index d6eed0d..d6eed0d 100755
--- a/docs/misc/Expressions.txt
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/misc/Expressions.txt
diff --git a/docs/misc/FileTypeByte.txt b/1Tdata/xbase/xbase64-4.1.4/docs/misc/FileTypeByte.txt
index 11d4823..11d4823 100755
--- a/docs/misc/FileTypeByte.txt
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/misc/FileTypeByte.txt
diff --git a/docs/misc/IndexNotes.ods b/1Tdata/xbase/xbase64-4.1.4/docs/misc/IndexNotes.ods
index 0b3cabc..0b3cabc 100755
--- a/docs/misc/IndexNotes.ods
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/misc/IndexNotes.ods
Binary files differ
diff --git a/docs/misc/RealDelete.txt b/1Tdata/xbase/xbase64-4.1.4/docs/misc/RealDelete.txt
index 7770afc..7770afc 100755
--- a/docs/misc/RealDelete.txt
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/misc/RealDelete.txt
diff --git a/docs/misc/Release.txt b/1Tdata/xbase/xbase64-4.1.4/docs/misc/Release.txt
index f73af11..f73af11 100755
--- a/docs/misc/Release.txt
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/misc/Release.txt
diff --git a/docs/misc/Versions.txt b/1Tdata/xbase/xbase64-4.1.4/docs/misc/Versions.txt
index 2977341..2977341 100755
--- a/docs/misc/Versions.txt
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/misc/Versions.txt
diff --git a/docs/misc/xbTmpFiles.txt b/1Tdata/xbase/xbase64-4.1.4/docs/misc/xbTmpFiles.txt
index f81bee9..f81bee9 100755
--- a/docs/misc/xbTmpFiles.txt
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/misc/xbTmpFiles.txt
diff --git a/sql/droptbl.sql b/1Tdata/xbase/xbase64-4.1.4/sql/droptbl.sql
index d8699cc..d8699cc 100755
--- a/sql/droptbl.sql
+++ b/1Tdata/xbase/xbase64-4.1.4/sql/droptbl.sql
diff --git a/sql/jointest.sql b/1Tdata/xbase/xbase64-4.1.4/sql/jointest.sql
index de167b5..de167b5 100755
--- a/sql/jointest.sql
+++ b/1Tdata/xbase/xbase64-4.1.4/sql/jointest.sql
diff --git a/sql/oneNdxTag.sql b/1Tdata/xbase/xbase64-4.1.4/sql/oneNdxTag.sql
index 71ff217..71ff217 100755
--- a/sql/oneNdxTag.sql
+++ b/1Tdata/xbase/xbase64-4.1.4/sql/oneNdxTag.sql
diff --git a/sql/testc.sql b/1Tdata/xbase/xbase64-4.1.4/sql/testc.sql
index 85d9f18..85d9f18 100755
--- a/sql/testc.sql
+++ b/1Tdata/xbase/xbase64-4.1.4/sql/testc.sql
diff --git a/sql/testd.sql b/1Tdata/xbase/xbase64-4.1.4/sql/testd.sql
index 3bac01c..3bac01c 100755
--- a/sql/testd.sql
+++ b/1Tdata/xbase/xbase64-4.1.4/sql/testd.sql
diff --git a/sql/testdd.sql b/1Tdata/xbase/xbase64-4.1.4/sql/testdd.sql
index 85c8000..85c8000 100755
--- a/sql/testdd.sql
+++ b/1Tdata/xbase/xbase64-4.1.4/sql/testdd.sql
diff --git a/sql/testflg.sql b/1Tdata/xbase/xbase64-4.1.4/sql/testflg.sql
index 2d00290..2d00290 100755
--- a/sql/testflg.sql
+++ b/1Tdata/xbase/xbase64-4.1.4/sql/testflg.sql
diff --git a/sql/testmdx.sql b/1Tdata/xbase/xbase64-4.1.4/sql/testmdx.sql
index 859334b..859334b 100755
--- a/sql/testmdx.sql
+++ b/1Tdata/xbase/xbase64-4.1.4/sql/testmdx.sql
diff --git a/sql/testmdx2.sql b/1Tdata/xbase/xbase64-4.1.4/sql/testmdx2.sql
index 040dddd..040dddd 100755
--- a/sql/testmdx2.sql
+++ b/1Tdata/xbase/xbase64-4.1.4/sql/testmdx2.sql
diff --git a/sql/twotags.sql b/1Tdata/xbase/xbase64-4.1.4/sql/twotags.sql
index 6840709..6840709 100755
--- a/sql/twotags.sql
+++ b/1Tdata/xbase/xbase64-4.1.4/sql/twotags.sql
diff --git a/src/core/xbbcd.cpp b/1Tdata/xbase/xbase64-4.1.4/src/core/xbbcd.cpp
index f86e74f..f86e74f 100755
--- a/src/core/xbbcd.cpp
+++ b/1Tdata/xbase/xbase64-4.1.4/src/core/xbbcd.cpp
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/core/xbblockread.cpp b/1Tdata/xbase/xbase64-4.1.4/src/core/xbblockread.cpp
new file mode 100755
index 0000000..7e2c5fc
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/core/xbblockread.cpp
@@ -0,0 +1,279 @@
+/* xbblockread.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+This module handles block read methods. Block reading is used for performance improvement
+during sequential access processing.
+
+*/
+
+#include "xbase.h"
+
+#ifdef XB_BLOCKREAD_SUPPORT
+
+namespace xb{
+
+/************************************************************************/
+xbBlockRead::xbBlockRead( xbDbf * d ) {
+ pBlock = NULL;
+ ulBlkSize = 0;
+ ulFirstBlkRec = 0;
+ ulRecCnt = 0;
+ ulMaxRecs = 0;
+ bEof = xbFalse;
+ this->dbf = d;
+ tFmTime = 0;
+}
+/************************************************************************/
+xbBlockRead::~xbBlockRead(){
+ if( pBlock ){
+ free( pBlock );
+ pBlock = NULL;
+ }
+}
+
+/************************************************************************/
+//! @brief Dump read block internals to stdout.
+/*!
+ Dump the current read block internals to stdout.
+*/
+
+
+#ifdef XB_DEBUG_SUPPORT
+void xbBlockRead::DumpReadBlockInternals(){
+
+ xbUInt32 ulRecCnt;
+ dbf->GetRecordCnt( ulRecCnt );
+
+ std::cout << "------- DumpBlockInternals ---------" << std::endl;
+ std::cout << "Dflt Blk Size = [" << dbf->GetXbasePtr()->GetDefaultBlockReadSize()
+ << "]" << std::endl;
+ std::cout << "Dbf Record Count = [" << ulRecCnt << "]" << std::endl;
+ std::cout << "Dbf Record Len = [" << dbf->GetRecordLen() << "]" << std::endl;
+ std::cout << "ulBlkSize = [" << ulBlkSize << "]" << std::endl;
+ std::cout << "ulMaxRecs = [" << ulMaxRecs << "]" << std::endl;
+ std::cout << "ulFirstBlkRec = [" << ulFirstBlkRec << "]" << std::endl;
+ std::cout << "ulRecCnt = [" << ulRecCnt << "]" << std::endl;
+ std::cout << "bEof = [" << bEof << "]" << std::endl;
+}
+#endif // XB_DEBUG_SUPPORT
+/************************************************************************/
+//! @brief Get the first record number in the current block.
+/*!
+ Retrieve the first record numer in the current block.<br>
+
+ \returns First record number in the current block.
+*/
+
+xbUInt32 xbBlockRead::GetBlockFirstRecNo() const{
+ return ulFirstBlkRec;
+}
+/************************************************************************/
+//! @brief Get record for specified record number.
+/*!
+ Retrieve a record from read block buffer and copy it into the record buffer.
+ If the current record is not in the current block, the routine calls
+ GetBlockForRecNo to load the currect block from disk.<br><br>
+ For performance reasons, this method assumes a valid record number has been
+ passed.<br><br>
+
+ \param ulRecNo - Record number to retrieve.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbBlockRead::GetRecord( xbUInt32 ulRecNo ){
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+
+ // std::cout << "xbBlockRead::GetRecord( " << ulRecNo << ")\n";
+
+ try{
+ if( !( ulRecNo >= ulFirstBlkRec && ulRecNo < (ulFirstBlkRec + ulRecCnt))){
+ if(( iRc = GetBlockForRecNo( ulRecNo )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ }
+ char *s = pBlock;
+ s += (ulRecNo - ulFirstBlkRec) * dbf->GetRecordLen();
+ char *t = dbf->RecBuf;
+ xbUInt32 ulRecLen = dbf->GetRecordLen();
+ for( xbUInt32 l = 0; l < ulRecLen; l++ ){
+ *t = *s;
+ t++;
+ s++;
+ }
+ dbf->ulCurRec = ulRecNo;
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbBlockRead::GetBlockForRecNo() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ dbf->GetXbasePtr()->WriteLogMessage( sMsg.Str() );
+ dbf->GetXbasePtr()->WriteLogMessage( dbf->GetXbasePtr()->GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/************************************************************************/
+//! @brief Get record for specified record number.
+/*!
+ Retrieve a block containing specified record. This routine calculates the
+ correct block in the DBF file, updates the internal block fields and retrieves
+ the block of records from disk and loads into the block buffer.<br><br>
+
+ \param ulRecNo - Record number to retrieve.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbBlockRead::GetBlockForRecNo( xbUInt32 ulRecNo ){
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+
+ try{
+ xbUInt32 ulDbfRecCnt;
+
+ if(( iRc = dbf->GetRecordCnt( ulDbfRecCnt )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+
+ // calc to determine block number for the requested record, 0 based offset
+ xbUInt32 ulBlockNo = (xbUInt32)(ulRecNo / ulMaxRecs);
+ if( ulRecNo % ulMaxRecs == 0 ) ulBlockNo--;
+
+ // calc the first record
+ ulFirstBlkRec = (ulBlockNo * ulMaxRecs);
+
+ // calc the record count
+ if(( ulFirstBlkRec + ulMaxRecs) > ulDbfRecCnt ){
+ ulRecCnt = ulDbfRecCnt - ulFirstBlkRec;
+ bEof = xbTrue;
+ } else {
+ ulRecCnt = ulMaxRecs;
+ bEof = xbFalse;
+ }
+
+ // position accordingly
+ xbInt64 ulStartPos = dbf->GetHeaderLen() + ((xbInt64) ulFirstBlkRec * dbf->GetRecordLen());
+ if(( dbf->xbFseek( ulStartPos, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ iRc = XB_SEEK_ERROR;
+ throw iRc;
+ }
+
+ if(( dbf->GetFileMtime( tFmTime )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ // read it
+ if(( dbf->xbFread( (void *) pBlock, ulRecCnt * dbf->GetRecordLen(), 1 )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+
+ ulFirstBlkRec++; // zero offset in the routine, regular record number from ths point forward
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbBlockRead::GetBlockForRecNo() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ dbf->GetXbasePtr()->WriteLogMessage( sMsg.Str() );
+ dbf->GetXbasePtr()->WriteLogMessage( dbf->GetXbasePtr()->GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/************************************************************************/
+//! @brief Get the current block size.
+/*!
+ Retrieve the current block size.<br><br>
+
+ \returns Current Block Size.
+*/
+
+xbUInt32 xbBlockRead::GetBlockSize() const{
+ return ulBlkSize;
+}
+
+/************************************************************************/
+//! @brief Get the current block record count.
+/*!
+ Retrieve the current number of records loaded in the block.<br><br>
+
+ \returns Current Block Size.
+*/
+
+xbUInt32 xbBlockRead::GetBlockRecCnt() const {
+ return ulRecCnt;
+}
+
+/************************************************************************/
+//! @brief Init the block processing for a iven DBF file.
+/*!
+ Initialize the settings for a given DBF file.<br>
+ This routine may adjust the block size as needed to eliminate unused
+ memory or adjust it bigger if too small.
+
+ \param ulRecNo - ulBlockSize - Block size to allocate. If 0 or missing, it uses default block size of 32K.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbBlockRead::Init(xbUInt32 ulBlockSize ){
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+
+ try{
+
+ // calculate the block size
+ if( ulBlockSize == 0 )
+ ulBlkSize = dbf->GetXbasePtr()->GetDefaultBlockReadSize();
+
+ // if not big enough to handle more than one record, bump it up to something meaningful
+ if( ulBlkSize < (xbUInt32)(dbf->GetRecordLen() * 2 ))
+ ulBlkSize = (xbUInt32) dbf->GetRecordLen() * 10;
+
+ ulMaxRecs = (xbUInt32) ulBlkSize / dbf->GetRecordLen();
+ ulBlkSize = ulMaxRecs * dbf->GetRecordLen();
+
+ // allocate memory for the block
+ if(( pBlock = (char *) calloc( 1, ulBlkSize )) == NULL ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbBlockRead::Init() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ dbf->GetXbasePtr()->WriteLogMessage( sMsg.Str() );
+ dbf->GetXbasePtr()->WriteLogMessage( dbf->GetXbasePtr()->GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/************************************************************************/
+//! @brief Set the block size.
+/*!
+ St block size for this DBF file.<br>.
+
+ \param ulBlkSize - Block Size.
+ \returns XB_NO_ERROR
+*/
+
+xbInt16 xbBlockRead::SetBlockSize( xbUInt32 ulBlkSize ){
+ this->ulBlkSize = ulBlkSize;
+ return XB_NO_ERROR;
+}
+
+/************************************************************************/
+} /* namespace */
+#endif /* XB_BLOCKREAD_SUPPORT */ \ No newline at end of file
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/core/xbdate.cpp b/1Tdata/xbase/xbase64-4.1.4/src/core/xbdate.cpp
new file mode 100755
index 0000000..54834ac
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/core/xbdate.cpp
@@ -0,0 +1,867 @@
+/* xbdate.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+#include "xbase.h"
+#include <time.h>
+
+namespace xb{
+
+int xbDate::iDaysInMonths[2][13];
+int xbDate::iAggregatedDaysInMonths[2][13];
+
+/*************************************************************************/
+//! @brief Constructor.
+
+xbDate::xbDate() {
+ sDate8.Set( "" );
+ SetDateTables();
+}
+
+/*************************************************************************/
+//! @brief Constructor.
+/*!
+ \param iInitOpt - Constructor to use to initialize date static variables
+ Called by the main xbXbase::xbXBase constructor
+*/
+
+xbDate::xbDate( xbUInt16 ) {
+
+ SetDateTables();
+ Sysdate();
+}
+/*************************************************************************/
+//! @brief Constructor.
+/*!
+ \param sDate8In - Input date.
+*/
+
+xbDate::xbDate( const xbString & sDate8In ) {
+
+ if( DateIsValid( sDate8In ))
+ sDate8.Set( sDate8In );
+ else
+ sDate8.Set( "" );
+
+ // SetDateTables();
+}
+
+/*************************************************************************/
+//! @brief Constructor.
+/*!
+ \param sDate8In - Input date.
+*/
+xbDate::xbDate( const char * sDate8In ) {
+
+ if( DateIsValid( sDate8In ))
+ sDate8.Set( sDate8In );
+ else
+ sDate8.Set( "" );
+
+ // SetDateTables();
+}
+
+/*************************************************************************/
+//! @brief Constructor.
+/*!
+ \param lJulDate - Input julian date.
+*/
+xbDate::xbDate( xbInt32 lJulDate ) {
+ // SetDateTables();
+ JulToDate8( lJulDate );
+}
+
+/*************************************************************************/
+//! @brief Destructor.
+xbDate::~xbDate(){}
+/*************************************************************************/
+//! @brief Set operator=
+/*!
+ \param dt - Date value for set operation.
+*/
+void xbDate::operator=( const xbDate & dt ){
+ sDate8.Set( dt.Str());
+}
+/*************************************************************************/
+//! @brief operator +=
+/*!
+ This routine adds lDays to the date if the date is not null.
+ \param lDays - Number of days to add to the date.
+*/
+void xbDate::operator+=( xbInt32 lDays ){
+ if( !IsNull() )
+ JulToDate8( JulianDays() + lDays );
+}
+/*************************************************************************/
+//! @brief operator -=
+/*!
+ This routine subtracts lDays from the date if the date is not null.
+ \param lDays - Number of days to subtract from the date.
+*/
+void xbDate::operator-=( xbInt32 lDays ){
+ if( !IsNull() )
+ JulToDate8( JulianDays() - lDays );
+}
+/*************************************************************************/
+//! @brief operator ++
+/*!
+ This routine adds one day to the date field if the date is not null.
+*/
+void xbDate::operator++(xbInt32){
+ if( !IsNull() )
+ *this+=1;
+}
+/*************************************************************************/
+//! @brief operator --
+/*!
+ This routine subtracts one day from the date field if the date is not null.
+*/
+void xbDate::operator--(xbInt32){
+ if( !IsNull())
+ *this-=1;
+}
+/*************************************************************************/
+//! @brief operator -
+/*!
+ This routine subtracts one date from another date returning the difference.
+ \param dt - Date to subtract
+ \returns Number of days difference or zero if one of the dates is null.
+*/
+xbInt32 xbDate::operator-( const xbDate &dt ) const{
+ if( !IsNull() && !dt.IsNull() )
+ return JulianDays() - dt.JulianDays();
+ else
+ return 0;
+}
+/*************************************************************************/
+//! @brief operator +
+/*!
+ This routine adds additional days to a valid date field.
+ \param lCount - Number of days to add.
+ \returns New date in CCYYMMDD format.
+*/
+const char *xbDate::operator+( xbInt32 lCount ){
+ if( !IsNull() )
+ JulToDate8( JulianDays() + lCount );
+ return sDate8.Str();
+}
+/*************************************************************************/
+//! @brief operator -
+/*!
+ This routine subtracts days from a valid date field.
+ \param lCount - Number of days to subtract.
+ \returns New date in CCYYMMDD format.
+*/
+const char *xbDate::operator-( xbInt32 lCount ){
+ if( !IsNull() )
+ JulToDate8( JulianDays() - lCount );
+ return sDate8;
+}
+/*************************************************************************/
+//! @brief operator ==
+/*!
+ This routine compares two dates for equality.
+ \param dt - Date to compare.
+ \returns xbTrue - Dates match.<br>xbFalse - Dates don't match.
+*/
+xbBool xbDate::operator==( const xbDate &dt ) const{
+ if( JulianDays() == dt.JulianDays() )
+ return xbTrue;
+ else
+ return xbFalse;
+}
+/*************************************************************************/
+//! @brief operator !=
+/*!
+ This routine compares two dates for inequality.
+ \param dt - Date to compare.
+ \returns xbTrue - Dates don't match.<br>xbFalse - Dates match.
+*/
+xbBool xbDate::operator!=( const xbDate &dt ) const{
+ if( JulianDays() != dt.JulianDays() )
+ return xbTrue;
+ else
+ return xbFalse;
+}
+/*************************************************************************/
+//! @brief operator <
+/*!
+ This routine compares two dates
+ \param dt - Date to compare.
+ \returns xbTrue - Left date is less than right date.<br>
+ xbFalse - Left date is not less than right date.
+*/
+xbBool xbDate::operator<( const xbDate &dt ) const {
+ if( JulianDays() < dt.JulianDays() )
+ return xbTrue;
+ else
+ return xbFalse;
+}
+/*************************************************************************/
+//! @brief >
+/*!
+ This routine compares two dates
+ \param dt - Date to compare.
+ \returns xbTrue - Left date is greater than right date.<br>
+ xbFalse - Left date is not greater than right date.
+*/
+xbBool xbDate::operator>( const xbDate &dt ) const {
+ if( JulianDays() > dt.JulianDays() )
+ return xbTrue;
+ else
+ return xbFalse;
+}
+/*************************************************************************/
+//! @brief operator <=
+/*!
+ This routine compares two dates
+ \param dt - Date to compare.
+ \returns xbTrue - Left date is less than or equal to right date.<br>
+ xbFalse - Left date is not less than or equal to right date.
+*/
+xbBool xbDate::operator<=( const xbDate &dt ) const {
+ if( JulianDays() <= dt.JulianDays() )
+ return xbTrue;
+ else
+ return xbFalse;
+}
+/*************************************************************************/
+//! @brief operator >=
+/*!
+ This routine compares two dates
+ \param dt - Date to compare.
+ \returns xbTrue - Left date is greater than or equal to right date.<br>
+ xbFalse - Left date is not greater than or equal to right date.
+*/
+xbBool xbDate::operator>=( const xbDate &dt ) const {
+ if( JulianDays() >= dt.JulianDays() )
+ return xbTrue;
+ else
+ return xbFalse;
+}
+/*************************************************************************/
+//! @brief Calculate century for a given year.
+/*!
+ This routine calculates a century for a given year. It uses an 80/20
+ rolling date window to calculate the century.
+
+ \param iCalcYear - Two digit year to calculate a century for.
+ \returns Century calculated for the two digit year.
+*/
+xbInt16 xbDate::CalcRollingCenturyForYear( xbInt16 iCalcYear ) const {
+
+ xbDate d;
+ d.Sysdate();
+ xbInt16 iThisYear = d.YearOf();
+ xbInt16 iThisCentury = d.CenturyOf();
+ iThisYear -= (iThisCentury * 100);
+ if( iThisYear < 80 && iCalcYear < (iThisYear+20) )
+ return iThisCentury;
+ else if( iThisYear >= 80 &&
+ iCalcYear < iThisYear &&
+ iCalcYear >= (iThisYear-80))
+ return iThisCentury;
+ else
+ return iThisCentury - 1;
+}
+/*************************************************************************/
+//! @brief Get century for date.
+/*!
+ \returns the century from the valid date.\ or 0 for a null date.
+*/
+xbInt16 xbDate::CenturyOf() const {
+ if( !IsNull() ){
+ char Century[3];
+ Century[0] = sDate8[1];
+ Century[1] = sDate8[2];
+ Century[2] = 0x00;
+ return( atoi( Century ));
+ } else {
+ return 0;
+ }
+}
+/*************************************************************************/
+//! @brief Get the day of the week.
+/*!
+ \param sOutCharDay - Output character day of week (Sun-Sat).
+ \returns XB_INVALID_DATE<br>XB_NO_ERROR
+*/
+xbInt16 xbDate::CharDayOf( xbString &sOutCharDay ) {
+
+ if( !IsNull()){
+ struct tm tblock;
+ char buf[25];
+
+ tblock.tm_year = YearOf() - 1900;
+ tblock.tm_mon = MonthOf() - 1;
+ tblock.tm_mday = DayOf( XB_FMT_MONTH );
+ tblock.tm_hour = 0;
+ tblock.tm_min = 0;
+ tblock.tm_sec = 1;
+ tblock.tm_isdst = -1;
+ if( mktime( &tblock ) == -1 ){
+ sOutCharDay = "" ;
+ return XB_INVALID_DATE;
+ } else {
+ strftime( buf, 25, "%A", &tblock );
+ sOutCharDay = buf;
+ }
+ }
+ return XB_NO_ERROR;;
+}
+/*************************************************************************/
+//! @brief Get the month from the date.
+/*!
+ \param sOutCharMonth - Output character month.
+ \returns XB_INVALID_DATE<br>XB_NO_ERROR
+*/
+xbInt16 xbDate::CharMonthOf( xbString &sOutCharMonth ) {
+
+ if( !IsNull()){
+ struct tm tblock;
+ char buf[25];
+ tblock.tm_year = YearOf() - 1900;
+ tblock.tm_mon = MonthOf() - 1;
+ tblock.tm_mday = DayOf( XB_FMT_MONTH );
+ tblock.tm_hour = 0;
+ tblock.tm_min = 0;
+ tblock.tm_sec = 1;
+ tblock.tm_isdst = -1;
+ if( mktime( &tblock ) == -1 ){
+ sOutCharMonth = "";
+ return XB_INVALID_DATE;
+ } else {
+ strftime( buf, 25, "%B", &tblock );
+ sOutCharMonth = buf;
+ }
+ }
+ return XB_NO_ERROR;
+}
+/*************************************************************************/
+//! @brief Check a date for valid data.
+/*!
+ \param sDateIn - Date to check for valid formaat of CCYYMMDD.
+ \returns xbTrue - Valid date.<br>xbFalse - Not a valid date.
+*/
+xbBool xbDate::DateIsValid( const xbString &sDateIn ) const {
+
+ xbInt16 iYear, iMonth, iDay;
+ char sYear[5];
+ char sMonth[3];
+ char sDay[3];
+
+ if( sDateIn.Len() != 8 )
+ return xbFalse;
+
+ if(!isdigit( sDateIn[1] ) || !isdigit( sDateIn[2] ) || !isdigit( sDateIn[3] ) ||
+ !isdigit( sDateIn[4] ) || !isdigit( sDateIn[5] ) || !isdigit( sDateIn[6] ) ||
+ !isdigit( sDateIn[7] ) || !isdigit( sDateIn[8] ) )
+ return xbFalse;
+
+ sDay[0] = sDateIn[7];
+ sDay[1] = sDateIn[8];
+ sDay[2] = 0x00;
+ iDay = atoi( sDay );
+
+ sMonth[0] = sDateIn[5];
+ sMonth[1] = sDateIn[6];
+ sMonth[2] = 0x00;
+ iMonth = atoi( sMonth );
+
+ sYear[0] = sDateIn[1];
+ sYear[1] = sDateIn[2];
+ sYear[2] = sDateIn[3];
+ sYear[3] = sDateIn[4];
+ sYear[4] = 0x00;
+ iYear = atoi( sYear );
+
+ // valid years are 0001 thru 9999
+ if( iYear < 1 || iYear > 9999 || iMonth < 1 || iMonth > 12 || iDay < 1 || iDay > 31 )
+ return xbFalse;
+
+ // April, June, September and November have 30 days
+ if(( iMonth==4 || iMonth==6 || iMonth==9 || iMonth==11 )&& iDay > 30 )
+ return xbFalse;
+
+ // check for February with leap year
+ if( iMonth == 2 ){
+ if(( iYear % 4 == 0 && iYear % 100 != 0 ) || iYear % 400 == 0 ){
+ if( iDay > 29 ){
+ return xbFalse;
+ }
+ } else if( iDay > 28 ){
+ return xbFalse;
+ }
+ }
+ return xbTrue;
+}
+
+/*************************************************************************/
+//! @brief
+/*!
+ This routine returns the numeric day.
+ \param iFormat
+ XB_FMT_WEEK Number of day in WEEK 0-6 ( Sat - Fri )<br>
+ XB_FMT_MONTH Number of day in MONTH 1-31<br>
+ XB_FMT_YEAR Number of day in YEAR 1-366
+ \returns XB_INVALID_OPTION<br>XB_NO_ERROR
+*/
+
+xbInt16 xbDate::DayOf( xbInt16 iFormat ) const {
+
+ if( !IsNull()){
+ xbInt16 iOutDay = 0;
+ char sDay[3];
+ xbInt16 iDay, iMonth, iYear, iDay2;
+
+ // check for valid format switch
+ if( iFormat!=XB_FMT_WEEK && iFormat!=XB_FMT_MONTH && iFormat!=XB_FMT_YEAR )
+ return XB_INVALID_OPTION;
+
+ if( iFormat == XB_FMT_WEEK ){
+ //DayOf( XB_FMT_MONTH, iDay );
+ iDay = DayOf( XB_FMT_MONTH );
+ iMonth = MonthOf();
+ iYear = YearOf();
+
+ // The following formula uses Zeller's Congruence to determine the day of the week
+ if( iMonth > 2 ) // init to February
+ iMonth -= 2;
+ else {
+ iMonth += 10;
+ iYear--;
+ }
+ iDay2 = ((13 * iMonth - 1) / 5) + iDay + ( iYear % 100 ) +
+ (( iYear % 100 ) / 4) + ((iYear /100 ) / 4 ) - 2 *
+ ( iYear / 100 ) + 77 ;
+
+ iOutDay = iDay2 - 7 * ( iDay2 / 7 );
+ iOutDay == 6 ? iOutDay = 0 : iOutDay++;
+ }
+ else if( iFormat == XB_FMT_MONTH ){
+ sDay[0] = sDate8[7];
+ sDay[1] = sDate8[8];
+ sDay[2] = 0x00;
+ iOutDay = atoi( sDay );
+ } else {
+ iOutDay = iAggregatedDaysInMonths[IsLeapYear()][MonthOf()-1] + DayOf( XB_FMT_MONTH );
+ }
+ return iOutDay;
+ } else {
+ return 0;
+ }
+}
+/*************************************************************************/
+#ifdef XB_DEBUG_SUPPORT
+//! @brief Dump date information to stdout.
+/*!
+ \param sTitle - Title for output.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+void xbDate::Dump( const char *sTitle ){
+ fprintf( stdout, "%s\n sDate = [%s]\n", sTitle, sDate8.Str() );
+}
+
+/*************************************************************************/
+//! @brief Dump the date tables.
+/*!
+ This dumps the internal date structures to stdout.
+ \returns void
+*/
+
+void xbDate::DumpDateTables(){
+ fprintf( stdout, "Date Tables\n" );
+ fprintf( stdout, "Month *-Aggragated Days-* *--Days In Month--*\n" );
+ fprintf( stdout, " *-NonLeap Leap-* *--NonLeap Leap--*\n" );
+ for( int i = 1; i < 13; i++ )
+ fprintf( stdout, " %2d %3d %3d %3d %3d\n", i,
+ iAggregatedDaysInMonths[0][i],iAggregatedDaysInMonths[1][i],
+ iDaysInMonths[0][i], iDaysInMonths[1][i]);
+}
+#endif
+
+/*************************************************************************/
+//! @brief Format MM/DD/YY date
+/*!
+ This routine takes an MM/DD/YY format date as input and populates a
+ date class with the appropriate YYYYMMDD data.
+
+ \param sCtodInDate - MM/DD/YY formatted date as input.
+ \returns XB_INVALID_OPTION<br>XB_NO_ERROR
+*/
+xbInt16 xbDate::CTOD( const xbString &sCtodInDate ){
+
+ if( sCtodInDate[1] != ' ' && ( sCtodInDate[3] == '\\' || sCtodInDate[3] == '/') ){
+ char yy[3];
+ yy[0] = sCtodInDate[7];
+ yy[1] = sCtodInDate[8];
+ yy[2] = 0x00;
+ sDate8.Sprintf( "%02d%c%c%c%c%c%c", CalcRollingCenturyForYear( atoi( yy )),
+ sCtodInDate[7], sCtodInDate[8], sCtodInDate[1], sCtodInDate[2], sCtodInDate[4], sCtodInDate[5] );
+ return XB_NO_ERROR;
+ }
+ else{
+ return XB_INVALID_DATE;
+ }
+}
+/*************************************************************************/
+//! @brief
+/*!
+ This routine will reformat a date based on the format specifiers entered
+ in sFmtIn. If no input format is specified, the routine will use the
+ system default date format.
+
+ \param sFmtIn - A format specifier with the following paramaters:<br>
+
+ 1) YYDDD - A julian date format
+ 2) YY or YYYY will print a 2 or 4 digit year
+ 3) M,MM,MMM or MMMM
+ M - one digit month if no leading zero
+ MM - two digit month, contains leading zero
+ MMM - Jan through Dec
+ MMMM - January through December
+ 4) D,DD,DDD or DDDD
+ D - one digit dayif no leading zero
+ DD - two digit day, contains leading zero
+ DDD - Sun through Sat (or julian if YYDDD)
+ DDDD - Sunday through Saturday
+
+ \param sOutFmtDate - Reformatted output date.
+ \returns XB_NO_ERROR
+ <br><br>
+ Format Examples:<br>
+ MM/DD/YY<br>
+ YYYY-MM-DD<br>
+ DDDDDDDDDDD MMMMMMMMMMM DD,YYYY
+*/
+xbInt16 xbDate::FormatDate( const xbString &sFmtIn, xbString &sOutFmtDate ){
+ xbUInt32 FmtCtr;
+ char type;
+ xbUInt32 iTypeCtr;
+ xbString ws;
+ xbString sWrkFmt;
+ sOutFmtDate = "";
+
+ if( IsNull())
+ return XB_NO_ERROR;
+
+ /* use format for this specific string if available, else use default format */
+ if( strlen( sFmtIn ) > 0 )
+ sWrkFmt = sFmtIn;
+ else
+ sWrkFmt = GetDefaultDateFormat();
+
+ if( strstr( sWrkFmt.Str(), "YYDDD" )){
+ sOutFmtDate.Sprintf( "%c%c%03d", sDate8[3], sDate8[4], DayOf( XB_FMT_YEAR ));
+ } else {
+ FmtCtr = 1;
+ while( FmtCtr <= sWrkFmt.Len() ){
+ if( sWrkFmt[FmtCtr] != 'D' && sWrkFmt[FmtCtr] != 'M' && sWrkFmt[FmtCtr] != 'Y' ){
+ sOutFmtDate += sWrkFmt[FmtCtr];
+ FmtCtr++;
+ iTypeCtr = 0;
+ } else {
+ type = sWrkFmt[FmtCtr];
+ iTypeCtr = 0;
+ while( sWrkFmt[FmtCtr] == type ) {
+ iTypeCtr++;
+ FmtCtr++;
+ }
+ switch( type ){
+ case 'D':
+
+ if( iTypeCtr == 1 ){
+ sOutFmtDate += ws.Sprintf( "%d", DayOf( XB_FMT_MONTH ));
+ }
+ else if( iTypeCtr == 2 ){
+ sOutFmtDate += ws.Sprintf( "%c%c", sDate8[7], sDate8[8] );
+ } else {
+ xbString sCDO;
+ CharDayOf( sCDO );
+ ws.Assign( sCDO, 1, iTypeCtr );
+ sOutFmtDate += ws.Str();
+ }
+ break;
+
+ case 'M':
+ if( iTypeCtr == 1 ){
+ sOutFmtDate += ws.Sprintf( "%d", MonthOf());
+ }
+ else if( iTypeCtr == 2 ){
+ sOutFmtDate += ws.Sprintf( "%c%c", sDate8[5], sDate8[6] );
+ } else {
+ xbString sCMO;
+ CharMonthOf( sCMO );
+ ws.Assign( sCMO, 1, iTypeCtr );
+ sOutFmtDate += ws.Str();
+ }
+ break;
+
+ case 'Y':
+ if( iTypeCtr == 2 ){
+ sOutFmtDate += ws.Sprintf( "%c%c", sDate8[3], sDate8[4] );
+ }
+ else if( iTypeCtr == 4 ){
+ sOutFmtDate += ws.Sprintf( "%c%c%c%c", sDate8[1], sDate8[2], sDate8[3], sDate8[4] );
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ }
+ return XB_NO_ERROR;
+}
+/*************************************************************************/
+//! @brief Return the date value.
+/*!
+ \returns char ptr to date value.
+*/
+const char * xbDate::Str() const{
+ return sDate8.Str();
+};
+/*************************************************************************/
+//! @brief Determine if date is a leap year.
+/*!
+ \returns xbTrue - Is leapyear.<br> xbFalse - Not a leap year.
+*/
+xbBool xbDate::IsLeapYear() const {
+ if( IsNull() )
+ return xbFalse;
+ xbInt16 iYear = YearOf();
+ if(( iYear % 4 == 0 && iYear % 100 != 0 ) || iYear % 400 == 0 )
+ return xbTrue;
+ else
+ return xbFalse;
+}
+/*************************************************************************/
+//! @brief Determine if date is a leap year.
+/*!
+ \param iYear - Year to check for leap year status.
+ \returns xbTrue - Is leapyear.<br> xbFalse - Not a leap year.
+*/
+xbBool xbDate::IsLeapYear( xbInt16 iYear ) const {
+ if(( iYear % 4 == 0 && iYear % 100 != 0 ) || iYear % 400 == 0 )
+ return xbTrue;
+ else
+ return xbFalse;
+}
+/*************************************************************************/
+//! @brief Determine if date is null date
+/*!
+ \returns xbTrue - If null date.<br> xbFalse - Not a null date.
+*/
+xbBool xbDate::IsNull() const {
+ if( sDate8.Len() < 8 )
+ return xbTrue;
+ else
+ return xbFalse;
+}
+/*************************************************************************/
+//! @brief Calculate julian days for a given date.
+/*!
+ \returns The number of days since 01/01/0001 + JUL_OFFSET.
+*/
+xbInt32 xbDate::JulianDays() const{
+ if( !IsNull()){
+ xbInt32 ly = YearOf() - 1;
+ xbInt32 lDays = ly * 365L + ly / 4L - ly / 100L + ly / 400L;
+ lDays += DayOf( XB_FMT_YEAR );
+ return lDays + JUL_OFFSET;
+ } else {
+ return 0;
+ }
+}
+/*************************************************************************/
+//! @brief Convert the number of julian days to gregorian date.
+/*!
+ \param lJulDays - Julian days.
+ \returns XB_NO_ERROR
+*/
+xbInt16 xbDate::JulToDate8( xbInt32 lJulDays )
+{
+ lJulDays -= JUL_OFFSET;
+ // calculate the year
+ xbInt16 iYear = (xbInt16)(lJulDays / 365.24 );
+ lJulDays -= (iYear * 365L) + (iYear / 4L) - (iYear / 100L) + (iYear / 400L);
+ iYear++;
+ while( lJulDays <= 0 ){
+ iYear--;
+ lJulDays += (365L + IsLeapYear( iYear ));
+ }
+ // this for loop calculates the month by comparing the number of days remaining to one of the tables
+ xbInt16 iIsLeap = IsLeapYear(iYear);
+ xbInt16 iMonth = 1;
+ while( ((xbInt16) lJulDays > iAggregatedDaysInMonths[iIsLeap][iMonth]) && (iMonth < 12) )
+ iMonth++;
+ lJulDays -= iAggregatedDaysInMonths[iIsLeap][iMonth-1];
+ sDate8.Sprintf( "%04d%02d%02ld", iYear, iMonth, lJulDays );
+ return XB_NO_ERROR;
+}
+/*************************************************************************/
+//! @brief Set the date to the last day of month for a given date.
+/*!
+ This routine sets the last date of the month.
+ \returns XB_NO_ERROR
+*/
+xbInt16 xbDate::LastDayOfMonth(){
+ if( !IsNull())
+ sDate8.Sprintf( "%4.4d%2.2d%2.2d", YearOf(), MonthOf(), iDaysInMonths[IsLeapYear()][MonthOf()]);
+ return XB_NO_ERROR;
+};
+/*************************************************************************/
+//! @brief Return the month for the date.
+/*!
+ \returns The month of the date.
+*/
+xbInt16 xbDate::MonthOf() const {
+ if( !IsNull()){
+ xbInt16 iOutMonth;
+ char month[3];
+ month[0] = sDate8[5];
+ month[1] = sDate8[6];
+ month[2] = 0x00;
+ iOutMonth = atoi( month );
+ return iOutMonth;
+ } else {
+ return 0;
+ }
+}
+
+/*************************************************************************/
+//! @brief Set the date.
+/*!
+ \param sDateIn - Input date.
+ \returns XB_NO_ERROR
+*/
+xbInt16 xbDate::Set( const xbString & sDateIn ){
+
+ if( DateIsValid( sDateIn )){
+ sDate8 = sDateIn;
+ } else {
+ sDate8 = ""; // set to null date if invalid date
+ }
+ return XB_NO_ERROR;
+}
+/*************************************************************************/
+//! @brief This routine sets up static data tables on startup.
+/*!
+ \returns void
+*/
+void xbDate::SetDateTables() {
+ if( iAggregatedDaysInMonths[1][12] != 366 ){ /* first time called ? */
+
+ iAggregatedDaysInMonths[0][0] = 0;
+ iAggregatedDaysInMonths[0][1] = 31;
+ iAggregatedDaysInMonths[0][2] = 59;
+ iAggregatedDaysInMonths[0][3] = 90;
+ iAggregatedDaysInMonths[0][4] = 120;
+ iAggregatedDaysInMonths[0][5] = 151;
+ iAggregatedDaysInMonths[0][6] = 181;
+ iAggregatedDaysInMonths[0][7] = 212;
+ iAggregatedDaysInMonths[0][8] = 243;
+ iAggregatedDaysInMonths[0][9] = 273;
+ iAggregatedDaysInMonths[0][10] = 304;
+ iAggregatedDaysInMonths[0][11] = 334;
+ iAggregatedDaysInMonths[0][12] = 365;
+ iAggregatedDaysInMonths[1][0] = 0;
+ iAggregatedDaysInMonths[1][1] = 31;
+ iAggregatedDaysInMonths[1][2] = 60;
+ iAggregatedDaysInMonths[1][3] = 91;
+ iAggregatedDaysInMonths[1][4] = 121;
+ iAggregatedDaysInMonths[1][5] = 152;
+ iAggregatedDaysInMonths[1][6] = 182;
+ iAggregatedDaysInMonths[1][7] = 213;
+ iAggregatedDaysInMonths[1][8] = 244;
+ iAggregatedDaysInMonths[1][9] = 274;
+ iAggregatedDaysInMonths[1][10] = 305;
+ iAggregatedDaysInMonths[1][11] = 335;
+ iAggregatedDaysInMonths[1][12] = 366;
+
+ iDaysInMonths[0][0] = 0;
+ iDaysInMonths[0][1] = 31;
+ iDaysInMonths[0][2] = 28;
+ iDaysInMonths[0][3] = 31;
+ iDaysInMonths[0][4] = 30;
+ iDaysInMonths[0][5] = 31;
+ iDaysInMonths[0][6] = 30;
+ iDaysInMonths[0][7] = 31;
+ iDaysInMonths[0][8] = 31;
+ iDaysInMonths[0][9] = 30;
+ iDaysInMonths[0][10] = 31;
+ iDaysInMonths[0][11] = 30;
+ iDaysInMonths[0][12] = 31;
+ iDaysInMonths[1][0] = 0;
+ iDaysInMonths[1][1] = 31;
+ iDaysInMonths[1][2] = 29;
+ iDaysInMonths[1][3] = 31;
+ iDaysInMonths[1][4] = 30;
+ iDaysInMonths[1][5] = 31;
+ iDaysInMonths[1][6] = 30;
+ iDaysInMonths[1][7] = 31;
+ iDaysInMonths[1][8] = 31;
+ iDaysInMonths[1][9] = 30;
+ iDaysInMonths[1][10] = 31;
+ iDaysInMonths[1][11] = 30;
+ iDaysInMonths[1][12] = 31;
+ }
+}
+/*************************************************************************/
+//! @brief Set the date equal to the system date.
+/*!
+ \returns XB_NO_ERROR
+*/
+xbInt16 xbDate::Sysdate(){
+
+ #ifdef HAVE__LOCALTIME64_S_F
+ __time64_t timer;
+ _time64( &timer );
+ struct tm tblock;
+ _localtime64_s( &tblock, &timer );
+ tblock.tm_year += 1900;
+ tblock.tm_mon++;
+ sDate8.Sprintf( "%4d%02d%02d", tblock.tm_year, tblock.tm_mon, tblock.tm_mday );
+ #else
+ time_t timer;
+ timer = time( &timer );
+ struct tm *tblock;
+ tblock = localtime( &timer );
+ tblock->tm_year += 1900;
+ tblock->tm_mon++;
+ sDate8.Sprintf( "%4d%02d%02d",tblock->tm_year,tblock->tm_mon,tblock->tm_mday );
+ #endif
+
+ return XB_NO_ERROR;
+}
+/*************************************************************************/
+//! @brief Returns the year of the date.
+/*!
+ \returns The year of the date.
+*/
+xbInt16 xbDate::YearOf() const {
+ if( !IsNull()){
+ char year[5];
+ year[0] = sDate8[1];
+ year[1] = sDate8[2];
+ year[2] = sDate8[3];
+ year[3] = sDate8[4];
+ year[4] = 0x00;
+ xbInt16 iOutYear = atoi( year );
+ return iOutYear;
+ } else {
+ return 0;
+ }
+};
+} /* namespace */ \ No newline at end of file
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/core/xbdbf.cpp b/1Tdata/xbase/xbase64-4.1.4/src/core/xbdbf.cpp
new file mode 100755
index 0000000..8904a6d
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/core/xbdbf.cpp
@@ -0,0 +1,4533 @@
+/* xbdbf.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+#include "xbase.h"
+
+
+namespace xb{
+
+/************************************************************************/
+//! @brief Constructor
+/*!
+ \param x Pointer to xbXbase
+*/
+xbDbf::xbDbf( xbXBase * x ) : xbFile( x ){
+ xbase = x;
+ SchemaPtr = NULL;
+ RecBuf = NULL;
+ RecBuf2 = NULL;
+
+ #ifdef XB_BLOCKREAD_SUPPORT
+ pRb = NULL;
+ bBlockReadEnabled = xbFalse; // batch read switch, if xbTrue, then ON
+ #endif // XB_BLOCKREAD_SUPPORT
+
+ InitVars();
+}
+/************************************************************************/
+void xbDbf::InitVars()
+{
+ iNoOfFields = 0;
+ iDbfStatus = XB_CLOSED;
+ ulCurRec = 0L;
+ cVersion = 0x00;
+ cUpdateYY = 0x00;
+ cUpdateMM = 0x00;
+ cUpdateDD = 0x00;
+ ulNoOfRecs = 0L;
+ uiHeaderLen = 0x00;
+ uiRecordLen = 0x00;
+ cTransactionFlag = 0x00;
+ cEncryptionFlag = 0x00;
+ cIndexFlag = 0x00;
+ cLangDriver = 0x00;
+ iFileVersion = 0; /* Xbase64 file version */
+ iAutoCommit = -1;
+
+ SetFileName ( "" );
+ sAlias.Set ( "" );
+ SetDirectory ( GetDataDirectory());
+
+ #ifdef XB_LOCKING_SUPPORT
+ iLockFlavor = -1;
+ bTableLocked = xbFalse;
+ bHeaderLocked = xbFalse;
+ ulAppendLocked = 0;
+ SetAutoLock( -1 );
+ lloRecLocks.SetDupKeys( xbFalse );
+ #endif // XB_LOCKING_SUPPORT
+
+ #ifdef XB_INDEX_SUPPORT
+ ixList = NULL;
+ pCurIx = NULL;
+ vpCurIxTag = NULL;
+ sCurIxType = "";
+ ClearTagList();
+ #endif // XB_INDEX_SUPPORT
+
+ #ifdef XB_MEMO_SUPPORT
+ Memo = NULL;
+ #endif // XB_MEMO_SUPPORT
+
+ #ifdef XB_INF_SUPPORT
+ llInfData.Clear();
+ #endif // XB_INF_SUPPORT
+}
+
+/************************************************************************/
+//! @brief Destructor
+xbDbf::~xbDbf(){
+
+ // is there is an uncommited update, discard it.
+ // as we don't know if it is an append or an update
+ if( iDbfStatus == XB_UPDATED )
+ Abort();
+
+ if( iDbfStatus != XB_CLOSED )
+ Close();
+
+ if( SchemaPtr ){
+ free( SchemaPtr );
+ SchemaPtr = NULL;
+ }
+ if( RecBuf ){
+ free( RecBuf );
+ RecBuf = NULL;
+ }
+ if( RecBuf2){
+ free( RecBuf2 );
+ RecBuf2 = NULL;
+ }
+ if( RecBuf ){
+ free( RecBuf );
+ RecBuf = NULL;
+ }
+
+ #ifdef XB_BLOCKREAD_SUPPORT
+ if( bBlockReadEnabled )
+ DisableBlockReadProcessing();
+ #endif // XB_BLOCKREAD_SUPPORT
+
+ Close();
+}
+/************************************************************************/
+//! @brief Abort any uncommited changes for the current record buffer.
+/*!
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbDbf::Abort(){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+
+ try{
+ if( iDbfStatus == XB_UPDATED ){
+ #ifdef XB_MEMO_SUPPORT
+ if( MemoFieldsExist()){
+ if(( iRc = Memo->Abort()) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ }
+ #endif
+ memcpy( RecBuf, RecBuf2, uiRecordLen );
+ iDbfStatus = XB_OPEN;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbdbf::Abort() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+/************************************************************************/
+#ifdef XB_INDEX_SUPPORT
+//! @brief Add an index to the internal list of indices for this table.
+/*!
+ The index list is used during any table update process to update any open
+ index file. Index files can contain one or more tags. Temporary tags
+ are not included here because they are created after a table is open
+ and will be deleted when the table is closed.
+
+ \param ixIn Pointer to index object for a given index file.
+ \param sFmt NDX, MDX or TDX.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+
+*/
+
+xbInt16 xbDbf::AddIndex( xbIx * ixIn, const xbString &sFmt ){
+
+ xbIxList *ixt; // this
+ if(( ixt = (xbIxList *) malloc( sizeof( xbIxList ))) == NULL )
+ return XB_NO_ERROR;
+
+ ixt->ix = ixIn;
+ ixt->next = NULL;
+ ixt->sFmt = new xbString( sFmt );
+ ixt->sFmt->ToUpperCase();
+
+ if( ixList ){
+ xbIxList *ixn = ixList; // next
+ while( ixn->next ){
+ ixn = ixn->next;
+ }
+ ixn->next = ixt;
+ } else {
+ ixList = ixt;
+ }
+ return XB_NO_ERROR;
+}
+#endif // XB_INDEX_SUPPORT
+
+
+/************************************************************************/
+//! @brief Append the current record to the data file.
+/*!
+ This method attempts to append the contents of the current record buffer
+ to the end of the DBF file, updates the file date, number of records in the file
+ and updates any open indices associated with this data file.<br>
+
+ To add a record, an application would typically blank the record buffer,
+ update various fields in the record buffer, then append the record.<br>
+
+ The append method performs the following tasks:<br>
+ 1) Create new index key values<br>
+ 2) Lock the table<br>
+ 3) Lock append bytes<br>
+ 4) Lock indices<br>
+ 5) Read the dbf header<br>
+ 6) Check for dup keys<br>
+ 7) Calc last update date, no of recs<br>
+ 8) Add keys<br>
+ 9) Unlock indices<br>
+ 10) Update file header<br>
+ 11) Unlock file header<br>
+ 12) Append record<br>
+ 13) Unlock append bytes<br>
+
+Note: Locking memo files is not needed as the memo file updates are handled outside of the append method.<br>
+
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbDbf::AppendRecord(){
+ xbInt16 iErrorStop = 0;
+ xbInt16 iRc = XB_NO_ERROR;
+ xbUInt32 ulSaveCurRec = 0;
+
+ try{
+ #ifdef XB_INDEX_SUPPORT
+ xbIxList *ixList = GetIxList();
+ // do this step first before anything is locked, reduce lock time as much as possible
+ while( ixList ){
+
+ // std::cout << "xbDbf::CreateKeys(x)\n";
+ if(( iRc = ixList->ix->CreateKeys( 1 )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+
+ ixList = ixList->next;
+ }
+ #endif // XB_INDEX_SUPPORT
+
+ // lock everything up for an update
+ #ifdef XB_LOCKING_SUPPORT
+ if( iAutoLock && !bTableLocked ){
+ if(( iRc = LockHeader( XB_LOCK )) != XB_NO_ERROR ){
+ if( iRc == XB_LOCK_FAILED ) {
+ return iRc;
+ } else {
+ iErrorStop = 110;
+ throw iRc;
+ }
+ }
+ if(( iRc = LockAppend( XB_LOCK )) != XB_NO_ERROR ){
+ if( iRc == XB_LOCK_FAILED ){
+ LockHeader( XB_UNLOCK );
+ return iRc;
+ } else {
+ iErrorStop = 120;
+ throw iRc;
+ }
+ }
+
+ #ifdef XB_INDEX_SUPPORT
+ if(( iRc = LockIndices( XB_LOCK )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ #endif // XB_INDEX_SUPPORT
+
+ }
+ #endif // XB_LOCKING_SUPPORT
+ if(( iRc = ReadHeader( 1, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+ #ifdef XB_INDEX_SUPPORT
+ ixList = GetIxList();
+
+ while( ixList ){
+ if(( iRc = ixList->ix->CheckForDupKeys()) != 0 ){
+ if( iRc < 0 ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+ return XB_KEY_NOT_UNIQUE;
+ }
+ ixList = ixList->next;
+ }
+
+ #endif // XB_INDEX_SUPPORT
+
+ // calculate the latest header information
+ xbDate d;
+ d.Sysdate();
+ cUpdateYY = (char) d.YearOf() - 1900;
+ cUpdateMM = (char) d.MonthOf();
+ cUpdateDD = (char) d.DayOf( XB_FMT_MONTH );
+ ulSaveCurRec = ulCurRec;
+ ulNoOfRecs++;
+ ulCurRec = ulNoOfRecs;
+
+ #ifdef XB_INDEX_SUPPORT
+
+
+ ixList = GetIxList();
+ while( ixList ){
+ if(( iRc = ixList->ix->AddKeys( ulCurRec )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+ ixList = ixList->next;
+ }
+
+ #ifdef XB_LOCKING_SUPPORT
+ if( iAutoLock ){
+ if(( iRc = LockIndices( XB_UNLOCK )) != XB_NO_ERROR ){
+ iErrorStop = 170;
+ throw iRc;
+ }
+ }
+ #endif // XB_LOCKING_SUPPORT
+ #endif // XB_INDEX_SUPPORT
+
+ // rewrite the header record
+ if(( iRc = WriteHeader( 1, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 180;
+ throw iRc;
+ }
+
+ #ifdef XB_LOCKING_SUPPORT
+ if( iAutoLock ){
+ if(( iRc = LockHeader( XB_UNLOCK )) != XB_NO_ERROR ){
+ iErrorStop = 190;
+ throw iRc;
+ }
+ }
+ #endif
+
+ // write the last record
+ if(( iRc = xbFseek( (uiHeaderLen+((xbInt64)(ulNoOfRecs-1)*uiRecordLen)), 0 )) != XB_NO_ERROR ){
+ iErrorStop = 200;
+ throw iRc;
+ }
+
+ if(( iRc = xbFwrite( RecBuf, uiRecordLen, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 210;
+ throw iRc;
+ }
+
+ // write the end of file marker
+ if(( iRc = xbFputc( XB_CHAREOF )) != XB_NO_ERROR ){
+ iErrorStop = 220;
+ throw iRc;
+ }
+
+ #ifdef XB_LOCKING_SUPPORT
+ if( iAutoLock ){
+ if(( iRc = LockAppend( XB_UNLOCK )) != XB_NO_ERROR ){
+ iErrorStop = 230;
+ throw( iRc );
+ }
+ }
+ #endif // XB_LOCKING_SUPPORT
+
+ }
+ catch (xbInt16 iRc ){
+ if( ulSaveCurRec != 0 ){
+ ulCurRec = ulSaveCurRec;
+ ulNoOfRecs--;
+ }
+ #ifdef XB_LOCKING_SUPPORT
+ if( iAutoLock ){
+ #ifdef XB_INDEX_SUPPORT
+ LockIndices( XB_UNLOCK );
+ #endif // XB_INDEX_SUPPORT
+ LockAppend( XB_UNLOCK );
+ LockHeader( XB_UNLOCK );
+ }
+ #endif // XB_LOCKING_SUPPORT
+
+ if( iRc != XB_LOCK_FAILED && iRc != XB_KEY_NOT_UNIQUE ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbdbf::Append() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ }
+
+ if( iRc == XB_NO_ERROR )
+ iDbfStatus = XB_OPEN;
+ return iRc;
+}
+
+/************************************************************************/
+#ifdef XB_INF_SUPPORT
+//! @brief Asscoiate a non production index to a DBF file.
+/*!
+
+ The original Dbase (TM) software supported non production indices (NDX) and production indices (MDX).
+ The production indices are opened automatically when the DBF file is opened but the non-production
+ indices are not. This method is specific to the Xbas64 library and providex a means to link non production
+ NDX index files to the DBF file so they will be opened automatically when the DBF file is opened.<br>
+
+ This routine requires INF support be enabled when building the library.<br>
+ This routine creates a file with the same name as the DBF file, but with an extension of INF.<br>
+
+
+ \param sIxType Currently only NDX. Future versions will support additional non prod index types.
+ \param sIxName The index name.
+ \param iOpt 0 - Add index to .INF if not already there<br>
+ 1 - Remove index from .INF if exists
+
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+
+*/
+
+xbInt16 xbDbf::AssociateIndex( const xbString &sIxType, const xbString &sIxName, xbInt16 iOpt ){
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+
+ try{
+ xbString sIxTypeIn = sIxType;
+ sIxTypeIn.Trim();
+ xbString sIxNameIn = sIxName;
+ sIxNameIn.Trim();
+
+ if( sIxTypeIn != "NDX" || sIxName == "" )
+ return XB_INVALID_INDEX;
+
+ if(( iRc = LoadInfData()) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+
+ // check if entry exists
+ xbLinkListNode<xbString> * llN = llInfData.GetHeadNode();
+ xbBool bFound = xbFalse;
+ xbString s;
+
+ while( llN && !bFound ){
+ s = llN->GetKey();
+ if( s.Len() > 0 ){
+ if( sIxNameIn == s )
+ bFound = xbTrue;
+ }
+ llN = llN->GetNextNode();
+ }
+
+ xbBool bUpdated = xbFalse;
+ if( iOpt == 0 && !bFound ){
+ s.Sprintf( "%s%c%c", sIxName.Str(), 0x0d, 0x0a );
+ llInfData.InsertAtEnd( s );
+ bUpdated = xbTrue;
+
+ } else if( iOpt == 1 && bFound ){
+ llInfData.RemoveByVal( s );
+ bUpdated = xbTrue;
+ }
+
+ if( bUpdated ){
+ if(( iRc = SaveInfData()) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ }
+
+ } catch( xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbdbf::AssociateIndex() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+#endif // XB_INF_SUPPORT
+
+/************************************************************************/
+//! @brief Blank the record buffer.
+/*!
+
+ This method would typically be called to initialize the record buffer before
+ updates are applied to append a new record.
+
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbDbf::BlankRecord()
+{
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+
+ try{
+
+ if( iDbfStatus == XB_CLOSED ){
+ iErrorStop = 100;
+ iRc = XB_NOT_OPEN;
+ throw iRc;
+ }
+
+ if( iDbfStatus == XB_UPDATED ){
+ if( GetAutoCommit() == 1 ){
+ if(( iRc = Commit()) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ } else {
+ if(( iRc = Abort()) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ }
+ }
+ ulCurRec = 0;
+ memset( RecBuf, 0x20, uiRecordLen );
+ memset( RecBuf2, 0x20, uiRecordLen );
+ }
+
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbdbf::BlankRecord() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+
+ return iRc;
+}
+/************************************************************************/
+#ifdef XB_INDEX_SUPPORT
+/*!
+ This method is used to check an index tag's intgerity.
+
+ \param iTagOpt 0 - Check current tag<br>
+ 1 - Check all tags<br>
+
+ \param iOutputOpt Output message destination<br>
+ 0 = stdout<br>
+ 1 = Syslog<br>
+ 2 = Both<br>
+
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbDbf::CheckTagIntegrity( xbInt16 iTagOpt, xbInt16 iOutputOpt ){
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+
+ try{
+ if( iTagOpt == 0 ){
+ if( pCurIx )
+ return pCurIx->CheckTagIntegrity( vpCurIxTag, iOutputOpt );
+ else
+ return XB_INVALID_TAG;
+
+ } else {
+
+ xbLinkListNode<xbTag *> *llN = GetTagList();
+ xbTag *pTag;
+
+ while( llN ){
+ pTag = llN->GetKey();
+ if(( iRc = pTag->GetIx()->CheckTagIntegrity( pTag->GetVpTag(), iOutputOpt )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ llN = llN->GetNextNode();
+ }
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbdbf::CheckTagIntegrity() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/************************************************************************/
+/*!
+ This method is used to reindex / rebuild index tag.
+
+ \param iTagOpt 0 - Reindex current tag<br>
+ 1 - Reindex all tags<br>
+ 2 - Reindex for tag identified by vpTag
+ \param iErrorOpt 0 - Don't delete tag on reindex failure<br>
+ 1 - Delete tag on reindex failure
+ \param vpTag if option 2 used, pointer to tag to reindex
+
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbDbf::Reindex( xbInt16 iTagOpt, xbInt16 iErrorOpt, xbIx **ppIx, void **vppTag ){
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ void *vp;
+
+ xbString sType;
+ xbString sTagName;
+
+ if( iTagOpt < 0 || iTagOpt > 2 || (iTagOpt == 2 && (!ppIx || !vppTag )))
+ return XB_INVALID_OPTION;
+
+
+ #ifdef XB_BLOCKREAD_SUPPORT
+ xbBool bOriginalBlockReadSts = GetBlockReadStatus();
+ #endif
+
+ try{
+
+ #ifdef XB_BLOCKREAD_SUPPORT
+ if( !bOriginalBlockReadSts )
+ EnableBlockReadProcessing();
+ #endif
+
+ if( iTagOpt == 0 ){
+ if( pCurIx ){
+
+ if(( iRc = pCurIx->Reindex( &vpCurIxTag )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ return iRc;
+ } else {
+ return XB_INVALID_TAG;
+ }
+
+ } else if( iTagOpt == 1 ) {
+
+ xbLinkListNode<xbTag *> *llN = GetTagList();
+ xbTag *pTag;
+
+ while( llN ){
+ pTag = llN->GetKey();
+ vp = pTag->GetVpTag();
+ if(( iRc = pTag->GetIx()->Reindex( &vp )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ llN = llN->GetNextNode();
+ }
+ } else if( iTagOpt == 2 ){
+
+ // xbIx *pIx;
+ // pIx = *ppIx;
+ xbIx *pIx = *ppIx;
+ // void *vpTag;
+ // vpTag = *vppTag;
+ void *vpTag = *vppTag;
+
+ if(( iRc = pIx->Reindex( &vpTag )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbdbf::Reindex() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+
+ #ifdef XB_BLOCKREAD_SUPPORT
+ if( !bOriginalBlockReadSts )
+ DisableBlockReadProcessing();
+ #endif
+
+ return iRc;
+}
+
+/************************************************************************/
+// @brief Clear the index tag list.
+/*
+ Protected method. Clears the list inf index tags.
+ \returns void.
+*/
+void xbDbf::ClearTagList(){
+
+ xbTag *pTag;
+ xbBool bDone = xbFalse;
+ while( llTags.GetNodeCnt() > 0 && !bDone ){
+ if( llTags.RemoveFromFront( pTag ) != XB_NO_ERROR ){
+ bDone = xbTrue;
+ } else {
+ if( pTag )
+ delete pTag;
+ }
+ }
+}
+#endif // XB_INDEX_SUPPORT
+
+/************************************************************************/
+//! @brief Close DBF file/table.
+/*!
+ This routine flushes any remaining updates to disk, closes the DBF file and
+ any associated memo and index files.
+
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbDbf::Close(){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+
+ try{
+
+ if(iDbfStatus == XB_CLOSED)
+ return XB_NO_ERROR;
+
+ else if( iDbfStatus == XB_UPDATED ){
+
+ if( GetAutoCommit() == 1 ){
+ if(( iRc = Commit()) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ } else {
+ if(( iRc = Abort()) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ }
+ }
+
+ if(SchemaPtr){
+ free( SchemaPtr );
+ SchemaPtr = NULL;
+ }
+ if(RecBuf){
+ free( RecBuf );
+ RecBuf = NULL;
+ }
+ if(RecBuf2){
+ free( RecBuf2 );
+ RecBuf2 = NULL;
+ }
+
+ #ifdef XB_MEMO_SUPPORT
+ if( iMemoFieldCnt > 0 ){
+ Memo->CloseMemoFile();
+ delete Memo;
+ Memo = NULL;
+ }
+ #endif
+
+ // close any open index files, remove from the ix list
+ #ifdef XB_INDEX_SUPPORT
+ while( ixList ){
+ ixList->ix->Close();
+ RemoveIndex( ixList->ix );
+ }
+ #endif
+
+ if(( iRc = xbase->RemoveTblFromTblList( this )) != XB_NO_ERROR ){
+ xbString sMsg;
+ sMsg.Sprintf( "Alias = [%s]", sAlias.Str());
+ xbase->WriteLogMessage( sMsg.Str() );
+ iErrorStop = 120;
+ throw iRc;
+ }
+ xbFclose();
+ InitVars();
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbdbf::Close() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/************************************************************************/
+#ifdef XB_INDEX_SUPPORT
+//! @brief Close an open index file
+/*!
+ All index files are automatically closed when the DBF file is closed.
+ Under normal conditions, it is not necessary to explicitly close an index file
+ with this routine. Any updates posted to a DBF file while an index is closed
+ will not be reflected in the closed index file.
+
+ \param pIx Pointer to index object to close.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbDbf::CloseIndexFile( xbIx *pIx ){
+
+ xbInt16 iErrorStop = 0;
+ xbInt16 iRc = XB_NO_ERROR;
+
+ try{
+
+ // verify index is open and in the list
+ xbBool bFound = xbFalse;
+ xbIxList *p = GetIxList();
+ while( p && !bFound ){
+ if( pIx == p->ix )
+ bFound = xbTrue;
+ p = p->next;
+ }
+ if( !bFound ){
+ iErrorStop = 100;
+ iRc = XB_NOT_OPEN;
+ throw iRc;
+ }
+ // close it
+ if(( iRc = pIx->Close()) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ // remove it from the list
+ if(( iRc = RemoveIndex( pIx )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ // refresh the tag list
+ if(( iRc = UpdateTagList()) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ if( pIx == pCurIx ){
+ pCurIx = NULL;
+ vpCurIxTag = NULL;
+ sCurIxType = "";
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbdbf::CloseIndexFile() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+#endif // XB_INDEX_SUPPORT
+
+/************************************************************************/
+//! @brief Commit updates to disk
+/*!
+
+ This routine commits any pending updates to disk.
+
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbDbf::Commit(){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ try{
+
+ if( iDbfStatus == XB_UPDATED ){
+ if( ulCurRec == 0 ){
+ if(( iRc = AppendRecord()) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ } else {
+ if(( iRc = PutRecord( ulCurRec )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ }
+ }
+ }
+ catch (xbInt16 iRc ){
+ if( iRc != XB_LOCK_FAILED ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbdbf::Commit() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ }
+ return iRc;
+}
+
+/************************************************************************/
+//! @brief Copy table (dbf) file structure.
+/*!
+
+ This routine will copy the structure of a dbf file and if successful
+ return a pointer to the new table in an open state.
+
+ \param dNewTable Reference to new table object.
+ \param sNewTableName New table (dbf) name.
+ \param sNewTableAlias Alias name of new table.
+ \param iOverlay xbTrue - Overlay existing file.<br>
+ xbFalse - Don't overlay existing file.
+ \param iShareMode XB_SINGLE_USER<br>
+ XB_MULTI_USER
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+//! Copy DBF structure
+/*!
+*/
+xbInt16 xbDbf::CopyDbfStructure( xbDbf * dNewTable, const xbString &sNewTableName,
+ const xbString & sNewTableAlias, xbInt16 iOverlay, xbInt16 iShareMode ) {
+
+// If successful, the table is returned in an open state after executing this method
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbSchema *newTableSchema = NULL;
+
+ try{
+
+ if( iDbfStatus == XB_CLOSED ){
+ iErrorStop = 100;
+ iRc = XB_DBF_FILE_NOT_OPEN;
+ throw iRc;
+ }
+
+ if( !dNewTable ){
+ iErrorStop = 110;
+ iRc = XB_INVALID_OBJECT;
+ throw iRc;
+ }
+
+ // Get the number of schema entries for this table
+ xbInt32 lSchemaRecCnt = GetFieldCnt() + 1;
+
+ // Allocate a Schema = No Of Fields + 1
+ if((newTableSchema=(xbSchema *)malloc( (size_t) lSchemaRecCnt * sizeof(xbSchema)))==NULL){
+ iErrorStop = 120;
+ iRc = XB_NO_MEMORY;
+ throw iRc;
+ }
+
+ // Populate the Schema
+ xbInt32 l;
+ for( l = 0; l < lSchemaRecCnt-1; l++ ){
+ memset( newTableSchema[l].cFieldName, 0x00, 11 );
+ for( int x = 0; x < 10 && SchemaPtr[l].cFieldName[x]; x++ )
+ newTableSchema[l].cFieldName[x] = SchemaPtr[l].cFieldName[x];
+ newTableSchema[l].cType = SchemaPtr[l].cType;
+ newTableSchema[l].iFieldLen = SchemaPtr[l].cFieldLen;
+ newTableSchema[l].iNoOfDecs = SchemaPtr[l].cNoOfDecs;
+ }
+
+ // set the last one to zeroes
+ memset( newTableSchema[l].cFieldName, 0x00, 11 );
+ newTableSchema[l].cType = 0;
+ newTableSchema[l].iFieldLen = 0;
+ newTableSchema[l].iNoOfDecs = 0;
+
+ dNewTable->SetVersion();
+ #ifdef XB_MEMO_SUPPORT
+ if( MemoFieldsExist())
+ dNewTable->SetCreateMemoBlockSize( Memo->GetBlockSize() );
+ #endif
+
+ // Call the create a table function
+ if(( iRc = dNewTable->CreateTable( sNewTableName, sNewTableAlias, newTableSchema, iOverlay, iShareMode )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ }
+
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbDbf::CopyDbfStructure() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+
+ if( newTableSchema )
+ free( newTableSchema );
+
+ return iRc;
+}
+
+/************************************************************************/
+#ifdef XB_INDEX_SUPPORT
+//! @brief Create a new tag (index) for this dbf file (table).
+/*!
+ This routine creates a new tag (index) on a dbf file. The library currently supports NDX, MDX ans TDX.
+ indices. If you don't have a specific need for an NDX file, use MDX.
+
+ \param sIxType "MDX", "NDX" or "NTX".
+ \param sName Index or tag name.
+ \param sKey Index key expression,
+ \param sFilter Filter expression. Not applicable for NDX indices.
+ \param iDescending xbTrue for descending. Not available for NDX indices.<br>
+ xbFalse - ascending
+ \param iUnique xbTrue - Unique index<br>xbFalse - Not unique index.
+ \param iOverLay xbTrue - Overlay if exists<br>
+ xbFalse - Don't overlay if it exists.
+ \param pIxOut Pointer to pointer of output index object.
+ \param vpTagOut Pointer to pointer of newly created tag,
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbDbf::CreateTag( const xbString &sIxType, const xbString &sName, const xbString &sKey, const xbString &sFilter,
+ xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverLay, xbIx **pIxOut, void **vpTagOut ){
+
+ // this routine is used to open indices and link to files
+
+ xbInt16 iErrorStop = 0;
+ xbInt16 iRc = XB_NO_ERROR;
+
+ #ifdef XB_LOCKING_SUPPORT
+ xbBool bLocked = xbFalse;
+ #endif
+
+ try{
+ xbString sType = sIxType;
+ sType.ToUpperCase();
+
+ #ifdef XB_LOCKING_SUPPORT
+ if( iAutoLock && !bTableLocked ){
+ if(( iRc = LockTable( XB_LOCK )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw( iRc );
+ }
+ bLocked = xbTrue;
+ }
+ #endif // XB_LOCKING_SUPPORT
+
+ if( sIxType == "" ){
+ iErrorStop = 110;
+ iRc = XB_INVALID_OPTION;
+ throw iRc;
+
+ #ifdef XB_NDX_SUPPORT
+ } else if( sIxType == "NDX" ){
+ xbIxNdx *ixNdx = new xbIxNdx( this );
+
+ if(( iRc = ixNdx->CreateTag( sName, sKey, sFilter, iDescending, iUnique, iOverLay, vpTagOut )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+
+ if(( iRc = AddIndex( ixNdx, sIxType )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ *pIxOut = ixNdx;
+
+
+
+ // Set the current tag if one not already set
+ if( sCurIxType == "" ){
+ sCurIxType = "NDX";
+ pCurIx = ixNdx;
+ vpCurIxTag = ixNdx->GetTag(0);
+ }
+
+ #endif
+
+ #ifdef XB_MDX_SUPPORT
+ } else if( sIxType == "MDX" ){
+
+ if( GetVersion() == 3 ){ // MDX indexes were version 4 and higher
+ iErrorStop = 140;
+ iRc = XB_INVALID_INDEX;
+ throw iRc;
+ }
+
+ xbIxMdx *ixMdx;
+ xbString s;
+ // look through the index list and see if there is an mdx pointer we can grab
+ xbBool bMdxFound = xbFalse;
+ xbIxList *ixList = GetIxList();
+ while( ixList && !bMdxFound ){
+ s = ixList->sFmt->Str();
+ if( s == "MDX" ){
+ ixMdx = (xbIxMdx *) ixList->ix;
+ bMdxFound = xbTrue;
+ }
+ ixList = ixList->next;
+ }
+
+ if( !bMdxFound )
+ ixMdx = new xbIxMdx( this );
+
+ if(( iRc = ixMdx->CreateTag( sName, sKey, sFilter, iDescending, iUnique, iOverLay, vpTagOut )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+
+ if( !bMdxFound ){
+ if(( iRc = AddIndex( ixMdx, "MDX" )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+
+ cIndexFlag = 0x01;
+ if(( iRc = WriteHeader( 1, 0 )) != XB_NO_ERROR ){
+ iErrorStop = 170;
+ throw iRc;
+ }
+ }
+ *pIxOut = ixMdx;
+
+ // set the current tag if one not already set
+ if( sCurIxType == "" ){
+ sCurIxType = "MDX";
+ pCurIx = ixMdx;
+ vpCurIxTag = ixMdx->GetTag(0);
+ }
+ #endif
+
+ #ifdef XB_TDX_SUPPORT
+ } else if( sIxType == "TDX" ){
+
+ if( GetVersion() == 3 ){ // TDX indexes were version 4 and higher
+ iErrorStop = 140;
+ iRc = XB_INVALID_INDEX;
+ throw iRc;
+ }
+
+ xbIxTdx *ixTdx;
+ xbString s;
+ // look through the index list and see if there is an mdx pointer we can grab
+ xbBool bTdxFound = xbFalse;
+ xbIxList *ixList = GetIxList();
+ while( ixList && !bTdxFound ){
+ s = ixList->sFmt->Str();
+ if( s == "TDX" ){
+ ixTdx = (xbIxTdx *) ixList->ix;
+ bTdxFound = xbTrue;
+ }
+ ixList = ixList->next;
+ }
+ if( !bTdxFound )
+ ixTdx = new xbIxTdx( this );
+
+ if(( iRc = ixTdx->CreateTag( sName, sKey, sFilter, iDescending, iUnique, iOverLay, vpTagOut )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+ if( !bTdxFound ){
+ if(( iRc = AddIndex( ixTdx, "TDX" )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+ }
+ *pIxOut = ixTdx;
+
+ // set the current tag if one not already set
+ if( sCurIxType == "" ){
+
+ sCurIxType = "TDX";
+ pCurIx = ixTdx;
+ vpCurIxTag = ixTdx->GetTag(0);
+ }
+
+ #endif
+
+ } else {
+ iErrorStop = 200;
+ iRc = XB_INVALID_OPTION;
+ throw iRc;
+ }
+
+ if(( iRc = UpdateTagList()) != XB_NO_ERROR ){
+ iErrorStop = 300;
+ throw iRc;
+ }
+
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbdbf::CreateTag() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+
+ #ifdef XB_LOCKING_SUPPORT
+ if( bLocked )
+ LockTable( XB_UNLOCK );
+ #endif // XB_LOCKING_SUPPORT
+
+ return iRc;
+}
+#endif // XB_INDEX_SUPPORT
+
+/************************************************************************/
+//! @brief Delete or undelete all records in a dbf file (table).
+/*!
+ This routine deletes or un-deletes all records. The xbase file format contains
+ a leading one byte character used for flagging a record as deleted. When a record
+ is deleted, it's not physically removed from the file, the first byte is flagged as deleted.
+
+ \param iOption 0 - Delete all records.<br>
+ 1 - Un-delete all deleted records.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbDbf::DeleteAll( xbInt16 iOption )
+{
+ xbInt16 iErrorStop = 0;
+ xbInt16 iRc = XB_NO_ERROR;
+ xbUInt32 ulRecCnt;
+
+ try{
+ if(( iRc = GetRecordCnt( ulRecCnt )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ if( ulRecCnt == 0 )
+ return XB_NO_ERROR;
+ for( xbUInt32 ul = 0; ul < ulRecCnt; ul++ ){
+ if(( iRc = GetRecord( ul+1 )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ if( iOption == 0 ){ /* delete all option */
+ if( !RecordDeleted()){
+ if(( iRc = DeleteRecord()) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ if(( iRc = Commit()) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ }
+ } else { /* undelete all option */
+ if( RecordDeleted()){
+ if(( iRc = UndeleteRecord()) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+ if(( iRc = Commit()) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+ }
+ }
+ }
+ }
+ catch (xbInt16 iRc ){
+ if( iRc != XB_LOCK_FAILED ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbDbf::DeleteAll() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ }
+ return iRc;
+}
+
+/************************************************************************/
+#ifdef XB_INDEX_SUPPORT
+//! @brief
+/*!
+ This routine deletes all indices associated with the dbf file.
+
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbDbf::DeleteAllIndexFiles(){
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+
+ #ifdef XB_LOCKING_SUPPORT
+ xbBool bLocked = xbFalse;
+ #endif // XB_LOCKING_SUPPORT
+
+ #ifdef XB_INF_SUPPORT
+ xbString sIxName;
+ #endif // XB_INF_SUPPORT
+
+ try{
+ #ifdef XB_LOCKING_SUPPORT
+ if( iAutoLock && !bTableLocked ){
+ if(( iRc = LockTable( XB_LOCK )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw( iRc );
+ }
+ bLocked = xbTrue;
+ }
+ #endif // XB_LOCKING_SUPPORT
+
+ // close any open index files, delete it, remove from the ix list
+ while( ixList ){
+
+ // next two lines for debugging
+ ixList->ix->GetFileNamePart( sIxName );
+ ixList->ix->Close();
+ if(( iRc = ixList->ix->xbRemove()) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ #ifdef XB_INF_SUPPORT
+ // if XB_INF_SUPPORT is enabled, all open non prod indices should be in here
+ if( *ixList->sFmt != "MDX" && *ixList->sFmt != "TDX" ){ // production and temp indices not stored in .INF dataset
+ if(( iRc = ixList->ix->GetFileNamePart( sIxName )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ if(( iRc = AssociateIndex( *ixList->sFmt, sIxName, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ }
+ #endif
+ RemoveIndex( ixList->ix );
+ }
+ } catch( xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbdbf::DeleteAllIndexFiles() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ #ifdef XB_LOCKING_SUPPORT
+ if( bLocked )
+ LockTable( XB_UNLOCK );
+ #endif // XB_LOCKING_SUPPORT
+ return iRc;
+}
+#endif // XB_INDEX_SUPPORT
+
+/************************************************************************/
+//! @brief Delete all records.
+/*!
+ This routine deletes all the records in a table / dbf file.
+
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbDbf::DeleteAllRecords(){
+ return DeleteAll( 0 );
+}
+
+/************************************************************************/
+#ifdef XB_INF_SUPPORT
+//! @brief Delete .INF File
+/*!
+ The original Dbase (TM) software supported non production indices (NDX) and production indices (MDX).
+ The production indices are opened automatically when the DBF file is opened but the non-production
+ indices are not. This method is specific to the Xbas64 library and providex a means to link non production
+ NDX index files to the DBF file so they will be opened automatically when the DBF file is opened.<br>
+
+ This routine requires INF support be enabled when building the library.<br>
+ This routine deletes the .INF file.<br>
+
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbDbf::DeleteInfData(){
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+
+ try{
+ xbString sInfFileName;
+ if(( iRc = GetInfFileName( sInfFileName )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ xbFile f( xbase );
+ f.SetFileName( sInfFileName );
+ if( f.FileExists()){
+ if(( iRc = f.xbRemove()) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ }
+ } catch( xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbdbf::DeleteInfData() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+#endif // XB_INF_SUPPORT
+
+/************************************************************************/
+//! @brief Delete the current record.
+/*!
+ This routine flags the current record for deletion if it's not already flagged.
+
+ \returns XB_NO_ERROR<br>
+ XB_INVALID_RECORD
+*/
+
+xbInt16 xbDbf::DeleteRecord(){
+ if( RecBuf && ulCurRec > 0 ){
+ if( RecBuf[0] != 0x2a){
+ if( iDbfStatus != XB_UPDATED ){
+ iDbfStatus = XB_UPDATED;
+ memcpy( RecBuf2, RecBuf, uiRecordLen ); // save off original before making any updates
+ }
+ RecBuf[0] = 0x2a;
+ }
+ return XB_NO_ERROR;
+ }
+ else
+ return XB_INVALID_RECORD;
+}
+/************************************************************************/
+//! @brief Delete a table.
+/*!
+ This routine deletes a given table, associated index files if any, the
+ memo file if any and the .INF file if any.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbDbf::DeleteTable(){
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+
+ #ifdef XB_LOCKING_SUPPORT
+ xbBool bTableLocked = xbFalse;
+ #endif
+
+ try{
+
+ #ifdef XB_LOCKING_SUPPORT
+ if( iAutoLock && !bTableLocked ){
+ if(( iRc = LockTable( XB_LOCK )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ } else {
+ bTableLocked = xbTrue;
+ }
+ }
+ #endif // XB_LOCKING_SUPPORT
+
+ #ifdef XB_INDEX_SUPPORT
+ if(( iRc = DeleteAllIndexFiles()) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+
+ #ifdef XB_INF_SUPPORT
+ if(( iRc = DeleteInfData()) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ #endif // XB_INF_SUPPORT
+ #endif // XB_INDEX_SUPPORT
+
+ #ifdef XB_MEMO_SUPPORT
+ xbInt16 iMemoFldCnt = GetMemoFieldCnt();
+ xbString sMemoFileName;
+ if(iMemoFldCnt > 0 ){
+ sMemoFileName = Memo->GetFqFileName();
+ }
+ #endif // XB_MEMO_SUPPORT
+
+ if(( iRc = Close()) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+
+ if(( iRc = xbRemove()) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+
+ #ifdef XB_MEMO_SUPPORT
+ if( iMemoFieldCnt > 0 ){
+ xbFile f( xbase );
+ if(( iRc = f.xbRemove( sMemoFileName )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+ }
+ #endif // XB_MEMO_SUPPORT
+
+ } catch( xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbdbf::DeleteTable() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ #ifdef XB_LOCKING_SUPPORT
+ if( bTableLocked )
+ LockTable( XB_UNLOCK );
+ #endif // XB_LOCKING_SUPPORT
+ return iRc;
+}
+
+/************************************************************************/
+#ifdef XB_INDEX_SUPPORT
+//! @brief Delete an index tag.
+
+/*!
+ This routine deletes an index tag
+ \param sIxType Either "NDX", "MDX" or "TDX".<br>
+ \param sName Tag name to delete.<br>
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbDbf::DeleteTag( const xbString &sIxType, const xbString &sName ){
+
+ xbInt16 iErrorStop = 0;
+ xbInt16 iRc = XB_NO_ERROR;
+ xbIx *pIx = NULL;
+
+ #ifdef XB_LOCKING_SUPPORT
+ xbBool bTableLocked = xbFalse;
+ #endif
+
+ try{
+
+ #ifdef XB_LOCKING_SUPPORT
+ if( iAutoLock && !GetTableLocked() ){
+ if(( iRc = LockTable( XB_LOCK )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ } else {
+ bTableLocked = xbTrue;
+ }
+ }
+ #endif // XB_LOCKING_SUPPORT
+
+ if( sIxType == "" ){
+ iErrorStop = 110;
+ iRc = XB_INVALID_OPTION;
+ throw iRc;
+
+ #ifdef XB_NDX_SUPPORT
+ } else if( sIxType == "NDX" ){
+
+ xbIxList *ixl = ixList;
+ xbBool bDone = xbFalse;
+ while( ixl && !bDone ){
+
+ if( ixl->ix->GetTagName( NULL ) == sName ){
+ bDone = xbTrue;
+
+ // remove from .INF if it's there
+ #ifdef XB_INF_SUPPORT
+ if(( iRc = AssociateIndex( "NDX", sName, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ #endif // XB_INF_SUPPORT
+
+ if(( iRc = ixl->ix->DeleteTag( ixl->ix->GetTag( 0 ))) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+
+ if(( iRc = RemoveIndex( ixl->ix )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+
+ if( !ixList || ixl->ix == pCurIx )
+ SetCurTag( "", NULL, NULL );
+
+ }
+ ixl = ixl->next;
+ }
+ #endif
+
+ #ifdef XB_MDX_SUPPORT
+ } else if( sIxType == "MDX" ){
+ xbIxList *ixl = ixList;
+ xbIxList *ixlNext;
+ xbIxList *ixlPrev = NULL;
+ xbBool bDone = xbFalse;
+ xbIxMdx *pMdx;
+ xbMdxTag *pMdxTag;
+ xbInt16 iTagCnt = 0;
+
+ while( ixl && !bDone ){
+ ixlNext = ixl->next;
+ pMdx = (xbIxMdx *) ixl->ix;
+ iTagCnt = pMdx->GetTagCount();
+ for( xbInt16 i = 0; i < iTagCnt && !bDone; i++ ){
+ pMdxTag = (xbMdxTag *) pMdx->GetTag( i );
+ if( pMdx->GetTagName( pMdxTag ) == sName ){
+ bDone = xbTrue;
+ iRc = pMdx->DeleteTag( pMdxTag );
+ if( iRc > 0 ){
+ // Successful delete of only tag in production mdx file - need to remove it from the list, update the dbf header
+ cIndexFlag = 0x00;
+ if(( iRc = WriteHeader( 1, 0 )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+ if(( iRc = RemoveIndex( ixl->ix )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+ if( ixlPrev == NULL ){
+ // std::cout << "setting ixList to null or should be\n";
+ ixList = ixlNext;
+ } else {
+ ixlPrev = ixlNext;
+ }
+ } else if( iRc < 0 ){
+ iErrorStop = 170;
+ throw iRc;
+ }
+ if( !ixList || ixl->ix == pCurIx )
+ SetCurTag( "", NULL, NULL );
+ }
+ }
+ ixlPrev = ixl;
+ ixl = ixlNext;
+ }
+
+ if( !bDone )
+ return XB_INVALID_TAG;
+ #endif
+
+ #ifdef XB_TDX_SUPPORT
+ } else if( sIxType == "TDX" ){
+ xbIxList *ixl = ixList;
+ xbIxList *ixlNext;
+ xbIxList *ixlPrev = NULL;
+ xbBool bDone = xbFalse;
+ xbIxTdx *pTdx;
+ xbMdxTag *pMdxTag;
+ xbInt16 iTagCnt = 0;
+
+ while( ixl && !bDone ){
+ ixlNext = ixl->next;
+ pTdx = (xbIxTdx *) ixl->ix;
+ iTagCnt = pTdx->GetTagCount();
+ for( xbInt16 i = 0; i < iTagCnt && !bDone; i++ ){
+ pMdxTag = (xbMdxTag *) pTdx->GetTag( i );
+ if( pTdx->GetTagName( pMdxTag ) == sName ){
+ bDone = xbTrue;
+ iRc = pTdx->DeleteTag( pMdxTag );
+ if( iRc > 0 ){
+ // Successful delete of only tag in production mdx file - need to remove it from the list, update the dbf header
+ cIndexFlag = 0x00;
+ if(( iRc = WriteHeader( 1, 0 )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+ if(( iRc = RemoveIndex( ixl->ix )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+ if( ixlPrev == NULL ){
+ // std::cout << "setting ixList to null or should be\n";
+ ixList = ixlNext;
+ } else {
+ ixlPrev = ixlNext;
+ }
+ } else if( iRc < 0 ){
+ iErrorStop = 170;
+ throw iRc;
+ }
+ if( ixList )
+ std::cout << "ixlist not null\n";
+ else
+ std::cout << "ixlist null\n";
+
+ if( !ixList || ixl->ix == pCurIx )
+ SetCurTag( "", NULL, NULL );
+ }
+ }
+ ixlPrev = ixl;
+ ixl = ixlNext;
+ }
+
+ if( !bDone )
+ return XB_INVALID_TAG;
+
+ #endif
+
+
+
+ } else {
+ iErrorStop = 180;
+ iRc = XB_INVALID_OPTION;
+ throw iRc;
+ }
+
+ if(( iRc = UpdateTagList()) != XB_NO_ERROR ){
+ iErrorStop = 190;
+ throw iRc;
+ }
+
+
+ }
+ catch (xbInt16 iRc ){
+ if( pIx ) delete pIx;
+ xbString sMsg;
+ sMsg.Sprintf( "xbdbf::DeleteTag() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+
+ #ifdef XB_LOCKING_SUPPORT
+ if( iAutoLock && GetTableLocked() ){
+ LockTable( XB_UNLOCK );
+ }
+ #endif // XB_LOCKING_SUPPORT
+ }
+
+ #ifdef XB_LOCKING_SUPPORT
+ if( bTableLocked ){
+ LockTable( XB_UNLOCK );
+ }
+ #endif // XB_LOCKING_SUPPORT
+
+
+ return iRc;
+}
+#endif // XB_INDEX_SUPPORT
+/************************************************************************/
+//! @brief Dump dbf file header.
+/*!
+ This routine dumps dbf header information to the console.
+
+ \param iOption 1 = Print header only<br>
+ 2 = Field data only<br>
+ 3 = Header and Field data<br>
+ 4 = Header, Field and Memo header data if applicable
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbDbf::DumpHeader( xbInt16 iOption ){
+ int i;
+ int iMemoCtr = 0;
+
+ if( iOption < 1 || iOption > 4 )
+ return XB_INVALID_OPTION;
+
+ xbInt16 iRc = ReadHeader( xbTrue, 0 );
+ if( iRc != XB_NO_ERROR )
+ return iRc;
+
+// if( iDbfStatus == XB_CLOSED )
+// return XB_NOT_OPEN;
+
+ std::cout << "\nDatabase file " << GetFqFileName() << std::endl << std::endl;
+
+ if( iOption != 2 ){
+ std::cout << "File header data:" << std::endl;
+
+ xbInt16 sVer = DetermineXbaseTableVersion( cVersion );
+
+ if( sVer == 3 )
+ std::cout << "Dbase III file" << std::endl;
+ else if ( sVer == 4 )
+ std::cout << "Dbase IV file" << std::endl << std::endl;
+ else if ( sVer == 5 )
+ std::cout << "Dbase V file" << std::endl << std::endl;
+ else if ( sVer == 7 )
+ std::cout << "Dbase VII file" << std::endl << std::endl;
+ else
+ std::cout << "Unknown Version" << std::endl;
+
+ /* display the bit stream */
+ unsigned char c, tfv, displayMask = 1 << 7;
+ tfv = cVersion;
+ std::cout << "File descriptor bits = ";
+ for( c = 1; c<= 8; c++ ){
+ std::cout << (tfv & displayMask ? '1' : '0');
+ tfv <<= 1;
+ }
+ std::cout << std::endl;
+
+ std::cout << "Descriptor bits legend:" << std::endl;
+ std::cout << " 0-2 = version number" << std::endl;
+ std::cout << " 3 = presence of dBASE IV memo" << std::endl;
+ std::cout << " 4-6 = SQL table presence" << std::endl;
+ std::cout << " 7 = Presence of any memo file (dBASE III PLUS or dBASE IV)" << std::endl << std::endl;
+
+ std::cout << "Last update date = "
+ << (int) cUpdateMM << "/" << (int) cUpdateDD << "/" << (int) cUpdateYY % 100 << std::endl;
+
+ std::cout << "Header length = " << uiHeaderLen << std::endl;
+ std::cout << "Record length = " << uiRecordLen << std::endl;
+ std::cout << "Records in file = " << ulNoOfRecs << std::endl << std::endl << std::endl;
+
+ std::cout << "Transaction Flag = ";
+ xbase->BitDump( cTransactionFlag );
+ std::cout << std::endl;
+
+ std::cout << "Encryption Flag = ";
+ xbase->BitDump( cEncryptionFlag );
+ std::cout << std::endl;
+
+ std::cout << "Index Flag = ";
+ xbase->BitDump( cIndexFlag );
+ std::cout << std::endl;
+
+ std::cout << "Lang Driver = " << (int) cIndexFlag << " - ";
+ xbase->BitDump( cIndexFlag );
+ std::cout << std::endl;
+ #ifdef XB_INDEX_SUPPORT
+ std::cout << "Open Index Files = " << GetPhysicalIxCnt() << std::endl;
+ #endif // XB_INDEX_SUPPORT
+ }
+
+ if( iOption != 1 ){
+ char c;
+ std::cout << "Field Name Type Length Decimals IxFlag" << std::endl;
+ std::cout << "---------- ---- ------ -------- ------" << std::endl;
+ for( i = 0; i < iNoOfFields; i++ ){
+
+ SchemaPtr[i].cIxFlag ? c = 'Y' : c = ' ';
+
+ if( SchemaPtr[i].cType == 'C' && SchemaPtr[i].cNoOfDecs > 0 )
+ printf( "%10s %1c %4d %4d %c\n", SchemaPtr[i].cFieldName,
+ SchemaPtr[i].cType, SchemaPtr[i].cFieldLen, 0, c );
+ else
+ printf( "%10s %1c %4d %4d %c\n", SchemaPtr[i].cFieldName,
+ SchemaPtr[i].cType, SchemaPtr[i].cFieldLen, SchemaPtr[i].cNoOfDecs, c );
+
+ if( SchemaPtr[i].cType == 'M' )
+ iMemoCtr++;
+ }
+ }
+ std::cout << std::endl;
+
+#ifdef XB_MEMO_SUPPORT
+ if( iOption > 3 && iMemoCtr > 0 )
+ Memo->DumpMemoHeader();
+#endif
+
+ return XB_NO_ERROR;
+}
+/************************************************************************/
+//! Dump record
+/*!
+ Dump the contents of the specified record
+
+
+ \param ulRecNo Record number of record to be dumped.
+ \param iOutputDest 0 = stdout<br>
+ 1 = Syslog<br>
+ 2 = Both<br>
+
+ \param iOutputFmt 0 = with field names<br>
+ 1 = 1 line per rec, no field names<br>
+ 2 = 1 line per rec, first line is a list of field names.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbDbf::DumpRecord( xbUInt32 ulRecNo, xbInt16 iOutputDest, xbInt16 iOutputFmt ) {
+ int i, iRc = XB_NO_ERROR;
+
+ xbString sTemp;
+ xbString s2;
+ if( ulRecNo == 0 || ulRecNo > ulNoOfRecs )
+ return XB_INVALID_RECORD;
+
+ if( ulCurRec != ulRecNo ){
+ iRc = GetRecord( ulRecNo );
+ if( iRc != XB_NO_ERROR )
+ return iRc;
+ }
+
+ if( iOutputFmt >= 1 ){
+ if( iOutputFmt == 2 ){
+ sTemp = "RecNo,DEL";
+ for( i = 0; i < iNoOfFields; i++ ){
+ s2 = SchemaPtr[i].cFieldName;
+ s2.Trim();
+ sTemp += ",";
+ sTemp += s2;
+ }
+ xbase->WriteLogMessage( sTemp.Str(), iOutputDest );
+ }
+
+ if( RecordDeleted() )
+ s2.Sprintf( "%ld,DEL", ulRecNo );
+ else
+ s2.Sprintf( "%ld,", ulRecNo );
+
+ for( i = 0; i < iNoOfFields; i++ ){
+ GetField( i, sTemp );
+ sTemp.Trim();
+ s2.Sprintf( "%s,'%s'", s2.Str(), sTemp.Str());
+ }
+ xbase->WriteLogMessage( s2.Str(),iOutputDest );
+ return XB_NO_ERROR;
+ }
+
+ sTemp.Sprintf( "\nRec Number: %ld", ulRecNo );
+ xbase->WriteLogMessage( sTemp.Str(),iOutputDest);
+
+ if( RecordDeleted())
+ xbase->WriteLogMessage( "Record flagged as deleted", iOutputDest );
+
+
+ #ifdef XB_MEMO_SUPPORT
+ xbString sMemo;
+ #endif
+
+ for( i = 0; i < iNoOfFields; i++ ){
+
+ #ifdef XB_MEMO_SUPPORT
+ GetField( i, sTemp );
+ sTemp.Trim();
+
+ if(SchemaPtr[i].cType == 'M'){
+ GetMemoField( i, sMemo );
+ if( sMemo.Len() > 70 )
+ sMemo.Resize( 70 );
+ s2.Sprintf ( "%c %s = '%s'", SchemaPtr[i].cType, SchemaPtr[i].cFieldName, sMemo.Str());
+ xbase->WriteLogMessage( s2.Str(), iOutputDest);
+
+ /*
+ xbUInt32 ulMlen;
+ if( MemoFieldExists( i )){
+ Memo->GetMemoFieldLen( i, ulMlen );
+ s2.Sprintf( " Len = %d", ulMlen );
+ }
+ xbase->WriteLogMessage( s2.Str(), iOutputDest);
+ */
+
+ }
+ else{
+ s2.Sprintf ( "%c %s = '%s'", SchemaPtr[i].cType, SchemaPtr[i].cFieldName, sTemp.Str());
+ xbase->WriteLogMessage( s2.Str(), iOutputDest);
+ }
+ #else
+ GetField( i, sTemp );
+ sTemp.Trim();
+ s2.Sprintf( "%s = '%s'", SchemaPtr[i].cFieldName, sTemp.Str());
+ xbase->WriteLogMessage( s2.Str(), iOutputDest);
+ #endif
+
+ }
+ return XB_NO_ERROR;
+}
+
+
+/************************************************************************/
+#ifdef XB_DEBUG_SUPPORT
+
+
+#ifdef XB_LOCKING_SUPPORT
+//! @brief Dump the table lock status
+/*!
+ Debugging routine. Dumps the table lock status to the console.
+ \returns void
+*/
+
+void xbDbf::DumpTableLockStatus() const {
+
+ std::cout << "File Lock Retry Count = [" << GetLockRetryCount() << "]" << std::endl;
+ std::cout << "File Lock Flavor = [";
+ switch (GetLockFlavor()){
+ case 1:
+ std::cout << "Dbase]" << std::endl;
+ break;
+ case 2:
+ std::cout << "Clipper]" << std::endl;
+ break;
+ case 3:
+ std::cout << "Fox]" << std::endl;
+ break;
+ case 9:
+ std::cout << "Xbase64]" << std::endl;
+ break;
+ default:
+ std::cout << "Unknown]" << std::endl;
+ break;
+ }
+ std::cout << "File Auto Lock = [";
+
+ if( GetAutoLock())
+ std::cout << "ON]" << std::endl;
+ else
+ std::cout << "OFF]" << std::endl;
+ if( GetHeaderLocked())
+ std::cout << "Header Locked = [TRUE]\n";
+ else
+ std::cout << "Header Locked = [FALSE]\n";
+
+ if( GetTableLocked())
+ std::cout << "Table Locked = [TRUE]\n";
+ else
+ std::cout << "Table Locked = [FALSE]\n";
+
+ if( GetAppendLocked() > 0 )
+ std::cout << "Append Locked = [" << GetAppendLocked() << "]\n";
+ else
+ std::cout << "Append Locked = [FALSE]\n";
+
+ #ifdef XB_MEMO_SUPPORT
+ if( GetMemoLocked())
+ std::cout << "Memo Locked = [TRUE]\n";
+ else
+ std::cout << "Memo Locked = [FALSE]\n";
+ #endif // XB_MEMO_SUPPORT
+
+ xbLinkListNode<xbUInt32> * llN = GetFirstRecLock();
+ if( llN ){
+ while( llN ){
+ std::cout << "Record Locked = [" << llN->GetKey() << "]\n";
+ llN = llN->GetNextNode();
+ }
+ } else {
+ std::cout << "Record Locked = [None]\n";
+ }
+}
+#endif // XB_LOCKING_SUPPORT
+#endif // XB_DEBUG_SUPPORT
+
+/************************************************************************/
+#ifdef XB_LOCKING_SUPPORT
+//! @brief Get the append locked bytes status
+/*!
+ \returns The record number of the new record for the append lock operation.
+*/
+
+xbUInt32 xbDbf::GetAppendLocked() const {
+ return this->ulAppendLocked;
+}
+
+#endif // XB_LOCKING_SUPPORT
+
+/************************************************************************/
+//! @brief Get auto commit setting.
+/*!
+
+ This routine returns the table setting if set, otherwise returns the system
+ level setting.
+
+ \returns Not 0 - Auto commit on for this table.<br>
+ 0 - Auto commit off for this table.
+*/
+
+xbInt16 xbDbf::GetAutoCommit() const {
+ return GetAutoCommit( 1 );
+}
+
+/************************************************************************/
+//! @brief Get auto commit setting.
+/*!
+
+ \param iOption 0 - Specific setting for this table<br>
+ 1 - If this table should be auto updated (takes DBMS setting into account)
+ \returns Not 0 - Auto commit on for this table.<br>
+ 0 - Auto commit off for this table.
+*/
+
+xbInt16 xbDbf::GetAutoCommit( xbInt16 iOption ) const {
+ if( iOption == 1 && iAutoCommit == -1 )
+ return xbase->GetDefaultAutoCommit();
+ else
+ return iAutoCommit;
+}
+
+
+/************************************************************************/
+#ifdef XB_LOCKING_SUPPORT
+//! @brief Get Auto Lock setting.
+/*!
+ \returns Auto lock setting.
+*/
+xbInt16 xbDbf::GetAutoLock() const{
+ return iAutoLock;
+}
+#endif // XB_LOCKING_SUPPORT
+
+/************************************************************************/
+#ifdef XB_MEMO_SUPPORT
+//! @brief Get the memo file block size used when creating a memo file.
+/*!
+ \returns Memo block size.
+*/
+xbUInt32 xbDbf::GetCreateMemoBlockSize() const {
+ return ulCreateMemoBlockSize;
+}
+#endif // XB_MEMO_SUPPORT
+
+/************************************************************************/
+//! @brief Get a pointer to the current index object.
+/*!
+ \returns Pointer to current index.
+*/
+#ifdef XB_INDEX_SUPPORT
+xbIx *xbDbf::GetCurIx() const {
+ return pCurIx;
+}
+/************************************************************************/
+//! @brief Get pointer to current tag for the current index.
+/*!
+ An index file can have one or more tags
+ NDX index files have one tag per file.
+ MDX index files can can have up to 47 tags per file.
+ TDX index files can can have up to 47 tags per file.
+
+ \returns Pointer to current tag.
+*/
+void *xbDbf::GetCurTag() const {
+ return vpCurIxTag;
+}
+/************************************************************************/
+//! @brief Get the current index type.
+/*!
+ \returns NDX for single tag index.<br>
+ MDX for production multi tag index.<br>
+ TDX for temporary tag index.
+*/
+const xbString &xbDbf::GetCurIxType() const {
+ return sCurIxType;
+}
+
+/************************************************************************/
+//! @brief Get the current tag name.
+/*!
+ \returns Current Tag Name.<br>
+*/
+
+const xbString &xbDbf::GetCurTagName() const {
+
+ if( pCurIx )
+ return pCurIx->GetTagName( vpCurIxTag );
+ else
+ return sNullString;
+}
+
+/************************************************************************/
+//! @brief GetFirstKey for tag.
+/*!
+
+ Position to the first key for the current tag
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+
+*/
+xbInt16 xbDbf::GetFirstKey(){
+ if( pCurIx )
+ return pCurIx->GetFirstKey( vpCurIxTag, 1 );
+ else
+ return XB_INVALID_TAG;
+}
+
+/************************************************************************/
+//! @brief GetHeaderLen for dbf
+/*!
+
+ Returns the length of the header portion of the dbf file
+ \returns Length of header protion of dbf file
+
+*/
+xbUInt16 xbDbf::GetHeaderLen() const {
+ return uiHeaderLen;
+}
+
+/************************************************************************/
+//! @brief GetLastKey for tag.
+/*!
+
+ Position to the last key for the current tag
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+
+*/
+xbInt16 xbDbf::GetLastKey(){
+ if( pCurIx )
+ return pCurIx->GetLastKey( vpCurIxTag, 1 );
+ else
+ return XB_INVALID_TAG;
+}
+
+/************************************************************************/
+//! @brief GetNextKey for tag.
+/*!
+
+ Position to the next key for the current tag
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+
+*/
+xbInt16 xbDbf::GetNextKey(){
+ if( pCurIx )
+ return pCurIx->GetNextKey( vpCurIxTag, 1 );
+ else
+ return XB_INVALID_TAG;
+}
+
+/************************************************************************/
+//! @brief GetPrevKey for tag.
+/*!
+
+ Position to the previous key for the current tag
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+
+*/
+xbInt16 xbDbf::GetPrevKey(){
+ if( pCurIx )
+ return pCurIx->GetPrevKey( vpCurIxTag, 1 );
+ else
+ return XB_INVALID_TAG;
+}
+
+/************************************************************************/
+//! @brief Find record for key.
+/*!
+
+ Find a key and position to record if key found
+
+ \param sKey String key to find
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+
+*/
+xbInt16 xbDbf::Find( xbString &sKey ){
+ if( pCurIx )
+ return pCurIx->FindKey( vpCurIxTag, sKey.Str(), (xbInt32) sKey.Len(), 1 );
+ else
+ return XB_INVALID_TAG;
+}
+
+/************************************************************************/
+//! @brief Find record for key.
+/*!
+
+ Find a key and position to record if key found
+
+ \param dtKey Date key to find
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+
+*/
+xbInt16 xbDbf::Find( xbDate &dtKey ){
+
+ if( pCurIx )
+ return pCurIx->FindKey( vpCurIxTag, dtKey, 1 );
+ else
+ return XB_INVALID_TAG;
+
+}
+/************************************************************************/
+//! @brief Find record for key.
+/*!
+
+ Find a key and position to record if key found
+
+ \param dtKey Date key to find
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+
+*/
+xbInt16 xbDbf::Find( xbDouble &dKey ){
+
+ if( pCurIx )
+ return pCurIx->FindKey( vpCurIxTag, dKey, 1 );
+ else
+ return XB_INVALID_TAG;
+
+}
+
+
+#endif // XB_INDEX_SUPPORT
+
+/************************************************************************/
+//! @brief Return true if dbf file empty or positioned to the first record
+/*!
+ \returns Returns true if dbf file is empty or positioned on the first record.
+*/
+xbBool xbDbf::GetBof() {
+/*
+ if( GetRecordCount() == 0 || GetCurRecNo() == 1 )
+ return xbTrue;
+ else
+ */
+ return xbFalse;
+}
+/************************************************************************/
+//! @brief Return true if dbf file empty or positioned to the last record
+/*!
+ \returns Returns true if error, dbf file is empty or positioned on the last record.
+*/
+xbBool xbDbf::GetEof() {
+
+ // xbUInt32 ulRecCnt = GetRecordCount();
+
+ xbUInt32 ulRecCnt;
+ xbInt16 iRc = GetRecordCnt( ulRecCnt );
+
+ if( iRc != XB_NO_ERROR || ulRecCnt == 0 || GetCurRecNo() == ulRecCnt )
+ return xbTrue;
+ else
+ return xbFalse;
+}
+/************************************************************************/
+//! @brief Return the current record number.
+/*!
+ \returns Returns the current record number.
+*/
+xbUInt32 xbDbf::GetCurRecNo() const {
+ return ulCurRec;
+}
+
+/************************************************************************/
+//! @brief Return the current dbf status.
+/*!
+ \returns 0 = closed<br>
+ 1 = open<br>
+ 2 = updates pending<br>
+*/
+xbInt16 xbDbf::GetDbfStatus() const {
+ return iDbfStatus;
+}
+/************************************************************************/
+//! @brief Return the number of fields in the table.
+/*!
+ \returns The number of fields in the table.
+*/
+xbInt32 xbDbf::GetFieldCnt() const {
+ return iNoOfFields;
+}
+
+/************************************************************************/
+#ifdef XB_LOCKING_SUPPORT
+//! @brief Get the first first record lock.
+/*!
+ Get the first record lock from a linked list of record locks.
+ \returns First record lock.
+*/
+xbLinkListNode<xbUInt32> * xbDbf::GetFirstRecLock() const {
+ return lloRecLocks.GetHeadNode();
+}
+#endif // XB_LOCKING_SUPPORT
+/************************************************************************/
+//! @brief Get the first record.
+/*!
+ Get the first not deleted record. This routines skips over any deleted records.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbDbf::GetFirstRecord()
+{
+ return GetFirstRecord( XB_ACTIVE_RECS );
+}
+
+/************************************************************************/
+//! @brief Get the first record.
+/*!
+
+ \param iOption XB_ALL_RECS - Get the first record, deleted or not.<br>
+ XB_ACTIVE_RECS - Get the first active record.<br>
+ XB_DELETED_RECS - Get the first deleted record.<br>
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbDbf::GetFirstRecord( xbInt16 iOption )
+{
+ if( ulNoOfRecs == 0 )
+ return XB_EMPTY;
+
+ xbInt16 iRc = GetRecord( 1L );
+ while( iRc == XB_NO_ERROR &&
+ ((RecordDeleted() && iOption == XB_ACTIVE_RECS) ||
+ (!RecordDeleted() && iOption == XB_DELETED_RECS)))
+ if( ulCurRec < ulNoOfRecs )
+ iRc = GetRecord( ulCurRec + 1 );
+ else
+ return XB_EOF;
+
+ return iRc;
+}
+
+/************************************************************************/
+#ifdef XB_LOCKING_SUPPORT
+//! @brief Return lock status of the table header
+/*! \returns DBF header lock status
+*/
+
+xbBool xbDbf::GetHeaderLocked() const {
+ return this->bHeaderLocked;
+}
+#endif // XB_LOCKING_SUPPORT
+
+#ifdef XB_INDEX_SUPPORT
+//! @brief Return pointer to list of index files for the table.
+/*!
+ \returns Returns an xbIxList * pointer to list of open index files.
+*/
+
+xbIxList *xbDbf::GetIxList() const{
+ return ixList;
+}
+#endif // XB_INDEX_SUPPORT
+
+
+/************************************************************************/
+//! @brief Get the last record.
+/*!
+ Get the last not deleted record. This routines skips over any deleted records.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbDbf::GetLastRecord()
+{
+ return GetLastRecord( XB_ACTIVE_RECS );
+}
+/************************************************************************/
+//! @brief Get the last record.
+/*!
+
+ \param iOption XB_ALL_RECS - Get the last record, deleted or not.<br>
+ XB_ACTIVE_RECS - Get the last active record.<br>
+ XB_DELETED_RECS - Get the last deleted record.<br>
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbDbf::GetLastRecord( xbInt16 iOption )
+{
+ if( ulNoOfRecs == 0 )
+ return XB_EMPTY;
+
+ xbInt16 iRc = GetRecord( ulNoOfRecs );
+ while( iRc == XB_NO_ERROR &&
+ ((RecordDeleted() && iOption == XB_ACTIVE_RECS) ||
+ (!RecordDeleted() && iOption == XB_DELETED_RECS)))
+ if( ulCurRec > 1 )
+ iRc = GetRecord( ulCurRec - 1 );
+ else
+ return XB_EOF;
+
+ return iRc;
+}
+
+
+/************************************************************************/
+#ifdef XB_LOCKING_SUPPORT
+//! @brief Get lock flavor.
+/*!
+ This routine is currently in place to provide structure for future locking
+ schemes that may differ from the legacy DBase (TM) locking scheme.
+ \returns Always 1.
+*/
+
+xbInt16 xbDbf::GetLockFlavor() const{
+ if( iLockFlavor == -1 )
+ return xbase->GetDefaultLockFlavor();
+ else
+ return iLockFlavor;
+}
+#endif // XB_LOCKING_SUPPORT
+
+/************************************************************************/
+#ifdef XB_MEMO_SUPPORT
+/************************************************************************/
+#ifdef XB_LOCKING_SUPPORT
+//! @brief Get the lock status of the memo file.
+/*!
+ \returns Lock status of memo file.
+*/
+xbBool xbDbf::GetMemoLocked() const {
+ if( MemoFieldsExist())
+ return Memo->GetMemoLocked();
+ else
+ return xbFalse;
+}
+#endif // XB_LOCKING_SUPPORT
+
+/************************************************************************/
+//! @brief Get pointer to Memo object.
+/*!
+ \returns This routine returns the pointer to the memo object.
+*/
+
+xbMemo * xbDbf::GetMemoPtr(){
+ return Memo;
+}
+
+#endif // XB_MEMO_SUPPORT
+
+
+/************************************************************************/
+#ifdef XB_INF_SUPPORT
+//! @brief Return the .INF file name
+/*!
+ If NDXIDX support is enabled in the library, and a non production (ndx)
+ has been associated with the dbf file, the .INF file name can be retrieved
+ with this routine.
+
+ \param sInfFileName Output string containing .INF file name.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbDbf::GetInfFileName( xbString &sInfFileName ){
+
+ sInfFileName = GetFqFileName();
+ xbUInt32 lLen = sInfFileName.Len();
+ if( lLen < 5 )
+ return XB_FILE_NOT_FOUND;
+ sInfFileName.PutAt(lLen-2, 'I');
+ sInfFileName.PutAt(lLen-1, 'N');
+ sInfFileName.PutAt(lLen, 'F');
+ return XB_NO_ERROR;
+}
+
+/************************************************************************/
+//! @brief Return first node of linked list of .INF items.
+/*!
+ \returns List of .INF entries.
+*/
+
+xbLinkListNode<xbString> * xbDbf::GetInfList() const{
+ return llInfData.GetHeadNode();
+}
+#endif // XB_INF_SUPPORT
+
+
+/************************************************************************/
+//! @brief Get the next record.
+/*!
+ Get the next not deleted record. This routines skips over any deleted records.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbDbf::GetNextRecord(){
+ return GetNextRecord( XB_ACTIVE_RECS );
+}
+
+/************************************************************************/
+//! @brief Get the next record.
+/*!
+ \param iOption XB_ALL_RECS - Get the next record, deleted or not.<br>
+ XB_ACTIVE_RECS - Get the next active record.<br>
+ XB_DELETED_RECS - Get the next deleted record.<br>
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbDbf::GetNextRecord( xbInt16 iOption ){
+ if( ulNoOfRecs == 0 )
+ return XB_EMPTY;
+ else if( ulCurRec >= ulNoOfRecs )
+ return XB_EOF;
+ xbInt16 iRc = GetRecord( ulCurRec + 1 );
+ while( iRc == XB_NO_ERROR &&
+ ((RecordDeleted() && iOption == XB_ACTIVE_RECS) ||
+ (!RecordDeleted() && iOption == XB_DELETED_RECS)))
+ if( ulCurRec < ulNoOfRecs )
+ iRc = GetRecord( ulCurRec + 1 );
+ else
+ return XB_EOF;
+ return iRc;
+}
+/************************************************************************/
+//! @brief Get the next record.
+/*!
+
+ \param iOption XB_ALL_RECS - Get the next record, deleted or not.<br>
+ XB_ACTIVE_RECS - Get the next active record.<br>
+ XB_DELETED_RECS - Get the next deleted record.<br>
+ \param ulStartRec Get next record, starting from ulStartRec.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbDbf::GetNextRecord( xbInt16 iOption , xbUInt32 ulStartRec ){
+
+ if( iOption == 0 )
+ return GetNextRecord();
+ else if( iOption == 1 ){
+ if( ulStartRec > 0 )
+ ulCurRec = ulStartRec;
+ xbInt16 iRc = GetNextRecord();
+ while( iRc == XB_NO_ERROR && RecordDeleted())
+ iRc = GetNextRecord();
+ return iRc;
+ }
+ else
+ return XB_INVALID_OPTION;
+}
+
+
+/************************************************************************/
+#ifdef XB_INDEX_SUPPORT
+//! @brief Physical count of open index files.
+/*!
+
+ Returns a physical count of open index files for the dbf file. An index file
+ can contain one or more tags.
+ \returns Count of open index files.
+*/
+
+xbInt32 xbDbf::GetPhysicalIxCnt() const {
+
+ xbInt32 lCnt = 0;
+ #ifdef XB_INDEX_SUPPORT
+ xbIxList *p = ixList;
+ while( p ){
+ lCnt++;
+ p = p->next;
+ }
+ #endif
+ return lCnt;
+}
+#endif // XB_INDEX_SUPPORT
+
+
+/************************************************************************/
+//! @brief Get the previous record.
+/*!
+ Get the previous not deleted record. This routine skips over any deleted records.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbDbf::GetPrevRecord()
+{
+ return GetPrevRecord( XB_ACTIVE_RECS );
+}
+
+/************************************************************************/
+//! @brief Get the previous record.
+/*!
+
+ \param iOption XB_ALL_RECS - Get the previous record, deleted or not.<br>
+ XB_ACTIVE_RECS - Get the previous active record.<br>
+ XB_DELETED_RECS - Get the previous deleted record.<br>
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbDbf::GetPrevRecord( xbInt16 iOption ){
+ if( ulNoOfRecs == 0 )
+ return XB_EMPTY;
+ else if( ulCurRec <= 1L )
+ return XB_BOF;
+ xbInt16 iRc = GetRecord( ulCurRec - 1 );
+ while( iRc == XB_NO_ERROR &&
+ ((RecordDeleted() && iOption == XB_ACTIVE_RECS) ||
+ (!RecordDeleted() && iOption == XB_DELETED_RECS)))
+ if( ulCurRec > 1 )
+ iRc = GetRecord( ulCurRec - 1 );
+ else
+ return XB_BOF;
+
+ return iRc;
+}
+
+
+/************************************************************************/
+//! @brief Get record for specified record number.
+/*!
+ Retrieve a record from disk and load it into the record buffer. If auto commit
+ is enabled and there are pending updates, this routine will flush the updates
+ to disk before proceeding to ulRecNo.
+
+ \param ulRecNo - Record number to retrieve.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbDbf::GetRecord( xbUInt32 ulRecNo ){
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+
+ try{
+ /* verify the file is open */
+ if( iDbfStatus == XB_CLOSED ){
+ iErrorStop = 100;
+ iRc = XB_NOT_OPEN;
+ throw iRc;
+ }
+ if( iDbfStatus == XB_UPDATED ){
+ if( GetAutoCommit() == 1 ){
+ if(( iRc = Commit()) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ } else {
+ if(( iRc = Abort()) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ }
+ }
+
+
+ // std::cout << "xbdbf::GetRecord: " << ulRecNo << " " << ulNoOfRecs << "\n";
+ if( ulRecNo > ulNoOfRecs || ulRecNo == 0L ){
+ iErrorStop = 130;
+ iRc = XB_INVALID_RECORD;
+ throw iRc;
+ }
+
+ #ifdef XB_BLOCKREAD_SUPPORT
+ if( bBlockReadEnabled )
+ return pRb->GetRecord( ulRecNo );
+ #endif // XB_BLOCK_READ_SUPPORT
+
+
+ if(( xbFseek( (uiHeaderLen+(( (xbInt64) ulRecNo-1L ) * uiRecordLen )), SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ iRc = XB_SEEK_ERROR;
+ throw iRc;
+ }
+
+ if( xbFread( RecBuf, uiRecordLen, 1 ) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ iRc = XB_READ_ERROR;
+ throw iRc;
+ }
+ ulCurRec = ulRecNo;
+ }
+
+ catch (xbInt16 iRc ){
+ if( iRc != XB_LOCK_FAILED ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbDbf::GetRecord() Exception Caught. Error Stop = [%d] iRc = [%d] record = [%d]", iErrorStop, iRc, ulRecNo );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ }
+ return iRc;
+}
+/************************************************************************/
+//! @brief Get pointer to record buffer
+/*!
+ \param iOpt 0 for RecBuf (current) or 1 for RecBuf2 (original contents)
+
+ \returns Pointer to record buffer.
+*/
+char * xbDbf::GetRecordBuf( xbInt16 iOpt ) const {
+ if( iOpt )
+ return RecBuf2;
+ else
+ return RecBuf;
+}
+
+/************************************************************************/
+//! @brief Get the current number of records in the dbf data file.
+/*!
+ \returns Record count or <a href="xbretcod_8h.html">Return Codes</a>
+*/
+/*
+xbUInt32 xbDbf::GetRecordCount(){
+
+ xbUInt32 ulCnt;
+ xbInt16 iRc = GetRecordCnt( ulCnt );
+ if( iRc < 0 )
+ return (xbUInt32) iRc;
+ else
+ return ulCnt;
+}
+*/
+/************************************************************************/
+//! @brief Get the current number of records in the dbf data file.
+/*!
+ \param ulRecCnt Output number of records in file.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbDbf::GetRecordCnt( xbUInt32 & ulRecCnt )
+{
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+
+ #ifdef XB_LOCKING_SUPPORT
+ xbBool bLocked = xbFalse;
+ #endif // XB_LOCKING_SUPPORT
+
+ try{
+ #ifdef XB_LOCKING_SUPPORT
+ if( iAutoLock && !bTableLocked ){
+ if(( iRc = LockHeader( XB_LOCK )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ } else
+ bLocked = xbTrue;
+ }
+ #endif // XB_LOCKING_SUPPORT
+
+ if((iRc = ReadHeader(1,1)) != XB_NO_ERROR){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ }
+ catch( xbInt16 iRc ){
+ if( iRc != XB_LOCK_FAILED ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbDbf::GetRecordCnt() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ }
+
+ #ifdef XB_LOCKING_SUPPORT
+ if( bLocked ){
+ LockHeader( XB_UNLOCK );
+ }
+ #endif
+
+ ulRecCnt = ulNoOfRecs;
+ return iRc;
+}
+/************************************************************************/
+//! @brief Get the dbf record length.
+/*!
+ \returns Record length.
+*/
+xbUInt16 xbDbf::GetRecordLen() const {
+ return uiRecordLen;
+}
+/************************************************************************/
+#ifdef XB_LOCKING_SUPPORT
+//! @brief Get table locked status
+/*!
+ \returns Table lock status.
+*/
+xbBool xbDbf::GetTableLocked() const {
+ return this->bTableLocked;
+}
+#endif // XB_LOCKING_SUPPORT
+/************************************************************************/
+#ifdef XB_INDEX_SUPPORT
+//! @brief Get tag list for dbf file.
+/*!
+ This routine returns a list of tags for the file.<br>
+
+ The library is structured to support one or more files of the same or differing
+ index types (NDX/MDX/TDX), with each file supporting one or more index tags.<br>
+
+ \returns Tag list for the file/table.
+*/
+xbLinkListNode<xbTag *> *xbDbf::GetTagList() const {
+ return llTags.GetHeadNode();
+}
+#endif // XB_INDEX_SUPPORT
+/************************************************************************/
+//! @brief Get the table alias.
+/*!
+ This routine returns the table alias.
+ \returns Table alias
+*/
+const xbString & xbDbf::GetTblAlias() const {
+ return this->sAlias;
+}
+
+/************************************************************************/
+//! @brief Get the pointer to the xbXbase structure,
+/*!
+ \returns Pointer to xbXbase structure.
+*/
+xbXBase * xbDbf::GetXbasePtr() const {
+ return xbase;
+}
+/************************************************************************/
+#ifdef XB_INF_SUPPORT
+//! @brief Load .INF data file,
+/*!
+ Protected method. This routine loads the ndx inf file.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbDbf::LoadInfData(){
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+
+ try{
+ // create file name
+ xbString sInfFileName;
+ if(( iRc = GetInfFileName( sInfFileName )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ // if file does not exist, return no error
+ xbFile fMd( xbase );
+ if( !fMd.FileExists( sInfFileName ))
+ return XB_NO_ERROR;
+
+ // open file file in read only mode
+ if(( iRc = fMd.xbFopen( "r", sInfFileName, GetShareMode())) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ // clear the linked list
+ llInfData.Clear();
+
+ // for each entry in the file, add a linked list item
+ xbString sRec;
+ xbString sLeft3;
+ xbString sFn;
+
+ while( iRc == XB_NO_ERROR ){
+ sRec = "";
+ if(( iRc = fMd.xbFgets( 132, sRec )) == XB_NO_ERROR ){
+ sLeft3 = sRec;
+ sLeft3.Left( 3 );
+ sLeft3.ToUpperCase();
+ if( sLeft3 == "NDX"){
+ sFn.ExtractElement(sRec.Str(), '=', 2 );
+ sFn.ZapChar( 0x0d );
+ sFn.ZapChar( 0x0a );
+ llInfData.InsertAtEnd( sFn );
+ }
+ }
+ }
+ // close the file
+ if(( iRc = fMd.xbFclose()) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+
+ } catch( xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbdbf::LoadInfData() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+#endif // XB_INF_SUPPORT
+
+/************************************************************************/
+#ifdef XB_LOCKING_SUPPORT
+//! @brief Lock append bytes.
+/*!
+ This routine locks the append bytes and is used by the AppendRecord function.
+
+ \param iLockFunction XB_LOCK<br>XB_UNLOCK
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbDbf::LockAppend( xbInt16 iLockFunction )
+{
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ xbUInt32 ulAppendRec;
+
+ try{
+ if( iLockFunction == XB_LOCK ){
+ iErrorStop = 100;
+ if( ulAppendLocked > 0 ) /* already have an append lock */
+ return XB_NO_ERROR;
+
+ ulAppendRec = ulNoOfRecs + 1; /* record number needing to be locked */
+ if( GetLockFlavor() == LK_DBASE ){
+ iRc = xbLock( XB_LOCK, LK4026531839, 1 );
+ if( iRc != XB_NO_ERROR ){
+ if( iRc == XB_LOCK_FAILED )
+ return iRc;
+ else{
+ iErrorStop = 110;
+ throw iRc;
+ }
+ }
+
+ xbInt64 llAppendRecLockByte = (xbInt64) LK4026531838 - ulAppendRec;
+ iRc = xbLock( XB_LOCK, llAppendRecLockByte, 1 );
+ if( iRc != XB_NO_ERROR ){
+ xbLock( XB_UNLOCK, LK4026531839, 1 );
+ if( iRc == XB_LOCK_FAILED ){
+ return iRc;
+ } else {
+ iErrorStop = 120;
+ throw iRc;
+ }
+ }
+ ulAppendLocked = ulAppendRec; /* set the append lock switch */
+
+
+ // } else { - other lock-table flavor options go here Clipper, Fox, etc - }
+
+ } else {
+ iErrorStop = 130;
+ iRc = XB_INVALID_OPTION;
+ throw iRc;
+ }
+
+ } else if( iLockFunction == XB_UNLOCK ){
+ iErrorStop = 200;
+
+ if( ulAppendLocked == 0 ) /* verify we have an active append lock */
+ return XB_NO_ERROR;
+
+ if( GetLockFlavor() == LK_DBASE ){
+ xbInt64 llAppendRecLockByte =(xbInt64) LK4026531838 - ulAppendLocked;
+ iRc = xbLock( XB_UNLOCK, llAppendRecLockByte, 1 );
+ if( iRc != XB_NO_ERROR ){
+ xbLock( XB_UNLOCK, LK4026531839, 1 );
+ iErrorStop = 220;
+ throw iRc;
+ }
+ iRc = xbLock( XB_UNLOCK, LK4026531839, 1 );
+ if( iRc != XB_NO_ERROR ){
+ iErrorStop = 230;
+ throw iRc;
+ }
+
+ ulAppendLocked = 0; /* release the append lock switch */
+
+ // } else { - other unlock-table flavor options go here Clipper, Fox, etc - }
+
+ } else {
+ iErrorStop = 290;
+ iRc = XB_INVALID_OPTION;
+ throw iRc;
+ }
+ } else {
+ iErrorStop = 300;
+ iRc = XB_INVALID_OPTION;
+ throw iRc;
+ }
+ } catch( xbInt16 iRc ){
+ if( iRc != XB_LOCK_FAILED ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbdbf::LockAppendBytes() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ }
+
+ return iRc;
+}
+
+/************************************************************************/
+//! @brief Lock Header
+/*!
+ This routine locks the file header.
+ \param iLockFunction XB_LOCK<br>XB_UNLOCK
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbDbf::LockHeader( xbInt16 iLockFunction )
+{
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ try{
+
+ if( iLockFunction == XB_LOCK ){
+ iErrorStop = 100;
+ if( GetHeaderLocked())
+ return XB_NO_ERROR;
+
+ iErrorStop = 110;
+ if( GetLockFlavor() == LK_DBASE ){
+
+ iRc = xbLock( XB_LOCK, LK4026531838, 1 );
+
+ if( iRc != XB_NO_ERROR ){
+ if( iRc == XB_LOCK_FAILED )
+ return iRc;
+ else{
+ iErrorStop = 120;
+ throw iRc;
+ }
+ }
+
+ } else {
+ iErrorStop = 130;
+ iRc = XB_INVALID_OPTION;
+ throw iRc;
+ }
+
+ SetHeaderLocked( xbTrue );
+
+ } else if( iLockFunction == XB_UNLOCK ){
+
+ iErrorStop = 200;
+ if( !GetHeaderLocked())
+ return XB_NO_ERROR;
+
+ iErrorStop = 210;
+ if( GetLockFlavor() == LK_DBASE ){
+ iRc = xbLock( XB_UNLOCK, LK4026531838, 1 );
+ if( iRc != XB_NO_ERROR ){
+ iErrorStop = 220;
+ throw iRc;
+ }
+ } else {
+ iErrorStop = 230;
+ iRc = XB_INVALID_OPTION;
+ throw iRc;
+ }
+ SetHeaderLocked( xbFalse );
+ } else {
+ iErrorStop = 300;
+ iRc = XB_INVALID_OPTION;
+ throw iRc;
+ }
+
+ } catch (xbInt16 iRc ){
+ if( iRc != XB_LOCK_FAILED ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbdbf::LockHeader() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ }
+ return iRc;
+}
+/************************************************************************/
+#ifdef XB_INDEX_SUPPORT
+//! @brief Lock Index files.
+/*!
+ This routine locks all the index files.
+ \param iLockFunction XB_LOCK<br>XB_UNLOCK
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbDbf::LockIndices( xbInt16 iLockFunction )
+{
+ // this function doesn't take into account any Lack Flavors other than DBASE,
+ // would need updated to supprot other lock flavors - Clipper, FoxPro etc
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+
+ try{
+ xbIxList *ixLI = GetIxList(); // index list item
+
+ while( ixLI ){
+ if( iLockFunction == XB_LOCK ){
+
+ #ifdef XB_NDX_SUPPORT
+ if( *ixLI->sFmt == "NDX" ){
+ if( !ixLI->ix->GetLocked()){
+ if(( iRc = ixLI->ix->xbLock( XB_LOCK, LK4026531838, 1 )) != XB_NO_ERROR ){
+ ixLI->ix->xbLock( XB_UNLOCK, LK4026531838, 1 );
+ iErrorStop = 100;
+ throw iRc;
+ }
+ ixLI->ix->SetLocked( xbTrue );
+ }
+ }
+ #endif
+
+ #ifdef XB_MDX_SUPPORT
+ if( *ixLI->sFmt == "MDX" ){
+ if( !ixLI->ix->GetLocked()){
+ if(( iRc = ixLI->ix->xbLock( XB_LOCK, LK4026531838, 1 )) != XB_NO_ERROR ){
+ ixLI->ix->xbLock( XB_UNLOCK, LK4026531838, 1 );
+ iErrorStop = 100;
+ throw iRc;
+ }
+ ixLI->ix->SetLocked( xbTrue );
+ }
+ }
+ #endif
+
+ #ifdef XB_TDX_SUPPORT
+ if( *ixLI->sFmt == "TDX" ){
+ if( !ixLI->ix->GetLocked()){
+ if(( iRc = ixLI->ix->xbLock( XB_LOCK, LK4026531838, 1 )) != XB_NO_ERROR ){
+ ixLI->ix->xbLock( XB_UNLOCK, LK4026531838, 1 );
+ iErrorStop = 100;
+ throw iRc;
+ }
+ ixLI->ix->SetLocked( xbTrue );
+ }
+ }
+ #endif
+
+ } else if( iLockFunction == XB_UNLOCK ){
+
+ #ifdef XB_NDX_SUPPORT
+ if( *ixLI->sFmt == "NDX" ){
+ if( ixLI->ix->GetLocked()){
+ if(( iRc = ixLI->ix->xbLock( XB_UNLOCK, LK4026531838, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ ixLI->ix->SetLocked( xbFalse );
+ }
+ }
+ #endif
+
+ #ifdef XB_MDX_SUPPORT
+ if( *ixLI->sFmt == "MDX" ){
+ if( ixLI->ix->GetLocked()){
+ if(( iRc = ixLI->ix->xbLock( XB_UNLOCK, LK4026531838, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ ixLI->ix->SetLocked( xbFalse );
+ }
+ }
+ #endif
+
+ #ifdef XB_TDX_SUPPORT
+ if( *ixLI->sFmt == "MDX" ){
+ if( ixLI->ix->GetLocked()){
+ if(( iRc = ixLI->ix->xbLock( XB_UNLOCK, LK4026531838, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ ixLI->ix->SetLocked( xbFalse );
+ }
+ }
+ #endif
+
+ }
+ ixLI = ixLI->next;
+ }
+
+ } catch( xbInt16 iRc ){
+ if( iRc != XB_LOCK_FAILED ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbdbf::LockIndices() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ }
+ return iRc;
+}
+#endif // XB_INDEX_SUPPORT
+/************************************************************************/
+#ifdef XB_MEMO_SUPPORT
+//! @brief Lock Memo file.
+/*!
+ This routine locks the memo file for updates.
+ \param iLockFunction XB_LOCK<br>XB_UNLOCK
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbDbf::LockMemo( xbInt16 iLockFunction ){
+ if( MemoFieldsExist())
+ return Memo->LockMemo( iLockFunction );
+ else
+ return XB_NO_ERROR;
+}
+#endif // XB_MEMO_SUPPORT
+
+
+
+/************************************************************************/
+//! @brief Loc Record
+/*!
+ This routine locks a record for update.
+ \param iLockFunction XB_LOCK<br>XB_UNLOCK
+ \param ulRecNo Record number to lock
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbDbf::LockRecord( xbInt16 iLockFunction, xbUInt32 ulRecNo )
+{
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+
+ try{
+
+ if( ulRecNo > ulNoOfRecs )
+ return XB_INVALID_RECORD;
+
+ if( iLockFunction == XB_LOCK ){
+ iErrorStop = 100;
+
+ if( lloRecLocks.KeyExists( ulRecNo ))
+ return XB_NO_ERROR;
+
+ if( GetLockFlavor() == LK_DBASE ){
+
+ iRc = xbLock( XB_LOCK, LK4026531838 - ulRecNo, 1 );
+ if( iRc != XB_NO_ERROR ){
+ if( iRc == XB_LOCK_FAILED ){
+ return iRc;
+ } else {
+ iErrorStop = 110;
+ throw iRc;
+ }
+ }
+ // other lock-table flavor options go here Clipper, Fox, etc
+
+ } else {
+ iErrorStop = 120;
+ iRc = XB_INVALID_OPTION;
+ throw iRc;
+ }
+
+ // add the record lock info to the linked list chain of record locks
+ iRc = lloRecLocks.InsertKey( ulRecNo );
+ if( iRc != XB_NO_ERROR ){
+ xbLock( XB_UNLOCK, LK4026531838 - ulRecNo, 1 );
+ iErrorStop = 130;
+ throw iRc;
+ }
+
+ } else if( iLockFunction == XB_UNLOCK ){
+
+ iErrorStop = 200;
+
+ if( !lloRecLocks.KeyExists( ulRecNo ) )
+ return XB_NO_ERROR;
+
+ if( GetLockFlavor() == LK_DBASE ){
+ iRc = xbLock( XB_UNLOCK, LK4026531838 - ulRecNo, 1 );
+ if( iRc != XB_NO_ERROR ){
+ iErrorStop = 210;
+ throw iRc;
+ }
+ } else {
+ iErrorStop = 220;
+ iRc = XB_INVALID_OPTION;
+ throw iRc;
+ }
+
+ // remove the record lock info to the linked list chain of record locks
+ // next line is crashing
+ iRc = lloRecLocks.RemoveKey( ulRecNo );
+ if( iRc != XB_NO_ERROR ){
+ iErrorStop = 230;
+ throw iRc;
+ }
+
+ } else {
+ iErrorStop = 300;
+ iRc = XB_INVALID_OPTION;
+ throw iRc;
+ }
+
+ } catch( xbInt16 iRc ){
+ if( iRc != XB_LOCK_FAILED ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbdbf::LockRecord() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ }
+ return iRc;
+}
+
+/************************************************************************/
+//! @brief Lock table.
+/*!
+ This routine locks the table for updates.
+
+ \param iLockFunction XB_LOCK<br>XB_UNLOCK
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbDbf::LockTable( xbInt16 iLockFunction )
+{
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+
+ try{
+ if( iLockFunction == XB_LOCK ){
+ iErrorStop = 100;
+ if( GetTableLocked())
+ return XB_NO_ERROR; // table already locked
+
+ iErrorStop = 110;
+ if( GetLockFlavor() == LK_DBASE ){
+
+ // lOffset = LK4026531838;
+ // iLen = 2;
+ iRc = xbLock( XB_LOCK, LK4026531838, 2 );
+ if( iRc != XB_NO_ERROR ){
+ if( iRc == XB_LOCK_FAILED )
+ return iRc;
+ else{
+ iErrorStop = 120;
+ throw iRc;
+ }
+ }
+
+ // lOffset = LK3026531838;
+ // iLen = LK1000000000;
+ iRc = xbLock( XB_LOCK, LK3026531838, LK1000000000);
+ if( iRc != XB_NO_ERROR ){
+
+ // lOffset = LK4026531838;
+ // iLen = 2;
+ xbLock( XB_UNLOCK, LK4026531838, 2 );
+ if( iRc == XB_LOCK_FAILED ){
+ return iRc;
+ } else {
+ iErrorStop = 130;
+ throw iRc;
+ }
+ }
+
+ // iRc = xbLock( XB_UNLOCK, lOffset, iLen );
+ iRc = xbLock( XB_UNLOCK, LK3026531838, LK1000000000);
+ if( iRc != XB_NO_ERROR ){
+ // lOffset = LK4026531838;
+ // iLen = 2;
+ xbLock( XB_UNLOCK, LK4026531838, 2 );
+ iErrorStop = 140;
+ throw iRc;
+ }
+
+ // other lock-table flavor options go here Clipper, Fox, etc
+
+ } else {
+ iErrorStop = 190;
+ iRc = XB_INVALID_OPTION;
+ throw iRc;
+ }
+ SetTableLocked( xbTrue );
+
+ } else if( iLockFunction == XB_UNLOCK ){
+
+ iErrorStop = 200;
+ if( !GetTableLocked())
+ return XB_NO_ERROR; // table already unlocked
+
+ iErrorStop = 210;
+ if( GetLockFlavor() == LK_DBASE ){
+
+ // lOffset = LK4026531838;
+ // iLen = 2;
+ iRc = xbLock( XB_UNLOCK, LK4026531838, 2 );
+ if( iRc != XB_NO_ERROR ){
+ iErrorStop = 220;
+ throw iRc;
+ }
+ } else {
+ iErrorStop = 290;
+ iRc = XB_INVALID_OPTION;
+ throw iRc;
+ }
+ SetTableLocked( xbFalse );
+
+ } else {
+ iErrorStop = 300;
+ iRc = XB_INVALID_OPTION;
+ throw iRc;
+ }
+
+ } catch (xbInt16 iRc ){
+ if( iRc != XB_LOCK_FAILED ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbdbf::LockFile() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ }
+ return iRc;
+
+}
+#endif // XB_LOCKING_SUPPORT
+
+
+/************************************************************************/
+//! @brief Check for existence of any memo fields.
+/*!
+ \returns xbTrue - Memo fields exist.<br>xbFalse - Memo fields don't exist.
+*/
+xbBool xbDbf::MemoFieldsExist() const {
+
+
+#ifdef XB_MEMO_SUPPORT
+ if( iMemoFieldCnt > 0 )
+ return xbTrue;
+#endif
+ return xbFalse;
+}
+
+/************************************************************************/
+//! @brief Open a table/dbf file.
+/*!
+ This routine sets the alias name to the same as the table name.
+
+ \param sTableName Table name to open, Include the .dbf or .DBF extension.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbDbf::Open( const xbString & sTableName ) {
+ return Open( sTableName, sTableName );
+}
+
+/************************************************************************/
+//! @brief Open a table/dbf file.
+/*!
+ \param sTableName Table name to open, Include the .dbf or .DBF extension.
+ \param sAlias Alias name to assign to this entry.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbDbf::Open( const xbString & sTableName, const xbString & sAlias ){
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+
+ try{
+ if(( iRc = Open( sTableName, sAlias, XB_READ_WRITE, XB_MULTI_USER )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+
+ // do any .INF data things on the file, like open indices
+ #ifdef XB_INF_SUPPORT
+ if(( iRc = LoadInfData()) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ xbUInt32 llNodeCnt = llInfData.GetNodeCnt();
+ if( llNodeCnt > 0 ){
+ xbString s2;
+ xbLinkListNode<xbString> * llN = llInfData.GetHeadNode();
+ for( xbUInt32 i = 0; i < llNodeCnt; i++ ){
+ s2 = llN->GetKey();
+ #ifdef XB_NDX_SUPPORT
+ if(( iRc = OpenIndex( "NDX", s2 )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc ;
+ }
+ #endif // XB_NDX_SUPPORT
+ llN = llN->GetNextNode();
+ }
+ }
+ #endif // XB_INF_SUPPORT
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbdbf::Open() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/************************************************************************/
+#ifdef XB_INDEX_SUPPORT
+//! @brief Open an index.
+/*!
+ Open an index file for the dbf file.
+
+ \param sIxType - "NDX" or "MDX"
+ \param sFileName - File name of index,
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbDbf::OpenIndex( const xbString &sIxType, const xbString &sFileName ){
+
+ // this routine is used to open indices and set up linkages
+
+ xbInt16 iErrorStop = 0;
+ xbInt16 iRc = XB_NO_ERROR;
+ xbIx *pIx = NULL;
+
+ try{
+ xbString sType = sIxType;
+ sType.ToUpperCase();
+
+ if( sType == "" ){
+ iErrorStop = 100;
+ iRc = XB_INVALID_OPTION;
+ throw iRc;
+
+ #ifdef XB_NDX_SUPPORT
+ } else if( sType == "NDX" ){
+ pIx = new xbIxNdx( this );
+ if(( iRc = pIx->Open( sFileName )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ #endif
+
+ #ifdef XB_MDX_SUPPORT
+ } else if( sType == "MDX" ){
+ pIx = new xbIxMdx( this );
+ if(( iRc = pIx->Open( sFileName )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+
+ #endif
+
+ } else {
+ iErrorStop = 130;
+ iRc = XB_INVALID_OPTION;
+ throw iRc;
+ }
+
+ if(( iRc = AddIndex( pIx, sIxType )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+ if(( iRc = UpdateTagList()) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+ pCurIx = pIx;
+ sCurIxType = sIxType;
+ vpCurIxTag = pIx->GetTag( 0 );
+ }
+ catch (xbInt16 iRc ){
+ if( pIx ) delete pIx;
+ xbString sMsg;
+ sMsg.Sprintf( "xbdbf::OpenIndex() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+#endif // XB_INDEX_SUPPORT
+
+
+
+/************************************************************************/
+//! @brief Pack dbf file.
+/*!
+ This routine eliminates all deleted records from the file.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbDbf::Pack()
+{
+ xbUInt32 ulDeletedRecCnt;
+ return Pack( ulDeletedRecCnt );
+}
+
+
+/************************************************************************/
+//! @brief Pack dbf file.
+/*!
+ This routine eliminates all deleted records from the file and clears
+ out any unused blocks in the memo file if one exists.
+ \param ulDeletedRecCnt - Output - number of recrods removed from the file.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbDbf::Pack( xbUInt32 &ulDeletedRecCnt )
+{
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ xbUInt32 ulLastMovedRec = 0;
+ xbUInt32 ulStartPos = 0;
+ xbUInt32 ulLastPackedRec = 0;
+ xbUInt32 ulMoveRec = 0;
+ xbUInt32 ulRecCnt = 0;
+ ulDeletedRecCnt = 0;
+
+ #ifdef XB_LOCKING_SUPPORT
+ xbBool bLocked = xbFalse;
+ #endif // XB_LOCKING_SUPPORT
+
+ try{
+ if( !FileIsOpen() ){
+ iErrorStop = 100;
+ iRc = XB_DBF_FILE_NOT_OPEN;
+ throw iRc;
+ }
+
+ #ifdef XB_LOCKING_SUPPORT
+ if( iAutoLock && !bTableLocked ){
+ if(( iRc = LockTable( XB_LOCK )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ } else {
+ bLocked = xbTrue;
+ }
+ }
+ #endif
+
+ if(( iRc = GetRecordCnt( ulRecCnt )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+
+ xbBool bDone = xbFalse;
+ for( xbUInt32 ulI = 1; ulI <= ulRecCnt && !bDone; ulI++ ){
+
+ if(( iRc = GetRecord( ulI )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ if( RecordDeleted()){
+ ulDeletedRecCnt++;
+ if( ulI > ulLastMovedRec )
+ ulStartPos = ulI;
+ else
+ ulStartPos = ulLastMovedRec;
+
+ iRc = GetNextRecord( 1, ulStartPos );
+
+ if( iRc == XB_NO_ERROR ){
+ ulMoveRec = ulCurRec;
+ }
+ else if( iRc == XB_EOF ){
+ ulMoveRec = 0;
+ bDone = xbTrue;
+ }
+ else{
+ iErrorStop = 140;
+ throw iRc;
+ }
+ if( ulMoveRec > 0 ){
+ if(( iRc = DeleteRecord()) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+ if(( iRc = PutRecord( ulMoveRec )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+ if(( iRc = UndeleteRecord()) != XB_NO_ERROR ){
+ iErrorStop = 170;
+ throw iRc;
+ }
+ if(( iRc = PutRecord( ulI )) != XB_NO_ERROR ){
+ iErrorStop = 180;
+ throw iRc;
+ }
+ ulLastPackedRec = ulI;
+ }
+
+ } else {
+ ulLastPackedRec = ulI;
+ }
+ }
+
+ if( ulLastPackedRec < ulRecCnt ){
+ // update header record count
+
+ xbDate d;
+ d.Sysdate();
+ cUpdateYY = (char) d.YearOf() - 1900;
+ cUpdateMM = (char) d.MonthOf();
+ cUpdateDD = (char) d.DayOf( XB_FMT_MONTH );
+ ulNoOfRecs = ulLastPackedRec;
+
+ // rewrite the header record
+ if(( iRc = WriteHeader( 1, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 190;
+ throw iRc;
+ }
+
+ // truncate the file to the new size
+ if(( iRc = xbTruncate( uiHeaderLen + uiRecordLen * ulLastPackedRec )) != XB_NO_ERROR ){
+ iErrorStop = 200;
+ throw iRc;
+ }
+ }
+
+ if( ulNoOfRecs > 0 ){
+ if(( iRc = GetRecord( 1 )) != XB_NO_ERROR ){
+ iErrorStop = 210;
+ throw iRc;
+ }
+ } else {
+ BlankRecord();
+ ulCurRec = 0;
+ }
+
+ #ifdef XB_MEMO_SUPPORT
+ if( iMemoFieldCnt > 0 ){
+ if(( iRc = Memo->PackMemo( 0 )) != XB_NO_ERROR ){
+ iErrorStop = 220;
+ throw iRc;
+ }
+ }
+ #endif // XB_MEMO_SUPPORT
+ }
+ catch (xbInt16 iRc ){
+ if( iRc != XB_LOCK_FAILED ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbdbf::Pack() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ }
+ #ifdef XB_LOCKING_SUPPORT
+ if( bLocked ){
+ LockTable( XB_UNLOCK );
+ }
+ #endif
+ return iRc;
+}
+
+/************************************************************************/
+//! @brief Write the current record to disk.
+/*!
+ This routine is used to write any updates to the current record buffer to disk.
+
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbDbf::PutRecord() {
+ return PutRecord(ulCurRec);
+}
+
+/************************************************************************/
+//! @brief Write record to disk.
+/*!
+ This routine is used to write a copy of the current record buffer to disk
+ for a given record number.
+
+ \param ulRecNo Record number to update.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbDbf::PutRecord(xbUInt32 ulRecNo)
+{
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ try{
+
+ if( ulRecNo < 1 ){
+ iErrorStop = 100;
+ throw XB_INVALID_RECORD;
+ }
+
+ xbUInt32 ulRecCnt;
+ if(( iRc = GetRecordCnt( ulRecCnt )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+
+ if( ulRecNo > ulRecCnt ){
+ iErrorStop = 120;
+ throw XB_INVALID_RECORD;
+ }
+
+ if( iDbfStatus == XB_CLOSED ){
+ iErrorStop = 130;
+ iRc = XB_NOT_OPEN;
+ throw iRc;
+ }
+ /* lock the database */
+ #ifdef XB_LOCKING_SUPPORT
+ if( iAutoLock && !bTableLocked ){
+ if(( iRc = LockHeader( XB_LOCK )) != XB_NO_ERROR ){
+ throw iRc;
+ }
+ }
+ #endif // XB_LOCKING_SUPPORT
+
+ if(( iRc = ReadHeader( 1, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+
+ // verify valid record number request
+ if( ulRecNo > ulNoOfRecs || ulRecNo == 0L ){
+ iErrorStop = 160;
+ iRc = XB_INVALID_RECORD;
+ throw iRc;
+ }
+
+ #ifdef XB_LOCKING_SUPPORT
+ if( iAutoLock && !bTableLocked ){
+ if(( iRc = LockRecord( XB_LOCK, ulRecNo )) != XB_NO_ERROR ){
+ iErrorStop = 170;
+ throw iRc;
+ }
+
+ #ifdef XB_INDEX_SUPPORT
+ if(( iRc = LockIndices( XB_LOCK )) != XB_NO_ERROR ){
+ iErrorStop = 180;
+ throw iRc;
+ }
+ #endif // XB_INDEX_SUPPORT
+ }
+ #endif // XB_LOCKING_SUPPORT
+
+ // build keys, check for duplicate keys, add keys
+ #ifdef XB_INDEX_SUPPORT
+ xbIxList *ixList = GetIxList();
+
+ while( ixList ){
+ if(( iRc = ixList->ix->CreateKeys( 2 )) != XB_NO_ERROR ){
+ iErrorStop = 190;
+ throw iRc;
+ }
+ iRc = ixList->ix->CheckForDupKeys();
+ if( iRc != 0 ){
+ if( iRc < 0 ){
+ iErrorStop = 200;
+ throw iRc;
+ }
+ throw XB_KEY_NOT_UNIQUE;
+ }
+ ixList = ixList->next;
+ }
+
+ ixList = GetIxList();
+ while( ixList ){
+
+ if(( iRc = ixList->ix->AddKeys( ulCurRec )) != XB_NO_ERROR ){
+ iErrorStop = 210;
+ throw iRc;
+ }
+ ixList = ixList->next;
+ }
+
+ ixList = GetIxList();
+ while( ixList ){
+ if(( iRc = ixList->ix->DeleteKeys()) != XB_NO_ERROR ){
+ iErrorStop = 220;
+ throw iRc;
+ }
+ ixList = ixList->next;
+ }
+ #endif // XB_INDEX_SUPPORT
+
+ // update latest header date if changed
+ xbDate d;
+ d.Sysdate();
+ if( (cUpdateYY != (char)(d.YearOf() - 1900)) || (cUpdateMM != (char) d.MonthOf()) || (cUpdateDD != (char)d.DayOf( XB_FMT_MONTH))){
+ cUpdateYY = (char) d.YearOf() - 1900;
+ cUpdateMM = (char) d.MonthOf();
+ cUpdateDD = (char) d.DayOf( XB_FMT_MONTH );
+ // rewrite the header record - first 8 bytes
+ if(( iRc = WriteHeader( 1, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 70;
+ throw iRc;
+ }
+ }
+
+ // update record
+ iRc = xbFseek( (uiHeaderLen+(( (xbInt64) ulRecNo-1L ) * uiRecordLen )),0 );
+ if( iRc != XB_NO_ERROR ){
+ iErrorStop = 240;
+ throw iRc;
+ }
+
+ if( xbFwrite( RecBuf, uiRecordLen, 1 ) != XB_NO_ERROR ){
+ iErrorStop = 250;
+ iRc = XB_WRITE_ERROR;
+ throw iRc;
+ }
+
+ #ifdef XB_MEMO_SUPPORT
+ if( MemoFieldsExist() ){
+ if(( iRc = Memo->Commit()) != XB_NO_ERROR ){
+ iErrorStop = 260;
+ throw iRc;
+ }
+ }
+ #endif
+
+ ulCurRec = ulRecNo;
+ iDbfStatus = XB_OPEN;
+ }
+
+ catch (xbInt16 iRc ){
+ if( iRc != XB_LOCK_FAILED && iRc != XB_KEY_NOT_UNIQUE ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbdbf::PutRecord() Exception Caught. Error Stop = [%d] iRc = [%d] record = [%d]", iErrorStop, iRc, ulRecNo );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ }
+
+ #ifdef XB_LOCKING_SUPPORT
+ if( iAutoLock ){
+ LockHeader( XB_UNLOCK );
+ LockAppend( XB_UNLOCK );
+ LockRecord( XB_UNLOCK, ulRecNo );
+ #ifdef XB_INDEX_SUPPORT
+ LockIndices( XB_UNLOCK );
+ #endif // XB_INDEX_SUPPORT
+ }
+ #endif // XB_LOCKING_SUPPORT
+
+ return iRc;
+}
+
+/************************************************************************/
+//! @brief Read dbf file header information.
+/*!
+ This method assumes the header has been locked appropriately
+ in a multi user environment
+
+
+ \param iPositionOption 0 - Don't fseek to beginning of file before read.<br>
+ 1 - Start from beginning of file.
+
+ \param iReadOption 0 - Read entire 32 byte header<br>
+ 1 - Read first eight bytes which includes the last update date and number of records.
+
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbDbf::ReadHeader( xbInt16 iPositionOption, xbInt16 iReadOption ){
+
+ char buf[32];
+ size_t iReadSize;
+
+ if(iPositionOption)
+ xbRewind();
+ if( iReadOption == 1 )
+ iReadSize = 8;
+ else
+ iReadSize = 32;
+
+ if(xbFread(buf, iReadSize, 1) != XB_NO_ERROR)
+ return XB_READ_ERROR;
+ memcpy(&cVersion, buf, 4);
+ ulNoOfRecs = eGetUInt32(&buf[4]);
+ if( iReadOption == 1 )
+ return XB_NO_ERROR;
+
+ uiHeaderLen = eGetUInt16(&buf[8]);
+ uiRecordLen = eGetUInt16(&buf[10]);
+ cTransactionFlag = buf[14];
+ cEncryptionFlag = buf[15];
+ cIndexFlag = buf[28];
+ cLangDriver = buf[29];
+ return XB_NO_ERROR;
+}
+
+/************************************************************************/
+//! @brief Return record deletion status.
+/*!
+ This routine returns the record deletion status.
+ \param iOpt 0 = Current record buffer, 1 = Original record buffer
+ \returns xbTrue - Record deleted.<br>xbFalse - Record not deleted.
+*/
+xbInt16 xbDbf::RecordDeleted( xbInt16 iOpt ) const {
+ if( !iOpt && RecBuf && RecBuf[0] == 0x2a )
+ return xbTrue;
+ else if( iOpt && RecBuf2 && RecBuf2[0] == 0x2a )
+ return xbTrue;
+ else
+ return xbFalse;
+}
+
+/************************************************************************/
+#ifdef XB_INDEX_SUPPORT
+//! @brief Remove an index from the internal list of indices for this table
+/*
+ The index list is used during any table update process to update any open
+ index file. Index files can contain one or more tags.
+
+ \param ixIn Pointer to index object for a given index file.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbDbf::RemoveIndex( xbIx * ixIn ){
+
+ xbIxList *p = ixList;
+ // if index is the first entry in the list
+ if( ixList->ix == ixIn ){
+ ixList = ixList->next;
+ delete p->sFmt;
+ delete p->ix;
+ free( p );
+ return XB_NO_ERROR;
+ }
+
+ // spin down to the correct ix
+ xbIxList *p2 = NULL;
+ while( p && p->ix != ixIn ){
+ p2 = p;
+ p = p->next;
+ }
+ if( p ){
+ p2->next = p->next;
+ delete p->sFmt;
+ delete p->ix;
+ free( p );
+ }
+ return XB_NO_ERROR;
+}
+#endif // XB_INDEX_SUPPORT
+
+/************************************************************************/
+// @brief Reset number of records.
+/*
+ Protected method. Resets number of records to 0.
+ \returns void
+*/
+void xbDbf::ResetNoOfRecords() {
+ ulNoOfRecs = 0UL;
+}
+
+/************************************************************************/
+#ifdef XB_INF_SUPPORT
+// @brief Update .INF data file.
+/*
+ Protected method.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbDbf::SaveInfData(){
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ xbFile fMd( xbase );
+
+ try{
+
+ xbUInt32 llNodeCnt = llInfData.GetNodeCnt();
+
+ xbString sInfFileName;
+ if(( iRc = GetInfFileName( sInfFileName )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+
+ // open the file
+ if(( iRc = fMd.xbFopen( "w", sInfFileName, GetShareMode())) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+
+ xbString s1;
+ xbString s2;
+ s2.Sprintf( "[dbase]%c%c", 0x0d, 0x0a );
+ if(( iRc = fMd.xbFputs( s2 )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+
+ // for each entry in the linked list, write a line
+ xbLinkListNode<xbString> * llN = llInfData.GetHeadNode();
+ for( xbUInt32 i = 0; i < llNodeCnt; i++ ){
+ s2 = llN->GetKey();
+ if( i > 0 )
+ s1.Sprintf( "NDX%d=%s%c%c", i, s2.Str(), 0x0d, 0x0a );
+ else
+ s1.Sprintf( "NDX=%s%c%c", s2.Str(), 0x0d, 0x0a );
+
+ if(( iRc = fMd.xbFputs( s1 )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ llN = llN->GetNextNode();
+ }
+
+ // close the file
+ if(( iRc = fMd.xbFclose()) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+
+ } catch( xbInt16 iRc ){
+ if( fMd.FileIsOpen())
+ fMd.xbFclose();
+ xbString sMsg;
+ sMsg.Sprintf( "xbdbf::SaveInfData() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+#endif // XB_INF_SUPPORT
+/************************************************************************/
+//! @brief Set auto commit.
+/*!
+ This routine sets the auto commit setting for this table.
+ \returns XB_NO_ERROR;
+*/
+xbInt16 xbDbf::SetAutoCommit( xbBool iAutoCommit ) {
+ this->iAutoCommit = iAutoCommit;
+ return XB_NO_ERROR;
+}
+
+
+/************************************************************************/
+//! @brief Set auto lock.
+/*!
+ This routine sets the auto lock setting for this table.
+ There is an overall system level auto lock default setting and each table
+ can have it's own autolock setting. This method controls the table level
+ auto lock setting.
+
+ \param iAutoLock 1 - Use auto lock for this table.<br>
+ 0 - Don't use auto lock for this table.<br>
+ -1 - (minus one) Use system default.<br>
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+#ifdef XB_LOCKING_SUPPORT
+void xbDbf::SetAutoLock( xbInt16 iAutoLock ){
+ if( iAutoLock == -1 )
+ this->iAutoLock = xbase->GetDefaultAutoLock();
+ else
+ this->iAutoLock = iAutoLock;
+}
+#endif
+
+
+/************************************************************************/
+#ifdef XB_INDEX_SUPPORT
+//! @brief Set the current tag for the dbf file.
+/*!
+ \param sTagName - Tag Name
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbDbf::SetCurTag( const xbString &sTagName ){
+
+ if( sTagName == "" ){
+ SetCurTag( "", 0, 0 );
+ return XB_NO_ERROR;
+
+ } else {
+ xbLinkListNode<xbTag *> *llN = GetTagList();
+ xbTag *pTag;
+ while( llN ){
+ pTag = llN->GetKey();
+ if( pTag->GetTagName() == sTagName ){
+ SetCurTag( pTag->GetType(), pTag->GetIx(), pTag->GetVpTag());
+ return XB_NO_ERROR;
+ }
+ llN = llN->GetNextNode();
+ }
+ }
+
+ return XB_INVALID_TAG;
+}
+
+/************************************************************************/
+//! @brief Set the current tag for the dbf file.
+/*!
+
+ \param sIxType - One of "NDX", MDX or TDX",
+ \param pIx - Pointer to index object.
+ \param vpTag - Pointer to tag object.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+void xbDbf::SetCurTag( const xbString &sIxType, xbIx *pIx, void *vpTag ){
+ pCurIx = pIx;
+ vpCurIxTag = vpTag;
+ sCurIxType.Set( sIxType );
+}
+#endif // XB_INDEX_SUPPORT
+
+/************************************************************************/
+//! @brief Set the header locked status.
+/*!
+ \param bHeaderLocked xbTrue - Locked<br>xbFalse - Not locked.
+ \returns void
+*/
+#ifdef XB_LOCKING_SUPPORT
+void xbDbf::SetHeaderLocked( xbBool bHeaderLocked ){
+ this->bHeaderLocked = bHeaderLocked;
+}
+#endif
+
+/************************************************************************/
+//! @brief Set lock flavor.
+/*!
+ This routine is for future expansion.
+ \param iLockFlavor 1 - Use Dbase (tm) style locking.
+ \returns void
+*/
+#ifdef XB_LOCKING_SUPPORT
+void xbDbf::SetLockFlavor( xbInt16 iLockFlavor ){
+ this->iLockFlavor = iLockFlavor;
+}
+#endif
+
+/************************************************************************/
+//! @brief Set table locked status.
+/*!
+ \param bTableLocked - xbTrue Table locked.<br>xbFalse Table unlocked.
+ \returns void
+*/
+#ifdef XB_LOCKING_SUPPORT
+void xbDbf::SetTableLocked( xbBool bTableLocked ){
+ this->bTableLocked = bTableLocked;
+}
+#endif
+/************************************************************************/
+//! @brief Undelete all records.
+/*!
+ This routine will remove the deletion flag on any deleted records in the table.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbDbf::UndeleteAllRecords(){
+ return DeleteAll( 1 );
+}
+
+/************************************************************************/
+//! @brief Undelete one record.
+/*!
+ This routine will undelete the current record, if it is deleted.
+ \returns XB_NO_ERROR<br>XB_INVALID_RECORD
+*/
+xbInt16 xbDbf::UndeleteRecord()
+{
+ if( RecBuf && ulCurRec > 0 ){
+ if( RecBuf[0] != 0x20 ){
+ if( iDbfStatus != XB_UPDATED ){
+ iDbfStatus = XB_UPDATED;
+ memcpy( RecBuf2, RecBuf, uiRecordLen ); // save off original before making updates
+ }
+ RecBuf[0] = 0x20;
+ }
+ return XB_NO_ERROR;
+ }
+ else
+ return XB_INVALID_RECORD;
+}
+
+/************************************************************************/
+#ifdef XB_MEMO_SUPPORT
+//! @brief Update memo field
+/*!
+ This routine updates a memo field.
+ \param iFieldNo - Memo field number to update.
+ \param sMemoData - Memo data for update.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbDbf::UpdateMemoField( xbInt16 iFieldNo, const xbString &sMemoData ){
+ return Memo->UpdateMemoField( iFieldNo, sMemoData );
+}
+/************************************************************************/
+//! @brief Update memo field
+/*!
+ This routine updates a memo field.
+ \param sFieldName - Memo field name to update.
+ \param sMemoData - Memo data for update.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbDbf::UpdateMemoField( const xbString & sFieldName, const xbString & sMemoData ){
+ return Memo->UpdateMemoField( GetFieldNo( sFieldName ), sMemoData );
+}
+#endif
+
+
+/************************************************************************/
+#ifdef XB_INDEX_SUPPORT
+//! @brief Update SchemaIxFlag
+/*!
+ This routine can be called from the DeleteTag routine if a tag has been deleted and the flag needs reset
+ \param iFldNo - Which field the index flag needs changed on
+ \param cVal - Value to change it to
+*/
+
+void xbDbf::UpdateSchemaIxFlag( xbInt16 iFldNo, unsigned char cVal ){
+ if( cVal != 0x00 || cVal != 0x01 )
+ SchemaPtr[iFldNo].cIxFlag = cVal;
+}
+
+/************************************************************************/
+
+//! @brief Update tag list.
+/*!
+ This routine updates the internal tag list of open index tags.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbDbf::UpdateTagList(){
+
+ xbInt16 iErrorStop = 0;
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt32 lTagCnt;
+
+ try{
+ ClearTagList();
+
+ // For each active index
+ xbIxList *p = GetIxList();
+ xbIx *ixp;
+ while( p ){
+ ixp = p->ix;
+ // for each tag within the file
+ lTagCnt = ixp->GetTagCount();
+ for( xbInt32 l = 0; l < lTagCnt; l++ ){
+ xbTag *pTag = new xbTag( ixp, ixp->GetTag( l ), *p->sFmt, ixp->GetTagName( ixp->GetTag( l )),
+ ixp->GetKeyExpression( ixp->GetTag( l )), ixp->GetKeyFilter( ixp->GetTag( l )),
+ ixp->GetUnique( ixp->GetTag( l )), ixp->GetSortOrder( ixp->GetTag( l )));
+
+ // append it to the llTags list
+ llTags.InsertAtEnd( pTag );
+ }
+ p = p->next;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbdbf::UpdateTagList() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+#endif // XB_INDEX_SUPPORT
+
+/************************************************************************/
+// @brief Write Header
+/*
+ Protected method.
+
+ \param iPositionOption 0 - Don't fseek to beginning of file before read.<br>
+ 1 - Go to beginning of file before read.
+ \param iWriteOption 0 - Write entire 32 byte header.<br>
+ 1 - Write first eight bytes needed for table updates - last update date and number of records.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbDbf::WriteHeader( xbInt16 iPositionOption, xbInt16 iWriteOption )
+{
+ char buf[32];
+ xbInt32 lWriteLen;
+
+ if(iPositionOption)
+ xbRewind();
+
+ memset(buf, 0, 32);
+ if( iWriteOption == 1 )
+ lWriteLen = 8;
+ else{
+ lWriteLen = 32;
+ ePutUInt16( &buf[8], uiHeaderLen );
+ ePutUInt16( &buf[10], uiRecordLen );
+ buf[14] = cTransactionFlag;
+ buf[15] = cEncryptionFlag;
+ buf[28] = cIndexFlag;
+ buf[29] = cLangDriver;
+ }
+ memcpy(&buf[0], &cVersion, 4);
+ ePutUInt32( &buf[4], ulNoOfRecs);
+ if(xbFwrite(buf, (size_t) lWriteLen, 1) != XB_NO_ERROR)
+ return XB_WRITE_ERROR;
+
+ return XB_NO_ERROR;
+}
+/************************************************************************/
+//! @brief Zap (remove) everything from the file,
+/*!
+ This routine eliminates everything from the dbf file and dbt memo file.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbDbf::Zap(){
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+
+ #ifdef XB_LOCKING_SUPPORT
+ xbBool bLocked = xbFalse;
+ #endif // XB_LOCKING_SUPPORT
+
+ try{
+ if( iDbfStatus != XB_OPEN ){
+ iErrorStop = 100;
+ iRc = XB_DBF_FILE_NOT_OPEN;
+ throw iRc;
+ }
+ #ifdef XB_LOCKING_SUPPORT
+ if( iAutoLock ){
+ if(( iRc = LockTable( XB_LOCK )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ }
+ #endif
+
+ xbDate d;
+ d.Sysdate();
+ cUpdateYY = (char) d.YearOf() - 1900;
+ cUpdateMM = (char) d.MonthOf();
+ cUpdateDD = (char) d.DayOf( XB_FMT_MONTH );
+ ulNoOfRecs = 0;
+
+ // rewrite the header record
+ if(( iRc = WriteHeader( 1, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+
+ // truncate the file to the new size
+ if(( iRc = xbTruncate( uiHeaderLen )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ BlankRecord();
+ ulCurRec = 0;
+
+ #ifdef XB_MEMO_SUPPORT
+ if( iMemoFieldCnt ){
+ if(( iRc = Memo->Zap()) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+ }
+ #endif
+ #ifdef XB_INDEX_SUPPORT
+ xbLinkListNode<xbTag *> *llN = GetTagList();
+ xbTag *pTag;
+ xbIx *pIx;
+ void *vpTag;
+ while( llN ){
+ pTag = llN->GetKey();
+ pIx = pTag->GetIx();
+ vpTag = pTag->GetVpTag();
+ if(( iRc = pIx->Reindex( &vpTag )) != XB_NO_ERROR ){
+ iErrorStop = 60;
+ throw iRc;
+ }
+ llN = llN->GetNextNode();
+ }
+
+ #endif // XB_INDEX_SUPPORT
+ }
+ catch (xbInt16 iRc ){
+ if( iRc != XB_LOCK_FAILED ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbdbf::Zap() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ }
+ #ifdef XB_LOCKING_SUPPORT
+ if( bLocked ){
+ LockTable( XB_UNLOCK );
+ }
+ #endif // XB_LOCKING_SUPPORT
+ return iRc;
+}
+/************************************************************************/
+#ifdef XB_BLOCKREAD_SUPPORT
+// block read processing is designed to provide a way to rapidly retrieve
+// all the records from a .DBF file in sequential order.
+
+// It is not designed for doing any read/write processing or data retrieval based on a tag sort.
+// It is designed for doing a fast sequentil block read out of a table
+
+
+xbInt16 xbDbf::DisableBlockReadProcessing(){
+
+ if( bBlockReadEnabled ){
+ bBlockReadEnabled = xbFalse;
+ delete pRb;
+ pRb = NULL;
+ }
+ return XB_NO_ERROR;
+}
+
+xbBool xbDbf::GetBlockReadStatus() const {
+ return bBlockReadEnabled;
+}
+
+xbInt16 xbDbf::EnableBlockReadProcessing(){
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+
+ try{
+
+ if( !bBlockReadEnabled ){
+ if( iDbfStatus == XB_UPDATED ){
+ if( GetAutoCommit() == 1 ){
+ if(( iRc = Commit()) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ } else {
+ if(( iRc = Abort()) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ }
+ }
+ pRb = new xbBlockRead( this );
+ if( !pRb ){
+ iErrorStop = 120;
+ iRc = XB_NO_MEMORY;
+ throw iRc;
+ }
+ if(( iRc = pRb->Init()) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+
+ bBlockReadEnabled = xbTrue;
+ }
+
+ } catch( xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbdbf::EnableBlockReadProcessing() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+#endif // XB_BLOCKREAD_SUPPORT
+/************************************************************************/
+} /* namespace */ \ No newline at end of file
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/core/xbdbf3.cpp b/1Tdata/xbase/xbase64-4.1.4/src/core/xbdbf3.cpp
new file mode 100755
index 0000000..926cc0d
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/core/xbdbf3.cpp
@@ -0,0 +1,768 @@
+/* xbdbf3.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+#include "xbase.h"
+
+
+#ifdef XB_DBF3_SUPPORT
+
+namespace xb{
+
+
+/************************************************************************/
+//! @brief Constructor.
+
+xbDbf3::xbDbf3(xbXBase * x) : xbDbf( x ) {
+ #ifdef XB_MEMO_SUPPORT
+ ulCreateMemoBlockSize = 512;
+ #endif
+ iFileVersion = 3;
+};
+
+/************************************************************************/
+//! @brief Destructor.
+
+xbDbf3::~xbDbf3() {};
+
+/************************************************************************/
+//! @brief Create Version 3 table.
+/*!
+ This routine creates a Dbase III Plus (tm) DBF file.
+
+ \param sTableName DBF table name.
+ \param sAlias Table alias
+ \param pSchema Pointer to schema structure with field definitions.
+ \param iOverlay xbTrue - Overlay.<br> xbFalse - Don't overlay.
+ \param iShareMode XB_SINGLE_USER<br>XB_MULTI_USER
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+
+*/
+xbInt16 xbDbf3::CreateTable( const xbString & sTableName, const xbString & sAlias, xbSchema *pSchema, xbInt16 iOverlay, xbInt16 iShareMode ){
+
+ xbInt16 i, k, k2;
+ xbInt16 rc = 0;
+ xbInt16 iErrorStop = 0;
+ iDbfStatus = XB_CLOSED;
+
+ xbString sNfn;
+ try{
+ sNfn = sTableName;
+ xbase->GetLogStatus();
+
+ rc = NameSuffixMissing( sNfn, 1 );
+ if( rc > 0 )
+ sNfn += ".DBF";
+
+ SetFileName( sNfn );
+ this->sAlias = sAlias;
+
+ /* check if the file already exists */
+ if( FileExists( 0 )){
+ if( !iOverlay ){
+ iErrorStop = 100;
+ rc = XB_FILE_EXISTS;
+ throw rc;
+ }
+
+ // remove other files if they exist
+ xbString sMname = sNfn;
+ xbUInt32 iMnameLen = sMname.Len();
+ sMname.PutAt( iMnameLen-2, 'I' );
+ sMname.PutAt( iMnameLen-1, 'N' );
+ sMname.PutAt( iMnameLen, 'F' );
+ xbFile fTemp( xbase );
+ fTemp.SetFileName( sMname );
+ if( fTemp.FileExists() )
+ fTemp.xbRemove();
+
+ sMname.PutAt( iMnameLen-2, 'D' );
+ sMname.PutAt( iMnameLen-1, 'B' );
+ sMname.PutAt( iMnameLen, 'T' );
+ fTemp.SetFileName( sMname );
+ if( fTemp.FileExists() )
+ fTemp.xbRemove();
+
+ sMname.PutAt( iMnameLen-2, 'M' );
+ sMname.PutAt( iMnameLen-1, 'D' );
+ sMname.PutAt( iMnameLen, 'X' );
+ fTemp.SetFileName( sMname );
+ if( fTemp.FileExists() )
+ fTemp.xbRemove();
+ }
+
+ /* check if we already have a file with this alias */
+ if(( rc = xbase->AddTblToTblList( this, GetFqFileName(), sAlias )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw rc;
+ }
+
+ rc = ValidateSchema( pSchema );
+ if( rc < 0 ){
+ iErrorStop = 120;
+ throw rc;
+ } else
+ iNoOfFields = rc;
+
+ #ifdef XB_MEMO_SUPPORT
+ // if we have memo fields
+ iMemoFieldCnt = 0;
+ i = 0;
+ while( pSchema[i].cType != 0){
+ if( pSchema[i].cType == 'M' )
+ iMemoFieldCnt++; /* number of memo fields in the incoming definition */
+ i++;
+ }
+
+ if( iMemoFieldCnt > 0 ){
+ xbString sMfn = sNfn; /* memo file name, same as filename except ends with a "t", not an "f" */
+ xbUInt32 iMfnLen = sMfn.Len();
+ sMfn.PutAt( iMfnLen, 'T' );
+
+ // dont overlay the memo file if it exists, and Overlay switch is off
+ xbFile fTemp( xbase );
+ fTemp.SetFileName( sMfn );
+ if( fTemp.FileExists() && !iOverlay ){
+ iErrorStop = 130;
+ rc = XB_FILE_EXISTS;
+ throw rc;
+ }
+
+ Memo = new xbMemoDbt3( this, fTemp.GetFqFileName());
+
+ if(( rc = Memo->CreateMemoFile()) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw rc;
+ }
+ }
+ #endif
+
+ /* this is the dBase III version of the class */
+ cVersion = 0x03; // 0x03 for Dbase level 5
+ #ifdef XB_MEMO_SUPPORT
+ if( iMemoFieldCnt > 0 ){
+// cVersion = cVersion |= 0x80; // Version III memo, compiler complaints
+ cVersion |= 0x80; // Version III memo
+ }
+ #endif
+
+ if(( rc = xbFopen( "w+b", iShareMode )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw rc;
+ }
+ uiRecordLen++; /* add one byte for 0x0D */
+
+ if(( RecBuf = (char *) malloc( uiRecordLen )) == NULL ){
+ iErrorStop = 160;
+ throw rc;
+ }
+
+ if(( RecBuf2 = (char *) malloc( uiRecordLen )) == NULL ){
+ iErrorStop = 170;
+ rc = XB_NO_MEMORY;
+ throw rc;
+ }
+
+ /* BlankRecord(); */
+ memset( RecBuf, 0x20, uiRecordLen );
+ memset( RecBuf2, 0x20, uiRecordLen );
+ ulCurRec = 0L;
+ uiHeaderLen = 33 + iNoOfFields * 32;
+ xbDate d;
+ d.Sysdate();
+ cUpdateYY = (char) (d.YearOf() - 1900);
+ cUpdateMM = (char) d.MonthOf();
+ cUpdateDD = (char) d.DayOf( XB_FMT_MONTH );
+
+ /* write the header prolog */
+ if(( rc = WriteHeader( 0, 0 )) != XB_NO_ERROR ){
+ iErrorStop = 180;
+ rc = XB_WRITE_ERROR;
+ throw rc;
+ }
+ if((SchemaPtr = (xbSchemaRec *) malloc( (size_t) iNoOfFields * sizeof( xbSchemaRec ))) == NULL){
+ iErrorStop = 190;
+ rc = XB_NO_MEMORY;
+ throw rc;
+ }
+
+ /* write the field information into the header */
+ for( i = 0, k = 1; i < iNoOfFields; i++ ){
+
+ memset( SchemaPtr[i].cFieldName, 0x00, 11 );
+ for( int x = 0; x < 10 && pSchema[i].cFieldName[x]; x++ )
+ SchemaPtr[i].cFieldName[x] = pSchema[i].cFieldName[x];
+
+ SchemaPtr[i].cType = pSchema[i].cType;
+ SchemaPtr[i].cFieldLen = (unsigned char) pSchema[i].iFieldLen;
+ SchemaPtr[i].cNoOfDecs = (unsigned char) pSchema[i].iNoOfDecs;
+
+ if( SchemaPtr[i].cNoOfDecs > SchemaPtr[i].cFieldLen ){
+ iErrorStop = 200;
+ rc = XB_WRITE_ERROR;
+ throw rc;
+ }
+
+ k2 = k;
+ k += SchemaPtr[i].cFieldLen;
+
+ if(( xbFwrite( &SchemaPtr[i].cFieldName, 1, 11 )) != XB_NO_ERROR ) {
+ iErrorStop = 210;
+ rc = XB_WRITE_ERROR;
+ throw rc;
+ }
+
+ if(( xbFwrite( &SchemaPtr[i].cType, 1, 1 )) != XB_NO_ERROR ) {
+ iErrorStop = 220;
+ rc = XB_WRITE_ERROR;
+ throw rc;
+ }
+
+ for( int j = 0; j < 4; j++ )
+ xbFputc( 0x00 );
+
+ if(( xbFwrite( &SchemaPtr[i].cFieldLen, 1, 1 )) != XB_NO_ERROR ) {
+ iErrorStop = 230;
+ rc = XB_WRITE_ERROR;
+ throw rc;
+ }
+
+ if(( xbFwrite( &SchemaPtr[i].cNoOfDecs, 1, 1 )) != XB_NO_ERROR ) {
+ iErrorStop = 240;
+ rc = XB_WRITE_ERROR;
+ throw rc;
+ }
+
+ /* 14 bytes reserved */
+ for( int j = 0; j < 14; j++ )
+ xbFputc( 0x00 );
+
+ SchemaPtr[i].pAddress = RecBuf + k2;
+ SchemaPtr[i].pAddress2 = RecBuf2 + k2;
+ }
+
+ /* write the header terminator */
+ if(( xbFputc( XB_CHARHDR )) != XB_NO_ERROR ){
+ iErrorStop = 250;
+ rc = XB_WRITE_ERROR;
+ throw rc;
+ }
+ }
+ catch( xbInt16 rc )
+ {
+ xbString sMsg;
+ sMsg.Sprintf( "xbdbf3::CreateTable() Exception Caught Error Stop = [%d] rc = [%d]", iErrorStop, rc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( rc ));
+
+ sMsg.Sprintf( "Table Name = [%s]", GetFqFileName().Str());
+ xbase->WriteLogMessage( sMsg );
+ sMsg.Sprintf( "Alias Name = [%s]", sAlias.Str());
+ xbase->WriteLogMessage( sMsg );
+
+ xbFclose();
+ if( RecBuf ){
+ free( RecBuf );
+ RecBuf = NULL;
+ }
+ if( RecBuf2 ){
+ free( RecBuf2 );
+ RecBuf2 = NULL;
+ }
+ if( SchemaPtr ){
+ free( SchemaPtr );
+ SchemaPtr = NULL;
+ }
+
+ InitVars();
+ if( rc != XB_FILE_EXISTS )
+ xbase->RemoveTblFromTblList( sAlias );
+ }
+
+ if( rc == XB_NO_ERROR )
+ iDbfStatus = XB_OPEN;
+
+ return rc;
+}
+
+/************************************************************************/
+//! @brief Get version.
+/*!
+ The version info can be retrieved to determine
+ which class is being used for a given dbf instance.
+ \returns 3
+*/
+
+xbInt16 xbDbf3::GetVersion() const {
+ return 3;
+}
+
+
+
+/************************************************************************/
+//! @brief Open dbf file/table.
+/*!
+ \param sTableName DBF table name.
+ \param sAlias Table alias
+ \param iOpenMode XB_READ<br>XB_READ_WRITE
+ \param iShareMode XB_SINGLE_USER<br>XB_MULTI_USER
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbDbf3::Open( const xbString & sTableName, const xbString & sAlias,
+ xbInt16 iOpenMode, xbInt16 iShareMode ){
+ xbInt16 i, j, iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ char buf[33];
+ char *p;
+
+ #ifdef XB_MEMO_SUPPORT
+ iMemoFieldCnt = 0;
+ #endif
+
+ try{
+
+ /* verify the file is not already open */
+ if( iDbfStatus != XB_CLOSED ){
+ iErrorStop = 100;
+ iRc = XB_ALREADY_OPEN;
+ throw iRc;
+ }
+ /* copy the file name to the class variable */
+ SetFileName( sTableName );
+ this->sAlias = sAlias;
+
+ if( !FileExists()){
+ iErrorStop = 110;
+ iRc = XB_FILE_NOT_FOUND;
+ throw iRc;
+ }
+
+ if(( iRc = xbase->AddTblToTblList( this, GetFqFileName(), sAlias )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+
+ /* open the file */
+ if(( iRc = xbFopen( iOpenMode, iShareMode )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+
+ /* copy the header into memory */
+ if(( iRc = ReadHeader( 1, 0 )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+
+ /* check the version */
+ if(( cVersion & 0x07 ) != 3 ){
+ // if( xFileVersion != 3 && xFileVersion != 4 ){
+ iErrorStop = 150;
+ iRc = XB_FILE_TYPE_NOT_SUPPORTED;
+ throw iRc;
+ }
+ iFileVersion = 3;
+
+ /* calculate the number of fields */
+ if( cVersion == (char)0x30 ) {
+ iNoOfFields = ( uiHeaderLen - 296 ) / 32 ;
+ } else {
+ iNoOfFields = ( uiHeaderLen - 33 ) / 32;
+ }
+
+ if(( RecBuf = (char *) malloc( (size_t) uiRecordLen )) == NULL ){
+ iErrorStop = 160;
+ iRc = XB_NO_MEMORY;
+ throw iRc;
+ }
+
+ if(( RecBuf2 = (char *) malloc( uiRecordLen )) == NULL ) {
+ iErrorStop = 170;
+ iRc = XB_NO_MEMORY;
+ throw iRc;
+ }
+
+ if((SchemaPtr=(xbSchemaRec *)malloc( (size_t) iNoOfFields * sizeof( xbSchemaRec ))) == NULL){
+ iErrorStop = 180;
+ iRc = XB_NO_MEMORY;
+ throw iRc;
+ }
+
+ memset( SchemaPtr, 0x00, ( (size_t) iNoOfFields * sizeof(xbSchemaRec) ));
+ /* copy field info into memory */
+ for( i = 0, j = 1; i < iNoOfFields; i++ ){
+ xbFseek( ((xbInt64)i*32+32), SEEK_SET );
+ xbFread( &buf, 1, 32 );
+ p = buf;
+ for( int x = 0; x < 10 && buf[x]; x++ ){
+ SchemaPtr[i].cFieldName[x] = buf[x];
+ }
+ p = buf + 11;
+ SchemaPtr[i].cType = *p++;
+ SchemaPtr[i].pAddress = RecBuf + j;
+ SchemaPtr[i].pAddress2 = RecBuf2 + j;
+ SchemaPtr[i].cFieldLen = (unsigned char) *( p + 4 );
+ SchemaPtr[i].cNoOfDecs = (unsigned char) *( p + 5 );
+ j += SchemaPtr[i].cFieldLen;
+ #ifdef XB_MEMO_SUPPORT
+ if( (SchemaPtr[i].cType == 'M' || SchemaPtr[i].cType == 'B' || SchemaPtr[i].cType == 'O' ))
+ iMemoFieldCnt++;
+ #endif
+ }
+ ulCurRec = 0L;
+ iDbfStatus = XB_OPEN;
+ if(( iRc = BlankRecord()) != XB_NO_ERROR ){
+ iErrorStop = 190;
+ throw iRc;
+ }
+
+ #ifdef XB_MEMO_SUPPORT
+ if( iMemoFieldCnt > 0 ){ /* does this table have memo fields ? */
+
+ // build the file name
+ xbString sMfn = GetFqFileName(); /* memo file name, same as filename except ends with a "t", not an "f" */
+ xbUInt32 ulMfnLen = sMfn.Len();
+ if( sMfn[ulMfnLen] == 'F' )
+ sMfn.PutAt( ulMfnLen, 'T' );
+ else
+ sMfn.PutAt( ulMfnLen, 't' );
+ xbFile fTemp( xbase );
+ fTemp.SetFileName( sMfn );;
+
+ Memo = new xbMemoDbt3( this, fTemp.GetFqFileName());
+
+ if(( iRc = Memo->OpenMemoFile()) != XB_NO_ERROR ){
+ iErrorStop = 200;
+ throw iRc;
+ }
+ }
+ #endif // XB_MEMO_SUPPORT
+
+ }
+ catch ( xbInt16 iRc )
+ {
+ xbString sMsg;
+ sMsg.Sprintf( "xbdbf3::Open() Exception Caught Error Stop = [%d] iRc = [%d] ShareMode = [%d] OpenMode = [%d]", iErrorStop, iRc, iShareMode, iOpenMode );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ xbFclose();
+ if( RecBuf ){
+ free( RecBuf );
+ RecBuf = NULL;
+ }
+ if( RecBuf2 ){
+ free( RecBuf2 );
+ RecBuf2 = NULL;
+ }
+ if( SchemaPtr ){
+ free( SchemaPtr );
+ SchemaPtr = NULL;
+ }
+ InitVars();
+
+ #ifdef XB_MEMO_SUPPORT
+ if( Memo ){
+ Memo->CloseMemoFile();
+ delete Memo;
+ Memo = NULL;
+ }
+ #endif // XB_MEMO_SUPPORT
+ }
+
+ if( iRc == XB_NO_ERROR )
+ iDbfStatus = XB_OPEN;
+
+ return iRc;
+}
+/************************************************************************/
+//! @brief Rename table.
+/*!
+ This routine renames a give table, associated memo and inf files
+ \param sNewName - New file name.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbDbf3::Rename( const xbString sNewName ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+
+ xbString sNewDbf;
+
+ xbBool bDbfRenamed = xbFalse;
+
+ #ifdef XB_INF_SUPPORT
+ xbString sNewInf;
+ xbString sThisInf;
+ xbBool bInfRenamed = xbFalse;
+ #endif
+
+ #ifdef XB_MEMO_SUPPORT
+ xbString sNewDbt;
+ xbString sThisDbt;
+ xbBool bDbtRenamed = xbFalse;
+ #endif // XB_MEMO_SUPPORT
+
+ #ifdef XB_LOCKING_SUPPORT
+ xbBool bLocked = xbFalse;
+ #endif
+
+ try{
+
+ xbString sDir;
+ xbString sFile;
+ xbString sExt;
+
+ xbString sNewNameWoExt;
+ sNewNameWoExt.Set( sNewName );
+ if( sNewName.Pos( ".DBF" ) > 0 )
+ sNewNameWoExt.Left( sNewName.Len() - 4 );
+
+ GetFileDirPart ( sDir );
+ GetFileNamePart( sFile );
+ GetFileExtPart ( sExt );
+
+ if( FileExists( sNewDbf )) return XB_FILE_EXISTS;
+ sNewDbf.Sprintf( "%s%s.DBF", sDir.Str(), sNewNameWoExt.Str());
+
+ #ifdef XB_MEMO_SUPPORT
+ sNewDbt.Sprintf( "%s%s.DBT", sDir.Str(), sNewNameWoExt.Str());
+ if( FileExists( sNewDbt )) return XB_FILE_EXISTS;
+ sThisDbt.Sprintf( "%s%s.DBT", sDir.Str(), sFile.Str());
+ #endif
+
+ #ifdef XB_INF_SUPPORT
+ sNewInf.Sprintf( "%s%s.INF", sDir.Str(), sNewNameWoExt.Str());
+ if( FileExists( sNewInf )) return XB_FILE_EXISTS;
+ sThisInf.Sprintf( "%s%s.INF", sDir.Str(), sFile.Str());
+ #endif // XB_INF_SUPPORT
+
+ #ifdef XB_LOCKING_SUPPORT
+ if( GetAutoLock() && GetTableLocked() ){
+ if(( iRc = LockTable( XB_LOCK )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ bLocked = xbTrue;
+ }
+ #endif
+
+ xbInt16 iOpenMode = GetOpenMode();
+ xbInt16 iShareMode = GetShareMode();
+ xbBool bWasOpen = xbFalse;
+ if( FileIsOpen() ){
+ bWasOpen = xbTrue;
+ if(( iRc = xbFclose()) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ }
+
+ if(( iRc = xbRename( GetFqFileName().Str(), sNewDbf.Str())) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ } else {
+ bDbfRenamed = xbTrue;
+ }
+ xbString sNameWext;
+ sNameWext.Sprintf( "%s.DBF", sNewNameWoExt.Str());
+ SetFileName( sNameWext );
+
+ if( bWasOpen ){
+ if(( iRc = xbFopen( iOpenMode, iShareMode )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ }
+
+ #ifdef XB_MEMO_SUPPORT
+ if( FileExists( sThisDbt )){
+ if( bWasOpen ){
+ if(( iRc = Memo->xbFclose()) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+ }
+ if(( xbRename( sThisDbt.Str(), sNewDbt.Str())) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+ Memo->SetFileName( sNewDbt );
+ if( bWasOpen ){
+ if(( iRc = Memo->xbFopen( iOpenMode, iShareMode )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+ }
+ bDbtRenamed = xbTrue;
+ }
+ #endif // XB_MEMO_SUPPORT
+
+ #ifdef XB_INF_SUPPORT
+ if( FileExists( sThisInf )){
+ if(( iRc = xbRename( sThisInf.Str(), sNewInf.Str())) != XB_NO_ERROR ){
+ iErrorStop = 170;
+ throw iRc;
+ } else {
+ bInfRenamed = xbTrue;
+ }
+ }
+ #endif // XB_INF_SUPPORT
+
+ // rname the table in the table list
+ xbTblList *tle = xbase->GetTblListEntry( this );
+ if( tle ){
+ // std::cout << "setting [" << GetFqFileName().Str() << "][" << sNewNameWoExt.Str() << "]\n";
+ tle->psFqTblName->Set( GetFqFileName().Str());
+ tle->psTblAlias->Set( sNewNameWoExt.Str());
+ }
+ }
+ catch ( xbInt16 iRc )
+ {
+ xbString sMsg;
+ sMsg.Sprintf( "xbdbf3::Rename() Exception Caught Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+
+ // attempt to reverse things out if unsuccessful
+ if( bDbfRenamed ){
+ #ifdef XB_MEMO_SUPPORT
+ if( bDbtRenamed ){
+ xbRename( sNewDbt.Str(), sThisDbt.Str());
+ }
+ #endif // XB_MEMO_SUPPORT
+ #ifdef XB_INF_SUPPORT
+ if( bInfRenamed ){
+ xbRename( sNewInf.Str(), sNewInf.Str());
+ }
+ #endif // XB_INF_SUPPORT
+ }
+
+ #ifdef XB_LOCKING_SUPPORT
+ if( bLocked ){
+ LockTable( XB_UNLOCK );
+ }
+ #endif
+
+ }
+ return iRc;
+}
+
+
+/************************************************************************/
+#ifdef XB_MEMO_SUPPORT
+//! @brief Create memo block size.
+/*!
+ This routine sets the memo file block size. This value is used when
+ the memo file is created so you if you want to change it, this must be
+ called before creating the table.
+
+ DBF III Plus uses a block size of 512.
+
+ \param ulBlockSize - Block size, must be evenly divisible by 512.
+ \returns XB_INVALID_BLOCK_SIZE<br>XB_NO_ERROR
+*/
+
+xbInt16 xbDbf3::SetCreateMemoBlockSize( xbUInt32 ulBlockSize ){
+
+ if( ulBlockSize != 512 )
+ return XB_INVALID_BLOCK_SIZE;
+ else
+ ulCreateMemoBlockSize = 512;
+
+ return XB_NO_ERROR;
+}
+#endif
+
+/************************************************************************/
+//! @brief Set version.
+/*!
+ Sets the version to 3. The version info can be retrieved to determine
+ which class is being used for a given dbf instance.
+ \returns 3
+*/
+
+xbInt16 xbDbf3::SetVersion() {
+ iFileVersion = 3;
+ return iFileVersion;
+}
+
+
+/************************************************************************/
+//! @brief Validate schema
+/*!
+ This routine verifies the field types are valid for Dbase III Plus (tm).
+
+ \param s Pointer to schema structure with field definitions.
+
+ \returns Number of fields or XB_INVALID_FIELD_TYPE.
+*/
+
+xbInt16 xbDbf3::ValidateSchema( xbSchema * s ){
+
+// This routine validates an input schema
+// Negative return value is an error
+// Positive return value is the number of fields
+// On success, the class variable uiRecordLen will be updated with the record length of the combined total of the fields
+
+ xbInt16 iFieldCnt = 0;
+ uiRecordLen = 0;
+
+ /* count the number of fields and check paramaters */
+ xbInt16 i = 0;
+ while( s[i].cType != 0 ){
+ iFieldCnt++;
+ // Version 3 field types
+ if( s[i].cType != 'C' &&
+ s[i].cType != 'N' &&
+ s[i].cType != 'D' &&
+ #ifdef XB_MEMO_SUPPORT
+ s[i].cType != 'M' &&
+ #endif // XB_MEMO_SUPPORT
+ s[i].cType != 'L' ){
+ return XB_INVALID_FIELD_TYPE;
+ }
+
+ if(s[i].cType == 'D'){
+ s[i].iFieldLen = 8;
+ s[i].iNoOfDecs = 0;
+ }
+
+ else if(s[i].cType == 'C')
+ s[i].iNoOfDecs = 0;
+
+ // check for numeric fields which are too long
+ else if( s[i].cType == 'N' && s[i].iFieldLen > 19 ){
+ return XB_INVALID_FIELD_LEN;
+ }
+ // field len must be >= no of decimals
+ else if( s[i].cType == 'N' && s[i].iFieldLen < s[i].iNoOfDecs ){
+ return XB_INVALID_FIELD_LEN;
+ }
+
+ #ifdef XB_MEMO_SUPPORT
+ else if(s[i].cType == 'M'){
+ s[i].iFieldLen = 10;
+ s[i].iNoOfDecs = 0;
+ }
+ #endif // XB_MEMO_SUPPORT
+
+ uiRecordLen += s[i].iFieldLen;
+ i++;
+ }
+ return iFieldCnt;
+}
+
+} /* namespace */
+#endif /* XB_DBF3_SUPPORT */ \ No newline at end of file
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/core/xbdbf4.cpp b/1Tdata/xbase/xbase64-4.1.4/src/core/xbdbf4.cpp
new file mode 100755
index 0000000..a1f770e
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/core/xbdbf4.cpp
@@ -0,0 +1,885 @@
+/* xbdbf4.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+#include "xbase.h"
+
+
+#ifdef XB_DBF4_SUPPORT
+
+namespace xb{
+
+
+/************************************************************************/
+//! @brief Constructor.
+xbDbf4::xbDbf4(xbXBase * x) : xbDbf( x ) {
+
+ iFileVersion = 4;
+ #ifdef XB_MEMO_SUPPORT
+ ulCreateMemoBlockSize = 1024;
+ #endif
+};
+
+/************************************************************************/
+//! @brief Destructor.
+xbDbf4::~xbDbf4() {};
+
+/************************************************************************/
+//! @brief Create Version 4 table.
+/*!
+ This routine creates a Dbase IV (tm) DBF file.
+
+ \param sTableName DBF table name.
+ \param sAlias Table alias
+ \param pSchema Pointer to schema structure with field definitions.
+ \param iOverlay xbTrue - Overlay.<br> xbFalse - Don't overlay.
+ \param iShareMode XB_SINGLE_USER<br>XB_MULTI_USER
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbDbf4::CreateTable( const xbString &sTableName, const xbString &sAlias, xbSchema * pSchema, xbInt16 iOverlay, xbInt16 iShareMode ){
+
+ xbInt16 i, k, k2;
+ xbInt16 rc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ iDbfStatus = XB_CLOSED;
+
+ xbString sNfn;
+
+ try{
+ sNfn = sTableName;
+ xbase->GetLogStatus();
+
+ rc = NameSuffixMissing( sNfn, 1 );
+ if( rc > 0 )
+ sNfn += ".DBF";
+
+ SetFileName( sNfn );
+ this->sAlias = sAlias;
+
+ /* check if the file already exists */
+ if( FileExists( 0 )){
+ if( !iOverlay ){
+ iErrorStop = 100;
+ rc = XB_FILE_EXISTS;
+ throw rc;
+ }
+
+ // remove other files if they exist
+ xbString sMname = sNfn;
+ xbUInt32 iMnameLen = sMname.Len();
+ sMname.PutAt( iMnameLen-2, 'I' );
+ sMname.PutAt( iMnameLen-1, 'N' );
+ sMname.PutAt( iMnameLen, 'F' );
+ xbFile fTemp( xbase );
+ fTemp.SetFileName( sMname );
+ if( fTemp.FileExists() )
+ fTemp.xbRemove();
+
+ sMname.PutAt( iMnameLen-2, 'D' );
+ sMname.PutAt( iMnameLen-1, 'B' );
+ sMname.PutAt( iMnameLen, 'T' );
+ fTemp.SetFileName( sMname );
+ if( fTemp.FileExists() )
+ fTemp.xbRemove();
+
+ sMname.PutAt( iMnameLen-2, 'M' );
+ sMname.PutAt( iMnameLen-1, 'D' );
+ sMname.PutAt( iMnameLen, 'X' );
+ fTemp.SetFileName( sMname );
+ if( fTemp.FileExists() )
+ fTemp.xbRemove();
+ }
+
+ /* check if we already have a file with this alias */
+ if(( rc = xbase->AddTblToTblList( this, GetFqFileName(), sAlias )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw rc;
+ }
+
+ rc = ValidateSchema( pSchema );
+ if( rc < 0 ){
+ iErrorStop = 120;
+ throw rc;
+ } else
+ iNoOfFields = rc;
+
+ #ifdef XB_MEMO_SUPPORT
+ // if we have memo fields
+ iMemoFieldCnt = 0;
+ i = 0;
+ while( pSchema[i].cType != 0){
+ if( pSchema[i].cType == 'M' )
+ iMemoFieldCnt++; /* number of memo fields in the incoming definition */
+ i++;
+ }
+
+ if( iMemoFieldCnt > 0 ){
+ xbString sMfn = sNfn; /* memo file name, same as filename except ends with a "t", not an "f" */
+ xbUInt32 ulMfnLen = sMfn.Len();
+ sMfn.PutAt( ulMfnLen, 'T' );
+
+ // dont overlay the memo file if it exists, and Overlay switch is off
+ xbFile fTemp( xbase );
+ fTemp.SetFileName( sMfn );
+ if( fTemp.FileExists() && !iOverlay ){
+ iErrorStop = 130;
+ rc = XB_FILE_EXISTS;
+ throw rc;
+ }
+
+ Memo = new xbMemoDbt4( this, fTemp.GetFqFileName());
+
+ if(( rc = Memo->CreateMemoFile()) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw rc;
+ }
+ }
+ #endif
+
+ /* this is the dBase IV version of the class */
+ cVersion = 0x03; // 0x03 for Dbase level 5
+ #ifdef XB_MEMO_SUPPORT
+ if( iMemoFieldCnt > 0 ){
+// cVersion = cVersion |= 0x88; // version IV memos, compiler complains about this
+ cVersion |= 0x88; // version IV memos
+ }
+ #endif
+
+ if(( rc = xbFopen( "w+b", iShareMode )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw rc;
+ }
+ uiRecordLen++; /* add one byte for 0x0D */
+
+ if(( RecBuf = (char *) malloc( uiRecordLen )) == NULL ){
+ iErrorStop = 160;
+ throw rc;
+ }
+
+ if(( RecBuf2 = (char *) malloc( uiRecordLen )) == NULL ){
+ iErrorStop = 170;
+ rc = XB_NO_MEMORY;
+ throw rc;
+ }
+
+ /* BlankRecord(); */
+ memset( RecBuf, 0x20, uiRecordLen );
+ memset( RecBuf2, 0x20, uiRecordLen );
+ ulCurRec = 0L;
+ uiHeaderLen = 33 + iNoOfFields * 32;
+ xbDate d;
+ d.Sysdate();
+ cUpdateYY = (char) (d.YearOf() - 1900);
+ cUpdateMM = (char) d.MonthOf();
+ cUpdateDD = (char) d.DayOf( XB_FMT_MONTH );
+ cIndexFlag = 0;
+ // Default language driver to 0x1b
+ cLangDriver = 0x1b;
+
+ /* write the header prolog */
+ if(( rc = WriteHeader( 0, 0 )) != XB_NO_ERROR ){
+ iErrorStop = 180;
+ rc = XB_WRITE_ERROR;
+ throw rc;
+ }
+ if((SchemaPtr=(xbSchemaRec *)malloc( (size_t) iNoOfFields * sizeof( xbSchemaRec ))) == NULL){
+ iErrorStop = 190;
+ rc = XB_NO_MEMORY;
+ throw rc;
+ }
+
+ /* write the field information into the header */
+ for( i = 0, k = 1; i < iNoOfFields; i++ ){
+
+ memset( SchemaPtr[i].cFieldName, 0x00, 11 );
+ for( int x = 0; x < 10 && pSchema[i].cFieldName[x]; x++ )
+ SchemaPtr[i].cFieldName[x] = pSchema[i].cFieldName[x];
+
+ SchemaPtr[i].cType = pSchema[i].cType;
+ SchemaPtr[i].cFieldLen = (unsigned char) pSchema[i].iFieldLen;
+ SchemaPtr[i].cNoOfDecs = (unsigned char) pSchema[i].iNoOfDecs;
+
+ if( SchemaPtr[i].cNoOfDecs > SchemaPtr[i].cFieldLen ){
+ iErrorStop = 110;
+ rc = XB_WRITE_ERROR;
+ throw rc;
+ }
+
+ k2 = k;
+ k += SchemaPtr[i].cFieldLen;
+
+ if(( xbFwrite( &SchemaPtr[i].cFieldName, 1, 11 )) != XB_NO_ERROR ) {
+ iErrorStop = 200;
+ rc = XB_WRITE_ERROR;
+ throw rc;
+ }
+
+ if(( xbFwrite( &SchemaPtr[i].cType, 1, 1 )) != XB_NO_ERROR ) {
+ iErrorStop = 210;
+ rc = XB_WRITE_ERROR;
+ throw rc;
+ }
+
+ for( int j = 0; j < 4; j++ )
+ xbFputc( 0x00 );
+
+ if(( xbFwrite( &SchemaPtr[i].cFieldLen, 1, 1 )) != XB_NO_ERROR ) {
+ iErrorStop = 220;
+ rc = XB_WRITE_ERROR;
+ throw rc;
+ }
+
+ if(( xbFwrite( &SchemaPtr[i].cNoOfDecs, 1, 1 )) != XB_NO_ERROR ) {
+ iErrorStop = 230;
+ rc = XB_WRITE_ERROR;
+ throw rc;
+ }
+
+ /* 14 bytes reserved */
+ for( int j = 0; j < 14; j++ )
+ xbFputc( 0x00 );
+
+ SchemaPtr[i].pAddress = RecBuf + k2;
+ SchemaPtr[i].pAddress2 = RecBuf2 + k2;
+ }
+
+ /* write the header terminator */
+ if(( xbFputc( XB_CHARHDR )) != XB_NO_ERROR ){
+ iErrorStop = 240;
+ rc = XB_WRITE_ERROR;
+ throw rc;
+ }
+ }
+ catch( xbInt16 rc )
+ {
+ xbString sMsg;
+ sMsg.Sprintf( "xbdbf4::CreateTable() Exception Caught Error Stop = [%d] rc = [%d]", iErrorStop, rc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( rc ));
+
+ sMsg.Sprintf( "Table Name = [%s]", GetFqFileName().Str());
+ xbase->WriteLogMessage( sMsg );
+ sMsg.Sprintf( "Alias Name = [%s]", sAlias.Str());
+ xbase->WriteLogMessage( sMsg );
+
+ xbFclose();
+ if( RecBuf ){
+ free( RecBuf );
+ RecBuf = NULL;
+ }
+ if( RecBuf2 ){
+ free( RecBuf2 );
+ RecBuf2 = NULL;
+ }
+ if( SchemaPtr ){
+ free( SchemaPtr );
+ SchemaPtr = NULL;
+ }
+
+ InitVars();
+ if( rc != XB_FILE_EXISTS )
+ xbase->RemoveTblFromTblList( sAlias );
+ }
+
+ if( rc == XB_NO_ERROR )
+ iDbfStatus = XB_OPEN;
+
+ return rc;
+}
+
+/************************************************************************/
+//! @brief Get version.
+/*!
+ The version info can be retrieved to determine
+ which class is being used for a given dbf instance.
+ \returns 4
+*/
+
+xbInt16 xbDbf4::GetVersion() const {
+ return 4;
+}
+
+/************************************************************************/
+//! @brief Open dbf file/table.
+/*!
+ \param sTableName DBF table name.
+ \param sAlias Table alias
+ \param iOpenMode XB_READ<br>XB_READ_WRITE
+ \param iShareMode XB_SINGLE_USER<br>XB_MULTI_USER
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbDbf4::Open( const xbString & sTableName, const xbString & sAlias,
+ xbInt16 iOpenMode, xbInt16 iShareMode ){
+ xbInt16 i, j, iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ char buf[33];
+ char *p;
+
+ #ifdef XB_MEMO_SUPPORT
+ iMemoFieldCnt = 0;
+ #endif
+
+ try{
+ /* verify the file is not already open */
+ if( iDbfStatus != XB_CLOSED ){
+ iErrorStop = 100;
+ iRc = XB_ALREADY_OPEN;
+ throw iRc;
+ }
+ /* copy the file name to the class variable */
+ SetFileName( sTableName );
+ this->sAlias = sAlias;
+
+ if( !FileExists()){
+ iErrorStop = 110;
+ iRc = XB_FILE_NOT_FOUND;
+ throw iRc;
+ }
+
+ if(( iRc = xbase->AddTblToTblList( this, GetFqFileName(), sAlias )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+
+ /* open the file */
+ if(( iRc = xbFopen( iOpenMode, iShareMode )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+
+ /* copy the header into memory */
+ if(( iRc = ReadHeader( 1, 0 )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+
+ /* check the version */
+ //if(( xFileVersion = DetermineXbaseTableVersion( cVersion )) != 4 ){
+ if(( cVersion & 0x07 ) != 3 ){
+ iErrorStop = 150;
+ iRc = XB_FILE_TYPE_NOT_SUPPORTED;
+ throw iRc;
+ }
+ iFileVersion = 4;
+
+ /* calculate the number of fields */
+ if( cVersion == (char)0x30 ) {
+ iNoOfFields = ( uiHeaderLen - 296 ) / 32 ;
+ } else {
+ iNoOfFields = ( uiHeaderLen - 33 ) / 32;
+ }
+
+ if(( RecBuf = (char *) malloc( uiRecordLen )) == NULL ){
+ iErrorStop = 160;
+ iRc = XB_NO_MEMORY;
+ throw iRc;
+ }
+
+ if(( RecBuf2 = (char *) malloc( uiRecordLen )) == NULL ) {
+ iErrorStop = 170;
+ iRc = XB_NO_MEMORY;
+ throw iRc;
+ }
+
+ if((SchemaPtr=(xbSchemaRec *)malloc((size_t) iNoOfFields * sizeof( xbSchemaRec ))) == NULL){
+ iErrorStop = 180;
+ iRc = XB_NO_MEMORY;
+ throw iRc;
+ }
+
+ memset( SchemaPtr, 0x00, (size_t) iNoOfFields * (size_t) sizeof( xbSchemaRec ));
+ /* copy field info into memory */
+ for( i = 0, j = 1; i < iNoOfFields; i++ ){
+ xbFseek( ((xbInt64)i*32+32), SEEK_SET );
+ xbFread( &buf, 1, 32 );
+ p = buf;
+ for( int x = 0; x < 10 && buf[x]; x++ ){
+ SchemaPtr[i].cFieldName[x] = buf[x];
+ }
+ p = buf + 11;
+ SchemaPtr[i].cType = *p++;
+ SchemaPtr[i].pAddress = RecBuf + j;
+ SchemaPtr[i].pAddress2 = RecBuf2 + j;
+ SchemaPtr[i].cFieldLen = (unsigned char) *( p + 4 );
+ SchemaPtr[i].cNoOfDecs = (unsigned char) *( p + 5 );
+ SchemaPtr[i].cIxFlag = (unsigned char) *( p + 19 );
+ j += SchemaPtr[i].cFieldLen;
+ #ifdef XB_MEMO_SUPPORT
+ if( (SchemaPtr[i].cType == 'M' || SchemaPtr[i].cType == 'B' || SchemaPtr[i].cType == 'O' ))
+ iMemoFieldCnt++;
+ #endif
+ }
+ ulCurRec = 0L;
+ iDbfStatus = XB_OPEN;
+ if(( iRc = BlankRecord()) != XB_NO_ERROR ){
+ iErrorStop = 190;
+ throw iRc;
+ }
+
+
+ #ifdef XB_MEMO_SUPPORT
+ if( iMemoFieldCnt > 0 ){ /* does this table have memo fields ? */
+
+ // build the file name
+ xbString sMfn = GetFqFileName(); /* memo file name, same as filename except ends with a "t", not an "f" */
+ xbUInt32 ulMfnLen = sMfn.Len();
+ if( sMfn[ulMfnLen] == 'F' )
+ sMfn.PutAt( ulMfnLen, 'T' );
+ else
+ sMfn.PutAt( ulMfnLen, 't' );
+ xbFile fTemp( xbase );
+ fTemp.SetFileName( sMfn );
+
+ Memo = new xbMemoDbt4( this, fTemp.GetFqFileName());
+
+ if(( iRc = Memo->OpenMemoFile()) != XB_NO_ERROR ){
+ iErrorStop = 200;
+ throw iRc;
+ }
+ }
+ #endif
+
+ #ifdef XB_MDX_SUPPORT
+
+// printf( "cIndexFlag [%x]\n", cIndexFlag );
+
+ if( cIndexFlag ){
+ // create the file name
+ xbString sIxFileName = GetFqFileName();
+ sIxFileName.Trim();
+ xbUInt32 lLen = sIxFileName.Len();
+ sIxFileName.PutAt( lLen-2, 'M' );
+ sIxFileName.PutAt( lLen-1, 'D' );
+ sIxFileName.PutAt( lLen, 'X' );
+ if(( iRc = OpenIndex( "MDX", sIxFileName )) != XB_NO_ERROR ){
+ iErrorStop = 210;
+ throw iRc;
+ }
+ }
+ #endif
+
+ }
+ catch ( xbInt16 iRc )
+ {
+ xbString sMsg;
+ sMsg.Sprintf( "xbdbf4::Open() Exception Caught Error Stop = [%d] iRc = [%d] ShareMode = [%d] OpenMode = [%d]", iErrorStop, iRc, iShareMode, iOpenMode );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ xbFclose();
+ if( RecBuf ){
+ free( RecBuf );
+ RecBuf = NULL;
+ }
+ if( RecBuf2 ){
+ free( RecBuf2 );
+ RecBuf2 = NULL;
+ }
+ if( SchemaPtr ){
+ free( SchemaPtr );
+ SchemaPtr = NULL;
+ }
+ InitVars();
+
+#ifdef XB_MEMO_SUPPORT
+ if( Memo ){
+ Memo->CloseMemoFile();
+ delete Memo;
+ Memo = NULL;
+ }
+#endif
+ }
+
+ if( iRc == XB_NO_ERROR )
+ iDbfStatus = XB_OPEN;
+
+ return iRc;
+}
+
+/************************************************************************/
+//! @brief Rename table.
+/*!
+ This routine renames a table, associated memo, mdx and inf files
+ \param sNewName - New file name.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbDbf4::Rename( const xbString sNewName ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+
+ xbString sNewDbf;
+
+ #ifdef XB_MEMO_SUPPORT
+ xbString sNewDbt;
+ xbBool bDbtRenamed = xbFalse;
+ xbString sThisDbt;
+ #endif
+
+ #ifdef XB_MDX_SUPPORT
+ xbString sNewMdx;
+ xbBool bMdxRenamed = xbFalse;
+ xbString sThisMdx;
+ #endif
+
+ #ifdef XB_INF_SUPPORT
+ xbString sNewInf;
+ xbString sThisInf;
+ xbBool bInfRenamed = xbFalse;
+ #endif // XB_INF_SUPPORT
+
+ xbBool bDbfRenamed = xbFalse;
+
+ #ifdef XB_LOCKING_SUPPORT
+ xbBool bLocked = xbFalse;
+ #endif // XB_LOCKIN_SUPPORT
+
+
+ try{
+
+ xbString sDir;
+ xbString sFile;
+ xbString sExt;
+ xbString sNewNameWoExt;
+ sNewNameWoExt.Set( sNewName );
+ if( sNewName.Pos( ".DBF" ) > 0 )
+ sNewNameWoExt.Left( sNewName.Len() - 4 );
+
+// std::cout << "NewName wo ext = [" << sNewNameWoExt.Str() << "]\n";
+
+ GetFileDirPart ( sDir );
+ GetFileNamePart( sFile );
+ GetFileExtPart ( sExt );
+
+ sNewDbf.Sprintf( "%s%s.DBF", sDir.Str(), sNewNameWoExt.Str());
+
+ #ifdef XB_MEMO_SUPPORT
+ sNewDbt.Sprintf( "%s%s.DBT", sDir.Str(), sNewNameWoExt.Str());
+ if( FileExists( sNewDbt )) return XB_FILE_EXISTS;
+ sThisDbt.Sprintf( "%s%s.DBT", sDir.Str(), sFile.Str());
+ #endif
+
+ #ifdef XB_MDX_SUPPORT
+ sNewMdx.Sprintf( "%s%s.MDX", sDir.Str(), sNewNameWoExt.Str());
+ if( FileExists( sNewMdx )) return XB_FILE_EXISTS;
+ sThisMdx.Sprintf( "%s%s.MDX", sDir.Str(), sFile.Str());
+ #endif
+
+ #ifdef XB_INF_SUPPORT
+ sNewInf.Sprintf( "%s%s.INF", sDir.Str(), sNewNameWoExt.Str());
+ if( FileExists( sNewInf )) return XB_FILE_EXISTS;
+ sThisInf.Sprintf( "%s%s.INF", sDir.Str(), sFile.Str());
+ #endif // XB_INF_SUPPORT
+
+
+/*
+ std::cout << "xbDbf3::Rename dir = [" << sDir.Str() << "] file = [" << sFile.Str() << "] ext = [" << sExt.Str() << "]\n";
+ std::cout << "xbDbf3::Rename new dbf = [" << sNewDbf.Str() << "]\n";
+ std::cout << "xbDbf3::Rename new dbt = [" << sNewDbt.Str() << "]\n";
+ std::cout << "xbDbf3::Rename new inf = [" << sNewInf.Str() << "]\n";
+ std::cout << "xbDbf3::Rename new mdx = [" << sNewMdx.Str() << "]\n";
+*/
+
+ if( FileExists( sNewDbf )) return XB_FILE_EXISTS;
+
+ #ifdef XB_LOCKING_SUPPORT
+ if( GetAutoLock() ){
+ if(( iRc = LockTable( XB_LOCK )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ bLocked = xbTrue;
+ }
+ #endif
+
+ xbInt16 iOpenMode = GetOpenMode();
+ xbInt16 iShareMode = GetShareMode();
+ xbBool bWasOpen = xbFalse;
+ if( FileIsOpen() ){
+ bWasOpen = xbTrue;
+ if(( iRc = xbFclose()) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ }
+
+ if(( iRc = xbRename( GetFqFileName().Str(), sNewDbf.Str())) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ } else {
+ bDbfRenamed = xbTrue;
+ }
+ xbString sNameWext;
+ sNameWext.Sprintf( "%s.DBF", sNewNameWoExt.Str());
+ SetFileName( sNameWext );
+
+
+ if( bWasOpen ){
+ if(( iRc = xbFopen( iOpenMode, iShareMode )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ }
+
+ #ifdef XB_MEMO_SUPPORT
+ if( FileExists( sThisDbt )){
+ if(( iRc = Memo->xbFseek( 8, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+
+ sNewNameWoExt.PadRight( ' ', 8 );
+ for( int i = 1; i < 9; i++ )
+ Memo->xbFputc( sNewNameWoExt[i] );
+
+ if( bWasOpen ){
+ if(( iRc = Memo->xbFclose()) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+ }
+
+ Memo->SetFileName( sNewDbt );
+ if(( xbRename( sThisDbt.Str(), sNewDbt.Str())) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+
+ if( bWasOpen ){
+ if(( iRc = Memo->xbFopen( iOpenMode, iShareMode )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+ }
+
+ bDbtRenamed = xbTrue;
+ }
+ #endif
+
+ #ifdef XB_MDX_SUPPORT
+ if( FileExists( sThisMdx )){
+ xbIxMdx *ixMdx;
+ xbString s;
+ xbBool bMdxFound = xbFalse;
+ xbIxList *ixList = GetIxList();
+ while( ixList && !bMdxFound ){
+ s = ixList->sFmt->Str();
+ if( s == "MDX" ){
+ ixMdx = (xbIxMdx *) ixList->ix;
+ bMdxFound = xbTrue;
+ }
+ }
+
+ if( bMdxFound ){
+ if(( iRc = ixMdx->xbFseek( 4, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 180;
+ throw iRc;
+ }
+
+ sNewNameWoExt.PadRight( ' ', 8 );
+ for( int i = 1; i < 9; i++ )
+ ixMdx->xbFputc( sNewNameWoExt[i] );
+
+ if( bWasOpen ){
+ if(( iRc = ixMdx->xbFclose()) != XB_NO_ERROR ){
+ iErrorStop = 190;
+ throw iRc;
+ }
+ }
+
+ ixMdx->SetFileName( sNewMdx );
+ if(( xbRename( sThisMdx.Str(), sNewMdx.Str())) != XB_NO_ERROR ){
+ iErrorStop = 200;
+ throw iRc;
+ }
+
+ if( bWasOpen ){
+ if(( iRc = ixMdx->xbFopen( iOpenMode, iShareMode )) != XB_NO_ERROR ){
+ iErrorStop = 210;
+ throw iRc;
+ }
+ }
+ bMdxRenamed = xbTrue;
+ }
+ }
+ #endif // XB_MDX_SUPPORT
+
+ #ifdef XB_INF_SUPPORT
+ if( FileExists( sThisInf )){
+ if(( xbRename( sThisInf.Str(), sNewInf.Str())) != XB_NO_ERROR ){
+ iErrorStop = 180;
+ throw iRc;
+ } else {
+ bInfRenamed = xbTrue;
+ }
+ }
+ #endif // XB_INF_SUPPORT
+
+ // rename the table in the table list
+ xbTblList *tle = xbase->GetTblListEntry( this );
+ if( tle ){
+ tle->psFqTblName->Set( GetFqFileName().Str());
+ tle->psTblAlias->Set( sNewNameWoExt.Str());
+ }
+
+
+ }
+ catch ( xbInt16 iRc )
+ {
+ xbString sMsg;
+ sMsg.Sprintf( "xbdbf4::Rename() Exception Caught Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+
+ // attempt to reverse things out if unsuccessful
+ if( bDbfRenamed ){
+
+ #ifdef XB_MEMO_SUPPORT
+ if( bDbtRenamed ){
+ xbRename( sNewDbt.Str(), sThisDbt.Str());
+ }
+ #endif
+
+ #ifdef XB_MDX_SUPPORT
+ if( bMdxRenamed ){
+ xbRename( sNewMdx.Str(), sThisMdx.Str());
+ }
+ #endif
+
+ #ifdef XB_INF_SUPPORT
+ if( bInfRenamed ){
+ xbRename( sNewInf.Str(), sNewInf.Str());
+ }
+ #endif // XB_INF_SUPPORT
+ }
+
+ #ifdef XB_LOCKING_SUPPORT
+ if( GetAutoLock() ){
+ iRc = LockTable( XB_UNLOCK );
+ }
+ #endif
+
+ }
+
+ #ifdef XB_LOCKING_SUPPORT
+ if( bLocked ){
+ LockTable( XB_UNLOCK );
+ }
+ #endif
+
+ return iRc;
+}
+
+/************************************************************************/
+#ifdef XB_MEMO_SUPPORT
+
+//! @brief Create memo block size.
+/*!
+ This routine sets the memo file block size. This value is used when
+ the memo file is created so you if you want to change it, this must be
+ called before creating the table.
+
+ The default size for version 4 is 1024.
+
+ \param ulBlockSize - Block size, must be evenly divisible by 512.
+ \returns XB_INVALID_BLOCK_SIZE<br>XB_NO_ERROR
+*/
+
+xbInt16 xbDbf4::SetCreateMemoBlockSize( xbUInt32 ulBlockSize ){
+
+ if( ulBlockSize % 512 )
+ return XB_INVALID_BLOCK_SIZE;
+ else
+ ulCreateMemoBlockSize = ulBlockSize;
+
+ return XB_NO_ERROR;
+}
+#endif // XB_MEMO_SUPPORT
+/************************************************************************/
+//! @brief Set version.
+/*!
+ Sets the version to 4. The version info can be retrieved to determine
+ which class is being used for a given dbf instance.
+ \returns 4
+*/
+xbInt16 xbDbf4::SetVersion() {
+ iFileVersion = 4;
+ return iFileVersion;
+}
+/************************************************************************/
+//! @brief Validate schema
+/*!
+ This routine verifies the field types are valid for Dbase IV (tm).
+
+ \param s Pointer to schema structure with field definitions.
+
+ \returns Number of fields or XB_INVALID_FIELD_TYPE.
+*/
+
+
+xbInt16 xbDbf4::ValidateSchema( xbSchema * s ){
+
+ xbInt16 iFieldCnt = 0;
+ uiRecordLen = 0;
+
+ // Count the number of fields and check paramaters
+ xbInt16 i = 0;
+ while( s[i].cType != 0 ){
+ iFieldCnt++;
+ // Version IV field types
+ if( s[i].cType != 'C' &&
+ s[i].cType != 'N' &&
+ s[i].cType != 'F' &&
+ s[i].cType != 'D' &&
+ #ifdef XB_MEMO_SUPPORT
+ s[i].cType != 'M' &&
+ #endif /* XB_MEMO_SUPPORT */
+ s[i].cType != 'L' ){
+ return XB_INVALID_FIELD_TYPE;
+ }
+
+ if(s[i].cType == 'D'){
+ s[i].iFieldLen = 8;
+ s[i].iNoOfDecs = 0;
+ }
+
+ else if(s[i].cType == 'C')
+ s[i].iNoOfDecs = 0;
+
+ // check for numeric fields which are too long
+ else if((s[i].cType == 'N' || s[i].cType == 'F') && s[i].iFieldLen > 19 ){
+ return XB_INVALID_FIELD_LEN;
+ }
+
+ // field len must be greater then number of decimals
+ else if((s[i].cType == 'N' || s[i].cType == 'F') && s[i].iFieldLen < s[i].iNoOfDecs ){
+ return XB_INVALID_FIELD_LEN;
+ }
+
+ #ifdef XB_MEMO_SUPPORT
+ else if(s[i].cType == 'M'){
+ s[i].iFieldLen = 10;
+ s[i].iNoOfDecs = 0;
+ }
+ #endif // XB_MEMO_SUPPORT
+
+ uiRecordLen += s[i].iFieldLen;
+ i++;
+ }
+ return iFieldCnt;
+}
+
+} /* namespace */
+#endif /* XB_DBF4_SUPPORT */ \ No newline at end of file
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/core/xbexp.cpp b/1Tdata/xbase/xbase64-4.1.4/src/core/xbexp.cpp
new file mode 100755
index 0000000..b2d4db9
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/core/xbexp.cpp
@@ -0,0 +1,2721 @@
+/* xbexp.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2017,2021,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under
+the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+
+This module is part of the expression logic and has the code
+for parsing various tokens out of an expression
+
+*/
+
+#include "xbase.h"
+
+#ifdef XB_EXPRESSION_SUPPORT
+
+namespace xb{
+
+/*************************************************************************/
+//! Constructor
+/*!
+ \param x Pointer to xbXBase instance.
+*/
+
+xbExp::xbExp( xbXBase *x ){
+ xbase = x;
+ dbf = NULL;
+ nTree = NULL;
+}
+
+/*************************************************************************/
+//! Constructor
+/*!
+ \param x Pointer to xbXBase instance.
+ \param d Pointer to xbDbf instance.
+*/
+xbExp::xbExp( xbXBase *x, xbDbf *d ){
+ xbase = x;
+ dbf = d;
+ nTree = NULL;
+}
+
+/*************************************************************************/
+//! Deconstrucor.
+
+xbExp::~xbExp() {
+
+ if( nTree )
+ delete nTree;
+}
+
+/*************************************************************************/
+//! Calulate expression return length
+/*!
+
+ This function returns the maximum possible length of an expression
+ The create index functions use this for determining the fixed length keys
+ It sets the return length field in the node.
+
+ \param n Start node
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbExp::CalcFunctionResultLen( xbExpNode * n ) const{
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbInt16 iReturnLenCalc = 0;;
+ xbInt32 lReturnLenVal = 0;
+ xbString sNodeText;
+
+
+ try{
+
+ n->GetNodeText( sNodeText );
+ char cReturnType = 0;
+ if(( iRc = xbase->GetFunctionInfo( sNodeText, cReturnType, iReturnLenCalc, lReturnLenVal )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+
+ if( iReturnLenCalc == 1 ){
+ // use the value from iReturnLenVal
+ n->SetResultLen( (xbUInt32) lReturnLenVal );
+ }
+ else if( iReturnLenCalc == 2 ){
+ // use the length from the child node identified in lReturnLenVal
+ xbExpNode *nChild = n->GetChild( (xbUInt32) lReturnLenVal - 1 );
+ if( !nChild ){
+ iErrorStop = 110;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+ n->SetResultLen( nChild->GetResultLen());
+ }
+
+ else if( iReturnLenCalc == 3 ){
+ // use the length from the child node identified in lReturnLenVal
+ xbExpNode *nChild = n->GetChild( (xbUInt32) lReturnLenVal - 1 );
+ if( !nChild ){
+ iErrorStop = 120;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+ n->SetResultLen( (xbUInt32) nChild->GetNumericResult());
+ }
+ else if( iReturnLenCalc == 4 ){
+ // use the value from the length in parm 1 multiplied by the value in parm 2 (REPLICATE)
+ xbExpNode *nChild1 = n->GetChild( 0 );
+ xbExpNode *nChild2 = n->GetChild( 1 );
+ if( !nChild1 || !nChild2 ){
+ iErrorStop = 130;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+ n->SetResultLen( nChild1->GetResultLen() * (xbUInt32) nChild2->GetNumericResult());
+ }
+ else if( iReturnLenCalc == 5 ){
+ // use the larger of the length of the value in parm2 or parm 3 (IIF statement)
+ xbExpNode *nChild2 = n->GetChild( 1 );
+ xbExpNode *nChild3 = n->GetChild( 2 );
+ if( !nChild2 || !nChild3 ){
+ iErrorStop = 140;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+ if( nChild2->GetResultLen() >= nChild3->GetResultLen())
+ n->SetResultLen( nChild2->GetResultLen());
+ else
+ n->SetResultLen( nChild3->GetResultLen());
+ }
+
+ else if( iReturnLenCalc == 6 ){
+
+ if( n->GetChildCnt() >= 2 ){
+ xbExpNode *nChild2 = n->GetChild( 1 );
+ n->SetResultLen( (xbUInt32) nChild2->GetNumericResult());
+ } else {
+ n->SetResultLen( (xbUInt32) lReturnLenVal );
+ }
+
+ } else {
+ iErrorStop = 150;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbexp::GetFunctionResultLen() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ }
+ return iRc;
+}
+
+/*************************************************************************/
+//! Check parens and quotes
+/*!
+ This routine looks for unbalanced parens and quotes
+
+ \param sExpression Expression to examine.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+
+xbInt16 xbExp::CheckParensAndQuotes( const xbString &sExpression ){
+
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+
+ xbBool bInQuotes = xbFalse;
+ xbInt16 iLparenCtr = 0;
+ xbInt16 iRparenCtr = 0;
+ xbInt16 iQuoteType = 0;
+ const char *s = sExpression;
+
+ try{
+
+ while( *s ){
+ if( !bInQuotes ){
+ if( *s == '(' ){
+ iLparenCtr++;
+ } else if( *s == ')' ){
+ iRparenCtr++;
+ } else if( *s == '\'' ){
+ bInQuotes++;
+ iQuoteType = 0;
+ } else if( *s == '"' ){
+ bInQuotes++;
+ iQuoteType = 1;
+ }
+ } else {
+ if(( *s == '\'' && iQuoteType == 0 ) || (*s == '"' && iQuoteType == 1 ))
+ bInQuotes--;
+ }
+ s++;
+ }
+ if( iLparenCtr != iRparenCtr ){
+ iErrorStop = 100;
+ iRc = XB_UNBALANCED_PARENS;
+ throw iRc;
+ }
+ if( bInQuotes ){
+ iErrorStop = 110;
+ iRc = XB_UNBALANCED_QUOTES;
+ throw iRc;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbexp::CheckParensAndQuots() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( sExpression );
+ }
+ return iRc;
+}
+/*************************************************************************/
+//! Clear tree handle.
+/*!
+ This routine clears the expression tree and frees any associated memory.
+ \returns void.
+*/
+
+void xbExp::ClearTreeHandle(){
+ if( nTree ){
+ nTree = NULL;
+ }
+}
+
+/*************************************************************************/
+#ifdef XB_DEBUG_SUPPORT
+//! Dump the tree.
+/*!
+ \param iOption - Output opton.
+ \returns void.
+*/
+
+void xbExp::DumpTree( xbInt16 iOption ){
+ nTree->DumpNode( iOption );
+}
+
+//! Dump token
+/*!
+ \param iOption - Output opton.
+ \returns void.
+*/
+
+
+void xbExp::DumpToken( xbExpToken &t, xbInt16 iOption ){
+
+ xbString sMsg;
+ sMsg = "Processing Token";
+ xbase->WriteLogMessage( sMsg.Str(), iOption );
+
+ sMsg.Sprintf( "Expression = [%s]", t.sExpression.Str());
+ xbase->WriteLogMessage( sMsg.Str(), iOption );
+
+ sMsg.Sprintf( "Token = [%s]", t.sToken.Str());
+ xbase->WriteLogMessage( sMsg.Str(), iOption );
+
+ sMsg.Sprintf( "NodeType = [%c]", t.cNodeType );
+ xbase->WriteLogMessage( sMsg.Str(), iOption );
+
+ sMsg.Sprintf( "ReturnType = [%c]", t.cReturnType );
+ xbase->WriteLogMessage( sMsg.Str(), iOption );
+
+ sMsg.Sprintf( "Sts = [%d]", t.iSts );
+ xbase->WriteLogMessage( sMsg.Str(), iOption );
+
+ sMsg.Sprintf( "PrevNodeType = [%c]", t.cPrevNodeType );
+ xbase->WriteLogMessage( sMsg.Str(), iOption );
+
+ sMsg.Sprintf( "PrevReturnType = [%c]", t.cPrevReturnType );
+ xbase->WriteLogMessage( sMsg.Str(), iOption );
+}
+
+#endif
+
+/*************************************************************************/
+//! Get date result.
+/*!
+ If the expression generates a date return type, this method retrieves the date value.
+ \param dtResult - Output date value.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbExp::GetDateResult( xbDate &dtResult ){
+ if( nTree ){
+ dtResult.JulToDate8( (xbInt32) nTree->GetNumericResult() );
+ return XB_NO_ERROR;
+ }
+ else{
+ //dtResult = ?;
+ return XB_PARSE_ERROR;
+ }
+}
+/*************************************************************************/
+//! Get bool result.
+/*!
+ If the expression generates a boolean return type, this method retrieves the boolean value.
+ \param bResult - Output boolean value.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbExp::GetBoolResult( xbBool &bResult){
+ if( nTree ){
+ bResult = nTree->GetBoolResult();
+ return XB_NO_ERROR;
+ }
+ else{
+ return XB_PARSE_ERROR;
+ }
+}
+
+/*************************************************************************/
+//! Get the next node in the tree.
+/*!
+ \param n Node to starting point. To get the first node of the entire tree, set n = NULL
+ \returns Pointer to next node.
+*/
+
+xbExpNode *xbExp::GetNextNode( xbExpNode * n ) const {
+
+ // to get the first node of the entire tree, set n = NULL
+ // std::cout << "In GetNextNode\n";
+
+ if( n == nTree )
+ return NULL;
+
+ else if( !n ){
+ if( !nTree )
+ return NULL;
+ else
+ return nTree->GetFirstNode();
+ }
+ return n->GetNextNode();
+}
+
+/*************************************************************************/
+//! GetNextToken
+/*! This method returns the next token in an expression of one or more tokens
+ \param t Token
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbExp::GetNextToken( xbExpToken &t ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+
+ try{
+ t.iSts = XB_NO_ERROR;
+ t.sExpression.Ltrim();
+
+ if( t.sExpression.Len() == 0 ){
+ t.iSts = XB_END_OF_EXPRESSION;
+ return XB_NO_ERROR;
+ }
+
+ // Check for date constant
+ if((t.sExpression.Len() >= 10 && t.sExpression[1] == '{' && t.sExpression[4] == '/' && t.sExpression[7] == '/') &&
+ (t.sExpression[10] == '}' || (t.sExpression.Len() >= 12 && t.sExpression[12] == '}'))){
+ if(( iRc = GetTokenDateConstant( t )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ }
+ // Check for parens
+ else if( t.sExpression[1] == '(' || t.sExpression[1] == '{' ){
+ if(( iRc = GetTokenParen( t )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ }
+ // Check for a char constant
+ else if( t.sExpression[1] == '"' || t.sExpression[1] == '\'' ){
+ if(( iRc = GetTokenCharConstant( t )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+ }
+ // Check for logical constant
+ else if( IsLogicalConstant( t.sExpression )){
+ if(( iRc = GetTokenLogicalConstant( t )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+ }
+ // check for numeric constant
+ else if( IsNumericConstant( t.sExpression, t.cPrevNodeType )){
+ if(( iRc = GetTokenNumericConstant( t )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+ }
+ // check for operator
+ else if( IsOperator( t.sExpression )){
+ if(( iRc = GetTokenOperator( t )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+ }
+ // check for function
+ else if( IsFunction( t.sExpression, t.cReturnType )){
+ if(( iRc = GetTokenFunction( t )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+ }
+ else if(( iRc = GetTokenDatabaseField( t )) != XB_NO_ERROR ){
+ iErrorStop = 170;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+ }
+
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbexp::GetNextToken() Exception Caught. Error Stop = [%d] iRc = [%d] Expression = [%s]", iErrorStop, iRc, t.sExpression.Str() );sMsg.Sprintf( "xbexp::GetNextToken() Exception Caught. Error Stop = [%d] iRc = [%d] Expression = [%s]", iErrorStop, iRc, t.sExpression.Str() );sMsg.Sprintf( "xbexp::GetNextToken() Exception Caught. Error Stop = [%d] iRc = [%d] Expression = [%s]", iErrorStop, iRc, t.sExpression.Str() );sMsg.Sprintf( "xbexp::GetNextToken() Exception Caught. Error Stop = [%d] iRc = [%d] Expression = [%s]", iErrorStop, iRc, t.sExpression.Str() );
+ xbase->WriteLogMessage( sMsg.Str() );
+ }
+ return iRc;
+}
+
+/*************************************************************************/
+//! Get numeric result.
+/*!
+ If the expression generates a numeric return type, this method retrieves the numeric value.
+ \param dResult - Output numeric value.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbExp::GetNumericResult( xbDouble &dResult){
+ if( nTree ){
+ dResult = nTree->GetNumericResult();
+ return XB_NO_ERROR;
+ }
+ else{
+ dResult = 0;
+ return XB_PARSE_ERROR;
+ }
+}
+/*************************************************************************/
+//! Get result length.
+/*!
+ This routine returns the result length.
+ \returns Result length.
+*/
+
+xbInt16 xbExp::GetResultLen() const{
+ if( nTree )
+ return nTree->GetResultLen();
+ else
+ return 0;
+}
+
+/*************************************************************************/
+//! Get return type.
+/*!
+ \returns Expression return type.
+*/
+
+char xbExp::GetReturnType() const{
+ if( nTree )
+ return nTree->GetReturnType();
+ else
+ return ' ';
+}
+
+/*************************************************************************/
+//! Get string result.
+/*!
+ If the expression generates a string return type, this method retrieves the string value.
+ \param sResult - Output string value.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbExp::GetStringResult( xbString &sResult){
+ if( nTree ){
+ sResult = nTree->GetStringResult();
+ return XB_NO_ERROR;
+ }
+ else{
+ sResult = "";
+ return XB_PARSE_ERROR;
+ }
+}
+
+/*************************************************************************/
+//! Get string result.
+/*!
+ If the expression generates a string return type, this method retrieves the string value.
+ \param vpResult - Pointer to user supplied buffer for result.
+ \param ulLen - Max size of buffer.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+
+xbInt16 xbExp::GetStringResult( char * vpResult, xbUInt32 ulLen ){
+ if( nTree ){
+ nTree->GetStringResult().strncpy((char *) vpResult, ulLen );
+ return XB_NO_ERROR;
+ }
+ else{
+ return XB_PARSE_ERROR;
+ }
+}
+
+
+
+/*************************************************************************/
+//! GetTokenCharConstant
+/*! This method returns the character constant in a pair of quotes
+
+ This routine returns the tokens inside a set of matching quotes in sOutToken
+ If there is nothing between the quotes then sOutToken is returned empty
+ sOutRemainder contains whatever remains to the right of the right quote
+
+ \param t Token
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+
+*/
+
+xbInt16 xbExp::GetTokenCharConstant( xbExpToken &t ){
+
+ const char *s = t.sExpression;
+ const char *sToken; // pointer to beginning of token
+ xbInt16 iQuoteType;
+ xbUInt32 ulTokenLen = 0;
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbBool bDone = xbFalse;
+
+ try{
+ if( *s == '"' )
+ iQuoteType = 0;
+ else
+ iQuoteType = 1;
+ s++;
+ sToken = s;
+ while( *s && !bDone ){
+ if(( *s == '"' && iQuoteType == 0 ) || (*s == '\'' && iQuoteType == 1 ))
+ bDone = xbTrue;
+ s++;
+ ulTokenLen++;
+ }
+ if( bDone ){ // found matching paren
+ t.cNodeType = XB_EXP_CONSTANT;
+ t.cReturnType = XB_EXP_CHAR;
+ t.sToken.Set( sToken, ulTokenLen - 1 );
+ t.sExpression.Ltrunc( ulTokenLen + 1 );
+ } else {
+ iRc = XB_PARSE_ERROR;
+ t.iSts = XB_UNBALANCED_QUOTES;
+ iErrorStop = 100;
+ throw iRc;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbexp::GetTokenCharConstant() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ }
+ return iRc;
+}
+
+
+/*************************************************************************/
+//! GetTokenDateConstant
+/*! This method returns the date constant in a pair of {}
+
+ Date format is one of {mm/dd/yy} or {mm/dd/yyyy}
+ \param t Token.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbExp::GetTokenDateConstant( xbExpToken &t ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ char wBuf[13];
+ xbDate dt;
+
+ try{
+ memset( wBuf, 0x00, 13 );
+ t.cNodeType = XB_EXP_CONSTANT;
+ t.cReturnType = XB_EXP_DATE;
+
+ if( t.sExpression[10] == '}' ){
+ for( xbInt16 i = 0; i < 8; i++ )
+ wBuf[i] = t.sExpression[i+2];
+
+ if(( iRc = dt.CTOD( wBuf )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ t.sToken.Set( dt.Str() );
+ t.sExpression.Ltrunc( 10 );
+
+ } else if( t.sExpression[12] == '}' ){
+
+ wBuf[0] = t.sExpression[8];
+ wBuf[1] = t.sExpression[9];
+ wBuf[2] = t.sExpression[10];
+ wBuf[3] = t.sExpression[11];
+ wBuf[4] = t.sExpression[2];
+ wBuf[5] = t.sExpression[3];
+ wBuf[6] = t.sExpression[5];
+ wBuf[7] = t.sExpression[6];
+
+ t.sToken.Set( wBuf );
+ t.sExpression.Ltrunc( 12 );
+ } else {
+ iRc = XB_PARSE_ERROR;
+ t.iSts = XB_INVALID_DATE;
+ iErrorStop = 110;
+ throw iRc;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbexp::GetTokenDateConstant() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ }
+ return iRc;
+}
+/*************************************************************************/
+//! GetTokenField
+/*! This method gets a database field token
+
+ Looks for a xbase field in one of the following formats
+
+ FIELDNAME
+ or
+ TABLENAME->FIELDNAME
+
+ \param t Token.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbExp::GetTokenDatabaseField( xbExpToken &t ){
+
+ const char *s = t.sExpression;
+ xbUInt32 ulTokenLen = 0;
+ xbUInt32 ulTokenLen2 = 0;
+
+ while( *s && !IsTokenSeparator( *s ) && !IsWhiteSpace( *s )) {
+ ulTokenLen++;
+ s++;
+ }
+
+ // go past any white space
+ while( *s && !IsTokenSeparator( *s ) && IsWhiteSpace( *s )) {
+ ulTokenLen2++;
+ s++;
+ }
+
+ // look for ->
+ // remove the table name from before the ->
+ if( strncmp( s, "->", 2 ) == 0 ){
+ ulTokenLen2+=2;
+ s+=2;
+
+/*
+ if( strncmp( s, "->", 2 ) == 0 || strncmp( s, ".", 1 ) == 0){
+ if( *s == '.' ){
+ ulTokenLen2+=1;
+ s+=1;
+ } else {
+ ulTokenLen2+=2;
+ s+=2;
+ }
+*/
+
+ // go past white space
+ while( *s && !IsTokenSeparator( *s ) && IsWhiteSpace( *s )) {
+ ulTokenLen2++;
+ s++;
+ }
+ // go to the end
+ while( *s && !IsTokenSeparator( *s ) && !IsWhiteSpace( *s )) {
+ ulTokenLen2++;
+ s++;
+ }
+ ulTokenLen += ulTokenLen2;
+ }
+ t.cNodeType = XB_EXP_FIELD;
+ t.cReturnType = XB_EXP_UNKNOWN;
+ t.sToken.Set( t.sExpression, ulTokenLen );
+ t.sExpression.Ltrunc( ulTokenLen );
+
+ return XB_NO_ERROR;
+}
+
+/*************************************************************************/
+//! GetTokenFunction
+/*!
+ This method gets a function and everything between the following quotes
+ \param t Token
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+
+*/
+
+xbInt16 xbExp::GetTokenFunction( xbExpToken &t ){
+
+ xbUInt32 lPos = t.sExpression.Pos( '(' );
+ if( lPos == 0 )
+ return XB_PARSE_ERROR;
+
+ xbBool bDone = xbFalse;
+ xbUInt32 lLen = t.sExpression.Len();
+ xbInt16 iDepthCtr = 1;
+
+ while( ++lPos <= lLen && !bDone ){
+ if( t.sExpression[lPos] == ')' ){
+ iDepthCtr--;
+ if( iDepthCtr == 0 )
+ bDone = xbTrue;
+ } else if( t.sExpression[lPos] == '(' ){
+ iDepthCtr++;
+ }
+ }
+
+ t.cNodeType = XB_EXP_FUNCTION;
+ t.sToken.Set( t.sExpression, lPos-1 );
+ t.sExpression.Ltrunc( lPos-1 );
+
+// std::cout << "lPos = [" << lPos << "] done= [" << bDone << "][" << t.sExpression << "] len=[" << lLen << "] return type = [" << t.cReturnType << "]\n";
+
+ return XB_NO_ERROR;
+}
+
+/*************************************************************************/
+//! GetTokenCharConstant
+/*! This method returns the character constant in a pair of quotes
+
+ This routine returns the tokens inside a set of matching quotes in sOutToken
+ If there is nothing between the quotes then sOutToken is returned empty
+ sOutRemainder contains whatever remains to the right of the right quote
+
+ \param t Token
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbExp::GetTokenLogicalConstant( xbExpToken &t ){
+
+ t.cNodeType = XB_EXP_CONSTANT;
+ t.cReturnType = XB_EXP_LOGICAL;
+ t.sToken = t.sExpression[2];
+
+ if( t.sExpression[3] == '.' )
+ t.sExpression.Ltrunc( 3 );
+ else if( t.sExpression[6] == '.' )
+ t.sExpression.Ltrunc( 6 );
+ else if( t.sExpression[7] == '.' )
+ t.sExpression.Ltrunc( 7 );
+
+ return XB_NO_ERROR;
+}
+
+
+/*************************************************************************/
+//! GetTokenNumericConstant
+/*! This method returns a numeric constant in
+
+ This routine returns a numeric constant token
+ sOutRemainder contains whatever remains to the right of the right quote
+
+ \param t Token
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbExp::GetTokenNumericConstant( xbExpToken &t ){
+
+ const char * s = t.sExpression;
+ xbUInt32 ulTokenLen = 0;
+ t.sToken = "";
+
+ t.cNodeType = XB_EXP_CONSTANT;
+ t.cReturnType = XB_EXP_NUMERIC;
+
+ // capture the leading sign
+ if( *s == '-' || *s == '+' || *s == '.' ){
+ t.sToken = *s;
+ ulTokenLen++;
+ s++;
+
+ // go past any white space between sign and number
+ while( *s && IsWhiteSpace( *s )){
+ s++;
+ ulTokenLen++;
+ }
+ }
+
+ // add the number to the token
+ while( *s && (isdigit( *s ) || *s == '.' )){
+ t.sToken += *s;
+ s++;
+ ulTokenLen++;
+ }
+ t.sExpression.Ltrunc( ulTokenLen );
+ return XB_NO_ERROR;
+}
+
+/*************************************************************************/
+//! GetTokenOperator
+/*! This method returns the operator
+
+ \param t Token
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+
+*/
+
+xbInt16 xbExp::GetTokenOperator( xbExpToken &t ){
+
+ const char *s = t.sExpression;
+
+ // Logical operators
+ if((strncmp( s, "<>", 2 ) == 0 ) || (strncmp( s, "!=", 2 ) == 0 ) ||
+ (strncmp( s, "<=", 2 ) == 0 ) || (strncmp( s, ">=", 2 ) == 0 )){
+ t.cReturnType = XB_EXP_LOGICAL;
+ t.sToken.Assign( s, 1, 2 );
+ t.sExpression.Ltrunc( 2 );
+ t.cNodeType = XB_EXP_OPERATOR;
+ return XB_NO_ERROR;
+ }
+
+ if( *s == '=' || *s == '<' || *s == '>' || *s == '$' || *s == '#' ){
+ t.cReturnType = XB_EXP_LOGICAL;
+ t.sToken.Assign( s, 1, 1 );
+ t.sExpression.Ltrunc( 1 );
+ t.cNodeType = XB_EXP_OPERATOR;
+ return XB_NO_ERROR;
+ }
+
+ if( (strncmp( s, ".NOT.", 5 ) == 0 ) || (strncmp( s, ".AND.", 5 ) == 0 )){
+ t.cReturnType = XB_EXP_LOGICAL;
+ t.sToken.Assign( s, 1, 5 );
+ t.sExpression.Ltrunc( 5 );
+ t.cNodeType = XB_EXP_OPERATOR;
+ return XB_NO_ERROR;
+ }
+
+ if( (strncmp( s, "NOT ", 4 ) == 0 ) || (strncmp( s, "AND ", 4 ) == 0 )){
+ t.cReturnType = XB_EXP_LOGICAL;
+ t.sToken.Assign( s, 1, 3 );
+ t.sExpression.Ltrunc( 3 );
+ t.cNodeType = XB_EXP_OPERATOR;
+ return XB_NO_ERROR;
+ }
+
+ if( strncmp( s, ".OR.", 4 ) == 0 ) {
+ t.cReturnType = XB_EXP_LOGICAL;
+ t.sToken.Assign( s, 1, 4 );
+ t.sExpression.Ltrunc( 4 );
+ t.cNodeType = XB_EXP_OPERATOR;
+ return XB_NO_ERROR;
+ }
+
+ if( strncmp( s, "OR ", 3 ) == 0 ) {
+ t.cReturnType = XB_EXP_LOGICAL;
+ t.sToken.Assign( s, 1, 2 );
+ t.sExpression.Ltrunc( 2 );
+ t.cNodeType = XB_EXP_OPERATOR;
+ return XB_NO_ERROR;
+ }
+
+ // Numeric operators
+ if(( strncmp( s, "**", 2 ) == 0 ) || ( strncmp( s, "+=", 2 ) == 0 ) ||
+ ( strncmp( s, "-=", 2 ) == 0 ) || ( strncmp( s, "*=", 2 ) == 0 ) || ( strncmp( s, "/=", 2 ) == 0 )){
+ t.cReturnType = XB_EXP_NUMERIC;
+ t.sToken.Assign( s, 1, 2 );
+ t.sExpression.Ltrunc( 2 );
+ t.cNodeType = XB_EXP_OPERATOR;
+ return XB_NO_ERROR;
+ }
+
+ // Pre/post increment/decrement operators ++ or --
+ if(( strncmp( s, "--", 2 ) == 0 ) || ( strncmp( s, "++", 2 ) == 0 )){
+ t.cReturnType = XB_EXP_NUMERIC;
+ t.sToken.Assign( s, 1, 2 );
+ t.sExpression.Ltrunc( 2 );
+ if( t.sExpression.Len() > 0 && (isdigit( t.sExpression[1] ) || isalpha( t.sExpression[1] )))
+ t.cNodeType = XB_EXP_PRE_OPERATOR;
+ else
+ t.cNodeType = XB_EXP_POST_OPERATOR;
+
+ return XB_NO_ERROR;
+ }
+
+ if( *s == '*' || *s == '/' || *s == '%' || *s == '^' ){
+ t.cReturnType = XB_EXP_NUMERIC;
+ t.sToken.Assign( s, 1, 1 );
+ t.sExpression.Ltrunc( 1 );
+ t.cNodeType = XB_EXP_OPERATOR;
+ return XB_NO_ERROR;
+ }
+
+ // multi return type operators
+ t.cReturnType = XB_EXP_UNKNOWN;
+ if( *s == '+' || *s == '-' ){
+ t.sToken.Assign( s, 1, 1 );
+ t.sExpression.Ltrunc( 1 );
+ t.cNodeType = XB_EXP_OPERATOR;
+ return XB_NO_ERROR;
+ }
+ return XB_PARSE_ERROR;
+}
+
+/*************************************************************************/
+//! GetTokenParen
+/*! This method returns the tokens in a pair of enclosed parens
+
+ This routine returns the tokens inside a set of matching parens in sOutToken
+ If there is nothing between the parens then sOutToken is returned empty
+ sOutRemainder contains whatever remains to the right of the right paren
+
+ \param t Token
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+
+xbInt16 xbExp::GetTokenParen( xbExpToken &t ){
+
+ const char * s = t.sExpression;
+ const char * sToken; // pointer to beginning of token
+ xbInt16 iParenType = 0;
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbInt16 iDepthCtr = 0; // depth inside of nested parens
+ xbUInt32 ulTokenLen = 0;
+ xbBool bDone = xbFalse;
+
+ try{
+ if( *s == '{' )
+ iParenType = 0;
+ else
+ iParenType = 1;
+ iDepthCtr = 1;
+ s++;
+ sToken = s;
+
+ while( *s && !bDone ){
+ if(( *s == ')' && iParenType == 1 ) || (*s == '}' && iParenType == 0 )){
+ iDepthCtr--;
+ if( iDepthCtr == 0 )
+ bDone = xbTrue;
+ } else if(( *s == '(' && iParenType == 1 ) || (*s == '{' && iParenType == 0 )){
+ iDepthCtr++;
+ }
+ s++;
+ ulTokenLen++;
+ }
+
+ if( bDone ){ // found matching paren
+ t.cNodeType = XB_EXP_NOTROOT;
+ t.cReturnType = XB_EXP_UNKNOWN;
+ t.sToken.Set( sToken, ulTokenLen - 1 );
+ t.sExpression.Ltrunc( ulTokenLen + 1 );
+ } else {
+ t.sToken = "";
+ t.cNodeType = XB_EXP_NOTROOT;
+ t.cReturnType = XB_EXP_UNKNOWN;
+ t.iSts = XB_UNBALANCED_PARENS;
+ iRc = XB_PARSE_ERROR;
+ iErrorStop = 100;
+ throw iRc;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbexp::GetTokenParen() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ }
+ return iRc;
+}
+
+/*************************************************************************/
+//! Get the expression tree handle.
+/*!
+ \returns Pointer to the top most node in the expression tree.
+*/
+xbExpNode *xbExp::GetTreeHandle(){
+ return nTree;
+}
+
+/*************************************************************************/
+//! Is Function
+/*! This method determines if the next token is a function.
+
+ \param sExpression - String expression to be evaluated.
+ \param cReturnType Output - Return type.
+ \returns xbTrue - Is a function.<br>
+ xbFalse - Is not a function.
+*/
+
+xbBool xbExp::IsFunction( const xbString & sExpression, char &cReturnType ){
+
+ xbInt16 i = 0;
+ xbInt32 l = 0;
+ if( sExpression.Pos( '(' ) > 0 ){
+ if( xbase->GetFunctionInfo( sExpression, cReturnType, i, l ) == XB_NO_ERROR )
+ return xbTrue;
+ }
+ return xbFalse;
+}
+
+/*************************************************************************/
+//! Is Logical constant
+/*! This method determines if the next token is a logical constant (T/F, etc).
+
+ \param sExpression - String expression to be evaluated.
+ \returns xbTrue - Is a logical constant.<br>
+ xbFalse - Is not a logical constant.
+*/
+
+xbBool xbExp::IsLogicalConstant( const xbString & sExpression ){
+
+ const char *s = sExpression;
+ if(( strncmp( s, ".T.", 3 ) == 0 ) || ( strncmp( s, ".F.", 3 ) == 0 ))
+ return xbTrue;
+ else if( strncmp( s, ".TRUE.", 6 ) == 0 )
+ return xbTrue;
+ else if( strncmp( s, ".FALSE.", 7 ) == 0 )
+ return xbTrue;
+
+ return xbFalse;
+}
+
+/*************************************************************************/
+//! Is Numeric constant
+/*! This method determines if the next token is a numeric constant.
+
+ \param sExpression - String expression to be evaluated.
+ \param cPrevNodeType - Type of previous node.
+ \returns xbTrue - Is a numeric constant.<br>
+ xbFalse - Is not a numeric constant.
+*/
+xbBool xbExp::IsNumericConstant( const xbString & sExpression, char cPrevNodeType ){
+
+ // check for positive, negative or decimal number constants
+
+ const char *s = sExpression;
+ if(( *s == '-' && ( cPrevNodeType == 'O' || cPrevNodeType == 0 )) ||
+ ( *s == '+' && ( cPrevNodeType == 'O' || cPrevNodeType == 0 ))){
+ s++;
+ while( *s && IsWhiteSpace( *s ))
+ s++;
+ }
+ if( *s == '.' )
+ s++;
+
+ if( isdigit( *s ))
+ return xbTrue;
+ else
+ return xbFalse;
+}
+
+/*************************************************************************/
+//! Is Operator.
+/*! This method determines if the next token is an operator.
+
+ \param sExpression - String expression to be evaluated.
+ \returns xbTrue - Is an operator.<br>
+ xbFalse - Is not an operator.
+*/
+xbBool xbExp::IsOperator( const xbString & sExpression ){
+
+ const char *s = sExpression;
+ if( *s == '+' || *s == '-' || *s == '/' || *s == '^' || *s == '=' || *s == '$' ||
+ *s == '#' || *s == '*' || *s == '<' || *s == '>' || *s == '%' )
+ return xbTrue;
+
+ if( strncmp( s, "!=", 2 ) == 0 )
+ return xbTrue;
+
+ if((strncmp( s, ".NOT.", 5 ) == 0 ) || (strncmp( s, ".OR.", 4 ) == 0 ) || (strncmp( s, ".AND.", 5 ) == 0 ))
+ return xbTrue;
+
+ if((strncmp( s, "NOT ", 4 ) == 0 ) || (strncmp( s, "OR ", 3 ) == 0 ) || (strncmp( s, "AND ", 4 ) == 0 ))
+ return xbTrue;
+
+ return xbFalse;
+}
+
+/*************************************************************************/
+//! Is Token separator
+/*! This method determines if the next token is a separator.
+
+ \param sExpression - String expression to be evaluated.
+ \returns xbTrue - Is a token separator.<br>
+ xbFalse - Is not a token separator.
+*/
+char xbExp::IsTokenSeparator( char c ){
+ if( c == '-' || c == '+' || c == '*' || c == '/' || c == '$' || c == '#' ||
+ c == '<' || c == '>' || c == '^' || c == '=' || c == '.' || c == '!' )
+ return c;
+ else
+ return 0;
+}
+/*************************************************************************/
+//! Is White space
+/*! This method determines if a given character is white space.
+
+ \param c - Character to be evaluated.
+ \returns xbTrue - Is white space.<br>
+ xbFalse - Is not white space.
+*/
+xbBool xbExp::IsWhiteSpace( char c ){
+ return(( c == 0x20 )? 1 : 0 );
+}
+
+/*************************************************************************/
+//! Get operator weight.
+/*!
+ This method determines the priority of an operator
+
+ Operator precendence
+ 10 .AND. .OR. .NOT. (not really an operator)
+ 9 > or < (includes <= or >=)
+ 6 unary plus or minus (+,-) -- not passed this routine
+ 5 prefix increment and/or decrement (++,--)
+ 4 exponentiation ** or ^
+ 3 multiplication,division or modulus (*,/,%)
+ 2 Addition, subtraction (+,-)
+ 1 Postfix increment and/or decrement (++,--)
+
+ \param sOper - Operator.
+ \returns Operator weight
+
+*/
+
+xbInt16 xbExp::OperatorWeight( const xbString &sOper ){
+
+ if( sOper == "" || sOper.Len() > 5 )
+ return 0;
+
+ else if( sOper == "--0" || sOper == "++0" ) // 0 is prefix
+ return 9;
+ else if( sOper == "**" || sOper == "^" )
+ return 8;
+ else if( sOper == "*" || sOper == "/" || sOper == "%" || sOper == "*=" || sOper == "/=" )
+ return 7;
+ else if( sOper == "+" || sOper == "-" || sOper == "+=" || sOper == "-=" )
+ return 6;
+ else if( sOper == "--1" || sOper == "++1" ) // 1 is post fix
+ return 5;
+ else if( sOper == ">" || sOper == ">=" || sOper == "<" || sOper == "<=" ||
+ sOper == "<>" || sOper == "!=" || sOper == "#" || sOper == "$" || sOper == "=" )
+ return 4;
+ else if( sOper == ".NOT." || sOper == "NOT" )
+ return 3;
+ else if( sOper == ".AND." || sOper == "AND" )
+ return 2;
+ else if( sOper == ".OR." || sOper == "OR" )
+ return 1;
+
+ return 0;
+}
+
+
+/*************************************************************************/
+//! Parse expression.
+/*!
+ \param sExpression - Expression to parse.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbExp::ParseExpression( const xbString &sExpression ){
+ return ParseExpression( sExpression, (xbInt16) 0 );
+}
+
+/*************************************************************************/
+//! Parse expression.
+/*!
+ \param dbf - Pointer to xbDbf instance.
+ \param sExpression - Expression to parse.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbExp::ParseExpression( xbDbf *dbf, const xbString &sExpression ){
+ this->dbf = dbf;
+ return ParseExpression( sExpression, (xbInt16) 0 );
+}
+
+/*************************************************************************/
+//! Parse expression.
+/*!
+ \param sExpression - Expression to parse.
+ \param iWeight.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbExp::ParseExpression( const xbString &sExpression, xbInt16 iWeight ){
+
+ xbExpNode *n = NULL;
+ xbExpNode *nLastNode = NULL; // pointer to the last node processed
+ xbExpToken t;
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbString s;
+ xbBool bNewNode = xbFalse;
+
+ try {
+
+ if( nTree )
+ delete nTree;
+
+ if(( iRc = CheckParensAndQuotes( sExpression )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+
+ t.sExpression = sExpression;
+
+ xbString sOriginalExp;
+ while( t.iSts == XB_NO_ERROR && iRc == XB_NO_ERROR ){
+
+ sOriginalExp = t.sExpression; // test code
+ iRc = GetNextToken( t );
+ if( !iRc && !t.iSts ){
+
+ // comment / uncomment debug / live
+ // DumpToken( t, 0 );
+
+ if( t.cNodeType == XB_EXP_NOTROOT ){
+ xbExp enr( xbase, dbf );
+ if(( iRc = enr.ParseExpression( t.sToken, iWeight + 10 )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ n = enr.GetTreeHandle();
+ enr.ClearTreeHandle();
+
+ } else {
+
+ switch( t.cNodeType ) {
+
+ case XB_EXP_CONSTANT:
+ n = new xbExpNode( t.sToken, t.cNodeType );
+ bNewNode = xbTrue;
+ if(( iRc = ParseExpressionConstant( t, n )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ break;
+
+ case XB_EXP_FUNCTION:
+ n = new xbExpNode( t.cNodeType );
+ bNewNode = xbTrue;
+ if(( iRc = ParseExpressionFunction( t, n, iWeight )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ break;
+
+ case XB_EXP_FIELD:
+ n = new xbExpNode( t.cNodeType );
+ bNewNode = xbTrue;
+ if(( iRc = ParseExpressionField( t, n )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+ break;
+
+ case XB_EXP_OPERATOR:
+ case XB_EXP_PRE_OPERATOR:
+ case XB_EXP_POST_OPERATOR:
+ n = new xbExpNode( t.sToken, t.cNodeType );
+ bNewNode = xbTrue;
+ if(( iRc = ParseExpressionOperator( t, n, iWeight )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+ break;
+
+ default:
+ iErrorStop = 160;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ // break;
+ }
+ }
+ t.cPrevNodeType = t.cNodeType;
+ t.cPrevReturnType = t.cReturnType;
+
+ // determine where in the expression tree to insert the latest node "n"
+ // Is this the first node to be added to the tree?
+ if( !nTree ){
+ nTree = n;
+ }
+
+ // else if last node was XB_EXB_PRE_OPERATOR then append this as child to last node
+ else if( nLastNode && nLastNode->GetNodeType() == XB_EXP_PRE_OPERATOR ){
+ n->SetParent( nLastNode );
+ nLastNode->AddChild( n );
+ }
+
+ // else if last node was XB_EXB_POST_OPERATOR then append this as child to last node
+ else if( nLastNode && n->GetNodeType() == XB_EXP_POST_OPERATOR ){
+ n->AddChild( nLastNode );
+ nLastNode->SetParent( n );
+ if( nLastNode == nTree ){
+ nTree = n;
+ } else {
+ nLastNode->GetParent()->RemoveLastChild();
+ nLastNode->GetParent()->AddChild( n );
+ n->SetParent( nLastNode->GetParent() );
+ }
+ }
+
+ else if( n->GetNodeType() == XB_EXP_OPERATOR ){
+ xbExpNode * nWorkNode = nLastNode;
+ while( nWorkNode && ( nWorkNode->GetNodeType() != XB_EXP_OPERATOR || n->GetWeight() <= nWorkNode->GetWeight())){
+ nWorkNode = nWorkNode->GetParent();
+ }
+
+ if( !nWorkNode ){ // we are at the top
+ nTree->SetParent( n );
+ n->AddChild( nTree );
+ nTree = n;
+
+ } else if( nWorkNode->GetChildCnt() == 1 ){
+ nWorkNode->AddChild( n );
+ n->SetParent( nWorkNode );
+
+ } else if( nWorkNode->GetChildCnt() == 2 ){
+ xbExpNode * nChild2 = nWorkNode->GetChild(1);
+ n->AddChild( nChild2 );
+ nWorkNode->RemoveLastChild();
+ nWorkNode->AddChild( n );
+ n->SetParent( nWorkNode );
+
+ } else{
+ // should not be stopping on anything but an operator node with one or two children
+ iErrorStop = 170;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+ } else {
+ n->SetParent( nLastNode );
+ nLastNode->AddChild( n );
+ }
+ nLastNode = n;
+ n = NULL;
+ }
+ }
+
+ // for each node in the tree, calculate the length if it's not already set
+ xbExpNode * nWork = GetNextNode( NULL );
+ xbExpNode * nChild1;
+ xbExpNode * nChild2;
+
+ while( nWork ){
+ if( nWork->GetReturnType() == XB_EXP_UNKNOWN ){
+ nWork->GetNodeText( s );
+
+ // std::cout << "XB_EXP_UNKNOWN logic [" << s << "][" << nWork->GetChildCnt() << "]\n";
+ // if this is "-" and child 1 and child 2 are both dates, set this result type to numeric
+ if( s == "-" && nWork->GetChildCnt() == 2 &&
+ nWork->GetChild(0)->GetReturnType() == XB_EXP_DATE && nWork->GetChild(1)->GetReturnType() == XB_EXP_DATE )
+ nWork->SetReturnType( XB_EXP_NUMERIC );
+ else if( nWork->GetChildCnt() > 0 )
+ nWork->SetReturnType( nWork->GetChild(0)->GetReturnType());
+ else{
+ iErrorStop = 180;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+ }
+ if( nWork->GetResultLen() == 0 ){
+
+ switch( nWork->GetReturnType() ){
+
+ case XB_EXP_NUMERIC:
+ nWork->SetResultLen( 4 );
+ break;
+
+ case XB_EXP_CHAR:
+ if( nWork->GetNodeType() != XB_EXP_OPERATOR ){
+ iErrorStop = 190;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+ if( nWork->GetChildCnt() < 2 ){
+ iErrorStop = 200;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+ nChild1 = nWork->GetChild( 0 );
+ nChild2 = nWork->GetChild( 1 );
+ nWork->SetResultLen( nChild1->GetResultLen() + nChild2->GetResultLen());
+ break;
+
+ case XB_EXP_DATE:
+ nWork->SetResultLen( 8 );
+ break;
+
+ case XB_EXP_LOGICAL:
+ nWork->SetResultLen( 1 );
+ break;
+
+ default:
+ iErrorStop = 210;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ // break;
+ }
+ }
+ if( nWork->IsUnaryOperator() ){
+ if( nWork->GetChildCnt() != 1 ){
+ iErrorStop = 220;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+ } else if( nWork->IsOperator() && nWork->GetChildCnt() != 2 ){
+ iErrorStop = 230;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+ nWork = GetNextNode( nWork );
+ }
+ }
+ catch (xbInt16 iRc ){
+ if( bNewNode && n )
+ delete n;
+ xbString sMsg;
+ sMsg.Sprintf( "xbexp::ParseExpression() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ }
+ return iRc;
+}
+/*************************************************************************/
+//! Parse expression constant.
+/*!
+ \param t - Token.
+ \param n - Node.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbExp::ParseExpressionConstant( xbExpToken &t, xbExpNode *n ){
+
+ xbDate dtWork;
+ n->SetReturnType( t.cReturnType );
+
+ // std::cout << "parse expression constant[" << t.sToken << "]\n";
+
+ switch( t.cReturnType ){
+ case XB_EXP_CHAR:
+ n->SetResultLen( t.sToken.Len() );
+ n->SetResult( t.sToken );
+ break;
+
+ case XB_EXP_DATE:
+ n->SetResultLen( 8 );
+ dtWork.Set( t.sToken );
+ n->SetResult( dtWork );
+ break;
+
+ case XB_EXP_LOGICAL:
+ n->SetResultLen( 1 );
+ if( strncmp( t.sToken, "T", 1 ) == 0 )
+ n->SetResult( (xbBool) xbTrue );
+ else
+ n->SetResult( (xbBool) xbFalse );
+ break;
+
+ case XB_EXP_NUMERIC:
+ n->SetResultLen( 4 );
+ n->SetResult( strtod( t.sToken, 0 ));
+ n->SetResult( t.sToken );
+ break;
+
+ default:
+ return XB_PARSE_ERROR;
+ // break;
+ }
+ return XB_NO_ERROR;
+}
+
+/*************************************************************************/
+//! Parse expression field.
+/*!
+ \param t - Token.
+ \param n - Node.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbExp::ParseExpressionField( xbExpToken &t, xbExpNode *n ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbDbf * pDbf;
+ xbString sFieldName;
+
+ // do the db lookup and set the field number for the field
+
+ try{
+
+ xbUInt32 lPos;
+
+ if(( lPos = t.sToken.Pos( "->" )) > 0 ){
+ // table name is part of the token
+ xbString sTableName = t.sToken;
+ sTableName.Left( lPos-1 );
+ sFieldName = t.sToken;
+ sFieldName.Mid( lPos + 2, t.sToken.Len() - lPos - 1 );
+ pDbf = (xbDbf *) xbase->GetDbfPtr( sTableName );
+
+
+/*
+ // updated 1/2/23 to support either table.field or table->field
+ if((( lPos = t.sToken.Pos( "->" )) > 0) || (( lPos = t.sToken.Pos( "." )) > 0) ){
+ // table name is part of the token
+ xbString sTableName = t.sToken;
+ sTableName.Left( lPos-1 );
+ sFieldName = t.sToken;
+ if( t.sToken[lPos] == '.' )
+ sFieldName.Mid( lPos + 1, t.sToken.Len() - lPos );
+ else // ->
+ sFieldName.Mid( lPos + 2, t.sToken.Len() - lPos - 1 );
+ pDbf = (xbDbf *) xbase->GetDbfPtr( sTableName );
+*/
+
+ } else {
+ // table name is not part of the token
+ pDbf = dbf;
+ sFieldName = t.sToken;
+ }
+ if( !pDbf ){
+ iErrorStop = 100;
+ iRc = XB_INVALID_FIELD;
+ throw iRc;
+ }
+ xbInt16 iFieldNo = 0;
+
+ if(( iRc = pDbf->GetFieldNo( sFieldName, iFieldNo )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ char cFieldType;
+ if(( iRc = pDbf->GetFieldType( iFieldNo, cFieldType )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ n->SetDbfInfo( pDbf, iFieldNo );
+ switch( cFieldType ){
+ case XB_CHAR_FLD:
+ n->SetReturnType( XB_EXP_CHAR );
+ break;
+
+ case XB_LOGICAL_FLD:
+ n->SetReturnType( XB_EXP_LOGICAL );
+ break;
+
+ case XB_NUMERIC_FLD:
+ case XB_FLOAT_FLD:
+ n->SetReturnType( XB_EXP_NUMERIC );
+ break;
+
+ case XB_DATE_FLD:
+ n->SetReturnType( XB_EXP_DATE );
+ break;
+
+ case XB_MEMO_FLD:
+ default:
+ iErrorStop = 130;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ // break;
+ }
+ n->SetNodeText( sFieldName );
+ xbInt16 iResultLen = 0;
+ if(( iRc = pDbf->GetFieldLen( iFieldNo, iResultLen )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+ n->SetResultLen( (xbUInt32) iResultLen );
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbexp::ParseExpressionField() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ }
+ return iRc;
+}
+
+/*************************************************************************/
+//! Parse expression function.
+/*!
+ \param t - Token.
+ \param n - Node.
+ \param iWeight
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbExp::ParseExpressionFunction( xbExpToken &t, xbExpNode *n, xbInt16 iWeight ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+
+ try{
+ // find the first "("
+ xbUInt32 lPos = t.sToken.Pos( '(' );
+ if( lPos == 0 ){
+ iErrorStop = 100;
+ iRc = XB_INVALID_FUNCTION;
+ throw iRc;
+ }
+ // Get the function name and look it up in the table
+
+
+ xbString sFunc = t.sToken;
+ sFunc.Left( lPos - 1 ).Trim();
+ char cReturnType;
+ xbInt16 i = 0;
+ xbInt32 l = 0;
+ if(( iRc = xbase->GetFunctionInfo( sFunc, cReturnType, i, l )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ n->SetNodeText( sFunc );
+
+
+ // Get the function parms
+ xbString sParms = t.sToken;
+ sParms.Mid( lPos+1, t.sToken.Len() - lPos );
+ lPos = sParms.GetLastPos( ')' );
+ if( lPos == 0 ){
+ iErrorStop = 120;
+ iRc = XB_INVALID_FUNCTION;
+ throw iRc;
+ }
+
+ // remove the trailing ")" paren
+ sParms.Left( lPos - 1 ).Trim();
+
+ // if this function has parms, put them in the tree
+ if( sParms.Len() > 0 ){
+ xbExp enr( xbase, dbf );
+
+ // create a linked list of parms
+ xbLinkList<xbString> llParms;
+ if(( iRc = ParseExpressionFunctionParms( sParms, llParms )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+
+ // for each function parm, recursively process it
+ xbLinkListNode<xbString> * llN = llParms.GetHeadNode();
+ xbString sParm;
+ while( llN ){
+ sParm = llN->GetKey();
+ if(( iRc = enr.ParseExpression( sParm, iWeight + 10 )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+ n->AddChild( enr.GetTreeHandle());
+ enr.ClearTreeHandle();
+ llN = llN->GetNextNode();
+ }
+ llParms.Clear();
+ }
+
+ if( cReturnType == '1' ){
+ if( n->GetChildCnt() > 0 ){
+ xbExpNode *n1 = n->GetChild( 0 );
+ n->SetReturnType( n1->GetReturnType());
+ }
+
+ } else {
+ n->SetReturnType( cReturnType );
+ }
+
+ if(( iRc = CalcFunctionResultLen( n )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbexp::ParseExpressionFunction() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ }
+ return iRc;
+}
+
+/*************************************************************************/
+//! Parse expression function.
+/*!
+
+ Creates a linked list of function parms as xbStrings
+ This function pulls out the parms and addresses embedded parens and quotes within the parms
+
+ \param sParms
+ \param lParms
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbExp::ParseExpressionFunctionParms( const xbString &sParms, xbLinkList<xbString> & llParms ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbInt16 iParenCtr = 0;
+ xbInt16 iInQuotes = 0;
+ xbInt16 iDoubleQuotes = 0;
+ xbInt16 iSingleQuotes = 0;
+ xbInt32 lStartPos = 0;
+ xbInt32 lParmLen = 0;
+
+ xbString sParm;
+
+ try{
+ const char *sp = sParms;
+
+ while( *sp ){
+ if( *sp == '(')
+ iParenCtr++;
+ else if( *sp == ')' )
+ iParenCtr--;
+ else if( !iInQuotes && *sp == '"' ){
+ iInQuotes++;
+ iDoubleQuotes++;
+ } else if( iInQuotes && *sp == '"' ){
+ iInQuotes--;
+ iDoubleQuotes--;
+ }
+ else if( !iInQuotes && *sp == '\'' ){
+ iInQuotes++;
+ iSingleQuotes++;
+ } else if( iInQuotes && *sp == '\'' ){
+ iInQuotes--;
+ iSingleQuotes--;
+
+ } else if( !iInQuotes && !iParenCtr && *sp == ',' ){
+ // found a valid comma - at the end of a parm
+ // add it to the end of the linked list
+ sParm = sParms;
+ sParm.Mid( (xbUInt32) lStartPos + 1, (xbUInt32) lParmLen ).Trim(); // mid is one based
+ llParms.InsertAtEnd( sParm );
+
+ // set the start pos for the next one on the list
+ lStartPos += lParmLen + 1;
+ lParmLen = -1;
+ // lParmLen = 0;
+ }
+ lParmLen++;
+ sp++;
+ }
+ if( lParmLen > 0 ){
+ // get the last parm, it didn't end with a comma
+ sParm = sParms;
+ sParm.Mid( (xbUInt32) lStartPos + 1, (xbUInt32) lParmLen ).Trim();
+ llParms.InsertAtEnd( sParm );
+ }
+
+ }
+ // try / catch not used in this method, structure added for potential future use
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbexp::ParseExpressionFunctionParms() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ }
+ return iRc;
+}
+/*************************************************************************/
+//! Parse expression operator.
+/*!
+ \param t - Token.
+ \param n - Node.
+ \param iWeight
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbExp::ParseExpressionOperator( xbExpToken &t, xbExpNode *n, xbInt16 iWeight ){
+
+ n->SetResult( t.sToken );
+ n->SetWeight( iWeight + OperatorWeight( t.sToken) );
+
+// std::cout << "ParseExpressionOperator [" << t.cPrevNodeType << "][" << t.sToken << "] Weight = [" << iWeight;
+// std::cout << "] PrevReturnType [" << t.cPrevReturnType;
+// std::cout << "] Operator weight [" << OperatorWeight( t.sToken ) << "] getweight [" << n->GetWeight() << "]\n";
+
+ if( t.sToken == "**" || t.sToken == "^" ||
+ t.sToken == "*" || t.sToken == "/" || t.sToken == "%" || t.sToken == "*=" || t.sToken == "/=" )
+ n->SetReturnType( XB_EXP_NUMERIC );
+
+ else if( t.sToken == "--" || t.sToken == "++" || t.sToken == "+=" || t.sToken == "-=" ) // could be date or numeric
+ n->SetReturnType( XB_EXP_UNKNOWN );
+
+ else if( t.cPrevReturnType == XB_EXP_CHAR && ( t.sToken == "+" || t.sToken == "-" ))
+ n->SetReturnType( XB_EXP_CHAR );
+
+ else if( t.sToken == ".AND." || t.sToken == ".OR." || t.sToken == ".NOT." ||
+ t.sToken == "AND" || t.sToken == "OR" || t.sToken == "NOT" ||
+ t.sToken == ">" || t.sToken == ">=" || t.sToken == "<" ||
+ t.sToken == "<=" || t.sToken == "<>" || t.sToken == "!=" ||
+ t.sToken == "$" || t.sToken == "#" || t.sToken == "=" )
+ n->SetReturnType( XB_EXP_LOGICAL );
+
+
+ else if( t.cPrevReturnType == XB_EXP_UNKNOWN )
+ n->SetReturnType( XB_EXP_UNKNOWN );
+
+ // added for date constant logic 10/28/17
+ else if(( t.sToken == "+" || t.sToken == "-" ) && t.cPrevReturnType == XB_EXP_DATE )
+ n->SetReturnType( XB_EXP_DATE );
+
+ else if( t.sToken == "+" || t.sToken == "-" )
+ n->SetReturnType( XB_EXP_NUMERIC );
+
+ return XB_NO_ERROR;
+}
+
+
+/************************************************************************/
+//! ProcessExpression
+/*! This method processes an expression tree leaving the result in the
+ root node of the tree
+*/
+xbInt16 xbExp::ProcessExpression(){
+ return ProcessExpression( 0 );
+}
+/************************************************************************/
+//! ProcessExpression
+/*! This method processes a parsed expression tree leaving the result in the
+ root node of the tree
+ \param iRecBufSw Record buffer to use when evaluating expression.<br>
+ 0 - Current record buffer.<br>
+ 1 - Original record buffer.
+*/
+
+xbInt16 xbExp::ProcessExpression( xbInt16 iRecBufSw ){
+
+// iRecBufSw 0 - Record Buffer
+// 1 - Original Record Buffer
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+
+ try{
+
+ xbExpNode * nWork = GetNextNode( NULL );
+ xbExpNode * nChild1;
+ xbDbf * dbf;
+ xbString sWork1;
+ xbString sWork2;
+ xbString sOperator;
+ xbDate dtWork1;
+
+ xbBool bWork;
+ xbDouble dWork;
+
+ while( nWork ){
+ switch( nWork->GetNodeType() ){
+
+ case XB_EXP_CONSTANT:
+ break;
+
+ case XB_EXP_PRE_OPERATOR: // increment value before setting in head node
+ if( nWork->GetChildCnt() != 1 ){
+ iErrorStop = 100;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+ nChild1 = nWork->GetChild( 0 );
+ //if( nChild1->GetReturnType() == XB_EXP_DATE )
+ // nChild1->SetResult( (xbDouble) nChild1->GetDateResult().JulianDays());
+
+ nWork->GetNodeText( sWork1 );
+ if( sWork1 == "++" )
+ nChild1->SetResult( nChild1->GetNumericResult() + 1 );
+ else
+ nChild1->SetResult( nChild1->GetNumericResult() - 1 );
+
+ nWork->SetResult( nChild1->GetNumericResult());
+
+ //if( nChild1->GetReturnType() == XB_EXP_DATE ){
+ // dtWork1.JulToDate8( (xbInt32) nChild1->GetNumericResult());
+ // nChild1->SetResult( dtWork1 );
+ // nWork->SetResult( dtWork1 );
+ // }
+ break;
+
+ case XB_EXP_POST_OPERATOR: // increment value after setting in head node
+ if( nWork->GetChildCnt() != 1 ){
+ iErrorStop = 110;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+ nChild1 = nWork->GetChild( 0 );
+ //if( nChild1->GetReturnType() == XB_EXP_DATE ){
+ // nWork->SetResult( nChild1->GetDateResult());
+ // nChild1->SetResult( (xbDouble) nChild1->GetDateResult().JulianDays());
+ //}
+ //else
+ nWork->SetResult( nChild1->GetNumericResult());
+
+ nWork->GetNodeText( sWork1 );
+ if( sWork1 == "++" )
+ nChild1->SetResult( nChild1->GetNumericResult() + 1 );
+ else
+ nChild1->SetResult( nChild1->GetNumericResult() - 1 );
+
+ //if( nChild1->GetReturnType() == XB_EXP_DATE ){
+ // dtWork1.JulToDate8( (xbInt32) nChild1->GetNumericResult());
+ // nChild1->SetResult( dtWork1 );
+ // }
+ break;
+
+ case XB_EXP_FIELD:
+
+ if(( dbf = nWork->GetDbf()) == NULL ){
+ iErrorStop = 120;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+ switch( nWork->GetReturnType()){
+ case XB_EXP_CHAR:
+ if(( iRc = dbf->GetField( nWork->GetFieldNo(), sWork1, iRecBufSw )) < XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ nWork->SetResult( sWork1 );
+ break;
+
+ case XB_EXP_DATE:
+
+ if(( iRc = dbf->GetField( nWork->GetFieldNo(), sWork1, iRecBufSw )) < XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+ if( sWork1 == " " ){
+ // std::cout << "xbExp::ProcessExpression() line 1938 sWork is spaces\n";
+ //nWork->SetResult( (xbDouble) 21474835648 ); // dbase sets a date value in both ndx and mdx index files to this if spaces on dbf record
+ nWork->SetResult( (xbDouble) XB_NULL_DATE );
+ } else {
+ dtWork1.Set( sWork1 );
+ nWork->SetResult( (xbDouble) dtWork1.JulianDays() );
+ }
+ break;
+
+ case XB_EXP_LOGICAL:
+ if(( iRc = dbf->GetLogicalField( nWork->GetFieldNo(), bWork, iRecBufSw )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+ nWork->SetResult( bWork );
+ break;
+
+ case XB_EXP_NUMERIC:
+ if(( iRc = dbf->GetDoubleField( nWork->GetFieldNo(), dWork, iRecBufSw )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+ nWork->SetResult( dWork );
+ break;
+
+ default:
+ iErrorStop = 170;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ // break;
+ }
+ break;
+
+
+ case XB_EXP_OPERATOR:
+ if(( iRc = ProcessExpressionOperator( nWork )) != XB_NO_ERROR ){
+ iErrorStop = 180;
+ throw iRc;
+ }
+
+ break;
+
+ case XB_EXP_FUNCTION:
+ if(( iRc = ProcessExpressionFunction( nWork, iRecBufSw )) != XB_NO_ERROR ){
+ iErrorStop = 190;
+ throw iRc;
+ }
+ break;
+
+ default:
+ iErrorStop = 200;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ // break;
+ }
+ nWork = GetNextNode( nWork );
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbexp::ProcessExpression() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ }
+ return iRc;
+}
+/*************************************************************************/
+//! ProcessExpression
+/*! This method processes an expression tree for a given node.
+*/
+
+xbInt16 xbExp::ProcessExpressionFunction( xbExpNode * n, xbInt16 iRecBufSw ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+
+ try{
+
+ xbString sFunction;
+ xbString sResult;
+ xbDouble dResult;
+ xbDate dtResult;
+ xbBool bResult;
+
+ n->GetNodeText( sFunction );
+
+ // process functions with no children first
+ xbExpNode * nChild1;
+ if( n->GetChildCnt() == 0 ){
+ if( sFunction == "DATE" ){
+ if(( iRc = xbase->DATE( dtResult )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ n->SetResult( dtResult );
+ } else if( sFunction == "DEL" ){
+ if(( iRc = xbase->DEL( dbf, sResult, iRecBufSw )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ n->SetResult( sResult );
+ } else if( sFunction == "DELETED" ){
+ if(( iRc = xbase->DELETED( dbf, bResult, iRecBufSw )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ n->SetResult( bResult );
+ } else if( sFunction == "RECCOUNT" ){
+ if(( iRc = xbase->RECCOUNT( dbf, dResult )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ n->SetResult( dResult );
+ } else if( sFunction == "RECNO" ){
+ if(( iRc = xbase->RECNO( dbf, dResult )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+ n->SetResult( dResult );
+ }
+ // process functions with one child
+ } else if( n->GetChildCnt() == 1 ){
+
+ nChild1 = n->GetChild( 0 );
+
+ if( sFunction == "ABS" ){
+ if(( iRc = xbase->ABS( nChild1->GetNumericResult(), dResult )) != XB_NO_ERROR ){
+ iErrorStop = 200;
+ throw iRc;
+ }
+ n->SetResult( dResult );
+ } else if( sFunction == "ALLTRIM" ){
+ if(( iRc = xbase->ALLTRIM( nChild1->GetStringResult(), sResult )) != XB_NO_ERROR ){
+ iErrorStop = 210;
+ throw iRc;
+ }
+ n->SetResult( sResult );
+ } else if( sFunction == "ASC" ){
+ if(( iRc = xbase->ASC( nChild1->GetStringResult(), dResult )) != XB_NO_ERROR ){
+ iErrorStop = 220;
+ throw iRc;
+ }
+ n->SetResult( dResult );
+ } else if( sFunction == "CDOW" ){
+ xbDate d( (xbInt32) nChild1->GetNumericResult());
+ if(( iRc = xbase->CDOW( d, sResult )) != XB_NO_ERROR ){
+ iErrorStop = 230;
+ throw iRc;
+ }
+ n->SetResult( sResult );
+ } else if( sFunction == "CHR" ){
+ if(( iRc = xbase->CHR( nChild1->GetNumericResult(), sResult )) != XB_NO_ERROR ){
+ iErrorStop = 240;
+ throw iRc;
+ }
+ n->SetResult( sResult );
+ } else if( sFunction == "CMONTH" ){
+ xbDate d( (xbInt32) nChild1->GetNumericResult());
+ if(( iRc = xbase->CMONTH( d, sResult )) != XB_NO_ERROR ){
+ iErrorStop = 250;
+ throw iRc;
+ }
+ n->SetResult( sResult );
+ } else if( sFunction == "CTOD" ){
+ if(( iRc = xbase->CTOD( nChild1->GetStringResult(), dtResult )) != XB_NO_ERROR ){
+ iErrorStop = 260;
+ throw iRc;
+ }
+ n->SetResult( dtResult );
+ } else if( sFunction == "DAY" ){
+ xbDate d( (xbInt32) nChild1->GetNumericResult());
+ if(( iRc = xbase->DAY( d, dResult )) != XB_NO_ERROR ){
+ iErrorStop = 270;
+ throw iRc;
+ }
+ n->SetResult( dResult );
+ } else if( sFunction == "DESCEND" ){
+
+ if( n->GetReturnType() == XB_EXP_CHAR ){
+ if(( iRc = xbase->DESCEND( nChild1->GetStringResult(), sResult )) != XB_NO_ERROR ){
+ iErrorStop = 280;
+ throw iRc;
+ }
+ n->SetResult( sResult );
+
+ } else if( n->GetReturnType() == XB_EXP_DATE ){
+ xbDate d( (xbInt32) nChild1->GetNumericResult());
+ if(( iRc = xbase->DESCEND( d, dtResult )) != XB_NO_ERROR ){
+ iErrorStop = 290;
+ throw iRc;
+ }
+ n->SetResult( dtResult );
+
+ } else if( n->GetReturnType() == XB_EXP_NUMERIC ){
+ if(( iRc = xbase->DESCEND( nChild1->GetNumericResult(), dResult )) != XB_NO_ERROR ){
+ iErrorStop = 300;
+ throw iRc;
+ }
+ n->SetResult( dResult );
+
+ } else {
+ iErrorStop = 310;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+
+ } else if( sFunction == "DOW" ){
+ xbDate d( (xbInt32) nChild1->GetNumericResult());
+ if(( iRc = xbase->DOW( d, dResult )) != XB_NO_ERROR ){
+ iErrorStop = 320;
+ throw iRc;
+ }
+ n->SetResult( dResult );
+ } else if( sFunction == "DTOC" ){
+ xbDate d( (xbInt32) nChild1->GetNumericResult());
+ if(( iRc = xbase->DTOC( d, sResult )) != XB_NO_ERROR ){
+ iErrorStop = 330;
+ throw iRc;
+ }
+ n->SetResult( sResult );
+ } else if( sFunction == "DTOS" ){
+ xbDate d( (xbInt32) nChild1->GetNumericResult());
+ if(( iRc = xbase->DTOS( d, sResult )) != XB_NO_ERROR ){
+ iErrorStop = 340;
+ throw iRc;
+ }
+ n->SetResult( sResult );
+ } else if( sFunction == "EXP" ){
+ if(( iRc = xbase->EXP( nChild1->GetNumericResult(), dResult )) != XB_NO_ERROR ){
+ iErrorStop = 350;
+ throw iRc;
+ }
+ n->SetResult( dResult );
+ } else if( sFunction == "INT" ){
+ if(( iRc = xbase->INT( nChild1->GetNumericResult(), dResult )) != XB_NO_ERROR ){
+ iErrorStop = 360;
+ throw iRc;
+ }
+ n->SetResult( dResult );
+ } else if( sFunction == "ISALPHA" ){
+ if(( iRc = xbase->ISALPHA( nChild1->GetStringResult(), bResult )) != XB_NO_ERROR ){
+ iErrorStop = 370;
+ throw iRc;
+ }
+ n->SetResult( bResult );
+ } else if( sFunction == "ISLOWER" ){
+ if(( iRc = xbase->ISLOWER( nChild1->GetStringResult(), bResult )) != XB_NO_ERROR ){
+ iErrorStop = 380;
+ throw iRc;
+ }
+ n->SetResult( bResult );
+ } else if( sFunction == "ISUPPER" ){
+ if(( iRc = xbase->ISUPPER( nChild1->GetStringResult(), bResult )) != XB_NO_ERROR ){
+ iErrorStop = 390;
+ throw iRc;
+ }
+ n->SetResult( bResult );
+ } else if( sFunction == "LEN" ){
+ if(( iRc = xbase->LEN( nChild1->GetStringResult(), dResult )) != XB_NO_ERROR ){
+ iErrorStop = 400;
+ throw iRc;
+ }
+ n->SetResult( dResult );
+ } else if( sFunction == "LOG" ){
+ if(( iRc = xbase->LOG( nChild1->GetNumericResult(), dResult )) != XB_NO_ERROR ){
+ iErrorStop = 410;
+ throw iRc;
+ }
+ n->SetResult( dResult );
+ } else if( sFunction == "LTRIM" ){
+ if(( iRc = xbase->LTRIM( nChild1->GetStringResult(), sResult )) != XB_NO_ERROR ){
+ iErrorStop = 420;
+ throw iRc;
+ }
+ n->SetResult( sResult );
+ } else if( sFunction == "LOWER" ){
+ if(( iRc = xbase->LOWER( nChild1->GetStringResult(), sResult )) != XB_NO_ERROR ){
+ iErrorStop = 430;
+ throw iRc;
+ }
+ n->SetResult( sResult );
+ } else if( sFunction == "MONTH" ){
+ xbDate d( (xbInt32) nChild1->GetNumericResult());
+ if(( iRc = xbase->MONTH( d, dResult )) != XB_NO_ERROR ){
+ iErrorStop = 440;
+ throw iRc;
+ }
+ n->SetResult( dResult );
+ } else if( sFunction == "RTRIM" ){
+ if(( iRc = xbase->RTRIM( nChild1->GetStringResult(), sResult )) != XB_NO_ERROR ){
+ iErrorStop = 450;
+ throw iRc;
+ }
+ n->SetResult( sResult );
+ } else if( sFunction == "STOD" ){
+ if(( iRc = xbase->STOD( nChild1->GetStringResult(), dtResult )) != XB_NO_ERROR ){
+ iErrorStop = 460;
+ throw iRc;
+ }
+ n->SetResult( dtResult );
+ } else if( sFunction == "SPACE" ){
+ if(( iRc = xbase->SPACE( (xbInt32) nChild1->GetNumericResult(), sResult )) != XB_NO_ERROR ){
+ iErrorStop = 470;
+ throw iRc;
+ }
+ n->SetResult( sResult );
+ } else if( sFunction == "SQRT" ){
+ if(( iRc = xbase->SQRT( nChild1->GetNumericResult(), dResult )) != XB_NO_ERROR ){
+ iErrorStop = 480;
+ throw iRc;
+ }
+ n->SetResult( dResult );
+ } else if( sFunction == "STR" ){
+ if(( iRc = xbase->STR( nChild1->GetNumericResult(), sResult )) != XB_NO_ERROR ){
+ iErrorStop = 490;
+ throw iRc;
+ }
+ n->SetResult( sResult );
+ } else if( sFunction == "TRIM" ){
+ if(( iRc = xbase->TRIM( nChild1->GetStringResult(), sResult )) != XB_NO_ERROR ){
+ iErrorStop = 500;
+ throw iRc;
+ }
+ n->SetResult( sResult );
+ } else if( sFunction == "UPPER" ){
+ if(( iRc = xbase->UPPER( nChild1->GetStringResult(), sResult )) != XB_NO_ERROR ){
+ iErrorStop = 510;
+ throw iRc;
+ }
+ n->SetResult( sResult );
+ } else if( sFunction == "VAL" ){
+ if(( iRc = xbase->VAL( nChild1->GetStringResult(), dResult )) != XB_NO_ERROR ){
+ iErrorStop = 520;
+ throw iRc;
+ }
+ n->SetResult( dResult );
+ } else if( sFunction == "YEAR" ){
+ xbDate d( (xbInt32) nChild1->GetNumericResult());
+ if(( iRc = xbase->YEAR( d, dResult )) != XB_NO_ERROR ){
+ iErrorStop = 530;
+ throw iRc;
+ }
+ n->SetResult( dResult );
+ } else {
+ iErrorStop = 540;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+ } else if( n->GetChildCnt() == 2 ){
+ xbExpNode * nChild2;
+ nChild1 = n->GetChild( 0 );
+ nChild2 = n->GetChild( 1 );
+
+ if( sFunction == "AT" ){
+ if(( iRc = xbase->AT( nChild1->GetStringResult(), nChild2->GetStringResult(), dResult )) != XB_NO_ERROR ){
+ iErrorStop = 700;
+ throw iRc;
+ }
+ n->SetResult( dResult );
+ } else if( sFunction == "LEFT" ){
+ if(( iRc = xbase->LEFT( nChild1->GetStringResult(), (xbUInt32) nChild2->GetNumericResult(), sResult )) != XB_NO_ERROR ){
+ iErrorStop = 710;
+ throw iRc;
+ }
+ n->SetResult( sResult );
+ } else if( sFunction == "MAX" ){
+ if(( iRc = xbase->MAX( nChild1->GetNumericResult(), nChild2->GetNumericResult(), dResult )) != XB_NO_ERROR ){
+ iErrorStop = 720;
+ throw iRc;
+ }
+ n->SetResult( dResult );
+ } else if( sFunction == "MIN" ){
+ if(( iRc = xbase->MIN( nChild1->GetNumericResult(), nChild2->GetNumericResult(), dResult )) != XB_NO_ERROR ){
+ iErrorStop = 730;
+ throw iRc;
+ }
+ n->SetResult( dResult );
+ }
+ else if( sFunction == "REPLICATE" ){
+ if(( iRc = xbase->REPLICATE( nChild1->GetStringResult(), (xbUInt32) nChild2->GetNumericResult(), sResult )) != XB_NO_ERROR ){
+ iErrorStop = 800;
+ throw iRc;
+ }
+ n->SetResult( sResult );
+ } else if( sFunction == "RIGHT" ){
+ if(( iRc = xbase->RIGHT( nChild1->GetStringResult(), (xbUInt32) nChild2->GetNumericResult(), sResult )) != XB_NO_ERROR ){
+ iErrorStop = 810;
+ throw iRc;
+ }
+ n->SetResult( sResult );
+ } else if( sFunction == "STR" ){
+ if(( iRc = xbase->STR( nChild1->GetNumericResult(), (xbUInt32) nChild2->GetNumericResult(), sResult )) != XB_NO_ERROR ){
+ iErrorStop = 820;
+ throw iRc;
+ }
+ n->SetResult( sResult );
+ } else {
+ iErrorStop = 830;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+ } else if( n->GetChildCnt() == 3 ){
+ xbExpNode * nChild2;
+ xbExpNode * nChild3;
+ nChild1 = n->GetChild( 0 );
+ nChild2 = n->GetChild( 1 );
+ nChild3 = n->GetChild( 2 );
+
+ if( sFunction == "IIF" ){
+ if(( iRc = xbase->IIF( nChild1->GetBoolResult(), nChild2->GetStringResult(), nChild3->GetStringResult(), sResult )) != XB_NO_ERROR ){
+ iErrorStop = 900;
+ throw iRc;
+ }
+ n->SetResult( sResult );
+ } else if( sFunction == "STR" ){
+ if(( iRc = xbase->STR( nChild1->GetNumericResult(), (xbUInt32) nChild2->GetNumericResult(), (xbUInt32) nChild3->GetNumericResult(), sResult )) != XB_NO_ERROR ){
+ iErrorStop = 910;
+ throw iRc;
+ }
+ n->SetResult( sResult );
+ } else if( sFunction == "STRZERO" ){
+ if(( iRc = xbase->STRZERO( nChild1->GetNumericResult(), (xbUInt32) nChild2->GetNumericResult(), (xbUInt32) nChild3->GetNumericResult(), sResult )) != XB_NO_ERROR ){
+ iErrorStop = 920;
+ throw iRc;
+ }
+ n->SetResult( sResult );
+ } else if( sFunction == "SUBSTR" ){
+ if(( iRc = xbase->SUBSTR( nChild1->GetStringResult(), (xbUInt32) nChild2->GetNumericResult(), (xbUInt32) nChild3->GetNumericResult(), sResult )) != XB_NO_ERROR ){
+ iErrorStop = 930;
+ throw iRc;
+ }
+ n->SetResult( sResult );
+ } else {
+ iErrorStop = 950;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+ } else if( n->GetChildCnt() == 4 ){
+ xbExpNode * nChild2;
+ xbExpNode * nChild3;
+ xbExpNode * nChild4;
+ nChild1 = n->GetChild( 0 );
+ nChild2 = n->GetChild( 1 );
+ nChild3 = n->GetChild( 2 );
+ nChild4 = n->GetChild( 3 );
+
+ if( sFunction == "STR" ){
+ if(( iRc = xbase->STR( nChild1->GetNumericResult(), (xbUInt32) nChild2->GetNumericResult(),
+ (xbUInt32) nChild3->GetNumericResult(), nChild4->GetStringResult(), sResult )) != XB_NO_ERROR ){
+ iErrorStop = 1000;
+ throw iRc;
+ }
+ n->SetResult( sResult );
+ } else {
+ iErrorStop = 1010;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+
+ } else {
+ iErrorStop = 2000;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbexp::ProcessExpressionFunction() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ }
+ return iRc;
+}
+/*************************************************************************/
+//! Process Expression Operator
+/*! This method processes an expression operator for a given node.
+*/
+
+xbInt16 xbExp::ProcessExpressionOperator( xbExpNode * n ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+
+ xbExpNode * nChild1 = NULL;
+ xbExpNode * nChild2 = NULL;
+ xbString sOperator;
+ xbString sWork1;
+ xbString sWork2;
+ xbDate dtWork1;
+
+ xbString sMsg;
+
+ try{
+ n->GetNodeText( sOperator );
+ nChild1 = n->GetChild( 0 );
+ if( !n->IsUnaryOperator())
+ nChild2 = n->GetChild( 1 );
+
+ switch( n->GetReturnType()){
+ case XB_EXP_CHAR:
+ if( sOperator == "+" ){
+ sWork1 = nChild1->GetStringResult();
+ sWork1 += nChild2->GetStringResult();
+ n->SetResult( sWork1 );
+ } else if( sOperator == "-" ){
+ sWork1 = nChild1->GetStringResult();
+ sWork1.Rtrim();
+ sWork1 += nChild2->GetStringResult();
+ sWork1.PadRight( ' ', n->GetResultLen());
+ n->SetResult( sWork1 );
+ } else {
+ iErrorStop = 100;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+ break;
+
+ case XB_EXP_NUMERIC:
+ if( sOperator == "+" )
+ n->SetResult( nChild1->GetNumericResult() + nChild2->GetNumericResult());
+ else if( sOperator == "-" ){
+ n->SetResult( nChild1->GetNumericResult() - nChild2->GetNumericResult());
+
+ }
+ else if( sOperator == "*" )
+ n->SetResult( nChild1->GetNumericResult() * nChild2->GetNumericResult());
+ else if( sOperator == "/" )
+ n->SetResult( nChild1->GetNumericResult() / nChild2->GetNumericResult());
+ else if( sOperator == "^" || sOperator == "**" )
+ n->SetResult( pow( nChild1->GetNumericResult(), nChild2->GetNumericResult()));
+ else if( sOperator == "+=" ){
+ n->SetResult( nChild1->GetNumericResult() + nChild2->GetNumericResult());
+ nChild1->SetResult( n->GetNumericResult() );
+ }
+ else if( sOperator == "-=" ){
+ n->SetResult( nChild1->GetNumericResult() - nChild2->GetNumericResult());
+ nChild1->SetResult( n->GetNumericResult() );
+ }
+ else if( sOperator == "*=" ){
+ n->SetResult( nChild1->GetNumericResult() * nChild2->GetNumericResult());
+ nChild1->SetResult( n->GetNumericResult() );
+ }
+ else if( sOperator == "/=" ){
+ n->SetResult( nChild1->GetNumericResult() / nChild2->GetNumericResult());
+ nChild1->SetResult( n->GetNumericResult() );
+ } else {
+ iErrorStop = 200;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+ break;
+
+
+ case XB_EXP_DATE:
+ // if date values in the leaf nodes, convert to numeric for operator logic
+
+ if( sOperator == "+" )
+ n->SetResult( nChild1->GetNumericResult() + nChild2->GetNumericResult());
+ else if( sOperator == "-" ){
+ n->SetResult( nChild1->GetNumericResult() - nChild2->GetNumericResult());
+ xbDate d( (xbInt32) n->GetNumericResult());
+ }
+ else if( sOperator == "+=" ){
+ n->SetResult( nChild1->GetNumericResult() + nChild2->GetNumericResult());
+ nChild1->SetResult( n->GetNumericResult() );
+ }
+ else if( sOperator == "-=" ){
+ n->SetResult( nChild1->GetNumericResult() - nChild2->GetNumericResult());
+ nChild1->SetResult( n->GetNumericResult() );
+ } else {
+ iErrorStop = 300;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+ break;
+
+ case XB_EXP_LOGICAL:
+
+ if( !n->IsUnaryOperator() && (nChild1->GetReturnType() != nChild2->GetReturnType())){
+ iErrorStop = 400;
+ iRc = XB_INCOMPATIBLE_OPERANDS;
+ throw iRc;
+ }
+
+ if( sOperator == ".AND." || sOperator == "AND" )
+ n->SetResult((xbBool) (nChild1->GetBoolResult() && nChild2->GetBoolResult()) );
+
+ else if( sOperator == ".OR." || sOperator == "OR" )
+ n->SetResult((xbBool) (nChild1->GetBoolResult() || nChild2->GetBoolResult()) );
+
+ else if( sOperator == ".NOT." || sOperator == "NOT" ){
+ if( nChild1->GetBoolResult())
+ n->SetResult((xbBool) xbFalse );
+ else
+ n->SetResult((xbBool) xbTrue );
+ }
+
+ else if( sOperator == ">" ){
+
+ if( nChild1->GetReturnType() == XB_EXP_CHAR )
+ n->SetResult((xbBool)(nChild1->GetStringResult() > nChild2->GetStringResult()));
+
+ else if( nChild1->GetReturnType() == XB_EXP_NUMERIC )
+ n->SetResult((xbBool)(nChild1->GetNumericResult() > nChild2->GetNumericResult()));
+
+ else if( nChild1->GetReturnType() == XB_EXP_DATE ){
+ xbDouble d1 = nChild1->GetNumericResult();
+ xbDouble d2 = nChild2->GetNumericResult();
+ if( d1 == XB_NULL_DATE ) d1 = 0;
+ if( d2 == XB_NULL_DATE ) d2 = 0;
+ n->SetResult((xbBool)( d1 > d2));
+ // n->SetResult((xbBool)(nChild1->GetNumericResult() > nChild2->GetNumericResult()));
+
+ } else {
+ iErrorStop = 410;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+ }
+
+ else if( sOperator == ">=" ){
+ if( nChild1->GetReturnType() == XB_EXP_CHAR )
+ n->SetResult((xbBool)(nChild1->GetStringResult() >= nChild2->GetStringResult()));
+
+ else if( nChild1->GetReturnType() == XB_EXP_NUMERIC )
+ n->SetResult((xbBool)(nChild1->GetNumericResult() >= nChild2->GetNumericResult()));
+
+ else if( nChild1->GetReturnType() == XB_EXP_DATE ){
+ xbDouble d1 = nChild1->GetNumericResult();
+ xbDouble d2 = nChild2->GetNumericResult();
+ if( d1 == XB_NULL_DATE ) d1 = 0;
+ if( d2 == XB_NULL_DATE ) d2 = 0;
+ n->SetResult((xbBool)( d1 >= d2));
+ //n->SetResult((xbBool)(nChild1->GetNumericResult() >= nChild2->GetNumericResult()));
+
+ } else {
+ iErrorStop = 420;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+ }
+
+ else if( sOperator == "<" ){
+
+ if( nChild1->GetReturnType() == XB_EXP_CHAR ){
+ n->SetResult((xbBool)( nChild1->GetStringResult() < nChild2->GetStringResult()));
+
+ } else if( nChild1->GetReturnType() == XB_EXP_NUMERIC ){
+ n->SetResult((xbBool)( nChild1->GetNumericResult() < nChild2->GetNumericResult()));
+
+ } else if( nChild1->GetReturnType() == XB_EXP_DATE ){
+ xbDouble d1 = nChild1->GetNumericResult();
+ xbDouble d2 = nChild2->GetNumericResult();
+ if( d1 == XB_NULL_DATE ) d1 = 0;
+ if( d2 == XB_NULL_DATE ) d2 = 0;
+
+ n->SetResult((xbBool)( d1 < d2));
+
+ // std::cout << "xbexp() line 2567 [" << nChild1->GetNumericResult() << "][" << nChild2->GetNumericResult() << "]\n";
+
+ } else {
+ iErrorStop = 430;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+ }
+
+ else if( sOperator == "<=" ){
+
+ if( nChild1->GetReturnType() == XB_EXP_CHAR )
+ n->SetResult((xbBool)( nChild1->GetStringResult() <= nChild2->GetStringResult()));
+
+ else if( nChild1->GetReturnType() == XB_EXP_NUMERIC )
+ n->SetResult((xbBool)( nChild1->GetNumericResult() <= nChild2->GetNumericResult()));
+
+ else if( nChild1->GetReturnType() == XB_EXP_DATE ){
+ xbDouble d1 = nChild1->GetNumericResult();
+ xbDouble d2 = nChild2->GetNumericResult();
+ if( d1 == XB_NULL_DATE ) d1 = 0;
+ if( d2 == XB_NULL_DATE ) d2 = 0;
+ n->SetResult((xbBool)( d1 <= d2));
+ // n->SetResult((xbBool)( nChild1->GetNumericResult() <= nChild2->GetNumericResult()));
+
+ } else {
+ iErrorStop = 440;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+ }
+
+ else if( sOperator == "<>" || sOperator == "#" || sOperator == "!=" ){
+
+ if( nChild1->GetReturnType() == XB_EXP_CHAR )
+ n->SetResult((xbBool)( nChild1->GetStringResult() != nChild2->GetStringResult()));
+
+ else if( nChild1->GetReturnType() == XB_EXP_NUMERIC )
+ n->SetResult((xbBool)( nChild1->GetNumericResult() != nChild2->GetNumericResult()));
+
+ else if( nChild1->GetReturnType() == XB_EXP_DATE ){
+ xbDouble d1 = nChild1->GetNumericResult();
+ xbDouble d2 = nChild2->GetNumericResult();
+ if( d1 == XB_NULL_DATE ) d1 = 0;
+ if( d2 == XB_NULL_DATE ) d2 = 0;
+ n->SetResult((xbBool)( d1 != d2));
+ // n->SetResult((xbBool)( nChild1->GetNumericResult() != nChild2->GetNumericResult()));
+
+ } else {
+ iErrorStop = 450;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+ }
+
+ else if( sOperator == "$" ){
+ if( nChild1->GetReturnType() == XB_EXP_CHAR )
+ if( nChild2->GetStringResult().Pos( nChild1->GetStringResult()) > 0 )
+ n->SetResult((xbBool) xbTrue );
+ else
+ n->SetResult((xbBool) xbFalse );
+ else {
+ iErrorStop = 460;
+ iRc = XB_INCOMPATIBLE_OPERANDS;
+ throw iRc;
+ }
+ }
+
+ else if( sOperator == "=" ){
+
+ if( nChild1->GetReturnType() == XB_EXP_CHAR ){
+ xbString sChld1 = nChild1->GetStringResult();
+ xbString sChld2 = nChild2->GetStringResult();
+ sChld1.Rtrim();
+ sChld2.Rtrim();
+ n->SetResult((xbBool)( sChld1 == sChld2 ));
+
+ } else if( nChild1->GetReturnType() == XB_EXP_NUMERIC ){
+ n->SetResult((xbBool)( nChild1->GetNumericResult() == nChild2->GetNumericResult()));
+
+ } else if( nChild1->GetReturnType() == XB_EXP_DATE ){
+ xbDouble d1 = nChild1->GetNumericResult();
+ xbDouble d2 = nChild2->GetNumericResult();
+ if( d1 == XB_NULL_DATE ) d1 = 0;
+ if( d2 == XB_NULL_DATE ) d2 = 0;
+ n->SetResult((xbBool)( d1 == d2));
+ // n->SetResult((xbBool)( nChild1->GetNumericResult() == nChild2->GetNumericResult()));
+
+ } else {
+ iErrorStop = 470;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+
+
+ } else {
+ iErrorStop = 500;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+
+ break;
+
+ default:
+ iErrorStop = 600;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ // break;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbexp::ProcessExpressionOperator() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ }
+ return iRc;
+}
+
+/*************************************************************************/
+}; // namespace
+#endif // XB_EXPRESSION_SUPPORT
+/*************************************************************************/
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/core/xbexpnode.cpp b/1Tdata/xbase/xbase64-4.1.4/src/core/xbexpnode.cpp
new file mode 100755
index 0000000..d11e8cc
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/core/xbexpnode.cpp
@@ -0,0 +1,562 @@
+/* xbexpnode.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2017,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under
+the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+#include "xbase.h"
+
+#ifdef XB_EXPRESSION_SUPPORT
+
+namespace xb{
+/************************************************************************/
+//! @brief Constructor
+xbExpNode::xbExpNode(){
+ sNodeText = "";
+ cReturnType = 0;
+ cNodeType = 0;
+ dResult = 0;
+ iFieldNo = 0;
+ ulResultLen = 0;
+ iWeight = 0;
+ nParent = NULL;
+ dbf = NULL;
+}
+
+/************************************************************************/
+//! @brief Constructor
+/*!
+ \param sNodeText Node text.
+ \param cReturnType Return type.
+ \param cNodeType Node type.
+*/
+
+xbExpNode::xbExpNode( xbString &sNodeText, char cReturnType, char cNodeType ){
+ this->sNodeText = sNodeText;
+ this->cReturnType = cReturnType;
+ this->cNodeType = cNodeType;
+ dResult = 0;
+ iFieldNo = 0;
+ ulResultLen = 0;
+ iWeight = 0;
+ nParent = NULL;
+ dbf = NULL;
+}
+
+/************************************************************************/
+//! @brief Constructor
+/*!
+ \param sNodeText Node text.
+ \param cNodeType Node type.
+*/
+xbExpNode::xbExpNode( xbString &sNodeText, char cNodeType ){
+ this->sNodeText = sNodeText;
+ this->cReturnType = 0x00;
+ this->cNodeType = cNodeType;
+ dResult = 0;
+ iFieldNo = 0;
+ ulResultLen = 0;
+ iWeight = 0;
+ nParent = NULL;
+ dbf = NULL;
+}
+
+/************************************************************************/
+//! @brief Constructor
+/*!
+ \param cNodeType Node type.
+*/
+xbExpNode::xbExpNode( char cNodeType ){
+ this->cReturnType = 0x00;
+ this->cNodeType = cNodeType;
+ dResult = 0;
+ iFieldNo = 0;
+ ulResultLen = 0;
+ iWeight = 0;
+ nParent = NULL;
+ dbf = NULL;
+}
+
+/************************************************************************/
+//! @brief Deconstructor
+xbExpNode::~xbExpNode(){
+
+ xbExpNode * n;
+ while( llChildren.GetNodeCnt() > 0 ){
+ llChildren.RemoveFromFront( n );
+ delete n;
+ }
+}
+
+/************************************************************************/
+//! @brief Add child node to linked list.
+/*!
+ \param n Pointer to node to add to linked list.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbExpNode::AddChild( xbExpNode *n ){
+ n->SetParent( this );
+ return llChildren.InsertAtEnd( n );
+}
+
+/************************************************************************/
+#ifdef XB_DEBUG_SUPPORT
+
+//! @brief Dump Node.
+/*!
+ \param iOption xbTrue - Print child info if they exist.<bt>
+ xbFalse - Don't print child info.
+ \returns void.
+*/
+void xbExpNode::DumpNode( xbInt16 iOption ) const {
+ xbString sMsg;
+ std::cout << "Me=[" << this << "] ";
+ if( nParent )
+ std::cout << "Par=[" << nParent << "] ";
+
+ std::cout << "nTyp=[" << cNodeType << "] ";
+ std::cout << "dTyp=[" << cReturnType << "] ";
+ if( iWeight != 0 )
+ std::cout << "W=[" << iWeight << "] ";
+
+ if( cNodeType == XB_EXP_FIELD )
+ std::cout << "FieldNo=[" << iFieldNo << "] ";
+
+ std::cout << "Txt=[" << sNodeText << "] ";
+ if( sResult != "" )
+ std::cout << "sVal=[" << sResult << "] ";
+
+ if( ulResultLen > 0 )
+ std::cout << "Len=[" << ulResultLen << "] ";
+ if( cReturnType == XB_EXP_DATE ){
+ xbDate d( (xbInt32) dResult );
+ std::cout << "dtVal=[" << d.Str() << "] ";
+ }
+
+ if( cReturnType == XB_EXP_DATE || cReturnType == XB_EXP_NUMERIC ){
+ sMsg.Sprintf( "dVal=[%f]\n", dResult );
+ std::cout << sMsg.Str();
+ }
+
+ if( cReturnType == XB_EXP_LOGICAL ){
+ sMsg.Sprintf( "lVal=[%d]\n", (xbInt32) dResult );
+ std::cout << sMsg.Str();
+ }
+
+ if( iOption ){
+ xbLinkListNode<xbExpNode *> *lln = llChildren.GetHeadNode();
+ xbExpNode *n;
+ if( lln ){
+ std::cout << " Children: ";
+ while( lln ){
+ n = lln->GetKey();
+ std::cout << " [" << n << "]";
+ lln = lln->GetNextNode();
+ }
+ std::cout << std::endl;
+
+ lln = llChildren.GetHeadNode();
+ while( lln ){
+ n = lln->GetKey();
+ n->DumpNode( iOption );
+ lln = lln->GetNextNode();
+ }
+ }
+ }
+
+ std::cout << std::endl;
+}
+#endif
+
+/************************************************************************/
+//! @brief Get boolean result.
+/*!
+ \returns Boolean result.
+*/
+
+xbBool xbExpNode::GetBoolResult() const {
+ return (xbBool) dResult;
+}
+
+/************************************************************************/
+//! @brief Get pointer to child.
+/*!
+ \param ulChildNo - Which child? 1,2 or3
+ \returns Pointer to child node or null if none exists.
+*/
+xbExpNode *xbExpNode::GetChild( xbUInt32 ulChildNo ) const {
+
+ xbLinkListNode<xbExpNode *> *lln = llChildren.GetNodeForNo( ulChildNo );
+ if( lln )
+ return lln->GetKey();
+ else
+ return 0x00;
+}
+/************************************************************************/
+//! @brief Get child count.
+/*!
+ \returns Child count.
+*/
+xbUInt32 xbExpNode::GetChildCnt() const{
+ return llChildren.GetNodeCnt();
+}
+
+/************************************************************************/
+//! @brief Get the current child number for this node.
+/*!
+ \returns Child number: 1, 2 or 3.
+*/
+
+xbUInt32 xbExpNode::GetChildNo() const {
+
+ if( !nParent )
+ return 0;
+
+ for( xbUInt32 i = 0; i < nParent->GetChildCnt(); i++ ){
+ if( this == nParent->GetChild( i )){
+ // std::cout << "get child no [" << this << "][" << nParent->GetChild(i) << "]\n";
+ return i;
+ }
+ }
+ return 0;
+}
+
+/************************************************************************/
+//! @brief Get the dbf pointer.
+/*!
+ \returns Pointer to dbf.
+*/
+xbDbf *xbExpNode::GetDbf() const {
+ return dbf;
+}
+/************************************************************************/
+//! @brief Get the field number.
+/*!
+ \returns Field number for field node.
+*/
+
+xbInt16 xbExpNode::GetFieldNo() const {
+ return iFieldNo;
+}
+
+/*************************************************************************/
+//! @brief Get the first node.
+/*!
+ \returns Pointer to left most child node or *this if childless.
+*/
+
+xbExpNode *xbExpNode::GetFirstNode() {
+ xbExpNode *n = this;
+ while( n && n->GetChildCnt() > 0 )
+ n = n->GetChild(0);
+ return n;
+}
+
+/*************************************************************************/
+//! @brief Get the next node.
+/*!
+ \returns Pointer to right node or parent if right node does not exist.
+*/
+
+xbExpNode *xbExpNode::GetNextNode() const {
+
+ if( HasRightSibling())
+ return GetRightSibling()->GetFirstNode();
+ else
+ return nParent;
+}
+
+/************************************************************************/
+//! @brief Get the node text.
+/*!
+ \param sOutText Output string containing node text.
+ \returns void
+*/
+
+void xbExpNode::GetNodeText( xbString &sOutText ) const{
+ sOutText = sNodeText;
+}
+
+/************************************************************************/
+//! @brief Get the node type.
+/*!
+ \returns Node type.
+*/
+
+char xbExpNode::GetNodeType() const{
+ return cNodeType;
+}
+
+/************************************************************************/
+//! @brief Get numeric result.
+/*!
+ \returns Numeric result.
+*/
+
+xbDouble xbExpNode::GetNumericResult() const {
+ return dResult;
+}
+
+/************************************************************************/
+//! @brief Get parent.
+/*!
+ \returns Pointer to parent node.
+*/
+
+xbExpNode *xbExpNode::GetParent() const{
+ return nParent;
+}
+
+/************************************************************************/
+//! @brief Get result length.
+/*!
+ \returns Result length.
+*/
+xbUInt32 xbExpNode::GetResultLen() const{
+ return ulResultLen;
+}
+/************************************************************************/
+//! @brief Get result type.
+/*!
+ \returns Result type.
+*/
+char xbExpNode::GetReturnType() const{
+ return cReturnType;
+}
+
+/*************************************************************************/
+//! @brief Get right sibling.
+/*!
+ \returns Pointer to right sibling.
+*/
+
+xbExpNode *xbExpNode::GetRightSibling() const {
+
+ xbExpNode * nParent;
+ if(( nParent = GetParent()) == NULL )
+ return NULL;
+
+ if( nParent->GetChildCnt() <= 0 )
+ return NULL;
+
+ xbUInt32 ulChildNo = GetChildNo();
+
+ if( ulChildNo < (nParent->GetChildCnt() - 1))
+ return nParent->GetChild( ulChildNo + 1 );
+ else
+ return NULL;
+}
+/************************************************************************/
+//! @brief Get string result.
+/*!
+ \returns String result.
+*/
+xbString &xbExpNode::GetStringResult(){
+ return sResult;
+}
+/************************************************************************/
+//! @brief Get node weight.
+/*!
+ Each node is assigned a weight used internally to detmerine processing sequence.
+ \returns Node weight.
+*/
+
+xbInt16 xbExpNode::GetWeight() const {
+ return iWeight;
+}
+
+/*************************************************************************/
+//! @brief Determine if node has a right sibling.
+/*!
+ \returns xbTrue - Node has right sibling.<br>
+ xbFalse - Node has no right sibling.
+*/
+
+xbBool xbExpNode::HasRightSibling() const {
+
+ // std::cout << "in HasRightSibling [" << sNodeText << "]\n";
+
+ if( nParent == NULL )
+ return xbFalse;
+
+ xbUInt32 ulChildNo = GetChildNo();
+
+ if( ulChildNo < (nParent->GetChildCnt() - 1)){
+ // std::cout << "Has Right Sibling = " << iChildNo << "] of [" << nParent->GetChildCnt() << "]\n";
+ return xbTrue;
+}
+ else
+ return xbFalse;
+}
+
+
+/*************************************************************************/
+//! @brief Determine if node is an operator.
+/*!
+ \returns xbTrue - Node is an operator.<br>
+ xbFalse - Node is not an operator.
+*/
+
+xbBool xbExpNode::IsOperator() const {
+
+ if( cNodeType == XB_EXP_OPERATOR )
+ return xbTrue;
+ else
+ return xbFalse;
+}
+
+/*************************************************************************/
+//! @brief Determine if node is a unary operator.
+/*!
+ \returns xbTrue - Node is a unary operator.<br>
+ xbFalse - Node is not a unary operator.
+*/
+xbBool xbExpNode::IsUnaryOperator() const {
+
+ if( cNodeType == XB_EXP_PRE_OPERATOR || cNodeType == XB_EXP_POST_OPERATOR )
+ return xbTrue;
+ else if( cNodeType == XB_EXP_OPERATOR && (sNodeText == ".NOT." || sNodeText == "NOT" ))
+ return xbTrue;
+ else
+ return xbFalse;
+}
+/************************************************************************/
+//! @brief Remove last child from node.
+/*!
+ \returns void.
+*/
+
+void xbExpNode::RemoveLastChild(){
+ xbExpNode *n;
+ llChildren.RemoveFromEnd( n );
+}
+
+/************************************************************************/
+//! @brief Set dbf info on node.
+/*!
+ \param dbf Pointer to dbf.
+ \param iFieldNo Field number of field.
+ \returns void.
+*/
+void xbExpNode::SetDbfInfo( xbDbf *dbf, xbInt16 iFieldNo ){
+ this->dbf = dbf;
+ this->iFieldNo = iFieldNo;
+}
+
+/************************************************************************/
+//! @brief Set dbf info on node.
+/*!
+ \param dbf Pointer to dbf.
+ \returns void.
+*/
+void xbExpNode::SetDbfInfo( xbDbf *dbf ){
+ this->dbf = dbf;
+}
+/************************************************************************/
+//! @brief Set node type.
+/*!
+ \param cNodeType Node type.
+ \returns void.
+*/
+void xbExpNode::SetNodeType( char cNodeType ){
+ this->cNodeType = cNodeType;
+}
+
+/************************************************************************/
+//! @brief Set node text.
+/*!
+ \param sNodeText Node text.
+ \returns void.
+*/
+void xbExpNode::SetNodeText( xbString & sNodeText ){
+ this->sNodeText = sNodeText;
+}
+
+/************************************************************************/
+//! @brief Set parent.
+/*!
+ \param n Pointer to parent.
+ \returns void.
+*/
+void xbExpNode::SetParent( xbExpNode *n ){
+ this->nParent = n;
+}
+
+/************************************************************************/
+//! @brief Set date result.
+/*!
+ \param dtResult Date result.
+ \returns void.
+*/
+void xbExpNode::SetResult( xbDate &dtResult ){
+ this->dResult = dtResult.JulianDays();
+}
+
+/************************************************************************/
+//! @brief Set boolean result.
+/*!
+ \param bResult Boolean result.
+ \returns void.
+*/
+void xbExpNode::SetResult( xbBool bResult ){
+ this->dResult = bResult;
+}
+/************************************************************************/
+//! @brief Set numeric result.
+/*!
+ \param dResult Double numeric result.
+ \returns void.
+*/
+void xbExpNode::SetResult( xbDouble dResult ){
+ this->dResult = dResult;
+}
+/************************************************************************/
+//! @brief Set string result.
+/*!
+ \param sResult String result.
+ \returns void.
+*/
+void xbExpNode::SetResult( xbString &sResult ){
+ this->sResult = sResult;
+}
+/************************************************************************/
+//! @brief Set result length.
+/*!
+ \param ulResultLen Set result length.
+ \returns void.
+*/
+void xbExpNode::SetResultLen( xbUInt32 ulResultLen ){
+ this->ulResultLen = ulResultLen;
+}
+/************************************************************************/
+//! @brief Set return type.
+/*!
+ \param cReturnType Return Type.
+ \returns void.
+*/
+void xbExpNode::SetReturnType( char cReturnType ){
+ this->cReturnType = cReturnType;
+}
+/************************************************************************/
+//! @brief Set weight.
+/*!
+ \param iWeight Weight to set this node at.
+ \returns void.
+*/
+void xbExpNode::SetWeight( xbInt16 iWeight ){
+ this->iWeight = iWeight;
+}
+/*************************************************************************/
+}; // namespace
+#endif // XB_EXPRESSION_SUPPORT
+/*************************************************************************/
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/core/xbfields.cpp b/1Tdata/xbase/xbase64-4.1.4/src/core/xbfields.cpp
new file mode 100755
index 0000000..85ac145
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/core/xbfields.cpp
@@ -0,0 +1,1189 @@
+/* xbfields.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+#include "xbase.h"
+
+namespace xb{
+
+/************************************************************************/
+//! @brief Get xbDouble field for field name.
+/*!
+ \param sFieldName Name of field to retrieve.
+ \param dFieldValue Output field value.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+
+xbInt16 xbDbf::GetDoubleField( const xbString &sFieldName, xbDouble &dFieldValue ) const {
+ return GetDoubleField( GetFieldNo( sFieldName ), dFieldValue );
+}
+
+/************************************************************************/
+//! @brief Get xbDouble field for field number.
+/*!
+ \param iFieldNo Number of field to retrieve.
+ \param dFieldValue Output field value.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+xbInt16 xbDbf::GetDoubleField( xbInt16 iFieldNo, xbDouble &dFieldValue ) const {
+ xbInt16 iRc = XB_NO_ERROR;
+ char buf[21];
+ memset( buf, 0x00, 21 );
+ if(( iRc = GetRawField( iFieldNo, buf, 21, 0 )) >= XB_NO_ERROR ){
+ dFieldValue = strtod( buf, NULL );
+ return XB_NO_ERROR;
+ } else
+ return iRc;
+}
+/************************************************************************/
+//! @brief Get xbDouble field for field number.
+/*!
+ \param iFieldNo Number of field to retrieve.
+ \param dFieldValue Output field value.
+ \param iRecBufSw 0 - Record buffer with any updates.<br>1 - Record buffer with original data.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+
+xbInt16 xbDbf::GetDoubleField( xbInt16 iFieldNo, xbDouble &dFieldValue, xbInt16 iRecBufSw ) const {
+ xbInt16 iRc = XB_NO_ERROR;
+ char buf[21];
+ memset( buf, 0x00, 21 );
+ if(( iRc = GetRawField( iFieldNo, buf, 21, iRecBufSw )) >= XB_NO_ERROR ){
+ dFieldValue = strtod( buf, NULL );
+ return XB_NO_ERROR;
+ } else
+ return iRc;
+}
+
+/************************************************************************/
+//! @brief Get xbDate field for field number.
+/*!
+ \param iFieldNo Number of field to retrieve.
+ \param dtFieldValue Output field value.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+
+xbInt16 xbDbf::GetDateField( xbInt16 iFieldNo, xbDate &dtFieldValue ) const{
+ xbString s;
+ xbInt16 iRc;
+ if(( iRc = GetField( iFieldNo, s )) != XB_NO_ERROR )
+ return iRc;
+ return dtFieldValue.Set( s );
+ // return XB_NO_ERROR;
+}
+
+/************************************************************************/
+//! @brief Get xbDate field for field name.
+/*!
+ \param sFieldName Name of field to retrieve.
+ \param dtFieldValue Output field value.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+
+xbInt16 xbDbf::GetDateField( const xbString &sFieldName, xbDate &dtFieldValue ) const{
+ xbString s;
+ xbInt16 iRc;
+ if(( iRc = GetField( sFieldName, s )) != XB_NO_ERROR )
+ return iRc;
+ return dtFieldValue.Set( s );
+ // return XB_NO_ERROR;
+}
+
+/************************************************************************/
+//! @brief Get xbString field for field name.
+/*!
+ \param sFieldName Name of field to retrieve
+ \param sFieldValue Output field value.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+
+xbInt16 xbDbf::GetField( const xbString &sFieldName, xbString &sFieldValue ) const{
+ return GetField( GetFieldNo( sFieldName ), sFieldValue, 0 );
+}
+/************************************************************************/
+//! @brief Get field data for field number.
+/*!
+ \param iFieldNo Number of field to retrieve.
+ \param sFieldValue Output field value.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+
+xbInt16 xbDbf::GetField( xbInt16 iFieldNo, xbString &sFieldValue ) const{
+ return GetField( iFieldNo, sFieldValue, 0 );
+}
+/************************************************************************/
+//! @brief Get field data for field number.
+/*!
+ \param iFieldNo Number of field to retrieve.
+ \param sFieldValue Output field value.
+ \param iRecBufSw 0 - Record buffer with any updates.<br>1 - Record buffer with original data.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+
+xbInt16 xbDbf::GetField( xbInt16 iFieldNo, xbString &sFieldValue, xbInt16 iRecBufSw) const
+{
+ xbUInt32 iLen;
+ if( iFieldNo < 0 || iFieldNo >= iNoOfFields ) {
+ sFieldValue = "";
+ return XB_INVALID_FIELD_NO;
+ }
+ iLen = SchemaPtr[iFieldNo].cFieldLen;
+ sFieldValue = "";
+ if( iRecBufSw )
+ sFieldValue.Append( (char *) SchemaPtr[iFieldNo].pAddress2, iLen ); // original record buffer
+ else
+ sFieldValue.Append( (char *) SchemaPtr[iFieldNo].pAddress, iLen ); // current record buffer
+ return XB_NO_ERROR;
+}
+
+
+/************************************************************************/
+//! @brief Get decimal for field name.
+/*!
+ This routine retreives a field's decimal length.
+ \param sFieldName Name of field to retrieve
+ \param iFieldDecimal Output field value.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+
+xbInt16 xbDbf::GetFieldDecimal( const xbString &sFieldName, xbInt16 & iFieldDecimal ) const {
+ return GetFieldDecimal( GetFieldNo( sFieldName ), iFieldDecimal );
+}
+
+
+/************************************************************************/
+//! @brief Get decimal for field number.
+/*!
+ This routine retreives a field's decimal length.
+ \param iFieldNo Number of field to retrieve
+ \param iFieldDecimal Output field value.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+
+xbInt16 xbDbf::GetFieldDecimal( xbInt16 iFieldNo, xbInt16 & iFieldDecimal ) const {
+
+ if( iFieldNo < 0 || iFieldNo >= iNoOfFields ) {
+ return XB_INVALID_FIELD_NO;
+ }
+ iFieldDecimal = SchemaPtr[iFieldNo].cNoOfDecs;
+ return XB_NO_ERROR;
+}
+
+/************************************************************************/
+//! @brief Get field length for field name.
+/*!
+
+ This function retrieves a field's length.
+
+ \param sFieldName Name of field to retrieve
+ \param iFieldLen Output field length value.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+
+xbInt16 xbDbf::GetFieldLen( const xbString &sFieldName, xbInt16 &iFieldLen ) const {
+ return GetFieldLen( GetFieldNo( sFieldName ), iFieldLen );
+}
+
+
+/************************************************************************/
+//! @brief Get field length for field number.
+/*!
+ This function retrieves a field's length.
+
+ \param iFieldNo Name of field to retrieve
+ \param iFieldLen Output field length value.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+
+xbInt16 xbDbf::GetFieldLen( xbInt16 iFieldNo, xbInt16 &iFieldLen ) const {
+ if( iFieldNo >= 0 && iFieldNo < iNoOfFields ){
+ iFieldLen = SchemaPtr[iFieldNo].cFieldLen;
+ return XB_NO_ERROR;
+ } else
+ return XB_INVALID_FIELD_NO;
+}
+
+/************************************************************************/
+//! @brief Get the field number for name.
+/*! Returns the field number for the named field.
+
+ All field get/put methods require either a field number or field name as
+ one of the parameters. Using the methods that take the field numbers will
+ yield slightly better performance because the methods that take a name, have
+ to look up the number.
+
+ \param sFieldName Name of field.
+ \param iFieldNo Output field number for the given name.
+ \returns Number of field named fldName.
+*/
+
+xbInt16 xbDbf::GetFieldNo( const xbString & sFieldName, xbInt16 &iFieldNo ) const
+{
+ int i;
+
+ if( sFieldName.Len() > 10 )
+ return XB_INVALID_FIELD_NAME;
+
+ for( i = 0; i < iNoOfFields; i++ ){
+ if( sFieldName == SchemaPtr[i].cFieldName ){
+ iFieldNo = i;
+ return XB_NO_ERROR;
+ }
+ }
+ return XB_INVALID_FIELD_NAME;
+}
+
+/************************************************************************/
+//! Get field ID number for a given field name.
+/*! Returns the field number for the named field.
+
+ \param sFieldName Name of field.
+ \returns Number of field or XB_INVALID_FIELD_NAME.
+*/
+
+xbInt16 xbDbf::GetFieldNo( const xbString &sFieldName ) const {
+ int i;
+
+ if( sFieldName.Len() > 10 )
+ return XB_INVALID_FIELD_NAME;
+
+ for( i = 0; i < iNoOfFields; i++ ){
+ if( sFieldName == SchemaPtr[i].cFieldName )
+ return i;
+ }
+ return XB_INVALID_FIELD_NAME;
+}
+
+/************************************************************************/
+//! Get field type for field number.
+/*!
+ \param iFieldNo Field number.
+ \param cFieldType Output field type.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+xbInt16 xbDbf::GetFieldType( xbInt16 iFieldNo, char & cFieldType ) const{
+
+ if( iFieldNo >= 0 && iFieldNo < iNoOfFields ){
+ cFieldType = SchemaPtr[iFieldNo].cType;
+ return XB_NO_ERROR;
+ }
+ else
+ return XB_INVALID_FIELD_NO;
+}
+
+/************************************************************************/
+//! Get field type for field name.
+/*!
+ \param sFieldName Field name.
+ \param cFieldType Output field type.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+
+xbInt16 xbDbf::GetFieldType( const xbString &sFieldName, char & cFieldType ) const{
+ return( GetFieldType( GetFieldNo( sFieldName ), cFieldType));
+}
+
+/************************************************************************/
+//! @brief Returns the name of the specified field.
+/*! Returns a pointer to the name for the field specified by iFieldNo.
+
+ \param iFieldNo Number of field.
+ \param sFieldName Output variable containing the field name.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+xbInt16 xbDbf::GetFieldName( xbInt16 iFieldNo, xbString &sFieldName ) const{
+ if( iFieldNo >= 0 && iFieldNo < iNoOfFields ){
+ sFieldName = SchemaPtr[iFieldNo].cFieldName;
+ return XB_NO_ERROR;
+ }
+ else
+ return XB_INVALID_FIELD_NO;
+}
+
+/************************************************************************/
+//! @brief Get xbFloat field for field number.
+/*!
+ \param iFieldNo Number of field to retrieve.
+ \param fFieldValue Output field value.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+xbInt16 xbDbf::GetFloatField( xbInt16 iFieldNo, xbFloat & fFieldValue ) const {
+
+ char cFieldType;
+ xbInt16 rc = GetFieldType( iFieldNo, cFieldType );
+ if( rc < 0 )
+ return rc;
+
+ if( cFieldType != 'N' && cFieldType != 'F' )
+ return XB_INVALID_FIELD_TYPE;
+
+ xbString sTemp;
+ rc = GetField( iFieldNo, sTemp, 0 );
+ if( rc < 0 )
+ return rc;
+
+ fFieldValue = (xbFloat) atof( sTemp.Str());
+ return XB_NO_ERROR;
+}
+
+
+/************************************************************************/
+//! @brief Get xbFloat field for field name.
+/*!
+ \param sFieldName Number of field to retrieve.
+ \param fFieldValue Output field value.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+
+xbInt16 xbDbf::GetFloatField( const xbString & sFieldName, xbFloat & fFieldValue ) const {
+ return GetFloatField( GetFieldNo(sFieldName ), fFieldValue );
+}
+
+/************************************************************************/
+//! @brief Get logical field for field number.
+/*!
+ \param iFieldNo Number of field to retrieve.
+ \param sFieldValue Output field value.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+xbInt16 xbDbf::GetLogicalField( xbInt16 iFieldNo, xbString &sFieldValue ) const {
+
+ char cFieldType;
+ xbInt16 iRc = GetFieldType( iFieldNo, cFieldType );
+ if( iRc < 0 )
+ return iRc;
+ else if( cFieldType != 'L' )
+ return XB_INVALID_FIELD_TYPE;
+
+ if(( iRc = GetField( iFieldNo, sFieldValue )) < XB_NO_ERROR )
+ return iRc;
+ else
+ return XB_NO_ERROR;
+}
+
+/************************************************************************/
+//! @brief Get logical field for field name.
+/*!
+ \param sFieldName Name of field to retrieve.
+ \param sFieldValue Output field value.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+
+xbInt16 xbDbf::GetLogicalField( const xbString &sFieldName, xbString &sFieldValue ) const {
+ return GetLogicalField( GetFieldNo( sFieldName ), sFieldValue );
+}
+
+
+/************************************************************************/
+//! @brief Get logical field for field number.
+/*!
+ \param iFieldNo Number of field to retrieve.
+ \param bFieldValue Output field value.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+
+xbInt16 xbDbf::GetLogicalField( xbInt16 iFieldNo, xbBool &bFieldValue ) const {
+ return GetLogicalField( iFieldNo, bFieldValue, 0 );
+}
+
+/************************************************************************/
+//! @brief Get logical field for field number.
+/*!
+ \param iFieldNo Number of field to retrieve.
+ \param bFieldValue Output field value.
+ \param iRecBufSw 0 - Record buffer with any updates.<br>1 - Record buffer with original data.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+
+xbInt16 xbDbf::GetLogicalField( xbInt16 iFieldNo, xbBool &bFieldValue, xbInt16 iRecBufSw ) const {
+
+ char cFieldType;
+ xbInt16 iRc = GetFieldType( iFieldNo, cFieldType );
+ if((iRc = GetFieldType( iFieldNo, cFieldType )) != XB_NO_ERROR )
+ return iRc;
+
+ if( cFieldType != 'L' )
+ return XB_INVALID_FIELD_TYPE;
+
+ xbString sFieldValue;
+ if(( iRc = GetField( iFieldNo, sFieldValue, iRecBufSw )) < XB_NO_ERROR )
+ return iRc;
+
+ if( sFieldValue == 'T' || sFieldValue == 't' || sFieldValue == 'Y' || sFieldValue == 'y' )
+ bFieldValue = xbTrue;
+ else
+ bFieldValue = xbFalse;
+
+ return XB_NO_ERROR;
+}
+
+/************************************************************************/
+//! @brief Get logical field for field name.
+/*!
+ \param sFieldName Name of field to retrieve.
+ \param bFieldValue Output field value.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+xbInt16 xbDbf::GetLogicalField( const xbString &sFieldName, xbBool &bFieldValue ) const {
+ return GetLogicalField( GetFieldNo( sFieldName ), bFieldValue );
+}
+/************************************************************************/
+//! @brief Get long field for field number.
+/*!
+ \param iFieldNo Number of field to retrieve.
+ \param lFieldValue Output field value.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+xbInt16 xbDbf::GetLongField( xbInt16 iFieldNo, xbInt32 & lFieldValue ) const {
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ char cFieldType;
+ xbString sTemp;
+
+ try{
+
+ if(( iRc = GetFieldType( iFieldNo, cFieldType )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+
+ if( cFieldType != 'N' && cFieldType != 'F' && cFieldType != 'M' ){
+ iErrorStop = 110;
+ iRc = XB_INVALID_FIELD_TYPE;
+ throw iRc;
+ }
+
+ if(( iRc = GetField( iFieldNo, sTemp, 0 )) < 0 ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ sTemp.Trim();
+
+ if( !sTemp.ValidNumericValue() ){
+ iErrorStop = 130;
+ iRc = XB_INVALID_DATA;
+ throw iRc;
+ }
+
+ if( sTemp.Pos( '.' ) > 0){
+ iErrorStop = 140;
+ iRc = XB_INVALID_DATA;
+ throw iRc;
+ }
+
+ lFieldValue = atol( sTemp.Str());
+ }
+
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbDbf::GetLongField() Exception Caught. Error Stop = [%d] rc = [%d] [%s]", iErrorStop, iRc, sTemp.Str() );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+
+ return XB_NO_ERROR;
+}
+
+/************************************************************************/
+#ifdef XB_MEMO_SUPPORT
+//! @brief Get memo field for field number.
+/*!
+ \param iFieldNo Number of field to retrieve.
+ \param sMemoValue Output field value.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+xbInt16 xbDbf::GetMemoField( xbInt16 iFieldNo, xbString &sMemoValue ){
+ return Memo->GetMemoField( iFieldNo, sMemoValue );
+}
+/************************************************************************/
+//! @brief Get memo field for field name.
+/*!
+
+ \param sFieldName Name of field to retrieve.
+ \param sMemoValue Output field value.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+xbInt16 xbDbf::GetMemoField( const xbString & sFieldName, xbString & sMemoValue ){
+ return Memo->GetMemoField( GetFieldNo( sFieldName ), sMemoValue );
+}
+
+/************************************************************************/
+//! @brief Get the memo field count for this table.
+/*!
+ \returns Returns the number of memo fields in the table,
+*/
+xbInt16 xbDbf::GetMemoFieldCnt() const {
+ return iMemoFieldCnt;
+}
+/************************************************************************/
+//! @brief Get memo field length for field number.
+/*!
+ \param iFieldNo Number of field to retrieve.
+ \param ulMemoFieldLen Output memo field value length.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+
+xbInt16 xbDbf::GetMemoFieldLen( xbInt16 iFieldNo, xbUInt32 & ulMemoFieldLen ){
+ return Memo->GetMemoFieldLen( iFieldNo, ulMemoFieldLen );
+}
+/************************************************************************/
+//! @brief Get memo field length for field name.
+/*!
+ \param sFieldName Name of field to retrieve.
+ \param ulMemoFieldLen Output memo field value length.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+xbInt16 xbDbf::GetMemoFieldLen( const xbString &sFieldName, xbUInt32 &ulMemoFieldLen ){
+ return Memo->GetMemoFieldLen( GetFieldNo( sFieldName ), ulMemoFieldLen );
+}
+
+#endif // XB_MEMO_SUPPORT
+
+/************************************************************************/
+//! @brief Get field null status
+/*!
+ \param iFieldNo Number of field to retrieve.
+ \param bIsNull Output field value. If field is all spaces on record buffer, returns true.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+xbInt16 xbDbf::GetNullSts( xbInt16 iFieldNo, xbBool &bIsNull ) const {
+ return GetNullSts( iFieldNo, bIsNull, 0 );
+}
+
+/************************************************************************/
+//! @brief Get field null status
+/*!
+ \param iFieldName Field Name of field to retrieve.
+ \param bIsNull Output field value. If field is all spaces on record buffer, returns true.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+
+xbInt16 xbDbf::GetNullSts( const xbString &sFieldName, xbBool &bIsNull ) const {
+ return GetNullSts( GetFieldNo( sFieldName ), bIsNull, 0 );
+}
+
+/************************************************************************/
+//! @brief Get field null status
+/*!
+ \param iFieldNo Number of field to retrieve.
+ \param bIsNull Output field value. If field is all spaces on record buffer, returns true.
+ \param iRecBufSw 0 - Record buffer with any updates.<br>1 - Record buffer with original data.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+
+xbInt16 xbDbf::GetNullSts( xbInt16 iFieldNo, xbBool &bIsNull, xbInt16 iRecBufSw ) const
+{
+ if( iFieldNo < 0 || iFieldNo >= iNoOfFields ) {
+ return XB_INVALID_FIELD_NO;
+ }
+ bIsNull = xbTrue;
+ char *p;
+ if( iRecBufSw )
+ p = (char *) SchemaPtr[iFieldNo].pAddress2;
+ else
+ p = (char *) SchemaPtr[iFieldNo].pAddress;
+
+ xbUInt32 ulLen = SchemaPtr[iFieldNo].cFieldLen;
+ xbUInt32 ul = 0;
+
+ while( ul < ulLen && bIsNull ){
+ if( *p++ != ' ' )
+ bIsNull = xbFalse;
+ else
+ ul++;
+ }
+ return XB_NO_ERROR;
+}
+
+/************************************************************************/
+//! @brief Get unsigned long field for field number.
+/*!
+ \param iFieldNo Number of field to retrieve.
+ \param ulFieldValue Output field value.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+xbInt16 xbDbf::GetULongField( xbInt16 iFieldNo, xbUInt32 & ulFieldValue ) const {
+
+ xbInt16 rc = 0;
+ xbInt16 iErrorStop = 0;
+ char cFieldType;
+
+ try{
+
+ if(( rc = GetFieldType( iFieldNo, cFieldType )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw rc;
+ }
+ if( cFieldType != 'N' && cFieldType != 'F' && cFieldType != 'M' ){
+ iErrorStop = 110;
+ rc = XB_INVALID_FIELD_TYPE;
+ throw rc;
+ }
+ xbString sTemp;
+ if(( rc = GetField( iFieldNo, sTemp, 0 )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw rc;
+ }
+ sTemp.Trim();
+ if( !sTemp.ValidNumericValue() || ((int) sTemp.Pos( '.' ) > 0)){
+ iErrorStop = 130;
+ rc = XB_INVALID_DATA;
+ throw rc;
+ }
+ ulFieldValue = strtoul( sTemp.Str(), NULL, 10 );
+ }
+ catch (xbInt16 rc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbDbf::GetULongField() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( rc ));
+ }
+ return XB_NO_ERROR;
+}
+
+/************************************************************************/
+//! @brief Get long field for field name.
+/*!
+ \param sFieldName Number of field to retrieve.
+ \param lFieldValue Output field value.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+
+xbInt16 xbDbf::GetLongField( const xbString &sFieldName, xbInt32 &lFieldValue ) const {
+ return GetLongField( GetFieldNo( sFieldName ), lFieldValue );
+}
+
+/************************************************************************/
+//! @brief Get unsigned long field for field name.
+/*!
+ \param sFieldName Number of field to retrieve.
+ \param ulFieldValue Output field value.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+
+xbInt16 xbDbf::GetULongField( const xbString &sFieldName, xbUInt32 &ulFieldValue ) const {
+ return GetULongField( GetFieldNo( sFieldName ), ulFieldValue );
+}
+
+/************************************************************************/
+//! @brief Get raw field data for field number.
+/*!
+
+ This is a protected method, used by other methods. This method would be
+ subject to buffer overflows if made public.
+
+ \param iFieldNo Number of field to retrieve.
+ \param cBuf Pointer to buffer area provided by calling application program.
+ \param ulBufSize Size of data to copy
+ \param iRecBufSw 0 - Record buffer with any updates.<br>1 - Record buffer with original data.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+
+
+xbInt16 xbDbf::GetRawField( xbInt16 iFieldNo, char *cBuf, xbUInt32 ulBufSize, xbInt16 iRecBufSw ) const
+{
+ if( iFieldNo < 0 || iFieldNo >= iNoOfFields ) {
+ return XB_INVALID_FIELD_NO;
+ }
+
+ size_t stCopySize;
+ if( ulBufSize > (size_t) (SchemaPtr[iFieldNo].cFieldLen ))
+ stCopySize = (size_t) (SchemaPtr[iFieldNo].cFieldLen );
+ else
+ stCopySize = ulBufSize - 1;
+
+ if( iRecBufSw )
+ memcpy( cBuf, SchemaPtr[iFieldNo].pAddress2, stCopySize );
+ else
+ memcpy( cBuf, SchemaPtr[iFieldNo].pAddress, stCopySize );
+
+ cBuf[stCopySize] = 0x00;
+ return XB_NO_ERROR;
+}
+
+
+/************************************************************************/
+//! @brief Put double field for field name.
+/*!
+ \param sFieldName Name of field to update.
+ \param dFieldValue Field value.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+xbInt16 xbDbf::PutDoubleField( const xbString &sFieldName, xbDouble dFieldValue ){
+ return PutDoubleField( GetFieldNo( sFieldName ), dFieldValue );
+}
+
+/************************************************************************/
+//! @brief Put double field for field number.
+/*!
+ \param iFieldNo Number of field to update.
+ \param dFieldValue Field value.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+
+xbInt16 xbDbf::PutDoubleField( xbInt16 iFieldNo, xbDouble dFieldValue ){
+
+ xbInt16 rc;
+ xbString sDoubleFmt;
+ xbString sDoubleFmt2;
+ xbString sDoubleVal;
+ xbInt16 iFieldLen;
+ xbInt16 iNoOfDecs;
+
+ if(( rc = GetFieldDecimal( iFieldNo, iNoOfDecs )) != XB_NO_ERROR )
+ return rc;
+
+ if(( rc = GetFieldLen( iFieldNo, iFieldLen )) != XB_NO_ERROR )
+ return rc;
+
+ sDoubleFmt.Sprintf( "%d.%df", iFieldLen, iNoOfDecs );
+ sDoubleFmt2 = "%-";
+ sDoubleFmt2 += sDoubleFmt;
+ sDoubleVal.Sprintf( sDoubleFmt2.Str(), dFieldValue );
+ sDoubleVal.Rtrim();
+ return PutField( iFieldNo, sDoubleVal );
+}
+
+/************************************************************************/
+//! @brief Put date field for field name.
+/*!
+ \param sFieldName Name of field to update.
+ \param dtFieldValue Field value.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+
+xbInt16 xbDbf::PutDateField(const xbString &sFieldName, const xbDate &dtFieldValue ){
+ return PutField( GetFieldNo( sFieldName ), dtFieldValue.Str() );
+}
+
+/************************************************************************/
+//! @brief Put date field for field number.
+/*!
+ \param iFieldNo Number of field to update.
+ \param dtFieldValue Field value.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+xbInt16 xbDbf::PutDateField( xbInt16 iFieldNo, const xbDate &dtFieldValue ){
+ return PutField( iFieldNo, dtFieldValue.Str() );
+}
+
+/************************************************************************/
+//! @brief Put field for field name.
+/*!
+ \param sFieldName Name of field to update.
+ \param sFieldValue Field value.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+xbInt16 xbDbf::PutField(const xbString &sFieldName, const xbString &sFieldValue ) {
+ return PutField( GetFieldNo( sFieldName ), sFieldValue );
+}
+/************************************************************************/
+//! @brief Put field for field number.
+/*!
+ \param iFieldNo Number of field to update.
+ \param sFieldValue Field value.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+
+xbInt16 xbDbf::PutField( xbInt16 iFieldNo, const xbString &sFieldValue ) {
+ xbInt16 iLen;
+ xbInt16 iDecPos; /* Decimal Position */
+ char * startpos;
+ char * tp; /* Target Pointer */
+
+ if( iFieldNo < 0 || iFieldNo >= iNoOfFields )
+ return XB_INVALID_FIELD_NO;
+
+ if( SchemaPtr[iFieldNo].cType == 'L' && !sFieldValue.ValidLogicalValue())
+ return XB_INVALID_DATA;
+
+ else if( SchemaPtr[iFieldNo].cType == 'D' ){
+ xbDate d;
+ if( !d.DateIsValid( sFieldValue ))
+ return XB_INVALID_DATA;
+ iLen = 8;
+ }
+ else
+ {
+ iLen = (xbInt16) sFieldValue.Len();
+ if( SchemaPtr[iFieldNo].cType == 'F' || SchemaPtr[iFieldNo].cType == 'N' || SchemaPtr[iFieldNo].cType == 'M' ){
+ if( !sFieldValue.ValidNumericValue()) {
+ return XB_INVALID_DATA;
+ }
+ else {
+ iDecPos = (xbInt16) sFieldValue.Pos( "." ); // 0 is no decimal
+ int mlod; // max no of digits left of decimal point digit count
+
+
+ if( SchemaPtr[iFieldNo].cNoOfDecs > 0 )
+ mlod = SchemaPtr[iFieldNo].cFieldLen - SchemaPtr[iFieldNo].cNoOfDecs - 1;
+ else
+ mlod = iLen;
+
+ if( iDecPos == 0 ){ // no decimal in incoming data
+
+ // check digits to the left of the decimal
+ if( SchemaPtr[iFieldNo].cNoOfDecs > 0 && iLen > mlod ) /* no decimal in incoming data */
+ return XB_INVALID_DATA;
+
+ else if( SchemaPtr[iFieldNo].cNoOfDecs == 0 && iLen > SchemaPtr[iFieldNo].cFieldLen )
+ return XB_INVALID_DATA;
+
+ }
+ else // decimal in incoming data
+ {
+ if( (iDecPos-1) > mlod ) // too many digits to the left of dec in incoming data
+ return XB_INVALID_DATA;
+
+ // check digits to the right of the decimal
+ else if((iLen - iDecPos) > SchemaPtr[iFieldNo].cNoOfDecs )
+ return XB_INVALID_DATA;
+ }
+ }
+ }
+ }
+
+ // do all field edits before this point
+ if( iDbfStatus != XB_UPDATED ){
+ iDbfStatus = XB_UPDATED;
+ memcpy( RecBuf2, RecBuf, uiRecordLen ); // save the original record bufer before making updates
+ }
+
+ memset( SchemaPtr[iFieldNo].pAddress, 0x20, SchemaPtr[iFieldNo].cFieldLen );
+
+ if( iLen > SchemaPtr[iFieldNo].cFieldLen )
+ iLen = SchemaPtr[iFieldNo].cFieldLen;
+
+ if( SchemaPtr[iFieldNo].cType == 'F' || SchemaPtr[iFieldNo].cType == 'N'
+ || SchemaPtr[iFieldNo].cType == 'M') {
+
+ xbInt16 iDecPos = (xbInt16) sFieldValue.Pos( "." );
+ if( iDecPos == 0 ){
+ iLen = (xbInt16) sFieldValue.Len();
+ iDecPos = 0;
+ }
+ else{
+ iLen = iDecPos - 1;
+ }
+
+ if( SchemaPtr[iFieldNo].cNoOfDecs > 0 ){
+ tp = SchemaPtr[iFieldNo].pAddress;
+ tp += SchemaPtr[iFieldNo].cFieldLen - SchemaPtr[iFieldNo].cNoOfDecs - 1;
+ *tp++ = '.';
+
+ if( iDecPos == 0 ){
+ for( xbInt32 i = 0; i < SchemaPtr[iFieldNo].cNoOfDecs; i++ )
+ *tp++ = '0';
+ } else {
+ xbInt32 j = iDecPos + 1;
+ for( xbInt32 i = 0; i < SchemaPtr[iFieldNo].cNoOfDecs; i++, j++ ){
+ if( j <= (xbInt32) sFieldValue.Len())
+ *tp++ = sFieldValue[j];
+ else
+ *tp++ = '0';
+ }
+ }
+ startpos= SchemaPtr[iFieldNo].pAddress +
+ SchemaPtr[iFieldNo].cFieldLen -
+ SchemaPtr[iFieldNo].cNoOfDecs - iLen - 1;
+
+ }
+ else
+ startpos=SchemaPtr[iFieldNo].pAddress+SchemaPtr[iFieldNo].cFieldLen-iLen;
+ }
+ else
+ startpos = SchemaPtr[iFieldNo].pAddress;
+
+ memcpy( startpos, sFieldValue.Str(), (size_t) iLen );
+ return 0;
+}
+
+/************************************************************************/
+//! @brief Put float field for field number.
+/*!
+ \param iFieldNo Number of field to update.
+ \param fFieldValue Field value.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+xbInt16 xbDbf::PutFloatField( xbInt16 iFieldNo, xbFloat fFieldValue ){
+
+ xbInt16 rc;
+ xbString sFloatFmt;
+ xbString sFloatFmt2;
+ xbString sFloatVal;
+ xbInt16 iFieldLen;
+ xbInt16 iNoOfDecs;
+
+ if(( rc = GetFieldDecimal( iFieldNo, iNoOfDecs )) != XB_NO_ERROR )
+ return rc;
+
+ if(( rc = GetFieldLen( iFieldNo, iFieldLen )) != XB_NO_ERROR )
+ return rc;
+
+ sFloatFmt.Sprintf( "%d.%df", iFieldLen, iNoOfDecs );
+ sFloatFmt2 = "%-";
+ sFloatFmt2 += sFloatFmt;
+ sFloatVal.Sprintf( sFloatFmt2.Str(), fFieldValue );
+ sFloatVal.Rtrim();
+ return PutField( iFieldNo, sFloatVal );
+}
+
+/************************************************************************/
+//! @brief Put float field for field name.
+/*!
+ \param sFieldName Name of field to update.
+ \param fFieldValue Field value.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+
+xbInt16 xbDbf::PutFloatField( const xbString &sFieldName, xbFloat fFieldValue ){
+ return PutFloatField( GetFieldNo( sFieldName ), fFieldValue );
+}
+
+/************************************************************************/
+//! @brief Put logical field for field number.
+/*!
+ \param iFieldNo Number of field to update.
+ \param sFieldValue Field value.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+
+xbInt16 xbDbf::PutLogicalField( xbInt16 iFieldNo, const xbString &sFieldValue ) {
+ return PutField( iFieldNo, sFieldValue );
+}
+
+/************************************************************************/
+//! @brief Put logical field for field name.
+/*!
+ \param sFieldName Name of field to update.
+ \param sFieldValue Field value.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+xbInt16 xbDbf::PutLogicalField( const xbString &sFieldName, const xbString &sFieldValue ) {
+ return PutField( GetFieldNo( sFieldName ), sFieldValue );
+}
+
+/************************************************************************/
+//! @brief Put logical field for field number.
+/*!
+ \param iFieldNo Number of field to update.
+ \param bFieldValue Field value.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+
+xbInt16 xbDbf::PutLogicalField( xbInt16 iFieldNo, xbBool bFieldValue ) {
+
+ if( bFieldValue )
+ return PutField( iFieldNo, "T" );
+ else
+ return PutField( iFieldNo, "F" );
+}
+
+/************************************************************************/
+//! @brief Put logical field for field name.
+/*!
+ \param sFieldName Name of field to update.
+ \param bFieldValue Field value.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+xbInt16 xbDbf::PutLogicalField( const xbString &sFieldName, xbBool bFieldValue ) {
+ return PutLogicalField( GetFieldNo( sFieldName ), bFieldValue );
+}
+
+/************************************************************************/
+//! @brief Put long field for field number.
+/*!
+ \param iFieldNo Number of field to update.
+ \param lFieldValue Field value.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+
+xbInt16 xbDbf::PutLongField( xbInt16 iFieldNo, xbInt32 lFieldValue ) {
+ xbString sLong;
+ sLong.Sprintf( "%ld", (xbInt32) lFieldValue );
+ return PutField( iFieldNo, sLong.Str() );
+}
+
+/************************************************************************/
+//! @brief Put long field for field name.
+/*!
+ \param sFieldName Name of field to update.
+ \param lFieldValue Field value.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+
+xbInt16 xbDbf::PutLongField( const xbString &sFieldName, xbInt32 lFieldValue ) {
+ return PutLongField( GetFieldNo( sFieldName ), lFieldValue );
+}
+
+/************************************************************************/
+//! @brief Put unsigned long field for field number.
+/*!
+ \param iFieldNo Number of field to update.
+ \param ulFieldValue Field value.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+
+xbInt16 xbDbf::PutULongField( xbInt16 iFieldNo, xbUInt32 ulFieldValue ) {
+ xbString sLong;
+ sLong.Sprintf( "%lu", (xbInt32) ulFieldValue );
+ return PutField( iFieldNo, sLong.Str() );
+}
+
+/************************************************************************/
+//! @brief Put unsigned long field for field name.
+/*!
+ \param sFieldName Name of field to update.
+ \param ulFieldValue Field value.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+
+xbInt16 xbDbf::PutULongField( const xbString &sFieldName, xbUInt32 ulFieldValue ) {
+ return PutLongField( GetFieldNo( sFieldName ), (xbInt32) ulFieldValue );
+}
+
+/************************************************************************/
+#ifdef XB_MEMO_SUPPORT
+//! @brief Check if memo field exists for field name.
+/*!
+ \param sFieldName Name of field to check.
+ \returns xbTrue Field exists.<br> xbFale Field does not exist.
+*/
+
+xbBool xbDbf::MemoFieldExists( const xbString &sFieldName ) const{
+ return MemoFieldExists( GetFieldNo( sFieldName ));
+}
+
+/************************************************************************/
+//! @brief Check if memo field exists for field number.
+/*!
+ \param iFieldNo Number of field to check.
+ \returns xbTrue Field exists.<br> xbFale Field does not exist.
+*/
+
+xbBool xbDbf::MemoFieldExists( xbInt16 iFieldNo ) const{
+
+ xbInt32 lFld = 0L;
+ GetLongField( iFieldNo, lFld );
+ if( lFld == 0L )
+ return xbFalse;
+ else
+ return xbTrue;
+}
+
+#endif
+
+} /* namespace */
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/core/xbfile.cpp b/1Tdata/xbase/xbase64-4.1.4/src/core/xbfile.cpp
new file mode 100755
index 0000000..6376e9a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/core/xbfile.cpp
@@ -0,0 +1,2217 @@
+/* xbfile.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+This module handles all the low level file I/O and is the base class
+for the table, memo and index classes
+
+*/
+
+#include "xbase.h"
+
+namespace xb{
+
+/************************************************************************/
+//! @brief Class Constructor.
+xbFile::xbFile( xbXBase * x ){
+ fp = NULL;
+ bFileOpen = xbFalse;
+ ulBlockSize = 0;
+ iFileNo = 0;
+ xbase = x;
+ if( GetMultiUser() == xbTrue )
+ iShareMode = XB_MULTI_USER;
+ else
+ iShareMode = XB_SINGLE_USER;
+ iOpenMode = 0;
+ #ifdef XB_LOCKING_SUPPORT
+ iLockRetries = -1;
+ #endif
+ #ifdef HAVE_SETENDOFFILE_F
+ fHandle = NULL;
+ #endif
+}
+
+/************************************************************************/
+//! @brief Class Destructor.
+xbFile::~xbFile(){
+ if( bFileOpen )
+ xbFclose();
+}
+
+/************************************************************************/
+//! @brief Create a unique file name.
+/*!
+ Given a directory and file extension as inputs, create a unique file name.
+
+ \param sDirIn Directory
+ \param sExtIn File Extension
+ \param sFqnOut A fully qualifed unique file name as output
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+/*
+xbInt16 xbFile::CreateUniqueFileName( const xbString & sDirIn, const xbString & sExtIn, xbString &sFqnOut ){
+ return CreateUniqueFileName( sDirIn, sExtIn, sFqnOut, 0 );
+}
+*/
+/************************************************************************/
+//! @brief Create a unique file name.
+/*!
+ Given a directory and file extension as inputs, create a unique file name.
+
+ \param sDirIn Directory
+ \param sExtIn File Extension
+ \param iOption 0 - look only for one file for a given directory and extension<br>
+ 1 - if file name extension is "dbf" or "DBF", verify unique dbt or DBT (memo) file is also available<br>
+ \param sFqnOut A fully qualifed unique file name as output
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbFile::CreateUniqueFileName( const xbString & sDirIn, const xbString & sExtIn, xbString &sFqnOut, xbInt16 iOption ){
+
+ xbBool bUniqueFileNameFound = xbFalse;
+ xbFile f( xbase);
+ xbInt32 l = 1;
+ xbString sMemoFileName;
+
+ xbString sDir = sDirIn;
+ char c = GetPathSeparator();
+ if( sDirIn.Len() > 0 && sDirIn[sDirIn.Len()] != c )
+ sDir += c;
+
+ while( !bUniqueFileNameFound ){
+ sFqnOut.Sprintf( "%sxbTmp%03d.%s", sDir.Str(), l, sExtIn.Str());
+ if( iOption == 1 && sExtIn == "DBF" ){
+ sMemoFileName.Sprintf( "%sxbTmp%03d.DBT", sDirIn.Str(), l );
+ }
+ else if( iOption == 1 && sExtIn == "dbf" ){
+ sMemoFileName.Sprintf( "%sxbTmp%03d.dbt", sDirIn.Str(), l );
+ }
+ if( f.FileExists( sFqnOut ) || ( sMemoFileName.Len() > 0 && f.FileExists( sMemoFileName ))){
+ l++;
+ }
+ else
+ {
+ bUniqueFileNameFound = xbTrue;
+ }
+ if( l > 999 )
+ return XB_FILE_EXISTS;
+ }
+ return XB_NO_ERROR;
+}
+
+/*************************************************************************/
+//! @brief Determine which version the memo (dbt) file is.
+/*!
+
+ This routine uses the first byte in the dbf file to determine which memo
+ file version is in use. The main difference between version 3 and 4 is that
+ version 4 will reuse blocks if they become available. Version 3 does not.
+
+ \param cFileTypeByte is an output field and is one of:<br>
+ <br>
+ 0 - none<br>
+ 3 - Dbase III+<br>
+ 4 - Dbase IV<br>
+
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbFile::DetermineXbaseMemoVersion( unsigned char cFileTypeByte ) const {
+
+
+ if( BitSet( cFileTypeByte, 3 ) && BitSet( cFileTypeByte, 7 ))
+ return 4;
+ else if( BitSet( cFileTypeByte, 7 ))
+ return 3;
+
+ return 0;
+}
+/*************************************************************************/
+//! @brief Determine xbase dbf version.
+/*!
+
+ This routine is used to determine which version of the Xbase classes can
+ be used for a given DBF file.<br>
+
+ It attempts to use the highest version compiled into the library.<br>
+
+ References:<br>
+ This routine uses the first byte from the dbf file.<br>
+ Per DBase documentation:<br>
+ Valid dBASE for Windows table file, bits 0-2 indicate version number: 3 for dBASE Level 5, 4 for dBASE Level 7.<br>
+ Bit 3 and bit 7 indicate presence of a dBASE IV or dBASE for Windows memo file;<br>
+ Bits 4-6 indicate the presence of a dBASE IV SQL table;<br>
+ Bit 7 indicates the presence of any .DBT memo file (either a dBASE III PLUS type or a dBASE IV or dBASE for Windows memo file).<br>
+<br>
+ Bachmann spec (used extensively in library build), page 7 - does not match DBase documentation<br>
+<br>
+ returns<br>
+ 0 - unknown<br>
+ 3 - Dbase level 3<br>
+ 4 - Dbase level 4<br>
+ 5 - Dbase Level 5 (future)<br>
+ 7 - Dbase Level 7 (future)<br>
+<br>
+ 1x - Clipper files (future)<br>
+ 2x - Foxbase files (future)<br>
+<br>
+*/
+
+xbInt16 xbFile::DetermineXbaseTableVersion( unsigned char cFileTypeByte ) const {
+
+ xbInt16 iMemoVersion = DetermineXbaseMemoVersion(cFileTypeByte);
+ char cDbfLevel = cFileTypeByte & 0x07;
+
+ #ifdef XB_DBF4_SUPPORT
+ if( cDbfLevel == 3 && iMemoVersion != 3 )
+ return 4;
+ #endif
+
+ #ifdef XB_DBF3_SUPPORT
+ if( cDbfLevel == 3 && iMemoVersion != 4 )
+ return 3;
+ #endif
+
+ return 0;
+}
+
+/*************************************************************************/
+//! @brief Get a portable double value.
+/*!
+
+ This routine returns a double value from an 8 byte character stream,
+ accounting for endian type.
+
+ Converts a double (64 bit floating point) value stored at p from a portable
+ format to the machine format.
+
+ \param p pointer to memory containing the portable double value
+
+ \returns the double value.
+*/
+
+xbDouble xbFile::eGetDouble( const char *p ) const {
+ xbDouble d;
+ const char *sp;
+ char *tp;
+ xbInt16 i;
+
+ tp = (char *) &d;
+ sp = p;
+ if( iEndianType == 'L' )
+ for( i = 0; i < 8; i++ ) *tp++ = *sp++;
+ else
+ {
+ sp+=7;
+ for( i = 0; i < 8; i++ ) *tp++ = *sp--;
+ }
+
+ return d;
+}
+
+/*************************************************************************/
+//! @brief Get a portable long value.
+
+/*!
+ This routine returns a long int value from a 4 byte character stream,
+ accounting for endian type.
+
+ \param p pointer to memory containing the portable long value
+
+ \returns the long value.
+*/
+
+xbInt32 xbFile::eGetInt32( const char *p ) const {
+ xbInt32 l;
+ char *tp;
+ xbInt16 i;
+
+ tp = (char *) &l;
+ if( iEndianType == 'L' )
+ for( i = 0; i < 4; i++ ) *tp++ = *p++;
+ else {
+ p+=3;
+ for( i = 0; i < 4; i++ ) *tp++ = *p--;
+ }
+ return l;
+
+}
+/*************************************************************************/
+//! @brief Get a portable unsigned long value.
+
+/*!
+ This routine returns an unsigned long int value from a 4 byte character stream,
+ accounting for endian type.
+
+ \param p pointer to memory containing the portable long value
+
+ \returns the unsigned long value.
+*/
+
+xbUInt32 xbFile::eGetUInt32( const char *p ) const {
+ xbUInt32 ul;
+ xbInt16 i;
+ char *tp;
+
+ tp = (char *) &ul;
+ if( iEndianType == 'L' )
+ for( i = 0; i < 4; i++ ) *tp++ = *p++;
+ else{
+ p+=3;
+ for( i = 0; i < 4; i++ ) *tp++ = *p--;
+ }
+ return ul;
+}
+
+/*************************************************************************/
+//! @brief Get a portable short value.
+
+/*!
+ This routine returns a short int value from a 2 byte character stream,
+ accounting for endian type.
+
+ \param p pointer to memory containing the portable long value
+
+ \returns the short value.
+*/
+
+xbInt16 xbFile::eGetInt16(const char *p) const {
+ xbInt16 s, i;
+ char *tp;
+ tp = (char *) &s;
+ if( iEndianType == 'L' )
+ for( i = 0; i < 2; i++ ) *tp++ = *p++;
+ else{
+ p++;
+ for( i = 0; i < 2; i++ ) *tp++ = *p--;
+ }
+ return s;
+}
+/*************************************************************************/
+//! @brief Get a portable unsigned short value.
+
+/*!
+ This routine returns a short unsigned int value from a 2 byte character stream,
+ accounting for endian type.
+
+ \param p pointer to memory containing the portable long value
+
+ \returns the short value.
+*/
+
+xbUInt16 xbFile::eGetUInt16(const char *p) const {
+ xbInt16 i;
+ xbUInt16 uI;
+ char *tp;
+
+ tp = (char *) &uI;
+ if( iEndianType == 'L' )
+ for( i = 0; i < 2; i++ ) *tp++ = *p++;
+ else{
+ p++;
+ for( i = 0; i < 2; i++ ) *tp++ = *p--;
+ }
+ return uI;
+}
+
+
+/*************************************************************************/
+//! @brief Write a portable double value to memory location.
+/*!
+ Converts a double (64 bit floating point) value from machine format to a
+ portable format and stores the converted value in the memory referenced
+ by c.
+
+ This routine puts a double value to an 8 byte character stream
+
+ \param c Pointer to memory to hold converted value
+ \param d Input value to be converted
+*/
+
+void xbFile::ePutDouble( char *c, xbDouble d ){
+ const char *sp;
+ char *tp;
+ xbInt16 i;
+
+ tp = c;
+ sp = (const char *) &d;
+ if( iEndianType == 'L' )
+ for( i = 0; i < 8; i++ ) *tp++ = *sp++;
+ else
+ {
+ sp+=7;
+ for( i = 0; i < 8; i++ ) *tp++ = *sp--;
+ }
+ return;
+}
+
+/*************************************************************************/
+//! @brief Write a portable short value to memory location.
+/*!
+ Converts a short (16 bit integer) value from machine format to a
+ portable format and stores the converted value in the memory referenced
+ by c.
+
+ This routine puts a short value to a 2 byte character stream
+
+ \param c Pointer to memory to hold converted value
+ \param s Input value to be converted
+*/
+
+void xbFile::ePutInt16( char * c, xbInt16 s ){
+ const char *sp;
+ char *tp;
+ xbInt16 i;
+
+ tp = c;
+ sp = (const char *) &s;
+
+ if( iEndianType == 'L' )
+ for( i = 0; i < 2; i++ ) *tp++ = *sp++;
+ else{ /* big endian */
+ sp++;
+ for( i = 0; i < 2; i++ ) *tp++ = *sp--;
+ }
+ return;
+}
+/*************************************************************************/
+//! @brief Write a portable unsigned short value to memory location.
+/*!
+ Converts an unsigned short (16 bit integer) value from machine format to a
+ portable format and stores the converted value in the memory referenced
+ by c.
+
+ This routine puts an unsigned short value to a 2 byte character stream
+
+ \param c Pointer to memory to hold converted value
+ \param s Input value to be converted
+*/
+
+void xbFile::ePutUInt16( char * c, xbUInt16 s ){
+ const char *sp;
+ char *tp;
+ xbInt16 i;
+
+ tp = c;
+ sp = (const char *) &s;
+
+ if( iEndianType == 'L' )
+ for( i = 0; i < 2; i++ ) *tp++ = *sp++;
+ else{ /* big endian */
+ sp++;
+ for( i = 0; i < 2; i++ ) *tp++ = *sp--;
+ }
+ return;
+}
+
+/*************************************************************************/
+//! @brief Write a portable long value to memory location.
+/*!
+ Converts a long (32 bit integer) value from machine format to a
+ portable format and stores the converted value in the memory referenced
+ by c.
+
+ This routine puts a long value to a 4 byte character stream.
+
+ \param c Pointer to memory to hold converted value
+ \param l Input value to be converted
+*/
+
+void xbFile::ePutInt32( char * c, xbInt32 l )
+{
+ const char *sp;
+ char *tp;
+ xbInt16 i;
+
+ tp = c;
+ sp = (const char *) &l;
+ if( iEndianType == 'L' )
+ for( i = 0; i < 4; i++ ) *tp++ = *sp++;
+ else {
+ sp+=3;
+ for( i = 0; i < 4; i++ ) *tp++ = *sp--;
+ }
+ return;
+}
+
+
+/*************************************************************************/
+//! @brief Write a portable unsigned long value to memory location.
+/*!
+ Converts an unsigned long (32 bit integer) value from machine format to a
+ portable format and stores the converted value in the memory referenced
+ by c.
+
+ This routine puts an unsigned long value to a 4 byte character stream.
+
+ \param c Pointer to memory to hold converted value
+ \param ul Input value to be converted
+*/
+
+void xbFile::ePutUInt32( char * c, xbUInt32 ul )
+{
+ const char *sp;
+ char *tp;
+ xbInt16 i;
+
+ tp = c;
+ sp = (const char *) &ul;
+ if( iEndianType == 'L' )
+ for( i = 0; i < 4; i++ ) *tp++ = *sp++;
+ else
+ {
+ sp+=3;
+ for( i = 0; i < 4; i++ ) *tp++ = *sp--;
+ }
+ return;
+}
+
+/************************************************************************/
+//! @brief Determines if a file exists.
+/*!
+ \returns xbTrue if file exists<br>
+ xbFalse if file does not exist
+
+*/
+xbBool xbFile::FileExists() const {
+ return FileExists( sFqFileName, 0 );
+}
+/************************************************************************/
+//! @brief Determines if a file exists.
+/*!
+ \param iOption if 1, assume this is a request for a dbf file and
+ check for the a dbt memo file also, returns true if both files are found
+
+ \returns xbTrue if both files exist<br>
+ xbFalse if file does not exist
+
+*/
+xbBool xbFile::FileExists( xbInt16 iOption ) const {
+ return FileExists( sFqFileName, iOption );
+}
+
+/************************************************************************/
+//! @brief Determines if a file exists.
+/*!
+ \param sFileName - file name to check for
+
+ \returns xbTrue if file exists<br>
+ xbFalse if file does not exist
+*/
+
+xbBool xbFile::FileExists(const xbString &sFileName ) const {
+ return FileExists( sFileName, 0 );
+}
+
+/************************************************************************/
+//! @brief Determines if a file exists.
+/*!
+ \param sFileName - file name to check for
+ \param iOption if 1, assume this is a request for a dbf file and
+ check for the a dbt memo file also, returns true if both files are found
+
+ \returns xbTrue if both dbf and dbt files exist<br>
+ xbFalse if file does not exist
+*/
+
+xbBool xbFile::FileExists( const xbString & sFileName, xbInt16 iOption ) const {
+
+ struct stat buffer;
+ if(( stat( sFileName.Str(), &buffer ) != 0 )){
+ return xbFalse;
+ }
+
+ #ifdef XB_MEMO_SUPPORT
+ if( iOption == 1 ){
+ xbString sFileName2 = sFileName;
+
+ if( sFileName2[sFileName2.Len()] == 'F' )
+ sFileName2.PutAt( sFileName2.Len(), 'T' );
+ else
+ sFileName2.PutAt( sFileName2.Len(), 't' );
+
+ if(( stat( sFileName2.Str(), &buffer) != 0 ))
+ return xbFalse;
+ }
+ #endif
+ return xbTrue;
+}
+
+/************************************************************************/
+//! @brief Determines if file is open.
+/*!
+
+ \returns xbTrue if file is open<br>
+ xbFalse if file is not open
+*/
+
+xbBool xbFile::FileIsOpen() const {
+ return bFileOpen;
+}
+/************************************************************************/
+//! @brief Get the block size.
+/*!
+ \returns Block Size
+*/
+
+xbUInt32 xbFile::GetBlockSize() const {
+ return ulBlockSize;
+}
+
+/************************************************************************/
+//! @brief Get the directory name.
+/*!
+ \returns the directory name of the file
+*/
+
+const xbString & xbFile::GetDirectory() const {
+ return sDirectory;
+}
+
+/************************************************************************/
+//! @brief Get the directory part of the file name.
+/*!
+ \param sFileDirPartOut - the returned directory name
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbFile::GetFileDirPart( xbString & sFileDirPartOut ) const {
+ return GetFileDirPart( sFqFileName, sFileDirPartOut );
+}
+
+/************************************************************************/
+//! @brief Get the directory part of the file name.
+/*!
+ \param sCompleteFileNameIn - a fully qualfied input file name
+ \param sFileDirPartOut - the returned directory name part out of sCompleteFileNameIn
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+
+xbInt16 xbFile::GetFileDirPart( const xbString & sCompleteFileNameIn, xbString & sFileDirPartOut ) const {
+
+ sFileDirPartOut = sCompleteFileNameIn;
+ sFileDirPartOut.SwapChars( '\\', '/' );
+ xbUInt32 iPos = sFileDirPartOut.GetLastPos( '/' );
+
+ if( iPos > 0 ){
+ xbString sTemp = sFileDirPartOut;
+ sFileDirPartOut.Assign( sTemp, 1, iPos );
+ return XB_NO_ERROR;
+ }
+ return XB_INVALID_DATA;
+}
+
+/************************************************************************/
+//! @brief Get the extension part of the file name.
+/*!
+ \param sFileNameExtOut - the returned extension part out of sCompleteFileNameIn
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbFile::GetFileExtPart( xbString & sFileNameExtOut ) const {
+ return GetFileExtPart( sFqFileName, sFileNameExtOut );
+}
+
+/************************************************************************/
+//! @brief Get the extension part of the file name.
+/*!
+ \param sCompleteFileNameIn - a fully qualfied input file name
+
+ \param sFileExtPartOut - the returned directory name part out of sCompleteFileNameIn
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+
+xbInt16 xbFile::GetFileExtPart( const xbString & sCompleteFileNameIn, xbString & sFileExtPartOut ) const {
+
+
+ sFileExtPartOut = sCompleteFileNameIn;
+ xbUInt32 iPos = sFileExtPartOut.GetLastPos( '.' );
+ if( iPos > 0 ){ /* get rid of the directory part of the name */
+ sFileExtPartOut.Ltrunc( iPos );
+ return XB_NO_ERROR;
+ }
+ return XB_INVALID_DATA;
+}
+/************************************************************************/
+//! @brief Get the time of last file modification timestamp as reported by the OS.
+/*!
+ \param mtime - returned time of last file modification
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbFile::GetFileMtime( time_t &mtime ){
+
+ struct stat buffer;
+ if( stat( sFqFileName.Str(), &buffer ))
+ return XB_FILE_NOT_FOUND;
+ else{
+ mtime = buffer.st_mtime;
+ return XB_NO_ERROR;
+ }
+}
+/************************************************************************/
+//! @brief Get the file name.
+/*!
+ \returns the file name portion of the file
+*/
+
+const xbString & xbFile::GetFileName() const {
+ return sFileName;
+}
+
+
+/************************************************************************/
+//! @brief Get the name part of the file name.
+/*!
+ \param sFileNamePartOut - the returned file name part out of sCompleteFileNameIn
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+
+xbInt16 xbFile::GetFileNamePart( xbString & sFileNamePartOut ) const {
+ return GetFileNamePart( sFqFileName, sFileNamePartOut );
+}
+
+/************************************************************************/
+//! @brief Get the name part of the file name.
+/*!
+ \param sCompleteFileNameIn - a fully qualified input file name
+ \param sFileNamePartOut - the returned file name part out of sCompleteFileNameIn
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+//*********** fixme should this be static?????
+
+xbInt16 xbFile::GetFileNamePart( const xbString & sCompleteFileNameIn, xbString & sFileNamePartOut ) const {
+ /* extract the file name part out of the string */
+
+ sFileNamePartOut = sCompleteFileNameIn;
+ sFileNamePartOut.SwapChars( '\\', '/' );
+ xbUInt32 iPos = sFileNamePartOut.GetLastPos( '/' );
+ if( iPos > 0 ) /* get rid of the directory part of the name */
+ sFileNamePartOut.Ltrunc( iPos );
+ iPos = sFileNamePartOut.Pos( '.' );
+ if( iPos > 0 ){ /* get rid of the extension part of the name */
+ xbString sTemp = sFileNamePartOut;
+ sFileNamePartOut.Assign( sTemp, 1, iPos-1 );
+ }
+ return XB_NO_ERROR;
+}
+
+
+/************************************************************************/
+//! @brief Get the size of the file as reported by the OS.
+/*!
+ \param ullFileSize - unsigned long long field as output
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbFile::GetFileSize( xbUInt64 &ullFileSize ){
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+
+ try{
+
+ if(( iRc = xbFseek( 0, SEEK_END )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ ullFileSize = xbFtell();
+ }
+
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbFile::GetFileSize() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/************************************************************************/
+//! @brief Get the file type aka Capitalized file extension
+/*!
+ \param sFileTypeOut - the returned extension part out of sCompleteFileNameIn
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbFile::GetFileType( xbString & sFileTypeOut ) const {
+
+ xbInt16 iRc = GetFileExtPart( sFqFileName, sFileTypeOut );
+ sFileTypeOut.ToUpperCase();
+ return iRc;
+}
+/************************************************************************/
+//! @brief Get the fully qualified file name.
+/*!
+ \returns the fully qualfied name of the file
+*/
+
+const xbString & xbFile::GetFqFileName() const {
+ return sFqFileName;
+}
+
+/************************************************************************/
+//! @brief Get the open mode of the file.
+/*!
+ \returns XB_READ<br>
+ XB_READ_WRITE<br>
+ XB_WRITE<BR>
+*/
+
+xbInt16 xbFile::GetOpenMode() const {
+ return iOpenMode;
+}
+
+/************************************************************************/
+//! @brief Get the share mode of the file.
+/*!
+ \returns XB_SINGLE_USER - (file buffering on><br>
+ XB_MULTI_USER - (file buffering off)<br>
+*/
+
+xbInt16 xbFile::GetShareMode() const {
+ return iShareMode;
+}
+
+/************************************************************************/
+//! @brief Get the file type byte and version of the dbf file.
+/*!
+
+ Pull the first bye off the DBF file for further inspection.
+ First byte has various bits set to determine what the file format is.
+
+ \param sFileName - Name of file to examine
+ \param iVersion - Returned file version
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbFile::GetXbaseFileTypeByte( const xbString &sFileName, xbInt16 &iVersion )
+{
+ unsigned char cFileTypeByte;
+ return GetXbaseFileTypeByte( sFileName, cFileTypeByte, iVersion );
+}
+
+/************************************************************************/
+//! @brief Get the file type byte and version of the dbf file.
+/*!
+ Pull the first bye off the DBF file for further inspection.
+ First byte has various bits set to determine what the file format is.
+
+ \param sFileName - Name of file to examine
+ \param cFileTypeByte - Retruned first byte of dbf file
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+
+xbInt16 xbFile::GetXbaseFileTypeByte( const xbString &sFileName, unsigned char &cFileTypeByte )
+{
+ xbInt16 iVersion;
+ return GetXbaseFileTypeByte( sFileName, cFileTypeByte, iVersion );
+}
+
+/************************************************************************/
+//! @brief Get the file type byte and version of the dbf file.
+/*!
+ Pull the first bye off the DBF file for further inspection.
+ First byte has various bits set to determine what the file format is.
+
+
+ \param sFileName - Name of file to examine
+ \param cFileTypeByte - Returned first byte of dbf file
+ \param iVersion - Returned file version
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbFile::GetXbaseFileTypeByte( const xbString &sFileName, unsigned char &cFileTypeByte, xbInt16 &iVersion ){
+ xbInt16 iErrorStop = 0;
+ xbInt16 iRc = XB_NO_ERROR;
+ size_t stRc;
+ FILE *tfp;
+
+ try{
+
+ iVersion = 0;
+ cFileTypeByte = 0x00;
+ #ifdef HAVE__FSOPEN_F
+ // 0x40 is SH_DENYNO or _SH_DENYNO
+ if(( tfp = _fsopen( sFileName.Str(), "r", 0x40 )) == NULL ){
+ iErrorStop = 100;
+ iRc = XB_OPEN_ERROR;
+ throw iRc;
+ }
+ #else
+ if(( tfp = fopen( sFileName.Str(), "r" )) == NULL ){
+ iErrorStop = 110;
+ iRc = XB_OPEN_ERROR;
+ throw iRc;
+ }
+ #endif
+
+ #ifdef HAVE_FSEEKO_F
+ iRc = fseeko( tfp, 0, SEEK_SET );
+ #else
+ iRc = fseek( tfp, 0, SEEK_SET );
+ #endif
+
+ if( iRc != 0 ){
+ iErrorStop = 120;
+ iRc = XB_SEEK_ERROR;
+ throw iRc;
+ }
+ stRc = fread( &cFileTypeByte, (size_t) 1, (size_t) 1, tfp );
+ if( stRc != (size_t) 1 ){
+ iErrorStop = 130;
+ iRc = XB_READ_ERROR;
+ throw iRc;
+ }
+ iRc = XB_NO_ERROR;
+ fclose( tfp );
+ iVersion = DetermineXbaseTableVersion( cFileTypeByte );
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbFile::GetXbaseFileType() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/************************************************************************/
+//! @brief Determines status of file extension.
+/*!
+
+ \param sFileName - Name of file to examine
+ \param iOption - Inspection type<br>
+ 1 check for DBF<br>
+ 2 check for NDX<br>
+ 3 check for MDX<br>
+ 4 check for NTX<br>
+
+ \returns 0 if suffix found<br>
+ 1 if suffix not found, lower case<br>
+ 2 is suffix not found, upper case<br>
+
+*/
+
+xbInt16 xbFile::NameSuffixMissing( const xbString & sFileName, xbInt16 iOption ) const {
+
+ xbUInt32 ulLen = sFileName.Len();
+ if( ulLen <= 4 ){
+ if( sFileName[ulLen] >= 'A' && sFileName[ulLen] <= 'Z' )
+ return 2;
+ else
+ return 1;
+ }
+ if( iOption == 1 && sFileName[ulLen-3] == '.' &&
+ ( sFileName[ulLen-2] == 'd' || sFileName[ulLen-2] == 'D' ) &&
+ ( sFileName[ulLen-1] == 'b' || sFileName[ulLen-1] == 'B' ) &&
+ ( sFileName[ulLen] == 'f' || sFileName[ulLen] == 'F' )
+ )
+ return 0;
+ if( iOption == 2 && sFileName[ulLen-3] == '.' &&
+ ( sFileName[ulLen-2] == 'n' || sFileName[ulLen-2] == 'N' ) &&
+ ( sFileName[ulLen-1] == 'd' || sFileName[ulLen-1] == 'D' ) &&
+ ( sFileName[ulLen] == 'x' || sFileName[ulLen] == 'X' )
+ )
+ return 0;
+ if( iOption == 3 && sFileName[ulLen-3] == '.' &&
+ ( sFileName[ulLen-2] == 'm' || sFileName[ulLen-2] == 'M' ) &&
+ ( sFileName[ulLen-1] == 'd' || sFileName[ulLen-1] == 'D' ) &&
+ ( sFileName[ulLen] == 'x' || sFileName[ulLen] == 'X' )
+ )
+ return 0;
+ if( iOption == 4 && sFileName[ulLen-3] == '.' &&
+ ( sFileName[ulLen-2] == 'n' || sFileName[ulLen-2] == 'N' ) &&
+ ( sFileName[ulLen-1] == 't' || sFileName[ulLen-1] == 'T' ) &&
+ ( sFileName[ulLen] == 'x' || sFileName[ulLen] == 'X' )
+ )
+ return 0;
+ // next line might be problematic if file naem has mixed case and extension is missing
+ if( sFileName[ulLen-4] >= 'A' && sFileName[ulLen-4] <= 'Z' )
+ return 2;
+ else
+ return 1;
+}
+
+/***********************************************************************/
+//! @brief Read a block of data from file.
+/*!
+
+ \param ulBlockNo - block number to read
+ \param lReadSize - size of data to read at block location, set to 0 to read blocksize
+ \param *buf - pointer to buffer to write output data, assumed to be previosuly allocated
+ and large enough to contain data
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+
+*/
+
+xbInt16 xbFile::ReadBlock( xbUInt32 ulBlockNo, size_t lReadSize, void * buf ){
+ return ReadBlock( ulBlockNo, ulBlockSize, lReadSize, buf );
+}
+
+/***********************************************************************/
+//! @brief Read a block of data from file.
+/*!
+
+ \param ulBlockNo - block number to read
+ \param ulBlockSize - block size
+ \param lReadSize - size of data to read at block location, set to 0 to read blocksize
+ \param buf - pointer to buffer to write output data, assumed to be previosuly allocated
+ and large enough to contain data
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+
+*/
+xbInt16 xbFile::ReadBlock( xbUInt32 ulBlockNo, xbUInt32 ulBlockSize, size_t lReadSize, void * buf ){
+
+ xbInt16 iErrorStop = 0;
+ xbInt16 iRc = XB_NO_ERROR;
+
+ try{
+ if( ulBlockSize <= 0 ){
+ iErrorStop = 100;
+ iRc = XB_INVALID_BLOCK_SIZE;
+ throw iRc;
+ }
+
+ if(( iRc = xbFseek(((xbInt64) ulBlockNo*ulBlockSize ), SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ iRc = XB_SEEK_ERROR;
+ throw iRc;
+ }
+
+ if( lReadSize <= 0 )
+ lReadSize = ulBlockSize;
+
+ if(( iRc = xbFread( buf, lReadSize, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ iRc = XB_READ_ERROR;
+ throw iRc;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbFile::ReadBlock() Exception Caught. Error Stop = [%d] iRc = [%d] BlkNo=[%ld] BlkSize=[%ld] ReadSize=[%ld]", iErrorStop, iRc, ulBlockNo, ulBlockSize, lReadSize );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+/************************************************************************/
+//! @brief Set the block size.
+/*!
+
+ \param ulBlockSize - unsigned long block size, divisible by 512
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbFile::SetBlockSize( xbUInt32 ulBlockSize ){
+ if( ulBlockSize %512 != 0 )
+ return XB_INVALID_BLOCK_SIZE;
+
+ this->ulBlockSize = ulBlockSize;
+ return XB_NO_ERROR;
+}
+/************************************************************************/
+//! @brief Set the directory.
+/*!
+ \param sDirectory - Valid directory name
+*/
+
+void xbFile::SetDirectory( const xbString & sDirectory ){
+
+ this->sDirectory = sDirectory;
+ char cLastChar = sDirectory[sDirectory.Len()];
+ if( cLastChar != '/' && cLastChar != '\\' )
+ sFqFileName.Sprintf( "%s/%s", sDirectory.Str(), sFileName.Str());
+ else
+ sFqFileName.Sprintf( "%s%s", sDirectory.Str(), sFileName.Str());
+
+ #ifdef WIN32
+ sFqFileName.SwapChars( '/', '\\' );
+ #else
+ sFqFileName.SwapChars( '\\', '/' );
+ #endif
+}
+
+/************************************************************************/
+//! @brief Set the filename.
+/*!
+ This routine builds out two internal variables from the input file name<br>
+ sFileName - the file name part<br>
+ sFqFileName - the fully qualified file name<br>
+
+
+ \param sFileName - Input file name
+*/
+void xbFile::SetFileName( const xbString & sFileName ){
+
+ if( sFileName == "" ){
+ sFqFileName = "";
+ return;
+ }
+
+ char cPathSep = sFileName.GetPathSeparator();
+
+ if( cPathSep ){
+
+ xbString sName;
+ xbString sExt;
+ // GetFileDirPart( this->sDirectory );
+ GetFileNamePart( sFileName, sName );
+ GetFileExtPart( sFileName, sExt );
+ this->sFileName.Sprintf( "%s.%s", sName.Str(), sExt.Str());
+ sFqFileName = sFileName;
+
+ } else {
+
+ this->sFileName = sFileName;
+ if( sDirectory.Len() == 0 ){
+ sDirectory = GetDataDirectory();
+ char cLastChar = sDirectory[sDirectory.Len()];
+ if( cLastChar != '/' && cLastChar != '\\' )
+ sFqFileName.Sprintf( "%s/%s", sDirectory.Str(), sFileName.Str() );
+ else
+ sFqFileName = sDirectory + sFileName;
+ }
+ else{
+ char cLastChar = sDirectory[sDirectory.Len()];
+ if( cLastChar != '/' && cLastChar != '\\' )
+ sFqFileName.Sprintf( "%s/%s", sDirectory.Str(), sFileName.Str() );
+ else
+ sFqFileName = sDirectory + sFileName;
+ }
+ }
+
+ #ifdef WIN32
+ sFqFileName.SwapChars( '/', '\\' );
+ #else
+ sFqFileName.SwapChars( '\\', '/' );
+ #endif
+}
+
+/************************************************************************/
+//! @brief Set the fully qualifed filename.
+/*!
+ \param sFqFileName - Fully qualifed input file name
+*/
+
+void xbFile::SetFqFileName( const xbString & sFqFileName ){
+ this->sFqFileName = sFqFileName;
+
+ xbString sDir;
+ xbString sName;
+ xbString sExt;
+
+ GetFileDirPart ( sFqFileName, sDir );
+ GetFileNamePart( sFqFileName, sName );
+ GetFileExtPart ( sFqFileName, sExt );
+
+ sDirectory = sDir;
+ sFileName.Sprintf( "%s.%s", sName.Str(), sExt.Str() );
+
+ #ifdef WIN32
+ this->sDirectory.SwapChars ( '/', '\\' );
+ this->sFqFileName.SwapChars( '/', '\\' );
+ #else
+ this->sDirectory.SwapChars ( '\\', '/' );
+ this->sFqFileName.SwapChars( '\\', '/' );
+ #endif
+}
+
+/************************************************************************/
+//! @brief Set Home Folders.
+/*!
+ Create xbase64 log, data and temp folders in the home directory for current usre.
+
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbFile::SetHomeFolders(){
+
+ xbInt16 iErrorStop = 0;
+ xbInt16 iRc = XB_NO_ERROR;
+ xbString sHomeDir;
+ char cPathSeparator;
+ xbString sDflt;
+
+ try{
+
+ GetHomeDir( sHomeDir );
+ //std::cout << "CreateHomeFolders() home dir = [" << sHomeDir.Str() << "]\n";
+
+ if( FileExists( sHomeDir ) == xbFalse ){
+ iErrorStop = 100;
+ iRc = XB_DIRECTORY_ERROR;
+ throw iRc;
+ }
+
+ #ifdef WIN32
+ cPathSeparator = '\\';
+ #else
+ cPathSeparator = '/';
+ #endif
+ sDflt.Sprintf( ".%c", cPathSeparator );
+ // set the default folders just in case later steps fail
+ xbase->SetDataDirectory( sDflt );
+ #ifdef XB_LOGGING_SUPPORT
+ xbase->SetLogDirectory( sDflt );
+ #endif
+
+ if( sHomeDir[sHomeDir.Len()] != cPathSeparator )
+ sHomeDir += cPathSeparator;
+
+ xbString sWork( sHomeDir );
+ sWork += "xbase64";
+
+ if( FileExists( sWork ) == xbFalse ){
+ #ifdef WIN32
+ if( CreateDirectory( sWork.Str(), NULL ) == 0 ){
+ iErrorStop = 130;
+ iRc = XB_DIRECTORY_ERROR;
+ throw iRc;
+ }
+ #else
+ // 0777 mode is correct, the mode will be modified by the user's umask
+ if( mkdir( sWork.Str(), 0777 ) == -1 ){
+ iErrorStop = 140;
+ iRc = XB_DIRECTORY_ERROR;
+ throw iRc;
+ }
+ #endif
+ }
+
+ #ifdef XB_LOGGING_SUPPORT
+ sWork.Sprintf( "%sxbase64%clogs", sHomeDir.Str(), cPathSeparator );
+ // std::cout << "logdir = " << sWork.Str() << "\n";
+
+ if( FileExists( sWork ) == xbFalse ){
+ #ifdef WIN32
+ if( CreateDirectory( sWork.Str(), NULL ) == 0 ){
+ iErrorStop = 110;
+ iRc = XB_DIRECTORY_ERROR;
+ throw iRc;
+ }
+ #else
+ if( mkdir( sWork.Str(), 0777 ) == -1 ){
+ iErrorStop = 120;
+ iRc = XB_DIRECTORY_ERROR;
+ throw iRc;
+ }
+ #endif
+ }
+ xbase->SetLogDirectory( sWork );
+ #endif // XB_LOGGING_SUPPORT
+
+ sWork.Sprintf( "%sxbase64%cdata", sHomeDir.Str(), cPathSeparator );
+ // std::cout << "datadir = " << sWork.Str() << "\n";
+ if( FileExists( sWork ) == xbFalse ){
+ #ifdef WIN32
+ if( CreateDirectory( sWork.Str(), NULL ) == 0 ){
+ iErrorStop = 130;
+ iRc = XB_DIRECTORY_ERROR;
+ throw iRc;
+ }
+ #else
+ if( mkdir( sWork.Str(), 0777 ) == -1 ){
+ iErrorStop = 140;
+ iRc = XB_DIRECTORY_ERROR;
+ throw iRc;
+ }
+ #endif
+ }
+
+ sWork.Sprintf( "%sxbase64%ctemp%c", sHomeDir.Str(), cPathSeparator, cPathSeparator );
+ // std::cout << "tempdir = " << sWork.Str() << "\n";
+ if( FileExists( sWork ) == xbFalse ){
+ #ifdef WIN32
+ if( CreateDirectory( sWork.Str(), NULL ) == 0 ){
+ iErrorStop = 150;
+ iRc = XB_DIRECTORY_ERROR;
+ throw iRc;
+ }
+ #else
+ if( mkdir( sWork.Str(), 0777 ) == -1 ){
+ iErrorStop = 160;
+ iRc = XB_DIRECTORY_ERROR;
+ throw iRc;
+ }
+ #endif
+ }
+ xbase->SetTempDirectory( sWork );
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbFile::CreateHomeFolders() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/************************************************************************/
+//! @brief Write a block of data to file.
+/*!
+
+ \param ulBlockNo - block number to write
+ \param lWriteSize - size of data to write, set to 0 to write blocksize
+ \param *buf - pointer to buffer of data to be written
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+
+*/
+xbInt16 xbFile::WriteBlock( xbUInt32 ulBlockNo, size_t lWriteSize, void * buf ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+
+ try{
+
+ if( ulBlockSize == 0 ){
+ iErrorStop = 100;
+ iRc = XB_INVALID_BLOCK_SIZE;
+ throw iRc;
+ }
+ if( lWriteSize <= 0 )
+ lWriteSize = ulBlockSize;
+ if(( iRc = xbFseek(( (xbInt64) ulBlockNo*ulBlockSize), SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ if(( iRc = xbFwrite( buf, lWriteSize, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbFile::WriteBlock() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/************************************************************************/
+//! @brief Xbase wrapper for standard libary fclose.
+/*!
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbFile::xbFclose(){
+
+ int iRc = 0;
+ if( bFileOpen ){
+ iRc = fclose( fp );
+ if( iRc != 0 ){
+ return XB_CLOSE_ERROR;
+ }
+ else{
+ bFileOpen = xbFalse;
+ }
+ iFileNo = 0;
+ }
+ return XB_NO_ERROR;
+}
+
+
+
+/************************************************************************/
+//! @brief Xbase wrapper for standard libary feof.
+/*!
+ \returns non zero if end-of-file is set for the stream.
+*/
+xbInt16 xbFile::xbFeof(){
+ return feof( fp );
+}
+
+/************************************************************************/
+//! @brief Xbase wrapper for standard libary fflush.
+/*!
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbFile::xbFflush() {
+
+ if( fflush( fp ) )
+ return XB_WRITE_ERROR;
+ else
+ return XB_NO_ERROR;
+}
+
+/************************************************************************/
+//! @brief Xbase wrapper for standard libary fgetc.
+/*!
+ \param c - output integer returned by fgetc
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbFile::xbFgetc( xbInt32 &c ) {
+
+ int i;
+
+ i = fgetc( fp );
+ if( i == EOF )
+ return XB_EOF;
+
+ c = i;
+ return XB_NO_ERROR;
+}
+
+/************************************************************************/
+//! @brief Xbase wrapper for standard libary fgetc.
+/*!
+ \param c - output character returned by fgetc
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbFile::xbFgetc( char &c ) {
+
+ int i;
+ i = fgetc( fp );
+ if( i == EOF )
+ return XB_EOF;
+
+ c = (char) i;
+ return XB_NO_ERROR;
+}
+/************************************************************************/
+//! @brief Xbase wrapper for standard libary fgets.
+/*!
+ \param lSize - reads in at most, one character less than lSize
+ \param s - an xbString containing data returned by fseek
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbFile::xbFgets( size_t lSize, xbString &s ) {
+
+ s = "";
+ if( feof( fp ))
+ return XB_EOF;
+
+ char *sBuf = (char *) malloc( lSize + 1 );
+
+ if( fgets( sBuf, (xbInt32) lSize, fp ) == NULL ){
+ free( sBuf );
+ return XB_EOF;
+ }
+ s.Set( sBuf );
+ free( sBuf );
+ return XB_NO_ERROR;
+}
+/************************************************************************/
+//! @brief Xbase wrapper for standard libary fopen.
+/*!
+
+ This routine supports all the standard C library open modes. The Xbase routines only
+ use "r" and "r+b".
+
+ \param sOpenMode
+ <table>
+ <tr><th>OpenMode<th>Description
+ <tr><td>r<td>Reading
+ <tr><td>r+<td>Reading and Writing
+ <tr><td>w<td>Open for writing. Truncate to zero bytes if it exists
+ <tr><td>w+<td>Open for reading and writing, truncate to zero bytes if it exists
+ <tr><td>a<td>Open for append
+ <tr><td>a+<td>Open for reading and writing (at end).
+ </table>
+ The mode can also include the letter "b" for binary ie; "r+b". The "b" is ignored on
+ POSIX compliant systems, but is included for cross platform compatibility.
+ \param sFileName File name to open
+ \param iShareMode
+ XB_SINGLE_USER<br>
+ XB_MULTI_USER<br>
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbFile::xbFopen( const xbString &sOpenMode, const xbString &sFileName, xbInt16 iShareMode ) {
+ if( sFileName == "" || sFqFileName == "" )
+ SetFileName( sFileName );
+ return xbFopen( sOpenMode, iShareMode );
+}
+
+/************************************************************************/
+//! @brief Xbase wrapper for standard libary fopen.
+/*!
+
+ This routine supports all the standard C library open modes. The Xbase routines only
+ use "r" and "r+".
+
+
+ \param sOpenMode
+ <table>
+ <tr><th>OpenMode<th>Description
+ <tr><td>r<td>Reading
+ <tr><td>r+<td>Reading and Writing
+ <tr><td>w<td>Open for writing. Truncate to zero bytes if it exists
+ <tr><td>w+<td>Open for reading and writing, truncate to zero bytes if it exists
+ <tr><td>a<td>Open for append
+ <tr><td>a+<td>Open for reading and writing (at end).
+ </table>
+ The mode can also include the letter "b" for binary ie; "r+b". The "b" is ignored on
+ POSIX compliant systems, but is included for cross platform compatibility.
+ \param iShareMode
+ XB_SINGLE_USER<br>
+ XB_MULTI_USER<br>
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbFile::xbFopen( const xbString & sOpenMode, xbInt16 iShareMode ) {
+
+ #ifdef HAVE__FSOPEN_F
+ if(( fp = _fsopen( sFqFileName.Str(), sOpenMode.Str(), 0x40 )) != NULL ){
+ #else
+ if(( fp = fopen( sFqFileName.Str(), sOpenMode.Str())) != NULL ){
+ #endif
+
+ if( sOpenMode == "r" )
+ iOpenMode = XB_READ;
+ else if( sOpenMode == "w" )
+ iOpenMode = XB_WRITE;
+ else
+ iOpenMode = XB_READ_WRITE;
+
+ bFileOpen = xbTrue;
+ this->iShareMode = iShareMode;
+
+ #ifdef HAVE__FILENO_F
+ iFileNo = _fileno( fp );
+ #else
+ iFileNo = fileno( fp );
+ #endif
+
+ #ifdef HAVE_SETENDOFFILE_F
+ //used by visual studio, 32 bit
+ fHandle = (HANDLE) _get_osfhandle( iFileNo );
+ #endif
+
+ #ifdef XB_LOCKING_SUPPORT
+ if( iShareMode )
+ xbFTurnOffFileBuffering();
+ #endif
+
+ return XB_NO_ERROR;
+ }
+ else
+ return XB_OPEN_ERROR;
+}
+/************************************************************************/
+//! @brief Xbase wrapper for standard libary fopen.
+/*!
+ \param iOpenMode
+ XB_READ<br>
+ XB_READ_WRITE<br>
+ \param iShareMode
+ XB_SINGLE_USER<br>
+ XB_MULTI_USER<br>
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbFile::xbFopen( xbInt16 iOpenMode, xbInt16 iShareMode ) {
+ this->iOpenMode = iOpenMode;
+ if( iOpenMode == XB_READ_WRITE )
+ return xbFopen( "r+b", iShareMode );
+ else if( iOpenMode == XB_READ )
+ return xbFopen( "r", iShareMode );
+ else
+ return XB_INVALID_OPTION;
+}
+
+/************************************************************************/
+//! @brief Xbase wrapper for standard libary fputc.
+/*!
+ \param c Character to write
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+
+xbInt16 xbFile::xbFputc( xbInt32 c ) {
+ return xbFputc( c, 1 );
+}
+
+/************************************************************************/
+//! @brief Xbase wrapper for standard libary fputc.
+/*!
+ \param c Character to write
+ \param iNoOfTimes Number of times to write the character
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+
+xbInt16 xbFile::xbFputc( xbInt32 c, xbInt32 iNoOfTimes ) {
+
+ for( xbInt32 l = 0; l < iNoOfTimes; l++ )
+ if( fputc( c, fp ) != (int) c )
+ return XB_WRITE_ERROR;
+
+ return XB_NO_ERROR;
+}
+
+/************************************************************************/
+//! @brief Xbase wrapper for standard libary fputs.
+/*!
+ \param s xbString to write to file
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbFile::xbFputs( const xbString & s ){
+ if( fputs( s.Str(), fp ) < 0 )
+ return XB_WRITE_ERROR;
+ else
+ return XB_NO_ERROR;
+}
+
+/************************************************************************/
+//! @brief Xbase wrapper for standard libary fread.
+/*!
+ \param p Pointer to data to write
+ \param size size of write
+ \param nmemb Number of times to read it
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbFile::xbFread( void *p, size_t size, size_t nmemb ) {
+
+ size_t iRc;
+ iRc = fread( p, size, nmemb, fp );
+ if( iRc == nmemb )
+ return XB_NO_ERROR;
+ else
+ return XB_READ_ERROR;
+}
+
+/************************************************************************/
+//! @brief Xbase wrapper for standard libary fseek.
+/*!
+ \param lOffset Position in file to seek to
+ \param iWhence SEEK_SET - from beginning of file<br>
+ SEEK_CUR - from current position<br>
+ SEEK_END - from end of file<br>
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbFile::xbFseek( xbInt64 lOffset, xbInt32 iWhence ) {
+
+ xbInt32 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ try {
+
+ #if defined(HAVE_FSEEKO_F)
+ iRc = fseeko( fp, lOffset, iWhence );
+ if( iRc != 0 ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+
+ #elif defined(HAVE__FSEEKI64_F)
+ iRc = _fseeki64( fp, lOffset, iWhence );
+ if( iRc != 0 ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ #else
+ #ifdef XB_PLATFORM_32
+ /* if request is larger than 2 gig,this is a part of a locking request,
+ assuming offset is less than 4 gig, split the request into 2 fseek calls */
+ if( lOffset > 2147483647 && iWhence == SEEK_SET ){
+ /* move forward max amt - 2G */
+ if(( iRc = fseek( fp, 2147483647, SEEK_SET )) != 0 ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ lOffset -= 2147483647;
+ iWhence = SEEK_CUR;
+ }
+ #endif
+ iRc = fseek( fp, (long) lOffset, iWhence );
+ if( iRc != 0 ){
+ iErrorStop = 310;
+ throw iRc;
+ }
+ #endif
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbFile::xbFseek() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ iRc = XB_SEEK_ERROR;
+ }
+ return iRc;
+}
+
+/************************************************************************/
+//! @brief Xbase wrapper for standard libary ftell.
+/*!
+ Returns the current file position.
+ \returns Current file position.
+*/
+
+size_t xbFile::xbFtell() {
+ return (size_t) ftell( fp );
+}
+
+/************************************************************************/
+//! @brief Turn off file buffering.
+/*!
+ Turns off file buffering. File buffering can't be used while in multi user mode.
+
+*/
+
+void xbFile::xbFTurnOffFileBuffering() {
+ setvbuf( fp, NULL, _IONBF, 0 );
+}
+
+/************************************************************************/
+//! @brief Xbase wrapper for standard libary fwrite.
+/*!
+ \param p Pointer to data buffer to write
+ \param size Size of data to write
+ \param nmemb Number of times to write data buffer
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbFile::xbFwrite( const void *p, size_t size, size_t nmemb ) {
+
+ size_t iRc;
+ iRc = fwrite( p, size, nmemb, fp );
+ if( iRc == nmemb )
+ return XB_NO_ERROR;
+ else
+ return XB_READ_ERROR;
+}
+
+/************************************************************************/
+//! @brief Read file until a particular character is encountered on input stream.
+/*!
+ This routine will read until cDelim is encountered or eof, which ever occurs first.
+
+ \param cDelim Delimiter to stop writing at.
+ \param sOut Output xbString containing data read
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbFile::xbReadUntil( const char cDelim, xbString &sOut ){
+
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ char c;
+
+ try{
+ sOut = "";
+ if(( iRc = xbFgetc( c )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ sOut = c;
+ while( iRc == XB_NO_ERROR && c != cDelim ){
+ if(( iRc = xbFgetc( c )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ sOut += c;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbFile::xbReadUntil() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/************************************************************************/
+//! @brief Delete file.
+/*!
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbFile::xbRemove() {
+ return xbRemove( sFqFileName.Str(), 0 );
+}
+
+/************************************************************************/
+//! @brief Delete file.
+/*!
+ \param sFileNameIn Name of file to delete
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbFile::xbRemove( const xbString & sFileNameIn ) {
+ return xbRemove( sFileNameIn, 0 );
+}
+
+
+/************************************************************************/
+//! @brief Delete file.
+/*!
+ \param sFileNameIn Name of file to delete
+ \param iOption If Set to 1, assume this is a delete request for a dbf file, and should rename the dbt file also
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbFile::xbRemove( const xbString & sFileNameIn, xbInt16 iOption ) {
+
+ xbInt32 iRc = remove( sFileNameIn.Str());
+
+ if( iRc != 0 )
+ return XB_DELETE_FAILED;
+
+ if( iOption == 1 ){
+ xbString sFileName2 = sFileNameIn;
+
+ if( sFileName2[sFileName2.Len()] == 'F' )
+ sFileName2.PutAt( sFileName2.Len(), 'T' );
+ else
+ sFileName2.PutAt( sFileName2.Len(), 't' );
+
+ iRc = remove( sFileName2.Str());
+ if( iRc != 0 )
+ return XB_DELETE_FAILED;
+ }
+
+ return XB_NO_ERROR;
+}
+
+/************************************************************************/
+//! @brief Rename file.
+/*!
+ \param sOldName Original file name
+ \param sNewName New file name
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbFile::xbRename( const xbString & sOldName, const xbString & sNewName ){
+ if( rename( sOldName.Str(), sNewName.Str()))
+ return XB_RENAME_ERROR;
+ else
+ return XB_NO_ERROR;
+}
+
+/************************************************************************/
+//! @brief Xbase wrapper for rewind.
+/*!
+ Set file pointer at beginning of file.
+*/
+
+void xbFile::xbRewind() {
+ rewind( fp );
+}
+
+/************************************************************************/
+//! @brief Xbase wrapper for ftruncate.
+/*!
+ Set file size to llSize
+ \param llSize New file size.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbFile::xbTruncate( xbInt64 llSize ) {
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ try{
+ #ifdef HAVE_FTRUNCATE_F
+ if(( iRc = ftruncate( iFileNo, llSize )) != 0 ){
+ iErrorStop = 100;
+ iRc = XB_WRITE_ERROR;
+ throw iRc;
+ }
+ #elif defined(HAVE_SETENDOFFILE_F)
+ if(( iRc = xbFseek( llSize, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ if(( iRc = SetEndOfFile( fHandle )) == 0 ){
+ iErrorStop = 120;
+ iRc = XB_WRITE_ERROR;
+ throw iRc;
+ } else {
+ iRc = XB_NO_ERROR;
+ }
+ #else
+
+ // check that cmake can find function SetEndOfFile -
+ // cmake could not find for Borland 5.5
+ FATAL_COMPILE_ERROR
+ CANT_LOCATE_FUNCTION_ftruncate_or_SetEndOfFile
+
+ #endif
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbFile::xbTruncate() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+
+#ifdef XB_LOCKING_SUPPORT
+
+//! @brief Lock / unlock file.
+/*!
+ \param iFunction XB_LOCK<br>
+ XB_UNLOCK<br>
+ \param lOffset Position in file to lock
+ \param stLen Length to lock
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbFile::xbLock( xbInt16 iFunction, xbInt64 lOffset, size_t stLen ){
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ xbInt16 iTries = 0;
+
+ try{
+ #ifdef HAVE_FCNTL_F
+ /* Unix lock function */
+
+ if(( iRc = xbFseek( lOffset, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+
+ struct flock fl;
+ switch( iFunction ){
+ case( XB_LOCK ):
+ fl.l_type = F_WRLCK;
+ break;
+ case( XB_UNLOCK ):
+ fl.l_type = F_UNLCK;
+ break;
+ default:
+ iErrorStop = 110;
+ iRc = XB_INVALID_LOCK_OPTION;
+ throw iRc;
+ break;
+ }
+ fl.l_whence = SEEK_CUR;
+ fl.l_start = 0;
+ fl.l_len = (xbInt32) stLen;
+ do{
+ iRc = fcntl( iFileNo, F_SETLK, &fl );
+ if( iRc && (errno == EACCES || errno == EAGAIN )){
+ iTries++;
+ xbase->xbSleep( GetDefaultLockWait() );
+ } else if( iRc ){
+ iErrorStop = 120;
+ iRc = XB_LOCK_FAILED;
+ throw iRc;
+ }
+ } while( iRc && iTries < GetLockRetryCount());
+ if( iRc )
+ iRc = XB_LOCK_FAILED; // lock failed, don't log an exception
+
+ #elif defined(HAVE_LOCKFILE_F)
+ /* Windows 64 byte lock functions */
+ /* split a quad word into two double words */
+ typedef union{
+ size_t Qword;
+ xbUInt32 Dword[2];
+ } Qsplit;
+
+ Qsplit lPos;
+ Qsplit lLen;
+ lPos.Qword = (size_t) lOffset;
+ lLen.Qword = stLen;
+
+ do{
+ if( iFunction == XB_LOCK ){
+ if(( iRc = LockFile( fHandle, lPos.Dword[0], lPos.Dword[1], lLen.Dword[0], lLen.Dword[1] )) == 0 ){
+ iTries++;
+ xbase->xbSleep( GetDefaultLockWait() );
+ }
+ }
+ else if( iFunction == XB_UNLOCK ){
+ if(( iRc = UnlockFile( fHandle, lPos.Dword[0], lPos.Dword[1], lLen.Dword[0], lLen.Dword[1] )) == 0 ){
+ iTries++;
+ xbase->xbSleep( GetDefaultLockWait() );
+ }
+ }
+ else
+ {
+ iErrorStop = 130;
+ iRc = XB_INVALID_LOCK_OPTION;
+ throw iRc;
+ }
+ } while( iRc == 0 && iTries < GetLockRetryCount());
+ if( iRc == 0 )
+ iRc = XB_LOCK_FAILED; // lock failed, don't log an exception
+ else
+ iRc = XB_NO_ERROR;
+
+ #elif defined(HAVE_LOCKING_F) || defined(HAVE__LOCKING_F)
+
+ /* older 32 bit locking functions */
+ xbInt32 iLockType;
+ if( iFunction == XB_LOCK ){
+ iLockType = 2;
+ } else if( iFunction == XB_UNLOCK ){
+ iLockType = 0;
+ } else {
+ iErrorStop = 140;
+ iRc = XB_INVALID_LOCK_OPTION;
+ throw iRc;
+ }
+
+ if(( iRc = xbFseek( lOffset, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ iRc = XB_SEEK_ERROR;
+ throw iRc;
+ }
+
+ do{
+ #ifdef HAVE__LOCKING_F
+ if(( iRc = _locking( iFileNo, iLockType, stLen )) != 0 ){
+ #else
+ if(( iRc = locking( iFileNo, iLockType, stLen )) != 0 ){
+ #endif
+ iTries++;
+ xbase->xbSleep( GetDefaultLockWait() );
+ }
+ } while( iRc != 0 && iTries < GetLockRetryCount());
+
+ if( iRc != 0 )
+ iRc = XB_LOCK_FAILED; // lock failed, don't log an exception
+ else
+ iRc = XB_NO_ERROR;
+
+ #else
+
+ FATAL ERROR - CANT BUILD LIBRARY IN CURRENT CONFIG - MISSING - no file locking function defined in xbfile.cpp
+
+ #endif
+
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbFile::xbLock() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+
+ return iRc;
+
+
+}
+
+//! @brief Return the locking retry setting.
+/*!
+
+ \returns The lock retry setting for this file or ths system default setting if the lock retry for the file
+ has not been set.
+*/
+
+xbInt16 xbFile::GetLockRetryCount() const {
+
+ if( iLockRetries == -1 )
+ return xbase->GetDefaultLockRetries();
+ else
+ return iLockRetries;
+}
+
+//! @brief Set the lock retry countr for this specific file.
+/*!
+ \param iLockRetries The number of retries to attempt before returning failure for this file
+*/
+
+void xbFile::SetLockRetryCount( xbInt16 iLockRetries ) {
+ this->iLockRetries = iLockRetries;
+}
+
+#endif
+
+
+/***********************************************************************/
+#ifdef XB_DEBUG_SUPPORT
+//! @brief Debugging routine - dump mem to the log file.
+/*!
+ This routine dumps data from meemory to the log file. This is
+ primarily used for debugging and analysis purposes.
+
+ \param p Pointer to data to write
+ \param lBlxkSize Size of block
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbFile::DumpMemToDisk( char *p, size_t lSize ){
+
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ xbString sDir;
+ xbString sFn;
+
+ FILE *fpd = NULL;
+
+ try{
+
+ // sDir = GetLogDirectory();
+ sDir = xbase->GetLogDirectory();
+
+ char cLastChar = sDir[sDir.Len()];
+
+ // build logfile name
+ if( cLastChar != '/' && cLastChar != '\\' )
+ sFn.Sprintf( "%s/MemDump.txt", sDir.Str());
+ else
+ sFn.Sprintf( "%sMemDump.txt", sDir.Str());
+
+ // open the dump file for append
+ #ifdef HAVE__FSOPEN_F
+ if(( fpd = _fsopen( sFn.Str(), "w+b", 0x40 )) == NULL ){
+ #else
+ if(( fpd = fopen( sFn.Str(), "w+b")) == NULL ){
+ #endif
+ iErrorStop = 100;
+ iRc = XB_OPEN_ERROR;
+ throw iRc;
+ }
+
+ int i;
+ // dump the block to the file
+ for( size_t l = 0; l < lSize; l++ ){
+ i = *p;
+ if( fputc( i, fpd ) == EOF ){
+ iErrorStop = 110;
+ iRc = XB_WRITE_ERROR;
+ throw iRc;
+ }
+ p++;
+ }
+ // close the dump file
+ fclose( fpd );
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbFile::DumpBlockToDisk() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ if( fpd )
+ fclose( fpd );
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+//! @brief Debugging routine - dump a block to the log file.
+/*!
+ This routine dumps a block to the log file. This is
+ primarily used for debugging and analysis purposes.
+
+ \param ulBlockNo Block number to write
+ \param lBlxkSize Size of block
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbFile::DumpBlockToDisk( xbUInt32 ulBlockNo, size_t lBlkSize ){
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+
+ xbUInt32 ulStartBlock;
+ xbUInt32 ulEndBlock;
+
+ char *p = 0x00;
+
+ xbString sDir;
+ xbString sFn;
+ char *buf = NULL;
+ FILE *fpd = NULL;
+ try{
+
+ if( ulBlockNo == 0 ){
+ ulStartBlock = 0;
+ xbUInt64 ullFileSizeulBlockNo;
+ if(( iRc = GetFileSize( ullFileSizeulBlockNo )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ ulEndBlock = (xbUInt32) (ullFileSizeulBlockNo / lBlkSize);
+ } else {
+ ulStartBlock = ulBlockNo;
+ ulEndBlock = ulBlockNo;
+ }
+
+ if(( buf = (char *) malloc( lBlkSize )) == NULL ){
+ iErrorStop = 110;
+ iRc = XB_NO_MEMORY;
+ throw iRc;
+ }
+
+// sDir = GetLogDirectory();
+ sDir = xbase->GetLogDirectory();
+ char cLastChar = sDir[sDir.Len()];
+
+ for( xbUInt32 l = ulStartBlock; l < ulEndBlock; l++ ){
+
+ if(( iRc = ReadBlock( l, lBlkSize, buf )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+
+ // build logfile name
+ if( cLastChar != '/' && cLastChar != '\\' )
+ sFn.Sprintf( "%s/BlockDump.B%ld", sDir.Str(), l);
+ else
+ sFn.Sprintf( "%sBlockDump.%ld", sDir.Str(), l);
+
+ // open the dump file for append
+ #ifdef HAVE__FSOPEN_F
+ if(( fpd = _fsopen( sFn.Str(), "w+b", 0x40 )) == NULL ){
+ #else
+ if(( fpd = fopen( sFn.Str(), "w+b")) == NULL ){
+ #endif
+ iErrorStop = 130;
+ iRc = XB_OPEN_ERROR;
+ throw iRc;
+ }
+
+ // dump the block to the file
+ p = buf;
+ for( size_t l = 0; l < lBlkSize; l++ ){
+ //if( fputc( *p, fpd ) != *p ){
+ if( fputc( *p, fpd ) == EOF ){
+ iErrorStop = 140;
+ iRc = XB_WRITE_ERROR;
+ throw iRc;
+ }
+ p++;
+ }
+ // close the dump file
+ fclose( fpd );
+ }
+
+ // free the buffer
+ if( buf )
+ free( buf );
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbFile::DumpBlockToDisk() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ if( buf )
+ free( buf );
+ if( fpd )
+ fclose( fpd );
+ }
+ return iRc;
+}
+#endif
+/***********************************************************************/
+} /* namespace xb */
+
+
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/core/xbfilter.cpp b/1Tdata/xbase/xbase64-4.1.4/src/core/xbfilter.cpp
new file mode 100755
index 0000000..5c5f276
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/core/xbfilter.cpp
@@ -0,0 +1,544 @@
+/* xbfilter.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+
+This module handles uda (user data area) methods
+
+*/
+
+#include "xbase.h"
+
+
+// might need to change thisto XB_EXPRESSION_SUPPORT
+#ifdef XB_FILTER_SUPPORT
+
+
+namespace xb{
+
+/************************************************************************/
+xbFilter::xbFilter( xbDbf *dbf ) {
+ this->dbf = dbf;
+ this->exp = NULL;
+ lLimit = 0; // max number of responses
+ lCurQryCnt = 0; // current number, this query + = moving fwd
+ // - = moving backwards
+
+ #ifdef XB_INDEX_SUPPORT
+ pIx = NULL; // if index is set, the class uses the index tag, otherwise table
+ vpTag = NULL;
+ #endif // XB_INDEX_SUPPORT
+
+}
+/************************************************************************/
+xbFilter::~xbFilter() {
+ if( exp )
+ delete exp;
+}
+/************************************************************************/
+xbInt32 xbFilter::GetLimit() const {
+ return lLimit;
+}
+/************************************************************************/
+xbInt32 xbFilter::GetQryCnt() const {
+ return lCurQryCnt;
+}
+/************************************************************************/
+void xbFilter::SetLimit( xbInt32 lLimit ){
+ this->lLimit = lLimit;
+}
+/************************************************************************/
+void xbFilter::ResetQryCnt(){
+ this->lCurQryCnt = 0;
+}
+
+/************************************************************************/
+xbInt16 xbFilter::Set( const char *sFilter ) {
+ xbString sFilt( sFilter );
+ return Set( sFilt );
+}
+
+/************************************************************************/
+xbInt16 xbFilter::Set( xbString &sFilter ) {
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ try{
+
+ if( exp )
+ delete exp;
+
+ exp = new xbExp( dbf->GetXbasePtr(), dbf );
+ if(( iRc = exp->ParseExpression( sFilter.Str() )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ if( exp->GetReturnType() != XB_EXP_LOGICAL ){
+ iErrorStop = 110;
+ iRc = XB_INVALID_EXPRESSION;
+ delete exp;
+ exp = NULL;
+ throw iRc;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbFilter::SetExpression() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ dbf->GetXbasePtr()->WriteLogMessage( sMsg.Str() );
+ dbf->GetXbasePtr()->WriteLogMessage( dbf->GetXbasePtr()->GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+/************************************************************************/
+xbInt16 xbFilter::GetFirstRecord( xbInt16 iOption ) {
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ try{
+
+ if( !exp ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+
+ lCurQryCnt = 0;
+ if(( iRc = dbf->GetFirstRecord( iOption )) != XB_NO_ERROR ){
+ if( iRc == XB_EMPTY || iRc == XB_EOF )
+ return iRc;
+ else{
+ iErrorStop = 110;
+ throw iRc;
+ }
+ }
+
+ xbBool bFound = xbFalse;
+ while( !bFound && iRc == XB_NO_ERROR ){
+ if(( iRc = exp->ProcessExpression()) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ if(( iRc = exp->GetBoolResult( bFound )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ if( !bFound ){
+ if(( iRc = dbf->GetNextRecord( iOption )) != XB_NO_ERROR ){
+ if( iRc == XB_EOF ){
+ return iRc;
+ } else {
+ iErrorStop = 140;
+ throw iRc;
+ }
+ }
+ }
+ }
+ lCurQryCnt++;
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbFilter::GetFirstRecord() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ dbf->GetXbasePtr()->WriteLogMessage( sMsg.Str() );
+ dbf->GetXbasePtr()->WriteLogMessage( dbf->GetXbasePtr()->GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+/************************************************************************/
+xbInt16 xbFilter::GetNextRecord( xbInt16 iOption ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ try{
+
+ if( !exp ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+
+ if( lLimit != 0 && abs( lCurQryCnt ) >= lLimit )
+ return XB_LIMIT_REACHED;
+
+ if(( iRc = dbf->GetNextRecord( iOption )) != XB_NO_ERROR ){
+ if( iRc == XB_EOF )
+ return iRc;
+ else{
+ iErrorStop = 110;
+ throw iRc;
+ }
+ }
+
+ xbBool bFound = xbFalse;
+ while( !bFound && iRc == XB_NO_ERROR ){
+ if(( iRc = exp->ProcessExpression()) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ if(( iRc = exp->GetBoolResult( bFound )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ if( !bFound ){
+ if(( iRc = dbf->GetNextRecord( iOption )) != XB_NO_ERROR ){
+ if( iRc == XB_EOF ){
+ return iRc;
+ } else {
+ iErrorStop = 140;
+ throw iRc;
+ }
+ }
+ }
+ }
+ lCurQryCnt++;
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbFilter::GetNextRecord() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ dbf->GetXbasePtr()->WriteLogMessage( sMsg.Str() );
+ dbf->GetXbasePtr()->WriteLogMessage( dbf->GetXbasePtr()->GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+/************************************************************************/
+xbInt16 xbFilter::GetPrevRecord( xbInt16 iOption ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ try{
+
+ if( !exp ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+
+ if( lLimit != 0 && abs( lCurQryCnt ) >= lLimit )
+ return XB_LIMIT_REACHED;
+
+ if(( iRc = dbf->GetPrevRecord( iOption )) != XB_NO_ERROR ){
+ if( iRc == XB_BOF )
+ return iRc;
+ else{
+ iErrorStop = 110;
+ throw iRc;
+ }
+ }
+
+ xbBool bFound = xbFalse;
+ while( !bFound && iRc == XB_NO_ERROR ){
+ if(( iRc = exp->ProcessExpression()) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ if(( iRc = exp->GetBoolResult( bFound )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ if( !bFound ){
+ if(( iRc = dbf->GetPrevRecord( iOption )) != XB_NO_ERROR ){
+ if( iRc == XB_BOF ){
+ return iRc;
+ } else {
+ iErrorStop = 140;
+ throw iRc;
+ }
+ }
+ }
+ }
+ lCurQryCnt--;
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbFilter::GetPrevRecord() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ dbf->GetXbasePtr()->WriteLogMessage( sMsg.Str() );
+ dbf->GetXbasePtr()->WriteLogMessage( dbf->GetXbasePtr()->GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+/************************************************************************/
+xbInt16 xbFilter::GetLastRecord( xbInt16 iOption ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ try{
+
+ if( !exp ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+
+ lCurQryCnt = 0;
+ if(( iRc = dbf->GetLastRecord( iOption )) != XB_NO_ERROR ){
+ if( iRc == XB_EOF )
+ return iRc;
+ else{
+ iErrorStop = 110;
+ throw iRc;
+ }
+ }
+
+ xbBool bFound = xbFalse;
+ while( !bFound && iRc == XB_NO_ERROR ){
+ if(( iRc = exp->ProcessExpression()) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ if(( iRc = exp->GetBoolResult( bFound )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ if( !bFound ){
+ if(( iRc = dbf->GetPrevRecord( iOption )) != XB_NO_ERROR ){
+ if( iRc == XB_BOF ){
+ return iRc;
+ } else {
+ iErrorStop = 140;
+ throw iRc;
+ }
+ }
+ }
+ }
+ lCurQryCnt--;
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbFilter::GetLastRecord() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ dbf->GetXbasePtr()->WriteLogMessage( sMsg.Str() );
+ dbf->GetXbasePtr()->WriteLogMessage( dbf->GetXbasePtr()->GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/************************************************************************/
+
+#ifdef XB_INDEX_SUPPORT
+
+/************************************************************************/
+xbInt16 xbFilter::GetFirstRecordIx( xbInt16 iOption ) {
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ try{
+
+ if( !exp ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+
+ lCurQryCnt = 0;
+ if(( iRc = dbf->GetCurIx()->GetFirstKey( dbf->GetCurTag(), iOption )) != XB_NO_ERROR ){
+ if( iRc == XB_EMPTY || iRc == XB_EOF )
+ return iRc;
+ else{
+ iErrorStop = 110;
+ throw iRc;
+ }
+ }
+
+ xbBool bFound = xbFalse;
+ while( !bFound && iRc == XB_NO_ERROR ){
+ if(( iRc = exp->ProcessExpression()) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ if(( iRc = exp->GetBoolResult( bFound )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ if( !bFound ){
+ // if(( iRc = pIx->GetNextKey( vpTag, iOption )) != XB_NO_ERROR ){
+ if(( iRc = dbf->GetCurIx()->GetNextKey( dbf->GetCurTag(), iOption )) != XB_NO_ERROR ){
+ if( iRc == XB_EOF ){
+ return iRc;
+ } else {
+ iErrorStop = 140;
+ throw iRc;
+ }
+ }
+ }
+ }
+ lCurQryCnt++;
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbFilter::GetFirstRecordIx() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ dbf->GetXbasePtr()->WriteLogMessage( sMsg.Str() );
+ dbf->GetXbasePtr()->WriteLogMessage( dbf->GetXbasePtr()->GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+/************************************************************************/
+xbInt16 xbFilter::GetNextRecordIx( xbInt16 iOption ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ try{
+
+ if( !exp ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+
+ if( lLimit != 0 && abs( lCurQryCnt ) >= lLimit )
+ return XB_LIMIT_REACHED;
+
+ if(( iRc = dbf->GetCurIx()->GetNextKey( dbf->GetCurTag(), iOption )) != XB_NO_ERROR ){
+ if( iRc == XB_EOF )
+ return iRc;
+ else{
+ iErrorStop = 110;
+ throw iRc;
+ }
+ }
+
+ xbBool bFound = xbFalse;
+ while( !bFound && iRc == XB_NO_ERROR ){
+ if(( iRc = exp->ProcessExpression()) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ if(( iRc = exp->GetBoolResult( bFound )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ if( !bFound ){
+ // if(( iRc = pIx->GetNextKey( vpTag, iOption )) != XB_NO_ERROR ){
+ if(( iRc = dbf->GetCurIx()->GetNextKey( dbf->GetCurTag(), iOption )) != XB_NO_ERROR ){
+ if( iRc == XB_EOF ){
+ return iRc;
+ } else {
+ iErrorStop = 140;
+ throw iRc;
+ }
+ }
+ }
+ }
+ lCurQryCnt++;
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbFilter::GetNextRecordIx() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ dbf->GetXbasePtr()->WriteLogMessage( sMsg.Str() );
+ dbf->GetXbasePtr()->WriteLogMessage( dbf->GetXbasePtr()->GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+/************************************************************************/
+xbInt16 xbFilter::GetPrevRecordIx( xbInt16 iOption ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ try{
+
+ if( !exp ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+
+ if( lLimit != 0 && abs( lCurQryCnt ) >= lLimit )
+ return XB_LIMIT_REACHED;
+
+ if(( iRc = dbf->GetCurIx()->GetPrevKey( dbf->GetCurTag(), iOption )) != XB_NO_ERROR ){
+ if( iRc == XB_BOF )
+ return iRc;
+ else{
+ iErrorStop = 110;
+ throw iRc;
+ }
+ }
+
+ xbBool bFound = xbFalse;
+ while( !bFound && iRc == XB_NO_ERROR ){
+ if(( iRc = exp->ProcessExpression()) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ if(( iRc = exp->GetBoolResult( bFound )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ if( !bFound ){
+ //if(( iRc = pIx->GetPrevKey( vpTag, iOption )) != XB_NO_ERROR ){
+ if(( iRc = dbf->GetCurIx()->GetPrevKey( dbf->GetCurTag(), iOption )) != XB_NO_ERROR ){
+ if( iRc == XB_BOF ){
+ return iRc;
+ } else {
+ iErrorStop = 140;
+ throw iRc;
+ }
+ }
+ }
+ }
+ lCurQryCnt--;
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbFilter::GetPrevRecordIx() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ dbf->GetXbasePtr()->WriteLogMessage( sMsg.Str() );
+ dbf->GetXbasePtr()->WriteLogMessage( dbf->GetXbasePtr()->GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+/************************************************************************/
+xbInt16 xbFilter::GetLastRecordIx( xbInt16 iOption ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ try{
+
+ if( !exp ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ lCurQryCnt = 0;
+ if(( iRc = dbf->GetCurIx()->GetLastKey( dbf->GetCurTag(), iOption )) != XB_NO_ERROR ){
+ if( iRc == XB_EOF )
+ return iRc;
+ else{
+ iErrorStop = 110;
+ throw iRc;
+ }
+ }
+ xbBool bFound = xbFalse;
+ while( !bFound && iRc == XB_NO_ERROR ){
+ if(( iRc = exp->ProcessExpression()) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ if(( iRc = exp->GetBoolResult( bFound )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ if( !bFound ){
+ if(( iRc = dbf->GetCurIx()->GetPrevKey( dbf->GetCurTag(), iOption )) != XB_NO_ERROR ){
+ if( iRc == XB_BOF ){
+ return iRc;
+ } else {
+ iErrorStop = 140;
+ throw iRc;
+ }
+ }
+ }
+ }
+ lCurQryCnt--;
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbFilter::GetLastRecordIx() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ dbf->GetXbasePtr()->WriteLogMessage( sMsg.Str() );
+ dbf->GetXbasePtr()->WriteLogMessage( dbf->GetXbasePtr()->GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+#endif // XB_INDEX_SUPPORT
+
+
+/************************************************************************/
+} /* namespace */
+#endif /* XB_FILTER_SUPPORT */ \ No newline at end of file
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/core/xbfuncs.cpp b/1Tdata/xbase/xbase64-4.1.4/src/core/xbfuncs.cpp
new file mode 100755
index 0000000..f127211
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/core/xbfuncs.cpp
@@ -0,0 +1,851 @@
+/* xbfuncs.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2017,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+#include "xbase.h"
+
+#ifdef XB_FUNCTION_SUPPORT
+
+namespace xb{
+
+
+// All funtions have a similar structure, return an xbInt16 return code
+// Have a variable number of input operands and one output operand
+
+/************************************************************************/
+//! @brief Calculate absolute value of a numeric expression.
+/*!
+ Expression function ABS().
+ \param dIn Input - Numeric expression.
+ \param dOut Output - Absolute value.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbXBase::ABS( xbDouble dIn, xbDouble &dOut ){
+ if( dIn < 0 )
+ dOut = dIn * -1;
+ else
+ dOut = dIn;
+ return XB_NO_ERROR;
+}
+
+/*************************************************************************/
+//! @brief Trim leading and trailing white space from a string.
+/*!
+ Expression function ALLTRIM().
+ \param sIn Input - Input string to trim.
+ \param sOut Output - Trimmed string.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbXBase::ALLTRIM( const xbString &sIn, xbString &sOut ){
+ sOut = sIn;
+ sOut.Trim();
+ return XB_NO_ERROR;
+}
+
+/*************************************************************************/
+//! @brief Return ASCII code for the first character in a string.
+/*!
+ Expression function ASC().
+ \param sIn Input - Input character string.
+ \param dAscOut Output - Ascii code of first character in string.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbXBase::ASC( const xbString &sIn, xbDouble &dAscOut ){
+ if( sIn == "" )
+ return XB_PARSE_ERROR;
+
+ dAscOut = sIn[1];
+ return XB_NO_ERROR;
+}
+/*************************************************************************/
+//! @brief Return number indicating starting position of string within a string.
+/*!
+ Expression function AT().
+ \param s1 Input - Input string to search for.
+ \param s2 Input - Input string to search.
+ \param dPos Output - Position of string s1 within s2.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbXBase::AT( const xbString &s1, const xbString &s2, xbDouble &dPos ){
+ /* looks for s1 in s2 */
+ xbInt32 lCnt = 0;
+ const char *p;
+ const char *p2 = s2;
+ if( strlen( s1 ) > strlen( s2 )) return 0;
+ if(( p = strstr( s2, s1 )) == NULL )
+ return XB_NO_ERROR;
+ while( p2++ != p ) lCnt++;
+ dPos = lCnt + 1;
+ return XB_NO_ERROR;
+}
+
+/*************************************************************************/
+//! @brief Return character weekday name for date.
+/*!
+ Expression function CDOW().
+ \param dInDate Input - Input date.
+ \param sOutDow Output - Character day of week.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbXBase::CDOW( xbDate &dInDate, xbString &sOutDow ){
+ return dInDate.CharDayOf( sOutDow );
+}
+
+/*************************************************************************/
+//! @brief Convert numeric expression to a character.
+/*!
+ Expression function CHR().
+ \param dAsciCd Input - Numeric expression.
+ \param sOut Output - Character result.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbXBase::CHR( xbDouble dAsciCd, xbString &sOut ){
+ static char buf[2];
+ buf[0] = (char) dAsciCd;
+ buf[1] = 0x00;
+ sOut = buf;
+ return XB_NO_ERROR;
+}
+
+/*************************************************************************/
+//! @brief Return character month name for date.
+/*!
+ Expression function CMONTH().
+ \param dInDate Input - Input date.
+ \param sOutMonth Output - Character month.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbXBase::CMONTH( xbDate &dInDate, xbString &sOutMonth ){
+ return dInDate.CharMonthOf( sOutMonth );
+}
+/*************************************************************************/
+//! @brief Return date from character input date.
+/*!
+ Expression function CTOD().
+ \param sInDate Input - Input date in MM/DD/YY format.
+ \param dOutDate Output - Output date.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbXBase::CTOD( const xbString &sInDate, xbDate &dOutDate ){
+ return dOutDate.CTOD( sInDate );
+}
+/*************************************************************************/
+//! @brief Return system date.
+/*!
+ Expression function DATE().
+ \param dOutDate Output - Output date.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbXBase::DATE( xbDate &dOutDate ){
+ return dOutDate.Sysdate();
+}
+/*************************************************************************/
+//! @brief Return the day of the month from a date.
+/*!
+ Expression function DAY().
+ \param dInDate Input - Input date.
+ \param dOutDay Output - Output day of month.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbXBase::DAY( const xbDate &dInDate, xbDouble &dOutDay ){
+ xbInt16 iOutDay;;
+ iOutDay = dInDate.DayOf( XB_FMT_MONTH );
+ if( iOutDay < 0 ){
+ return iOutDay;
+ }else{
+ dOutDay = iOutDay;
+ return XB_NO_ERROR;
+ }
+}
+/*************************************************************************/
+//! @brief Return record deletion status for current record.
+/*!
+ Expression function DEL().
+ \param dbf Input - Table to check record deletion status.
+ \param iRecBufSw Input - Which buffer. 0 = Current record buffer, 1 = Original record buffer
+ \param sOut Output - "*" if record is deleted, otherise space.
+ \returns XB_NO_ERROR<br>XB_PARSE_ERROR.
+
+*/
+xbInt16 xbXBase::DEL( xbDbf *dbf , xbString &sOut, xbInt16 iRecBufSw ) {
+
+ if( dbf ){
+ if( dbf->RecordDeleted( iRecBufSw ))
+ sOut = "*";
+ else
+ sOut = " ";
+ return XB_NO_ERROR;
+ } else {
+ return XB_PARSE_ERROR;
+ }
+}
+
+/*************************************************************************/
+//! @brief Return record deletion status for current record.
+/*!
+ Expression function DELETED().
+ \param dbf Input - Table to check record deletion status for.
+ \param iRecBufSw Input - Which buffer. 0 = Current record buffer, 1 = Original record buffer
+ \param bOut Output - xbTrue if record is deleted.<br>xbFalse if record is not deleted.
+ \returns XB_NO_ERROR<br>XB_PARSE_ERROR.
+*/
+xbInt16 xbXBase::DELETED( xbDbf *dbf , xbBool &bOut, xbInt16 iRecBufSw ) {
+
+ if( dbf ){
+ bOut = dbf->RecordDeleted( iRecBufSw );
+ return XB_NO_ERROR;
+ } else {
+ return XB_PARSE_ERROR;
+ }
+}
+
+/*************************************************************************/
+//! @brief Clipper DESCEND function.
+/*!
+ Expression function DESCEND().
+ \param dtInDate Input - Input date.
+ \param dtOutDate Output - Output date.
+ \returns XB_NO_ERROR.
+*/
+xbInt16 xbXBase::DESCEND( const xbDate &dtInDate, xbDate &dtOutDate ){
+ xbDate d( "29991231" );
+ dtOutDate.JulToDate8( 2415021 + d.JulianDays() - dtInDate.JulianDays());
+ return XB_NO_ERROR;
+}
+
+/*************************************************************************/
+//! @brief Clipper DESCEND function.
+/*!
+ Expression function DESEND().
+ \param dIn Input - Input number.
+ \param dOut Output - Output number.
+ \returns XB_NO_ERROR.
+*/
+xbInt16 xbXBase::DESCEND( xbDouble dIn, xbDouble &dOut ){
+ dOut = dIn * -1;
+ return XB_NO_ERROR;
+}
+
+/*************************************************************************/
+//! @brief Clipper DESCEND function.
+/*!
+ Expression function DESEND().
+ \param sIn Input - Input string.
+ \param sOut Output - Output string.
+ \returns XB_NO_ERROR.
+*/
+xbInt16 xbXBase::DESCEND( const xbString &sIn, xbString &sOut ){
+
+ sOut = sIn;
+ for( xbUInt32 l = 0; l < sIn.Len(); l++ )
+ sOut.PutAt( l+1, (char) (255 - sOut[l+1]));
+ return XB_NO_ERROR;
+}
+
+/*************************************************************************/
+//! @brief Return number of day of week.
+/*!
+ Expression function DOW().
+ \param dtInDate Input - Input date.
+ \param dDowOut Output - Output day of week.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbXBase::DOW( const xbDate &dtInDate, xbDouble &dDowOut ){
+ xbInt16 iDow;
+ iDow = dtInDate.DayOf( XB_FMT_WEEK );
+ if( iDow < 0 ){
+ return XB_PARSE_ERROR;
+ }else{
+ dDowOut = iDow;
+ return XB_NO_ERROR;
+ }
+}
+
+/*************************************************************************/
+//! @brief Return character date from input date.
+/*!
+ Expression function DTOC().
+ \param dInDate Input - Input date.
+ \param sOutFmtDate Output - Output date.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbXBase::DTOC( xbDate &dInDate, xbString &sOutFmtDate ){
+ return dInDate.FormatDate( "MM/DD/YY", sOutFmtDate );
+}
+/*************************************************************************/
+//! @brief Return char CCYYMMDD date from input date.
+/*!
+ Expression function DTOS().
+ \param dtInDate Input - Input date.
+ \param sOutFmtDate Output - Output date.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbXBase::DTOS( xbDate &dtInDate, xbString &sOutFmtDate ){
+ return dtInDate.FormatDate( "YYYYMMDD", sOutFmtDate );
+}
+/*************************************************************************/
+//! @brief Return exponent value.
+/*!
+ Expression function EXP().
+ This function returns e**x where e is approximately 2.71828 and x is dIn.
+
+ \param dIn Input - exp value.
+ \param dOut Output - value.
+ \returns XB_NO_ERROR
+*/
+xbInt16 xbXBase::EXP( xbDouble dIn, xbDouble &dOut )
+{
+ dOut = exp( dIn );
+ return XB_NO_ERROR;
+}
+/*************************************************************************/
+//! @brief Immediate if.
+/*!
+ Expression function IIF().
+ \param bResult Input - boolean expression.
+ \param sTrueResult Input - value if boolean expression is true.
+ \param sFalseResult Input - value if boolean expression is false.
+ \param sResult Output - sTrueResult or sFalseResult depending on bResultvalue.
+ \returns XB_NO_ERROR
+*/
+xbInt16 xbXBase::IIF( xbBool bResult, const xbString &sTrueResult, const xbString &sFalseResult, xbString &sResult )
+{
+ if( sFalseResult.Len() != sTrueResult.Len())
+ return XB_INCONSISTENT_PARM_LENS;
+ if( bResult )
+ sResult = sTrueResult;
+ else
+ sResult = sFalseResult;
+ return XB_NO_ERROR;
+}
+/*************************************************************************/
+//! @brief Convert number to integer, truncate any decimals.
+/*!
+ Expression function INT().
+ \param dIn Input - Input number.
+ \param dOut Output - integer.
+ \returns XB_NO_ERROR
+*/
+
+xbInt16 xbXBase::INT( xbDouble dIn, xbDouble &dOut )
+{
+ xbInt64 ll = (xbInt64) dIn;
+ dOut = (xbDouble) ll;
+ return XB_NO_ERROR;
+}
+
+/*************************************************************************/
+//! @brief Check if string begins with alpha character.
+/*!
+ Expression function ISALPHA().
+ \param sIn Input - Input string.
+ \param bResult Output - xbTrue if string begins with alpha character.<br>xbFalse if string does not begin with alpha character.
+ \returns XB_NO_ERROR
+*/
+xbInt16 xbXBase::ISALPHA( const xbString &sIn, xbBool &bResult ){
+ if( isalpha(sIn[1]))
+ bResult = 1;
+ else
+ bResult = 0;
+ return XB_NO_ERROR;
+}
+
+/*************************************************************************/
+//! @brief Check if string begins with lower case alpha character.
+/*!
+ Expression function ISLOWER().
+ \param sIn Input - Input string.
+ \param bResult Output - xbTrue if string begins with lower case alpha character.<br>
+ xbFalse if string does not begin with lower case alpha character.
+ \returns XB_NO_ERROR
+*/
+
+xbInt16 xbXBase::ISLOWER( const xbString &sIn, xbBool &bResult ){
+ if( islower(sIn[1]))
+ bResult = 1;
+ else
+ bResult = 0;
+ return XB_NO_ERROR;
+}
+/*************************************************************************/
+//! @brief Check if string begins with upper case alpha character.
+/*!
+ Expression function ISUPPER().
+ \param sIn Input - Input string.
+ \param bResult Output - xbTrue if string begins with upper case alpha character.<br>
+ xbFalse if string does not begin with upper case alpha character.
+ \returns XB_NO_ERROR
+*/
+
+xbInt16 xbXBase::ISUPPER( const xbString &sIn, xbBool &bResult ){
+ if( isupper(sIn[1]))
+ bResult = 1;
+ else
+ bResult = 0;
+ return XB_NO_ERROR;
+}
+
+/*************************************************************************/
+//! @brief Return left characters from string.
+/*!
+ Expression function LEFT().
+ \param sIn Input - string.
+ \param ulCharCnt Input - number of characters to extract from string.
+ \param sOut Output - resultant string.
+ \returns XB_NO_ERROR
+*/
+xbInt16 xbXBase::LEFT( const xbString &sIn, xbUInt32 ulCharCnt, xbString &sOut ){
+ sOut.Assign( sIn, 1, ulCharCnt );
+ return XB_NO_ERROR;
+}
+
+/*************************************************************************/
+//! @brief Return length of string.
+/*!
+ Expression function LEN().
+ \param sIn Input - Input string.
+ \param dOut Output - string length.
+ \returns XB_NO_ERROR
+*/
+
+xbInt16 xbXBase::LEN( const xbString &sIn, xbDouble &dOut ){
+ dOut = sIn.Len();
+ return XB_NO_ERROR;
+}
+
+/*************************************************************************/
+//! @brief Calculate logarithm.
+/*!
+ Expression function LOG().
+ \param dIn Input - numeric expression.
+ \param dOut Output - numeric log value.
+ \returns XB_NO_ERROR
+*/
+xbInt16 xbXBase::LOG( xbDouble dIn, xbDouble &dOut ){
+ dOut = log( dIn );
+ return XB_NO_ERROR;
+}
+/*************************************************************************/
+//! @brief Trim left side of string.
+/*!
+ Expression function LTRIM().
+ \param sIn Input - string.
+ \param sOut Output - string result.
+ \returns XB_NO_ERROR
+*/
+xbInt16 xbXBase::LTRIM( const xbString &sIn, xbString &sOut ){
+ sOut = sIn;
+ sOut.Ltrim();
+ return XB_NO_ERROR;
+}
+/*************************************************************************/
+//! @brief Convert upper case to lower case.
+/*!
+ Expression function LOWER().
+ \param sIn Input - string.
+ \param sOut Output - string result.
+ \returns XB_NO_ERROR
+*/
+
+xbInt16 xbXBase::LOWER( const xbString &sIn, xbString &sOut ){
+ sOut = sIn;
+ sOut.ToLowerCase();
+ return XB_NO_ERROR;
+}
+
+/*************************************************************************/
+//! @brief Return higher of two values.
+/*!
+ Expression function MAX().
+ \param d1 Input - Numeric value 1.
+ \param d2 Input - Numeric value 2.
+ \param dOut Output - Higher of d1 or d2.
+ \returns XB_NO_ERROR
+*/
+xbInt16 xbXBase::MAX( xbDouble d1, xbDouble d2, xbDouble &dOut )
+{
+ if( d1 > d2 )
+ dOut = d1;
+ else
+ dOut = d2;
+ return XB_NO_ERROR;
+}
+
+/*************************************************************************/
+//! @brief Return lessor of two values.
+/*!
+ Expression function MIN().
+ \param d1 Input - Numeric value 1.
+ \param d2 Input - Numeric value 2.
+ \param dOut Output - Lessor of d1 or d2.
+ \returns XB_NO_ERROR
+*/
+xbInt16 xbXBase::MIN( xbDouble d1, xbDouble d2, xbDouble &dOut )
+{
+ if( d1 < d2 )
+ dOut = d1;
+ else
+ dOut = d2;
+ return XB_NO_ERROR;
+}
+
+/*************************************************************************/
+//! @brief Return number of month for a given date.
+/*!
+ Expression function MONTH().
+ \param dInDate Input date.
+ \param dOutMonth - Month number.
+ \returns XB_NO_ERROR.<br>XB_PARSE_ERROR.
+*/
+xbInt16 xbXBase::MONTH( xbDate &dInDate, xbDouble &dOutMonth ){
+
+ xbInt16 iRc = dInDate.MonthOf();
+ if( iRc < 0 )
+ return XB_PARSE_ERROR;
+ else{
+ dOutMonth = iRc;
+ return XB_NO_ERROR;
+ }
+}
+
+/*************************************************************************/
+//! @brief Return number of records in a given table.
+/*!
+ Expression function RECCOUNT().
+ \param dbf - Table.
+ \param dOut - Number of records.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbXBase::RECCOUNT( xbDbf *dbf , xbDouble &dOut ) {
+
+ xbUInt32 ulRecCnt;
+ xbInt16 iRc = dbf->GetRecordCnt( ulRecCnt );
+ dOut = (xbDouble) ulRecCnt;
+ return iRc;
+
+}
+
+/*************************************************************************/
+//! @brief Return current record number for a given table.
+/*!
+ Expression function RECNO().
+ \param dbf - Table.
+ \param dOut - Record number.
+ \returns XB_NO_ERROR.<br>XB_PARSE_ERROR.
+*/
+
+xbInt16 xbXBase::RECNO( xbDbf *dbf , xbDouble &dOut ) {
+ if( dbf ){
+ dOut = (xbDouble) dbf->GetCurRecNo();
+ return XB_NO_ERROR;
+ } else {
+ dOut = -1;
+ return XB_PARSE_ERROR;
+ }
+}
+
+/*************************************************************************/
+//! @brief Repeat character expression N times.
+/*!
+ Expression function REPLICATE().
+ \param sIn Inout - String to replicate.
+ \param ulRepCnt Input - Number of times to repeat.
+ \param sOut Output - String result.
+ \returns XB_NO_ERROR.<br>XB_PARSE_ERROR.
+*/
+xbInt16 xbXBase::REPLICATE( const xbString &sIn, xbUInt32 ulRepCnt, xbString &sOut ){
+ sOut = "";
+ for( xbUInt32 i = 0; i < ulRepCnt; i++ )
+ sOut += sIn;
+ return XB_NO_ERROR;
+}
+
+/*************************************************************************/
+//! @brief Return right characters from string.
+/*!
+ Expression function RIGHT().
+ \param sIn Input - string.
+ \param ulCharCnt Input - number of characters to extract from string.
+ \param sOut Output - resultant string.
+ \returns XB_NO_ERROR
+*/
+
+xbInt16 xbXBase::RIGHT( const xbString &sIn, xbUInt32 ulCharCnt, xbString &sOut ){
+ if( sIn.Len() < ulCharCnt )
+ sOut = sIn;
+ else
+ sOut.Assign( sIn, sIn.Len() - ulCharCnt + 1, ulCharCnt );
+ return XB_NO_ERROR;
+}
+
+/*************************************************************************/
+//! @brief Trim right side of string.
+/*!
+ Expression function RTRIM().
+ \param sIn Input - string.
+ \param sOut Output - string result.
+ \returns XB_NO_ERROR
+*/
+
+xbInt16 xbXBase::RTRIM( const xbString &sIn, xbString &sOut ){
+ sOut = sIn;
+ sOut.Rtrim();
+ return XB_NO_ERROR;
+}
+
+/*************************************************************************/
+//! @brief Generate a string of N spaces.
+/*!
+ Expression function SPACE().
+ \param lCnt Input - Number of spaces.
+ \param sOut Output - Output string consisting of specified number of spaces.
+ \returns XB_NO_ERROR.
+*/
+xbInt16 xbXBase::SPACE( xbInt32 lCnt, xbString &sOut ){
+ sOut = "";
+ for( xbInt32 i = 0; i < lCnt; i++ )
+ sOut += ' ';
+ return XB_NO_ERROR;
+}
+
+/*************************************************************************/
+//! @brief Calculate a square root.
+/*!
+ Expression function SQRT().
+ \param dBase Input - Base number.
+ \param dSqrRoot Output - Square root.
+ \returns XB_NO_ERROR.
+*/
+
+xbInt16 xbXBase::SQRT( xbDouble dBase, xbDouble &dSqrRoot )
+{
+ dSqrRoot = sqrt( dBase );
+ return XB_NO_ERROR;
+}
+
+/*************************************************************************/
+//! @brief Converts a valid 8 byte (CCYYMMDD) input date into a date class.
+/*!
+ Expression function STOD().
+ \param sInDate Input - Input date.
+ \param dtOutDate Output - Output date.
+ \returns XB_NO_ERROR.<br>XB_INVALID_DATE.
+*/
+
+xbInt16 xbXBase::STOD( const xbString &sInDate, xbDate &dtOutDate ){
+
+ if( dtOutDate.DateIsValid( sInDate )){
+ dtOutDate = sInDate;
+ return XB_NO_ERROR;
+ } else {
+ return XB_INVALID_DATE;
+ }
+}
+
+/*************************************************************************/
+//! @brief Convert number to a character string.
+/*!
+ Expression function STR().
+ \param dIn Input - Number.
+ \param sOut Output - String.
+ \returns XB_NO_ERROR.
+*/
+
+xbInt16 xbXBase::STR( xbDouble dIn, xbString &sOut) {
+ xbString sPadChar = " ";
+ return STR( dIn, 10, 0, sPadChar, sOut );
+}
+
+/*************************************************************************/
+//! @brief Convert number to a character string.
+/*!
+ Expression function STR().
+ \param dIn Input - Number.
+ \param ulLen Input - Length.
+ \param sOut Output - String.
+ \returns XB_NO_ERROR.
+*/
+xbInt16 xbXBase::STR( xbDouble dIn, xbUInt32 ulLen, xbString &sOut) {
+ xbString sPadChar = " ";
+ return STR( dIn, ulLen, 0, sPadChar, sOut );
+}
+
+/*************************************************************************/
+//! @brief Convert number to a character string.
+/*!
+ Expression function STR().
+ \param dIn Input - Number.
+ \param ulLen Input - Length.
+ \param ulDec Input - Number of decimals.
+ \param sOut Output - String.
+ \returns XB_NO_ERROR.
+*/
+
+xbInt16 xbXBase::STR( xbDouble dIn, xbUInt32 ulLen, xbUInt32 ulDec, xbString &sOut) {
+ xbString sPadChar = " ";
+ return STR( dIn, ulLen, ulDec, sPadChar, sOut );
+}
+
+/*************************************************************************/
+//! @brief Convert number to a character string.
+/*!
+ Expression function STR().
+ \param dIn Input - Number.
+ \param ulLen Input - Length.
+ \param ulDec Input - Number of decimals.
+ \param sPadChar Input - Left pad character, typically zero or space.
+ \param sOut Output - String.
+ \returns XB_NO_ERROR.
+*/
+
+xbInt16 xbXBase::STR( xbDouble dIn, xbUInt32 ulLen, xbUInt32 ulDec, xbString &sPadChar, xbString &sOut) {
+
+ xbString sFmt;
+ sFmt.Sprintf( "%c%d.%df", '%', ulLen, ulDec );
+ sOut.Sprintf( sFmt.Str(), dIn, 0 );
+
+ // convert to all "*" if result is too long
+ if( sOut.Len() > ulLen ){
+ sOut = "*";
+ do{
+ sOut += "*";
+ } while( ulLen > sOut.Len());
+ } else if( sPadChar.Len() > 0 && sPadChar != " " ){
+ // this logic doesn't make sense when processing negative numbers,
+ // but it does behave like the original dbase
+ // you could end up with something like 0000-12.17 when you really want -000012.17
+ // that is probably why the STRZERO function came into being
+ xbUInt32 l = 1;
+ while( sOut[l] == ' ' ){
+ sOut.PutAt( l, sPadChar[1]);
+ l++;
+ }
+ }
+ return XB_NO_ERROR;
+}
+
+/*************************************************************************/
+//! @brief Convert number to a character string with leading zeroes.
+/*!
+ Expression function STRZERO().
+ \param dIn Input - Number.
+ \param ulLen Input - Length.
+ \param ulDec Input - Number of decimals.
+ \param sOut Output - String.
+ \returns XB_NO_ERROR.
+*/
+xbInt16 xbXBase::STRZERO( xbDouble dIn, xbUInt32 ulLen, xbUInt32 ulDec, xbString &sOut){
+
+ xbString sFmt;
+ if( dIn < 0 )
+ sFmt.Sprintf( "%c+0%d.%df", '%', ulLen, ulDec );
+ else
+ sFmt.Sprintf( "%c0%d.%df", '%', ulLen, ulDec );
+ sOut.Sprintf( sFmt.Str(), dIn );
+
+ // convert to all "*" if result is too long
+ if( sOut.Len() > ulLen ){
+ sOut = "*";
+ do{
+ sOut += "*";
+ } while( ulLen > sOut.Len());
+ }
+ return XB_NO_ERROR;
+}
+
+/*************************************************************************/
+//! @brief Extract a portion of a string from another string.
+/*!
+ Expression function SUBSTR().
+ \param sIn Input - Source string.
+ \param ulStartPos Input - Starting position for string extraction.
+ \param ulLen Input - Number of characters to extract.
+ \param sOut Output - String.
+ \returns XB_NO_ERROR.
+*/
+xbInt16 xbXBase::SUBSTR( const xbString &sIn, xbUInt32 ulStartPos, xbUInt32 ulLen, xbString &sOut ){
+ sOut = sIn;
+ sOut.Mid( ulStartPos, ulLen );
+ return XB_NO_ERROR;
+}
+
+/*************************************************************************/
+//! @brief Trim left and right sides of string.
+/*!
+ Expression function TRIM().
+ \param sIn Input - string.
+ \param sOut Output string result.
+ \returns XB_NO_ERROR
+*/
+xbInt16 xbXBase::TRIM( const xbString &sIn, xbString &sOut ){
+ return RTRIM( sIn, sOut );
+}
+
+/*************************************************************************/
+//! @brief Convert lower case to upper case.
+/*!
+ Expression function UPPER().
+ \param sIn Input - string.
+ \param sOut Output - string result.
+ \returns XB_NO_ERROR
+*/
+xbInt16 xbXBase::UPPER( const xbString &sIn, xbString &sOut ){
+ sOut = sIn;
+ sOut.ToUpperCase();
+ return XB_NO_ERROR;
+}
+
+/*************************************************************************/
+//! @brief Convert numeric characters to number.
+/*!
+ Expression function VAL().
+ \param sIn Input - string.
+ \param dOut Output - numeric result.
+ \returns XB_NO_ERROR
+*/
+
+xbInt16 xbXBase::VAL( const xbString &sIn, xbDouble &dOut )
+{
+ if( sIn )
+ // strtod(nptr,NULL);
+ dOut = atof( sIn );
+ else
+ dOut = 0;
+ return XB_NO_ERROR;
+}
+/*************************************************************************/
+//! @brief Return year for a given date.
+/*!
+ Expression function YEAR().
+ \param dInDate Input date.
+ \param dOutYear - Year.
+ \returns XB_NO_ERROR.<br>XB_PARSE_ERROR.
+*/
+
+xbInt16 xbXBase::YEAR( xbDate &dInDate, xbDouble &dOutYear ){
+
+ xbInt16 iRc = dInDate.YearOf();
+ if( iRc < 0 )
+ return XB_PARSE_ERROR;
+ else{
+ dOutYear = iRc;
+ return XB_NO_ERROR;
+ }
+}
+/*************************************************************************/
+}; // namespace
+#endif // XB_FUNCTION_SUPPORT
+/*************************************************************************/
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/core/xbixbase.cpp b/1Tdata/xbase/xbase64-4.1.4/src/core/xbixbase.cpp
new file mode 100755
index 0000000..e2f929c
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/core/xbixbase.cpp
@@ -0,0 +1,789 @@
+/* xbixbase.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+ Base index class
+
+*/
+
+#include "xbase.h"
+#ifdef XB_INDEX_SUPPORT
+
+namespace xb{
+
+/***********************************************************************/
+//! @brief Class constructor.
+/*!
+ /param dbf Pointer to dbf instance.
+*/
+xbIx::xbIx( xbDbf *dbf ) : xbFile( dbf->GetXbasePtr()) {
+ this->dbf = dbf;
+ vpCurTag = NULL;
+ cNodeBuf = NULL;
+ bLocked = xbFalse;
+}
+/***********************************************************************/
+//! @brief Class Destructor.
+xbIx::~xbIx(){}
+
+
+/***********************************************************************/
+//! @brief Add Keys for record number
+/*!
+ For a given a record number, add keys to each tag in the index file
+ if it was updated
+
+ \param ulRecNo Record number to add keys for
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbIx::AddKeys( xbUInt32 ulRecNo ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbInt16 i = 0;
+ xbInt16 iKeySts;
+
+ try{
+ void * vpTag;
+ xbInt16 iTagCount = GetTagCount();
+
+ for( i = 0; i < iTagCount; i++ ){
+ vpTag = GetTag( i );
+ iKeySts = GetKeySts( vpTag );
+
+ if( iKeySts == 1 || iKeySts == 2 ){
+ if(( iRc = UpdateTagKey( 'A', vpTag, ulRecNo )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ }
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIx::AddKeys() Exception Caught. Error Stop = [%d] iRc = [%d] Tag=[%d]", iErrorStop, iRc, i );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+//! @brief Allocate memory for index node.
+/*!
+ Allocate an index node.
+
+ \param ulBufSize Size of buffer to allocate
+ \returns null on error<br>Pointer to newly allocated xbIxNode on success
+*/
+xbIxNode * xbIx::AllocateIxNode( xbUInt32 ulBufSize, xbInt16 )
+{
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+
+ try{
+ xbIxNode * pNode = (xbIxNode *) calloc( 1, sizeof( xbIxNode ));
+ if( pNode == NULL ){
+ iErrorStop = 100;
+ iRc = XB_NO_MEMORY;
+ throw iRc;
+ }
+ if( ulBufSize == 0 )
+ ulBufSize = GetBlockSize();
+
+ pNode->ulBufSize = ulBufSize;
+ pNode->cpBlockData = (char *) calloc( 1, ulBufSize );
+ if( pNode->cpBlockData == NULL ){
+ free( pNode );
+ iErrorStop = 110;
+ iRc = XB_NO_MEMORY;
+ throw iRc;
+ }
+ return pNode;
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIx::AllocateIxNode() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return NULL;
+}
+
+
+/***********************************************************************/
+//! @brief Binary search for given value on an index node.
+/*!
+
+ Binary search for key lookups
+ \param cKeyType Key type
+ \param npNode Pointer to index node for search
+ \param lKeyItemLen Lenth of key plus pointer values
+ \param vpKey Pointer to key value
+ \param lSearchKeyLen length of key to search
+ \param iCompRc output return code from the CompareKey routine. CompareKey returns an
+ integer value less than, equal to or greater than zero in when comparing values
+
+ \param bDescending xbTrue for descending index key lookup.<br>
+ xbFalse for ascending index key lookup.
+ \return The position in the node the key was found, if multiples it returns the first occurrence.
+ If the key is not found, it returns the slot it should be in.
+*/
+
+xbInt16 xbIx::BSearchBlock( char cKeyType, xbIxNode *npNode, xbInt32 lKeyItemLen, const void *vpKey,
+ xbInt32 lSearchKeyLen, xbInt16 &iCompRc, xbBool bDescending ) const {
+ xbInt32 lLo = 0;
+ xbInt32 lHi = 0;
+ xbInt32 lMid = 0;
+ xbInt32 lKeyCnt = GetKeyCount( npNode );
+
+
+ if( !bDescending ){
+ lHi = lKeyCnt - 1;
+
+ while( lLo <= lHi ){
+ lMid = (lLo + lHi) / 2;
+ iCompRc = CompareKey( cKeyType, GetKeyData( npNode, lMid, lKeyItemLen ), vpKey, (size_t) lSearchKeyLen );
+ if( iCompRc > 0 )
+ lHi = lMid - 1;
+ else if( iCompRc < 0 )
+ lLo = lMid + 1;
+ else{ // found match, look for leftmost occurrence
+
+ xbInt32 lFoundPos = lMid;
+ lMid--;
+ while( lMid >= 0 && CompareKey( cKeyType, GetKeyData( npNode, lMid, lKeyItemLen ), vpKey, (size_t) lSearchKeyLen ) == 0 ){
+ lFoundPos = lMid;
+ lMid--;
+ }
+ iCompRc = 0;
+ lLo = lFoundPos;
+ lHi = -1;
+ }
+ }
+ // update the compare key results
+ if( lMid != lLo ){
+ if( lLo >= lKeyCnt )
+ iCompRc = 1;
+ else
+ iCompRc = CompareKey( cKeyType, GetKeyData( npNode, lLo, lKeyItemLen ), vpKey, (size_t) lSearchKeyLen );
+ }
+ return (xbInt16) lLo;
+
+ } else { // descending key
+
+ lLo = lKeyCnt - 1;
+ while( lLo >= lHi && lHi != -1 ){
+ lMid = (lLo + lHi) / 2;
+ iCompRc = CompareKey( cKeyType, GetKeyData( npNode, lMid, lKeyItemLen ), vpKey, (size_t) lSearchKeyLen );
+
+ if( iCompRc > 0 ) {
+ lHi = lMid + 1;
+ }
+ else if( iCompRc < 0) {
+ lLo = lMid - 1;
+ }
+ else{ // found match, look for leftmost occurrence
+
+ xbInt32 lFoundPos = lMid;
+ lMid--;
+ while( lMid >= 0 && CompareKey( cKeyType, GetKeyData( npNode, lMid, lKeyItemLen ), vpKey, (size_t) lSearchKeyLen ) == 0 ){
+ lFoundPos = lMid;
+ lMid--;
+ }
+ iCompRc = 0;
+ lHi = lFoundPos;
+ lLo = -1;
+ }
+ }
+
+ // std::cout << "BSB1 lo = " << lLo << " mid = " << lMid << " hi = " << lHi << " keycnt = " << lKeyCnt << " iCompRc = " << iCompRc << "\n"; // key=" << (char *) vpKey << "\n";
+ if( lLo < 0 && iCompRc < 0 )
+ iCompRc = 1;
+ else if( iCompRc != 0 ) {
+ iCompRc = CompareKey( cKeyType, GetKeyData( npNode, (lLo < 0 ? 0 : lLo), lKeyItemLen ), vpKey, (size_t) lSearchKeyLen );
+ }
+ // std::cout << "BSB2 lo = " << lLo << " mid = " << lMid << " hi = " << lHi << " keycnt = " << lKeyCnt << " iCompRc = " << iCompRc << "\n"; // key=" << (char *) vpKey << "\n";
+ return (xbInt16) lHi;
+ }
+
+ // should never get here
+ // return (xbInt16) 0;
+}
+
+/***********************************************************************/
+//! @brief Check for duplicate keys.
+/*!
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbIx::CheckForDupKeys(){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbInt16 i = 0;
+
+ try{
+ void * vpTag;
+ xbInt16 iTagCount = GetTagCount();
+ for( i = 0; i < iTagCount; i++ ){
+ vpTag = GetTag( i );
+ if(( iRc = CheckForDupKey( vpTag )) < XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ }
+ }
+ catch (xbInt16 iRc ){
+ if( iRc != XB_KEY_NOT_UNIQUE ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxBase::CheckForDupKeys() Exception Caught. Error Stop = [%d] iRc = [%d] Tag=[%d]", iErrorStop, iRc, i );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ }
+ return iRc;
+}
+/***********************************************************************/
+//! @brief Close index file.
+/*!
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbIx::Close(){
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+
+ try{
+ if(( iRc = xbFclose()) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIx::Close() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+//! @brief Compare keys.
+/*!
+ \param cKeyType C - Character compare.<br>
+ N - Numeric BCD compare.<br>
+ D - Numeric compare.<br>
+ F - Numeric compare.<br>
+ \param v1 Left compare.<br>v2 - Right Compare.
+ \param iSearchKeyLen Length of key compare.
+ \returns 1 - Left operand is greater then right operand.<br>
+ 0 - Left operand is equal to right operand.<br>
+ -1 - Left operand is less than right operand.
+*/
+inline xbInt16 xbIx::CompareKey( char cKeyType, const void *v1, const void *v2, size_t iSearchKeyLen ) const{
+ if( cKeyType == 'C' ){ // character compare
+ return memcmp( v1, v2, iSearchKeyLen );
+ } else if( cKeyType == 'N' ){ // numeric bcd compare, mdx bcd numeric indices
+ xbBcd bcdk1( v1 );
+ return bcdk1.Compare( v2 );
+ } else if( cKeyType == 'D' || cKeyType == 'F' ){ // julian date compare, ndx float numeric indices
+ xbDouble *d1 = (xbDouble *) v1;
+ xbDouble *d2 = (xbDouble *) v2;
+ if( *d1 < *d2 )
+ return -1;
+ else if( *d1 > *d2 )
+ return 1;
+ else
+ return 0;
+ } else {
+// std::cout << "Unhandled key type [" << cKeyType << "]\n";
+ }
+ return XB_NO_ERROR;
+}
+/***********************************************************************/
+//! @brief Create Keys for record number
+/*!
+ \param iOpt 0 Build a key for FindKey usage, only rec buf 0.<br>
+ 1 Append Mode, Create key for an append, only use rec buf 0, set updated switch.<br>
+ 2 Update Mode, Create old version and new version keys, check if different, set update switch appropriately.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbIx::CreateKeys( xbInt16 iOpt ) {
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbInt16 i = 0;
+
+ try{
+ void * vpTag;
+ xbInt16 iTagCount = GetTagCount();
+
+ for( i = 0; i < iTagCount; i++ ){
+ vpTag = GetTag( i );
+ if(( iRc = CreateKey( vpTag, iOpt )) < XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIx::CreateKeys() Exception Caught. Error Stop = [%d] iRc = [%d] Tag=[%d]", iErrorStop, iRc, i );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return XB_NO_ERROR;
+}
+/***********************************************************************/
+//! @brief Delete keys for record number
+/*!
+ Delete keys to each tag in the index file if it was updated as determined
+ by CreateKeys function
+
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+//xbInt16 xbIx::DeleteKeys( xbUInt32 ulRecNo ){
+
+xbInt16 xbIx::DeleteKeys(){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbInt16 i = 0;
+
+ try{
+ void * vpTag;
+ xbInt16 iTagCount = GetTagCount();
+
+ for( i = 0; i < iTagCount; i++ ){
+ vpTag = GetTag( i );
+ if( GetKeySts( vpTag ) > 1 ){ // 0 = no update 1 = add 2 = update, 3 = delete
+ if(( iRc = UpdateTagKey( 'D', vpTag )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ }
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIx::DeleteKeys() Exception Caught. Error Stop = [%d] iRc = [%d] Tag=[%d]", iErrorStop, iRc, i );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+#ifdef XB_DEBUG_SUPPORT
+//! @brief Dump anode for debug purposes.
+/*!
+ \param pNode Pointer to node to dump.
+ \param iOption 0 = stdout<br>
+ 1 = Syslog<br>
+ 2 = Both<br>
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbIx::DumpNode( void *, xbIxNode *pNode, xbInt16 iOption ) const
+{
+ xbString s;
+ s.Sprintf( "Dump Node Block=[%d] CurKey=[%d]", pNode->ulBlockNo, pNode->iCurKeyNo );
+ xbase->WriteLogMessage( s, iOption );
+
+ return XB_NO_ERROR;
+}
+#endif // XB_DEBUG_SUPPORT
+
+/***********************************************************************/
+//! @brief Find double key
+/*!
+ \param vpTag Pointer to tag to search.
+ \param dKey Double value to search for.
+ \param iRetrieveSw xbTrue - Retrieve the record if key found.<br>
+ xbFalse - Don't retrieve record, check for key existence only.
+ \returns XB_NO_ERROR - Key found.<br>
+ XB_NOT_FOUND - Key not found.<br>
+ <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbIx::FindKey( void *vpTag, xbDouble dKey, xbInt16 iRetrieveSw ){
+ return FindKey( vpTag, &dKey, 8, iRetrieveSw );
+}
+/***********************************************************************/
+//! @brief Find string key
+/*!
+ \param vpTag Pointer to tag to search.
+ \param sKey String data to search for.
+ \param iRetrieveSw xbTrue - Retrieve the record if key found.<br>
+ xbFalse - Don't retrieve record, check for key existence only.
+ \returns XB_NO_ERROR - Key found.<br>
+ XB_NOT_FOUND - Key not found.<br>
+ <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbIx::FindKey( void *vpTag, const xbString &sKey, xbInt16 iRetrieveSw ){
+ return FindKey( vpTag, sKey.Str(), (xbInt32) sKey.Len(), iRetrieveSw );
+}
+/***********************************************************************/
+//! @brief Find character key
+/*!
+ \param vpTag Pointer to tag to search.
+ \param cKey String data to search for.
+ \param lKeyLen Length of key to search for.
+ \param iRetrieveSw xbTrue - Retrieve the record if key found.<br>
+ xbFalse - Don't retrieve record, check for key existence only.
+ \returns XB_NO_ERROR - Key found.<br>
+ XB_NOT_FOUND - Key not found.<br>
+ <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbIx::FindKey( void *vpTag, const char *cKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw ){
+ return FindKey( vpTag, (void *) cKey, lKeyLen, iRetrieveSw );
+}
+/***********************************************************************/
+//! @brief Find bcd key
+/*!
+ \param vpTag Pointer to tag to search.
+ \param bcd BCD data to search for.
+ \param iRetrieveSw xbTrue - Retrieve the record if key found.<br>
+ xbFalse - Don't retrieve record, check for key existence only.
+
+ \returns XB_NO_ERROR - Key found.<br>
+ XB_NOT_FOUND - Key not found.<br>
+ <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbIx::FindKey( void *vpTag, const xbBcd &bcd, xbInt16 iRetrieveSw ){
+ return FindKey( vpTag, bcd.GetBcd(), 12, iRetrieveSw );
+}
+/***********************************************************************/
+//! @brief Find date key
+/*!
+ \param vpTag Pointer to tag to search.
+ \param dtKey Date data to search for.
+ \param iRetrieveSw xbTrue - Retrieve the record if key found.<br>
+ xbFalse - Don't retrieve record, check for key existence only.
+ \returns XB_NO_ERROR - Key found.<br>
+ XB_NOT_FOUND - Key not found.<br>
+ <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbIx::FindKey( void *vpTag, const xbDate &dtKey, xbInt16 iRetrieveSw ){
+ xbDouble d = (xbDouble) dtKey.JulianDays();
+ return FindKey( vpTag, &d, 8, iRetrieveSw );
+}
+/***********************************************************************/
+//! @brief Free all nodes in a linked list.
+/*!
+ \param np Pointer to first node in linked list to free.
+ \returns NULL.
+*/
+xbIxNode *xbIx::FreeNodeChain( xbIxNode *np ){
+
+ // routine returns NULL
+ if( np ){
+ // free memory for a given chain of nodes
+ xbIxNode * np2;
+
+ // Clear the previous node's next pointer
+ if( np->npPrev )
+ np->npPrev->npNext = NULL;
+
+ // Clear out the tree
+ while( np ){
+ np2 = np->npNext;
+ NodeFree( np );
+ np = NULL;
+ np = np2;
+ }
+ }
+ return NULL;
+}
+/***********************************************************************/
+//! @brief Read block for block number.
+/*!
+ Routine to read a node/block out of an index file and store in xbIxNode structure
+ \param vpTag Pointer to tag.
+ \param ulBlockNo Block number to read off disk.
+ \param iOpt
+ 0 = Node is read into block buffer, not added to the node chain<br>
+ 1 = Node is read into new xbIxNode, then added to the node chain, and sets CurNode with new node<br>
+ 2 = Node is read into new xbIxNode, not added to the node chain<br>
+ CurNode points to new node<br>
+ \param ulAddlBuf Additional buffer size added to memory
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+
+*/
+
+xbInt16 xbIx::GetBlock( void *vpTag, xbUInt32 ulBlockNo, xbInt16 iOpt, xbUInt32 ulAddlBuf ){
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ xbIxNode *np = NULL;
+ try{
+
+ if( !vpTag && iOpt == 1 ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+
+ // set target location of block read to read
+ char *cp;
+ if( iOpt == 0 )
+ cp = cNodeBuf;
+ else{
+ if(( np = AllocateIxNode(GetBlockSize() + ulAddlBuf )) == NULL ){
+ iErrorStop = 110;
+ iRc = XB_NO_MEMORY;
+ throw( iRc );
+ }
+ cp = np->cpBlockData;
+ }
+ if(( iRc = ReadBlock( ulBlockNo, GetBlockSize(), cp )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ if( iOpt == 0 )
+ return iRc;
+ np->ulBlockNo = ulBlockNo;
+ np->iCurKeyNo = 0;
+ if( iOpt == 1 )
+ AppendNodeChain( vpTag, np );
+ else if( iOpt == 2 ){
+ std::cout << "Future use stub. xbIxbase::GetBlock() option 2 not coded.\n";
+ iErrorStop = 130;
+ iRc = XB_INVALID_OPTION;
+ throw iRc;
+ // SetCurNode( vpTag, np );
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIx::GetBlock() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ if( np ) NodeFree( np );
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+//! @brief Get pointer to current tag.
+/*!
+ \returns Pointer to current tag.
+*/
+
+void *xbIx::GetCurTag() const {
+ return vpCurTag;
+}
+/***********************************************************************/
+//! @brief Get pointer to dbf.
+/*!
+ \returns Pointer to dbf.
+*/
+xbDbf *xbIx::GetDbf() const {
+ return this->dbf;
+}
+/***********************************************************************/
+//! @brief Get the first key for the current tag.
+/*!
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbIx::GetFirstKey(){
+ return GetFirstKey( vpCurTag, 0 );
+}
+
+/***********************************************************************/
+//! @brief Get the first key for a given tag.
+/*!
+ \param vpTag Tag for get first key operation.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbIx::GetFirstKey( void *vpTag ){
+ return GetFirstKey( vpTag, 0 );
+}
+/***********************************************************************/
+//! @brief Get the last key for the current tag.
+/*!
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbIx::GetLastKey(){
+ return GetLastKey( 0, vpCurTag, 0 );
+}
+/***********************************************************************/
+//! @brief Get the last key for a given tag.
+/*!
+ \param vpTag Tag for get last key operation.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbIx::GetLastKey( void *vpTag ){
+ return GetLastKey( 0, vpTag, 0 );
+}
+
+/***********************************************************************/
+//! @brief Get the file lock status.
+/*!
+ \returns xbTrue - Index file is locked.<br>xbFalse - Index file is not locked.
+*/
+xbBool xbIx::GetLocked() const {
+ return bLocked;
+}
+
+/***********************************************************************/
+//! @brief Get the key count for number of keys on a node.
+/*!
+ \param np Given node for key count.
+ \returns Number of keys on the node.
+*/
+xbInt32 xbIx::GetKeyCount( xbIxNode *np ) const {
+ // assumes the first four bytes of the block is a four byte number
+ // representing the number of keys contained on the block
+ return eGetInt32( np->cpBlockData );
+}
+/***********************************************************************/
+//! @brief Get key data for a given key number.
+/*!
+ \param np Given node for key retrieval.
+ \param iKeyNo Which key to pull.
+ \param iKeyItemLen Length of key plus pointers.
+ \returns Pointer to a given key.
+*/
+char * xbIx::GetKeyData( xbIxNode *np, xbInt16 iKeyNo, xbInt16 iKeyItemLen ) const {
+ if( !np ) return NULL;
+ char *p = np->cpBlockData;
+ xbUInt32 ulKeyCnt = eGetUInt32( p );
+ if( iKeyNo < 0 || iKeyNo > (xbInt16) ulKeyCnt ) return NULL;
+ xbInt16 iOffset = 12 + (iKeyNo * iKeyItemLen);
+ p+=iOffset;
+ return p;
+}
+/***********************************************************************/
+//! @brief Get the next key for the current tag.
+/*!
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbIx::GetNextKey(){
+ return GetNextKey( vpCurTag, 0 );
+}
+/***********************************************************************/
+//! @brief Get the next key for the given tag.
+/*!
+ \param vpTag Tag for next key operation.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbIx::GetNextKey( void *vpTag ){
+ return GetNextKey( vpTag, 0 );
+}
+/***********************************************************************/
+//! @brief Get the prev key for the current tag.
+/*!
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbIx::GetPrevKey(){
+ return GetPrevKey( vpCurTag, 0 );
+}
+/***********************************************************************/
+//! @brief Get the previous key for the given tag.
+/*!
+ \param vpTag Tag for previous key operation.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbIx::GetPrevKey( void *vpTag ){
+ return GetPrevKey( vpTag, 0 );
+}
+/***********************************************************************/
+//! @brief Free an index node
+/*!
+ \param ixNode Pointer to index node to free.
+ \returns void
+*/
+void xbIx::NodeFree( xbIxNode *ixNode ){
+ if( ixNode ){
+ if( ixNode->cpBlockData ){
+ free( ixNode->cpBlockData );
+ ixNode->cpBlockData = NULL;
+ }
+ free( ixNode );
+ ixNode = NULL;
+ }
+}
+/***********************************************************************/
+//! @brief Open an index file.
+/*!
+ MDX files are opened automatically and don't need opened.
+ NDX files that are associated with the DBF file are opened automatically.
+
+ Non production indexes that haven't been opened will need to be opened to be used.
+ \param sFileName Index file name to open.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbIx::Open( const xbString & sFileName ){
+
+ // There are no locking requirements when opening an NDX index
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+
+ try{
+ /* copy the file name to the class variable */
+ this->SetFileName( sFileName );
+
+ if( !FileExists()){
+ iErrorStop = 100;
+ iRc = XB_FILE_NOT_FOUND;
+ throw iRc;
+ }
+ /* open the file */
+ if(( iRc = xbFopen( dbf->GetOpenMode(), dbf->GetShareMode())) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ if(( iRc = ReadHeadBlock()) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ SetCurTag( (xbInt16) 0 ); // default the first tag as the current tag
+ }
+
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIx::Open( %s ) Exception Caught. Error Stop = [%d] iRc = [%d]", sFileName.Str(), iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+/***********************************************************************/
+//! @brief Set the current tag.
+/*!
+ \param vpCurTag Pointer to tag to set as current.
+ \returns void
+*/
+void xbIx::SetCurTag( void *vpCurTag ){
+ this->vpCurTag = vpCurTag;
+}
+/***********************************************************************/
+//! @brief Set the dbf pointer.
+/*!
+ \param dbf Dbf pointer to set.
+ \returns void
+*/
+void xbIx::SetDbf( xbDbf *dbf ){
+ this->dbf = dbf;
+}
+/***********************************************************************/
+//! @brief Set the file lock status.
+/*!
+ \param bLocked xbTrue - Set to locked.<br>xbFalse - Set to unlocked.
+ \returns void
+*/
+void xbIx::SetLocked( xbBool bLocked ){
+ this->bLocked = bLocked;
+}
+/***********************************************************************/
+} /* namespace */
+#endif /* XB_INDEX_SUPPORT */
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/core/xbixmdx.cpp b/1Tdata/xbase/xbase64-4.1.4/src/core/xbixmdx.cpp
new file mode 100755
index 0000000..0eef64b
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/core/xbixmdx.cpp
@@ -0,0 +1,4844 @@
+/* xbixmdx.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+
+ MDX indices are comprised of blocks and pages.
+ A page is 512 bytes.
+ A Block is one or more pages.
+ The default block size is two 512 byte pages per block.
+ Nodes are used for storing block images in memory
+
+*/
+
+#include "xbase.h"
+
+#ifdef XB_MDX_SUPPORT
+
+namespace xb{
+
+/***********************************************************************/
+xbIxMdx::xbIxMdx( xbDbf *dbf ) : xbIx( dbf ){
+ Init();
+}
+/***********************************************************************/
+//void xbIxMdx::Init( xbInt16 iOpt ){
+void xbIxMdx::Init( xbInt16 ){
+
+ cVersion = 0;
+ cCreateYY = 0;
+ cCreateMM = 0;
+ cCreateDD = 0;
+ sFileName = "";
+ iBlockFactor = 0;
+ cProdIxFlag = 0;
+ cTagEntryCnt = 0;
+ iTagLen = 0;
+ iTagUseCnt = 0;
+ cNextTag = 0;
+ c1B = 0x0b;
+ ulPageCnt = 0;
+ ulFirstFreePage = 0;
+ ulNoOfBlockAvail = 0;
+ cUpdateYY = 0;
+ cUpdateMM = 0;
+ cUpdateDD = 0;
+ mdxTagTbl = NULL;
+ cNodeBuf = NULL;
+ bReuseEmptyNodes = xbTrue;
+}
+/***********************************************************************/
+xbIxMdx::~xbIxMdx(){
+ if( cNodeBuf )
+ free( cNodeBuf );
+
+ if( FileIsOpen())
+ Close();
+}
+/***********************************************************************/
+//! @brief Add key.
+/*!
+ Add key. If this is a unique index, this logic assumes the duplicate
+ check logic was already done.
+
+ \param vpTag Tag to update.
+ \param ulRecNo Record number to add key for.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbIxMdx::AddKey( void * vpTag, xbUInt32 ulRecNo ){
+
+ xbMdxTag * npTag = (xbMdxTag *) vpTag;
+ if( GetUniqueKeyOpt() == XB_EMULATE_DBASE && npTag->bFoundSts )
+ return XB_NO_ERROR;
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbInt16 iHeadNodeUpdateOpt = 2;
+ xbIxNode * npRightNode = NULL;
+ xbUInt32 ulNewRightChild = 0;
+
+ try{
+ if(( iRc = xbIxMdx::KeySetPosAdd( npTag, ulRecNo )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ xbInt32 lKeyCnt = GetKeyCount( npTag->npCurNode );
+ if( lKeyCnt < npTag->iKeysPerBlock ){
+ // Section A - add key to appropriate position if space available
+ // std::cout << "AddKey Section A begin\n";
+ if(( iRc = InsertNodeL( npTag, npTag->npCurNode, npTag->npCurNode->iCurKeyNo, npTag->cpKeyBuf, ulRecNo )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ } else {
+ // land here with a full leaf node
+ iHeadNodeUpdateOpt = 1;
+ npRightNode = AllocateIxNode( npTag, GetBlockSize() + (xbUInt32) npTag->iKeyItemLen, npTag->npCurNode->ulBlockNo * (xbUInt32) iBlockFactor );
+ if( !npRightNode ){
+ iErrorStop = 120;
+ iRc = XB_NO_MEMORY;
+ throw iRc;
+ }
+
+ if(( npTag->npCurNode->ulBlockNo * (xbUInt32) iBlockFactor ) == npTag->ulRightChild ){
+ ulNewRightChild = npRightNode->ulBlockNo * (xbUInt32) iBlockFactor;
+ }
+
+ if(( iRc = xbIxMdx::SplitNodeL( npTag, npTag->npCurNode, npRightNode, npTag->npCurNode->iCurKeyNo, npTag->cpKeyBuf, ulRecNo )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ xbUInt32 ulTempBlockNo = npRightNode->ulBlockNo;
+
+ // section C - go up the tree, splitting nodes as necessary
+ xbIxNode * npParent = npTag->npCurNode->npPrev;
+ while( npParent && GetKeyCount( npParent ) >= npTag->iKeysPerBlock ){
+ //std::cout << "Section C begin interior node is full\n";
+ npRightNode = FreeNodeChain( npRightNode );
+ npRightNode = AllocateIxNode( npTag, GetBlockSize() + (xbUInt32) npTag->iKeyItemLen, npParent->ulBlockNo * (xbUInt32) iBlockFactor );
+ //std::cout << "Section C - B new right node block number for interior node split= " << npRightNode->ulBlockNo << "\n";
+
+ if( !npRightNode ){
+ iErrorStop = 140;
+ iRc = XB_NO_MEMORY;
+ throw iRc;
+ }
+ //std::cout << "Section C - going to split interior node C\n";
+
+ if(( iRc = SplitNodeI( npTag, npParent, npRightNode, npParent->iCurKeyNo, BlockToPage( ulTempBlockNo ))) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+ // std::cout << "Section C - interior node split \n";
+ ulTempBlockNo = npRightNode->ulBlockNo;
+ npTag->npCurNode = npParent;
+ npParent = npParent->npPrev;
+ }
+
+ // section D - if cur node is split root, create new root
+ if(( npTag->npCurNode->ulBlockNo * (xbUInt32) iBlockFactor ) == npTag->ulRootPage ){
+ if(( iRc = AddKeyNewRoot( npTag, npTag->npCurNode, npRightNode )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+ if( npRightNode )
+ npRightNode = FreeNodeChain( npRightNode );
+
+ } else {
+
+ // std::cout << "Section E, put key in parent\n";
+ if(( iRc = InsertNodeI( (void *) vpTag, (xbIxNode *) npParent, (xbInt16) npParent->iCurKeyNo, BlockToPage( npRightNode->ulBlockNo ))) != XB_NO_ERROR ){
+ iErrorStop = 170;
+ throw iRc;
+ }
+ }
+ }
+
+ // update the header
+ if(( iRc = WriteHeadBlock( iHeadNodeUpdateOpt )) != XB_NO_ERROR ){
+ iErrorStop = 180;
+ throw iRc;
+ }
+
+ // if adding the first key, set the cHasKeys field
+ if( !npTag->cHasKeys ){
+ npTag->cHasKeys = 0x01;
+ if(( iRc = xbFseek( ((npTag->ulTagHdrPageNo * 512) + 246), SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 190;
+ throw iRc;
+ }
+ if(( iRc = xbFwrite( &npTag->cHasKeys, 1, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 200;
+ throw iRc;
+ }
+ }
+
+ if( ulNewRightChild > 0 ){
+
+ char cBuf[4];
+ ePutUInt32( cBuf, ulNewRightChild );
+ if(( iRc = xbFseek( ((npTag->ulTagHdrPageNo * 512) + 252), SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 210;
+ throw iRc;
+ }
+ if(( iRc = xbFwrite( &cBuf, 4, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 220;
+ throw iRc;
+ }
+ npTag->ulRightChild = ulNewRightChild;
+ }
+
+ if( npRightNode )
+ npRightNode = FreeNodeChain( npRightNode );
+ npTag->npNodeChain = FreeNodeChain( npTag->npNodeChain );
+ npTag->npCurNode = NULL;
+
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::AddKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+/***********************************************************************/
+void xbIxMdx::AppendNodeChain( void *vpTag, xbIxNode * npNode ){
+ xbMdxTag * mdxTag = (xbMdxTag *) vpTag;
+ if( mdxTag->npNodeChain == NULL ){
+ mdxTag->npNodeChain = npNode;
+ mdxTag->npCurNode = npNode;
+ } else {
+ npNode->npPrev = mdxTag->npCurNode;
+ mdxTag->npCurNode->npNext = npNode;
+ mdxTag->npCurNode = npNode;
+ }
+ // time stamp the node chain
+ GetFileMtime( mdxTag->tNodeChainTs );
+}
+
+/***********************************************************************/
+//! @brief Add new root node.
+/*!
+ \param mpTag Tag to update.
+ \param npLeft Left node.
+ \param npRight Right node.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbIxMdx::AddKeyNewRoot( xbMdxTag *npTag, xbIxNode *npLeft, xbIxNode *npRight ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ char *pLastKey = NULL;
+
+ try{
+ xbIxNode *npRoot = AllocateIxNode( npTag, GetBlockSize() + (xbUInt32) npTag->iKeyItemLen, npRight->ulBlockNo * (xbUInt32) iBlockFactor );
+ if( !npRoot ){
+ iErrorStop = 100;
+ iRc = XB_NO_MEMORY;
+ throw iRc;
+ }
+ npTag->ulRootPage = npRoot->ulBlockNo;
+
+ pLastKey = (char *) malloc( (size_t) npTag->iKeyLen );
+ if(( iRc = GetLastKeyForBlockNo( npTag, npLeft->ulBlockNo, pLastKey )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ char * pTrg = npRoot->cpBlockData;
+
+ // set no of keys to 1
+ ePutUInt32( pTrg, 1 );
+
+ // set the left node number
+ pTrg += 8;
+ ePutUInt32( pTrg, npLeft->ulBlockNo * (xbUInt32) iBlockFactor );
+
+ // set the key
+ pTrg+= 4;
+ memcpy( pTrg, pLastKey, (size_t) npTag->iKeyLen );
+ pTrg+= npTag->iKeyItemLen - 4;
+ ePutUInt32( pTrg, npRight->ulBlockNo * (xbUInt32) iBlockFactor );
+
+ // write out the new block
+ if(( iRc = WriteBlock( npRoot->ulBlockNo, GetBlockSize(), npRoot->cpBlockData )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+
+ // write out the new root node number in the tag header
+ // position the file
+ xbUInt32 ulPagePos = npTag->ulTagHdrPageNo * 512;
+
+ // save the number to a buffer
+ char cBuf[4];
+ ePutUInt32( cBuf, npRoot->ulBlockNo * ((xbUInt32) iBlockFactor ));
+
+ if(( iRc = xbFseek( ulPagePos, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ if(( iRc = xbFwrite( &cBuf, 4, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+
+ if( pLastKey )
+ free( pLastKey );
+
+ npRoot = FreeNodeChain( npRoot );
+
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::AddKeyNewRoot() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ if( pLastKey )
+ free( pLastKey );
+ }
+ return iRc;
+}
+
+
+
+/***********************************************************************/
+//! @brief Allocate a node.
+/*!
+ \param mpTag Pointer to mdx tag
+ \param ulBufSize Buffer size.
+ \param ulBlock2 Value to load in ulBlock2 field, bytes 4-7 in the first page of the block
+ \returns Pointer to new node.
+*/
+xbIxNode * xbIxMdx::AllocateIxNode( xbMdxTag * mpTag, xbUInt32 ulBufSize, xbUInt32 ulBlock2 ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbIxNode *n = NULL;
+
+ try{
+ if(( n = xbIx::AllocateIxNode( ulBufSize )) == NULL ){
+ iRc = XB_NO_MEMORY;
+ iErrorStop = 100;
+ throw iRc;
+ }
+ char *p = n->cpBlockData;
+ p += 4;
+
+ if( ulFirstFreePage > 0 && bReuseEmptyNodes ){
+ // have an empty node we can reuse
+ n->ulBlockNo = PageToBlock( ulFirstFreePage );
+ if(( iRc = ReadBlock( n->ulBlockNo, GetBlockSize(), n->cpBlockData )) != XB_NO_ERROR ){
+ iRc = 110;
+ throw iRc;
+ }
+ // update ulFirstFreePage
+ ulFirstFreePage = eGetUInt32( p );
+ if(( iRc = xbFseek( 36, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ if(( iRc = xbFwrite( p, 4, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ // memset cpBlockData to zeroes
+ memset( n->cpBlockData, 0x00, GetBlockSize());
+
+ } else {
+ n->ulBlockNo = ulPageCnt / (xbUInt32) iBlockFactor;
+ ulPageCnt += (xbUInt32) iBlockFactor;
+ }
+
+ mpTag->ulTagSize += (xbUInt32) iBlockFactor;
+ if( ulBlock2 > 0 ){
+ ePutUInt32( p, ulBlock2 );
+ }
+ }
+ catch( xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::AllocateIxNode() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ if( n )
+ n = FreeNodeChain( n );
+ }
+ return n;
+}
+/***********************************************************************/
+//! @brief Calculate B-tree pointers.
+/*!
+ Set binary tree pointer value. The MDX tags are stored with binary
+ tree positions. This routine calculates the value in memory.
+ \returns void
+*/
+
+void xbIxMdx::CalcBtreePointers(){
+
+ xbInt16 iaLeftChild[48];
+ xbInt16 iaRightChild[48];
+ xbInt16 iaParent[48];
+
+ for( xbInt16 i = 0; i < 48; i++ ){
+ iaLeftChild[i] = 0;
+ iaRightChild[i] = 0;
+ iaParent[i] = 0;
+ }
+
+ // anything to do?
+ if( iTagUseCnt > 1 ){
+ xbString sBaseTag;
+ xbString sThisTag;
+ xbString sWorkTag;
+ xbInt16 iWorkTagNo;
+ xbBool bDone;
+ sBaseTag = GetTagName( GetTag( 0 ));
+
+ for( xbInt16 iThisTagNo = 1; iThisTagNo < iTagUseCnt; iThisTagNo++ ){
+ iWorkTagNo = 0;
+ sWorkTag.Set( sBaseTag );
+ sThisTag = GetTagName( GetTag( iThisTagNo ));
+ bDone = xbFalse;
+ while( !bDone ){
+ if( sThisTag < sWorkTag ){
+ if( iaLeftChild[iWorkTagNo] == 0 ) {
+ iaLeftChild[iWorkTagNo] = iThisTagNo + 1;
+ iaParent[iThisTagNo] = iWorkTagNo + 1;
+ bDone = xbTrue;
+ } else {
+ iWorkTagNo = iaLeftChild[iWorkTagNo]-1;
+ sWorkTag = GetTagName( GetTag( iWorkTagNo));
+ }
+ } else {
+ if( iaRightChild[iWorkTagNo] == 0 ) {
+ iaRightChild[iWorkTagNo] = iThisTagNo + 1;
+ iaParent[iThisTagNo] = iWorkTagNo + 1;
+ bDone = xbTrue;
+ } else {
+ iWorkTagNo = iaRightChild[iWorkTagNo]-1;
+ sWorkTag = GetTagName( GetTag( iWorkTagNo ));
+ }
+ }
+ }
+ }
+ }
+
+ xbString s;
+ xbMdxTag *mpTag = mdxTagTbl;
+ for( xbInt16 i = 0; i < iTagUseCnt; i++ ){
+ mpTag->cLeftChild = (char ) iaLeftChild[i];
+ mpTag->cRightChild = (char ) iaRightChild[i];
+ mpTag->cParent = (char ) iaParent[i];
+ mpTag = mpTag->next;
+ }
+}
+
+/**************************************************************************************************************/
+//! @brief Calculate the page number for a given block
+/*!
+ This routine is called by any function needing to calculate the page number for a given block.
+ Page numbers are stored internally in the physical file, and the library reads and writes in
+ blocks of one or more pages.
+
+ Assumes valid data input
+
+ \param ulBlockNo Block Number
+ \returns Calculated page number.
+*/
+
+inline xbUInt32 xbIxMdx::BlockToPage( xbUInt32 ulBlockNo ){
+ return ulBlockNo * (xbUInt32) iBlockFactor;
+}
+/***********************************************************************/
+char xbIxMdx::CalcTagKeyFmt( xbExp &exp ){
+
+ xbExpNode *n = exp.GetTreeHandle();
+ if( n->GetChildCnt() == 0 && n->GetNodeType() == XB_EXP_FIELD )
+ return 0x01;
+ else
+ return 0;
+}
+/***********************************************************************/
+//! @brief Check for duplicate key.
+/*!
+ \param vpTag Tag to check.
+ \returns XB_KEY_NOT_UNIQUE<br>XB_NO_ERROR
+*/
+
+xbInt16 xbIxMdx::CheckForDupKey( void *vpTag )
+{
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbMdxTag *mpTag = (xbMdxTag *) vpTag;
+ mpTag->bFoundSts = xbFalse;
+ try{
+ if( GetUnique( mpTag )){
+ if( mpTag->iKeySts == XB_ADD_KEY || mpTag->iKeySts == XB_UPD_KEY )
+ if( KeyExists( mpTag )){
+ if( GetUniqueKeyOpt() == XB_EMULATE_DBASE ){
+ mpTag->bFoundSts = xbTrue;
+ return 0;
+ } else {
+ return XB_KEY_NOT_UNIQUE;
+ }
+ }
+ }
+ return 0;
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::CheckForDupKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+/***********************************************************************/
+//! @brief Check tag integrity.
+/*!
+ Check a tag for accuracy.
+
+ \param vpTag Tag to create key for.
+ \param iOpt Output message destination<br>
+ 0 = stdout<br>
+ 1 = Syslog<br>
+ 2 = Both<br>
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbIxMdx::CheckTagIntegrity( void *vpTag, xbInt16 iOpt ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iRc2;
+ xbInt16 iRc3;
+ xbInt16 iErrorStop = 0;
+ xbUInt32 ulIxCnt = 0;
+ xbUInt32 ulThisRecNo = 0;
+ xbUInt32 ulPrevRecNo = 0;
+ xbBool bDone = false;
+ xbString sMsg;
+ char cKeyType;
+ char *pPrevKeyBuf = NULL;
+ xbMdxTag *npTag = (xbMdxTag *) vpTag;
+ xbBool bDescending = npTag->cKeyFmt2 & 0x08;
+
+ #ifdef XB_LOCKING_SUPPORT
+ xbBool bLocked = xbFalse;
+ #endif
+
+ try{
+
+ #ifdef XB_LOCKING_SUPPORT
+ if( dbf->GetAutoLock() && !dbf->GetTableLocked() ){
+ if(( iRc = dbf->LockTable( XB_LOCK )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ bLocked = xbTrue;
+ }
+ #endif
+
+ memset( npTag->cpKeyBuf2, 0x00, (size_t) npTag->iKeyLen );
+ cKeyType = GetKeyType( vpTag );
+
+ pPrevKeyBuf = (char *) calloc( 1, (size_t) npTag->iKeyLen );
+ iRc = GetFirstKey( vpTag, 0 );
+
+ memcpy( pPrevKeyBuf, GetKeyData( npTag->npCurNode, npTag->npCurNode->iCurKeyNo, npTag->iKeyItemLen ), (size_t) npTag->iKeyLen );
+
+ // for each key in the index, make sure it is trending in the right direction
+ while( iRc == XB_NO_ERROR && !bDone ){
+ ulIxCnt++;
+
+ iRc = GetNextKey( vpTag, 0 );
+ if( iRc == XB_NO_ERROR ){
+
+ // compare this key to prev key
+ iRc2 = CompareKey( cKeyType, GetKeyData( npTag->npCurNode, npTag->npCurNode->iCurKeyNo, npTag->iKeyItemLen ),
+ pPrevKeyBuf, (size_t) npTag->iKeyLen );
+
+ if(( iRc2 < 0 && !bDescending ) || ( iRc2 > 0 && bDescending )){
+ sMsg.Sprintf( "Key sequence error at key number [%ld].", ulIxCnt );
+ xbase->WriteLogMessage( sMsg, iOpt );
+ iErrorStop = 110;
+ iRc = XB_INVALID_INDEX;
+ throw iRc;
+ }
+
+ ulThisRecNo = 0;
+ if(( iRc3 = GetDbfPtr( vpTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulThisRecNo )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc3;
+ }
+
+ if( iRc2 == 0 && (ulThisRecNo <= ulPrevRecNo )){
+ sMsg.Sprintf( "Dbf record number sequence error at key number [%ld].", iOpt );
+ xbase->WriteLogMessage( sMsg, iOpt );
+ iErrorStop = 130;
+ iRc = XB_INVALID_INDEX;
+ throw iRc;
+ }
+ // save this key info to prev key
+ memcpy( pPrevKeyBuf, GetKeyData( npTag->npCurNode, npTag->npCurNode->iCurKeyNo, npTag->iKeyItemLen ), (size_t) npTag->iKeyLen );
+ ulPrevRecNo = ulThisRecNo;
+ }
+ }
+
+ xbUInt32 ulDbfCnt = 0;
+ if(( iRc = dbf->GetRecordCnt( ulDbfCnt )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+
+ xbUInt32 ulFiltCnt = 0;
+ xbBool bFiltered = xbTrue;
+ // verify each record in the dbf file has a corresponding index entry
+ xbUInt32 j = 0;
+ while( j < ulDbfCnt ){
+
+ if(( iRc = dbf->GetRecord( ++j )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+ if( npTag->cHasFilter ){
+ if(( iRc = npTag->filter->ProcessExpression( 0 )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+ if(( iRc = npTag->filter->GetBoolResult( bFiltered )) != XB_NO_ERROR ){
+ iErrorStop = 170;
+ throw iRc;
+ }
+ }
+
+ if( bFiltered ){
+ if(( iRc = FindKeyForCurRec( vpTag )) != XB_NO_ERROR ){
+ ulThisRecNo = j;
+ iErrorStop = 180;
+ throw iRc;
+ }
+ ulFiltCnt++;
+ }
+ }
+
+ if((GetUniqueKeyOpt() == XB_EMULATE_DBASE) && (GetUnique( vpTag ))){
+ // can't compare counts if using XB_EMULATE_DBASE and it's a unique index
+ } else {
+ if( ulIxCnt != ulFiltCnt && GetUniqueKeyOpt() == XB_HALT_ON_DUPKEY ){
+ if( npTag->cHasFilter )
+ sMsg.Sprintf( "xbIxMdx::CheckTagIntegrity() Filtered index entry count [%ld] does not match dbf record count [%ld] for tag [%s]", ulIxCnt, ulFiltCnt, npTag->cTagName );
+ else
+ sMsg.Sprintf( "xbIxMdx::CheckTagIntegrity() Index entry count [%ld] does not match dbf record count [%ld] for tag [%s]", ulIxCnt, ulFiltCnt, npTag->cTagName );
+
+ xbase->WriteLogMessage( sMsg, iOpt );
+ iErrorStop = 190;
+ iRc = XB_INVALID_INDEX;
+ throw iRc;
+ }
+ if( npTag->cHasFilter )
+ sMsg.Sprintf( "xbIxMdx::CheckTagIntegrity() Filtered index entry count [%ld] matches dbf record count [%ld] for tag [%s]", ulIxCnt, ulFiltCnt, npTag->cTagName );
+ else
+ sMsg.Sprintf( "xbIxMdx::CheckTagIntegrity() Index entry count [%ld] matches dbf record count [%ld] for tag [%s]", ulIxCnt, ulFiltCnt, npTag->cTagName );
+ xbase->WriteLogMessage( sMsg, iOpt );
+ }
+
+ if( pPrevKeyBuf )
+ free( pPrevKeyBuf );
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::CheckTagIntegrity() Exception Caught. Error Stop = [%d] iRc = [%d] Tag = [%s]", iErrorStop, iRc, npTag->cTagName );
+ xbase->WriteLogMessage( sMsg, iOpt );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ), iOpt );
+ if( pPrevKeyBuf )
+ free( pPrevKeyBuf );
+
+ if( iErrorStop == 160 ){
+ sMsg.Sprintf( "xbIxMdx::CheckTagIntegrity() Missing index entry for record [%d]", ulThisRecNo );
+ xbase->WriteLogMessage( sMsg, iOpt );
+ }
+ }
+ #ifdef XB_LOCKING_SUPPORT
+ if( bLocked ){
+ dbf->LockTable( XB_UNLOCK );
+ }
+ #endif
+
+ return iRc;
+}
+
+/***********************************************************************/
+xbMdxTag *xbIxMdx::ClearTagTable(){
+
+ // clear the list of tags
+ xbMdxTag *tt = mdxTagTbl;
+ xbMdxTag *tt2;
+ while( tt ){
+ tt2 = tt;
+ tt = tt->next;
+ tt2->npNodeChain = FreeNodeChain( tt2->npNodeChain );
+ tt2->npCurNode = NULL;
+ if( tt2->cpKeyBuf )
+ free( tt2->cpKeyBuf );
+ if( tt2->cpKeyBuf2 )
+ free( tt2->cpKeyBuf2 );
+ if( tt2->exp )
+ delete tt2->exp;
+ if( tt2->filter )
+ delete tt2->filter;
+ if( tt2->sKeyExp )
+ delete tt2->sKeyExp;
+ if( tt2->sTagName )
+ delete tt2->sTagName;
+ if( tt2->sFiltExp )
+ delete tt2->sFiltExp;
+ free( tt2 );
+ }
+ return NULL;
+}
+/***********************************************************************/
+xbInt16 xbIxMdx::Close(){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+
+ try{
+ mdxTagTbl = ClearTagTable();
+ if(( iRc = xbIx::Close()) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::Close() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+//! @brief Create key.
+/*!
+
+ \param vpTag Tag
+ \param iOpt 1 = Append, 2 = Update
+ \returns XB_KEY_NOT_UNIQUE<br>XB_NO_ERROR
+
+ iKeySts 0 - No Updates
+ 1 - Add Key XB_ADD_KEY
+ 2 - Update Key XB_UPD_KEY
+ 3 - Delete Key XB_DEL_KEY
+
+ bKeyFiltered xbFalse - Key filtered out
+ xbTrue - Key filtered in
+
+ cpKeyBuf - Key buffer for add
+ cpKeyBuf2 - Key buffer for delete
+
+*/
+
+xbInt16 xbIxMdx::CreateKey( void *vpTag, xbInt16 iOpt ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+
+ xbBool bFilter0 = xbFalse; // filter against RecBuf, updated record buffer
+ xbBool bFilter1 = xbFalse; // filter against recBuf2, original record buffer
+
+ try{
+
+ xbMdxTag *npTag = (xbMdxTag *) vpTag;
+ npTag->iKeySts = 0;
+
+ // do tag filter logic
+ if( npTag->cHasFilter ){
+ if(( iRc = npTag->filter->ProcessExpression( 0 )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ if(( iRc = npTag->filter->GetBoolResult( bFilter0 )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ } else {
+ bFilter0 = xbTrue;
+ }
+
+ // if add request and filtered out, we're done
+ if( iOpt == 1 && !bFilter0 )
+ return XB_NO_ERROR;
+
+ if(( iRc = npTag->exp->ProcessExpression( 0 )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ if( npTag->exp->GetReturnType() == XB_EXP_CHAR )
+ npTag->exp->GetStringResult( npTag->cpKeyBuf, (xbUInt32) npTag->iKeyLen );
+ else if( npTag->exp->GetReturnType() == XB_EXP_NUMERIC ){
+ xbDouble d;
+ npTag->exp->GetNumericResult( d );
+ xbBcd bcd( d );
+ bcd.ToChar( npTag->cpKeyBuf );
+ }
+ else if( npTag->exp->GetReturnType() == XB_EXP_DATE ){
+ xbDouble d;
+ npTag->exp->GetNumericResult( d );
+ memcpy( npTag->cpKeyBuf, &d, 8 );
+ }
+
+ if( iOpt == 1 ) // Append
+ npTag->iKeySts = XB_ADD_KEY;
+
+ else if( iOpt == 2 ){ // Update
+ if( npTag->cHasFilter ){
+ if(( iRc = npTag->filter->ProcessExpression( 1 )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ if(( iRc = npTag->filter->GetBoolResult( bFilter1 )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+ } else {
+ bFilter1 = xbTrue;
+ }
+
+ if(( iRc = npTag->exp->ProcessExpression( 1 )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+
+ if( npTag->exp->GetReturnType() == XB_EXP_CHAR ){
+ npTag->exp->GetStringResult( npTag->cpKeyBuf2, (xbUInt32) npTag->iKeyLen );
+
+ } else if( npTag->exp->GetReturnType() == XB_EXP_NUMERIC ){
+ xbDouble d;
+ npTag->exp->GetNumericResult( d );
+ xbBcd bcd( d );
+ bcd.ToChar( npTag->cpKeyBuf2 );
+
+ } else if( npTag->exp->GetReturnType() == XB_EXP_DATE ){
+ xbDouble d;
+ npTag->exp->GetNumericResult( d );
+ memcpy( npTag->cpKeyBuf2, &d, 8 );
+
+ }
+
+ if( bFilter1 ){ // original key was indexed
+ if( bFilter0 ){ // new key s/b indexed, update it if changed
+ if( memcmp( npTag->cpKeyBuf, npTag->cpKeyBuf2, (size_t) npTag->iKeyLen )){
+ npTag->iKeySts = XB_UPD_KEY;
+ }
+ } else { // original key indexed, new key not indexed, delete it
+ npTag->iKeySts = XB_DEL_KEY;
+ }
+ } else { // original key not indexed
+ if( bFilter0 )
+ npTag->iKeySts = XB_ADD_KEY;
+ }
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::CreateKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+/***********************************************************************/
+//! @brief Create new tag.
+/*!
+ This routine creates a new tag. When complete, sets the cur tag pointer to
+ the newly created tag.
+
+
+ \param sName Tag Name, including .MDX suffix
+ \param sKey Key Expression
+ \param sFilter Filter expression.
+ \param iDescending
+ \param iUnique xbtrue - Unique.<br>xbFalse - Not unique.
+ \param iOverLay xbTrue - Overlay if file already exists.<br>xbFalse - Don't overlay.
+ \param vpTag Output from method Pointer to vptag pointer.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+
+xbInt16 xbIxMdx::CreateTag( const xbString &sName, const xbString &sKey, const xbString &sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, void **vpTag ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbMdxTag *tte = NULL;
+
+ try{
+ // verify room for new tag
+ if( !( iTagUseCnt < 47 )){
+ iErrorStop = 100;
+ iRc = XB_LIMIT_REACHED;
+ throw iRc;
+ }
+
+ // verify valid tag name
+ xbString sWorker = sName;
+ sWorker.Trim();
+ if( sWorker.Len() > 10 ){
+ iErrorStop = 110;
+ iRc = XB_INVALID_TAG;
+ throw iRc;
+ }
+
+ // verify tag not already defined
+ if( iTagUseCnt > 0 ){
+ if( GetTag( sWorker )){
+ iErrorStop = 120;
+ iRc = XB_INVALID_TAG;
+ throw iRc;
+ }
+ }
+
+ // allocate a tag structure here
+ if(( tte = (xbMdxTag *) calloc( 1, (size_t) sizeof( xbMdxTag ))) == NULL ){
+ iErrorStop = 130;
+ iRc = XB_NO_MEMORY;
+ throw iRc;
+ }
+ *vpTag = tte;
+ tte->sTagName = new xbString( sWorker );
+
+ //set up the key expression
+ sWorker = sFilter;
+ sWorker.Trim();
+ if( sWorker.Len() > 0 ){
+ if( sWorker.Len() == 0 || sWorker.Len() > 220 ){
+ iRc = XB_INVALID_TAG;
+ iErrorStop = 140;
+ throw iRc;
+ }
+ tte->sFiltExp = new xbString( sWorker );
+ tte->filter = new xbExp( dbf->GetXbasePtr());
+ if(( iRc = tte->filter->ParseExpression( dbf, sWorker )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+
+ if((tte->filter->GetReturnType()) != 'L' ){
+ iRc = XB_INVALID_TAG;
+ iErrorStop = 160;
+ throw iRc;
+ }
+ tte->cHasFilter = 0x01;
+ }
+
+ //set up the key expression
+ sWorker = sKey;
+ sWorker.Trim();
+ if( sWorker.Len() == 0 || sWorker.Len() > 100 ){
+ iRc = XB_INVALID_TAG;
+ iErrorStop = 170;
+ throw iRc;
+ }
+ tte->sKeyExp = new xbString( sWorker );
+ tte->exp = new xbExp( dbf->GetXbasePtr());
+ if(( iRc = tte->exp->ParseExpression( dbf, sWorker )) != XB_NO_ERROR ){
+ iErrorStop = 180;
+ throw iRc;
+ }
+
+ xbDate d;
+ d.Sysdate();
+ if( iTagUseCnt == 0 ){
+ // first tag, new mdx file
+ // create the file name
+ xbString sIxFileName = dbf->GetFqFileName();
+ sIxFileName.Trim();
+ xbUInt32 lLen = sIxFileName.Len();
+ sIxFileName.PutAt( lLen-2, 'M' );
+ sIxFileName.PutAt( lLen-1, 'D' );
+ sIxFileName.PutAt( lLen, 'X' );
+
+ // copy the file name to the class variable
+ this->SetFileName( sIxFileName );
+ if( FileExists() && !iOverlay ){
+ iErrorStop = 190;
+ iRc = XB_FILE_EXISTS;
+ throw iRc;
+ }
+
+ // first tag, need to create the file
+ if(( iRc = xbFopen( "w+b", dbf->GetShareMode())) != XB_NO_ERROR ){
+ iErrorStop = 200;
+ throw iRc;
+ }
+ cVersion = 2;
+ cCreateYY = (char) d.YearOf() - 1900;
+ cCreateMM = (char) d.MonthOf();
+ cCreateDD = (char) d.DayOf( XB_FMT_MONTH );
+
+ GetFileNamePart( sFileName );
+ sFileName.ToUpperCase();
+
+ SetBlockSize( (xbUInt32) dbf->GetCreateMdxBlockSize());
+ iBlockFactor = GetBlockSize() / 512;
+
+ cProdIxFlag = 1;
+ cTagEntryCnt = 48;
+ iTagLen = 32;
+ ulPageCnt = 4;
+ ulFirstFreePage = 0;
+ ulNoOfBlockAvail = 0;
+ cNextTag = 1;
+ c1B = 0x1B;
+ cUpdateYY = cCreateYY;
+ cUpdateMM = cCreateMM;
+ cUpdateDD = cCreateDD;
+
+ if(( iRc = WriteHeadBlock( 0 )) != XB_NO_ERROR ){
+ iErrorStop = 210;
+ throw iRc;
+ }
+ }
+
+ // populate the tag table entry structure
+ tte->ulTagHdrPageNo = ulPageCnt;
+ ulPageCnt += (xbUInt32) iBlockFactor;
+ tte->sTagName->strncpy( tte->cTagName, 10 );
+
+ // cKeyFmt is always 0x10;
+ // tested 2+ZIPCD CITY+STATE or just standalone field - always 0x10
+ tte->cKeyFmt = 0x10; // = CalcTagKeyFmt( *tte->exp );
+
+ switch( tte->exp->GetReturnType()){
+ case XB_EXP_CHAR:
+ tte->cKeyType = 'C';
+ tte->iKeyLen = tte->exp->GetResultLen();
+ tte->iSecKeyType = 0;
+ break;
+
+ case XB_EXP_NUMERIC:
+ tte->cKeyType = 'N';
+ tte->iKeyLen = 12;
+ tte->iSecKeyType = 0;
+ break;
+
+ case XB_EXP_DATE:
+ tte->cKeyType = 'D';
+ tte->iKeyLen = 8;
+ tte->iSecKeyType = 1;
+ break;
+
+ default:
+ iErrorStop = 200;
+ iRc = XB_INVALID_INDEX;
+ throw iRc;
+ }
+
+ tte->cpKeyBuf = (char *) malloc( (size_t) tte->iKeyLen + 1 );
+ tte->cpKeyBuf2 = (char *) malloc( (size_t) tte->iKeyLen + 1 );
+
+ // write the new tte entry here
+ char tteBuf[21];
+ memset( tteBuf, 0x00, 21 );
+
+ ePutUInt32( &tteBuf[0], tte->ulTagHdrPageNo );
+ for( xbUInt32 l = 0; l < tte->sTagName->Len() && l < 10; l++ ){
+ tteBuf[l+4] = tte->sTagName->GetCharacter(l+1);
+ }
+ tteBuf[15] = tte->cKeyFmt;
+ tteBuf[19] = 0x02; // appears to always be a 0x02
+ tteBuf[20] = tte->cKeyType;
+
+ if(( iRc = xbFseek( (iTagUseCnt * 32) + 544, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 210;
+ throw iRc;
+ }
+ if(( iRc = xbFwrite( tteBuf, 21, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 220;
+ throw iRc;
+ }
+
+ // Begin Tag Header
+ tte->ulRootPage = ulPageCnt;
+ tte->ulTagSize = (xbUInt32) iBlockFactor;
+ ulPageCnt += 2;
+ tte->cKeyFmt2 = 0x10;
+ if( iDescending )
+ tte->cKeyFmt2 += 0x08;
+ if( iUnique ){
+ tte->cKeyFmt2 += 0x40;
+ tte->cUnique = 0x01;
+ }
+
+ tte->cTag11 = 0x1B; // always 0x1b ?
+ tte->cSerialNo = 0x01; // version incremented with each tag update
+ tte->ulLeftChild = tte->ulRootPage;
+ tte->ulRightChild = tte->ulRootPage;
+
+ tte->cTagYY = (char) d.YearOf() - 1900;
+ tte->cTagMM = (char) d.MonthOf();
+ tte->cTagDD = (char) d.DayOf( XB_FMT_MONTH );
+
+ tte->cKeyType2 = tte->cKeyType;
+ tte->iKeyItemLen = tte->iKeyLen + 4;
+ while(( tte->iKeyItemLen % 4 ) != 0 ) tte->iKeyItemLen++;
+
+ tte->iKeysPerBlock = (xbInt16) (GetBlockSize() - 12) / tte->iKeyItemLen;
+ tte->cKeyFmt3 = CalcTagKeyFmt( *tte->exp );
+
+ char *pBuf;
+ if(( pBuf = (char *) calloc( 1, (size_t) GetBlockSize())) == NULL ){
+ iErrorStop = 230;
+ iRc = XB_NO_MEMORY;
+ throw iRc;
+ }
+ char *wPtr;
+ wPtr = pBuf;
+ ePutUInt32( wPtr, tte->ulRootPage );
+
+ wPtr += 4;
+ ePutUInt32( wPtr, tte->ulTagSize );
+
+ wPtr += 4;
+ *wPtr = tte->cKeyFmt2;
+
+ wPtr++;
+ *wPtr = tte->cKeyType2;
+
+ wPtr += 2;
+ *wPtr = tte->cTag11;
+
+ wPtr += 1;
+ ePutInt16( wPtr, tte->iKeyLen );
+
+ wPtr += 2;
+ ePutInt16( wPtr, tte->iKeysPerBlock );
+
+ wPtr += 2;
+ ePutInt16( wPtr, tte->iSecKeyType );
+
+ wPtr += 2;
+ ePutInt16( wPtr, tte->iKeyItemLen );
+
+ wPtr += 2;
+ *wPtr = tte->cSerialNo;
+
+ wPtr += 3;
+ *wPtr = tte->cUnique;
+
+ wPtr++;
+ for( xbUInt32 l = 0; l < tte->sKeyExp->Len(); l++ )
+ *wPtr++ = tte->sKeyExp->GetCharacter(l+1);
+
+ wPtr = pBuf;
+
+ tte->cHasKeys = 0x00;
+ pBuf[246] = tte->cHasKeys;
+
+ wPtr += 248;
+ ePutUInt32( wPtr, tte->ulLeftChild );
+ wPtr += 4;
+ ePutUInt32( wPtr, tte->ulRightChild );
+
+ pBuf[257] = tte->cTagYY;
+ pBuf[258] = tte->cTagMM;
+ pBuf[259] = tte->cTagDD;
+ pBuf[480] = tte->cKeyFmt3;
+
+ if( sFilter.Len() > 0 ){
+ pBuf[245] = tte->cHasFilter;
+ wPtr = pBuf;
+ wPtr += 762;
+ for( xbUInt32 l = 0; l < sFilter.Len(); l++ )
+ *wPtr++ = sFilter.GetCharacter(l+1);
+ }
+
+ if(( iRc = xbFseek( tte->ulTagHdrPageNo * 512, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 240;
+ throw iRc;
+ }
+
+ if(( iRc = xbFwrite( pBuf, GetBlockSize(), 1 )) != XB_NO_ERROR ){
+ iErrorStop = 250;
+ throw iRc;
+ }
+
+ memset( pBuf, 0x00, GetBlockSize() );
+ if(( iRc = xbFwrite( pBuf, GetBlockSize(), 1 )) != XB_NO_ERROR ){
+ iErrorStop = 260;
+ throw iRc;
+ }
+
+ iTagUseCnt++;
+ cNextTag++;
+
+ if(( iRc = WriteHeadBlock( 1 )) != XB_NO_ERROR ){
+ iErrorStop = 270;
+ throw iRc;
+ }
+
+ // update the dbf file if needed - discreet field, has no filter
+ // 10/15/22 - dbase 7 does not update this field on index creation
+ if( tte->cKeyFmt3 == 0x01 && !tte->cHasFilter ){
+ // printf( "cKeyFmt3 = [%x]\n", tte->cKeyFmt3 );
+ xbInt16 iFldNo;
+ if(( iRc = dbf->GetFieldNo( sKey, iFldNo )) != XB_NO_ERROR ){
+ iErrorStop = 280;
+ throw iRc;
+ }
+ xbInt64 lOffset = 31 + ((iFldNo + 1) * 32 );
+
+ if(( iRc = dbf->xbFseek( lOffset, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 290;
+ iRc = XB_SEEK_ERROR;
+ throw iRc;
+ }
+ char cBuf[2];
+ cBuf[0] = 0x01;
+ cBuf[1] = 0x00;
+
+ if(( iRc = dbf->xbFwrite( cBuf, 1, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 300;
+ throw iRc;
+ }
+ dbf->UpdateSchemaIxFlag( iFldNo, 0x01 );
+ }
+
+ // add the new entry to the end of the list of tags
+ if( mdxTagTbl == NULL ){
+ mdxTagTbl = tte;
+ } else {
+ xbMdxTag *tteL = mdxTagTbl;
+ while( tteL->next )
+ tteL = tteL->next;
+ tteL->next = tte;
+ }
+
+ /* update the btree pointers */
+ CalcBtreePointers();
+ char bBuf[3];
+ xbMdxTag *tteWork = mdxTagTbl;
+
+ if(( iRc = xbFseek( 560, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 310;
+ throw iRc;
+ }
+ while( tteWork ){
+ bBuf[0] = tteWork->cLeftChild;
+ bBuf[1] = tteWork->cRightChild;
+ bBuf[2] = tteWork->cParent;
+
+ if(( iRc = xbFwrite( bBuf, 3, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 320;
+ throw iRc;
+ }
+ if( tteWork->next ){
+ if(( iRc = xbFseek( 29, SEEK_CUR )) != XB_NO_ERROR ){
+ iErrorStop = 330;
+ throw iRc;
+ }
+ }
+ tteWork = tteWork->next;
+ }
+ free( pBuf );
+ }
+
+ catch (xbInt16 iRc ){
+ if( tte ){
+ if( tte->cpKeyBuf )
+ free( tte->cpKeyBuf );
+ if( tte->cpKeyBuf2 )
+ free( tte->cpKeyBuf2 );
+ if( tte->exp )
+ delete tte->exp;
+ if( tte->filter )
+ delete tte->filter;
+ if( tte->sKeyExp )
+ delete tte->sKeyExp;
+ if( tte->sFiltExp )
+ delete tte->sFiltExp;
+ if( tte->sTagName )
+ delete tte->sTagName;
+ free( tte );
+ }
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::CreateTag() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+
+ return iRc;
+};
+
+/***********************************************************************/
+//! @brief Delete a key from a node.
+/*!
+ This routine deletes a key from a supplied node.
+ \param vpTag Tag to delete key on.
+ \param npNode Node to delete key on.
+ \param iSlotNo Slot number of key to delete.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbIxMdx::DeleteFromNode( void *vpTag, xbIxNode * npNode, xbInt16 iSlotNo )
+{
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbMdxTag * npTag = (xbMdxTag *) vpTag;
+
+ try{
+ xbInt32 lKeyCnt = GetKeyCount( npNode );
+ xbInt16 iLen = (lKeyCnt - iSlotNo - 1) * npTag->iKeyItemLen;
+ xbBool bLeaf = IsLeaf( vpTag, npNode );
+ if( !bLeaf )
+ iLen += 4;
+
+ char *pTrg = npNode->cpBlockData;
+ if( iLen > 0 ){
+ pTrg += (8 + (npTag->iKeyItemLen * (iSlotNo)) ); //lTrgPos;
+ // std::cout << "TrgSpot = " << (8 + (npTag->iKeyItemLen * (iSlotNo)) ) << "\n";
+ char *pSrc = pTrg;
+ pSrc += npTag->iKeyItemLen;
+ memmove( pTrg, pSrc, (size_t) iLen );
+ }
+
+ // zap out the right most key
+ pTrg = npNode->cpBlockData;
+ if( bLeaf ){
+ pTrg += (8 + (npTag->iKeyItemLen * ( lKeyCnt-1 )));
+
+ } else {
+ pTrg += (12 + (npTag->iKeyItemLen * ( lKeyCnt-1 )));
+
+ }
+
+ for( xbInt16 i = 0; i < npTag->iKeyItemLen; i++ )
+ *pTrg++ = 0x00;
+
+ // set the new number of keys
+ ePutUInt32( npNode->cpBlockData, (xbUInt32) lKeyCnt - 1 );
+
+ // if node empty, add it to the free node chain
+ if( lKeyCnt < 2 ){
+ if( bReuseEmptyNodes ){
+ if( bLeaf && lKeyCnt == 1 ){
+ if(( iRc = HarvestEmptyNode( npTag, npNode, 0 )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ }
+ }
+ }
+
+ // write out the block
+ if(( iRc = WriteBlock( npNode->ulBlockNo, GetBlockSize(), npNode->cpBlockData )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::DeleteFromNode() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return XB_NO_ERROR;
+}
+
+/***********************************************************************/
+//! @brief Delete a key.
+/*!
+ This routine deletes a key. It assumes the key to delete
+ is the current key in the node chain.
+
+ \param vpTag Tag to delete key on.
+
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbIxMdx::DeleteKey( void *vpTag ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbMdxTag * npTag = (xbMdxTag *) vpTag;
+
+ // save copy of node chain to reset to after delete completed
+ xbIxNode *npSaveNodeChain = npTag->npNodeChain;
+ npTag->npNodeChain = NULL;
+ xbIxNode * npSaveCurNode = npTag->npCurNode;
+
+ try{
+ xbString sMsg;
+
+ if(( iRc = xbIxMdx::KeySetPosDel( npTag )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ // Delete key needs to handle two scenarios
+ // 1 - if delete is on the only key of leaf,
+ // traverse up tree, trim as needed
+ // 2 - if last key on node is deleted, and key value is not the same
+ // as prev key, ascend tree looking for an interior node needing
+ // updated key value
+
+ xbInt32 lOrigKeyCnt = GetKeyCount( npTag->npCurNode );
+ if(( iRc = DeleteFromNode( npTag, npTag->npCurNode, npTag->npCurNode->iCurKeyNo )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+
+ if( lOrigKeyCnt == 1 ){
+
+ // scenario 1
+ xbBool bDone = xbFalse;
+ xbBool bIsLeaf = xbFalse;
+ xbInt32 lKeyCnt;
+ npTag->npCurNode = npTag->npCurNode->npPrev;
+
+ while( npTag->npCurNode && !bDone ){
+ lKeyCnt = GetKeyCount( npTag->npCurNode );
+ bIsLeaf = IsLeaf( npTag, npTag->npCurNode );
+ if( lKeyCnt > 0 ){
+ if(( iRc = DeleteFromNode( npTag, npTag->npCurNode, npTag->npCurNode->iCurKeyNo )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ } else if(( iRc = HarvestEmptyNode( npTag, npTag->npCurNode, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+
+ if( (bIsLeaf && lKeyCnt > 1) || (!bIsLeaf && lKeyCnt > 0) )
+ bDone = xbTrue;
+ else
+ npTag->npCurNode = npTag->npCurNode->npPrev;
+ }
+
+ } else if( npTag->npCurNode->iCurKeyNo == (xbUInt32) lOrigKeyCnt - 1 ){
+
+ // scenario 2
+ // if last two keys identical, then nothing to do, else go up looking for a key to change
+ if( memcmp( GetKeyData( npTag->npCurNode, npTag->npCurNode->iCurKeyNo, npTag->iKeyItemLen ),
+ GetKeyData( npTag->npCurNode, npTag->npCurNode->iCurKeyNo-1, npTag->iKeyItemLen ),
+ (size_t) npTag->iKeyLen )){
+
+ xbIxNode *pNode = npTag->npCurNode->npPrev;
+ char *pSrc = GetKeyData( npTag->npCurNode, npTag->npCurNode->iCurKeyNo-1, npTag->iKeyItemLen );
+
+ while( pNode && pNode->ulBlockNo != npTag->ulRootPage && pNode->iCurKeyNo == (xbUInt32) GetKeyCount( pNode ) )
+ pNode = pNode->npPrev;
+
+ if( pNode ){
+ if( pNode->iCurKeyNo < (xbUInt32) GetKeyCount( pNode )){
+ char *pTrg = pNode->cpBlockData;
+ pTrg += 12 + (pNode->iCurKeyNo * (xbUInt32) npTag->iKeyItemLen);
+ for( xbInt16 i = 0; i < npTag->iKeyLen; i++ )
+ *pTrg++ = *pSrc++;
+ // write out the block
+ if(( iRc = WriteBlock( pNode->ulBlockNo, GetBlockSize(), pNode->cpBlockData )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+ }
+ }
+ }
+ }
+ // restore node chain to pre delete status (which should be post add status)
+ npTag->npNodeChain = FreeNodeChain( npTag->npNodeChain );
+ npTag->npNodeChain = npSaveNodeChain;
+ npTag->npCurNode = npSaveCurNode;
+
+ // update the serial number
+ if(( iRc = TagSerialNo( 3, npTag )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::DeleteKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ if( npSaveNodeChain ){
+ npTag->npNodeChain = npSaveNodeChain;
+ npSaveNodeChain = FreeNodeChain( npSaveNodeChain );
+ npTag->npCurNode = npSaveCurNode;
+ }
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+//! @brief Delete a given tag
+/*!
+ \param vpTag Input tag ptr for tag to be deleted<br>
+ \returns <a href="xbretcod_8h.html">Return Codes</a><br>
+ 1 = Deleted entire MDX file, only had one tag
+
+*/
+
+xbInt16 xbIxMdx::DeleteTag( void *vpTag ){
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ xbMdxTag * mpTag = (xbMdxTag *) vpTag;
+ xbIxNode *n = NULL;
+ xbBool bLoneTag = xbFalse;
+
+ try{
+
+ if( !vpTag ){
+ iErrorStop = 100;
+ iRc = XB_INVALID_TAG;
+ throw iRc;
+ }
+
+ char cSaveHasFilter = mpTag->cHasFilter;
+ char cSaveKeyFmt3 = mpTag->cKeyFmt3;
+ xbString sSaveKey = mpTag->sKeyExp->Str();
+
+ if( iTagUseCnt == 1 ){
+ // std::cout << "xbIxMdx::DeleteTag - one tag found, delete the mdx file\n";
+
+ // close the mdx file
+ if(( iRc = xbIxMdx::Close()) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+
+ // delete the file
+ xbRemove();
+
+ // init variables - needed?
+ // Init();
+ // iRc > 0 defines this as the only tag in an MDX file, MDX file deleted.
+ // signals to the calling process to drop the MDX file from the
+ // list of updateable indices.
+ bLoneTag = xbTrue;
+
+ } else {
+
+ // harvest tag nodes
+
+ if(( iRc = HarvestTagNodes( mpTag, xbTrue )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+
+ // remove an entry from tag table
+ // which tag is this?
+ xbInt16 iTagNo = 0;
+ xbMdxTag *mp = mdxTagTbl;
+ xbMdxTag *mpPrev = NULL;
+ while( mp && mp->ulTagHdrPageNo != mpTag->ulTagHdrPageNo ){
+ iTagNo++;
+ mpPrev = mp;
+ mp = mp->next;
+ }
+
+ // remove it from the linked list of tags
+ if( !mpPrev ){
+ mdxTagTbl = mp->next;
+ } else {
+ mpPrev->next = mp->next;
+ }
+ if( mp ){
+ if( mp->cpKeyBuf ) free( mp->cpKeyBuf );
+ if( mp->cpKeyBuf2 ) free( mp->cpKeyBuf2 );
+ if( mp->exp ) delete mp->exp;
+ if( mp->filter ) delete mp->filter;
+ if( mp->sKeyExp ) delete mp->sKeyExp;
+ if( mp->sFiltExp ) delete mp->sFiltExp;
+ if( mp->sTagName ) delete mp->sTagName;
+ free( mp );
+ }
+ xbInt32 iTarg = iTagNo * 32;
+ xbInt32 iSrc = iTarg + 32;
+ xbInt32 iLen = (iTagUseCnt - iTagNo) * 32;
+
+ if(( iRc = xbFseek( 544, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+ char Buf[1536]; // 47 tags + 1 in case tag #47 is deleted
+ memset( Buf, 0x00, 1536 );
+ if(( iRc = xbFread( Buf, 1504, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 170;
+ throw iRc;
+ }
+ char *pTrg = Buf;
+ pTrg += iTarg;
+ char *pSrc = Buf;
+ pSrc += iSrc;
+ for( xbInt32 i = 0; i < iLen; i++ )
+ *pTrg++ = *pSrc++;
+
+ if(( iRc = xbFseek( 544, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 180;
+ throw iRc;
+ }
+ if(( iRc = xbFwrite( Buf, 1504, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 190;
+ throw iRc;
+ }
+
+ iTagUseCnt--;
+ if(( iRc = WriteHeadBlock( 1 )) != XB_NO_ERROR ){
+ iErrorStop = 200;
+ throw iRc;
+ }
+
+ /* update the btree pointers */
+ CalcBtreePointers();
+ char bBuf[3];
+ xbMdxTag *tteWork = mdxTagTbl;
+
+ if(( iRc = xbFseek( 560, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 210;
+ throw iRc;
+ }
+ while( tteWork ){
+ bBuf[0] = tteWork->cLeftChild;
+ bBuf[1] = tteWork->cRightChild;
+ bBuf[2] = tteWork->cParent;
+
+ if(( iRc = xbFwrite( bBuf, 3, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 320;
+ throw iRc;
+ }
+ if( tteWork->next ){
+ if(( iRc = xbFseek( 29, SEEK_CUR )) != XB_NO_ERROR ){
+ iErrorStop = 330;
+ throw iRc;
+ }
+ }
+ tteWork = tteWork->next;
+ }
+ }
+
+ // update the dbf file if needed, if discreet field with no filter
+ // printf( "cSaveKeyFmt3 = [%x] cSaveHasFilter=[%x] SaveKey = [%s]\n", cSaveKeyFmt3, cSaveHasFilter, sSaveKey.Str());
+
+ if( cSaveKeyFmt3 == 0x01 && !cSaveHasFilter ){
+ xbInt16 iFldNo;
+ if(( iRc = dbf->GetFieldNo( sSaveKey, iFldNo )) != XB_NO_ERROR ){
+ iErrorStop = 340;
+ throw iRc;
+ }
+ xbInt64 lOffset = 31 + ((iFldNo + 1) * 32 );
+
+ if(( iRc = dbf->xbFseek( lOffset, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 350;
+ iRc = XB_SEEK_ERROR;
+ throw iRc;
+ }
+ char cBuf[2];
+ cBuf[0] = 0x00;
+ cBuf[1] = 0x00;
+ if(( iRc = dbf->xbFwrite( cBuf, 1, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 360;
+ throw iRc;
+ }
+ dbf->UpdateSchemaIxFlag( iFldNo, 0x00 );
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::DeleteTag() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ if( n )
+ free( n );
+ }
+ if( bLoneTag && !iRc )
+ return 1;
+ else
+ return iRc;
+}
+
+/***********************************************************************/
+#ifdef XB_DEBUG_SUPPORT
+
+//! @brief Dump a given block for a tag
+/*!
+ \param iOpt Output message destination<br>
+ 0 = stdout<br>
+ 1 = Syslog<br>
+ 2 = Both<br>
+ \param ulBlockNo Block number to dump
+ \param mpTag Index tag pointer
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+
+*/
+
+xbInt16 xbIxMdx::DumpBlock( xbInt16 iOpt, xbUInt32 ulBlockNo, xbMdxTag *mpTag ){
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ xbString s, s2;
+ xbBool bLeaf;
+ char *p;
+
+ try{
+ if(( iRc = GetBlock( mpTag, ulBlockNo, 0 )) != XB_NO_ERROR ){
+ iErrorStop = 10;
+ throw iRc;
+ }
+ p = cNodeBuf;
+ xbInt32 lNoOfKeys = eGetInt32( p );
+ p+=4;
+ xbUInt32 ulNode2 = eGetUInt32( p );
+
+ if( !mpTag ){
+ // if no tag info, print what is available without tag info and exit
+ s.Sprintf( "--- BlkNo = %ld Page = %ld NoOfKeys = %ld Node2 (opt NextFreePage) = %ld", ulBlockNo, BlockToPage( ulBlockNo ), lNoOfKeys, ulNode2 );
+ xbase->WriteLogMessage( s, iOpt );
+ return XB_NO_ERROR;
+ }
+
+ p+=4;
+ p+= mpTag->iKeyItemLen * lNoOfKeys;
+ if( eGetUInt32( p ) == 0 ){
+ bLeaf = xbTrue;
+ // std::cout << "No of keys = " << lNoOfKeys << "\n";
+ s.Sprintf( "--- Leaf Node KeyCnt %d\t Page %d\t Block %d", lNoOfKeys, BlockToPage( ulBlockNo ), ulBlockNo );
+ } else {
+ bLeaf = xbFalse;
+ s.Sprintf( "--- Interior Node KeyCnt %d\t Page %d\t Block %d", lNoOfKeys, BlockToPage( ulBlockNo ), ulBlockNo );
+ }
+ if( ulNode2 > 0 )
+ s.Sprintf( "%s Node2 (opt NextFreePage) = %d", s.Str(), ulNode2 );
+
+ xbase->WriteLogMessage( s, iOpt );
+
+ xbInt32 l;
+ for( l = 0; l < lNoOfKeys; l++ ){
+ p = cNodeBuf + (8 + (l * mpTag->iKeyItemLen ));
+ s.Sprintf( "%08ld\t", eGetUInt32( p ));
+ p+=4;
+ if( mpTag->cKeyType2 == 'C' ){ //CHAR
+ for( xbInt32 l = 0; l < (mpTag->iKeyItemLen-4); l++ )
+ s += *p++;
+ s.Trim();
+ } else if( mpTag->cKeyType2 == 'N' ){ // NUMERIC
+ xbBcd bcd( p );
+ bcd.ToString( s2 );
+ s += s2;
+ } else if( mpTag->cKeyType2 == 'D' ){ // DATE
+ xbInt32 lDate = (xbInt32) eGetDouble( p );
+ xbDate d( lDate );
+ s.Sprintf( "%s\t%ld\t(%s)", s.Str(), lDate, d.Str());
+ } else {
+ s.Sprintf( "Unknown key type [%c]", mpTag->cKeyType2 );
+ }
+ xbase->WriteLogMessage( s, iOpt );
+ }
+ if( !bLeaf ){
+ // interior node has one extra key at the right most position
+ p = cNodeBuf + (8 + (l * mpTag->iKeyItemLen ));
+ s.Sprintf( "\t%08ld", eGetUInt32( p ));
+ xbase->WriteLogMessage( s, iOpt );
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::DumpBlock() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/**************************************************************************************************************/
+//! @brief Dump free blocks.
+/*!
+ Dump free blocks for index debugging purposes.
+
+ \param iOpt Output message destination<br>
+ 0 = stdout<br>
+ 1 = Syslog<br>
+ 2 = Both<br>
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+
+*/
+xbInt16 xbIxMdx::DumpFreeBlocks( xbInt16 iOpt ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbString s;
+ char *pBuf = NULL;
+ char *pNextPage;
+ xbUInt32 ulNextPage;
+
+ try{
+
+ if(( iRc = ReadHeadBlock( 1 )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+
+ xbUInt32 ulLastBlock = PageToBlock( ulPageCnt );
+
+ pBuf = (char *) malloc( (size_t) GetBlockSize());
+ if( !pBuf ){
+ iErrorStop = 110;
+ iRc = XB_NO_MEMORY;
+ throw iRc;
+ }
+
+ if( ulFirstFreePage > 0 ){
+ xbUInt32 ulThisFreePage = ulFirstFreePage;
+ xbUInt32 ulNextFreePage = 0;
+ xbUInt32 ulCnt = 0;
+ xbase->WriteLogMessage( "*** Free Blocks ***", iOpt );
+ s.Sprintf( "File Header - FirstFreePage = %ld Block = %ld", ulFirstFreePage, PageToBlock( ulFirstFreePage ));
+ xbase->WriteLogMessage( s, iOpt );
+ while( ulThisFreePage > 0 ){
+ if(( iRc = ReadBlock( PageToBlock( ulThisFreePage ), GetBlockSize(), pBuf )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ pNextPage = pBuf;
+ pNextPage+=4;
+ ulNextFreePage = eGetUInt32( pNextPage );
+ s.Sprintf( "Free Page# = %ld\t(Block# = %ld)\tNext Free Page = %ld\t(Block = %ld)", ulThisFreePage, PageToBlock( ulThisFreePage ), ulNextFreePage, PageToBlock( ulNextFreePage ));
+ xbase->WriteLogMessage( s, iOpt );
+ ulThisFreePage = ulNextFreePage;
+ ulCnt++;
+ }
+ s.Sprintf( "%ld free blocks (%ld pages)", ulCnt, BlockToPage( ulCnt ));
+ xbase->WriteLogMessage( s, iOpt );
+ xbase->WriteLogMessage( "*** End Of Free Blocks ***", iOpt );
+ }
+
+ pNextPage = pBuf;
+ pNextPage+=4;
+
+ s = "*** Beginning of Block2 Info ***";
+ xbase->WriteLogMessage( s, iOpt );
+ s = "ulBlock2 info. ulBlock2 is either one of a linked list of free nodes, or the id of the original node that this node was split from.";
+ xbase->WriteLogMessage( s, iOpt );
+ s = "Stored in physical file as pages, processed in blocks";
+ xbase->WriteLogMessage( s, iOpt );
+
+ xbUInt32 ulFirstBlock = 3;
+
+ for( xbUInt32 ul = ulFirstBlock; ul < ulLastBlock; ul++ ){
+ if(( iRc = ReadBlock( ul, GetBlockSize(), pBuf )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ ulNextPage = eGetUInt32( pNextPage );
+ if( ulNextPage > 0 ){
+ s.Sprintf( " Block# = %ld\tPage# = %ld\tulBlock2 = %ld\tulBlock2(Page) = %ld", ul, BlockToPage( ul ), PageToBlock( ulNextPage ), ulNextPage );
+ xbase->WriteLogMessage( s, iOpt );
+ }
+ }
+ s = "*** End of Block2 Info ***";
+ xbase->WriteLogMessage( s, iOpt );
+
+ if( pBuf ) free( pBuf );
+ }
+
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::DumpFreeBlocks() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ if( pBuf ) free( pBuf );
+ }
+ return iRc;
+}
+
+/**************************************************************************************************************/
+//! @brief Dump interior and leaf blocks for a given tag.
+/*!
+ Dump blocks for given tag for index debugging purposes.
+
+ A page is 512 bytes<br>
+ A block is one or more pages<br>
+ The default mdx block size is 2 pages, or 1024 bytes<br>
+ The first four pages or header pages<br>
+
+ \param iOpt Output message destination<br>
+ 0 = stdout<br>
+ 1 = Syslog<br>
+ 2 = Both<br>
+ \param vpTag Index tag pointer, defaults to all tags if null.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+
+*/
+
+xbInt16 xbIxMdx::DumpTagBlocks( xbInt16 iOpt, void * vpTag ){
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ xbInt16 iCurTag = 0;
+ xbString s;
+ xbInt16 iBlockCtr = 0;
+
+ try{
+
+ xbMdxTag * mpTag;
+ if( vpTag == NULL )
+ mpTag = (xbMdxTag *) GetTag( iCurTag++ );
+ else
+ mpTag = (xbMdxTag *) vpTag;
+
+ if( mpTag == NULL ){
+ iErrorStop = 100;
+ iRc = XB_INVALID_TAG;
+ throw iRc;
+ }
+
+ xbIxNode *n;
+ xbString s;
+ xbString s2;
+ xbBool bDone = xbFalse;
+
+ xbUInt32 ulBlkNo;
+ xbLinkListOrd<xbUInt32> ll;
+ xbLinkListNode<xbUInt32> * llN;
+
+ ll.SetDupKeys( xbFalse );
+
+ s.Sprintf( "%s Root Page %ld (Block %ld)", mpTag->cTagName, mpTag->ulRootPage, PageToBlock( mpTag->ulRootPage ) );
+ xbase->WriteLogMessage( s, iOpt );
+
+ // for each tag
+ while( !bDone ){
+
+ // clear out any history
+ ll.Clear();
+ if( mpTag->npNodeChain ){
+ mpTag->npNodeChain = FreeNodeChain( mpTag->npNodeChain );
+ mpTag->npCurNode = NULL;
+ }
+
+ while( GetNextKey( mpTag, 0 ) == 0 ){
+ n = mpTag->npNodeChain;
+
+ while(n){
+ ll.InsertKey( n->ulBlockNo, (xbUInt32) n->iCurKeyNo );
+ n = n->npNext;
+ }
+ }
+ llN = ll.GetHeadNode();
+
+ while( llN ){
+
+ ulBlkNo = llN->GetKey();
+ xbIxMdx::DumpBlock( iOpt, ulBlkNo, mpTag );
+ llN = llN->GetNextNode();
+ iBlockCtr++;
+ }
+
+ if( vpTag || iCurTag >= GetTagCount())
+ bDone = xbTrue;
+ else
+ mpTag = (xbMdxTag *) GetTag( iCurTag++ );
+ }
+
+ s.Sprintf( "\nTotal Blocks: %d", iBlockCtr );
+ xbase->WriteLogMessage( s, iOpt );
+
+ if( mpTag->npNodeChain ){
+ mpTag->npNodeChain = FreeNodeChain( mpTag->npNodeChain );
+ mpTag->npCurNode = NULL;
+ }
+
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::DumpTagBlocks() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+/***********************************************************************/
+//! @brief Dump index file header.
+/*!
+ Dump a index file header for debugging purposes.
+ \param iOpt Output message destination<br>
+ 0 = stdout<br>
+ 1 = Syslog<br>
+ 2 = Both<br>
+ \param iFmtOpt Output Format<br>
+ 0, 1 = Header info only<br>
+ 2 = Tag info<br>
+ 3 = Header && Tag info<br>
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbIxMdx::DumpHeader( xbInt16 iOpt, xbInt16 iFmtOpt )
+{
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbString s;
+ if(( iRc = ReadHeadBlock( 1 )) != XB_NO_ERROR )
+ return iRc;
+
+ char c, tfv, cDisplayMask = 1;
+ cDisplayMask = cDisplayMask << 7;
+ if( iFmtOpt != 2 && iFmtOpt != 4 ){
+ s = "*** MDX Index Header ***";
+ xbase->WriteLogMessage( s, iOpt );
+ s = "Version = ";
+ tfv = cVersion;
+ for( c = 1; c<= 8; c++ ){
+ //std::cout << (tfv & cDisplayMask ? '1' : '0');
+ s+= (tfv & cDisplayMask ? '1' : '0');
+ tfv <<= 1;
+ }
+ xbase->WriteLogMessage( s, iOpt );
+
+ s.Sprintf( "Create Date = %d/%d/%d", (int) cCreateMM, (int) cCreateDD, (int) cCreateYY % 100 );
+ xbase->WriteLogMessage( s, iOpt );
+
+ s.Sprintf( "File Name = %s", sFileName.Str() );
+ xbase->WriteLogMessage( s, iOpt );
+
+ s.Sprintf( "Block Factor = %d", iBlockFactor );
+ xbase->WriteLogMessage( s, iOpt );
+
+ s.Sprintf( "Block Size = %d", GetBlockSize() );
+ xbase->WriteLogMessage( s, iOpt );
+
+ s.Sprintf( "Prod Ix Flag = %d", (xbInt16) cProdIxFlag );
+ xbase->WriteLogMessage( s, iOpt );
+
+ s.Sprintf( "Tag Entry Cnt = %d", (xbInt16) cTagEntryCnt );
+ xbase->WriteLogMessage( s, iOpt );
+
+ s.Sprintf( "Tag Len = %d", iTagLen );
+ xbase->WriteLogMessage( s, iOpt );
+
+ s.Sprintf( "Next Tag = %d", (xbInt16) cNextTag );
+ xbase->WriteLogMessage( s, iOpt );
+
+ s.Sprintf( "Tag Use Cnt = %d", iTagUseCnt );
+ xbase->WriteLogMessage( s, iOpt );
+
+ s.Sprintf( "Page Cnt = %d", ulPageCnt );
+ xbase->WriteLogMessage( s, iOpt );
+
+ s.Sprintf( "First Free Page = %d", ulFirstFreePage );
+ xbase->WriteLogMessage( s, iOpt );
+
+ s.Sprintf( "No Of Block Avail = %d\n", ulNoOfBlockAvail );
+ xbase->WriteLogMessage( s, iOpt );
+
+ s.Sprintf( "Last update date = %d/%d/%d", (int) cCreateMM, (int) cCreateDD, (int) cCreateYY % 100 );
+ xbase->WriteLogMessage( s, iOpt );
+
+ if( ulFirstFreePage > 0 ){
+ xbString s;
+ xbUInt32 ulNfp = ulFirstFreePage; // next free page
+ xbInt16 lc = 0;
+ while( ulNfp && lc++ < 5 ){
+ if( s.Len() > 0 )
+ s += ",";
+ s.Sprintf( "%s%ld", s.Str(), ulNfp );
+ if(( iRc = GetBlock( NULL, (xbUInt32) (ulNfp / (xbUInt32) iBlockFactor), 0 )) != 0 )
+ return iRc;
+ ulNfp = eGetUInt32( cNodeBuf+4 );
+ }
+ xbase->WriteLogMessage( s, iOpt );
+ }
+ }
+ if( iFmtOpt > 1 ){
+ xbMdxTag *tt = mdxTagTbl;
+ xbString s;
+ xbInt16 i = 0;
+
+ if( tt ){
+ while( tt ){
+ i++;
+ if(( iRc = LoadTagDetail( 2, tt )) != XB_NO_ERROR )
+ return iRc;
+
+ s.Sprintf( "TTE (%d)\tName HdrPage\tFormat\tLeftChild\tRightChild\tParent\tKeyType", i );
+ xbase->WriteLogMessage( s, iOpt );
+ s.Sprintf( "TTE (%d)\t%-12s %d\t\t%d\t%d\t\t%d\t\t%d\t%c\n", i, tt->cTagName, tt->ulTagHdrPageNo, tt->cKeyFmt, tt->cLeftChild, tt->cRightChild, tt->cParent, tt->cKeyType );
+ xbase->WriteLogMessage( s, iOpt );
+
+ s.Sprintf( "TTH (%d)\tRoot\tTagSize\tKeyFmt2\tType2\tKeyLen\tKeysPerBlock\tSecType\tKeyItemLen\tSerial#\tHasKeys\tFilter\tDesc\tUnique\tLchild\tRchild\tKeyFmt3\tTagDate", i );
+ xbase->WriteLogMessage( s, iOpt );
+
+ s.Sprintf( "TTH (%d)\t%d\t%d\t%d\t%c\t%d\t%d\t\t%d\t%d\t\t%x\t%x\t%d\t%d\t%d\t%d\t%d\t%d\t%d/%d/%d",
+ i, tt->ulRootPage, tt->ulTagSize, tt->cKeyFmt2, tt->cKeyType2, tt->iKeyLen, tt->iKeysPerBlock, tt->iSecKeyType, tt->iKeyItemLen, tt->cSerialNo, tt->cHasKeys, tt->cHasFilter,
+ (((tt->cKeyFmt2 & 0x08) > 0) ? 1 : 0), // descending?
+ tt->cUnique, tt->ulLeftChild, tt->ulRightChild, tt->cKeyFmt3, (int) tt->cTagMM, (int) tt->cTagDD, (int) tt->cTagYY % 100 );
+
+ xbase->WriteLogMessage( s, iOpt );
+
+ s.Sprintf( "Key (%d) %s", i, tt->sKeyExp->Str());
+ xbase->WriteLogMessage( s, iOpt );
+
+ if( tt->cHasFilter ){
+ s.Sprintf( "Flt (%d) %s", i, tt->sFiltExp->Str());
+ xbase->WriteLogMessage( s, iOpt );
+ }
+ xbase->WriteLogMessage( "", iOpt );
+ tt = tt->next;
+
+ }
+ }
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+xbInt16 xbIxMdx::DumpIxForTag( void *vpTag, xbInt16 iOutputOpt )
+{
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbInt16 iDepth = 0;
+ xbUInt32 lKeyCtr = 0;
+ xbInt32 iMinDepth = 999999;
+ xbInt32 iMaxDepth = 0;
+
+ try{
+ /*
+ get first node
+ while interior node
+ print the left key
+ level++
+ go down one on the left
+ */
+
+ xbMdxTag * mpTag = (xbMdxTag *) vpTag;
+ if( mpTag->npNodeChain ){
+ mpTag->npNodeChain = FreeNodeChain( mpTag->npNodeChain );
+ mpTag->npCurNode = NULL;
+ }
+
+ // Get the root
+ if(( iRc = LoadTagDetail( 2, mpTag )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ // lRootBlock is now available
+ if(( iRc = GetBlock( vpTag, (mpTag->ulRootPage / (xbUInt32) iBlockFactor), 1 )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ // if no keys on this node, then the index is empty
+ xbUInt32 ulKeyPtr = eGetUInt32( mpTag->npCurNode->cpBlockData );
+ if( ulKeyPtr == 0 ){
+ iErrorStop = 120;
+ iRc = XB_EMPTY;
+ throw iRc;
+ }
+ while( !IsLeaf( vpTag, mpTag->npCurNode )){ // go down the chain looking for a leaf node
+ PrintKey( vpTag, mpTag->npCurNode , 0, iDepth++, 'I', iOutputOpt );
+ if(( iRc = GetKeyPtr( vpTag, 0, mpTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ if(( iRc = GetBlock( vpTag, (ulKeyPtr / (xbUInt32) iBlockFactor), 1 )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+ }
+ if(( iRc = GetKeyPtr( vpTag, 0, mpTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+ // loop through the leaf entries of left most leaf
+ if( iDepth < iMinDepth ) iMinDepth = iDepth;
+ if( iDepth > iMaxDepth ) iMaxDepth = iDepth;
+ xbUInt32 ulNoOfKeys = eGetUInt32( mpTag->npCurNode->cpBlockData );
+ for( xbUInt32 ul = 0; ul < ulNoOfKeys; ul++ ){
+ PrintKey( vpTag, mpTag->npCurNode , ul, iDepth, 'L', iOutputOpt );
+ lKeyCtr++;
+ }
+
+ // if head node = start node, return
+ if( mpTag->npCurNode->ulBlockNo == ( mpTag->ulRootPage / (xbUInt32) iBlockFactor ))
+ return XB_NO_ERROR;
+
+ xbBool bEof = false;
+ while( !bEof ){
+
+ // go up the chain, looking for an interior node with more keys on it
+ xbIxNode * TempIxNode = mpTag->npCurNode;
+ mpTag->npCurNode = mpTag->npCurNode->npPrev;
+ mpTag->npCurNode->npNext = NULL;
+ TempIxNode->npPrev = NULL;
+ TempIxNode = FreeNodeChain( TempIxNode );
+ iDepth--;
+
+ while( mpTag->npCurNode->iCurKeyNo >= eGetUInt32( mpTag->npCurNode->cpBlockData ) &&
+ mpTag->npCurNode->ulBlockNo != ( mpTag->ulRootPage / (xbUInt32) iBlockFactor) ){
+ TempIxNode = mpTag->npCurNode;
+ mpTag->npCurNode = mpTag->npCurNode->npPrev;
+ mpTag->npCurNode->npNext = NULL;
+ TempIxNode->npPrev = NULL;
+ TempIxNode = FreeNodeChain( TempIxNode );
+ iDepth--;
+ }
+ // if head node && right most key, return
+ if( mpTag->npCurNode->ulBlockNo == (mpTag->ulRootPage / (xbUInt32) iBlockFactor) &&
+ mpTag->npCurNode->iCurKeyNo == eGetUInt32( mpTag->npCurNode->cpBlockData ))
+ bEof = true;
+
+ if( !bEof ){
+ mpTag->npCurNode->iCurKeyNo++;
+ if(( iRc = GetKeyPtr( vpTag, mpTag->npCurNode->iCurKeyNo, mpTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+ PrintKey( vpTag, mpTag->npCurNode , mpTag->npCurNode->iCurKeyNo, iDepth++, 'I', iOutputOpt );
+
+ if(( iRc = GetBlock( vpTag, (ulKeyPtr / (xbUInt32) iBlockFactor), 1 )) != XB_NO_ERROR ){
+ iErrorStop = 170;
+ throw iRc;
+ }
+
+ // traverse down the left side of the tree
+ while( !IsLeaf( vpTag, mpTag->npCurNode )) // go down the chain looking for a leaf node
+ {
+ PrintKey( vpTag, mpTag->npCurNode , 0, iDepth++, 'I', iOutputOpt );
+ if(( iRc = GetKeyPtr( vpTag, 0, mpTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 180;
+ throw iRc;
+ }
+ if(( iRc = GetBlock( vpTag, (ulKeyPtr / (xbUInt32) iBlockFactor), 1 )) != XB_NO_ERROR ){
+ iErrorStop = 190;
+ throw iRc;
+ }
+ }
+ if( iDepth < iMinDepth ) iMinDepth = iDepth;
+ if( iDepth > iMaxDepth ) iMaxDepth = iDepth;
+ ulNoOfKeys = eGetUInt32( mpTag->npCurNode->cpBlockData );
+ for( xbUInt32 ul = 0; ul < ulNoOfKeys; ul++ ){
+ PrintKey( vpTag, mpTag->npCurNode , ul, iDepth, 'L', iOutputOpt );
+ lKeyCtr++;
+ }
+ }
+ }
+ xbString s;
+ s.Sprintf( "Total keys = [%ld] Min Depth = [%d] Max Depth = [%d]", lKeyCtr, iMinDepth, iMaxDepth );
+ xbase->WriteLogMessage( s.Str(), 2 );
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::DumpIxForTag() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+/**************************************************************************************************************/
+void xbIxMdx::DumpIxNodeChain( void *vpTag, xbInt16 iOutputOpt ) const
+{
+ xbMdxTag * mpTag = (xbMdxTag *) vpTag;
+ xbString s( "Dump Node Chain" );
+ xbase->WriteLogMessage( s, 2 );
+
+ if( mpTag->npNodeChain ){
+ xbIxNode *n = mpTag->npNodeChain;
+ xbInt16 iCtr = 0;
+ char cLeaf;
+ s.Sprintf( "Cnt\tThis Prev Next CurKeyNo BlockNo Page NoOfKeys Type" );
+ xbase->WriteLogMessage( s, iOutputOpt );
+ while( n ){
+ IsLeaf( vpTag, n ) ? cLeaf = 'L' : cLeaf = 'I';
+ s.Sprintf( "%d\t%08x %08x %08x %08d %08d %08d %08ld %c",
+ iCtr++, n, n->npPrev, n->npNext, n->iCurKeyNo,
+ n->ulBlockNo, n->ulBlockNo * (xbUInt32) iBlockFactor,
+ eGetUInt32( n->cpBlockData ), cLeaf );
+ xbase->WriteLogMessage( s, 2 );
+ n = n->npNext;
+ }
+ } else {
+ s = "Empty Node Chain";
+ xbase->WriteLogMessage( s, 2 );
+ }
+}
+#endif
+
+/***********************************************************************************************/
+xbInt16 xbIxMdx::FindKey( void *vpTag, xbDouble dKey, xbInt16 iRetrieveSw ){
+
+ xbMdxTag * mpTag = (xbMdxTag *) vpTag;
+ if( mpTag->cKeyType2 == 'N' ){ // mdx indices store numeric keys as bcd values
+ xbBcd bcd( dKey );
+ return xbIx::FindKey( vpTag, bcd, iRetrieveSw );
+ } else // this would be a julian date inquiry
+ return FindKey( vpTag, &dKey, 8, iRetrieveSw );
+}
+
+/***********************************************************************************************/
+// iRetrieveSw = 1 - position db file to index position
+// 0 - do not position dbf file
+
+xbInt16 xbIxMdx::FindKey( void *vpTag, const void * vpKey,
+ xbInt32 lSearchKeyLen, xbInt16 iRetrieveSw ){
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+
+ try{
+ // clean up any previous table updates before moving on
+ if( iRetrieveSw ){
+ if( dbf->GetDbfStatus() == XB_UPDATED ){
+ if( dbf->GetAutoCommit() == 1 ){
+ if(( iRc = dbf->Commit()) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ } else {
+ if(( iRc = dbf->Abort()) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ }
+ }
+ }
+
+ xbUInt32 ulNoOfKeys;
+ xbMdxTag * mpTag = (xbMdxTag *) vpTag;
+ char cKeyType = GetKeyType( vpTag );
+ xbBool bDescending = mpTag->cKeyFmt2 & 0x08;
+
+ if( mpTag->npNodeChain ){
+
+ // determine if the index has been updated since the last time it was used
+ time_t tFileTs;
+ if(( iRc = GetFileMtime( tFileTs )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ if( mpTag->tNodeChainTs < tFileTs ){
+ mpTag->npNodeChain = FreeNodeChain( mpTag->npNodeChain );
+ mpTag->npCurNode = NULL;
+
+ } else {
+ // pop up the chain looking for appropriate starting point
+ xbBool bDone = false;
+ xbIxNode * TempIxNode;
+ while( mpTag->npCurNode && !bDone &&
+ (mpTag->npCurNode->ulBlockNo != ( mpTag->ulRootPage / (xbUInt32) iBlockFactor ))){ // not root node
+ //if no keys on the node, pop up one
+ ulNoOfKeys = eGetUInt32( mpTag->npCurNode->cpBlockData );
+ if( ulNoOfKeys == 0 ){
+ TempIxNode = mpTag->npCurNode;
+ mpTag->npCurNode = mpTag->npCurNode->npPrev;
+ TempIxNode = FreeNodeChain( TempIxNode );
+
+ } else {
+
+ iRc = CompareKey( cKeyType, vpKey, GetKeyData( mpTag->npCurNode, 0, mpTag->iKeyItemLen ), (size_t) lSearchKeyLen );
+ if( (!bDescending && iRc <= 0) || (bDescending && iRc >= 0 )){
+ TempIxNode = mpTag->npCurNode;
+ mpTag->npCurNode = mpTag->npCurNode->npPrev;
+ TempIxNode = FreeNodeChain( TempIxNode );
+ } else {
+ // get the number of keys on the block and compare the key to the rightmost key
+ xbUInt32 ulKeyCtr = eGetUInt32( mpTag->npCurNode->cpBlockData ) - 1; // IsLeaf( vpTag, mpTag->npCurNode );
+ iRc = CompareKey( cKeyType, vpKey, GetKeyData( mpTag->npCurNode, ulKeyCtr, mpTag->iKeyItemLen), (size_t) lSearchKeyLen );
+
+ if( (!bDescending && iRc > 0) || (bDescending && iRc < 0 )){
+ TempIxNode = mpTag->npCurNode;
+ mpTag->npCurNode = mpTag->npCurNode->npPrev;
+ TempIxNode = FreeNodeChain( TempIxNode );
+ } else {
+ bDone = true;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // either started empty, or cleared due to file time diff
+ if( !mpTag->npNodeChain ){
+ // Get the root
+ if(( iRc = LoadTagDetail( 2, mpTag )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ // lRootBlock is now available
+ if(( iRc = GetBlock( vpTag, (mpTag->ulRootPage / (xbUInt32) iBlockFactor), 1 )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+ // if this is a leaf node and no keys on this node, then the index is empty
+ ulNoOfKeys = eGetUInt32( mpTag->npCurNode->cpBlockData );
+ if( ulNoOfKeys == 0 && IsLeaf( vpTag, mpTag->npCurNode )){
+// iRc = XB_EMPTY;
+ iRc = XB_NOT_FOUND;
+ return iRc;
+ }
+ }
+
+ // should be in the appropriate position in the node chain to continue the search from here
+ // run down through the interior nodes
+ xbInt16 iSearchRc = 0;
+ xbUInt32 ulKeyPtr = 0;
+
+ while( vpTag && !IsLeaf( vpTag, mpTag->npCurNode ) ){
+ // get the number of keys on the block and compare the key to the rightmost key
+ ulNoOfKeys = eGetUInt32( mpTag->npCurNode->cpBlockData );
+
+ if( ulNoOfKeys == 0 ){
+ mpTag->npCurNode->iCurKeyNo = 0;
+
+ } else {
+
+ iRc = CompareKey( cKeyType, vpKey, GetKeyData( mpTag->npCurNode, ulNoOfKeys - 1, mpTag->iKeyItemLen), (size_t) lSearchKeyLen );
+ if( (!bDescending && iRc > 0) || (bDescending && iRc < 0)){
+ mpTag->npCurNode->iCurKeyNo = ulNoOfKeys;
+ }
+ else
+ {
+ mpTag->npCurNode->iCurKeyNo = (xbUInt32) BSearchBlock( cKeyType, mpTag->npCurNode,
+ (xbInt32) mpTag->iKeyItemLen, vpKey, (xbInt32) lSearchKeyLen, iSearchRc, bDescending );
+ }
+ }
+
+ if(( iRc = GetKeyPtr( vpTag, mpTag->npCurNode->iCurKeyNo, mpTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+
+ if(( iRc = GetBlock( vpTag, (ulKeyPtr / (xbUInt32)iBlockFactor), 1 )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+ }
+
+ ulNoOfKeys = eGetUInt32( mpTag->npCurNode->cpBlockData );
+ xbInt16 iCompRc = 0;
+
+ if( ulNoOfKeys == 0 ){
+ // iCompRc = -1;
+ // iRc = XB_EMPTY;
+ iRc = XB_NOT_FOUND;
+ return iRc;
+
+ } else {
+
+ iRc = BSearchBlock( cKeyType, mpTag->npCurNode, mpTag->iKeyItemLen, vpKey, lSearchKeyLen, iCompRc, bDescending );
+ // iCompRc
+ // 0 found
+ // < 0 eof encountered, search key > last key in file
+ // > 0 not found, positioned to next key
+
+ if( iCompRc >= 0 ){
+ mpTag->npCurNode->iCurKeyNo = (xbUInt32) iRc;
+
+
+ if( iRetrieveSw ){
+
+ xbUInt32 ulKey = mpTag->npCurNode->iCurKeyNo;
+ if( ulKey >= ulNoOfKeys ) // if position past end of keys, need to go back one and position to last key
+ ulKey--;
+
+ // if(( iRc = GetKeyPtr( vpTag, mpTag->npCurNode->iCurKeyNo, mpTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
+
+ if(( iRc = GetKeyPtr( vpTag, ulKey, mpTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 170;
+ throw iRc;
+ }
+ if(( iRc = dbf->GetRecord( ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 180;
+ throw iRc;
+ }
+ }
+ }
+ }
+
+ if( iCompRc == 0 )
+ return XB_NO_ERROR;
+ else if( iCompRc > 0 )
+ return XB_NOT_FOUND;
+ else
+ return XB_EOF;
+
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::FindKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+xbInt16 xbIxMdx::FindKeyForCurRec( void * vpTag )
+{
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbInt16 i = 0;
+
+ try{
+ if(( iRc = CreateKey( vpTag, 0 )) < XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::FindKeyForCurRec() Exception Caught. Error Stop = [%d] iRc = [%d] Tag=[%d]", iErrorStop, iRc, i );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return XB_NO_ERROR;
+}
+
+/***********************************************************************/
+//! @brief Get dbf record number for given key number.
+/*!
+ \param vpTag Tag to retrieve dbf rec number on.
+ \param iKeyNo Key number for retrieval
+ \param np Pointer to node
+ \param ulDbfPtr- Output dbf record number
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbIxMdx::GetDbfPtr( void *vpTag, xbInt16 iKeyNo, xbIxNode *np, xbUInt32 &ulDbfPtr ) const {
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+
+ try{
+ #ifdef XB_DEBUG_SUPPORT
+ // turn this off in production mode for better performance
+ xbUInt32 ulNoOfKeys = eGetUInt32 ( np->cpBlockData );
+ if( iKeyNo < 0 || iKeyNo > (xbInt16) --ulNoOfKeys ){
+ iErrorStop = 100;
+ throw XB_INVALID_KEYNO;
+ }
+ #endif
+
+ xbMdxTag * mpTag = (xbMdxTag *) vpTag;
+ char *p = ( np->cpBlockData);
+ p += (8 + (iKeyNo * mpTag->iKeyItemLen));
+ ulDbfPtr = eGetUInt32 ( p );
+
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::GetDbfPtr() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+/*!
+ \param vpTag Tag to retrieve first key on.
+ \param iRetrieveSw xbTrue - Retrieve the record on success.<br>
+ xbFalse - Don't retrieve record.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbIxMdx::GetFirstKey( void *vpTag, xbInt16 iRetrieveSw = 0 ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+
+ // convert the tag pointer to mdx tag pointer
+ xbMdxTag * mpTag = (xbMdxTag *) vpTag;
+
+
+ try{
+ // clear out any history
+ if( mpTag->npNodeChain ){
+ mpTag->npNodeChain = FreeNodeChain( mpTag->npNodeChain );
+ mpTag->npCurNode = NULL;
+ }
+ // Get the root
+ if(( iRc = LoadTagDetail( 2, mpTag )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+
+ // lRootPage is available
+ if(( iRc = GetBlock( vpTag, (mpTag->ulRootPage / (xbUInt32) iBlockFactor), 1 )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+
+ // if no keys on this node, then the index is empty
+ // this is not true
+
+ xbUInt32 ulKeyPtr = eGetUInt32( mpTag->npCurNode->cpBlockData );
+ if( ulKeyPtr == 0 && IsLeaf( vpTag, mpTag->npCurNode )){
+ iRc = XB_EMPTY;
+ return iRc;
+ }
+
+ while( !IsLeaf( vpTag, mpTag->npCurNode )){ // go down the chain looking for a leaf node
+ if(( iRc = GetKeyPtr( vpTag, 0, mpTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+
+ if(( iRc = GetBlock( vpTag, (ulKeyPtr / (xbUInt32) iBlockFactor), 1 )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ }
+
+ // retrieve record to data buf
+ if( iRetrieveSw ){
+ if(( iRc = GetKeyPtr( vpTag, 0, mpTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+ if(( iRc = dbf->GetRecord( ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::GetFirstKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+//xbBool xbIxMdx::GetIndexUpdated() const {
+// std::cout << "xbIxMdx::GetIndexUpdate() FIX ME \n";
+// return xbFalse;
+//}
+
+/***********************************************************************/
+//! @brief Get the key expression for the given tag.
+/*!
+ \param vpTag Tag to retrieve key expression from tag.
+ \returns Key expression.
+*/
+
+xbString &xbIxMdx::GetKeyExpression( const void * vpTag ) const{
+ xbMdxTag *mpTag = (xbMdxTag *) vpTag;
+ return *mpTag->sKeyExp;
+}
+
+/***********************************************************************/
+//! @brief Get the key expression for the given tag.
+/*!
+ \param vpTag Tag to retrieve filter expression from tag (if it exists).
+ \returns Key filter.
+*/
+
+xbString &xbIxMdx::GetKeyFilter( const void * vpTag ) const{
+
+ xbMdxTag * mpTag = (xbMdxTag *) vpTag;
+
+ if( mpTag->sFiltExp )
+ return *mpTag->sFiltExp;
+ else
+ return sNullString;
+
+}
+/**************************************************************************************************/
+xbInt16 xbIxMdx::GetKeyPtr( void *vpTag, xbInt16 iKeyNo, xbIxNode *np, xbUInt32 &ulKeyPtr ) const {
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+
+ try{
+
+ xbMdxTag *mdxTag = (xbMdxTag *) vpTag;
+ char *p = np->cpBlockData;
+ xbUInt32 ulKeyCnt = eGetUInt32( p );
+ if( iKeyNo < 0 || iKeyNo > (xbInt16) ulKeyCnt ){
+ iErrorStop = 100;
+ iRc = XB_INVALID_KEYNO;
+ throw iRc;
+ }
+ p+=8; // skip past first two four byte numeric fields
+ p+= (iKeyNo * mdxTag->iKeyItemLen);
+ ulKeyPtr = eGetUInt32( p );
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::GetKeyPtr() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+/***********************************************************************/
+//! @brief Returns key update status.
+/*!
+ \param vpTag Tag to check status on.
+ \returns XB_UPD_KEY Key updated.<br>
+ XB_DEL_KEY Key deleted.<br>
+ XB_ADD_KEY Key added.<br>
+ 0 No key updates
+
+*/
+inline xbInt16 xbIxMdx::GetKeySts( void *vpTag ) const{
+
+ xbMdxTag *mpTag = (xbMdxTag *) vpTag;
+ return mpTag->iKeySts;
+}
+
+/***********************************************************************/
+char xbIxMdx::GetKeyType( const void *vpTag ) const {
+ xbMdxTag * mpTag = (xbMdxTag *) vpTag;
+ return mpTag->cKeyType;
+}
+
+/***********************************************************************/
+//! @brief Get the last key for the given tag.
+/*!
+ \param vpTag Tag to retrieve last key on.
+ \param iRetrieveSw xbTrue - Retrieve the record on success.<br>
+ xbFalse - Don't retrieve record.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbIxMdx::GetLastKey( void *vpTag, xbInt16 iRetrieveSw ){
+ return GetLastKey( 0, vpTag, iRetrieveSw );
+}
+
+/***********************************************************************/
+//! @brief Get the last key for the given tag and starting node.
+/*!
+ \param ulBlockNo Starting node
+ \param vpTag Tag to retrieve last key on.
+ \param iRetrieveSw xbTrue - Retrieve the record if key found.<br>
+ xbFalse - Don't retrieve record.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbIxMdx::GetLastKey( xbUInt32 ulBlockNo, void *vpTag, xbInt16 iRetrieveSw ){
+
+ // if UlNodeNo is zero, start at head node, otherwise start at ulNodeNo
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+
+ // convert the tag pointer to mdx tag pointer
+ xbMdxTag * mpTag = (xbMdxTag *) vpTag;
+
+ try{
+ xbUInt32 ulNoOfKeys = 0;
+ // clear out any history
+ if( mpTag->npNodeChain ){
+ mpTag->npNodeChain = FreeNodeChain( mpTag->npNodeChain );
+ mpTag->npCurNode = NULL;
+ }
+ // Get the root
+ if( ulBlockNo == 0 ){
+ if(( iRc = LoadTagDetail( 2, mpTag )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ //if(( iRc = GetBlock( vpTag, (mpTag->ulRootPage / (xbUInt32) iBlockFactor), 1 )) != XB_NO_ERROR ){
+ if(( iRc = GetBlock( vpTag, PageToBlock( mpTag->ulRootPage ), 1 )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+
+ } else {
+ if(( iRc = GetBlock( vpTag, ulBlockNo, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ }
+
+ ulNoOfKeys = eGetUInt32( mpTag->npCurNode->cpBlockData );
+
+ if( ulNoOfKeys == 0 && IsLeaf( vpTag, mpTag->npCurNode )){
+ iRc = XB_EMPTY;
+ return iRc;
+ }
+
+ mpTag->npCurNode->iCurKeyNo = ulNoOfKeys;
+ ulNoOfKeys = eGetUInt32( mpTag->npCurNode->cpBlockData );
+
+ xbUInt32 ulKeyPtr = 0;
+ while( !IsLeaf( vpTag, mpTag->npCurNode )){ // go down the chain looking for a leaf node
+ // std::cout << "Considered an interior node\n";
+ if(( iRc = GetKeyPtr( vpTag, ulNoOfKeys, mpTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ if(( iRc = GetBlock( vpTag, (ulKeyPtr / (xbUInt32) iBlockFactor), 1 )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+
+ ulNoOfKeys = eGetUInt32( mpTag->npCurNode->cpBlockData );
+ mpTag->npCurNode->iCurKeyNo = ulNoOfKeys;
+ }
+ // leaf node has one fewer keys than the interior node
+ mpTag->npCurNode->iCurKeyNo--;
+ ulNoOfKeys = eGetUInt32( mpTag->npCurNode->cpBlockData );
+
+ // retrieve record to data buf
+ if( iRetrieveSw ){
+ if(( iRc = GetKeyPtr( vpTag, (ulNoOfKeys-1), mpTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+ if(( iRc = dbf->GetRecord( ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::GetLastKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+//! @brief Get the last key for a block number.
+/*!
+ \param vpTag Tag to retrieve first key on.
+ \param ulBlockNo Block number for key retrieval.
+ \param cpBuf output buffer for key placement
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbIxMdx::GetLastKeyForBlockNo( void *vpTag, xbUInt32 ulBlockNo, char *cpBuf ){
+
+ // returns the last key for a given block number
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+
+ xbMdxTag * npTag = (xbMdxTag *) vpTag;
+
+ try{
+ xbIxNode * npSaveNodeChain = npTag->npNodeChain;
+ xbIxNode * npSaveCurNode = npTag->npCurNode;
+ npTag->npNodeChain = NULL;
+
+ if(( iRc = GetLastKey( ulBlockNo, npTag, 0 )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ memcpy( cpBuf, GetKeyData( npTag->npCurNode, GetKeyCount( npTag->npCurNode ) - 1, npTag->iKeyItemLen ), (size_t) npTag->iKeyLen );
+
+ // free memory
+ FreeNodeChain( npTag->npNodeChain );
+ npTag->npNodeChain = npSaveNodeChain;
+ npTag->npCurNode = npSaveCurNode;
+
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::GetLastKeyForBlockNo() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ) );
+ }
+ return iRc;
+}
+/***********************************************************************/
+//! @brief Get the next key for the given tag.
+/*!
+ \param vpTag Tag to retrieve next key on.
+ \param iRetrieveSw xbTrue - Retrieve the record on success.<br>
+ xbFalse - Don't retrieve record.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbIxMdx::GetNextKey( void * vpTag, xbInt16 iRetrieveSw ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+
+ // convert the tag pointer to mdx tag pointer
+ xbMdxTag * mpTag = (xbMdxTag *) vpTag;
+
+ try{
+ if( !mpTag->npCurNode )
+ return GetFirstKey( vpTag, iRetrieveSw );
+
+ // more keys on this node?
+ xbUInt32 ulKeyPtr;
+ if( (eGetUInt32( mpTag->npCurNode->cpBlockData ) - 1) > mpTag->npCurNode->iCurKeyNo ){
+ mpTag->npCurNode->iCurKeyNo++;
+
+ if(( iRc = GetKeyPtr( vpTag, mpTag->npCurNode->iCurKeyNo, mpTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ if( iRetrieveSw ){
+ if(( iRc = dbf->GetRecord( ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ } else {
+ return iRc;
+ }
+ } else {
+ return iRc;
+ }
+ }
+
+ // if at end head node, then at eof
+ if( mpTag->npCurNode->ulBlockNo == ( mpTag->ulRootPage / (xbUInt32) iBlockFactor ))
+ return XB_EOF;
+
+ // This logic assumes that interior nodes have n+1 left node no's where n is the number of keys in the node
+ xbIxNode * TempIxNode = mpTag->npCurNode;
+ mpTag->npCurNode = mpTag->npCurNode->npPrev;
+ TempIxNode = FreeNodeChain( TempIxNode );
+
+ // While no more right keys && not head node, pop up one node
+ while( mpTag->npCurNode->iCurKeyNo >= eGetUInt32( mpTag->npCurNode->cpBlockData ) &&
+ mpTag->npCurNode->ulBlockNo != ( mpTag->ulRootPage / (xbUInt32) iBlockFactor) ){
+
+ TempIxNode = mpTag->npCurNode;
+ mpTag->npCurNode = mpTag->npCurNode->npPrev;
+ TempIxNode = FreeNodeChain( TempIxNode );
+ }
+
+ // if head node && right most key, return eof
+ if( mpTag->npCurNode->ulBlockNo == (mpTag->ulRootPage / (xbUInt32) iBlockFactor) &&
+ mpTag->npCurNode->iCurKeyNo == eGetUInt32( mpTag->npCurNode->cpBlockData ))
+ return XB_EOF;
+
+ // move one to the right
+ mpTag->npCurNode->iCurKeyNo++;
+ if(( iRc = GetKeyPtr( vpTag, mpTag->npCurNode->iCurKeyNo, mpTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+
+ if(( iRc = GetBlock( vpTag, (ulKeyPtr / (xbUInt32) iBlockFactor), 1 )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+
+ // traverse down the left side of the tree
+ while( !IsLeaf( vpTag, mpTag->npCurNode )) // go down the chain looking for a leaf node
+ {
+ if(( iRc = GetKeyPtr( vpTag, 0, mpTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+ if(( iRc = GetBlock( vpTag, (ulKeyPtr / (xbUInt32) iBlockFactor), 1 )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+ }
+ // retrieve record to data buf
+ if( iRetrieveSw ){
+ if(( iRc = GetKeyPtr( vpTag, 0, mpTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+ if(( iRc = dbf->GetRecord( ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 170;
+ throw iRc;
+ }
+ } else {
+ return iRc;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::GetNextKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+//! @brief Get the previous key for the given tag.
+/*!
+ \param vpTag Tag to retrieve previous key on.
+ \param iRetrieveSw xbTrue - Retrieve the record on success.<br>
+ xbFalse - Don't retrieve record.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbIxMdx::GetPrevKey( void * vpTag, xbInt16 iRetrieveSw ){
+
+ xbString s;
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+
+ // convert the tag pointer to mdx tag pointer
+ xbMdxTag * mpTag = (xbMdxTag *) vpTag;
+
+ try{
+ if( !mpTag->npCurNode ){
+ return GetLastKey( 0, vpTag, iRetrieveSw );
+ }
+
+ xbUInt32 ulKeyPtr = 0;
+ // more keys on this assumed-leaf node?
+
+ if( mpTag->npCurNode->iCurKeyNo > 0 ){
+ mpTag->npCurNode->iCurKeyNo--;
+
+ if(( iRc = GetKeyPtr( vpTag, mpTag->npCurNode->iCurKeyNo, mpTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+
+ if( iRetrieveSw ){
+ if(( iRc = dbf->GetRecord( ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ } else {
+ return iRc;
+ }
+ } else {
+ return iRc;
+ }
+ }
+
+ //if head node = start node, at eof
+ if( mpTag->npCurNode->ulBlockNo == ( mpTag->ulRootPage / (xbUInt32) iBlockFactor ))
+ return XB_BOF;
+
+ // This logic assumes that interior nodes have n+1 left node no's where n is the number of keys in the node
+ xbIxNode * TempIxNode = mpTag->npCurNode;
+ mpTag->npCurNode = mpTag->npCurNode->npPrev;
+ TempIxNode = FreeNodeChain( TempIxNode );
+
+ // While no more left keys && not head node, pop up one node
+ while( mpTag->npCurNode->iCurKeyNo == 0 &&
+ mpTag->npCurNode->ulBlockNo != ( mpTag->ulRootPage / (xbUInt32) iBlockFactor) ){
+ TempIxNode = mpTag->npCurNode;
+ mpTag->npCurNode = mpTag->npCurNode->npPrev;
+ TempIxNode = FreeNodeChain( TempIxNode );
+ }
+
+ //if head node && left most key, return bof
+ if( mpTag->npCurNode->ulBlockNo == ( mpTag->ulRootPage / (xbUInt32) iBlockFactor) && mpTag->npCurNode->iCurKeyNo == 0 )
+ return XB_BOF;
+
+ // move one to the left
+ mpTag->npCurNode->iCurKeyNo--;
+ if(( iRc = GetKeyPtr( vpTag, mpTag->npCurNode->iCurKeyNo, mpTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+
+ if(( iRc = GetBlock( vpTag, (ulKeyPtr / (xbUInt32) iBlockFactor), 1 )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+
+ // traverse down the right side of the tree
+ xbUInt32 ulNoOfKeys;
+ while( !IsLeaf( vpTag, mpTag->npCurNode )) // go down the chain looking for a leaf node
+ {
+ ulNoOfKeys = eGetUInt32( mpTag->npCurNode->cpBlockData );
+ mpTag->npCurNode->iCurKeyNo = ulNoOfKeys;
+
+ if(( iRc = GetKeyPtr( vpTag, ulNoOfKeys, mpTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+ if(( iRc = GetBlock( vpTag, (ulKeyPtr / (xbUInt32) iBlockFactor), 1 )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+ }
+
+ // ulNoOfKeys = eGetUInt32( mpTag->npCurNode->cpBlockData );
+ mpTag->npCurNode->iCurKeyNo = eGetUInt32( mpTag->npCurNode->cpBlockData ) - 1;
+
+ // retrieve record to data buf
+ if( iRetrieveSw ){
+ if(( iRc = GetKeyPtr( vpTag, mpTag->npCurNode->iCurKeyNo, mpTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+ if(( iRc = dbf->GetRecord( ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 170;
+ throw iRc;
+ }
+ } else {
+ return iRc;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::GetPrevKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+//! @brief GetReuseEmptyNode swuitch setting.
+/*!
+ \returns xbFalse - Do not reuse empty MDX index nodes (Dbase 6. behavior).
+ xbTrue - Reuse empty MDX index nodes.
+*/
+
+xbBool xbIxMdx::GetReuseEmptyNodesSw() const {
+ return bReuseEmptyNodes;
+}
+/***********************************************************************/
+xbBool xbIxMdx::GetSortOrder( void *vpTag ) const {
+
+ // return true if descending
+ xbMdxTag *mTag = (xbMdxTag *) vpTag;
+ if( mTag->cKeyFmt2 & 0x08 )
+ return 0x01;
+ else
+ return 0x00;
+}
+
+/***********************************************************************/
+//! @brief Get tag for tag number.
+/*!
+ \param iTagNo - Zero based, which tag to retrieve.
+ \returns Pointer to mdx tag for a given tag number.
+*/
+
+void * xbIxMdx::GetTag( xbInt16 iTagNo ) const {
+
+ xbMdxTag *tt = mdxTagTbl;
+ xbInt16 i = 0;
+
+ while( i < iTagNo && tt->next ){
+ tt = tt->next;
+ i++;
+ }
+ if( i == iTagNo )
+ return (void *) tt;
+ else
+ return NULL;
+}
+
+/***********************************************************************/
+//! @brief Get tag for tag name.
+/*!
+ \sTagName - Tag name to retrieve.
+ \returns Pointer to mdx tag for a given tag number.
+*/
+
+void * xbIxMdx::GetTag( xbString &sTagName ) const {
+
+ xbMdxTag *tt = mdxTagTbl;
+
+ while( sTagName != tt->cTagName && tt->next ){
+ tt = tt->next;
+ }
+
+ if( sTagName == tt->cTagName )
+ return (void *) tt;
+ else
+ return NULL;
+}
+/***********************************************************************/
+xbInt16 xbIxMdx::GetTagCount() const {
+ return iTagUseCnt;
+}
+
+/***********************************************************************/
+void xbIxMdx::GetTagName( void *vpTag, xbString &sTagName ){
+
+ xbMdxTag *mpTag = (xbMdxTag *) vpTag;
+ sTagName = mpTag->sTagName->Str();
+}
+
+/***********************************************************************/
+//const char *xbIxMdx::GetTagName( void *vpTag, xbInt16 iOpt ) const {
+
+const char *xbIxMdx::GetTagName( void *vpTag, xbInt16 ) const {
+ xbMdxTag *mpTag = (xbMdxTag *) vpTag;
+ return mpTag->cTagName;
+}
+
+/***********************************************************************/
+xbString &xbIxMdx::GetTagName( void *vpTag ) const {
+
+ xbMdxTag *mpTag = (xbMdxTag *) vpTag;
+ return *mpTag->sTagName;
+}
+
+/***********************************************************************/
+void *xbIxMdx::GetTagTblPtr() const {
+ return (void *) mdxTagTbl;
+}
+
+/***********************************************************************/
+xbBool xbIxMdx::GetUnique( void *vpTag ) const {
+//! @brief Determine unique setting for given tag.
+/*!
+ \param vpTag Tag to retrieve expression from.
+ \returns xbTrue if unique key.
+*/
+ xbMdxTag *mTag = (xbMdxTag *) vpTag;
+ return mTag->cUnique;
+}
+
+/***********************************************************************/
+//! @brief Harvest Empty Node.
+/*!
+ Harvest empty MDX node and add it to the chain of link nodes
+
+ \param mpTag Tag to harvest.
+ \param iOpt - 0 Don't write the node info to disk, handled elsewhere (don't write it twice)
+ 1 Write the update into to disk
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbIxMdx::HarvestEmptyNode( xbMdxTag *mpTag, xbIxNode *npNode, xbInt16 iOpt, xbBool bHarvestRoot ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbBool bRootPage = xbFalse;
+ xbInt32 iOffset = 0;
+
+ try{
+
+ if( mpTag->ulRootPage == BlockToPage( npNode->ulBlockNo ) && !bHarvestRoot ){
+ bRootPage = xbTrue;
+ }
+ memset( npNode->cpBlockData, 0x00, GetBlockSize());
+
+ char *pTrg = npNode->cpBlockData;
+ if( !bRootPage ){
+ pTrg += 4;
+ ePutUInt32( pTrg, ulFirstFreePage );
+ }
+
+ if( bRootPage ){
+ if( mpTag->cHasKeys ){
+
+ // std::cout << "setting has keys\n";
+
+ mpTag->cHasKeys = 0x00;
+ if(( iRc = xbFseek( ((mpTag->ulTagHdrPageNo * 512) + 246), SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ if(( iRc = xbFwrite( &mpTag->cHasKeys, 1, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ // might need to update left sibling and right sibling here.
+ // Fields don't seem to be updated consistently by other xbase tools,
+ // for now, not updating
+ }
+
+ } else {
+
+ // update header
+ // seek to position byte 13
+ ulFirstFreePage = BlockToPage( npNode->ulBlockNo );
+ if(( iRc = xbFseek( 36, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ // write it
+ char c4[4];
+ ePutUInt32( c4, ulFirstFreePage );
+ if(( iRc = xbFwrite( c4, 4, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ }
+
+ if( iOpt == 1 ){
+ if(( iRc = xbFseek( (xbInt64) ((npNode->ulBlockNo * GetBlockSize() )) + iOffset, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+ // write out the block
+ if(( iRc = xbFwrite( npNode->cpBlockData, GetBlockSize(), 1 )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+ }
+ }
+
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::HarvestEmptyNodeI() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+//! @brief Harvest Tag Nodes.
+/*!
+ Save all nodes for a given tag into the free node chain.
+ Used for reindexing or deleting a given tag.
+
+ \param mpTag Tag for harvesting nodes
+ \param bHarvestRoot Set to True when deleting tag
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbIxMdx::HarvestTagNodes( xbMdxTag *mpTag, xbBool bHarvestRoot ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+
+ xbUInt32 ulBlkNo;
+ xbLinkListOrd<xbUInt32> ll;
+ xbLinkListNode<xbUInt32> * llN;
+ xbIxNode * n;
+
+ try{
+
+ ll.SetDupKeys( xbFalse );
+
+ // clear out any history
+ if( mpTag->npNodeChain ){
+ mpTag->npNodeChain = FreeNodeChain( mpTag->npNodeChain );
+ mpTag->npCurNode = NULL;
+ }
+
+ while( GetNextKey( mpTag, 0 ) == 0 ){
+ n = mpTag->npNodeChain;
+ while(n){
+ ll.InsertKey( n->ulBlockNo, (xbUInt32) n->iCurKeyNo );
+ n = n->npNext;
+ }
+ }
+
+ if( bHarvestRoot )
+ ll.InsertKey( PageToBlock( mpTag->ulTagHdrPageNo ), 0 );
+
+ llN = ll.GetHeadNode();
+ if(( n = xbIx::AllocateIxNode( GetBlockSize())) == NULL ){
+ iErrorStop = 100;
+ iRc = XB_NO_MEMORY;
+ throw iRc;
+ }
+
+ while( llN ){
+ ulBlkNo = llN->GetKey();
+
+ // read in a block for the block number
+ if(( iRc = ReadBlock( ulBlkNo, GetBlockSize(), n->cpBlockData )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ // harvest it
+ n->ulBlockNo = ulBlkNo;
+ if(( iRc = HarvestEmptyNode( mpTag, n, 1, bHarvestRoot )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ llN = llN->GetNextNode();
+ }
+ n = FreeNodeChain( n );
+ mpTag->npNodeChain = FreeNodeChain( mpTag->npNodeChain );
+ mpTag->npCurNode = NULL;
+
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::HarvestTagNodes() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+//! @brief Insert key into interior node.
+/*!
+ Insert key into non-full interior node.<br>
+ Assumes valid inputs
+
+ \param vpTag Tag in play.
+ \param npNode Node for insertion.
+ \param iSlotNo Slot number to insert key.
+ \param ulPtr Page number to insert.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbIxMdx::InsertNodeI( void *vpTag, xbIxNode *npNode, xbInt16 iSlotNo, xbUInt32 ulPtr ){
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ char *pNewKeyPos;
+ char *pTrg;
+ char *pLastKey = NULL;
+ xbMdxTag * npTag;
+ npTag = (xbMdxTag *) vpTag;
+ xbInt16 iCopyLen;
+ xbInt16 iNewKeyPos = 8;
+
+ try{
+ xbInt32 lKeyCnt = GetKeyCount( npNode );
+ iNewKeyPos += (iSlotNo * npTag->iKeyItemLen);
+ char *pSrc = npNode->cpBlockData;
+
+ if( iSlotNo < lKeyCnt )
+ iCopyLen = ((lKeyCnt - iSlotNo) * npTag->iKeyItemLen) + 4;
+ else
+ iCopyLen = 0;
+
+ xbUInt32 ulRqdBufSize = (xbUInt32) ((lKeyCnt + 1) * npTag->iKeyItemLen) + 12;
+ if( ulRqdBufSize > npNode->ulBufSize ){
+ npNode->ulBufSize += (xbUInt32) npTag->iKeyItemLen;
+ npNode->cpBlockData = (char *) realloc( npNode->cpBlockData, (size_t) npNode->ulBufSize );
+ if( !npNode->cpBlockData ){
+ iErrorStop = 100;
+ iRc = XB_NO_MEMORY;
+ throw iRc;
+ }
+ }
+
+ // if not appending to the end of the node, make some room, move things to the right
+ pNewKeyPos = npNode->cpBlockData;
+ pNewKeyPos += iNewKeyPos;
+
+ if( iSlotNo < lKeyCnt ){
+ pTrg = pNewKeyPos;
+ pTrg += npTag->iKeyItemLen;
+ memmove( pTrg, pNewKeyPos, (size_t) iCopyLen );
+ }
+
+ // get the right most key for the left part of the split node
+ xbUInt32 ulKeyPtr2;
+ if(( iRc = GetKeyPtr( vpTag, npNode->iCurKeyNo, npNode, ulKeyPtr2 )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+
+ // get the new right key value for the freshly split node
+ pLastKey = (char *) malloc((size_t) npTag->iKeyLen);
+ if(( iRc = GetLastKeyForBlockNo( vpTag, PageToBlock( ulKeyPtr2 ), pLastKey )) != XB_NO_ERROR ){
+ iRc = 120;
+ throw iRc;
+ }
+
+ // write the key values
+ pTrg = pNewKeyPos;
+ pTrg += 4;
+ pSrc = pLastKey;
+ for( xbInt16 i = 0; i < npTag->iKeyLen; i++ )
+ *pTrg++ = *pSrc++;
+
+ pTrg = pNewKeyPos;
+ //pTrg+= npTag->iKeyItemLen - 4;
+ pTrg+= npTag->iKeyItemLen;
+
+ ePutUInt32( pTrg, ulPtr);
+ ePutInt32( npNode->cpBlockData, ++lKeyCnt );
+
+ // write out the updated block to disk
+ if(( iRc = WriteBlock( npNode->ulBlockNo, GetBlockSize(), npNode->cpBlockData )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ if( pLastKey )
+ free( pLastKey );
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::InsertNodeI() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ if( pLastKey )
+ free( pLastKey );
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+//! @brief Insert key into leaf node.
+/*!
+ Insert key into non-full leaf node.<br>
+ Assumes valid inputs
+
+ \param vpTag Tag in play.
+ \param npNode Node for insertion.
+ \param iSlotNo Slot number to insert key.
+ \param ulPtr Pointer number to insert.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbIxMdx::InsertNodeL( void *vpTag, xbIxNode *npNode, xbInt16 iSlotNo, char * cpKeyBuf, xbUInt32 ulPtr ){
+
+ // format of block data is
+ // 4 bytes number of keys on block
+ // 4 bytes - next free block or split block num
+ // repeating
+ // 4 bytes record number
+ // x bytes key data
+
+ // Special processing note: when splitting node, new key is first inserted into full left node before
+ // the node is split. This routine will make additional room in the buffer for that scenario
+
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ char *pNewKeyPos; // pointer to position in record for new key composite
+ char *pTrg;
+
+ xbInt16 iNewKeyPos = 8; // position in data block where new key begins.
+ // is the position of the record number, where the fmt is
+ // [four byte rec number][actual key data] repeats
+
+ xbMdxTag * npTag = (xbMdxTag *) vpTag;
+ xbInt16 iCopyLen;
+
+ try{
+ xbInt32 lKeyCnt = GetKeyCount( npNode );
+ iNewKeyPos += (iSlotNo * npTag->iKeyItemLen);
+
+ // length of number of keys that need to be moved to the right
+ if( iSlotNo < lKeyCnt )
+ iCopyLen = (lKeyCnt - iSlotNo) * npTag->iKeyItemLen;
+ else
+ iCopyLen = 0;
+
+ // +8 is to include the first two 4 byte fields in the block
+ xbUInt32 ulRqdBufSize = (xbUInt32) ((lKeyCnt + 1) * npTag->iKeyItemLen) + 8;
+
+ if( ulRqdBufSize > npNode->ulBufSize ){
+
+ npNode->ulBufSize += (xbUInt32) npTag->iKeyItemLen;
+ npNode->cpBlockData = (char *) realloc( npNode->cpBlockData, (size_t) npNode->ulBufSize );
+
+ // init the newly acquired buffer space
+ char *p = npNode->cpBlockData;
+ p += (npNode->ulBufSize - (xbUInt32) npTag->iKeyItemLen);
+ memset( p, 0x00, (size_t) npTag->iKeyItemLen );
+
+ if( !npNode->cpBlockData ){
+ iErrorStop = 100;
+ iRc = XB_NO_MEMORY;
+ throw iRc;
+ }
+ }
+
+ // if not appending to end, move things right
+
+ pNewKeyPos = npNode->cpBlockData;
+ pNewKeyPos += iNewKeyPos;
+
+ if( iSlotNo < lKeyCnt ) {
+ pTrg = pNewKeyPos;
+ pTrg += npTag->iKeyItemLen;
+ memmove( pTrg, pNewKeyPos, (size_t) iCopyLen );
+
+ }
+
+ // write rec number
+ ePutUInt32( pNewKeyPos, ulPtr );
+
+ // write the key value
+ pTrg = pNewKeyPos;
+ pTrg += 4;
+ char * pSrc = cpKeyBuf;
+ for( xbInt16 i = 0; i < npTag->iKeyLen; i++ )
+ *pTrg++ = *pSrc++;
+
+ // update number of keys on the node
+ ePutInt32( npNode->cpBlockData, ++lKeyCnt );
+
+ // determine length of node, zap everything to the right of it
+ xbUInt32 iStartPos = 8 + ((xbUInt32) lKeyCnt * (xbUInt32) npTag->iKeyItemLen );
+ xbUInt32 iClearLen = npNode->ulBufSize - iStartPos;
+
+ char *p = npNode->cpBlockData;
+ p += iStartPos;
+ memset( p, 0x00, iClearLen );
+
+ // write out the updated block to disk
+ if(( iRc = WriteBlock( npNode->ulBlockNo, GetBlockSize(), npNode->cpBlockData )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::InsertNodeL() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+/***********************************************************************/
+inline xbBool xbIxMdx::IsLeaf( void *vpTag, xbIxNode *npNode ) const{
+
+ // for performance reasons, does no data checking
+ // will result in potentially hard to find segfaults if passing invalid npNode
+
+ xbMdxTag *mTag = (xbMdxTag *) vpTag;
+ char *p = npNode->cpBlockData;
+
+ xbInt32 lNoOfKeys = eGetInt32( p );
+ // mdx interior nodes have a sibling number to the right of the right most key in the node
+ p+=8;
+ p+= mTag->iKeyItemLen * lNoOfKeys;
+
+ if( eGetUInt32( p ) == 0 ){
+ // std::cout << "leaf node\n";
+ return true;
+ } else {
+ // std::cout << "interior node\n";
+ return false;
+ }
+}
+
+/***********************************************************************/
+xbInt16 xbIxMdx::KeyExists( void * vpTag )
+{
+ // this method assumes the key has already been built
+
+ xbMdxTag *mpTag = (xbMdxTag *) vpTag;
+ xbInt16 iRc = FindKey( vpTag, mpTag->cpKeyBuf, mpTag->iKeyLen, 0 );
+
+ if( iRc == 0 )
+ return 1;
+ else
+ return 0;
+
+}
+
+/***********************************************************************/
+//! @brief Set position for key add.
+/*!
+ This routine is called by the AddKey() method and is used to position
+ the node chain to the position the new key should be added to the index.
+
+ \param npTag Pointer to npTag.
+ \param ulAddRecNo Record number to add.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbIxMdx::KeySetPosAdd( xbMdxTag *mpTag, xbUInt32 ulAddRecNo ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ try{
+
+ iRc = FindKey( mpTag, mpTag->cpKeyBuf, mpTag->iKeyLen, 0 );
+ if( iRc == XB_NOT_FOUND || iRc == XB_EMPTY )
+ return XB_NO_ERROR; // good position
+ else if( iRc != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ // get here if key was found, get the right most instance of any non unique key for append, find correct spot for update
+ if( GetUnique( mpTag ) == 0 ){
+
+ xbUInt32 ulCurRecNo;
+ if(( iRc = GetDbfPtr( mpTag, mpTag->npCurNode->iCurKeyNo, mpTag->npCurNode, ulCurRecNo )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ xbBool bKeysMatch = xbTrue;
+
+ while( bKeysMatch && ulAddRecNo > ulCurRecNo && iRc == XB_NO_ERROR ){
+ if(( iRc = GetNextKey( mpTag, 0 )) == XB_NO_ERROR ){
+ if( memcmp( GetKeyData( mpTag->npCurNode, mpTag->npCurNode->iCurKeyNo, mpTag->iKeyItemLen ), mpTag->cpKeyBuf, (size_t) mpTag->iKeyLen ))
+ bKeysMatch = xbFalse;
+ else{
+ if(( iRc = GetDbfPtr( mpTag, mpTag->npCurNode->iCurKeyNo, mpTag->npCurNode, ulCurRecNo )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ }
+ }
+ }
+ }
+ if( iRc == XB_EOF ){ // eof condition
+ if(( iRc = GetLastKey( 0, mpTag, 0 )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ mpTag->npCurNode->iCurKeyNo++;
+ return XB_NO_ERROR;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::KeySetPosAdd() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+//! @brief Set position for key delete.
+/*!
+ This routine is called by the DeleteKey() method and is used to position
+ the node chain to the position the old key should be deleted from the index.
+
+ \param npTag Pointer to npTag.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbIxMdx::KeySetPosDel( xbMdxTag *npTag ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbString sMsg;
+
+ try{
+
+ iRc = FindKey( npTag, npTag->cpKeyBuf2, npTag->iKeyLen, 0 );
+ if( iRc == XB_NOT_FOUND || iRc == XB_EMPTY )
+ return XB_NO_ERROR; // good pos ition
+ else if( iRc != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+
+ xbUInt32 ulIxRecNo;
+ if(( iRc = GetDbfPtr( npTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulIxRecNo )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+
+ if( ulIxRecNo == dbf->GetCurRecNo())
+ return XB_NO_ERROR;
+
+ if( GetUnique( npTag ) == 1 ){
+ iErrorStop = 120;
+ iRc = XB_NOT_FOUND;
+ throw iRc;
+ }
+
+ xbBool bFound = xbFalse;
+ xbBool bKeysMatch = xbTrue;
+ while( bKeysMatch && !bFound && iRc == XB_NO_ERROR ){
+
+ if(( iRc = GetNextKey( npTag, 0 )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ if( memcmp( GetKeyData( npTag->npCurNode, npTag->npCurNode->iCurKeyNo, npTag->iKeyItemLen ), npTag->cpKeyBuf2, (size_t) npTag->iKeyLen )){
+ bKeysMatch = xbFalse;
+ } else {
+ if(( iRc = GetDbfPtr( npTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulIxRecNo )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+ if( ulIxRecNo == dbf->GetCurRecNo())
+ bFound = xbTrue;
+ }
+ }
+
+ if( bFound )
+ return XB_NO_ERROR;
+ else
+ return XB_NOT_FOUND;
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::KeySetPosDel() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+//! @brief Returns key update status.
+/*!
+ \param vpTag Tag to check status on.
+ \returns xbtrue - Key was updated.<br>xbFalse - Key not updated.
+*/
+/*
+inline xbBool xbIxMdx::KeyFiltered( void *vpTag ) const{
+
+ xbMdxTag *mpTag = (xbMdxTag *) vpTag;
+ return mpTag->bKeyFiltered;
+}
+*/
+/***********************************************************************/
+xbInt16 xbIxMdx::LoadTagDetail( xbInt16 iOption, xbMdxTag *tte ){
+
+ // option 1 - Load the entire tag detail
+ // option 2 - Load the dynamic variables only
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ size_t iReadSize;
+ char *buf = NULL;
+ char *p;
+
+ try{
+ // set the read length based on the option
+ if( iOption == 1 )
+ iReadSize = 1024;
+
+ else if( iOption == 2 )
+ // iReadSize = 4;
+ iReadSize = 260;
+ else{
+ iRc = XB_INVALID_OPTION;
+ iErrorStop = 100;
+ throw iRc;
+ }
+ if(( buf = (char *) calloc( 1, (size_t) iReadSize )) == NULL ){
+ iErrorStop = 110;
+ iRc = XB_NO_MEMORY;
+ throw iRc;
+ }
+ if(( iRc = ReadBlock( tte->ulTagHdrPageNo,(xbUInt32) (GetBlockSize() / (xbUInt16) iBlockFactor),
+ iReadSize, buf )) != XB_NO_ERROR ){
+ free( buf );
+ iErrorStop = 30;
+ throw iRc;
+ }
+
+ p = buf;
+ tte->ulRootPage = eGetUInt32( p );
+
+ if( iOption == 1 ){
+ p+=4;
+ tte->ulTagSize = eGetUInt32( p );
+ p+=4;
+ tte->cKeyFmt2 = *p;
+ p++;
+ tte->cKeyType2 = *p;
+ p+=3;
+ tte->iKeyLen = eGetInt16( p );
+ p+=2;
+ tte->iKeysPerBlock = *p;
+ p+=2;
+ tte->iSecKeyType = eGetInt16( p );
+ p+=2;
+ tte->iKeyItemLen = eGetInt16( p );
+ p+=2;
+ tte->cSerialNo = *p;
+ p+=3;
+ tte->cUnique = *p;
+ p++;
+
+ // next line assumes expression is a null terminated string in the block
+ tte->sKeyExp = new xbString();
+ tte->sKeyExp->Sprintf( "%s", p );
+
+ p+=221;
+ tte->cHasFilter = *p;
+ p+=1;
+ tte->cHasKeys = *p;
+ p+=2;
+ tte->ulLeftChild = eGetUInt32( p );
+ p+=4;
+ tte->ulRightChild = eGetUInt32( p );
+ p+=5;
+ tte->cTagYY = *p;
+ p++;
+ tte->cTagMM = *p;
+ p++;
+ tte->cTagDD = *p;
+ // p+=223;
+
+ p+=221;
+ tte->cKeyFmt3 = *p;
+
+ if( tte->cHasFilter ){
+ p+=282;
+ tte->sFiltExp = new xbString();
+ tte->sFiltExp->Sprintf( "%s", p );
+ tte->filter = new xbExp( xbase, dbf );
+ if(( iRc = tte->filter->ParseExpression( tte->sFiltExp->Str())) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ }
+ tte->npNodeChain = NULL;
+ tte->npCurNode = NULL;
+ tte->cpKeyBuf = (char *) malloc( (size_t) tte->iKeyLen + 1 );
+ tte->cpKeyBuf2 = (char *) malloc( (size_t) tte->iKeyLen + 1 );
+ tte->exp = new xbExp( xbase, dbf );
+ if(( iRc = tte->exp->ParseExpression( tte->sKeyExp->Str() )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ } else if( iOption == 2 ){
+ // refresh the dynamic tag variables
+ p+=4;
+ tte->ulTagSize = eGetUInt32( p );
+ p+= 16;
+ tte->cSerialNo = *p;
+ p+= 226;
+ tte->cHasKeys = *p;
+ p+=2;
+ tte->ulLeftChild = eGetUInt32( p );
+ p+=4;
+ tte->ulRightChild = eGetUInt32( p );
+ p+=5;
+ tte->cTagYY = *p;
+ p++;
+ tte->cTagMM = *p;
+ p++;
+ tte->cTagDD = *p;
+ }
+ if( buf )
+ free( buf );
+
+ }
+ catch (xbInt16 iRc ){
+ if( buf )
+ free( buf );
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::LoadTagDetail() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+xbInt16 xbIxMdx::LoadTagTable()
+{
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ char * buf = NULL;
+
+ //std::cout << "xbIxMdx::LoadTagTable() tag use cnt = " << iTagUseCnt << "\n";
+
+ try{
+
+ if( iTagUseCnt > 46 ){
+ iErrorStop = 100;
+ iRc = XB_INVALID_INDEX;
+ throw iRc;
+ }
+
+ xbInt16 iBufSize = (xbInt16) iTagLen * iTagUseCnt;
+
+ if(( buf = (char *) malloc( (size_t) iBufSize )) == NULL ){
+ iErrorStop = 110;
+ iRc = XB_NO_MEMORY;
+ throw iRc;
+ }
+
+ if(( iRc = xbFseek( 544, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+
+ if(( iRc = xbFread( buf, (size_t) iBufSize, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+
+ xbInt16 iPos;
+ char *p;
+ xbMdxTag *tte;
+ xbMdxTag *ttel = NULL;
+
+ for( xbInt16 i = 0; i < iTagUseCnt; i++ ){
+ iPos = i * iTagLen;
+ p = buf + iPos;
+
+ if(( tte = (xbMdxTag *) calloc( 1, (size_t) sizeof( xbMdxTag ))) == NULL ){
+ iErrorStop = 140;
+ iRc = XB_NO_MEMORY;
+ throw iRc;
+ }
+
+ // set the current tag to the first tag in the table
+ if( !vpCurTag )
+ xbIx::SetCurTag( (void *) tte );
+
+ if( mdxTagTbl )
+ ttel->next = tte;
+ else
+ mdxTagTbl = tte;
+
+ ttel = tte;
+ tte->next = NULL;
+ tte->ulTagHdrPageNo = eGetUInt32( p );
+
+ p += 4;
+ for( xbUInt32 i = 0; i < 11; i ++ )
+ tte->cTagName[i] = *p++;
+
+ tte->cTagName[11] = 0x00;
+ tte->cKeyFmt = *p++;
+ tte->cLeftChild = *p++;
+ tte->cRightChild = *p++;
+ tte->cParent = *p++;
+ tte->c2 = *p++;
+ tte->cKeyType = *p;
+ tte->sTagName = new xbString();
+ tte->sTagName->Set( tte->cTagName );
+ tte->sTagName->Trim();
+
+ if(( iRc = LoadTagDetail( 1, tte )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+ }
+ if( buf )
+ free( buf );
+ }
+ catch (xbInt16 iRc ){
+ if( buf )
+ free( buf );
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::LoadTagTable() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ if( iErrorStop == 100 ){
+ sMsg.Sprintf( "xbIxMdx::LoadTagTable() Invalid Tag Count: %d", iTagUseCnt );
+ xbase->WriteLogMessage( sMsg.Str());
+ }
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/**************************************************************************************************************/
+//! @brief Calculate the block number for a given page.
+/*!
+ This routine is called by any function needing to calculate the block number for a given page.
+ Page numbers are stored internally in the physical file, and the library reads and writes in
+ blocks of one or more pages.
+
+ Assumes valid data input
+
+ \param ulPageNo Page Number
+ \returns Calculated block number.
+*/
+
+inline xbUInt32 xbIxMdx::PageToBlock( xbUInt32 ulPageNo ){
+ return ulPageNo / (xbUInt32) iBlockFactor;
+}
+
+
+
+/**************************************************************************************************************/
+#ifdef XB_DEBUG_SUPPORT
+xbInt16 xbIxMdx::PrintKey( void *vpTag, xbIxNode *npNode, xbInt16 iKeyNo, xbInt16 iDepth, char cType, xbInt16 iOutputOpt ){
+
+ xbString sPre;
+ sPre.Sprintf( "%c ", cType );
+ for( xbInt16 i = 0; i < iDepth; i++ )
+ sPre += "|";
+
+ xbString sPost;
+ sPost.Sprintf( "\tThisBlock=[%ld] KeyNo=[%d] Depth=[%d]", npNode->ulBlockNo, iKeyNo, iDepth );
+
+ xbMdxTag * mpTag = (xbMdxTag *) vpTag;
+ char *p = npNode->cpBlockData + (8 + (iKeyNo * mpTag->iKeyItemLen ));
+
+ xbString sKeyPtr;
+ xbUInt32 ulNoOfKeys = 0;
+ if( cType == 'I' ) { // interior
+ sKeyPtr.Sprintf( " ptr=[%ld]", eGetUInt32( p ));
+ ulNoOfKeys = eGetUInt32( mpTag->npCurNode->cpBlockData );
+ }
+ else if( cType == 'L' ) // leaf
+ sKeyPtr.Sprintf( " rec=[%ld]", eGetUInt32( p ));
+ p += 4;
+
+ xbString s;
+ if(( cType == 'I' && iKeyNo < (xbInt16) ulNoOfKeys) || cType == 'L' ){
+ if( mpTag->cKeyType2 == 'C' ){ //CHAR
+ for( xbInt32 l = 0; l < (mpTag->iKeyItemLen-4); l++ )
+ s += *p++;
+
+ } else if( mpTag->cKeyType2 == 'N' ){ // NUMERIC
+ xbBcd bcd( p );
+ xbString s2;
+ bcd.ToString( s2 );
+ s += s2;
+
+ } else if( mpTag->cKeyType2 == 'D' ){ // DATE
+ xbInt32 lDate = (xbInt32) eGetDouble( p );
+ xbDate d( lDate );
+ //xbString s2;
+ //d.JulToDate8( lDate, s2 );
+ s.Sprintf( "%s%s", s.Str(), d.Str());
+ }
+ } else {
+ s = "Rightmost InteriorNode Pointer";
+ }
+
+ xbString sOut( sPre );
+ sOut += s;
+ sOut += sPost;
+ sOut += sKeyPtr;
+
+ xbase->WriteLogMessage( sOut, iOutputOpt );
+ return XB_NO_ERROR;
+}
+#endif
+
+/***********************************************************************/
+//! @brief ReadHeadBlock.
+/*!
+ Read values off head block in MDX file
+ \param iOpt 0 - Read entire block, initialize as needed.<br>
+ 1 - Read in only dynamic section of block<br>
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+
+*/
+
+xbInt16 xbIxMdx::ReadHeadBlock( xbInt16 iOpt )
+{
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+
+ try{
+ if( !FileIsOpen()){
+ iRc = XB_NOT_OPEN;
+ iErrorStop = 100;
+ throw iRc;
+ }
+ char sBuf[48];
+ memset( sBuf, 0x00, 48 );
+
+ if( iOpt == 0 ){
+ if(( iRc = xbFseek( 0, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+
+ if(( iRc = xbFread( sBuf, 47, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ } else {
+
+ if(( iRc = xbFseek( 28, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+
+ if(( iRc = xbFread( sBuf, 19, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+ }
+
+ char *p = sBuf;
+ if( iOpt == 0 ){
+ cVersion = *p++;
+ cCreateYY = *p++;
+ cCreateMM = *p++;
+ cCreateDD = *p++;
+ sFileName.Assign( p, 1, 16 );
+ p+=16;
+ iBlockFactor = eGetInt16( p );
+ p+=2;
+ SetBlockSize( (xbUInt32) eGetInt16( p ));
+ p+=2;
+ cProdIxFlag = *p++;
+ cTagEntryCnt = *p++;
+ iTagLen = *p;
+ p+=2;
+
+ iTagUseCnt = eGetInt16( p );
+ //lTagUseCnt = eGetInt32( p );
+ //p+=4;
+ p+=2;
+ cNextTag = *p++;
+ c1B = *p++;
+
+ ulPageCnt = eGetUInt32( p );
+ p+=4;
+ ulFirstFreePage = eGetUInt32( p );
+ p+=4;
+ ulNoOfBlockAvail = eGetUInt32( p );
+ p+=4;
+ cUpdateYY = *p++;
+ cUpdateMM = *p++;
+ cUpdateDD = *p;
+
+ if( cNodeBuf )
+ free( cNodeBuf );
+
+ if(( cNodeBuf = (char *) malloc( (size_t) GetBlockSize())) == NULL ){
+ iErrorStop = 150;
+ throw XB_NO_MEMORY;
+ }
+
+ if(( iRc = xbIxMdx::LoadTagTable()) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+
+ } else {
+ iTagUseCnt = eGetInt16( p );
+ p+=4;
+ ulPageCnt = eGetUInt32( p );
+ p+=4;
+ ulFirstFreePage = eGetUInt32( p );
+ p+=4;
+ ulNoOfBlockAvail = eGetUInt32( p );
+ p+=4;
+ cUpdateYY = *p++;
+ cUpdateMM = *p++;
+ cUpdateDD = *p;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::ReadHeadBlock() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ if( cNodeBuf )
+ free( cNodeBuf );
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+//! @brief Reindex
+/*!
+ Reindex specifed tag or all tags
+ \param **vpTag &tag - Tag to reindex.<br>
+ NULL - Reindex all tags<br>
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+
+ If this method fails, the index is left in an undefined state
+
+*/
+
+xbInt16 xbIxMdx::Reindex( void **vpTag ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbMdxTag * mpTag;
+ #ifdef XB_LOCKING_SUPPORT
+ xbBool bLocked = xbFalse;
+ #endif
+
+ if( vpTag )
+ mpTag = (xbMdxTag *) *vpTag;
+ else
+ mpTag = NULL;
+
+ struct tagInfo{
+ xbBool bUnique;
+ xbBool bDesc;
+ char sTagName[11];
+ xbString *sKeyExp;
+ xbString *sFiltExp;
+ tagInfo *next;
+ };
+ tagInfo *ti = NULL;
+
+ try{
+
+ #ifdef XB_LOCKING_SUPPORT
+ if( dbf->GetAutoLock() && !dbf->GetTableLocked() ){
+ if(( iRc = dbf->LockTable( XB_LOCK )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ bLocked = xbTrue;
+ }
+ #endif
+
+ if( mpTag == NULL ){
+ // do all tags
+ xbMdxTag *tt = mdxTagTbl;
+ tagInfo *pHead = NULL;
+ tagInfo *pEnd = NULL;
+
+ if( tt ){
+ while( tt ){
+ ti = (tagInfo *) calloc( 1, sizeof( tagInfo ));
+ ti->bUnique = tt->cUnique ? 1 : 0;
+ ti->bDesc = (((tt->cKeyFmt2 & 0x08) > 0) ? 1 : 0);
+ memcpy( ti->sTagName, tt->cTagName, 11 );
+ ti->sKeyExp = new xbString( tt->sKeyExp->Str());
+ if( tt->cHasFilter )
+ ti->sFiltExp = new xbString( tt->sFiltExp->Str());
+ else
+ ti->sFiltExp = new xbString( "" );
+ if( !pHead )
+ pHead = ti;
+ else
+ pEnd->next = ti;
+ pEnd = ti;
+ tt = tt->next;
+ }
+ }
+
+ // get the file name and save it
+ xbString sMdxFileName = GetFqFileName();
+
+ // close the mdx file
+ if(( iRc = xbIxMdx::Close()) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+
+ // delete the file
+ xbRemove();
+
+ // init variables
+ Init();
+
+ tagInfo *p = pHead;
+ tagInfo *pDel;
+
+ // create new file & add the tags
+ while( p ){
+
+ if(( iRc = CreateTag( p->sTagName, p->sKeyExp->Str(), p->sFiltExp->Str(), p->bDesc, p->bUnique, xbTrue, vpTag )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ delete p->sKeyExp;
+ delete p->sFiltExp;
+ pDel = p;
+ p = p->next;
+ free( pDel );
+ }
+ } else {
+ if(( iRc = HarvestTagNodes( mpTag )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ }
+
+ xbUInt32 ulRecCnt = 0;
+ if(( iRc = dbf->GetRecordCnt( ulRecCnt )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+ xbInt16 iCurTag = 0;
+ xbBool bDone = xbFalse;
+
+ for( xbUInt32 ulRec = 1; ulRec <= ulRecCnt; ulRec++ ){
+ if(( iRc = dbf->GetRecord( ulRec )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+
+ bDone = xbFalse;
+ iCurTag = 0;
+ if( !vpTag )
+ mpTag = (xbMdxTag *) GetTag( iCurTag++ );
+
+ while( !bDone ){
+ // do the tag things
+ // CreateKey
+ if(( iRc = CreateKey( mpTag, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+ if( mpTag->iKeySts == XB_ADD_KEY ){
+ if( mpTag->cUnique ){
+ if(( iRc = CheckForDupKey( mpTag )) != XB_NO_ERROR ){
+ iErrorStop = 170;
+ throw iRc;
+ }
+ }
+ if(( iRc = AddKey( mpTag, ulRec )) != XB_NO_ERROR ){
+ iErrorStop = 180;
+ throw iRc;
+ }
+ }
+ if( vpTag || iCurTag >= GetTagCount())
+ bDone = xbTrue;
+ else
+ mpTag = (xbMdxTag *) GetTag( iCurTag++ );
+ }
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::ReIndex() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ this->DeleteTag( mpTag );
+ }
+
+ #ifdef XB_LOCKING_SUPPORT
+ if( bLocked ){
+ dbf->LockTable( XB_UNLOCK );
+ }
+ #endif
+ return iRc;
+}
+
+/***********************************************************************/
+xbInt16 xbIxMdx::SetCurTag( xbString &sTagName ) {
+
+ xbMdxTag *tt = (xbMdxTag *) GetTag( sTagName );
+ if( tt ){
+ xbIx::SetCurTag((void *) tt );
+ return XB_NO_ERROR;
+ } else
+ return XB_INVALID_TAG;
+}
+
+/***********************************************************************/
+xbInt16 xbIxMdx::SetCurTag( xbInt16 iTagNo ) {
+
+ xbMdxTag *tt = (xbMdxTag *) GetTag( iTagNo );
+ if( tt ){
+ xbIx::SetCurTag((void *) tt );
+ return XB_NO_ERROR;
+ } else
+ return XB_INVALID_TAG;
+}
+
+/***********************************************************************/
+//! @brief SetReuseEmptyNode switch setting.
+/*!
+ \param bEmptyNodeSw xbFalse - Do not reuse empty MDX index nodes (Dbase 6. behavior).
+ xbTrue - Reuse empty MDX index nodes.
+*/
+
+void xbIxMdx::SetReuseEmptyNodesSw( xbBool bEmptyNodesSw ) {
+ bReuseEmptyNodes = bEmptyNodesSw;
+}
+
+/***********************************************************************/
+//! @brief Split an interior node
+/*!
+
+ This routine splits an interior node into two nodes, divided by dSplitFactor.<br>
+ This behaves differently than V7 Dbase. V7 does not balance the nodes.<br>
+ For V7, if adding a key to the end of a node, it will create a right node
+ with only one key, and the left node is still full.<br><br>
+
+ Possible performance improvement options.<br>
+ Two modes when splitting:<br>
+ a) Split nodes in the middle - good for random access applications<br>
+ b) Split off right node with only one key - good for applications with
+ expectation of ascending keys added moving forward.<br>
+
+ This routine first inserts the key into the left node in the appropriate location
+ then splits the node based on the split factor setting.
+
+ \param vpTag Tag in play.
+ \param npLeft Left node to split.
+ \param npRight Right node to split.
+ \param iSlotNo Slot number for split.
+ \param ulPtr Pointer number to insert.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbIxMdx::SplitNodeI( void *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 ulPtr ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbMdxTag * npTag = (xbMdxTag *) vpTag;
+ xbDouble dSplitFactor = .5; // split the nodes 50/50
+ xbInt16 iLen;
+ char *pSrc;
+ char *pTrg;
+
+ try{
+ xbInt32 lKeyCnt = GetKeyCount( npLeft );
+ xbInt32 lNewLeftKeyCnt = (xbInt32) ((lKeyCnt + 1) * dSplitFactor);
+ xbInt32 lNewRightKeyCnt = lKeyCnt - lNewLeftKeyCnt;
+ if(( iRc = InsertNodeI( vpTag, npLeft, iSlotNo, ulPtr )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+
+ // move the right half of the left node to the right node
+ pSrc = npLeft->cpBlockData;
+ pSrc += 8 + ((lNewLeftKeyCnt+1) * npTag->iKeyItemLen);
+ pTrg = npRight->cpBlockData;
+ pTrg += 8;
+ iLen = (lNewRightKeyCnt * npTag->iKeyItemLen) + 4;
+ memmove( pTrg, pSrc, (size_t) iLen );
+
+ // eliminate chattle on the right
+ iLen = 12 + (lNewLeftKeyCnt * npTag->iKeyItemLen);
+ pSrc = npLeft->cpBlockData;
+ pSrc += iLen;
+ memset( pSrc, 0x00, npLeft->ulBufSize - (xbUInt32) iLen );
+
+ // write the new key counts into the nodes
+ pTrg = npLeft->cpBlockData;
+ ePutInt32( pTrg, lNewLeftKeyCnt );
+ pTrg = npRight->cpBlockData;
+ ePutInt32( pTrg, lNewRightKeyCnt );
+
+ // write out the block
+ if(( iRc = WriteBlock( npLeft->ulBlockNo, GetBlockSize(), npLeft->cpBlockData )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ // write out the block
+ if(( iRc = WriteBlock( npRight->ulBlockNo, GetBlockSize(), npRight->cpBlockData )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::SplitNodeI() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+//! @brief Split a leaf node.
+/*!
+ This routine splits an index leaf into two nodes, divided by dSplitFactor.<br>
+
+ Possible performance improvement options.<br>
+ Two modes when splitting:<br>
+ a) Split nodes in the middle - good for random access applications<br>
+ b) Split off right node with only one key - good for applications with
+ expectation of ascending keys added moving forward.<br>
+
+ This routine first inserts the key into the left node in the appropriate location
+ then splits the node based on the split factor setting.
+
+ \param vpTag Tag in play.
+ \param npLeft Left node to split.
+ \param npRight Right node to split.
+ \param iSlotNo Slot number for split.
+ \param ulPtr Pointer number to insert.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbIxMdx::SplitNodeL( void *vpTag, xbIxNode * npLeft, xbIxNode *npRight,
+ xbInt16 iSlotNo, char * cpKeyBuf, xbUInt32 ulPtr ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbDouble dSplitFactor = .5; // can adjust performance with this number
+ xbMdxTag *mpTag = (xbMdxTag *) vpTag;
+ xbString sMsg;
+
+ xbInt16 iLen;
+ char *pSrc;
+ char *pTrg;
+
+ // std::cout << "In xbIxMdx::SplitNodeL()\n";
+ try{
+ xbInt32 lKeyCnt = GetKeyCount( npLeft );
+ xbInt32 lNewLeftKeyCnt = (xbInt32) ((lKeyCnt + 1) * dSplitFactor) + 1;
+ xbInt32 lNewRightKeyCnt = lKeyCnt + 1 - lNewLeftKeyCnt;
+
+ if(( iRc = InsertNodeL( vpTag, npLeft, iSlotNo, cpKeyBuf, ulPtr )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+
+ // move right half off of left node to the right node
+ pSrc = npLeft->cpBlockData;
+ pSrc += 8 + (lNewLeftKeyCnt * mpTag->iKeyItemLen);
+ pTrg = npRight->cpBlockData;
+ pTrg += 8;
+ iLen = lNewRightKeyCnt * mpTag->iKeyItemLen;
+ memmove( pTrg, pSrc, (size_t) iLen );
+
+ // write the new key counts into the nodes
+ pTrg = npLeft->cpBlockData;
+ ePutInt32( pTrg, lNewLeftKeyCnt );
+ pTrg = npRight->cpBlockData;
+ ePutInt32( pTrg, lNewRightKeyCnt );
+
+ // zero out the next key number so this node is not confused with interior node
+ iLen = 8 + (lNewLeftKeyCnt * mpTag->iKeyItemLen);
+ pSrc = npLeft->cpBlockData;
+ pSrc += iLen;
+ memset( pSrc, 0x00, npLeft->ulBufSize - (xbUInt32) iLen );
+
+ // write out the left block
+ if(( iRc = WriteBlock( npLeft->ulBlockNo, GetBlockSize(), npLeft->cpBlockData )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ // write out the right block
+ if(( iRc = WriteBlock( npRight->ulBlockNo, GetBlockSize(), npRight->cpBlockData )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::SplitNodeL() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+/**************************************************************************************************************/
+//! @brief TagSerialNo.
+/*!
+ This routine is used internally for reading or updating the serial number on a given tag when the tag.
+
+ \param iOption 1 - Read tag serial number off disk, save in structure<br>
+ 2 - Write serial number from memory to disk<br>
+ 3 - Read serial number off disk, increment, write updated number to disk<br>
+ mpTag - Pointer to tag for serial number update
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbIxMdx::TagSerialNo( xbInt16 iOption, xbMdxTag * mpTag ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+
+ try{
+ xbInt64 lPos = (mpTag->ulTagHdrPageNo * 512) + 20;
+
+ if( iOption != 2 ){
+ if(( iRc = xbFseek( lPos, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ if(( iRc = xbFgetc( mpTag->cSerialNo )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ }
+
+ if( iOption == 3 )
+ mpTag->cSerialNo++;
+
+ if( iOption != 1 ){
+ if(( iRc = xbFseek( lPos, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ if(( iRc = xbFwrite( &mpTag->cSerialNo, 1, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::UpdateSerialNo() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+//! @brief UpdateTagKey
+/*!
+ This routine updates a key or a given tag.
+ The file header is considered to be the first 2048 bytes in the file.
+
+ \param cAction A - Add a key.<br>
+ D - Delete a key.<br>
+ R - Revise a key.<br>
+ \param vpTg - Pointer to tag.<br>
+ \param ulRecNo - Record number association with the action.<br>
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbIxMdx::UpdateTagKey( char cAction, void *vpTag, xbUInt32 ulRecNo ){
+
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbMdxTag *npTag = (xbMdxTag *) vpTag;
+
+ try{
+ // save off any needed fields for updating
+ xbUInt32 ulTagSizeSave = npTag->ulTagSize;
+
+ if( cAction == 'D' || cAction == 'R' ){
+ // std::cout << "UpdateTagKey-delete going to DeleteKey \n";
+ if(( iRc = DeleteKey( vpTag )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ }
+
+ if( cAction == 'A' || cAction == 'R' ){
+ if(( iRc = AddKey( vpTag, ulRecNo )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ }
+ if( ulTagSizeSave != npTag->ulTagSize ){
+ if(( iRc = UpdateTagSize( npTag, npTag->ulTagSize )) != XB_NO_ERROR) {
+ iErrorStop = 120;
+ throw iRc;
+ }
+ }
+ // update the serial number
+ if(( iRc = TagSerialNo( 3, npTag )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::UpdateTagKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/**************************************************************************************************************/
+//! @brief Write head block.
+/*!
+ This routine updates the MDX file header and commits changes to disk.
+ The file header is considered to be the first 2048 bytes in the file.
+
+ \param iOption 0 - Entire 2048 byte header, used for creating a new mdx file.<br>
+ 1 - Bytes 28 through 46, used when adding or deleting a tag.<br>
+ 2 - Bytes 32 through 46, used after updating keys in the file.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+
+xbInt16 xbIxMdx::WriteHeadBlock( xbInt16 iOption ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+
+ try{
+ xbDate d;
+ d.Sysdate(); // set to system date, today
+ cUpdateYY = (char) d.YearOf() - 1900;
+ cUpdateMM = (char) d.MonthOf();
+ cUpdateDD = (char) d.DayOf( XB_FMT_MONTH );
+
+ if( iOption > 0 ){
+ char buf[48];
+ memset( buf, 0x00, 48 );
+ xbUInt32 ulStartPos = 0;
+ xbUInt32 ulLen = 0;
+
+ if( iOption == 1 ){
+ ePutInt16( &buf[28], iTagUseCnt );
+ buf[30] = cNextTag;
+ buf[31] = 0x1b;
+ ulStartPos = 28;
+ ulLen = 19;
+ } else {
+ ulStartPos = 32;
+ ulLen = 16;
+ }
+
+ ePutUInt32( &buf[32], ulPageCnt );
+ ePutUInt32( &buf[36], ulFirstFreePage );
+ ePutUInt32( &buf[40], ulNoOfBlockAvail );
+ buf[44] = cUpdateYY;
+ buf[45] = cUpdateMM;
+ buf[46] = cUpdateDD;
+
+ if(( iRc = xbFseek( ulStartPos, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+
+ if(( iRc = xbFwrite( &buf[ulStartPos], ulLen, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+
+ } else if( iOption == 0 ){
+ char buf[2048];
+ memset( buf, 0x00, 2048 );
+
+ buf[0] = cVersion;
+ cCreateYY = cUpdateYY;
+ cCreateMM = cUpdateMM;
+ cCreateDD = cUpdateDD;
+ buf[1] = cCreateYY;
+ buf[2] = cCreateMM;
+ buf[3] = cCreateDD;
+
+
+ for( xbUInt32 l = 0; l < sFileName.Len() && l < 10; l++ ){
+ buf[l+4] = sFileName[l+1];
+ }
+
+ ePutInt16( &buf[20], iBlockFactor );
+ ePutInt16( &buf[22], (xbInt16) GetBlockSize() );
+
+ buf[24] = cProdIxFlag;
+ buf[25] = cTagEntryCnt;
+ ePutInt16 ( &buf[26], iTagLen );
+ ePutInt16 ( &buf[28], iTagUseCnt );
+ buf[30] = cNextTag;
+ buf[31] = c1B;
+ ePutUInt32( &buf[32], ulPageCnt );
+ ePutUInt32( &buf[36], ulFirstFreePage );
+ ePutUInt32( &buf[40], ulNoOfBlockAvail );
+ buf[44] = cUpdateYY;
+ buf[45] = cUpdateMM;
+ buf[46] = cUpdateDD;
+
+ // not sure what the following "1" is for in a sea of zeroes....
+ // maybe it's current tag or default tag or something along those lines?
+ buf[529] = 0x01;
+
+ xbRewind();
+ if(( iRc = xbFwrite( buf, 2048, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ } else {
+ iErrorStop = 130;
+ iRc = XB_INVALID_OPTION;
+ throw iRc;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::WriteHeadBlock() Exception Caught. Error Stop = [%d] iRc = [%d] option = [%d]", iErrorStop, iRc, iOption );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+/***********************************************************************/
+xbInt16 xbIxMdx::UpdateTagSize( xbMdxTag *mpTag, xbUInt32 ulTagSz ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ char buf[4];
+ try{
+ ePutUInt32( &buf[0], ulTagSz );
+ if(( iRc = xbFseek( (xbInt64) ((mpTag->ulTagHdrPageNo *512 )+ 4), SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ if(( iRc = xbFwrite( &buf[0], 4, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxMdx::UpdateTagSize() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+
+/***********************************************************************/
+//void xbIxMdx::TestStub( char *s, void *vpTag ){
+void xbIxMdx::TestStub( char *, void * ){
+}
+/***********************************************************************/
+} /* namespace */
+#endif /* XB_MDX_SUPPORT */
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/core/xbixndx.cpp b/1Tdata/xbase/xbase64-4.1.4/src/core/xbixndx.cpp
new file mode 100755
index 0000000..b28dd9d
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/core/xbixndx.cpp
@@ -0,0 +1,2834 @@
+/* xbixndx.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+#include "xbase.h"
+
+#ifdef XB_NDX_SUPPORT
+
+namespace xb{
+
+
+/***********************************************************************/
+//! @brief Class constructor.
+/*!
+ \param dbf Pointer to dbf instance.
+*/
+
+xbIxNdx::xbIxNdx( xbDbf *dbf ) : xbIx( dbf ){
+ ndxTag = (xbNdxTag *) calloc( 1, sizeof( xbNdxTag ));
+ SetBlockSize( XB_NDX_BLOCK_SIZE );
+ cNodeBuf = (char *) malloc( XB_NDX_BLOCK_SIZE );
+}
+/***********************************************************************/
+//! @brief Class Destructor.
+xbIxNdx::~xbIxNdx(){
+ if( ndxTag ){
+ ndxTag->npNodeChain = FreeNodeChain( ndxTag->npNodeChain );
+ if( ndxTag->cpKeyBuf )
+ free( ndxTag->cpKeyBuf );
+ if( ndxTag->cpKeyBuf2 )
+ free( ndxTag->cpKeyBuf2 );
+ if( ndxTag->exp ){
+ delete ndxTag->exp;
+ ndxTag->exp = NULL;
+ }
+ ndxTag->sKeyExpression.Set( NULL );
+ ndxTag->sTagName.Set( NULL );
+ free( ndxTag );
+ ndxTag = NULL;
+ }
+ if( cNodeBuf )
+ free( cNodeBuf );
+}
+/***********************************************************************/
+//! @brief Add key.
+/*!
+ Add key. If this is a unique index, this logic assumes the duplicate
+ check logic was already done.
+
+ \param vpTag Tag to update.
+ \param ulRecNo Record number to add key for.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbIxNdx::AddKey( void * vpTag, xbUInt32 ulRecNo ){
+
+ xbNdxTag * npTag;
+ vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
+ if( GetUniqueKeyOpt() == XB_EMULATE_DBASE && npTag->bFoundSts )
+ return XB_NO_ERROR;
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbInt16 iHeadNodeUpdateOpt = 2;
+
+
+ try{
+
+ if(( iRc = xbIxNdx::KeySetPosAdd( npTag, ulRecNo )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ xbInt32 lKeyCnt = GetKeyCount( npTag->npCurNode );
+ if( lKeyCnt < npTag->iKeysPerBlock ){
+ // Section A - add key to appropriate position if space available
+ if(( iRc = InsertNodeL( npTag, npTag->npCurNode, npTag->npCurNode->iCurKeyNo, npTag->cpKeyBuf, ulRecNo )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+
+ } else {
+ // land here with a full leaf node
+ iHeadNodeUpdateOpt = 1;
+ // section B - split the leaf node
+ xbIxNode * npRightNode = AllocateIxNode( GetBlockSize() + (xbUInt32) npTag->iKeyItemLen, 1 );
+ if( !npRightNode ){
+ iErrorStop = 120;
+ iRc = XB_NO_MEMORY;
+ throw iRc;
+ }
+ if(( iRc = SplitNodeL( npTag, npTag->npCurNode, npRightNode, npTag->npCurNode->iCurKeyNo, npTag->cpKeyBuf, ulRecNo )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ xbUInt32 ulTempBlockNo = npRightNode->ulBlockNo;
+
+ // section C - go up the tree, splitting nodes as necessary
+ xbIxNode * npParent = npTag->npCurNode->npPrev;
+ while( npParent && GetKeyCount( npParent ) >= npTag->iKeysPerBlock ){
+ npRightNode = FreeNodeChain( npRightNode );
+ npRightNode = AllocateIxNode( GetBlockSize() + (xbUInt32) npTag->iKeyItemLen, 1 );
+ if( !npRightNode ){
+ iErrorStop = 140;
+ iRc = XB_NO_MEMORY;
+ throw iRc;
+ }
+ if(( iRc = SplitNodeI( npTag, npParent, npRightNode, npParent->iCurKeyNo, ulTempBlockNo )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+ ulTempBlockNo = npRightNode->ulBlockNo;
+ npTag->npCurNode = npParent;
+ npParent = npParent->npPrev;
+ }
+
+ // section D - if cur node is split root, create new root
+ if( npTag->npCurNode->ulBlockNo == npTag->ulRootBlock ){
+ // xbase->WriteLogMessage( "Section d" );
+ if(( iRc = AddKeyNewRoot( npTag, npTag->npCurNode, npRightNode )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+ npRightNode = FreeNodeChain( npRightNode );
+
+ } else {
+ // else section E, put key in parent
+ if(( iRc = InsertNodeI( vpTag, npParent, npParent->iCurKeyNo, npRightNode->ulBlockNo )) != XB_NO_ERROR ){
+ iErrorStop = 170;
+ throw iRc;
+ }
+ npRightNode = FreeNodeChain( npRightNode );
+ }
+ }
+
+ // update the header
+ if(( iRc = WriteHeadBlock( iHeadNodeUpdateOpt )) != XB_NO_ERROR ){
+ iErrorStop = 180;
+ throw iRc;
+ }
+
+ // ---- free whatever is left of the node chain here, this might not be right, might need to restore it to
+ // the point right after SetKeyPosAdd
+ npTag->npNodeChain = FreeNodeChain( ndxTag->npNodeChain );
+ npTag->npCurNode = NULL;
+
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxNdx::AddKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+//! @brief Add new root node.
+/*!
+ \param npTag Tag to update.
+ \param npLeft Left node.
+ \param npRight Right node.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbIxNdx::AddKeyNewRoot( xbNdxTag *npTag, xbIxNode *npLeft, xbIxNode *npRight ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbString sMsg;
+ char *pLastKey = NULL;
+
+ try{
+ xbIxNode *npRoot = AllocateIxNode( GetBlockSize() + (xbUInt32) npTag->iKeyItemLen, 1 );
+ if( !npRoot ){
+ iErrorStop = 100;
+ iRc = XB_NO_MEMORY;
+ throw iRc;
+ }
+ npTag->ulRootBlock = npRoot->ulBlockNo;
+ pLastKey = (char *) malloc( (size_t) ndxTag->iKeyLen );
+ if(( iRc = GetLastKeyForBlockNo( npTag, npLeft->ulBlockNo, pLastKey )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ char * pTrg = npRoot->cpBlockData;
+
+ // set no of keys to 1
+ ePutUInt32( pTrg, 1 );
+
+ // set the left node number
+ pTrg += 4;
+ ePutUInt32( pTrg, npLeft->ulBlockNo );
+
+ // set the key
+ pTrg+= 8;
+ memcpy( pTrg, pLastKey, (size_t) npTag->iKeyLen );
+
+ // set the right node number
+ pTrg+= (npTag->iKeyItemLen - 8);
+ ePutUInt32( pTrg, npRight->ulBlockNo );
+
+ // write out the block
+ if(( iRc = WriteBlock( npRoot->ulBlockNo, GetBlockSize(), npRoot->cpBlockData )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ if( pLastKey )
+ free( pLastKey );
+ NodeFree( npRoot );
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxNdx::AddKeyNewRoot() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ if( pLastKey )
+ free( pLastKey );
+ }
+ return iRc;
+}
+/***********************************************************************/
+//! @brief Append node to node chain.
+/*!
+ Append a node to the current node chain for a given tag.
+
+ \param vpTag Tag to update.
+ \param npNode Node to add to node chain.
+ \returns void
+*/
+void xbIxNdx::AppendNodeChain( void *vpTag, xbIxNode * npNode ){
+
+ xbNdxTag * npTag;
+ vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
+
+ if( npTag->npNodeChain == NULL ){
+ npTag->npNodeChain = npNode;
+ npTag->npCurNode = npNode;
+ } else {
+ npNode->npPrev = npTag->npCurNode;
+ npTag->npCurNode->npNext = npNode;
+ npTag->npCurNode = npNode;
+ }
+ // time stamp the node chain
+ GetFileMtime( npTag->tNodeChainTs );
+}
+
+/***********************************************************************/
+//! @brief Allocate a node.
+/*!
+ \param ulBufSize Buffer size.
+ \param iOpt 0 - Don't update the node block number on the node.
+ 1 - Set node block number to the next available block number.
+ \returns Pointer to new node.
+*/
+
+xbIxNode * xbIxNdx::AllocateIxNode( xbUInt32 ulBufSize, xbInt16 iOpt ){
+ xbIxNode *n = xbIx::AllocateIxNode( ulBufSize );
+ if( n && iOpt == 1 ) n->ulBlockNo = ndxTag->ulTotalBlocks++;
+ return n;
+}
+/***********************************************************************/
+//! @brief Check for duplicate key.
+/*!
+ \param vpTag Tag to check.
+ \returns XB_KEY_NOT_UNIQUE<br>XB_NO_ERROR
+*/
+xbInt16 xbIxNdx::CheckForDupKey( void *vpTag )
+{
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbNdxTag *npTag = (xbNdxTag *) vpTag;
+ npTag->bFoundSts = xbFalse;
+ try{
+ if( GetUnique()){
+ if( npTag->iKeySts == XB_ADD_KEY || npTag->iKeySts == XB_UPD_KEY )
+ if( KeyExists( vpTag )){
+ if( GetUniqueKeyOpt() == XB_EMULATE_DBASE ){
+ npTag->bFoundSts = xbTrue;
+ return 0;
+ } else {
+ return XB_KEY_NOT_UNIQUE;
+ }
+ }
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxNdx::CheckForDupKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+//! @brief Check tag integrity.
+/*!
+ Check a tag for accuracy.
+
+ \param vpTag Tag to create key for.
+ \param iOpt Output message destination<br>
+ 0 = Syslog<br>
+ 1 = Stdout<br>
+ 2 = Both<br>
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbIxNdx::CheckTagIntegrity( void *vpTag, xbInt16 iOpt ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iRc2;
+ xbInt16 iRc3;
+ xbInt16 iErrorStop = 0;
+ xbUInt32 ulIxCnt = 0;
+ xbUInt32 ulThisRecNo = 0;
+ xbUInt32 ulPrevRecNo = 0;
+ xbBool bDone = false;
+ xbString sMsg;
+ char cKeyType;
+ char *pPrevKeyBuf = NULL;
+
+ #ifdef XB_LOCKING_SUPPORT
+ xbBool bLocked = xbFalse;
+ #endif
+
+ xbNdxTag * npTag;
+ vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
+
+ try{
+ #ifdef XB_LOCKING_SUPPORT
+ if( dbf->GetAutoLock() && !dbf->GetTableLocked() ){
+ if(( iRc = dbf->LockTable( XB_LOCK )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ bLocked = xbTrue;
+ }
+ #endif
+
+ memset( npTag->cpKeyBuf2, 0x00, (size_t) npTag->iKeyLen );
+ cKeyType = GetKeyType( vpTag );
+
+ sMsg.Sprintf( "Checking index type [%c]", cKeyType );
+ xbase->WriteLogMessage( sMsg, iOpt );
+
+ pPrevKeyBuf = (char *) calloc( 1, (size_t) ndxTag->iKeyLen );
+
+ // for each key in the index, make sure it is trending in the right direction
+ iRc = GetFirstKey( vpTag, 0 );
+ while( iRc == XB_NO_ERROR && !bDone ){
+ ulIxCnt++;
+ iRc = GetNextKey( vpTag, 0 );
+ if( iRc == XB_NO_ERROR ){
+ // compare this key to prev key
+ iRc2 = CompareKey( cKeyType, GetKeyData( npTag->npCurNode, npTag->npCurNode->iCurKeyNo, npTag->iKeyItemLen ),
+ pPrevKeyBuf, (size_t) npTag->iKeyLen );
+
+ if( iRc2 < 0 ){
+ sMsg.Sprintf( "Key sequence error at key number [%ld].", ulIxCnt );
+ xbase->WriteLogMessage( sMsg, iOpt );
+ iErrorStop = 110;
+ iRc = XB_INVALID_INDEX;
+ throw iRc;
+ }
+
+ ulThisRecNo = 0;
+ if(( iRc3 = GetDbfPtr( vpTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulThisRecNo )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc3;
+ }
+
+ if( iRc2 == 0 && (ulThisRecNo <= ulPrevRecNo )){
+ sMsg.Sprintf( "Dbf record number sequence error at key number [%ld].", iOpt );
+ xbase->WriteLogMessage( sMsg, iOpt );
+ iErrorStop = 130;
+ iRc = XB_INVALID_INDEX;
+ throw iRc;
+ }
+ // save this key info to prev key
+ memcpy( pPrevKeyBuf, GetKeyData( npTag->npCurNode, npTag->npCurNode->iCurKeyNo, npTag->iKeyItemLen ), (size_t) npTag->iKeyLen );
+ ulPrevRecNo = ulThisRecNo;
+ }
+ }
+
+ // verify the index count matches the tag count
+ xbUInt32 ulDbfCnt = 0;
+ if(( iRc = dbf->GetRecordCnt( ulDbfCnt )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+
+ if( GetUniqueKeyOpt() == XB_EMULATE_DBASE && GetUnique( vpTag )){
+ // Can't compare counts if using XB_EMULATE_DBASE and it's a unique index
+ } else {
+ if( ulDbfCnt != ulIxCnt ){
+ sMsg.Sprintf( "CheckTagIntegrity() Index entry count [%ld] does not match dbf record count [%ld]", ulIxCnt, ulDbfCnt );
+ xbase->WriteLogMessage( sMsg, iOpt );
+ iErrorStop = 150;
+ iRc = XB_INVALID_INDEX;
+ throw iRc;
+ }
+
+ // verify each record in the dbf file has a corresponding index entry
+ xbUInt32 j = 0;
+ while( j < ulDbfCnt ){
+ if(( iRc = dbf->GetRecord( ++j )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+ if(( iRc = FindKeyForCurRec( vpTag )) != XB_NO_ERROR ){
+ ulThisRecNo = j;
+ iErrorStop = 170;
+ throw iRc;
+ }
+ }
+ sMsg.Sprintf( "CheckTagIntegrity() Index entry count [%ld] matches dbf record count [%ld]", ulIxCnt, ulDbfCnt );
+ xbase->WriteLogMessage( sMsg, iOpt );
+ }
+ if( pPrevKeyBuf )
+ free( pPrevKeyBuf );
+
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxNdx::CheckTagIntegrity() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg, iOpt );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ), iOpt );
+ if( pPrevKeyBuf )
+ free( pPrevKeyBuf );
+
+ if( iErrorStop == 170 ){
+ sMsg.Sprintf( "xbIxNdx::CheckTagIntegrity() Missing index entry for record [%d]", ulThisRecNo );
+ xbase->WriteLogMessage( sMsg, iOpt );
+ }
+ }
+
+ #ifdef XB_LOCKING_SUPPORT
+ if( bLocked ){
+ dbf->LockTable( XB_UNLOCK );
+ }
+ #endif
+ return iRc;
+
+}
+/***********************************************************************/
+//! @brief Create key for tag.
+/*!
+ Append a node to the current node chain for a given tag.
+
+ \param vpTag Tag to create key for.
+ \param iOpt 0 = Build a key for FindKey usage, only rec buf 0.<br>
+ 1 = Append Mode, Create key for an append, only use rec buf 0, set updated switch.<br>
+ 2 = Update Mode, Create old version and new version keys, check if different, set update switch appropriately.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbIxNdx::CreateKey( void * vpTag, xbInt16 iOpt ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ try{
+ xbNdxTag * npTag;
+ vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
+
+ if(( iRc = npTag->exp->ProcessExpression( 0 )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ if( npTag->exp->GetReturnType() == XB_EXP_CHAR ){
+ npTag->exp->GetStringResult( npTag->cpKeyBuf, (xbUInt32) npTag->iKeyLen );
+ }
+ else if( npTag->exp->GetReturnType() == XB_EXP_NUMERIC ){
+ xbDouble d;
+ npTag->exp->GetNumericResult( d );
+ memcpy( npTag->cpKeyBuf, &d, 8 );
+ }
+ else if( npTag->exp->GetReturnType() == XB_EXP_DATE ){
+ xbDouble d;
+ npTag->exp->GetNumericResult( d );
+ memcpy( npTag->cpKeyBuf, &d, 8 );
+ }
+
+ npTag->iKeySts = 0;
+ if( iOpt == 1 )
+ npTag->iKeySts = XB_ADD_KEY;
+
+ else if( iOpt == 2 ){
+ if(( iRc = npTag->exp->ProcessExpression( 1 )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ if( npTag->exp->GetReturnType() == XB_EXP_CHAR ){
+ npTag->exp->GetStringResult( npTag->cpKeyBuf2, (xbUInt32) npTag->iKeyLen );
+ } else if( npTag->exp->GetReturnType() == XB_EXP_NUMERIC || npTag->exp->GetReturnType() == XB_EXP_DATE ){
+ xbDouble d;
+ npTag->exp->GetNumericResult( d );
+ memcpy( npTag->cpKeyBuf2, &d, 8 );
+ }
+ if( memcmp( npTag->cpKeyBuf, npTag->cpKeyBuf2, (size_t) npTag->iKeyLen ))
+ npTag->iKeySts = XB_UPD_KEY;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxNdx::CreateKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+/***********************************************************************/
+//! @brief Create new tag.
+/*!
+ This routine creates a new tag. Since NDX files have only one tag,
+ this creates a new NDX file.
+
+ \param sName Tag Name, including .NDX suffix
+ \param sKey Key Expression
+ \param sFilter Filter expression. Not supported by NDX indices.
+ \param iDescending Not supported by NDX indices.
+ \param iUnique xbtrue - Unique.<br>xbFalse - Not unique.
+ \param iOverLay xbTrue - Overlay if file already exists.<br>xbFalse - Don't overlay.
+ \param vpTag Output from method Pointer to vptag pointer.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbIxNdx::CreateTag( const xbString &sName, const xbString &sKey,
+ const xbString &, xbInt16, xbInt16 iUnique, xbInt16 iOverLay, void **vpTag ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbNdxTag *npTag = ndxTag;
+ *vpTag = ndxTag;
+
+ try{
+ //xbString sMsg;
+ SetFileName( sName );
+
+ if( FileExists() && !iOverLay )
+ return XB_FILE_EXISTS;
+
+ if( FileIsOpen()){
+ if(( iRc = xbTruncate(0)) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ if(( iRc = xbFclose()) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ npTag->npNodeChain = FreeNodeChain( npTag->npNodeChain );
+ npTag->npCurNode = NULL;
+ npTag->sKeyExpression.Set( "" );
+
+ if( npTag->cpKeyBuf ){
+ free( npTag->cpKeyBuf );
+ npTag->cpKeyBuf = NULL;
+ }
+ if( npTag->cpKeyBuf2 ){
+ free( npTag->cpKeyBuf2 );
+ npTag->cpKeyBuf2 = NULL;
+ }
+ }
+ if(( iRc = xbFopen( "w+b", dbf->GetShareMode())) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+
+ //set up the key expression
+ npTag->exp = new xbExp( dbf->GetXbasePtr());
+ if(( iRc = npTag->exp->ParseExpression( dbf, sKey )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+
+ switch( npTag->exp->GetReturnType()){
+ case XB_EXP_CHAR:
+ npTag->cKeyType = 'C';
+ npTag->iKeyType = 0;
+ npTag->iKeyLen = npTag->exp->GetResultLen();
+ break;
+
+ case XB_EXP_NUMERIC:
+ npTag->cKeyType = 'F';
+ npTag->iKeyType = 1;
+ npTag->iKeyLen = 8;
+ break;
+
+ case XB_EXP_DATE:
+ npTag->cKeyType = 'D';
+ npTag->iKeyType = 1;
+ npTag->iKeyLen = 8;
+ break;
+
+ default:
+ iErrorStop = 140;
+ iRc = XB_INVALID_INDEX;
+ throw iRc;
+ }
+
+ npTag->iUnique = iUnique;
+ npTag->ulRootBlock = 1L;
+ //npTag->ulTotalBlocks = 2l;
+ npTag->ulTotalBlocks = 2L;
+ npTag->sKeyExpression = sKey;
+
+ GetFileNamePart( npTag->sTagName );
+
+ if( npTag->iKeyLen > 100 ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+
+ npTag->iKeyItemLen = npTag->iKeyLen + 8;
+ while(( npTag->iKeyItemLen % 4 )!= 0 ) npTag->iKeyItemLen++;
+
+ npTag->iKeysPerBlock = (xbInt16) (GetBlockSize() - 8 ) / npTag->iKeyItemLen;
+ ndxTag->cpKeyBuf = (char *) malloc( (size_t) ndxTag->iKeyLen );
+ ndxTag->cpKeyBuf2 = (char *) malloc( (size_t) ndxTag->iKeyLen );
+
+ if(( iRc = WriteHeadBlock(0)) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+
+ //write out block binary zeroes
+ char buf[512];
+ memset( buf, 0x00, 512 );
+ if(( iRc = xbFwrite( buf, 1, 512 )) != XB_NO_ERROR ){
+ iErrorStop = 170;
+ throw iRc;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxNdx::CreateTag() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+//! @brief Delete a key.
+/*!
+ This routine deletes a key from a supplied node.
+ \param vpTag Tag to delete key on.
+ \param npNode Node to delete key on.
+ \param iSlotNo Slot number of key to delete.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbIxNdx::DeleteFromNode( void *vpTag, xbIxNode * npNode, xbInt16 iSlotNo )
+{
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbNdxTag * npTag;
+ vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
+
+ try{
+
+ xbInt32 lKeyCnt = GetKeyCount( npNode );
+ xbInt16 iLen = (lKeyCnt - iSlotNo - 1) * npTag->iKeyItemLen;
+ if( !IsLeaf( vpTag, npNode ))
+ iLen += 4;
+
+ if( iLen > 0 ){
+ char *pTrg = npNode->cpBlockData;
+ pTrg += (4 + (npTag->iKeyItemLen * (iSlotNo)) ); //lTrgPos;
+ char *pSrc = pTrg;
+ pSrc += npTag->iKeyItemLen;
+ memmove( pTrg, pSrc, (size_t) iLen );
+ }
+
+ // set the new number of keys
+ ePutUInt32( npNode->cpBlockData, (xbUInt32) lKeyCnt - 1 );
+
+ // write out the block
+ if(( iRc = WriteBlock( npNode->ulBlockNo, GetBlockSize(), npNode->cpBlockData )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxNdx::DeleteFromNode() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return XB_NO_ERROR;
+}
+
+/***********************************************************************/
+//! @brief Delete a key.
+/*!
+ This routine deletes a key. It assumes the key to delete
+ is the current key in the node chain.
+
+ \param vpTag Tag to delete key on.
+
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbIxNdx::DeleteKey( void *vpTag ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbNdxTag * npTag;
+ vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
+
+ // save copy of node chain to reset to after delete completed
+ xbIxNode *npSaveNodeChain = npTag->npNodeChain;
+ npTag->npNodeChain = NULL;
+ xbIxNode * npSaveCurNode = npTag->npCurNode;
+
+ try{
+
+ xbString sMsg;
+
+ if(( iRc = xbIxNdx::KeySetPosDel( npTag )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ // Delete key needs to handle two scenarios
+ // 1 - if the delete is on the only key of a leaf node, then traverse up the tree, trimming as needed
+ // 2 - if the last key on a node is deleted, and the key value is not the same as the prev key value
+ // go up the tree looking for an interior node needing updated key value
+
+ xbInt32 lOrigKeyCnt = GetKeyCount( npTag->npCurNode );
+ if(( iRc = DeleteFromNode( npTag, npTag->npCurNode, npTag->npCurNode->iCurKeyNo )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+
+ if( lOrigKeyCnt == 1 ){
+ // scenario 1
+ xbBool bDone = xbFalse;
+ xbBool bIsLeaf = xbFalse;
+ xbInt32 lKeyCnt;
+ npTag->npCurNode = npTag->npCurNode->npPrev;
+
+ while( npTag->npCurNode && !bDone ){
+ lKeyCnt = GetKeyCount( npTag->npCurNode );
+ bIsLeaf = IsLeaf( npTag, npTag->npCurNode );
+ if( lKeyCnt > 0 ){
+ if(( iRc = DeleteFromNode( npTag, npTag->npCurNode, npTag->npCurNode->iCurKeyNo )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ }
+ if( (bIsLeaf && lKeyCnt > 1) || (!bIsLeaf && lKeyCnt > 0) )
+ bDone = xbTrue;
+ else
+ npTag->npCurNode = npTag->npCurNode->npPrev;
+ }
+ } else if( npTag->npCurNode->iCurKeyNo == (xbUInt32) lOrigKeyCnt - 1 ){
+
+ // scenario 2
+ // if last two keys identical, then nothing to do, else go up looking for a key to change
+ if( memcmp( GetKeyData( npTag->npCurNode, npTag->npCurNode->iCurKeyNo, npTag->iKeyItemLen ),
+ GetKeyData( npTag->npCurNode, npTag->npCurNode->iCurKeyNo-1, npTag->iKeyItemLen ),
+ (size_t) npTag->iKeyLen )){
+
+ xbIxNode *pNode = npTag->npCurNode->npPrev;
+ char *pSrc = GetKeyData( npTag->npCurNode, npTag->npCurNode->iCurKeyNo-1, npTag->iKeyItemLen );
+
+ while( pNode && pNode->ulBlockNo != npTag->ulRootBlock && pNode->iCurKeyNo == (xbUInt32) GetKeyCount( pNode ) )
+ pNode = pNode->npPrev;
+ if( pNode ){
+ if( pNode->iCurKeyNo < (xbUInt32) GetKeyCount( pNode )){
+ char *pTrg = pNode->cpBlockData;
+ pTrg += 12 + (pNode->iCurKeyNo * (xbUInt32) npTag->iKeyItemLen);
+ for( xbInt16 i = 0; i < npTag->iKeyLen; i++ )
+ *pTrg++ = *pSrc++;
+
+ // write out the block
+ if(( iRc = WriteBlock( pNode->ulBlockNo, GetBlockSize(), pNode->cpBlockData )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ }
+ }
+ }
+ }
+
+ // restore node chain to pre delete status (which should be post add status)
+ npTag->npNodeChain = FreeNodeChain( npTag->npNodeChain );
+ npTag->npNodeChain = npSaveNodeChain;
+ npTag->npCurNode = npSaveCurNode;
+
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxNdx::DeleteKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ if( npSaveNodeChain ){
+ npTag->npNodeChain = npSaveNodeChain;
+ npSaveNodeChain = FreeNodeChain( npSaveNodeChain );
+ npTag->npCurNode = npSaveCurNode;
+ }
+ }
+ return iRc;
+}
+
+
+/***********************************************************************/
+//! @brief Delete tag.
+/*!
+ In the case of an ndx tag, it deletes the ndx file as it contains
+ only one tag.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbIxNdx::DeleteTag( void * ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ //xbNdxTag * npTag;
+ //vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
+
+ try{
+
+ // if open, close it
+ if( FileIsOpen()){
+ if(( iRc = Close()) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ }
+ // delete file
+ if(( iRc = xbRemove()) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxNdx::DeleteTag() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+/***********************************************************************/
+#ifdef XB_DEBUG_SUPPORT
+
+//! @brief Dump a block for a given tag.
+/*!
+ Dump blocks for given tag for debugging purposes.
+ \param iOpt Output message destination<br>
+ 0 = stdout<br>
+ 1 = Syslog<br>
+ 2 = Both<br>
+ \param vpTag - Not required for single tag NDX files.
+ \returns void
+*/
+
+xbInt16 xbIxNdx::DumpTagBlocks( xbInt16 iOpt, void * ){
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ xbUInt32 lNoOfKeys;
+ char *p;
+ xbString s;
+ xbBool bIsLeaf = false;
+
+ try{
+ if( !FileIsOpen()){
+ iRc = XB_NOT_OPEN;
+ iErrorStop = 100;
+ throw iRc;
+ }
+
+ xbUInt32 ulStartBlock;
+ xbUInt32 ulEndBlock;
+ ulStartBlock = 1;
+ ulEndBlock = ndxTag->ulTotalBlocks;
+
+ for( xbUInt32 lBlk = ulStartBlock; lBlk < ulEndBlock; lBlk++ ){
+
+ memset( cNodeBuf, 0x00, XB_NDX_BLOCK_SIZE );
+ if(( iRc = ReadBlock( lBlk, XB_NDX_BLOCK_SIZE, cNodeBuf )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ p = cNodeBuf;
+ lNoOfKeys = eGetUInt32( p );
+
+ if( eGetUInt32( p + 4 ) > 0 ){
+ bIsLeaf = false;
+ s.Sprintf( "Node # %ld - Interior Node - Key Type [%c] Key Count [%ld]", lBlk, ndxTag->cKeyType, lNoOfKeys );
+ } else {
+ bIsLeaf = true;
+ s.Sprintf( "Node # %ld - Leaf Node - Key Type [%c] Key count [%ld]", lBlk, ndxTag->cKeyType, lNoOfKeys );
+ }
+ xbase->WriteLogMessage( s, iOpt );
+ xbase->WriteLogMessage( "Key Child Dbf Rec Key", iOpt );
+ p += 4;
+ xbUInt32 ulLeftBranch;
+ xbUInt32 ulRecNo;
+ xbString sKey;
+ xbDouble d;
+
+ xbUInt32 l;
+ for( l = 0; l < lNoOfKeys; l++ ){
+ ulLeftBranch = eGetUInt32( p );
+ p+= 4;
+ ulRecNo = eGetUInt32( p );
+ p+= 4;
+ if( ndxTag->cKeyType == 'C' ){
+ sKey.Assign( p, 1, (xbUInt32) ndxTag->iKeyLen );
+ } else if( ndxTag->cKeyType == 'D' ){
+ xbInt32 lDate = (xbInt32) eGetDouble( p );
+ xbDate dt( lDate );
+ //xbString s2;
+ //dt.JulToDate8( lDate, s2 );
+ sKey.Sprintf( "%ld - %s", lDate, dt.Str());
+ } else {
+ d = eGetDouble( p );
+ sKey.Sprintf( "%f", d );
+ }
+ p+= (ndxTag->iKeyItemLen-8);
+
+ s.Sprintf( "%3d %9d %9d %s", l+1, ulLeftBranch, ulRecNo, sKey.Str() );
+ xbase->WriteLogMessage( s, iOpt );
+ }
+ if( !bIsLeaf ){
+ ulLeftBranch = eGetUInt32( p );
+ s.Sprintf( "%3d %9d", l+1, ulLeftBranch );
+ xbase->WriteLogMessage( s, iOpt );
+ }
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxNdx::DumpTagBlocks() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+/***********************************************************************/
+//! @brief Dump index file header.
+/*!
+ Dump a index file header for debugging purposes.
+ \param iOpt Output message destination<br>
+ 0 = stdout<br>
+ 1 = Syslog<br>
+ 2 = Both<br>
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbIxNdx::DumpHeader( xbInt16 iOpt, xbInt16 ){
+ xbString s;
+ xbInt16 iRc;
+
+ if(( iRc = ReadHeadBlock( 1 )) != XB_NO_ERROR )
+ return iRc;
+
+ s.Sprintf( "Index Header Node for %s", GetFileName().Str());
+ xbase->WriteLogMessage( s, iOpt );
+ s.Sprintf( "--------------------------------" );
+ xbase->WriteLogMessage( s, iOpt );
+ s.Sprintf( "Root block = %ld", ndxTag->ulRootBlock );
+ xbase->WriteLogMessage( s, iOpt );
+ s.Sprintf( "Total blocks = %ld", ndxTag->ulTotalBlocks );
+ xbase->WriteLogMessage( s, iOpt );
+ s.Sprintf( "Key types = %c,%d", ndxTag->cKeyType, ndxTag->iKeyType );
+ xbase->WriteLogMessage( s, iOpt );
+ s.Sprintf( "Key Length = %d", ndxTag->iKeyLen );
+ xbase->WriteLogMessage( s, iOpt );
+ s.Sprintf( "Keys Per Block = %d", ndxTag->iKeysPerBlock );
+ xbase->WriteLogMessage( s, iOpt );
+ s.Sprintf( "Key Item Len = %ld", ndxTag->iKeyItemLen );
+ xbase->WriteLogMessage( s, iOpt);
+ s.Sprintf( "Serial No = %d", ndxTag->cSerNo );
+ xbase->WriteLogMessage( s, iOpt);
+ s.Sprintf( "Unique = %d", ndxTag->iUnique );
+ xbase->WriteLogMessage( s, iOpt );
+ s.Sprintf( "KeyExpression = %s", ndxTag->sKeyExpression.Str() );
+ xbase->WriteLogMessage( s, iOpt );
+ return XB_NO_ERROR;
+}
+/***********************************************************************/
+//! @brief Dump the index for a tag.
+/*!
+ Stub.
+ \returns XB_NO_ERROR
+*/
+xbInt16 xbIxNdx::DumpIxForTag( void *, xbInt16 )
+{
+ return XB_NO_ERROR;
+}
+/***********************************************************************/
+//! @brief Dump the index node chain.
+/*!
+ Dump the index node chain for debugging purposes.
+ \param vpTag Tag of node chain to dump.
+ \param iOpt Output message destination<br>
+ 0 = stdout<br>
+ 1 = Syslog<br>
+ 2 = Both<br>
+ \returns void
+*/
+void xbIxNdx::DumpIxNodeChain( void *vpTag, xbInt16 iOpt ) const
+{
+
+ xbNdxTag * npTag;
+ vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
+
+ xbString s( "Dump Node Chain" );
+ xbase->WriteLogMessage( s, iOpt );
+
+ if( npTag->npNodeChain ){
+ xbIxNode *n = npTag->npNodeChain;
+ xbInt16 iCtr = 0;
+ char cLeaf;
+ s.Sprintf( "Cnt\tThis Prev Next CurKeyNo BlockNo NoOfKeys Type" );
+ xbase->WriteLogMessage( s, iOpt );
+ while( n ){
+ IsLeaf( vpTag, n ) ? cLeaf = 'L' : cLeaf = 'I';
+ s.Sprintf( "%d\t%08x %08x %08x %08d %08d %08d %c",
+ iCtr++, n, n->npPrev, n->npNext, n->iCurKeyNo,
+ n->ulBlockNo, eGetUInt32( n->cpBlockData ), cLeaf );
+ xbase->WriteLogMessage( s, iOpt );
+ n = n->npNext;
+ }
+ } else {
+ s = "Empty Node Chain";
+ xbase->WriteLogMessage( s, iOpt );
+ }
+}
+/***********************************************************************/
+//! @brief Dump node.
+/*!
+ Dump a node for debugging purposes.
+ \param vpTag Tag of node chain to dump.
+ \param pNode Node to dump.
+ \param iOpt Output message destination<br>
+ 0 = stdout<br>
+ 1 = Syslog<br>
+ 2 = Both<br>
+ \returns XB_INVALID_OBJECT<br>XB_NO_ERROR
+*/
+
+xbInt16 xbIxNdx::DumpNode( void *vpTag, xbIxNode *pNode, xbInt16 iOpt ) const
+{
+ xbString s;
+ xbString sKey;
+ xbUInt32 lLeftBranch;
+ xbUInt32 lRecNo;
+ xbDouble d;
+
+ if( !pNode )
+ return XB_INVALID_OBJECT;
+
+ xbIx::DumpNode( vpTag, pNode, iOpt );
+
+ xbNdxTag * npTag;
+ vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
+
+ xbUInt32 lNoOfKeys = eGetUInt32( pNode->cpBlockData );
+ xbBool bIsLeaf = IsLeaf( vpTag, pNode );
+
+ if( bIsLeaf )
+ xbase->WriteLogMessage( "Leaf node", iOpt );
+ else
+ xbase->WriteLogMessage( "Interior node", iOpt );
+
+ s.Sprintf( "Key type = [%c] No Of Keys =[%d] Prev =[%x] Next =[%x]", npTag->cKeyType, lNoOfKeys, pNode->npPrev, pNode->npNext );
+ xbase->WriteLogMessage( s, iOpt );
+
+ char *p = pNode->cpBlockData;
+ p += 4;
+
+ xbUInt32 l;
+ for( l = 0; l < lNoOfKeys; l++ ){
+
+ lLeftBranch = eGetUInt32( p );
+ p+= 4;
+ lRecNo = eGetUInt32( p );
+ p+= 4;
+
+ if( npTag->cKeyType == 'C' ){
+ sKey.Assign( p, 1, (xbUInt32) npTag->iKeyLen );
+ } else if( npTag->cKeyType == 'D' ){
+ xbInt32 lDate = (xbInt32) eGetDouble( p );
+ xbDate dt( lDate );
+ sKey.Sprintf( "%ld - %s", lDate, dt.Str());
+ } else {
+ d = eGetDouble( p );
+ sKey.Sprintf( "%f", d );
+ }
+ p+= (npTag->iKeyItemLen-8);
+ s.Sprintf( "%3d %9d %9d %s", l+1, lLeftBranch, lRecNo, sKey.Str() );
+ xbase->WriteLogMessage( s, iOpt );
+ }
+ if( !bIsLeaf ){
+ lLeftBranch = eGetUInt32( p );
+ s.Sprintf( "%3d %9d", l+1, lLeftBranch );
+ xbase->WriteLogMessage( s.Str(), iOpt );
+ }
+ return XB_NO_ERROR;
+}
+#endif
+/***********************************************************************/
+//! @brief Find key
+/*!
+ \param vpTag Pointer to tag to search.
+ \param vpKey Void pointer to key data to search on.
+ \param lSearchKeyLen Length of key to search for.
+ \param iRetrieveSw xbTrue - Retrieve the record if key found.<br>
+ xbFalse - Don't retrieve record, check for key existence only.
+ \returns XB_NO_ERROR - Key found.<br>
+ XB_NOT_FOUND - Key not found.<br>
+ <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbIxNdx::FindKey( void *vpTag, const void *vpKey, xbInt32 lSearchKeyLen,
+ xbInt16 iRetrieveSw ){
+
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ xbString sMsg;
+ // xbInt16 iFindSts;
+ try{
+ // clean up any previous table updates before moving on
+ if( iRetrieveSw ){
+ if( dbf->GetDbfStatus() == XB_UPDATED ){
+ if( dbf->GetAutoCommit() == 1 ){
+ if(( iRc = dbf->Commit()) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ } else {
+ if(( iRc = dbf->Abort()) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ }
+ }
+ }
+
+ xbUInt32 ulNoOfKeys;
+ xbNdxTag * npTag;
+ vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
+ char cKeyType = npTag->cKeyType;
+
+ if( npTag->npNodeChain ){
+
+ // determine if the index has been updated since the last time it was used
+ time_t tFileTs;
+ if(( iRc = GetFileMtime( tFileTs )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ if( npTag->tNodeChainTs < tFileTs ){
+ npTag->npNodeChain = FreeNodeChain( npTag->npNodeChain );
+ npTag->npCurNode = NULL;
+ if(( iRc = ReadHeadBlock( 1 )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ if(( iRc = GetBlock( npTag, (npTag->ulRootBlock ), 1, (xbUInt32) npTag->iKeyItemLen )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+ } else {
+ // pop up the chain looking for appropriate starting point
+ xbBool bDone = false;
+ xbIxNode * TempIxNode;
+ while( npTag->npCurNode && !bDone && npTag->npCurNode->ulBlockNo != npTag->ulRootBlock ){ // not root node
+ iRc = CompareKey( cKeyType, vpKey, GetKeyData( npTag->npCurNode, 0, npTag->iKeyItemLen ), (size_t) lSearchKeyLen );
+ if( iRc <= 0 ){
+ TempIxNode = npTag->npCurNode;
+ npTag->npCurNode = npTag->npCurNode->npPrev;
+ TempIxNode = FreeNodeChain( TempIxNode );
+ } else {
+ // get the number of keys on the block and compare the key to the rightmost key
+ xbUInt32 ulKeyCtr = eGetUInt32( npTag->npCurNode->cpBlockData ) - 1;
+ iRc = CompareKey( cKeyType, vpKey, GetKeyData( npTag->npCurNode, ulKeyCtr, npTag->iKeyItemLen), (size_t) lSearchKeyLen );
+
+ if( iRc > 0 ){
+ TempIxNode = npTag->npCurNode;
+ npTag->npCurNode = npTag->npCurNode->npPrev;
+ TempIxNode = FreeNodeChain( TempIxNode );
+ } else {
+ bDone = true;
+ }
+ }
+ }
+ }
+ } else {
+ if(( iRc = GetBlock( npTag, (npTag->ulRootBlock ), 1, (xbUInt32) npTag->iKeyItemLen )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+ }
+
+
+ // if cur node is the base node and no keys on this node, then the index is empty
+ if( npTag->ulRootBlock == npTag->npCurNode->ulBlockNo ){
+ ulNoOfKeys = eGetUInt32( npTag->npCurNode->cpBlockData );
+ if( ulNoOfKeys == 0 && IsLeaf( npTag, npTag->npCurNode )){
+ // iRc = XB_EMPTY;
+
+ iRc = XB_NOT_FOUND;
+ return iRc;
+ }
+ }
+
+ // should be in the appropriate position in the node chain to continue the search from here
+ // run down through the interior nodes
+ xbInt16 iSearchRc = 0;
+ xbUInt32 ulKeyPtr = 0;
+
+ while( !IsLeaf( npTag, npTag->npCurNode ) ){
+
+ // get the number of keys on the block and compare the key to the rightmost key
+ ulNoOfKeys = eGetUInt32( npTag->npCurNode->cpBlockData );
+ if( ulNoOfKeys == 0 ) // interior nodes can have zero keys, just a link to the next lower node
+ npTag->npCurNode->iCurKeyNo = 0;
+ else
+ {
+ iRc = CompareKey( cKeyType, vpKey, GetKeyData( npTag->npCurNode, ulNoOfKeys - 1, npTag->iKeyItemLen), (size_t) lSearchKeyLen );
+ if( iRc > 0 ){
+ npTag->npCurNode->iCurKeyNo = ulNoOfKeys;
+ } else {
+ npTag->npCurNode->iCurKeyNo = (xbUInt32) BSearchBlock( cKeyType, npTag->npCurNode,
+ (xbInt32) npTag->iKeyItemLen, vpKey, (xbInt32) lSearchKeyLen, iSearchRc );
+ }
+ }
+
+ if(( iRc = GetKeyPtr( npTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+
+ if(( iRc = GetBlock( npTag, ulKeyPtr, 1, (xbUInt32) npTag->iKeyItemLen )) != XB_NO_ERROR ){
+ iErrorStop = 170;
+ throw iRc;
+ }
+ }
+
+ // should be on a the correct leaf node, it may or may not contain the actual key
+ ulNoOfKeys = eGetUInt32( npTag->npCurNode->cpBlockData );
+ xbInt16 iCompRc = 0;
+
+ if( ulNoOfKeys == 0 ){
+ iRc = XB_NOT_FOUND;
+ return iRc;
+ } else {
+
+ iRc = BSearchBlock( cKeyType, npTag->npCurNode, npTag->iKeyItemLen, vpKey, lSearchKeyLen, iCompRc );
+
+ // iCompRc
+ // 0 found
+ // < 0 eof encountered, search key > last key in file
+ // > 0 not found, positioned to next key
+
+
+ // std::cout << "xbIxNdx::FindKey -Rc = " << iRc << " CompRc = " << iCompRc << " NoOfKeys = " << ulNoOfKeys << " blk no = " << npTag->npCurNode->ulBlockNo << "\n";
+
+ if( iCompRc >= 0 ){
+ npTag->npCurNode->iCurKeyNo = (xbUInt32) iRc;
+ if( iRetrieveSw ){
+ xbUInt32 ulKey = npTag->npCurNode->iCurKeyNo;
+ if( ulKey >= ulNoOfKeys ) // if position past end of keys, need to go back one and position to last key
+ ulKey--;
+
+ if(( iRc = GetDbfPtr( vpTag, ulKey, npTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 180;
+ throw iRc;
+ }
+ if(( iRc = dbf->GetRecord( ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 190;
+ throw iRc;
+ }
+ }
+ }
+ }
+
+ if( iCompRc == 0 )
+ return XB_NO_ERROR;
+ else if( iCompRc > 0 )
+ return XB_NOT_FOUND;
+ else
+ return XB_EOF;
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxNdx::FindKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+/***********************************************************************/
+//! @brief Find key for current record
+/*!
+ This routine is called when updating a key.
+
+ \param vpTag Pointer to tag to search.
+ XB_NOT_FOUND Key not found.<br>
+ <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbIxNdx::FindKeyForCurRec( void * vpTag )
+{
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbNdxTag * npTag;
+ vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
+
+ try{
+ if(( iRc = CreateKey( vpTag, 0 )) < XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+
+ // find key
+ iRc = FindKey( vpTag, npTag->cpKeyBuf, npTag->iKeyLen, 0 );
+ if( iRc == XB_NOT_FOUND || iRc == XB_EMPTY || iRc == XB_EOF )
+ return iRc;
+
+ if( iRc != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+
+ // if keys are unique, and the recrd number matches, then we are good
+ if( GetUnique() )
+ return XB_NO_ERROR;
+
+ // get here if key found and not unique, need to move forward looking for correct rec no
+ xbUInt32 ulDbfRecNo = dbf->GetCurRecNo();
+ xbBool bKeysMatch = true; // keys match?
+ xbBool bCurRecsMatch = false; // cur recod number matches?
+ xbUInt32 ulIxRecNo = 0;
+ char cKeyType = GetKeyType( vpTag );
+
+ if(( iRc = GetDbfPtr( vpTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulIxRecNo )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ if( ulIxRecNo == ulDbfRecNo )
+ bCurRecsMatch = true;
+
+ xbInt16 iCompRc;
+ while( !bCurRecsMatch && bKeysMatch ){
+
+ if(( iRc = GetNextKey( vpTag, 0 )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+
+ // do compare key here
+ iCompRc = CompareKey( cKeyType, npTag->cpKeyBuf, GetKeyData( npTag->npCurNode, 0, npTag->iKeyItemLen ), (size_t) npTag->iKeyLen );
+ if( iCompRc != 0 )
+ bKeysMatch = false;
+ else{
+ if(( iRc = GetDbfPtr( vpTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulIxRecNo )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+ if( ulIxRecNo == ulDbfRecNo )
+ bCurRecsMatch = true;
+ }
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxNdx::FindKeyForCurRec() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return XB_NO_ERROR;
+}
+
+/***********************************************************************/
+//! @brief Get dbf record number for given key number.
+/*!
+ \param vpTag Tag to retrieve dbf rec number on.
+ \param iKeyNo Key number for retrieval
+ \param np Pointer to node
+ \param ulDbfPtr- Output dbf record number
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbIxNdx::GetDbfPtr( void *vpTag, xbInt16 iKeyNo, xbIxNode *np, xbUInt32 &ulDbfPtr ) const {
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+
+ try{
+ #ifdef XB_DEBUG_SUPPORT
+ // turn this off in production mode for better performance
+ xbUInt32 ulNoOfKeys = eGetUInt32 ( np->cpBlockData );
+ if( iKeyNo < 0 || iKeyNo > (xbInt16) --ulNoOfKeys ){
+ iErrorStop = 100;
+ throw XB_INVALID_KEYNO;
+ }
+ #endif
+
+ xbNdxTag * npTag;
+ vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
+ char *p = ( np->cpBlockData);
+ p += (8 + (iKeyNo * npTag->iKeyItemLen));
+ ulDbfPtr = eGetUInt32 ( p );
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxNdx::GetDbfPtr() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+/***********************************************************************/
+//! @brief Get the first key for the given tag.
+/*!
+ \param vpTag Tag to retrieve first key on.
+ \param iRetrieveSw xbTrue - Retrieve the record on success.<br>
+ xbFalse - Don't retrieve record.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbIxNdx::GetFirstKey( void *vpTag, xbInt16 iRetrieveSw ){
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbNdxTag * npTag;
+ vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
+
+ try{
+ // clear out any history
+ if( npTag->npNodeChain ){
+ npTag->npNodeChain = FreeNodeChain( npTag->npNodeChain );
+ npTag->npCurNode = NULL;
+ }
+ if(( iRc = ReadHeadBlock( 1 )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ // lRootBlock is now available
+ if(( iRc = GetBlock( npTag, npTag->ulRootBlock, 1, (xbUInt32) npTag->iKeyItemLen )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ // if no keys on this node, and it's a leaf node then the index is empty
+ xbUInt32 ulKeyPtr = eGetUInt32( npTag->npCurNode->cpBlockData );
+ if( ulKeyPtr == 0 && IsLeaf( npTag, npTag->npCurNode )){
+ iRc = XB_EMPTY;
+ return iRc;
+ }
+ while( !IsLeaf( npTag, npTag->npCurNode )) // go down the chain looking for a leaf node
+ {
+ if(( iRc = GetKeyPtr( npTag, 0, npTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ if(( iRc = GetBlock( npTag, ulKeyPtr, 1, (xbUInt32) npTag->iKeyItemLen )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ }
+ if( iRetrieveSw ){
+ if(( iRc = GetDbfPtr( npTag, 0, npTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+ if(( iRc = dbf->GetRecord( ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+ }
+ }
+ catch( xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxNdx::GetFirstKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+/***********************************************************************/
+//! @brief Get the key expression for the given tag.
+/*!
+ \param vpTag Tag to retrieve expression from.
+ \returns Key expression.
+*/
+
+xbString &xbIxNdx::GetKeyExpression( const void * vpTag ) const{
+ xbNdxTag * npTag;
+ vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
+ return npTag->sKeyExpression;
+}
+
+
+/***********************************************************************/
+//! @brief Get the key filter for the given tag.
+/*!
+ NDX index files do not support filters. This returns NULL.
+ \returns NULL.
+*/
+
+xbString &xbIxNdx::GetKeyFilter( const void * ) const{
+ return sNullString;
+}
+/***********************************************************************/
+//! @brief Get the key length for the given tag.
+/*!
+ \param vpTag Tag to retrieve key length for.
+ \returns Length of key.
+*/
+xbInt32 xbIxNdx::GetKeyLen( const void * vpTag ) const{
+ xbNdxTag * npTag;
+ vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
+ return npTag->iKeyLen;
+}
+/***********************************************************************/
+//! @brief Get child node number for given key number.
+/*!
+ \param vpTag Tag to retrieve dbf rec number on.
+ \param iKeyNo Key number for retrieval
+ \param np Pointer to node
+ \param ulKeyPtr Output node number
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbIxNdx::GetKeyPtr( void *vpTag, xbInt16 iKeyNo, xbIxNode *np, xbUInt32 &ulKeyPtr ) const {
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ try{
+ #ifdef XB_DEBUG_SUPPORT
+ // turn this off in production mode for better performance
+ xbUInt32 ulNoOfKeys = eGetUInt32 ( np->cpBlockData );
+ if( iKeyNo < 0 || iKeyNo > (xbInt16) ulNoOfKeys ){
+ iErrorStop = 100;
+ throw XB_INVALID_KEYNO;
+ }
+ #endif
+ xbNdxTag * npTag;
+ vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
+ char *p = ( np->cpBlockData);
+ p += (4 + (iKeyNo * npTag->iKeyItemLen));
+ ulKeyPtr = eGetUInt32 ( p );
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxNdx::GetKeyPtr() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+//! @brief Returns key update status.
+/*!
+ \param vpTag Tag to check status on.
+ \returns XB_UPD_KEY Key updated.<br>
+ XB_DEL_KEY Key deleted.<br>
+ XB_ADD_KEY Key added.<br>
+ 0 No key updates
+
+*/
+xbInt16 xbIxNdx::GetKeySts( void *vpTag ) const{
+ xbNdxTag * npTag;
+ vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
+ return npTag->iKeySts;
+}
+/***********************************************************************/
+//! @brief Get character key type for given tag.
+/*!
+ \param vpTag Tag to retrieve key type for.
+ \returns Char key type.
+*/
+
+char xbIxNdx::GetKeyType( const void * vpTag ) const{
+ xbNdxTag * npTag;
+ vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
+ return npTag->cKeyType;
+}
+
+/***********************************************************************/
+//! @brief Get numeric key type for given tag.
+/*!
+ \param vpTag Tag to retrieve first key for.
+ \returns Numeric key type.
+*/
+xbInt16 xbIxNdx::GetKeyTypeN( const void * vpTag ) const{
+ xbNdxTag * npTag;
+ vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
+ return npTag->iKeyType;
+}
+/***********************************************************************/
+//! @brief Get the last key for the given tag.
+/*!
+ \param vpTag Tag to retrieve last key on.
+ \param iRetrieveSw xbTrue - Retrieve the record on success.<br>
+ xbFalse - Don't retrieve record.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbIxNdx::GetLastKey( void *vpTag, xbInt16 iRetrieveSw ){
+ return GetLastKey( 0, vpTag, iRetrieveSw );
+// return GetLastKey( 0, vpTag, 1 );
+
+}
+/***********************************************************************/
+//! @brief Get the last key for the given tag and starting node.
+/*!
+ \param ulNodeNo Starting node
+ \param vpTag Tag to retrieve last key on.
+ \param iRetrieveSw xbTrue - Retrieve the record if key found.<br>
+ xbFalse - Don't retrieve record.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbIxNdx::GetLastKey( xbUInt32 ulNodeNo, void *vpTag, xbInt16 iRetrieveSw ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbUInt32 ulKeyPtr = 0;
+ xbUInt32 ulNoOfKeys = 0;
+ xbNdxTag * npTag;
+ vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
+
+ try{
+ // clear out any history
+ if( npTag->npNodeChain ){
+ npTag->npNodeChain = FreeNodeChain( npTag->npNodeChain );
+ npTag->npCurNode = NULL;
+ }
+ if( ulNodeNo == 0 ){
+ if(( iRc = ReadHeadBlock( 1 )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ // lRootBlock is now available
+ if(( iRc = GetBlock( npTag, npTag->ulRootBlock, 1, (xbUInt32) npTag->iKeyItemLen )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ } else {
+ if(( iRc = GetBlock( npTag, ulNodeNo, 1, (xbUInt32) npTag->iKeyItemLen )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ }
+ // if no keys on this node, then the index is empty
+ ulNoOfKeys = eGetUInt32( npTag->npCurNode->cpBlockData );
+ if( ulNoOfKeys == 0 && IsLeaf( npTag, npTag->npCurNode )){
+ iRc = XB_EMPTY;
+ return iRc;
+ }
+ npTag->npCurNode->iCurKeyNo = ulNoOfKeys;
+ while( !IsLeaf( npTag, npTag->npCurNode ) ){ // go down the chain looking for a leaf node
+ npTag->npCurNode->iCurKeyNo = eGetUInt32( npTag->npCurNode->cpBlockData );
+ if(( iRc = GetKeyPtr( npTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ if(( iRc = GetBlock( npTag, ulKeyPtr, 1, (xbUInt32) npTag->iKeyItemLen )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+ ulNoOfKeys = eGetUInt32( npTag->npCurNode->cpBlockData );
+ npTag->npCurNode->iCurKeyNo = ulNoOfKeys;
+ }
+ // get here on a leaf node, it has one fewer iCurKeyNo
+ npTag->npCurNode->iCurKeyNo--;
+ if( iRetrieveSw ){
+ ulNoOfKeys = eGetUInt32( npTag->npCurNode->cpBlockData );
+ if(( iRc = GetDbfPtr( npTag, ulNoOfKeys - 1, npTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+ if(( iRc = dbf->GetRecord( ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxNdx::GetLastKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+//! @brief Get the last key for a block number.
+/*!
+ \param vpTag Tag to retrieve first key on.
+ \param ulBlockNo Block number for key retrieval.
+ \param cpBuf output buffer for key placement
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbIxNdx::GetLastKeyForBlockNo( void *vpTag, xbUInt32 ulBlockNo, char *cpBuf ){
+
+ // returns the last key for a given block number
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+
+ xbNdxTag * npTag;
+ vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
+
+ try{
+ xbIxNode * npSaveNodeChain = npTag->npNodeChain;
+ xbIxNode * npSaveCurNode = npTag->npCurNode;
+ npTag->npNodeChain = NULL;
+
+ if(( iRc = GetLastKey( ulBlockNo, npTag, 0 )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ // set the key
+ memcpy( cpBuf, GetKeyData( npTag->npCurNode, GetKeyCount( npTag->npCurNode ) - 1, npTag->iKeyItemLen ), (size_t) npTag->iKeyLen );
+
+ // free memory
+ npTag->npNodeChain = FreeNodeChain( npTag->npNodeChain );
+ npTag->npNodeChain = npSaveNodeChain;
+ npTag->npCurNode = npSaveCurNode;
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxNdx::GetLastKeyForBlockNo() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ) );
+ }
+ return iRc;
+}
+/***********************************************************************/
+//! @brief Get the next key for the given tag.
+/*!
+ \param vpTag Tag to retrieve next key on.
+ \param iRetrieveSw xbTrue - Retrieve the record on success.<br>
+ xbFalse - Don't retrieve record.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbIxNdx::GetNextKey( void * vpTag, xbInt16 iRetrieveSw ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbNdxTag * npTag;
+ vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
+
+ try{
+ if( !npTag->npNodeChain )
+ return GetFirstKey( vpTag, iRetrieveSw );
+
+ // more keys on this node? if yes, get the next one to the right
+ xbUInt32 ulKeyPtr;
+ if((eGetUInt32( npTag->npCurNode->cpBlockData ) -1) > npTag->npCurNode->iCurKeyNo ){
+ npTag->npCurNode->iCurKeyNo++;
+ if(( iRc = GetDbfPtr( npTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ if( iRetrieveSw ){
+ if(( iRc = dbf->GetRecord( ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ } else {
+ return iRc;
+ }
+ } else {
+ return iRc;
+ }
+ }
+ // if at end of head node, then eof
+ if( npTag->npCurNode->ulBlockNo == npTag->ulRootBlock )
+ return XB_EOF;
+
+ // This logic assumes that interior nodes have n+1 left node no's where n is he the number of keys in the node
+ xbIxNode * TempIxNode = npTag->npCurNode;
+ npTag->npCurNode = npTag->npCurNode->npPrev;
+ TempIxNode = FreeNodeChain( TempIxNode );
+
+ while( npTag->npCurNode->iCurKeyNo >= eGetUInt32( npTag->npCurNode->cpBlockData ) &&
+ (npTag->npCurNode->ulBlockNo != npTag->ulRootBlock )){
+ TempIxNode = npTag->npCurNode;
+ npTag->npCurNode = npTag->npCurNode->npPrev;
+ TempIxNode = FreeNodeChain( TempIxNode );
+ }
+
+ // head node and at end of head node, then eof
+ if( npTag->npCurNode->ulBlockNo == npTag->ulRootBlock &&
+ npTag->npCurNode->iCurKeyNo == eGetUInt32( npTag->npCurNode->cpBlockData ))
+ return XB_EOF;
+
+ // move one to the right
+ npTag->npCurNode->iCurKeyNo++;
+
+ if(( iRc = GetKeyPtr( npTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+
+ if(( iRc = GetBlock( npTag, ulKeyPtr, 1, (xbUInt32) npTag->iKeyItemLen )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ while( !IsLeaf( npTag, npTag->npCurNode )) // go down the chain looking for a leaf node
+ {
+ if(( iRc = GetKeyPtr( npTag, 0, npTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+ if(( iRc = GetBlock( npTag, ulKeyPtr, 1, (xbUInt32) npTag->iKeyItemLen )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+ }
+ if( iRetrieveSw ){
+ if(( iRc = GetDbfPtr( npTag, 0, npTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+ if(( iRc = dbf->GetRecord( ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 170;
+ throw iRc;
+ }
+ }
+ }
+ catch( xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxNdx::GetNextKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+/***********************************************************************/
+//! @brief Get the previous key for the given tag.
+/*!
+ \param vpTag Tag to retrieve previous key on.
+ \param iRetrieveSw xbTrue - Retrieve the record on success.<br>
+ xbFalse - Don't retrieve record.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbIxNdx::GetPrevKey( void * vpTag, xbInt16 iRetrieveSw ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbNdxTag * npTag;
+ vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
+
+ // This method assumes last index call landed on a valid key.
+ // If last call resulted in an error, this method will returns XB_BOF
+
+ try{
+ if( !npTag->npNodeChain )
+ return GetLastKey( 0, vpTag, iRetrieveSw );
+
+ xbUInt32 ulKeyPtr;
+ if( npTag->npCurNode->iCurKeyNo > 0 ){
+ npTag->npCurNode->iCurKeyNo--;
+
+ if(( iRc = GetDbfPtr( npTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ if( iRetrieveSw ){
+ if(( iRc = dbf->GetRecord( ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ } else {
+ return iRc;
+ }
+ }
+ }
+
+ // next two lines might have been an issue
+ if( npTag->npCurNode->ulBlockNo == npTag->ulRootBlock && GetKeyCount( npTag->npCurNode ) == 0 && IsLeaf( npTag, npTag->npCurNode ))
+ return XB_EMPTY;
+
+ if( npTag->npCurNode->ulBlockNo == npTag->ulRootBlock )
+ return XB_BOF;
+
+ // This logic assumes that interior nodes have n+1 left node no's where n is he the number of keys in the node
+ xbIxNode * TempIxNode = npTag->npCurNode;
+ npTag->npCurNode = npTag->npCurNode->npPrev;
+ TempIxNode = FreeNodeChain( TempIxNode );
+
+ while( npTag->npCurNode->iCurKeyNo == 0 &&
+ (npTag->npCurNode->ulBlockNo != npTag->ulRootBlock )){
+ TempIxNode = npTag->npCurNode;
+ npTag->npCurNode = npTag->npCurNode->npPrev;
+ TempIxNode = FreeNodeChain( TempIxNode );
+ }
+
+ // head node and at end of head node, then bof
+ if( npTag->npCurNode->ulBlockNo == npTag->ulRootBlock &&
+ npTag->npCurNode->iCurKeyNo == 0 )
+ return XB_BOF;
+
+ // move one to the left
+ npTag->npCurNode->iCurKeyNo--;
+
+ if(( iRc = GetKeyPtr( npTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+
+ if(( iRc = GetBlock( npTag, ulKeyPtr, 1, (xbUInt32) npTag->iKeyItemLen )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+
+ while( !IsLeaf( npTag, npTag->npCurNode )){ // go down the chain looking for a leaf node
+ npTag->npCurNode->iCurKeyNo = eGetUInt32( npTag->npCurNode->cpBlockData );
+ if(( iRc = GetKeyPtr( npTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+ if(( iRc = GetBlock( npTag, ulKeyPtr, 1, (xbUInt32) npTag->iKeyItemLen )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+ }
+
+ npTag->npCurNode->iCurKeyNo = eGetUInt32( npTag->npCurNode->cpBlockData ) - 1;
+ if( iRetrieveSw ){
+ if(( iRc = GetDbfPtr( npTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+ if(( iRc = dbf->GetRecord( ulKeyPtr )) != XB_NO_ERROR ){
+ iErrorStop = 170;
+ throw iRc;
+ }
+ }
+ }
+
+ catch( xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxNdx::GetPrevKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+/***********************************************************************/
+//! @brief Get the sort order for given tag.
+/*!
+ Ndx indices only support ascending keys.
+ \returns 0
+*/
+xbBool xbIxNdx::GetSortOrder( void * ) const{
+ return 0;
+}
+/***********************************************************************/
+//! @brief Get tag for tag number.
+/*!
+ \returns Pointer to ndx tag.
+*/
+void * xbIxNdx::GetTag( xbInt16 ) const{
+ return ndxTag;
+}
+/***********************************************************************/
+//! @brief Get tag for tag name.
+/*!
+ \returns Pointer to ndx tag.
+*/
+void * xbIxNdx::GetTag( xbString & ) const{
+ return ndxTag;
+}
+
+/***********************************************************************/
+//! @brief Get tag count.
+/*!
+ NDX index files contain one tag.
+ \returns 1
+*/
+
+xbInt16 xbIxNdx::GetTagCount() const{
+ return 1;
+}
+/***********************************************************************/
+//! @brief Get tag name.
+/*!
+ \returns Tag name.
+*/
+xbString &xbIxNdx::GetTagName( void * ) const {
+// char * xbIxNdx::GetTagName( void * ) const {
+
+ return ndxTag->sTagName;
+
+}
+/***********************************************************************/
+//! @brief Get tag name.
+/*!
+ \returns Tag name.
+*/
+const char * xbIxNdx::GetTagName( void *, xbInt16 ) const {
+ return ndxTag->sTagName;
+}
+
+/***********************************************************************/
+//! @brief Get the unique setting for given tag.
+/*!
+ \param vpTag Tag to unique setting on.
+ \returns xbTrue - Unique index.<br> xbFalse - Not unique index.
+*/
+xbBool xbIxNdx::GetUnique( void * vpTag ) const{
+ xbNdxTag * npTag;
+ vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
+ return npTag->iUnique;
+}
+
+/***********************************************************************/
+//! @brief Insert key into interior node.
+/*!
+ Insert key into non-full interior node.<br>
+ Assumes valid inputs
+
+ \param vpTag Tag in play.
+ \param npNode Node for insertion.
+ \param iSlotNo Slot number to insert key.
+ \param ulPtr Pointer number to insert.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbIxNdx::InsertNodeI( void *vpTag, xbIxNode *npNode, xbInt16 iSlotNo, xbUInt32 ulPtr ){
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ char *pTrg;
+ xbInt16 iSrcPos;
+ char *pLastKey = NULL;
+ xbNdxTag * npTag;
+ vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
+
+ try{
+ // update number of keys on the node
+ xbInt32 lKeyCnt = GetKeyCount( npNode );
+ iSrcPos = 12 + (iSlotNo * npTag->iKeyItemLen);
+
+ char *pSrc = npNode->cpBlockData;
+ pSrc += iSrcPos;
+
+ // if not appending to the end of the node, make some room, move things to the right
+ if( iSlotNo < lKeyCnt ) {
+ xbInt16 iCopyLen = ((lKeyCnt - iSlotNo) * npTag->iKeyItemLen) - 4;
+ pTrg = pSrc;
+ pTrg += npTag->iKeyItemLen;
+ memmove( pTrg, pSrc, (size_t) iCopyLen );
+ }
+
+ // get the right most key for the left part of the split node
+ xbUInt32 ulKeyPtr2;
+ if(( iRc = GetKeyPtr( vpTag, npNode->iCurKeyNo, npNode, ulKeyPtr2 )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ // get the new right key value for the freshly split node
+ pLastKey = (char *) malloc((size_t) ndxTag->iKeyLen);
+ if(( iRc = GetLastKeyForBlockNo( vpTag, ulKeyPtr2, pLastKey )) != XB_NO_ERROR ){
+ iRc = 110;
+ throw iRc;
+ }
+ // write the key value
+ pTrg = pSrc;
+ char *pTrg2 = pSrc;
+ pSrc = pLastKey;
+ for( xbInt16 i = 0; i < npTag->iKeyLen; i++ )
+ *pTrg++ = *pSrc++;
+
+ pTrg2 += (npTag->iKeyItemLen - 8);
+ ePutUInt32( pTrg2, ulPtr );
+ ePutInt32( npNode->cpBlockData, ++lKeyCnt );
+
+ // write out the updated block to disk
+ if(( iRc = WriteBlock( npNode->ulBlockNo, GetBlockSize(), npNode->cpBlockData )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ if( pLastKey )
+ free( pLastKey );
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxNdx::InsertNodeI() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ if( pLastKey )
+ free( pLastKey );
+ }
+ return iRc;
+}
+/***********************************************************************/
+//! @brief Insert key into leaf node.
+/*!
+ Insert key into non-full leaf node.<br>
+ Assumes valid inputs
+
+ \param vpTag Tag in play.
+ \param npNode Node for insertion.
+ \param iSlotNo Slot number to insert key.
+ \param ulPtr Pointer number to insert.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbIxNdx::InsertNodeL( void *vpTag, xbIxNode *npNode, xbInt16 iSlotNo,
+ char * cpKeyBuf, xbUInt32 ulPtr ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ char *pSrc;
+ char *pTrg;
+ char *pKeyPos;
+ xbString sMsg;
+ xbNdxTag * npTag;
+ vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
+
+ try{
+ xbInt32 lKeyCnt = GetKeyCount( npNode );
+ xbInt16 iKeyPos = 4 + iSlotNo * npTag->iKeyItemLen;
+ pKeyPos = npNode->cpBlockData;
+ pKeyPos += iKeyPos;
+
+ // if not appending to end, make space, move things right
+ if( iSlotNo < lKeyCnt ) {
+ xbInt16 iCopyLen = (lKeyCnt - iSlotNo) * npTag->iKeyItemLen;
+ pTrg = pKeyPos;
+ pTrg += npTag->iKeyItemLen;
+ memmove( pTrg, pKeyPos, (size_t) iCopyLen );
+ }
+ // if leaf, write rec number
+ pTrg = pKeyPos;
+ memset( pTrg, 0x00, 4 );
+ pTrg += 4;
+ ePutUInt32( pTrg, ulPtr );
+ pTrg += 4;
+
+ // write the key value
+ pSrc = cpKeyBuf;
+ for( xbInt16 i = 0; i < npTag->iKeyLen; i++ )
+ *pTrg++ = *pSrc++;
+
+ // update number of keys on the node
+ ePutInt32( npNode->cpBlockData, ++lKeyCnt );
+
+ // write out the updated block to disk
+ if(( iRc = WriteBlock( npNode->ulBlockNo, GetBlockSize(), npNode->cpBlockData )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxNdx::InsertNodeL() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+/***********************************************************************/
+//! @brief Determine node leaf status
+/*!
+ \param npNode Node to examine.
+ \returns xbTrue - Leaf node.<br> xbFalse - Interior node.
+*/
+xbBool xbIxNdx::IsLeaf( void *, xbIxNode *npNode ) const {
+ xbUInt32 ulBlock = eGetUInt32 ( npNode->cpBlockData+4 );
+ if( ulBlock > 0 ) // if the second four bytes are a number, it's an interior node
+ return false;
+ else
+ return true;
+}
+/***********************************************************************/
+//! @brief Determine if key exists.
+/*!
+ This method assumes the key has already been built and is in either
+ cpKeyBuf or dKey.
+
+ \param vpTag - Pointer to tag.
+ \returns xbTrue - Key exists.<br> xbFalse - Key does not exist.
+*/
+xbInt16 xbIxNdx::KeyExists( void * vpTag ){
+
+ xbNdxTag * npTag;
+ vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
+
+ xbInt16 iRc = FindKey( vpTag, npTag->cpKeyBuf, npTag->iKeyLen, 0 );
+ if( iRc == 0 )
+ return 1;
+ else
+ return 0;
+}
+
+/***********************************************************************/
+//! @brief Set position for key add.
+/*!
+ This routine is called by the AddKey() method and is used to position
+ the node chain to the position the new key should be added to the index.
+
+ \param npTag Pointer to npTag.
+ \param ulAddRecNo Record number to add.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbIxNdx::KeySetPosAdd( xbNdxTag *npTag, xbUInt32 ulAddRecNo ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ try{
+
+ iRc = FindKey( npTag, npTag->cpKeyBuf, npTag->iKeyLen, 0 );
+ if( iRc == XB_NOT_FOUND || iRc == XB_EMPTY )
+ return XB_NO_ERROR; // good position
+
+ else if( iRc != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ // get here if key was found, get the right most instance of any non unique key for append, find correct spot for update
+ if( GetUnique() == 0 ){
+ xbUInt32 ulCurRecNo;
+ if(( iRc = GetDbfPtr( npTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulCurRecNo )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ xbBool bKeysMatch = xbTrue;
+ while( bKeysMatch && ulAddRecNo > ulCurRecNo && iRc == XB_NO_ERROR ){
+ if(( iRc = GetNextKey( npTag, 0 )) == XB_NO_ERROR ){
+ if( memcmp( GetKeyData( npTag->npCurNode, npTag->npCurNode->iCurKeyNo, npTag->iKeyItemLen ), npTag->cpKeyBuf, (size_t) npTag->iKeyLen ))
+ bKeysMatch = xbFalse;
+ else{
+ if(( iRc = GetDbfPtr( npTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulCurRecNo )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ }
+ }
+ }
+ }
+ if( iRc == XB_EOF ){ // eof condition
+ if(( iRc = GetLastKey( 0, npTag, 0 )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ npTag->npCurNode->iCurKeyNo++;
+ return XB_NO_ERROR;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxNdx::KeySetPos() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+//! @brief Set position for key add.
+/*!
+ This routine is called by the DeleteKey() method and is used to position
+ the node chain to the position the old key should be deleted from the index.
+
+ \param npTag Pointer to npTag.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbIxNdx::KeySetPosDel( xbNdxTag *npTag ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbString sMsg;
+
+ try{
+ iRc = FindKey( NULL, npTag->cpKeyBuf2, npTag->iKeyLen, 0 );
+ if( iRc == XB_NOT_FOUND || iRc == XB_EMPTY )
+ return XB_NO_ERROR; // good position
+ else if( iRc != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ xbUInt32 ulIxRecNo;
+ if(( iRc = GetDbfPtr( npTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulIxRecNo )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ if( ulIxRecNo == dbf->GetCurRecNo())
+ return XB_NO_ERROR;
+ if( GetUnique() == 1 ){
+ iErrorStop = 120;
+ iRc = XB_NOT_FOUND;
+ throw iRc;
+ }
+ xbBool bFound = xbFalse;
+ xbBool bKeysMatch = xbTrue;
+ while( bKeysMatch && !bFound && iRc == XB_NO_ERROR ){
+ if(( iRc = GetNextKey( npTag, 0 )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ if( memcmp( GetKeyData( npTag->npCurNode, npTag->npCurNode->iCurKeyNo, npTag->iKeyItemLen ), npTag->cpKeyBuf2, (size_t) npTag->iKeyLen )){
+ bKeysMatch = xbFalse;
+ } else {
+ if(( iRc = GetDbfPtr( npTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulIxRecNo )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+ if( ulIxRecNo == dbf->GetCurRecNo())
+ bFound = xbTrue;
+ }
+ }
+ if( bFound )
+ return XB_NO_ERROR;
+ else
+ return XB_NOT_FOUND;
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxNdx::KeySetPosDel() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+/***********************************************************************/
+//! @brief Returns key filter status.
+/*!
+ \param vpTag Tag to check status on.
+ \returns xbtrue - Key was updated.<br>xbFalse - Key not updated.
+
+ Always true for NDX style indices.
+*/
+//inline xbBool xbIxNdx::KeyFiltered( void *vpTag ) const{
+// return xbTrue;
+//}
+
+/***********************************************************************/
+//! @brief Read head block of index file.
+/*!
+ \param iOpt 0 - Read in entire block
+ 1 - Read in only dynamic section of block
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbIxNdx::ReadHeadBlock( xbInt16 iOpt = 0 ) {
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ try{
+ if( !FileIsOpen()){
+ iRc = XB_NOT_OPEN;
+ iErrorStop = 100;
+ throw iRc;
+ }
+ xbInt16 iLen;
+ iOpt == 0 ? iLen = 512 : iLen = 21;
+
+ if(( iRc = ReadBlock( (xbUInt32) 0, (size_t) iLen, cNodeBuf )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ char *p = cNodeBuf;
+ ndxTag->ulRootBlock = eGetUInt32( p ); p+=4;
+ ndxTag->ulTotalBlocks = eGetUInt32( p ); p+=5;
+ if( iOpt == 0 ){
+ ndxTag->cKeyType = *p; p+=3;
+ ndxTag->iKeyLen = eGetInt16( p ); p+=2;
+ ndxTag->iKeysPerBlock = eGetInt16( p ); p+=2;
+ ndxTag->iKeyType = eGetInt16( p ); p+=2;
+ ndxTag->iKeyItemLen = eGetInt16( p ); p+=2;
+ ndxTag->cSerNo = *p; p+=3;
+ ndxTag->iUnique = *p; p++;
+ ndxTag->sKeyExpression.Set( p );
+
+ if( ndxTag->exp )
+ delete ndxTag->exp;
+
+ ndxTag->exp = new xbExp( xbase, dbf );
+ if(( iRc = ndxTag->exp->ParseExpression( ndxTag->sKeyExpression.Str() )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+
+ if( ndxTag->cpKeyBuf )
+ free( ndxTag->cpKeyBuf );
+ if( ndxTag->cpKeyBuf2 )
+ free( ndxTag->cpKeyBuf2 );
+
+ ndxTag->cpKeyBuf = (char *) malloc( (size_t) ndxTag->iKeyLen );
+ ndxTag->cpKeyBuf2 = (char *) malloc( (size_t) ndxTag->iKeyLen );
+
+ if( ndxTag->sTagName == "" )
+ GetFileNamePart( ndxTag->sTagName );
+
+ } else {
+ p+= 11;
+ ndxTag->cSerNo = *p;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxNdx::ReadHeadBlock() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+//! @brief Reindex a tag.
+/*!
+ \param vpTag Pointer to tag pointer.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbIxNdx::Reindex( void **vpTag ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbNdxTag *npTag = ndxTag;
+
+ try{
+ xbInt16 iUnique = GetUnique( *vpTag );
+
+ npTag->npNodeChain = FreeNodeChain( npTag->npNodeChain );
+ npTag->npCurNode = NULL;
+ npTag->ulRootBlock = 1L;
+ npTag->ulTotalBlocks = 2L;
+
+ if(( iRc = xbTruncate( 1024 )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+
+ if(( iRc = WriteHeadBlock( 1 )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ char buf[512];
+ memset( buf, 0x00, 512 );
+
+ if(( iRc = WriteBlock( 1, 0, buf )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+
+ xbUInt32 ulRecCnt = 0;
+ if(( iRc = dbf->GetRecordCnt( ulRecCnt )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+
+ for( xbUInt32 l = 1; l <= ulRecCnt; l++ ){
+ if(( iRc = dbf->GetRecord( l )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+
+ if(( iRc = CreateKey( npTag, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+
+ if( iUnique ){
+ // iRc = CheckForDupKey( vpTag2 );
+ iRc = CheckForDupKey( npTag );
+ if( iRc != 0 ){
+ if( iRc < 0 ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+ return XB_KEY_NOT_UNIQUE;
+ }
+ }
+
+ if(( iRc = AddKey( npTag, l )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+ }
+ *vpTag = npTag;
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxNdx::Reindex() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ this->DeleteTag( NULL ); // Don't leave the index in an incomplete state
+ }
+ return iRc;
+}
+/***********************************************************************/
+//! @brief Set current tag.
+/*!
+ For ndx indices, there is only one tag.
+ \returns XB_NO_ERROR.
+*/
+xbInt16 xbIxNdx::SetCurTag( xbInt16 ) {
+ xbIx::SetCurTag( ndxTag );
+ return XB_NO_ERROR;
+}
+/***********************************************************************/
+//! @brief Set current tag.
+/*!
+ For ndx indices, there is only one tag.
+ \returns XB_NO_ERROR.
+*/
+xbInt16 xbIxNdx::SetCurTag( xbString & ) {
+ xbIx::SetCurTag( ndxTag );
+ dbf->SetCurTag( "NDX", this, GetTag(0) );
+ return XB_NO_ERROR;
+}
+
+/***********************************************************************/
+//! @brief Split an interior node
+/*!
+
+ This routine splits an interior node into two nodes, divided by dSplitFactor.<br>
+ This behaves differently than V7 Dbase. V7 does not balance the nodes.<br>
+ For V7, if adding a key to the end of a node, it will create a right node
+ with only one key, and the left node is still full.<br><br>
+
+ Possible performance improvement options.<br>
+ Two modes when splitting:<br>
+ a) Split nodes in the middle - good for random access applications<br>
+ b) Split off right node with only one key - good for applications with
+ expectation of ascending keys added moving forward.<br>
+
+ This routine first inserts the key into the left node in the appropriate location
+ then splits the node based on the split factor setting.
+
+ \param vpTag Tag in play.
+ \param npLeft Left node to split.
+ \param npRight Right node to split.
+ \param iSlotNo Slot number for split.
+ \param ulPtr Pointer number to insert.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbIxNdx::SplitNodeI( void *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 ulPtr ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbNdxTag * npTag;
+ vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
+ xbDouble dSplitFactor = .5; // split the nodes 50/50
+ xbString sMsg;
+
+ try{
+ xbInt32 lKeyCnt = GetKeyCount( npLeft );
+ xbInt32 lNewLeftKeyCnt = (xbInt32) ((lKeyCnt + 1) * dSplitFactor) + 1;
+ xbInt32 lNewRightKeyCnt = lKeyCnt - lNewLeftKeyCnt;
+ xbInt16 iSrcPos;
+ xbInt16 iCopyLen;
+ char *pSrc;
+ char *pTrg;
+
+ // insert the key into the left node
+ if(( iRc = InsertNodeI( vpTag, npLeft, iSlotNo, ulPtr )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+
+ // move the right half of the left node to the right node
+ iSrcPos = ((lNewLeftKeyCnt + 1) * npTag->iKeyItemLen) + 4;
+ iCopyLen = (lNewRightKeyCnt * npTag->iKeyItemLen) + 4;
+ pSrc = npLeft->cpBlockData;
+ pSrc += iSrcPos;
+ pTrg = npRight->cpBlockData;
+ pTrg += 4;
+ memmove( pTrg, pSrc, (size_t) iCopyLen );
+
+ // write the new key counts into the nodes
+ pTrg = npLeft->cpBlockData;
+ ePutInt32( pTrg, lNewLeftKeyCnt );
+ pTrg = npRight->cpBlockData;
+ ePutInt32( pTrg, lNewRightKeyCnt );
+
+ // write the new key counts into the nodes
+ pTrg = npLeft->cpBlockData;
+ ePutInt32( pTrg, lNewLeftKeyCnt );
+ pTrg = npRight->cpBlockData;
+ ePutInt32( pTrg, lNewRightKeyCnt );
+
+ // write out the block
+ if(( iRc = WriteBlock( npLeft->ulBlockNo, GetBlockSize(), npLeft->cpBlockData )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ // write out the block
+ if(( iRc = WriteBlock( npRight->ulBlockNo, GetBlockSize(), npRight->cpBlockData )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxNdx::SplitNodeI() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+//! @brief Split a leaf node.
+/*!
+ This routine splits an index leaf into two nodes, divided by dSplitFactor.<br>
+ This behaves differently than V7 Dbase. V7 does not balance the nodes.<br>
+ For V7, if adding a key to the end of a node, it will create a right node
+ with only one key, and the left node is still full.<br><br>
+
+ Possible performance improvement options.<br>
+ Two modes when splitting:<br>
+ a) Split nodes in the middle - good for random access applications<br>
+ b) Split off right node with only one key - good for applications with
+ expectation of ascending keys added moving forward.<br>
+
+ This routine first inserts the key into the left node in the appropriate location
+ then splits the node based on the split factor setting.
+
+ \param vpTag Tag in play.
+ \param npLeft Left node to split.
+ \param npRight Right node to split.
+ \param iSlotNo Slot number for split.
+ \param ulPtr Pointer number to insert.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbIxNdx::SplitNodeL( void *vpTag, xbIxNode * npLeft, xbIxNode *npRight,
+ xbInt16 iSlotNo, char * cpKeyBuf, xbUInt32 ulPtr ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbDouble dSplitFactor = .5;
+ xbNdxTag *npTag;
+ vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
+
+ xbString sMsg;
+ try{
+ xbInt32 lKeyCnt = GetKeyCount( npLeft );
+ xbInt32 lNewLeftKeyCnt = (xbInt32) ((lKeyCnt + 1) * dSplitFactor) + 1;
+ xbInt32 lNewRightKeyCnt = lKeyCnt + 1 - lNewLeftKeyCnt;
+
+ // xbInt16 iSrcPos;
+ xbInt16 iLen;
+ char *pSrc = npLeft->cpBlockData;
+ char *pTrg;
+
+ if(( iRc = InsertNodeL( vpTag, npLeft, iSlotNo, cpKeyBuf, ulPtr )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+
+ // move right half off of left node to the right node
+ pSrc = npLeft->cpBlockData;
+ pSrc += ((lNewLeftKeyCnt * npTag->iKeyItemLen)+4);
+ pTrg = npRight->cpBlockData;
+ pTrg += 4;
+ iLen = lNewRightKeyCnt * npTag->iKeyItemLen;
+ memmove( pTrg, pSrc, (size_t) iLen );
+
+ // write the new key counts into the nodes
+ pTrg = npLeft->cpBlockData;
+ ePutInt32( pTrg, lNewLeftKeyCnt );
+ pTrg = npRight->cpBlockData;
+ ePutInt32( pTrg, lNewRightKeyCnt );
+
+ // write out the left block
+ if(( iRc = WriteBlock( npLeft->ulBlockNo, GetBlockSize(), npLeft->cpBlockData )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ // write out the right block
+ if(( iRc = WriteBlock( npRight->ulBlockNo, GetBlockSize(), npRight->cpBlockData )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxNdx::SplitNodeL() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+//! @brief UpdateTagKey
+/*!
+ This routine updates a key or a given tag.
+ The file header is considered to be the first 2048 bytes in the file.
+
+ \param cAction A - Add a key.<br>
+ D - Delete a key.<br>
+ R - Revise a key.<br>
+ \param vpTg - Pointer to tag.<br>
+ \param ulRecNo - Record number association with the action.<br>
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbIxNdx::UpdateTagKey( char cAction, void *vpTag, xbUInt32 ulRecNo ){
+
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ // ..xbNdxTag *npTag = (xbMdxTag *) vpTag;
+
+ try{
+ // save off any needed fileds for updating
+ // xbUInt32 ulTagSizeSave = mpTag->ulTagSize;
+ //xbUInt32 ulLeftChildSave = mpTag->ulLeftChild;
+ //xbUInt32 ulRightChildSave = mpTag->ulRightChild;
+
+
+ if( cAction == 'D' || cAction == 'R' ){
+// std::cout << "UpdateTagKey delete\n";
+ if(( iRc = DeleteKey( vpTag )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ }
+
+ if( cAction == 'A' || cAction == 'R' ){
+ if(( iRc = AddKey( vpTag, ulRecNo )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ }
+
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxNdx::UpdateTagKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+/***********************************************************************/
+//! @brief Write head block.
+/*!
+ Commit the index head node to disk.
+ \param iOpt 0 - Entire header.<br>
+ 1 - Update root block, number of blocks and seq number.<br>
+ 2 - Update sequence number only<br>
+ \returns <a href="xbretcod_8h.html">
+*/
+
+xbInt16 xbIxNdx::WriteHeadBlock( xbInt16 iOpt ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+
+ try{
+ if( iOpt == 2 ){
+
+ // increment the serial number
+ if( ndxTag->cSerNo >= 0 && ndxTag->cSerNo < 127 )
+ ndxTag->cSerNo++;
+ else
+ ndxTag->cSerNo = 0;
+
+ if(( iRc = xbFseek( 20, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ if(( iRc = xbFputc( ndxTag->cSerNo )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ } else if( iOpt == 1 ){
+ xbRewind();
+ char buf[8];
+ ePutUInt32( &buf[0], ndxTag->ulRootBlock );
+ ePutUInt32( &buf[4], ndxTag->ulTotalBlocks );
+ if(( iRc = xbFwrite( buf, 8, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ return WriteHeadBlock( 2 );
+
+ } else if ( iOpt == 0 ){
+
+ char buf[512];
+ memset( buf, 0x00, 512 );
+ ePutUInt32( &buf[0], ndxTag->ulRootBlock );
+ ePutUInt32( &buf[4], ndxTag->ulTotalBlocks );
+ buf[9] = ndxTag->cKeyType;
+ buf[11] = 0x1B;
+ ePutInt16( &buf[12], ndxTag->iKeyLen );
+ ePutInt16( &buf[14], ndxTag->iKeysPerBlock );
+ ePutInt16( &buf[16], ndxTag->iKeyType );
+ ePutInt16( &buf[18], ndxTag->iKeyItemLen );
+ if( ndxTag-> iUnique ) buf[23] = 0x01;
+
+ for( xbUInt32 i = 0; i < ndxTag->sKeyExpression.Len(); i++ )
+ buf[i+24] = ndxTag->sKeyExpression.GetCharacter(i+1);
+
+ xbRewind();
+ if(( iRc = xbFwrite( buf, 512, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ } else {
+ iRc = XB_INVALID_OPTION;
+ throw iRc;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxNdx::WriteHeadBlock() Exception Caught. Error Stop = [%d] iRc = [%d] option = [%d] ser=[%d]", iErrorStop, iRc, iOpt, ndxTag->cSerNo );
+ xbase->WriteLogMessage( sMsg );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+/***********************************************************************/
+} /* namespace */
+#endif /* XB_NDX_SUPPORT */
+
+
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/core/xbixtdx.cpp b/1Tdata/xbase/xbase64-4.1.4/src/core/xbixtdx.cpp
new file mode 100755
index 0000000..4137725
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/core/xbixtdx.cpp
@@ -0,0 +1,661 @@
+/* xbixtdx.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+This module handles temporary index logic
+
+*/
+
+#include "xbase.h"
+
+
+
+#ifdef XB_TDX_SUPPORT
+
+
+namespace xb{
+
+/************************************************************************/
+xbIxTdx::xbIxTdx( xbDbf *dbf ) : xbIxMdx( dbf ) {
+//xbIxMdx::xbIxMdx( xbDbf *dbf ) : xbIx( dbf ){
+
+// std::cout << "xbIxTdx::Constructor()\n";
+
+ // Init(); not needed, called in xbMdx
+
+
+}
+
+/************************************************************************/
+xbIxTdx::~xbIxTdx() {
+
+// std::cout << "xbIxTdx::Destructor()\n";
+
+}
+
+/***********************************************************************/
+xbInt16 xbIxTdx::Close(){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+
+std::cout << "xbIxTdx::Close\n";
+
+ try{
+ if(( iRc = xbIxMdx::Close()) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ if(( iRc = xbRemove()) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxTdx::Close() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+//! @brief Create new tag.
+/*!
+ This routine creates a new tag. When complete, sets the cur tag pointer to
+ the newly created tag.
+
+
+ \param sName Tag Name, including .MDX suffix
+ \param sKey Key Expression
+ \param sFilter Filter expression.
+ \param iDescending
+ \param iUnique xbtrue - Unique.<br>xbFalse - Not unique.
+ \param iOverLay xbTrue - Overlay if file already exists.<br>xbFalse - Don't overlay.
+ \param vpTag Output from method Pointer to vptag pointer.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+
+xbInt16 xbIxTdx::CreateTag( const xbString &sName, const xbString &sKey, const xbString &sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, void **vpTag ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbMdxTag *tte = NULL;
+
+ std::cout << "xbIxTdx::CreateTag()\n";
+
+
+ // std::cout << "CreateTag() name=[" << sName.Str() << "] key=[" << sKey.Str() << "] sFilter=[" << sFilter.Str() << "]\n";
+ // std::cout << "TagUseCnt = " << iTagUseCnt << std::endl;
+
+
+ try{
+ // verify room for new tag
+ if( !( iTagUseCnt < 47 )){
+ iErrorStop = 100;
+ iRc = XB_LIMIT_REACHED;
+ throw iRc;
+ }
+
+ // verify valid tag name
+ xbString sWorker = sName;
+ sWorker.Trim();
+ if( sWorker.Len() > 10 ){
+ iErrorStop = 110;
+ iRc = XB_INVALID_TAG;
+ throw iRc;
+ }
+
+ // verify tag not already defined
+ if( iTagUseCnt > 0 ){
+ if( GetTag( sWorker )){
+ iErrorStop = 120;
+ iRc = XB_INVALID_TAG;
+ throw iRc;
+ }
+ }
+
+ // allocate a tag structure here
+ if(( tte = (xbMdxTag *) calloc( 1, (size_t) sizeof( xbMdxTag ))) == NULL ){
+ iErrorStop = 130;
+ iRc = XB_NO_MEMORY;
+ throw iRc;
+ }
+ *vpTag = tte;
+ tte->sTagName = new xbString( sWorker );
+
+ //set up the key expression
+ sWorker = sFilter;
+ sWorker.Trim();
+ if( sWorker.Len() > 0 ){
+ if( sWorker.Len() == 0 || sWorker.Len() > 220 ){
+ iRc = XB_INVALID_TAG;
+ iErrorStop = 140;
+ throw iRc;
+ }
+ tte->sFiltExp = new xbString( sWorker );
+ tte->filter = new xbExp( dbf->GetXbasePtr());
+ if(( iRc = tte->filter->ParseExpression( dbf, sWorker )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+
+ // tte->filter->DumpTree( 1 );
+
+ if((tte->filter->GetReturnType()) != 'L' ){
+ iRc = XB_INVALID_TAG;
+ iErrorStop = 160;
+ throw iRc;
+ }
+ tte->cHasFilter = 0x01;
+ }
+
+ //set up the key expression
+ sWorker = sKey;
+ sWorker.Trim();
+ if( sWorker.Len() == 0 || sWorker.Len() > 100 ){
+ iRc = XB_INVALID_TAG;
+ iErrorStop = 170;
+ throw iRc;
+ }
+ tte->sKeyExp = new xbString( sWorker );
+ tte->exp = new xbExp( dbf->GetXbasePtr());
+ if(( iRc = tte->exp->ParseExpression( dbf, sWorker )) != XB_NO_ERROR ){
+ iErrorStop = 180;
+ throw iRc;
+ }
+
+ xbDate d;
+ d.Sysdate();
+ if( iTagUseCnt == 0 ){
+ // first tag, new mdx file
+ // create the file name
+
+ // create temp file
+ xbString sIxFileName;
+ if(( iRc = CreateUniqueFileName( GetTempDirectory(), "TDX", sIxFileName )) != XB_NO_ERROR ){
+ iErrorStop = 190;
+ throw iRc;
+ }
+
+ // copy the file name to the class variable
+ this->SetFileName( sIxFileName );
+ if( FileExists() && !iOverlay ){
+ iErrorStop = 200;
+ iRc = XB_FILE_EXISTS;
+ throw iRc;
+ }
+
+ // first tag, need to create the file
+ if(( iRc = xbFopen( "w+b", dbf->GetShareMode())) != XB_NO_ERROR ){
+ iErrorStop = 210;
+ throw iRc;
+ }
+ cVersion = 2;
+ cCreateYY = (char) d.YearOf() - 1900;
+ cCreateMM = (char) d.MonthOf();
+ cCreateDD = (char) d.DayOf( XB_FMT_MONTH );
+
+ GetFileNamePart( sFileName );
+ sFileName.ToUpperCase();
+
+ SetBlockSize( (xbUInt32) dbf->GetCreateMdxBlockSize());
+ iBlockFactor = GetBlockSize() / 512;
+
+ cProdIxFlag = 0; // MDX is 1
+ cTagEntryCnt = 48;
+ iTagLen = 32;
+ ulPageCnt = 4;
+ ulFirstFreePage = 0;
+ ulNoOfBlockAvail = 0;
+ cNextTag = 1;
+ c1B = 0x1B;
+ cUpdateYY = cCreateYY;
+ cUpdateMM = cCreateMM;
+ cUpdateDD = cCreateDD;
+
+ if(( iRc = WriteHeadBlock( 0 )) != XB_NO_ERROR ){
+ iErrorStop = 220;
+ throw iRc;
+ }
+ }
+
+ // populate the tag table entry structure
+ tte->ulTagHdrPageNo = ulPageCnt;
+ ulPageCnt += (xbUInt32) iBlockFactor;
+ tte->sTagName->strncpy( tte->cTagName, 10 );
+
+ // cKeyFmt is always 0x10;
+ // tested 2+ZIPCD CITY+STATE or just standalone field - always 0x10
+ tte->cKeyFmt = 0x10; // = CalcTagKeyFmt( *tte->exp );
+
+ switch( tte->exp->GetReturnType()){
+ case XB_EXP_CHAR:
+ tte->cKeyType = 'C';
+ tte->iKeyLen = tte->exp->GetResultLen();
+ tte->iSecKeyType = 0;
+ break;
+
+ case XB_EXP_NUMERIC:
+ tte->cKeyType = 'N';
+ tte->iKeyLen = 12;
+ tte->iSecKeyType = 0;
+ break;
+
+ case XB_EXP_DATE:
+ tte->cKeyType = 'D';
+ tte->iKeyLen = 8;
+ tte->iSecKeyType = 1;
+ break;
+
+ default:
+ iErrorStop = 200;
+ iRc = XB_INVALID_INDEX;
+ throw iRc;
+ }
+
+ tte->cpKeyBuf = (char *) malloc( (size_t) tte->iKeyLen + 1 );
+ tte->cpKeyBuf2 = (char *) malloc( (size_t) tte->iKeyLen + 1 );
+
+// if( 0 ){
+// printf( "ulTagHdrPageNo=[%d] cTagName=[%-11s], cLeftChild=[%d] cRightChild=[%d] cParent=[%d] cKeyType=[%c]\n\n",
+// tte->ulTagHdrPageNo, tte->cTagName, tte->cLeftChild, tte->cRightChild, tte->cParent, tte->cKeyType );
+// }
+
+ // write the new tte entry here
+ char tteBuf[21];
+ memset( tteBuf, 0x00, 21 );
+
+ ePutUInt32( &tteBuf[0], tte->ulTagHdrPageNo );
+ for( xbUInt32 l = 0; l < tte->sTagName->Len() && l < 10; l++ ){
+ tteBuf[l+4] = tte->sTagName->GetCharacter(l+1);
+ }
+ tteBuf[15] = tte->cKeyFmt;
+ tteBuf[19] = 0x02; // appears to always be a 0x02
+ tteBuf[20] = tte->cKeyType;
+
+ if(( iRc = xbFseek( (iTagUseCnt * 32) + 544, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 230;
+ throw iRc;
+ }
+ if(( iRc = xbFwrite( tteBuf, 21, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 240;
+ throw iRc;
+ }
+
+
+ // Begin Tag Header
+ tte->ulRootPage = ulPageCnt;
+ tte->ulTagSize = (xbUInt32) iBlockFactor;
+ ulPageCnt += 2;
+ tte->cKeyFmt2 = 0x10;
+ if( iDescending )
+ tte->cKeyFmt2 += 0x08;
+ if( iUnique ){
+ tte->cKeyFmt2 += 0x40;
+ tte->cUnique = 0x01;
+ }
+
+ tte->cTag11 = 0x1B; // always 0x1b ?
+ tte->cSerialNo = 0x01; // version incremented with each tag update
+ tte->ulLeftChild = tte->ulRootPage;
+ tte->ulRightChild = tte->ulRootPage;
+
+ tte->cTagYY = (char) d.YearOf() - 1900;
+ tte->cTagMM = (char) d.MonthOf();
+ tte->cTagDD = (char) d.DayOf( XB_FMT_MONTH );
+
+ tte->cKeyType2 = tte->cKeyType;
+ tte->iKeyItemLen = tte->iKeyLen + 4;
+ while(( tte->iKeyItemLen % 4 ) != 0 ) tte->iKeyItemLen++;
+
+ tte->iKeysPerBlock = (xbInt16) (GetBlockSize() - 12) / tte->iKeyItemLen;
+
+ //std::cout << "-------------- create tag info\n";
+ //std::cout << "keylen=" << tte->iKeyLen << " iKeyItemLen = " << tte->iKeyItemLen << " keys per block calc = " << tte->iKeysPerBlock << "\n";
+
+ tte->cKeyFmt3 = CalcTagKeyFmt( *tte->exp );
+
+// printf( "ulRootPage=[%d] cKeyFmt2=[%d] cKeyType2=[%d] iKeyLen=[%d]iKeysPerBlock=[%d]\n", tte->ulRootPage, tte->cKeyFmt2, tte->cKeyType2, tte->iKeyLen, tte->iKeysPerBlock );
+// printf( "iSecKeyType=[%d] iKeyItemLen=[%d] cUnique=[%d] \n", tte->iSecKeyType, tte->iKeyItemLen, tte->cUnique );
+
+ char *pBuf;
+ if(( pBuf = (char *) calloc( 1, (size_t) GetBlockSize())) == NULL ){
+ iErrorStop = 230;
+ iRc = XB_NO_MEMORY;
+ throw iRc;
+ }
+ char *wPtr;
+ wPtr = pBuf;
+ ePutUInt32( wPtr, tte->ulRootPage );
+
+ wPtr += 4;
+ ePutUInt32( wPtr, tte->ulTagSize );
+
+ wPtr += 4;
+ *wPtr = tte->cKeyFmt2;
+
+ wPtr++;
+ *wPtr = tte->cKeyType2;
+
+ wPtr += 2;
+ *wPtr = tte->cTag11;
+
+ wPtr += 1;
+ ePutInt16( wPtr, tte->iKeyLen );
+
+ wPtr += 2;
+ ePutInt16( wPtr, tte->iKeysPerBlock );
+
+ wPtr += 2;
+ ePutInt16( wPtr, tte->iSecKeyType );
+
+ wPtr += 2;
+ ePutInt16( wPtr, tte->iKeyItemLen );
+
+ wPtr += 2;
+ *wPtr = tte->cSerialNo;
+
+ wPtr += 3;
+ *wPtr = tte->cUnique;
+
+ wPtr++;
+ for( xbUInt32 l = 0; l < tte->sKeyExp->Len(); l++ )
+ *wPtr++ = tte->sKeyExp->GetCharacter(l+1);
+
+ wPtr = pBuf;
+
+ tte->cHasKeys = 0x00;
+ pBuf[246] = tte->cHasKeys;
+
+ wPtr += 248;
+ ePutUInt32( wPtr, tte->ulLeftChild );
+ wPtr += 4;
+ ePutUInt32( wPtr, tte->ulRightChild );
+
+ pBuf[257] = tte->cTagYY;
+ pBuf[258] = tte->cTagMM;
+ pBuf[259] = tte->cTagDD;
+ pBuf[480] = tte->cKeyFmt3;
+
+ if( sFilter.Len() > 0 ){
+ pBuf[245] = tte->cHasFilter;
+ wPtr = pBuf;
+ wPtr += 762;
+ for( xbUInt32 l = 0; l < sFilter.Len(); l++ )
+ *wPtr++ = sFilter.GetCharacter(l+1);
+ }
+
+ if(( iRc = xbFseek( tte->ulTagHdrPageNo * 512, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 250;
+ throw iRc;
+ }
+
+ if(( iRc = xbFwrite( pBuf, GetBlockSize(), 1 )) != XB_NO_ERROR ){
+ iErrorStop = 260;
+ throw iRc;
+ }
+
+ memset( pBuf, 0x00, GetBlockSize() );
+ if(( iRc = xbFwrite( pBuf, GetBlockSize(), 1 )) != XB_NO_ERROR ){
+ iErrorStop = 270;
+ throw iRc;
+ }
+
+ iTagUseCnt++;
+ cNextTag++;
+
+
+ if(( iRc = WriteHeadBlock( 1 )) != XB_NO_ERROR ){
+ iErrorStop = 280;
+ throw iRc;
+ }
+
+ // add the new entry to the end of the list of tags
+ if( mdxTagTbl == NULL ){
+ mdxTagTbl = tte;
+ } else {
+ xbMdxTag *tteL = mdxTagTbl;
+ while( tteL->next )
+ tteL = tteL->next;
+ tteL->next = tte;
+ }
+
+ /* update the btree pointers */
+ CalcBtreePointers();
+ char bBuf[3];
+ xbMdxTag *tteWork = mdxTagTbl;
+
+ if(( iRc = xbFseek( 560, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 290;
+ throw iRc;
+ }
+ while( tteWork ){
+ bBuf[0] = tteWork->cLeftChild;
+ bBuf[1] = tteWork->cRightChild;
+ bBuf[2] = tteWork->cParent;
+
+ if(( iRc = xbFwrite( bBuf, 3, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 300;
+ throw iRc;
+ }
+ if( tteWork->next ){
+ if(( iRc = xbFseek( 29, SEEK_CUR )) != XB_NO_ERROR ){
+ iErrorStop = 310;
+ throw iRc;
+ }
+ }
+ tteWork = tteWork->next;
+ }
+ free( pBuf );
+
+ }
+
+ catch (xbInt16 iRc ){
+ if( tte ){
+ if( tte->cpKeyBuf )
+ free( tte->cpKeyBuf );
+ if( tte->cpKeyBuf2 )
+ free( tte->cpKeyBuf2 );
+ if( tte->exp )
+ delete tte->exp;
+ if( tte->filter )
+ delete tte->filter;
+ if( tte->sKeyExp )
+ delete tte->sKeyExp;
+ if( tte->sFiltExp )
+ delete tte->sFiltExp;
+ if( tte->sTagName )
+ delete tte->sTagName;
+ free( tte );
+ }
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxTdx::CreateTag() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+
+ return iRc;
+};
+
+/***********************************************************************/
+//! @brief Delete a given tag
+/*!
+ \param vpTag Input tag ptr for tag to be deleted<br>
+ \returns <a href="xbretcod_8h.html">Return Codes</a><br>
+ 1 = Deleted entire MDX file, only had one tag
+
+*/
+
+xbInt16 xbIxTdx::DeleteTag( void *vpTag ){
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ xbMdxTag * mpTag = (xbMdxTag *) vpTag;
+ xbIxNode *n = NULL;
+ xbBool bLoneTag = xbFalse;
+
+ try{
+
+ if( !vpTag ){
+ iErrorStop = 100;
+ iRc = XB_INVALID_TAG;
+ throw iRc;
+ }
+
+ // char cSaveHasFilter = mpTag->cHasFilter;
+ // char cSaveKeyFmt3 = mpTag->cKeyFmt3;
+ // xbString sSaveKey = mpTag->sKeyExp->Str();
+
+ if( iTagUseCnt == 1 ){
+ // std::cout << "xbIxTdx::DeleteTag - one tag found, delete the mdx file\n";
+
+ // close the mdx file
+ if(( iRc = xbIxMdx::Close()) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+
+ // delete the file
+ xbRemove();
+
+ // init variables - needed?
+ // Init();
+ // iRc > 0 defines this as the only tag in an MDX file, MDX file deleted.
+ // signals to the calling process to drop the MDX file from the
+ // list of updateable indices.
+ bLoneTag = xbTrue;
+
+ } else {
+
+ // harvest tag nodes
+
+ if(( iRc = HarvestTagNodes( mpTag, xbTrue )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+
+ // remove an entry from tag table
+ // which tag is this?
+ xbInt16 iTagNo = 0;
+ xbMdxTag *mp = mdxTagTbl;
+ xbMdxTag *mpPrev = NULL;
+ while( mp && mp->ulTagHdrPageNo != mpTag->ulTagHdrPageNo ){
+ iTagNo++;
+ mpPrev = mp;
+ mp = mp->next;
+ }
+
+ // remove it from the linked list of tags
+ if( !mpPrev ){
+ mdxTagTbl = mp->next;
+ } else {
+ mpPrev->next = mp->next;
+ }
+ if( mp ){
+ if( mp->cpKeyBuf ) free( mp->cpKeyBuf );
+ if( mp->cpKeyBuf2 ) free( mp->cpKeyBuf2 );
+ if( mp->exp ) delete mp->exp;
+ if( mp->filter ) delete mp->filter;
+ if( mp->sKeyExp ) delete mp->sKeyExp;
+ if( mp->sFiltExp ) delete mp->sFiltExp;
+ if( mp->sTagName ) delete mp->sTagName;
+ free( mp );
+ }
+ xbInt32 iTarg = iTagNo * 32;
+ xbInt32 iSrc = iTarg + 32;
+ xbInt32 iLen = (iTagUseCnt - iTagNo) * 32;
+
+ if(( iRc = xbFseek( 544, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+ char Buf[1536]; // 47 tags + 1 in case tag #47 is deleted
+ memset( Buf, 0x00, 1536 );
+ if(( iRc = xbFread( Buf, 1504, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 170;
+ throw iRc;
+ }
+ char *pTrg = Buf;
+ pTrg += iTarg;
+ char *pSrc = Buf;
+ pSrc += iSrc;
+ for( xbInt32 i = 0; i < iLen; i++ )
+ *pTrg++ = *pSrc++;
+
+ if(( iRc = xbFseek( 544, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 180;
+ throw iRc;
+ }
+ if(( iRc = xbFwrite( Buf, 1504, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 190;
+ throw iRc;
+ }
+
+ iTagUseCnt--;
+ if(( iRc = WriteHeadBlock( 1 )) != XB_NO_ERROR ){
+ iErrorStop = 200;
+ throw iRc;
+ }
+
+ // update the btree pointers
+ CalcBtreePointers();
+ char bBuf[3];
+ xbMdxTag *tteWork = mdxTagTbl;
+
+ if(( iRc = xbFseek( 560, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 210;
+ throw iRc;
+ }
+ while( tteWork ){
+ bBuf[0] = tteWork->cLeftChild;
+ bBuf[1] = tteWork->cRightChild;
+ bBuf[2] = tteWork->cParent;
+
+ if(( iRc = xbFwrite( bBuf, 3, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 320;
+ throw iRc;
+ }
+ if( tteWork->next ){
+ if(( iRc = xbFseek( 29, SEEK_CUR )) != XB_NO_ERROR ){
+ iErrorStop = 330;
+ throw iRc;
+ }
+ }
+ tteWork = tteWork->next;
+ }
+ }
+
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxTdx::DeleteTag() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ if( n )
+ free( n );
+ }
+ if( bLoneTag && !iRc )
+ return 1;
+ else
+ return iRc;
+}
+
+/************************************************************************/
+
+
+
+/************************************************************************/
+} /* namespace */
+#endif /* XB_TDX_SUPPORT */ \ No newline at end of file
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/core/xblog.cpp b/1Tdata/xbase/xbase64-4.1.4/src/core/xblog.cpp
new file mode 100755
index 0000000..9443006
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/core/xblog.cpp
@@ -0,0 +1,227 @@
+/* xblog.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+
+#include "xbase.h"
+//#include <time.h>
+
+#ifdef XB_LOGGING_SUPPORT
+
+namespace xb{
+
+/******************************************************************************/
+//! @brief Constructor.
+xbLog::xbLog() : xbFile( NULL ){
+
+
+ // std::cout << "xbLog::xbLog(1) Directory = [" << GetLogDirectory() << "]\n";
+ // std::cout << "xbLog::xbLog(1) Name = [" << GetLogFileName() << "]\n";
+
+ SetDirectory( GetLogDirectory());
+ SetFileName ( GetLogFileName());
+
+ bLoggingStatus = xbFalse;
+ lLogSize = 100000;
+
+ #ifdef XB_LOCKING_SUPPORT
+ iShareMode = XB_MULTI_USER;
+ #else
+ iShareMode = XB_SINGLE_USER;
+ #endif
+}
+/******************************************************************************/
+//! @brief Constructor.
+/*!
+ \param sLogFileName - Log file name.
+*/
+xbLog::xbLog( const xbString & sLogFileName ) : xbFile( NULL ){
+ if( sLogFileName.GetPathSeparator())
+ SetFqFileName( sLogFileName ); // file name includes a path
+ else
+ SetFileName( sLogFileName ); // no file path
+
+ bLoggingStatus = xbFalse;
+ lLogSize = 100000;
+
+ #ifdef XB_LOCKING_SUPPORT
+ iShareMode = XB_MULTI_USER;
+ #else
+ iShareMode = XB_SINGLE_USER;
+ #endif
+
+}
+/******************************************************************************/
+//! @brief Deconstructor.
+xbLog::~xbLog(){
+ xbFclose();
+}
+/******************************************************************************/
+//! @brief Get the current log status
+/*!
+ \returns xbTrue - Logging turned on.<br>xbFalse - Logging turned off.
+*/
+xbBool xbLog::LogGetStatus(){
+ return bLoggingStatus;
+}
+/******************************************************************************/
+//! @brief Close the logfile.
+/*!
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbLog::LogClose(){
+ return xbFclose();
+}
+/******************************************************************************/
+//! @brief Set maximum log file size.
+/*!
+ \param lSize - New maximum log file size.
+ \returns void
+*/
+void xbLog::LogSetLogSize( size_t lSize ){
+ lLogSize = lSize;
+}
+/******************************************************************************/
+//! @brief Set log status.
+/*!
+ \param bStatus xbTrue - Turn logging on.<br>xbFalse - Turn logging off.
+ \returns void
+*/
+void xbLog::LogSetStatus( xbBool bStatus ){
+ if( bLoggingStatus && !bStatus )
+ LogClose();
+ bLoggingStatus = bStatus;
+}
+/******************************************************************************/
+//! @brief Open the logfile.
+/*!
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbLog::LogOpen(){
+ xbInt16 rc;
+
+// std::cout << "*****\nxbLog::LogOpen(1) GetLogDirectory = " << GetLogDirectory() << "\n";
+// std::cout << "xbLog::LogOpen(1) GetLogFileName = " << GetLogFileName() << "\n";
+// std::cout << "xbLog::GetFqFileName(1) = " << GetFqFileName() << "\n\n";
+
+ // 4.1.3 added next two lines for dynamic log file name changing
+ SetDirectory( GetLogDirectory());
+ SetFileName ( GetLogFileName());
+
+// std::cout << "*****\nxbLog::LogOpen(2) GetLogDirectory = " << GetLogDirectory() << "\n";
+// std::cout << "xbLog::LogOpen(2) GetLogFileName = " << GetLogFileName() << "\n";
+// std::cout << "xbLog::GetFqFileName(2) = " << GetFqFileName() << "\n\n";
+
+ if(( rc = xbFopen( "a", iShareMode )) != XB_NO_ERROR )
+ return rc;
+ xbFTurnOffFileBuffering();
+ return XB_NO_ERROR;
+}
+/******************************************************************************/
+//! @brief Write a logfile message.
+/*!
+ \param sLogEntryData - Message to write to the logfile.
+ \param iOutputOption 0 - Write to logfile.<br>
+ 1 - Write to stdout.<br>
+ 2 - Write to both logfile and stdout.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbLog::LogWrite( const xbString &sLogEntryData, xbInt16 iOutputOption ){
+
+ if( bLoggingStatus == xbFalse ){ // logging turned off
+ return XB_NO_ERROR;
+ }
+ xbInt16 rc = 0;
+ if( iOutputOption != 1 && !FileIsOpen() ){
+ if(( rc = LogOpen()) != XB_NO_ERROR ){
+ fprintf( stderr, "Error - cant write to logfile\n" );
+ return rc;
+ }
+ }
+ if( iOutputOption != 1 && lLogSize < xbFtell()){
+ xbFputs( "Swapping to next log file" );
+ xbFclose();
+ xbString sBackupName;
+ sBackupName.Sprintf( "%s.bak", GetFqFileName().Str());
+ if( FileExists( sBackupName ))
+ xbRemove( sBackupName );
+
+ xbRename( GetFqFileName(), sBackupName );
+ xbFopen( "a", iShareMode );
+ }
+ xbString sTimeStamp;
+ xbString sFled; // formatted log entry data
+
+ if( iOutputOption != 1 ){
+ #ifdef HAVE__LOCALTIME64_S_F
+ __time64_t timer;
+ struct tm tb;
+ _time64( &timer );
+ _localtime64_s( &tb, &timer );
+ tb.tm_year += 1900;
+ tb.tm_mon++;
+ sTimeStamp.Sprintf( "%4d-%02d-%02d %02d:%02d:%02d", tb.tm_year, tb.tm_mon, tb.tm_mday, tb.tm_hour, tb.tm_min, tb.tm_sec );
+ #else
+ time_t timer;
+ struct tm *tb;
+ timer = time( NULL );
+ tb = localtime( &timer );
+ tb->tm_year += 1900;
+ tb->tm_mon++;
+ sTimeStamp.Sprintf( "%4d-%02d-%02d %02d:%02d:%02d", tb->tm_year, tb->tm_mon, tb->tm_mday, tb->tm_hour, tb->tm_min, tb->tm_sec );
+ #endif
+ sFled.Sprintf( "%s - %s\n", sTimeStamp.Str(), sLogEntryData.Str() );
+ }
+
+ switch( iOutputOption ){
+ case 0:
+ xbFputs( sFled );
+ break;
+ case 1:
+ std::cout << sLogEntryData << std::endl;
+ break;
+ case 2:
+ xbFputs( sFled );
+ std::cout << sLogEntryData << std::endl;
+ break;
+ }
+ return XB_NO_ERROR;
+}
+/******************************************************************************/
+//! @brief Write bytes to logfile.
+/*!
+ \param ulByteCnt - Number of bytes to write to logfile.
+ \param p - Pointer to data to write to logfile.
+ \returns XB_NO_ERROR
+*/
+
+xbInt16 xbLog::LogWriteBytes( xbUInt32 ulByteCnt, const char *p ){
+
+ if( bLoggingStatus == xbFalse ) // logging turned off
+ return XB_NO_ERROR;
+ const char *p2 = p;
+ xbFputc( '[' );
+ for( xbUInt32 l = 0; l < ulByteCnt; l++ )
+ xbFputc( *p2++ );
+ xbFputc( ']' );
+ return XB_NO_ERROR;
+}
+/******************************************************************************/
+} // namespace
+#endif // XB_LOGGING_ON
+
+
+
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/core/xbmemo.cpp b/1Tdata/xbase/xbase64-4.1.4/src/core/xbmemo.cpp
new file mode 100755
index 0000000..406a77d
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/core/xbmemo.cpp
@@ -0,0 +1,219 @@
+/* xbmemo.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+ Base memo class
+*/
+
+#include "xbase.h"
+
+#ifdef XB_MEMO_SUPPORT
+
+namespace xb{
+
+/***********************************************************************/
+//! @brief Class Constructor.
+/*!
+ \param dbf Pointer to dbf construct.
+ \param sFileName Memo file name.
+*/
+
+xbMemo::xbMemo( xbDbf * dbf, xbString const &sFileName ) : xbFile( dbf->GetXbasePtr() ) {
+ this->dbf = dbf; /* pointer to the associated dbf class instance */
+ // xbase = dbf->GetXbasePtr(); /* pointer to the engine */
+ SetDirectory( dbf->GetDirectory());
+ SetFileName( sFileName );
+ mbb = NULL;
+ #ifdef XB_LOCKING_SUPPORT
+ bFileLocked = xbFalse;
+ #endif
+}
+/***********************************************************************/
+//! @brief Class Destructor.
+xbMemo::~xbMemo(){
+ if( mbb )
+ free( mbb );
+}
+/***********************************************************************/
+//! @brief Calculate the last data block number.
+/*!
+ \param ulLastDataBlock Output - Last used block number in the file.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbMemo::CalcLastDataBlock( xbUInt32 & ulLastDataBlock ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ if(( iRc = xbFseek( 0, SEEK_END )) != XB_NO_ERROR )
+ return iRc;
+
+ ulLastDataBlock = (xbUInt32) xbFtell() / (xbUInt32) GetBlockSize();
+ return XB_NO_ERROR;
+}
+/***********************************************************************/
+//! @brief Close the memo file.
+/*!
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbMemo::CloseMemoFile(){
+
+ if( mbb ){
+ free( mbb );
+ mbb = NULL;
+ }
+ return xbFclose();
+}
+
+
+/***********************************************************************/
+//! @brief Get memo file type.
+/*!
+ \returns 3 - Version 3 memo file.<br>
+ 4 - Version 4 memo file.
+*/
+xbInt16 xbMemo::GetMemoFileType(){
+ return iMemoFileType;
+}
+
+/***********************************************************************/
+//! @brief Get next block available from file header.
+/*!
+ \param ulBlockNo Output - Next block number for appending data to memo file.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbMemo::GetHdrNextBlock( xbUInt32 & ulBlockNo ){
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ try{
+ if(( iRc = ReadDbtHeader( 0 )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ ulBlockNo = ulHdrNextBlock;
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbmemo::GetNextAvailableBlock() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+/***********************************************************************/
+#ifdef XB_LOCKING_SUPPORT
+//! @brief Lock memo file
+/*!
+
+ \param iLockFunction XB_LOCK<br>XB_UNLOCK
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbMemo::LockMemo( xbInt16 iLockFunction ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+
+ try{
+ if( iLockFunction == XB_LOCK ){
+
+ if( bFileLocked ) // already locked
+ return XB_NO_ERROR;
+
+ if( dbf->GetLockFlavor() == LK_DBASE ){
+ iRc = xbLock( XB_LOCK, LK4026531838, 1 );
+ if( iRc != XB_NO_ERROR ){
+ if( iRc == XB_LOCK_FAILED )
+ return iRc;
+ else {
+ iErrorStop = 100;
+ throw iRc;
+ }
+ } else {
+ bFileLocked = xbTrue;
+ }
+ }
+ } else if( iLockFunction == XB_UNLOCK ){
+
+ if( !bFileLocked ) // already unlocked
+ return XB_NO_ERROR;
+
+ if( dbf->GetLockFlavor() == LK_DBASE ){
+ iRc = xbLock( XB_UNLOCK, LK4026531838, 1 );
+ if( iRc != XB_NO_ERROR ){
+ if( iRc == XB_LOCK_FAILED )
+ return iRc;
+ else {
+ iErrorStop = 110;
+ throw iRc;
+ }
+ } else {
+ bFileLocked = xbFalse;
+ }
+ }
+ } else {
+ iErrorStop = 120;
+ iRc = XB_INVALID_OPTION;
+ throw iRc;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbmemo::LockMemoFile() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+//! @brief Get memo file lock status.
+/*!
+ \returns xbTrue - Memo file is locked.<br>
+ xbFalse - Memo file is not locked.
+*/
+xbBool xbMemo::GetMemoLocked() const {
+ return bFileLocked;
+}
+#endif
+
+/***********************************************************************/
+//! @brief Update Next Node number in file header
+/*!
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbMemo::UpdateHeadNextNode(){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ try{
+ char buf[4];
+ ePutUInt32( buf, ulHdrNextBlock );
+ if(( iRc = xbFseek( 0, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ if(( iRc = xbFwrite( &buf, 4, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbmemo::UpdateHeadeNextNode() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+/***********************************************************************/
+} /* namespace */
+#endif /* XB_MEMO_SUPPORT */
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/core/xbmemo3.cpp b/1Tdata/xbase/xbase64-4.1.4/src/core/xbmemo3.cpp
new file mode 100755
index 0000000..767e9d2
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/core/xbmemo3.cpp
@@ -0,0 +1,585 @@
+/* xbmemo3.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+ This class is used for support dBASE V3 memo files
+
+*/
+
+#include "xbase.h"
+
+#ifdef XB_MEMO_SUPPORT
+#ifdef XB_DBF3_SUPPORT
+
+namespace xb{
+
+/***********************************************************************/
+//! @brief Class Constructor.
+/*!
+ \param dbf Pointer to dbf instance.
+ \param sFileName Memo file name.
+*/
+xbMemoDbt3::xbMemoDbt3( xbDbf * dbf, xbString const & sFileName ) : xbMemo( dbf, sFileName ){
+ iMemoFileType = 3;
+ SetBlockSize( 512 );
+}
+
+/***********************************************************************/
+//! @brief Class Deconstructor.
+xbMemoDbt3::~xbMemoDbt3(){}
+
+/***********************************************************************/
+//! @brief Abort.
+/*!
+ Abort any pending updates to the memo file.
+ \returns XB_NO_ERROR
+*/
+xbInt16 xbMemoDbt3::Abort(){
+ return XB_NO_ERROR;
+}/***********************************************************************/
+//! @brief Commit changes to memo file.
+/*!
+ \returns XB_NO_ERROR.
+*/
+xbInt16 xbMemoDbt3::Commit(){
+ return XB_NO_ERROR;
+}
+/***********************************************************************/
+//! @brief Create memo file.
+/*!
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbMemoDbt3::CreateMemoFile(){
+
+ xbInt16 rc = XB_NO_ERROR;
+ char cBuf[4];
+ if(( rc = xbFopen( "w+b", dbf->GetShareMode())) != XB_NO_ERROR )
+ return rc;
+ ulHdrNextBlock = 1L;
+ ePutUInt32( cBuf, ulHdrNextBlock );
+ if(( rc = xbFwrite( cBuf, 4, 1 ))!= XB_NO_ERROR ){
+ xbFclose();
+ return rc;
+ }
+ for(int i = 0; i < 12; i++ )
+ xbFputc( 0x00 );
+ xbFputc( 0x03 );
+ for(int i = 0; i < 495; i++ )
+ xbFputc( 0x00 );
+ if(( mbb = (void *) malloc( 512 )) == NULL ){
+ xbFclose();
+ return XB_NO_MEMORY;
+ }
+ return XB_NO_ERROR;
+}
+/***********************************************************************/
+#ifdef XB_DEBUG_SUPPORT
+//! @brief Dump memo file header.
+/*!
+ \returns XB_NO_ERROR
+*/
+xbInt16 xbMemoDbt3::DumpMemoFreeChain() {
+ std::cout << "Xbase version 3 file - no free block chain" << std::endl;
+ return XB_NO_ERROR;
+}
+#endif // XB_DEBUG_SUPPORT
+
+//! @brief Dump memo file header.
+/*!
+ \returns XB_NO_ERROR
+*/
+xbInt16 xbMemoDbt3::DumpMemoHeader(){
+ xbInt16 rc = XB_NO_ERROR;
+ xbUInt64 stFileSize;
+ if(( rc = ReadDbtHeader( 1 )) != XB_NO_ERROR )
+ return rc;
+ GetFileSize( stFileSize );
+ std::cout << "Version 3 Memo Header Info" << std::endl;
+ std::cout << "Memo File Name = " << GetFqFileName() << std::endl;
+ std::cout << "Next Available Block = " << ulHdrNextBlock << std::endl;
+ std::cout << "Memo File Version = " << (xbInt16) cVersion << " (";
+ BitDump( cVersion );
+ std::cout << ")" << std::endl;
+ std::cout << "Block Size = " << GetBlockSize() << std::endl;
+ std::cout << "File Size = " << stFileSize << std::endl;
+ std::cout << "Block Count = " << stFileSize / GetBlockSize() << std::endl;
+ return XB_NO_ERROR;
+}
+/***********************************************************************/
+//! @brief Get a memo field for a given field number.
+/*!
+ \param iFieldNo Field number to retrieve data for.
+ \param sMemoData Output - string containing memo field data.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbMemoDbt3::GetMemoField( xbInt16 iFieldNo, xbString & sMemoData ){
+
+ xbInt16 iErrorStop = 0;
+ xbInt16 rc = XB_NO_ERROR;
+ xbUInt32 ulScnt;
+ char *sp, *spp;
+ xbUInt32 ulBlockNo;
+ xbBool bDone = xbFalse;
+ sMemoData = "";
+ try{
+
+ if(( rc = dbf->GetULongField( iFieldNo, ulBlockNo )) < XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw rc;
+ }
+
+ if( ulBlockNo == 0L ){
+ sMemoData = "";
+ return XB_NO_ERROR;
+ }
+ spp = NULL;
+
+ while( !bDone ){
+ if(( rc = ReadBlock( ulBlockNo++, GetBlockSize(), mbb )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw rc;
+ }
+ ulScnt = 0;
+ sp = (char *) mbb;
+ while( ulScnt < 512 && !bDone ){
+ if( *sp == 0x1a && *spp == 0x1a )
+ bDone = xbTrue;
+ else{
+ ulScnt++; spp = sp; sp++;
+ }
+ }
+ sMemoData.Append( (char *) mbb, ulScnt );
+ }
+ sMemoData.ZapTrailingChar( 0x1a );
+ }
+ catch (xbInt16 rc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbMemoDbt3::GetMemoField() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( rc ));
+ }
+ return rc;
+}
+/***********************************************************************/
+//! @brief Get a memo field length for a given field number.
+/*!
+ \param iFieldNo Field number to retrieve data for.
+ \param ulFieldLen Output - length of memo field data.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbMemoDbt3::GetMemoFieldLen( xbInt16 iFieldNo, xbUInt32 & ulFieldLen ){
+
+ xbInt16 iErrorStop = 0;
+ xbInt16 rc = XB_NO_ERROR;
+ xbInt16 iScnt;
+ char *sp, *spp;
+ xbUInt32 ulBlockNo;
+ xbInt16 iNotDone;
+ try{
+ if(( rc = dbf->GetULongField( iFieldNo, ulBlockNo )) < XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw rc;
+ }
+ if( ulBlockNo == 0 ){
+ ulFieldLen = 0;
+ return XB_NO_ERROR;
+ }
+ ulFieldLen = 0L;
+ spp = NULL;
+ iNotDone = 1;
+ while( iNotDone ){
+ if(( rc = ReadBlock( ulBlockNo++, GetBlockSize(), mbb )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw rc;
+ }
+ iScnt = 0;
+ sp = (char *) mbb;
+ while( iScnt < 512 && iNotDone ){
+ if( *sp == 0x1a && *spp == 0x1a )
+ iNotDone = 0;
+ else{
+ ulFieldLen++; iScnt++; spp = sp; sp++;
+ }
+ }
+ }
+ if( ulFieldLen > 0 ) ulFieldLen--;
+ }
+ catch (xbInt16 rc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbMemoDbt3::GetMemoFieldLen() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( rc ));
+ }
+ return rc;
+}
+/***********************************************************************/
+//! @brief Open memo file.
+/*!
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbMemoDbt3::OpenMemoFile() {
+ xbInt16 rc = XB_NO_ERROR;
+ if(( rc = xbFopen( dbf->GetOpenMode(), dbf->GetShareMode())) != XB_NO_ERROR )
+ return rc;
+ if(( mbb = (void *) malloc( 512 )) == NULL ){
+ xbFclose();
+ return XB_NO_MEMORY;
+ }
+ return XB_NO_ERROR;
+}
+/***********************************************************************/
+//! @brief Pack memo file.
+/*!
+ This routine frees up any unused blocks in the file resulting from field updates.
+ Version 3 memo files do not reclaim unused space (Version 4 files do).
+ This routine cleans up the unused space.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbMemoDbt3::PackMemo( void (*memoStatusFunc ) ( xbUInt32 ulItemNum, xbUInt32 ulNumItems ))
+{
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ char * cBlock = NULL;
+
+ #ifdef XB_LOCKING_SUPPORT
+ xbBool bTableLocked = xbFalse;
+ xbBool bMemoLocked = xbFalse;
+ #endif
+
+ try{
+
+ #ifdef XB_LOCKING_SUPPORT
+ if( dbf->GetAutoLock() && !dbf->GetTableLocked() ){
+ if(( iRc = dbf->LockTable( XB_LOCK )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ } else {
+ bTableLocked = xbTrue;
+ }
+ if(( iRc = LockMemo( XB_LOCK )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ } else {
+ bMemoLocked = xbTrue;
+ }
+ }
+ #endif
+
+ // create temp file
+ xbString sTempMemoName;
+ //if(( iRc = CreateUniqueFileName( GetDirectory(), "dbt", sTempMemoName )) != XB_NO_ERROR ){
+ if(( iRc = CreateUniqueFileName( GetTempDirectory(), "DBT", sTempMemoName )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+
+ xbMemoDbt3 *pMemo = new xbMemoDbt3( dbf, sTempMemoName );
+ if(( iRc = pMemo->CreateMemoFile()) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ // for dbase III, block size is always 512, don't need to reset it
+ // for each record in dbf
+ xbUInt32 ulRecCnt;
+ if(( iRc = dbf->GetRecordCnt( ulRecCnt )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+ xbInt32 lFldCnt = dbf->GetFieldCnt();
+ char cFldType;
+ xbString sMemoFldData;
+
+ for( xbUInt32 ulI = 1; ulI <= ulRecCnt; ulI++ ){
+
+ if(( iRc = dbf->GetRecord( ulI )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+ if( (void *) memoStatusFunc )
+ (*memoStatusFunc) ( ulI, ulRecCnt );
+
+ // for each memo field
+ for( xbInt32 lFc = 0; lFc < lFldCnt; lFc++ ){
+ if(( iRc = dbf->GetFieldType( lFc, cFldType )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+
+
+ if( cFldType == 'M' ){
+ // copy it to work field
+ if(( iRc = dbf->GetMemoField( lFc, sMemoFldData )) != XB_NO_ERROR ){
+ iErrorStop = 170;
+ throw iRc;
+ }
+ // write it to new field
+ if(( iRc = pMemo->UpdateMemoField( lFc, sMemoFldData )) != XB_NO_ERROR ){
+ iErrorStop = 180;
+ throw iRc;
+ }
+ }
+ }
+ }
+
+ //copy target back to source
+ xbUInt32 ulBlkSize = GetBlockSize();
+ xbUInt64 ullFileSize;
+ if(( iRc = pMemo->GetFileSize( ullFileSize )) != XB_NO_ERROR ){
+ iErrorStop = 190;
+ throw iRc;
+ }
+ // file size should be evenly divisible by block size
+ xbUInt32 ulBlkCnt;
+
+ if( ullFileSize % ulBlkSize ){
+ iErrorStop = 200;
+ throw iRc;
+ } else {
+ ulBlkCnt = (xbUInt32) (ullFileSize / ulBlkSize);
+ }
+ if(( iRc = xbTruncate( 0 )) != XB_NO_ERROR ){
+ iErrorStop = 210;
+ throw iRc;
+ }
+
+ if(( cBlock = (char *) malloc( (size_t) ulBlkSize )) == NULL ){
+ iErrorStop = 220;
+ throw iRc;
+ }
+
+ // can't rename files in a multiuser, cross platform environment, causes issues
+ // copy work table back to source table
+ for( xbUInt32 ulBc = 0; ulBc < ulBlkCnt; ulBc++ ){
+ if(( iRc = pMemo->ReadBlock( ulBc, ulBlkSize, cBlock )) != XB_NO_ERROR ){
+ iErrorStop = 230;
+ throw iRc;
+ }
+ if(( iRc = WriteBlock( ulBc, ulBlkSize, cBlock )) != XB_NO_ERROR ){
+ iErrorStop = 240;
+ throw iRc;
+ }
+ }
+
+ //close and delete target
+ if(( iRc = pMemo->xbFclose()) != XB_NO_ERROR ){
+ iErrorStop = 250;
+ throw iRc;
+ }
+
+ if(( iRc = pMemo->xbRemove()) != XB_NO_ERROR ){
+ iErrorStop = 260;
+ throw iRc;
+ }
+ free( cBlock );
+ delete pMemo;
+ }
+ catch (xbInt16 iRc ){
+ free( cBlock );
+ xbString sMsg;
+ sMsg.Sprintf( "xbMemoDbt3::PackMemo() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+
+ #ifdef XB_LOCKING_SUPPORT
+ if( bTableLocked )
+ dbf->LockTable( XB_UNLOCK );
+ if( bMemoLocked )
+ LockMemo( XB_UNLOCK );
+ #endif
+ return iRc;
+}
+
+/***********************************************************************/
+//! @brief Read dbt header file.
+/*!
+ \param iOption 0 --> read only first four bytes<br>
+ 1 --> read the entire thing
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbMemoDbt3::ReadDbtHeader( xbInt16 iOption ){
+ char *p;
+ char MemoBlock[20];
+ xbInt16 rc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbUInt32 ulReadSize;
+
+ try{
+ if( !FileIsOpen() ){
+ iErrorStop = 100;
+ rc = XB_NOT_OPEN;
+ throw rc;
+ }
+ if( iOption == 0 )
+ ulReadSize = 4;
+ else{
+ xbUInt64 stFileSize = 0;
+ if(( rc = GetFileSize( stFileSize )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw rc;
+ }
+ if( stFileSize < 4 ){
+ iErrorStop = 120;
+ rc = XB_INVALID_BLOCK_NO;
+ throw rc;
+ }
+ else if( stFileSize > 20 )
+ ulReadSize = 130;
+ else
+ ulReadSize = 4;
+ }
+ if( xbFseek( 0, SEEK_SET )){
+ iErrorStop = 140;
+ rc = XB_SEEK_ERROR;
+ throw rc;
+ }
+ if(( xbFread( &MemoBlock, ulReadSize, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ rc = XB_READ_ERROR;
+ throw rc;
+ }
+ p = MemoBlock;
+ ulHdrNextBlock = eGetUInt32( p );
+
+ if( iOption == 0)
+ return XB_NO_ERROR;
+
+ if( ulReadSize >= 20 ){
+ p+=16;
+ cVersion = *p;
+ }
+ }
+ catch (xbInt16 rc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbMemoDbt3::ReadDbtHeader() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( rc ));
+ }
+ return rc;
+}
+/***********************************************************************/
+//! @brief Update header name.
+/*!
+ \returns XB_NO_ERROR
+*/
+xbInt16 xbMemoDbt3::UpdateHeaderName(){
+ return XB_NO_ERROR;
+}
+/***********************************************************************/
+//! @brief Update a memo field for a given field number.
+/*!
+ \param iFieldNo Field number to update data for.
+ \param sMemoData Data to update memo field data with.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbMemoDbt3::UpdateMemoField( xbInt16 iFieldNo, const xbString & sMemoData ) {
+
+ xbInt16 iErrorStop = 0;
+ xbInt16 rc = XB_NO_ERROR;
+ try{
+ if( sMemoData == "" ){
+ if(( rc = dbf->PutField( iFieldNo, "" )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw rc;
+ }
+ } else {
+ xbUInt32 ulDataLen = sMemoData.Len() + 2;
+ xbUInt32 ulBlocksNeeded = (ulDataLen / 512) + 1;
+ xbUInt32 ulLastDataBlock;
+ if(( rc = CalcLastDataBlock( ulLastDataBlock )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw rc;
+ }
+ if(( rc = xbFseek( ((xbInt64) ulLastDataBlock * 512), SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw rc;
+ }
+ if(( rc = xbFwrite( sMemoData.Str(), sMemoData.Len(), 1 )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw rc;
+ }
+ if(( rc = xbFputc( 0x1a, 2 )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw rc;
+ }
+ if(( rc = xbFputc( 0x00, (xbInt32) ( ulBlocksNeeded * 512 ) - (xbInt32) ulDataLen )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw rc;
+ }
+ if(( rc = dbf->PutULongField( iFieldNo, ulLastDataBlock )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw rc;
+ }
+ ulHdrNextBlock = ulLastDataBlock + ulBlocksNeeded;
+ if(( rc = UpdateHeadNextNode()) != XB_NO_ERROR ){
+ iErrorStop = 170;
+ throw rc;
+ }
+ }
+ }
+ catch (xbInt16 rc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbMemoDbt3::UpdateMemoField() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( rc ));
+ }
+ return rc;
+}
+
+/***********************************************************************/
+//! @brief Empty the memo file.
+/*!
+ This routine clears everything out of the file. It does not address the
+ block pointers on the dbf file.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbMemoDbt3::Zap(){
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ char cBuf[4];
+
+ try{
+ ulHdrNextBlock = 1L;
+ ePutUInt32( cBuf, ulHdrNextBlock );
+
+ if(( iRc != xbFseek( 0, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ if(( iRc != xbFwrite( cBuf, 4, 1 ))!= XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ if(( iRc != xbTruncate( 512 )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbMemoDbt3::Zap() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+} /* namespace */
+#endif /* XB_DBF3_SUPPORT */
+#endif /* XB_MEMO_SUPPORT */
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/core/xbmemo4.cpp b/1Tdata/xbase/xbase64-4.1.4/src/core/xbmemo4.cpp
new file mode 100755
index 0000000..9770806
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/core/xbmemo4.cpp
@@ -0,0 +1,1336 @@
+/* xbmemo4.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+ This class is used for support dBASE V4 memo files
+
+*/
+
+#include "xbase.h"
+
+#ifdef XB_MEMO_SUPPORT
+#ifdef XB_DBF4_SUPPORT
+
+namespace xb{
+
+/***********************************************************************/
+//! @brief Class Constructor.
+/*!
+ \param dbf Pointer to dbf instance.
+ \param sFileName Memo file name.
+*/
+xbMemoDbt4::xbMemoDbt4( xbDbf * dbf, xbString const & sFileName ) : xbMemo( dbf, sFileName ){
+ iMemoFileType = 4;
+ SetBlockSize( dbf->GetCreateMemoBlockSize() );
+}
+
+/***********************************************************************/
+//! @brief Class Deconstructor.
+xbMemoDbt4::~xbMemoDbt4(){}
+
+/***********************************************************************/
+//! @brief Abort.
+/*!
+ Abort any pending updates to the memo file.
+ \returns XB_NO_ERROR
+*/
+xbInt16 xbMemoDbt4::Abort(){
+
+ xbInt16 rc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbUInt32 ulBlockNo;
+
+ try{
+ xbUInt32 ulNodeCnt = llNewBlocks.GetNodeCnt();
+ for( xbUInt32 l = 0; l < ulNodeCnt; l++ ){
+ if(( rc = llNewBlocks.RemoveFromFront( ulBlockNo )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw rc;
+ }
+ if(( rc = FreeMemoBlockChain( ulBlockNo )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw rc;
+ }
+ }
+ llOldBlocks.Clear();
+ }
+
+ catch (xbInt16 rc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbMemoDbt4::Abort() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( rc ));
+ }
+ return rc;
+}
+
+/***********************************************************************/
+//! @brief Commit changes to memo file.
+/*!
+ Commit any pending updates to the memo file.
+ \returns XB_NO_ERROR.
+*/
+xbInt16 xbMemoDbt4::Commit(){
+
+ xbInt16 rc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbUInt32 ulBlockNo;
+
+ try{
+ xbUInt32 ulNodeCnt = llOldBlocks.GetNodeCnt();
+ for( xbUInt32 l = 0; l < ulNodeCnt; l++ ){
+ if(( rc = llOldBlocks.RemoveFromFront( ulBlockNo )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw rc;
+ }
+ if(( rc = FreeMemoBlockChain( ulBlockNo )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw rc;
+ }
+ }
+ llNewBlocks.Clear();
+ }
+ catch (xbInt16 rc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbMemoDbt4::Commit() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( rc ));
+ }
+ return rc;
+}
+/***********************************************************************/
+//! @brief Create memo file.
+/*!
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbMemoDbt4::CreateMemoFile(){
+
+ xbInt16 iErrorStop = 0;
+ xbInt16 rc = XB_NO_ERROR;
+ char cBuf[4];
+
+ try{
+ if(( rc = xbFopen( "w+b", dbf->GetShareMode() )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw rc;
+ }
+
+ ulHdrNextBlock = 1L;
+ ePutUInt32( cBuf, ulHdrNextBlock );
+ if(( rc = xbFwrite( cBuf, 4, 1 ))!= XB_NO_ERROR ){
+ iErrorStop = 110;
+ xbFclose();
+ throw rc;
+ }
+ for(int i = 0; i < 4; i++ )
+ xbFputc( 0x00 );
+ GetFileNamePart( sDbfFileNameWoExt );
+ sDbfFileNameWoExt.PadRight( ' ', 8 ); // need at least eight bytes of name
+ sDbfFileNameWoExt = sDbfFileNameWoExt.Mid( 1, 8 ); // need no more than eight bytes of name
+ for( int i = 1; i < 9; i++ )
+ xbFputc( sDbfFileNameWoExt[i] );
+
+ for(int i = 0; i < 4; i++ )
+ xbFputc( 0x00 );
+
+ ePutInt16( cBuf, GetBlockSize());
+ if(( rc = xbFwrite( cBuf, 2, 1 ))!= XB_NO_ERROR ){
+ iErrorStop = 120;
+ xbFclose();
+ throw rc;
+ }
+ for( xbUInt32 i = 0; i < (GetBlockSize() - 22); i++ )
+ xbFputc( 0x00 );
+ if(( mbb = (void *) malloc( GetBlockSize())) == NULL ){
+ rc = XB_NO_MEMORY;
+ iErrorStop = 130;
+ return XB_NO_MEMORY;
+ }
+ }
+ catch (xbInt16 rc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbMemoDbt4::CreateMemoFile() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( rc ));
+ xbFclose();
+ }
+ return rc;
+}
+/***********************************************************************/
+#ifdef XB_DEBUG_SUPPORT
+//! @brief Dump memo file header.
+/*!
+ \returns XB_NO_ERROR
+*/
+
+xbInt16 xbMemoDbt4::DumpMemoFreeChain()
+{
+ xbInt16 rc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbUInt32 ulCurBlock, ulLastDataBlock;
+
+ try{
+ if(( rc = ReadDbtHeader(1)) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw rc;
+ }
+ if(( rc = CalcLastDataBlock( ulLastDataBlock )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw rc;
+ }
+
+ ulCurBlock = ulHdrNextBlock;
+ std::cout << "**********************************" << std::endl;
+ std::cout << "Head Node Next Block = " << ulCurBlock << std::endl;;
+ std::cout << "Total blocks in file = " << ulLastDataBlock << std::endl;
+
+ while( ulCurBlock < ulLastDataBlock ){
+ if(( rc = ReadBlockHeader( ulCurBlock, 2 )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw rc;
+ }
+ std::cout << "**********************************" << std::endl;
+ std::cout << "This Free Block = [" << ulCurBlock << "] contains [" << ulFreeBlockCnt << "] block(s)" << std::endl;
+ std::cout << "Next Free Block = [" << ulNextFreeBlock << "]" << std::endl;
+ ulCurBlock = ulNextFreeBlock;
+ }
+ }
+ catch (xbInt16 rc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbMemoDbt4::UpdateMemoField() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( rc ));
+ }
+ return XB_NO_ERROR;
+}
+
+//! @brief Dump memo internals.
+/*!
+ \returns XB_NO_ERROR
+*/
+
+xbInt16 xbMemoDbt4::DumpMemoInternals() {
+
+ xbLinkListNode<xbUInt32> *llPtr;
+ xbInt16 iNodeCnt;
+
+ llPtr = llOldBlocks.GetHeadNode();
+ iNodeCnt = llOldBlocks.GetNodeCnt();
+
+ std::cout << "Link List Old Blocks - " << iNodeCnt << " nodes" << std::endl;
+ for( xbInt16 i = 0; i < iNodeCnt; i++ ){
+ std::cout << llPtr->GetKey() << ",";
+ llPtr = llPtr->GetNextNode();
+ }
+ std::cout << std::endl;
+
+ llPtr = llNewBlocks.GetHeadNode();
+ iNodeCnt = llNewBlocks.GetNodeCnt();
+ std::cout << "Link List New Blocks - " << iNodeCnt << " nodes" << std::endl;
+ for( xbInt16 i = 0; i < iNodeCnt; i++ ){
+ std::cout << llPtr->GetKey() << ",";
+ llPtr = llPtr->GetNextNode();
+ }
+ std::cout << std::endl;
+
+ return XB_NO_ERROR;
+}
+#endif // XB_DEBUG_SUPPORT
+
+/***********************************************************************/
+//! @brief Dump memo file header.
+/*!
+ \returns XB_NO_ERROR
+*/
+xbInt16 xbMemoDbt4::DumpMemoHeader(){
+
+ xbInt16 rc = XB_NO_ERROR;
+ xbUInt32 ulLastDataBlock;
+ CalcLastDataBlock( ulLastDataBlock );
+
+ if(( rc = ReadDbtHeader( 1 )) != XB_NO_ERROR )
+ return rc;
+ std::cout << "Version 4 Memo Header Info" << std::endl;
+ std::cout << "Memo File Name = " << GetFqFileName() << std::endl;
+ std::cout << "Hdr Next Avail Block = " << ulHdrNextBlock << std::endl;
+ std::cout << "Block Size = " << GetBlockSize() << std::endl;
+ std::cout << "Dbf File Name wo Ext = " << sDbfFileNameWoExt.Str() << std::endl;
+ std::cout << "Last Data Block = " << ulLastDataBlock << std::endl;
+ return rc;
+}
+
+/************************************************************************/
+//! @brief Find an empty set of blocks in the free block chain
+/*!
+ This routine searches thruugh the free node chain in a dbase IV type
+ memo file searching for a place to grab some free blocks for reuse
+
+ \param ulBlocksNeeded The size to look in the chain for.
+ \param ulLastDataBlock is the last data block in the file, enter 0
+ for the routine to calculate it.
+ \param ulLocation The location it finds.
+ \param ulPreviousNode Block number of the node immediately previous to this node in the chain.<br>
+ 0 if header node
+ \param bFound Output xbFalse - Spot not found in chain.<br>
+ xbTrue - Spot found in chain.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbMemoDbt4::FindBlockSetInChain( xbUInt32 ulBlocksNeeded,
+ xbUInt32 &ulLastDataBlock, xbUInt32 &ulLocation, xbUInt32 &ulPrevNode, xbBool &bFound ){
+ xbInt16 rc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbUInt32 ulCurNode;
+
+ try{
+ ulPrevNode = 0L;
+ if( ulLastDataBlock == 0 ){
+ /* Determine last good data block */
+ if(( rc = CalcLastDataBlock( ulLastDataBlock )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw rc;
+ }
+ }
+ if( ulHdrNextBlock < ulLastDataBlock ){
+ ulCurNode = ulHdrNextBlock;
+
+ if(( rc = ReadBlockHeader( ulHdrNextBlock, 2 )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw rc;
+ }
+ while( ulBlocksNeeded > ulFreeBlockCnt && ulNextFreeBlock < ulLastDataBlock ){
+ ulPrevNode = ulCurNode;
+ ulCurNode = ulNextFreeBlock;
+ if(( rc = ReadBlockHeader( ulNextFreeBlock, 2 )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw rc;
+ }
+ }
+ if( ulBlocksNeeded <= ulFreeBlockCnt ){
+ ulLocation = ulCurNode;
+ // PreviousNode = lPrevNode;
+ bFound = xbTrue;
+ } else { // no data found and at end of chain
+ ulPrevNode = ulCurNode;
+ bFound = xbFalse;
+ }
+ } else {
+ bFound = xbFalse;
+ }
+ }
+ catch (xbInt16 rc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbMemoDbt4::FindBlockSetInChain() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( rc ));
+ }
+ return rc;
+}
+/***********************************************************************/
+//! @brief Free a block.
+/*!
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbMemoDbt4::FreeMemoBlockChain( xbUInt32 ulBlockNo ){
+ xbUInt32 ulLastDataBlock;
+ return FreeMemoBlockChain( ulBlockNo, ulLastDataBlock );
+}
+
+/***********************************************************************/
+//! @brief Free a block.
+/*!
+ \param ulBlockNo The block number being deleted.
+ \param ulLastDataBlock Output - Last free block number,prior to this block.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbMemoDbt4::FreeMemoBlockChain( xbUInt32 ulBlockNo, xbUInt32 &ulLastDataBlock )
+{
+ xbInt16 rc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbUInt32 ulNoOfFreedBlocks;
+ xbUInt32 ulLastFreeBlock = 0;
+ xbUInt32 ulLastFreeBlockCnt = 0;
+ xbUInt32 ulSaveNextFreeBlock;
+
+ // iFieldNo - The field no m\bing deleted
+ // iBlockNo - The block number being deleted
+ // iNoOfFreeBlocks - The number of blocks being freed with this delete
+ // iLastDataBlock - The next block number to allocate if more blocks needed
+ // iHdrNextBlock - The head pointer in the main header block
+ // iNextFreeBlock - The block that is immediately following the current free block to be added
+ // iLastFreeBlock - Last free block number,prior to this block
+ // iLastFreeBlockCnt - Last free block number of blocks
+
+ try{
+
+ if( ulBlockNo <= 0 ){
+ iErrorStop = 100;
+ rc =XB_INVALID_BLOCK_NO;
+ throw rc;
+ }
+
+ /* Load the first block */
+ if(( rc = ReadBlockHeader( ulBlockNo, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw rc;
+ }
+
+ if( (ulFieldLen) % GetBlockSize() )
+ ulNoOfFreedBlocks = ((ulFieldLen) / GetBlockSize()) + 1L;
+ else
+ ulNoOfFreedBlocks = (ulFieldLen) / GetBlockSize();
+
+ /* Determine last good data block */
+ if(( rc = CalcLastDataBlock( ulLastDataBlock )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw rc;
+ }
+
+ if(( rc = ReadDbtHeader( 0 )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw rc;
+ }
+
+ // Not an empty node chain, position to correct location in chain
+ ulNextFreeBlock = ulHdrNextBlock;
+ while( ulBlockNo > ulNextFreeBlock && ulBlockNo < ulLastDataBlock ){
+ ulLastFreeBlock = ulNextFreeBlock;
+
+ if(( rc = ReadBlockHeader( ulNextFreeBlock, 2 )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ return rc;
+ }
+ ulLastFreeBlockCnt = ulFreeBlockCnt;
+ }
+
+ // One of two outcomes at this point
+ // A) This block is combined with the next free block chain, and points to the free chain after the next free block
+ // B) This block is not combined with the next free block chain, and points to the next block
+ // (which could be the last block
+
+ // should next block should be concatonated onto the end of this set?
+ ulSaveNextFreeBlock = ulNextFreeBlock;
+ if(( ulBlockNo + ulNoOfFreedBlocks ) == ulNextFreeBlock && ulNextFreeBlock < ulLastDataBlock ){
+ if(( rc = ReadBlockHeader( ulNextFreeBlock, 2 )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw rc;
+ }
+ ulNoOfFreedBlocks += ulFreeBlockCnt;
+ ulSaveNextFreeBlock = ulNextFreeBlock;
+ }
+
+ // if this is the first set of free blocks
+ if( ulLastFreeBlock == 0 ){
+ // 1 - write out the current block
+ // 2 - update header block
+ // 3 - write header block
+ // 4 - update data field
+
+ ePutUInt32( (char *) mbb, ulSaveNextFreeBlock );
+ ePutUInt32( (char *) mbb+4, ulNoOfFreedBlocks );
+ if(( rc = WriteBlock( ulBlockNo, 8, mbb )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw rc;
+ }
+
+ ulHdrNextBlock = ulBlockNo;
+ if(( rc = UpdateHeadNextNode()) != XB_NO_ERROR ){
+ iErrorStop = 170;
+ throw rc;
+ }
+ return XB_NO_ERROR;
+ }
+
+ /* determine if this block set should be added to the previous set */
+ if(( ulLastFreeBlockCnt + ulLastFreeBlock ) == ulBlockNo ){
+ if(( rc = ReadBlockHeader( ulLastFreeBlock, 2 )) != XB_NO_ERROR ){
+ iErrorStop = 180;
+ throw rc;
+ }
+ ulFreeBlockCnt += ulNoOfFreedBlocks;
+
+ ePutUInt32( (char *) mbb, ulSaveNextFreeBlock );
+ ePutUInt32( (char *) mbb+4, ulFreeBlockCnt );
+ if(( rc = WriteBlock( ulLastFreeBlock, 8, mbb )) != XB_NO_ERROR ){
+ iErrorStop = 190;
+ throw rc;
+ }
+ return XB_NO_ERROR;
+ }
+
+ /* insert into the chain */
+ /* 1 - set the next bucket on the current node */
+ /* 2 - write this node */
+ /* 3 - go to the previous node */
+ /* 4 - insert this nodes id into the previous node set */
+ /* 5 - write previous node */
+
+ ePutUInt32( (char *) mbb, ulSaveNextFreeBlock );
+ ePutUInt32( (char *) mbb+4, ulNoOfFreedBlocks );
+ if(( rc = WriteBlock( ulBlockNo, 8, mbb )) != XB_NO_ERROR ){
+ iErrorStop = 200;
+ throw rc;
+ }
+
+ if(( rc = ReadBlockHeader( ulLastFreeBlock, 2 )) != XB_NO_ERROR ){
+ iErrorStop = 210;
+ throw rc;
+ }
+
+ ePutUInt32( (char *) mbb, ulBlockNo );
+ if(( rc = WriteBlock( ulLastFreeBlock, 8, mbb )) != XB_NO_ERROR ){
+ iErrorStop = 220;
+ throw rc;
+ }
+ }
+ catch (xbInt16 rc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbMemoDbt4::DeleteMemoField() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( rc ));
+ }
+ return rc;
+}
+/************************************************************************/
+//! @brief Get a set of blocks from the free block chain.
+/*!
+ This routine grabs a set of blocks out of the free block chain.
+
+ \param ulBlocksNeeded The number of blocks requested.
+ \param ulLocation
+ \param ulPrevNode
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+
+xbInt16 xbMemoDbt4::GetBlockSetFromChain( xbUInt32 ulBlocksNeeded,
+ xbUInt32 ulLocation, xbUInt32 ulPrevNode )
+{
+ xbInt16 rc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbUInt32 ulNextFreeBlock2;
+ xbUInt32 ulNewFreeBlocks;
+ xbUInt32 ulSaveNextFreeBlock;
+
+ try{
+ if(( rc = ReadBlockHeader( ulLocation, 2 )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw rc;
+ }
+
+ if( ulBlocksNeeded == ulFreeBlockCnt ){ // grab this whole set of blocks
+ if( ulPrevNode == 0 ){ // first in the chain
+ ulHdrNextBlock = ulNextFreeBlock;
+ if(( rc = UpdateHeadNextNode()) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw rc;
+ }
+ }
+ else // remove out of the middle or end
+ {
+ ulNextFreeBlock2 = ulNextFreeBlock;
+ if(( rc = ReadBlockHeader( ulPrevNode, 2 )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw rc;
+ }
+ ulNextFreeBlock = ulNextFreeBlock2;
+ if(( rc = WriteBlockHeader( ulPrevNode, 2 )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw rc;
+ }
+ }
+ } else { // only take a portion of this set
+ if( ulPrevNode == 0 ){ // first in the set
+ ulHdrNextBlock = ulLocation + ulBlocksNeeded;
+ if(( rc = UpdateHeadNextNode()) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw rc;
+ }
+ ulFreeBlockCnt -= ulBlocksNeeded;
+ if(( rc = WriteBlockHeader( ulHdrNextBlock, 2 )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw rc;
+ }
+ }
+ else { // remove out of the middle or end
+ ulNewFreeBlocks = ulFreeBlockCnt - ulBlocksNeeded;
+ ulSaveNextFreeBlock = ulNextFreeBlock;
+ ulNextFreeBlock2 = ulLocation + ulBlocksNeeded;
+
+ if(( rc = ReadBlockHeader( ulPrevNode, 2 )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw rc;
+ }
+ ulNextFreeBlock = ulNextFreeBlock2;
+ if(( rc = WriteBlockHeader( ulPrevNode, 2 )) != XB_NO_ERROR ){
+ iErrorStop = 170;
+ throw rc;
+ }
+ ulFreeBlockCnt = ulNewFreeBlocks;
+ ulNextFreeBlock = ulSaveNextFreeBlock;
+ if(( rc = WriteBlockHeader( ulNextFreeBlock2, 2 )) != XB_NO_ERROR ){
+ iErrorStop = 180;
+ throw rc;
+ }
+ }
+ }
+ }
+ catch (xbInt16 rc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbMemoDbt4::GetBlockSetFromChain() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( rc ));
+ }
+ return rc;
+}
+/***********************************************************************/
+//! @brief Get a memo field for a given field number.
+/*!
+ \param iFieldNo Field number to retrieve data for.
+ \param sMemoData Output - string containing memo field data.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbMemoDbt4::GetMemoField( xbInt16 iFieldNo, xbString & sMemoData ){
+
+ xbUInt32 ulBlockNo;
+ xbUInt32 ulMemoFieldLen;
+ xbUInt32 ulMemoFieldDataLen;
+ xbInt16 rc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ char *p = NULL;
+
+ try{
+ if(( rc = GetMemoFieldLen( iFieldNo, ulMemoFieldLen, ulBlockNo )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw rc;
+ }
+
+ if( ulBlockNo == 0L || ulMemoFieldLen == 0L )
+ sMemoData = "";
+ else{
+ ulMemoFieldDataLen = ulMemoFieldLen - 8;
+
+ if(( p = (char *)calloc(1, ulMemoFieldDataLen+1)) == NULL ){
+ iErrorStop = 110;
+ rc = XB_NO_MEMORY;
+ xbString sMsg;
+ sMsg.Sprintf( "xbMemoDbt4::GetMemoField() lBlockNo = %ld Data Len = [%ld]", ulBlockNo, ulMemoFieldDataLen + 1 );
+ xbase->WriteLogMessage( sMsg.Str() );
+ throw rc;
+ }
+
+ // go to the first block of the memo field, skip past the first 8 bytes
+ if(( xbFseek( ( ulBlockNo * GetBlockSize() + 8 ), SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ rc = XB_SEEK_ERROR;
+ throw rc;
+ }
+
+ // read the memo file data into buffer pointed to by "p"
+ if(( rc = xbFread( p, ulMemoFieldDataLen, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ rc = XB_READ_ERROR;
+ throw rc;
+ }
+ // null terminate the string
+ char *p2;
+ p2 = p + ulMemoFieldDataLen;
+ *p2 = 0x00;
+
+ // save it to the string
+ sMemoData.Set( p, ulMemoFieldDataLen + 1 );
+ free( p );
+ }
+ }
+ catch (xbInt16 rc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbMemoDbt4::GetMemoField() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( rc ));
+ if( p )
+ free( p );
+ }
+ return rc;
+}
+
+/***********************************************************************/
+//! @brief Get a memo field length for a given field number.
+/*!
+ \param iFieldNo Field number to retrieve data for.
+ \param ulMemoFieldLen Output - length of memo field data.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbMemoDbt4::GetMemoFieldLen( xbInt16 iFieldNo, xbUInt32 &ulMemoFieldLen ){
+ xbUInt32 ulBlockNo;
+ return GetMemoFieldLen( iFieldNo, ulMemoFieldLen, ulBlockNo );
+}
+
+/***********************************************************************/
+//! @brief Get a memo field length for a given field number.
+/*!
+ \param iFieldNo Field number to retrieve data for.
+ \param ulMemoFieldLen Output - length of memo field data.
+ \param ulBlockNo Output - Starting block number.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbMemoDbt4::GetMemoFieldLen( xbInt16 iFieldNo, xbUInt32 &ulMemoFieldLen, xbUInt32 &ulBlockNo ){
+
+ xbInt16 rc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ char cFieldType;
+
+ try{
+
+ if(( rc = dbf->GetFieldType( iFieldNo, cFieldType )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw rc;
+ }
+ if( cFieldType != 'M' ){
+ iErrorStop = 110;
+ rc = XB_INVALID_MEMO_FIELD;
+ throw rc;
+ }
+ if(( rc = dbf->GetULongField( iFieldNo, ulBlockNo )) < XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw rc;
+ }
+ if( ulBlockNo < 1 ){
+ ulMemoFieldLen = 0;
+ return XB_NO_ERROR;
+ }
+ if(( rc = ReadBlockHeader( ulBlockNo, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw rc;
+ }
+ ulMemoFieldLen = ulFieldLen;
+ }
+ catch (xbInt16 rc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbMemoDbt4::GetMemoFieldLen() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( rc ));
+ }
+ return rc;
+}
+/***********************************************************************/
+//! @brief Open memo file.
+/*!
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbMemoDbt4::OpenMemoFile() {
+
+ xbInt16 iErrorStop = 0;
+ xbInt16 rc = XB_NO_ERROR;
+
+ try{
+ if(( rc = xbFopen( dbf->GetOpenMode(), dbf->GetShareMode())) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw rc;
+ }
+ if(( rc = ReadDbtHeader( 1 )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw rc;
+ }
+ if(( mbb = (void *) malloc( GetBlockSize())) == NULL ){
+ xbFclose();
+ iErrorStop = 120;
+ rc = XB_NO_MEMORY;
+ throw rc;
+ }
+ }
+ catch (xbInt16 rc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbMemoDbt4::OpenMemoFile() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( rc ));
+ }
+ return rc;
+}
+/***********************************************************************/
+//! @brief Pack memo file.
+/*!
+ This routine frees up any unused blocks in the file resulting from field updates.
+ Version 3 memo files do not reclaim unused space (Version 4 files do).
+ This routine cleans up the unused space.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbMemoDbt4::PackMemo( void (*memoStatusFunc ) ( xbUInt32 ulItemNum, xbUInt32 ulNumItems )){
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ char * cBlock = NULL;
+
+ #ifdef XB_LOCKING_SUPPORT
+ xbBool bTableLocked = xbFalse;
+ xbBool bMemoLocked = xbFalse;
+ #endif
+
+ try{
+ #ifdef XB_LOCKING_SUPPORT
+ if( dbf->GetAutoLock() && !dbf->GetTableLocked() ){
+ if(( iRc = dbf->LockTable( XB_LOCK )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ } else {
+ bTableLocked = xbTrue;
+ }
+ if(( iRc = LockMemo( XB_LOCK )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ } else {
+ bMemoLocked = xbTrue;
+ }
+ }
+ #endif
+
+ // create temp file
+ xbString sTempMemoName;
+ //if(( iRc = CreateUniqueFileName( GetDirectory(), "dbt", sTempMemoName )) != XB_NO_ERROR ){
+ if(( iRc = CreateUniqueFileName( GetTempDirectory(), "DBT", sTempMemoName )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+
+ xbMemoDbt4 *pMemo = new xbMemoDbt4( dbf, sTempMemoName );
+ if(( iRc = pMemo->CreateMemoFile()) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ // for dbase III, block size is always 512, don't need to reset it
+ // for each record in dbf
+ xbUInt32 ulRecCnt;
+ if(( iRc = dbf->GetRecordCnt( ulRecCnt)) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+ xbInt32 lFldCnt = dbf->GetFieldCnt();
+ char cFldType;
+ xbString sMemoFldData;
+
+ for( xbUInt32 ulI = 1; ulI <= ulRecCnt; ulI++ ){
+ if(( iRc = dbf->GetRecord( ulI )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+
+ if( (void *) memoStatusFunc)
+ (*memoStatusFunc)(ulI, ulRecCnt );
+
+ // for each memo field
+ for( xbInt32 lFc = 0; lFc < lFldCnt; lFc++ ){
+ if(( iRc = dbf->GetFieldType( lFc, cFldType )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+ if( cFldType == 'M' ){
+ // copy it to work field
+ if(( iRc = dbf->GetMemoField( lFc, sMemoFldData )) != XB_NO_ERROR ){
+ iErrorStop = 170;
+ throw iRc;
+ }
+ // write it to new field
+ if(( iRc = pMemo->UpdateMemoField( lFc, sMemoFldData )) != XB_NO_ERROR ){
+ iErrorStop = 180;
+ throw iRc;
+ }
+ }
+ }
+ }
+
+ //copy target back to source
+ xbUInt32 ulBlkSize = GetBlockSize();
+ xbUInt64 ullFileSize;
+ if(( iRc = pMemo->GetFileSize( ullFileSize )) != XB_NO_ERROR ){
+ iErrorStop = 190;
+ throw iRc;
+ }
+ // file size should be evenly divisible by block size
+ xbUInt32 ulBlkCnt;
+
+ if( ullFileSize % ulBlkSize ){
+ iErrorStop = 200;
+ throw iRc;
+ } else {
+ ulBlkCnt = (xbUInt32) (ullFileSize / ulBlkSize);
+ }
+ if(( iRc = xbTruncate( 0 )) != XB_NO_ERROR ){
+ iErrorStop = 210;
+ throw iRc;
+ }
+
+ if(( cBlock = (char *) malloc( ulBlkSize )) == NULL ){
+ iErrorStop = 220;
+ throw iRc;
+ }
+
+ // can't rename files in a multiuser, cross platform environment, causes issues
+ // copy work table back to source table
+
+ for( xbUInt32 ulBc = 0; ulBc < ulBlkCnt; ulBc++ ){
+ if(( iRc = pMemo->ReadBlock( ulBc, ulBlkSize, cBlock )) != XB_NO_ERROR ){
+ iErrorStop = 230;
+ throw iRc;
+ }
+ if(( iRc = WriteBlock( ulBc, ulBlkSize, cBlock )) != XB_NO_ERROR ){
+ iErrorStop = 240;
+ throw iRc;
+ }
+ }
+
+ if(( xbFseek( 8, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 250;
+ iRc = XB_SEEK_ERROR;
+ throw iRc;
+ }
+
+ for( int i = 1; i < 9; i++ )
+ xbFputc( sDbfFileNameWoExt[i] );
+
+ //close and delete target
+ if(( iRc = pMemo->xbFclose()) != XB_NO_ERROR ){
+ iErrorStop = 260;
+ throw iRc;
+ }
+ if(( iRc = pMemo->xbRemove()) != XB_NO_ERROR ){
+ iErrorStop = 270;
+ throw iRc;
+ }
+ free( cBlock );
+ delete pMemo;
+
+ }
+ catch (xbInt16 iRc ){
+ free( cBlock );
+
+ xbString sMsg;
+ sMsg.Sprintf( "xbMemoDbt4::PackMemo() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ #ifdef XB_LOCKING_SUPPORT
+ if( bTableLocked )
+ dbf->LockTable( XB_UNLOCK );
+ if( bMemoLocked )
+ LockMemo( XB_UNLOCK );
+ #endif
+ return iRc;
+}
+/***********************************************************************/
+//! @brief Read block header.
+/*!
+ \param ulBlockNo Block to read
+ \param iOption 1 - Read fields option 1
+ 2 - Read fields option 2
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbMemoDbt4::ReadBlockHeader( xbUInt32 ulBlockNo, xbInt16 iOption ) {
+
+ xbInt16 rc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+
+ try{
+
+ if(( rc = ReadBlock( ulBlockNo, 8, mbb )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ rc = XB_READ_ERROR;
+ }
+ if( iOption == 1 ){
+ iField1 = eGetInt16((char *) mbb );
+ iStartPos = eGetInt16((char *) mbb+2);
+ ulFieldLen = eGetUInt32((char *) mbb+4);
+ }
+ else if( iOption == 2 ){
+ ulNextFreeBlock = eGetUInt32((char *) mbb );
+ ulFreeBlockCnt = eGetUInt32((char *) mbb+4 );
+ }
+ else{
+ iErrorStop = 110;
+ rc = XB_INVALID_OPTION;
+ throw rc;
+ }
+ }
+ catch (xbInt16 rc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbMemoDbt4::ReadBlockHeader() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( rc ));
+ }
+ return rc;
+}
+/***********************************************************************/
+//! @brief Read dbt header file.
+/*!
+ \param iOption 0 --> read only first four bytes<br>
+ 1 --> read the entire thing
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbMemoDbt4::ReadDbtHeader( xbInt16 iOption ) {
+
+ xbInt16 iErrorStop = 0;
+ xbInt16 rc = XB_NO_ERROR;
+ xbInt16 iReadLen = 0;
+ char *p;
+ char MemoBlock[22];
+
+ try{
+ if( !FileIsOpen() ){
+ iErrorStop = 100;
+ rc = XB_NOT_OPEN;
+ throw rc;
+ }
+ if( xbFseek( 0, SEEK_SET )){
+ iErrorStop = 110;
+ rc = XB_SEEK_ERROR;
+ throw rc;
+ }
+ if( iOption )
+ iReadLen = 22;
+ else
+ iReadLen = 4;
+
+ if(( xbFread( &MemoBlock, (size_t) iReadLen, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ rc = XB_READ_ERROR;
+ throw rc;
+ }
+
+ p = MemoBlock;
+ ulHdrNextBlock = eGetUInt32( p );
+ if( iOption == 0)
+ return XB_NO_ERROR;
+
+ p += 8;
+ sDbfFileNameWoExt = "";
+ for( int i = 0; i < 8; i++ )
+ sDbfFileNameWoExt += *p++;
+
+ p += 4;
+ SetBlockSize( (xbUInt32) eGetInt16( p ));
+
+ cVersion = MemoBlock[16];
+
+ }
+ catch (xbInt16 rc ){
+
+ xbString sMsg;
+ sMsg.Sprintf( "xbMemoDbt4::ReadDbtHeader() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( rc ));
+ }
+ return rc;
+}
+
+/***********************************************************************/
+#ifdef XB_DEBUG_SUPPORT
+//! @brief Read free block information from header.
+/*!
+ This routing pulls any reusable block information for file header.
+ Not used with version 3 memo files - stub.
+
+ \param ulBlockNo
+ \param ulNextBlock
+ \param ulFreeBlockCnt
+ \returns XB_NO_ERROR
+*/
+xbInt16 xbMemoDbt4::ReadFreeBlockHeader( xbUInt32 ulBlockNo, xbUInt32 &ulNextBlock, xbUInt32 &ulFreeBlockCount ){
+
+ xbInt16 rc = XB_NO_ERROR;
+ rc = ReadBlockHeader( ulBlockNo, 2 );
+ ulNextBlock = ulNextFreeBlock;
+ ulFreeBlockCount = ulFreeBlockCnt;
+ return rc;
+}
+#endif
+/***********************************************************************/
+//! @brief Update header name.
+/*!
+ \returns XB_NO_ERROR
+*/
+xbInt16 xbMemoDbt4::UpdateHeaderName() {
+
+ xbInt16 rc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+
+ GetFileNamePart( sDbfFileNameWoExt );
+ sDbfFileNameWoExt.PadRight( ' ', 8 ); // need at least eight bytes of name
+ sDbfFileNameWoExt = sDbfFileNameWoExt.Mid( 1, 8 ); // need no more than eight bytes of name
+
+ try{
+ if(( rc = xbFseek( 8, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw rc;
+ }
+
+ for( int i = 1; i < 9; i++ ){
+ if(( rc = xbFputc( sDbfFileNameWoExt[i] )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw rc;
+ }
+ }
+ }
+ catch (xbInt16 rc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbMemoDbt4::UpdateHeaderName() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( rc ));
+ }
+ return rc;
+}
+/***********************************************************************/
+//! @brief Update a memo field length for a given field number.
+/*!
+ \param iFieldNo Field number to update data for.
+ \param sMemoData Data to update memo field data with.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbMemoDbt4::UpdateMemoField( xbInt16 iFieldNo, const xbString & sMemoData ) {
+
+ xbInt16 iErrorStop = 0;
+ xbInt16 rc = XB_NO_ERROR;
+ xbUInt32 ulBlockNo;
+
+ try{
+
+ if(( rc = dbf->GetULongField( iFieldNo, ulBlockNo )) < XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw rc;
+ }
+
+ if( sMemoData == "" ){
+ if( ulBlockNo == 0 ){
+ /* if nothing to do, return */
+ return XB_NO_ERROR;
+ } else {
+
+ // if this is in the new blocks link list already, then this is not the first update for this memo field
+ // this would be second or third update on the field since the original change and not commited
+ // Since it won't be needed in either a Commmit() or Abort(), can be freed immediately
+ if( llNewBlocks.SearchFor( ulBlockNo ) > 0 ){
+ if(( rc = FreeMemoBlockChain( ulBlockNo )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw rc;
+ }
+ if(( llNewBlocks.RemoveByVal( ulBlockNo )) < XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw rc;
+ }
+ } else {
+ // first revision, save what it was in case of Abort() command
+ if(( llOldBlocks.InsertAtFront( ulBlockNo )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw rc;
+ }
+ }
+ if(( rc = dbf->PutField( iFieldNo, "" )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw rc;
+ }
+ }
+ } else {
+ // free up the old space
+ xbUInt32 ulLastDataBlock = 0L;
+
+ if( ulBlockNo > 0 ){
+ if( llNewBlocks.SearchFor( ulBlockNo ) > 0 ){
+
+ if(( rc = FreeMemoBlockChain( ulBlockNo, ulLastDataBlock )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw rc;
+ }
+ } else {
+ // first revision, save what it was in case of Abort() command
+ if(( rc = llOldBlocks.InsertAtFront( ulBlockNo )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw rc;
+ }
+ }
+ }
+ // should next line be unsigned 32 bit int?
+ xbUInt32 ulTotalLen = 8 + sMemoData.Len();
+ xbUInt32 ulBlocksNeeded;
+ if( ulTotalLen % GetBlockSize())
+ ulBlocksNeeded = ulTotalLen / GetBlockSize() + 1;
+ else
+ ulBlocksNeeded = ulTotalLen / GetBlockSize();
+
+ xbBool bUsedBlockFound;
+ xbUInt32 ulHeadBlock;
+ xbUInt32 ulPrevNode;
+ if(( rc = FindBlockSetInChain( ulBlocksNeeded, ulLastDataBlock, ulHeadBlock, ulPrevNode, bUsedBlockFound )) != XB_NO_ERROR ){
+ iErrorStop = 170;
+ throw rc;
+ }
+ iField1 = -1;
+ iStartPos = 8;
+ ulFieldLen = sMemoData.Len() + 8;
+
+ if( bUsedBlockFound ){
+
+ if(( rc = GetBlockSetFromChain( ulBlocksNeeded, ulHeadBlock, ulPrevNode )) != XB_NO_ERROR ){
+ iErrorStop = 180;
+ throw rc;
+ }
+
+ if(( rc = WriteBlockHeader( ulHeadBlock, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 190;
+ throw rc;
+ }
+
+ if(( rc = xbFwrite( sMemoData.Str(), sMemoData.Len(), 1 )) != XB_NO_ERROR ){
+ iErrorStop = 200;
+ throw rc;
+ }
+ } else { // append to the end
+
+ if(( rc = WriteBlockHeader( ulLastDataBlock, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 220;
+ throw rc;
+ }
+
+ if(( rc = xbFwrite( sMemoData.Str(), sMemoData.Len(), 1 )) != XB_NO_ERROR ){
+ iErrorStop = 230;
+ throw rc;
+ }
+
+ if(( rc = xbFputc( 0x00, (xbInt32)((ulBlocksNeeded * GetBlockSize()) - (sMemoData.Len() + 8)))) != XB_NO_ERROR ){
+ iErrorStop = 240;
+ throw rc;
+ }
+
+ if( ulLastDataBlock == ulHdrNextBlock ){ // this is first node to be added to the node chain
+ ulHdrNextBlock += ulBlocksNeeded;
+ ulHeadBlock = ulLastDataBlock;
+ if(( rc = UpdateHeadNextNode()) != XB_NO_ERROR ){
+ iErrorStop = 250;
+ throw rc;
+ }
+
+ } else { // adding memo data to the end of the file, but chain exists
+
+ ulNextFreeBlock = ulLastDataBlock + ulBlocksNeeded;
+ ulHeadBlock = ulLastDataBlock;
+ if(( rc = WriteBlockHeader( ulPrevNode, 2 )) != XB_NO_ERROR ){
+ iErrorStop = 260;
+ throw rc;
+ }
+ }
+ }
+
+ if(( rc = llNewBlocks.InsertAtFront( ulHeadBlock )) != XB_NO_ERROR ){ // In case of Abort(), this block needs to be freed
+ iErrorStop = 270;
+ throw rc;
+ }
+ if(( rc = dbf->PutLongField( iFieldNo, (xbInt32) ulHeadBlock )) != XB_NO_ERROR ){
+ iErrorStop = 280;
+ throw rc;
+ }
+ }
+ }
+
+ catch (xbInt16 rc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbMemoDbt4::UpdateMemoField() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( rc ));
+ }
+ return rc;
+}
+/***********************************************************************/
+//! @brief Write block header.
+/*!
+ \param ulBlockNo Block to read
+ \param iOption 1 - Read fields option 1
+ 2 - Read fields option 2
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbMemoDbt4::WriteBlockHeader( xbUInt32 ulBlockNo, xbInt16 iOption ) {
+
+ xbInt16 rc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+
+ try{
+ if( iOption == 1 ){
+ ePutInt16 ((char *) mbb, iField1 );
+ ePutInt16 ((char *) mbb+2, iStartPos );
+ ePutUInt32((char *) mbb+4, ulFieldLen );
+ }
+ else if( iOption == 2 ){
+ ePutUInt32((char *) mbb, ulNextFreeBlock );
+ ePutUInt32((char *) mbb+4, ulFreeBlockCnt );
+ }
+ else{
+ iErrorStop = 100;
+ rc = XB_INVALID_OPTION;
+ throw rc;
+ }
+
+ if(( rc = WriteBlock( ulBlockNo, 8, mbb )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ rc = XB_READ_ERROR;
+ }
+ }
+ catch (xbInt16 rc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbMemoDbt4::WriteHeader() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( rc ));
+ }
+ return rc;
+}
+/***********************************************************************/
+//! @brief Empty the memo file.
+/*!
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbMemoDbt4::Zap(){
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ char cBuf[4];
+ try{
+ ulHdrNextBlock = 1L;
+ ePutUInt32( cBuf, ulHdrNextBlock );
+
+ if(( iRc != xbFseek( 0, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ if(( iRc != xbFwrite( cBuf, 4, 1 ))!= XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ if(( iRc != xbTruncate( GetBlockSize())) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ }
+
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbMemoDbt4::Zap() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}/***********************************************************************/
+} /* namespace */
+#endif /* XB_DBF4_SUPPORT */
+#endif /* XB_MEMO_SUPPORT */
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/core/xbssv.cpp b/1Tdata/xbase/xbase64-4.1.4/src/core/xbssv.cpp
new file mode 100755
index 0000000..532f942
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/core/xbssv.cpp
@@ -0,0 +1,658 @@
+/* xbssv.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+#include "xbase.h"
+
+namespace xb{
+
+const xbErrorMessage xbErrorMessages[] = {
+ { XB_NO_ERROR, "No Error" },
+ { XB_NO_MEMORY, "No Memory" },
+ { XB_INVALID_OPTION, "Invalid Option" },
+ { XB_INVALID_PARAMETER, "Invalid Parameter" },
+ { XB_DUP_TABLE_OR_ALIAS, "Duplicate Alias/Table Name" },
+ { XB_INVALID_NODELINK, "Invalid Node Link" },
+ { XB_KEY_NOT_UNIQUE, "Key Not Unique" },
+ { XB_MEMCPY_ERROR, "Memory copy failure" },
+ { XB_FILE_EXISTS, "File Already Exists" },
+ { XB_ALREADY_OPEN, "Database already open" },
+ { XB_DBF_FILE_NOT_OPEN, "DBF File Not Open" },
+ { XB_FILE_NOT_FOUND, "File not found" },
+ { XB_FILE_TYPE_NOT_SUPPORTED, "Not an Xbase type database" },
+ { XB_RENAME_ERROR, "Unable to rename file" },
+ { XB_INVALID_OBJECT, "Invalid Object" },
+ { XB_NOT_OPEN, "Database not open" },
+ { XB_NOT_FOUND, "Not Found" },
+ { XB_OPEN_ERROR, "Open Error" },
+ { XB_CLOSE_ERROR, "Close Error" },
+ { XB_SEEK_ERROR, "Seek Error" },
+ { XB_READ_ERROR, "Read Error" },
+ { XB_WRITE_ERROR, "Error writing to disk drive" },
+ { XB_EOF, "End Of File" },
+ { XB_BOF, "Beginning Of File" },
+ { XB_INVALID_BLOCK_SIZE, "Invalid Block Size" },
+ { XB_INVALID_BLOCK_NO, "Invalid Block Number" },
+ { XB_INVALID_RECORD, "Invalid Record Number" },
+ { XB_DELETE_FAILED, "Delete Failed" },
+ { XB_INVALID_TABLE_NAME, "Invalid Table Name" },
+ { XB_EMPTY, "Empty Table or Index" },
+ { XB_LIMIT_REACHED, "Limit Reached" },
+ { XB_BLOCKREAD_NOT_ENABLED, "Block Read Mode is not enabled" },
+ { XB_DIRECTORY_ERROR, "Directory Read/Write error" },
+ { XB_INVALID_FIELD_TYPE, "Unknown Field Type" },
+ { XB_INVALID_FIELD_NO, "Invalid Field Number" },
+ { XB_INVALID_DATA, "Invalid Data" },
+ { XB_INVALID_FIELD_NAME, "Invalid Field Name" },
+ { XB_INVALID_MEMO_FIELD, "Not a Memo field" },
+ { XB_INVALID_FIELD, "Invalid Field" },
+ { XB_INVALID_FIELD_LEN, "Invalid Field Length" },
+ { XB_INVALID_DATE, "Invalid Date" },
+ { XB_INVALID_LOCK_OPTION, "Invalid Lock Option" },
+ { XB_LOCK_FAILED, "Lock Failed" },
+ { XB_TABLE_NOT_LOCKED, "Table Not Locked" },
+ { XB_PARSE_ERROR, "Parse Error" },
+ { XB_INVALID_FUNCTION, "Invalid or Undefined Function" },
+ { XB_INVALID_PARM, "Invalid Parm" },
+ { XB_INCONSISTENT_PARM_LENS, "Inconsistent parm lengths" },
+ { XB_INCOMPATIBLE_OPERANDS, "Incompatible operands" },
+ { XB_UNBALANCED_PARENS, "Unbalanced Parens" },
+ { XB_UNBALANCED_QUOTES, "Unbalanced Quotes" },
+ { XB_INVALID_EXPRESSION, "Invalid expression" },
+ { XB_INVALID_KEYNO, "Invalid Key Number" },
+ { XB_INVALID_INDEX, "Index File Error" },
+ { XB_INVALID_TAG, "Invalid index tag" },
+ { XB_SYNTAX_ERROR, "Invalid SQL Syntax" },
+ { XB_MAX_ERROR_NO, "End of Error List" }
+};
+// see also xbretcod.h
+
+xbInt16 xbSsv::iEndianType = 0;
+xbString xbSsv::sDefaultDateFormat = "MM/DD/YY";
+
+xbInt16 xbSsv::iDefaultFileVersion = 4;
+xbString xbSsv::sNullString = "";
+xbBool xbSsv::bDefaultAutoCommit = xbTrue;
+
+xbString xbSsv::sDataDirectory = PROJECT_DATA_DIR;
+xbString xbSsv::sTempDirectory = PROJECT_TEMP_DIR;
+
+#ifdef XB_LOGGING_SUPPORT
+xbString xbSsv::sLogDirectory = PROJECT_LOG_DIR;
+xbString xbSsv::sLogFileName = PROJECT_DFLT_LOGFILE;
+#endif // XB_LOGGING_SUPPORT
+
+#ifdef XB_LOCKING_SUPPORT
+xbInt32 xbSsv::lDefaultLockWait = 100;
+xbInt16 xbSsv::iDefaultLockRetries = 3;
+xbBool xbSsv::bDefaultAutoLock = xbTrue;
+xbInt16 xbSsv::iDefaultLockFlavor = 1;
+xbBool xbSsv::bMultiUser = xbTrue;
+#else
+xbBool xbSsv::bMultiUser = xbFalse;
+#endif // XB_LOCKING_SUPPORT
+
+#if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
+xbInt16 xbSsv::iUniqueKeyOpt = XB_HALT_ON_DUPKEY;
+ // is one of XB_HALT_ON_DUPKEY || XB_EMULATE_DBASE
+#endif // defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
+
+
+#ifdef XB_MDX_SUPPORT
+xbInt16 xbSsv::iCreateMdxBlockSize = 1024; // 1024 is DBase 7 default size for MDX index blocks
+#endif // XB_MDX_SUPPORT
+
+#ifdef XB_BLOCKREAD_SUPPORT
+xbUInt32 xbSsv::ulDefaultBlockReadSize = 32768; // 32K buffer for block DBF datafile reads
+#endif // XB_BLOCKREAD_SUPPORT
+
+/*************************************************************************/
+//! @brief Class Constructor.
+xbSsv::xbSsv(){}
+/*************************************************************************/
+void xbSsv::BitDump( unsigned char c ) const {
+ for( int i = 7; i >= 0; i-- )
+ std::cout << (BitSet( c, i ) ? 1 : 0);
+}
+void xbSsv::BitDump( char c ) const {
+ BitDump( (unsigned char) c );
+}
+/*************************************************************************/
+//! @brief Check a bit in a one byte field and see if it is set.
+/*!
+ \param c One byte char field to examine.
+ \param iBitNo which bit to examine.
+ \returns xbTrue Bit is set<br>
+ xbFalse Bit is not set
+*/
+xbBool xbSsv::BitSet( unsigned char c, xbInt16 iBitNo ) const {
+ return c & 1 << iBitNo;
+}
+/*************************************************************************/
+//! @brief Display error message on console for a given error number.
+/*!
+ \param iErrorCode Error number to reference
+*/
+void xbSsv::DisplayError( xbInt16 iErrorCode ) const {
+ std::cout << (const char *) GetErrorMessage( iErrorCode ) << std::endl;
+}
+/*************************************************************************/
+//! @brief Get the default auto commit setting.
+/*!
+
+ When auto commit is enabled, the library will automatically post any updates
+ when moving off an updated record or closing files.
+ If auto commit is disabled, the application program will need to explicitly
+ update the tables using using dbf->Put() and dbf->AppendRecord().
+
+ \returns xbTrue if auto commit is turned on<br>
+ xbFalse is auto commit is turned off
+*/
+
+xbBool xbSsv::GetDefaultAutoCommit() const {
+ return bDefaultAutoCommit;
+}
+/*************************************************************************/
+//! @brief Get the current data directory.
+/*!
+ \returns xbString containing the current data directory
+ where the database files are stored.
+*/
+
+xbString &xbSsv::GetDataDirectory() const {
+ return sDataDirectory;
+}
+/*************************************************************************/
+//! @brief Get the default date format.
+/*!
+ \returns xbString containing the default date format.
+*/
+
+xbString & xbSsv::GetDefaultDateFormat() const {
+ return sDefaultDateFormat;
+}
+/*************************************************************************/
+//! @brief Get the Endian type.
+/*!
+ \returns B - Big endian<br>
+ L - Little endian<br>
+*/
+xbInt16 xbSsv::GetEndianType() const {
+ return iEndianType;
+}
+/*************************************************************************/
+//! @brief Get an error message.
+/*!
+ \param iErrorCode ErrorCode is the error number of description to be returned.
+ \returns Returns a pointer to a string containing a text description for the error code.
+*/
+
+const char * xbSsv::GetErrorMessage( xbInt16 iErrorCode ) const{
+
+ if( iErrorCode > 0 || iErrorCode <= XB_MAX_ERROR_NO )
+ return "";
+
+ xbBool bFound = xbFalse;
+ xbInt16 iCtr = 0;
+ while( !bFound ){
+ if( xbErrorMessages[iCtr].iErrorNo == XB_MAX_ERROR_NO )
+ return "Unknown Error";
+ if( xbErrorMessages[iCtr].iErrorNo == iErrorCode )
+ return xbErrorMessages[iCtr].sErrorText;
+ iCtr++;
+ }
+ return "";
+}
+/*************************************************************************/
+//! @brief Get home directory.
+/*!
+ \param sHomeDirOut - Output home directory for current user.
+*/
+
+void xbSsv::GetHomeDir( xbString &sHomeDirOut ){
+
+ #ifdef HAVE_GETENV_S_F
+
+ char sPath[MAX_PATH];
+ size_t lSize;
+
+ sHomeDirOut = "";
+ memset( sPath, 0x00, MAX_PATH );
+
+ getenv_s( &lSize, NULL, 0, "HOMEDRIVE" );
+ if( lSize > 0 ){
+ getenv_s( &lSize, sPath, lSize, "HOMEDRIVE" );
+ sHomeDirOut = sPath;
+ memset( sPath, 0x00, MAX_PATH );
+ }
+
+ getenv_s( &lSize, NULL, 0, "HOMEPATH" );
+ if( lSize > 0 ){
+ getenv_s( &lSize, sPath, lSize, "HOMEPATH" );
+ sHomeDirOut += sPath;
+ }
+ if( sHomeDirOut == "" )
+ sHomeDirOut = "C:\xbase64";
+
+ #elif defined(WIN32)
+ sHomeDirOut.Sprintf( "%s%s", getenv( "HOMEDRIVE" ), getenv( "HOMEPATH" ));
+
+ #else
+ sHomeDirOut.Sprintf( "%s", getenv( "HOME" ));
+ sHomeDirOut.Trim();
+ if( sHomeDirOut == "" )
+ sHomeDirOut.Sprintf( "%s", getpwuid( getuid())->pw_dir );
+ #endif
+
+ sHomeDirOut.Trim();
+}
+
+
+/*************************************************************************/
+//! @brief Set the data directory.
+/*!
+ \param sDataDirectory Set the data directory.
+*/
+
+void xbSsv::SetDataDirectory( const xbString &sDataDirectory ){
+ this->sDataDirectory = sDataDirectory;
+
+ #ifdef WIN32
+ this->sDataDirectory.SwapChars( '/', '\\' );
+ #else
+ this->sDataDirectory.SwapChars( '\\', '/' );
+ #endif
+
+}
+
+/*************************************************************************/
+//! @brief Set the default date format.
+/*!
+ \param sDefaultDateFormat Set the default date format.
+*/
+
+void xbSsv::SetDefaultDateFormat( const xbString &sDefaultDateFormat ) {
+ this->sDefaultDateFormat = sDefaultDateFormat;
+}
+
+/*************************************************************************/
+//! @brief Set the default auto commit.
+/*!
+
+ Disabling auto commit requires the application execute explicit updates
+ using dbf->Put() and dbf->AppendRecord(). With auto commit on, the library
+ posts updates automatically when moving off the current record or closing
+ a file.
+
+ \param bDefaultAutoCommit xbTrue - Enable default auto commit.<br>
+ xbFalse - Disable default auto commit.<br>
+*/
+
+void xbSsv::SetDefaultAutoCommit( xbBool bDefaultAutoCommit ) {
+ this->bDefaultAutoCommit = bDefaultAutoCommit;
+}
+/*************************************************************************/
+//! @brief Set the endian type
+/*!
+ This routine determines the Endian-ness at run time instead of
+ compile time as some processers (ie; Sparc,ARM) can be switched either way.
+ This routine is called automatically by the library at startup and does not
+ need to be called in an application program.
+
+*/
+
+void xbSsv::SetEndianType() {
+ xbInt16 e = 1;
+ iEndianType = *(char *) &e;
+ if( iEndianType )
+ iEndianType = 'L';
+ else
+ iEndianType = 'B';
+ return;
+}
+
+/*************************************************************************/
+//! @brief Set the temp directory.
+/*!
+ \param sTempDirectory Set the data direcroty.
+*/
+
+void xbSsv::SetTempDirectory( const xbString &sTempDirectory ){
+ this->sTempDirectory = sTempDirectory;
+
+ #ifdef WIN32
+ this->sTempDirectory.SwapChars( '/', '\\' );
+ #else
+ this->sTempDirectory.SwapChars( '\\', '/' );
+ #endif
+
+}
+
+/*************************************************************************/
+//! @brief Get the OS dependent path separator.
+/*!
+ \returns Returns '\' for windows environment, otherwise returns '/'.
+*/
+
+char xbSsv::GetPathSeparator() const {
+ #ifdef WIN32
+ return '\\';
+ #else
+ return '/';
+ #endif
+}
+
+/*************************************************************************/
+//! @brief Get the current temp directory.
+/*!
+ \returns xbString containing the current data directory
+ where the database files are stored.
+*/
+
+xbString &xbSsv::GetTempDirectory() const {
+ return sTempDirectory;
+}
+
+/*************************************************************************/
+#ifdef XB_LOGGING_SUPPORT
+
+//! @brief Get the default log file name.
+/*!
+ \returns Returns the log file name.
+*/
+
+xbString & xbSsv::GetLogFileName() const {
+ return sLogFileName;
+}
+
+/*************************************************************************/
+//! @brief Get the default log directory.
+/*!
+ \returns Returns the log directory.
+*/
+
+
+xbString & xbSsv::GetLogDirectory() const {
+ return sLogDirectory;
+}
+/*************************************************************************/
+//! @brief Set the default log directory name.
+/*!
+ \param sLogDirectory Name of desired log directory.
+
+*/
+
+void xbSsv::SetLogDirectory( const xbString &sLogDirectoryIn ){
+
+ this->sLogDirectory = sLogDirectoryIn;
+ #ifdef WIN32
+ this->sLogDirectory.SwapChars( '/', '\\' );
+ #else
+ this->sLogDirectory.SwapChars( '\\', '/' );
+ #endif
+
+}
+
+//! @brief Set the log file name.
+/*!
+ \param sLogFileName - Log File Name.
+ \return void
+*/
+
+void xbSsv::SetLogFileName( const xbString & sLogFileName ){
+
+ this->sLogFileName = sLogFileName;
+}
+
+
+#else
+
+xbString & xbSsv::GetLogFileName() const {
+ return sNullString;
+}
+
+
+xbString & xbSsv::GetLogDirectory() const {
+
+std::cout << "xbSsv::GetLogDirectory() returning null\n";
+
+ return sNullString;
+}
+
+void xbSsv::SetLogDirectory( const xbString &sLogDirectory ){
+ return;
+}
+
+void xbSsv::SetLogFileName( const xbString & sLogFileName ){
+ return;
+}
+
+#endif
+
+/*************************************************************************/
+
+#ifdef XB_LOCKING_SUPPORT
+
+//! @brief Get the default lock retries.
+/*!
+ This is the number of lock attempts the libary will make before returning
+ failure if the file can not be locked.
+ \returns Default lock retry count.
+*/
+xbInt16 xbSsv::GetDefaultLockRetries() const {
+ return iDefaultLockRetries;
+}
+
+//! @brief Set the default lock retries.
+/*!
+ \param iDefaultLockRetries - Number of lock attempts before returning failure.
+*/
+void xbSsv::SetDefaultLockRetries( xbInt16 iDefaultLockRetries ) {
+ this->iDefaultLockRetries = iDefaultLockRetries;
+}
+
+//! @brief Get the default auto lock setting.
+/*!
+ When auto locking is turned on, the library automatically locks and unlocks
+ files and indices as needed in a multi user environment.
+ \returns Number of lock attempt settings.
+*/
+xbBool xbSsv::GetDefaultAutoLock() const {
+ return bDefaultAutoLock;
+}
+
+
+//! @brief Set the default auto lock setting.
+/*!
+ When auto locking is turned on, the library automatically locks and unlocks
+ files and indices as needed in a multi user environment. Locking is not required
+ in single a single user environment.
+
+ \param bDefaultAutoLock xbTrue - Turn autolocking on<br>
+ xbFalse - Turn autolocking off<br>
+*/
+void xbSsv::SetDefaultAutoLock( xbBool bDefaultAutoLock ) {
+ this->bDefaultAutoLock = bDefaultAutoLock;
+}
+
+//! @brief Enable default auto locking.
+/*!
+ When auto locking is turned on, the library automatically locks and unlocks
+ files and indices as needed in a multi user environment.
+*/
+void xbSsv::EnableDefaultAutoLock() {
+ this->bDefaultAutoLock = xbTrue;
+}
+
+//! @brief Disable defalt auto locking.
+/*!
+ When auto locking is turned off, the library does not automatically lock
+ and unlock files and indices as needed in a multi user environment.
+ Locking is not needed in a single user environment.
+
+*/
+void xbSsv::DisableDefaultAutoLock() {
+ this->bDefaultAutoLock = xbFalse;
+}
+/***************************************************************************/
+//! @brief Get default lock flavor
+/*!
+ Currently one flavor. This routine is part of the structure to support
+ future additional locking scenarios for Clipper and Foxpro.
+ \returns 1
+*/
+xbInt16 xbSsv::GetDefaultLockFlavor() const {
+ return iDefaultLockFlavor;
+}
+
+/***************************************************************************/
+//! @brief Set default lock flavor
+/*!
+ Currently one flavor. This routine is part of the structure to support
+ future additional locking scenarios for Clipper and Foxpro.
+*/
+void xbSsv::SetDefaultLockFlavor( xbInt16 iDefaultLockFlavor ) {
+ this->iDefaultLockFlavor = iDefaultLockFlavor;
+}
+
+/***************************************************************************/
+//! @brief Set default lock wait
+/*!
+ \param lLockWait Set default lock wait in milliseconds.
+*/
+void xbSsv::SetDefaultLockWait( xbInt32 lLockWait ) {
+ this->lDefaultLockWait = lLockWait;
+}
+
+/***************************************************************************/
+//! @brief Get default lock wait
+/*!
+ \returns Lock wait time in milliseconds.
+
+*/
+xbInt32 xbSsv::GetDefaultLockWait() const {
+ return lDefaultLockWait;
+}
+#endif
+
+/***************************************************************************/
+//! @brief Get the multi user setting.
+/*!
+ \returns xbTrue - Multi user mode turned on.<br>
+ xbFalse - Multi user mode turned off.<br>
+*/
+xbBool xbSsv::GetMultiUser() const {
+ return bMultiUser;
+}
+
+//! @brief Get the multi user setting.
+/*!
+ \param bMultiUser xbTrue - Turn on Multi user mode.<br>
+ xbFalse - Turn off Multi user mode.<br>
+*/
+void xbSsv::SetMultiUser( xbBool bMultiUser ) {
+ this->bMultiUser = bMultiUser;
+}
+
+
+
+/************************************************************************/
+#ifdef XB_MDX_SUPPORT
+//! @brief Get the mdx file block size used when creating a memo file.
+/*!
+ \returns system default setting for MDX block size.
+*/
+xbInt16 xbSsv::GetCreateMdxBlockSize() const {
+ return iCreateMdxBlockSize;
+}
+
+/************************************************************************/
+//! @brief Create mdx block size.
+/*!
+ This routine sets the mdx file block size at the system level. This value is
+ used when the mdx index file is initially created so if you want to change it,
+ this must be called before creating the table.
+
+ \param iBlockSize - Block size, must be evenly divisible by 512 and <= 16384
+ \returns XB_INVALID_BLOCK_SIZE<br>XB_NO_ERROR
+*/
+
+xbInt16 xbSsv::SetCreateMdxBlockSize( xbInt16 iBlockSize ){
+
+ if( iBlockSize < 512 || iBlockSize > 16384 || iBlockSize % 512 )
+ return XB_INVALID_BLOCK_SIZE;
+ else
+ iCreateMdxBlockSize = iBlockSize;
+
+ return XB_NO_ERROR;
+}
+#endif
+
+/************************************************************************/
+#if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
+//! @brief Get Unique Key Opt
+/*!
+ This routine returns the Unique Key Processing Option which is one of:
+ XB_HALT_ON_DUPKEY
+ XB_EMULATE_DBASE
+*/
+
+xbInt16 xbSsv::GetUniqueKeyOpt() const {
+ return iUniqueKeyOpt;
+}
+
+//! @brief Set Unique Key Opt
+/*! @brief Set Unique Key Opt
+ This routine Sets the Unique Key Processing Option which is one of:
+ XB_HALT_ON_DUPKEY
+ XB_EMULATE_DBASE
+*/
+xbInt16 xbSsv::SetUniqueKeyOpt( xbInt16 iOpt ){
+ if( iOpt == XB_HALT_ON_DUPKEY || iOpt == XB_EMULATE_DBASE ){
+ iUniqueKeyOpt = iOpt;
+ return XB_NO_ERROR;
+ } else {
+ return XB_INVALID_OPTION;
+ }
+}
+#endif
+/************************************************************************/
+#ifdef XB_BLOCKREAD_SUPPORT
+
+//! @brief Get Default Read Block Size
+/*!
+ This routine returns the default read block size used when allocating
+ buffer space for block reads of table data. Initial setting is 32768 bytes.
+*/
+xbUInt32 xbSsv::GetDefaultBlockReadSize() const {
+ return ulDefaultBlockReadSize;
+}
+
+
+//! @brief Set Default Read Block Size
+/*!
+ This routine sets the default read block size used when allocating
+ buffer space for block reads of table data. Initial setting is 32768 bytes.
+*/
+void xbSsv::SetDefaultBlockReadSize( xbUInt32 ulDfltBlockReadSize ){
+ ulDefaultBlockReadSize = ulDfltBlockReadSize;
+}
+
+#endif // XB_BLOCKREAD_SUPPORT
+/************************************************************************/
+
+
+
+
+} /* namespace */ \ No newline at end of file
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/core/xbstring.cpp b/1Tdata/xbase/xbase64-4.1.4/src/core/xbstring.cpp
new file mode 100755
index 0000000..89cefb6
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/core/xbstring.cpp
@@ -0,0 +1,2000 @@
+/* xbstring.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2021,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+//#ifdef __GNU LesserG__
+// #pragma implementation "xbstring.h"
+//#endif
+
+#include "xbase.h"
+
+
+namespace xb{
+
+XBDLLEXPORT const char * xbString::NullString = "";
+XBDLLEXPORT char xbString::cJunkBuf;
+
+/************************************************************************/
+//! @brief Destructor
+
+xbString::~xbString(){
+ if (data != NULL)
+ free(data);
+
+}
+
+/************************************************************************/
+//! @brief Constructor
+/*!
+ \param ulSize - Allocation size. The allocation size is normally handled internally
+ by the class, but it can be set in this constructor.
+*/
+xbString::xbString(xbUInt32 ulSize) {
+ data = (char *)calloc(1, ulSize);
+ this->size = ulSize;
+// memset( data, 0x00, ulSize ); - redundant, initialized by calloc
+}
+/************************************************************************/
+//! @brief Constructor
+/*!
+ \param c - Initialize string to c.
+*/
+xbString::xbString(char c) {
+ data = (char *)calloc(1, 2);
+ data[0] = c;
+ data[1] = 0;
+ size = 2;
+}
+/************************************************************************/
+//! @brief Constructor
+/*!
+ \param s - Initialize string to s.
+*/
+xbString::xbString( const char *s ) {
+
+ if( s == NULL ){
+ size = 0;
+ data = NULL;
+ } else {
+ size = (xbUInt32) (strlen(s) + 1 );
+ data = (char *) calloc( 1, size );
+ xb_strcpy( data, s );
+ }
+ // ctor(s);
+}
+/************************************************************************/
+//! @brief Constructor
+/*!
+ \param d - Initiailize string to d.
+*/
+xbString::xbString( xbDouble d ) {
+ data = NULL;
+ size = 0;
+ Sprintf("%f", d);
+}
+/************************************************************************/
+//! @brief Constructor
+/*!
+ \param s Initialize string to s.
+ \param ulMaxLen Maximum length of string. Truncate any characters greater than ulMaxLen.
+*/
+xbString::xbString( const char *s, xbUInt32 ulMaxLen ) {
+ xbUInt32 sSize = (xbUInt32) strlen( s );
+ if( sSize < ulMaxLen )
+ size = sSize;
+ else
+ size = ulMaxLen;
+ data = (char *)calloc(1, size+1);
+ for( xbUInt32 i = 0; i < size; i++ )
+ data[i] = s[i];
+ data[size] = '\0';
+ size++; // account for null trailing byte
+ return;
+}
+/************************************************************************/
+//! @brief Constructor
+/*!
+ \param s Initialize string to s.
+*/
+xbString::xbString( const xbString &s ) {
+ ctor(s.Str());
+}
+
+/************************************************************************/
+//! @brief Operator const char *
+/*!
+ \returns Pointer to string data.
+*/
+xbString::operator const char *() const {
+ return data ? data : NullString;
+}
+
+/************************************************************************/
+//! @brief Set operator =
+/*!
+ \param s - Set the string to the string on the right of the equal sign.
+*/
+xbString &xbString::operator=( const xbString &s ) {
+ return Set(s);
+}
+/************************************************************************/
+//! @brief Set operator =
+/*!
+ \param s - Set the string to the string on the right of the equal sign.
+*/
+xbString &xbString::operator=( const char *s ) {
+ return Set(s);
+}
+
+/************************************************************************/
+//! @brief Stream insertion operator <<
+/*!
+ std::cout << MyString << std::endl;
+
+ \param os Output stream
+ \param s String to send to output stream
+*/
+std::ostream& operator<< ( std::ostream& os, const xbString & s ) {
+ return os << s.Str();
+}
+/************************************************************************/
+//! @brief Append operator +=
+/*!
+ \param s - Append s to the string.
+*/
+xbString &xbString::operator+=( const xbString &s ) {
+
+ if (s.IsNull())
+ return (*this);
+
+ xbUInt32 Len = s.Len();
+ xbUInt32 oldLen = this->Len();
+ xbUInt32 newLen = Len + oldLen;
+
+ data = (char *)realloc(data, newLen+1);
+ if( !data )
+ return (*this);
+
+ if(oldLen == 0)
+ data[0] = 0;
+
+ char *t = data;
+ t+= oldLen;
+ for( xbUInt32 i = 0; i < Len; i++ )
+ *t++ = s.GetCharacter(i+1);
+
+ data[newLen] = '\0';
+ size == 0 ? size += (Len + 1) : size += Len;
+
+ return (*this);
+}
+/************************************************************************/
+//! @brief Append operator +=
+/*!
+ \param s - Append s to the string.
+*/
+xbString &xbString::operator+=( const char *s ) {
+
+ if (s == NULL)
+ return (*this);
+ xbUInt32 Len = (xbUInt32) strlen(s);
+ xbUInt32 oldLen = this->Len();
+ xbUInt32 newLen = Len + oldLen;
+ data = (char *)realloc(data, newLen+1);
+ if(oldLen == 0)
+ data[0] = 0;
+ for( xbUInt32 i = 0; i < Len; i++ )
+ data[i+oldLen] = s[i];
+ data[newLen] = '\0';
+ // size += Len;
+ size == 0 ? size+= (Len + 1) : size += Len;
+ return (*this);
+}
+/************************************************************************/
+//! @brief Append operator +=
+/*!
+ \param c - Append c to the string.
+*/
+xbString &xbString::operator+=( char c ) {
+ xbUInt32 Len = 1;
+ xbUInt32 oldLen = this->Len();
+ data = (char *)realloc(data, oldLen+Len+1);
+ data[oldLen] = c;
+ data[oldLen+1] = 0;
+ // size++;
+ size == 0 ? size += 2 : size++;
+ return (*this);
+}
+/************************************************************************/
+//! @brief Append operator -=
+/*!
+ Append s to the right of this string, right trimming both strings.
+ \param s - Append s to the right of the string value.
+*/
+xbString &xbString::operator-=( const xbString &s ) {
+
+ Rtrim();
+ if (s.IsNull())
+ return (*this);
+ xbUInt32 Len = s.Len();
+ xbUInt32 oldLen = this->Len();
+ xbUInt32 newLen = Len + oldLen;
+
+ data = (char *)realloc(data, newLen+1);
+ if(oldLen == 0)
+ data[0] = 0;
+
+ for( xbUInt32 i = 0; i < Len; i++ )
+ data[i+oldLen] = s.GetCharacter(i+1);
+
+ data[newLen] = '\0';
+ //size += Len;
+ size == 0 ? size += (Len+1) : size += Len;
+ Rtrim();
+ return (*this);
+}
+/************************************************************************/
+//! @brief Append operator -=
+/*!
+ Append s to the right of this string, right trimming both strings.
+ \param s - Append s to the right of the string value.
+*/
+xbString &xbString::operator-=(const char *s) {
+
+ Rtrim();
+ if (s == NULL)
+ return (*this);
+ xbUInt32 Len = (xbUInt32) strlen(s);
+ xbUInt32 oldLen = this->Len();
+ xbUInt32 newLen = Len + oldLen;
+
+ data = (char *)realloc(data, newLen+1);
+
+ if(oldLen == 0)
+ data[0] = 0;
+
+ for( xbUInt32 i = 0; i < Len; i++ )
+ data[i+oldLen] = s[i];
+ data[newLen] = '\0';
+
+ //size += Len;
+ size == 0 ? size += (Len+1) : size += Len;
+
+ Rtrim();
+ return (*this);
+}
+/************************************************************************/
+//! @brief Append operator -=
+/*!
+ Append c to the right of this string, trimming right space on this string first.
+ \param c - Append s to the right of the string value.
+*/
+xbString &xbString::operator-=(const char c) {
+ Rtrim();
+ xbUInt32 oldSize = size;
+
+ // size += 1;
+ size == 0 ? size += 2 : size += 1;
+
+ data = (char *)realloc( data, size );
+ if( oldSize == 0 ) data[0] = 0;
+ data[size-2] = c;
+ data[size-1] = 0;
+ Trim();
+ return (*this);
+}
+/************************************************************************/
+//! @brief Concatonate operator -
+/*!
+ Concatonate left string with right string returning reference to new string.
+ Both strings are trimmed.
+
+ \param s1 Right string operator.
+*/
+xbString xbString::operator-(const xbString &s1) {
+ xbString tmp( data );
+ tmp -= s1;
+ return tmp;
+}
+/************************************************************************/
+//! @brief Concatonate operator +
+/*!
+ Concatonate left string with right string returning reference to new string.
+
+ \param s1 Right string operator.
+*/
+xbString xbString::operator+( const char *s1) {
+ xbString tmp( data );
+ tmp += s1;
+ return tmp;
+}
+/************************************************************************/
+//! @brief Concatonate operator +
+/*!
+ Concatonate left string with right string returning reference to new string.
+
+ \param s1 Right string operator.
+*/
+xbString xbString::operator+( const xbString &s1) {
+ xbString tmp( data );
+ tmp += s1;
+ return tmp;
+}
+/************************************************************************/
+//! @brief Concatonate operator +
+/*!
+ Concatonate left string with right string returning reference to new string.
+
+ \param c Right string operator.
+*/
+
+xbString xbString::operator+( const char c) {
+ xbString tmp( data );
+ tmp += c;
+ return tmp;
+}
+/************************************************************************/
+//! @brief operator []
+/*!
+ \param n - Offset into the string of the byte to retrieve.
+ \returns c - The character to return from the offset within the [] brackets.
+*/
+char &xbString::operator[]( xbUInt32 n ) const {
+ if( n > 0 && n <= size )
+ return data[n-1];
+ else
+ return cJunkBuf;
+}
+/************************************************************************/
+//! @brief operator []
+/*!
+ \param n - Offset into the string of the byte to retrieve.
+ \returns c - The character to return from the offset within the [] brackets.
+*/
+char &xbString::operator[]( xbInt32 n ) const {
+ if( n > 0 && n <= (xbInt32) size )
+ return data[n-1];
+ else
+ return cJunkBuf;
+}
+/************************************************************************/
+//! @brief operator ==
+/*!
+ \param s String to compare
+ \returns xbTrue - Strings match.<br>
+ zbFalse - Strings don't match.<br>
+
+*/
+xbBool xbString::operator==( const xbString &s ) const {
+
+ if( data == NULL || data[0] == 0 ) {
+ if( s.data == NULL || s.data[0] == 0 )
+ return true;
+ return false;
+ } else {
+ if( s.data == NULL || s.data[0] == 0 )
+ return false;
+ return( strcmp(data,s.data) == 0 ? xbTrue : xbFalse );
+ }
+}
+/************************************************************************/
+//! @brief operator ==
+/*!
+ \param s String to compare
+ \returns xbTrue - Strings match.<br>
+ zbFalse - Strings don't match.<br>
+*/
+xbBool xbString::operator==( const char *s ) const {
+
+ if (s == NULL) {
+ if ( data == NULL)
+ return true;
+ return false;
+ }
+ if ((s[0] == 0) && data == NULL)
+ return true;
+ if ( data == NULL)
+ return false;
+ return( strcmp( data, s) == 0 ? xbTrue : xbFalse );
+}
+/************************************************************************/
+//! @brief operator !=
+/*!
+ \param s String to compare
+ \returns xbTrue - Strings don't match.<br>
+ xbFalse - Strings match.<br>
+*/
+xbBool xbString::operator!=( const xbString &s ) const {
+ if( data == NULL || data[0] == 0 ) {
+ if( s.data == NULL || s.data[0] == 0 )
+ return xbFalse; // NULL != NULL
+ return xbTrue; // NULL != !NULL
+ } else {
+ if( s.data == NULL || s.data[0] == 0 )
+ return xbTrue; // !NULL != NULL
+ return( strcmp( data, s.data ) != 0 ? xbTrue : xbFalse ); // !NULL != !NULL
+ }
+}
+/************************************************************************/
+//! @brief operator !=
+/*!
+ \param s String to compare
+ \returns xbTrue - Strings don't match.<br>
+ zbFalse - Strings match.<br>
+*/
+xbBool xbString::operator!=( const char *s ) const {
+ if( s == NULL || s[0] == 0 ) {
+ if( data == NULL || data[0] == 0 )
+ return xbFalse; // NULL != NULL
+ return xbTrue; // NULL != !NULL
+ } else {
+ if( s == NULL || s[0] == 0 )
+ return xbTrue; // !NULL != NULL
+ return( strcmp( data, s ) != 0 ? xbTrue : xbFalse ); // !NULL != !NULL
+ }
+}
+/************************************************************************/
+//! @brief operator <
+/*!
+ \param s String to compare
+ \returns xbTrue - Left string is less than the right string.<br>
+ zbFalse - Left string is not less than the right string.<br>
+*/
+xbBool xbString::operator< ( const xbString &s ) const {
+
+ if( data == NULL || data[0] == 0 ) {
+ if( s.data == NULL || s.data[0] == 0 )
+ return false;
+ return true;
+ } else {
+ if( s.data == NULL || s.data[0] == 0 )
+ return false;
+ return ( strcmp(data, s.data) < 0 ? xbTrue : xbFalse );
+ }
+}
+/************************************************************************/
+//! @brief operator >
+/*!
+ \param s String to compare
+ \returns xbTrue - Left string is greater than the right string.<br>
+ zbFalse - Left string is not greater than the right string.<br>
+*/
+xbBool xbString::operator> ( const xbString &s ) const {
+ if( data == NULL || data[0] == 0 ) {
+ if( s.data == NULL || s.data[0] == 0 )
+ return false;
+ return false;
+ } else {
+ if( s.data == NULL || s.data[0] == 0 )
+ return true;
+ return( strcmp(data,s.data) > 0 ? xbTrue : xbFalse );
+ }
+}
+/************************************************************************/
+//! @brief operator <=
+/*!
+ \param s String to compare
+ \returns xbTrue - Left string is less than or equal to the right string.<br>
+ zbFalse - Left string is not less than or equal to the right string.<br>
+*/
+xbBool xbString::operator<=( const xbString &s ) const {
+ if( data == NULL || data[0] == 0 ) {
+ if( s.data == NULL || s.data[0] == 0 )
+ return true;
+ return true;
+ } else {
+ if( s.data == NULL || s.data[0] == 0 )
+ return false;
+ return( strcmp(data,s.data) <= 0 ? xbTrue : xbFalse );
+ }
+}
+/************************************************************************/
+//! @brief operator >=
+/*!
+ \param s String to compare
+ \returns xbTrue - Left string is greater than or equal to the right string.<br>
+ zbFalse - Left string is not greater than or equal to the right string.<br>
+*/
+xbBool xbString::operator>=( const xbString &s ) const {
+ if( data == NULL || data[0] == 0 ) {
+ if( s.data == NULL || s.data[0] == 0 )
+ return true;
+ return false;
+ } else {
+ if( s.data == NULL || s.data[0] == 0 )
+ return true;
+ return( strcmp(data, s.data) >= 0 ? xbTrue : xbFalse );
+ }
+}
+
+/************************************************************************/
+//! @brief Add a prefixing back slash to specified characters in the string.
+/*!
+ \param c Character to prefix with a backslash.
+ \returns Reference to this string.
+*/
+xbString &xbString::AddBackSlash( char c ) {
+
+ xbUInt32 lCnt = CountChar( c );
+ if( lCnt == 0 )
+ return *this;
+ char *p;
+ if(( p = (char *)calloc( 1, size + lCnt )) == NULL )
+ return *this;
+
+ char *p2 = p;
+ for( xbUInt32 lS = 0; lS < size; lS++ ){
+ if( data[lS] == c )
+ *p2++ = '\\';
+ *p2++ = data[lS];
+ }
+ if( data )
+ free( data );
+ data = p;
+
+ // size += lCnt;
+ size == 0 ? size += (lCnt+1) : size += lCnt;
+
+ return *this;
+}
+/************************************************************************/
+//! @brief Append data to string.
+/*!
+ \param s String data to append.
+ \returns Reference to this string.
+*/
+xbString &xbString::Append( const xbString &s ) {
+ *this += s;
+ return *this;
+}
+
+/************************************************************************/
+//! @brief Append data to string.
+/*!
+ \param s String data to append.
+ \returns Reference to this string.
+*/
+xbString &xbString::Append( const char *s ) {
+ *this += s;
+ return *this;
+}
+/************************************************************************/
+//! @brief Append data to string.
+/*!
+ \param c String data to append.
+ \returns Reference to this string.
+*/
+xbString &xbString::Append( char c ) {
+ *this += c;
+ return *this;
+}
+/************************************************************************/
+//! @brief Append data to string.
+/*!
+ \param s String data to append.
+ \param ulByteCount Maximum number of bytes to append.
+ \returns Reference to this string.
+*/
+xbString &xbString::Append( const char *s, xbUInt32 ulByteCount ) {
+
+ if ( s == NULL || !*s || ulByteCount == 0)
+ return (*this);
+
+ xbUInt32 ulOrigLen = this->Len();
+
+ // s might not be null byte at the end, can't use strlen
+ // xbUInt32 ulAddLen = strlen( s );
+ xbUInt32 ulAddLen = 0;
+ const char *p = s;
+
+ while( ulAddLen < ulByteCount && *p ){
+ p++;
+ ulAddLen++;
+ }
+
+ if( ulAddLen > ulByteCount )
+ ulAddLen = ulByteCount;
+
+ size = ulOrigLen + ulAddLen + 1;
+ data = (char *) realloc( data, size );
+
+ for( xbUInt32 i = 0; i < ulAddLen; i++ )
+ data[i+ulOrigLen] = s[i];
+
+ data[size-1] = 0x00;
+ return (*this);
+}
+
+/************************************************************************/
+//! @brief Assign portion of string.
+/*!
+ \param sStr - Source string for copy operation. sStr needs to be a Null terminated string.
+ \param ulStartPos - Starting position within source string.
+ \param ulCopyLen - Length of data to copy.
+ \returns Reference to this string.
+*/
+xbString &xbString::Assign(const char * sStr, xbUInt32 ulStartPos, xbUInt32 ulCopyLen){
+ if(data){
+ free(data);
+ data = 0;
+ size = 0;
+ }
+ xbUInt32 lLen = (xbUInt32) strlen( sStr );
+ if( ulStartPos > lLen ){
+ size = 0;
+ return( *this );
+ }
+ if((( ulCopyLen - 1) + ulStartPos ) > lLen )
+ ulCopyLen = lLen - ulStartPos + 1;
+ data = (char *)calloc(1, ulCopyLen + 1);
+
+ //size = ulCopyLen + 1;
+ size == 0 ? size += (ulCopyLen+1) : size += ulCopyLen;
+
+ for( xbUInt32 i = 0; i < ulCopyLen; i++ )
+ data[i] = sStr[i + ulStartPos - ((xbUInt32) 1)];
+ data[ulCopyLen] = '\0';
+ return (*this);
+}
+/************************************************************************/
+//! @brief Assign portion of string.
+/*!
+ \param sStr - Source string for copy operation. sStr needs to be a Null terminated string.
+ \param ulStartPos - Starting position within source string.
+ \returns Reference to this string.
+*/
+xbString &xbString::Assign(const char * sStr, xbUInt32 ulStartPos){
+ if(data){
+ free(data);
+ data = 0;
+ size = 0;
+ }
+ xbUInt32 ulSrcLen = (xbUInt32) strlen( sStr );
+ if( ulStartPos > ulSrcLen ){
+ size = 0;
+ return( *this );
+ }
+ xbUInt32 ulCopyLen;
+ ulCopyLen = ulSrcLen - ulStartPos + 1;
+ data = (char *)calloc(1, ulCopyLen + 1);
+
+ size = ulCopyLen + 1;
+
+ for( xbUInt32 i = 0; i < ulCopyLen; i++ )
+ data[i] = sStr[i + ulStartPos - ((xbUInt32) 1)];
+ data[ulCopyLen] = '\0';
+ return (*this);
+}
+
+/************************************************************************/
+//! @brief Assign portion of string.
+/*!
+ \param sStr - Source string for copy operation. sStr needs to be a Null terminated string.
+ \param ulStartPos - Starting position within source string.
+ \param ulCopyLen - Length of data to copy.
+ \returns Reference to this string.
+*/
+xbString &xbString::Assign(const xbString& sStr, xbUInt32 ulStartPos, xbUInt32 ulCopyLen){
+ if(data){
+ free(data);
+ data = 0;
+ size = 0;
+ }
+ xbUInt32 ulSrcLen = sStr.Len();
+ if( ulStartPos > ulSrcLen ){
+ size = 0;
+ return( *this );
+ }
+ if((( ulCopyLen - 1) + ulStartPos ) > ulSrcLen )
+ ulCopyLen = ulSrcLen - ulStartPos + 1;
+ data = (char *)calloc(1, ulCopyLen + 1);
+ size = ulCopyLen + 1;
+ for( xbUInt32 i = 0; i < ulCopyLen; i++ )
+ data[i] = sStr[i + ulStartPos];
+ data[ulCopyLen] = '\0';
+ return (*this);
+}
+/************************************************************************/
+//! @brief Assign portion of string.
+/*!
+ \param sStr - Source string for copy operation. sStr needs to be a Null terminated string.
+ \param ulStartPos - Starting position within source string.
+ \returns Reference to this string.
+*/
+xbString &xbString::Assign(const xbString& sStr, xbUInt32 ulStartPos){
+ if(data){
+ free(data);
+ data = 0;
+ size = 0;
+ }
+ xbUInt32 ulSrcLen = sStr.Len();
+ if( ulStartPos > ulSrcLen ){
+ size = 0;
+ return( *this );
+ }
+ xbUInt32 ulCopyLen;
+ ulCopyLen = ulSrcLen - ulStartPos + 1;
+ data = (char *)calloc(1, ulCopyLen + 1);
+ size = ulCopyLen;
+ for( xbUInt32 i = 0; i < ulCopyLen; i++ )
+ data[i] = sStr[i + ulStartPos];
+ data[ulCopyLen] = '\0';
+ size++;
+ return (*this);
+}
+/************************************************************************/
+//! @brief Copy a string
+/*!
+ \returns xbString.
+*/
+xbString xbString::Copy() const {
+ return( *this );
+}
+/************************************************************************/
+//! @brief Count the number of characters in the string.
+/*!
+ \param c Character to count.
+ \param iOpt 0 - Count the number of characters.<br>
+ 1 - Count the number of characters not between single or double quotes.
+ \returns The number of characters.
+*/
+xbUInt32 xbString::CountChar( char c, xbInt16 iOpt ) const {
+ if( iOpt == 0 )
+ return CountChar( c );
+ else{
+ xbBool bSingleQuote = xbFalse;
+ xbBool bDoubleQuote = xbFalse;
+ char cPrevChar = 0x00;
+ xbUInt32 i,j;
+ for( i = 0, j = 0; i < size; i++ ){
+ if( bSingleQuote && data[i] == '\'' && cPrevChar != '\\' ){
+ bSingleQuote = xbFalse;
+ }
+ else if( bDoubleQuote && data[i] == '"' && cPrevChar != '\\' ){
+ bDoubleQuote = xbFalse;
+ }
+ else if( data[i] == '\'' && cPrevChar != '\\' && !bDoubleQuote ){
+ bSingleQuote = xbTrue;
+ }
+ else if( data[i] == '"' && cPrevChar != '\\' && !bSingleQuote ){
+ bDoubleQuote = xbTrue;
+ }
+ else if( !bDoubleQuote && !bSingleQuote && data[i] == c ){
+ j++;
+ }
+ cPrevChar = data[i];
+ }
+ return j;
+ }
+}
+/************************************************************************/
+//! @brief Count the number of characters in the string.
+/*!
+ \param c Character to count.
+ \returns The number of characters.
+*/
+xbUInt32 xbString::CountChar( char c ) const {
+ xbUInt32 i,j;
+ for( i = 0,j = 0; i < size; i++ )
+ if( data[i] == c )
+ j++;
+ return j;
+}
+/************************************************************************/
+void xbString::ctor( const char *s ) {
+
+ // this routine assumes it was called by one of the constructors.
+
+ if (s == NULL) {
+ data = NULL;
+ size = 0;
+ return;
+ }
+
+ size = (xbUInt32) (strlen(s) + 1);
+ data = (char *) calloc( 1, size);
+
+ xb_strcpy(data, s);
+}
+/************************************************************************/
+//! @brief Convert hex character to string.
+/*!
+ This routine converts a four byte string in the format of 0x00 to a one byte char value.
+ The first four bytes of the string must be in the format 0x00.
+ Anything past the first four bytes is disregarded.
+
+ \param cOut Output character.
+ \returns XB_INVALID_PARM on error<br>
+ XB_NO_ERROR on success.
+*/
+xbInt16 xbString::CvtHexChar( char &cOut ){
+
+ int j, k;
+ char c;
+
+ if( Len() < 4 || data[0] != '0' || (data[1]!='X' && data[1]!='x' ))
+ return XB_INVALID_PARM;
+
+ c = (char) toupper( data[2] );
+ j = ( c > '9' ? c - 'A' + 10 : c - '0' );
+ c = (char)toupper( data[3] );
+ k = ( c > '9' ? c - 'A' + 10 : c - '0' );
+ j = ( j << 4 ) + k;
+
+ cOut = ( char ) j;
+ return XB_NO_ERROR;
+}
+/************************************************************************/
+//! @brief Convert string of hex characters to string.
+/*!
+
+ This routine converts a string of four byte format of 0x00 to a string of one byte chars.
+
+ \param sOut Output string of converted characters.
+ \returns XB_INVALID_PARM on error<br>
+ XB_NO_ERROR on success.
+*/
+xbInt16 xbString::CvtHexString( xbString &sOut ){
+ char c;
+ xbString ws;
+ ws = data;
+ sOut = "";
+ xbInt16 iRc;
+ while( ws.Len()){
+ if(( iRc= ws.CvtHexChar( c )) != XB_NO_ERROR )
+ return iRc;
+ sOut += c;
+ ws.Ltrunc( 4 );
+ }
+ return XB_NO_ERROR;
+}
+/************************************************************************/
+//! @brief Convert string to xbUInt64 number
+/*!
+ \param ullOut - output unsigned long long.
+ \returns XB_NO_ERROR
+*/
+xbInt16 xbString::CvtULongLong( xbUInt64 &ullOut ){
+
+ // version 1 - fast, but no data checking
+ ullOut = 0;
+ char *s = data;
+ int i = 0;
+ while( *s ){
+ ullOut *= 10;
+ ullOut += (xbUInt64) *s - '0';
+ s++;
+ i++;
+ }
+ return XB_NO_ERROR;
+}
+/************************************************************************/
+//! @brief Convert string to xbInt64 number
+/*!
+ \param llOut - output long long.
+ \returns XB_NO_ERROR
+*/
+xbInt16 xbString::CvtLongLong( xbInt64 &llOut ){
+
+ // version 1 - fast, but no data checking
+ llOut = 0;
+ char *s = data;
+ int i = 0;
+ while( *s ){
+ llOut *= 10;
+ llOut += (xbInt64) *s - '0';
+ s++;
+ i++;
+ }
+ return XB_NO_ERROR;
+}
+
+/************************************************************************/
+#ifdef XB_DEBUG_SUPPORT
+void xbString::Dump( const char * title, xbInt16 iHexOption ) const {
+ fprintf(stdout, "%s StringSize[%d] DataLen=[%d] data=[%s]\n", title, size, Len(), data );
+ if( iHexOption ){
+ std::cout << "Hex values" << std::endl;
+ for( xbUInt32 i = 0; i < strlen( data ); i++ )
+ printf( " %x", data[i] );
+ std::cout << std::endl;
+ }
+}
+void xbString::Dump( const char * title ) const {
+ Dump( title, 0 );
+}
+
+void xbString::DumpHex( const char * title ) const {
+ Dump( title, 1 );
+}
+#endif
+
+/************************************************************************/
+//! @brief Extract an element out of a delimited string.
+/*!
+ \param sSrc Source string.
+ \param cDelim Delimiter.
+ \param lSkipCnt Number of delimiters to skip.
+ \param iOpt 0 - ignore single and double quotes.<br>
+ 1 - ignore delimiters between single or double quotes.
+ \returns Reference to string extracted from element.
+*/
+xbString &xbString::ExtractElement( xbString &sSrc, char cDelim, xbUInt32 lSkipCnt, xbInt16 iOpt )
+{
+ return ExtractElement( sSrc.Str(), cDelim, lSkipCnt, iOpt );
+}
+
+/************************************************************************/
+//! @brief Extract an element out of a delimited string.
+/*!
+ \param pSrc Source string.
+ \param cDelim Delimiter.
+ \param lSkipCnt Number of delimiters to skip.
+ \param iOpt 0 - ignore single and double quotes.<br>
+ 1 - ignore delimiters between single or double quotes.
+ \returns Reference to string extracted from element.
+*/
+xbString &xbString::ExtractElement( const char *pSrc, char cDelim, xbUInt32 lSkipCnt, xbInt16 iOpt )
+{
+ /* opt values
+ 0 - ignore single and double quotes
+ 1 - ignore delimiters between single or double quotes
+ */
+
+ xbUInt32 lLen;
+ xbUInt32 lCurCnt = 0;
+ xbBool bInSingleQuotes = xbFalse;
+ xbBool bInDoubleQuotes = xbFalse;
+ char cPrevChar = 0x00;
+ const char *s = pSrc;
+ const char *pAnchor;
+
+ /* skip past skipcnt delimiters */
+ while( *s && lCurCnt < (lSkipCnt-1) ){
+ if( iOpt == 0 ){
+ if( *s == cDelim )
+ lCurCnt++;
+ } else {
+ if( *s == cDelim && !bInSingleQuotes && !bInDoubleQuotes ){
+ lCurCnt++;
+ } else if( *s == '\'' && !bInDoubleQuotes && cPrevChar != '\\' ){
+ if( bInSingleQuotes == xbTrue )
+ bInSingleQuotes = xbFalse;
+ else
+ bInSingleQuotes = xbTrue;
+ } else if( *s == '"' && !bInSingleQuotes && cPrevChar != '\\' ){
+ if( bInDoubleQuotes == xbTrue )
+ bInDoubleQuotes = xbFalse;
+ else
+ bInDoubleQuotes = xbTrue;
+ }
+ }
+ cPrevChar = *s;
+ s++;
+ }
+
+ /* at the beginning of the field */
+ pAnchor = s;
+ xbBool bDone = xbFalse;
+ while( *s && !bDone ){
+ if( iOpt == 0 ){
+ if( *s == cDelim )
+ bDone = xbTrue;
+ } else {
+ if( *s == cDelim && !bInSingleQuotes && !bInDoubleQuotes ){
+ bDone = xbTrue;
+ } else if( *s == '\'' && !bInDoubleQuotes && cPrevChar != '\\' ){
+ if( bInSingleQuotes == xbTrue )
+ bInSingleQuotes = xbFalse;
+ else
+ bInSingleQuotes = xbTrue;
+ } else if( *s == '"' && !bInSingleQuotes && cPrevChar != '\\' ){
+ if( bInDoubleQuotes == xbTrue )
+ bInDoubleQuotes = xbFalse;
+ else
+ bInDoubleQuotes = xbTrue;
+ }
+ }
+ cPrevChar = *s;
+ s++;
+ }
+
+ // if at end of string, go back one and drop the delimiter
+ if( *s ) s--;
+
+ lLen = (xbUInt32)(s - pAnchor);
+
+ /* copy data */
+ data = (char *) realloc( data, lLen+1 );
+ memcpy( data, pAnchor, lLen );
+ data[lLen] = 0;
+ this->size = lLen+1;
+ return *this;
+}
+
+/************************************************************************/
+//! @brief Get a character by position
+/*!
+ \param n - Position in string to extract. First position is 1 (not 0).
+ \returns Character from position n, or null.
+*/
+char xbString::GetCharacter( xbUInt32 n ) const {
+ if( n > 0 && n <= size )
+ return data[n-1];
+ else
+ return 0x00;
+}
+/************************************************************************/
+//! @brief Get the position of the last occurrence of a given character.
+/*!
+ \param c - Character to search for.
+ \returns Last position of character in the string.
+*/
+xbUInt32 xbString::GetLastPos(char c) const {
+
+ if (data == NULL)
+ return 0;
+
+ char *p = data;
+ xbUInt32 iPos = 0;
+ xbUInt32 hPos = 0;
+ while( *p && iPos++ < ( size - 1 )){
+ if( *p == c )
+ hPos = iPos;
+ p++;
+ }
+ if( hPos )
+ return hPos;
+ else
+ return 0;
+}
+/************************************************************************/
+//! @brief Get the position of the last occurrence of a given string.
+/*!
+ \param s - String to search for.
+ \returns Last position of character in the string.
+*/
+xbUInt32 xbString::GetLastPos(const char* s) const{
+
+ if (data == NULL)
+ return 0;
+
+ char *p = data;
+ char *saveP = NULL;
+ while( p ){
+ p = strstr( p, s);
+ if( p ){
+ saveP = p;
+ p++;
+ }
+ }
+ if (saveP == NULL)
+ return 0;
+ return (xbUInt32)(saveP - data) + 1;
+}
+/************************************************************************/
+//! @brief Get the path separator out of the string.
+/*!
+ This method assumes the string is a valid path name.
+ If it is, it returns either / or \.
+ \returns Char value containing either / or \ depending on OS.
+*/
+char xbString::GetPathSeparator() const {
+
+ if (data == NULL)
+ return 0x00;
+ char *p = data;
+ while( *p ){
+ if( *p == '\\' || *p == '/' )
+ return *p;
+ else
+ p++;
+ }
+ return 0x00;
+}
+
+/************************************************************************/
+//! @brief Retrieve the size of the string buffer.
+/*!
+ \returns Size of string buffer including the null terminating byte.
+*/
+xbUInt32 xbString::GetSize() const {
+ return size;
+}
+
+/************************************************************************/
+//! @brief Determine if the string has any alpha characters
+/*!
+ \returns xbTrue - String contains one or more aloha characters.<br>
+ xbFalse - String contains no alpha characters.
+*/
+xbBool xbString::HasAlphaChars() const {
+ for( xbUInt32 i = 0; i < size; i++ )
+ if( isalpha( data[i] ))
+ return xbTrue;
+ return xbFalse;
+}
+
+
+/************************************************************************/
+//! @brief Determine if string is empty
+/*!
+ \returns xbTrue if string is empty.<br>
+ xbFalse if string is not empty.
+*/
+xbBool xbString::IsEmpty() const {
+ if( data == NULL )
+ return true;
+ if( data[0] == 0 )
+ return xbTrue;
+ return xbFalse;
+}
+
+/************************************************************************/
+//! @brief Determine if string is NULL
+/*!
+ \returns xbTrue if string is NULL.<br>
+ xbFalse if string is not NULL.
+*/
+xbBool xbString::IsNull() const {
+ return( data == NULL );
+}
+
+
+/************************************************************************/
+//! @brief Retain left part of string, drop rightmost characters.
+/*!
+ \param ulLen New string length, truncate rightmost excess.
+ \returns Reference to string.
+*/
+xbString &xbString::Left( xbUInt32 ulLen ) {
+ return Mid( 1, ulLen );
+}
+
+/************************************************************************/
+//! @brief Retrieve length of current string.
+/*!
+ \returns String length, excluding the terminating null byte.
+*/
+// return length of string
+xbUInt32 xbString::Len() const {
+ return( data ? (xbUInt32) strlen(data) : 0 );
+}
+
+/************************************************************************/
+//! @brief Left trim white space from string.
+/*!
+ \returns Reference to this string.
+*/
+xbString &xbString::Ltrim(){
+
+ if( !data )
+ return *this;
+
+ char *p = data;
+ if( !*p || (*p && *p != ' ') )
+ return *this; /* nothing to do */
+
+ xbUInt32 s = 0;
+ while( *p && *p == ' ' ){
+ p++;
+ s++;
+ size--;
+ }
+
+ xbUInt32 i;
+ for( i = 0; i < size; i++ )
+ data[i] = data[i+s];
+ data[i] = 0x00;
+ data = (char *) realloc( data, size );
+
+ return *this;
+
+}
+
+/************************************************************************/
+//! @brief Left truncate string
+/*!
+ \param ulCnt Number of bytes to remove from the left.
+ \returns Reference to this string.
+*/
+xbString &xbString::Ltrunc( xbUInt32 ulCnt ){
+ if( ulCnt >= size ){
+ if( size > 0 ){
+ free( data );
+ data = NULL;
+ size = 0;
+ }
+ return *this;
+ }
+
+ char * ndata;
+ char * p;
+ ndata = (char *) calloc( 1, size - ulCnt );
+ p = data;
+ p += ulCnt;
+ xb_strcpy( ndata, p );
+ free( data );
+ data = ndata;
+ size = size - ulCnt;
+ return *this;
+}
+
+/************************************************************************/
+//! @brief Extract portion of data from string
+/*!
+ \param ulStartPos Starting position
+ \param ulTargLen Length
+ \returns Reference to string
+*/
+xbString &xbString::Mid( xbUInt32 ulStartPos, xbUInt32 ulTargLen ){
+
+ // this is a 1 based routine
+ if( ulStartPos == 0 )
+ return *this;
+
+ if( data == NULL )
+ return( *this );
+ if( data[0] == 0 )
+ return( *this );
+ if( ulStartPos > Len() )
+ return( *this );
+/*
+ // Resize( ulTargLen + 1 );
+ char *pTarg = data;
+ char *pSrc = data + ulStartPos - 1;
+ for( xbUInt32 l = 0; l < ulTargLen; l++ )
+ *pTarg++ = *pSrc++;
+ *pTarg = 0x00;
+ // Resize( ulTargLen + 1 );
+ */
+
+ char * newData = (char *) calloc( 1, ulTargLen + 1 );
+ char *pTarg = newData;
+ char *pSrc = data + ulStartPos - 1;
+ for( xbUInt32 l = 0; l < ulTargLen; l++ )
+ *pTarg++ = *pSrc++;
+ *pTarg = 0x00;
+
+ free( data );
+ data = newData;
+ size = ulTargLen + 1;
+
+ return *this;
+}
+
+/************************************************************************/
+//! @brief Left pad string
+/*!
+ \param c Padding character.
+ \param ulNewLen New string length.
+ \returns Reference to this string.
+*/
+xbString &xbString::PadLeft( char c, xbUInt32 ulNewLen ){
+
+ xbUInt32 srcLen;
+ if( data )
+ srcLen = (xbUInt32) strlen( data );
+ else
+ srcLen = 0;
+
+ if( srcLen >= ulNewLen )
+ return *this;
+
+ char * newData = (char *) calloc( 1, ulNewLen + 1 );
+ xbUInt32 i;
+ for( i = 0; i < ulNewLen - srcLen; i++ )
+ newData[i] = c;
+
+ char *targ = &newData[i];
+ xb_strcpy( targ, data );
+ free( data );
+ data = newData;
+ size = ulNewLen + 1;
+ return *this;
+}
+
+/************************************************************************/
+//! @brief Right pad string
+/*!
+ \param c Padding character.
+ \param ulNewLen New string length.
+ \returns Reference to this string.
+*/
+xbString &xbString::PadRight( char c, xbUInt32 ulNewLen ){
+ xbUInt32 srcLen = (xbUInt32) strlen( data );
+ if( srcLen >= ulNewLen )
+ return *this;
+ data = (char *) realloc( data, ulNewLen + 1 );
+ xbUInt32 i;
+ for( i = srcLen; i < ulNewLen; i++ )
+ data[i] = c;
+ data[i] = 0x00;
+ size = ulNewLen + 1;
+ return *this;
+}
+
+/************************************************************************/
+//! @brief Determine position of a given character
+/*!
+ \param c Seek character
+ \param ulStartPos starting position for search, first position is 1
+ \returns Position within string. Returns 0 if not found.
+*/
+xbUInt32 xbString::Pos(char c, xbUInt32 ulStartPos ) const {
+
+ if (data == NULL)
+ return 0;
+ char *p = data;
+
+ if( ulStartPos >= size )
+ return 0;
+
+ xbUInt32 iPos = 0;
+ while( (iPos+1) < ulStartPos ){
+ p++;
+ iPos++;
+ }
+ xbBool bFound = 0;
+ while( *p && !bFound && iPos < ( size - 1 )){
+ if( *p == c )
+ bFound = 1;
+ else {
+ iPos++;
+ p++;
+ }
+ }
+
+ if( bFound )
+ return iPos + 1;
+ else
+ return 0;
+}
+
+/************************************************************************/
+//! @brief Determine position of a given character
+/*!
+ \param c Seek character
+ \returns Position within string. Returns 0 if not found.
+*/
+xbUInt32 xbString::Pos(char c) const {
+
+ if (data == NULL)
+ return 0;
+ char *p = data;
+ xbUInt32 iPos = 0;
+ int iFound = 0;
+ while( *p && !iFound && iPos < ( size - 1 )){
+ if( *p == c )
+ iFound = 1;
+ else {
+ iPos++;
+ p++;
+ }
+ }
+ if( iFound )
+ return iPos + 1;
+ else
+ return 0;
+}
+
+/************************************************************************/
+//! @brief Determine position of a given substring
+/*!
+ \param s Substring
+ \returns Position within string. Returns 0 if not found.
+*/
+xbUInt32 xbString::Pos(const char* s) const{
+
+ if (data == NULL)
+ return 0;
+
+ char *p = strstr(data, s);
+ if ( p == NULL)
+ return 0;
+
+ return (xbUInt32)(p - data + 1);
+}
+
+/************************************************************************/
+//! @brief Insert character into string
+/*!
+ \param ulPos Insertion position.
+ \param c Character to insert.
+ \returns Reference to this string.
+*/
+xbString &xbString::PutAt(xbUInt32 ulPos, char c){
+ if((ulPos-1) > Len() )
+ return *this;
+ data[ulPos-1] = c;
+ return *this;
+}
+
+/************************************************************************/
+//! @brief Remove portion of string.
+/*!
+ \param ulStartPos Starting position for removal operation.
+ \param ulDelSize Size of deletion.
+ \returns Reference to string.
+*/
+xbString &xbString::Remove(xbUInt32 ulStartPos, xbUInt32 ulDelSize ) {
+ if( data == NULL )
+ return( *this );
+ if( data[0] == 0 )
+ return( *this );
+ xbUInt32 srcLen = Len();
+
+ if( ulStartPos > srcLen || ulStartPos < 1 || ulDelSize < 1 )
+ return( *this );
+
+ if(( ulStartPos + ulDelSize - 1) >= size ){
+ data[ulStartPos-1] = 0x00;
+ size = ulStartPos;
+ return( *this );
+ }
+
+ char *t;
+ char *s;
+ t = data + (ulStartPos - 1);
+ s = t + ulDelSize;
+ size -= ulDelSize;
+ while( *s )
+ *t++ = *s++;
+ *t = 0x00;
+ return( *this );
+}
+
+/************************************************************************/
+//! @brief Replace a value within a string with another value
+/*!
+ \param sReplace - Character string to replace.
+ \param sReplaceWith - Character string to replace with
+ \param iOption - 0 = All occurrences, 1 = first occurrence
+ \returns Reference to this string.
+*/
+
+//the new size includes the null termination byte
+xbString &xbString::Replace( const char *sReplace, const char *sReplaceWith, xbInt16 iOption ){
+
+ xbBool bDone = xbFalse;
+ xbUInt32 ulPos;
+ xbUInt32 ulNewLen;
+ xbUInt32 ulReplaceWithLen;
+ xbUInt32 ulRsLen; // size of right side of string after replaced data
+ xbUInt32 ulSp2;
+ char *sBuf2;
+
+ const char *s; // source ptr
+ char *t; // target ptr
+
+ while( !bDone ){
+ ulPos = Pos( sReplace );
+ if( ulPos == 0 ){
+ bDone = xbTrue;
+ } else {
+
+ ulReplaceWithLen = (xbUInt32) strlen( sReplaceWith );
+ ulNewLen = this->size + ulReplaceWithLen - (xbUInt32) strlen( sReplace );
+ sBuf2 = (char *) calloc( 1, ulNewLen );
+
+ // copy part1
+ t = sBuf2;
+ s = data;
+ for( xbUInt32 ul = 0; ul < ulPos-1; ul++ )
+ *t++ = *s++;
+
+ // copy part2
+ s = sReplaceWith;
+ for( xbUInt32 ul = 0; ul < ulReplaceWithLen; ul++ )
+ *t++ = *s++;
+
+ // copy part3
+ ulSp2 = ulPos + (xbUInt32) strlen( sReplace );
+ s = data;
+ s+= (ulSp2 - 1);
+ ulRsLen = (xbUInt32) strlen( s );
+ for( xbUInt32 ul = 0; ul < ulRsLen; ul++ )
+ *t++ = *s++;
+
+ if( iOption )
+ bDone = xbTrue;
+
+ free(data);
+ data = sBuf2;
+ size = ulNewLen;
+ }
+ }
+ return *this;
+}
+
+/************************************************************************/
+//! @brief Resize a string
+/*!
+ \param ulSize - New string size, including null termination byte.
+ \returns Reference to this string.
+*/
+//the new size includes the null termination byte
+xbString &xbString::Resize(xbUInt32 ulSize) {
+
+// data = (char *) realloc( data, ulSize );
+
+
+// original
+ data = (char *) realloc( data, ulSize );
+
+ if( ulSize > 0 )
+ data[ulSize-1] = 0;
+ this->size = ulSize;
+ return *this;
+}
+/************************************************************************/
+//! @brief Right trim the string.
+/*!
+ This routine removes any trailing white space on the string.
+
+ \returns Reference to string.
+*/
+xbString &xbString::Rtrim(){
+
+ xbUInt32 l = Len();
+ if( l == 0 )
+ return *this;
+
+ xbUInt32 ulOrigSize = size;
+ l--;
+
+ for(;;) {
+ if( data[l] != ' ' )
+ break;
+ data[l] = 0;
+ size--;
+ if( l == 0 )
+ break;
+ l--;
+ }
+
+ if( ulOrigSize != size )
+ data = (char * ) realloc( data, size );
+ return *this;
+}
+
+/************************************************************************/
+//! @brief Set the value of the string.
+/*!
+
+ Note: This routine fails if you try to set the string to itself or some part of itself.
+
+ \param s Value to set the string.
+ \returns Reference to string.
+
+*/
+xbString &xbString::Set( const char *s ) {
+
+ if(data != NULL){
+ free(data);
+ data = NULL;
+ }
+ if( s == NULL || !*s ) {
+ if( data )
+ free( data );
+ data = NULL;
+ size = 0;
+ } else {
+ //data = (char *)calloc(1, strlen(s) + 1 );
+ data = (char *) realloc( data, strlen(s) + 1 );
+ xb_strcpy(data, s);
+ size = (xbUInt32) (strlen(data) + 1);
+ }
+ return (*this);
+}
+/************************************************************************/
+//! @brief Set the value of the string.
+/*!
+ \param s Value to set the string.
+ \returns Reference to string.
+*/
+xbString &xbString::Set( const xbString &s ) {
+
+// if( s.Str() == NULL || s.Len() == 0 ){
+
+ if( s.Str() == NULL ){
+ if( data ) free( data );
+ data = NULL;
+ size = 0;
+ } else {
+ xbUInt32 ulLen = s.Len();
+ char *p = (char *) calloc( 1, ulLen + 1 );
+ xb_strcpy( p, s.Str());
+ size = ulLen + 1;
+ if( data ) free( data );
+ data = p;
+ }
+ return (*this );
+}
+
+/************************************************************************/
+//! @brief Set the value of the string.
+/*!
+
+ Note: This routine fails if you try to set the string to itself or some part of itself.
+
+ \param s Value to set the string.
+ \param ulSize Maximum size of resultant string.
+ \returns Reference to string.
+*/
+
+xbString &xbString::Set(const char *s, xbUInt32 ulSize) {
+
+ if( data != NULL )
+ free( data );
+
+ if(s == NULL) {
+ data = NULL;
+ size = 0;
+ return (*this);
+ }
+
+ data = (char *) calloc( 1, ulSize+1 );
+ char *pTarget = data;
+ for( xbUInt32 i = 0; i < ulSize; i++ ){
+ *pTarget = *s;
+ pTarget++;
+ s++;
+ }
+ this->size = ulSize + 1;
+ return *this;
+}
+
+
+/************************************************************************/
+//! @brief Set the string to long integer numeric value.
+/*!
+ \param lNum Value to set the string
+ \returns Reference to this string.
+*/
+xbString &xbString::SetNum(xbInt32 lNum) {
+ Sprintf("%ld", lNum);
+ return *this;
+}
+
+/************************************************************************/
+//! @brief Printf routine for formatting a string.
+/*!
+ See documentation on the standard C printf function for how to use this.
+
+ MyString.Sprintf( "a number %d some text %s", 100, "test text data" );
+
+ \param sFormat A format specifier
+ \returns Reference to a formatted string
+*/
+xbString &xbString::Sprintf( const char *sFormat, ...) {
+
+ xbInt32 iRc;
+ va_list ap;
+ char *t;
+
+#ifdef HAVE__VSNPRINTF_S_F
+
+ va_start( ap, sFormat );
+ size = (xbUInt32) _vsnprintf_s( NULL, 0, sFormat, ap ) + 1;
+ va_end( ap );
+
+ t = (char *) malloc( size );
+ if( !t ){
+ size = 0;
+ return( *this );
+ }
+
+ va_start( ap, sFormat );
+ iRc = _vsnprintf_s( t, size, sFormat, ap );
+ va_end( ap );
+
+#else
+#ifdef HAVE_VSPRINTF_S_F
+
+ va_start( ap, sFormat );
+ // size = (xbUInt32) vsprintf_s( NULL, 0, sFormat, ap ) + 1;
+ size = (xbUInt32) _vscprintf( sFormat, ap ) + 1;
+ va_end( ap );
+
+ t = (char *) malloc( size );
+ if( !t ){
+ size = 0;
+ return( *this );
+ }
+
+ va_start( ap, sFormat );
+ iRc = vsprintf_s( t, size, sFormat, ap );
+ va_end( ap );
+
+#else
+#ifdef HAVE_VSNPRINTF_F
+
+ va_start( ap, sFormat );
+ size = (xbUInt32) vsnprintf( NULL, 0, sFormat, ap) + 1;
+ va_end( ap );
+
+ t = (char *) calloc( 1, size );
+ if( !t ){
+ size = 0;
+ return( *this );
+ }
+ va_start( ap, sFormat );
+ iRc = vsnprintf( t, size, sFormat, ap );
+ va_end( ap );
+
+# else
+# error "Fatal error building [xbstring.cpp] - You have neither _vsnprintf_s nor vsnprintf_s."
+# endif
+#endif
+#endif
+
+ if( iRc < 0 ){
+ if( data )
+ free( data );
+ data = NULL;
+ size = 0;
+ } else {
+ if( data )
+ free( data );
+ data = t;
+ }
+ return( *this );
+}
+
+/************************************************************************/
+//! @brief Return string data
+/*!
+ \returns char * to string data or NULL if string is empty
+*/
+const char *xbString::Str() const {
+ return data ? data : NullString;
+}
+
+/************************************************************************/
+//! @brief Copy all or part of string to character array
+/*!
+ \param cDest pointer to destination buffer.
+ \param n Number of bytest to copy. It is the responsibility of the application
+ to verify the buffer is large enough to hold the string contents.
+ \returns char * to result
+
+*/
+char *xbString::strncpy( char * cDest, xbUInt32 n ) const {
+ xbUInt32 i;
+ xbUInt32 ulLen;
+ n > (size-1) ? ulLen = size-1 : ulLen = n;
+ memset( cDest, 0x00, ulLen );
+ for( i = 0; i < ulLen; i++ )
+ cDest[i] = data[i];
+// cDest[i] = 0x00;
+ return cDest;
+}
+/************************************************************************/
+//! @brief Swap characters
+/*!
+ \param cFrom character to replace.
+ \param cTo character to replace with.
+ \returns Reference to this string.
+*/
+xbString &xbString::SwapChars( char cFrom, char cTo ){
+ xbUInt32 i;
+ for( i = 0; i < size; i++ )
+ if( data[i] == cFrom )
+ data[i] = cTo;
+ return *this;
+}
+
+
+/************************************************************************/
+//! @brief Replace all upper case charaters with lower case characters
+/*!
+ \returns Reference to this string.
+*/
+xbString &xbString::ToLowerCase(){
+ xbUInt32 Len = this->Len();
+ for (xbUInt32 i=0; i<Len; i++)
+ data[i] = (char)tolower(data[i]);
+ return *this;
+}
+
+/************************************************************************/
+//! @brief Replace all lower case charaters with lower case characters
+/*!
+ \returns Reference to this string.
+*/
+xbString &xbString::ToUpperCase(){
+ xbUInt32 Len = this->Len();
+ for (xbUInt32 i=0;i<Len;i++)
+ data[i] = (char)toupper(data[i]);
+ return *this;
+}
+/************************************************************************/
+//! @brief Trim all leading and trailing white space from string.
+/*!
+ \returns Reference to string.
+*/
+xbString &xbString::Trim(){
+ Rtrim();
+ Ltrim();
+ return *this;
+}
+
+/************************************************************************/
+//! @brief Private function used for reallocateing memory
+/*!
+ This function is designed to be a drop in replacement for the realloc
+ function call.
+*/
+/*
+char * xbString::xb_realloc( char * pIn, xbUInt32 iLen ){
+
+ if( iLen == 0 ){
+ if( pIn ){
+ free( pIn );
+ return NULL;
+ }
+ }
+
+ char *pNew = (char *) calloc( 1, (size_t) iLen );
+ if( !pNew ) return NULL;
+ char *s = pIn;
+ char *t = pNew;
+ xbUInt32 iCnt = 0;
+ while( *s && iCnt++ < iLen )
+ *t++ = *s++;
+ return pNew;
+}
+*/
+/************************************************************************/
+//! @brief Private function used for copying a string
+/*!
+ For performance reasons, this is an internal function that does no
+ memory checking and assumes a valid buffer area is available to be copied.
+
+ This function is marked as private because of the above reason and
+ is used by "stronger" calling functions.
+
+ \param sTarget Target destination of copied string
+ \param sSource Source string to copy
+ \returns Reference to string.
+*/
+
+char * xbString::xb_strcpy( char *sTarget, const char *sSource ){
+
+ char *temp = sTarget;
+ while( *sSource != '\0')
+ *sTarget++ = *sSource++;
+ *sTarget= '\0';
+ return temp;
+}
+
+/************************************************************************/
+//! @brief Check for valid logical field data
+/*!
+ Valid logical data is one 'T', 'F', 'N' or 'Y'.<br>
+
+ \returns xbTrue if the data is valid logical data.<br>
+ xbFalse if not valid logical data.
+*/
+
+xbBool xbString::ValidLogicalValue() const {
+ if( Len() == 1 )
+ if( data[0] == 'T' || data[0] == 'F' || data[0] == 'Y' || data[0] == 'N' || data[0] == '?' )
+ return xbTrue;
+ return xbFalse;
+}
+/************************************************************************/
+//! @brief This function returns true if the data is valid numeric data
+/*!
+ \returns xbTrue if valid numeric data.<br>
+ xbFalse if not valid numeric daata.
+*/
+
+xbBool xbString::ValidNumericValue() const {
+ const char *p;
+ p = data;
+ while( *p ){
+ if( *p != '+' && *p != '-' && *p != '.' && *p != '0' && *p != '1' &&
+ *p != '2' && *p != '3' && *p != '4' && *p != '5' && *p != '6' &&
+ *p != '7' && *p != '8' && *p != '9' )
+ return xbFalse;
+ else
+ p++;
+ }
+ return xbTrue;
+}
+
+
+/************************************************************************/
+//! @brief Remove every instance of a character from a string.
+/*!
+ \param c character to remove from string.
+ \returns Reference to this stirng.void
+*/
+
+xbString &xbString::ZapChar( char c ){
+
+ if( data == NULL )
+ return *this;
+ if( data[0] == 0 )
+ return *this;
+
+ char *s;
+ char *t;
+
+ s = data;
+ t = data;
+ while( *s ){
+ if( *s == c ){
+ s++;
+ size--;
+ } else {
+ *t++ = *s++;
+ }
+ }
+ *t = 0x00;
+
+ data = (char *) realloc( data, size );
+ return *this;
+}
+
+/************************************************************************/
+//! @brief Remove leading character from a string.
+/*!
+ \param c character to remove from beginning of string.
+ \returns Reference to this string.
+*/
+xbString &xbString::ZapLeadingChar( char c ){
+ /* left truncate all of character c */
+ xbUInt32 iLen = 0;
+ char *p;
+ p = data;
+ while( *p && *p == c ){
+ iLen++;
+ p++;
+ }
+ if( iLen )
+ Ltrunc( iLen );
+ return *this;
+}
+
+/************************************************************************/
+//! @brief Remove trailing character from a string.
+/*!
+ \param c character to remove from ending of string.
+ \returns Reference to this string.
+*/
+xbString &xbString::ZapTrailingChar( char c ){
+
+ xbUInt32 l = Len();
+ if( l == 0 )
+ return *this;
+ xbUInt32 ulOrigSize = size;
+ l--;
+ for(;;) {
+ if( data[l] != c )
+ break;
+ data[l] = 0;
+ size--;
+ if( l == 0 )
+ break;
+ l--;
+ }
+ if( ulOrigSize != size )
+ data = (char *) realloc( data, size );
+ return *this;
+}
+
+} /* namespace */ \ No newline at end of file
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/core/xbtag.cpp b/1Tdata/xbase/xbase64-4.1.4/src/core/xbtag.cpp
new file mode 100755
index 0000000..621d44b
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/core/xbtag.cpp
@@ -0,0 +1,121 @@
+/* xbtag.cpp
+
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+#include "xbase.h"
+
+#ifdef XB_INDEX_SUPPORT
+
+
+namespace xb{
+
+/************************************************************************/
+//! @brief Constructor
+/*!
+ \param pIx Pointer to index file instance.
+ \param vpTag Pointer to tag structure within file instance.
+ \param sType NDX or MDX
+ \param sTagName Name of tag.
+ \param sExpression Tag key definition.
+ \param sFilter MDX only - tag qualification expression.
+ \param bUnique xbTrue - Index is unique.<br>xbFalse - Index is not unique.
+ \param bSort MDX only<br>xbTrue - Descending.<br>xbFalse - Ascending.
+*/
+
+xbTag::xbTag( xbIx *pIx, void *vpTag, xbString &sType, xbString &sTagName, xbString &sExpression, xbString &sFilter,
+xbBool bUnique, xbBool bSort )
+{
+ this->pIx = pIx;
+ this->vpTag = vpTag;
+ this->sType = sType;
+ this->sTagName = sTagName;
+ this->sExpression = sExpression;
+ this->sFilter = sFilter;
+ this->bUnique = bUnique;
+ this->bSort = bSort;
+}
+
+
+/************************************************************************/
+//! @brief Get tag key expression.
+/*!
+ \returns Tag key expression.
+*/
+const xbString &xbTag::GetExpression() const {
+ return sExpression;
+}
+/************************************************************************/
+//! @brief Get tag filter expression.
+/*!
+ \returns Tag filter expression (mdx only).
+*/
+
+const xbString &xbTag::GetFilter() const {
+ return sFilter;
+}
+/************************************************************************/
+//! @brief Get index file pointer.
+/*!
+ \returns Pointer to index file instance.
+*/
+xbIx *xbTag::GetIx() const {
+ return pIx;
+}
+/************************************************************************/
+//! @brief Get tag ascending setting.
+/*!
+ \returns Tag sort setting - MDX only.<br>xbTrue - Descending.<br>xbFalse - Ascending.
+*/
+xbBool xbTag::GetSort() const {
+ return bSort;
+}
+/************************************************************************/
+//! @brief Get tag name.
+/*!
+ \returns Tag name.
+*/
+
+const xbString &xbTag::GetTagName() const {
+ return sTagName;
+}
+/************************************************************************/
+//! @brief Get tag type.
+/*!
+ \returns Tag type.
+*/
+const xbString &xbTag::GetType() const {
+ return sType;
+}
+
+/************************************************************************/
+//! @brief Get tag unique setting.
+/*!
+ \returns Tag unique setting.<br>xbTrue - Unique.<br>xbFalse - Not unique.
+*/
+
+xbBool xbTag::GetUnique() const {
+ return bUnique;
+}
+/************************************************************************/
+//! @brief Get tag pointer for tag within index file.
+/*!
+ \returns Pointer to tag within index file instance.
+*/
+void *xbTag::GetVpTag() const {
+ return vpTag;
+}
+/************************************************************************/
+} /* namespace */
+#endif /* XB_INDEX_SUPPORT */ \ No newline at end of file
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/core/xbtblmgr.cpp b/1Tdata/xbase/xbase64-4.1.4/src/core/xbtblmgr.cpp
new file mode 100755
index 0000000..53b6dd9
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/core/xbtblmgr.cpp
@@ -0,0 +1,312 @@
+/* xbtblmgr.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+#include "xbase.h"
+
+//#ifdef HAVE_STRING_H
+//#include <string.h>
+//#endif
+
+namespace xb{
+
+/*************************************************************************/
+xbTblMgr::xbTblMgr(){
+ TblList = NULL;
+ iOpenTableCount = 0;
+}
+
+/*************************************************************************/
+xbTblMgr::~xbTblMgr(){
+ xbTblList *l;
+ if( TblList ){
+ while( TblList ){
+ l = TblList;
+ TblList = TblList->pNext;
+ delete l->psFqTblName;
+ delete l->psTblName;
+ delete l->psTblAlias;
+ free( l );
+ }
+ }
+}
+
+/*************************************************************************/
+xbInt16 xbTblMgr::AddTblToTblList( xbDbf *d, const xbString & sFqTblName ){
+ return AddTblToTblList( d, sFqTblName, "" );
+}
+
+/*************************************************************************/
+xbInt16 xbTblMgr::AddTblToTblList( xbDbf *d, const xbString & sFqTblName, const xbString & sTblAlias ) {
+
+ // Set the Fq (fully qualified name)
+ // Pull the table name from the FQ name
+ // Set the Alias to the table name if the alias name is not provided
+
+
+ xbTblList *i, *s, *t;
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ xbString sTblName;
+ xbString sAlias;
+ xbString sTemp;
+ xbString sFqTemp;
+ xbUInt32 iSlashPos;
+
+ // std::cout << "AddTblToTblList fq in = [" << sFqTblName.Str() << "] alias in =[" << sTblAlias.Str() << "]\n";
+
+ try{
+
+ if( sFqTblName.Len() == 0 ){
+ iErrorStop = 100;
+ iRc = XB_INVALID_TABLE_NAME;
+ throw iRc;
+ }
+
+ sTblName = sFqTblName;
+ sTblName.SwapChars( '\\', '/' );
+ iSlashPos = sTblName.GetLastPos( '/' );
+
+ // std::cout << "slashpos = " << iSlashPos << "\n";
+
+
+ if( iSlashPos > 0 ){
+ sTblName.Ltrunc( iSlashPos ); // remove the directory part from the table name
+ sFqTemp = sFqTblName;
+ } else{
+ sFqTemp.Sprintf( "%s%s", GetDataDirectory().Str(), sFqTblName.Str()); // add the dir part to the FQ name
+ }
+
+ xbUInt32 iDbfPos = sFqTemp.Pos( ".DBF" );
+ if( iDbfPos == 0 )
+ sFqTemp += ".DBF";
+ else
+ sTblName.Resize( sTblName.Len() - 3 );
+
+ if( sTblAlias.Len() == 0 )
+ sAlias = sTblName;
+ else
+ sAlias = sTblAlias;
+
+ //std::cout << "fq=[" << sFqTemp.Str() << "] tblname = [" << sTblName.Str() << "] alias = [" << sAlias.Str() << "]\n";
+
+ if((i = (xbTblList *) calloc(1, sizeof(xbTblList))) == NULL){
+ iErrorStop = 110;
+ iRc = XB_NO_MEMORY;
+ throw iRc;
+ }
+ i->psFqTblName = new xbString( sFqTemp );
+ i->psTblName = new xbString( sTblName );
+ i->psTblAlias = new xbString( sAlias );
+ i->pDbf = d;
+ i->pNext = NULL;
+
+ // insert new table into the list of open tables, sorted by table name
+ s = NULL;
+ t = TblList;
+
+ while(t && (strcmp( t->psTblAlias->Str(), sAlias.Str()) < 0 )){
+ s = t;
+ t = t->pNext;
+ }
+
+ if( t && (strcmp( t->psTblAlias->Str(), sAlias.Str()) == 0 )){
+ iErrorStop = 120;
+ delete i->psFqTblName;
+ delete i->psTblName;
+ delete i->psTblAlias;
+ free( i );
+ iRc = XB_DUP_TABLE_OR_ALIAS;
+ throw iRc;
+ }
+ i->pNext = t;
+ if (s == NULL)
+ TblList = i;
+ else
+ s->pNext = i;
+ }
+ catch (xbInt16 iRc ){
+ if( iErrorStop != 120 ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbTblMgr::AddTblToTblList() Exception Caught. Error Stop = [%d] iRc = [%d] Tbl Name = [%s] Alias = [%s]", iErrorStop, iRc, sTblName.Str(), sTblAlias.Str() );
+ std::cout << sMsg << std::endl;
+ }
+ }
+ if( iRc == XB_NO_ERROR )
+ iOpenTableCount++;
+ return iRc;
+}
+
+/*************************************************************************/
+xbInt16 xbTblMgr::DisplayTableList() const {
+ xbInt16 iTblCnt = 0;
+ xbTblList * l = TblList;
+ std::cout << "-- Open Table List --" << std::endl;
+ if( l == NULL )
+ std::cout << "Table list is empty" << std::endl;
+ else{
+ while( l ){
+ iTblCnt++;
+ std::cout << iTblCnt << " FqFileName=[" << l->psFqTblName->Str() << "] TableName=[" << l->psTblName->Str() << "] Alias=[" << l->psTblAlias->Str() << "]" << std::endl;
+ l = l->pNext;
+ }
+ }
+ return iTblCnt;
+}
+/*************************************************************************/
+/* Get pointer to named dbf.
+ Looks up an open DBF file by Name.
+
+ returns A pointer to the xbDbf class instance if found or NULL if not found.
+
+ // looks for a match as an alias first, if not found as an alias, looks at the name
+
+*/
+
+xbDbf *xbTblMgr::GetDbfPtr(const xbString& sTblAlias) const {
+
+
+ xbTblList *t;
+ t = TblList;
+ xbString s;
+ xbUInt32 ui = sTblAlias.Pos( ".DBF" );
+ if( ui > 0 )
+ s.Assign( sTblAlias.Str(), 1, ui - 1 );
+ else
+ s.Set( sTblAlias );
+
+ while( t ){
+ if( s == t->psTblAlias->Str()){
+ return t->pDbf;
+ }
+ t = t->pNext;
+ }
+
+ t = TblList;
+ while( t ){
+ // std::cout << "s = [" << s.Str() << "] tbl name = [" << t->psTblName->Str() << "]\n";
+ if( s == t->psTblName->Str()){
+ std::cout << "found\n";
+ return t->pDbf;
+ }
+ t = t->pNext;
+ }
+
+
+ t = TblList;
+ while( t ){
+ if( sTblAlias == t->psFqTblName->Str())
+ return t->pDbf;
+ t = t->pNext;
+ }
+ return NULL;
+}
+/*************************************************************************/
+/* Get pointer to named dbf.
+ Looks up an open DBF file by Name.
+
+ returns pointer to the xbDbf class instance if found or NULL if not found.
+*/
+
+xbDbf *xbTblMgr::GetDbfPtr(xbInt16 iItemNo ) const {
+
+ xbTblList *t;
+ t = TblList;
+ xbInt16 iCnt = 1;
+
+ if( iItemNo < 1 || iItemNo > iOpenTableCount )
+ return NULL;
+
+ while( t && iCnt < iItemNo ){
+ t = t->pNext;
+ iCnt++;
+ }
+ if( t )
+ return t->pDbf;
+ else
+ return NULL;
+}
+/*************************************************************************/
+xbInt16 xbTblMgr::GetOpenTableCount() const {
+ return iOpenTableCount;
+}
+/*************************************************************************/
+xbTblList * xbTblMgr::GetTblListEntry( xbDbf *pTbl ){
+
+ xbTblList * i = TblList;
+ while( i ){
+ if( i->pDbf == pTbl )
+ return i;
+ i = i->pNext;
+ }
+ return NULL;
+}
+/*************************************************************************/
+xbInt16 xbTblMgr::RemoveTblFromTblList( const xbString & sTblAlias ) {
+ xbTblList *i, *s;
+
+ i = TblList;
+ s = NULL;
+
+ while( i ){
+
+ if( strcmp( i->psTblAlias->Str(), sTblAlias.Str()) == 0 ) {
+ if(s)
+ s->pNext = i->pNext;
+ else
+ TblList = i->pNext;
+
+ delete i->psFqTblName;
+ delete i->psTblName;
+ delete i->psTblAlias;
+ free( i );
+ iOpenTableCount--;
+ return XB_NO_ERROR;
+ } else {
+ s = i;
+ i = i->pNext;
+ }
+ }
+ return XB_NOT_FOUND;
+}
+/*************************************************************************/
+xbInt16 xbTblMgr::RemoveTblFromTblList( xbDbf *pTbl ) {
+ xbTblList *i, *s;
+
+ i = TblList;
+ s = NULL;
+
+ while( i ){
+
+ if( i->pDbf == pTbl ) {
+ if(s)
+ s->pNext = i->pNext;
+ else
+ TblList = i->pNext;
+
+ delete i->psFqTblName;
+ delete i->psTblName;
+ delete i->psTblAlias;
+ free( i );
+ iOpenTableCount--;
+ return XB_NO_ERROR;
+ } else {
+ s = i;
+ i = i->pNext;
+ }
+ }
+ return XB_NOT_FOUND;
+}
+/*************************************************************************/
+} /* namespace */
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/core/xbuda.cpp b/1Tdata/xbase/xbase64-4.1.4/src/core/xbuda.cpp
new file mode 100755
index 0000000..5db7aec
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/core/xbuda.cpp
@@ -0,0 +1,78 @@
+/* xbuda.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+This module handles uda (user data area) methods
+
+*/
+
+#include "xbase.h"
+
+
+// might need to change thisto XB_EXPRESSION_SUPPORT
+#ifdef XB_EXPRESSION_SUPPORT
+
+
+namespace xb{
+
+/************************************************************************/
+xbUda::xbUda() {
+ llOrd. SetDupKeys( xbFalse );
+}
+/************************************************************************/
+xbUda::~xbUda() {}
+/************************************************************************/
+void xbUda::Clear() {
+ llOrd.Clear();
+}
+/************************************************************************/
+xbInt16 xbUda::GetTokenCnt() const {
+ return llOrd.GetNodeCnt();
+}
+/************************************************************************/
+
+xbInt16 xbUda::GetTokenForKey( const xbString &sKey, xbString &sToken ) {
+ return llOrd.GetDataForKey( sKey, sToken );
+}
+
+/************************************************************************/
+xbInt16 xbUda::AddTokenForKey( const xbString &sKey, const xbString &sToken ) {
+ return llOrd.InsertKey( sKey, sToken );
+}
+/************************************************************************/
+
+xbInt16 xbUda::UpdTokenForKey( const xbString &sKey, const xbString &sData ) {
+ return llOrd.UpdateForKey( sKey, sData );
+}
+
+/************************************************************************/
+xbInt16 xbUda::DelTokenForKey( const xbString &sKey ) {
+ return llOrd.RemoveKey( sKey ); //, sToken );
+}
+
+
+/************************************************************************/
+
+void xbUda::DumpUda() const{
+
+ xbLinkListNode<xbString> *lln = llOrd.GetHeadNode();
+
+ xbInt32 l = 0;
+ while( lln ){
+ std::cout << ++l << " Key=[" << lln->GetKey() << "] Data=[" << lln->GetData() << "]" << std::endl;
+ lln = lln->GetNextNode();
+ }
+}
+
+/************************************************************************/
+} /* namespace */
+#endif /* XB_EXPRESSION_SUPPORT */ \ No newline at end of file
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/core/xbxbase.cpp b/1Tdata/xbase/xbase64-4.1.4/src/core/xbxbase.cpp
new file mode 100755
index 0000000..7267f98
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/core/xbxbase.cpp
@@ -0,0 +1,803 @@
+/* xbxbase.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+#include "xbase.h"
+
+namespace xb{
+
+/*************************************************************************/
+//! @brief Class Constructor.
+xbXBase::xbXBase() {
+ SetEndianType();
+
+ xbFile f( this );
+ f.SetHomeFolders();
+ xbDate d( (xbUInt16) 1); // initialize xbDate static variables
+ #ifdef XB_LOGGING_SUPPORT
+ xLog = new xbLog();
+ #endif
+}
+/*************************************************************************/
+//! @brief Class Deconstructor.
+xbXBase::~xbXBase(){
+ CloseAllTables();
+ #ifdef XB_LOGGING_SUPPORT
+ delete xLog;
+ #endif
+}
+/*************************************************************************/
+//! @brief Close all tables / files.
+/*!
+ This closes everything and deletes references to the associated xbDbf objects.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbXBase::CloseAllTables(){
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ xbInt16 iOpenTableCnt = GetOpenTableCount();
+ try{
+ xbDbf *d;
+ for( xbInt16 i = 0; i < iOpenTableCnt; i++ ){
+ d = (xbDbf *) GetDbfPtr( 1 );
+ if( d ){
+ if(( iRc = d->Close()) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ delete d;
+ } else {
+ iRc = XB_INVALID_OBJECT;
+ iErrorStop = 110;
+ throw iRc;
+ }
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbxbase::CloseAllTables() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, iRc );
+ WriteLogMessage( sMsg.Str() );
+ WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/************************************************************************/
+//! @brief Fully qualified file name from a directory, filename and extension.
+/*!
+ Given a directory, file name and file extension as inputs, create a fully qualified file name.
+
+ \param sDirIn Directory
+ \param sFileIn File Name
+ \param sExtIn File Extension
+ \param sFqnOut A fully qualifed unique file name as output
+ \returns XB_INVALIED_PARAMETER or XB_NO_ERROR
+*/
+xbInt16 xbXBase::CreateFqn( const xbString &sDirIn, const xbString &sNameIn, const xbString &sExtIn, xbString &sFqnOut ){
+
+ if( sNameIn == "" || sExtIn == "" )
+ return XB_INVALID_PARAMETER;
+
+ sFqnOut = sDirIn;
+ #ifdef WIN32
+ sFqnOut.SwapChars( '/', '\\' );
+ if( sFqnOut[sFqnOut.Len()] != '\\' )
+ sFqnOut += '\\';
+ #else
+ sFqnOut.SwapChars( '\\', '/' );
+ if( sFqnOut[sFqnOut.Len()] != '/' )
+ sFqnOut += '/';
+ #endif
+ sFqnOut += sNameIn;
+ if( sExtIn != "" ){
+ sFqnOut += '.';
+ sFqnOut += sExtIn;
+ }
+ return XB_NO_ERROR;
+}
+
+/*************************************************************************/
+//! @brief Parse commmand line options for a given parm request
+/*!
+ \param lArgc Value passed from main( argc, argv[] )
+ \param sArgv Valued passed from main
+ \param sOptRqst Option to search for in the arguments list
+ \param sParmOut String token immediately to the right of the the option request, if found
+ \returns 0 - paramater request not found<br> 1 - Parameter found
+*/
+
+xbInt16 xbXBase::GetCmdLineOpt( xbInt32 lArgc, char **sArgv, const char *sOptRqst, xbString &sParmOut ){
+ xbString sOpt( sOptRqst );
+ return GetCmdLineOpt( lArgc, sArgv, sOpt, sParmOut );
+}
+
+/*************************************************************************/
+//! @brief Parse commmand line options for a given parm request
+/*!
+ \param lArgc Value passed from main( argc, argv[] )
+ \param sArgv Valued passed from main
+ \param sOptRqst Option to search for in the arguments list
+ \param sParmOut String token immediately to the right of the the option request, if found
+ \returns 0 - paramater request not found<br> 1 - Parameter found
+*/
+
+xbInt16 xbXBase::GetCmdLineOpt( xbInt32 lArgc, char **sArgv, xbString &sOptRqst, xbString &sParmOut ){
+
+ xbInt16 iFound = 0;
+ sParmOut = "";
+ if( lArgc < 2 ) // first string is the program name
+ return iFound;
+
+ xbInt32 i = 1;
+ while( iFound == 0 && i < lArgc ){
+ if( sOptRqst == sArgv[i] ){
+ iFound = 1;
+ if( i < (lArgc-1))
+ sParmOut = sArgv[i+1];
+ }
+ i++;
+ }
+ return iFound;
+}
+
+/*************************************************************************/
+#ifdef XB_LOGGING_SUPPORT
+//! @brief Get fully qualified log file name.
+/*!
+ \returns Returns the fully qualified log file name.
+*/
+const xbString & xbXBase::GetLogFqFileName() const {
+ return xLog->GetFqFileName();
+}
+
+//! @brief Get the log file name.
+/*!
+ \returns Returns the log file name.
+*/
+/*
+const xbString & xbXBase::GetLogFileName() const {
+ return xLog->GetFileName();
+}
+*/
+
+//! @brief Get the log directory.
+/*!
+ \returns Returns the log directory.
+*/
+/*
+const xbString & xbXBase::GetLogDirectory() const {
+ return GetLogDirectory();
+}
+*/
+//! @brief Get the log directory.
+/*!
+ \returns xbTrue - Logging enabled.<br>xbFalse - Logging disables.
+*/
+xbBool xbXBase::GetLogStatus() const {
+ return xLog->LogGetStatus();
+}
+
+//! @brief Set the log file name.
+/*!
+ \param sLogFileName - Log File Name.
+ \return void
+*/
+/*
+void xbXBase::SetLogFileName( const xbString & sLogFileName ){
+
+ xLog->SetFileName( sLogFileName );
+}
+*/
+//! @brief Set the log directory.
+/*!
+ \param sLogDirectory - Log File Directory.
+ \return void
+*/
+/*
+void xbXBase::SetLogDirectory( const xbString & sLogDirectory ){
+ xLog->SetDirectory( sLogDirectory );
+}
+*/
+
+
+//! @brief Set the logfile size.
+/*!
+ \param lSize - Log File Size.
+ \return void
+*/
+void xbXBase::SetLogSize( size_t lSize ) {
+ xLog->LogSetLogSize( lSize );
+}
+
+//! @brief Get the logfile size.
+/*!
+ \return log file size
+*/
+size_t xbXBase::GetLogSize() const {
+ return xLog->LogGetLogSize();
+}
+
+
+//! @brief Write message to logfile.
+/*!
+ \param sLogMessage - Message to write.
+ \param iOpt 0 = stdout<br>
+ 1 = Syslog<br>
+ 2 = Both<br>
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbXBase::WriteLogMessage( const xbString & sLogMessage, xbInt16 iOpt ){
+ return xLog->LogWrite( sLogMessage, iOpt );
+}
+
+//! @brief Write message to logfile.
+/*!
+ \param lCnt - Number of bytes to write.
+ \param p - Pointer to bytes to write to log file.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbXBase::WriteLogBytes( xbUInt32 lCnt, const char *p ){
+ return xLog->LogWriteBytes( lCnt, p );
+}
+
+//! @brief Enable message logging.
+void xbXBase::EnableMsgLogging() {
+ xLog->LogSetStatus( xbTrue );
+}
+
+//! @brief Disable message logging.
+void xbXBase::DisableMsgLogging() {
+ xLog->LogSetStatus( xbFalse );
+}
+
+//! @brief Flush log file updates to disk.
+xbInt16 xbXBase::FlushLog() {
+ return xLog->xbFflush();
+}
+#else
+
+// if logging not compiled in, these stubs are called with no effect
+const xbString & xbXBase::GetLogFqFileName() const {
+ return sNullString;
+}
+/*
+const xbString & xbXBase::GetLogFileName() const {
+ return sNullString;
+}
+const xbString & xbXBase::GetLogDirectory() const {
+ return sNullString;
+}
+*/
+/*
+void xbXBase::SetLogFileName( const xbString & sLogFileName ){
+ return;
+}
+void xbXBase::SetLogDirectory( const xbString & sLogDirectory ){
+ return;
+}
+*/
+xbBool xbXBase::GetLogStatus() const {
+ return xbFalse;
+}
+xbInt16 xbXBase::WriteLogMessage( const xbString & sLogMessage, xbInt16 ){
+ return XB_NO_ERROR;
+}
+xbInt16 xbXBase::WriteLogBytes( xbUInt32 lCnt, const char *p ){
+ return XB_NO_ERROR;
+}
+void xbXBase::EnableMsgLogging() {
+ return;
+}
+void xbXBase::DisableMsgLogging() {
+ return;
+}
+xbInt16 xbXBase::FlushLog() {
+ return XB_NO_ERROR;
+}
+void xbXBase::SetLogSize( size_t lSize ) {
+ return;
+}
+
+#endif // XB_LOGGING_SUPPORT
+
+/*************************************************************************/
+#ifdef XB_FUNCTION_SUPPORT
+
+//! @brief Get information regarding expression functions.
+/*!
+ \param sExpLine An expression beginning with function name.
+ \param cReturnType Output - return type of function.
+ \param iCalc Used to calculate the function return value is<br>
+ 1 = use value specified in lReturnLenVal<br>
+ 2 = use length of operand specified in col 4<br>
+ 3 = use valued of numeric operand specified in col 4<br>
+ 4 = length of parm 1 * numeric value parm<br>
+ 5 = larger length of parm 2 or length of parm 3<br>
+ 6 = if two or more parms, use numeric value from second parm, otherwise use col4 value
+ \param lReturnLenVal Used in combination with iReturnLenCalc.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbXBase::GetFunctionInfo( const xbString &sExpLine, char &cReturnType, xbInt16 &iCalc, xbInt32 &lReturnLenVal ) const{
+
+ xbUInt32 iLen;
+ const char *s;
+ if( sExpLine.Len() == 0 )
+ return XB_INVALID_FUNCTION;
+
+ s = sExpLine;
+ iLen = 0;
+ while( *s && *s != '(' && *s != ' ' ) { s++; iLen++; }
+ xbString sFunction( sExpLine, iLen );
+ cReturnType = 0x00;
+ char cFunc1 = sFunction[1];
+
+ if( cFunc1 < 'L' ){
+ // std::cout << "less than L\n";
+ if( cFunc1 < 'D' ){
+ // std::cout << "less than D\n";
+ if( sFunction == "ABS" ){
+ // { "ABS", 'N', 1, 4 },
+ cReturnType = 'N';
+ iCalc = 1;
+ lReturnLenVal = 4;
+ } else if( sFunction == "ALLTRIM" ){
+ // { "ALLTRIM", 'C', 2, 1 },
+ cReturnType = 'C';
+ iCalc = 2;
+ lReturnLenVal = 1;
+ } else if( sFunction == "ASC" ){
+ // { "ASC", 'N', 1, 4 },
+ cReturnType = 'N';
+ iCalc = 1;
+ lReturnLenVal = 4;
+ } else if( sFunction == "AT" ){
+ // { "AT", 'N', 1, 4 },
+ cReturnType = 'N';
+ iCalc = 1;
+ lReturnLenVal = 4;
+ } else if( sFunction == "CDOW" ){
+ // { "CDOW", 'C', 1, 9 },
+ cReturnType = 'C';
+ iCalc = 1;
+ lReturnLenVal = 9;
+ } else if( sFunction == "CHR" ){
+ // { "CHR", 'C', 1, 1 },
+ cReturnType = 'C';
+ iCalc = 1;
+ lReturnLenVal = 1;
+ } else if( sFunction == "CMONTH" ){
+ // { "CMONTH", 'C', 1, 9 },
+ cReturnType = 'C';
+ iCalc = 1;
+ lReturnLenVal = 9;
+ } else if( sFunction == "CTOD" ){
+ // { "CTOD", 'D', 1, 8 },
+ cReturnType = 'D';
+ iCalc = 1;
+ lReturnLenVal = 8;
+ }
+ } else {
+ // std::cout << ">= D\n";
+ if( sFunction == "DATE" ){
+ // { "DATE", 'D', 1, 8 },
+ cReturnType = 'D';
+ iCalc = 1;
+ lReturnLenVal = 8;
+ } else if( sFunction == "DAY" ){
+ // { "DAY", 'N', 1, 4 },
+ cReturnType = 'N';
+ iCalc = 1;
+ lReturnLenVal = 4;
+ } else if( sFunction == "DEL" ){
+ // { "DEL", 'C', 1, 1 },
+ cReturnType = 'C';
+ iCalc = 1;
+ lReturnLenVal = 1;
+ } else if( sFunction == "DELETED" ){
+ // { "DELETED", 'L', 1, 1 },
+ cReturnType = 'L';
+ iCalc = 1;
+ lReturnLenVal = 1;
+ } else if( sFunction == "DESCEND" ){
+ // { "DESCEND", '1', 2, 1 },
+ cReturnType = '1';
+ iCalc = 2;
+ lReturnLenVal = 1;
+ } else if( sFunction == "DOW" ){
+ // { "DOW", 'N', 1, 4 },
+ cReturnType = 'N';
+ iCalc = 1;
+ lReturnLenVal = 4;
+ } else if( sFunction == "DTOC" ){
+ // { "DTOC", 'C', 1, 8 },
+ cReturnType = 'C';
+ iCalc = 1;
+ lReturnLenVal = 8;
+ } else if( sFunction == "DTOS" ){
+ // { "DTOS", 'C', 1, 8 },
+ cReturnType = 'C';
+ iCalc = 1;
+ lReturnLenVal = 8;
+ } else if( sFunction == "EXP" ){
+ // { "EXP", 'N', 1, 4 },
+ cReturnType = 'N';
+ iCalc = 1;
+ lReturnLenVal = 4;
+ } else if( sFunction == "IIF" ){
+ // { "IIF", 'C', 5, 0 },
+ cReturnType = 'C';
+ iCalc = 5;
+ lReturnLenVal = 0;
+ } else if( sFunction == "INT" ){
+ // { "INT", 'N', 1, 4 },
+ cReturnType = 'N';
+ iCalc = 1;
+ lReturnLenVal = 4;
+ } else if( sFunction == "ISALPHA" ){
+ // { "ISALPHA", 'L', 1, 1 },
+ cReturnType = 'L';
+ iCalc = 1;
+ lReturnLenVal = 1;
+ } else if( sFunction == "ISLOWER" ){
+ // { "ISLOWER", 'L', 1, 1 },
+ cReturnType = 'L';
+ iCalc = 1;
+ lReturnLenVal = 1;
+ } else if( sFunction == "ISUPPER" ){
+ // { "ISUPPER", 'L', 1, 1 },
+ cReturnType = 'L';
+ iCalc = 1;
+ lReturnLenVal = 1;
+ }
+ }
+ } else {
+ // std::cout << ">= L\n";
+ if( cFunc1 < 'R' ) {
+ // std::cout << " < R\n";
+ if( sFunction == "LEFT" ){
+ // { "LEFT", 'C', 3, 2 },
+ cReturnType = 'C';
+ iCalc = 3;
+ lReturnLenVal = 2;
+ } else if( sFunction == "LEN" ){
+ // { "LEN", 'N', 1, 4 },
+ cReturnType = 'N';
+ iCalc = 1;
+ lReturnLenVal = 3;
+ } else if( sFunction == "LOG" ){
+ // { "LOG", 'N', 1, 4 },
+ cReturnType = 'N';
+ iCalc = 1;
+ lReturnLenVal = 4;
+ } else if( sFunction == "LOWER" ){
+ // { "LOWER", 'C', 2, 1 },
+ cReturnType = 'C';
+ iCalc = 2;
+ lReturnLenVal = 1;
+ } else if( sFunction == "LTRIM" ){
+ // { "LTRIM", 'C', 2, 1 },
+ cReturnType = 'C';
+ iCalc = 2;
+ lReturnLenVal = 1;
+ } else if( sFunction == "MAX" ){
+ // { "MAX", 'N', 1, 4 },
+ cReturnType = 'N';
+ iCalc = 1;
+ lReturnLenVal = 4;
+ } else if( sFunction == "MIN" ){
+ // { "MIN", 'N', 1, 4 },
+ cReturnType = 'N';
+ iCalc = 1;
+ lReturnLenVal = 4;
+ } else if( sFunction == "MONTH" ){
+ // { "MONTH", 'N', 1, 4 },
+ cReturnType = 'N';
+ iCalc = 1;
+ lReturnLenVal = 4;
+ }
+ } else if( cFunc1 == 'R' ){
+ // std::cout << "==R\n";
+ if( sFunction == "RECNO" ){
+ // { "RECNO", 'N', 1, 4 },
+ cReturnType = 'N';
+ iCalc = 1;
+ lReturnLenVal = 4;
+ } else if( sFunction == "RECCOUNT" ){
+ // { "RECCOUNT", 'N', 1, 4 },
+ cReturnType = 'N';
+ iCalc = 1;
+ lReturnLenVal = 4;
+ } else if( sFunction == "REPLICATE" ){
+ // { "REPLICATE", 'C', 4, 0 },
+ cReturnType = 'C';
+ iCalc = 4;
+ lReturnLenVal = 0;
+ } else if( sFunction == "RIGHT" ){
+ // { "RIGHT", 'C', 3, 2 },
+ cReturnType = 'C';
+ iCalc = 3;
+ lReturnLenVal = 2;
+ } else if( sFunction == "RTRIM" ){
+ // { "RTRIM", 'C', 2, 1 },
+ cReturnType = 'C';
+ iCalc = 2;
+ lReturnLenVal = 1;
+ }
+ } else if( cFunc1 == 'S' ){
+ // std::cout << "==S\n";
+ if( sFunction == "SPACE" ){
+ // { "SPACE", 'C', 3, 1 },
+ cReturnType = 'C';
+ iCalc = 3;
+ lReturnLenVal = 1;
+ } else if( sFunction == "SQRT" ){
+ // { "SQRT", 'N', 1, 4 },
+ cReturnType = 'N';
+ iCalc = 1;
+ lReturnLenVal = 4;
+ } else if( sFunction == "STOD" ){
+ // { "STOD", 'D', 1, 8 },
+ cReturnType = 'D';
+ iCalc = 1;
+ lReturnLenVal = 8;
+ } else if( sFunction == "STR" ){
+ // { "STR", 'C', 6, 10 },
+ cReturnType = 'C';
+ iCalc = 6;
+ lReturnLenVal = 10;
+ } else if( sFunction == "STRZERO" ){
+ // { "STRZERO", 'C', 3, 2 },
+ cReturnType = 'C';
+ iCalc = 3;
+ lReturnLenVal = 2;
+ } else if( sFunction == "SUBSTR" ){
+ // { "SUBSTR", 'C', 3, 3 },
+ cReturnType = 'C';
+ iCalc = 3;
+ lReturnLenVal = 3;
+ }
+ } else {
+ // std::cout << ">S\n";
+ if( sFunction == "TRIM" ){
+ // { "TRIM", 'C', 2, 1 },
+ cReturnType = 'C';
+ iCalc = 2;
+ lReturnLenVal = 1;
+ } else if( sFunction == "UPPER" ){
+ // { "UPPER", 'C', 2, 1 },
+ cReturnType = 'C';
+ iCalc = 2;
+ lReturnLenVal = 1;
+ } else if( sFunction == "VAL" ){
+ // { "VAL", 'N', 1, 4 },
+ cReturnType = 'N';
+ iCalc = 1;
+ lReturnLenVal = 3;
+ } else if( sFunction == "YEAR" ){
+ // { "YEAR", 'N', 1, 4 },
+ cReturnType = 'N';
+ iCalc = 1;
+ lReturnLenVal = 4;
+ }
+ }
+ }
+ if( cReturnType == 0x00 )
+ return XB_INVALID_FUNCTION;
+ else
+ return XB_NO_ERROR;
+}
+#endif
+/*************************************************************************/
+//! @brief Cross platform sleep function.
+/*!
+ \param lMillisecs Milliseconds to sleep.
+*/
+void xbXBase::xbSleep( xbInt32 lMillisecs ){
+ #ifdef WIN32
+ Sleep( (xbUInt32) lMillisecs );
+ #else
+ usleep( (xbInt64) lMillisecs * 1000 );
+ #endif
+
+}
+/***********************************************************************/
+//! @brief Cross memcmp function.
+/*!
+ \param s1 Left operand to compare.
+ \param s2 Right operand to compare.
+ \param n Number of bytes to compare.
+ \returns 1 s1 > s2<br>
+ 0 s1 == s2<br>
+ -1 s1 < s2
+*/
+xbInt16 xbXBase::xbMemcmp( const unsigned char *s1, const unsigned char *s2, size_t n ){
+ // The standard memcmp function was found not to behave the same across all platforms
+ for( size_t i = 0; i < n; i++ ){
+ if( s1[i] > s2[i] )
+ return 1;
+ else if( s1[i] < s2[i] )
+ return -1;
+ }
+ return 0;
+}
+
+/***********************************************************************/
+//! @brief Open highest qualified class available for dbf file.
+/*!
+ This routine opens the highest available version of the dbf file.
+ Defaults to XB_READ_WRITE and XB_MULTI_USER mode.
+ \returns param dbf - Output pointer to dbf file opened or null if error
+*/
+xbDbf* xbXBase::Open( const xbString &sTableName, xbInt16 &iRc ){
+ return Open( sTableName, "", XB_READ_WRITE, XB_MULTI_USER, 0, iRc );
+}
+/***********************************************************************/
+//! @brief Open highest qualified class available for dbf file.
+/*!
+ This routine can open various versions of the dbf file dependent on the iVersion field
+
+ \param sTableName - Table name to open.
+ \param sAlias - Optional alias name.
+ \param iOpenMode - XB_READ_WRITE or XB_READ
+ \param iShareMode - XB_SINGLE_USER or XB_MULTI_USER
+ \param iRequestVersion 0 - Highest available
+ 4 - Version four dbf
+ 3 - Version three dbf
+ \param iRc - Return code from open request
+ \returns param dbf - Output pointer to dbf file opened or null if error
+*/
+
+
+xbDbf* xbXBase::Open( const xbString &sTableName, const xbString &sAlias, xbInt16 iOpenMode,
+ xbInt16 iShareMode, xbInt16 iRequestVersion, xbInt16 &iRc ){
+
+ xbInt16 iErrorStop = 0;
+ xbDbf * pDbf = 0;
+ iRc = 0;
+ xbString sFqFileName;
+
+ try{
+
+ if( sTableName.Len() == 0 ){
+ iErrorStop = 100;
+ iRc = XB_FILE_NOT_FOUND;
+ throw iRc;
+ }
+ xbFile *f = new xbFile(this);
+ f->SetFileName( sTableName );
+ if(( iRc = f->FileExists( f->GetFqFileName())) != xbTrue ){
+ iErrorStop = 110;
+ iRc = XB_FILE_NOT_FOUND;
+ throw iRc;
+ }
+ unsigned char cFileTypeByte;
+ if(( iRc = f->GetXbaseFileTypeByte( f->GetFqFileName(), cFileTypeByte )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ xbInt16 iTblVsn = f->DetermineXbaseTableVersion( cFileTypeByte );
+ f->xbFclose();
+ sFqFileName.Set( f->GetFqFileName() );
+ delete f;
+
+ if( iTblVsn == 4 && ( iRequestVersion == 0 || iRequestVersion == 4 )){
+ #ifdef XB_DBF4_SUPPORT
+ pDbf = new xbDbf4( this );
+ iRc = pDbf->Open( sFqFileName, sAlias, iOpenMode, iShareMode );
+ #else
+ // std::cout << "Dbase IV file support not build into library. See XB_DBF4_SUPPORT" << std::endl;
+ iErrorStop = 130;
+ iRc = XB_FILE_TYPE_NOT_SUPPORTED;
+ throw iRc;
+ #endif
+ }
+ else if( iTblVsn == 3 && ( iRequestVersion == 0 || iRequestVersion == 3 )){
+
+ #ifdef XB_DBF3_SUPPORT
+ pDbf = new xbDbf3( this );
+ iRc = pDbf->Open( sFqFileName, sAlias, iOpenMode, iShareMode );
+ #else
+ //std::cout << "Dbase III file support not build into library. See XB_DBF3_SUPPORT" << std::endl;
+ iErrorStop = 140;
+ iRc = XB_FILE_TYPE_NOT_SUPPORTED;
+ throw iRc;
+ #endif
+
+ } else {
+ iErrorStop = 150;
+ iRc = XB_FILE_TYPE_NOT_SUPPORTED;
+ throw iRc;
+ }
+
+ if( iRc != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbxbase::Open() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, iRc );
+ WriteLogMessage( sMsg.Str() );
+ WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return pDbf;
+}
+
+xbInt16 xbXBase::OpenHighestVersion( const xbString &sTableName, const xbString &sAlias,
+ xbDbf **dbf )
+{
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+
+ try{
+ xbFile f(this);
+ if( sTableName.Len() == 0 ){
+ iErrorStop = 100;
+ iRc = XB_FILE_NOT_FOUND;
+ throw iRc;
+ }
+ f.SetFileName( sTableName );
+ if(( iRc = f.FileExists( f.GetFqFileName() )) != xbTrue ){
+ iErrorStop = 110;
+ iRc = XB_FILE_NOT_FOUND;
+ throw iRc;
+ }
+
+ unsigned char cFileTypeByte;
+ if(( iRc = f.GetXbaseFileTypeByte( f.GetFqFileName(), cFileTypeByte )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ return iRc;
+ }
+ if( f.DetermineXbaseTableVersion( cFileTypeByte ) == 4 ){
+ #ifdef XB_DBF4_SUPPORT
+ xbDbf *pwDbf = new xbDbf4( this );
+ pwDbf->Open( f.GetFqFileName(), sAlias );
+ *dbf = pwDbf;
+ pwDbf = 0;
+ #else
+ // std::cout << "Dbase IV file support not build into library. See XB_DBF4_SUPPORT" << std::endl;
+ iErrorStop = 130;
+ iRc = XB_FILE_TYPE_NOT_SUPPORTED;
+ throw iRc;
+ #endif
+
+ } else if( f.DetermineXbaseTableVersion( cFileTypeByte ) == 3 ){
+ #ifdef XB_DBF3_SUPPORT
+ *dbf = new xbDbf3( this );
+ #else
+ //std::cout << "Dbase III file support not build into library. See XB_DBF3_SUPPORT" << std::endl;
+ iErrorStop = 140;
+ iRc = XB_FILE_TYPE_NOT_SUPPORTED;
+ throw iRc;
+ #endif
+
+ } else {
+ iErrorStop = 150;
+ iRc = XB_FILE_TYPE_NOT_SUPPORTED;
+ throw iRc;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbxbase::OpenHighestVersion() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, iRc );
+ WriteLogMessage( sMsg.Str() );
+ WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+/***********************************************************************/
+} /* namespace */
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_date.cpp b/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_date.cpp
new file mode 100755
index 0000000..7b92dbe
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_date.cpp
@@ -0,0 +1,212 @@
+/* xb_ex_date.cpp
+
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2021,2022 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+This program demonstrates using the xbDate class
+
+*/
+
+
+#include "xbase.h"
+
+using namespace xb;
+
+int main()
+{
+
+ xbXBase x; /* initial date static variables */
+
+ xbString StringDate( "19601007" ); /* oct 7 1960 */
+ char CharDate[9] = "19611109"; /* nov 9 1961 */
+
+ xbDate d1; /* today is default */
+ xbDate d2( StringDate ); /* from string data */
+ xbDate d3( CharDate ); /* from char data */
+ xbDate d4; /* another date class */
+ xbString s;
+
+ std::cout << "This program demonstrates usage of the xbDate class" << std::endl;
+ std::cout << "Date 1 (Sysdate) is " << d1.Str() << std::endl;
+ std::cout << "Date 2 (StringDate) is " << d2.Str() << std::endl;
+ std::cout << "Date 3 (CharDate) is " << d3.Str() << std::endl;
+
+ std::cout << "This year is " << d1.YearOf() << std::endl;
+ std::cout << "Year of xbString Date is " << d2.YearOf()
+ << std::endl;
+ std::cout << "Year of char Date is " << d3.YearOf()
+ << std::endl;
+
+ std::cout << "This Month is " << d1.MonthOf() << std::endl;
+ std::cout << "Month of xbString Date is " << d2.MonthOf()
+ << std::endl;
+ std::cout << "Month of char Date is " << d3.MonthOf()
+ << std::endl;
+
+ std::cout << "Today is day " << d1.DayOf( XB_FMT_WEEK ) << " of the week" << std::endl;
+ std::cout << "StringDate is day " << d2.DayOf( XB_FMT_MONTH ) << " of the month" << std::endl;
+ std::cout << "CharDate is day " << d3.DayOf( XB_FMT_YEAR ) << " of the year" << std::endl;
+
+ if( d1.IsLeapYear())
+ std::cout << "This is a leap year" << std::endl;
+ else
+ std::cout << "This is not a leap year." << std::endl;
+
+ if( d2.IsLeapYear())
+ std::cout << "StringDate is a leap year" << std::endl;
+ else
+ std::cout << "StringDate is not a leap year." << std::endl;
+
+ if( d3.IsLeapYear())
+ std::cout << "CharDate is a leap year" << std::endl;
+ else
+ std::cout << "CharDate is not a leap year." << std::endl;
+
+ std::cout << "Today is " << d1.Sysdate() << std::endl;
+
+ if( d1.DateIsValid( "19951301" ))
+ std::cout << "19951301 is a valid date" << std::endl;
+ else
+ std::cout << "19951301 is not a valid date" << std::endl;
+
+ if( d1.DateIsValid( "19920229" ))
+ std::cout << "19920229 is a valid date" << std::endl;
+ else
+ std::cout << "19920229 is not a valid date" << std::endl;
+
+ if( d2.DateIsValid( StringDate ))
+ std::cout << StringDate.Str() << " is a valid date" << std::endl;
+ else
+ std::cout << StringDate.Str() << " is not a valid date" << std::endl;
+
+ std::cout << "Today's Julian date " << d1.JulianDays() << std::endl;
+ std::cout << "Julian date of Jan 01, 1970 " << d2.JulianDays() << std::endl;
+ std::cout << "StringDate Julian date " << d2.JulianDays() << std::endl;
+
+ std::cout << "There are " << (d1.JulianDays() - d2.JulianDays()) << " days between " << d1.Str() << " and " << d2.Str() << std::endl;
+
+ std::cout << "Todays Julian date (Number of days since Jan 1 0100):" << d1.JulianDays() << std::endl;
+
+ d4 = d1; // set d4 class = to sysdate
+ std::cout << "Object d4 initialized to " << d4.Str() << std::endl;
+ std::cout << "This should be todays date: "
+ << d4.JulToDate8(d4.JulianDays()) << std::endl;
+ std::cout << "In 7 days it will be "
+ << d4.JulToDate8(d4.JulianDays() + 7L ) << std::endl;
+
+ d1.CharDayOf( s );
+ std::cout << "Today is " << s.Str() << std::endl;
+
+ d2.CharDayOf( s );
+ std::cout << "StringDate day is " << s.Str() << std::endl;
+ d1.CharMonthOf( s );
+ std::cout << "This month is " << s.Str() << std::endl;
+ d2.CharMonthOf( s );
+ std::cout << "StringDate month is " << s.Str() << std::endl;
+
+
+ /* various format routines using different formats, strings and chars */
+ xbString sOutDate;
+
+ d1.FormatDate( "YYDDD", sOutDate );
+ std::cout << "Format (YYDDD) = " << sOutDate.Str() << std::endl;
+
+ d1.FormatDate( "MM/DD/YY", sOutDate );
+ std::cout << "Format (MM/DD/YY) = " << sOutDate.Str() << std::endl;
+
+ d1.FormatDate( "YY-MM-DD", sOutDate );
+ std::cout << "Format (YY-MM-DD) = " << sOutDate.Str() << std::endl;
+
+ d1.FormatDate( "DDDDDDDDD, MMMMMMMMMM DD YYYY", sOutDate );
+ std::cout << "Format (DDDDDDDDD, MMMMMMMMMM DD YYYY) = " << sOutDate.Str() << std::endl;
+
+ std::cout << "Last day this month " << d1.LastDayOfMonth() << std::endl;
+ std::cout << "Last day of month for StringDate is " << d2.LastDayOfMonth() << std::endl;
+
+ std::cout << "Overloaded operators test..." << std::endl;
+
+ if( d1 == d2 )
+ std::cout << d1.Str() << " is equal to " << d2.Str()
+ << std::endl;
+ else
+ std::cout << d1.Str() << " is not equal to " << d2.Str()
+ << std::endl;
+
+ if( d1 != d3 )
+ std::cout << d1.Str() << " is not equal to " << d3.Str()
+ << std::endl;
+ else
+ std::cout << d1.Str() << " is equal to " << d3.Str()
+ << std::endl;
+
+ if( d1 < d2 )
+ std::cout << d1.Str() << " is less than " << d2.Str()
+ << std::endl;
+ else
+ std::cout << d1.Str() << " is not less than " << d2.Str()
+ << std::endl;
+
+ if( d1 > d2 )
+ std::cout << d1.Str() << " is greater than " << d2.Str()
+ << std::endl;
+ else
+ std::cout << d1.Str() << " is not greater than " << d2.Str()
+ << std::endl;
+
+ if( d1 <= d2 )
+ std::cout << d1.Str() << " is less than or equal to " << d2.Str()
+ << std::endl;
+ else
+ std::cout << d1.Str() << " is not less than or equal to "
+ << d2.Str() << std::endl;
+
+ if( d1 >= d2 )
+ std::cout << d1.Str() << " is greater than or equal to "
+ << d2.Str() << std::endl;
+ else
+ std::cout << d1.Str() << " is not greater than or equal to "
+ << d2.Str() << std::endl;
+
+ d1.Sysdate();
+ d1++;
+ std::cout << "Tomorrow is " << d1.Str() << std::endl;
+ d1-=2;
+ std::cout << "Yesterday was " << d1.Str() << std::endl;
+ std::cout << "There are " << d1 - d2 << " days between " << d1.Str()
+ << " and " << d2.Str() << std::endl;
+
+ d1="20140701";
+ std::cout << "Operator = example " << d1.Str() << std::endl;
+
+ d1+=5;
+ std::cout << "Operator += 5 example " << d1.Str() << std::endl;
+
+ d1--;
+ std::cout << "Operator -- example " << d1.Str() << std::endl;
+
+ d1-4;
+ std::cout << "Operator -4 example " << d1.Str() << std::endl;
+
+ d1+10;
+ std::cout << "Operator +10 example " << d1.Str() << std::endl;
+ std::cout << "CenturyOf() " << d1.CenturyOf() << std::endl;
+
+ xbString sWorkDate;
+ d1.CTOD( "10/07/60" );
+ std::cout << "CTOD( '10/07/60' ) " << d1.Str() << std::endl;
+
+ d1.Set( "19590118" );
+ std::cout << "Set( '19590118' ) " << d1.Str() << std::endl;
+
+ std::cout << "CalcRollingCenturyForYear( 95 ) = " << d1.CalcRollingCenturyForYear( 95 ) << std::endl;
+ return 0;
+}
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_expression.cpp b/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_expression.cpp
new file mode 100755
index 0000000..f16c79f
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_expression.cpp
@@ -0,0 +1,231 @@
+/* xb_ex_expression.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
+
+The xb64 software library is covered under
+the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ xb64-devel@lists.sourceforge.net
+ xb64-users@lists.sourceforge.net
+
+
+ This example program demonstrates expression usage
+
+*/
+
+
+#include <xbase.h>
+
+using namespace xb;
+
+
+
+ xbSchema MyV4Record[] =
+ {
+ { "CFLD1", XB_CHAR_FLD, 20, 0 },
+ { "CFLD2", XB_CHAR_FLD, 10, 0 },
+ { "NFLD1", XB_NUMERIC_FLD, 5, 0 },
+ { "DATE1", XB_DATE_FLD, 8, 0 },
+ { "",0,0,0 }
+ };
+
+//*********************************************************************************************************************************
+void PrintResult( xbString *sExpression, xbExp *exp );
+void PrintResult( xbString *sExpression, xbExp *exp ){
+
+ // Determine the expression return type
+ char cExpType = exp->GetReturnType();
+
+ // Process the expression results, dependent on return type
+ if( cExpType == XB_EXP_NUMERIC ){
+ xbDouble dResult;
+ exp->GetNumericResult( dResult );
+ std::cout << "Numeric result from expression [" << sExpression->Str() << "] is [" << dResult << "]" << std::endl;
+
+ } else if( cExpType == XB_EXP_DATE ){
+ xbDate dt;
+ exp->GetDateResult( dt );
+ std::cout << "Date result from expression [" << sExpression->Str() << "] is [" << dt.Str() << "]" << std::endl;
+
+ } else if( cExpType == XB_EXP_LOGICAL ){
+ xbBool bResult;
+ exp->GetBoolResult( bResult );
+ std::cout << "Bool result from expression [" << sExpression->Str() << "] is [" << (bResult ? " True" : "False") << "]" << std::endl;
+
+ } else if( cExpType == XB_EXP_CHAR ){
+ xbString sResult;
+ exp->GetStringResult( sResult );
+ std::cout << "Char result from expression [" << sExpression->Str() << "] is [" << sResult.Str() << "]" << std::endl;
+ }
+
+}
+
+//*********************************************************************************************************************************
+//int main( int ac, char ** av ){
+
+int main(){
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ xbIx *pIx = NULL;
+ void *pTag = NULL;
+
+ xbXBase x;
+ xbDbf *MyFile = new xbDbf4( &x );
+
+ try{
+
+ if(( iRc = MyFile->CreateTable( "EXPEXAMPL.DBF", "TestMdxX2", MyV4Record, XB_OVERLAY, XB_MULTI_USER )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ /*
+ CreateTag( const xbString &sIxType, const xbString &sName, const xbString &sKey, const xbString &sFilter,
+ xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverLay, xbIx **xbIxOut, void **vpTagOut );
+ */
+
+ // the following index definition has two expressions
+ // 1) CFLD1+CFLD2 -- concat two char fields into an index key
+ // 2) .NOT. DELETED() -- don't include any deleted records in the index
+ if(( iRc = MyFile->CreateTag( "MDX", "TAG1", "CFLD1+CFLD2", ".NOT. DELETED()", 0, 0, XB_OVERLAY, &pIx, &pTag )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+
+ // add a record to the table
+ if(( iRc = MyFile->BlankRecord()) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+
+ if(( iRc = MyFile->PutField( "CFLD1", "Some text" )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+
+ if(( iRc = MyFile->PutField( "CFLD2", "Other text" )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+
+ if(( iRc = MyFile->PutLongField( "NFLD1", 1000 )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+
+ xbDate dt;
+ dt.Set( "19890209" );
+ if(( iRc = MyFile->PutDateField( "DATE1", dt )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+
+ if(( iRc = MyFile->AppendRecord()) != XB_NO_ERROR ){
+ iErrorStop = 170;
+ throw iRc;
+ }
+
+ if(( iRc = MyFile->Commit()) != XB_NO_ERROR ){
+ iErrorStop = 180;
+ throw iRc;
+ }
+
+
+ // To use the XBase64 expression processing logic
+ // 1) Parse an expression with the xbExp::ParseExpression() method
+ // 2) Process the parsed expression with the xbExp::ProcessExpression() method
+ // 3) If needed, determine the expression return type with the xbExp::GetReturnType() method
+ // 4) Use the appriate methid to retrieve the expression value:
+ // xbExp::GetNumericResult()
+ // xbExp::GetDateResult()
+ // xbExp::GetLogicalResult()
+ // xbExp::GetStringResult()
+
+
+ // The expression only needs to be parsed once. The ProcessExpression() method can be used
+ // zero, one or many times after it is initially parsed.
+
+ // see docs/html/xbc5.html for expression documentation
+ // see example below
+
+
+ // Numeric expression example
+ xbString sExpression = "NFLD1 * (2 + RECNO())";
+ xbExp exp( &x );
+ // Parse the expression
+ if(( iRc = exp.ParseExpression( MyFile, sExpression )) != XB_NO_ERROR ){
+ iErrorStop = 190;
+ throw iRc;
+ }
+ // Process the parsed expression
+ if(( iRc = exp.ProcessExpression()) != XB_NO_ERROR ){
+ iErrorStop = 200;
+ return -1;
+ }
+ PrintResult( &sExpression, &exp );
+
+ // String expression example
+ sExpression = "CFLD1+CFLD2+'{'+DTOS(DATE1)+'}'";
+ xbExp exp2( &x );
+ if(( iRc = exp2.ParseExpression( MyFile, sExpression )) != XB_NO_ERROR ){
+ iErrorStop = 210;
+ throw iRc;
+ }
+
+ // Process the parsed expression
+ if(( iRc = exp2.ProcessExpression()) != XB_NO_ERROR ){
+ iErrorStop = 220;
+ return -1;
+ }
+
+ PrintResult( &sExpression, &exp2 );
+
+ // Date example
+ sExpression = "DATE() + 6";
+ xbExp exp3( &x );
+ if(( iRc = exp3.ParseExpression( MyFile, sExpression )) != XB_NO_ERROR ){
+ iErrorStop = 230;
+ throw iRc;
+ }
+ // Process the parsed expression
+ if(( iRc = exp3.ProcessExpression()) != XB_NO_ERROR ){
+ iErrorStop = 240;
+ return -1;
+ }
+ PrintResult( &sExpression, &exp3 );
+
+ // Logic example
+ sExpression = "NFLD1 = 5";
+ xbExp exp4( &x );
+ if(( iRc = exp4.ParseExpression( MyFile, sExpression )) != XB_NO_ERROR ){
+ iErrorStop = 250;
+ throw iRc;
+ }
+ // Process the parsed expression
+ if(( iRc = exp4.ProcessExpression()) != XB_NO_ERROR ){
+ iErrorStop = 260;
+ return -1;
+ }
+ PrintResult( &sExpression, &exp4 );
+
+ // Cleanup
+ MyFile->DeleteTable();
+ delete MyFile;
+
+
+ } catch (xbInt16 iRc ){
+
+ std::cout << "Error in program xb_ex_expression at location " << iErrorStop << std::endl;
+ std::cout << x.GetErrorMessage( iRc ) << std::endl;
+
+ }
+
+
+
+
+ return iRc;
+}
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_log.cpp b/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_log.cpp
new file mode 100755
index 0000000..cf5320f
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_log.cpp
@@ -0,0 +1,77 @@
+/* xb_ex_log.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+// This program demostrates how to use logging
+
+
+#include "xbase.h"
+
+using namespace xb;
+
+int main( int argCnt, char **av )
+{
+
+ #ifdef XB_LOGGING_SUPPORT
+
+ xbXBase x;
+ xbString sMsg;
+
+
+ std::cout << "Default Logfile Name is: [" << x.GetLogFqFileName().Str()
+ << "] Rollover size = [" << x.GetLogSize()
+ << "]" << std::endl;
+
+ if( x.GetLogStatus() )
+ std::cout << "Logging is active" << std::endl;
+ else
+ std::cout << "Logging is inactive" << std::endl;
+
+ x.SetLogDirectory( PROJECT_LOG_DIR ); // use the library log directory
+ x.SetLogFileName ( "MySpecialLogFile.txt" ); // set to use a special name
+ x.SetLogSize ( x.GetLogSize() * 2 ); // double the log file size
+
+ // enable the logfile and write a message for the new settings to take effect
+ x.EnableMsgLogging();
+ sMsg.Sprintf( "Program [%s] initializing...", av[0] );
+ x.WriteLogMessage( sMsg );
+
+ std::cout << "New Logfile Name is: [" << x.GetLogFqFileName().Str()
+ << "] Rollover size = [" << x.GetLogSize()
+ << "]" << std::endl;
+
+ if( x.GetLogStatus() )
+ std::cout << "Logging is active" << std::endl;
+ else
+ std::cout << "Logging is inactive" << std::endl;
+
+ // write some messages to the logfile
+ for( int i = 0; i < 5; i++ ){
+ sMsg.Sprintf( "Test message [%d]", i );
+ x.WriteLogMessage( sMsg );
+ }
+
+ sMsg.Sprintf( "Program [%s] terminating..", av[0] );
+ x.WriteLogMessage( sMsg );
+
+ x.FlushLog(); // not really needed, but here for demonstration purposes
+
+ #endif // B_LOGGING_SUPPORT
+
+ return 0;
+}
+
+
+
+
diff --git a/src/examples/xb_ex_sql.cpp b/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_sql.cpp
index 695baa2..695baa2 100755
--- a/src/examples/xb_ex_sql.cpp
+++ b/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_sql.cpp
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_ssv.cpp b/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_ssv.cpp
new file mode 100755
index 0000000..61d72a2
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_ssv.cpp
@@ -0,0 +1,136 @@
+/* xb_ex_ssv.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2021,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+This program demonstrates using functionality of the xbSsv class (Shared system values)
+
+*/
+
+#include "xbase.h"
+
+using namespace xb;
+
+//int main( int ac, char ** av ){
+
+int main( int, char ** av ){
+
+ xbXBase x; // set up xbase for business
+ xbString sMsg; // a message string
+
+ sMsg.Sprintf( "Program [%s] initializing...", av[0] );
+ std::cout << sMsg.Str() << std::endl;
+
+
+ // example code to set up log file usage
+ #ifdef XB_LOGGING_SUPPORT
+ char cSeperator; // is this a unix (/) or windows (\) file system
+ xbString sLog; // general string for log file activities
+ sLog = x.GetLogFqFileName().Str(); // get the system default log file name
+ std::cout << "System default logfile is [" << sLog.Str() << "]" << std::endl;
+
+ cSeperator = sLog.GetPathSeparator(); // get the seperator from
+ std::cout << "Path seperator = [" << cSeperator << "]" << std::endl;
+
+ sLog.Sprintf( "..%c", cSeperator );
+ x.SetLogDirectory( sLog );
+ std::cout << "sLog = [" << sLog.Str() << "]\n";
+
+ sLog = x.GetLogFqFileName().Str(); // get the system default log file name
+ std::cout << "New logfile is [" << sLog.Str() << "]" << std::endl;
+
+ // turn on logging after file name set
+ x.EnableMsgLogging();
+ #endif // XB_LOGGING_SUPPORT
+
+ // const char *GetErrorMessage( xbInt16 ErrorCode ) const;
+ // void DisplayError( xbInt16 ErrorCode ) const;
+ std::cout << "DisplayError( -100 ) - ";
+ x.DisplayError( -100 );
+ // << "]" << std::endl;
+
+ // void SetDefaultDateFormat( const xbString &sDefaultDateFormat );
+ // xbString& GetDefaultDateFormat() const;
+ std::cout << "GetDefaultDateFormat() - " << x.GetDefaultDateFormat().Str() << std::endl;
+
+
+ // void SetDataDirectory ( const xbString &sDataDirectory );
+ // xbString& GetDataDirectory() const;
+ std::cout << "GetDataDirectory() - " << x.GetDataDirectory().Str() << std::endl;
+
+ // xbInt16 GetEndianType() const;
+ if( x.GetEndianType() == 'L' )
+ std::cout << "Little Endian Architecture." << std::endl;
+ else
+ std::cout << "Bid Endian Architecture." << std::endl;
+
+ //xbBool GetDefaultAutoCommit() const;
+ //void SetDefaultAutoCommit( xbBool bDefaultAutoCommit );
+ if( x.GetDefaultAutoCommit())
+ std::cout << "AutoCommit is on." << std::endl;
+ else
+ std::cout << "AutoCommit is off." << std::endl;
+
+ //xbBool GetMultiUser () const;
+ //void SetMultiUser ( xbBool bMultiUser );
+ if( x.GetMultiUser())
+ std::cout << "Multi user (locking) is enabled." << std::endl;
+ else
+ std::cout << "Multi user (locking) not enabled." << std::endl;
+
+ #if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
+ // xbInt16 GetUniqueKeyOpt () const;
+ // xbInt16 SetUniqueKeyOpt ( xbInt16 iUniqueKeyOpt );
+ // XB_HALT_ON_DUPKEY
+ // XB_EMULATE_DBASE
+ if( x.GetUniqueKeyOpt() == XB_HALT_ON_DUPKEY )
+ std::cout << "UniqueKey option - XB_HALT_ON_DUPKEY" << std::endl;
+ else if( x.GetUniqueKeyOpt() == XB_EMULATE_DBASE )
+ std::cout << "UniqueKey option - XB_EMULATE_DBASE" << std::endl;
+ #endif // (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
+
+ #ifdef XB_LOCKING_SUPPORT
+ //xbInt16 GetDefaultLockRetries () const;
+ //void SetDefaultLockRetries ( xbInt16 iRetryCount );
+ //xbInt32 GetDefaultLockWait () const;
+ //void SetDefaultLockWait ( xbInt32 lRetryWait );
+ //xbInt16 GetDefaultLockFlavor () const;
+ //void SetDefaultLockFlavor ( xbInt16 iLockFlavor );
+ //xbBool GetDefaultAutoLock () const;
+ //void SetDefaultAutoLock ( xbBool bAutoLock );
+ //void EnableDefaultAutoLock ();
+ //void DisableDefaultAutoLock ();
+
+ std::cout << "GetDefaultLockRetries() - " << x.GetDefaultLockRetries() << std::endl;
+ std::cout << "GetDefaultLockWait() - " << x.GetDefaultLockWait() << std::endl;
+ std::cout << "GetDefaultAutoLock() - " << x.GetDefaultAutoLock() << std::endl;
+ #endif // XB_LOCKING_SUPPORT
+
+ #ifdef XB_MDX_SUPPORT
+ // xbInt16 GetCreateMdxBlockSize() const;
+ // xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );
+ std::cout << "GetCreateMdxBlockSize() - " << x.GetCreateMdxBlockSize() << std::endl;
+ #endif // XB_MDX_SUPPORT
+
+ #ifdef XB_BLOCKREAD_SUPPORT
+ // xbUInt32 GetDefaultBlockReadSize() const;
+ // void SetDefaultBlockReadSize( xbUInt32 ulDfltBlockReadSize );
+ std::cout << "GetDefaultBlockReadSize() - " << x.GetDefaultBlockReadSize() << std::endl;
+ #endif // XB_BLOCKREAD_SUPPORT
+
+ //xbBool BitSet ( unsigned char c, xbInt16 iBitNo ) const;
+ //void BitDump ( unsigned char c ) const;
+ //void BitDump ( char c ) const;
+ std::cout << "BitDump( 'A' ) - ";
+ x.BitDump( 'A' );
+
+ return 0;
+}
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_string.cpp b/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_string.cpp
new file mode 100755
index 0000000..0cd7671
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_string.cpp
@@ -0,0 +1,381 @@
+/* xb_ex_string.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2021,2022 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+// This demonstrates the string class
+
+
+#include "xbase.h"
+
+using namespace xb;
+
+int main()
+{
+
+ // create a string, assign a value, print it
+ xbString s1;
+ s1 = "Test String 1";
+ fprintf( stdout, "s1 = [%s]\n", s1.Str());
+
+ // create another string, copy the value from s1 into it, print it
+ xbString s2;
+ s2 = s1;
+ std::cout << "s2 = [" << s2.Str() << "]" << std::endl;
+
+ // create another string with and print it
+ xbString s3( 'X' );
+ std::cout << "s3 = [" << s3.Str() << "]" << std::endl;
+
+ // create another string with and print it and print it out yet another way
+ xbString s4( "Class constructor test 4" );
+ printf( "s4 = [%s]\n", s4.Str() );
+
+ // create another string with a size limit and print it out
+ xbString s5( "Class constructor test 4", 7 );
+ printf( "s5 = [%s]\n", s5.Str() );
+
+ // create another string from a string
+ xbString s6( s5 );
+ printf( "s6 = [%s]\n", s6.Str() );
+
+ // create 100 byte string with nothing in it
+ xbString s7( (xbUInt32) 100 );
+ printf( "s7 = [%s]\n", s7.Str() );
+
+ // Extract character from a particular position in the string
+ printf( "[] test -- Position 7 (starts from 1) from String 1 = [%c]\n", s1[7] );
+ // or use the getCharacter method
+ printf( "getCharacter() test -- Position 7 (starts from 1) from String 1 = [%c]\n", s1.GetCharacter(7) );
+
+ // set string 7 to a character
+ s7 = 'Z';
+ printf( "updated s7 = [%s]\n", s7.Str() );
+
+ // trim methods
+ s3 = " abc ";
+ s3.Ltrim();
+ #ifdef XB_DEBUG_SUPPORT
+ s3.Dump( "LTrim test" );
+ #else
+ std::cout << s3.Str() << std::endl;
+ #endif
+
+ s3 = " abc ";
+ s3.Rtrim();
+ std::cout << "RTrim test - " << s3.Str() << std::endl;
+
+ s3.Trim();
+ std::cout << "Trim test - " << s3.Str() << std::endl;
+ printf( "s3 Len = [%d]\n", s3.Len() );
+
+ // Concatenation tests - I
+ s1 = "Concatenation test1 part 1 ";
+ s1 += "Concatenation test1 part 2 ";
+ s2 = " s2 data ";
+ s1 += s2;
+ s1 += 'z';
+
+ // Concatenation tests - II
+ s1 = "Concatenation test1 part 1 ";
+ s1 -= "Concatenation test1 part 2 ";
+ s1 -= 'X';
+ s1 -= s2;
+ std::cout << "Concatenation test 2 - " << s1.Str() << std::endl;
+
+ // Concatenation tests - III
+ s1 = "s1data ";
+ s2 = "s2data ";
+
+ s3 = s1 - s2;
+ std::cout << "Concatenation test 3a - " << s3.Str() << std::endl;
+
+ s3 = s1 + s2;
+ std::cout << "Concatenation test 3b - " << s3.Str() << std::endl;
+
+ s3 = s1 + " char * data ";
+ std::cout << "Concatenation test 3c - " << s3.Str() << std::endl;
+
+ s3 = s1 + 'Z';
+ std::cout << "Concatenation test 3d - " << s3.Str() << std::endl;
+
+ s3 = 'A';
+
+ std::cout << s3.Str() << std::endl;
+ s3 += s1;
+
+ std::cout << s3.Str() << std::endl;
+
+ // The following compiles and runs, but is not valid
+ // s3 = 'A' + s1;
+
+ std::cout << std::endl << "== operator tests" << std::endl;
+ if( s1 == s2 )
+ std::cout << s1.Str() << " == " << s2.Str() << std::endl;
+ else
+ std::cout << s1.Str() << " != " << s2.Str() << std::endl;
+
+ s1 = s2;
+ if( s1 == s2 )
+ std::cout << s1.Str() << " == " << s2.Str() << std::endl;
+ else
+ std::cout << s1.Str() << " != " << s2.Str() << std::endl;
+
+ if( s1 == "sometestdata" )
+ std::cout << s1.Str() << " == sometestdata" << s2.Str() << std::endl;
+ else
+ std::cout << s1.Str() << " != sometestdata" << s2.Str() << std::endl;
+
+ std::cout << std::endl << "!= operator tests" << std::endl;
+ s2 = "abc123";
+ std::cout << "s1 - " << s1.Str() << std::endl;
+ std::cout << "s2 - " << s2.Str() << std::endl;
+
+ if( s1 != s2 )
+ std::cout << s1.Str() << " != " << s2.Str() << std::endl;
+ else
+ std::cout << s1.Str() << " == " << s2.Str() << std::endl;
+
+ s1 = s2;
+ if( s1 != s2 )
+ std::cout << s1.Str() << " != " << s2.Str() << std::endl;
+ else
+ std::cout << s1.Str() << " == " << s2.Str() << std::endl;
+
+ if( s1 != "sometestdata" )
+ std::cout << s1.Str() << " != [sometestdata]" << std::endl;
+ else
+ std::cout << s1.Str() << " == [sometestdata]" << std::endl;
+
+ std::cout << std::endl << "< operator tests" << std::endl;
+ s1 = "AAA";
+ s2 = "BBB";
+
+ if( s1 < s2 )
+ std::cout << s1.Str() << " < " << s2.Str() << std::endl;
+ else
+ std::cout << s1.Str() << " >= " << s2.Str() << std::endl;
+
+ s1 = "BBB";
+ if( s1 < s2 )
+ std::cout << s1.Str() << " < " << s2.Str() << std::endl;
+ else
+ std::cout << s1.Str() << " >= " << s2.Str() << std::endl;
+
+ s1 = "CCC";
+ if( s1 < s2 )
+ std::cout << s1.Str() << " < " << s2.Str() << std::endl;
+ else
+ std::cout << s1.Str() << " >= " << s2.Str() << std::endl;
+
+ std::cout << std::endl << "> operator tests" << std::endl;
+ s1 = "AAA";
+ s2 = "BBB";
+
+ if( s1 > s2 )
+ std::cout << s1.Str() << " > " << s2.Str() << std::endl;
+ else
+ std::cout << s1.Str() << " <= " << s2.Str() << std::endl;
+
+ s1 = "BBB";
+ if( s1 > s2 )
+ std::cout << s1.Str() << " > " << s2.Str() << std::endl;
+ else
+ std::cout << s1.Str() << " <= " << s2.Str() << std::endl;
+
+ s1 = "CCC";
+ if( s1 > s2 )
+ std::cout << s1.Str() << " > " << s2.Str() << std::endl;
+ else
+ std::cout << s1.Str() << " <= " << s2.Str() << std::endl;
+
+ std::cout << std::endl << "<= operator tests" << std::endl;
+ s1 = "AAA";
+ s2 = "BBB";
+
+ if( s1 <= s2 )
+ std::cout << s1.Str() << " <= " << s2.Str() << std::endl;
+ else
+ std::cout << s1.Str() << " > " << s2.Str() << std::endl;
+
+ s1 = "BBB";
+ if( s1 <= s2 )
+ std::cout << s1.Str() << " <= " << s2.Str() << std::endl;
+ else
+ std::cout << s1.Str() << " > " << s2.Str() << std::endl;
+
+ s1 = "CCC";
+ if( s1 <= s2 )
+ std::cout << s1.Str() << " <= " << s2.Str() << std::endl;
+ else
+ std::cout << s1.Str() << " > " << s2.Str() << std::endl;
+
+ std::cout << std::endl << ">= operator tests" << std::endl;
+ s1 = "AAA";
+ s2 = "BBB";
+
+ if( s1 >= s2 )
+ std::cout << s1.Str() << " >= " << s2.Str() << std::endl;
+ else
+ std::cout << s1.Str() << " < " << s2.Str() << std::endl;
+
+ s1 = "BBB";
+ if( s1 >= s2 )
+ std::cout << s1.Str() << " >= " << s2.Str() << std::endl;
+ else
+ std::cout << s1.Str() << " < " << s2.Str() << std::endl;
+
+ s1 = "CCC";
+ if( s1 >= s2 )
+ std::cout << s1.Str() << " >= " << s2.Str() << std::endl;
+ else
+ std::cout << s1.Str() << " < " << s2.Str() << std::endl;
+
+ std::cout << "(const char *) " << (const char *) s2.Str() << std::endl;
+
+ std::cout << std::endl << "CountChar() test" << std::endl;
+ s1 = "ABADFDSGA";
+ xbUInt32 i = s1.CountChar( 'A' );
+ std::cout << "There are " << i << " 'A's in " << s1.Str() << std::endl;
+
+ s1.Ltrunc( 4 );
+ std::cout << "lTunc(4) test s1 = [" << s1.Str() << "]" << std::endl;
+
+ std::cout << std::endl << "PutAt() test" << std::endl;
+ s1.PutAt( 3, 'Z' );
+ std::cout << "Third char should be a 'Z' = " << s1.Str() << std::endl;
+
+ std::cout << std::endl << "AddBackSlash() test" << std::endl;
+ s1.AddBackSlash( 'Z' );
+ std::cout << "Should be a backslash before the 'Z' = " << s1.Str() << std::endl;
+
+ std::cout << std::endl << "Assign() test" << std::endl;
+ s2 = "1234567890";
+ std::cout << "s2 = " << s2.Str() << std::endl;
+ s1.Assign( s2, 4, 5 );
+ std::cout << "assign( s2, 4, 5 ) results = " << s1.Str() << std::endl;
+ s1.Assign( s2, 4, 15 );
+ std::cout << "assign( s2, 4, 15 ) results = " << s1.Str() << std::endl;
+
+ s1.Assign( s2, 5 );
+ std::cout << "Assign( s2, 5 ) results = " << s1.Str() << std::endl;
+ s1.Assign( s2, 15 );
+ std::cout << "Assign( s2, 15 ) results = " << s1.Str() << std::endl;
+
+ std::cout << std::endl << "s1.copy() test" << std::endl;
+ s1 = "ABC";
+ std::cout << "s1 = " << s1.Str() << std::endl;
+ std::cout << "s2 = " << s2.Str() << std::endl;
+
+ s1 = s2.Copy();
+ std::cout << "s1.Copy() results" << s1.Str() << std::endl;
+
+ s1 = "0x35";
+ char hexChar;
+ s1.CvtHexChar( hexChar );
+ std::cout << "CvtHexChar test [" << s1.Str() << "] converts to [" << hexChar << "]" << std::endl;
+ s1 = "0x65";
+ s1.CvtHexChar( hexChar );
+ std::cout << "cvHexChar test [" << s1.Str() << "] converts to [" << hexChar << "]" << std::endl;
+
+ s1 = "0x610x620x630x640x65";
+ s1.CvtHexString( s2 );
+ std::cout << "CvtHexString [" << s1.Str() << "] converts to [" << s2.Str() << "]" << std::endl;
+
+ s1.ExtractElement( "aaaa|bbbb|cccc|dddd", '|', 2, 0 );
+ std::cout << "ExtractElement() " << s1.Str() << std::endl;
+
+ s1 = "123";
+ s2 = "ABC";
+ std::cout << "HasAlphaChars( " << s1.Str() << " ) = " << s1.HasAlphaChars() << std::endl;
+ std::cout << "HasAlphaChars( " << s2.Str() << " ) = " << s2.HasAlphaChars() << std::endl;
+
+ s2 = "";
+ std::cout << "IsEmpty( " << s1.Str() << " ) = " << s1.IsEmpty() << std::endl;
+ std::cout << "IsEmpty( " << s2.Str() << " ) = " << s2.IsEmpty() << std::endl;
+
+ s1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+ std::cout << s1.Str() << " s1.Mid( 3,5 ) = [" << s1.Mid( 3, 5 ).Str() << "]" << std::endl;
+ std::cout << s1.Str() << " s1.Mid( 25, 10 ) = [" << s1.Mid( 25, 10 ).Str() << "]" << std::endl;
+
+ std::cout << s1.Str() << " s1.Pos('G') = " << s1.Pos( 'G' ) << std::endl;
+ std::cout << s1.Str() << " s1.Pos(\"JKL\") = " << s1.Pos( "JKL" ) << std::endl;
+
+ std::cout << "Remove( 3, 5 ) before " << s1.Str() << std::endl;
+ std::cout << s1.Str() << " s1.Remove( 3, 5 ) = [" << s1.Remove( 3, 5 ).Str() << "]" << std::endl;
+ std::cout << "Remove( 3, 5 ) after " << s1.Str() << std::endl;
+ s1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+
+ std::cout << "s1.Remove( 20, 10 ) = [" << s1.Remove( 20, 10 ).Str() << "]" << std::endl;
+
+ std::cout << "Remove( 20, 10 ) - " << s1.Str() << std::endl;
+
+
+ s1.Sprintf( "%d", 12345 );
+ std::cout << "Sprintf( %d, 12345 ) " << s1.Str() << std::endl;
+
+ s1.SetNum( (long) 123456 );
+ std::cout << "s1.SetNum( 123456 ) = " << s1.Str() << std::endl;
+
+ s1.Set( "Yet another way to set a string value" );
+ std::cout << "Set - " << s1.Str() << std::endl;
+
+ s1 = "ABCABCABZ";
+ std::cout << "SwapChars( 'A', '9' ) before - " << s1.Str() << std::endl;
+ s1.SwapChars( 'A', '9' );
+ std::cout << "SwapChars( 'A', '9' ) after - " << s1.Str() << std::endl;
+
+ s1.ToLowerCase();
+ std::cout << "ToLowerCase - " << s1.Str() << std::endl;
+
+ s1.ToUpperCase();
+ std::cout << "ToUpperCase - " << s1.Str() << std::endl;
+
+ s1.ZapChar( '9' );
+ std::cout << "ZapChar( '9' )" << s1.Str() << std::endl;
+
+ s1.ZapLeadingChar( 'B' );
+ std::cout << "ZapLeadingChar( 'B' )" << s1.Str() << std::endl;
+
+ s1.ZapTrailingChar( 'Z' );
+ std::cout << "ZapLeadingChar( 'Z' ) - " << s1.Str() << std::endl;
+
+ s1 = "123";
+ s1.PadLeft( '0', 9 );
+ std::cout << "s1.PadLeft('0', 9 ) - " << s1.Str() << std::endl;
+
+ s1 = "abc";
+ s1.PadRight( 'Z', 9 );
+ std::cout << "s1.PadRight('Z', 9 ) " << s1.Str() << std::endl;
+
+ xbString sNullString;
+ if( sNullString.IsNull())
+ std::cout << "sNullString is null" << std::endl;
+ else
+ std::cout << "sNullString is not null" << std::endl;
+
+ xbString tstS( "ZZZZZZZZZ" );
+ tstS = s1.Left( 5 );
+
+ std::cout << "tstS = " << tstS.Str() << "\n";
+ std::cout << "s1 = " << s1.Str() << "\n";
+
+ tstS = "1234567890";
+ std::cout << "mid result = " << tstS.Mid( 3, 3 ).Str() << std::endl;
+
+ tstS = "1234567890";
+ std::cout << "left result = " << tstS.Left( 3 ).Str() << std::endl;
+
+
+ return 0;
+}
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_v3_create_dbf.cpp b/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_v3_create_dbf.cpp
new file mode 100755
index 0000000..d6f7047
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_v3_create_dbf.cpp
@@ -0,0 +1,110 @@
+/* xb_ex_v3_create_dbf.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+ This example demonstrates the creation of a Version III file and and indices
+
+*/
+
+#include <xbase.h>
+
+using namespace xb;
+
+int main()
+{
+
+#ifdef XB_DBF3_SUPPORT
+
+ xbSchema MyRecord[] =
+ {
+ { "FIRSTNAME", XB_CHAR_FLD, 15, 0 },
+ { "LASTNAME", XB_CHAR_FLD, 20, 0 },
+ { "BIRTHDATE", XB_DATE_FLD, 8, 0 },
+ { "AMOUNT", XB_NUMERIC_FLD, 9, 2 },
+ { "RETIRED?", XB_LOGICAL_FLD, 1, 0 },
+ { "ZIPCODE", XB_NUMERIC_FLD, 5, 0 },
+#ifdef XB_MEMO_SUPPORT
+ { "MEMO1", XB_MEMO_FLD, 10, 0 },
+#endif
+ { "",0,0,0 }
+ };
+
+ /* define the classes */
+ xbXBase x; /* initialize xbase */
+ x.SetDataDirectory( PROJECT_DATA_DIR ); /* where all the tables live */
+
+ xbDbf *MyDbfFile; /* Pointer to dbf class */
+ MyDbfFile = new xbDbf3(&x); /* Create Version 3 instance */
+
+
+// Create Dbase3 NDX style indices if support compiled in
+ #ifdef XB_NDX_SUPPORT
+ xbIxNdx MyIndex1( MyDbfFile ); /* class for index 1 */
+ xbIxNdx MyIndex2( MyDbfFile ); /* class for index 2 */
+ xbIxNdx MyIndex3( MyDbfFile ); /* class for index 3 */
+ #endif
+
+
+ // fixme
+ // Create Clipper NTX style indices if support compiled in - bring this back to life in a future release
+ #ifdef XB_INDEX_NTX
+ xbNtx MyIndex4( &MyDbfFile ); /* class for index 4 */
+ xbNtx MyIndex5( &MyDbfFile ); /* class for index 5 */
+ #endif
+
+ xbInt16 rc;
+
+ if(( rc = MyDbfFile->CreateTable( "MyV3Table1", "MyV3ExampleTableAlias", MyRecord, XB_OVERLAY, XB_MULTI_USER )) != XB_NO_ERROR )
+ x.DisplayError( rc );
+ else
+ {
+
+ #ifdef XB_NDX_SUPPORT
+
+ xbIx *pIx;
+ void *pTag;
+
+ /*
+ Create a few index tags
+ CreateTag( const xbString &sIxType, const xbString &sName, const xbString &sKey, const xbString &sFilter,
+ xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverLay, xbIx **xbIxOut, void **vpTagOut );
+ */
+
+ /* define a simple index */
+ if(( rc = MyDbfFile->CreateTag ( "NDX", "MYINDEX1.NDX", "LASTNAME", "", 0, 1, XB_OVERLAY, &pIx, &pTag )) != XB_NO_ERROR )
+ x.DisplayError( rc );
+
+
+ /* define a multi-field index "LASTNAME FIRSTNAME" */
+ if(( rc = MyDbfFile->CreateTag( "NDX", "MYINDEX2.NDX", "LASTNAME+FIRSTNAME", "", 0, 1, XB_OVERLAY, &pIx, &pTag )) != XB_NO_ERROR )
+ x.DisplayError( rc );
+
+ /* define a numeric index "ZIPCODE" */
+ if(( rc = MyDbfFile->CreateTag( "NDX", "MYINDEX3.NDX", "ZIPCODE", "", 0, 0, XB_OVERLAY, &pIx, &pTag )) != XB_NO_ERROR )
+ x.DisplayError( rc );
+
+ std::cout << "Tag Count in MYINDEX3.NDX = " << pIx->GetTagCount() << "\n";
+ xbString sTagName;
+ sTagName = pIx->GetTagName( &pTag );
+ std::cout << "Tag Name in MYINDEX3.NDX = " << sTagName.Str() << "\n";
+
+
+ #endif
+
+ }
+
+ MyDbfFile->Close(); /* Close database and associated indexes */
+ delete MyDbfFile;
+
+ #endif // XB_DBF3_SUPPORT
+ return 0;
+}
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_v3_upd_dbf.cpp b/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_v3_upd_dbf.cpp
new file mode 100755
index 0000000..eecba16
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_v3_upd_dbf.cpp
@@ -0,0 +1,326 @@
+/* xb_ex_v3_upd_dbf.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2021,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+ This example demonstrates how to open the DBase III table created by xb_ex_v3_create_dbf
+ and apply various updates to the table.
+
+*/
+
+#include <xbase.h>
+
+using namespace xb;
+
+int main()
+{
+
+#ifdef XB_DBF3_SUPPORT
+
+ xbInt16 fld_FIRSTNAME;
+ xbInt16 fld_LASTNAME;
+ xbInt16 fld_BIRTHDATE;
+ xbInt16 fld_AMOUNT;
+ xbInt16 fld_RETIRED;
+ xbInt16 fld_ZIPCODE;
+
+ #ifdef XB_MEMO_SUPPORT
+ xbInt16 fld_MEMO1;
+ xbString sMemoData;
+ #endif
+
+
+ /* define the classes */
+ xbXBase x; /* initialize xbase */
+ x.SetDataDirectory( PROJECT_DATA_DIR ); /* where all the tables live */
+ x.EnableMsgLogging();
+ x.WriteLogMessage( "Program [xb_ex_v3_upd_dbf] initializing..." );
+
+
+ xbDbf * MyTable = new xbDbf3( &x ); /* class for V3 table */
+
+ xbString sSearchKey; /* string for doing an index lookup */
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+
+ try{
+
+ if(( iRc = MyTable->Open( "MyV3Table1.DBF" )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+
+
+ #ifdef XB_NDX_SUPPORT
+ // V3 NDX style indices can be opened manually (vs production MDX index files opened automatically)
+
+
+ if(( iRc = MyTable->OpenIndex( "NDX", "MYINDEX1.NDX")) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+
+
+/*
+ if(( iRc = MyTable->OpenIndex( "NDX", "MYINDEX2.NDX" )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+
+ if(( iRc = MyTable->OpenIndex( "NDX", "MYINDEX3.NDX" )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+*/
+
+ std::cout << "Current tag = [" << MyTable->GetCurTagName().Str() << "]\n";
+ #endif
+
+ // get the field numbers for all the fields in the table
+ fld_FIRSTNAME = MyTable->GetFieldNo( "FIRSTNAME" );
+ fld_LASTNAME = MyTable->GetFieldNo( "LASTNAME" );
+ fld_BIRTHDATE = MyTable->GetFieldNo( "BIRTHDATE" );
+ fld_AMOUNT = MyTable->GetFieldNo( "AMOUNT" );
+ fld_RETIRED = MyTable->GetFieldNo( "RETIRED?" );
+ fld_ZIPCODE = MyTable->GetFieldNo( "ZIPCODE" );
+
+
+
+ // do an index lookup for (key does not exist in this example)
+ sSearchKey = "abc123";
+ if(( iRc = MyTable->Find( sSearchKey )) != XB_NOT_FOUND ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+ std::cout << "RC = " << iRc << "\n";
+
+
+
+ #ifdef XB_MEMO_SUPPORT
+ fld_MEMO1 = MyTable->GetFieldNo( "MEMO1" );
+ #endif
+
+
+
+ // Blank the record buffer
+ if(( iRc = MyTable->BlankRecord()) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+
+
+ // put field examples - using field numbers
+ if(( iRc = MyTable->PutField( fld_LASTNAME, "JONES" )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+
+
+ if(( iRc = MyTable->PutField( fld_FIRSTNAME, "JERRY" )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+
+
+ if(( iRc = MyTable->PutField( fld_AMOUNT, "12.35" )) != XB_NO_ERROR ){
+ iErrorStop = 170;
+ throw iRc;
+ }
+
+ if(( iRc = MyTable->PutField( fld_BIRTHDATE, "19880208" )) != XB_NO_ERROR ){
+ iErrorStop = 180;
+ throw iRc;
+ }
+
+ if(( iRc = MyTable->PutLogicalField( fld_RETIRED, "Y" )) != XB_NO_ERROR ){
+ iErrorStop = 190;
+ throw iRc;
+ }
+
+ if(( iRc = MyTable->PutLongField( fld_ZIPCODE, 12345 )) != XB_NO_ERROR ){
+ iErrorStop = 200;
+ throw iRc;
+ }
+
+ #ifdef XB_MEMO_SUPPORT
+ sMemoData = "Memo data record 1";
+ if(( iRc = MyTable->UpdateMemoField( fld_MEMO1, sMemoData )) != XB_NO_ERROR ){
+ iErrorStop = 210;
+ throw iRc;
+ }
+ #endif
+
+ // Append the first record
+ if(( iRc = MyTable->AppendRecord()) != XB_NO_ERROR ){
+ // here is where you would address any errors.
+ // in this program, we simply abort and continue
+ MyTable->Abort();
+ }
+
+ // put field to the record buffer using field name (slightly less efficient than using field numbers)
+ // Blank the record buffer
+ if(( iRc = MyTable->BlankRecord()) != XB_NO_ERROR ){
+ iErrorStop = 220;
+ throw iRc;
+ }
+
+ if(( iRc = MyTable->PutField( "LASTNAME", "EINSTIEN" )) != XB_NO_ERROR ){
+ iErrorStop = 230;
+ throw iRc;
+ }
+
+ if(( iRc = MyTable->PutField( "FIRSTNAME", "ALBERT" )) != XB_NO_ERROR ){
+ iErrorStop = 240;
+ throw iRc;
+ }
+
+ if(( iRc = MyTable->PutField( "AMOUNT", "987.55" )) != XB_NO_ERROR ){
+ iErrorStop = 250;
+ throw iRc;
+ }
+
+ if(( iRc = MyTable->PutField( fld_BIRTHDATE, "19890209" )) != XB_NO_ERROR ){
+ iErrorStop = 260;
+ throw iRc;
+ }
+
+ if(( iRc = MyTable->PutLogicalField( "RETIRED?", "N" )) != XB_NO_ERROR ){
+ iErrorStop = 270;
+ throw iRc;
+ }
+
+ if(( iRc = MyTable->PutLongField( "ZIPCODE", 44256 )) != XB_NO_ERROR ){
+ iErrorStop = 280;
+ throw iRc;
+ }
+
+ #ifdef XB_MEMO_SUPPORT
+ sMemoData = "Memo data record 2";
+ if(( iRc = MyTable->UpdateMemoField( fld_MEMO1, sMemoData )) != XB_NO_ERROR ){
+ iErrorStop = 290;
+ throw iRc;
+ }
+ #endif
+
+ // Append the second record
+ if(( iRc = MyTable->AppendRecord()) != XB_NO_ERROR ){
+ // here is where you would address any errors.
+ // in this program, we simply abort and continue
+ MyTable->Abort();
+ }
+
+
+ if(( iRc = MyTable->GetRecord( 1 )) != XB_NO_ERROR ){
+ iErrorStop = 300;
+ throw iRc;
+ }
+ // get a field with a field number
+ xbString sFirstName;
+ if(( iRc = MyTable->GetField( fld_FIRSTNAME, sFirstName )) < 0 ){
+ iErrorStop = 310;
+ throw iRc;
+ }
+ std::cout << "First Name is [" << sFirstName.Str() << "]" << std::endl;
+
+ xbString sLastName;
+ if(( iRc = MyTable->GetField( "LASTNAME", sLastName )) < 0 ){
+ iErrorStop = 320;
+ throw iRc;
+ }
+ std::cout << "Last Name is [" << sLastName.Str() << "]" << std::endl;
+
+ xbInt16 iNoOfDecimals;
+ if(( iRc = MyTable->GetFieldDecimal( "AMOUNT", iNoOfDecimals )) != XB_NO_ERROR ){
+ iErrorStop = 330;
+ throw iRc;
+ }
+ std::cout << "There are " << iNoOfDecimals << " decimals in the AMOUNT field" << std::endl;
+
+ xbString FieldName;
+ if(( iRc = MyTable->GetFieldName( 4, FieldName )) != XB_NO_ERROR ){
+ iErrorStop = 340;
+ throw iRc;
+ }
+ std::cout << "Field #4 name is " << FieldName.Str() << std::endl;
+
+ xbString sRetired;
+ if(( iRc = MyTable->GetLogicalField( "RETIRED?", sRetired )) < 0 ){
+ iErrorStop = 350;
+ throw iRc;
+ }
+ std::cout << "Switch value = [" << sRetired.Str() << "]" << std::endl;
+
+ xbInt32 lZip;
+ if(( iRc = MyTable->GetLongField( "ZIPCODE", lZip )) < 0 ){
+ iErrorStop = 360;
+ throw iRc;
+ }
+ std::cout << "Long value = [" << lZip << "]" << std::endl;
+
+ // Initialize the record buffer in preparation for another record
+ if(( iRc = MyTable->BlankRecord()) != XB_NO_ERROR ){
+ iErrorStop = 370;
+ throw iRc;
+ }
+
+ // Append another record (it will be blank)
+ if(( iRc = MyTable->AppendRecord()) != XB_NO_ERROR ){
+ // here is where you would address any errors.
+ // in this program, we simply abort and continue
+ MyTable->Abort();
+ };
+
+ // mark record 1 for deletion
+ if(( iRc = MyTable->GetRecord( 1 )) != XB_NO_ERROR ){
+ iErrorStop = 300;
+ throw iRc;
+ }
+
+ if(( iRc = MyTable->DeleteRecord()) != XB_NO_ERROR ){
+ iErrorStop = 380;
+ throw iRc;
+ };
+
+ // save current record
+ if(( iRc = MyTable->PutRecord()) != XB_NO_ERROR ){
+ iErrorStop = 390;
+ throw iRc;
+ }
+ // pack the table with no options
+ if(( iRc = MyTable->Pack()) != XB_NO_ERROR ){
+ iErrorStop = 400;
+ throw iRc;
+ }
+
+ if(( iRc = MyTable->Commit()) != XB_NO_ERROR ){
+ // here is where you would address any errors.
+ // in this program, we simply abort and continue
+ MyTable->Abort();
+ }
+
+ /* Close database and associated indexes */
+ if(( iRc = MyTable->Close()) != XB_NO_ERROR ){
+ iErrorStop = 410;
+ throw iRc;
+ }
+
+ }
+ catch( xbInt16 rc ){
+ std::cout << "xb_ex_v3_upd_dbf error. Error stop point = [" << iErrorStop << "] iRc = [" << rc << "]" << std::endl;
+ std::cout << x.GetErrorMessage( rc ) << std::endl;
+ }
+
+ delete MyTable;
+
+ #endif // XB_DBF3_SUPPORT
+ return 0;
+}
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_v4_create_dbf.cpp b/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_v4_create_dbf.cpp
new file mode 100755
index 0000000..d6bfb2f
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_v4_create_dbf.cpp
@@ -0,0 +1,100 @@
+/* xb_ex_v4_create_dbf.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+ This example demonstrates the creation of a Version IV file and and indices
+
+ Creates three files in folder "PROJECT_DATA_DIR"
+ Address.DBF - Table with all the data
+ Address.DBT - Memo (variable lenght char field) data
+ Address.MDX - File with index data
+
+*/
+
+#include <xbase.h>
+
+using namespace xb;
+
+int main()
+{
+
+#ifdef XB_DBF4_SUPPORT
+
+ xbSchema MyAddressBookRecord[] =
+ {
+ { "LASTNAME", XB_CHAR_FLD, 20, 0 },
+ { "FIRSTNAME", XB_CHAR_FLD, 15, 0 },
+ { "COMPANY", XB_CHAR_FLD, 20, 0 },
+ { "ADDRESS", XB_CHAR_FLD, 35, 0 },
+ { "CITY", XB_CHAR_FLD, 30, 0 },
+ { "STATECD", XB_CHAR_FLD, 2, 0 },
+ { "ZIPCD", XB_CHAR_FLD, 10, 0 },
+
+ { "BIRTHDATE", XB_DATE_FLD, 8, 0 },
+
+ { "AMOUNT1", XB_NUMERIC_FLD, 9, 2 },
+ { "AMOUNT2", XB_FLOAT_FLD, 12, 2 },
+
+ { "FRIEND?", XB_LOGICAL_FLD, 1, 0 },
+ { "FAMILY?", XB_LOGICAL_FLD, 1, 0 },
+ { "BUSASSOC?", XB_LOGICAL_FLD, 1, 0 },
+
+ #ifdef XB_MEMO_SUPPORT
+ { "NOTES", XB_MEMO_FLD, 10, 0 },
+ #endif
+ { "",0,0,0 }
+ };
+
+ /* define the classes */
+ xbXBase x; /* initialize xbase */
+ x.SetDataDirectory( PROJECT_DATA_DIR ); /* where all the tables/files live */
+
+ xbInt16 iRc;
+ xbDbf * MyDbfFile;
+
+ #ifdef XB_MDX_SUPPORT
+ xbIx *pIx;
+ void *pTag;
+ #endif // XB_MDX_SUPPORT
+
+ MyDbfFile = new xbDbf4( &x );
+
+ if(( iRc = MyDbfFile->CreateTable( "Address.DBF", "Address", MyAddressBookRecord, XB_OVERLAY, XB_MULTI_USER )) != XB_NO_ERROR )
+ x.DisplayError( iRc );
+ else
+ {
+
+ #ifdef XB_MDX_SUPPORT
+
+ /*
+ Create a few index tags
+ CreateTag( const xbString &sIxType, const xbString &sName, const xbString &sKey, const xbString &sFilter,
+ xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverLay, xbIx **xbIxOut, void **vpTagOut );
+ */
+
+ // std::cout << "Creating three index tags\n";
+ if(( iRc = MyDbfFile->CreateTag( "MDX", "NAME", "LASTNAME+FIRSTNAME", ".NOT. DELETED()", 0, 0, XB_OVERLAY, &pIx, &pTag )) != XB_NO_ERROR )
+ x.DisplayError( iRc );
+ if(( iRc = MyDbfFile->CreateTag( "MDX", "BDDATE", "BIRTHDATE", ".NOT. DELETED()", 0, 0, XB_OVERLAY, &pIx, &pTag )) != XB_NO_ERROR )
+ x.DisplayError( iRc );
+ if(( iRc = MyDbfFile->CreateTag( "MDX", "COMPANY", "COMPANY+LASTNAME+FIRSTNAME", ".NOT. DELETED()", 0, 0, XB_OVERLAY, &pIx, &pTag )) != XB_NO_ERROR )
+ x.DisplayError( iRc );
+
+ #endif // XB_MDX_SUPPORT
+ }
+
+ MyDbfFile->Close(); /* Close database and associated indexes */
+ delete MyDbfFile;
+
+ #endif // XB_DBF4_SUPPORT
+ return 0;
+}
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_v4_upd_dbf.cpp b/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_v4_upd_dbf.cpp
new file mode 100755
index 0000000..d128eba
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_v4_upd_dbf.cpp
@@ -0,0 +1,294 @@
+/* xb_ex_v4_upd_dbf.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+ This example demonstrates how to open the DBase IV table created by xb_ex_v4_create_dbf
+ and apply various updates to the table.
+
+*/
+
+#include <xbase.h>
+
+using namespace xb;
+
+int main()
+{
+
+#ifdef XB_DBF4_SUPPORT
+
+
+ /* define the classes */
+ xbXBase x; /* initialize xbase */
+ x.SetDataDirectory( PROJECT_DATA_DIR ); /* where all the tables live */
+ x.EnableMsgLogging();
+ x.WriteLogMessage( "Program [xb_ex_v4_upd_dbf] initializing..." );
+
+ xbDbf *MyTable = new xbDbf4( &x ); /* class for DBase V4 table */
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+
+ try{
+
+ if(( iRc = MyTable->Open( "Address.DBF" )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+
+ /* get the field numbers for all the fields in the table */
+
+ xbInt16 iFld_FIRSTNAME = MyTable->GetFieldNo( "FIRSTNAME" );
+ xbInt16 iFld_LASTNAME = MyTable->GetFieldNo( "LASTNAME" );
+ xbInt16 iFld_BIRTHDATE = MyTable->GetFieldNo( "BIRTHDATE" );
+ xbInt16 iFld_AMOUNT1 = MyTable->GetFieldNo( "AMOUNT1" );
+ xbInt16 iFld_FRIEND = MyTable->GetFieldNo( "FRIEND?" );
+ xbInt16 iFld_ZIPCD = MyTable->GetFieldNo( "ZIPCD" );
+ xbInt16 iFld_AMOUNT2 = MyTable->GetFieldNo( "AMOUNT2" );
+
+ #ifdef XB_MEMO_FIELDS
+ zbInt16 iFld_MEMO1 = MyTable->GetFieldNo( "MEMO1" );
+ #endif
+
+
+ #ifdef XB_MDX_SUPPPORT
+ std::cout << "Current tag = [" << MyTable->GetCurTagName() << "]\n";
+ #endif
+
+ // Blank the record buffer
+ if(( iRc = MyTable->BlankRecord()) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+
+ // put field examples - using field numbers
+ if(( iRc = MyTable->PutField( iFld_LASTNAME, "JONES" )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ // could also reference by field name (see below) but referencing by number
+ // is a little bit faster because it doesn't need to look up the number for the field name
+ // Alternative--> if(( iRc = MyTable->PutField( "LASTNAME", "JONES" )) != XB_NO_ERROR ){
+
+ if(( iRc = MyTable->PutField( iFld_FIRSTNAME, "JERRY" )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+
+ if(( iRc = MyTable->PutField( iFld_AMOUNT1, "12.35" )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+
+ if(( iRc = MyTable->PutLogicalField( iFld_FRIEND, "Y" )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+
+ if(( iRc = MyTable->PutField( iFld_BIRTHDATE, "19880209" )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+
+ if(( iRc = MyTable->PutLongField( iFld_ZIPCD, 12345 )) != XB_NO_ERROR ){
+ iErrorStop = 170;
+ throw iRc;
+ }
+
+ // Append the first record
+ if(( iRc = MyTable->AppendRecord()) != XB_NO_ERROR ){
+ iErrorStop = 180;
+ throw iRc;
+ }
+
+ // Commit the updates
+ if(( iRc = MyTable->Commit()) != XB_NO_ERROR ){
+ iErrorStop = 190;
+ throw iRc;
+ }
+
+ // Blank the record buffer
+ if(( iRc = MyTable->BlankRecord()) != XB_NO_ERROR ){
+ iErrorStop = 200;
+ throw iRc;
+ }
+
+ // put field to the record buffer using field name (slightly less efficient than using field numbers)
+ if(( iRc = MyTable->PutField( "LASTNAME", "FUCKPUTIN" )) != XB_NO_ERROR ){
+ iErrorStop = 210;
+ throw iRc;
+ }
+
+ if(( iRc = MyTable->PutField( "FIRSTNAME", "ALBERT" )) != XB_NO_ERROR ){
+ iErrorStop = 220;
+ throw iRc;
+ }
+
+ if(( iRc = MyTable->PutDoubleField( "AMOUNT1", (xbDouble) 987.55 )) != XB_NO_ERROR ){
+ iErrorStop = 230;
+ throw iRc;
+ }
+
+ if(( iRc = MyTable->PutLogicalField( "FRIEND?", "N" )) != XB_NO_ERROR ){
+ iErrorStop = 240;
+ throw iRc;
+ }
+
+ if(( iRc = MyTable->PutLongField( "ZIPCD", 44256 )) != XB_NO_ERROR ){
+ iErrorStop = 250;
+ throw iRc;
+ }
+
+ xbFloat f = (xbFloat) 12345.67;
+ std::cout << f << std::endl;
+
+ if(( iRc = MyTable->PutFloatField( iFld_AMOUNT2, f )) != XB_NO_ERROR ){
+ iErrorStop = 260;
+ throw iRc;
+ }
+ xbDouble d = 76543.21;
+ if(( iRc = MyTable->PutDoubleField( iFld_AMOUNT1, d )) != XB_NO_ERROR ){
+ iErrorStop = 270;
+ throw iRc;
+ }
+
+ // Append the second record
+ if(( iRc = MyTable->AppendRecord()) != XB_NO_ERROR ){
+ iErrorStop = 280;
+ throw iRc;
+ }
+
+ // Commit the updates
+ if(( iRc = MyTable->Commit()) != XB_NO_ERROR ){
+ iErrorStop = 290;
+ throw iRc;
+ }
+
+
+ // get a field with a field number
+ xbString FirstName;
+ if(( iRc = MyTable->GetField( iFld_FIRSTNAME, FirstName )) < 0 ){
+ iErrorStop = 300;
+ throw iRc;
+ }
+ std::cout << "First Name is [" << FirstName.Str() << "]" << std::endl;
+
+ xbString LastName;
+ if(( iRc = MyTable->GetField( "LASTNAME", LastName )) < 0 ){
+ iErrorStop = 310;
+ throw iRc;
+ }
+ std::cout << "Last Name is [" << LastName.Str() << "]" << std::endl;
+
+ xbInt16 iNoOfDecimals;
+ if(( iRc = MyTable->GetFieldDecimal( "AMOUNT2", iNoOfDecimals )) != XB_NO_ERROR ){
+ iErrorStop = 320;
+ throw iRc;
+ }
+ std::cout << "There are " << iNoOfDecimals << " decimals in the AMOUNT field" << std::endl;
+
+ xbString FieldName;
+ if(( iRc = MyTable->GetFieldName( 4, FieldName )) != XB_NO_ERROR ){
+ iErrorStop = 330;
+ throw iRc;
+ }
+ std::cout << "Field #4 name is " << FieldName.Str() << std::endl;
+
+ xbString sFriend;
+ if(( iRc = MyTable->GetLogicalField( "FRIEND?", sFriend )) < 0 ){
+ iErrorStop = 340;
+ throw iRc;
+ }
+ std::cout << "Switch value = [" << sFriend.Str() << "]" << std::endl;
+
+ xbInt32 lZip = 0;
+ if(( iRc = MyTable->GetLongField( "ZIPCODE", lZip )) < 0 ){
+ iErrorStop = 350;
+ throw iRc;
+ }
+ std::cout << "Long value = [" << lZip << "]" << std::endl;
+
+ if(( iRc = MyTable->GetFloatField( iFld_AMOUNT2, f )) < 0 ){
+ iErrorStop = 360;
+ throw iRc;
+ }
+ printf( "Field NUMFLD1 %8.2f\n", f );
+
+
+ if(( iRc = MyTable->GetDoubleField( iFld_AMOUNT1, d )) < 0 ){
+ iErrorStop = 370;
+ throw iRc;
+ }
+ printf( "Field NUMFLD2 %8.2f\n", d );
+
+ // Initialize the record buffer in preparation for another record
+ if(( iRc = MyTable->BlankRecord()) != XB_NO_ERROR ){
+ iErrorStop = 380;
+ throw iRc;
+ }
+
+ // Append another record (it will be blank)
+ if(( iRc = MyTable->AppendRecord()) != XB_NO_ERROR ){
+ iErrorStop = 390;
+ throw iRc;
+ };
+
+ // mark current record for deletion
+ if(( iRc = MyTable->DeleteRecord()) != XB_NO_ERROR ){
+ iErrorStop = 400;
+ throw iRc;
+ };
+
+ // save current record
+ if(( iRc = MyTable->PutRecord()) != XB_NO_ERROR ){
+ iErrorStop = 410;
+ throw iRc;
+ }
+
+ if(( iRc = MyTable->Commit()) != XB_NO_ERROR ){
+ iErrorStop = 420;
+ throw iRc;
+ }
+
+ // example code to loop through the table
+ xbUInt32 ulRecCnt;
+ if(( iRc = MyTable->GetRecordCnt( ulRecCnt )) != XB_NO_ERROR ){
+ iErrorStop = 430;
+ throw iRc;
+ }
+
+ for( xbUInt32 ul = 1; ul <= ulRecCnt; ul++ ){
+ if(( iRc = MyTable->GetRecord( ul )) != XB_NO_ERROR ){
+ iErrorStop = 440;
+ throw iRc;
+ }
+ // do something with the record here
+ std::cout << "Tuple = " << MyTable->GetCurRecNo() << std::endl;
+
+ }
+
+ /* Close database and associated indexes */
+ if(( iRc = MyTable->Close()) != XB_NO_ERROR ){
+ iErrorStop = 450;
+ throw iRc;
+ }
+ delete MyTable;
+
+
+ }
+ catch( xbInt16 iRc ){
+ std::cout << "xb_ex_v4_upd_dbf error. Error stop point = [" << iErrorStop << "] iRc = [" << iRc << "]" << std::endl;
+ std::cout << x.GetErrorMessage( iRc ) << std::endl;
+ }
+
+#endif // XB_DBF4_SUPPORT
+ return 0;
+}
diff --git a/src/include/xbase.h b/1Tdata/xbase/xbase64-4.1.4/src/include/xbase.h
index 4ab8892..4ab8892 100755
--- a/src/include/xbase.h
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xbase.h
diff --git a/src/include/xbbcd.h b/1Tdata/xbase/xbase64-4.1.4/src/include/xbbcd.h
index 8c931d3..8c931d3 100755
--- a/src/include/xbbcd.h
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xbbcd.h
diff --git a/src/include/xbblkread.h b/1Tdata/xbase/xbase64-4.1.4/src/include/xbblkread.h
index 353c618..353c618 100755
--- a/src/include/xbblkread.h
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xbblkread.h
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/include/xbconfig.h.in b/1Tdata/xbase/xbase64-4.1.4/src/include/xbconfig.h.in
new file mode 100755
index 0000000..f084038
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xbconfig.h.in
@@ -0,0 +1,128 @@
+// the configured options and settings for xbase
+
+#define xbase_VERSION_MAJOR @xbase_VERSION_MAJOR@
+#define xbase_VERSION_MINOR @xbase_VERSION_MINOR@
+#define xbase_VERSION_PATCH @xbase_VERSION_PATCH@
+
+#define PROJECT_PARENT_DIR "@PROJECT_PARENT_DIR@"
+#define PROJECT_BINARY_DIR "@PROJECT_BINARY_DIR@"
+
+#define PROJECT_SOURCE_DIR "@PROJECT_SOURCE_DIR@"
+#define PROJECT_RUNTIME_DIR "@PROJECT_RUNTIME_DIR@"
+#define PROJECT_DATA_DIR "@PROJECT_DATA_DIR@"
+#define PROJECT_LOG_DIR "@PROJECT_LOG_DIR@"
+#define PROJECT_TEMP_DIR "@PROJECT_TEMP_DIR@"
+#define PROJECT_DFLT_LOGFILE "@CMAKE_SYSTEM_NAME@_@XB_PLATFORM@.xbLog.txt"
+#define EXTRA_LIBS "@EXTRA_LIBS@"
+#define CMAKE_RUNTIME_OUTPUT_DIRECTORY "@CMAKE_RUNTIME_OUTPUT_DIRECTORY@"
+
+
+#define CMAKE_HOME_DIRECTORY "@CMAKE_HOME_DIRECTORY@"
+#define CMAKE_PROJECT_NAME "@CMAKE_PROJECT_NAME@"
+#define BUILD_SHARED_LIBS "@BUILD_SHARED_LIBS@"
+#define CMAKE_SYSTEM_NAME "@CMAKE_SYSTEM_NAME@"
+#define CMAKE_SYSTEM_PROCESSOR "@CMAKE_SYSTEM_PROCESSOR@"
+#define CMAKE_SYSTEM_VERSION "@CMAKE_SYSTEM_VERSION@"
+#define CMAKE_BUILD_TYPE "@CMAKE_BUILD_TYPE@"
+#define CMAKE_C_FLAGS "@CMAKE_C_FLAGS@"
+#define CMAKE_C_FLAGS_DEBUG "@CMAKE_C_FLAGS_DEBUG@"
+#define CMAKE_C_FLAGS_RELEASE "@CMAKE_C_FLAGS_RELEASE@"
+
+
+#define XB_PLATFORM "@XB_PLATFORM@"
+#define Mylibrary_Exports "@Mylibrary_Exports@"
+#define MYLIB_EXPORT "@MYLIB_EXPORT@"
+#define CMAKE_SIZEOF_VOID_P "@CMAKE_SIZEOF_VOID_P@"
+
+#define CMAKE_COMPILER "@CMAKE_CXX_COMPILER_ID@"
+
+// integer definitions
+#define xbInt16 @xbInt16@
+#define xbUInt16 @xbUInt16@
+#define xbInt32 @xbInt32@
+#define xbUInt32 @xbUInt32@
+#define xbInt64 @xbInt64@
+#define xbUInt64 @xbUInt64@
+
+#cmakedefine UNIX
+
+#cmakedefine CMAKE_COMPILER_IS_GNUCC
+#cmakedefine HAVE_CTYPE_H
+#cmakedefine HAVE_DIRENT_H
+#cmakedefine HAVE_DOS_H
+#cmakedefine HAVE_FCNTL_H
+#cmakedefine HAVE_INTTYPES_H
+#cmakedefine HAVE_PWD_H
+#cmakedefine HAVE_STDARG_H
+#cmakedefine HAVE_STDARGS_H
+#cmakedefine HAVE_STRING_H
+#cmakedefine HAVE_STRINGS_H
+#cmakedefine HAVE_STAT_H
+#cmakedefine HAVE_UNISTD_H
+#cmakedefine HAVE_VARARGS_H
+#cmakedefine HAVE_WINDOWS_H
+
+#cmakedefine HAVE__CLOSE_F
+#cmakedefine HAVE_CREATEPROCESSW_F
+#cmakedefine HAVE_CREATEPROCESSW_F2
+#cmakedefine HAVE_FCNTL_F
+#cmakedefine HAVE__FDOPEN_F
+#cmakedefine HAVE__FILENO_F
+#cmakedefine HAVE_FOPEN_S_F
+#cmakedefine HAVE__FSOPEN_F
+#cmakedefine HAVE_FORK_F
+#cmakedefine HAVE__FSEEKI64_F
+#cmakedefine HAVE_FSEEKO_F
+#cmakedefine HAVE_FTRUNCATE_F
+
+#cmakedefine HAVE_GETENV_S_F
+#cmakedefine HAVE__LOCALTIME64_S_F
+#cmakedefine HAVE_LOCKFILE_F
+#cmakedefine HAVE_LOCKING_F
+#cmakedefine HAVE__LOCKING_F
+#cmakedefine HAVE__OPEN_F
+#cmakedefine HAVE_SETENDOFFILE_F
+#cmakedefine HAVE_VSNPRINTF_F
+#cmakedefine HAVE__VSNPRINTF_S_F
+#cmakedefine HAVE_VSPRINTF_S_F
+
+
+#cmakedefine XB_PLATFORM_32
+#cmakedefine XB_PLATFORM_64
+#cmakedefine XB_DEBUG_SUPPORT
+#cmakedefine XB_LINKLIST_SUPPORT
+#cmakedefine XB_MEMO_SUPPORT
+#cmakedefine XB_LOGGING_SUPPORT
+#cmakedefine XB_DBF3_SUPPORT
+#cmakedefine XB_DBF4_SUPPORT
+#cmakedefine XB_LOCKING_SUPPORT
+#cmakedefine XB_FUNCTION_SUPPORT
+#cmakedefine XB_EXPRESSION_SUPPORT
+#cmakedefine XB_INDEX_SUPPORT
+#cmakedefine XB_NDX_SUPPORT
+#cmakedefine XB_MDX_SUPPORT
+#cmakedefine XB_TDX_SUPPORT
+#cmakedefine XB_SQL_SUPPORT
+#cmakedefine XB_INF_SUPPORT
+#cmakedefine XB_FILTER_SUPPORT
+#cmakedefine XB_BLOCKREAD_SUPPORT
+
+#cmakedefine XB_UTILS_SUPPORT
+#cmakedefine XB_EXAMPLES_SUPPORT
+
+#cmakedefine HAVE_LONG_LONG
+
+#if defined (WIN32)
+ #if defined ( Mylibrary_Exports )
+ #define XBDLLEXPORT __declspec(dllexport)
+ #else
+ #define XBDLLEXPORT __declspec(dllimport)
+ #endif
+#else
+ #define XBDLLEXPORT
+#endif
+
+#if defined (UNIX) && defined (XB_PLATFORM_32)
+ #define _FILE_OFFSET_BITS 64
+#endif
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/include/xbcrix.cpp b/1Tdata/xbase/xbase64-4.1.4/src/include/xbcrix.cpp
new file mode 100755
index 0000000..b89baaa
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xbcrix.cpp
@@ -0,0 +1,292 @@
+/* xbcrix.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+#include "xbase.h"
+
+#ifdef XB_SQL_SUPPORT
+
+namespace xb{
+
+
+/***********************************************************************/
+#ifdef XB_INDEX_SUPPORT
+xbInt16 xbSql::SqlCreateIndex( const xbString &sCmdLine ){
+
+ // std::cout << "CREATE INDEX " << sCmdLine << std::endl;
+
+ // expected format to create an Dbase 3, NDX index:
+ // CREATE INDEX ixname.ndx ON tablename.dbf ( EXPRESSION ) [ASSOCIATE]
+
+ // expected format to create an Dbase 4, tag on an MDX index:
+ // CREATE [UNIQUE] INDEX tagname ON tablename.dbf ( EXPRESSION ) [DESC] [FILTER .NOT. DELETED()]
+
+ // The ASSOCIATE parameter is specific to Xbase64 library, it is used to associate
+ // a non production (NDX) index file to a dbf file so it will be automatically
+ // opened with the dbf file whenever the dbf file is opened by the xbase64 routines.
+
+ // The [ASSOCIATE] parameter is not used with MDX production indices
+
+ // This method first looks for ".NDX" in the file name to determine if an NDX
+ // index should be created.
+ // if .NDX is not in the filename, it looks in the uda for "IXTYPE" for either
+ // NDX or MDX to detmermine the index type to create
+ // if IXTYPE not found, create an MDX tag
+
+ // The optional DESC parameter defines an entire index key as descending. This is
+ // different than other SQL implementations where specific fields can be descending.
+
+ // The optional FILTER parameter is specific to the XBASE64 library, is it used to
+ // assign a filter to a tag in an MDX style index. Everything to the right of
+ // the keyword FILTER is considered part of the filter.
+
+ // The original DBASE indices used to '+' to create an index on more than one field
+ // ie: FIELD1+FIELD2+FIELD3
+ // SQL uses commas: ie: FIELD1, FIELD2, FIELD3
+ // The Xbase library supports either '+' or ',' when creating mutli field indices.
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ xbString sTableName;
+ xbString sIxName;
+ xbString sIxType;
+ xbUInt32 ulPos;
+ xbString sCmd = sCmdLine;
+ xbString sNode;
+ xbBool bUnique = xbFalse;
+ xbDbf * dbf = NULL;
+ xbBool bTableLocked = xbFalse;
+
+ try{
+
+ // drop off the first node
+ ulPos = sCmd.Pos( ' ' );
+ sCmd.Ltrunc( ulPos );
+ sCmd.Ltrim();
+
+ sNode.ExtractElement( sCmd, ' ', 1, 0 );
+ sNode.ToUpperCase();
+
+ if( sNode == "UNIQUE" ){
+ //std::cout << "unique ix\n";
+ bUnique = xbTrue;
+ ulPos = sCmd.Pos( ' ' );
+ sCmd.Ltrunc( ulPos );
+ sCmd.Ltrim();
+ }
+
+ // go past the index keyword
+ ulPos = sCmd.Pos( ' ' );
+ sCmd.Ltrunc( ulPos );
+ sCmd.Ltrim();
+
+ // pull the index name off the cmd line
+ sIxName.ExtractElement( sCmd, ' ', 1, 0 );
+
+ #ifdef XB_NDX_SUPPORT
+ xbString sTemp = sIxName;
+ sTemp.ToUpperCase();
+ ulPos = sTemp.Pos( ".NDX" );
+ if(ulPos == (sTemp.Len() - 3) )
+ sIxType = "NDX";
+ #endif // XB_NDX_SUPPORT
+
+ if( sIxType == "" ){
+ if(( iRc = uda.GetTokenForKey( "IXTYPE", sIxType )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ }
+
+ #ifdef XB_NDX_SUPPORT
+ if( sIxType == "NDX" ){
+ xbFile f( xbase );
+ f.SetFileName( sIxName );
+ if( f.FileExists()){
+
+ iErrorStop = 110;
+ iRc = XB_FILE_EXISTS;
+ throw iRc;
+ }
+ }
+ #endif // XB_NDX_SUPPORT
+
+ // skip past index name
+ ulPos = sCmd.Pos( ' ' );
+ sCmd.Ltrunc( ulPos );
+ sCmd.Ltrim();
+
+ // skip past "ON"
+ ulPos = sCmd.Pos( ' ' );
+ sCmd.Ltrunc( ulPos );
+ sCmd.Ltrim();
+
+ // get the table name
+ ulPos = sCmd.Pos( '(' );
+ sTableName.ExtractElement( sCmd, '(', 1, 0 );
+ sTableName.Trim();
+
+ xbFile fDbf( xbase );
+ fDbf.SetFileName( sTableName );
+
+ // if not open, attempt to open it
+ dbf = xbase->GetDbfPtr( fDbf.GetFqFileName());
+
+ if( !dbf ){
+ if(( iRc = xbase->OpenHighestVersion( sTableName, "", &dbf )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ }
+
+ if( dbf == NULL ){
+ iErrorStop = 130;
+ iRc = XB_FILE_NOT_FOUND;
+ throw iRc;
+ }
+ sCmd.Ltrunc( ulPos );
+
+ //ulPos = sCmd.GetLastPos( ')' );
+ xbString sKeyExpression;
+ xbBool bDone = xbFalse;
+ xbUInt32 lPos = 1;
+ xbInt16 iParenCtr = 0;
+
+ while( !bDone && lPos < sCmd.Len()){
+ if( sCmd[lPos] == '(' ){
+ iParenCtr++;
+ sKeyExpression.Append( sCmd[lPos] );
+ } else if( sCmd[lPos] == ')' ){
+ if( iParenCtr > 0 ){
+ iParenCtr--;
+ sKeyExpression.Append( sCmd[lPos] );
+ } else {
+ bDone = xbTrue;
+ }
+ } else if( sCmd[lPos] == ',' && iParenCtr == 0 ){
+ sKeyExpression.Append( '+' );
+ } else if( sCmd[lPos] != ' ' ){
+ sKeyExpression.Append( sCmd[lPos] );
+ }
+ lPos++;
+ }
+
+ // std::cout << "Key Expression =[" << sKeyExpression << "]\n";
+ sCmd.Ltrunc( lPos );
+ sCmd.Trim();
+
+ xbBool bDesc = xbFalse;
+ // std::cout << "sCmd - looking for DESC [" << sCmd << "]\n";
+ if( sCmd.Len() > 4 ){
+ sNode = sCmd;
+ sNode.ToUpperCase();
+ ulPos = sNode.Pos( "DESC" );
+ if( ulPos > 0 ){
+ bDesc = xbTrue;
+ sCmd.Ltrunc( 4 );
+ sCmd.Trim();
+ std::cout << "Descending\n";
+ }
+ }
+
+ // std::cout << "sCmd - looking for FILTER stuff [" << sCmd << "]\n";
+ xbString sFilter;
+ if( sCmd.Len() > 6 ){
+ sNode = sCmd;
+ sNode.ToUpperCase();
+ ulPos = sNode.Pos( "FILTER" );
+ if( ulPos > 0 ){
+ sFilter = sCmd;
+ sFilter.Ltrunc( ulPos + 6 );
+ sFilter.Trim();
+ }
+ }
+ // std::cout << "sCmd - FILTER = [" << sFilter << "]\n";
+
+ #ifdef XB_LOCKING_SUPPORT
+ if(( iRc = dbf->LockTable( XB_LOCK )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ } else {
+ bTableLocked = xbTrue;
+ }
+ #endif // XB_LOCKING_SUPPORT
+
+ xbIx *pIx;
+ void *vpTag;
+
+ if(( iRc = dbf->CreateTag( sIxType, sIxName, sKeyExpression, sFilter, bDesc, bUnique, xbFalse, &pIx, &vpTag )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+
+ #ifdef XB_NDX_SUPPORT
+ if( sIxType == "NDX"){
+ sCmd.Ltrunc( ulPos );
+ sCmd.Trim();
+ if( sCmd.Len() > 0 ){
+ sCmd.ToUpperCase();
+ if( sCmd.Pos( "ASSOCIATE" )){
+ if(( iRc = dbf->AssociateIndex( "NDX", sIxName, 0 )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+ }
+ }
+ }
+ #endif // XB_NDX_SUPPORT
+
+ if(( iRc = pIx->Reindex( &vpTag )) != XB_NO_ERROR ){
+
+// if(( iRc = dbf->Reindex( 2, &vpTag )) != XB_NO_ERROR ){
+ iErrorStop = 170;
+ throw iRc;
+ }
+
+
+ //std::cout << "Tag count = " << pIx->GetTagCount() << "\n";
+ // s = pIx->GetTagName( &vpTag );
+ // std::cout << "tagname = [" << s.Str() << "]\n";
+
+
+ #ifdef XB_LOCKING_SUPPORT
+ if( bTableLocked ){
+ if(( iRc = dbf->LockTable( XB_UNLOCK )) != XB_NO_ERROR ){
+ iErrorStop = 180;
+ throw iRc;
+ } else {
+ bTableLocked = xbFalse;
+ }
+ }
+ #endif // XB_LOCKING_SUPPORT
+
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbSql::SqlCreateIndex() Exception Caught. Error Stop = [%d] rc = [%d] table = [%s]", iErrorStop, iRc, sTableName.Str() );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ #ifdef XB_LOCKING_SUPPORT
+ if( bTableLocked && dbf )
+ dbf->LockTable( XB_UNLOCK );
+ #endif // XB_LOCKING_SUPPORT
+
+ return iRc;
+}
+#endif // XB_INDEX_SUPPORT
+/***********************************************************************/
+} /* namespace */
+#endif /* XB_SQL_SUPPORT */
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/include/xbdate.h b/1Tdata/xbase/xbase64-4.1.4/src/include/xbdate.h
new file mode 100755
index 0000000..e914d65
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xbdate.h
@@ -0,0 +1,125 @@
+/* xbdate.h
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+
+#ifndef __XB_XBDATE_H__
+#define __XB_XBDATE_H__
+
+#ifdef CMAKE_COMPILER_IS_GNUCC
+#pragma interface
+#endif
+
+
+namespace xb{
+
+#define XB_FMT_WEEK 1
+#define XB_FMT_MONTH 2
+#define XB_FMT_YEAR 3
+
+// next value is added to the date calculation to match dbase calculation
+// first valid dbase date is 01/01/0001
+#define JUL_OFFSET 1721425L
+
+
+//! @brief xbDate class.
+/*!
+This xbDate class handles two type of date values:<br>
+
+1) Gregorian dates with a format of CCYYMMDD. This is how dates are stored in dbf files.<br>
+2) Julian dates calculated as the number of days since 1901-01-01 + 1721425.<br>
+
+Leap Years: The routines in the class support both leap years (one every four
+years) and leap centuries (one every four hundred years.)
+
+A leap year is a year having 366 days, which can be evenly
+divisible by 4 and not by 100.<br>
+Leap centuries are years which are evenly divisible by 400.<br>
+
+From a programming perspective, Julian dates are useful for date
+arithmetic, determining the difference between two dates or calculating
+a future or past date.<br>
+
+To determine the difference between two dates, convert both dates to a
+Julian date and subtract one from the other.<br>
+
+To calculate a future or past date, convert the base date to a Julian date,
+add (or subtract) the number of days necessary to (from) it and convert the
+julian date back to a Gregorian date.
+*/
+
+class XBDLLEXPORT xbDate : public xbSsv {
+ public:
+
+ xbDate();
+ xbDate( const char * Date8 );
+ xbDate( const xbString &Date8 );
+ xbDate( xbInt32 lJulDate );
+ xbDate( xbUInt16 iInit ); // Constructor used to set the static variables, also defaults to sysdate
+ ~xbDate();
+
+ void operator=( const xbDate &d );
+ void operator+=( xbInt32 i );
+ void operator-=( xbInt32 i );
+ void operator++( xbInt32 i );
+ void operator--( xbInt32 i );
+
+ xbInt32 operator-( const xbDate & ) const;
+ const char * operator-( xbInt32 i );
+ const char * operator+( xbInt32 i );
+
+ xbBool operator==( const xbDate & ) const;
+ xbBool operator!=( const xbDate & ) const;
+ xbBool operator< ( const xbDate & ) const;
+ xbBool operator> ( const xbDate & ) const;
+ xbBool operator<=( const xbDate & ) const;
+ xbBool operator>=( const xbDate & ) const;
+
+ xbInt16 CalcRollingCenturyForYear( xbInt16 year ) const;
+ xbInt16 CenturyOf() const;
+ xbInt16 CharDayOf( xbString &sOutCharDay );
+ xbInt16 CharMonthOf( xbString &sOutCharMonth );
+ xbBool DateIsValid ( const xbString &sDate8 ) const;
+ xbInt16 DayOf( xbInt16 iFormat ) const;
+ xbInt16 CTOD( const xbString &sCtodInDate );
+ xbInt16 FormatDate( const xbString &sFmtIn, xbString &sFmtOut );
+ const char *Str() const;
+ xbBool IsLeapYear( xbInt16 iYear ) const;
+ xbBool IsLeapYear() const;
+ xbBool IsNull() const;
+ xbInt32 JulianDays() const;
+ xbInt16 JulToDate8( xbInt32 lJulDate );
+ xbInt16 LastDayOfMonth();
+ xbInt16 MonthOf() const;
+ xbInt16 Set( const xbString &Date8 );
+ xbInt16 Sysdate();
+ xbInt16 YearOf() const;
+
+#ifdef XB_DEBUG_SUPPORT
+ void Dump( const char * title );
+ void DumpDateTables();
+#endif
+
+ private:
+ void SetDateTables();
+ xbString sDate8; // CCYYMMDD date format ie; 20140718
+ // Null date is identified by sDate.Len() < 8
+
+ static int iAggregatedDaysInMonths[2][13];
+ static int iDaysInMonths[2][13];
+};
+
+} /* namespace */
+#endif /*__XB_XBDATE_H__ */
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/include/xbdbf.h b/1Tdata/xbase/xbase64-4.1.4/src/include/xbdbf.h
new file mode 100755
index 0000000..fe24e72
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xbdbf.h
@@ -0,0 +1,568 @@
+/* xbdbf.h
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+
+#ifndef __XB_XBDBF_H__
+#define __XB_XBDBF_H__
+
+//#ifdef CMAKE_COMPILER_IS_GNUCC
+//#pragma interface
+//#endif
+
+namespace xb{
+
+/*****************************/
+/* Field Types */
+
+#define XB_CHAR_FLD 'C'
+#define XB_LOGICAL_FLD 'L'
+#define XB_NUMERIC_FLD 'N'
+#define XB_DATE_FLD 'D'
+#define XB_MEMO_FLD 'M'
+#define XB_FLOAT_FLD 'F'
+
+/*****************************/
+/* File Status Codes */
+
+#define XB_CLOSED 0
+#define XB_OPEN 1
+#define XB_UPDATED 2
+
+
+/*****************************/
+/* File Access Modes */
+// #define XB_SINGLE_USER 0 // file buffering on
+// #define XB_MULTI_USER 1 // file buffering off
+
+/*****************************/
+/* File Lock Functions */
+#define XB_LOCK 0
+#define XB_UNLOCK 1
+
+#define LK_DBASE 1
+#define LK_CLIPPER 2 // future
+#define LK_FOX 3 // future
+#define LK_XBASE64 9 // future
+
+/*****************************/
+/* Record retrieve options */
+#define XB_ALL_RECS 0
+#define XB_ACTIVE_RECS 1
+#define XB_DELETED_RECS 2
+
+
+/*****************************/
+/* Other defines */
+
+#define XB_OVERLAY 1
+#define XB_DONTOVERLAY 0
+#define XB_CHAREOF '\x1A' /* end of DBF */
+#define XB_CHARHDR '\x0D' /* header terminator */
+
+
+//! @brief Schema used for defining tables with CreateTable methods.
+/*!
+ See program xb_ex_v3_create_dbf.cpp or xb_ex_v4_create_dbf.cpp
+ as examples on how to use.
+
+\code
+xbSchema MyRecord[] = {
+// FieldName, Type, Len, Dec
+ { "FIRSTNAME", XB_CHAR_FLD, 15, 0 },
+ { "LASTNAME", XB_CHAR_FLD, 20, 0 },
+ { "BIRTHDATE", XB_DATE_FLD, 8, 0 },
+ { "AMOUNT", XB_NUMERIC_FLD, 9, 2 },
+ { "RETIRED?", XB_LOGICAL_FLD, 1, 0 },
+ { "ZIPCODE", XB_NUMERIC_FLD, 5, 0 },
+ { "NUMFLD1", XB_FLOAT_FLD, 12, 2 },
+ { "NUMFLD2", XB_FLOAT_FLD, 14, 2 },
+ { "MEMO1", XB_MEMO_FLD, 10, 0 },
+ { "",0,0,0 }};
+\endcode
+*/
+struct XBDLLEXPORT xbSchema {
+ char cFieldName[11];
+ char cType;
+ xbInt16 iFieldLen; /* fields are stored as one byte on record*/
+ xbInt16 iNoOfDecs;
+};
+
+///@cond DOXYOFF
+struct XBDLLEXPORT xbSchemaRec {
+ char cFieldName[11]; /* ASCIIZ field name */
+ char cType; /* field type */
+ char *pAddress; /* pointer to field in record buffer 1 */
+ unsigned char cFieldLen; /* fields are stored as one byte on record */
+ unsigned char cNoOfDecs;
+ char *pAddress2; /* pointer to field in record buffer 2 */
+ xbInt16 iLongFieldLen; /* to handle long field lengths */
+ unsigned char cIxFlag; /* DBase IV Index field flag */
+};
+///@endcond DOXYOFF
+
+
+
+///@cond DOXYOFF
+#ifdef XB_INDEX_SUPPORT
+class XBDLLEXPORT xbIx;
+// structure for file list, each open DBF file can have one or more index files
+struct XBDLLEXPORT xbIxList {
+ xbIxList *next;
+ xbIx *ix;
+ xbString *sFmt;
+};
+#endif // XB_INDEX_SUPPORT
+///@endcond DOXYOFF
+
+
+//! @brief Base class for handling dbf files/tables.
+/*!
+The xbDbf class is used as a base class for accessing dbf files.
+In line with relational theory, a each dbf file can be considered as a table.
+The documentation uses the terms dbf and table interchangeably.<br>
+
+This module handles methods for accessing and updating dbf files.
+
+<br>
+The class is designed to support additional file layouts with a minimal amount of effort.
+If you are wanting to update the library to support a new dbf file type not currently supported
+by the library, create a derived class using xbDbf as a base class and modify methods needed
+to support the new dbf file version.<br>
+See the following for examples on how to start on this:<br>
+xbDbf3 is a derived class from xbDbf and supports the original Dbase III+ file version.<br>
+xbDbf4 is a derived class from xbDbf and supports the original Dbase IV file version.<br>
+
+*/
+
+
+class XBDLLEXPORT xbDbf : public xbFile {
+
+ public:
+ xbDbf( xbXBase *x );
+ virtual ~xbDbf();
+
+ virtual xbInt16 Abort();
+ virtual xbInt16 AppendRecord();
+ virtual xbInt16 BlankRecord();
+ virtual xbInt16 Commit();
+ virtual xbInt16 Close();
+ virtual xbInt16 CopyDbfStructure( xbDbf *dNewTable, const xbString &sTableName, const xbString &sTableAlias, xbInt16 iOverlay, xbInt16 iShareMode );
+ virtual xbInt16 CreateTable ( const xbString &sTableName, const xbString &sAlias, xbSchema *pSchema, xbInt16 iOverlay, xbInt16 iShareMode ) = 0;
+ virtual xbInt16 DeleteTable ();
+ virtual xbInt16 DeleteAll ( xbInt16 iOption );
+ virtual xbInt16 DeleteAllRecords ();
+ virtual xbInt16 DeleteRecord ();
+ virtual xbInt16 DumpHeader ( xbInt16 iOption );
+ virtual xbInt16 DumpRecord ( xbUInt32 ulRecNo, xbInt16 iOutputDest = 0, xbInt16 iOutputFmt = 0 );
+ virtual xbInt16 GetAutoCommit () const;
+ virtual xbInt16 GetAutoCommit ( xbInt16 iOption ) const;
+ virtual xbBool GetBof ();
+ virtual xbUInt32 GetCurRecNo () const;
+ virtual xbInt16 GetDbfStatus () const;
+ virtual xbBool GetEof ();
+ virtual xbInt32 GetFieldCnt () const;
+ virtual xbInt16 GetFirstRecord ();
+ virtual xbInt16 GetFirstRecord ( xbInt16 iOption );
+ virtual xbUInt16 GetHeaderLen () const;
+ virtual xbInt16 GetLastRecord ();
+ virtual xbInt16 GetLastRecord ( xbInt16 iOption );
+
+ virtual xbInt16 GetNextRecord ();
+ virtual xbInt16 GetNextRecord ( xbInt16 iOption );
+ virtual xbInt16 GetNextRecord ( xbInt16 iOption, xbUInt32 ulStartRec );
+ virtual xbInt16 GetPrevRecord ();
+ virtual xbInt16 GetPrevRecord ( xbInt16 iOption );
+ virtual xbInt16 GetRecord ( xbUInt32 ulRecNo );
+
+ // virtual xbUInt32 GetRecordCount ();
+ virtual xbInt16 GetRecordCnt ( xbUInt32 & ulRecCnt );
+
+ virtual char * GetRecordBuf ( xbInt16 iOpt = 0 ) const;
+ virtual xbUInt16 GetRecordLen () const;
+ virtual const xbString &GetTblAlias() const;
+ virtual xbInt16 GetVersion () const = 0;
+ virtual xbXBase *GetXbasePtr () const; // return xbase pointer
+
+
+ virtual xbBool MemoFieldsExist () const;
+
+ virtual xbInt16 Open ( const xbString &sTableName );
+ virtual xbInt16 Open ( const xbString &sTableName, const xbString &sAlias );
+ virtual xbInt16 Open ( const xbString &sTableName, const xbString &sAlias, xbInt16 iOpenMode, xbInt16 iShareMode ) = 0;
+ virtual xbInt16 Pack ();
+ virtual xbInt16 Pack ( xbUInt32 &ulDeletedRecCnt );
+
+
+ virtual xbInt16 PutRecord (); // Put record to current location
+ virtual xbInt16 PutRecord ( xbUInt32 ulRecNo );
+// virtual xbInt16 ReadHeader ( xbInt16 iFilePositionOption, xbInt16 iReadOption );
+ virtual xbInt16 RecordDeleted ( xbInt16 iOpt = 0 ) const;
+ virtual xbInt16 Rename ( const xbString sNewName ) = 0;
+
+ virtual xbInt16 SetAutoCommit ( xbInt16 iAutoCommit );
+
+ virtual xbInt16 UndeleteAllRecords();
+ virtual xbInt16 UndeleteRecord ();
+ virtual xbInt16 Zap ();
+
+
+ /* field methods */
+ //virtual xbInt16 GetRawField( xbInt16 iFieldNo, char *Buf, xbUInt32 BufSize, xbInt16 iRecBufSw ) const;
+ virtual xbInt16 GetField(xbInt16 iFieldNo, xbString &sFieldValue, xbInt16 iRecBufSw ) const;
+ virtual xbInt16 GetField(xbInt16 iFieldNo, xbString &sFieldValue) const;
+ virtual xbInt16 GetField(const xbString &sFieldName, xbString &sFieldValue) const;
+ virtual xbInt16 GetFieldDecimal( xbInt16 iFieldNo, xbInt16 &iFieldDecimal ) const;
+ virtual xbInt16 GetFieldDecimal( const xbString &sFieldName, xbInt16 &iFieldDecimal ) const;
+ virtual xbInt16 GetFieldLen( xbInt16 iFieldNo, xbInt16 &iFieldLen ) const;
+ virtual xbInt16 GetFieldLen( const xbString &sFieldName, xbInt16 &iFieldLen ) const;
+ virtual xbInt16 GetFieldName( xbInt16 iFieldNo, xbString &sFieldName ) const;
+
+ virtual xbInt16 GetFieldNo( const xbString &sFieldName, xbInt16 &iFieldNo ) const;
+ virtual xbInt16 GetFieldNo( const xbString &sFieldName ) const;
+
+ virtual xbInt16 GetFieldType( xbInt16 iFieldNo, char &cFieldType ) const;
+ virtual xbInt16 GetFieldType( const xbString &sFieldName, char &cFieldType ) const;
+ virtual xbInt16 PutField( const xbString &sFieldName, const xbString &sFieldData );
+ virtual xbInt16 PutField( xbInt16 iFieldNo, const xbString &sFieldData );
+
+ virtual xbInt16 PutLogicalField( xbInt16 iFieldNo, const xbString &sFieldData );
+ virtual xbInt16 PutLogicalField( const xbString &sFieldName, const xbString &sFieldData );
+ virtual xbInt16 GetLogicalField( xbInt16 iFieldNo, xbString &sFieldData ) const;
+ virtual xbInt16 GetLogicalField( const xbString &sFieldName, xbString &sFieldData) const;
+
+ virtual xbInt16 PutLogicalField( xbInt16 iFieldNo, xbBool bFieldData );
+ virtual xbInt16 PutLogicalField( const xbString &sFieldName, xbBool bFieldData );
+ virtual xbInt16 GetLogicalField( xbInt16 iFieldNo, xbBool &bFieldData ) const;
+ virtual xbInt16 GetLogicalField( xbInt16 iFieldNo, xbBool &bFieldData, xbInt16 iRecBufSw ) const;
+ virtual xbInt16 GetLogicalField( const xbString &sFieldName, xbBool &bFieldData) const;
+
+ virtual xbInt16 GetLongField( xbInt16 iFieldNo, xbInt32 &lFieldValue ) const;
+ virtual xbInt16 GetLongField( const xbString &sFieldName, xbInt32 &lFieldValue ) const;
+ virtual xbInt16 PutLongField( xbInt16 iFieldNo, xbInt32 lFieldValue );
+ virtual xbInt16 PutLongField( const xbString &sFieldName, xbInt32 lFieldValue );
+
+ virtual xbInt16 GetULongField( xbInt16 iFieldNo, xbUInt32 &lFieldValue ) const;
+ virtual xbInt16 GetULongField( const xbString &sFieldName, xbUInt32 &lFieldValue ) const;
+ virtual xbInt16 PutULongField( xbInt16 iFieldNo, xbUInt32 lFieldValue );
+ virtual xbInt16 PutULongField( const xbString &sFieldNo, xbUInt32 lFieldValue );
+
+ virtual xbInt16 GetDoubleField( xbInt16 FieldNo, xbDouble &dFieldValue ) const;
+ virtual xbInt16 GetDoubleField( xbInt16 FieldNo, xbDouble &dFieldValue, xbInt16 iRecBufSw ) const;
+ virtual xbInt16 GetDoubleField( const xbString &sFieldName, xbDouble &dFieldValue ) const;
+ virtual xbInt16 PutDoubleField( xbInt16 FieldNo, xbDouble dFieldValue );
+ virtual xbInt16 PutDoubleField( const xbString &FieldName, xbDouble dFieldValue );
+
+ virtual xbInt16 GetFloatField( xbInt16 iFieldNo, xbFloat &fFieldValue ) const;
+ virtual xbInt16 GetFloatField( const xbString &sFieldName, xbFloat &fFieldValue ) const;
+ virtual xbInt16 PutFloatField( xbInt16 iFieldNo, xbFloat fFieldValue );
+ virtual xbInt16 PutFloatField( const xbString &sFieldName, xbFloat fFieldValue );
+
+ virtual xbInt16 GetDateField( xbInt16 iFieldNo, xbDate &dt ) const;
+ virtual xbInt16 GetDateField( const xbString &sFieldName, xbDate &dt ) const;
+ virtual xbInt16 PutDateField( xbInt16 iFieldNo, const xbDate &dt );
+ virtual xbInt16 PutDateField( const xbString &sFieldName, const xbDate &dt );
+
+ virtual xbInt16 GetNullSts( xbInt16 iFieldNo, xbBool &bIsNull ) const;
+ virtual xbInt16 GetNullSts( const xbString &sFieldName, xbBool &bIsNull ) const;
+ virtual xbInt16 GetNullSts( xbInt16 iFieldNo, xbBool &bIsNull, xbInt16 iRecBufSw ) const;
+
+
+
+ #ifdef XB_MEMO_SUPPORT
+ virtual xbInt16 GetMemoFieldCnt () const;
+ virtual xbMemo *GetMemoPtr ();
+ virtual xbUInt32 GetCreateMemoBlockSize() const;
+ virtual xbInt16 GetMemoField ( xbInt16 iFldNo, xbString &sMemoData );
+ virtual xbInt16 GetMemoField ( const xbString & sFldName, xbString &sMemoData );
+ virtual xbInt16 GetMemoFieldLen ( xbInt16 iFldNo, xbUInt32 &ulMemoFieldLen );
+ virtual xbInt16 GetMemoFieldLen ( const xbString & sFldName, xbUInt32 &ulMemoFieldLen );
+ virtual xbBool MemoFieldExists ( xbInt16 iFieldNo ) const;
+ virtual xbBool MemoFieldExists ( const xbString &sFieldName ) const;
+ virtual xbInt16 SetCreateMemoBlockSize( xbUInt32 ulBlockSize ) = 0;
+ virtual xbInt16 UpdateMemoField ( xbInt16 iFldNo, const xbString &sMemoData );
+ virtual xbInt16 UpdateMemoField ( const xbString & sFldName, const xbString &sMemoData );
+ #endif // XB_MEMO_SUPPORT
+
+
+ #ifdef XB_LOCKING_SUPPORT
+ virtual xbInt16 LockTable ( xbInt16 iLockFunction );
+ virtual xbInt16 LockRecord ( xbInt16 iLockFunction, xbUInt32 ulRecNo );
+ virtual xbInt16 LockAppend ( xbInt16 iLockFunction );
+ virtual xbInt16 LockHeader ( xbInt16 iLockFunction );
+
+ #ifdef XB_MEMO_SUPPORT
+ virtual xbInt16 LockMemo ( xbInt16 iLockFunction );
+ virtual xbBool GetMemoLocked () const;
+ #endif // XB_MEMO_LOCK
+
+ #ifdef XB_INDEX_SUPPORT
+ virtual xbInt16 LockIndices ( xbInt16 iLockFunction );
+ #endif // XB_INDEX_SUPPORT
+
+ xbInt16 GetAutoLock () const;
+ void SetAutoLock ( xbInt16 iAutoLock );
+ xbInt16 GetLockFlavor () const;
+ void SetLockFlavor ( xbInt16 iLockFlavor );
+ xbBool GetTableLocked () const;
+ xbBool GetHeaderLocked () const;
+ xbUInt32 GetAppendLocked () const;
+ xbLinkListNode<xbUInt32> * GetFirstRecLock () const;
+
+ #ifdef XB_DEBUG_SUPPORT
+ void DumpTableLockStatus() const;
+ #endif // XB_DEBUG_SUPPORT
+ #endif // XB_LOCKING_SUPPORT
+
+
+ #ifdef XB_INDEX_SUPPORT
+ virtual xbInt16 CheckTagIntegrity( xbInt16 iTagOpt, xbInt16 iOutputOpt );
+ virtual xbInt16 CloseIndexFile( xbIx *pIx );
+ virtual xbInt16 CreateTag( const xbString &sIxType, const xbString &sName, const xbString &sKey, const xbString &sFilter,
+ xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverLay, xbIx **xbIxOut, void **vpTagOut );
+ virtual xbInt16 DeleteTag( const xbString &sIxType, const xbString &sName );
+ virtual xbInt16 DeleteAllIndexFiles();
+ virtual xbInt16 Find( xbString &sKey );
+ virtual xbInt16 Find( xbDate &dtKey );
+ virtual xbInt16 Find( xbDouble &dKey );
+ virtual xbIx *GetCurIx() const;
+ virtual void *GetCurTag() const;
+
+ virtual xbInt16 GetFirstKey();
+ virtual xbInt16 GetNextKey();
+ virtual xbInt16 GetPrevKey();
+ virtual xbInt16 GetLastKey();
+
+ virtual const xbString &GetCurIxType() const;
+ virtual const xbString &GetCurTagName() const;
+ virtual xbIxList *GetIxList() const;
+ virtual xbInt32 GetPhysicalIxCnt () const;
+ xbLinkListNode<xbTag *> *GetTagList () const;
+
+ virtual xbInt16 OpenIndex( const xbString &sIxType, const xbString &sIndexName );
+ virtual xbInt16 Reindex( xbInt16 iTagOpt = 0, xbInt16 iErrorOpt = 1, xbIx **pIx = NULL, void **vpTag = NULL );
+ virtual xbInt16 SetCurTag( const xbString &sTagName );
+ virtual void SetCurTag( const xbString &sIxType, xbIx *pIx, void *vpTag );
+
+ #endif // XB_INDEX_SUPPORT
+
+ #ifdef XB_INF_SUPPORT
+ virtual xbInt16 AssociateIndex( const xbString &sType, const xbString &sName, xbInt16 iOption );
+ xbLinkListNode<xbString> *GetInfList() const;
+ #endif // XB_INF_SUPPORT
+
+ //#ifdef XB_MDX_SUPPORT
+ //virtual xbInt16 GetCreateMdxBlockSize() const;
+ //virtual xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );
+ //#endif
+
+ #ifdef XB_BLOCKREAD_SUPPORT
+ xbInt16 DisableBlockReadProcessing();
+ xbInt16 EnableBlockReadProcessing();
+ xbBool GetBlockReadStatus() const;
+ #endif // XB_BLOCKREAD_SUPPORT
+
+ protected:
+ #ifdef XB_INDEX_SUPPORT
+ friend class xbIx;
+ friend class xbIxMdx;
+ friend class xbIxTdx;
+
+ xbInt16 AddIndex( xbIx *ix, const xbString &sFmt );
+ void ClearTagList();
+ xbInt16 RemoveIndex( xbIx * ix );
+ void UpdateSchemaIxFlag( xbInt16 iFldNo, unsigned char cVal );
+
+
+ virtual xbInt16 UpdateTagList ();
+ #endif // XB_INDEX_SUPPORT
+
+ virtual xbInt16 ReadHeader ( xbInt16 iFilePositionOption, xbInt16 iReadOption );
+
+
+ #ifdef XB_INF_SUPPORT
+ virtual xbInt16 GetInfFileName( xbString &sNdxIdxFileName );
+ #endif // XB_INF_SUPPORT
+
+ #ifdef XB_BLOCKREAD_SUPPORT
+ friend class xbBlockRead;
+ #endif // XB_BLOCKREAD_SUPPORT
+
+
+ #ifdef XB_LOCKING_SUPPORT
+ void SetHeaderLocked ( xbBool bTableLocked );
+ void SetTableLocked ( xbBool bTableLocked );
+ #endif // XB_LOCKING_SUPORT
+
+ #ifdef XB_MEMO_SUPPORT
+ xbInt16 iMemoFieldCnt; // Memo field cnt in the table
+ xbMemo *Memo; // Pointer to memo class
+ xbUInt32 ulCreateMemoBlockSize; // blocksize to use when creating dbt file
+ #endif
+
+ #ifdef XB_INF_SUPPORT
+ virtual xbInt16 DeleteInfData();
+ virtual xbInt16 LoadInfData();
+ virtual xbInt16 SaveInfData();
+ #endif // XB_INF_SUPPORT
+
+/*
+ #ifdef XB_MDX_SUPPORT
+ xbInt16 iCreateMdxBlockSize;
+ #endif // XB_MDX_SUPPORT
+*/
+
+ virtual xbInt16 GetRawField( xbInt16 iFieldNo, char *Buf, xbUInt32 BufSize, xbInt16 iRecBufSw ) const;
+ virtual void InitVars();
+ virtual xbInt16 SetVersion() = 0;
+ virtual xbInt16 ValidateSchema( xbSchema * s ) = 0;
+ xbInt16 WriteHeader( xbInt16 iPositionOption, xbInt16 iWriteOption );
+
+
+ xbUInt32 ulCurRec; // Current record or zero
+ xbInt16 iAutoCommit; // Auto commit updates if not explicitly performed before moving off record?
+ // -1 --> Use DBMS default
+ // 0 --> No auto update on this table, regardless of DBMS setting
+ // 1 --> Auto update on this table, regardless of DBMS setting
+
+ xbInt16 iFileVersion; // xBase file version - which class is in play
+
+
+ xbString sAlias; // table alias
+ xbInt16 iNoOfFields;
+ xbInt16 iDbfStatus; // 0 = closed
+ // 1 = open
+ // 2 = updates pending
+
+ xbSchemaRec *SchemaPtr; // Pointer to field data
+ char *RecBuf; // Pointer to record buffer
+ char *RecBuf2; // Pointer to original rec buf allocation
+
+
+/* Next several variables are database header fields, up through dbase V */
+ unsigned char cVersion;
+ char cUpdateYY;
+ char cUpdateMM;
+ char cUpdateDD;
+ xbUInt32 ulNoOfRecs;
+ xbUInt16 uiHeaderLen;
+ xbUInt16 uiRecordLen;
+ char cTransactionFlag;
+ char cEncryptionFlag;
+ char cIndexFlag;
+ char cLangDriver; // dbase 7 sets to 1B
+
+
+
+ private:
+ void ResetNoOfRecords();
+
+
+ #ifdef XB_LOCKING_SUPPORT
+ xbInt16 iAutoLock; // 0 - autolock off, 1 - autolock on
+ xbInt16 iLockFlavor;
+ xbBool bTableLocked; // is the table locked
+ xbBool bHeaderLocked; // is the header locked
+ xbUInt32 ulAppendLocked; // record number of the new record for the append lock operation
+ xbLinkListOrd<xbUInt32> lloRecLocks; // ordered link list of locked records
+ #endif
+
+ #ifdef XB_INDEX_SUPPORT
+ xbIxList *ixList; // pointer to a list of indices associated with the table
+ xbIx *pCurIx; // Pointer to current index class
+ void *vpCurIxTag; // Pointer to current tag
+ xbString sCurIxType; // Current index type
+ xbLinkList<xbTag *> llTags; // linked list of open tags
+ #endif // XB_INDEX_SUPPORT
+
+ #ifdef XB_INF_SUPPORT
+ xbLinkList<xbString> llInfData; // linked list of strings containing ndx file entries
+ #endif // XB_INF_SUPPORT
+
+ #ifdef XB_BLOCKREAD_SUPPORT
+ xbBlockRead *pRb;
+ xbBool bBlockReadEnabled; // if true, then block read mode is on
+ #endif
+
+
+
+};
+
+
+#ifdef XB_DBF3_SUPPORT
+//! @brief Derived class for handling dbf version III files/tables.
+/*!
+The xbDbf class is used as a base class for accessing dbf files.
+The xbDbf3 class is derived from the xbDbf class and is designed to handle the
+orginal version 3 type files.
+*/
+
+class XBDLLEXPORT xbDbf3 : public xbDbf {
+ public:
+ xbDbf3(xbXBase *x);
+ ~xbDbf3();
+ virtual xbInt16 CreateTable ( const xbString &sTableName, const xbString &sAlias, xbSchema *, xbInt16 iOverlay, xbInt16 iShareMode );
+ virtual xbInt16 GetVersion () const;
+ virtual xbInt16 Open ( const xbString &sTableName, const xbString &sAlias, xbInt16 iOpenMode, xbInt16 iShareMode );
+ virtual xbInt16 Rename ( const xbString sNewName );
+
+ #ifdef XB_MEMO_SUPPORT
+ virtual xbInt16 SetCreateMemoBlockSize( xbUInt32 iBlockSize );
+ #endif
+
+ protected:
+ xbInt16 SetVersion ();
+ virtual xbInt16 ValidateSchema( xbSchema *s );
+
+ private:
+
+};
+#endif /* XB_DBF3_SUPPORT */
+
+
+#ifdef XB_DBF4_SUPPORT
+//! @brief Derived class for handling dbf version IV files/tables.
+/*!
+The xbDbf class is used as a base class for accessing dbf files.
+The xbDbf4 class is derived from the xbDbf class and is designed to handle the
+orginal version 4 type files.
+*/
+class XBDLLEXPORT xbDbf4 : public xbDbf {
+ public:
+ xbDbf4( xbXBase *x );
+
+ ~xbDbf4();
+
+ virtual xbInt16 CreateTable ( const xbString &sTableName, const xbString &sAlias, xbSchema *, xbInt16 iOverlay, xbInt16 iShareMode );
+ virtual xbInt16 GetVersion () const;
+ virtual xbInt16 Open ( const xbString &sTableName, const xbString &sAlias, xbInt16 iOpenMode, xbInt16 iShareMode );
+ virtual xbInt16 Rename ( const xbString sNewName );
+
+ #ifdef XB_MEMO_SUPPORT
+ virtual xbInt16 SetCreateMemoBlockSize( xbUInt32 iBlockSize );
+ #endif
+
+ protected:
+ // void InitVars ();
+ xbInt16 SetVersion();
+ virtual xbInt16 ValidateSchema ( xbSchema *s );
+
+ private:
+
+};
+
+#endif /* XB_DBF4_SUPPORT */
+
+} /* namespace xb */
+#endif /* __XB_DBF_H__ */
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/include/xbexp.h b/1Tdata/xbase/xbase64-4.1.4/src/include/xbexp.h
new file mode 100755
index 0000000..4792b0e
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xbexp.h
@@ -0,0 +1,216 @@
+/* xbexp.h
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+
+#ifndef __XB_EXP_H__
+#define __XB_EXP_H__
+
+
+// #ifdef CMAKE_COMPILER_IS_GNUCC
+// #pragma interface
+// #endif
+
+#define XB_NULL_DATE 21474835648
+
+
+#ifdef XB_FUNCTION_SUPPORT
+#define XB_EXP_CHAR 'C'
+#define XB_EXP_DATE 'D'
+#define XB_EXP_LOGICAL 'L'
+#define XB_EXP_NUMERIC 'N'
+#define XB_EXP_UNKNOWN 'U'
+#endif
+
+#ifdef XB_EXPRESSION_SUPPORT
+
+#define XB_EXP_CONSTANT 'C'
+#define XB_EXP_FUNCTION 'F'
+#define XB_EXP_FIELD 'D'
+#define XB_EXP_OPERATOR 'O'
+#define XB_EXP_NOTROOT 'N' // not root node, needs further parsing
+#define XB_EXP_PRE_OPERATOR 'B' // (B)efore) pre increment, pre decrement
+#define XB_EXP_POST_OPERATOR 'A' // (A)fter) post increment, pre decrement
+
+#define XB_END_OF_EXPRESSION -100
+
+// #define XB_UNBALANCED_PARENS -101
+// #define XB_UNBALANCED_QUOTES -102
+
+
+namespace xb{
+
+///@cond DOXYOFF
+struct XBDLLEXPORT xbExpToken {
+ xbString sExpression; // in - expression to pull next token from
+ // out - remainder of the expression after token removed
+ xbString sToken; // next token pulled from the expression
+ char cNodeType; // one of XB_EXP_CONSTANT, XB_EXP_FUNCTION, XB_EXP_FIELD, XB_EXP_OPERATOR, XB_EXP_NOTROOT
+ char cReturnType; // one of XB_EXP_CHAR, XB_EXP_DATE, XB_EXP_LOGICAL, XB_EXP_NUMERIC, XB_EXP_UNKNOWN
+ xbInt16 iSts; // return status after retrieving or attempting next token from expression
+ // 0 = no error
+ // XB_END_OF_EXPRESSION
+ // XB_UNBALANCED_PARENS
+ // XB_UNBALANCED_QUOTES
+ char cPrevNodeType; // previous node type
+ char cPrevReturnType; // previous return type
+
+ // constructor
+ xbExpToken() { cNodeType = 0; cReturnType = 0; iSts = 0; cPrevNodeType = 0; cPrevReturnType = 0; }
+};
+///@endcond DOXYOFF
+
+
+/************************************************************************/
+
+//! @brief Class for handling expressions.
+/*!
+The xbExp class is used for parsing and evaluating expression.
+
+The Xbase64 library includes an expression parsing module which assists
+application programmers by providing a high level data manipulation tool and
+also allows for building complex index keys.
+
+The functions included were derived from dBASE III Plus, Dbase IV and Clipper.<br><br>
+
+<h3>Internal fuctioning</h3>
+The expression module works in two phases. Firstly, method
+<em>ParseExpression</em> is called and builds an expression tree from
+all the components of the expression. The tree is made up of individual
+nodes. The expression is checked for valid field names, literals,
+operands and functions. Any field references are resolved. If fields
+are used in an expression and the database name for the field is not
+included in the name with the -> operand, the routines assume the
+associated database has been successfully opened.
+<br>
+Secondly, method <em>ProcessExpression</em> is called to process the
+expression tree created by ParseExpression(). The routine parses each
+node in the expression tree, executing functions, processing operands
+and manipulating data to produce the desired result.<br>
+
+If an expression will be processed repeatedly, it is best to pre-parse the
+tree using <em>ParseExpression</em>, then for each new call to the expression,
+execute method <em>ProcessExpression</em> which processes the tree.<br><br>
+
+<h3>Expression Return Types</h3>
+Expressions will return a type of CHAR, NUMERIC, DATE or LOGICAL.<br>
+
+An expression return type can be determined with method <em>
+GetExpressionResultType</em> after parsing it.<br>
+
+Expressions returning a return type of CHAR are limited to a 200 byte internal
+buffer. There is also a 100 byte limit for NDX index key support. If
+the 200 byte limit is not large enough for your application, adjust field
+<em>enum { WorkBufMaxLen = 200 };</em> in file <em>exp.h</em>.<br><br>
+
+<h3>Expression Functions</h3>
+Each expression function also has a corresponding C++ function. It is
+slightly more efficient to call the C++ functions directly, rather than
+execute the expression parsing routines.<br><br>
+
+<h3>Expression Components</h3>
+Expressions are made up of one or more tokens. A token is one of literal,
+database field, operand or function. Literals are either numeric or character.
+Character literals are enclosed in 'single' or "double" quotes. numeric
+literals are a series of one or more contiguous numerals, ".", "+" or "-'".
+<br><br>
+A field is simply a field name in the default database, or is in the form
+of database->fieldname.
+
+*/
+
+class XBDLLEXPORT xbExp{
+
+ public:
+ xbExp( xbXBase * );
+ xbExp( xbXBase *, xbDbf * );
+ virtual ~xbExp();
+ void ClearTreeHandle();
+
+
+ #ifdef XB_DEBUG_SUPPORT
+ void DumpTree( xbInt16 iOption );
+ void DumpToken( xbExpToken &t, xbInt16 iOption = 0 );
+ #endif
+
+ xbInt16 GetResultLen() const;
+ char GetReturnType() const;
+ xbInt16 GetBoolResult( xbBool &bResult );
+ xbInt16 GetDateResult( xbDate &dtResult );
+ xbInt16 GetNumericResult( xbDouble &dResult );
+ xbInt16 GetStringResult( xbString &sResult );
+ xbInt16 GetStringResult( char * vpResult, xbUInt32 ulLen );
+ xbExpNode *GetTreeHandle();
+ xbInt16 ParseExpression( const xbString &sExpression );
+ xbInt16 ParseExpression( xbDbf *dbf, const xbString &sExpression );
+ xbInt16 ProcessExpression();
+ xbInt16 ProcessExpression( xbInt16 iRecBufSw );
+
+
+ protected:
+ xbInt16 GetNextToken( xbExpToken &t );
+ xbInt16 OperatorWeight( const xbString &sOperator );
+ xbExpNode *GetNextNode( xbExpNode * n ) const; // traverses the tree from bottom left node, right, then up
+
+ private: // methods
+
+ // xbInt16 CalcExpressionResultLen();
+ xbInt16 CalcFunctionResultLen( xbExpNode *n ) const;
+ xbInt16 CalcCharNodeLen( xbExpNode *n );
+ xbInt16 CheckParensAndQuotes( const xbString &sExpression );
+ xbInt16 GetExpressionResultLen() const;
+
+ xbInt16 GetTokenCharConstant ( xbExpToken &t );
+ xbInt16 GetTokenDatabaseField ( xbExpToken &t );
+ xbInt16 GetTokenDateConstant ( xbExpToken &t );
+ xbInt16 GetTokenFunction ( xbExpToken &t );
+ xbInt16 GetTokenLogicalConstant( xbExpToken &t );
+ xbInt16 GetTokenNumericConstant( xbExpToken &t );
+ xbInt16 GetTokenOperator ( xbExpToken &t );
+ xbInt16 GetTokenParen ( xbExpToken &t );
+
+ xbBool IsFunction ( const xbString &sExp, char &cReturnType );
+ xbBool IsLogicalConstant ( const xbString &sExp );
+ xbBool IsNumericConstant ( const xbString &sExp, char cPrevNodeType );
+ xbBool IsOperator ( const xbString &sExp );
+ char IsTokenSeparator ( char c );
+ xbBool IsWhiteSpace ( char c );
+
+ xbInt16 ParseExpression ( const xbString &sExpression, xbInt16 iWeight );
+ xbInt16 ParseExpressionConstant( xbExpToken &t, xbExpNode *n );
+ xbInt16 ParseExpressionFunction( xbExpToken &t, xbExpNode *n, xbInt16 iWeight );
+ xbInt16 ParseExpressionFunctionParms( const xbString &sParms, xbLinkList<xbString> &llParms );
+ xbInt16 ParseExpressionField ( xbExpToken &t, xbExpNode *n );
+ xbInt16 ParseExpressionOperator( xbExpToken &t, xbExpNode *n, xbInt16 iWeight );
+
+ xbInt16 ProcessExpressionFunction( xbExpNode *n, xbInt16 iRecBufSw = 0 );
+ xbInt16 ProcessExpressionOperator( xbExpNode *n );
+
+ private: // fields
+ xbXBase *xbase;
+ xbDbf *dbf;
+ xbExpNode *nTree; // pointer to tree of expNodes
+ // xbInt16 iExpLen; // size of expression result
+
+
+};
+
+/* Expression handler */
+
+
+};
+#endif // XB_EXPRESSION_SUPPORT
+#endif // __XB_EXP_H__
+
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/include/xbexpnode.h b/1Tdata/xbase/xbase64-4.1.4/src/include/xbexpnode.h
new file mode 100755
index 0000000..51efa9b
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xbexpnode.h
@@ -0,0 +1,120 @@
+/* xbexpnode.h
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+
+#ifndef __XB_EXPNODE_H__
+#define __XB_EXPNODE_H__
+
+// #ifdef CMAKE_COMPILER_IS_GNUCC
+// #pragma interface
+// #endif
+
+#ifdef XB_EXPRESSION_SUPPORT
+
+
+namespace xb{
+
+//class XBDLLEXPORT xbDbf;
+
+/************************************************************************/
+//! @brief Expression node class for handling expression nodes.
+/*!
+The xbExpNode class is used by the expression logic for handling specific
+nodes within a tree of nodes.<br>
+
+Expressions are parsed into nodes and a logical tree of nodes is created
+out of all the individual components within the expression.<br>
+
+This class is used for handling a specific node within a tree.<br>
+
+An application program will typically not need to be concerned with
+this class.<br>
+
+*/
+class XBDLLEXPORT xbExpNode {
+ public:
+ xbExpNode();
+ xbExpNode( xbString &sNodeText, char cReturnType, char cNodeType );
+ xbExpNode( xbString &sNodeText, char cNodeType );
+ xbExpNode( char cNodeType );
+
+ virtual ~xbExpNode();
+ xbInt16 AddChild( xbExpNode *n );
+ xbExpNode *GetChild( xbUInt32 ulChildNo ) const;
+ xbUInt32 GetChildCnt() const;
+ xbUInt32 GetChildNo() const;
+ xbDbf *GetDbf() const;
+ xbInt16 GetFieldNo() const;
+ xbExpNode *GetFirstNode();
+ xbExpNode *GetNextNode() const;
+ void GetNodeText( xbString &sNodeText ) const;
+ char GetNodeType() const;
+ xbExpNode *GetParent() const;
+ xbString &GetStringResult();
+ xbBool GetBoolResult() const;
+ xbDouble GetNumericResult() const;
+ xbUInt32 GetResultLen() const;
+ xbExpNode *GetRightSibling() const;
+ char GetReturnType() const;
+ xbInt16 GetWeight() const;
+ xbBool HasRightSibling() const;
+ xbBool IsOperator() const;
+ xbBool IsUnaryOperator() const;
+ void RemoveLastChild();
+ void SetResultLen( xbUInt32 ulResultLen );
+ void SetDbfInfo( xbDbf *dbf );
+ void SetDbfInfo( xbDbf *dbf, xbInt16 iFieldNo );
+ void SetNodeText( xbString &sNodeText );
+ void SetNodeType( char cNodeType );
+ void SetParent( xbExpNode *n );
+ void SetResult( xbString &sResult );
+ void SetResult( xbDate &dtResult );
+ void SetResult( xbBool bResult );
+ void SetResult( xbDouble dResult );
+ void SetReturnType( char cReturnType );
+ void SetWeight( xbInt16 iWeight );
+
+ #ifdef XB_DEBUG_SUPPORT
+ void DumpNode( xbInt16 iOption ) const; // 0 = no children, 1 = and children
+ #endif
+
+ private:
+ xbString sNodeText; // expression text
+ char cReturnType; // one of: XB_EXP_CHAR, XB_EXP_DATE, XB_EXP_LOGICAL, XB_EXP_NUMERIC
+ char cNodeType; // one of: XB_EXP_CONSTANT, XB_EXP_FUNCTION, XB_EXP_FIELD, XB_EXP_OPERATOR
+ xbString sResult; // char result, and operator
+ xbDouble dResult; // numeric and bool results
+ xbExpNode * nParent; // pointer to parent
+ xbLinkList<xbExpNode *> llChildren; // linked list of descendent nodes
+ xbDbf *dbf; // pointer to dbf, used for field, RECNO() and RECCOUNT()
+ xbInt16 iFieldNo; // field no if DBF field
+ xbUInt32 ulResultLen; // for string results, accumulated length of character operations
+ // includes the sum of all nodes under this + this
+ // date = 8, numeric = 4, logical = 1
+ xbInt16 iWeight; // used for building the tree of nodes, assigned to operators
+ // the higher the number, the lower it goes on the tree
+
+};
+
+/************************************************************************/
+
+/* Expression handler */
+
+
+};
+#endif // XB_EXPRESSION_SUPPORT
+#endif // __XB_EXP_H__
+
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/include/xbfile.h b/1Tdata/xbase/xbase64-4.1.4/src/include/xbfile.h
new file mode 100755
index 0000000..e346a75
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xbfile.h
@@ -0,0 +1,198 @@
+/* xbfile.h
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+#ifndef __XB_FILE_H__
+#define __XB_FILE_H__
+
+#ifdef CMAKE_COMPILER_IS_GNUCC
+#pragma interface
+#endif
+
+/*****************************/
+/* File Open Modes */
+#define XB_READ 0
+#define XB_READ_WRITE 1
+#define XB_WRITE 2
+
+/*****************************/
+/* File Access Modes */
+#define XB_SINGLE_USER 0 // file buffering on
+#define XB_MULTI_USER 1 // file buffering off
+
+namespace xb{
+
+/*! @brief Class for handling low level file I/O.
+*/
+
+/*!
+The xbFile class is used as an abstraction layer to isolate the library from the nuances
+of different operating systems and machine architectures.
+
+This module handles low level file I/O and is a base class
+for the (dbf) table, (dbt) memo and (ndx,mdx) index classes.
+Files are opened and manipulated via methods in the xbFile class.<br>
+This class handles:<br>
+1) Big and little endian reads/writes<br>
+2) 32 or 64 bit system calls, depending on OS<br>
+3) Various different c/c++ calls to open/close/read/write based on OS and compiler version<br>
+<br>
+If you are wanting to port this library to a new platform, start with this class.
+This class could be used if you want to write a platform independent program that needs R/W file access.
+*/
+
+
+class XBDLLEXPORT xbFile : public xbSsv {
+
+ public:
+ xbFile( xbXBase * x );
+ ~xbFile();
+
+ const xbString& GetDirectory() const;
+ const xbString& GetFileName() const;
+ const xbString& GetFqFileName() const;
+
+
+ xbInt16 CreateUniqueFileName( const xbString &sDirIn, const xbString &sExtIn, xbString &sFqnOut, xbInt16 iOption = 0 );
+
+ xbInt16 DetermineXbaseTableVersion( unsigned char cFileTypeByte ) const;
+ xbInt16 DetermineXbaseMemoVersion( unsigned char cFileTypeByte ) const;
+
+ xbDouble eGetDouble ( const char *p ) const;
+ xbInt32 eGetInt32 ( const char *p ) const;
+ xbUInt32 eGetUInt32 ( const char *p ) const;
+ xbInt16 eGetInt16 ( const char *p ) const;
+ xbUInt16 eGetUInt16 ( const char *p ) const;
+ void ePutDouble ( char *p, xbDouble d );
+ void ePutInt32 ( char *p, xbInt32 l );
+ void ePutUInt32 ( char *p, xbUInt32 ul );
+ void ePutInt16 ( char *p, xbInt16 s );
+ void ePutUInt16 ( char *p, xbUInt16 s );
+
+ xbBool FileExists () const;
+ xbBool FileExists ( xbInt16 iOption ) const;
+ xbBool FileExists ( const xbString &sFileName ) const;
+ xbBool FileExists ( const xbString &sFileName, xbInt16 iOption ) const;
+ xbBool FileIsOpen () const;
+
+ xbUInt32 GetBlockSize () const;
+
+ xbInt16 GetFileDirPart ( xbString &sFileDirPartOut ) const;
+ xbInt16 GetFileDirPart ( const xbString &sCompleteFileNameIn, xbString &sFileDirPartOut ) const;
+ xbInt16 GetFileExtPart ( xbString &sFileExtPartOut ) const;
+ xbInt16 GetFileExtPart ( const xbString &sCompleteFileNameIn, xbString &sFileExtPartOut ) const;
+ xbInt16 GetFileMtime ( time_t &mtime );
+ xbInt16 GetFileNamePart( xbString &sFileNamePartOut ) const;
+ xbInt16 GetFileNamePart( const xbString &sCompleteFileNameIn, xbString &sFileNamePartOut ) const;
+ xbInt16 GetFileSize ( xbUInt64 &ullFileSize );
+ xbInt16 GetFileType ( xbString &sFileType ) const;
+
+
+ xbInt16 GetOpenMode () const;
+ xbInt16 GetShareMode () const;
+
+
+ xbInt16 GetXbaseFileTypeByte( const xbString &sFileName, xbInt16 &iVersion );
+ xbInt16 GetXbaseFileTypeByte( const xbString &sFileName, unsigned char &cFileTypeByte );
+ xbInt16 GetXbaseFileTypeByte( const xbString &sFileName, unsigned char &cFileTypeByte, xbInt16 &iVersion );
+
+ xbInt16 NameSuffixMissing( const xbString &sFileName, xbInt16 iOption ) const;
+
+ xbInt16 ReadBlock ( xbUInt32 ulBlockNo, size_t readSize, void *buf );
+ xbInt16 ReadBlock ( xbUInt32 ulBlockNo, xbUInt32 ulBlockSize, size_t readSize, void *buf );
+
+ xbInt16 SetBlockSize ( xbUInt32 ulBlockSize );
+ void SetDirectory ( const xbString &sDirectory);
+ void SetFileName ( const xbString &sFileName );
+ void SetFqFileName ( const xbString &sFqName );
+ xbInt16 SetHomeFolders();
+
+ xbInt16 WriteBlock ( xbUInt32 ulBlockNo, size_t writeSize, void *buf );
+
+ xbInt16 xbFclose ();
+ xbInt16 xbFeof ();
+ xbInt16 xbFflush ();
+ xbInt16 xbFgetc ( xbInt32 &c );
+ xbInt16 xbFgetc ( char &c );
+ xbInt16 xbFgets ( size_t lSize, xbString &sLine );
+
+
+ xbInt16 xbFopen ( xbInt16 iOpenMode );
+ xbInt16 xbFopen ( const xbString &sOpenMode, xbInt16 iShareMode );
+ xbInt16 xbFopen ( xbInt16 iOpenMode, xbInt16 iShareMode );
+ xbInt16 xbFopen ( const xbString &sMode, const xbString &sFileName, xbInt16 iShareMode );
+
+ xbInt16 xbFputc ( xbInt32 c );
+ xbInt16 xbFputc ( xbInt32 c, xbInt32 iNoTimes );
+ xbInt16 xbFputs ( const xbString &s );
+ xbInt16 xbFread ( void *ptr, size_t size, size_t nmemb );
+ xbInt16 xbFseek ( xbInt64 llOffset, xbInt32 whence );
+ size_t xbFtell ();
+ void xbFTurnOffFileBuffering();
+
+ xbInt16 xbReadUntil ( const char cDelim, xbString &sOut );
+ xbInt16 xbRemove ( const xbString &sFileName, xbInt16 iOption );
+ xbInt16 xbRemove ( const xbString &sFileName );
+ xbInt16 xbRemove ();
+
+ xbInt16 xbRename ( const xbString &sOldName, const xbString &sNewName );
+ void xbRewind ();
+
+ xbInt16 xbFwrite ( const void *ptr, size_t lSize, size_t lNmemb );
+
+ xbInt16 xbTruncate ( xbInt64 llSize );
+
+
+ #ifdef XB_LOCKING_SUPPORT
+ xbInt16 xbLock ( xbInt16 iFunction, xbInt64 llOffset, size_t stLen );
+ xbInt16 GetLockRetryCount() const;
+ void SetLockRetryCount( xbInt16 iLockRetries );
+ #endif
+
+ #ifdef XB_DEBUG_SUPPORT
+ xbInt16 DumpBlockToDisk( xbUInt32 ulBlockNo, size_t lBlockSize );
+ xbInt16 DumpMemToDisk ( char *p, size_t lBlockSize );
+ #endif
+
+
+ protected:
+
+ xbXBase *xbase; /* pointer to the main structures */
+
+ private:
+ FILE *fp;
+ xbString sFqFileName; /* fully qualified file name */
+ xbString sFileName; /* file name */
+ xbString sDirectory; /* directory, ends with / or \ */
+ xbBool bFileOpen; /* true if file is open */
+ xbUInt32 ulBlockSize; /* used for memo and index files */
+
+ xbInt16 iOpenMode; /* XB_READ || XB_READ_WRITE || XB_WRITE */
+ xbInt16 iShareMode; /* XB_SINGLE_USER || XB_MULTI_USER - set file buffering */
+ xbInt32 iFileNo; /* Library File No */
+
+ #ifdef XB_LOCKING_SUPPORT
+ xbInt16 iLockRetries; /* file override number of lock attempts */
+ #endif
+
+ #ifdef HAVE_SETENDOFFILE_F
+ HANDLE fHandle;
+ #endif
+
+
+};
+
+} /* namespace */
+#endif /* __XBFILE_H__ */
+
diff --git a/src/include/xbfilter.h b/1Tdata/xbase/xbase64-4.1.4/src/include/xbfilter.h
index 635d117..635d117 100755
--- a/src/include/xbfilter.h
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xbfilter.h
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/include/xbindex.h b/1Tdata/xbase/xbase64-4.1.4/src/include/xbindex.h
new file mode 100755
index 0000000..959562c
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xbindex.h
@@ -0,0 +1,613 @@
+/* xbindex.h
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014, 2018, 2022 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+
+#ifndef __XB_INDEX_H__
+#define __XB_INDEX_H__
+
+#ifdef XB_INDEX_SUPPORT
+
+
+#define XB_ADD_KEY 1
+#define XB_UPD_KEY 2
+#define XB_DEL_KEY 3
+
+namespace xb{
+
+
+
+///@cond DOXYOFF
+// structure for index nodes, each node contains information regarding one block
+struct XBDLLEXPORT xbIxNode {
+ xbIxNode *npPrev; // pointer to previous node in chain
+ xbIxNode *npNext; // pointer to next node in chain
+ xbUInt32 iCurKeyNo; // current key number in the node, 0 offset
+ xbUInt32 ulBlockNo; // this block number
+ xbUInt32 ulBufSize; // size of cpBlockData
+ char *cpBlockData; // pointer to memory version of block data stored in file
+};
+///@endcond DOXYOFF
+
+
+//! @brief Base class for handling dbf indices.
+/*!
+
+The xbIx class is used as a base class for accessing index files.
+Each index file can have one or more tags.
+
+Calls to the index routines to perform index updates are handled automatically by the dbf class.
+The application program does not need to be concerned with index updates.
+
+If there is a production MDX index, it is opened automatically when the dbf file is opened.
+If there is an ndx file, that has been associated with the dbf file with the metadata routines,
+it will be opened automatically when the dbf file is opened.
+If there are non prod ndx indices that are not associated with the dbf file, the application
+program will need to open as appropriate.
+The meta data association logic is specific to the Xbase64 library and is not applicable to
+other available tools that handle ndx indices.
+All index files are automatically closed when the dbf file is closed.
+
+
+<br>
+The class is designed to support the addition of additional indices with a minimal amount of effort
+needed to integrate into the library.
+If you are looking at adding an new index type to the library, create a derived class using xbIx as a
+base class and modify methods needed to support the new index file version.
+The xbDbf class (and derived classes) perform the needed calls to the index routines for updates.<br>
+See the following for examples on how to start on this:<br>
+xbIxNdx is a derived class and supports a single tag.<br>
+xbIxMdx is a derived class and supports multiple tags.<br>
+
+
+
+<br>
+How data fields are stored in index files:
+<table>
+<tr><th>Field Type<th>Stored in DBF as<th>Stored in NDX as<th>Stored in MDX as</tr>
+<tr><td>C<td>char<td>char<td>char
+<tr><td>F<td>text numbers<td>xbDouble<td>xbBcd
+<tr><td>N<td>text numbers<td>xbDouble<td>xbBcd
+<tr><td>D<td>text CCYYMMDD<td>xbDouble - julian<td>xbDouble - julian
+</table>
+
+
+<br>
+Pages Vs Blocks
+<br>
+For purposes of the Xbase index classes, a page is considered to be 512 bytes of data
+and a block is made up of one or more 512 byte pages.
+<br>Default block sixe of NDX indices is one 512 byte page.
+<br>Default block size of MDX indices is two 512 byte pages or 1024 bytes.
+
+<br>The WriteBlock and GetBlock functions calculate the physical position in the
+file based on a combination of Block Number and Block Size. Block size is set at
+time of index file creation, default is 1024 or two pages.
+
+<br>Page numbers are stored in the physical file, but block reads and writes
+are performed.
+
+<br>
+Duplicate Keys
+<br>
+With the original DBase unique indexing option, if a table has multiple records with the
+same key value, DBase would allow multiple records in the table, but only the first
+record would be found in the index.
+<br>
+XBase64 can be configured to support the original DBase duplicate key implementation,
+or can be configured to halt with a DUPLICATE_KEY error on the insertion of a record
+with a duplicate key.
+<br>
+<table>
+<tr><th>Option<th>Description</tr>
+<tr><td>XB_HALT_ON_DUPKEY</td><td>Return error XB_KEY_NOT_UNIQUE when attempting to append record with duplicate key</td></tr>
+<tr><td>XB_EMULATE_DBASE</td><td>Emulate DBase, allow duplicate records with the same key, only the first record is indexed</td></tr>
+</table>
+*/
+
+
+class XBDLLEXPORT xbIx : public xbFile {
+ public:
+ xbIx( xbDbf * d );
+ virtual ~xbIx();
+
+ virtual xbInt16 CheckTagIntegrity( void *vpTag, xbInt16 iOpt ) = 0;
+ virtual xbInt16 Close();
+ virtual xbInt16 CreateTag( const xbString &sName, const xbString &sKey, const xbString &sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, void **vpTag ) = 0;
+ virtual xbInt16 FindKey( void *vpTag, const xbString &sKey, xbInt16 iRetrieveSw );
+ virtual xbInt16 FindKey( void *vpTag, const char * cKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw );
+ virtual xbInt16 FindKey( void *vpTag, const xbBcd &bcd, xbInt16 iRetrieveSw );
+ virtual xbInt16 FindKey( void *vpTag, const xbDate &dtKey, xbInt16 iRetrieveSw );
+ virtual xbInt16 FindKey( void *vpTag, xbDouble dKey, xbInt16 iRetrieveSw );
+ virtual xbInt16 FindKey( void *vpTag, const void *vKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw ) = 0;
+ virtual void *GetCurTag() const;
+ virtual xbDbf *GetDbf() const;
+
+ virtual xbString &GetKeyExpression( const void *vpTag ) const = 0;
+ virtual xbString &GetKeyFilter( const void *vpTag ) const = 0;
+ virtual char GetKeyType( const void *vpTag ) const = 0;
+ virtual xbBool GetLocked() const;
+
+ virtual xbInt16 GetFirstKey( void *vpTag, xbInt16 iRetrieveSw ) = 0;
+ virtual xbInt16 GetFirstKey( void *vpTag );
+ virtual xbInt16 GetFirstKey();
+
+ virtual xbInt16 GetLastKey( void *vpTag, xbInt16 lRetrieveSw ) = 0;
+ virtual xbInt16 GetLastKey( void *vpTag );
+ virtual xbInt16 GetLastKey();
+
+ virtual xbInt16 GetNextKey( void *vpTag, xbInt16 iRetrieveSw ) = 0;
+ virtual xbInt16 GetNextKey( void *vpTag );
+ virtual xbInt16 GetNextKey();
+
+ virtual xbInt16 GetPrevKey( void *vpTag, xbInt16 iRetrieveSw ) = 0;
+ virtual xbInt16 GetPrevKey( void *vpTag );
+ virtual xbInt16 GetPrevKey();
+
+ virtual void *GetTag( xbInt16 iTagNo ) const = 0;
+ virtual void *GetTag( xbString &sTagName ) const = 0;
+ virtual xbInt16 GetTagCount() const = 0;
+
+ virtual xbString &GetTagName( void *vpTag ) const = 0;
+ virtual const char * GetTagName( void *vpTag, xbInt16 iOpt ) const = 0;
+ virtual void GetTagName( void *vpTag, xbString &sTagName ) {};
+
+ virtual xbBool GetUnique( void *vpTag ) const = 0;
+ virtual xbBool GetSortOrder( void *vpTag ) const = 0;
+
+ virtual xbInt16 Open( const xbString &sFileName );
+ virtual xbInt16 SetCurTag( xbInt16 iTagNo ) = 0;
+ virtual xbInt16 SetCurTag( xbString &sTagName ) = 0;
+ virtual void SetCurTag( void * vpCurTag );
+ virtual void SetLocked( xbBool bLocked );
+
+ virtual void TestStub( char *s, void *vpTag ) {};
+
+
+
+ virtual xbInt16 Reindex( void **vpTag ) = 0;
+
+
+ #ifdef XB_DEBUG_SUPPORT
+ virtual xbInt16 DumpFreeBlocks( xbInt16 iOpt = 0 ) { return XB_NO_ERROR; }
+ virtual xbInt16 DumpHeader( xbInt16 iDestOpt = 0, xbInt16 iFmtOpt = 0 ) = 0;
+ virtual xbInt16 DumpIxForTag( void *vpTag, xbInt16 iOutputOpt ) = 0;
+ virtual void DumpIxNodeChain( void *vpTag, xbInt16 iOutputOpt ) const = 0;
+ virtual xbInt16 DumpNode( void * vpTag, xbIxNode * pNode, xbInt16 iOption ) const;
+ virtual xbInt16 DumpTagBlocks( xbInt16 iOpt = 1, void *vpTag = NULL ) = 0;
+
+ #endif
+
+ protected:
+ friend class xbDbf;
+
+ virtual xbInt16 AddKey( void *vpTag, xbUInt32 ulRecNo ) = 0;
+ virtual xbInt16 AddKeys( xbUInt32 ulRecNo );
+ virtual xbIxNode *AllocateIxNode( xbUInt32 ulBufSize = 0, xbInt16 iOption = 0 );
+ virtual xbInt16 BSearchBlock( char cKeyType, xbIxNode *npNode, xbInt32 lKeyLen, const void *vpKey, xbInt32 lSearchKeyLen, xbInt16 &iCompRc, xbBool bDescending = xbFalse ) const;
+ virtual xbInt16 CheckForDupKeys();
+ virtual xbInt16 CheckForDupKey( void *vpTag ) = 0;
+ virtual xbInt16 CompareKey( char cKeyType, const void *v1, const void *v2, size_t lKeyLen ) const;
+ virtual xbInt16 CreateKeys( xbInt16 iOpt );
+ virtual xbInt16 CreateKey( void * vpTag, xbInt16 iOpt ) = 0;
+ virtual xbInt16 DeleteFromNode( void *vpTag, xbIxNode * npNode, xbInt16 iSlotNo ) = 0;
+ virtual xbInt16 DeleteKeys();
+ virtual xbInt16 DeleteKey( void *vpTag ) = 0;
+ virtual xbInt16 DeleteTag( void *vpTag ) = 0;
+
+ virtual xbInt16 FindKeyForCurRec( void *vpTag ) = 0;
+ virtual xbIxNode *FreeNodeChain( xbIxNode *np );
+ virtual xbInt16 GetBlock( void *vpTag, xbUInt32 ulBlockNo, xbInt16 iOpt, xbUInt32 ulAddlBuf = 0 );
+ virtual xbInt32 GetKeyCount( xbIxNode *npNode ) const;
+ virtual char *GetKeyData( xbIxNode *npNode, xbInt16 iKeyNo, xbInt16 iKeyItemLen ) const;
+ virtual xbInt16 GetKeySts( void *vpTag ) const = 0;
+ virtual xbInt16 GetLastKey( xbUInt32 ulNodeNo, void *vpTag, xbInt16 lRetrieveSw ) = 0;
+ virtual xbInt16 InsertNodeL( void *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, char * cpKeyBuf, xbUInt32 uiPtr ) = 0;
+ virtual xbInt16 InsertNodeI( void *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, xbUInt32 uiPtr ) = 0;
+ virtual xbInt16 KeyExists( void * ) = 0;
+ virtual void NodeFree( xbIxNode * ixNode );
+ virtual xbInt16 ReadHeadBlock( xbInt16 iOpt = 0 ) = 0;
+ // virtual xbInt16 Reindex( void **vpTag ) = 0;
+ virtual void SetDbf( xbDbf *dbf );
+ virtual xbInt16 SplitNodeL( void *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, char *cpKeyBuf, xbUInt32 uiPtr ) = 0;
+ virtual xbInt16 SplitNodeI( void *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 uiPtr ) = 0;
+ virtual xbInt16 UpdateTagKey( char cAction, void *vpTag, xbUInt32 ulRecNo = 0 ) = 0;
+ virtual xbInt16 WriteHeadBlock( xbInt16 iOption ) = 0;
+
+ xbDbf *dbf;
+ char *cNodeBuf; // pointer to memory for processing in a block of index data
+ void *vpCurTag; // pointer to active tag. Single index files have only one tag
+
+ private:
+ virtual void AppendNodeChain( void *vpTag, xbIxNode *npNode ) = 0;
+ virtual xbInt16 GetKeyPtr( void *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 &ulKeyPtr ) const = 0;
+ virtual xbBool IsLeaf( void *vpTag, xbIxNode *npNode ) const = 0;
+ // virtual void SetCurNode( void *vpTag, xbIxNode *npNode ) = 0;
+
+ xbBool bLocked; // index file locked?
+};
+
+#ifdef XB_NDX_SUPPORT
+
+#define XB_NDX_BLOCK_SIZE 512
+
+
+///@cond DOXYOFF
+struct XBDLLEXPORT xbNdxTag {
+
+ // NDX File Header Fields
+ xbUInt32 ulRootBlock; // header node is 0
+ xbUInt32 ulTotalBlocks; // includes header node
+ char cKeyType; // C = Char, F = Numeric, D = Date
+ xbInt16 iKeyLen; // length of key data
+ xbInt16 iKeysPerBlock; // max number keys per block <=100
+ xbInt16 iKeyType; // 00 = Char, 01 = Numeric
+ xbInt16 iKeyItemLen; // KeyLen + 8 bytes
+ char cSerNo; // rolling incrementing serial number +1 on each index update
+ xbInt16 iUnique; // True if unique
+ xbString sKeyExpression; // index expression
+ // end of NDX Header field
+
+ xbExp *exp; // pointer to expression for expression keys
+ time_t tNodeChainTs; // node chain time stamp
+ xbIxNode *npNodeChain;
+ xbIxNode *npCurNode;
+ char *cpKeyBuf; // key buffer, for searches and adds
+ char *cpKeyBuf2; // key buffer, for deletes
+ xbString sTagName; // tag name - is the file name without the extension
+ xbBool bFoundSts; // key found? used to determine if new key should be added in XB_EMULATE_DBASE mode in AddKey
+
+
+ xbInt16 iKeySts; // key updated? set in method CreateKey, checked in AddKey and DeleteKey routines
+ // old key filtered new key filtered iKeySts
+ // Y Y XB_UPD_KEY 2 - update key if changed (delete and add)
+ // Y N XB_DEL_KEY 3 - delete key
+ // N Y XB_ADD_KEY 1 - add key
+ // N N 0 - no update
+
+};
+///@endcond DOXYOFF
+
+//! @brief Class for handling NDX single tag indices.
+/*!
+
+The xbIxNdx class is derived from the xbIx base class and is specific to handling NDX single tag index files.
+Each NDX index file can have only one tag, but the methods are set up to take an argument for a specific tag.
+This was done in order to provide a consistant interface across index types.
+
+Calls to the ndx index routines to perform index updates are handled automatically be the dbf class after
+the ndx file has been opened.
+
+Xbase64 provides a mechanism to automatically open ndx files when a dbf file is opened.
+If the ndx file has been associated with the dbf file with the metadata routines,
+it will be opened automatically when the dbf file is opened.
+If there are non prod ndx indices that are not associated with the dbf file, the application
+program will need to open as appropriate.
+The meta data association logic is specific to the Xbase64 library and is not applicable to
+other available tools that handle ndx indices.
+
+*/
+
+class XBDLLEXPORT xbIxNdx : public xbIx {
+ public:
+ xbIxNdx( xbDbf * d );
+ ~xbIxNdx();
+ xbInt16 CheckTagIntegrity( void *vpTag, xbInt16 iOpt );
+ xbInt16 CreateTag( const xbString &sName, const xbString &sKey, const xbString &sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, void **vpTag );
+ xbInt16 FindKey( void *vpTag, const void *vpKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw );
+ xbInt16 GetFirstKey( void *vpTag, xbInt16 iRetrieveSw );
+
+ xbInt16 GetLastKey( void *vpTag, xbInt16 iRetrieveSw = 1 );
+ xbInt16 GetNextKey( void *vpTag, xbInt16 iRetrieveSw = 1 );
+ xbInt16 GetPrevKey( void *vpTag, xbInt16 iRetrieveSw = 1 );
+ xbInt32 GetKeyLen ( const void *vpTag ) const;
+ char GetKeyType ( const void *vpTag ) const;
+ xbString &GetKeyExpression( const void *vpTag ) const;
+ xbString &GetKeyFilter( const void *vpTag ) const;
+ void *GetTag( xbInt16 iTagNo ) const;
+ void *GetTag( xbString &sTagName ) const;
+ xbString &GetTagName( void *vpTag ) const;
+ const char * GetTagName( void *vpTag, xbInt16 iOpt ) const;
+
+ xbInt16 GetTagCount() const;
+ xbBool GetUnique( void *vpTag = NULL ) const;
+ xbBool GetSortOrder( void *vpTag ) const;
+ xbInt16 SetCurTag( xbInt16 iTagNo );
+ xbInt16 SetCurTag( xbString &sTagName );
+
+ #ifdef XB_DEBUG_SUPPORT
+ xbInt16 DumpTagBlocks( xbInt16 iOpt = 1, void *vpTag = NULL );
+ xbInt16 DumpHeader( xbInt16 iOpt = 0, xbInt16 iFmt = 0 );
+ xbInt16 DumpIxForTag( void *vpTag, xbInt16 iOutputOpt );
+ void DumpIxNodeChain( void *vpTag, xbInt16 iOutputOpt ) const;
+ xbInt16 DumpNode( void * vpTag, xbIxNode * pNode, xbInt16 iOption ) const;
+ #endif
+
+ xbInt16 Reindex( void **vpTag );
+
+
+ protected:
+ friend class xbDbf;
+ xbInt16 AddKey( void *vpTag, xbUInt32 ulRecNo );
+ xbIxNode *AllocateIxNode( xbUInt32 ulBufSize = 0, xbInt16 iOption = 0 );
+ xbInt16 CheckForDupKey( void *vpTag );
+ xbIxNode *CreateIxNode( xbUInt32 ulBufSize );
+ xbInt16 CreateKey( void * vpTag, xbInt16 iOpt );
+ xbInt16 DeleteFromNode( void *vpTag, xbIxNode * npNode, xbInt16 iSlotNo );
+ xbInt16 DeleteKey( void *vpTag );
+ xbInt16 DeleteTag( void *vpTag );
+ xbInt16 FindKeyForCurRec( void *vpTag );
+ xbInt16 GetKeyTypeN( const void *vpTag ) const;
+ xbInt16 GetKeySts( void *vpTag ) const;
+ xbInt16 GetLastKey( xbUInt32 ulNodeNo, void *vpTag, xbInt16 iRetrieveSw = 1 );
+ xbInt16 InsertNodeI( void *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, xbUInt32 uiPtr );
+ xbInt16 InsertNodeL( void *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, char * cpKeyBuf, xbUInt32 uiPtr );
+ xbInt16 KeyExists( void *vpTag = NULL );
+ xbInt16 ReadHeadBlock(xbInt16 iOpt); // read the header node of the disk NDX file
+// xbInt16 Reindex( void **vpTag );
+ xbInt16 SplitNodeI( void *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 uiPtr );
+ xbInt16 SplitNodeL( void *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, char *cpKeyBuf, xbUInt32 uiPtr );
+ xbInt16 UpdateTagKey( char cAction, void *vpTag, xbUInt32 ulRecNo = 0 );
+ xbInt16 WriteHeadBlock( xbInt16 iOption );
+
+ private:
+ xbInt16 AddKeyNewRoot( xbNdxTag *npTag, xbIxNode *npLeft, xbIxNode *npRight );
+ void AppendNodeChain( void *vpTag, xbIxNode *npNode );
+ xbInt16 GetDbfPtr( void *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 &ulDbfPtr ) const;
+ xbInt16 GetKeyPtr( void *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 &ulKeyPtr ) const;
+ xbInt16 GetLastKeyForBlockNo( void *vpTag, xbUInt32 ulBlockNo, char *cpKeyBuf );
+ xbBool IsLeaf( void *vpTag, xbIxNode *npNode ) const;
+ xbInt16 KeySetPosAdd( xbNdxTag *npTag, xbUInt32 ulAddKeyRecNo );
+ xbInt16 KeySetPosDel( xbNdxTag *npTag );
+ xbNdxTag *ndxTag;
+};
+
+#endif /* XB_NDX_SUPPORT */
+
+
+#ifdef XB_MDX_SUPPORT
+//#define XB_MDX_BLOCK_SIZE 1024
+
+struct XBDLLEXPORT xbMdxTag {
+
+ // next 7 fields comprise the tag table entry
+ xbUInt32 ulTagHdrPageNo; // 512 byte page number, NOT block number
+ char cTagName[11];
+ char cKeyFmt; // always 0x10 w/ DBase V7
+ char cLeftChild; // cFwdTagThread
+ char cRightChild; // cFwdTagThread2
+ char cParent; // cBwdTagThread
+ char c2;
+ char cKeyType; // C,D,N
+
+ xbUInt32 ulRootPage; // 512 byte page number, NOT block number
+ xbUInt32 ulTagSize; // Number of 512 byte pages allocated to the tag. Tag size of two is a single 1024 block
+
+ char cKeyFmt2; // 0x10 - base
+ // 0x08 - descending
+ // 0x40 - unique
+ char cKeyType2;
+ // one unused byte fits here
+
+ char cTag11; // dbase sets to 0x1B
+ xbInt16 iKeyLen;
+ xbInt16 iKeysPerBlock;
+ xbInt16 iSecKeyType;
+ xbInt16 iKeyItemLen; // iKeyLen + 4
+
+ char cSerialNo; // Increments +1 for each tag update
+ char cUnique;
+ xbString *sKeyExp; // Key expression
+ char cHasFilter; // 0x00 or 0x01
+ char cHasKeys; // 0x00 or 0x01
+ xbUInt32 ulLeftChild; // dbase 7 sets this to the root page on tag creation
+ xbUInt32 ulRightChild; // dbase 7 sets this to the root page on tag creation
+
+ char cTagYY;
+ char cTagMM;
+ char cTagDD;
+
+ char cKeyFmt3; // dbase 7 sets this 0x01 if discreet field or 0x00 if calculated or combination field key expression on tag creation
+
+ xbString *sFiltExp; // Filter expression
+
+ time_t tNodeChainTs;
+ xbIxNode *npNodeChain;
+ xbIxNode *npCurNode;
+ xbExp *exp; // pointer to expression for expression based tags
+ xbExp *filter; // pointer to expression for index filter
+
+ char *cpKeyBuf; // key buffer
+ char *cpKeyBuf2; // key buffer
+ xbString *sTagName; // string tag name
+
+
+ xbMdxTag *next;
+ xbBool bFoundSts; // key found? used to determine if new key should be added in XB_EMULATE_DBASE mode in AddKey
+
+
+ xbInt16 iKeySts; // key updated? set in method CreateKey, checked in AddKey and DeleteKey routines
+ // old key filtered new key filtered iKeySts
+ // Y Y XB_UPD_KEY 2 - update key if changed (delete and add)
+ // Y N XB_DEL_KEY 3 - delete key
+ // N Y XB_ADD_KEY 1 - add key
+ // N N 0 - no update
+
+
+};
+
+
+class XBDLLEXPORT xbIxMdx : public xbIx {
+ public:
+ xbIxMdx( xbDbf * d );
+ ~xbIxMdx();
+ virtual xbInt16 CheckTagIntegrity( void *vpTag, xbInt16 iOpt );
+ virtual xbInt16 CreateTag( const xbString &sName, const xbString &sKey, const xbString &sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, void **vpTag );
+ virtual xbInt16 FindKey( void *vpTag, const void *vKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw );
+ virtual xbInt16 FindKey( void *vpTag, xbDouble dKey, xbInt16 iRetrieveSw );
+ virtual xbInt16 GetFirstKey( void *vpTag, xbInt16 lRetrieveSw );
+ virtual xbString &GetKeyExpression( const void *vpTag ) const;
+ virtual xbString &GetKeyFilter( const void *vpTag ) const;
+ virtual char GetKeyType( const void *vpTag ) const;
+ virtual xbInt16 GetLastKey( void *vpTag, xbInt16 lRetrieveSw );
+ virtual xbInt16 GetNextKey( void *vpTag, xbInt16 lRetrieveSw );
+ virtual xbInt16 GetPrevKey( void *vpTag, xbInt16 lRetrieveSw );
+ virtual xbBool GetReuseEmptyNodesSw() const;
+ virtual xbBool GetSortOrder( void *vpTag ) const;
+ virtual void *GetTag( xbInt16 iTagNo ) const;
+ virtual void *GetTag( xbString &sTagName ) const;
+ virtual xbInt16 GetTagCount() const;
+
+ virtual xbString &GetTagName( void *vpTag ) const;
+ virtual const char * GetTagName( void *vpTag, xbInt16 iOpt ) const;
+ virtual void GetTagName( void *vpTag, xbString &sTagName );
+
+ virtual xbInt16 GetUnique( void *vpTag ) const;
+ virtual xbInt16 SetCurTag( xbInt16 iTagNo );
+ virtual xbInt16 SetCurTag( xbString &sTagName );
+ void SetReuseEmptyNodesSw( xbBool bReuse );
+
+ void TestStub( char *s, void *vpTag );
+
+
+ virtual xbInt16 Reindex( void **vpTag );
+
+
+ protected:
+ friend class xbDbf;
+
+ xbInt16 AddKey( void *vpTag, xbUInt32 ulRecNo );
+ xbIxNode *AllocateIxNode( xbMdxTag * mpTag, xbUInt32 ulBufSize, xbUInt32 ulBlock2 );
+ void CalcBtreePointers();
+ char CalcTagKeyFmt( xbExp &exp );
+
+ xbInt16 CheckForDupKey( void *vpTag );
+ virtual xbInt16 Close();
+ xbInt16 CreateKey( void * vpTag, xbInt16 iOpt );
+ xbInt16 DeleteFromNode( void *vpTag, xbIxNode * npNode, xbInt16 iSlotNo );
+ xbInt16 DeleteKey( void *vpTag );
+
+ virtual xbInt16 DeleteTag( void *vpTag );
+
+ xbInt16 FindKeyForCurRec( void *vpTag );
+ xbInt16 GetKeySts( void *vpTag ) const;
+ xbInt16 GetLastKey( xbUInt32 ulBlockNo, void *vpTag, xbInt16 lRetrieveSw );
+ void *GetTagTblPtr() const;
+
+ xbInt16 HarvestTagNodes( xbMdxTag *mpTag, xbBool bRecycleRoot = xbFalse );
+ void Init( xbInt16 iOpt = 0 );
+ xbInt16 InsertNodeI( void *vpTag, xbIxNode *npNode, xbInt16 iSlotNo, xbUInt32 uiPtr );
+ xbInt16 InsertNodeL( void *vpTag, xbIxNode *npNode, xbInt16 iSlotNo, char *cpKeyBuf, xbUInt32 uiPtr );
+ xbInt16 KeyExists( void * );
+ xbInt16 LoadTagTable();
+ xbInt16 ReadHeadBlock(xbInt16 iOpt); // read the header node of the disk file
+ //virtual xbInt16 Reindex( void **vpTag );
+ xbInt16 SplitNodeI( void *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 uiPtr );
+ xbInt16 SplitNodeL( void *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, char *cpKeyBuf, xbUInt32 uiPtr );
+ xbInt16 UpdateTagKey( char cAction, void *vpTag, xbUInt32 ulRecNo = 0 );
+ xbInt16 WriteHeadBlock( xbInt16 iOption );
+
+ #ifdef XB_DEBUG_SUPPORT
+ xbInt16 DumpTagBlocks( xbInt16 iOpt = 1, void *vpTag = NULL );
+ xbInt16 DumpFreeBlocks( xbInt16 iOpt = 0 );
+ xbInt16 DumpHeader( xbInt16 iOpt = 0, xbInt16 iFmtOpt = 0 );
+ xbInt16 DumpIxForTag( void *vpTag, xbInt16 iOutputOpt );
+ void DumpIxNodeChain( void *vpTag, xbInt16 iOutputOpt ) const;
+ #endif
+
+
+ xbMdxTag *mdxTagTbl;
+
+// MDX File Header Fields
+ char cVersion;
+ char cCreateYY;
+ char cCreateMM;
+ char cCreateDD;
+ xbString sFileName;
+ xbInt16 iBlockFactor; // 1-32 #of 512 byte segments in a block
+
+ // use file version
+ // xbInt16 iBlockSize; // Stored at the xbFile level
+
+ char cProdIxFlag;
+ char cTagEntryCnt;
+ xbInt16 iTagLen;
+ xbInt16 iTagUseCnt;
+ char cNextTag; // byte 28 +1
+ char c1B; // always 0x1B
+ xbUInt32 ulPageCnt; // number of 512 byte pages in the mdx file
+ xbUInt32 ulFirstFreePage; // page number corresponding to the next free block
+ xbUInt32 ulNoOfBlockAvail; // might be improperly named?? not sure how it is used
+ char cUpdateYY;
+ char cUpdateMM;
+ char cUpdateDD;
+ // end of MDX Header fields
+
+
+ xbBool bReuseEmptyNodes; // Reuese empty MDX nodes when all keys deleted?
+ // DBase 7.x and MS ODBC drivers do not reuse empty nodes, leaves them stranded in the file
+ // Codebase 6.x reuses empty nodes.
+ // Setting this to True will reuse empty nodes in the same manner Codebase 6.x reuses them.
+
+
+ private:
+ xbInt16 AddKeyNewRoot( xbMdxTag *npTag, xbIxNode *npLeft, xbIxNode *npRight );
+ void AppendNodeChain( void *vpTag, xbIxNode *npNode );
+ xbUInt32 BlockToPage( xbUInt32 ulBlockNo );
+ xbMdxTag *ClearTagTable();
+ xbInt16 DumpBlock( xbInt16 iOpt, xbUInt32 ulBlockNo, xbMdxTag * mpTag );
+ xbInt16 GetDbfPtr( void *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 &ulDbfPtr ) const;
+ xbInt16 GetKeyPtr( void *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 &ulKeyPtr ) const;
+ xbInt16 GetLastKeyForBlockNo( void *vpTag, xbUInt32 ulBlockNo, char *cpKeyBuf );
+ xbInt16 HarvestEmptyNode( xbMdxTag *mpTag, xbIxNode *npNode, xbInt16 iOpt, xbBool bHarvestRoot = xbFalse );
+ xbBool IsLeaf( void *vpTag, xbIxNode *npNode ) const;
+ xbInt16 KeySetPosAdd( xbMdxTag *mpTag, xbUInt32 ulAddKeyRecNo );
+ xbInt16 KeySetPosDel( xbMdxTag *mpTag );
+ xbInt16 LoadTagDetail( xbInt16 iOption, xbMdxTag *tte );
+ xbUInt32 PageToBlock( xbUInt32 ulPageNo );
+ xbInt16 TagSerialNo( xbInt16 iOption, xbMdxTag *mpTag );
+ xbInt16 UpdateTagSize( xbMdxTag *mpTag, xbUInt32 ulTagSz );
+
+ #ifdef XB_DEBUG_SUPPORT
+ xbInt16 PrintKey( void *vpTag, xbIxNode *npNode, xbInt16 iKeyNo, xbInt16 iDepth, char cType, xbInt16 iOutputOpt );
+ #endif
+
+
+ };
+ #endif /* XB_MDX_SUPPORT */
+
+
+#ifdef XB_TDX_SUPPORT
+
+class XBDLLEXPORT xbIxTdx : public xbIxMdx {
+ public:
+ xbIxTdx( xbDbf * d );
+ ~xbIxTdx();
+
+ xbInt16 CreateTag( const xbString &sName, const xbString &sKey, const xbString &sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, void **vpTag );
+
+ protected:
+ friend class xbDbf;
+ xbInt16 Close();
+ xbInt16 DeleteTag( void *vpTag );
+
+ private:
+};
+
+#endif /* XB_TDX_SUPPORT */
+
+
+ } /* namespace xb */
+ #endif /* XB_INDEX_SUPPORT */
+#endif /* __XB_INDEX_H__ */
diff --git a/src/include/xbindex.h b/1Tdata/xbase/xbase64-4.1.4/src/include/xbindex.h.nope
index b42f76e..b42f76e 100755
--- a/src/include/xbindex.h
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xbindex.h.nope
diff --git a/src/include/xblnklst.h b/1Tdata/xbase/xbase64-4.1.4/src/include/xblnklst.h
index eaec587..eaec587 100755
--- a/src/include/xblnklst.h
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xblnklst.h
diff --git a/src/include/xblnklstord.h b/1Tdata/xbase/xbase64-4.1.4/src/include/xblnklstord.h
index d319c31..d319c31 100755
--- a/src/include/xblnklstord.h
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xblnklstord.h
diff --git a/src/include/xblnknod.h b/1Tdata/xbase/xbase64-4.1.4/src/include/xblnknod.h
index ef45be8..ef45be8 100755
--- a/src/include/xblnknod.h
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xblnknod.h
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/include/xblog.h b/1Tdata/xbase/xbase64-4.1.4/src/include/xblog.h
new file mode 100755
index 0000000..5c7d721
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xblog.h
@@ -0,0 +1,67 @@
+/* xblog.h
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+#ifndef __XB_XBLOG_H__
+#define __XB_XBLOG_H__
+
+#ifdef CMAKE_COMPILER_IS_GNUCC
+#pragma interface
+#endif
+
+namespace xb{
+
+#ifdef XB_LOGGING_SUPPORT
+
+//! @brief xbLog class.
+/*!
+The xbLog class handles message logging functions.
+
+If logging is enabled in an application, error messages are printed
+in the log file.
+
+Once a logfile reaches a predefined size, the logfile is closed, renamed
+and opened.
+
+The logging functions can be accessed through the xbXBase class.
+Each application has one of those.
+*/
+
+class XBDLLEXPORT xbLog : public xbFile {
+ public:
+ xbLog();
+ xbLog( const xbString &sLogFileName );
+ ~xbLog();
+
+ xbInt16 LogClose ();
+ xbInt16 LogGetStatus ();
+ xbInt16 LogOpen ();
+ void LogSetStatus ( xbBool bLogStatus );
+ void LogSetLogSize( size_t lSize ); // { LogSize = size; }
+ xbInt16 LogWrite ( const xbString &LogEntry, xbInt16 iOutputOption = 0 );
+ xbInt16 LogWriteBytes( xbUInt32 lByteCnt, const char *p );
+ size_t LogGetLogSize() const { return lLogSize; }
+
+ private:
+ xbBool bLoggingStatus; // false = logging off
+ // true = logging on
+ size_t lLogSize;
+ xbInt16 iShareMode;
+};
+
+#endif // XB_LOGGING_SUPPORT
+} // namespace
+#endif // XB_XBLOG_H__
+
+
diff --git a/src/include/xbmemo.h b/1Tdata/xbase/xbase64-4.1.4/src/include/xbmemo.h
index ad9aac2..ad9aac2 100755
--- a/src/include/xbmemo.h
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xbmemo.h
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/include/xbretcod.h b/1Tdata/xbase/xbase64-4.1.4/src/include/xbretcod.h
new file mode 100755
index 0000000..f2885b1
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xbretcod.h
@@ -0,0 +1,98 @@
+/* xbretcod.h
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+#ifndef __XB_RETCODES_H__
+#define __XB_RETCODES_H__
+
+/***********************************************/
+/* Return Codes and Error Messages */
+
+namespace xb{
+
+ #define XB_NO_ERROR 0 // general
+ #define XB_NO_MEMORY -100 // general
+ #define XB_INVALID_OPTION -101 // general
+ #define XB_INVALID_PARAMETER -102 // general
+ #define XB_DUP_TABLE_OR_ALIAS -110 // table manager
+ #define XB_INVALID_NODELINK -120 // linklist
+ #define XB_KEY_NOT_UNIQUE -121 // linklist, index
+ #define XB_MEMCPY_ERROR -122 // memcpy failure
+
+ #define XB_FILE_EXISTS -200 // file
+ #define XB_ALREADY_OPEN -201 // file
+ #define XB_DBF_FILE_NOT_OPEN -202 // file
+ #define XB_FILE_NOT_FOUND -203 // file
+ #define XB_FILE_TYPE_NOT_SUPPORTED -204 // file
+ #define XB_RENAME_ERROR -205 // file
+ #define XB_INVALID_OBJECT -206 // file
+ #define XB_NOT_OPEN -207 // file
+ #define XB_NOT_FOUND -208 // file
+ #define XB_OPEN_ERROR -209 // file
+ #define XB_CLOSE_ERROR -210 // file
+ #define XB_SEEK_ERROR -211 // file
+ #define XB_READ_ERROR -212 // file
+ #define XB_WRITE_ERROR -213 // file
+ #define XB_EOF -214 // file
+ #define XB_BOF -215 // file
+ #define XB_INVALID_BLOCK_SIZE -216 // file
+ #define XB_INVALID_BLOCK_NO -217 // file
+ #define XB_INVALID_RECORD -218 // file
+ #define XB_DELETE_FAILED -219 // file
+ #define XB_INVALID_TABLE_NAME -220 // file
+ #define XB_EMPTY -221 // file
+ #define XB_LIMIT_REACHED -222 // file
+ #define XB_BLOCKREAD_NOT_ENABLED -223 // file
+ #define XB_DIRECTORY_ERROR -224 // file
+
+ #define XB_INVALID_FIELD_TYPE -300 // field
+ #define XB_INVALID_FIELD_NO -301 // field
+ #define XB_INVALID_DATA -302 // field
+ #define XB_INVALID_FIELD_NAME -303 // field
+ #define XB_INVALID_MEMO_FIELD -304 // field
+ #define XB_INVALID_FIELD -305 // field
+ #define XB_INVALID_FIELD_LEN -306 // field
+ #define XB_INVALID_DATE -307 // date field
+
+ #define XB_INVALID_LOCK_OPTION -400 // lock
+ #define XB_LOCK_FAILED -401 // lock
+ #define XB_TABLE_NOT_LOCKED -402 // lock - need table locked for operation
+
+ #define XB_PARSE_ERROR -500 // expression
+ #define XB_INVALID_FUNCTION -501 // expression
+ #define XB_INVALID_PARM -502 // expression
+ #define XB_INCONSISTENT_PARM_LENS -503 // expression
+ #define XB_INCOMPATIBLE_OPERANDS -504 // expression
+ #define XB_UNBALANCED_PARENS -505 // expression
+ #define XB_UNBALANCED_QUOTES -506 // expression
+ #define XB_INVALID_EXPRESSION -507 // expression
+
+ #define XB_INVALID_KEYNO -600 // index
+ #define XB_INVALID_INDEX -601 // index file error
+ #define XB_INVALID_TAG -602 // invalid index tag name, must be <= 10 bytes
+ #define XB_INVALID_PAGE -603 // invalid index page
+
+
+ #define XB_SYNTAX_ERROR -700 // sql syntax error
+
+
+ #define XB_MAX_ERROR_NO -999
+
+
+/* when updating this table, also need to update messages in xbssv.cpp */
+
+
+} /* namespace */
+#endif /* __XB_RETCODES_H__ */
+
diff --git a/src/include/xbsql.h b/1Tdata/xbase/xbase64-4.1.4/src/include/xbsql.h
index 07ffb70..07ffb70 100755
--- a/src/include/xbsql.h
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xbsql.h
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/include/xbssv.h b/1Tdata/xbase/xbase64-4.1.4/src/include/xbssv.h
new file mode 100755
index 0000000..3b87a13
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xbssv.h
@@ -0,0 +1,194 @@
+/* xbssv.h
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+
+#ifndef __XB_XBSSV_H__
+#define __XB_XBSSV_H__
+
+#ifdef CMAKE_COMPILER_IS_GNUCC
+#pragma interface
+#endif
+
+
+namespace xb{
+
+class XBDLLEXPORT xbXBase;
+
+///@cond DOXYOFF
+struct XBDLLEXPORT xbErrorMessage{
+ xbInt16 iErrorNo;
+ const char *sErrorText;
+};
+///@endcond DOXYOFF
+
+
+//! @brief Class for handling shared system variables.
+/*!
+This class defines static variables which are referenced across class instances.
+
+This class is designed to have the variables set when the xbXBase class constructor is called
+(xbXBase is a derived class). The xbXbase class is designed to be called first in an application
+programs, and it is only called once. The static values in this class are typically initialized at
+program startup and don't require additional updates.
+
+*/
+
+
+// By design, DBase allows mutliple records in a table all having the same key, but only one entry in a unique index
+// XB_HALT_ON_DUP_KEY tells the library to not allow appending records which generate duplicate keys in a unique index
+//
+#if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
+#define XB_HALT_ON_DUPKEY 0
+#define XB_EMULATE_DBASE 1
+#endif
+
+
+
+class XBDLLEXPORT xbSsv{
+ public:
+ xbSsv();
+ const static char *ErrorCodeText[];
+
+ void DisplayError ( xbInt16 ErrorCode ) const;
+ xbString& GetDefaultDateFormat () const;
+ xbString& GetDataDirectory () const;
+ xbString& GetTempDirectory () const;
+
+ void GetHomeDir ( xbString &sHomeDirOut );
+
+
+ xbInt16 GetEndianType () const;
+ const char *GetErrorMessage ( xbInt16 ErrorCode ) const;
+ char GetPathSeparator () const;
+
+ void SetDataDirectory ( const xbString &sDataDirectory );
+ void SetDefaultDateFormat ( const xbString &sDefaultDateFormat );
+ void SetTempDirectory ( const xbString &sTempDirectory );
+
+
+ xbBool BitSet ( unsigned char c, xbInt16 iBitNo ) const;
+ void BitDump ( unsigned char c ) const;
+ void BitDump ( char c ) const;
+
+ xbBool GetDefaultAutoCommit () const;
+ void SetDefaultAutoCommit ( xbBool bDefaultAutoCommit );
+
+ xbString& GetLogDirectory () const;
+ xbString& GetLogFileName () const;
+ void SetLogDirectory ( const xbString &sLogDirectory );
+ void SetLogFileName ( const xbString &sLogFileName );
+
+
+ xbBool GetMultiUser () const;
+ void SetMultiUser ( xbBool bMultiUser );
+
+ #if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
+ xbInt16 GetUniqueKeyOpt () const;
+ xbInt16 SetUniqueKeyOpt ( xbInt16 iUniqueKeyOpt );
+ #endif // (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
+
+ #ifdef XB_LOCKING_SUPPORT
+ xbInt16 GetDefaultLockRetries () const;
+ void SetDefaultLockRetries ( xbInt16 iRetryCount );
+ xbInt32 GetDefaultLockWait () const;
+ void SetDefaultLockWait ( xbInt32 lRetryWait );
+ xbInt16 GetDefaultLockFlavor () const;
+ void SetDefaultLockFlavor ( xbInt16 iLockFlavor );
+ xbBool GetDefaultAutoLock () const;
+ void SetDefaultAutoLock ( xbBool bAutoLock );
+ void EnableDefaultAutoLock ();
+ void DisableDefaultAutoLock ();
+ #endif // XB_LOCKING_SUPPORT
+
+ #ifdef XB_MDX_SUPPORT
+ xbInt16 GetCreateMdxBlockSize() const;
+ xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );
+ #endif // XB_MDX_SUPPORT
+
+ #ifdef XB_BLOCKREAD_SUPPORT
+ xbUInt32 GetDefaultBlockReadSize() const;
+ void SetDefaultBlockReadSize( xbUInt32 ulDfltBlockReadSize );
+ #endif // XB_BLOCKREAD_SUPPORT
+
+
+ protected:
+
+ void SetEndianType ();
+
+ static xbInt16 iEndianType; // B=Big Endian L=Little Endian
+ static xbString sNullString; // Null String
+
+
+ private:
+
+ static xbString sDefaultDateFormat;
+ static xbString sDataDirectory; //Data file directory
+ static xbString sTempDirectory; //Temp file directory
+
+ #ifdef XB_LOGGING_SUPPORT
+ static xbString sLogDirectory; //Default location to store log files
+ static xbString sLogFileName; //Default LogFileName
+ #endif
+
+ static xbInt16 iDefaultFileVersion; // 3 = DBase 3
+ // 4 = DBase 4
+ // default version used in CreateTable command
+ // can be over ridden at the Xbase level, or table level
+ // Different versions can be open simultaneously
+
+ static xbBool bDefaultAutoCommit; // Default dbf auto commit switch
+
+ static xbBool bMultiUser; // True if multi user mode is turned on
+ // Turn this off for better performance in single user mode
+ // This needs to be turned on or off before any data tables are opened
+ // turning this on after tables are opened, can result in out of date
+ // file buffers if multiple users are sharing the files
+
+#ifdef XB_LOCKING_SUPPORT
+ static xbInt32 lDefaultLockWait; // Number of milliseconds between lock retries
+ static xbInt16 iDefaultLockRetries; // Number of times to retry a lock before conceding
+ static xbInt16 bDefaultAutoLock; // Autolocking enabled?
+ static xbInt16 iDefaultLockFlavor; // 1 = DBase
+ // 2 = Clipper - not developed yet
+ // 3 = FoxPro - not developed yet
+ // 9 = Xbase64 - not developed yet
+#endif
+
+
+#if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
+
+ static xbInt16 iUniqueKeyOpt;
+
+ // is one of:
+ // XB_HALT_ON_DUPKEY
+ // XB_EMULATE_DBASE
+
+#endif
+
+
+#ifdef XB_MDX_SUPPORT
+ static xbInt16 iCreateMdxBlockSize; // System level Mdx Block Size
+#endif // XB_MDX_SUPPORT
+
+
+#ifdef XB_BLOCKREAD_SUPPORT
+ static xbUInt32 ulDefaultBlockReadSize;
+#endif // XB_BLOCKREAD_SUPPORT
+
+
+};
+
+} /* namespace xb */
+#endif /* __XB_XBSSV_H__ */ \ No newline at end of file
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/include/xbstring.h b/1Tdata/xbase/xbase64-4.1.4/src/include/xbstring.h
new file mode 100755
index 0000000..7fe1692
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xbstring.h
@@ -0,0 +1,188 @@
+/* xbstring.h
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+#ifndef __XBSTRING_H__
+#define __XBSTRING_H__
+
+#ifdef CMAKE_COMPILER_IS_GNUCC
+#pragma interface
+#endif
+
+#include <stdlib.h>
+#include <iostream>
+
+namespace xb{
+
+
+//! @brief Class for handling string data.
+
+/*!
+This class defines a basic string class with all the functions one would expect in a string class.
+
+For purposes of the xbString class, a string is defined as a variable sized array of one byte
+characters terminated with a null (0x00 or \0) byte.<br><br>
+
+This version of the xbString class does not support wide (wchar_t) characters. Perhaps you would
+be interested in creating a class for supporting wide characters.<br><br>
+
+This string class handle strings in a 1-based (not 0 based) fashion.
+Any string routines taking an offset use a 1-based value. That is, the first position of
+the string is position 1, not 0.<br><br>
+
+Position 1 (not 0) is considered the first position in a string.
+A return of 0 would indicate a not found condition. A return of 1, would be the
+first byte.
+*/
+
+
+class XBDLLEXPORT xbString {
+
+ public:
+ //Various constructors
+ xbString(xbUInt32 size);
+ xbString(char c);
+ xbString(const char *s, xbUInt32 lMaxLen);
+ xbString(const xbString &s);
+ xbString(const char * = "");
+ xbString( xbDouble d );
+ ~xbString();
+
+ //operators
+ xbString &operator= (const xbString &s);
+ xbString &operator= (const char *s);
+ operator const char *() const;
+ char &operator[](xbUInt32 n) const;
+ char &operator[](xbInt32 n) const;
+
+ xbString &operator+=(const xbString &s);
+ xbString &operator+=(const char *s);
+ xbString &operator+=(char c);
+ xbString &operator-=(const xbString &s);
+ xbString &operator-=(const char *s);
+ xbString &operator-=(char c);
+
+ xbBool operator == ( const xbString& ) const;
+ xbBool operator == ( const char * ) const;
+ xbBool operator != ( const xbString& ) const;
+ xbBool operator != ( const char * ) const;
+
+ xbBool operator < ( const xbString& ) const;
+ xbBool operator > ( const xbString& ) const;
+ xbBool operator <= ( const xbString& ) const;
+ xbBool operator >= ( const xbString& ) const;
+
+ xbString operator-( const xbString &s );
+ xbString operator+( const char *s );
+ xbString operator+( const xbString &s );
+ xbString operator+( const char c );
+
+ xbString &AddBackSlash( char c );
+ xbString &Append(const xbString &s);
+ xbString &Append(const char *s);
+ xbString &Append(const char *s, xbUInt32 iByteCount );
+ xbString &Append(char c);
+ xbString &Assign(const char *srcStr, xbUInt32 lStartPos, xbUInt32 lCopyLen );
+ xbString &Assign(const char *srcStr, xbUInt32 lStartPos );
+ xbString &Assign(const xbString &s, xbUInt32 ulStartPos, xbUInt32 lCopyLen );
+ xbString &Assign(const xbString &s, xbUInt32 ulStartPos );
+
+ xbString Copy() const;
+ xbUInt32 CountChar( char c ) const;
+ xbUInt32 CountChar( char c, xbInt16 iOpt ) const;
+ xbInt16 CvtHexChar( char &cOut );
+ xbInt16 CvtHexString( xbString &sOut );
+ xbInt16 CvtULongLong( xbUInt64 &ullOut );
+ xbInt16 CvtLongLong( xbInt64 &llOut );
+
+ #ifdef XB_DEBUG_SUPPORT
+ void Dump( const char *title ) const;
+ void Dump( const char *title, xbInt16 iOption ) const;
+ void DumpHex( const char *title ) const;
+ #endif
+
+ xbString &ExtractElement(xbString &s, char delim, xbUInt32 iCnt, xbInt16 iOpt = 0 );
+ xbString &ExtractElement(const char *src, char delim, xbUInt32 iCnt, xbInt16 iOpt = 0 );
+
+ char GetCharacter( xbUInt32 lPos ) const;
+ xbUInt32 GetLastPos(char c) const;
+ xbUInt32 GetLastPos(const char *s) const;
+ char GetPathSeparator() const;
+ xbUInt32 GetSize() const;
+
+ xbBool HasAlphaChars() const;
+ xbBool IsEmpty() const;
+ xbBool IsNull() const;
+
+ xbString &Left( xbUInt32 ulLen );
+ xbUInt32 Len() const; // returns the length of the string
+ xbString &Ltrim();
+ xbString &Ltrunc( xbUInt32 ulCnt );
+
+ xbString &Mid(xbUInt32 ulPos, xbUInt32 lLen );
+ xbString &PadLeft( char c, xbUInt32 ulLen );
+ xbString &PadRight( char c, xbUInt32 ulLen );
+
+ xbUInt32 Pos(char c, xbUInt32 ulStartPos ) const;
+ xbUInt32 Pos(char c) const;
+ xbUInt32 Pos(const char *s) const;
+ xbString &PutAt(xbUInt32 ulPos, char c);
+
+ xbString &Remove( xbUInt32 ulPos, xbUInt32 ulN );
+ xbString &Replace( const char *sReplace, const char *sReplaceWith, xbInt16 iOpt = 0 );
+ xbString &Resize( xbUInt32 lSize );
+ xbString &Rtrim();
+
+ xbString &Set( const char *s );
+ xbString &Set( const xbString &s );
+ xbString &Set( const char *s, xbUInt32 ulSize );
+ xbString &SetNum( xbInt32 lNum );
+ xbString &Sprintf(const char *format, ...);
+
+ const char *Str() const;
+ char *strncpy( char * cDest, xbUInt32 n ) const;
+ xbString &SwapChars( char from, char to );
+
+ xbString &ToLowerCase();
+ xbString &ToUpperCase();
+ xbString &Trim();
+
+ xbBool ValidLogicalValue() const;
+ xbBool ValidNumericValue() const;
+ xbString &ZapChar( char c );
+ xbString &ZapLeadingChar( char c );
+ xbString &ZapTrailingChar( char c );
+
+ friend std::ostream& operator<< ( std::ostream& os, const xbString& s );
+
+ private:
+
+ static const char * NullString;
+ static char cJunkBuf;
+
+ char *data; // pointer to actual string data
+ xbUInt32 size; // size of string plus null terminating byte
+
+ void ctor(const char *s);
+// xbUInt32 CalcSprintfBufSize(const char *format, ...);
+
+// char * xb_realloc( char *pIn, xbUInt32 iLen );
+
+ // next routine could result in buffer over runs if used with improperly sized buffers
+ char * xb_strcpy ( char *target, const char *source);
+
+};
+
+} /* namespace */
+#endif /* __XBSTRING_H__ */
diff --git a/src/include/xbtag.h b/1Tdata/xbase/xbase64-4.1.4/src/include/xbtag.h
index 9b518a3..9b518a3 100755
--- a/src/include/xbtag.h
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xbtag.h
diff --git a/src/include/xbtblmgr.h b/1Tdata/xbase/xbase64-4.1.4/src/include/xbtblmgr.h
index 2c31e45..2c31e45 100755
--- a/src/include/xbtblmgr.h
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xbtblmgr.h
diff --git a/src/include/xbtypes.h b/1Tdata/xbase/xbase64-4.1.4/src/include/xbtypes.h
index 99b6c22..99b6c22 100755
--- a/src/include/xbtypes.h
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xbtypes.h
diff --git a/src/include/xbuda.h b/1Tdata/xbase/xbase64-4.1.4/src/include/xbuda.h
index e5c0e91..e5c0e91 100755
--- a/src/include/xbuda.h
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xbuda.h
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/include/xbxbase.h b/1Tdata/xbase/xbase64-4.1.4/src/include/xbxbase.h
new file mode 100755
index 0000000..702da23
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xbxbase.h
@@ -0,0 +1,235 @@
+/* xbxbase.h
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+
+#ifndef __XB_XBDBLIST_H__
+#define __XB_XBDBLIST_H__
+
+#ifdef CMAKE_COMPILER_IS_GNUCC
+#pragma interface
+#endif
+
+namespace xb{
+
+class XBDLLEXPORT xbLog;
+
+/************************************************************************/
+/*
+ Xbase functions
+
+ Min Parm Count is the minimum number of input parms needed by the function
+
+ Return Type
+ C Char or string
+ D Date
+ L Logical
+ N Numeric
+ 1 Varies - pull return type from first sibling
+ 2 Varies - pull return type from second sibling
+*/
+
+#ifdef XB_FUNCTION_SUPPORT
+
+/*
+struct XBDLLEXPORT xbFunctionInfo {
+ const char * FuncName; // function name
+ char ReturnType; // return type of function
+ xbInt16 iReturnLenCalc; // used to calculate the function return value is
+ // 1 = use value specified in iReturnLenVal
+ // 2 = use length of operand specified in col 4
+ // 3 = use valued of numeric operand specified in col 4
+ // 4 = length of parm 1 * numeric value parm
+ // 5 = larger length of parm 2 or length of parm 3
+ // 6 = if two or more parms, use numeric value from second parm,
+ // otherwise use col4 value
+ xbInt16 iReturnLenVal; // Used in combination with iReturnLenCalc
+
+};
+*/
+/*
+static xbFunctionInfo FunctionList[] =
+// Func Return -Rtrn Len-
+// Name Type -Calc Val-
+{
+ { "ABS", 'N', 1, 4 },
+ { "ALLTRIM", 'C', 2, 1 },
+ { "ASC", 'N', 1, 4 },
+ { "AT", 'N', 1, 4 },
+ { "CDOW", 'C', 1, 9 },
+ { "CHR", 'C', 1, 1 },
+ { "CMONTH", 'C', 1, 9 },
+ { "CTOD", 'D', 1, 8 },
+ { "DATE", 'D', 1, 8 },
+ { "DAY", 'N', 1, 4 },
+ { "DEL", 'C', 1, 1 },
+ { "DELETED", 'L', 1, 1 },
+ { "DESCEND", '1', 2, 1 },
+ { "DOW", 'N', 1, 4 },
+ { "DTOC", 'C', 1, 8 },
+ { "DTOS", 'C', 1, 8 },
+ { "EXP", 'N', 1, 4 },
+ { "IIF", 'C', 5, 0 },
+ { "INT", 'N', 1, 4 },
+ { "ISALPHA", 'L', 1, 1 },
+ { "ISLOWER", 'L', 1, 1 },
+ { "ISUPPER", 'L', 1, 1 },
+ { "LEFT", 'C', 3, 2 },
+ { "LEN", 'N', 1, 4 },
+ { "LOG", 'N', 1, 4 },
+ { "LOWER", 'C', 2, 1 },
+ { "LTRIM", 'C', 2, 1 },
+ { "MAX", 'N', 1, 4 },
+ { "MIN", 'N', 1, 4 },
+ { "MONTH", 'N', 1, 4 },
+ { "RECNO", 'N', 1, 4 },
+ { "RECCOUNT", 'N', 1, 4 },
+ { "REPLICATE", 'C', 4, 0 },
+ { "RIGHT", 'C', 3, 2 },
+ { "RTRIM", 'C', 2, 1 },
+ { "SPACE", 'C', 3, 1 },
+ { "SQRT", 'N', 1, 4 },
+ { "STOD", 'D', 1, 8 },
+ { "STR", 'C', 6, 10 },
+ { "STRZERO", 'C', 3, 2 },
+ { "SUBSTR", 'C', 3, 3 },
+ { "TRIM", 'C', 2, 1 },
+ { "UPPER", 'C', 2, 1 },
+ { "VAL", 'N', 1, 4 },
+ { "YEAR", 'N', 1, 4 },
+ { 0, 0, 0, 0 },
+};
+*/
+#endif
+
+
+
+//! @brief xbXbase class.
+/*!
+ The xbXBase class is the core class that needs to be in every application program.
+*/
+
+class XBDLLEXPORT xbXBase : public xbTblMgr{
+ public:
+ xbXBase();
+ ~xbXBase();
+
+ xbInt16 CloseAllTables();
+ xbInt16 CreateFqn( const xbString &sDirIn, const xbString &sNameIn, const xbString &sExtIn, xbString &sFqfnOut );
+ void DisableMsgLogging();
+ void EnableMsgLogging ();
+ xbInt16 FlushLog();
+
+ //const xbString &GetLogDirectory () const;
+ //const xbString &GetLogFileName () const;
+ const xbString &GetLogFqFileName() const;
+ xbBool GetLogStatus () const;
+
+ xbInt16 OpenHighestVersion( const xbString &sTableName, const xbString &sAlias, xbDbf &dbf, int dummy );
+ xbInt16 OpenHighestVersion( const xbString &sTableName, const xbString &sAlias, xbDbf **dbf );
+
+ xbDbf * Open( const xbString &sTableName, xbInt16 &iRc );
+ xbDbf * Open( const xbString &sTableName, const xbString &sAlias, xbInt16 iOpenMode, xbInt16 iShareMode, xbInt16 iVersion, xbInt16 &iRc );
+
+ // next three methods moved to xbssv for consistency
+ // void SetLogDirectory( const xbString &sLogFileDirectory );
+ // void SetLogFileName ( const xbString &sLogFileName );
+ void SetLogSize ( size_t lSize );
+ size_t GetLogSize () const;
+
+ xbInt16 WriteLogMessage( const xbString &sLogMessage, xbInt16 iOutputOpt = 0 );
+ xbInt16 WriteLogBytes ( xbUInt32 lCnt, const char *p );
+
+ void xbSleep ( xbInt32 lMillisecs );
+
+ xbInt16 GetCmdLineOpt ( xbInt32 lArgc, char **argv, const char *sOptRqst, xbString &sParmOut );
+ xbInt16 GetCmdLineOpt ( xbInt32 lArgc, char **argv, xbString &sOptRqst, xbString &sParmOut );
+
+
+ /* xbase functions */
+ #ifdef XB_FUNCTION_SUPPORT
+ xbInt16 ABS( xbDouble dIn, xbDouble &dOut );
+ xbInt16 ALLTRIM( const xbString &sIn, xbString &sOut );
+ xbInt16 ASC( const xbString &s, xbDouble &dAscOut );
+ xbInt16 AT( const xbString &sSrchFor, const xbString &sBase, xbDouble &dPos );
+ xbInt16 CDOW( xbDate &dInDate, xbString &sOutDow );
+ xbInt16 CHR( xbDouble dAsciCd, xbString &sOut );
+ xbInt16 CMONTH( xbDate &dInDate, xbString &sOutMonth );
+ xbInt16 CTOD( const xbString &sInDate, xbDate &dOutDate );
+ xbInt16 DATE( xbDate &dOutDate );
+ xbInt16 DAY( const xbDate &dInDate, xbDouble &dOutDay );
+ xbInt16 DEL( xbDbf * d, xbString &sOut, xbInt16 iRecBufSw = 0 );
+ xbInt16 DELETED( xbDbf * d, xbBool &bOut, xbInt16 iRecBufSw = 0 );
+ xbInt16 DESCEND( const xbString &sIn, xbString &sOut );
+ xbInt16 DESCEND( const xbDate &dInDate, xbDate &dOutDate );
+ xbInt16 DESCEND( const xbDouble dIn, xbDouble &dsOut );
+ xbInt16 DOW( const xbDate &sInDate, xbDouble &dDowOut );
+ xbInt16 DTOC( xbDate &dInDate, xbString &sOutFmtDate );
+ xbInt16 DTOS( xbDate &dInDate, xbString &sOutFmtDate );
+ xbInt16 EXP( xbDouble dIn, xbDouble &dOut );
+ xbInt16 IIF( xbBool bResult, const xbString &sTrueResult, const xbString &sFalseResult, xbString &sResult );
+ xbInt16 INT( xbDouble dIn, xbDouble &dOut );
+ xbInt16 ISALPHA( const xbString &s, xbBool &bResult );
+ xbInt16 ISLOWER( const xbString &s, xbBool &bResult );
+ xbInt16 ISUPPER( const xbString &s, xbBool &bResult );
+ xbInt16 LEFT( const xbString &sIn, xbUInt32 lCharCnt, xbString &sOut );
+ xbInt16 LEN( const xbString &sIn, xbDouble &dLen );
+ xbInt16 LOG( xbDouble dIn, xbDouble &dOut );
+ xbInt16 LOWER( const xbString &sIn, xbString &sOut );
+ xbInt16 LTRIM( const xbString &sIn, xbString & sOut );
+ xbInt16 MAX( xbDouble dIn1, xbDouble dIn2, xbDouble &dOut );
+ xbInt16 MIN( xbDouble dIn1, xbDouble dIn2, xbDouble &dOut );
+ xbInt16 MONTH( xbDate &dInDate, xbDouble &dMonthOut );
+ xbInt16 RECCOUNT( xbDbf * d, xbDouble &dRecOut );
+ xbInt16 RECNO( xbDbf * d, xbDouble &dRecOut );
+ xbInt16 REPLICATE( const xbString &sIn, xbUInt32 ulRepCnt, xbString &sOut );
+ xbInt16 RIGHT( const xbString &sIn, xbUInt32 iCharCnt, xbString &sOut );
+ xbInt16 RTRIM( const xbString &sIn, xbString &sOut );
+ xbInt16 SPACE( xbInt32 lCnt, xbString &sOut );
+ xbInt16 SQRT( xbDouble dBase, xbDouble &dSqrRt );
+ xbInt16 STOD( const xbString &sIn, xbDate &sDateOut );
+ xbInt16 STR( xbDouble dIn, xbString &sOut );
+ xbInt16 STR( xbDouble dIn, xbUInt32 ulLen, xbString &sOut );
+ xbInt16 STR( xbDouble dIn, xbUInt32 ulLen, xbUInt32 ulDec, xbString &sOut );
+ xbInt16 STR( xbDouble dIn, xbUInt32 ulLen, xbUInt32 ulDec, xbString &sPadChar, xbString &sOut );
+ xbInt16 STRZERO( xbDouble dIn, xbUInt32 ulLen, xbUInt32 ulDec, xbString &sOut );
+ xbInt16 SUBSTR( const xbString &sIn, xbUInt32 ulStartPos, xbUInt32 ulLen, xbString &sOut );
+ xbInt16 TRIM( const xbString &sIn, xbString &sOut );
+ xbInt16 UPPER( const xbString &sIn, xbString &sOut );
+ xbInt16 VAL( const xbString &sIn, xbDouble &dOut );
+ xbInt16 YEAR( xbDate &dInDate, xbDouble &dOutYear );
+ #endif
+
+ protected:
+ friend class xbBcd;
+ friend class xbExp;
+
+ #ifdef XB_BLOCKREAD_SUPPORT
+ friend class xbBlockRead;
+ #endif // XB_BLOCKREAD_SUPPORT
+
+
+ xbInt16 GetFunctionInfo( const xbString &sExpLine, char &cReturnType, xbInt16 &iReturnLenCalc, xbInt32 &lReturnLenVal ) const;
+ static xbInt16 xbMemcmp( const unsigned char *s1, const unsigned char *s2, size_t n );
+
+ private:
+
+#ifdef XB_LOGGING_SUPPORT
+ xbLog *xLog;
+#endif
+
+};
+
+} /* namespace xb */
+#endif /* __XB_DBLIST_H__ */ \ No newline at end of file
diff --git a/src/sql/xbalttbl.cpp b/1Tdata/xbase/xbase64-4.1.4/src/sql/xbalttbl.cpp
index 8a36b46..8a36b46 100755
--- a/src/sql/xbalttbl.cpp
+++ b/1Tdata/xbase/xbase64-4.1.4/src/sql/xbalttbl.cpp
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/sql/xbcrix.cpp b/1Tdata/xbase/xbase64-4.1.4/src/sql/xbcrix.cpp
new file mode 100755
index 0000000..8efdc39
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/sql/xbcrix.cpp
@@ -0,0 +1,301 @@
+/* xbcrix.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+#include "xbase.h"
+
+#ifdef XB_SQL_SUPPORT
+
+namespace xb{
+
+
+/***********************************************************************/
+#ifdef XB_INDEX_SUPPORT
+xbInt16 xbSql::SqlCreateIndex( const xbString &sCmdLine ){
+
+ // std::cout << "CREATE INDEX " << sCmdLine << std::endl;
+
+ // expected format to create an Dbase 3, NDX index:
+ // CREATE INDEX ixname.ndx ON tablename.dbf ( EXPRESSION ) [ASSOCIATE]
+
+ // expected format to create an Dbase 4, tag on an MDX index:
+ // CREATE [UNIQUE] INDEX tagname ON tablename.dbf ( EXPRESSION ) [DESC] [FILTER .NOT. DELETED()]
+
+ // The ASSOCIATE parameter is specific to Xbase64 library, it is used to associate
+ // a non production (NDX) index file to a dbf file so it will be automatically
+ // opened with the dbf file whenever the dbf file is opened by the xbase64 routines.
+
+ // The [ASSOCIATE] parameter is not used with MDX production indices
+
+ // This method first looks for ".NDX" in the file name to determine if an NDX
+ // index should be created.
+ // if .NDX is not in the filename, it looks in the uda for "IXTYPE" for either
+ // NDX or MDX to detmermine the index type to create
+ // if IXTYPE not found, create an MDX tag
+
+ // The optional DESC parameter defines an entire index key as descending. This is
+ // different than other SQL implementations where specific fields can be descending.
+
+ // The optional FILTER parameter is specific to the XBASE64 library, is it used to
+ // assign a filter to a tag in an MDX style index. Everything to the right of
+ // the keyword FILTER is considered part of the filter.
+
+ // The original DBASE indices used to '+' to create an index on more than one field
+ // ie: FIELD1+FIELD2+FIELD3
+ // SQL uses commas: ie: FIELD1, FIELD2, FIELD3
+ // The Xbase library supports either '+' or ',' when creating mutli field indices.
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ xbString sTableName;
+ xbString sIxName;
+ xbString sIxType;
+ xbUInt32 ulPos;
+ xbString sCmd = sCmdLine;
+ xbString sNode;
+ xbBool bUnique = xbFalse;
+ xbDbf * dbf = NULL;
+ xbBool bTableLocked = xbFalse;
+
+ try{
+
+ // drop off the first node
+ ulPos = sCmd.Pos( ' ' );
+ sCmd.Ltrunc( ulPos );
+ sCmd.Ltrim();
+
+ sNode.ExtractElement( sCmd, ' ', 1, 0 );
+ sNode.ToUpperCase();
+
+ if( sNode == "UNIQUE" ){
+ //std::cout << "unique ix\n";
+ bUnique = xbTrue;
+ ulPos = sCmd.Pos( ' ' );
+ sCmd.Ltrunc( ulPos );
+ sCmd.Ltrim();
+ }
+
+ // go past the index keyword
+ ulPos = sCmd.Pos( ' ' );
+ sCmd.Ltrunc( ulPos );
+ sCmd.Ltrim();
+
+ // pull the index name off the cmd line
+ sIxName.ExtractElement( sCmd, ' ', 1, 0 );
+
+ #ifdef XB_NDX_SUPPORT
+ xbString sTemp = sIxName;
+ sTemp.ToUpperCase();
+ ulPos = sTemp.Pos( ".NDX" );
+ if(ulPos == (sTemp.Len() - 3) )
+ sIxType = "NDX";
+ #endif // XB_NDX_SUPPORT
+
+ if( sIxType == "" ){
+ if(( iRc = uda.GetTokenForKey( "IXTYPE", sIxType )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ }
+
+ #ifdef XB_NDX_SUPPORT
+ if( sIxType == "NDX" ){
+ xbFile f( xbase );
+ f.SetFileName( sIxName );
+ if( f.FileExists()){
+
+ iErrorStop = 110;
+ iRc = XB_FILE_EXISTS;
+ throw iRc;
+ }
+ }
+ #endif // XB_NDX_SUPPORT
+
+ // skip past index name
+ ulPos = sCmd.Pos( ' ' );
+ sCmd.Ltrunc( ulPos );
+ sCmd.Ltrim();
+
+ // skip past "ON"
+ ulPos = sCmd.Pos( ' ' );
+ sCmd.Ltrunc( ulPos );
+ sCmd.Ltrim();
+
+ // get the table name
+ ulPos = sCmd.Pos( '(' );
+ sTableName.ExtractElement( sCmd, '(', 1, 0 );
+ sTableName.Trim();
+
+ xbFile fDbf( xbase );
+ fDbf.SetFileName( sTableName );
+
+ // if not open, attempt to open it
+ dbf = xbase->GetDbfPtr( fDbf.GetFqFileName());
+
+ if( !dbf ){
+ if(( iRc = xbase->OpenHighestVersion( sTableName, "", &dbf )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ }
+
+ if( dbf == NULL ){
+ iErrorStop = 130;
+ iRc = XB_FILE_NOT_FOUND;
+ throw iRc;
+ }
+ sCmd.Ltrunc( ulPos );
+
+ //ulPos = sCmd.GetLastPos( ')' );
+ xbString sKeyExpression;
+ xbBool bDone = xbFalse;
+ xbUInt32 lPos = 1;
+ xbInt16 iParenCtr = 0;
+
+ while( !bDone && lPos < sCmd.Len()){
+ if( sCmd[lPos] == '(' ){
+ iParenCtr++;
+ sKeyExpression.Append( sCmd[lPos] );
+ } else if( sCmd[lPos] == ')' ){
+ if( iParenCtr > 0 ){
+ iParenCtr--;
+ sKeyExpression.Append( sCmd[lPos] );
+ } else {
+ bDone = xbTrue;
+ }
+ } else if( sCmd[lPos] == ',' && iParenCtr == 0 ){
+ sKeyExpression.Append( '+' );
+ } else if( sCmd[lPos] != ' ' ){
+ sKeyExpression.Append( sCmd[lPos] );
+ }
+ lPos++;
+ }
+
+ // std::cout << "Key Expression =[" << sKeyExpression << "]\n";
+ sCmd.Ltrunc( lPos );
+ sCmd.Trim();
+
+ xbBool bDesc = xbFalse;
+ // std::cout << "sCmd - looking for DESC [" << sCmd << "]\n";
+ if( sCmd.Len() > 4 ){
+ sNode = sCmd;
+ sNode.ToUpperCase();
+ ulPos = sNode.Pos( "DESC" );
+ if( ulPos > 0 ){
+ bDesc = xbTrue;
+ sCmd.Ltrunc( 4 );
+ sCmd.Trim();
+ std::cout << "Descending\n";
+ }
+ }
+
+ // std::cout << "sCmd - looking for FILTER stuff [" << sCmd << "]\n";
+ xbString sFilter;
+ if( sCmd.Len() > 6 ){
+ sNode = sCmd;
+ sNode.ToUpperCase();
+ ulPos = sNode.Pos( "FILTER" );
+ if( ulPos > 0 ){
+ sFilter = sCmd;
+ sFilter.Ltrunc( ulPos + 6 );
+ sFilter.Trim();
+ }
+ }
+ // std::cout << "sCmd - FILTER = [" << sFilter << "]\n";
+
+ #ifdef XB_LOCKING_SUPPORT
+ if(( iRc = dbf->LockTable( XB_LOCK )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ } else {
+ bTableLocked = xbTrue;
+ }
+ #endif // XB_LOCKING_SUPPORT
+
+ xbIx *pIx;
+ void *vpTag;
+
+ if(( iRc = dbf->CreateTag( sIxType, sIxName, sKeyExpression, sFilter, bDesc, bUnique, xbFalse, &pIx, &vpTag )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+
+ #ifdef XB_NDX_SUPPORT
+ xbBool bAssociate = xbFalse;
+ if( sIxType == "NDX"){
+ sCmd.Ltrunc( ulPos );
+ sCmd.Trim();
+ if( sCmd.Len() > 0 ){
+ sCmd.ToUpperCase();
+ if( sCmd.Pos( "ASSOCIATE" )){
+ bAssociate = xbTrue;
+ if(( iRc = dbf->AssociateIndex( "NDX", sIxName, 0 )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+ }
+ }
+ }
+ #endif // XB_NDX_SUPPORT
+
+ iRc = dbf->Reindex( 2, 1, &pIx, &vpTag );
+
+ #ifdef XB_NDX_SUPPORT
+ if( iRc != XB_NO_ERROR && sIxType == "NDX" && bAssociate ){
+ xbInt16 iRc2;
+ if(( iRc2 = dbf->AssociateIndex( "NDX", sIxName, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 180;
+ throw iRc2;
+ }
+ iErrorStop = 190;
+ throw iRc;
+ }
+ #endif // XB_NDX_SUPPORT
+
+ if( iRc != XB_NO_ERROR ){
+ iErrorStop = 200;
+ throw iRc;
+ }
+
+
+ #ifdef XB_LOCKING_SUPPORT
+ if( bTableLocked ){
+ if(( iRc = dbf->LockTable( XB_UNLOCK )) != XB_NO_ERROR ){
+ iErrorStop = 210;
+ throw iRc;
+ } else {
+ bTableLocked = xbFalse;
+ }
+ }
+ #endif // XB_LOCKING_SUPPORT
+
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbSql::SqlCreateIndex() Exception Caught. Error Stop = [%d] rc = [%d] table = [%s]", iErrorStop, iRc, sTableName.Str() );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ #ifdef XB_LOCKING_SUPPORT
+ if( bTableLocked && dbf )
+ dbf->LockTable( XB_UNLOCK );
+ #endif // XB_LOCKING_SUPPORT
+
+ return iRc;
+}
+#endif // XB_INDEX_SUPPORT
+/***********************************************************************/
+} /* namespace */
+#endif /* XB_SQL_SUPPORT */
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/sql/xbcrtbl.cpp b/1Tdata/xbase/xbase64-4.1.4/src/sql/xbcrtbl.cpp
new file mode 100755
index 0000000..e22b0b5
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/sql/xbcrtbl.cpp
@@ -0,0 +1,274 @@
+/* xbcrtbl.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2019,2022 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+#include "xbase.h"
+
+#ifdef XB_SQL_SUPPORT
+
+namespace xb{
+
+
+/***********************************************************************/
+xbInt16 xbSql::SqlCreateTable( const xbString &sCmdLine ){
+
+
+ // std::cout << "CREATE TABLE " << sCmdLine << std::endl;
+
+ // expected format:
+ // CREATE TABLE tablename.dbf (Field1 CHAR(10), INTFLD1 INTEGER, ... )
+
+ // supported field types
+ //
+ // SQL TYPE XBASE Field Type
+ // -------- ----------------
+ // SMALLINT NUMERIC(6,0)
+ // INTEGER NUMERIC(11,0)
+ // DECIMAL(x,y) NUMERIC(x+1,y)
+ // NUMERIC(x,y) NUMERIC(x,y)
+ // FLOAT(x,y) FLOAT(x,y)
+ // CHAR(n) CHARACTER(n)
+ // DATE DATE
+ // VARCHAR MEMO
+ // LOGICAL LOGICAL
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ xbString sTableName;
+ xbString sFieldName;
+ xbString sDataType;
+ xbString sAttrib1;
+ xbString sAttrib2;
+ xbString sLlEntry;
+ xbInt16 iType = 0;
+ xbInt16 iAttribCnt; // number of attributes for a given data type
+ xbString s;
+ xbUInt32 lPos = 0;
+ xbUInt32 lSpPos = 0; // space position
+ xbUInt32 lCmPos = 0; // comma position
+ xbUInt32 lLpPos = 0; // left paren position
+ xbLinkList<xbString> ll;
+ xbSchema *schema = NULL;
+ xbString sMsg;
+ xbString sWork;
+
+ try{
+ // retrieve table name
+ s.ExtractElement( sCmdLine, '(', 1, 0 );
+ sTableName.ExtractElement( s, ' ', 3, 0 );
+ sTableName.Trim();
+
+// std::cout << "Create table - Tablename = [" << sTableName.Str() << "]\n";
+// std::cout << "Cm line = [" << sCmdLine.Str() << "]\n";
+
+ // determine if it already exists
+ xbFile f( xbase );
+ f.SetFileName( sTableName );
+ if( f.FileExists() ){
+ iErrorStop = 100;
+ iRc = XB_FILE_EXISTS;
+ throw iRc;
+ }
+
+ // build out table structure with parms from the sql string
+ lPos = sCmdLine.Pos( '(' );
+ s = sCmdLine;
+ s.Ltrunc( lPos );
+ s.Trim();
+
+ // remove the last byte, should be a )
+ s.Remove( s.Len(), 1 );
+
+ s.Trim();
+
+ xbBool bDone = xbFalse;
+ xbInt16 iLoop = 0;
+ while( !bDone && iLoop++ < 255 ){
+ sFieldName.ExtractElement( s, ' ', 1 , 0 );
+ lPos = sFieldName.Len();
+ sFieldName.Trim();
+ if( sFieldName.Len() > 10 )
+ sFieldName.Mid( 1, 10 ); // shrink to 10 buytes if too big
+
+ //std::cout << "field name=[" << sFieldName << "]\n";
+ s.Ltrunc( lPos + 1 );
+ s.Ltrim();
+ //std::cout << "remainder after field name removed = [" << s << "]\n";
+
+ // Data type is delimited with either a space, comma or left paren
+ lPos = 9999999;
+ lSpPos = s.Pos( ' ' );
+ lCmPos = s.Pos( ',' );
+ lLpPos = s.Pos( '(' );
+ if( lSpPos != 0 ) lPos = lSpPos;
+ if( lCmPos != 0 && lCmPos < lPos ) lPos = lCmPos;
+ if( lLpPos != 0 && lLpPos < lPos ) lPos = lLpPos;
+
+ //sMsg.Sprintf( "SpPos=[%d] CmPos=[%d] LpPos=[%d] lPos=[%d]", lSpPos, lCmPos, lLpPos, lPos );
+ //std::cout << sMsg << "\n";
+
+ sDataType.Assign( s, 1, lPos-1 );
+
+ //std::cout << "DataType=[" << sDataType << "]\n";
+ if( sDataType == "CHAR" )
+ iAttribCnt = 1;
+ else if( sDataType == "DECIMAL" || sDataType == "NUMERIC" || sDataType == "FLOAT" )
+ iAttribCnt = 2;
+ else if( sDataType == "SMALLINT" || sDataType == "INTEGER" || sDataType == "DATE" || sDataType == "VARCHAR" || sDataType == "LOGICAL" )
+ iAttribCnt = 0;
+ else{
+ iErrorStop = 110;
+ iRc = XB_INVALID_FIELD_TYPE;
+ throw iRc;
+ }
+
+ sAttrib1 = "";
+ sAttrib2 = "0";
+
+ if( iAttribCnt == 0 ){
+ s.Ltrunc( sDataType.Len());
+
+ } else if( iAttribCnt > 0 ){
+ lPos = s.Pos( '(' );
+ if( lPos <= 0 ){
+ iErrorStop = 120;
+ iRc = XB_INVALID_FIELD_LEN;
+ throw iRc;
+ }
+ s.Ltrunc( lPos );
+
+ lPos = s.Pos( ')' );
+ if( lPos <= 0 ){
+ iErrorStop = 130;
+ iRc = XB_INVALID_FIELD_LEN;
+ throw iRc;
+ }
+ sWork.Assign( s, 1, lPos - 1);
+ sWork.Trim();
+
+ if( iAttribCnt == 1 ){
+ sAttrib1 = sWork;
+ } else {
+
+ lCmPos = sWork.Pos( ',' );
+ if( lCmPos <= 0 ){
+ iErrorStop = 140;
+ iRc = XB_INVALID_FIELD_LEN;
+ throw iRc;
+ }
+
+ sAttrib1.Assign( sWork, 1, lCmPos - 1);
+ sAttrib1.Trim();
+
+ sWork.Ltrunc( lCmPos );
+ sAttrib2 = sWork;
+ sAttrib2.Trim();
+
+ }
+ s.Ltrunc( lPos );
+ }
+
+ s.Ltrim();
+ s.ZapLeadingChar( ',' );
+ s.Ltrim();
+
+ if( sDataType == "CHAR" ){
+ iType = XB_CHAR_FLD;
+ } else if( sDataType == "DECIMAL" ){
+ xbInt32 lVal = atol( sAttrib1.Str()) + 1;
+ sAttrib1.Sprintf( "%d", lVal );
+ iType = XB_NUMERIC_FLD;
+ } else if( sDataType == "SMALLINT" ){
+ sAttrib1 = "6";
+ iType = XB_NUMERIC_FLD;
+ } else if( sDataType == "INTEGER" ){
+ sAttrib1 = "11";
+ iType = XB_NUMERIC_FLD;
+ } else if( sDataType == "NUMERIC" ){
+ iType = XB_NUMERIC_FLD;
+ } else if( sDataType == "FLOAT" ) {
+ iType = XB_FLOAT_FLD;
+ } else if( sDataType == "DATE" ){
+ iType = XB_DATE_FLD;
+ sAttrib1 = "8";
+ } else if( sDataType == "VARCHAR" ){
+ iType = XB_MEMO_FLD;
+ sAttrib1 = "10";
+ } else if( sDataType == "LOGICAL" ){
+ iType = XB_LOGICAL_FLD;
+ sAttrib1 = "1";
+ }
+ sLlEntry.Sprintf( "%s,%s,%c,%s,%s", sFieldName.Str(), sDataType.Str(), iType, sAttrib1.Str(), sAttrib2.Str());
+ ll.InsertAtEnd( sLlEntry );
+
+ if( s.Len() == 0 )
+ bDone = xbTrue;
+ }
+
+ schema = (xbSchema *) calloc( ll.GetNodeCnt()+1, sizeof( xbSchema ));
+ xbLinkListNode<xbString> * llN = ll.GetHeadNode();
+ xbUInt32 ulCnt = ll.GetNodeCnt();
+
+ char *pTrg;
+ for( xbUInt32 i = 0; i < ulCnt; i++ ){
+ s = llN->GetKey();
+ sFieldName.ExtractElement( s, ',', 1 , 0 );
+ pTrg = schema[i].cFieldName;
+ for( xbUInt32 j = 0; j < sFieldName.Len(); j++ )
+ *pTrg++ = sFieldName[j+1];
+ sDataType.ExtractElement( s, ',', 3, 0 );
+ schema[i].cType = sDataType[1];
+ sAttrib1.ExtractElement( s, ',', 4, 0 );
+ schema[i].iFieldLen = atoi( sAttrib1.Str());
+ sAttrib2.ExtractElement( s, ',', 5, 0 );
+ schema[i].iNoOfDecs = atoi( sAttrib2.Str());
+ llN = llN->GetNextNode();
+ }
+
+ // create the table
+ xbDbf * dbf = NULL;
+ #ifdef XB_DBF4_SUPPORT
+ dbf = new xbDbf4( xbase );
+ #elif defined (XB_DBF3_SUPPORT)
+ dbf = new xbDbf3( xbase );
+ #endif
+
+ if(( iRc = dbf->CreateTable( sTableName, "", schema, 0, XB_MULTI_USER )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+ free( schema );
+
+ ll.Clear();
+
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ if( sFieldName.Len() > 0 )
+ sMsg.Sprintf( "xbSql::SqlCreateTbl() Exception Caught. Error Stop = [%d] rc = [%d] table = [%s] field = [%s]", iErrorStop, iRc, sTableName.Str(), sFieldName.Str() );
+ else
+ sMsg.Sprintf( "xbSql::SqlCreateTbl() Exception Caught. Error Stop = [%d] rc = [%d] table = [%s]", iErrorStop, iRc, sTableName.Str() );
+
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ if( schema ) free( schema );
+ }
+
+ return iRc;
+}
+
+/***********************************************************************/
+} /* namespace */
+#endif /* XB_SQL_SUPPORT */
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/sql/xbdelete.cpp b/1Tdata/xbase/xbase64-4.1.4/src/sql/xbdelete.cpp
new file mode 100755
index 0000000..9bd4279
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/sql/xbdelete.cpp
@@ -0,0 +1,148 @@
+/* xbdelete.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+#include "xbase.h"
+
+#ifdef XB_SQL_SUPPORT
+
+namespace xb{
+
+
+/***********************************************************************/
+xbInt16 xbSql::SqlDelete( const xbString &sCmdLine ){
+
+ // expected format:
+ // DELETE FROM tablename.DBF [WHERE expression]
+
+
+ xbInt16 iRc = 0;
+ xbInt16 iRc2 = 0;
+ xbInt16 iErrorStop = 0;
+ xbString sTableName = "";
+ xbUInt32 ulPos = 0;
+ xbString sCmd = sCmdLine;
+ xbString sNode = "";
+ xbString sFilter;
+ xbInt16 iDelOpt = 0;
+
+ xbString sTable;
+ xbDbf * dbf = NULL;
+
+ try{
+
+// std::cout << "xbSql::SqlDelete( " << sCmdLine.Str() << " )\n";
+
+ sNode.ExtractElement( sCmd, ' ', 1, 0 );
+ sNode.Trim();
+ sNode.ToUpperCase();
+ if( sNode == "UNDELETE" )
+ iDelOpt = 1;
+
+ // pull off the action
+ sNode.ExtractElement( sCmd, ' ', 2, 0 );
+ sNode.Trim();
+ sNode.ToUpperCase();
+ if( sNode != "FROM" ){
+ iErrorStop = 100;
+ iRc = XB_SYNTAX_ERROR;
+ throw iRc;
+ }
+
+ // pull off the table name
+ sTable.ExtractElement( sCmd, ' ', 3, 0 );
+ sTable.Trim();
+
+ // pull off the "WHERE" statement if it exists
+ sNode.ExtractElement( sCmd, ' ', 4, 0 );
+ sNode.Trim();
+ sNode.ToUpperCase();
+ if( sNode == "WHERE" ){
+ ulPos = sCmd.Pos( "WHERE" );
+ sFilter = sCmd;
+ sFilter.Ltrunc( ulPos + 5 );
+ }
+
+ // if not open, attempt to open it
+ dbf = xbase->GetDbfPtr( sTable );
+ if( !dbf ){
+ if(( iRc = xbase->OpenHighestVersion( sTable, "", &dbf )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ }
+ if( !dbf ){
+ iErrorStop = 120;
+ iRc = XB_DBF_FILE_NOT_OPEN;
+ throw iRc;
+ }
+
+ if( sFilter == "" ){
+ if(( iRc = dbf->DeleteAll( iDelOpt )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ } else {
+
+ xbFilter f( dbf );
+ if(( iRc = f.Set( sFilter )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+
+ iRc2 = f.GetFirstRecord( XB_ALL_RECS );
+ while( iRc2 == XB_NO_ERROR ){
+ if( iDelOpt == 0 ){
+ if( !dbf->RecordDeleted()){
+ if(( iRc = dbf->DeleteRecord()) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+ if(( iRc = dbf->Commit()) != XB_NO_ERROR ){
+ iErrorStop = 170;
+ throw iRc;
+ }
+ }
+
+ } else { // undelete
+ if( dbf->RecordDeleted()){
+ if(( iRc = dbf->UndeleteRecord()) != XB_NO_ERROR ){
+ iErrorStop = 180;
+ throw iRc;
+ }
+ if(( iRc = dbf->Commit()) != XB_NO_ERROR ){
+ iErrorStop = 190;
+ throw iRc;
+ }
+ }
+ }
+ iRc2 = f.GetNextRecord();
+ }
+ }
+ }
+
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbSql::SqlDelete() Exception Caught. Error Stop = [%d] rc = [%d] table = [%s]", iErrorStop, iRc, sTableName.Str() );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+
+ return iRc;
+}
+
+/***********************************************************************/
+} /* namespace */
+#endif /* XB_SQL_SUPPORT */
+
diff --git a/src/sql/xbdrpix.cpp b/1Tdata/xbase/xbase64-4.1.4/src/sql/xbdrpix.cpp
index 2815264..2815264 100755
--- a/src/sql/xbdrpix.cpp
+++ b/1Tdata/xbase/xbase64-4.1.4/src/sql/xbdrpix.cpp
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/sql/xbdrptbl.cpp b/1Tdata/xbase/xbase64-4.1.4/src/sql/xbdrptbl.cpp
new file mode 100755
index 0000000..ee3e325
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/sql/xbdrptbl.cpp
@@ -0,0 +1,129 @@
+/* xbdrptbl.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+#include "xbase.h"
+
+#ifdef XB_SQL_SUPPORT
+
+namespace xb{
+
+
+/***********************************************************************/
+xbInt16 xbSql::SqlDropTable( const xbString &sCmdLine ){
+
+ // std::cout << "DROP TABLE [" << sCmdLine << "]\n";
+ // expected format:
+ // DROP TABLE [IF EXISTS] tablename.dbf
+
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ xbString sTableName = "";
+ xbUInt32 ulPos = 0;
+ xbString sCmd = sCmdLine;
+ xbString sNode = "";
+ xbBool bIfExists = xbFalse;
+ xbDbf * dbf = NULL;
+
+ try{
+
+ // drop off the first node "DROP"
+ ulPos = sCmd.Pos( ' ' );
+ sCmd.Ltrunc( ulPos );
+ sCmd.Ltrim();
+
+ // drop off the second node "TABLE"
+ ulPos = sCmd.Pos( ' ' );
+ sCmd.Ltrunc( ulPos );
+ sCmd.Ltrim();
+
+ sNode.ExtractElement( sCmd, ' ', 1, 0 );
+ sNode.Trim();
+ sNode.ToUpperCase();
+
+ if( sNode == "IF" ){
+ ulPos = sCmd.Pos( ' ' );
+ sCmd.Ltrunc( ulPos );
+ sCmd.Ltrim();
+ sNode.ExtractElement( sCmd, ' ', 1, 0 );
+ sNode.Trim();
+ sNode.ToUpperCase();
+ if( sNode != "EXISTS" ){
+ iErrorStop = 100;
+ iRc = XB_SYNTAX_ERROR;
+ throw iRc;
+ } else {
+ ulPos = sCmd.Pos( ' ' );
+ sCmd.Ltrunc( ulPos );
+ sCmd.Ltrim();
+ bIfExists = xbTrue;
+ }
+ }
+
+ // get the table name
+ sTableName.ExtractElement( sCmd, ' ', 1, 0 );
+ sTableName.Trim();
+
+ xbFile fDbf( xbase );
+ fDbf.SetFileName( sTableName );
+
+ if( bIfExists && ! fDbf.FileExists())
+ return XB_NO_ERROR;
+
+ // if not open, attempt to open it
+ dbf = xbase->GetDbfPtr( fDbf.GetFqFileName());
+
+ if( !dbf ){
+
+ //dbf = xbase->Open( sTableName, iRc );
+ iRc = xbase->OpenHighestVersion( sTableName, "", &dbf );
+ if( iRc != XB_NO_ERROR ){
+ if( iRc == XB_FILE_NOT_FOUND && bIfExists ){
+ return XB_NO_ERROR;
+ } else {
+ iErrorStop = 110;
+ throw iRc;
+ }
+ }
+ }
+ if( dbf == NULL ){
+ iErrorStop = 120;
+ iRc = XB_OPEN_ERROR;
+ throw iRc;
+ }
+
+ if(( dbf->DeleteTable()) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+
+ delete dbf;
+ // dbf = NULL;
+ }
+
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbSql::SqlDropTable() Exception Caught. Error Stop = [%d] rc = [%d] table = [%s]", iErrorStop, iRc, sTableName.Str() );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+
+ return iRc;
+}
+
+/***********************************************************************/
+} /* namespace */
+#endif /* XB_SQL_SUPPORT */
+
diff --git a/src/sql/xbinsert.cpp b/1Tdata/xbase/xbase64-4.1.4/src/sql/xbinsert.cpp
index 835f9e6..835f9e6 100755
--- a/src/sql/xbinsert.cpp
+++ b/1Tdata/xbase/xbase64-4.1.4/src/sql/xbinsert.cpp
diff --git a/src/sql/xbselect.cpp b/1Tdata/xbase/xbase64-4.1.4/src/sql/xbselect.cpp
index 7f12e99..7f12e99 100755
--- a/src/sql/xbselect.cpp
+++ b/1Tdata/xbase/xbase64-4.1.4/src/sql/xbselect.cpp
diff --git a/src/sql/xbset.cpp b/1Tdata/xbase/xbase64-4.1.4/src/sql/xbset.cpp
index d0e8821..d0e8821 100755
--- a/src/sql/xbset.cpp
+++ b/1Tdata/xbase/xbase64-4.1.4/src/sql/xbset.cpp
diff --git a/src/sql/xbsql.cpp b/1Tdata/xbase/xbase64-4.1.4/src/sql/xbsql.cpp
index 12d3379..12d3379 100755
--- a/src/sql/xbsql.cpp
+++ b/1Tdata/xbase/xbase64-4.1.4/src/sql/xbsql.cpp
diff --git a/src/sql/xbstmt.cpp b/1Tdata/xbase/xbase64-4.1.4/src/sql/xbstmt.cpp
index 61c84fd..61c84fd 100755
--- a/src/sql/xbstmt.cpp
+++ b/1Tdata/xbase/xbase64-4.1.4/src/sql/xbstmt.cpp
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/tests/tstfuncs.cpp b/1Tdata/xbase/xbase64-4.1.4/src/tests/tstfuncs.cpp
new file mode 100755
index 0000000..377b199
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/tests/tstfuncs.cpp
@@ -0,0 +1,583 @@
+/* tstfuncs.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+time_t timer;
+
+xbDouble ChronTime();
+void InitTime();
+
+xbBool dblEquals( xbDouble a, xbDouble b, xbDouble epsilon );
+xbInt16 TestMethod( xbInt16 PrintOption, const char * title, const xbString &result, const char * expectedResult, size_t expectedLen );
+xbInt16 TestMethod( xbInt16 PrintOption, const char * title, char result, char expectedResult );
+xbInt16 TestMethod( xbInt16 PrintOption, const char * title, xbInt32 result, xbInt32 expectedResult );
+//xbInt16 TestMethod( xbInt16 PrintOption, const char * title, xbUInt32 result, xbUInt32 expectedResult );
+xbInt16 TestMethod( xbInt16 PrintOption, const char * title, xbUInt64 result, xbUInt64 expectedResult );
+xbInt16 TestMethod( xbInt16 PrintOption, const char * title, xbFloat result, xbFloat expectedResult );
+xbInt16 TestMethod( xbInt16 PrintOption, const char * title, xbDouble result, xbDouble expectedResult );
+xbInt16 TestMethod( xbInt16 PrintOption, const char * title, xbDouble result, xbDouble expectedResult, xbDouble dEpsilon );
+
+
+// xbInt16 FileCompare( xbXBase &x, xbInt16 iPo, const xbString &sFile1, const xbString &sFile2, const xbString &sSkipBytes );
+
+
+#ifdef XB_LOCKING_SUPORT
+xbInt16 SetCmd( xbXBase &x, const xbString &sFileName, const xbString &sCmd, const char cSrc, xbInt16 iPo );
+xbInt16 GetCmd( xbXBase &x, const xbString &sFileName, xbString &sCmd, const char cSrc, xbInt16 iPo );
+#endif
+
+#if defined( XB_DBF4_SUPPORT ) && defined( XB_MEMO_SUPPORT )
+
+xbInt16 TestDbt4Method( xbInt16 PrintOption, const char * title, xbMemo * m, xbUInt32 ulHdrNext, xbUInt32 ulBlockCnt, xbString sNodeChain );
+xbInt16 TestDbt4Method( xbInt16 PrintOption, const char * title, xbMemo * m, xbUInt32 ulHdrNext, xbUInt32 ulBlockCnt, xbString sNodeChain ){
+
+ xbUInt32 ulLastDataBlock = 0L;
+ xbUInt32 ulHdrNextBlock = 0L;
+ xbInt16 iRc = 0;
+
+ iRc = m->GetHdrNextBlock( ulHdrNextBlock );
+ if( iRc != XB_NO_ERROR ){
+ std::cout << std::endl << "[FAIL 1] " << title << std::endl;
+ std::cout << "Error [" << iRc << "] in GetHdrNextBlock" << std::endl;
+ return -1;
+ }
+
+ iRc = m->CalcLastDataBlock( ulLastDataBlock );
+ if( iRc != XB_NO_ERROR ){
+ std::cout << std::endl << "[FAIL 2] " << title << std::endl;
+ std::cout << "Error [" << iRc << "] in CalcLastDataBlock" << std::endl;
+ return -1;
+ }
+
+ if( ulHdrNext > 0 ){
+ if( ulHdrNextBlock != ulHdrNext ){
+ std::cout << std::endl << "[FAIL 3] " << title << std::endl;
+ std::cout << "Expected Header Next Block = [" << ulHdrNext << "] Actual = [" << ulHdrNextBlock << "]" << std::endl;
+ return -1;
+ }
+ if( PrintOption == 2 ){
+ xbString sMsg;
+ sMsg.Sprintf( "[PASS][%3.4f] %s Expected matches actual Len=[%ld] Data=[%lds]\n",
+ ChronTime(), title, ulHdrNextBlock, ulHdrNext );
+ std::cout << sMsg.Str();
+ // std::cout << "[PASS][" << ChronTime() << "] " << title << " Expected matches actual HdrBlock=[" << ulHdrNextBlock << "] Data=[" << ulHdrNext << "]" << std::endl;
+ } else if( PrintOption == 1 )
+ std::cout << "[PASS] " << title << std::endl;
+ }
+
+ if( ulBlockCnt > 0 ){
+ if( ulLastDataBlock != ulBlockCnt ){
+ std::cout << std::endl << "[FAIL 4] " << title << std::endl;
+ std::cout << "Expected Block Count = [" << ulBlockCnt << "] Actual = [" << ulLastDataBlock << "]" << std::endl;
+ return -1;
+ }
+ if( PrintOption == 2 ){
+ xbString sMsg;
+ sMsg.Sprintf( "[PASS][%3.4f] %s Expected matches actual Len=[%ld] Data=[%lds]\n",
+ ChronTime(), title, ulLastDataBlock, ulBlockCnt );
+ std::cout << sMsg.Str();
+ // std::cout << "[PASS][" << ChronTime() << "] " << title << " Expected matches actual LastBlock=[" << ulLastDataBlock << "] Data=[" << ulBlockCnt << "]" << std::endl;
+ } else if( PrintOption == 1 )
+ std::cout << "[PASS] " << title << std::endl;
+ }
+
+ #ifdef XB_DEBUG_SUPPORT
+ xbMemoDbt4 *m4 = (xbMemoDbt4 *) m;
+ if( sNodeChain != "-1" ){
+ xbUInt32 ulNode = ulHdrNextBlock;
+ xbUInt32 ulNextBlock;
+ xbUInt32 ulFreeBlockCnt;
+ xbString sActualNodeChain;
+
+ while( ulNode < ulLastDataBlock ){
+ iRc = m4->ReadFreeBlockHeader( ulNode, ulNextBlock, ulFreeBlockCnt );
+ if( iRc != XB_NO_ERROR ){
+ std::cout << std::endl << "[FAIL 5] " << title << std::endl;
+ std::cout << "Error [" << iRc << "] in CalcLastDataBlock" << std::endl;
+ return -1;
+ }
+ if( sActualNodeChain != "" )
+ sActualNodeChain += ",";
+ sActualNodeChain.Sprintf( "%s%ld,%ld,%ld", sActualNodeChain.Str(), ulNode, ulFreeBlockCnt, ulNextBlock );
+ ulNode = ulNextBlock;
+ }
+ if( sNodeChain != sActualNodeChain ){
+ std::cout << std::endl << "[FAIL 6] " << title << std::endl;
+ std::cout << "Expected Block Chain = [" << sNodeChain.Str() << "] Actual = [" << sActualNodeChain.Str() << "]" << std::endl;
+ return -1;
+ }
+ if( PrintOption == 2 ){
+ xbString sMsg;
+ sMsg.Sprintf( "[PASS][%3.4f] %s Expected matches actual Len=[%d] Data=[%s]\n", ChronTime(), title, sNodeChain.Str() );
+ std::cout << sMsg.Str();
+ //std::cout << "[PASS][" << ChronTime() << "] " << title << " Expected matches actual BlockChain=[" << sNodeChain.Str() << "]" << std::endl;
+ } else if( PrintOption == 1 )
+ std::cout << "[PASS] " << title << std::endl;
+ }
+ #endif // XB_DEBUG_SUPPORT"
+
+ return 0;
+}
+#endif
+
+
+
+xbInt16 TestMethod( xbInt16 PrintOption, const char * title, const xbString &sResult, const char * expectedResult, size_t expectedLen ){
+ xbInt16 rc = 0;
+
+ if( sResult == expectedResult && sResult.Len() == expectedLen ){
+ if( PrintOption == 2 ){
+ xbString sMsg;
+ sMsg.Sprintf( "[PASS][%3.4f] %s Expected matches actual Len=[%d] Data=[%s]\n", ChronTime(), title, expectedLen, expectedResult );
+ std::cout << sMsg.Str();
+ } else if( PrintOption == 1 ) {
+ std::cout << "[PASS] " << title << std::endl;
+ }
+ } else {
+ std::cout << std::endl << "[FAIL 1] " << title << std::endl;
+ std::cout << " Expected Len = [" << expectedLen << "] Expected Data = [" << expectedResult << "]" << std::endl;
+ std::cout << " Actual Len = [" << sResult.Len() << "] Actual Data = [" << sResult.Str() << "]" << std::endl;
+
+ if( sResult.Len() == expectedLen )
+ printf( "lengths match\n" );
+ else
+ printf( "lengths dont match\n" );
+
+ if( sResult == expectedResult )
+ printf( "result matches\n" );
+ else
+ printf( "result does not match\n" );
+
+ rc = -1;
+ }
+ return rc;
+}
+
+xbInt16 TestMethod( xbInt16 PrintOption, const char * title, char result, char expectedResult ){
+ xbInt16 rc = 0;
+ if( result == expectedResult ){
+ if( PrintOption == 2 ){
+ xbString sMsg;
+ sMsg.Sprintf( "[PASS][%3.4f] %s Expected matches actual Data=[%c]\n", ChronTime(), title, expectedResult );
+ std::cout << sMsg.Str();
+ // std::cout << "[PASS][" << ChronTime() << "] " << title << " Expected matches actual Data=[" << expectedResult << "]" << std::endl;
+ } else if( PrintOption == 1 )
+ std::cout << "[PASS] " << title << std::endl;
+ rc = 0;
+ } else {
+ std::cout << std::endl << "[FAIL 2] " << title << std::endl;
+ std::cout << " Expected Data = [" << expectedResult << "]" << std::endl;
+ std::cout << " Actual Data = [" << result << "]" << std::endl;
+ rc = -1;
+ }
+ return rc;
+}
+
+xbInt16 TestMethod( xbInt16 PrintOption, const char * title, xbInt32 result, xbInt32 expectedResult ){
+ xbInt16 rc = 0;
+ if( result == expectedResult ){
+ if( PrintOption == 2 ){
+ xbString sMsg;
+ sMsg.Sprintf( "[PASS][%3.4f] %s Expected matches actual Data=[%d]\n", ChronTime(), title, expectedResult );
+ std::cout << sMsg.Str();
+ // std::cout << "[PASS][" << ChronTime() << "] " << title << " Expected matches actual Data=[" << expectedResult << "]" << std::endl;
+ } else if( PrintOption == 1 )
+ std::cout << "[PASS] " << title << std::endl;
+ rc = 0;
+ } else {
+ std::cout << std::endl << "[FAIL 3] " << title << std::endl;
+ std::cout << " Expected Data = [" << expectedResult << "]" << std::endl;
+ std::cout << " Actual Data = [" << result << "]" << std::endl;
+ rc = -1;
+ }
+ return rc;
+}
+
+
+/*
+xbInt16 TestMethod( xbInt16 PrintOption, const char * title, xbUInt32 result, xbUInt32 expectedResult ){
+ xbInt16 rc = 0;
+ if( result == expectedResult ){
+ if( PrintOption == 2 )
+ std::cout << "[PASS][" << ChronTime() << "] " << title << " Expected matches actual Data=[" << expectedResult << "]" << std::endl;
+ else if( PrintOption == 1 )
+ std::cout << "[PASS] " << title << std::endl;
+ rc = 0;
+ } else {
+ std::cout << std::endl << "[FAIL 3] " << title << std::endl;
+ std::cout << " Expected Data = [" << expectedResult << "]" << std::endl;
+ std::cout << " Actual Data = [" << result << "]" << std::endl;
+ rc = -1;
+ }
+ return rc;
+}
+*/
+
+xbInt16 TestMethod( xbInt16 PrintOption, const char * title, xbUInt64 result, xbUInt64 expectedResult ){
+ xbInt16 rc = 0;
+ if( result == expectedResult ){
+ if( PrintOption == 2 ){
+ xbString sMsg;
+ sMsg.Sprintf( "[PASS][%f] %3.4s Expected matches actual Data=[%ld]\n", ChronTime(), title, expectedResult );
+ std::cout << sMsg.Str();
+ // std::cout << "[PASS][" << ChronTime() << "] " << title << " Expected matches actual Data=[" << expectedResult << "]" << std::endl;
+ } else if( PrintOption == 1 )
+ std::cout << "[PASS] " << title << std::endl;
+ rc = 0;
+ } else {
+ std::cout << std::endl << "[FAIL 4] " << title << std::endl;
+ std::cout << " Expected Data = [" << expectedResult << "]" << std::endl;
+ std::cout << " Actual Data = [" << result << "]" << std::endl;
+ rc = -1;
+ }
+ return rc;
+}
+
+xbInt16 TestMethod( xbInt16 PrintOption, const char * title, xbFloat result, xbFloat expectedResult ){
+ xbInt16 rc = 0;
+ if( result == expectedResult ){
+ if( PrintOption == 2 ){
+ xbString sMsg;
+ sMsg.Sprintf( "[PASS][%f] %3.4s Expected matches actual Data=[%f]\n", ChronTime(), title, expectedResult );
+ std::cout << sMsg.Str();
+ // std::cout << "[PASS][" << ChronTime() << "] " << title << " Expected matches actual Data=[" << expectedResult << "]" << std::endl;
+ } else if( PrintOption == 1 )
+ std::cout << "[PASS] " << title << std::endl;
+ rc = 0;
+ } else {
+ std::cout << std::endl << "[FAIL 5] " << title << std::endl;
+ std::cout << " Expected Data = [" << expectedResult << "]" << std::endl;
+ std::cout << " Actual Data = [" << result << "]" << std::endl;
+ rc = -1;
+ }
+ return rc;
+}
+
+xbInt16 TestMethod( xbInt16 PrintOption, const char * title, xbDouble result, xbDouble expectedResult ){
+ xbInt16 rc = 0;
+ if( result == expectedResult ){
+ // if( dblEquals( result, expectedResult ) == 0 ){
+ if( PrintOption == 2 ){
+ xbString sMsg;
+ sMsg.Sprintf( "[PASS][%3.4f] %s Expected matches actual Data=[%f]\n", ChronTime(), title, expectedResult );
+ std::cout << sMsg.Str();
+ //std::cout << "[PASS][" << ChronTime() << "] " << title << " Expected matches actual Data=[" << expectedResult << "]" << std::endl;
+ } else if( PrintOption == 1 )
+ std::cout << "[PASS] " << title << std::endl;
+ rc = 0;
+ } else {
+ std::cout << std::endl << "[FAIL 6] " << title << std::endl;
+ std::cout << " Expected Data = [" << expectedResult << "]" << std::endl;
+ std::cout << " Actual Data = [" << result << "]" << std::endl;
+ rc = -1;
+ }
+ return rc;
+}
+
+
+// next three routines used to do a compare on double values
+xbDouble dblMax( xbDouble a, xbDouble b ){
+ if( a > b )
+ return a;
+ else
+ return b;
+}
+xbDouble dblMin( xbDouble a, xbDouble b ){
+ if( a < b )
+ return a;
+ else
+ return b;
+}
+xbBool dblEquals( xbDouble a, xbDouble b, xbDouble epsilon = 0.0001 ){
+
+ // std::cout << "a=[" << a << "] b=[ " << b << "] dblmax [" << dblAbsMax( a, b ) << "] min [" << dblAbsMin( a, b ) << "]\n";
+ if( a < 0 && b >= 0 )
+ return xbFalse;
+ else if( a >= 0 && b < 0 )
+ return xbFalse;
+ if( (dblMax( a ,b ) - dblMin( a, b )) < epsilon )
+ return xbTrue;
+ else
+ {
+// std::cout << "no match a=[" << a << "] b=[" << b << "] dblmax [" << dblAbsMax( a, b ) << "] min [" << dblAbsMin( a, b ) << "]\n";
+ return xbFalse;
+ }
+}
+
+xbInt16 TestMethod( xbInt16 PrintOption, const char * title, xbDouble result, xbDouble expectedResult, xbDouble dEpsilon ){
+ xbInt16 rc;
+ if( dblEquals( result, expectedResult, dEpsilon ) == xbTrue ){
+ if( PrintOption == 2 ){
+ xbString sMsg;
+ sMsg.Sprintf( "[PASS][%3.4f] %s Expected matches actual Data=[%f]\n", ChronTime(), title, expectedResult );
+ std::cout << sMsg.Str();
+ //std::cout << "[PASS][" << ChronTime() << "] " << title << " Expected matches actual Data=[" << expectedResult << "]" << std::endl;
+ } else if( PrintOption == 1 )
+ std::cout << "[PASS] " << title << std::endl;
+ rc = 0;
+ } else {
+ std::cout << std::endl << "[FAIL 6] " << title << std::endl;
+ std::cout << " Expected Data = [" << expectedResult << "]" << std::endl;
+ std::cout << " Actual Data = [" << result << "]" << std::endl;
+ rc = -1;
+ }
+ return rc;
+}
+
+
+#ifdef XB_LOCKING_SUPPORT
+
+xbInt16 GetCmd( xbXBase &x, const xbString &sFileName, xbString &sCmd, const char cSrc, xbInt16 iPo ){
+ xbInt16 iTryCnt = 0;
+ xbInt16 iMaxTries = 10;
+ char cInBuf[256];
+ FILE *f;
+ xbBool bDone = xbFalse;
+ xbString sMsg;
+
+ while( !bDone && iTryCnt < iMaxTries ){
+
+ #ifdef HAVE__FSOPEN_F
+ // 0x40 is SH_DENYNO or _SH_DENYNO
+ if(( f = _fsopen( sFileName.Str(), "r", 0x40 )) == NULL){
+ sMsg.Sprintf( "GetCmd _fsopen() error opening [%s]", sFileName.Str() );
+ x.WriteLogMessage( sMsg );
+ std::cout << sMsg.Str() << "\n";
+ x.xbSleep( 250 );
+ iTryCnt++;
+ }
+
+ #else
+
+ if(( f = fopen( sFileName.Str(), "r" )) == NULL ){
+ sMsg.Sprintf( "GetCmd fopen() error opening [%s]", sFileName.Str() );
+ x.WriteLogMessage( sMsg );
+ std::cout << sMsg.Str() << "\n";
+ x.xbSleep( 250 );
+ iTryCnt++;
+ }
+ #endif
+
+ else {
+ memset( cInBuf, 0x00, 256 );
+ fgets( cInBuf, 256, f );
+ fclose( f );
+ sCmd = cInBuf;
+ if( sCmd != "" )
+ bDone = xbTrue;
+ else{
+ x.xbSleep( 250 );
+ }
+ }
+ }
+
+ #ifdef XB_LOGGING_SUPPORT
+ if( iPo > 0 ){
+ sMsg.Sprintf( "[%c] GetCmd [%s]", cSrc, sCmd.Str());
+ x.WriteLogMessage( sMsg );
+ x.FlushLog();
+ }
+ #endif
+
+ if( iTryCnt >= iMaxTries )
+ return -1;
+ else
+ return 0;
+}
+
+xbInt16 SetCmd( xbXBase &x, const xbString &sFileName, const xbString &sCmd, const char cSrc, xbInt16 iPo ){
+
+ xbInt16 iTryCnt = 0;
+ FILE *f;
+ xbBool bDone = xbFalse;
+
+ #ifdef XB_LOGGING_SUPPORT
+ if( iPo > 0 ){
+ xbString sMsg;
+ sMsg.Sprintf( "[%c] SetCmd [%s] FileName [%s]", cSrc, sCmd.Str(), sFileName.Str());
+ x.WriteLogMessage( sMsg );
+ x.FlushLog();
+ }
+ #endif
+
+ while( !bDone && iTryCnt < 10 ){
+
+ #ifdef HAVE__FSOPEN_F
+ // 0x40 is SH_DENYNO or _SH_DENYNO
+ if(( f = _fsopen( sFileName.Str(), "w", 0x40 )) == NULL){
+ x.xbSleep( 250 );
+ iTryCnt++;
+ }
+
+ #else
+ if(( f = fopen( sFileName.Str(), "w" )) == NULL ){
+ x.xbSleep( 250 );
+ iTryCnt++;
+ }
+ #endif
+
+ else {
+ fputs( sCmd.Str(), f );
+ fflush( f );
+ fclose( f );
+ bDone = xbTrue;
+ }
+ }
+ if( iTryCnt == 10 )
+ return -1;
+ else{
+ x.xbSleep( 250 );
+ return 0;
+ }
+}
+
+
+
+#endif
+void InitTime(){
+ time( &timer );
+}
+
+
+xbDouble ChronTime(){
+ time_t tWork = timer;
+ time( &timer );
+ return difftime( timer, tWork );
+
+}
+
+
+/*
+xbInt16 FileCompare( xbXBase &x, xbInt16 iPo, const xbString &sFile1, const xbString &sFile2, const xbString &sSkipBytes ){
+
+
+// iPo print option
+// sFile1 - File 1
+// sFile2 - File 2
+// sSkipBytes - comma separated list of bytes to skip the compare on
+
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ xbInt16 iErrorCnt = 0;
+ xbFile f1( &x );
+ xbFile f2( &x );
+ xbString sMsg;
+ char c1;
+ char c2;
+
+ if( iPo > 0 ){
+ std::cout << "FileCompare\n";
+ std::cout << "Skip bytes = " << sSkipBytes.Str() << std::endl;
+ std::cout << sFile1.Str() << std::endl;
+ std::cout << sFile2.Str() << std::endl;
+ }
+
+ xbLinkListOrd<xbInt32> llO;
+ llO.SetDupKeys( 0 );
+ if( sSkipBytes.Len() > 0 ){
+ xbString sNode;
+ xbUInt32 iCommaCnt = sSkipBytes.CountChar( ',' );
+ for( xbUInt32 i = 0; i < (iCommaCnt+1); i++ ){
+ sNode.ExtractElement( sSkipBytes, ',', i+1, 0 );
+ //std::cout << "Adding key = " << atol( sNode.Str()) << std::endl;
+ llO.InsertKey( atol( sNode.Str()));
+ }
+ }
+
+ xbInt32 iPos = 0;
+ try{
+
+ if(( iRc = f1.xbFopen( "r", sFile1, XB_SINGLE_USER )) != XB_NO_ERROR ){
+ iErrorStop = 10;
+ iErrorCnt++;
+ throw iRc;
+ }
+
+ if(( iRc = f2.xbFopen( "r", sFile2, XB_SINGLE_USER )) != XB_NO_ERROR ){
+ iErrorStop = 20;
+ iErrorCnt++;
+ throw iRc;
+ }
+
+ xbUInt64 uiFs1;
+ xbUInt64 uiFs2;
+
+ if(( iRc = f1.GetFileSize( uiFs1 )) != XB_NO_ERROR ){
+ iErrorStop = 30;
+ iErrorCnt++;
+ throw iRc;
+ }
+
+ if(( iRc = f2.GetFileSize( uiFs2 )) != XB_NO_ERROR ){
+ iErrorStop = 40;
+ iErrorCnt++;
+ throw iRc;
+ }
+
+ // std::cout << "file size " << uiFs1 << " " << uiFs2 << "\n";
+
+ f1.xbRewind();
+ f2.xbRewind();
+
+ while( !f1.xbFeof() && !f2.xbFeof()){
+ f1.xbFgetc( c1 );
+ f2.xbFgetc( c2 );
+ if( c1 != c2 ){
+ if( !llO.KeyExists( iPos )){
+ iErrorCnt++;
+ if( iPo > 0 ){
+ sMsg.Sprintf( "Diff %ld %x %x\n", iPos, c1, c2 );
+ std::cout << sMsg.Str();
+ }
+ }
+ }
+ iPos++;
+ }
+ }
+
+ catch( xbInt16 ){
+ if( iPo > 0 ){
+ std::cout << "File Compare Error Count = " << iErrorCnt << std::endl;
+
+ switch( iErrorStop ){
+ case 10:
+ std::cout << "Error opening file = " << sFile1.Str() << std::endl;
+ break;
+ case 20:
+ std::cout << "Error opening file = " << sFile2.Str() << std::endl;
+ break;
+ case 30:
+ std::cout << "GetFileSize() error " << sFile1.Str() << std::endl;
+ break;
+ case 40:
+ std::cout << "GetFileSize() error " << sFile2.Str() << std::endl;
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ if( f1.FileIsOpen() )
+ f1.xbFclose();
+ if( f1.FileIsOpen() )
+ f1.xbFclose();
+
+ return iRc;
+}
+*/
+
+
+
diff --git a/src/tests/xb_test_bcd.cpp b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_bcd.cpp
index f735935..f735935 100755
--- a/src/tests/xb_test_bcd.cpp
+++ b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_bcd.cpp
diff --git a/src/tests/xb_test_blockread.cpp b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_blockread.cpp
index ff55d23..ff55d23 100755
--- a/src/tests/xb_test_blockread.cpp
+++ b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_blockread.cpp
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_date.cpp b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_date.cpp
new file mode 100755
index 0000000..0efe102
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_date.cpp
@@ -0,0 +1,214 @@
+/* xb_test_date.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+// This program tests the date class xbDate
+
+// usage: xb_test_date QUITE|NORMAL|VERBOSE
+
+
+#include "xbase.h"
+
+using namespace xb;
+
+#include "tstfuncs.cpp"
+
+
+int main( int argCnt, char **av )
+{
+ int iRc = 0;
+ xbInt16 po = 1; /* print option */
+ /* 0 - QUIET */
+ /* 1 - NORMAL */
+ /* 2 - VERBOSE */
+
+ if( argCnt > 1 ) {
+ if( av[1][0] == 'Q' )
+ po = 0;
+ else if( av[1][0] == 'V' )
+ po = 2;
+ }
+
+ xbXBase x;
+ #ifdef XB_LOGGING_SUPPORT
+ x.SetLogDirectory( PROJECT_LOG_DIR );
+ x.EnableMsgLogging();
+ if( po ){
+ std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
+ }
+ xbString sMsg;
+ sMsg.Sprintf( "Program [%s] initializing...", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif
+ InitTime();
+
+ xbDate d1;
+#ifdef XB_DEBUG_SUPPORT
+ if( po > 0 )
+ d1.DumpDateTables();
+#endif
+
+ xbDate d2( "19890209" );
+ xbString s3 = "20120709";
+ xbDate d3( s3 );
+ xbString s4;
+ xbString sFmt = "";
+ xbString sOutDate;
+ xbString s;
+
+ iRc += TestMethod( po, "FormatDate( '', sOutDate ) (sys default format)", d3.FormatDate( sFmt, sOutDate ), 0 );
+ iRc += TestMethod( po, "FormatDate( '', sOutDate ) (sys default format)", sOutDate, "07/09/12", 8 );
+
+
+ iRc += TestMethod( po, "CenturyOf()" , d3.CenturyOf(), 20 );
+ iRc += TestMethod( po, "YearOf()", d3.YearOf(), 2012 );
+ iRc += TestMethod( po, "MonthOf()", d3.MonthOf(), 7 );
+
+ iRc += TestMethod( po, "DayOf( XB_FMT_DAY )", d3.DayOf( XB_FMT_WEEK ), 2 );
+ iRc += TestMethod( po, "DayOf( XB_FMT_MONTH )", d3.DayOf( XB_FMT_MONTH ), 9 );
+ iRc += TestMethod( po, "DayOf( XB_FMT_YEAR )", d3.DayOf( XB_FMT_YEAR ), 191 );
+
+ iRc += TestMethod( po, "DateIsValid( '12345678' )", d3.DateIsValid( "12345678" ), 0 );
+ iRc += TestMethod( po, "d3.DateIsValid( '20120708' )", d3.DateIsValid( "20120708" ), 1 );
+ iRc += TestMethod( po, "d3.IsLeapYear()", d3.IsLeapYear(), 1 );
+ iRc += TestMethod( po, "d2.IsLeapYear()", d2.IsLeapYear(), 0 );
+
+ d1.Set( "20010102" );
+ iRc += TestMethod( po, "d1.Set('20010102')", d1.Str(), "20010102", 8 );
+
+ iRc += TestMethod( po, "d1.CalcRollingCenturyForYear(10)", d1.CalcRollingCenturyForYear( 10 ), 20 );
+ iRc += TestMethod( po, "d1.JulianDays()", d1.JulianDays(), 2451912 );
+ iRc += TestMethod( po, "d1.Set( '20140709' )", d1.Set( "20140709" ) , 0 );
+
+ d1.CharDayOf( s );
+ iRc += TestMethod( po, "d1.CharDayOf(s)", s, "Wednesday", 9 );
+
+ d1.CharMonthOf( s );
+ iRc += TestMethod( po, "d1.CharMonthOf()", s, "July", 4 );
+
+ iRc += TestMethod( po, "d1.JulToDate8( 2451913 )", d1.JulToDate8( 2451912 ), 0 );
+ iRc += TestMethod( po, "d1.JulToDate8( 2451913 )", d1.Str(), "20010102", 8 );
+ iRc += TestMethod( po, "d1.LastDayOfMonth()", d1.LastDayOfMonth(), 0 );
+ iRc += TestMethod( po, "d1.LastDayOfMonth()", d1.Str(), "20010131", 8 );
+
+ iRc += TestMethod( po, "d1.CTOD( '12/01/02' )", d1.CTOD( "12/01/02" ), 0 );
+ iRc += TestMethod( po, "d1.CTOD( '12/01/02' )", d1.Str(), "20021201", 8 );
+
+ xbString s1, s2;
+ s1 = "MM-DD-YY";
+ d1 = "20130402";
+ iRc+= TestMethod( po, "d1.FormatDate( s1, sOutDate )", d1.FormatDate( s1, sOutDate ), 0 );
+ iRc+= TestMethod( po, "d1.FormatDate( s1, sOutDate )", sOutDate, "04-02-13", 8 );
+
+ d1 = "20120203";
+ iRc += TestMethod( po, "d1=20120203", d1.Str(), "20120203", 8 );
+
+ s1 = "20130405";
+ d1 = s1;
+ iRc += TestMethod( po, "d1=s1", d1.Str(), "20130405", 8 );
+
+ d2 = d1;
+ iRc += TestMethod( po, "d2=d1", d2.Str(), "20130405", 8 );
+
+ d2+=5;
+ iRc += TestMethod( po, "d2+=5", d2.Str(), "20130410", 8 );
+
+ d2-=7;
+ iRc += TestMethod( po, "d2-=5", d2.Str(), "20130403", 8 );
+
+ d2++;
+ iRc += TestMethod( po, "d2++", d2.Str(), "20130404", 8 );
+
+ d2--;
+ iRc+= TestMethod( po, "d2--", d2.Str(), "20130403", 8 );
+ iRc+= TestMethod( po, "d2-d1", d1-d2, 2 );
+ iRc+= TestMethod( po, "d1+2", d1+2, "20130407", 8 );
+ iRc+= TestMethod( po, "d1-5", d1-5, "20130402", 8 );
+
+ //d1.Dump( "d1" );
+ //d2.Dump( "d2" );
+
+ iRc+= TestMethod( po, "d1==d2", d1==d2, 0 );
+ d2 = d1;
+ iRc+= TestMethod( po, "d1==d2", d1==d2, 1 );
+ iRc+= TestMethod( po, "d1>=d2", d1>=d2, 1 );
+ iRc+= TestMethod( po, "d1<=d2", d1<=d2, 1 );
+ iRc+= TestMethod( po, "d1!=d2", d1!=d2, 0 );
+ d2++;
+ iRc+= TestMethod( po, "d1!=d2", d1!=d2, 1 );
+
+ iRc+= TestMethod( po, "d1>d2", d1>d2, 0 );
+ iRc+= TestMethod( po, "d1>=d2", d1>=d2, 0 );
+ iRc+= TestMethod( po, "d1<d2", d1<d2, 1 );
+ iRc+= TestMethod( po, "d1<=d2", d1<=d2, 1 );
+
+ d2-=2;
+ iRc+= TestMethod( po, "d1>d2", d1>d2, 1 );
+ iRc+= TestMethod( po, "d1>=d2", d1>=d2, 1 );
+ iRc+= TestMethod( po, "d1<d2", d1<d2, 0 );
+ iRc+= TestMethod( po, "d1<=d2", d1<=d2, 0 );
+ iRc+= TestMethod( po, "d1-d2", d1-d2, 1 );
+
+
+ // null date testing follows
+ iRc+= TestMethod( po, "IsNull", d1.IsNull(), xbFalse );
+ xbDate dN;
+ iRc+= TestMethod( po, "IsNull", dN.IsNull(), xbTrue );
+
+ xbDate dtNull1;
+ xbDate dtNull2;
+
+ iRc+= TestMethod( po, "dtNull1==dtNull2", dtNull1 == dtNull2, 1 );
+ iRc+= TestMethod( po, "dtNull1!=dtNull2", dtNull1 != dtNull2, 0 );
+
+ iRc+= TestMethod( po, "dtNull1 < d2", dtNull1 < d2, 1 );
+ iRc+= TestMethod( po, "dtNull1 > d2", dtNull1 > d2, 0 );
+ iRc+= TestMethod( po, "dtNull1 <= d2", dtNull1 <= d2, 1 );
+ iRc+= TestMethod( po, "dtNull1 >= d2", dtNull1 >= d2, 0 );
+
+ iRc+= TestMethod( po, "d2 < dtNull1", d2 < dtNull1, 0 );
+ iRc+= TestMethod( po, "d2 > dtNull1", d2 > dtNull1, 1 );
+ iRc+= TestMethod( po, "d2 <= dtNull1", d2 <= dtNull1, 0 );
+ iRc+= TestMethod( po, "d2 >= dtNull1", d2 >= dtNull1, 1 );
+
+
+/*
+ xbDate d4( "20171015" );
+ std::cout << "day of [" << d4.Str() << "][" << d4.DayOf( XB_FMT_WEEK ) << "]\n";
+ d4++;
+ std::cout << "day of [" << d4.Str() << "][" << d4.DayOf( XB_FMT_WEEK ) << "]\n";
+ d4++;
+ std::cout << "day of [" << d4.Str() << "][" << d4.DayOf( XB_FMT_WEEK ) << "]\n";
+ d4++;
+ std::cout << "day of [" << d4.Str() << "][" << d4.DayOf( XB_FMT_WEEK ) << "]\n";
+ d4++;
+ std::cout << "day of [" << d4.Str() << "][" << d4.DayOf( XB_FMT_WEEK ) << "]\n";
+ d4++;
+ std::cout << "day of [" << d4.Str() << "][" << d4.DayOf( XB_FMT_WEEK ) << "]\n";
+ d4++;
+ std::cout << "day of [" << d4.Str() << "][" << d4.DayOf( XB_FMT_WEEK ) << "]\n";
+ d4++;
+ std::cout << "day of [" << d4.Str() << "][" << d4.DayOf( XB_FMT_WEEK ) << "]\n";
+*/
+
+ if( po > 0 || iRc < 0 )
+ fprintf( stdout, "Total Errors = %d\n", iRc * -1 );
+
+#ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], iRc * -1 );
+ x.WriteLogMessage( sMsg );
+#endif
+
+ return iRc;
+}
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_dbf_v3_memos.cpp b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_dbf_v3_memos.cpp
new file mode 100755
index 0000000..7940c35
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_dbf_v3_memos.cpp
@@ -0,0 +1,259 @@
+/* xb_test_xbdbf_v3_memos.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+// This program tests the version III memo field logic
+
+// usage: xb_test_dbf_v3_memos QUITE|NORMAL|VERBOSE
+
+
+#include "xbase.h"
+
+using namespace xb;
+
+#include "tstfuncs.cpp"
+
+
+int main( int argCnt, char **av )
+{
+ int rc = 0;
+ int rc2 = 0;
+ int po = 1; /* print option */
+ /* 0 - QUIET */
+ /* 1 - NORMAL */
+ /* 2 - VERBOSE */
+
+
+ if( argCnt > 1 ) {
+ if( av[1][0] == 'Q' )
+ po = 0;
+ else if( av[1][0] == 'V' )
+ po = 2;
+ }
+
+
+ xbSchema MyV3Record[] =
+ {
+ { "RECID", XB_NUMERIC_FLD, 8, 0 },
+ { "MEMOFLD1", XB_MEMO_FLD, 10, 0 },
+ { "MEMOFLD2", XB_MEMO_FLD, 10, 0 },
+ { "",0,0,0 }
+ };
+
+
+ xbXBase x;
+
+ #ifdef XB_LOGGING_SUPPORT
+ x.SetLogDirectory( PROJECT_LOG_DIR );
+ x.EnableMsgLogging();
+ if( po ){
+ std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
+ }
+ xbString sMsg;
+ sMsg.Sprintf( "Program [%s] initializing...", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ x.SetDataDirectory( PROJECT_DATA_DIR );
+
+ #ifdef XB_LOCKING_SUPPORT
+ x.DisableDefaultAutoLock();
+ #endif // XB_LOCKING_SUPPORT
+
+ InitTime();
+
+ if( po > 0 )
+ std::cout << "Default Data Directory is [" << x.GetDataDirectory().Str() << "]" << std::endl;
+
+ xbDbf3 V3Dbf( &x ); /* version 3 dbf file */
+
+ rc2 = V3Dbf.CreateTable( "TestV3_memos.DBF", "TestV3", MyV3Record, XB_OVERLAY, XB_MULTI_USER );
+ rc += TestMethod( po, "CreateTable()", (xbInt32) rc2, XB_NO_ERROR );
+
+
+ if( rc2 )
+ x.DisplayError( rc2 );
+ else{
+
+ xbInt16 fldRecId = V3Dbf.GetFieldNo( "RECID" );
+ xbInt16 fldMemo1 = V3Dbf.GetFieldNo( "MEMOFLD1" );
+ xbInt16 fldMemo2 = V3Dbf.GetFieldNo( "MEMOFLD2" );
+ xbString sData;
+
+ // Record 1
+ rc += TestMethod( po, "BlankRecord()", V3Dbf.BlankRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "PutField()", V3Dbf.PutField( fldRecId, "1" ), XB_NO_ERROR );
+ sData = "Memo data";
+ rc += TestMethod( po, "UpdateMemoField()", V3Dbf.UpdateMemoField( fldMemo1, sData ), XB_NO_ERROR );
+
+ sData = "Some other memo data";
+ rc += TestMethod( po, "UpdateMemoField()", V3Dbf.UpdateMemoField( fldMemo2, sData ), XB_NO_ERROR );
+ rc += TestMethod( po, "AppendRecord()", V3Dbf.AppendRecord(), XB_NO_ERROR );
+
+ // Record 2
+ rc += TestMethod( po, "BlankRecord()", V3Dbf.BlankRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "PutField()", V3Dbf.PutField( fldRecId, "2" ), XB_NO_ERROR );
+ sData = "Memo data Rec 2 ..[";
+ sData.PadRight( 'Z', 1036 );
+ sData += ']';
+ rc += TestMethod( po, "UpdateMemoField()", V3Dbf.UpdateMemoField( fldMemo1, sData ), XB_NO_ERROR );
+ sData = "Some other memo data Rec 2 ... [";
+ sData.PadRight( 'W', 1555 );
+ sData += ']';
+ rc += TestMethod( po, "UpdateMemoField()", V3Dbf.UpdateMemoField( fldMemo2, sData ), XB_NO_ERROR );
+ rc += TestMethod( po, "AppendRecord()", V3Dbf.AppendRecord(), XB_NO_ERROR );
+
+ // Check memo header file
+ xbUInt32 ulNextBlock;
+ xbMemo *Memo = V3Dbf.GetMemoPtr();
+ rc += TestMethod( po, "GetHdrNextBlock()", Memo->GetHdrNextBlock( ulNextBlock ), XB_NO_ERROR );
+ rc += TestMethod( po, "GetHdrNextBlock()", (xbInt32) ulNextBlock, 10 );
+
+
+ // Zap a table with memo fields
+ rc += TestMethod( po, "Zap(0)", V3Dbf.Zap(), XB_NO_ERROR );
+ xbUInt32 ulRecCnt = 0;
+ rc += TestMethod( po, "GetRecCount()", V3Dbf.GetRecordCnt( ulRecCnt ), XB_NO_ERROR );
+ rc += TestMethod( po, "GetRecCount() b", (xbInt32) ulRecCnt, 0 );
+ Memo = V3Dbf.GetMemoPtr();
+ rc += TestMethod( po, "GetHdrNextBlock()", Memo->GetHdrNextBlock( ulNextBlock ), XB_NO_ERROR );
+ rc += TestMethod( po, "GetHdrNextBlock()", (xbInt32) ulNextBlock, 1 );
+
+
+
+ // Add records back into the table
+ // Record 1
+ rc += TestMethod( po, "BlankRecord()", V3Dbf.BlankRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "PutField()", V3Dbf.PutField( fldRecId, "1" ), XB_NO_ERROR );
+ sData = "Memo data rec 1 memo 1";
+ rc += TestMethod( po, "UpdateMemoField()", V3Dbf.UpdateMemoField( fldMemo1, sData ), XB_NO_ERROR );
+
+ sData = "Memo data rec 1 memo 2";
+ rc += TestMethod( po, "UpdateMemoField()", V3Dbf.UpdateMemoField( fldMemo2, sData ), XB_NO_ERROR );
+ rc += TestMethod( po, "AppendRecord()", V3Dbf.AppendRecord(), XB_NO_ERROR );
+
+ // Record 2
+ rc += TestMethod( po, "BlankRecord()", V3Dbf.BlankRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "PutField()", V3Dbf.PutField( fldRecId, "2" ), XB_NO_ERROR );
+ sData = "Memo data Rec 2 memo 1..[";
+ sData.PadRight( 'Z', 1036 );
+ sData += ']';
+ rc += TestMethod( po, "UpdateMemoField()", V3Dbf.UpdateMemoField( fldMemo1, sData ), XB_NO_ERROR );
+ sData = "Some other memo data Rec 2 memo 2 ... [";
+ sData.PadRight( 'W', 1555 );
+ sData += ']';
+ rc += TestMethod( po, "UpdateMemoField()", V3Dbf.UpdateMemoField( fldMemo2, sData ), XB_NO_ERROR );
+ rc += TestMethod( po, "AppendRecord()", V3Dbf.AppendRecord(), XB_NO_ERROR );
+
+ // Record 3
+ rc += TestMethod( po, "BlankRecord()", V3Dbf.BlankRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "PutField()", V3Dbf.PutField( fldRecId, "3" ), XB_NO_ERROR );
+ sData = "Memo data Rec 3 memo 1";
+ rc += TestMethod( po, "UpdateMemoField()", V3Dbf.UpdateMemoField( fldMemo1, sData ), XB_NO_ERROR );
+
+ sData = "Memo data Rec 3 memo 2";
+ rc += TestMethod( po, "UpdateMemoField()", V3Dbf.UpdateMemoField( fldMemo2, sData ), XB_NO_ERROR );
+ rc += TestMethod( po, "AppendRecord()", V3Dbf.AppendRecord(), XB_NO_ERROR );
+
+
+ // Record 4
+ rc += TestMethod( po, "BlankRecord()", V3Dbf.BlankRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "PutField()", V3Dbf.PutField( fldRecId, "4" ), XB_NO_ERROR );
+ sData = "Memo data Rec 4 memo 1";
+ rc += TestMethod( po, "UpdateMemoField()", V3Dbf.UpdateMemoField( fldMemo1, sData ), XB_NO_ERROR );
+ sData = "Memo data Rec 4 memo 2";
+ rc += TestMethod( po, "UpdateMemoField()", V3Dbf.UpdateMemoField( fldMemo2, sData ), XB_NO_ERROR );
+ rc += TestMethod( po, "AppendRecord()", V3Dbf.AppendRecord(), XB_NO_ERROR );
+
+
+ // Record 5
+ rc += TestMethod( po, "BlankRecord()", V3Dbf.BlankRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "PutField()", V3Dbf.PutField( fldRecId, "5" ), XB_NO_ERROR );
+ sData = "Memo data Rec 5 memo 1";
+ rc += TestMethod( po, "UpdateMemoField()", V3Dbf.UpdateMemoField( fldMemo1, sData ), XB_NO_ERROR );
+ sData = "Memo data Rec 5 memo 2";
+ rc += TestMethod( po, "UpdateMemoField()", V3Dbf.UpdateMemoField( fldMemo2, sData ), XB_NO_ERROR );
+ rc += TestMethod( po, "AppendRecord()", V3Dbf.AppendRecord(), XB_NO_ERROR );
+
+
+ // Record 6
+ rc += TestMethod( po, "BlankRecord()", V3Dbf.BlankRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "PutField()", V3Dbf.PutField( fldRecId, "6" ), XB_NO_ERROR );
+ sData = "Memo data Rec 6 memo 1";
+ rc += TestMethod( po, "UpdateMemoField()", V3Dbf.UpdateMemoField( fldMemo1, sData ), XB_NO_ERROR );
+ sData = "Memo data Rec 6 memo 2";
+ rc += TestMethod( po, "UpdateMemoField()", V3Dbf.UpdateMemoField( fldMemo2, sData ), XB_NO_ERROR );
+ rc += TestMethod( po, "AppendRecord()", V3Dbf.AppendRecord(), XB_NO_ERROR );
+
+
+ // Record 7
+ rc += TestMethod( po, "BlankRecord()", V3Dbf.BlankRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "PutField()", V3Dbf.PutField( fldRecId, "7" ), XB_NO_ERROR );
+ sData = "Memo data Rec 7 memo 1";
+ rc += TestMethod( po, "UpdateMemoField()", V3Dbf.UpdateMemoField( fldMemo1, sData ), XB_NO_ERROR );
+ sData = "Memo data Rec 7 memo 2";
+ rc += TestMethod( po, "UpdateMemoField()", V3Dbf.UpdateMemoField( fldMemo2, sData ), XB_NO_ERROR );
+ rc += TestMethod( po, "AppendRecord()", V3Dbf.AppendRecord(), XB_NO_ERROR );
+
+ // Flag 1, 3, 5 and 7 for deletion
+ rc += TestMethod( po, "GetRecord()", V3Dbf.GetRecord( 1 ), XB_NO_ERROR );
+ rc += TestMethod( po, "DeleteRecord()", V3Dbf.DeleteRecord(), XB_NO_ERROR );
+
+ rc += TestMethod( po, "GetRecord()", V3Dbf.GetRecord( 3 ), XB_NO_ERROR );
+ rc += TestMethod( po, "DeleteRecord()", V3Dbf.DeleteRecord(), XB_NO_ERROR );
+
+ rc += TestMethod( po, "GetRecord()", V3Dbf.GetRecord( 5 ), XB_NO_ERROR );
+ rc += TestMethod( po, "DeleteRecord()", V3Dbf.DeleteRecord(), XB_NO_ERROR );
+
+ rc += TestMethod( po, "GetRecord()", V3Dbf.GetRecord( 7 ), XB_NO_ERROR );
+ rc += TestMethod( po, "DeleteRecord()", V3Dbf.DeleteRecord(), XB_NO_ERROR );
+
+ rc += TestMethod( po, "Pack()", V3Dbf.Pack(), XB_NO_ERROR );
+
+ xbString sDir;
+ V3Dbf.GetFileDirPart( sDir );
+ xbString sDbfName;
+ xbString sDbtName;
+ sDbfName.Sprintf( "%snewV3nm.DBF", sDir.Str());
+ sDbtName.Sprintf( "%snewV3nm.DBT", sDir.Str());
+
+ //std::cout << "remove [" << sDbfName.Str() << "]\n";
+ //std::cout << "remove [" << sDbtName.Str() << "]\n";
+
+ V3Dbf.xbRemove( sDbfName );
+ V3Dbf.xbRemove( sDbtName );
+
+ x.DisplayTableList();
+
+ rc += TestMethod( po, "Rename()", V3Dbf.Rename( "newV3nm.DBF" ), XB_NO_ERROR );
+ x.DisplayTableList();
+
+
+ rc += TestMethod( po, "Close()", V3Dbf.Close(), XB_NO_ERROR );
+
+
+ }
+
+
+
+ if( po > 0 || rc < 0 )
+ fprintf( stdout, "Total Errors = %d\n", rc * -1 );
+
+#ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], rc * -1 );
+ x.WriteLogMessage( sMsg );
+#endif
+
+ return rc;
+}
diff --git a/src/tests/xb_test_dbf_v3_nomemos.cpp b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_dbf_v3_nomemos.cpp
index 2dfeb7e..2dfeb7e 100755
--- a/src/tests/xb_test_dbf_v3_nomemos.cpp
+++ b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_dbf_v3_nomemos.cpp
diff --git a/src/tests/xb_test_dbf_v4_memos.cpp b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_dbf_v4_memos.cpp
index 47a9053..47a9053 100755
--- a/src/tests/xb_test_dbf_v4_memos.cpp
+++ b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_dbf_v4_memos.cpp
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_dbf_v4_nomemos.cpp b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_dbf_v4_nomemos.cpp
new file mode 100755
index 0000000..dd4976d
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_dbf_v4_nomemos.cpp
@@ -0,0 +1,373 @@
+/* xb_test_xbdbf_v4_nomemos.cpp
+
+XBase Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+// This program tests the class xbXdbf
+
+// usage: xb_test_dbf_v4_nomemos QUITE|NORMAL|VERBOSE
+
+
+#include "xbase.h"
+
+using namespace xb;
+
+#include "tstfuncs.cpp"
+
+
+int main( int argCnt, char **av )
+{
+ int rc = 0;
+ int rc2 = 0;
+ int po = 1; /* print option */
+ /* 0 - QUIET */
+ /* 1 - NORMAL */
+ /* 2 - VERBOSE */
+
+ if( argCnt > 1 ) {
+ if( av[1][0] == 'Q' )
+ po = 0;
+ else if( av[1][0] == 'V' )
+ po = 2;
+ }
+
+ xbSchema MyV4Record[] =
+ {
+ { "FIRSTNAME", XB_CHAR_FLD, 15, 0 },
+ { "LASTNAME", XB_CHAR_FLD, 20, 0 },
+ { "MIDDLEINIT", XB_CHAR_FLD, 1, 0 },
+ { "BIRTHDATE", XB_DATE_FLD, 8, 0 },
+ { "STARTDATE", XB_DATE_FLD, 8, 0 },
+ { "AMOUNT", XB_NUMERIC_FLD, 9, 2 },
+ { "TESTNUM", XB_NUMERIC_FLD, 12, 4 },
+ { "SWITCH", XB_LOGICAL_FLD, 1, 0 },
+ { "ZIPCODE", XB_NUMERIC_FLD, 5, 0 },
+ { "DBLFLDTST", XB_FLOAT_FLD, 14, 4 },
+ { "",0,0,0 }
+ };
+
+ xbSchema MyV4ZipRecord[] =
+ {
+ { "ZIPCODE", XB_NUMERIC_FLD, 5, 0 },
+ { "CITY", XB_CHAR_FLD, 30, 0 },
+ { "STATE", XB_CHAR_FLD, 2, 0 },
+ { "",0,0,0 }
+ };
+
+
+ xbXBase x;
+
+ #ifdef XB_LOGGING_SUPPORT
+ x.SetLogDirectory( PROJECT_LOG_DIR );
+ x.EnableMsgLogging();
+ if( po ){
+ std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
+ }
+ xbString sMsg;
+ sMsg.Sprintf( "Program [%s] initializing...", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ x.SetDataDirectory( PROJECT_DATA_DIR );
+
+ #ifdef XB_LOCKING_SUPPORT
+ x.DisableDefaultAutoLock();
+ #endif // XB_LOCKING_SUPPORT
+
+ InitTime();
+
+ if( po > 0 )
+ std::cout << "Default Data Directory is [" << x.GetDataDirectory().Str() << "]" << std::endl;
+
+ xbDbf4 V4Dbf( &x ); // version 4 dbf file
+ rc2 = V4Dbf.CreateTable( "TestV4.DBF", "TestV4", MyV4Record, XB_OVERLAY, XB_MULTI_USER );
+ rc += TestMethod( po, "CreateTable()", (xbInt32) rc2, XB_NO_ERROR );
+ if( rc2 )
+ x.DisplayError( rc2 );
+
+ xbUInt64 ullFileSize;
+ rc2 = V4Dbf.GetFileSize( ullFileSize );
+
+ rc = TestMethod( po, "CheckTableSize", ullFileSize, (xbUInt64) 353 );
+
+ if( po == 2 ){
+ std::cout << "There should be one entry in the table list" << std::endl;
+ x.DisplayTableList();
+ }
+
+ xbDbf4 V4Dbf2( &x );
+
+ // next occurrence should error as a dup
+ x.WriteLogMessage( "Second create attempt" );
+ rc2 = V4Dbf2.CreateTable( "TestV4.DBF", "TestV4", MyV4Record, XB_DONTOVERLAY, XB_MULTI_USER );
+ rc += TestMethod( po, "CreateTable()", rc2, XB_FILE_EXISTS );
+ if( rc2 != XB_FILE_EXISTS ){
+ x.DisplayError( rc2 );
+ }
+
+ if( po == 2 ){
+ std::cout << "There should be one entry in the table list" << std::endl;
+ x.DisplayTableList();
+ }
+
+
+ rc += TestMethod( po, "BlankRecord()", V4Dbf.BlankRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "GetFieldNo()", V4Dbf.GetFieldNo("LASTNAME"), 1 );
+ rc += TestMethod( po, "GetFieldNo()", V4Dbf.GetFieldNo("MIDDLEINIT"), 2 );
+
+ xbBool bIsNull;
+ rc += TestMethod( po, "GetNullSts()", V4Dbf.GetNullSts( V4Dbf.GetFieldNo("LASTNAME"), bIsNull, 0 ), XB_NO_ERROR );
+ rc += TestMethod( po, "GetNullSts()", bIsNull, xbTrue );
+
+
+
+ xbInt16 fldLastName = V4Dbf.GetFieldNo( "LASTNAME" );
+ rc += TestMethod( po, "PutField()", V4Dbf.PutField( fldLastName, "NELSON" ), XB_NO_ERROR );
+
+ rc += TestMethod( po, "GetNullSts()", V4Dbf.GetNullSts( V4Dbf.GetFieldNo("LASTNAME"), bIsNull, 0 ), XB_NO_ERROR );
+ rc += TestMethod( po, "GetNullSts()", bIsNull, xbFalse );
+
+ rc += TestMethod( po, "GetNullSts()", V4Dbf.GetNullSts( V4Dbf.GetFieldNo("FIRSTNAME"), bIsNull, 0 ), XB_NO_ERROR );
+ rc += TestMethod( po, "GetNullSts()", bIsNull, xbTrue );
+
+
+ rc += TestMethod( po, "PutField()", V4Dbf.PutField( "FIRSTNAME", "WILLIE" ), XB_NO_ERROR );
+ rc += TestMethod( po, "PutField()", V4Dbf.PutField( "AMOUNT", "12.34" ), XB_NO_ERROR );
+ xbDate dt( "19500209" );
+ rc += TestMethod( po, "PutDateField()", V4Dbf.PutDateField( "BIRTHDATE", dt ), XB_NO_ERROR );
+ rc += TestMethod( po, "PutLongField()", V4Dbf.PutLongField( "ZIPCODE", 12345 ), XB_NO_ERROR );
+ rc += TestMethod( po, "PutLogicalField()", V4Dbf.PutLogicalField( "SWITCH", "Y" ), XB_NO_ERROR );
+ rc += TestMethod( po, "PutFloatField()", V4Dbf.PutFloatField( "TESTNUM", (xbFloat) 1234.5678 ), XB_NO_ERROR );
+ rc += TestMethod( po, "PutDoubleField()", V4Dbf.PutDoubleField( "DBLFLDTST", (xbDouble) 9876.5432 ), XB_NO_ERROR );
+ rc += TestMethod( po, "AppendRecord()", V4Dbf.AppendRecord(), XB_NO_ERROR );
+
+
+ xbString sf;
+ rc += TestMethod( po, "GetField()", V4Dbf.GetField( fldLastName, sf, 0 ), XB_NO_ERROR );
+ rc += TestMethod( po, "GetField()", sf, "NELSON ", 20 );
+ rc += TestMethod( po, "GetField()", V4Dbf.GetField( fldLastName, sf ), XB_NO_ERROR );
+ rc += TestMethod( po, "GetField()", sf, "NELSON ", 20 );
+ rc += TestMethod( po, "GetField()", V4Dbf.GetField( "LASTNAME", sf ), XB_NO_ERROR );
+ rc += TestMethod( po, "GetField()", sf, "NELSON ", 20 );
+ xbInt16 iNoOfDecimals;
+ rc += TestMethod( po, "GetFieldDecimal()", V4Dbf.GetFieldDecimal( "AMOUNT", iNoOfDecimals ), XB_NO_ERROR );
+ rc += TestMethod( po, "GetFieldDecimal()", iNoOfDecimals, 2 );
+
+ xbDouble d;
+ rc += TestMethod( po, "GetDoubleField()", V4Dbf.GetDoubleField( "DBLFLDTST", d ), XB_NO_ERROR );
+ rc += TestMethod( po, "GetDoubleField()-b", d, (xbDouble) 9876.5432 );
+
+ char FieldType;
+ rc += TestMethod( po, "GetFieldType()", V4Dbf.GetFieldType( "STARTDATE", FieldType ), XB_NO_ERROR );
+ rc += TestMethod( po, "GetFieldType()", FieldType , 'D' );
+
+ xbInt16 iFieldLen;
+ rc += TestMethod( po, "GetFieldLen()", V4Dbf.GetFieldLen( "STARTDATE", iFieldLen ), XB_NO_ERROR );
+ rc += TestMethod( po, "GetFieldLen()", iFieldLen, 8 );
+
+ xbInt16 fldAMT = V4Dbf.GetFieldNo( "AMOUNT" );
+ rc += TestMethod( po, "GetField()", V4Dbf.GetField( fldAMT, sf ), XB_NO_ERROR );
+ rc += TestMethod( po, "GetField()", sf, " 12.34", 9 );
+
+ xbInt32 lZip;
+ rc += TestMethod( po, "GetLongField()", V4Dbf.GetLongField( "ZIPCODE", lZip ), XB_NO_ERROR );
+ rc += TestMethod( po, "GetLongField()", lZip, 12345 );
+
+ xbString sSwitch;
+ rc += TestMethod( po, "GetLogicalField()", V4Dbf.GetLogicalField( "SWITCH", sSwitch ), XB_NO_ERROR );
+ rc += TestMethod( po, "GetLogicalField()", sSwitch, "Y", 1 );
+
+ xbFloat fNum;
+ rc += TestMethod( po, "GetFloatField()", V4Dbf.GetFloatField( "TESTNUM", fNum ), 0 );
+ rc += TestMethod( po, "GetFloatField()", fNum, (xbFloat) 1234.5678 );
+
+ // init a second record for more testing
+ rc += TestMethod( po, "BlankRecord()", V4Dbf.BlankRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "PutLogicalField()", V4Dbf.PutLogicalField( "SWITCH", xbTrue ), XB_NO_ERROR );
+ rc += TestMethod( po, "AppendRecord()", V4Dbf.AppendRecord(), XB_NO_ERROR );
+ xbBool bSwitch;
+ rc += TestMethod( po, "GetLogicalField()", V4Dbf.GetLogicalField( "SWITCH", bSwitch ), 0 );
+ rc += TestMethod( po, "GetLogicalField()", bSwitch, xbTrue );
+
+ // init a third record for more testing
+ rc += TestMethod( po, "BlankRecord()", V4Dbf.BlankRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "PutLogicalField()", V4Dbf.PutLogicalField( "SWITCH", xbFalse ), XB_NO_ERROR );
+ rc += TestMethod( po, "AppendRecord()", V4Dbf.AppendRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "GetLogicalField()", V4Dbf.GetLogicalField( "SWITCH", bSwitch ), 0 );
+ rc += TestMethod( po, "GetLogicalField()", bSwitch, xbFalse );
+
+ rc += TestMethod( po, "PutField()", V4Dbf.PutField( "TESTNUM", "12345678" ), XB_INVALID_DATA );
+ rc += TestMethod( po, "PutField()", V4Dbf.PutField( "TESTNUM", "1234567" ), XB_NO_ERROR );
+ rc += TestMethod( po, "PutField()", V4Dbf.PutField( "TESTNUM", "1234567.12345" ), XB_INVALID_DATA );
+ rc += TestMethod( po, "PutField()", V4Dbf.PutField( "TESTNUM", ".12345" ), XB_INVALID_DATA );
+ rc += TestMethod( po, "PutField()", V4Dbf.PutField( "TESTNUM", ".1234" ), XB_NO_ERROR );
+ rc += TestMethod( po, "PutField()", V4Dbf.PutField( "TESTNUM", "12345678.1234" ), XB_INVALID_DATA );
+ rc += TestMethod( po, "PutField()", V4Dbf.PutField( "TESTNUM", "1234567.1234" ), XB_NO_ERROR );
+
+ rc += TestMethod( po, "AppendRecord()", V4Dbf.AppendRecord(), XB_NO_ERROR );
+
+ rc += TestMethod( po, "GetFieldCnt()", V4Dbf.GetFieldCnt(), 10 );
+ rc += TestMethod( po, "GetTblAlias()", V4Dbf.GetTblAlias(), "TestV4", 6 );
+ rc += TestMethod( po, "GetDbfStatus()", V4Dbf.GetDbfStatus(), XB_OPEN );
+ rc += TestMethod( po, "GetCurRecNo()", (xbInt32) V4Dbf.GetCurRecNo(), 4 );
+ rc += TestMethod( po, "GetFirstRecord()", V4Dbf.GetFirstRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "GetCurRecNo()", (xbInt32) V4Dbf.GetCurRecNo(), 1 );
+ rc += TestMethod( po, "GetNextRecord()", V4Dbf.GetNextRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "GetCurRecNo()", (xbInt32) V4Dbf.GetCurRecNo(), 2 );
+ rc += TestMethod( po, "GetLastRecord()", V4Dbf.GetLastRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "GetCurRecNo()", (xbInt32) V4Dbf.GetCurRecNo(), 4 );
+ rc += TestMethod( po, "GetPrevRecord()", V4Dbf.GetPrevRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "GetCurRecNo()", (xbInt32) V4Dbf.GetCurRecNo(), 3 );
+ rc += TestMethod( po, "GetRecordLen()", (xbInt32) V4Dbf.GetRecordLen(), 94 );
+
+ char * p = V4Dbf.GetRecordBuf();
+ rc += TestMethod( po, "GetRecordBuf()", p[0], ' ' );
+
+ if( po == 2 ){
+ V4Dbf.DumpHeader( 3 );
+ V4Dbf.DumpRecord( 4 );
+ }
+
+ rc += TestMethod( po, "PutField()", V4Dbf.PutField( "LASTNAME", "CLINTON" ), XB_NO_ERROR );
+ rc += TestMethod( po, "PutRecord()", V4Dbf.PutRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "DeleteRecord()", V4Dbf.DeleteRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "UndeleteRecord()", V4Dbf.UndeleteRecord(), XB_NO_ERROR );
+ xbUInt32 ulRecCnt = 0;
+ rc += TestMethod( po, "GetRecordCnt()", V4Dbf.GetRecordCnt( ulRecCnt ), XB_NO_ERROR );
+ rc += TestMethod( po, "GetRecordCnt()", (xbInt32) ulRecCnt, 4 );
+ rc += TestMethod( po, "DeleteAllRecords()", V4Dbf.DeleteAllRecords(), XB_NO_ERROR );
+ rc += TestMethod( po, "UndeleteAllRecords()", V4Dbf.UndeleteAllRecords(), XB_NO_ERROR );
+ rc += TestMethod( po, "GetRecord()", V4Dbf.GetRecord( 2L ), XB_NO_ERROR );
+ rc += TestMethod( po, "DeleteRecord()", V4Dbf.DeleteRecord(), XB_NO_ERROR );
+
+ if( po == 2 ){
+ V4Dbf.DumpRecord( 4 );
+ }
+
+ xbDbf4 CopyDbf( &x );
+ rc += TestMethod( po, "CopyDbfStructure()", V4Dbf.CopyDbfStructure( &CopyDbf, "CopyStructureV4NoMemos", "CopyAliasV4NoMemos", XB_OVERLAY, XB_MULTI_USER ), XB_NO_ERROR );
+ rc += TestMethod( po, "CopyDbf.Close()", CopyDbf.Close(), XB_NO_ERROR );
+
+ if( po == 2 ){
+ std::cout << "There should be one entry in the table list" << std::endl;
+ x.DisplayTableList();
+ }
+
+ rc += TestMethod( po, "GetDbfStatus()", CopyDbf.GetDbfStatus(), XB_CLOSED );
+ rc += TestMethod( po, "Open()", CopyDbf.xbDbf::Open( "CopyStructureV4NoMemos.DBF", "CopyAliasV4NoMemos" ), XB_NO_ERROR );
+
+ if( po == 2 ){
+ std::cout << "There should be two entries in the table list" << std::endl;
+ x.DisplayTableList();
+ }
+
+ rc += TestMethod( po, "Pack()", V4Dbf.Pack(), XB_NO_ERROR );
+ rc += TestMethod( po, "GetDbfStatus()", V4Dbf.GetDbfStatus(), XB_OPEN );
+
+ rc += TestMethod( po, "Zap()", V4Dbf.Zap(), XB_NO_ERROR );
+ if( po == 2 )
+ x.DisplayTableList();
+
+ xbUInt64 ullFileSize2 = 0;
+ rc2 = V4Dbf.GetFileSize( ullFileSize2 );
+ rc = TestMethod( po, "CheckTableSize", ullFileSize2, ullFileSize );
+
+// Test of auto commit code here
+ rc += TestMethod( po, "BlankRecord()", V4Dbf.BlankRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "PutField()", V4Dbf.PutField( fldLastName, "NELSON" ), XB_NO_ERROR );
+ rc += TestMethod( po, "PutField()", V4Dbf.PutField( "FIRSTNAME", "WILLIE" ), XB_NO_ERROR );
+ rc += TestMethod( po, "PutField()", V4Dbf.PutField( "AMOUNT", "12.34" ), XB_NO_ERROR );
+ rc += TestMethod( po, "PutLongField()", V4Dbf.PutLongField( "ZIPCODE", 12345 ), XB_NO_ERROR );
+ rc += TestMethod( po, "PutLogicalField()", V4Dbf.PutLogicalField( "SWITCH", "Y" ), XB_NO_ERROR );
+ rc += TestMethod( po, "PutFloatField()", V4Dbf.PutFloatField( "TESTNUM", (xbFloat) 1234.5678 ), XB_NO_ERROR );
+ rc += TestMethod( po, "PutDoubleField()", V4Dbf.PutDoubleField( "DBLFLDTST", (xbDouble) 9876.5432 ), XB_NO_ERROR );
+ rc += TestMethod( po, "AppendRecord()", V4Dbf.AppendRecord(), XB_NO_ERROR );
+
+ rc += TestMethod( po, "BlankRecord()", V4Dbf.BlankRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "PutField()", V4Dbf.PutField( fldLastName, "JOHNSON" ), XB_NO_ERROR );
+ rc += TestMethod( po, "PutField()", V4Dbf.PutField( "FIRSTNAME", "JIMMY" ), XB_NO_ERROR );
+ rc += TestMethod( po, "PutField()", V4Dbf.PutField( "AMOUNT", "555.33" ), XB_NO_ERROR );
+ rc += TestMethod( po, "PutLongField()", V4Dbf.PutLongField( "ZIPCODE", 76523 ), XB_NO_ERROR );
+ rc += TestMethod( po, "PutLogicalField()", V4Dbf.PutLogicalField( "SWITCH", "N" ), XB_NO_ERROR );
+ rc += TestMethod( po, "PutFloatField()", V4Dbf.PutFloatField( "TESTNUM", (xbFloat) 8765.4321 ), XB_NO_ERROR );
+ rc += TestMethod( po, "PutDoubleField()", V4Dbf.PutDoubleField( "DBLFLDTST", (xbDouble) 9876.5432 ), XB_NO_ERROR );
+ rc += TestMethod( po, "AppendRecord()", V4Dbf.AppendRecord(), XB_NO_ERROR );
+
+ rc += TestMethod( po, "PutField()", V4Dbf.PutField( "AMOUNT", "666.22" ), XB_NO_ERROR );
+ rc += TestMethod( po, "Abort()", V4Dbf.Abort(), XB_NO_ERROR );
+ rc += TestMethod( po, "GetField()", V4Dbf.GetField( "AMOUNT", sf ), XB_NO_ERROR );
+ rc += TestMethod( po, "GetField()", sf, " 555.33", 9 );
+
+ rc += TestMethod( po, "PutField()", V4Dbf.PutField( "AMOUNT", "666.22" ), XB_NO_ERROR );
+ rc += TestMethod( po, "Commit()", V4Dbf.Commit(), XB_NO_ERROR );
+ rc += TestMethod( po, "GetField()", V4Dbf.GetField( fldAMT, sf ), XB_NO_ERROR );
+ rc += TestMethod( po, "GetField()", sf, " 666.22", 9 );
+
+ rc += TestMethod( po, "GetPrevRecord()", V4Dbf.GetPrevRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "GetNextRecord()", V4Dbf.GetNextRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "GetField()", V4Dbf.GetField( fldAMT, sf ), XB_NO_ERROR );
+ rc += TestMethod( po, "GetField()", sf, " 666.22", 9 );
+
+ rc += TestMethod( po, "AutoCommit()", V4Dbf.SetAutoCommit( 0 ), XB_NO_ERROR );
+ rc += TestMethod( po, "PutField()", V4Dbf.PutField( "AMOUNT", "999.33" ), XB_NO_ERROR );
+ rc += TestMethod( po, "GetPrevRecord()", V4Dbf.GetPrevRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "GetNextRecord()", V4Dbf.GetNextRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "GetField()", V4Dbf.GetField( fldAMT, sf ), XB_NO_ERROR );
+ rc += TestMethod( po, "GetField()", sf, " 666.22", 9 );
+
+ rc += TestMethod( po, "AutoCommit()", V4Dbf.SetAutoCommit( -1 ), XB_NO_ERROR );
+ rc += TestMethod( po, "PutField()", V4Dbf.PutField( "AMOUNT", "999.33" ), XB_NO_ERROR );
+ rc += TestMethod( po, "GetCurRecNo()", (xbInt32) V4Dbf.GetCurRecNo(), 2 );
+ rc += TestMethod( po, "GetPrevRecord()", V4Dbf.GetPrevRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "GetNextRecord()", V4Dbf.GetNextRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "GetField()", V4Dbf.GetField( fldAMT, sf ), XB_NO_ERROR );
+ rc += TestMethod( po, "GetField()", sf, " 999.33", 9 );
+
+ rc += TestMethod( po, "AutoCommit()", V4Dbf.SetAutoCommit( 1 ), XB_NO_ERROR );
+ rc += TestMethod( po, "PutField()", V4Dbf.PutField( "AMOUNT", "432.55" ), XB_NO_ERROR );
+ rc += TestMethod( po, "GetCurRecNo()", (xbInt32) V4Dbf.GetCurRecNo(), 2 );
+ rc += TestMethod( po, "GetPrevRecord()", V4Dbf.GetPrevRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "GetNextRecord()", V4Dbf.GetNextRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "GetField()", V4Dbf.GetField( fldAMT, sf ), XB_NO_ERROR );
+ rc += TestMethod( po, "GetField()", sf, " 432.55", 9 );
+
+
+ xbDbf4 V4DbfZ( &x ); // version 4 dbf file
+ rc2 = V4DbfZ.CreateTable( "TestV4Zip.DBF", "TestV4Zip", MyV4ZipRecord, XB_OVERLAY, XB_MULTI_USER );
+ rc += TestMethod( po, "CreateTable()", (xbInt32) rc2, XB_NO_ERROR );
+ if( rc2 )
+ x.DisplayError( rc2 );
+
+
+
+ rc += TestMethod( po, "Close()", V4Dbf.Close(), XB_NO_ERROR );
+ if( po == 2 )
+ x.DisplayTableList();
+
+
+ rc += TestMethod( po, "Close()", V4DbfZ.Close(), XB_NO_ERROR );
+ if( po == 2 )
+ x.DisplayTableList();
+
+
+
+ if( po > 0 || rc < 0 )
+ fprintf( stdout, "Total Errors = %d\n", rc * -1 );
+
+#ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], rc * -1 );
+ x.WriteLogMessage( sMsg );
+#endif
+
+ return rc;
+}
diff --git a/src/tests/xb_test_expnode.cpp b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_expnode.cpp
index cbd79c9..cbd79c9 100755
--- a/src/tests/xb_test_expnode.cpp
+++ b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_expnode.cpp
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_expression.cpp b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_expression.cpp
new file mode 100755
index 0000000..52c0b5c
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_expression.cpp
@@ -0,0 +1,816 @@
+/* xb_test_expression.cpp
+
+XBase Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+// This program tests the class xbExp
+// usage: xb_test_expression QUITE|NORMAL|VERBOSE
+
+#include "xbase.h"
+using namespace xb;
+
+#include "tstfuncs.cpp"
+
+
+/**************************************************************************/
+///@cond DOXYOFF
+
+class xbExpTest : public xbExp {
+
+ public:
+ xbExpTest( xbXBase * x );
+ xbInt16 GetNextTokenTest( xbExpToken &t );
+ xbInt16 OperatorWeightTest( const xbString &sOperator );
+ xbExpNode *GetNextNodeTest( xbExpNode * );
+};
+
+/**************************************************************************/
+xbExpTest::xbExpTest( xbXBase * x ) : xbExp( x ){
+}
+/**************************************************************************/
+xbExpNode *xbExpTest::GetNextNodeTest( xbExpNode *n ){
+ return GetNextNode( n );
+}
+/**************************************************************************/
+xbInt16 xbExpTest::GetNextTokenTest( xbExpToken &t ){
+ return GetNextToken( t );
+}
+/**************************************************************************/
+xbInt16 xbExpTest::OperatorWeightTest( const xbString &sOperator ){
+ return OperatorWeight( sOperator );
+}
+///@endcond DOXYOFF
+
+
+/**************************************************************************/
+xbInt16 DevTester( xbXBase * xb, xbDbf * dbf, const char * sExpIn ){
+
+ xbExpTest exp( xb );
+ xbExpNode *n;
+
+ std::cout << "going to parse expression [" << sExpIn << "]\n";
+ xbInt16 iRc = exp.ParseExpression( dbf, sExpIn );
+
+ std::cout << "back from parse expression\n";
+ std::cout << "dump nodes\n";
+ n = exp.GetNextNodeTest( NULL );
+ if( iRc == XB_NO_ERROR ){
+ #ifdef XB_DEBUG_SUPPORT
+ exp.DumpTree( xbTrue );
+ #endif // XB_DEBUG_SUPPORT
+ std::cout << "dump nodes\n";
+ n = exp.GetNextNodeTest( NULL );
+ if( !n ){
+ std::cout << "n is null\n";
+ } else {
+ xbInt16 i = 0;
+ while( n && i < 30 ){
+ std::cout << "Node Text = [" << n->GetStringResult().Str() << "]\n";
+ n = exp.GetNextNodeTest( n );
+ i++;
+ }
+ }
+ std::cout << "end dump nodes\n";
+ return 0;
+ }else{
+ std::cout << "Parse Error [" << iRc << "]\n";
+ return -1;
+ }
+}
+
+/**************************************************************************/
+xbInt16 TestWeight( xbXBase * xb, xbInt16 iPrintOption, const char * title, const char *sOperator, xbInt16 iExpectedWeight );
+xbInt16 TestWeight( xbXBase * xb, xbInt16 iPrintOption, const char * title, const char *sOperator, xbInt16 iExpectedWeight ){
+
+ xbInt16 iRc = 0;
+ xbExpTest expT1( xb );
+
+ if(( iRc = expT1.OperatorWeightTest( sOperator )) != iExpectedWeight ){
+ std::cout << std::endl << "[FAIL O1] " << title << std::endl;
+ std::cout << " Operator [" << sOperator << "] Weight [" << iRc << "] Expected [" << iExpectedWeight << "]" << std::endl;
+ return -1;
+ }
+
+ if( iPrintOption == 2 )
+ std::cout << "[PASS] " << title << " Expected matches actual Data=[" << sOperator << "][" << iExpectedWeight << "]" << std::endl;
+ else if( iPrintOption == 1 )
+ std::cout << "[PASS] " << title << std::endl;
+
+ return XB_NO_ERROR;
+}
+/**************************************************************************/
+xbInt16 TestTokenMethod( xbXBase *xb, xbInt16 iPrintOption, const char * title, const char *sExpression,
+ const char *sExpectedToken, const char *sExpectedRemainder, char cExpectedNodeType,
+ char cExpectedReturnType, xbInt16 iErc, xbInt16 iTrc );
+
+xbInt16 TestTokenMethod( xbXBase *xb, xbInt16 iPrintOption, const char * title, const char *sExpression,
+ const char *sExpectedToken, const char *sExpectedRemainder, char cExpectedNodeType,
+ char cExpectedReturnType, xbInt16 iErc, xbInt16 iTrc ){
+
+ xbExpTest expT1( xb );
+ xbExpToken t;
+ xbInt16 iRc = XB_NO_ERROR;
+ t.sExpression = sExpression;
+
+ if(( iRc = expT1.GetNextTokenTest( t )) != iErc ){
+ std::cout << std::endl << "[FAIL T1] " << title << std::endl;
+ std::cout << " Expression [" << sExpression << "]" << std::endl;
+ std::cout << " GetNextToken iRc = [" << iRc << "]" << std::endl;
+ return -1;
+ }
+
+ if( iTrc != t.iSts ){
+ std::cout << std::endl << "[FAIL T2] " << title << std::endl;
+ std::cout << " Expression [" << sExpression << "]" << std::endl;
+ std::cout << " GetNextToken Token Return Code = [" << iTrc << "]" << std::endl;
+ return -1;
+ }
+ if( iErc == XB_NO_ERROR && iTrc == XB_NO_ERROR && t.sToken != sExpectedToken ){
+ std::cout << std::endl << "[FAIL T3] " << title << std::endl;
+ std::cout << " Expression " << sExpression << std::endl;
+ std::cout << " Expected Result = [" << sExpectedToken << "] Actual = [" << t.sToken.Str() << "]\n";
+ return -1;
+ }
+ if( iErc == XB_NO_ERROR && iTrc == XB_NO_ERROR && t.sExpression != sExpectedRemainder ){
+ std::cout << std::endl << "[FAIL T4] " << title << std::endl;
+ std::cout << " Expression " << sExpression << std::endl;
+ std::cout << " Expected Remainder = [" << sExpectedRemainder << "] Actual = [" << t.sExpression.Str() << "]\n";
+ return -1;
+ }
+ if( iErc == XB_NO_ERROR && iTrc == XB_NO_ERROR&& t.cNodeType != cExpectedNodeType ){
+ std::cout << std::endl << "[FAIL T5] " << title << std::endl;
+ std::cout << " Expression " << sExpression << std::endl;
+ std::cout << " Expected Node type = [" << cExpectedNodeType << "] Actual = [" << t.cNodeType << "]\n";
+ return -1;
+ }
+ if( iErc == XB_NO_ERROR && iTrc == XB_NO_ERROR&& t.cReturnType != cExpectedReturnType ){
+ std::cout << std::endl << "[FAIL T6] " << title << std::endl;
+ std::cout << " Expression " << sExpression << std::endl;
+ std::cout << " Expected Return type = [" << cExpectedReturnType << "] Actual = [" << t.cReturnType << "]\n";
+ return -1;
+ }
+ if( iPrintOption == 2 ){
+ if( iErc == XB_NO_ERROR )
+ std::cout << "[PASS] " << title << " Expected matches actual Data=[" << sExpectedToken << "]" << std::endl;
+ else
+ std::cout << "[PASS] " << title << " Expected return code matches actual =[" << iErc << "]" << std::endl;
+ } else if( iPrintOption == 1 )
+ std::cout << "[PASS] " << title << std::endl;
+
+ return 0;
+}
+
+/**************************************************************************/
+xbInt16 TestMethod( xbXBase *xb, xbDbf *d, xbInt16 PrintOption, const char * title,
+ const xbString &sExpression, const char * sExpectedResult, xbInt16 iExpectedResultLen );
+
+xbInt16 TestMethod( xbXBase *xb, xbDbf *d, xbInt16 PrintOption, const char * title,
+ const xbString &sExpression, const char * sExpectedResult, xbInt16 iExpectedResultLen ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbString sResult;
+ xbExp exp( xb );
+
+ if(( iRc = exp.ParseExpression( d, sExpression )) != XB_NO_ERROR ){
+ std::cout << std::endl << "[FAIL 1] " << title << std::endl;
+ std::cout << " Return Code = [" << iRc << "]" << std::endl;
+ return -1;
+ }
+ if(( iRc = exp.GetReturnType()) != XB_EXP_CHAR ){
+ std::cout << std::endl << "[FAIL 2] " << title << std::endl;
+ std::cout << " Result type not XB_EXP_CHAR = [" << exp.GetReturnType() << "]" << std::endl;
+ return -1;
+ }
+ if(( iRc = exp.ProcessExpression()) != XB_NO_ERROR ){
+ std::cout << std::endl << "[FAIL 3] " << title << std::endl;
+ std::cout << " Return Code = [" << iRc << "]" << std::endl;
+ return -1;
+ }
+ if(( iRc = exp.GetStringResult( sResult )) != XB_NO_ERROR ){
+ std::cout << std::endl << "[FAIL 4] " << title << std::endl;
+ std::cout << " Return Code = [" << iRc << "]" << std::endl;
+ return -1;
+ }
+ if( sResult != sExpectedResult ){
+ std::cout << std::endl << "[FAIL 5] " << title << std::endl;
+ std::cout << " Expected Result = [" << sExpectedResult << "] Actual Result =[" << sResult.Str() << "]" << std::endl;
+ #ifdef XB_DEBUG_SUPPORT
+ exp.DumpTree( 1 );
+ #endif // XB_DEBUG_SUPPORT
+ return -1;
+ }
+ if( exp.GetResultLen() != iExpectedResultLen ){
+ std::cout << std::endl << "[FAIL 6] " << title << std::endl;
+ std::cout << " Expected Result Len = [" << iExpectedResultLen << "] Actual Result =[" << exp.GetResultLen() << "]" << std::endl;
+ #ifdef XB_DEBUG_SUPPORT
+ exp.DumpTree( 1 );
+ #endif // XB_DEBUG_SUPPORT
+ return -1;
+ }
+ if( PrintOption == 2 )
+ std::cout << "[PASS] " << title << " Expected [" << sExpectedResult << "] matches actual [" << exp.GetResultLen() << "]" << std::endl;
+ else if( PrintOption == 1 )
+ std::cout << "[PASS] " << title << std::endl;
+
+ return 0;
+}
+
+/**************************************************************************/
+xbInt16 TestMethod( xbXBase * xb, xbDbf * d, xbInt16 PrintOption, const char * title,
+ const xbString &sExpression, xbDouble dExpectedResult );
+
+xbInt16 TestMethod( xbXBase * xb, xbDbf * d, xbInt16 PrintOption, const char * title,
+ const xbString &sExpression, xbDouble dExpectedResult ){
+
+ xbDouble dResult;
+ xbInt16 iRc = XB_NO_ERROR;
+ xbExp exp( xb );
+
+ if(( iRc = exp.ParseExpression( d, sExpression )) != XB_NO_ERROR ){
+ std::cout << std::endl << "[FAIL 1] " << title << std::endl;
+ std::cout << " Return Code = [" << iRc << "]" << std::endl;
+ return -1;
+ }
+ if(( iRc = exp.GetReturnType()) != XB_EXP_NUMERIC ){
+ std::cout << std::endl << "[FAIL 2] " << title << std::endl;
+ std::cout << " Result type not XB_EXP_NUMERIC = [" << exp.GetReturnType() << "]" << std::endl;
+ return -1;
+ }
+ if(( iRc = exp.ProcessExpression()) != XB_NO_ERROR ){
+ std::cout << std::endl << "[FAIL 3] " << title << std::endl;
+ std::cout << " Return Code = [" << iRc << "]" << std::endl;
+ return -1;
+ }
+ if(( iRc = exp.GetNumericResult( dResult )) != XB_NO_ERROR ){
+ std::cout << std::endl << "[FAIL 4] " << title << std::endl;
+ std::cout << " Return Code = [" << iRc << "]" << std::endl;
+ return -1;
+ }
+ if( !dblEquals( dResult, dExpectedResult, .01 )){
+ std::cout << std::endl << "[FAIL 5] " << title << std::endl;
+ std::cout << " Expected Result = [" << dExpectedResult << "] Actual Result =[" << dResult << "]" << std::endl;
+ // dump out the tree
+ #ifdef XB_DEBUG_SUPPORT
+ exp.DumpTree( 1 );
+ #endif // XB_DEBUG_SUPPORT
+ return -1;
+ }
+ if( PrintOption == 2 )
+ std::cout << "[PASS] " << title << " Expected [" << dExpectedResult << "] matches actual [" << exp.GetResultLen() << "]" << std::endl;
+ else if( PrintOption == 1 )
+ std::cout << "[PASS] " << title << std::endl;
+ return 0;
+}
+/**************************************************************************/
+xbInt16 TestMethod( xbXBase * xb, xbDbf * d, xbInt16 PrintOption, const char * title,
+ const xbString &sExpression, xbDate dtExpectedResult );
+xbInt16 TestMethod( xbXBase * xb, xbDbf * d, xbInt16 PrintOption, const char * title,
+ const xbString &sExpression, xbDate dtExpectedResult ){
+
+ xbDate dtResult;
+ xbInt16 iRc = XB_NO_ERROR;
+ xbExp exp( xb );
+ if(( iRc = exp.ParseExpression( d, sExpression )) != XB_NO_ERROR ){
+ std::cout << std::endl << "[FAIL 1] " << title << std::endl;
+ std::cout << " Return Code = [" << iRc << "]" << std::endl;
+ return -1;
+ }
+ if(( iRc = exp.GetReturnType()) != XB_EXP_DATE ){
+ std::cout << std::endl << "[FAIL 2] " << title << std::endl;
+ std::cout << " Result type not XB_EXP_DATE = [" << exp.GetReturnType() << "]" << std::endl;
+ return -1;
+ }
+ if(( iRc = exp.ProcessExpression()) != XB_NO_ERROR ){
+ std::cout << std::endl << "[FAIL 3] " << title << std::endl;
+ std::cout << " Return Code = [" << iRc << "]" << std::endl;
+ return -1;
+ }
+ if(( iRc = exp.GetDateResult( dtResult )) != XB_NO_ERROR ){
+ std::cout << std::endl << "[FAIL 4] " << title << std::endl;
+ std::cout << " Return Code = [" << iRc << "]" << std::endl;
+ return -1;
+ }
+ if( dtResult != dtExpectedResult ){
+ std::cout << std::endl << "[FAIL 5] " << title << std::endl;
+ std::cout << " Expected Result = [" << dtExpectedResult.Str() << "] Actual Result =[" << dtResult.Str() << "]" << std::endl;
+ // dump out the tree
+ #ifdef XB_DEBUG_SUPPORT
+ exp.DumpTree( 1 );
+ #endif // XB_DEBUG_SUPPORT
+ return -1;
+ }
+ if( PrintOption == 2 )
+ std::cout << "[PASS] " << title << " Expected [" << dtExpectedResult.Str() << "] matches actual [" << exp.GetResultLen() << "]" << std::endl;
+ else if( PrintOption == 1 )
+ std::cout << "[PASS] " << title << std::endl;
+
+ return 0;
+}
+/**************************************************************************/
+xbInt16 TestMethod( xbXBase * xb, xbDbf * d, xbInt16 PrintOption, const char * title,
+ const xbString &sExpression, xbBool bExpectedResult );
+xbInt16 TestMethod( xbXBase * xb, xbDbf * d, xbInt16 PrintOption, const char * title,
+ const xbString &sExpression, xbBool bExpectedResult ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+
+ xbBool bResult;
+ xbExp exp( xb );
+ if(( iRc = exp.ParseExpression( d, sExpression )) != XB_NO_ERROR ){
+ std::cout << std::endl << "[FAIL 1] " << title << std::endl;
+ std::cout << " Return Code = [" << iRc << "]" << std::endl;
+ return -1;
+ }
+ if(( iRc = exp.GetReturnType()) != XB_EXP_LOGICAL ){
+ std::cout << std::endl << "[FAIL 2] " << title << std::endl;
+ std::cout << " Result type not XB_EXP_LOGICAL = [" << exp.GetReturnType() << "]" << std::endl;
+ return -1;
+ }
+ if(( iRc = exp.ProcessExpression()) != XB_NO_ERROR ){
+ std::cout << std::endl << "[FAIL 3] " << title << std::endl;
+ std::cout << " Return Code = [" << iRc << "]" << std::endl;
+ return -1;
+ }
+ if(( iRc = exp.GetBoolResult( bResult )) != XB_NO_ERROR ){
+ std::cout << std::endl << "[FAIL 4] " << title << std::endl;
+ std::cout << " Return Code = [" << iRc << "]" << std::endl;
+ return -1;
+ }
+ if( bResult != bExpectedResult ){
+ std::cout << std::endl << "[FAIL 5] " << title << std::endl;
+ std::cout << " Expected Result = [" << bExpectedResult << "] Actual Result =[" << bResult << "]" << std::endl;
+ // dump out the tree
+ #ifdef XB_DEBUG_SUPPORT
+ exp.DumpTree( 1 );
+ #endif //XB_DEBUG_SUPPORT
+ return -1;
+ }
+ if( PrintOption == 2 )
+ std::cout << "[PASS] " << title << " Expected [" << bExpectedResult << "] matches actual [" << bResult << "]" << std::endl;
+ else if( PrintOption == 1 )
+ std::cout << "[PASS] " << title << std::endl;
+ return 0;
+}
+/**************************************************************************/
+int main( int argCnt, char **av )
+{
+ xbInt16 iRc = 0;
+ xbInt16 rc2 = 0;
+ xbInt16 po = 1; /* print option */
+ /* 0 - QUIET */
+ /* 1 - NORMAL */
+ /* 2 - VERBOSE */
+
+ if( argCnt > 1 ) {
+ if( av[1][0] == 'Q' )
+ po = 0;
+ else if( av[1][0] == 'V' )
+ po = 2;
+ }
+
+ xbSchema MyRecord[] =
+ {
+ { "CHAR1", XB_CHAR_FLD, 5, 0 },
+ { "CHAR2", XB_CHAR_FLD, 7, 0 },
+ { "DATE1", XB_DATE_FLD, 8, 0 },
+ { "DATE2", XB_DATE_FLD, 8, 0 },
+ { "NULLDATE1", XB_DATE_FLD, 8, 0 },
+ { "NULLDATE2", XB_DATE_FLD, 8, 0 },
+ { "NUM1", XB_NUMERIC_FLD, 9, 2 },
+ { "",0,0,0 }
+ };
+
+ xbXBase x;
+ xbDbf * MyFile;
+ xbDate d;
+ xbDate dtTest1( "19890303" );
+ xbDate dtTest2( "20120708" );
+
+
+
+ #ifdef XB_LOGGING_SUPPORT
+ x.SetLogDirectory( PROJECT_LOG_DIR );
+ x.EnableMsgLogging();
+ if( po ){
+ std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
+ }
+ xbString sMsg;
+ sMsg.Sprintf( "Program [%s] initializing...", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ x.SetDataDirectory( PROJECT_DATA_DIR );
+ InitTime();
+
+ if( po > 0 ){
+ std::cout << "XBase Expression testing program.." << std::endl;
+ std::cout << "This program tests the XBase expression logic." << std::endl;
+ std::cout << "Default Data Directory is [" << x.GetDataDirectory().Str() << "]" << std::endl;
+ }
+
+ #ifdef XB_DBF4_SUPPORT
+ MyFile = new xbDbf4( &x ); /* version 4 dbf file */
+ #else
+ MyFile = new xbDbf3( &x ); /* version 3 dbf file */
+ #endif
+
+
+ rc2 = MyFile->CreateTable( "ExpTest.DBF", "ExpTest", MyRecord, XB_OVERLAY, XB_MULTI_USER );
+
+ iRc += TestMethod( po, "CreateTable()", rc2, XB_NO_ERROR );
+ iRc += TestMethod( po, "PutField()", MyFile->PutField( "CHAR1", "TEST" ), XB_NO_ERROR );
+ iRc += TestMethod( po, "PutField()", MyFile->PutField( "CHAR2", "TEST7B" ), XB_NO_ERROR );
+ iRc += TestMethod( po, "PutField()", MyFile->PutFloatField( "NUM1", 5 ), XB_NO_ERROR );
+ iRc += TestMethod( po, "PutField()", MyFile->PutField( "DATE1", "19890303" ), XB_NO_ERROR );
+ iRc += TestMethod( po, "PutField()", MyFile->PutField ( "DATE2", "20120708" ), XB_NO_ERROR );
+ iRc += TestMethod( po, "AppendRecord()", MyFile->AppendRecord(), XB_NO_ERROR );
+
+
+
+ iRc += TestTokenMethod( &x, po, "EOX Test1", "", "", "", '?', XB_EXP_UNKNOWN, XB_NO_ERROR, XB_END_OF_EXPRESSION );
+ iRc += TestTokenMethod( &x, po, "EOX Test2 ", " ", "", "", '?', XB_EXP_UNKNOWN, XB_NO_ERROR, XB_END_OF_EXPRESSION );
+ iRc += TestTokenMethod( &x, po, "Paren Test1 ", "(SOMETOKEN)+5-100", "SOMETOKEN", "+5-100", XB_EXP_NOTROOT, XB_EXP_UNKNOWN, XB_NO_ERROR , XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Paren Test2 ", "{ANOTHERTOKEN} + 55-100", "ANOTHERTOKEN", " + 55-100", XB_EXP_NOTROOT, XB_EXP_UNKNOWN, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Paren Test3 ", "{{NESTED}TOKEN} + 55-100", "{NESTED}TOKEN", " + 55-100", XB_EXP_NOTROOT, XB_EXP_UNKNOWN, XB_NO_ERROR, XB_NO_ERROR );
+
+ // next line generates log message
+ iRc += TestTokenMethod( &x, po, "Paren Test4 ", "{{NESTED}TOKEN + 55-100", "{NESTED}TOKEN", " + 55-100", XB_EXP_NOTROOT, XB_EXP_UNKNOWN, XB_PARSE_ERROR, XB_UNBALANCED_PARENS );
+ iRc += TestTokenMethod( &x, po, "Paren Test5 ", " (SOMETOKEN )+5-100", "SOMETOKEN ", "+5-100", XB_EXP_NOTROOT, XB_EXP_UNKNOWN, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Quote Test1 ", "\"SOMETOKEN\"+5-100", "SOMETOKEN", "+5-100", XB_EXP_CONSTANT, XB_EXP_CHAR, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Quote Test2 ", "'SOMETOKEN2'", "SOMETOKEN2", "", XB_EXP_CONSTANT, XB_EXP_CHAR, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Quote Test3 ", " 'SOMETOKEN3 '", "SOMETOKEN3 ", "", XB_EXP_CONSTANT, XB_EXP_CHAR, XB_NO_ERROR, XB_NO_ERROR );
+
+
+
+ // next line generates log message
+
+ iRc += TestTokenMethod( &x, po, "Quote Test3 ", " 'SOMETOKEN4 ", "SOMETOKEN3 ", "", XB_EXP_CONSTANT, XB_EXP_CHAR, XB_PARSE_ERROR, XB_UNBALANCED_QUOTES );
+
+
+ iRc += TestTokenMethod( &x, po, "Logical Constant1 ", ".T.", "T", "", XB_EXP_CONSTANT, XB_EXP_LOGICAL, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Logical Constant2 ", ".F.", "F", "", XB_EXP_CONSTANT, XB_EXP_LOGICAL, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Logical Constant3 ", ".TRUE.", "T", "", XB_EXP_CONSTANT, XB_EXP_LOGICAL, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Logical Constant4 ", ".FALSE.", "F", "", XB_EXP_CONSTANT, XB_EXP_LOGICAL, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Logical Constant5 ", ".T. and x", "T", " and x", XB_EXP_CONSTANT, XB_EXP_LOGICAL, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Numeric Constant1 ", "123", "123", "", XB_EXP_CONSTANT, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
+
+
+
+ iRc += TestTokenMethod( &x, po, "Numeric Constant2 ", "-123", "-123", "", XB_EXP_CONSTANT, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Numeric Constant3 ", " - 123", "-123", "", XB_EXP_CONSTANT, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Numeric Constant4 ", " - .456", "-.456", "", XB_EXP_CONSTANT, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Numeric Constant5 ", " -.002", "-.002", "", XB_EXP_CONSTANT, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Numeric Constant6 ", " - .002 + 1", "-.002", " + 1", XB_EXP_CONSTANT, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Operator 1", "-", "-", "", XB_EXP_OPERATOR, XB_EXP_UNKNOWN, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Operator 2", "+", "+", "", XB_EXP_OPERATOR, XB_EXP_UNKNOWN, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Operator 3", "*", "*", "", XB_EXP_OPERATOR, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Operator 4", "/", "/", "", XB_EXP_OPERATOR, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Operator 5", "^", "^", "", XB_EXP_OPERATOR, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Operator 6", "%", "%", "", XB_EXP_OPERATOR, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Operator 7", "=", "=", "", XB_EXP_OPERATOR, XB_EXP_LOGICAL, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Operator 8", "<", "<", "", XB_EXP_OPERATOR, XB_EXP_LOGICAL, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Operator 9", ">", ">", "", XB_EXP_OPERATOR, XB_EXP_LOGICAL, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Operator 10", "$", "$", "", XB_EXP_OPERATOR, XB_EXP_LOGICAL, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Operator 11", "**", "**", "", XB_EXP_OPERATOR, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Operator 12", "++", "++", "", XB_EXP_POST_OPERATOR, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Operator 13", "--", "--", "", XB_EXP_POST_OPERATOR, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Operator 14", "-- ", "--", " ", XB_EXP_POST_OPERATOR, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Operator 15", "--X", "--", "X", XB_EXP_PRE_OPERATOR, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Operator 16", "++X", "++", "X", XB_EXP_PRE_OPERATOR, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Operator 17", "+=", "+=", "", XB_EXP_OPERATOR, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Operator 18", "-=", "-=", "", XB_EXP_OPERATOR, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Operator 19", "*=", "*=", "", XB_EXP_OPERATOR, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Operator 20", "/=", "/=", "", XB_EXP_OPERATOR, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Operator 21", "<>", "<>", "", XB_EXP_OPERATOR, XB_EXP_LOGICAL, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Operator 22", "<=", "<=", "", XB_EXP_OPERATOR, XB_EXP_LOGICAL, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Operator 23", ">=", ">=", "", XB_EXP_OPERATOR, XB_EXP_LOGICAL, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Operator 24", ">= grapes", ">=", " grapes", XB_EXP_OPERATOR, XB_EXP_LOGICAL, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Operator 25", "< apples ", "<", " apples ", XB_EXP_OPERATOR, XB_EXP_LOGICAL, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Operator 26", ".NOT.", ".NOT.", "", XB_EXP_OPERATOR, XB_EXP_LOGICAL, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Operator 27", ".AND.", ".AND.", "", XB_EXP_OPERATOR, XB_EXP_LOGICAL, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Operator 28", ".OR.", ".OR.", "", XB_EXP_OPERATOR, XB_EXP_LOGICAL, XB_NO_ERROR, XB_NO_ERROR );
+
+ iRc += TestTokenMethod( &x, po, "Function 1", "STOD ( \"08252017\" )", "STOD ( \"08252017\" )", "", XB_EXP_FUNCTION, XB_EXP_DATE, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Function 2", "STR( 8 )", "STR( 8 )", "", XB_EXP_FUNCTION, XB_EXP_CHAR, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Function 3", "STR( (8-3)+3 )", "STR( (8-3)+3 )", "", XB_EXP_FUNCTION, XB_EXP_CHAR, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Function 4", "STR( (8-3)+3 ) + \"A\"", "STR( (8-3)+3 )", " + \"A\"", XB_EXP_FUNCTION, XB_EXP_CHAR, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Function 5", "ISALPHA( \"A\" )", "ISALPHA( \"A\" )", "", XB_EXP_FUNCTION, XB_EXP_LOGICAL, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Function 6", "EXP( 6 )", "EXP( 6 )", "", XB_EXP_FUNCTION, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Field 1", "NUM1", "NUM1", "", XB_EXP_FIELD, XB_EXP_UNKNOWN, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Field 2", "NUM1 + X", "NUM1", " + X", XB_EXP_FIELD, XB_EXP_UNKNOWN, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Field 3", "ExpTest->NUM1", "ExpTest->NUM1", "", XB_EXP_FIELD, XB_EXP_UNKNOWN, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Field 4", "ExpTest ->NUM1", "ExpTest ->NUM1", "", XB_EXP_FIELD, XB_EXP_UNKNOWN, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Field 5", "ExpTest -> NUM1", "ExpTest -> NUM1", "", XB_EXP_FIELD, XB_EXP_UNKNOWN, XB_NO_ERROR, XB_NO_ERROR );
+ iRc += TestTokenMethod( &x, po, "Field 6", "ExpTest -> NUM1+1", "ExpTest -> NUM1", "+1", XB_EXP_FIELD, XB_EXP_UNKNOWN, XB_NO_ERROR, XB_NO_ERROR );
+
+ iRc += TestWeight( &x, po, "Weight Test", "", 0 );
+ iRc += TestWeight( &x, po, "Weight Test", "toobig", 0 );
+ iRc += TestWeight( &x, po, ".OR. Weight Test", ".OR.", 1 );
+ iRc += TestWeight( &x, po, ".AND. Weight Test", ".AND.", 2 );
+ iRc += TestWeight( &x, po, ".NOT. Weight Test", ".NOT.", 3 );
+ iRc += TestWeight( &x, po, "> Weight Test", ">", 4 );
+ iRc += TestWeight( &x, po, ">= Weight Test", ">=", 4 );
+ iRc += TestWeight( &x, po, "< Weight Test", "<", 4 );
+ iRc += TestWeight( &x, po, "<= Weight Test", "<=", 4 );
+ iRc += TestWeight( &x, po, "<> Weight Test", "<>", 4 );
+ iRc += TestWeight( &x, po, "# Weight Test", "#", 4 );
+ iRc += TestWeight( &x, po, "$ Weight Test", "$", 4 );
+ iRc += TestWeight( &x, po, "= Weight Test", "=", 4 );
+ iRc += TestWeight( &x, po, "-- Prefix decrement Weight Test", "--0", 9 );
+ iRc += TestWeight( &x, po, "++ Prefix increment Weight Test", "++0", 9 );
+ iRc += TestWeight( &x, po, "** Weight Test", "**", 8 );
+ iRc += TestWeight( &x, po, "^ Weight Test", "^", 8 );
+ iRc += TestWeight( &x, po, "* Weight Test", "*", 7 );
+ iRc += TestWeight( &x, po, "* Weight Test", "/", 7 );
+ iRc += TestWeight( &x, po, "* Weight Test", "%", 7 );
+ iRc += TestWeight( &x, po, "* Weight Test", "*=", 7 );
+ iRc += TestWeight( &x, po, "* Weight Test", "/=", 7 );
+ iRc += TestWeight( &x, po, "+ Weight Test", "+", 6 );
+ iRc += TestWeight( &x, po, "- Weight Test", "-", 6 );
+ iRc += TestWeight( &x, po, "+= Weight Test", "+=", 6 );
+ iRc += TestWeight( &x, po, "-= Weight Test", "-=", 6 );
+ iRc += TestWeight( &x, po, "-- Postfix decrement Weight Test", "--1", 5 );
+ iRc += TestWeight( &x, po, "++ Postfix increment Weight Test", "++1", 5 );
+
+ iRc += TestMethod( &x, MyFile, po, "CharTest1", "CHAR1", "TEST ", 5 );
+ iRc += TestMethod( &x, MyFile, po, "CharTest2", "ExpTest->CHAR1", "TEST ", 5 );
+ iRc += TestMethod( &x, MyFile, po, "CharTest3", "ExpTest->CHAR1+CHAR1", "TEST TEST ", 10 );
+ iRc += TestMethod( &x, MyFile, po, "CharTest4", "\"PRE_ \"+\" _POST\"", "PRE_ _POST", 11 );
+ iRc += TestMethod( &x, MyFile, po, "CharTest5", "\"PRE_ \"-\" _POST\"", "PRE_ _POST ", 11 );
+ iRc += TestMethod( &x, MyFile, po, "CharTest6", "\"PRE_\"+ExpTest->CHAR1+\"_POST\"", "PRE_TEST _POST", 14 );
+ iRc += TestMethod( &x, MyFile, po, "CharTest7", "STR(123)", " 123", 10 );
+ iRc += TestMethod( &x, MyFile, po, "CharTest8", "STR(123)+LTRIM(STR(456))", " 123456", 20 );
+ iRc += TestMethod( &x, MyFile, po, "CharTest9", "STR(8)+STR(7)", " 8 7", 20 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest1", "ALLTRIM( \" ABCD \" )", "ABCD", 11 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest2", "CDOW( STOD( \"20171014\" ))", "Saturday", 9 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest3", "CHR( 66 )", "B", 1 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest4", "CMONTH( STOD( \"20171114\" ) )", "November", 9 );
+
+ // next line causes MAC compiler to cough up a furball
+ //iRc += TestMethod( &x, MyFile, po, "FuncTest5", "DESCEND( \"ABCDE\" )", "", 5 );
+
+ char sDescendResult[6]; // = "";
+ sDescendResult[0] = (char) 0xBE;
+ sDescendResult[1] = (char) 0xBD;
+ sDescendResult[2] = (char) 0xBC;
+ sDescendResult[3] = (char) 0xBB;
+ sDescendResult[4] = (char) 0xBA;
+ sDescendResult[5] = (char) 0x00;
+ iRc += TestMethod( &x, MyFile, po, "FuncTest5", "DESCEND( \"ABCDE\" )", sDescendResult, 5 );
+
+ iRc += TestMethod( &x, MyFile, po, "FuncTest6", "DTOC( STOD( \"20171114\" ))", "11/14/17", 8 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest7", "DTOS( STOD( \"20171114\" ))", "20171114", 8 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest8", "LEFT( \"ABCDEFGH\", 5 )", "ABCDE", 5 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest9", "LOWER( \"ABCDEFGH\" )", "abcdefgh", 8 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest10", "LTRIM( \" ABC\" )", "ABC", 6 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest11", "REPLICATE( \"ABC\", 3 )", "ABCABCABC", 9 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest12", "RIGHT( \"ABCDEFGH\", 5 )", "DEFGH", 5 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest13", "RTRIM( \"ABCD \" )", "ABCD", 7 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest14", "SPACE( 5 )", " ", 5 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest15", "STR( 8 )", " 8", 10 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest16", "STR( 3, 4 )", " 3", 4 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest17", "STR( 12.7, 5, 2 )", "12.70", 5 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest18", "STR( 43.17, 9, 4, \"0\" )", "0043.1700", 9 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest19", "STRZERO( 56.21, 9, 4 )", "0056.2100", 9 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest20", "SUBSTR( \"SOMESTRING\", 3, 5 )", "MESTR", 5 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest21", "TRIM( \" abc123 \" )", " abc123", 12 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest22", "UPPER( \"abc123RRR\" )", "ABC123RRR", 9 );
+
+ // numeric logic tests
+ iRc += TestMethod( &x, MyFile, po, "NumericTest1", "1 + 1", (xbDouble) 2 );
+ iRc += TestMethod( &x, MyFile, po, "NumericTest2", "6 - 1", (xbDouble) 5 );
+ iRc += TestMethod( &x, MyFile, po, "NumericTest3", "6 * 4", (xbDouble) 24 );
+ iRc += TestMethod( &x, MyFile, po, "NumericTest4", "8 / 2", (xbDouble) 4 );
+ iRc += TestMethod( &x, MyFile, po, "NumericTest5", "3 ^ 3", (xbDouble) 27 );
+ iRc += TestMethod( &x, MyFile, po, "NumericTest6", "4 ** 4", (xbDouble) 256 );
+ iRc += TestMethod( &x, MyFile, po, "NumericTest7", "NUM1", (xbDouble) 5 );
+ iRc += TestMethod( &x, MyFile, po, "NumericTest8", "NUM1 + 2.3", (xbDouble) 7.3 );
+ iRc += TestMethod( &x, MyFile, po, "NumericTest9", "++NUM1", (xbDouble) 6 );
+ iRc += TestMethod( &x, MyFile, po, "NumericTest10", "NUM1++", (xbDouble) 5 );
+ iRc += TestMethod( &x, MyFile, po, "NumericTest11", "--NUM1", (xbDouble) 4 );
+ iRc += TestMethod( &x, MyFile, po, "NumericTest12", "NUM1--", (xbDouble) 5 );
+ iRc += TestMethod( &x, MyFile, po, "NumericTest13", "3++", (xbDouble) 3 );
+ iRc += TestMethod( &x, MyFile, po, "NumericTest14", "++3", (xbDouble) 4 );
+ iRc += TestMethod( &x, MyFile, po, "NumericTest15", "4--", (xbDouble) 4 );
+ iRc += TestMethod( &x, MyFile, po, "NumericTest16", "--4", (xbDouble) 3 );
+ iRc += TestMethod( &x, MyFile, po, "NumericTest17", "3 += 12", (xbDouble) 15 );
+ iRc += TestMethod( &x, MyFile, po, "NumericTest18", "3 -= 12", (xbDouble) -9 );
+ iRc += TestMethod( &x, MyFile, po, "NumericTest19", "3 *= 12", (xbDouble) 36 );
+ iRc += TestMethod( &x, MyFile, po, "NumericTest20", "12 /= 3", (xbDouble) 4 );
+ iRc += TestMethod( &x, MyFile, po, "NumericTest21", "(12+3)*(15-13)", (xbDouble) 30 );
+
+ // numeric functions
+ iRc += TestMethod( &x, MyFile, po, "FuncTest23", "ABS( -22 )", (xbDouble) 22 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest24", "ABS( 23 )", (xbDouble) 23 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest25", "ASC( \"A\" )", (xbDouble) 65 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest26", "AT( \",\", \"Booth, Joseph\" )", (xbDouble) 6 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest27", "DAY( STOD( \"20171017\" ))", (xbDouble) 17 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest28", "DESCEND( 1991 )", (xbDouble) -1991 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest29", "DOW( STOD( \"20171017\" ) )", (xbDouble) 3 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest30", "DOW( STOD( \"20171021\" ) )", (xbDouble) 0 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest31", "EXP( 0 )", (xbDouble) 1 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest32", "INT( 123.45 )", (xbDouble) 123 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest33", "LEN( \"ABC123\" )", (xbDouble) 6 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest34", "LOG( 10 )", (xbDouble) 2.3 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest35", "MAX( 10, 20 )", (xbDouble) 20 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest36", "MIN( 10, 20 )", (xbDouble) 10 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest37", "MONTH( STOD( \"20171017\" ))", (xbDouble) 10 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest38", "RECCOUNT()", (xbDouble) 1 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest39", "RECNO()", (xbDouble) 1 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest40", "SQRT( 9 )", (xbDouble) 3 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest41", "VAL( \"89\" )", (xbDouble) 89 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest42", "VAL( \"22.13 and some text\" )", (xbDouble) 22.13 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest43", "YEAR( STOD( \"20171017\" ))", (xbDouble) 2017 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest44", "CTOD( \"07\\08\\12\" )", dtTest2 );
+ xbDate dtToday;
+ dtToday.Sysdate();
+ iRc += TestMethod( &x, MyFile, po, "FuncTest45", "DATE()", dtToday );
+ dtTest2 = "28870625";
+ iRc += TestMethod( &x, MyFile, po, "FuncTest46", "DESCEND( DATE2 )", dtTest2 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest47", "STOD( \"19890303\" )", dtTest1 );
+
+
+ // date logic tests
+
+ iRc += TestMethod( &x, MyFile, po, "DateTest1", "ExpTest->DATE1", dtTest1 );
+ iRc += TestMethod( &x, MyFile, po, "DateTest2", "DATE1", dtTest1 );
+ dtTest2.Set( "20120708" );
+ iRc += TestMethod( &x, MyFile, po, "DateTest3", "ExpTest->DATE2", dtTest2 );
+ iRc += TestMethod( &x, MyFile, po, "DateTest4", "DATE2", dtTest2 );
+ iRc += TestMethod( &x, MyFile, po, "DateTest5", "DATE2 - DATE1", (xbDouble) 8528 );
+
+
+ dtTest1.Set( "20120705" );
+
+ iRc += TestMethod( &x, MyFile, po, "DateTest6", "DATE2 - 3", dtTest1 );
+ iRc += TestMethod( &x, MyFile, po, "DateTest7", "DATE2 -= 3", dtTest1 );
+ dtTest1.Set( "20120718" );
+ iRc += TestMethod( &x, MyFile, po, "DateTest8", "DATE2 + 10", dtTest1 );
+ iRc += TestMethod( &x, MyFile, po, "DateTest9", "DATE2 += 10", dtTest1 );
+ dtTest1.Set( "20120709" );
+ iRc += TestMethod( &x, MyFile, po, "DateTest10", "++DATE2", dtTest1 );
+ dtTest1.Set( "20120707" );
+ iRc += TestMethod( &x, MyFile, po, "DateTest11", "--DATE2", dtTest1 );
+ dtTest1.Set( "20120708" );
+ iRc += TestMethod( &x, MyFile, po, "DateTest12", "DATE2++", dtTest1 );
+ iRc += TestMethod( &x, MyFile, po, "DateTest13", "DATE2--", dtTest1 );
+ iRc += TestMethod( &x, MyFile, po, "DateTest14", "{07/08/12}", dtTest1 );
+ iRc += TestMethod( &x, MyFile, po, "DateTest15", "{07/08/2012}", dtTest1 );
+ iRc += TestMethod( &x, MyFile, po, "DateTest16", "{07/11/12} -3", dtTest1 );
+ iRc += TestMethod( &x, MyFile, po, "DateTest17", "{07/06/2012} + 2", dtTest1 );
+
+ iRc += TestMethod( &x, MyFile, po, "DateTest18", "ExpTest->NULLDATE1 = {07/06/2012}", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "DateTest19", "ExpTest->NULLDATE1 != {07/06/2012}", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "DateTest20", "ExpTest->NULLDATE1 < {07/06/2012}", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "DateTest21", "ExpTest->NULLDATE1 <= {07/06/2012}", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "DateTest22", "ExpTest->NULLDATE1 > {07/06/2012}", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "DateTest23", "ExpTest->NULLDATE1 >= {07/06/2012}", (xbBool) xbFalse );
+
+ iRc += TestMethod( &x, MyFile, po, "DateTest24", "{07/06/2012} = ExpTest->NULLDATE1", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "DateTest25", "{07/06/2012} != ExpTest->NULLDATE1", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "DateTest26", "{07/06/2012} < ExpTest->NULLDATE1", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "DateTest27", "{07/06/2012} <= ExpTest->NULLDATE1", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "DateTest28", "{07/06/2012} > ExpTest->NULLDATE1", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "DateTest29", "{07/06/2012} >= ExpTest->NULLDATE1", (xbBool) xbTrue );
+
+ iRc += TestMethod( &x, MyFile, po, "DateTest18", "ExpTest->NULLDATE1 = ExpTest->NULLDATE2", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "DateTest19", "ExpTest->NULLDATE1 != ExpTest->NULLDATE2", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "DateTest20", "ExpTest->NULLDATE1 < ExpTest->NULLDATE2", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "DateTest21", "ExpTest->NULLDATE1 <= ExpTest->NULLDATE2", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "DateTest22", "ExpTest->NULLDATE1 > ExpTest->NULLDATE2", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "DateTest23", "ExpTest->NULLDATE1 >= ExpTest->NULLDATE2", (xbBool) xbTrue );
+
+ // boolean logic tests
+ iRc += TestMethod( &x, MyFile, po, "LogicTest1", "3=5", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest2", "5=5", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest3", "\"abc\"=\"def\"", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest4", "\"abc\"=\"abc\"", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest5", "CTOD( \"07\\08\\12\" ) = CTOD ( \"07\\08\\12\" )", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest6", "CTOD( \"07\\09\\12\" ) = CTOD ( \"07\\08\\12\" )", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest7", "3<>5", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest8", "5<>5", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest9", "3!=5", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest10", "5!=5", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest11", "3 # 5", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest12", "5#5", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest13", "\"3\"<>\"5\"", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest14", "\"5\"<>\"5\"", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest15", "\"3\"!=\"5\"", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest16", "\"5\"!=\"5\"", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest17", "\"3\" # \"5\"", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest18", "\"5\"#\"5\"", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest19", "CTOD( \"07\\08\\12\" ) <> CTOD ( \"07\\08\\12\" )", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest20", "CTOD( \"07\\09\\12\" ) <> CTOD ( \"07\\08\\12\" )", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest21", "CTOD( \"07\\08\\12\" ) != CTOD ( \"07\\08\\12\" )", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest22", "CTOD( \"07\\09\\12\" ) != CTOD ( \"07\\08\\12\" )", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest23", "CTOD( \"07\\08\\12\" ) # CTOD ( \"07\\08\\12\" )", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest24", "CTOD( \"07\\09\\12\" ) # CTOD ( \"07\\08\\12\" )", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest25", "3<5", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest26", "5<5", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest27", "5<4", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest28", "\"a\"<\"b\"", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest29", "\"a\"<\"a\"", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest30", "\"c\"<\"b\"", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest31", "CTOD( \"07\\07\\12\" ) < CTOD ( \"07\\08\\12\" )", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest32", "CTOD( \"07\\08\\12\" ) < CTOD ( \"07\\08\\12\" )", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest33", "CTOD( \"07\\09\\12\" ) < CTOD ( \"07\\08\\12\" )", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest34", "3>5", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest35", "5>5", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest36", "5>4", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest37", "\"a\">\"b\"", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest38", "\"a\">\"a\"", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest39", "\"c\">\"b\"", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest40", "CTOD( \"07\\07\\12\" ) > CTOD ( \"07\\08\\12\" )", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest41", "CTOD( \"07\\08\\12\" ) > CTOD ( \"07\\08\\12\" )", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest42", "CTOD( \"07\\09\\12\" ) > CTOD ( \"07\\08\\12\" )", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest43", "3<=5", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest44", "5<=5", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest45", "5<=4", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest46", "\"a\"<=\"b\"", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest47", "\"a\"<=\"a\"", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest48", "\"c\"<=\"b\"", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest49", "CTOD( \"07\\07\\12\" ) <= CTOD ( \"07\\08\\12\" )", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest50", "CTOD( \"07\\08\\12\" ) <= CTOD ( \"07\\08\\12\" )", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest51", "CTOD( \"07\\09\\12\" ) <= CTOD ( \"07\\08\\12\" )", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest52", "3>=5", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest53", "5>=5", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest54", "5>=4", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest55", "\"a\">=\"b\"", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest56", "\"a\">=\"a\"", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest57", "\"c\">=\"b\"", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest58", "CTOD( \"07\\07\\12\" ) >= CTOD ( \"07\\08\\12\" )", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest59", "CTOD( \"07\\08\\12\" ) >= CTOD ( \"07\\08\\12\" )", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest60", "CTOD( \"07\\09\\12\" ) >= CTOD ( \"07\\08\\12\" )", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest61", "\"abc123\" $ \"abc\"", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest62", "\"abc\" $ \"abc123\"", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest63", "\"abc\" $ \"zzabc123\"", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest64", ".T.", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest65", ".F.", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest66", ".TRUE.", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest67", ".FALSE.", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest68", ".NOT. .F.", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest69", " NOT .F.", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest70", ".NOT. .T.", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest71", " NOT .T.", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest72", ".T. .AND. .T.", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest73", ".T. AND .T.", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest74", ".T. .AND. .NOT. .T.", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest75", ".T. AND NOT .T.", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest76", ".NOT. .T. .AND. .T.", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest77", " NOT .T. AND .T.", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest78", ".NOT. .T. .AND. .NOT. .T.", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest79", " NOT .T. AND NOT .T.", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest80", ".T. .OR. .T.", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest81", ".T. OR .T.", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest82", ".T. .OR. .NOT. .T.", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest83", ".T. OR NOT .T.", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest84", ".NOT. .T. .OR. .T.", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest85", " NOT .T. OR .T.", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest86", ".NOT. .T. .OR. .NOT. .T.", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "LogicTest87", " NOT .T. OR NOT .T.", (xbBool) xbFalse );
+
+ iRc += TestMethod( &x, MyFile, po, "FuncTest48", "ISALPHA( \"12345\" )", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest49", "ISALPHA( \"ABCDEF\" )", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest50", "ISALPHA( \"A1234\" )", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest51", "ISLOWER( \"12345\" )", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest52", "ISLOWER( \"ABCDEF\" )", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest53", "ISLOWER( \"abc123\" )", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest54", "ISLOWER( \"xyz\" )", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest55", "ISUPPER( \"12345\" )", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest56", "ISUPPER( \"ABCDEF\" )", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest57", "ISUPPER( \"abc123\" )", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest58", "ISUPPER( \"xyz\" )", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest59", "ISUPPER( \"Xyz\" )", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest60", "IIF( .T., \"TRUE \", \"FALSE\" )", "TRUE ", 5 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest61", "IIF( .F., \"TRUE \", \"FALSE\" )", "FALSE", 5 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest62", "DEL()", " ", 1 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest63", "DELETED()", (xbBool) xbFalse );
+ iRc += TestMethod( po, "DeleteRecord()", MyFile->DeleteRecord(), XB_NO_ERROR );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest64", "DEL()", "*", 1 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest65", "DELETED()", (xbBool) xbTrue );
+ iRc += TestMethod( po, "UndeleteRecord()", MyFile->UndeleteRecord(), XB_NO_ERROR );
+
+
+ iRc += TestMethod( po, "Close()", MyFile->Close(), XB_NO_ERROR );
+ delete MyFile;
+
+ if( po > 0 || iRc < 0 )
+ fprintf( stdout, "Total Errors = %d\n", iRc * -1 );
+
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], iRc * -1 );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ return iRc;
+}
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_file.cpp b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_file.cpp
new file mode 100755
index 0000000..0db6eca
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_file.cpp
@@ -0,0 +1,209 @@
+/* xb_test_file.cpp
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+// This program tests the file functions
+
+// usage: xb_test_file QUITE|NORMAL|VERBOSE
+
+
+#include "xbase.h"
+
+
+using namespace xb;
+
+
+#include "tstfuncs.cpp"
+
+
+int main( int argCnt, char **av )
+{
+ int iRc = 0;
+ int iPo = 1; /* print option */
+ /* 0 - QUIET */
+ /* 1 - NORMAL */
+ /* 2 - VERBOSE */
+
+ if( argCnt > 1 ) {
+ if( av[1][0] == 'Q' )
+ iPo = 0;
+ else if( av[1][0] == 'V' )
+ iPo = 2;
+ }
+ xbXBase x;
+
+ #ifdef XB_LOGGING_SUPPORT
+ x.SetLogDirectory( PROJECT_LOG_DIR );
+ x.EnableMsgLogging();
+ if( iPo ){
+ std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
+ }
+ xbString sMsg;
+ sMsg.Sprintf( "Program [%s] initializing...", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ InitTime();
+ xbFile f( &x );
+ xbString sWrkStr;
+ xbString sWrkStr2;
+ sWrkStr = PROJECT_DATA_DIR;
+ f.SetDataDirectory( PROJECT_DATA_DIR );
+
+ #ifdef WIN32
+ sWrkStr.SwapChars( '/', '\\' );
+ #else
+ sWrkStr.SwapChars( '\\', '/' );
+ #endif
+
+ iRc += TestMethod( iPo, "Set/GetDataDirectory()", f.GetDataDirectory(), sWrkStr, sWrkStr.Len());
+
+ f.SetFileName( "TestFile.txt" );
+ sWrkStr = "TestFile.txt";
+ iRc += TestMethod( iPo, "Set/GetFileName()", f.GetFileName(), sWrkStr, sWrkStr.Len());
+
+ f.GetFileType( sWrkStr );
+ iRc += TestMethod( iPo, "GetFileType()", sWrkStr, "TXT", 3 );
+
+ #ifdef WIN32
+ sWrkStr = "\\my\\directory\\";
+ #else
+ sWrkStr = "/my/directory/";
+ #endif
+
+ f.SetDirectory( sWrkStr );
+ iRc += TestMethod( iPo, "Set/GetDirectory()", f.GetDirectory(), sWrkStr, sWrkStr.Len());
+
+ sWrkStr += "TestFile.txt";
+ iRc += TestMethod( iPo, "GetFqFileName()", f.GetFqFileName(), sWrkStr, 26 );
+
+ #ifdef WIN32
+ sWrkStr = "\\some\\directory\\myfile.dat";
+ sWrkStr2 = "\\some\\directory\\";
+ #else
+ sWrkStr = "/some/directory/myfile.dat";
+ sWrkStr2 = "/some/directory/";
+ #endif
+
+ f.SetFqFileName( sWrkStr );
+ iRc += TestMethod( iPo, "GetDirectory()", f.GetDirectory(), sWrkStr2, 16 );
+ iRc += TestMethod( iPo, "GetFileName()", f.GetFileName(), "myfile.dat", 10 );
+
+ iRc += TestMethod( iPo, "NameSuffixMissing()", f.NameSuffixMissing( "myfile.dbf", 1 ), 0 );
+ iRc += TestMethod( iPo, "NameSuffixMissing()", f.NameSuffixMissing( "myfile", 1 ), 1 );
+ iRc += TestMethod( iPo, "NameSuffixMissing()", f.NameSuffixMissing( "MYFILE", 1 ), 2 );
+
+ f.SetDirectory( PROJECT_DATA_DIR );
+ f.SetFileName( "xbfile.txt" );
+
+ iRc += TestMethod( iPo, "xbFopen()", f.xbFopen( "w+b", XB_MULTI_USER ), XB_NO_ERROR );
+
+ xbString sTest;
+ sTest = "Test Data";
+ iRc += TestMethod( iPo, "xbWrite()", f.xbFwrite( sTest.Str(), 9, 1 ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "xbFclose()", f.xbFclose(), XB_NO_ERROR );
+
+ iRc += TestMethod( iPo, "xbFopen()", f.xbFopen( "r+b", XB_MULTI_USER ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "xbFseek()", f.xbFseek( 0, SEEK_SET ), XB_NO_ERROR );
+ char buf[10];
+ for( int i = 0; i < 10; i++ )
+ buf[i] = 0x00;
+ iRc += TestMethod( iPo, "xbFread()", f.xbFread( buf, 5, 1 ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "xbFread()", buf, "Test ", 5 );
+
+ iRc += TestMethod( iPo, "xbFclose()", f.xbFclose(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "xbRemove()", f.xbRemove(), XB_NO_ERROR );
+ xbInt16 iWork = 100;
+ char cBuf[9];
+ char *p = cBuf;
+ f.ePutInt16( cBuf, iWork );
+ iRc += TestMethod( iPo, "Put/GetShort()", f.eGetInt16( p ), 100 );
+
+ xbInt32 lWork = 10101;
+ f.ePutInt32( p, lWork );
+ iRc += TestMethod( iPo, "Put/GetLong()", f.eGetInt32( p ), 10101 );
+
+ lWork = 2147483647;
+ f.ePutInt32( p, lWork );
+ iRc += TestMethod( iPo, "Put/GetLong()", f.eGetInt32( p ), 2147483647 );
+ iRc += TestMethod( iPo, "Put/GetLong()", (xbInt32) f.eGetUInt32( p ), 2147483647 );
+
+ xbDouble d = 123456.789;
+ f.ePutDouble( p, d );
+ iRc += TestMethod( iPo, "Put/GetDouble()", f.eGetDouble( p ), 123456.789 );
+
+ xbString sFqnS;
+ xbString sFqnT;
+ xbFile f2( &x );
+ iRc += TestMethod( iPo, "CreateUniqueFileName()", f2.CreateUniqueFileName( PROJECT_DATA_DIR, "dbf", sFqnS ), XB_NO_ERROR );
+
+ iRc += TestMethod( iPo, "FileExists()", f2.FileExists( sFqnS ), xbFalse );
+ iRc += TestMethod( iPo, "xbFopen()", f2.xbFopen( "w+b", sFqnS, XB_SINGLE_USER ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "xbFclose()", f2.xbFclose(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "FileExists()", f2.FileExists( sFqnS ), xbTrue );
+
+ iRc += TestMethod( iPo, "CreateUniqueFileName()", f2.CreateUniqueFileName( PROJECT_DATA_DIR, "dbf", sFqnT ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "xbRename()", f2.xbRename( sFqnS, sFqnT ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "xbRemove()", f.xbRemove( sFqnT ), XB_NO_ERROR );
+
+ xbString sFn;
+ iRc += TestMethod( iPo, "GetFileNamePart()", f2.GetFileNamePart( sFqnS , sFn ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "GetFileExtPart()", f2.GetFileExtPart( sFqnS , sFn ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "GetFileExtPart()", f2.GetFileDirPart( sFqnS , sFn ), XB_NO_ERROR );
+
+ iRc += TestMethod( iPo, "SetBlockSize()", f.SetBlockSize( 100 ), XB_INVALID_BLOCK_SIZE );
+ iRc += TestMethod( iPo, "SetBlockSize()", f.SetBlockSize( 512 ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "GetBlockSize()", (xbInt32) f.GetBlockSize(), 512 );
+
+ char BlockBuf[513];
+ memset( BlockBuf, 0x00, 513 );
+ iRc += TestMethod( iPo, "xbFopen()", f.xbFopen( "w+b", XB_SINGLE_USER ), XB_NO_ERROR );
+
+ for( int i = 0; i < 512; i++ )
+ BlockBuf[i] = 'A';
+ iRc += TestMethod( iPo, "WriteBlock()", f.WriteBlock( 0L, 512, BlockBuf ), XB_NO_ERROR );
+
+ for( int i = 0; i < 512; i++ )
+ BlockBuf[i] = 'B';
+ iRc += TestMethod( iPo, "WriteBlock()", f.WriteBlock( 1L, 512, BlockBuf ), XB_NO_ERROR );
+
+ for( int i = 0; i < 512; i++ )
+ BlockBuf[i] = 'C';
+ iRc += TestMethod( iPo, "WriteBlock()", f.WriteBlock( 2L, 512, BlockBuf ), XB_NO_ERROR );
+
+ char BlockBuf2[513];
+ memset( BlockBuf2, 0x00, 513 );
+ iRc += TestMethod( iPo, "ReadBlock()", f.ReadBlock( 2L, 512, BlockBuf2 ), XB_NO_ERROR );
+
+ xbString s1 = BlockBuf;
+ xbString s2 = BlockBuf2;
+
+ iRc += TestMethod( iPo, "ReadBlock()", s1, s2, 512 );
+ iRc += TestMethod( iPo, "xbTruncate()", f.xbTruncate( 1000 ), XB_NO_ERROR );
+
+ xbUInt64 ullFsize;
+ iRc += TestMethod( iPo, "GetFileSize()", f.GetFileSize( ullFsize ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "xbGetFileSize()", (xbInt32) ullFsize, 1000 );
+ iRc += TestMethod( iPo, "xbFclose()", f.xbFclose(), XB_NO_ERROR );
+
+
+ if( iPo > 0 || iRc < 0 )
+ fprintf( stdout, "Total Errors = %d\n", iRc * -1 );
+
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], iRc * -1 );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ return iRc;
+}
+
diff --git a/src/tests/xb_test_filter.cpp b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_filter.cpp
index 000e196..000e196 100755
--- a/src/tests/xb_test_filter.cpp
+++ b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_filter.cpp
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_funcs.cpp b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_funcs.cpp
new file mode 100755
index 0000000..7eb8b16
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_funcs.cpp
@@ -0,0 +1,296 @@
+/* xb_test_funcs.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+// This program tests the xb functions
+// usage: xb_test_funcs QUITE|NORMAL|VERBOSE
+
+#include "xbase.h"
+using namespace xb;
+
+#include "tstfuncs.cpp"
+
+
+/**************************************************************************/
+
+int main( int argCnt, char **av )
+{
+ xbInt16 iRc = 0;
+ xbInt16 rc2 = 0;
+ xbInt16 po = 1; /* print option */
+ /* 0 - QUIET */
+ /* 1 - NORMAL */
+ /* 2 - VERBOSE */
+
+ if( argCnt > 1 ) {
+ if( av[1][0] == 'Q' )
+ po = 0;
+ else if( av[1][0] == 'V' )
+ po = 2;
+ }
+
+ xbSchema MyRecord[] =
+ {
+ { "NUM1", XB_NUMERIC_FLD, 9, 2 },
+ { "DATE1", XB_DATE_FLD, 8, 0 },
+ { "DATE2", XB_DATE_FLD, 8, 0 },
+ { "",0,0,0 }
+ };
+
+
+ xbXBase x;
+ xbDbf * MyFile;
+ xbDate d;
+
+ xbString sResult;
+ xbDate dtResult;
+ xbDouble dResult;
+ xbBool bResult;
+ xbDate dtIn( "19890209" );
+
+
+ #ifdef XB_LOGGING_SUPPORT
+ x.SetLogDirectory( PROJECT_LOG_DIR );
+ x.EnableMsgLogging();
+ if( po ){
+ std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
+ }
+ xbString sMsg;
+ sMsg.Sprintf( "Program [%s] initializing...", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ x.SetDataDirectory( PROJECT_DATA_DIR );
+ x.EnableMsgLogging();
+ InitTime();
+
+ if( po > 0 ){
+ std::cout << "XBase Expression testing program.." << std::endl;
+ std::cout << "This program tests the XBase expression logic." << std::endl;
+ std::cout << "Default Data Directory is [" << x.GetDataDirectory().Str() << "]" << std::endl;
+ }
+
+ #ifdef XB_DBF4_SUPPORT
+ MyFile = new xbDbf4( &x ); /* version 4 dbf file */
+ #else
+ MyFile = new xbDbf3( &x ); /* version 3 dbf file */
+ #endif
+
+ rc2 = MyFile->CreateTable( "Functest.DBF", "ExpTest", MyRecord, XB_OVERLAY, XB_MULTI_USER );
+ iRc += TestMethod( po, "CreateTable()", rc2, XB_NO_ERROR );
+ iRc += TestMethod( po, "PutField()", MyFile->PutFloatField( "NUM1", 5 ), XB_NO_ERROR );
+ iRc += TestMethod( po, "PutField()", MyFile->PutField( "DATE1", "19890303" ), XB_NO_ERROR );
+ iRc += TestMethod( po, "PutField()", MyFile->PutField ( "DATE2", "20120708" ), XB_NO_ERROR );
+
+ #ifdef XB_LOCKING_SUPPORT
+ MyFile->SetAutoLock( xbFalse );
+ #endif // XB_LOCKING_SUPPORT
+
+
+ iRc += TestMethod( po, "AppendRecord()", MyFile->AppendRecord(), XB_NO_ERROR );
+
+ iRc += TestMethod( po, "ABS( -222, dResult )", x.ABS( -222, dResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "ABS( -222, dResult )", -222, -222 );
+ iRc += TestMethod( po, "ABS( 333, dResult )", x.ABS( 333, dResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "ABS( 333, dResult )", 333, 333 );
+
+ iRc += TestMethod( po, "x.ALLTRIM( \" zzz \", sResult )", x.ALLTRIM( " zzz ", sResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.ALLTRIM( \" zzz \", sResult )", sResult, "zzz", 3 );
+
+ iRc += TestMethod( po, "ASC( \"A\", dResult )", x.ASC( "A", dResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "ASC( \"A\" )", dResult, (xbDouble) 65 );
+ iRc += TestMethod( po, "ASC( \"B\", dResult )", x.ASC( "B", dResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "ASC( \"B\" )", dResult, (xbDouble) 66 );
+ iRc += TestMethod( po, "AT( \"ABC\", \"XYZABC\", 4 )", x.AT( "ABC", "XYZABC", dResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "AT( \"ABC\", \"XYZABC\", 4 )", dResult, (xbDouble) 4 );
+ iRc += TestMethod( po, "CDOW( dtIn, sResult )", x.CDOW( dtIn, sResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "CDOW( dtIn, sResult )", sResult, "Thursday", 8 );
+ iRc += TestMethod( po, "CHR( 101, sResult )", x.CHR( 101, sResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "CHR( 101, sResult )", sResult, "e", 1 );
+
+ dtIn = "19870103";
+ iRc += TestMethod( po, "CMONTH( dtIn, sResult )", x.CMONTH( dtIn, sResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "CMONTH( dtIn, sResult )", sResult, "January", 7 );
+ iRc += TestMethod( po, "CTOD( \"01\\03\\87\", dtResult )", x.CTOD( "01\\03\\87", dtResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "CTOD( \"01\\03\\87\", dtResult )", dtResult.Str(), "19870103", 8 );
+ iRc += TestMethod( po, "DATE( dtResult )", x.DATE( dtResult ), XB_NO_ERROR );
+
+ d.Sysdate();
+ iRc += TestMethod( po, "DATE( dtResult )", dtResult.Str(), d.Str(), 8 );
+ iRc += TestMethod( po, "DAY(\"19870103\", dResult )", x.DAY( "19870103", dResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "DAY(\"19870103\", dResult )", dResult, (xbDouble) 3 );
+
+ iRc += TestMethod( po, "DEL( MyFile, sResult )", x.DEL( MyFile, sResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "DEL( MyFile, sResult )", sResult, " ", 1 );
+
+ iRc += TestMethod( po, "DELETED( MyFile, bResult )", x.DELETED( MyFile, bResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "DELETED( MyFile, bResult )", (xbInt32) bResult, xbFalse );
+
+ iRc += TestMethod( po, "DeleteRecord()", MyFile->DeleteRecord(), XB_NO_ERROR );
+
+ iRc += TestMethod( po, "DEL( MyFile, sResult )", x.DEL( MyFile, sResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "DEL( MyFile, sResult )", sResult, "*", 1 );
+ iRc += TestMethod( po, "DELETED( MyFile, bResult )", x.DELETED( MyFile, bResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "DELETED( MyFile, bResult )", (xbInt32) bResult, xbTrue );
+
+ iRc += TestMethod( po, "UndeleteRecord()", MyFile->UndeleteRecord(), XB_NO_ERROR );
+
+ iRc += TestMethod( po, "DESCEND(\"ABCDE\", sResult )", x.DESCEND( "ABCDE", sResult ), XB_NO_ERROR );
+
+ char sDescendResult[6]; // = "";
+ sDescendResult[0] = (char) 0xBE;
+ sDescendResult[1] = (char) 0xBD;
+ sDescendResult[2] = (char) 0xBC;
+ sDescendResult[3] = (char) 0xBB;
+ sDescendResult[4] = (char) 0xBA;
+ sDescendResult[5] = (char) 0x00;
+ iRc += TestMethod( po, "DESCEND(\"ABCDE\", sResult )", sResult, sDescendResult, 5 );
+
+ iRc += TestMethod( po, "DESCEND( 12345, dResult )", x.DESCEND( 12345, dResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "DESCEND( 12345, dResult )", dResult, (xbDouble) -12345 );
+ dtIn = "19890303";
+ iRc += TestMethod( po, "DESCEND( dtIn, dtResult )", x.DESCEND( dtIn, dtResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "DESCEND( dtIn, dtResult )", dtResult.Str(), "29101031", 8 );
+ dtIn = "20120708";
+ iRc += TestMethod( po, "DESCEND( dtIn, dtResult )", x.DESCEND( dtIn, dtResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "DESCEND( dtIn, dtResult )", dtResult.Str(), "28870625" , 8 );
+
+ dtIn = "20171014";
+ iRc += TestMethod( po, "DOW( dtIn, dResult )", x.DOW( dtIn, dResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "DOW(\"20171015\", dResult )", dResult, (xbDouble) 0 );
+ dtIn++;
+ iRc += TestMethod( po, "DOW( dtIn, dResult )", x.DOW( dtIn, dResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "DOW(\"20171016\", dResult )", dResult, (xbDouble) 1 );
+ dtIn++;
+ iRc += TestMethod( po, "DOW( dtIn, dResult )", x.DOW( dtIn, dResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "DOW(\"20171021\", dResult )", dResult, (xbDouble) 2 );
+
+ dtIn = "20000101";
+ iRc += TestMethod( po, "DTOC( dtIn, sResult )", x.DTOC( dtIn, sResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "DTOC( dtIn, sResult )", sResult, "01/01/00", 8 );
+ iRc += TestMethod( po, "DTOS( dtIn, sResult )", x.DTOS( dtIn, sResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "DTOS( dtIn, sResult )", sResult, "20000101", 8 );
+ iRc += TestMethod( po, "EXP( 1, dResult )", x.EXP( 1, dResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "EXP( 1, dResult )", dResult, 2.71828, .001 );
+ iRc += TestMethod( po, "x.INT( 621.5, dResult )", x.INT( 621.5, dResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.INT( 621.5, dResult )", dResult, (xbDouble) 621 );
+ iRc += TestMethod( po, "x.ISALPHA( \"1\", bResult )", x.ISALPHA( "1", bResult ), 0 );
+ iRc += TestMethod( po, "x.ISALPHA( \"1\", bResult )", (xbInt32) bResult, xbFalse );
+ iRc += TestMethod( po, "x.ISALPHA( \"A\", bResult )", x.ISALPHA( "A", bResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.ISALPHA( \"A\", bResult )", (xbInt32) bResult, xbTrue );
+ iRc += TestMethod( po, "x.ISLOWER( \"A\", bResult )", x.ISLOWER( "A", bResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.ISLOWER( \"A\", bResult )", bResult, xbFalse );
+ iRc += TestMethod( po, "x.ISLOWER( \"a\", bResult )", x.ISLOWER( "a", bResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.ISLOWER( \"a\", bResult )", bResult, xbTrue );
+ iRc += TestMethod( po, "x.ISUPPER( \"A\", bResult )", x.ISUPPER( "A", bResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.ISUPPER( \"A\", bResult )", bResult, xbTrue );
+ iRc += TestMethod( po, "x.ISUPPER( \"a\", bResult )", x.ISUPPER( "a", bResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.ISUPPER( \"a\", bResult )", bResult, xbFalse );
+ iRc += TestMethod( po, "x.LEFT( \"STRING\", 3, sResult )", x.LEFT( "STRING", 3, sResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.LEFT( \"STRING\", 3, sResult )", sResult, "STR", 3 );
+ iRc += TestMethod( po, "x.LEN( \"AAAAA\", dResult )", x.LEN( "AAAAA", dResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.LEN( \"AAAAA\", dResult )", dResult, (xbDouble) 5 );
+ iRc += TestMethod( po, "x.LOG( 2, dResult )", x.LOG( 2, dResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.LOG( 2, dResult )", dResult, (xbDouble) 0.69314700, .0001 );
+ iRc += TestMethod( po, "x.LOWER( \"AAAA\", sResult )", x.LOWER( "AAAA", sResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.LOWER( \"AAAA\", sResult )", sResult, "aaaa", 4 );
+ iRc += TestMethod( po, "x.LTRIM( \" xxxxxx\" )", x.LTRIM( " xxxxxx", sResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.LTRIM( \" xxxxxx\" )", sResult, "xxxxxx", 6 );
+ iRc += TestMethod( po, "x.MAX( 10, 27, dResult )", x.MAX( 10, 27, dResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.MAX( 10, 27, dResult )", dResult, (xbDouble) 27 );
+ iRc += TestMethod( po, "x.MIN( 10, 5, dResult )", x.MIN( 10, 5, dResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.MIN( 10, 5, dResult )", dResult, (xbDouble) 5 );
+ iRc += TestMethod( po, "x.MONTH( dtIn, dResult )", x.MONTH( dtIn, dResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.MONTH( dtIn, dResult )", dResult, (xbDouble) 1 );
+ iRc += TestMethod( po, "x.RECCOUNT( MyFile, dResult)", x.RECNO( MyFile, dResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.RECCOUNT( MyFile, dResult)", dResult, (xbDouble) 1 );
+ iRc += TestMethod( po, "x.RECNO( MyFile, dResult)", x.RECNO( MyFile, dResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.RECNO( MyFile, dResult)", dResult, (xbDouble) 1 );
+ iRc += TestMethod( po, "x.REPLICATE( \"abc\", 3, sResult )", x.REPLICATE( "abc", 3, sResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.REPLICATE( \"abc\", 3, sResult )", sResult, "abcabcabc", 9 );
+ iRc += TestMethod( po, "x.RIGHT( \"STRING\", 3, sResult )", x.RIGHT( "STRING", 3, sResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.RIGHT( \"STRING\", 3, sResult )", sResult, "ING", 3 );
+ iRc += TestMethod( po, "x.RIGHT( \"STRING\", 3, sResult )", x.RIGHT( "STRING", 5, sResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.RIGHT( \"STRING\", 3, sResult )", sResult, "TRING", 5 );
+ iRc += TestMethod( po, "x.RIGHT( \"STRING\", 3, sResult )", x.RIGHT( "STRING", 6, sResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.RIGHT( \"STRING\", 3, sResult )", sResult, "STRING", 6 );
+ iRc += TestMethod( po, "x.RIGHT( \"STRING\", 3, sResult )", x.RIGHT( "STRING", 7, sResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.RIGHT( \"STRING\", 3, sResult )", sResult, "STRING", 6 );
+ iRc += TestMethod( po, "x.RTRIM( \"zzz \", sResult )", x.RTRIM( "zzz ", sResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.RTRIM( \"zzz \", sResult )", sResult, "zzz", 3 );
+ iRc += TestMethod( po, "x.TRIM( \"aaa \", sResult )", x.TRIM( "aaa ", sResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.TRIM( \"aaa \", sResult )", sResult, "aaa", 3 );
+
+ iRc += TestMethod( po, "x.SPACE( 3, sResult )", x.SPACE( 3, sResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.SPACE( 3, sResult )", sResult, " ", 3 );
+ iRc += TestMethod( po, "x.SQRT( 9, dResult )", x.SQRT( 9, dResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.SQRT( 9, dResult )", dResult, (xbDouble) 3 );
+ iRc += TestMethod( po, "x.STOD( \"20000101\", dtResult )", x.STOD( "20000101", dtResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.STOD( \"20000101\", dtResult )",dtResult.Str(), "20000101", 8 );
+
+ xbString sPadChar = " ";
+ iRc += TestMethod( po, "x.STR( 2001, 4, 0, sPadChar, sResult )", x.STR( 2001, 4, 0, sPadChar, sResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.STR( 2001, 4, 0, sPadChar, sResult )", sResult, "2001", 4 );
+ iRc += TestMethod( po, "x.STR( 2002, 3, 0, sPadChar, sResult )", x.STR( 2002, 3, 0, sPadChar, sResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.STR( 2002, 3, 0, sPadChar, sResult )", sResult, "***", 3 );
+ iRc += TestMethod( po, "x.STR( 203.2, 6, 2, sPadChar, sResult )", x.STR( 203.2, 6, 2, sPadChar, sResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.STR( 203.2, 6, 2, sPadChar, sResult )", sResult, "203.20", 6 );
+ iRc += TestMethod( po, "x.STR( 204.11, 8, 2, sPadChar, sResult )", x.STR( 204.11, 8, 2, sPadChar, sResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.STR( 204.11, 8, 2, sPadChar, sResult )", sResult, " 204.11", 8 );
+ iRc += TestMethod( po, "x.STR( -205.45, 8, 2, sPadChar, sResult )", x.STR( -205.45, 8, 2, sPadChar, sResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.STR( -205.45, 8, 2, sPadChar, sResult )", sResult, " -205.45", 8 );
+ iRc += TestMethod( po, "x.STR( -306.45, 8, 2, sPadChar, sResult )", x.STR( -306.45, 8, 2, sPadChar, sResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.STR( -306.45, 8, 2, sPadChar, sResult )", sResult, " -306.45", 8 );
+ iRc += TestMethod( po, "x.STR( 6.56, 5, 0, sResult )", x.STR( 6.56, 5, 0, sResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.STR( 6.56, 5, 0, sResult )", sResult, " 7", 5 );
+ iRc += TestMethod( po, "x.STR( 7.77, 5, sResult )", x.STR( 7.77, 5, sResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.STR( 7.77, 5, sResult )", sResult, " 8", 5 );
+ iRc += TestMethod( po, "x.STR( 8, sResult )", x.STR( 8, sResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.STR( 8, sResult )", sResult, " 8", 10 );
+
+ sPadChar = "0";
+ iRc += TestMethod( po, "x.STR( -5.2, 10, 2, sPadChar, sResult )", x.STR( -5.2, 10, 2, sPadChar, sResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.STR( -5.2, 10, 2, sPadChar, sResult )", sResult, "00000-5.20", 10 );
+ iRc += TestMethod( po, "x.STRZERO( 8, 8, 0, sResult )", x.STRZERO( 8, 8, 0, sResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.STRZERO( 8, 8, 0, sResult )", sResult, "00000008", 8 );
+ iRc += TestMethod( po, "x.STRZERO( -8, 8, 0, sResult )", x.STRZERO( -8, 8, 0, sResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.STRZERO( -8, 8, 0, sResult )", sResult, "-0000008", 8 );
+ iRc += TestMethod( po, "x.STRZERO( -205.45, 10, 3 )", x.STRZERO( -205.45, 10, 3, sResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.STRZERO( -205.45, 10, 3 )", sResult, "-00205.450", 10 );
+ iRc += TestMethod( po, "x.STRZERO( -205.45, 3, 1 )", x.STRZERO( -205.45, 3, 1, sResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.STRZERO( -205.45, 3, 1 )", sResult, "***", 3 );
+ iRc += TestMethod( po, "x.SUBSTR( \"TESTSTRING\", 5, 2, sResult )", x.SUBSTR( "TESTSTRING", 5, 2, sResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.SUBSTR( \"TESTSTRING\", 5, 2, sResult )", sResult, "ST", 2 );
+ iRc += TestMethod( po, "x.UPPER( \"abababa\", sResult )", x.UPPER( "abababa", sResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.UPPER( \"abababa\", sResult )", sResult, "ABABABA", 7 );
+ iRc += TestMethod( po, "x.VAL( \"65\", dResult )", x.VAL( "65", dResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.VAL( \"65\", dResult )", dResult, (xbDouble) 65 );
+ iRc += TestMethod( po, "x.YEAR( dtIn, dResult )", x.YEAR( dtIn, dResult ), XB_NO_ERROR );
+ iRc += TestMethod( po, "x.YEAR( dtIn, dResult )", dResult, (xbDouble) 2000 );
+
+
+ iRc += TestMethod( po, "Close()", MyFile->Close(), XB_NO_ERROR );
+
+
+ delete MyFile;
+ if( po > 0 || iRc < 0 )
+ fprintf( stdout, "Total Errors = %d\n", iRc * -1 );
+
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], iRc * -1 );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ return iRc;
+}
diff --git a/src/tests/xb_test_linklist.cpp b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_linklist.cpp
index 288ee99..288ee99 100755
--- a/src/tests/xb_test_linklist.cpp
+++ b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_linklist.cpp
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_lock.cpp b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_lock.cpp
new file mode 100755
index 0000000..2df71a8
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_lock.cpp
@@ -0,0 +1,1066 @@
+/* xb_test_lock.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+// This program tests the locking functions of xbase
+// usage: xb_test_lock QUITE|NORMAL|VERBOSE
+
+
+#include "xbase.h"
+
+using namespace xb;
+
+#include "tstfuncs.cpp"
+
+/****************************************************************/
+int main( int argCnt, char **av )
+{
+ xbInt16 iRc = 0;
+ xbInt16 iRc2;
+ xbInt16 po = 1; /* print option */
+ /* 0 - QUIET */
+ /* 1 - NORMAL */
+ /* 2 - VERBOSE */
+
+ xbInt16 iErrorStop = 0;
+ xbString sLockFile;
+ xbString sLockFile2;
+ xbString sLockCmd;
+ xbString sResult;
+
+ xbXBase x;
+ xbDbf * MyFile;
+
+ if( argCnt > 1 ) {
+ if( av[1][0] == 'Q' )
+ po = 0;
+ else if( av[1][0] == 'V' )
+ po = 2;
+ }
+
+ xbSchema MyRecord[] =
+ {
+ { "LOCKTEST", XB_CHAR_FLD, 5, 0 },
+ #ifdef XB_MEMO_SUPPORT
+ { "MEMOTEST", XB_MEMO_FLD, 10, 0 },
+ #endif
+ { "",0,0,0 }
+ };
+
+
+ #ifdef XB_LOGGING_SUPPORT
+ x.SetLogDirectory( PROJECT_LOG_DIR );
+ x.EnableMsgLogging();
+ if( po > 0 ){
+ std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
+ }
+ xbString sMsg;
+ sMsg.Sprintf( "Program [%s] initializing...", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+
+ x.SetDataDirectory( PROJECT_DATA_DIR );
+ InitTime();
+ #ifdef XB_DBF4_SUPPORT
+ MyFile = new xbDbf4( &x ); // version 4 dbf file
+ #else
+ MyFile = new xbDbf3( &x ); // version 3 dbf file
+ #endif
+
+ iRc2 = MyFile->CreateTable( "LockTest.DBF", "LockTest", MyRecord, XB_OVERLAY, XB_MULTI_USER );
+ iRc += TestMethod( po, "CreateTable()", iRc2, XB_NO_ERROR );
+
+ #ifdef XB_MDX_SUPPORT
+ xbIx *ixPtr;
+ void *pTag;
+ iRc2 = MyFile->CreateTag( "MDX", "LockTag", "LOCKTEST", "", 0, 0, XB_OVERLAY, &ixPtr, &pTag );
+ iRc += TestMethod( po, "CreateTag()", iRc2, XB_NO_ERROR );
+ #endif // XB_MDX_SUPPORT
+
+
+ iRc += TestMethod( po, "PutField()", MyFile->PutField( "LOCKTEST", "TEST" ), XB_NO_ERROR );
+ iRc += TestMethod( po, "AppendRecord()", MyFile->AppendRecord(), XB_NO_ERROR );
+ iRc += TestMethod( po, "Close()", MyFile->Close(), XB_NO_ERROR );
+
+ sLockFile.Sprintf( "%slocktest.txt", PROJECT_DATA_DIR );
+ // std::cout << "xb_test_lock - lockfile = [ " << sLockFile.Str() << "]\n";
+
+ remove( sLockFile.Str() );
+
+ #if defined (HAVE_FORK_F)
+ pid_t pid;
+ if(( pid = fork()) < 0 ){
+ std::cout << "fork error\n";
+ exit(1);
+ }
+
+ if( pid == 0 ){
+ // child task
+ xbDbf * MyFileChld;
+ xbInt16 iRcChld = 0;
+ xbBool bTblOpenChld = xbFalse;
+ xbInt32 iChildLoop = 0;
+ xbBool bDone = xbFalse;
+ xbString sLastLockCmd;
+
+ #ifdef XB_DBF4_SUPPORT
+ MyFileChld = new xbDbf4( &x ); // version 4 dbf file
+ #else
+ MyFileChld = new xbDbf3( &x ); // version 3 dbf file
+ #endif
+
+ x.xbSleep( 250 );
+
+ while( !bDone ){
+
+ iRc2 = GetCmd( x, sLockFile, sLockCmd, 'C', po );
+
+ if( sLockCmd == sLastLockCmd )
+ iChildLoop++;
+ else
+ sLastLockCmd = sLockCmd;
+
+ #ifdef XB_LOGGING_SUPPORT
+ if( sLockCmd != "OK" && sLockCmd != "FAIL" ){
+ sMsg.Sprintf( "Program [%s] Child task retrieved command=[%s] RC=[%d]", av[0], sLockCmd.Str(), iRc2 );
+ x.WriteLogMessage( sMsg );
+ }
+ #endif
+
+ if( iRc2 == 0 ){
+
+ if( sLockCmd == "OK" || sLockCmd == "FAIL" )
+ x.xbSleep( 250 );
+
+ else if( sLockCmd == "EXIT" ){
+ bDone = xbTrue;
+
+ } else if( sLockCmd == "START" && bTblOpenChld ){
+ // came back before the parent task could process the result
+ x.xbSleep( 250 );
+
+ } else {
+ if( sLockCmd == "START" ){
+ // begin the process
+ iRcChld = MyFileChld->Open( "LockTest.DBF" );
+ if( iRcChld != XB_NO_ERROR ){
+ sResult = "FAIL";
+ } else {
+ sResult = "OK";
+ bTblOpenChld = xbTrue;
+ }
+
+ } else if( sLockCmd == "TL" ){
+ // table lock
+ if(( iRcChld = MyFileChld->LockTable( XB_LOCK )) != XB_NO_ERROR )
+ sResult = "FAIL";
+ else
+ sResult = "OK";
+
+ } else if( sLockCmd == "TU" ){
+ // table unlock
+ if(( iRcChld = MyFileChld->LockTable( XB_UNLOCK )) != XB_NO_ERROR )
+ sResult = "FAIL";
+ else
+ sResult = "OK";
+
+ } else if( sLockCmd == "RL" ){
+ // record lock
+ if(( iRcChld = MyFileChld->LockRecord( XB_LOCK, 1 )) != XB_NO_ERROR )
+ sResult = "FAIL";
+ else
+ sResult = "OK";
+
+ } else if( sLockCmd == "RU" ){
+ // record unlock
+ if(( iRcChld = MyFileChld->LockRecord( XB_UNLOCK, 1 )) != XB_NO_ERROR )
+ sResult = "FAIL";
+ else
+ sResult = "OK";
+
+ } else if( sLockCmd == "ML" ){
+ // memo lock
+ #ifdef XB_MEMO_SUPPORT
+ if(( iRcChld = MyFileChld->LockMemo( XB_LOCK )) != XB_NO_ERROR )
+ sResult = "FAIL";
+ else
+ sResult = "OK";
+ #else
+ sLockCmd = "OK";
+ #endif
+
+ } else if( sLockCmd == "MU" ){
+ // memo unlock
+ #ifdef XB_MEMO_SUPPORT
+ if(( iRcChld = MyFileChld->LockMemo( XB_UNLOCK )) != XB_NO_ERROR )
+ sResult = "FAIL";
+ else
+ sResult = "OK";
+ #else
+ sLockCmd = "OK";
+ #endif
+
+ } else if( sLockCmd == "IL" ){
+ // index lock
+ #ifdef XB_MDX_SUPPORT
+ if(( iRcChld = MyFileChld->LockIndices( XB_LOCK )) != XB_NO_ERROR )
+ sResult = "FAIL";
+ else
+ sResult = "OK";
+ #else
+ sLockCmd = "OK";
+ #endif // XB_MDX_SUPPORT
+
+ } else if( sLockCmd == "IU" ){
+ // index unlock
+ #ifdef XB_MDX_SUPPORT
+ if(( iRcChld = MyFileChld->LockIndices( XB_UNLOCK )) != XB_NO_ERROR )
+ sResult = "FAIL";
+ else
+ sResult = "OK";
+ #else
+ sLockCmd = "OK";
+ #endif // XB_MDX_SUPPORT
+ }
+
+
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Child task [%s] Result [%s] RC = [%d]", av[0], sLockCmd.Str(), sResult.Str(), iRcChld );
+ x.WriteLogMessage( sMsg );
+ #endif
+ SetCmd( x, sLockFile, sResult, 'C', po );
+ if( sResult == "FAIL" ){
+ bDone = xbTrue;
+ MyFileChld->Close();
+ delete MyFileChld;
+ }
+ }
+ } else {
+ iRc = iRc2;
+ bDone = xbTrue;
+ }
+ //std::cout << "clc [" << iChildLoop++ << "][" << bDone << "][" << sLockCmd.Str() << "]\n";
+ x.xbSleep( 250 );
+ if( iChildLoop > 15 )
+ bDone = xbTrue;
+ }
+ MyFileChld->Close();
+ delete MyFile;
+ delete MyFileChld;
+
+ remove( sLockFile );
+
+ if( po > 0 )
+ std::cout << "Exiting child\n";
+
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Child task terminating", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+
+ } else {
+
+ // parent logic
+ xbInt16 iLoopCtr = 0;
+
+ try{
+ // start
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task issuing START command", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ sLockCmd = "START";
+ SetCmd( x, sLockFile, sLockCmd, 'P', po );
+ sResult = "";
+
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 30 ){
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ x.xbSleep( 250 );
+ iLoopCtr++;
+ }
+
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ if( sResult != "OK" ){
+ iErrorStop = 100;
+ iRc2 = -1;
+ throw iRc2;
+ }
+
+ // table lock
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task issuing TL command", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ sLockCmd = "TL";
+ SetCmd( x, sLockFile, sLockCmd, 'P', po );
+ sResult = "";
+
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 30 ){
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ x.xbSleep( 250 );
+ iLoopCtr++;
+ }
+
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ if( sResult != "OK" ){
+ iErrorStop = 110;
+ iRc2 = -1;
+ throw iRc2;
+ }
+
+ // attempt to lock table, should fail
+ if(( iRc2 = MyFile->Open( "LockTest.DBF" )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc2;
+ }
+
+ if(( iRc2 = MyFile->LockTable( XB_LOCK )) == XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc2;
+ }
+
+ if( po > 0 )
+ std::cout << "[PASS] LockTable Test 1\n";
+
+ // table unlock
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task issuing TU command", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ sLockCmd = "TU";
+ SetCmd( x, sLockFile, sLockCmd, 'P', po );
+ sResult = "";
+
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 30 ){
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ x.xbSleep( 250 );
+ iLoopCtr++;
+ }
+
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ if( sResult != "OK" ){
+ iErrorStop = 140;
+ iRc2 = -1;
+ throw iRc2;
+ }
+
+ if(( iRc2 = MyFile->LockTable( XB_LOCK )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc2;
+ }
+ if( po > 0 )
+ std::cout << "[PASS] LockTable Test 2\n";
+
+ if(( iRc2 = MyFile->LockTable( XB_UNLOCK )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc2;
+ }
+
+ // record lock
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task issuing RL command", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ sLockCmd = "RL";
+ SetCmd( x, sLockFile, sLockCmd, 'P', po );
+ sResult = "";
+
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 30 ){
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ x.xbSleep( 250 );
+ iLoopCtr++;
+ }
+
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ if( sResult != "OK" ){
+ iErrorStop = 170;
+ iRc2 = -1;
+ throw iRc2;
+ }
+
+ if(( iRc2 = MyFile->LockRecord( XB_LOCK, 1 )) == XB_NO_ERROR ){
+ iErrorStop = 180;
+ throw iRc2;
+ }
+ if( po > 0 )
+ std::cout << "[PASS] LockRecord Test 1\n";
+
+ // record unlock
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task issuing RU command", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ sLockCmd = "RU";
+ SetCmd( x, sLockFile, sLockCmd, 'P', po );
+ sResult = "";
+
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 30 ){
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ x.xbSleep( 250 );
+ iLoopCtr++;
+ }
+
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ if( sResult != "OK" ){
+ iErrorStop = 190;
+ iRc2 = -1;
+ throw iRc2;
+ }
+
+ if(( iRc2 = MyFile->LockRecord( XB_LOCK, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 200;
+ throw iRc2;
+ }
+
+ std::cout << "[PASS] LockRecord Test 2\n";
+ if(( iRc2 = MyFile->LockRecord( XB_UNLOCK, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 210;
+ throw iRc2;
+ }
+
+
+ // memo lock
+ #ifdef XB_MEMO_SUPPORT
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task issuing ML command", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif // XB_LOGGING_SUPPORT
+
+ sLockCmd = "ML";
+ SetCmd( x, sLockFile, sLockCmd, 'P', po );
+ sResult = "";
+
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 30 ){
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ x.xbSleep( 250 );
+ iLoopCtr++;
+ }
+
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
+ x.WriteLogMessage( sMsg );
+ #endif // XB_LOGGING_SUPPORT
+
+ if( sResult != "OK" ){
+ iErrorStop = 220;
+ iRc2 = -1;
+ throw iRc2;
+ }
+
+ if(( iRc2 = MyFile->LockMemo( XB_LOCK )) == XB_NO_ERROR ){
+ iErrorStop = 230;
+ throw iRc2;
+ }
+ if( po > 0 )
+ std::cout << "[PASS] LockMemo Test 1\n";
+
+ // memo unlock
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task issuing MU command", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif // XB_LOGGING_SUPPORT
+
+ sLockCmd = "MU";
+ SetCmd( x, sLockFile, sLockCmd, 'P', po );
+ sResult = "";
+
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 30 ){
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ x.xbSleep( 250 );
+ iLoopCtr++;
+ }
+
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
+ x.WriteLogMessage( sMsg );
+ #endif // XB_LOGGING_SUPPORT
+
+ if( sResult != "OK" ){
+ iErrorStop = 240;
+ iRc2 = -1;
+ throw iRc2;
+ }
+
+ if(( iRc2 = MyFile->LockMemo( XB_LOCK )) != XB_NO_ERROR ){
+ iErrorStop = 250;
+ throw iRc2;
+ }
+
+ std::cout << "[PASS] LockMemo Test 2\n";
+ if(( iRc2 = MyFile->LockMemo( XB_UNLOCK )) != XB_NO_ERROR ){
+ iErrorStop = 260;
+ throw iRc2;
+ }
+ #endif // XB_MEMO_SUPPORT
+
+ // index lock
+ #ifdef XB_MDX_SUPPORT
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task issuing IL command", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif // XB_LOGGING_SUPPORT
+
+ sLockCmd = "IL";
+ SetCmd( x, sLockFile, sLockCmd, 'P', po );
+ sResult = "";
+
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 30 ){
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ x.xbSleep( 250 );
+ iLoopCtr++;
+ }
+
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
+ x.WriteLogMessage( sMsg );
+ #endif // XB_LOGGING_SUPPORT
+
+ if( sResult != "OK" ){
+ iErrorStop = 270;
+ iRc2 = -1;
+ throw iRc2;
+ }
+
+ if(( iRc2 = MyFile->LockIndices( XB_LOCK )) == XB_NO_ERROR ){
+ iErrorStop = 280;
+ throw iRc2;
+ }
+ if( po > 0 )
+ std::cout << "[PASS] LockIndex Test 1\n";
+
+ // memo unlock
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task issuing IU command", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif // XB_LOGGING_SUPPORT
+
+ sLockCmd = "IU";
+ SetCmd( x, sLockFile, sLockCmd, 'P', po );
+ sResult = "";
+
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 30 ){
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ x.xbSleep( 250 );
+ iLoopCtr++;
+ }
+
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
+ x.WriteLogMessage( sMsg );
+ #endif // XB_LOGGING_SUPPORT
+
+ if( sResult != "OK" ){
+ iErrorStop = 290;
+ iRc2 = -1;
+ throw iRc2;
+ }
+
+ if(( iRc2 = MyFile->LockIndices( XB_LOCK )) != XB_NO_ERROR ){
+ iErrorStop = 300;
+ throw iRc2;
+ }
+
+ std::cout << "[PASS] LockIndex Test 2\n";
+ if(( iRc2 = MyFile->LockMemo( XB_UNLOCK )) != XB_NO_ERROR ){
+ iErrorStop = 310;
+ throw iRc2;
+ }
+ #endif // XB_MDX_SUPPORT
+
+
+
+ // exit
+ sLockCmd = "EXIT";
+ SetCmd( x, sLockFile, sLockCmd, 'P', po );
+
+
+
+ } catch (xbInt16 iRc3 ){
+ iRc = iRc3;
+ if( po > 0 )
+ std::cout << "Parent lock task exiting on failure [" << sLockCmd.Str() << "][" << iErrorStop << "]\n";
+
+
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task terminating with errors [%s][%d][%d][%d]...", av[0], sLockCmd.Str(), iErrorStop, iLoopCtr, iRc3 );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ }
+
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task terminating", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ if( po > 0 )
+ std::cout << "Exiting parent\n";
+
+ sLockCmd = "EXIT";
+ SetCmd( x, sLockFile, sLockCmd, 'P', po );
+ MyFile->Close();
+ delete MyFile;
+
+ }
+ #elif defined (HAVE_CREATEPROCESSW_F)
+
+ STARTUPINFO si;
+ PROCESS_INFORMATION pi;
+ ZeroMemory( &si, sizeof( si ));
+ si.cb = sizeof( si );
+ ZeroMemory( &pi, sizeof( pi ));
+
+ xbString strCmdLine = "xb_test_lock2";
+ if( argCnt > 1 ){
+ strCmdLine += " ";
+ strCmdLine += av[1];
+ }
+
+ char sCmdLineBuf[25];
+ memset( sCmdLineBuf, 0x00, 25 );
+ for( xbUInt32 i = 0; i < strCmdLine.Len(); i++ )
+ sCmdLineBuf[i] = strCmdLine[i+1];
+
+ if( !CreateProcess( NULL, sCmdLineBuf, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi )){
+ sMsg.Sprintf( "Program [%s] error in CreateProcess call. Processing aborted" );
+ #ifdef XB_LOGGING_SUPPORT
+ x.WriteLogMessage( sMsg );
+ #endif
+ std::cout << sMsg.Str() << "\n";
+ iRc -=1;
+ } else {
+
+ xbInt16 iLoopCtr = 0;
+
+ try{
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task issuing START command", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+
+ sLockCmd = "START";
+ SetCmd( x, sLockFile, sLockCmd, 'P', po );
+ sResult = "";
+
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 10 ){
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ x.xbSleep( 300 );
+ iLoopCtr++;
+ }
+
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ // table lock
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task issuing TL command", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ sLockCmd = "TL";
+ SetCmd( x, sLockFile, sLockCmd, 'P', po );
+ sResult = "";
+
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 10 ){
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ x.xbSleep( 310 );
+ iLoopCtr++;
+ }
+
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ if( sResult != "OK" ){
+ iErrorStop = 320;
+ iRc2 = -1;
+ throw iRc2;
+ }
+
+ // attempt to lock table, should fail
+ if(( iRc2 = MyFile->Open( "LockTest.DBF" )) != XB_NO_ERROR ){
+ iErrorStop = 330;
+ throw iRc2;
+ }
+
+ if(( iRc2 = MyFile->LockTable( XB_LOCK )) == XB_NO_ERROR ){
+ iErrorStop = 340;
+ throw iRc2;
+ }
+
+ if( po > 0 ){
+ std::cout << "[PASS] LockTable Test 1\n";
+
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task LockTable Test 1 Success.", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif
+ }
+
+ // table unlock
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task issuing TU command", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ sLockCmd = "TU";
+ SetCmd( x, sLockFile, sLockCmd, 'P', po );
+ sResult = "";
+
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 10 ){
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ x.xbSleep( 250 );
+ iLoopCtr++;
+ }
+
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ if( sResult != "OK" ){
+ iErrorStop = 350;
+ iRc2 = -1;
+ throw iRc2;
+ }
+
+ if(( iRc2 = MyFile->LockTable( XB_LOCK )) != XB_NO_ERROR ){
+ iErrorStop = 360;
+ throw iRc2;
+ }
+ if( po > 0 ){
+ std::cout << "[PASS] LockTable Test 2\n";
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task LockTable Test 1 Success.", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif
+ }
+
+ if(( iRc2 = MyFile->LockTable( XB_UNLOCK )) != XB_NO_ERROR ){
+ iErrorStop = 370;
+ throw iRc2;
+ }
+
+ // record lock
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task issuing RL command", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ sLockCmd = "RL";
+ SetCmd( x, sLockFile, sLockCmd, 'P', po );
+ sResult = "";
+
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 10 ){
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ x.xbSleep( 380 );
+ iLoopCtr++;
+ }
+
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ if( sResult != "OK" ){
+ iErrorStop = 390;
+ iRc2 = -1;
+ throw iRc2;
+ }
+
+ if(( iRc2 = MyFile->LockRecord( XB_LOCK, 1 )) == XB_NO_ERROR ){
+ iErrorStop = 400;
+ throw iRc2;
+ }
+ if( po > 0 )
+ std::cout << "[PASS] LockRecord Test 1\n";
+
+ // record unlock
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task issuing RU command", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ sLockCmd = "RU";
+ SetCmd( x, sLockFile, sLockCmd, 'P', po );
+ sResult = "";
+
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 10 ){
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ x.xbSleep( 250 );
+ iLoopCtr++;
+ }
+
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ if( sResult != "OK" ){
+ iErrorStop = 410;
+ iRc2 = -1;
+ throw iRc2;
+ }
+
+ if(( iRc2 = MyFile->LockRecord( XB_LOCK, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 420;
+ throw iRc2;
+ }
+
+ std::cout << "[PASS] LockRecord Test 2\n";
+ if(( iRc2 = MyFile->LockRecord( XB_UNLOCK, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 430;
+ throw iRc2;
+ }
+
+ // memo lock
+ #ifdef XB_MEMO_SUPPORT
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task issuing ML command", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ sLockCmd = "ML";
+ SetCmd( x, sLockFile, sLockCmd, 'P', po );
+ sResult = "";
+
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 10 ){
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ x.xbSleep( 250 );
+ iLoopCtr++;
+ }
+
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ if( sResult != "OK" ){
+ iErrorStop = 440;
+ iRc2 = -1;
+ throw iRc2;
+ }
+
+ if(( iRc2 = MyFile->LockMemo( XB_LOCK )) == XB_NO_ERROR ){
+ iErrorStop = 450;
+ throw iRc2;
+ }
+ if( po > 0 )
+ std::cout << "[PASS] LockMemo Test 1\n";
+
+ // memo unlock
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task issuing MU command", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ sLockCmd = "MU";
+ SetCmd( x, sLockFile, sLockCmd, 'P', po );
+ sResult = "";
+
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 10 ){
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ x.xbSleep( 250 );
+ iLoopCtr++;
+ }
+
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ if( sResult != "OK" ){
+ iErrorStop = 460;
+ iRc2 = -1;
+ throw iRc2;
+ }
+
+ if(( iRc2 = MyFile->LockMemo( XB_LOCK )) != XB_NO_ERROR ){
+ iErrorStop = 470;
+ throw iRc2;
+ }
+
+ std::cout << "[PASS] LockMemo Test 2\n";
+ if(( iRc2 = MyFile->LockMemo( XB_UNLOCK )) != XB_NO_ERROR ){
+ iErrorStop = 480;
+ throw iRc2;
+ }
+ #endif
+
+ // index lock
+ #ifdef XB_MDX_SUPPORT
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task issuing IL command", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ sLockCmd = "IL";
+ SetCmd( x, sLockFile, sLockCmd, 'P', po );
+ sResult = "";
+
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 10 ){
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ x.xbSleep( 490 );
+ iLoopCtr++;
+ }
+
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ if( sResult != "OK" ){
+ iErrorStop = 500;
+ iRc2 = -1;
+ throw iRc2;
+ }
+
+ if(( iRc2 = MyFile->LockIndices( XB_LOCK )) == XB_NO_ERROR ){
+ iErrorStop = 510;
+ throw iRc2;
+ }
+ if( po > 0 )
+ std::cout << "[PASS] LockIndex Test 1\n";
+
+ // index unlock
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task issuing IU command", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ sLockCmd = "IU";
+ SetCmd( x, sLockFile, sLockCmd, 'P', po );
+ sResult = "";
+
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 10 ){
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ x.xbSleep( 250 );
+ iLoopCtr++;
+ }
+
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ if( sResult != "OK" ){
+ iErrorStop = 520;
+ iRc2 = -1;
+ throw iRc2;
+ }
+
+ if(( iRc2 = MyFile->LockIndices( XB_LOCK )) != XB_NO_ERROR ){
+ iErrorStop = 530;
+ throw iRc2;
+ }
+
+ std::cout << "[PASS] LockIndex Test 2\n";
+ if(( iRc2 = MyFile->LockIndices( XB_UNLOCK )) != XB_NO_ERROR ){
+ iErrorStop = 540;
+ throw iRc2;
+ }
+ #endif
+
+ // exit
+ sLockCmd = "EXIT";
+ SetCmd( x, sLockFile, sLockCmd, 'P', po );
+
+
+ } catch (xbInt16 iRc3 ){
+ if( po > 0 )
+ std::cout << "Parent lock task exiting on failure [" << sLockCmd.Str() << "][" << iErrorStop << "]\n";
+
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task terminating with errors [%s][%d][%d][%d]...", av[0], sLockCmd.Str(), iErrorStop, iLoopCtr, iRc3 );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ sLockCmd = "EXIT";
+ SetCmd( x, sLockFile, sLockCmd, 'P', po );
+ MyFile->Close();
+ delete MyFile;
+ }
+ }
+
+ #else
+
+ iRc--;
+ sMsg.Sprintf( "Program [%s] not executed. Library does not support 'fork' or 'CreateProcess' function call", av[0] );
+ #ifdef XB_LOGGING_SUPPORT
+ x.WriteLogMessage( sMsg );
+ #endif
+ if( po > 0 )
+ std::cout << sMsg.Str() << "\n";
+ #endif
+
+ if( po > 0 || iRc < 0 )
+ fprintf( stdout, "[%s] Total Errors = %d\n", av[0], iRc * -1 );
+
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], iRc * -1 );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ return iRc;
+}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_lock2.cpp b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_lock2.cpp
new file mode 100755
index 0000000..82b4dea
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_lock2.cpp
@@ -0,0 +1,233 @@
+/* xb_test_lock2.cpp
+
+XBase Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+// This program tests the locking functions
+// This program is the child process that is called if used
+// in an environment that supports the CreateProcess library function (ie Windows)
+
+// usage: xb_test_lock QUITE|NORMAL|VERBOSE
+
+
+
+#include "xbase.h"
+
+using namespace xb;
+
+#include "tstfuncs.cpp"
+
+/****************************************************************/
+int main( int argCnt, char **av )
+{
+ xbInt16 iRc = 0;
+ xbInt16 iRc2;
+ xbInt16 po = 1; /* print option */
+ /* 0 - QUIET */
+ /* 1 - NORMAL */
+ /* 2 - VERBOSE */
+
+ xbBool bDone = xbFalse;
+ xbString sLockFile;
+ xbString sLockCmd;
+ xbString sResult;
+ xbInt32 iChildLoop = 0;
+
+ xbXBase x;
+ xbDbf * MyFile;
+
+ xbBool bTblOpen = xbFalse;
+
+ if( argCnt > 1 ) {
+ if( av[1][0] == 'Q' )
+ po = 0;
+ else if( av[1][0] == 'V' )
+ po = 2;
+ }
+
+ #ifdef XB_LOGGING_SUPPORT
+ x.SetLogDirectory( PROJECT_LOG_DIR );
+ xbString sLogFileName = x.GetLogFqFileName().Str();
+ sLogFileName.Resize( sLogFileName.Len() - 3 );
+ sLogFileName += "_l2.txt";
+ x.SetLogFileName( sLogFileName );
+ x.EnableMsgLogging();
+ if( po > 0 ){
+ std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
+ }
+ xbString sMsg;
+ sMsg.Sprintf( "Program [%s] initializing...", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ x.SetDataDirectory( PROJECT_DATA_DIR );
+ InitTime();
+
+ sLockFile.Sprintf( "%slocktest.txt", PROJECT_DATA_DIR );
+ // std::cout << "xb_test_lock2 - lockfile = [ " << sLockFile.Str() << "]\n";
+
+ #ifdef XB_DBF4_SUPPORT
+ MyFile = new xbDbf4( &x ); /* version 4 dbf file */
+ #else
+ MyFile = new xbDbf3( &x ); /* version 3 dbf file */
+ #endif
+
+ x.xbSleep( 250 );
+ while( !bDone ){
+ iRc2 = GetCmd( x, sLockFile, sLockCmd, 'C', po );
+
+ #ifdef XB_LOGGING_SUPPORT
+ if( sLockCmd != "OK" && sLockCmd != "FAIL" ){
+ sMsg.Sprintf( "Program [%s] Child task retrieved command=[%s] RC=[%d]", av[0], sLockCmd.Str(), iRc2 );
+ x.WriteLogMessage( sMsg );
+ }
+ #endif
+
+ if( iRc2 == 0 ){
+
+ if( sLockCmd == "OK" || sLockCmd == "FAIL" )
+ x.xbSleep( 250 );
+
+ else if( sLockCmd == "EXIT" ){
+ bDone = xbTrue;
+
+ } else if( sLockCmd == "START" && bTblOpen ){
+ // came back before the parent task could process the result
+ x.xbSleep( 250 );
+
+ } else {
+
+ if( sLockCmd == "START" ){
+
+ // begin the process
+ iRc2 = MyFile->Open( "LockTest.DBF" );
+ if( iRc2 != XB_NO_ERROR ){
+ sResult = "FAIL";
+ } else {
+ sResult = "OK";
+ bTblOpen = xbTrue;
+ }
+
+ } else if( sLockCmd == "TL" ){
+ // table lock
+ if(( iRc2 = MyFile->LockTable( XB_LOCK )) != XB_NO_ERROR )
+ sResult = "FAIL";
+ else
+ sResult = "OK";
+
+ } else if( sLockCmd == "TU" ){
+ // table unlock
+ if(( iRc2 = MyFile->LockTable( XB_UNLOCK )) != XB_NO_ERROR )
+ sResult = "FAIL";
+ else
+ sResult = "OK";
+
+ } else if( sLockCmd == "RL" ){
+ // record lock
+ if(( iRc2 = MyFile->LockRecord( XB_LOCK, 1 )) != XB_NO_ERROR )
+ sResult = "FAIL";
+ else
+ sResult = "OK";
+
+
+ } else if( sLockCmd == "RU" ){
+ // record unlock
+ if(( iRc2 = MyFile->LockRecord( XB_UNLOCK, 1 )) != XB_NO_ERROR )
+ sResult = "FAIL";
+ else
+ sResult = "OK";
+
+ } else if( sLockCmd == "ML" ){
+ // memo lock
+ #ifdef XB_MEMO_SUPPORT
+ if(( iRc2 = MyFile->LockMemo( XB_LOCK )) != XB_NO_ERROR )
+ sResult = "FAIL";
+ else
+ sResult = "OK";
+ #else
+ sLockCmd = "OK";
+ #endif
+
+ } else if( sLockCmd == "MU" ){
+ // memo unlock
+ #ifdef XB_MEMO_SUPPORT
+ if(( iRc2 = MyFile->LockMemo( XB_UNLOCK )) != XB_NO_ERROR )
+ sResult = "FAIL";
+ else
+ sResult = "OK";
+ #else
+ sLockCmd = "OK";
+ #endif
+
+ } else if( sLockCmd == "IL" ){
+ // index lock
+ #ifdef XB_MDX_SUPPORT
+ if(( iRc2 = MyFile->LockIndices( XB_LOCK )) != XB_NO_ERROR )
+ sResult = "FAIL";
+ else
+ sResult = "OK";
+ #else
+ sLockCmd = "OK";
+ #endif
+
+ } else if( sLockCmd == "IU" ){
+ // index unlock
+ #ifdef XB_MDX_SUPPORT
+ if(( iRc2 = MyFile->LockIndices( XB_UNLOCK )) != XB_NO_ERROR )
+ sResult = "FAIL";
+ else
+ sResult = "OK";
+ #else
+ sLockCmd = "OK";
+ #endif
+ }
+
+
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Child task [%s] Result [%s] RC = [%d]", av[0], sLockCmd.Str(), sResult.Str(), iRc2 );
+ x.WriteLogMessage( sMsg );
+ #endif
+ SetCmd( x, sLockFile, sResult, 'C', po );
+ }
+ } else {
+ iRc = iRc2;
+ bDone = xbTrue;
+ }
+
+ // std::cout << "clc [" << iChildLoop++ << "][" << bDone << "][" << sLockCmd << "]\n";
+ x.xbSleep( 250 );
+ if( iChildLoop > 10 )
+ bDone = xbTrue;
+ }
+ MyFile->Close();
+ delete MyFile;
+ if( po > 0 )
+ std::cout << "Exiting child\n";
+
+ remove( sLockFile.Str() );
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Child task terminating", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ if( po > 0 || iRc < 0 )
+ fprintf( stdout, "Total Errors = %d\n", iRc * -1 );
+
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], iRc * -1 );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ ExitProcess( (xbUInt32) iRc );
+}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_log.cpp b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_log.cpp
new file mode 100755
index 0000000..a586809
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_log.cpp
@@ -0,0 +1,111 @@
+/* xb_test_log.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+// This program tests the class xbLog
+
+// usage: xb_test_log QUITE|NORMAL|VERBOSE
+
+
+#include "xbase.h"
+
+using namespace xb;
+#include "tstfuncs.cpp"
+
+int main( int argCnt, char **av )
+{
+ int rc = 0;
+
+ #ifdef XB_LOGGING_SUPPORT
+ int po = 1; /* print option */
+ /* 0 - QUIET */
+ /* 1 - NORMAL */
+ /* 2 - VERBOSE */
+
+ if( argCnt > 1 ) {
+ if( av[1][0] == 'Q' )
+ po = 0;
+ else if( av[1][0] == 'V' )
+ po = 2;
+ }
+
+ xbXBase x;
+
+ x.EnableMsgLogging();
+ InitTime();
+ if( po ){
+ std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
+ }
+ xbString sMsg;
+ sMsg.Sprintf( "Program [%s] initializing...", av[0] );
+ x.WriteLogMessage( sMsg );
+
+ // verify first logfile location is correct
+ xbString sWork;
+ x.GetHomeDir( sWork );
+ std::cout << "Home Dir = " << sWork.Str() << std::endl;
+
+ // verify home directory > 0 length
+ xbInt32 iLen = (xbInt32) sWork.Len();
+ if( sWork.Len() == 0 )
+ rc += TestMethod( po, "GetHomeDir()", iLen, 1 );
+ else
+ rc += TestMethod( po, "GetHomeDir()", iLen, iLen );
+
+ sWork.Sprintf( "%s%cxbase64%clogs", sWork.Str(),
+ x.GetPathSeparator(), x.GetPathSeparator());
+
+ // verify path exists
+ // std::cout << "Home Dir = " << sHomeDir.Str() << std::endl;
+ xbFile f( &x );
+ rc += TestMethod( po, "FileExists()", f.FileExists( sWork ), xbTrue );
+
+
+ sWork.Sprintf( "%s%c%s", sWork.Str(),
+ x.GetPathSeparator(), x.GetLogFileName().Str() );
+
+ // std::cout << "Home Dir = " << sWork.Str() << std::endl;
+ rc += TestMethod( po, "FileExists()", f.FileExists( sWork ), xbTrue );
+ rc += TestMethod( po, "Get Log Status()", x.GetLogStatus(), xbTrue );
+
+
+ x.DisableMsgLogging();
+ rc += TestMethod( po, "Get Log Status()", x.GetLogStatus(), xbFalse );
+
+ xbString sNewLogFileName = "Logfile2.txt";
+ x.SetLogDirectory( PROJECT_LOG_DIR );
+ x.SetLogFileName( sNewLogFileName );
+ sWork.Sprintf( "%s%c%s",
+ PROJECT_LOG_DIR, x.GetPathSeparator(), sNewLogFileName.Str());
+
+ sMsg.Sprintf( "Switching to logfile [%s]", sWork.Str() );
+ x.EnableMsgLogging();
+ rc += TestMethod( po, "Get Log Status()", x.GetLogStatus(), xbTrue );
+ rc += TestMethod( po, "FileExists()", f.FileExists( sWork ), xbTrue );
+
+ x.WriteLogMessage( sMsg );
+ rc += TestMethod( po, "Get Log Status()", x.GetLogStatus(), xbTrue );
+ x.WriteLogMessage( "Test Log Message" );
+
+ if( po > 0 || rc < 0 )
+ fprintf( stdout, "Total Errors = %d\n", rc * -1 );
+
+ #endif /* XB_LOGGING_SUPPORT */
+
+ return rc;
+}
+
+
+
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_mdx.cpp b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_mdx.cpp
new file mode 100755
index 0000000..680be5c
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_mdx.cpp
@@ -0,0 +1,305 @@
+/* xb_test_mdx.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+// This program tests the class xbIxNdx
+
+// usage: xb_test_ndx QUITE|NORMAL|VERBOSE
+
+
+#include "xbase.h"
+
+using namespace xb;
+
+#include "tstfuncs.cpp"
+
+int main( int argCnt, char **av )
+{
+ int iRc = 0;
+ int iRc2;
+ int iPo = 1; /* print option */
+ /* 0 - QUIET */
+ /* 1 - NORMAL */
+ /* 2 - VERBOSE */
+
+ xbString sMsg;
+ char c;
+ xbString s;
+
+ if( argCnt > 1 ) {
+ if( av[1][0] == 'Q' )
+ iPo = 0;
+ else if( av[1][0] == 'V' )
+ iPo = 2;
+ }
+
+
+ xbSchema MyV4Record[] =
+ {
+ { "CITY", XB_CHAR_FLD, 100, 0 },
+ { "STATE", XB_CHAR_FLD, 2, 0 },
+ { "ZIP", XB_NUMERIC_FLD, 9, 0 },
+ { "DATE1", XB_DATE_FLD, 8, 0 },
+ { "",0,0,0 }
+ };
+
+
+ xbSchema MyV4Record2[] =
+ {
+ { "CHAR1", XB_CHAR_FLD, 1, 0 },
+ { "CHAR27", XB_CHAR_FLD, 27, 0 },
+ { "",0,0,0 }
+ };
+
+
+ xbXBase x;
+
+ #ifdef XB_LOGGING_SUPPORT
+ x.SetLogDirectory( PROJECT_LOG_DIR );
+ x.EnableMsgLogging();
+ if( iPo ){
+ std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
+ }
+ sMsg.Sprintf( "Program [%s] initializing...", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ x.SetDataDirectory( PROJECT_DATA_DIR );
+ x.SetMultiUser( xbFalse );
+ InitTime();
+
+ if( iPo > 0 )
+ std::cout << "Default Data Directory is [" << x.GetDataDirectory().Str() << "]" << std::endl;
+
+
+ xbFile f( &x );
+ xbIx *pIx;
+ void *pTag;
+ xbDate dt = "19890209";
+ xbString sKey;
+
+ xbDbf *V4DbfX1 = new xbDbf4( &x );
+
+
+ iRc2 = V4DbfX1->CreateTable( "TMDXDB01.DBF", "TestMdxX2", MyV4Record, XB_OVERLAY, XB_MULTI_USER );
+ iRc += TestMethod( iPo, "CreateTable(1)", iRc2, 0 );
+
+ /*
+ CreateTag( const xbString &sIxType, const xbString &sName, const xbString &sKey, const xbString &sFilter,
+ xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverLay, xbIx **xbIxOut, void **vpTagOut );
+ */
+
+
+ iRc2 = V4DbfX1->CreateTag( "MDX", "CITY_TAGA", "CITY", "", 0, 0, XB_OVERLAY, &pIx, &pTag );
+ iRc += TestMethod( iPo, "CreateTag(1)", iRc2, 0 );
+
+ iRc2 = V4DbfX1->CreateTag( "MDX", "ZIP_TAG", "ZIP", "", xbTrue, 0, XB_OVERLAY, &pIx, &pTag );
+ iRc += TestMethod( iPo, "CreateTag(2)", iRc2, 0 );
+
+ iRc2 = V4DbfX1->CreateTag( "MDX", "DATE_TAG", "DATE1", "", 0, xbTrue, XB_OVERLAY, &pIx, &pTag );
+ iRc += TestMethod( iPo, "CreateTag(3)", iRc2, 0 );
+
+
+ // std::cout << "Cur Tag Name = " << V4DbfX1->GetCurTagName().Str() << "\n";
+
+ // xbDouble d = 4000;
+// iRc2 = V4DbfX1->Find( d );
+// std::cout << iRc2 << "\n";
+
+
+ xbInt32 uZip = 10000;
+ for( xbUInt16 i = 0; i < 35; i++ ){
+ for( xbUInt16 j = 0; j < 14; j++ ){
+
+ c = j + 65;
+ s = c;
+ s.PadRight( c, (xbUInt32) i + 1 );
+ //std::cout << "*********** adding s=[" << s.Str() << "] length = " << s.Len() << "\n";
+ iRc2 = V4DbfX1->BlankRecord();
+ if( iRc2 != XB_NO_ERROR )
+ iRc += TestMethod( iPo, "BlankRecord()", iRc2, XB_NO_ERROR );
+
+ iRc2 = V4DbfX1->PutField( "CITY", s );
+ if( iRc2 != XB_NO_ERROR )
+ iRc += TestMethod( iPo, "PutField()", iRc2, XB_NO_ERROR );
+
+ iRc2 = V4DbfX1->PutLongField( "ZIP", uZip++ );
+ if( iRc2 != XB_NO_ERROR )
+ iRc += TestMethod( iPo, "PutField()", iRc2, XB_NO_ERROR );
+
+ iRc2 = V4DbfX1->PutDateField( "DATE1", dt );
+ dt++;
+ if( iRc2 != XB_NO_ERROR )
+ iRc += TestMethod( iPo, "PutField()", iRc2, XB_NO_ERROR );
+
+ iRc2 = V4DbfX1->AppendRecord();
+ if( iRc2 != XB_NO_ERROR )
+ iRc += TestMethod( iPo, "AppendRecord()", iRc2, XB_NO_ERROR );
+
+ iRc2 = V4DbfX1->Commit();
+ if( iRc2 != XB_NO_ERROR )
+ iRc += TestMethod( iPo, "Commit()", iRc2, XB_NO_ERROR );
+ }
+ }
+
+
+ iRc += TestMethod( iPo, "CheckTagIntegrity(1)", V4DbfX1->CheckTagIntegrity( 1, 2 ), XB_NO_ERROR );
+
+ // attempt to add a dup key, should fail with XB_KEY_NOT_UNIQUE
+ iRc2 = V4DbfX1->BlankRecord();
+ if( iRc2 != XB_NO_ERROR )
+ iRc += TestMethod( iPo, "BlankRecord()", iRc2, XB_NO_ERROR );
+
+ iRc2 = V4DbfX1->PutField( "CITY", "Tampa" );
+ if( iRc2 != XB_NO_ERROR )
+ iRc += TestMethod( iPo, "PutField()", iRc2, XB_NO_ERROR );
+
+ iRc2 = V4DbfX1->PutLongField( "ZIP", uZip++ );
+ if( iRc2 != XB_NO_ERROR )
+ iRc += TestMethod( iPo, "PutField()", iRc2, XB_NO_ERROR );
+
+ dt.Set( "19890209" );
+ iRc2 = V4DbfX1->PutDateField( "DATE1", dt );
+ dt++;
+ if( iRc2 != XB_NO_ERROR )
+ iRc += TestMethod( iPo, "PutField()", iRc2, XB_NO_ERROR );
+
+ iRc2 = V4DbfX1->AppendRecord();
+ if( iRc2 != XB_KEY_NOT_UNIQUE )
+ iRc += TestMethod( iPo, "AppendRecord()", iRc2, XB_NO_ERROR );
+
+ iRc2 = V4DbfX1->Abort();
+ if( iRc2 != XB_NO_ERROR )
+ iRc += TestMethod( iPo, "Abort()", iRc2, XB_NO_ERROR );
+
+ iRc += TestMethod( iPo, "DeleteTag()", V4DbfX1->DeleteTag( "MDX", "CITY_TAGA" ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "CheckTagIntegrity(2)", V4DbfX1->CheckTagIntegrity( 1, 2 ), XB_NO_ERROR );
+
+ iRc2 = V4DbfX1->CreateTag( "MDX", "CITY_TAGF", "CITY", ".NOT. DELETED()", 0, 0, XB_OVERLAY, &pIx, &pTag );
+ iRc += TestMethod( iPo, "CreateTag(4)", iRc2, 0 );
+
+ iRc2 = V4DbfX1->SetCurTag( "CITY_TAGF" );
+ iRc += TestMethod( iPo, "SetCurTag()", iRc2, XB_NO_ERROR );
+ iRc += TestMethod( iPo, "GetCurTagName()", V4DbfX1->GetCurTagName().Str(), "CITY_TAGF", 9 );
+
+ // next check throws an error message on the display, that is what it is testing, don't need to debug it
+ iRc += TestMethod( iPo, "CheckTagIntegrity(3)", V4DbfX1->CheckTagIntegrity( 1, 2 ), XB_INVALID_INDEX );
+
+
+ iRc2 = V4DbfX1->Reindex( 0 );
+ iRc += TestMethod( iPo, "Reindex( 0 )", iRc2, XB_NO_ERROR );
+ iRc += TestMethod( iPo, "CheckTagIntegrity(4)", V4DbfX1->CheckTagIntegrity( 1, 2 ), XB_NO_ERROR );
+
+ iRc += TestMethod( iPo, "GetCurTagName()", V4DbfX1->GetCurTagName().Str(), "CITY_TAGF", 9 );
+
+ iRc2 = V4DbfX1->Reindex( 1 );
+ iRc += TestMethod( iPo, "Reindex( 1 )", iRc2, XB_NO_ERROR );
+ iRc += TestMethod( iPo, "CheckTagIntegrity(5)", V4DbfX1->CheckTagIntegrity( 1, 2 ), XB_NO_ERROR );
+
+ // delete everything, all keys should be removed from the filtered index
+ iRc += TestMethod( iPo, "DeleteAll(0)", V4DbfX1->DeleteAll( 0 ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "Commit()", V4DbfX1->Commit(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "CheckTagIntegrity(6)", V4DbfX1->CheckTagIntegrity( 1, 2 ), XB_NO_ERROR );
+
+ // undelete everything, all keys should be added back into the filtered index
+ iRc += TestMethod( iPo, "DeleteAll(1)", V4DbfX1->DeleteAll( 1 ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "Commit()", V4DbfX1->Commit(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "CheckTagIntegrity(7)", V4DbfX1->CheckTagIntegrity( 1, 2 ), XB_NO_ERROR );
+
+ // std::cout << "Cur Tag Name = " << V4DbfX1->GetCurTagName().Str() << "\n";
+ sKey = "abc";
+ iRc += TestMethod( iPo, "Find()", V4DbfX1->Find( sKey ), XB_NOT_FOUND );
+ sKey = "EEEEE";
+ iRc += TestMethod( iPo, "Find()", V4DbfX1->Find( sKey ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) V4DbfX1->GetCurRecNo(), (xbInt32) 61 );
+
+ iRc += TestMethod( iPo, "GetNextKey()", V4DbfX1->GetNextKey(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) V4DbfX1->GetCurRecNo(), (xbInt32) 75 );
+
+ iRc += TestMethod( iPo, "GetPrevKey()", V4DbfX1->GetPrevKey(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) V4DbfX1->GetCurRecNo(), (xbInt32) 61 );
+
+ iRc += TestMethod( iPo, "GetLastKey()", V4DbfX1->GetLastKey(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) V4DbfX1->GetCurRecNo(), (xbInt32) 490 );
+
+ iRc += TestMethod( iPo, "GetFirstKey()", V4DbfX1->GetFirstKey(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) V4DbfX1->GetCurRecNo(), (xbInt32) 1 );
+
+ xbString sDir;
+ V4DbfX1->GetFileDirPart( sDir );
+ xbString sDbfName;
+ xbString sMdxName;
+ sDbfName.Sprintf( "%sTestMdxR.DBF", sDir.Str());
+ sMdxName.Sprintf( "%sTestMdxR.MDX", sDir.Str());
+ V4DbfX1->xbRemove( sDbfName );
+ V4DbfX1->xbRemove( sMdxName );
+
+ iRc += TestMethod( iPo, "Rename()", V4DbfX1->Rename( "TestMdxR.DBF" ), XB_NO_ERROR );
+
+
+ xbDbf *V4DbfX2 = new xbDbf4( &x );
+ iRc2 = V4DbfX2->CreateTable( "TMDXDB02.DBF", "TestMdxX4", MyV4Record2, XB_OVERLAY, XB_MULTI_USER );
+ iRc += TestMethod( iPo, "CreateTable(2)", iRc2, 0 );
+
+
+ iRc2 = V4DbfX2->CreateTag( "MDX", "TAG1", "CHAR27", ".NOT. DELETED()", 0, 0, XB_OVERLAY, &pIx, &pTag );
+// iRc2 = V4DbfX2->CreateTag( "MDX", "TAG2", "CHAR1", "CHAR1 = 'O' .AND. .NOT. DELETED()", 0, 0, XB_OVERLAY, &pIx, &pTag );
+ iRc += TestMethod( iPo, "CreateTag(4)", iRc2, 0 );
+
+
+
+ for( xbUInt32 ul = 0; ul < 500 && iRc2 == XB_NO_ERROR; ul++ ){
+ c = 'O';
+ V4DbfX2->BlankRecord();
+ iRc2 = V4DbfX2->PutField( 1, c );
+ if( iRc2 != XB_NO_ERROR ){
+ iRc += TestMethod( iPo, "PutField()", iRc2, XB_NO_ERROR );
+ } else {
+ iRc2 = V4DbfX2->AppendRecord();
+ if( iRc2 != XB_NO_ERROR ){
+ iRc += TestMethod( iPo, "AppendRecord()", iRc2, XB_NO_ERROR );
+ } else {
+ iRc2 = V4DbfX2->Commit();
+ if( iRc2 != XB_NO_ERROR ){
+ iRc += TestMethod( iPo, "Commit()", iRc2, XB_NO_ERROR );
+ }
+ }
+ }
+ }
+
+ iRc += TestMethod( iPo, "CheckTagIntegrity(7)", V4DbfX2->CheckTagIntegrity( 1, 2 ), XB_NO_ERROR );
+
+
+
+ iRc2 = V4DbfX2->CreateTag( "MDX", "TAG2", "CHAR27", ".NOT. DELETED()", 0, 1, XB_OVERLAY, &pIx, &pTag );
+ iRc += TestMethod( iPo, "CreateTag(5)", iRc2, 0 );
+
+ iRc2 += V4DbfX2->Reindex( 1 );
+ iRc += TestMethod( iPo, "Reindex()", iRc2, XB_KEY_NOT_UNIQUE );
+
+
+ x.CloseAllTables();
+// delete V4DbfX1;
+// delete V4DbfX2;
+
+ if( iPo > 0 || iRc < 0 )
+ fprintf( stdout, "Total Errors = %d\n", iRc * -1 );
+
+#ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], iRc * -1 );
+ x.WriteLogMessage( sMsg );
+#endif
+
+ return iRc;
+}
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_ndx.cpp b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_ndx.cpp
new file mode 100755
index 0000000..320a1c9
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_ndx.cpp
@@ -0,0 +1,450 @@
+/* xb_test_ndx.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+// This program tests the class xbIxNdx
+
+// usage: xb_test_ndx QUITE|NORMAL|VERBOSE
+
+
+
+// fix me - this program needs to test GetUnique
+
+#include "xbase.h"
+
+using namespace xb;
+
+#include "tstfuncs.cpp"
+
+
+int main( int argCnt, char **av )
+{
+ int iRc = 0;
+ int iRc2 = 0;
+ int iPo = 1; /* print option */
+ /* 0 - QUIET */
+ /* 1 - NORMAL */
+ /* 2 - VERBOSE */
+
+ if( argCnt > 1 ) {
+ if( av[1][0] == 'Q' )
+ iPo = 0;
+ else if( av[1][0] == 'V' )
+ iPo = 2;
+ }
+
+
+ xbSchema MyV3Record[] =
+ {
+ { "CFLD", XB_CHAR_FLD, 30, 0 },
+ { "DFLD", XB_DATE_FLD, 8, 0 },
+ { "NFLD", XB_NUMERIC_FLD, 12, 0 },
+ { "",0,0,0 }
+ };
+
+ xbXBase x;
+ xbString sMsg;
+
+ #ifdef XB_LOGGING_SUPPORT
+ x.SetLogDirectory( PROJECT_LOG_DIR );
+ x.EnableMsgLogging();
+ if( iPo ){
+ std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
+ }
+ sMsg.Sprintf( "Program [%s] initializing...", av[0] );
+ x.WriteLogMessage( sMsg );
+ x.SetLogSize( 1000000 );
+ #endif
+
+ x.SetDataDirectory( PROJECT_DATA_DIR );
+ x.SetMultiUser( xbFalse );
+
+ InitTime();
+
+ char c;
+ xbString s;
+ xbInt32 lRecCnt = 0;
+ iRc = 0;
+
+
+ if( iPo > 0 )
+ std::cout << "Default Data Directory is [" << x.GetDataDirectory().Str() << "]" << std::endl;
+
+ xbDbf *V3Dbf = new xbDbf3( &x );
+
+ xbIx *ixPtr;
+ void *ndx;
+
+ iRc2 = V3Dbf->CreateTable( "TestNdx.DBF", "TestNdx", MyV3Record, XB_OVERLAY, XB_MULTI_USER );
+ iRc += TestMethod( iPo, "CreateTable()", (xbInt32) iRc2, XB_NO_ERROR );
+
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+
+
+ iRc2 = V3Dbf->CreateTag( "NDX", "TestNdxC.NDX", "CFLD", "", 0, 0, XB_OVERLAY, &ixPtr, &ndx );
+ iRc += TestMethod( iPo, "CreateTag()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+
+ iRc2 = V3Dbf->AssociateIndex( "NDX", "TestNdxC.NDX", 0 );
+ iRc += TestMethod( iPo, "Associate()", (xbInt32) iRc2, XB_NO_ERROR );
+
+ iRc2 = V3Dbf->CreateTag( "NDX", "TestNdxD.NDX", "DFLD", "", 0, 0, XB_OVERLAY, &ixPtr, &ndx );
+ iRc += TestMethod( iPo, "CreateTag()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+
+ iRc2 = V3Dbf->AssociateIndex( "NDX", "TestNdxD.NDX", 0 );
+ iRc += TestMethod( iPo, "Associate()", (xbInt32) iRc2, XB_NO_ERROR );
+
+ iRc2 = V3Dbf->CreateTag( "NDX", "TestNdxN.NDX", "NFLD", "", 0, 0, XB_OVERLAY, &ixPtr, &ndx );
+ iRc += TestMethod( iPo, "CreateTag()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+
+ iRc2 = V3Dbf->AssociateIndex( "NDX", "TestNdxN.NDX", 0 );
+ iRc += TestMethod( iPo, "Associate()", (xbInt32) iRc2, XB_NO_ERROR );
+
+ xbInt16 iTagCnt = ixPtr->GetTagCount();
+ iRc += TestMethod( iPo, "GetTagCount()", (xbInt32) iTagCnt, 1 );
+
+ xbString sTagName;
+ sTagName = ixPtr->GetTagName( &ndx );
+ iRc += TestMethod( iPo, "GetTagName()", sTagName.Str(), "TestNdxN", 8 );
+
+
+ #ifdef XB_LOCKING_SUPPORT
+ iRc += TestMethod( iPo, "LockTable()", V3Dbf->LockTable( XB_LOCK ), XB_NO_ERROR );
+ #endif
+
+ iRc += TestMethod( iPo, "GetCurTagName()", V3Dbf->GetCurTagName().Str(), "TestNdxC", 8 );
+ iRc += TestMethod( iPo, "SetCurTag()", V3Dbf->SetCurTag( "TestNdxN" ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "GetCurTagName()", V3Dbf->GetCurTagName().Str(), "TestNdxN", 8 );
+ xbDouble dbl = 100;
+ iRc += TestMethod( iPo, "Find( 100 )", V3Dbf->Find( dbl ), XB_NOT_FOUND );
+
+ iRc += TestMethod( iPo, "SetCurTag()", V3Dbf->SetCurTag( "TestNdxD" ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "GetCurTagName()", V3Dbf->GetCurTagName().Str(), "TestNdxD", 8 );
+ xbDate dt;
+ iRc += TestMethod( iPo, "Find( dt )", V3Dbf->Find( dt ), XB_NOT_FOUND );
+
+ iRc += TestMethod( iPo, "GetFirstKey()", ixPtr->GetFirstKey(), XB_EMPTY );
+ iRc += TestMethod( iPo, "GetNextKey()", ixPtr->GetFirstKey(), XB_EMPTY );
+ iRc += TestMethod( iPo, "GetLasttKey()", ixPtr->GetLastKey(), XB_EMPTY );
+ iRc += TestMethod( iPo, "GetPrevKey()", ixPtr->GetPrevKey(), XB_EMPTY );
+ iRc += TestMethod( iPo, "FindKey()", ixPtr->FindKey( NULL, "19611101", 8, 0 ), XB_NOT_FOUND );
+
+ iRc += TestMethod( iPo, "BlankRecord()", V3Dbf->BlankRecord(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "Putfield()", V3Dbf->PutField( "CFLD", "AAA" ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "Putfield()", V3Dbf->PutField( "DFLD", "19611109" ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "PutfieldDouble()", V3Dbf->PutDoubleField( "NFLD", 50 ), XB_NO_ERROR );
+
+ iRc += TestMethod( iPo, "AppendRecord()", V3Dbf->AppendRecord(), XB_NO_ERROR );
+
+ xbDate d( "19890209" );
+
+ //for( xbUInt16 i = 0; i < 35 && iRc == XB_NO_ERROR; i++ ){
+ for( xbUInt16 i = 0; i < 2 && iRc == XB_NO_ERROR; i++ ){
+ for( xbUInt16 j = 0; j < 35 && iRc == XB_NO_ERROR; j++ ){
+ c = j + 65;
+ s = c;
+ s.PadRight( c, (xbUInt32) i + 1 );
+ V3Dbf->BlankRecord();
+ V3Dbf->PutField( "CFLD", s );
+ V3Dbf->PutLongField( "NFLD", ++lRecCnt );
+ V3Dbf->PutField( "DFLD", d.Str() );
+ d++;
+
+ iRc = V3Dbf->AppendRecord();
+ }
+ }
+
+ iRc += TestMethod( iPo, "SetCurTag()", V3Dbf->SetCurTag( "TestNdxN" ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "GetCurTagName()", V3Dbf->GetCurTagName().Str(), "TestNdxN", 8 );
+
+ dbl = 55.0;
+ iRc += TestMethod( iPo, "Find( 55.0 )", V3Dbf->Find( dbl ), XB_NO_ERROR );
+
+ iRc += TestMethod( iPo, "SetCurTag()", V3Dbf->SetCurTag( "TestNdxC" ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "GetCurTagName()", V3Dbf->GetCurTagName().Str(), "TestNdxC", 8 );
+
+ s = "AAA";
+ iRc += TestMethod( iPo, "Find( 'AAA' )", V3Dbf->Find( s ), XB_NO_ERROR );
+
+ s = "AzAA";
+ iRc += TestMethod( iPo, "Find( 'AzAA' )", V3Dbf->Find( s ), XB_NOT_FOUND );
+
+ iRc += TestMethod( iPo, "SetCurTag()", V3Dbf->SetCurTag( "TestNdxD" ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "GetCurTagName()", V3Dbf->GetCurTagName().Str(), "TestNdxD", 8 );
+
+ iRc += TestMethod( iPo, "Find( '19890420' )", V3Dbf->Find( d ), XB_NOT_FOUND );
+
+ V3Dbf->GetRecord( 26 );
+ V3Dbf->PutField( "CFLD", "AAA" );
+ V3Dbf->PutRecord( 26 );
+
+ V3Dbf->GetRecord( 14 );
+ V3Dbf->PutField( "CFLD", "AAAA" );
+ V3Dbf->PutRecord( 14 );
+
+ V3Dbf->GetRecord( 11 );
+ V3Dbf->PutField( "CFLD", "III" );
+ V3Dbf->PutRecord( 11 );
+
+ V3Dbf->GetRecord( 25 );
+ V3Dbf->PutField( "CFLD", "DDD" );
+ V3Dbf->PutRecord( 25 );
+
+ V3Dbf->GetRecord( 12 );
+ V3Dbf->PutField( "CFLD", "EEE" );
+ V3Dbf->PutRecord( 12 );
+
+ V3Dbf->GetRecord( 26 );
+ V3Dbf->PutField( "CFLD", "CCC" );
+ V3Dbf->PutRecord( 26 );
+
+ V3Dbf->GetRecord( 13 );
+ V3Dbf->PutField( "CFLD", "CCCC" );
+ V3Dbf->PutRecord( 13 );
+
+ V3Dbf->GetRecord( 27 );
+ V3Dbf->PutField( "CFLD", "AAA" );
+ V3Dbf->PutRecord( 27 );
+
+ V3Dbf->GetRecord( 28 );
+ V3Dbf->PutField( "CFLD", "CCC" );
+ V3Dbf->PutRecord( 28 );
+
+ V3Dbf->GetRecord( 24 );
+ V3Dbf->PutField( "CFLD", "FFF" );
+ V3Dbf->PutRecord( 24 );
+
+ V3Dbf->GetRecord( 10 );
+ V3Dbf->PutField( "CFLD", "HHH" );
+ V3Dbf->PutRecord( 10 );
+
+
+ for( xbUInt16 i = 0; i < 35 && iRc == XB_NO_ERROR; i++ ){
+ for( xbUInt16 j = 0; j < 14 && iRc == XB_NO_ERROR; j++ ){
+ c = j + 65;
+ s = c;
+ s.PadRight( c, (xbUInt32) i + 1 );
+ V3Dbf->BlankRecord();
+ V3Dbf->PutField( "CFLD", s );
+ V3Dbf->PutLongField( "NFLD", ++lRecCnt );
+ V3Dbf->PutField( "DFLD", d.Str() );
+ d++;
+ iRc = V3Dbf->AppendRecord();
+ }
+ }
+
+ for( xbUInt16 i = 0; i < 2 && iRc == XB_NO_ERROR; i++ ){
+ for( xbUInt16 j = 0; j < 14 && iRc == XB_NO_ERROR; j++ ){
+ c = j + 65;
+ s = c;
+ s.PadRight( c, (xbUInt32) i + 1 );
+
+ V3Dbf->BlankRecord();
+ V3Dbf->PutField( "CFLD", s );
+ V3Dbf->PutLongField( "NFLD", ++lRecCnt );
+ V3Dbf->PutField( "DFLD", d.Str() );
+ d++;
+
+ iRc = V3Dbf->AppendRecord();
+ }
+ }
+
+ V3Dbf->GetRecord( 26 );
+ V3Dbf->PutField( "CFLD", "AAA" );
+ V3Dbf->PutRecord( 26 );
+
+ V3Dbf->GetRecord( 14 );
+ V3Dbf->PutField( "CFLD", "AAAA" );
+ V3Dbf->PutRecord( 14 );
+
+ V3Dbf->GetRecord( 11 );
+ V3Dbf->PutField( "CFLD", "III" );
+ V3Dbf->PutRecord( 11 );
+
+ V3Dbf->GetRecord( 25 );
+ V3Dbf->PutField( "CFLD", "DDD" );
+ V3Dbf->PutRecord( 25 );
+
+ V3Dbf->GetRecord( 12 );
+ V3Dbf->PutField( "CFLD", "EEE" );
+ V3Dbf->PutRecord( 12 );
+
+ V3Dbf->GetRecord( 26 );
+ V3Dbf->PutField( "CFLD", "CCC" );
+ V3Dbf->PutRecord( 26 );
+
+ V3Dbf->GetRecord( 13 );
+ V3Dbf->PutField( "CFLD", "CCCC" );
+ V3Dbf->PutRecord( 13 );
+
+ V3Dbf->GetRecord( 27 );
+ V3Dbf->PutField( "CFLD", "AAA" );
+ V3Dbf->PutRecord( 27 );
+
+ V3Dbf->GetRecord( 28 );
+ V3Dbf->PutField( "CFLD", "CCC" );
+ V3Dbf->PutRecord( 28 );
+
+ V3Dbf->GetRecord( 24 );
+ V3Dbf->PutField( "CFLD", "FFF" );
+ V3Dbf->PutRecord( 24 );
+
+ V3Dbf->GetRecord( 10 );
+ V3Dbf->PutField( "CFLD", "HHH" );
+ V3Dbf->PutRecord( 10 );
+
+ // just in case there are any issues outstanding
+ V3Dbf->Abort();
+
+ xbIxList *ixl = V3Dbf->GetIxList();
+ xbIxNdx *ix;
+ while( ixl ){
+ if( *ixl->sFmt == "NDX" ){
+ ix = (xbIxNdx *) ixl->ix;
+ //ix->GetTagName( 0, sTagName );
+ sMsg.Sprintf( "CheckTagIntegrity() - [%s]", ix->GetTagName(ix->GetCurTag()).Str());
+ iRc += TestMethod( iPo, sMsg, ix->CheckTagIntegrity( ix->GetCurTag(), 0 ), XB_NO_ERROR );
+ ixl = ixl->next;
+ }
+ }
+
+ #ifdef XB_LOCKING_SUPPORT
+ iRc += TestMethod( iPo, "LockTable()", V3Dbf->LockTable( XB_UNLOCK ), XB_NO_ERROR );
+ #endif
+
+ xbString sDir;
+ V3Dbf->GetFileDirPart( sDir );
+ xbString sDbfName;
+ xbString sInfName;
+ sDbfName.Sprintf( "%sTestNdxR.DBF", sDir.Str());
+ sInfName.Sprintf( "%sTestNdxR.INF", sDir.Str());
+
+ V3Dbf->xbRemove( sDbfName );
+ V3Dbf->xbRemove( sInfName );
+
+ iRc += TestMethod( iPo, "Rename()", V3Dbf->Rename( "TestNdxR.DBF" ), XB_NO_ERROR );
+
+ iRc += TestMethod( iPo, "DeleteTable()", V3Dbf->DeleteTable(), XB_NO_ERROR );
+ // iRc += TestMethod( iPo, "Close()", V3Dbf->Close(), XB_NO_ERROR ); // did a delete instead of close
+
+ delete V3Dbf;
+
+ x.SetUniqueKeyOpt( XB_EMULATE_DBASE );
+ V3Dbf = new xbDbf3( &x );
+
+ iRc2 = V3Dbf->CreateTable( "TestNdx.DBF", "TestNdx", MyV3Record, XB_OVERLAY, XB_MULTI_USER );
+ iRc += TestMethod( iPo, "CreateTable()", (xbInt32) iRc2, XB_NO_ERROR );
+
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+
+ iRc2 = V3Dbf->CreateTag( "NDX", "TestNdxC.NDX", "CFLD", "", 0, xbTrue, XB_OVERLAY, &ixPtr, &ndx );
+ iRc += TestMethod( iPo, "CreateTag()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+
+ iRc2 = V3Dbf->AssociateIndex( "NDX", "TestNdxC.NDX", 0 );
+ iRc += TestMethod( iPo, "Associate()", (xbInt32) iRc2, XB_NO_ERROR );
+
+
+ iRc += TestMethod( iPo, "BlankRecord()", V3Dbf->BlankRecord(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "Putfield()", V3Dbf->PutField( "CFLD", "AAA" ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "Putfield()", V3Dbf->PutField( "DFLD", "19611109" ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "PutfieldDouble()", V3Dbf->PutDoubleField( "NFLD", 50 ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "AppendRecord()", V3Dbf->AppendRecord(), XB_NO_ERROR );
+
+ iRc += TestMethod( iPo, "BlankRecord()", V3Dbf->BlankRecord(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "Putfield()", V3Dbf->PutField( "CFLD", "BBB" ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "Putfield()", V3Dbf->PutField( "DFLD", "19611109" ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "PutfieldDouble()", V3Dbf->PutDoubleField( "NFLD", 50 ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "AppendRecord()", V3Dbf->AppendRecord(), XB_NO_ERROR );
+
+ iRc += TestMethod( iPo, "BlankRecord()", V3Dbf->BlankRecord(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "Putfield()", V3Dbf->PutField( "CFLD", "BBB" ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "Putfield()", V3Dbf->PutField( "DFLD", "19611109" ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "PutfieldDouble()", V3Dbf->PutDoubleField( "NFLD", 50 ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "AppendRecord()", V3Dbf->AppendRecord(), XB_NO_ERROR );
+
+
+ ixl = V3Dbf->GetIxList();
+ while( ixl ){
+ if( *ixl->sFmt == "NDX" ){
+ ix = (xbIxNdx *) ixl->ix;
+ //ix->GetTagName( 0, sTagName );
+ sMsg.Sprintf( "CheckTagIntegrity() - [%s]", ix->GetTagName(ix->GetCurTag()).Str());
+ iRc += TestMethod( iPo, sMsg, ix->CheckTagIntegrity( ix->GetCurTag(), 0 ), XB_NO_ERROR );
+ }
+ ixl = ixl->next;
+ }
+
+ iRc2 = V3Dbf->Reindex( 1 ); // reindex all tags
+ iRc += TestMethod( iPo, "Reindex()", (xbInt32) iRc2, XB_NO_ERROR );
+
+ iRc += TestMethod( iPo, "DeleteTable()", V3Dbf->DeleteTable(), XB_NO_ERROR );
+
+
+
+ // test tag delete on unsuccessful reindex
+
+ iRc2 = V3Dbf->CreateTable( "TestNdx.DBF", "TestNdx", MyV3Record, XB_OVERLAY, XB_MULTI_USER );
+ iRc += TestMethod( iPo, "CreateTable()", (xbInt32) iRc2, XB_NO_ERROR );
+
+ iRc += TestMethod( iPo, "BlankRecord()", V3Dbf->BlankRecord(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "Putfield()", V3Dbf->PutField( "CFLD", "AAA" ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "Putfield()", V3Dbf->PutField( "DFLD", "19611109" ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "PutfieldDouble()", V3Dbf->PutDoubleField( "NFLD", 50 ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "AppendRecord()", V3Dbf->AppendRecord(), XB_NO_ERROR );
+
+ iRc += TestMethod( iPo, "BlankRecord()", V3Dbf->BlankRecord(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "Putfield()", V3Dbf->PutField( "CFLD", "BBB" ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "Putfield()", V3Dbf->PutField( "DFLD", "19611109" ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "PutfieldDouble()", V3Dbf->PutDoubleField( "NFLD", 50 ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "AppendRecord()", V3Dbf->AppendRecord(), XB_NO_ERROR );
+
+ iRc += TestMethod( iPo, "BlankRecord()", V3Dbf->BlankRecord(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "Putfield()", V3Dbf->PutField( "CFLD", "BBB" ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "Putfield()", V3Dbf->PutField( "DFLD", "19611109" ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "PutfieldDouble()", V3Dbf->PutDoubleField( "NFLD", 50 ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "AppendRecord()", V3Dbf->AppendRecord(), XB_NO_ERROR );
+
+ iRc2 = V3Dbf->Reindex( 1 ); // verify reindex works with no tags
+ iRc += TestMethod( iPo, "Reindex()", (xbInt32) iRc2, XB_NO_ERROR );
+
+
+ x.SetUniqueKeyOpt( XB_HALT_ON_DUPKEY );
+ iRc2 = V3Dbf->CreateTag( "NDX", "TestNdxX.NDX", "CFLD", "", 0, 1, XB_OVERLAY, &ixPtr, &ndx );
+ iRc += TestMethod( iPo, "CreateTag()", (xbInt32) iRc2, XB_NO_ERROR );
+
+ iRc2 = V3Dbf->Reindex( 1 ); // verify reindex fails with dup key
+ iRc += TestMethod( iPo, "Reindex()", (xbInt32) iRc2, XB_KEY_NOT_UNIQUE );
+
+ x.CloseAllTables();
+// delete V3Dbf;
+
+ if( iPo > 0 || iRc < 0 )
+ fprintf( stdout, "Total Errors = %d\n", iRc * -1 );
+
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], iRc * -1 );
+ x.WriteLogMessage( sMsg, 2 );
+ #endif
+
+ return iRc;
+}
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_sql.cpp b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_sql.cpp
new file mode 100755
index 0000000..3341895
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_sql.cpp
@@ -0,0 +1,270 @@
+/* xb_test_sql.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014, 2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ xb64-devel@lists.sourceforge.net
+ xb64-users@lists.sourceforge.net
+
+*/
+
+// This program tests the SQL functions
+
+// usage: xb_test_sql QUITE|NORMAL|VERBOSE
+
+
+
+#include "xbase.h"
+
+using namespace xb;
+
+#include "tstfuncs.cpp"
+
+
+int main( int argCnt, char **av )
+{
+ int iRc = 0;
+ int iRc2 = 0;
+ int po = 1; /* print option */
+ /* 0 - QUIET */
+ /* 1 - NORMAL */
+ /* 2 - VERBOSE */
+
+ xbString sSql;
+
+ if( argCnt > 1 ) {
+ if( av[1][0] == 'Q' )
+ po = 0;
+ else if( av[1][0] == 'V' )
+ po = 2;
+ }
+
+/*
+ xbSchema MyAddressRecord[] =
+ {
+ { "ADDRESS", XB_CHAR_FLD, 30, 0 },
+ { "CITY", XB_CHAR_FLD, 30, 0 },
+ { "STATE", XB_CHAR_FLD, 2, 0 },
+ { "ZIPCODE", XB_NUMERIC_FLD, 9, 0 },
+ { "NOTES", XB_MEMO_FLD, 10, 0 },
+ { "LASTUPDATE", XB_DATE_FLD, 8, 1 },
+ { "ACTIVE", XB_LOGICAL_FLD, 1, 0 },
+ { "",0,0,0 }
+ };
+
+ above structure corresponds to sql below
+
+ sSql = "CREATE TABLE Address.DBF ( ADDRESS CHAR(30), CITY CHAR(30), STATE CHAR(2), ZIPCODE NUMERIC(9,0), NOTES VARCHAR, LASTUPDATE DATE, ACTIVE LOGICAL )";
+*/
+
+/*
+ xbSchema MyZipRecord[] =
+ {
+ { "ZIPCODE", XB_NUMERIC_FLD, 9, 0 },
+ { "CITY", XB_CHAR_FLD, 30, 0 },
+ { "STATE", XB_CHAR_FLD, 2, 0 },
+ { "",0,0,0 }
+ };
+*/
+
+ xbXBase x;
+ #ifdef XB_LOGGING_SUPPORT
+ x.SetLogDirectory( PROJECT_LOG_DIR );
+ x.EnableMsgLogging();
+ if( po ){
+ std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
+ }
+ xbString sMsg;
+ sMsg.Sprintf( "Program [%s] initializing...", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+
+ x.SetDataDirectory( PROJECT_DATA_DIR );
+
+ xbSql sql( &x );
+
+ if( po > 0 )
+ std::cout << "Default Data Directory is [" << x.GetDataDirectory().Str() << "]" << std::endl;
+
+/*
+ // verify a delete on a non existant table doesn't crash things
+ sSql = "DROP TABLE IF EXISTS NoTable.DBF";
+ iRc2 = sql.ExecuteNonQuery( sSql );
+ iRc += TestMethod( po, "DropTable()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+
+ sSql = "DROP TABLE IF EXISTS Address.DBF";
+ iRc2 = sql.ExecuteNonQuery( sSql );
+ iRc += TestMethod( po, "DropTable()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+
+ sSql = "CREATE TABLE Address.DBF ( ADDRESS CHAR(30), CITY CHAR(30), STATE CHAR(2), ZIPCODE NUMERIC(9,0), NOTES VARCHAR, LASTUPDATE DATE, ACTIVE LOGICAL )";
+ iRc2 = sql.ExecuteNonQuery( sSql );
+ iRc += TestMethod( po, "CreateTable()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+
+ #ifdef XB_MDX_SUPPORT
+ sSql = "CREATE INDEX tag1 ON Address.DBF( CITY, STATE, DTOS( LASTUPDATE )) FILTER .NOT. DELETED()";
+ // xbString sSql = "CREATE INDEX tag1 ON Address.DBF( CITY, STATE )";
+
+ iRc2 = sql.ExecuteNonQuery( sSql );
+ iRc += TestMethod( po, "SqL CreateIndex()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+ #endif // XB_MDX_SUPPORT
+
+ sSql = "INSERT INTO Address (CITY, STATE, ZIPCODE, NOTES, LASTUPDATE, ACTIVE ) VALUES ( 'San Diego', 'CA', 92007, 'San Diego is a cool place', '1989-02-09', 'Y')";
+ iRc2 = sql.ExecuteNonQuery( sSql );
+ iRc += TestMethod( po, "SqlInsert()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+
+ sSql = "INSERT INTO Address (CITY, STATE, ZIPCODE, NOTES, LASTUPDATE, ACTIVE ) VALUES ( 'Dallas', 'TX', 76248, 'Dallas is hot in the summer', '1989-02-09', 'N')";
+ iRc2 = sql.ExecuteNonQuery( sSql );
+ iRc += TestMethod( po, "SqlInsert()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+
+ sSql = "DROP TABLE IF EXISTS AddressR.DBF";
+ iRc2 = sql.ExecuteNonQuery( sSql );
+ iRc += TestMethod( po, "DropTable()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+
+ sSql = "ALTER TABLE Address.DBF RENAME TO AddressR.DBF";
+ iRc2 = sql.ExecuteNonQuery( sSql );
+ iRc += TestMethod( po, "SqlAlterTable()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+
+ sSql = "DELETE FROM AddressR.DBF WHERE CITY='San Diego'";
+ iRc2 = sql.ExecuteNonQuery( sSql );
+ iRc += TestMethod( po, "SqlDelete()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+
+ sSql = "UNDELETE FROM AddressR.DBF WHERE CITY='San Diego'";
+ iRc2 = sql.ExecuteNonQuery( sSql );
+ iRc += TestMethod( po, "SqlUndelete()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+
+ sSql = "DELETE FROM AddressR.DBF";
+ iRc2 = sql.ExecuteNonQuery( sSql );
+ iRc += TestMethod( po, "SqlDelete()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+
+ sSql = "UNDELETE FROM AddressR.DBF";
+ iRc2 = sql.ExecuteNonQuery( sSql );
+ iRc += TestMethod( po, "SqlDelete()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+
+ sSql = "DELETE FROM AddressR.DBF WHERE BAD='EXPRESSION'";
+ iRc2 = sql.ExecuteNonQuery( sSql );
+ iRc += TestMethod( po, "SqlDelete()", (xbInt32) iRc2, XB_INVALID_FIELD_NAME );
+
+
+ sSql = "DROP TABLE IF EXISTS AddressR.DBF";
+ iRc += TestMethod( po, "Drop Table()", sql.ExecuteNonQuery( sSql ), XB_NO_ERROR );
+ iRc += TestMethod( po, "Drop Table()", sql.ExecuteNonQuery( sSql ), XB_NO_ERROR );
+
+*/
+
+
+ sSql = "DROP TABLE IF EXISTS ZipCode.DBF";
+ iRc2 = sql.ExecuteNonQuery( sSql );
+ iRc += TestMethod( po, "DropTable()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+
+
+ sSql = "CREATE TABLE ZipCode.DBF ( ZIPCODE NUMERIC(9,0), CITY CHAR(30), STATE CHAR(2) )";
+ iRc2 = sql.ExecuteNonQuery( sSql );
+ iRc += TestMethod( po, "CreateTable()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+
+ sSql = "INSERT INTO ZipCode.DBF ( ZIPCODE, CITY, STATE ) VALUES ( 75087, 'Rockwall', 'TX' )";
+ iRc2 = sql.ExecuteNonQuery( sSql );
+
+ sSql = "INSERT INTO ZipCode.DBF ( ZIPCODE, CITY, STATE ) VALUES ( 75087, 'Rockwall', 'TX' )";
+ iRc2 = sql.ExecuteNonQuery( sSql );
+
+
+
+/*
+
+ sSql = "CREATE INDEX ZipCode1.NDX ON ZipCode.DBF( ZIPCODE ) ASSOCIATE";
+ iRc2 = sql.ExecuteNonQuery( sSql );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+ iRc += TestMethod( po, "Create Index()", (xbInt32) iRc2, XB_NO_ERROR );
+*/
+
+
+ sSql = "CREATE UNIQUE INDEX ZipCode2.NDX ON ZipCode.DBF( ZIPCODE ) ASSOCIATE";
+ iRc2 = sql.ExecuteNonQuery( sSql );
+ iRc += TestMethod( po, "Create Index()", (xbInt32) iRc2, XB_KEY_NOT_UNIQUE );
+
+
+
+/*
+ sSql = "DROP TABLE IF EXISTS ZipCode.DBF";
+ iRc2 = sql.ExecuteNonQuery( sSql );
+ iRc += TestMethod( po, "DropTable()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+*/
+
+
+// sSql = "INSERT INTO ZipCode.DBF ( ZIPCODE, CITY, STATE ) VALUES ( 75087, 'Rockwall', 'TX' )";
+// iRc2 = sql.ExecuteNonQuery( sSql );
+
+
+ x.DisplayTableList();
+
+
+
+
+/*
+ sSql = "CREATE INDEX ZipCode.NDX ON Addres.DBF( ZIPCODE )";
+
+ iRc2 = sql.ExecuteNonQuery( sSql );
+ iRc += TestMethod( po, "CreateTable()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+*/
+
+// sSql = "DROP TABLE IF EXISTS AddressR.DBF";
+// iRc += TestMethod( po, "Drop Table()", sqlQry1.ExecuteQuery( sSql ), XB_NO_ERROR );
+
+
+
+
+ // x.DisplayTableList();
+
+ x.CloseAllTables();
+
+ if( po > 0 || iRc < 0 )
+ fprintf( stdout, "Total Errors = %d\n", iRc * -1 );
+
+#ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], iRc * -1 );
+ x.WriteLogMessage( sMsg );
+#endif
+
+ return iRc;
+}
+
+ \ No newline at end of file
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_string.cpp b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_string.cpp
new file mode 100755
index 0000000..9dd48af
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_string.cpp
@@ -0,0 +1,459 @@
+/* xb_test_string.cpp
+
+XBase63 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+// This program tests the string class xbString
+
+// usage: xb_test_string QUIET|NORMAL|VERBOSE
+
+#define VERBOSE
+
+#include "xbase.h"
+
+using namespace xb;
+
+#include "tstfuncs.cpp"
+
+int main( int argCnt, char **av = NULL )
+
+//int main( int argCnt, char *argv[] )
+{
+ int rc = 0;
+ int po = 1; /* print option */
+ /* 0 - QUIET */
+ /* 1 - NORMAL */
+ /* 2 - VERBOSE */
+
+ if( argCnt > 1 ) {
+ if( av[1][0] == 'Q' )
+ po = 0;
+ else if( av[1][0] == 'V' )
+ po = 2;
+ }
+
+ xbXBase x;
+ xbString sMsg;
+
+ #ifdef XB_LOGGING_SUPPORT
+ x.SetLogDirectory( PROJECT_LOG_DIR );
+ x.EnableMsgLogging();
+ if( po ){
+ std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
+ }
+ sMsg.Sprintf( "Program [%s] initializing...", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ x.SetDataDirectory( PROJECT_DATA_DIR );
+
+ InitTime();
+
+ // create a string, assign a value
+ xbString s1;
+ s1 = "Test String 1";
+ rc += TestMethod( po, "Constructor s1" , s1, "Test String 1", 13 );
+
+ // create another string, copy the value from s1 into it
+ xbString s2;
+ s2 = s1;
+ rc += TestMethod( po, "Operator '=' " , s2, "Test String 1", 13 );
+
+ // create another string with a single character
+ xbString s3( 'X' );
+
+ //std::cout << "s3 = [" << s3 << "]" << std::endl;
+ rc += TestMethod( po, "Constructor s3" , s3, "X", 1 );
+
+ // create another string and assign data to it yet another way
+ xbString s4( "Class constructor test 4" );
+ rc += TestMethod( po, "Constructor s4" , s4, "Class constructor test 4", 24 );
+
+ // create another string with a size limit
+ xbString s5( "Class constructor test 4", 7 );
+ rc += TestMethod( po, "Constructor s5" , s5, "Class c", 7 );
+
+ // create another string from a string
+ xbString s6( s5 );
+ rc += TestMethod( po, "Constructor s6" , s6, "Class c", 7 );
+
+ // create 15 byte string with nothing in it
+ xbString s7( (xbUInt32) 15 );
+ rc += TestMethod( po, "Constructor s7" , s7, "", 0 );
+
+ xbString s8( "some test data", 6 );
+ rc += TestMethod( po, "Constructor s8" , s8, "some t", 6 );
+
+ xbString s9( "some test data", 30 );
+ rc += TestMethod( po, "Constructor s9" , s9, "some test data", 14 );
+
+ // Extract character from a particular position in the string
+ rc += TestMethod( po, "Operator [] ", s1[7], 't' );
+ rc += TestMethod( po, "Operator [] ", s1.GetCharacter(7), 't' );
+
+ s1[6] = 'X';
+ rc += TestMethod( po, "Operator assignment [] ", s1.GetCharacter(6), 'X' );
+
+ // set string 7 to a character
+ s7 = 'Z';
+ rc += TestMethod( po, "Operator =", s7.Str(), "Z", 1 );
+
+ // Concatenation tests - I
+ s1 = " part 1 ";
+ s1 += " part 2 ";
+ s2 = " part 3 ";
+ s1 += s2;
+ s1 += 'Z';
+ rc += TestMethod( po, "Concatenation test 1", s1, " part 1 part 2 part 3 Z", 25 );
+
+ // Concatenation tests - II
+ s1 = "part 1 ";
+ s1 -= "part 2 ";
+ s1 -= 'X';
+ s1 -= s2;
+ rc += TestMethod( po, "Concatenation test 2", s1, "part 1part 2X part 3", 20 );
+
+ // Concatenation tests - III
+ s1 = "s1data ";
+ s2 = "s2data ";
+ s3 = s1 - s2;
+ rc += TestMethod( po, "Concatenation test 3", s3, "s1datas2data", 12 );
+
+ // Concatenation tests - IV
+ s3 = s1 + s2;
+ rc += TestMethod( po, "Concatenation test 4", s3, "s1data s2data ", 15 );
+
+ // Concatenation tests - V
+ s3 = s1 + " (char * data) " + "xyz " + s2 + 'z';
+ rc += TestMethod( po, "Concatenation test 1", s3, "s1data (char * data) xyz s2data z", 36 );
+
+ //Operator tests
+ s1 = "aaa";
+ s2 = "bbb";
+ rc += TestMethod( po, "Operator == ", s1 == s2, 0 );
+ rc += TestMethod( po, "Operator != ", s1 != s2, 1 );
+ rc += TestMethod( po, "Operator < ", s1 < s2, 1 );
+ rc += TestMethod( po, "Operator > ", s1 > s2, 0 );
+ rc += TestMethod( po, "Operator < ", s1 <= s2, 1 );
+ rc += TestMethod( po, "Operator > ", s1 >= s2, 0 );
+
+ s1 = s2;
+ rc += TestMethod( po, "Operator == ", s1 == s2, 1 );
+ rc += TestMethod( po, "Operator != ", s1 == s2, 1 );
+ rc += TestMethod( po, "Operator < ", s1 < s2, 0 );
+ rc += TestMethod( po, "Operator > ", s1 > s2, 0 );
+ rc += TestMethod( po, "Operator < ", s1 <= s2, 1 );
+ rc += TestMethod( po, "Operator > ", s1 >= s2, 1 );
+
+ s1 = "XYZ";
+ rc += TestMethod( po, "Operator * ", (const char *) s1, "XYZ", 3 );
+
+ s1 = 'Z';
+ rc += TestMethod( po, "Operator = ", s1, "Z", 1 );
+
+ s1 = "ABC,xyz";
+ rc += TestMethod( po, "CountChar(c,1) ", (xbInt32) s1.CountChar( ',',1 ), 1 );
+
+ s1 = "ABC,xy,z";
+ rc += TestMethod( po, "CountChar(c,1) ", (xbInt32) s1.CountChar( ',',1 ), 2 );
+
+ s1 = "ABC,xy,z'asad,as'adss";
+ rc += TestMethod( po, "CountChar(c,1) ", (xbInt32) s1.CountChar( ',',1 ), 2 );
+
+ s1 = "ABADFDSGA";
+ rc += TestMethod( po, "CountChar() ", (xbInt32) s1.CountChar( 'A' ), 3 );
+
+ s1.Ltrunc( 4 );
+ rc += TestMethod( po, "Ltrunc(4) ", s1, "FDSGA", 5 );
+
+ s1.PutAt( 3, 'Z' );
+ rc += TestMethod( po, "PutAt(3,'Z') ", s1, "FDZGA", 5 );
+
+ s1.AddBackSlash( 'Z' );
+ rc += TestMethod( po, "AddBackSlash( 'Z' ) ", s1, "FD\\ZGA", 6 );
+
+ s1 = "ABCDEFG";
+ rc += TestMethod( po, "s1.Append( 'Z' )", s1.Append( 'Z' ).Str(), "ABCDEFGZ", 8 );
+ rc += TestMethod( po, "s1.Append( '999' )", s1.Append( "999" ), "ABCDEFGZ999", 11 );
+ s2 = "!@#";
+ rc += TestMethod( po, "s1.Append( '!@#' )", s1.Append( s2 ), "ABCDEFGZ999!@#", 14 );
+
+ xbString sAppend1;
+ sAppend1.Append( "abc123", 6 );
+ rc += TestMethod( po, "Append", sAppend1, "abc123", 6 );
+
+ xbString sAppend2;
+ sAppend2.Append( "abc123", 8 );
+ rc += TestMethod( po, "Append", sAppend2, "abc123", 6 );
+
+ xbString sAppend3;
+ sAppend3.Append( "abc123", 3 );
+ rc += TestMethod( po, "Append", sAppend3, "abc", 3 );
+
+
+ rc += TestMethod( po, "s1.Assign( 'ABCDE', 3, 2 )", s1.Assign( "ABCDE", 3, 2 ), "CD", 2 );
+ rc += TestMethod( po, "s1.Assign( 'ABCDE', 2, 7 )", s1.Assign( "ABCDE", 2, 7 ), "BCDE", 4 );
+ rc += TestMethod( po, "s1.Assign( 'ABCDE', 1, 4 )", s1.Assign( "ABCDE", 1, 4 ), "ABCD", 4 );
+ rc += TestMethod( po, "s1.Assign( 'ABCDE', 5, 5 )", s1.Assign( "ABCDE", 5, 5 ), "E", 1 );
+ rc += TestMethod( po, "s1.Assign( 'ABCDE', 15, 5 )", s1.Assign( "ABCDE", 15, 5 ), "", 0 );
+
+ rc += TestMethod( po, "s1.Assign( 'ABCDE', 1 )", s1.Assign( "ABCDE", 1 ), "ABCDE", 5 );
+ rc += TestMethod( po, "s1.Assign( 'ABCDE', 3 )", s1.Assign( "ABCDE", 3 ), "CDE", 3 );
+ rc += TestMethod( po, "s1.Assign( 'ABCDE', 10 )", s1.Assign( "ABCDE", 10 ), "", 0 );
+
+ s2 = "ABCDE";
+ rc += TestMethod( po, "s1.Assign( s2, 3, 2 )", s1.Assign( s2, 3, 2 ), "CD", 2 );
+ rc += TestMethod( po, "s1.Assign( s2, 2, 7 )", s1.Assign( s2, 2, 7 ), "BCDE", 4 );
+ rc += TestMethod( po, "s1.Assign( s2, 1, 4 )", s1.Assign( s2, 1, 4 ), "ABCD", 4 );
+ rc += TestMethod( po, "s1.Assign( s2, 5, 5 )", s1.Assign( s2, 5, 5 ), "E", 1 );
+ rc += TestMethod( po, "s1.Assign( s2, 15, 5 )", s1.Assign( s2, 15, 5 ), "", 0 );
+
+ rc += TestMethod( po, "s1.Assign( s2, 1 )", s1.Assign( s2, 1 ), "ABCDE", 5 );
+ rc += TestMethod( po, "s1.Assign( s2, 3 )", s1.Assign( s2, 3 ), "CDE", 3 );
+ rc += TestMethod( po, "s1.Assign( s2, 10 )", s1.Assign( s2, 10 ), "", 0 );
+
+ s2 = "1234567890";
+ s1 = s2.Copy();
+ rc += TestMethod( po, "Copy() ", s1, "1234567890", 10 );
+
+ s1 = "0x35";
+ char hexChar;
+ s1.CvtHexChar( hexChar );
+ rc += TestMethod( po, "CvtHexChar(hexChar) ", hexChar, '5' );
+
+ s1 = "0x610x620x630x640x65";
+ s1.CvtHexString( s2 );
+ rc += TestMethod( po, "CvtHexString() ", s2, "abcde", 5 );
+
+ s1.ExtractElement( "aaaa|bbbb|cccc|dddd", '|', 2, 0 );
+ rc += TestMethod( po, "ExtractElement() ", s1, "bbbb", 4 );
+
+ s1.ExtractElement( "aaaa|b'bb|c'ccc|dddd", '|', 3, 1 );
+ rc += TestMethod( po, "ExtractElement() ", s1, "dddd", 4 );
+
+ s1 = "aaaa|bbbb|cccc|dddd";
+ s2.ExtractElement( s1, '|', 2, 0 );
+ rc += TestMethod( po, "ExtractElement() ", s2, "bbbb", 4 );
+
+ s1 = "abcabcabx";
+ rc += TestMethod( po, "GetLastPos", (xbInt16) s1.GetLastPos( 'b' ), 8 );
+ s1 = "abcabcabx";
+ rc += TestMethod( po, "GetLastPos", (xbInt16) s1.GetLastPos( 'x' ), 9 );
+ s1 = "abcabcabx";
+ rc += TestMethod( po, "GetLastPos", (xbInt16) s1.GetLastPos( '$' ), 0 );
+ rc += TestMethod( po, "GetLastPos", (xbInt16) s1.GetLastPos( "ab" ), 7 );
+
+
+ s1 = "\\ABC\\XYZ";
+ rc += TestMethod( po, "GetPathSeparator()", s1.GetPathSeparator(), '\\' );
+
+ s1 = "/ABC/XYZ";
+ rc += TestMethod( po, "GetPathSeparator()", s1.GetPathSeparator(), '/' );
+
+
+ s1 = "123";
+ s2 = "ABC";
+ rc += TestMethod( po, "HasAlphaChars()", s1.HasAlphaChars(), 0 );
+ rc += TestMethod( po, "HasAlphaChars()", s2.HasAlphaChars(), 1 );
+
+
+ s2 = "";
+ rc += TestMethod( po, "IsEmpty()", s2.IsEmpty(), 1 );
+
+
+ s1.SetNum( (long) 123456 );
+
+ s1 = "abcZZZ123";
+ s1.Left( 4 );
+ rc += TestMethod( po, "Left(4) ", s1, "abcZ", 4 );
+
+ s1.Left( 1 );
+ rc += TestMethod( po, "Left(1) ", s1, "a", 1 );
+
+ s1.Left( 0 );
+ rc += TestMethod( po, "Left(0) ", s1, "", 0 );
+
+ // trim tests
+ s1 = " ABC ";
+ rc += TestMethod( po, "Ltrim()", s1.Ltrim(), "ABC ", 6 );
+
+ s1 = " ABC ";
+ rc += TestMethod( po, "Rtrim()", s1.Rtrim(), " ABC", 6 );
+
+ s1 = " ABC ";
+ rc += TestMethod( po, "Trim() ", s1.Trim(), "ABC", 3 );
+
+ s1 = "ABC ";
+ rc += TestMethod( po, "Ltrim()", s1.Ltrim(), "ABC ", 6 );
+
+ s1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+ rc += TestMethod( po, "Mid(3,0) ", s1.Mid(3,0), "", 0 );
+
+ s1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+ rc += TestMethod( po, "Mid(4,5) ", s1.Mid(4,5), "DEFGH", 5 );
+
+ s1 = "123";
+ s1.PadLeft( '0', 9 );
+ rc += TestMethod( po, "PadLeft() ", s1, "000000123", 9 );
+
+ s1 = "abc";
+ s1.PadRight( 'Z', 9 );
+ rc += TestMethod( po, "PadRight() ", s1, "abcZZZZZZ", 9 );
+
+ s1.PadRight( 'Z', 4 );
+ rc += TestMethod( po, "PadRight() ", s1, "abcZZZZZZ", 9 );
+
+
+
+ s1 = "DEFGHI";
+ rc += TestMethod( po, "Pos('G') ", (xbInt32) s1.Pos( 'G' ), 4 );
+ rc += TestMethod( po, "Pos(\"EFG\") ", (xbInt32) s1.Pos( "EFG" ), 2 );
+
+ rc += TestMethod( po, "Pos('0') ", (xbInt32) s1.Pos( '0' ), 0 );
+ rc += TestMethod( po, "Pos(\"000\") ", (xbInt32) s1.Pos( "000" ), 0 );
+ rc += TestMethod( po, "Pos(\"DEF\") ", (xbInt32) s1.Pos( "DEF" ), 1 );
+
+ s1 = "ABC.123.abc";
+ rc += TestMethod( po, "Pos( '.', 4 )", (xbInt32) s1.Pos( '.', 4 ), 4 );
+ rc += TestMethod( po, "Pos( '.', 5 )", (xbInt32) s1.Pos( '.', 5 ), 8 );
+ rc += TestMethod( po, "Pos( '.', 9 )", (xbInt32) s1.Pos( '.', 9 ), 0 );
+
+
+
+ s1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+ rc += TestMethod( po, "Remove(3,5) ", s1.Remove( 3, 5 ), "ABHIJKLMNOPQRSTUVWXYZ", 21 );
+ s1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+ rc += TestMethod( po, "Remove(22,5) ", s1.Remove( 22, 5 ), "ABCDEFGHIJKLMNOPQRSTU", 21 );
+ s1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+ rc += TestMethod( po, "Remove(24,5) ", s1.Remove( 24, 5 ), "ABCDEFGHIJKLMNOPQRSTUVW", 23 );
+
+ s1.Set( "abcdef.dbf" );
+ s1.Replace( "def", "DEF" );
+ rc += TestMethod( po, "Replace", s1, "abcDEF.dbf", 10 );
+ s1.Replace( ".dbf", ".DBF" );
+ rc += TestMethod( po, "Replace", s1, "abcDEF.DBF", 10 );
+ s1.Set( "abcdef.dbf" );
+ s1.Replace( "def", "DEFG" );
+ rc += TestMethod( po, "Replace", s1, "abcDEFG.dbf", 11 );
+ s1.Set( "abcdefdef.dbf" );
+ s1.Replace( "def", "DEFG" );
+ rc += TestMethod( po, "Replace", s1, "abcDEFGDEFG.dbf", 15 );
+
+
+ s1.SetNum( (long) 123456 );
+ rc += TestMethod( po, "SetNum() ", s1, "123456", 6 );
+
+ xbFloat f = (xbFloat) 12.35;
+ // %f format varies depending on compiler
+ s1.Sprintf( "%6.2f", f );
+ s1.Ltrim();
+ rc += TestMethod( po, "s1.Sprintf()/s.Trim()", s1, "12.35", 5 );
+
+ char buf[5];
+ buf[0] = 'W';
+ buf[1] = 'X';
+ buf[2] = 'Y';
+ buf[3] = 'Z';
+ buf[4] = 0x00;
+ xbInt32 l = 1234567;
+ s2 = "test string";
+
+ rc += TestMethod( po, "s1.Sprintf()", s1.Sprintf( "%s %d %s %ld", buf, 12, s2.Str(), l ), "WXYZ 12 test string 1234567", 27 );
+
+
+ s1 = "ABCABCABZ";
+ s1.SwapChars( 'A', '9' );
+ rc += TestMethod( po, "SwapChars() ", s1, "9BC9BC9BZ", 9 );
+
+ s1.ToLowerCase();
+ rc += TestMethod( po, "ToLowerCase() ", s1, "9bc9bc9bz", 9 );
+
+ s1.ToUpperCase();
+ rc += TestMethod( po, "ToUpperCase() ", s1, "9BC9BC9BZ", 9 );
+
+ s1 = "T";
+ rc += TestMethod( po, "ValidLogicalValue", s1.ValidLogicalValue(), 1 );
+
+ s1 = "xyz";
+ rc += TestMethod( po, "ValidLogicalValue", s1.ValidLogicalValue(), 0 );
+
+ s1 = "-123456.89";
+ rc += TestMethod( po, "ValidNumericValue", s1.ValidNumericValue(), 1 );
+
+ s1 = "ABC-123456.89";
+ rc += TestMethod( po, "ValidNumericValue", s1.ValidNumericValue(), 0 );
+
+
+ s1 = "BC9BC99BZ";
+ s1.ZapChar( '9' );
+ rc += TestMethod( po, "ZapChar('9') ", s1, "BCBCBZ", 6 );
+
+ s1.ZapLeadingChar( 'B' );
+ rc += TestMethod( po, "ZapLeadingChar('B') ", s1, "CBCBZ", 5 );
+
+ s1.ZapTrailingChar( 'Z' );
+ rc += TestMethod( po, "ZapTrailingChar('Z') ", s1, "CBCB", 4 );
+ s1.ZapTrailingChar( 'Z' );
+ rc += TestMethod( po, "ZapTrailingChar('Z') ", s1, "CBCB", 4 );
+
+
+ s1 = ")";
+ rc += TestMethod( po, "GetLastPos", (xbInt16) s1.GetLastPos( ')' ), 1 );
+ s1 = "))))";
+ rc += TestMethod( po, "GetLastPos", (xbInt16) s1.GetLastPos( ')' ), 4 );
+
+ char * p;
+ p = (char *) malloc( 5 );
+ p[0] = '1';
+ p[1] = '2';
+ p[2] = '3';
+ p[3] = '4';
+ p[4] = 0x00;
+ s1.Set( p, 5 );
+ free( p );
+ rc += TestMethod( po, "Set", s1, "1234", 4 );
+
+ xbDouble d = 12345678.876543;
+ xbString sD( d );
+ rc += TestMethod( po, "xbDouble Constructor", sD, "12345678.876543", 15 );
+
+ xbString sSet;
+ sSet.Set( sD );
+ rc += TestMethod( po, "Set", sD, sD, 15 );
+ sSet.Set( s2 );
+ rc += TestMethod( po, "Set", sSet, s2, 11 );
+ sSet.Set( "" );
+ rc += TestMethod( po, "Set", sSet, "", 0 );
+
+ s1.Sprintf( "string %d", 1 );
+ s2.Sprintf( "string %1.1f", 2.0 );
+ s3.Sprintf( "%s and %s", s1.Str(), s2.Str());
+ rc += TestMethod( po, "Sprintf", s3, "string 1 and string 2.0", 23 );
+
+
+/*
+ xbInt16 iErrorStop = 10;
+ xbInt16 iRc = -100;
+ sMsg.Sprintf( "class::method() Exception Caught. Error Stop = [%d] iRc = [%d] Expression = [%s]", iErrorStop, iRc, s3.Str() );
+*/
+ if( po > 0 || rc < 0 )
+ fprintf( stdout, "Total Errors = %d\n", rc * -1 );
+
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], rc * -1 );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ return rc;
+}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_tblmgr.cpp b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_tblmgr.cpp
new file mode 100755
index 0000000..4e177d0
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_tblmgr.cpp
@@ -0,0 +1,125 @@
+/* xb_test_tblmgr.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+// This program tests the table manager functions.
+// usage: xb_test_tblmgr QUITE|NORMAL|VERBOSE
+
+
+#include "xbase.h"
+
+using namespace xb;
+
+#include "tstfuncs.cpp"
+
+int main( int argCnt, char **av )
+{
+ int iRc = 0;
+ int iPo = 1; /* print option */
+ /* 0 - QUIET */
+ /* 1 - NORMAL */
+ /* 2 - VERBOSE */
+
+ if( argCnt > 1 ) {
+ if( av[1][0] == 'Q' )
+ iPo = 0;
+ else if( av[1][0] == 'V' )
+ iPo = 2;
+ }
+
+ xbXBase x;
+
+ #ifdef XB_LOGGING_SUPPORT
+ x.SetLogDirectory( PROJECT_LOG_DIR );
+ x.EnableMsgLogging();
+ if( iPo ){
+ std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
+ }
+ xbString sMsg;
+ sMsg.Sprintf( "Program [%s] initializing...", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ InitTime();
+
+ if( iPo == 2 ){
+ std::cout << "DisplayError Test ==> ";
+ x.DisplayError( 0 );
+ #ifdef WIN32
+ std::cout << "WIN32 environment" << std::endl;
+ #else
+ std::cout << "Not WIN32 environment" << std::endl;
+ #endif
+ }
+
+ xbDbf * d1;
+ xbDbf * d2;
+
+ #if defined (XB_DBF3_SUPPORT )
+ d1 = new xbDbf3( &x );
+ #elif defined( XB_DBF4_SUPPORT )
+ d1 = new xbDbf4( &x );
+ #else
+ std::cout << "No dbf file support built into library" << std::endl;
+ return -1;
+ #endif
+
+ iRc += TestMethod( iPo, "AddTblToTblLst()", x.AddTblToTblList( d1, "TestTableC" ), 0 );
+ iRc += TestMethod( iPo, "AddTblToTblLst()", x.AddTblToTblList( d1, "TestTableA" ), 0 );
+ iRc += TestMethod( iPo, "AddTblToTblLst()", x.AddTblToTblList( d1, "TestTableB" ), 0 );
+ iRc += TestMethod( iPo, "AddTblToTblLst()", x.AddTblToTblList( d1, "TestTableD" ), 0 );
+
+
+ // Next line should generate an exception
+ iRc += TestMethod( iPo, "AddTblToTblLst()", x.AddTblToTblList( d1, "TestTableC" ), XB_DUP_TABLE_OR_ALIAS );
+
+ std::cout << "**** Next list should have one each of TestTableA, B, C, D sorted in alpha order ****" << std::endl;
+ x.DisplayTableList();
+
+ d2 = (xbDbf *) x.GetDbfPtr( "TestTableA" );
+ if( d2 )
+ std::cout << "[PASS] GetDbfPtr()" << std::endl;
+ else{
+ std::cout << "[FAIL] GetDbfPtr()" << std::endl;
+ iRc--;
+ }
+
+
+
+ iRc += TestMethod( iPo, "RemoveTblFromDbList()", x.RemoveTblFromTblList( "TestTableB" ), 0 );
+ iRc += TestMethod( iPo, "RemoveTblFromDbList()", x.RemoveTblFromTblList( "TestTableB" ), XB_NOT_FOUND );
+ std::cout << "**** Next list should not have TestTableB in it ****" << std::endl;
+ x.DisplayTableList();
+
+
+ iRc += TestMethod( iPo, "RemoveTblFromDbList()", x.RemoveTblFromTblList( "TestTableA" ), 0 );
+ iRc += TestMethod( iPo, "RemoveTblFromDbList()", x.RemoveTblFromTblList( "TestTableC" ), 0 );
+ iRc += TestMethod( iPo, "RemoveTblFromDbList()", x.RemoveTblFromTblList( "TestTableD" ), 0 );
+
+
+ delete d1;
+
+ if( iPo > 0 || iRc < 0 )
+ fprintf( stdout, "Total Errors = %d\n", iRc * -1 );
+
+
+#ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], iRc * -1 );
+ x.WriteLogMessage( sMsg );
+#endif
+
+
+ return iRc;
+}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_tdx.cpp b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_tdx.cpp
new file mode 100755
index 0000000..5d79f04
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_tdx.cpp
@@ -0,0 +1,162 @@
+/* xb_test_tdx.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+// This program tests the class xbIxNdx
+
+// usage: xb_test_ndx QUITE|NORMAL|VERBOSE
+
+
+#include "xbase.h"
+
+using namespace xb;
+
+#include "tstfuncs.cpp"
+
+int main( int argCnt, char **av )
+{
+ int iRc = 0;
+ int iRc2;
+ int iPo = 1; /* print option */
+ /* 0 - QUIET */
+ /* 1 - NORMAL */
+ /* 2 - VERBOSE */
+
+ xbString sMsg;
+ char c;
+ xbString s;
+
+ if( argCnt > 1 ) {
+ if( av[1][0] == 'Q' )
+ iPo = 0;
+ else if( av[1][0] == 'V' )
+ iPo = 2;
+ }
+
+
+ xbSchema MyV4Record[] =
+ {
+ { "CITY", XB_CHAR_FLD, 100, 0 },
+ { "STATE", XB_CHAR_FLD, 2, 0 },
+ { "ZIP", XB_NUMERIC_FLD, 9, 0 },
+ { "DATE1", XB_DATE_FLD, 8, 0 },
+ { "",0,0,0 }
+ };
+
+
+
+ xbXBase x;
+
+ #ifdef XB_LOGGING_SUPPORT
+ x.SetLogDirectory( PROJECT_LOG_DIR );
+ x.EnableMsgLogging();
+ if( iPo ){
+ std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
+ }
+ sMsg.Sprintf( "Program [%s] initializing...", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ x.SetDataDirectory( PROJECT_DATA_DIR );
+ x.SetTempDirectory( PROJECT_TEMP_DIR );
+ x.SetMultiUser( xbFalse );
+ InitTime();
+
+ if( iPo > 0 )
+ std::cout << "Default Data Directory is [" << x.GetDataDirectory().Str() << "]" << std::endl;
+
+
+ xbFile f( &x );
+ xbIx *pIx;
+ void *pTag;
+ xbDate dt = "19890209";
+ xbString sKey;
+
+ xbDbf *V4DbfX1 = new xbDbf4( &x );
+
+
+ iRc2 = V4DbfX1->CreateTable( "TTDXDB01.DBF", "TestMdxX2", MyV4Record, XB_OVERLAY, XB_MULTI_USER );
+ iRc += TestMethod( iPo, "CreateTable(1)", iRc2, 0 );
+
+ iRc2 = V4DbfX1->CreateTag( "TDX", "CITY_TAGA", "CITY", "", 0, 0, XB_OVERLAY, &pIx, &pTag );
+ iRc += TestMethod( iPo, "CreateTag(1)", iRc2, 0 );
+
+ std::cout << "Cur Tag Name = " << V4DbfX1->GetCurTagName().Str() << "\n";
+
+ xbString sFqFileName = pIx->GetFqFileName();
+ iRc2 = V4DbfX1->DeleteTag( "TDX", V4DbfX1->GetCurTagName() );
+
+ iRc += TestMethod( iPo, "DeleteTag(3)", iRc2, 0 );
+
+ // only one tag, file should not exist anymore
+ iRc2 = pIx->FileExists(sFqFileName);
+ iRc += TestMethod( iPo, "FileExists()", iRc2, 0 );
+
+ iRc2 = V4DbfX1->CreateTag( "TDX", "ZIP_TAG", "ZIP", "", xbTrue, 0, XB_OVERLAY, &pIx, &pTag );
+ iRc += TestMethod( iPo, "CreateTag(2)", iRc2, 0 );
+
+ xbInt32 uZip = 10000;
+ for( xbUInt16 i = 0; i < 5; i++ ){
+ for( xbUInt16 j = 0; j < 4; j++ ){
+
+ c = j + 65;
+ s = c;
+ s.PadRight( c, (xbUInt32) i + 1 );
+ //std::cout << "*********** adding s=[" << s.Str() << "] length = " << s.Len() << "\n";
+ iRc2 = V4DbfX1->BlankRecord();
+ if( iRc2 != XB_NO_ERROR )
+ iRc += TestMethod( iPo, "BlankRecord()", iRc2, XB_NO_ERROR );
+
+ iRc2 = V4DbfX1->PutField( "CITY", s );
+ if( iRc2 != XB_NO_ERROR )
+ iRc += TestMethod( iPo, "PutField()", iRc2, XB_NO_ERROR );
+
+ iRc2 = V4DbfX1->PutLongField( "ZIP", uZip++ );
+ if( iRc2 != XB_NO_ERROR )
+ iRc += TestMethod( iPo, "PutField()", iRc2, XB_NO_ERROR );
+
+ iRc2 = V4DbfX1->PutDateField( "DATE1", dt );
+ dt++;
+ if( iRc2 != XB_NO_ERROR )
+ iRc += TestMethod( iPo, "PutField()", iRc2, XB_NO_ERROR );
+
+ iRc2 = V4DbfX1->AppendRecord();
+ if( iRc2 != XB_NO_ERROR )
+ iRc += TestMethod( iPo, "AppendRecord()", iRc2, XB_NO_ERROR );
+
+ iRc2 = V4DbfX1->Commit();
+ if( iRc2 != XB_NO_ERROR )
+ iRc += TestMethod( iPo, "Commit()", iRc2, XB_NO_ERROR );
+ }
+ }
+
+
+ iRc += TestMethod( iPo, "CheckTagIntegrity(1)", V4DbfX1->CheckTagIntegrity( 1, 2 ), XB_NO_ERROR );
+
+
+ x.CloseAllTables();
+
+// delete V4DbfX1;
+// delete V4DbfX2;
+
+ if( iPo > 0 || iRc < 0 )
+ fprintf( stdout, "Total Errors = %d\n", iRc * -1 );
+
+#ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], iRc * -1 );
+ x.WriteLogMessage( sMsg );
+#endif
+
+ return iRc;
+}
diff --git a/src/tests/xb_test_uda.cpp b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_uda.cpp
index 18693b5..18693b5 100755
--- a/src/tests/xb_test_uda.cpp
+++ b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_uda.cpp
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_xbase.cpp b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_xbase.cpp
new file mode 100755
index 0000000..a0affd6
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_xbase.cpp
@@ -0,0 +1,217 @@
+/* xb_test_xbase.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+// This program tests the class xbXBase
+
+// usage: xb_test_xbase QUITE|NORMAL|VERBOSE
+
+
+#include "xbase.h"
+
+using namespace xb;
+
+#include "tstfuncs.cpp"
+
+int main( int argCnt, char **av )
+{
+ int iRc = 0;
+ int iPo = 1; /* print option */
+ /* 0 - QUIET */
+ /* 1 - NORMAL */
+ /* 2 - VERBOSE */
+
+ if( argCnt > 1 ) {
+ if( av[1][0] == 'Q' )
+ iPo = 0;
+ else if( av[1][0] == 'V' )
+ iPo = 2;
+ }
+
+ xbXBase x;
+ xbString sMsg;
+
+ #ifdef XB_LOGGING_SUPPORT
+
+
+ xbString sLogDir = PROJECT_LOG_DIR;
+// x.SetLogDirectory( sLogDir );
+ x.SetLogDirectory( PROJECT_LOG_DIR );
+
+
+ x.EnableMsgLogging();
+ if( iPo ){
+ std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
+ }
+
+ sMsg.Sprintf( "Program [%s] initializing...", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif
+ InitTime();
+
+
+ x.SetDefaultDateFormat( "YY-MM-DD" );
+ iRc += TestMethod( iPo, "SetDefaultDateFormat", x.GetDefaultDateFormat(), "YY-MM-DD", 8 );
+ if( iPo == 2 ){
+ if( x.GetEndianType() == 'L' )
+ std::cout << "Little Endian Architecture" << std::endl;
+ else if( x.GetEndianType() == 'B' )
+ std::cout << "Big Endian Architecture" << std::endl;
+ else
+ std::cout << "Undefine Endian Architecture" << std::endl;
+ }
+
+ iRc += TestMethod( iPo, "GetErrorMessage", x.GetErrorMessage( XB_DBF_FILE_NOT_OPEN ), "DBF File Not Open", 17 );
+
+
+ #ifdef XB_LOGGING_SUPPORT
+ iRc += TestMethod( iPo, "GetLogDirectory()", x.GetLogDirectory(), sLogDir, sLogDir.Len());
+ xbString sLogName = CMAKE_SYSTEM_NAME;
+ sLogName += "_";
+ sLogName += XB_PLATFORM;
+ sLogName += ".xbLog.txt";
+ iRc += TestMethod( iPo, "GetLogFileName()", x.GetLogFileName(), sLogName, sLogName.Len());
+ x.WriteLogMessage( "Program xb_test_xbase - test logfile message" );
+ #endif
+
+ x.xbSleep( 250 );
+ if( iPo == 2 ){
+ std::cout << "DisplayError Test ==> ";
+ x.DisplayError( 0 );
+ }
+
+ #ifdef WIN32
+ char cSep = '\\';
+ iRc += TestMethod( iPo, "GetPathSeparator()", x.GetPathSeparator(), cSep );
+ #else
+ char cSep = '/';
+ iRc += TestMethod( iPo, "GetPathSeparator()", x.GetPathSeparator(), cSep );
+ #endif
+
+
+
+ xbString sDir = "\\dir\\path";
+ xbString sFile = "myfile";
+ xbString sExt = "DBF";
+ xbString sFqn;
+ iRc += TestMethod( iPo, "CreateFQN()", x.CreateFqn( sDir, sFile, sExt, sFqn ), XB_NO_ERROR );
+ //std::cout << "FQN = [" << sFqn.Str() << "]\n";
+ #ifdef WIN32
+ iRc += TestMethod( iPo, "CreateFQN()", sFqn.Str(), "\\dir\\path\\myfile.DBF", 20 );
+ #else
+ iRc += TestMethod( iPo, "CreateFQN()", sFqn.Str(), "/dir/path/myfile.DBF", 20 );
+ #endif
+
+ sDir = "/dir/path";
+ iRc += TestMethod( iPo, "CreateFQN()", x.CreateFqn( sDir, sFile, sExt, sFqn ), XB_NO_ERROR );
+ #ifdef WIN32
+ iRc += TestMethod( iPo, "CreateFQN()", sFqn.Str(), "\\dir\\path\\myfile.DBF", 20 );
+ #else
+ iRc += TestMethod( iPo, "CreateFQN()", sFqn.Str(), "/dir/path/myfile.DBF", 20 );
+ #endif
+
+
+ x.SetDataDirectory( "/ABCDEFG/" );
+ #ifdef WIN32
+ iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "\\ABCDEFG\\", 9 );
+ #else
+ iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "/ABCDEFG/", 9 );
+ #endif
+
+ x.SetDataDirectory( "/ABCDEFG" );
+ #ifdef WIN32
+ iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "\\ABCDEFG", 8 );
+ #else
+ iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "/ABCDEFG", 8 );
+ #endif
+
+ x.SetDataDirectory( "\\ABCDEFG\\");
+ #ifdef WIN32
+ iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "\\ABCDEFG\\", 9 );
+ #else
+ iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "/ABCDEFG/", 9 );
+ #endif
+
+ x.SetDataDirectory( "\\ABCDEFG" );
+ #ifdef WIN32
+ iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "\\ABCDEFG", 8 );
+ #else
+ iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "/ABCDEFG", 8 );
+ #endif
+
+#ifdef XB_LOGGING_SUPPORT
+
+ x.SetLogDirectory( "ABCDEFG" );
+ iRc += TestMethod( iPo, "Set/GetLogDirectory()", x.GetLogDirectory(), "ABCDEFG", 7 );
+ x.SetLogDirectory( "/ABCDEFG/" );
+ #ifdef WIN32
+ iRc += TestMethod( iPo, "Set/GetLogDirectory()", x.GetLogDirectory(), "\\ABCDEFG\\", 9 );
+ #else
+ iRc += TestMethod( iPo, "Set/GetLogDirectory()", x.GetLogDirectory(), "/ABCDEFG/", 9 );
+ #endif
+
+ x.SetLogDirectory( "/ABCDEFG" );
+ #ifdef WIN32
+ iRc += TestMethod( iPo, "Set/GetLogDirectory()", x.GetLogDirectory(), "\\ABCDEFG", 8 );
+ #else
+ iRc += TestMethod( iPo, "Set/GetLogDirectory()", x.GetLogDirectory(), "/ABCDEFG", 8 );
+ #endif
+
+ x.SetLogDirectory( "\\ABCDEFG\\");
+ #ifdef WIN32
+ iRc += TestMethod( iPo, "Set/GetLogDirectory()", x.GetLogDirectory(), "\\ABCDEFG\\", 9 );
+ #else
+ iRc += TestMethod( iPo, "Set/GetLogDirectory()", x.GetLogDirectory(), "/ABCDEFG/", 9 );
+ #endif
+
+ x.SetLogFileName( "LogFileNameTest" );
+ iRc += TestMethod( iPo, "Set/GetLogFileName()", x.GetLogFileName(), "LogFileNameTest", 15 );
+#endif
+
+ x.SetTempDirectory( "/ABCDEFG/" );
+ #ifdef WIN32
+ iRc += TestMethod( iPo, "Set/GetTempDirectory()", x.GetTempDirectory(), "\\ABCDEFG\\", 9 );
+ #else
+ iRc += TestMethod( iPo, "Set/GetTempDirectory()", x.GetTempDirectory(), "/ABCDEFG/", 9 );
+ #endif
+
+ x.SetTempDirectory( "/ABCDEFG" );
+ #ifdef WIN32
+ iRc += TestMethod( iPo, "Set/GetTempDirectory()", x.GetTempDirectory(), "\\ABCDEFG", 8 );
+ #else
+ iRc += TestMethod( iPo, "Set/GetTempDirectory()", x.GetTempDirectory(), "/ABCDEFG", 8 );
+ #endif
+
+ x.SetTempDirectory( "\\ABCDEFG\\");
+ #ifdef WIN32
+ iRc += TestMethod( iPo, "Set/GetTempDirectory()", x.GetTempDirectory(), "\\ABCDEFG\\", 9 );
+ #else
+ iRc += TestMethod( iPo, "Set/GetTempDirectory()", x.GetTempDirectory(), "/ABCDEFG/", 9 );
+ #endif
+
+
+// std::cout << "path separator = [" << x.GetPathSeparator() << "]\n";
+
+ if( iPo > 0 || iRc < 0 )
+ fprintf( stdout, "Total Errors = %d\n", iRc * -1 );
+
+
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], iRc * -1 );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ return iRc;
+}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_cfg_check.cpp b/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_cfg_check.cpp
new file mode 100755
index 0000000..c979bac
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_cfg_check.cpp
@@ -0,0 +1,411 @@
+/* xb_cfg_check.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2019,2023 Gary A Kunkel
+
+The xb64 software library is covered under
+the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ xb64-devel@lists.sourceforge.net
+ xb64-users@lists.sourceforge.net
+
+*/
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "xbase.h"
+
+using namespace xb;
+
+
+int main()
+{
+
+ fprintf( stdout, "\n%s version %d.%d.%d build options\n", CMAKE_PROJECT_NAME, xbase_VERSION_MAJOR,
+ xbase_VERSION_MINOR, xbase_VERSION_PATCH );
+ // fprintf( stdout, "Usage: xb_cfg_check\n\n" );
+ fprintf( stdout, "These options were in effect at library build time:\n" );
+
+ fprintf( stdout, "\nGeneral system variables:\n" );
+ fprintf( stdout, "SYSTEM_NAME = [%s]\n", CMAKE_SYSTEM_NAME );
+ fprintf( stdout, "SYSTEM_PROCESSOR = [%s]\n", CMAKE_SYSTEM_PROCESSOR );
+ fprintf( stdout, "SYSTEM_VERSION = [%s]\n", CMAKE_SYSTEM_VERSION );
+ fprintf( stdout, "PLATFORM = [%s]\n", XB_PLATFORM );
+ fprintf( stdout, "BUILD TYPE = [%s]\n", CMAKE_BUILD_TYPE );
+ fprintf( stdout, "CMAKE C FLAGS = [%s]\n", CMAKE_C_FLAGS );
+ fprintf( stdout, "CMAKE C FLAGS DEBUG = [%s]\n", CMAKE_C_FLAGS_DEBUG );
+ fprintf( stdout, "CMAKE C FLAGS RELEASE = [%s]\n", CMAKE_C_FLAGS_RELEASE );
+
+
+ #ifdef XB_PLATFORM_32
+ fprintf( stdout, "XB_PLATFORM_32 = [TRUE]\n" );
+ #endif
+ #ifdef XB_PLATFORM_64
+ fprintf( stdout, "XB_PLATFORM_64 = [TRUE]\n" );
+ #endif
+ fprintf( stdout, "COMPILER = [%s]\n", CMAKE_COMPILER );
+ #ifdef WIN32
+ fprintf( stdout, "WIN32 = [ON]\n" );
+ #else
+ fprintf( stdout, "WIN32 = [OFF]\n" );
+ #endif
+
+ /*
+ #ifdef XBDLLEXPORT
+ fprintf( stdout, "XBDLLEXPORT = [%s]\n", XBDLLEXPORT );
+ #endif
+ */
+ printf( "\n" );
+
+
+ #ifdef CMAKE_COMPILER_IS_GNUCC
+ fprintf( stdout, "CMAKE_COMPILER_IS_GNUCC = [ON]\n" );
+ #else
+ fprintf( stdout, "CMAKE_COMPILER_IS_GNUCC = [OFF]\n" );
+ #endif
+
+ #ifdef _FILE_OFFSET_BITS
+ fprintf( stdout, "_FILE_OFFSET_BITS = [DEFINED]\n" );
+ #endif
+
+ fprintf( stdout, "User controlled build options:\n" );
+
+
+ #ifdef XB_DEBUG_SUPPORT
+ fprintf( stdout, "XB_DEBUG_SUPPORT = [ON]\n" );
+ #else
+ fprintf( stdout, "XB_DEBUG_SUPPORT = [OFF]\n" );
+ #endif
+
+ #ifdef XB_LOGGING_SUPPORT
+ fprintf( stdout, "XB_LOGGING_SUPPORT = [ON]\n" );
+ #else
+ fprintf( stdout, "XB_LOGGING_SUPPORT = [OFF]\n" );
+ #endif
+
+ #ifdef XB_MEMO_SUPPORT
+ fprintf( stdout, "XB_MEMO_SUPPORT = [ON]\n" );
+ #else
+ fprintf( stdout, "XB_MEMO_SUPPORT = [OFF]\n" );
+ #endif
+
+ #ifdef XB_DBF3_SUPPORT
+ fprintf( stdout, "XB_DBF3_SUPPORT = [ON]\n" );
+ #else
+ fprintf( stdout, "XB_DBF3_SUPPORT = [OFF]\n" );
+ #endif
+
+ #ifdef XB_DBF4_SUPPORT
+ fprintf( stdout, "XB_DBF4_SUPPORT = [ON]\n" );
+ #else
+ fprintf( stdout, "XB_DBF4_SUPPORT = [OFF]\n" );
+ #endif
+
+ #ifdef XB_LINKLIST_SUPPORT
+ fprintf( stdout, "XB_LINKLIST_SUPPORT = [ON]\n" );
+ #else
+ fprintf( stdout, "XB_LINKLIST_SUPPORT = [OFF]\n" );
+ #endif
+
+ #ifdef XB_LOCKING_SUPPORT
+ fprintf( stdout, "XB_LOCKING_SUPPORT = [ON]\n" );
+ #else
+ fprintf( stdout, "XB_LOCKING_SUPPORT = [OFF]\n" );
+ #endif
+
+ #ifdef XB_EXPRESSION_SUPPORT
+ fprintf( stdout, "XB_EXPRESSION_SUPPORT = [ON]\n" );
+ #else
+ fprintf( stdout, "XB_EXPRESSION_SUPPORT = [OFF]\n" );
+ #endif
+
+ #ifdef XB_LOCKING_SUPPORT
+ fprintf( stdout, "XB_EXAMPLES_SUPPORT = [ON]\n" );
+ #else
+ fprintf( stdout, "XB_EXAMPLES_SUPPORT = [OFF]\n" );
+ #endif
+ #ifdef XB_LOCKING_SUPPORT
+ fprintf( stdout, "XB_UTILS_SUPPORT = [ON]\n" );
+ #else
+ fprintf( stdout, "XB_UTILS_SUPPORT = [OFF]\n" );
+ #endif
+
+ #ifdef XB_INDEX_SUPPORT
+ fprintf( stdout, "XB_INDEX_SUPPORT = [ON]\n" );
+ #else
+ fprintf( stdout, "XB_INDEX_SUPPORT = [OFF]\n" );
+ #endif
+
+ #ifdef XB_NDX_SUPPORT
+ fprintf( stdout, "XB_NDX_SUPPORT = [ON]\n" );
+ #else
+ fprintf( stdout, "XB_NDX_SUPPORT = [OFF]\n" );
+ #endif
+
+ #ifdef XB_MDX_SUPPORT
+ fprintf( stdout, "XB_MDX_SUPPORT = [ON]\n" );
+ #else
+ fprintf( stdout, "XB_MDX_SUPPORT = [OFF]\n" );
+ #endif
+
+ #ifdef XB_TDX_SUPPORT
+ fprintf( stdout, "XB_TDX_SUPPORT = [ON]\n" );
+ #else
+ fprintf( stdout, "XB_TDX_SUPPORT = [OFF]\n" );
+ #endif
+
+
+ #ifdef XB_SQL_SUPPORT
+ fprintf( stdout, "XB_SQL_SUPPORT = [ON]\n" );
+ #else
+ fprintf( stdout, "XB_SQL_SUPPORT = [OFF]\n" );
+ #endif
+
+ #ifdef XB_INF_SUPPORT
+ fprintf( stdout, "XB_INF_SUPPORT = [ON]\n" );
+ #else
+ fprintf( stdout, "XB_INF_SUPPORT = [OFF]\n" );
+ #endif
+
+ #ifdef XB_FILTER_SUPPORT
+ fprintf( stdout, "XB_FILTER_SUPPORT = [ON]\n" );
+ #else
+ fprintf( stdout, "XB_FILTER_SUPPORT = [OFF]\n" );
+ #endif
+
+ #ifdef XB_BLOCKREAD_SUPPORT
+ fprintf( stdout, "XB_BLOCKREAD_SUPPORT = [ON]\n" );
+ #else
+ fprintf( stdout, "XB_BLOCKREAD_SUPPORT = [OFF]\n" );
+ #endif
+
+
+ fprintf( stdout, "\nDirectories:\n" );
+ fprintf( stdout, "HOME_DIRECTORY = [%s]\n", CMAKE_HOME_DIRECTORY );
+ fprintf( stdout, "PROJECT_PARENT_DIR = [%s]\n", PROJECT_PARENT_DIR );
+ fprintf( stdout, "PROJECT_BINARY_DIR = [%s]\n", PROJECT_BINARY_DIR );
+ fprintf( stdout, "PROJECT_DATA_DIR = [%s]\n", PROJECT_DATA_DIR );
+ fprintf( stdout, "PROJECT_LOG_DIR = [%s]\n", PROJECT_LOG_DIR );
+ fprintf( stdout, "PROJECT_TEMP_DIR = [%s]\n", PROJECT_TEMP_DIR );
+ fprintf( stdout, "PROJECT_DFLT_LOGFILE = [%s]\n", PROJECT_DFLT_LOGFILE );
+ fprintf( stdout, "PROJECT_SOURCE_DIR = [%s]\n", PROJECT_SOURCE_DIR );
+ fprintf( stdout, "CMAKE_RUNTIME_OUTPUT_DIRECTORY = [%s]\n\n", CMAKE_RUNTIME_OUTPUT_DIRECTORY );
+
+ fprintf( stdout, "Libraries:\n" );
+ fprintf( stdout, "BUILD_SHARED_LIBS = [%s]\n", BUILD_SHARED_LIBS );
+ fprintf( stdout, "EXTRA_LIBS = [%s]\n\n", EXTRA_LIBS );
+
+
+ fprintf( stdout, "sizeof(char *) = [%d]\n", (xbInt32) sizeof( char *));
+ fprintf( stdout, "sizeof(int) = [%d]\n", (xbInt32) sizeof( int ));
+ fprintf( stdout, "sizeof(long) = [%d]\n", (xbInt32) sizeof( long ));
+ fprintf( stdout, "sizeof(char) = [%d]\n", (xbInt32) sizeof( char ));
+ #ifdef HAVE_WCHAR_H
+ fprintf( stdout, "sizeof(wchar_t) = [%d]\n", (xbInt32) sizeof( wchar_t ));
+ #endif
+
+ #ifdef HAVE_WINDOWS_H
+ fprintf( stdout, "sizeof(DWORD) = [%d]\n", (xbInt32) sizeof( DWORD ));
+ #endif
+
+ fprintf( stdout, "sizeof(double) = [%d]\n", (xbInt32) sizeof( double ));
+ fprintf( stdout, "sizeof(float) = [%d]\n", (xbInt32) sizeof( float ));
+ fprintf( stdout, "sizeof(size_t) = [%d]\n", (xbInt32) sizeof( size_t ));
+ fprintf( stdout, "sizeof(off_t) = [%d]\n\n", (xbInt32) sizeof( off_t ));
+
+ fprintf( stdout, "sizeof(xbBool) = [%d]\n", (xbInt32) sizeof( xbBool ));
+ fprintf( stdout, "sizeof(xbInt16) = [%d]\n", (xbInt32) sizeof( xbInt16 ));
+ fprintf( stdout, "sizeof(xbUInt16) = [%d]\n", (xbInt32) sizeof( xbUInt16 ));
+ fprintf( stdout, "sizeof(xbInt32) = [%d]\n", (xbInt32) sizeof( xbInt32 ));
+ fprintf( stdout, "sizeof(xbUInt32) = [%d]\n", (xbInt32) sizeof( xbUInt32 ));
+ fprintf( stdout, "sizeof(xbInt64) = [%d]\n", (xbInt32) sizeof( xbInt64 ));
+ fprintf( stdout, "sizeof(xbUInt64) = [%d]\n", (xbInt32) sizeof( xbUInt64 ));
+ fprintf( stdout, "sizeof(xbFloat) = [%d]\n", (xbInt32) sizeof( xbFloat ));
+ fprintf( stdout, "sizeof(xbDouble) = [%d]\n", (xbInt32) sizeof( xbDouble ));
+
+
+ fprintf( stdout, "\nHeader files:\n" );
+ #ifdef HAVE_CTYPE_H
+ fprintf( stdout, "HAVE_CTYPE_H = [YES]\n" );
+ #else
+ fprintf( stdout, "HAVE_CTYPE_H = [NO]\n" );
+ #endif
+
+ #ifdef HAVE_DIRENT_H
+ fprintf( stdout, "HAVE_DIRENT_H = [YES]\n" );
+ #else
+ fprintf( stdout, "HAVE_DIRENT_H = [NO]\n" );
+ #endif
+
+ #ifdef HAVE_FCNTL_H
+ fprintf( stdout, "HAVE_FCNTL_H = [YES]\n" );
+ #else
+ fprintf( stdout, "HAVE_FCNTL_H = [NO]\n" );
+ #endif
+
+ #ifdef HAVE_INTTYPES_H
+ fprintf( stdout, "HAVE_INTTYPES_H = [YES]\n" );
+ #else
+ fprintf( stdout, "HAVE_INTTYPES_H = [NO]\n" );
+ #endif
+
+ #ifdef HAVE_STDARG_H
+ fprintf( stdout, "HAVE_STDARG_H = [YES]\n" );
+ #else
+ fprintf( stdout, "HAVE_STDARG_H = [NO]\n" );
+ #endif
+
+ #ifdef HAVE_STRING_H
+ fprintf( stdout, "HAVE_STRING_H = [YES]\n" );
+ #else
+ fprintf( stdout, "HAVE_STRING_H = [NO]\n" );
+ #endif
+
+ #ifdef HAVE_STRINGS_H
+ fprintf( stdout, "HAVE_STRINGS_H = [YES]\n" );
+ #else
+ fprintf( stdout, "HAVE_STRINGS_H = [NO]\n" );
+ #endif
+
+ #ifdef HAVE_STAT_H
+ fprintf( stdout, "HAVE_STAT_H = [YES]\n" );
+ #else
+ fprintf( stdout, "HAVE_STAT_H = [NO]\n" );
+ #endif
+
+ #ifdef HAVE_UNISTD_H
+ fprintf( stdout, "HAVE_UNISTD_H = [YES]\n" );
+ #else
+ fprintf( stdout, "HAVE_UNISTD_H = [NO]\n" );
+ #endif
+
+ #ifdef HAVE_WINDOWS_H
+ fprintf( stdout, "HAVE_WINDOWS_H = [YES]\n" );
+ #else
+ fprintf( stdout, "HAVE_WINDOWS_H = [NO]\n" );
+ #endif
+
+
+ fprintf( stdout, "\nC Library functions:\n" );
+
+ #ifdef HAVE__CLOSE_F
+ fprintf( stdout, "HAVE__CLOSE_F = [YES]\n" );
+ #else
+ fprintf( stdout, "HAVE__CLOSE_F = [NO]\n" );
+ #endif
+
+ #ifdef HAVE_CREATEPROCESSW_F
+ fprintf( stdout, "HAVE_CREATEPROCESSW_F = [YES]\n" );
+ #else
+ fprintf( stdout, "HAVE_CREATEPROCESSW_F = [NO]\n" );
+ #endif
+
+ #ifdef HAVE_FCNTL_F
+ fprintf( stdout, "HAVE_FCNTL_F = [YES]\n" );
+ #else
+ fprintf( stdout, "HAVE_FCNTL_F = [NO]\n" );
+ #endif
+
+ #ifdef HAVE__FDOPEN_F
+ fprintf( stdout, "HAVE__FDOPEN_F = [YES]\n" );
+ #else
+ fprintf( stdout, "HAVE__FDOPEN_F = [NO]\n" );
+ #endif
+
+ #ifdef HAVE_FOPEN_S_F
+ fprintf( stdout, "HAVE_FOPEN_S_F = [YES]\n" );
+ #else
+ fprintf( stdout, "HAVE_FOPEN_S_F = [NO]\n" );
+ #endif
+
+ #ifdef HAVE__FSOPEN_F
+ fprintf( stdout, "HAVE__FSOPEN_F = [YES]\n" );
+ #else
+ fprintf( stdout, "HAVE__FSOPEN_F = [NO]\n" );
+ #endif
+
+ #ifdef HAVE__FILENO_F
+ fprintf( stdout, "HAVE__FILENO_F = [YES]\n" );
+ #else
+ fprintf( stdout, "HAVE__FILENO_F = [NO]\n" );
+ #endif
+
+ #ifdef HAVE_FORK_F
+ fprintf( stdout, "HAVE_FORK_F = [YES]\n" );
+ #else
+ fprintf( stdout, "HAVE_FORK_F = [NO]\n" );
+ #endif
+
+ #ifdef HAVE__FSEEKI64_F
+ fprintf( stdout, "HAVE__FSEEKI64_F = [YES]\n" );
+ #else
+ fprintf( stdout, "HAVE__FSEEKI64_F = [NO]\n" );
+ #endif
+
+ #ifdef HAVE_FSEEKO_F
+ fprintf( stdout, "HAVE_FSEEKO_F = [YES]\n" );
+ #else
+ fprintf( stdout, "HAVE_FSEEKO_F = [NO]\n" );
+ #endif
+
+ #ifdef HAVE_FTRUNCATE_F
+ fprintf( stdout, "HAVE_FTRUNCATE_F = [YES]\n" );
+ #else
+ fprintf( stdout, "HAVE_FTRUNCATE_F = [NO]\n" );
+ #endif
+
+ #ifdef HAVE__LOCALTIME_S_F
+ fprintf( stdout, "HAVE__LOCALTIME_S_F = [YES]\n" );
+ #else
+ fprintf( stdout, "HAVE__LOCALTIME_S_F = [NO]\n" );
+ #endif
+
+ #ifdef HAVE_LOCKFILE_F
+ fprintf( stdout, "HAVE_LOCKFILE_F = [YES]\n" );
+ #else
+ fprintf( stdout, "HAVE_LOCKFILE_F = [NO]\n" );
+ #endif
+
+ #ifdef HAVE_LOCKING_F
+ fprintf( stdout, "HAVE_LOCKING_F = [YES]\n" );
+ #else
+ fprintf( stdout, "HAVE_LOCKING_F = [NO]\n" );
+ #endif
+
+ #ifdef HAVE__LOCKING_F
+ fprintf( stdout, "HAVE__LOCKING_F = [YES]\n" );
+ #else
+ fprintf( stdout, "HAVE__LOCKING_F = [NO]\n" );
+ #endif
+
+ #ifdef HAVE__OPEN_F
+ fprintf( stdout, "HAVE__OPEN_F = [YES]\n" );
+ #else
+ fprintf( stdout, "HAVE__OPEN_F = [NO]\n" );
+ #endif
+
+ #ifdef HAVE_SETENDOFFILE_F
+ fprintf( stdout, "HAVE_SETENDOFFILE_F = [YES]\n" );
+ #else
+ fprintf( stdout, "HAVE_SETENDOFFILE_F = [NO]\n" );
+ #endif
+
+ #ifdef HAVE_VSNPRINTF_F
+ fprintf( stdout, "HAVE_VSNPRINTF_F = [YES]\n" );
+ #else
+ fprintf( stdout, "HAVE_VSNPRINTF_F = [NO]\n" );
+ #endif
+
+ #ifdef HAVE_VSNPRINTF_S_F
+ fprintf( stdout, "HAVE_VSNPRINTF_S_F = [YES]\n" );
+ #else
+ fprintf( stdout, "HAVE_VSNPRINTF_S_F = [NO]\n" );
+ #endif
+
+ return 0;
+}
+
diff --git a/src/utils/xb_copydbf.cpp b/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_copydbf.cpp
index 2466b1b..2466b1b 100755
--- a/src/utils/xb_copydbf.cpp
+++ b/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_copydbf.cpp
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_dbfutil.cpp b/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_dbfutil.cpp
new file mode 100755
index 0000000..76988c0
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_dbfutil.cpp
@@ -0,0 +1,3836 @@
+/* xb_dbfutil.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2021,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under
+the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ xb64-devel@lists.sourceforge.net
+ xb64-users@lists.sourceforge.net
+
+*/
+
+#include "xbase.h"
+
+#ifdef HAVE_DIRENT_H
+#include <dirent.h>
+#endif
+
+#ifdef WIN32
+#include <windows.h>
+#endif
+
+using namespace xb;
+
+///@cond DOXYOFF
+class xbUtil{
+ public:
+ xbUtil( xbXBase *x );
+ ~xbUtil();
+ xbDbf *GetTablePtr( const char * cTitle );
+ void DisplayActiveTable() const;
+
+ void Help();
+
+ // menus
+ xbInt16 GetOption();
+ xbInt32 GetLong();
+ void ProcessOption( const xbString & sOption );
+ void MainMenu();
+ void SystemMenu();
+ void FileMenu();
+ void RecordMenu();
+ void FieldMenu();
+ void IndexMenu();
+ void LockingMenu();
+ void ExpressionMenu();
+ void DebugMenu();
+ void FilterMenu();
+
+ #ifdef XB_SQL_SUPPORT
+ void SqlMenu();
+ #endif // XB_SQL_MENU
+
+ #ifdef XB_NDXINF_SUPPORT
+ void InfFileMenu();
+ #endif // XB_NDXINF_SUPPORT
+
+ // 2 - SystemMenu options
+ void ListSystemSettings();
+ void UpdateDataDirectory();
+ void ToggleDefaultAutoCommit();
+ #ifdef XB_MEMO_SUPPORT
+ void UpdateDefaultMemoBlockSize();
+ #endif
+ void UpdateLogDirectory();
+ void UpdateLogFileName();
+ void ToggleLoggingStatus();
+ void WriteLogMessage();
+ #ifdef XB_LOCKING_SUPPORT
+ void UpdateDefaultLockRetries();
+ void ToggleDefaultAutoLock();
+ void UpdateDefaultLockFlavor();
+ void UpdateDefaultLockWait();
+ void ToggleMultiUserMode();
+ #endif
+
+ // 3 - FileMenu options
+ void ListFilesInDataDirectory();
+ void Open();
+ void Close();
+ void CloseAllTables();
+ void DisplayTableStats();
+ void Pack();
+ void ZapTable();
+ void CopyDbfStructure();
+ void UpdateTableAutoCommit();
+ void DisplayTableInfo();
+ void RenameTable();
+ void DeleteTable();
+
+ // 4 - RecordMenu options
+ void GetRecord();
+ void BlankRecord();
+ void AppendRecord();
+ void PutRecord();
+ void DeleteRecord();
+ void UndeleteRecord();
+ void SelectActiveTable();
+ void GetFirstRecord();
+ void GetNextRecord();
+ void GetPrevRecord();
+ void GetLastRecord();
+ void DumpRecord();
+ void AbortRecord();
+ void CommitRecord();
+
+ #ifdef XB_FILTER_SUPPORT
+ void SetFilter();
+ void GetFirstFilterRec();
+ void GetNextFilterRec();
+ void GetPrevFilterRec();
+ void GetLastFilterRec();
+ #endif // XB_FILTER_SUPPORT
+
+ // 5 - FieldMenu options
+ void ListFieldInfo();
+ void UpdateFieldData();
+ #ifdef XB_MEMO_SUPPORT
+ void ShowMemoFieldData();
+ void UpdateMemoFieldData();
+ void DeleteMemoField();
+ #endif
+
+ // 6 - LockMenu options
+ #ifdef XB_LOCKING_SUPPORT
+ void DisplayFileLockSettings();
+ void UpdateFileLockRetryCount();
+ void UpdateFileLockFlavor();
+ void UpdateFileAutoLock();
+ void LockDbf();
+ void UnlockDbf();
+ void LockRecord();
+ void UnlockRecord();
+ void LockAppend();
+ void UnlockAppend();
+ #ifdef XB_INDEX_SUPPORT
+ void LockIndices();
+ void UnlockIndices();
+ #endif // XB_INDEX_SUPPORT
+
+ #ifdef XB_MEMO_SUPPORT
+ void LockMemo();
+ void UnlockMemo();
+ #endif // XB_MEMO_SUPPORT
+
+ void LockHeader();
+ void UnlockHeader();
+ void xbFileLock();
+ void xbFileUnlock();
+ #endif // XB_LOCKING_SUPPORT
+
+ // 7 - Expression Menu options
+ #ifdef XB_EXPRESSION_SUPPORT
+ void ParseExpression( xbInt16 iOption );
+ void ProcessParsedExpression( xbInt16 iOption );
+ void ParseAndProcessExpression();
+ void JulToDate8();
+ void Date8ToJul();
+ void IsLeapYear();
+ #ifdef XB_DEBUG_SUPPORT
+ void DumpExpressionTree();
+ #endif // XB_DEBUG_SUPPORT
+ #endif // XB_EXPRESSION_SUPPORT
+
+ // 8 - Index Menu Options
+ #ifdef XB_INDEX_SUPPORT
+ void DisplayOpenIndexFiles();
+ void DisplaySupportedIndexTypes();
+ void SelectTag();
+ void OpenIndex();
+ void CloseIndexFile();
+ void CreateIndexTag();
+
+ void GetFirstKey();
+ void GetNextKey();
+ void GetPrevKey();
+ void GetLastKey();
+ void FindKey();
+
+ void CheckIntegrity();
+ void Reindex();
+ void DeleteTag();
+ void AssociateNonProdIx();
+
+ void DumpIxHeader();
+ void DumpIxNode();
+ void DumpIxNodeChain();
+ void DumpRecsByIx( xbInt16 iOpt );
+ void DumpFreeBlocks();
+
+ #endif // XB_INDEX_SUPPORT
+
+
+ // 9 - SQL Menu Options
+ #ifdef XB_SQL_SUPPORT
+ void ExecSqlNonQuery();
+ void ExecSqlQuery();
+ #endif // XB_SQL_SUPPORT
+
+
+ // 10 - DebugMenu options
+ #ifdef XB_MEMO_SUPPORT
+ void DumpDbtHeader();
+ void DumpMemoFreeChain();
+ #endif
+
+ // 11 - InfFileMenu options
+ #ifdef XB_NDXINF_SUPPORT
+ void ListInfFileData();
+ void AddInfFileData();
+ void DeleteInfFileData();
+ void InfFileHelp();
+ #endif
+
+
+ private:
+ xbXBase *x;
+ xbDbf *dActiveTable;
+
+ #ifdef XB_EXPRESSION_SUPPORT
+ xbExp *exp;
+ #endif // XB_EXPRESSION_SUPPORT
+
+ #ifdef XB_SQL_SUPPORT
+ xbSql *sql;
+ #endif // XB_SQL_SUPPORT
+
+ #ifdef XB_FILTER_SUPPORT
+ xbFilter *filt;
+ #endif // XB_FILTER_SUPPORT
+
+};
+
+/*************************************************************************************/
+xbUtil::xbUtil( xbXBase *x )
+{
+ this->x = x;
+ dActiveTable = NULL;
+ x->EnableMsgLogging();
+ x->SetLogSize( 10000000L );
+
+ #ifdef XB_EXPRESSION_SUPPORT
+ exp = NULL;
+ #endif
+
+ #ifdef XB_SQL_SUPPORT
+ sql = new xbSql( x );
+ #endif // XB_SQL_SUPPORT
+
+ #ifdef XB_FILTER_SUPPORT
+ filt = NULL;
+ #endif // XB_FILTER_SUPPORT
+}
+
+
+/*************************************************************************************/
+xbUtil::~xbUtil(){
+
+ x->CloseAllTables();
+
+ if( dActiveTable )
+ delete dActiveTable;
+
+ #ifdef XB_SQL_SUPPORT
+ if( sql )
+ delete sql;
+ #endif // XB_SQL_SUPPORT
+
+ #ifdef XB_FILTER_SUPPORT
+ if( filt )
+ delete filt;
+ #endif // XB_FILTER_SUPPORT
+}
+
+
+/*************************************************************************************/
+void xbUtil::Help(){
+ std::cout << "Program xb_dbfutil provides a menu driven application for accessing" << std::endl;
+ std::cout << "the xbase64 library functions." << std::endl << std::endl;
+ std::cout << "Menu choices can be selected directly with out accessing the given menus" << std::endl;
+ std::cout << "by entering a '=' followed by the menu choices. For example, entering '=3.4'" << std::endl;
+ std::cout << "would be the same as going to menu #3 and entering a 4, which is the sequence" << std::endl;
+ std::cout << "for opening a file." << std::endl;
+}
+
+/*************************************************************************************/
+#ifdef XB_NDXINF_SUPPORT
+
+void xbUtil::ListInfFileData()
+{
+ xbLinkListNode<xbString> *llN = dActiveTable->GetNdxInfList();
+
+ xbString s;
+ while( llN ){
+ s = llN->GetKey();
+ std::cout << s.Str() << std::endl;
+ llN = llN->GetNextNode();
+ }
+
+}
+
+void xbUtil::AddInfFileData()
+{
+ char cBuf[128];
+ std::cout << "Enter NDX index file name (FILENAME.NDX)" << std::endl;
+ std::cin.getline( cBuf, 128 );
+ xbInt16 iRc = dActiveTable->AssociateIndex( "NDX", cBuf, 0 );
+ x->DisplayError( iRc );
+}
+
+void xbUtil::DeleteInfFileData()
+{
+ char cBuf[128];
+ std::cout << "Enter NDX index file name (FILENAME.NDX)" << std::endl;
+ std::cin.getline( cBuf, 128 );
+ xbInt16 iRc = dActiveTable->AssociateIndex( "NDX", cBuf, 1 );
+ x->DisplayError( iRc );
+}
+
+void xbUtil::InfFileHelp()
+{
+ std::cout << std::endl;
+ std::cout << "Xbase64 uses an .INF file to link non production (NDX) index files to their associated DBF data file" << std::endl;
+}
+#endif // XB_NDXINF_SUPPORT
+
+
+/*************************************************************************************/
+#ifdef XB_INDEX_SUPPORT
+#ifdef XB_LOCKING_SUPPORT
+
+void xbUtil::LockIndices(){
+
+ // verify active table selected, if not, select one
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+ xbInt16 iRc = dActiveTable->LockIndices( XB_LOCK );
+ x->DisplayError( iRc );
+}
+
+void xbUtil::UnlockIndices(){
+
+ // verify active table selected, if not, select one
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+ xbInt16 iRc = dActiveTable->LockIndices( XB_UNLOCK );
+ x->DisplayError( iRc );
+}
+
+#endif // XB_LOCKING_SUPPORT
+#endif // XB_INDEX_SUPPORT
+
+
+/*************************************************************************************/
+#ifdef XB_EXPRESSION_SUPPORT
+void xbUtil::ParseExpression( xbInt16 iOption ){
+
+ if( iOption == 0 )
+ std::cout << "ParseExpression()\n";
+
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+ xbInt16 iRc;
+ char sExpression[256];
+ memset( sExpression, 0x00, 256 );
+
+ std::cout << "Enter expresion:\n";
+ std::cin.getline( sExpression, 255 );
+
+ if( strlen( sExpression ) == 0 ){
+ std::cout << "Invalid expression" << std::endl;
+ return;
+ }
+
+ if( exp ){
+ delete exp;
+ exp = NULL;
+ }
+
+ exp = new xbExp( x, dActiveTable );
+ iRc = exp->ParseExpression( sExpression );
+
+ if( iOption == 0 )
+ x->DisplayError( iRc );
+}
+
+/*************************************************************************************/
+void xbUtil::ProcessParsedExpression( xbInt16 iOption ){
+
+ if( iOption == 0 )
+ std::cout << "ProcessParsedExpression()\n";
+ if( !exp )
+ ParseExpression( iOption );
+ if( !exp )
+ return;
+
+ // std::cout << "Dump from w/i dbfutil before processing expression\n";
+ //exp->DumpTree( xbTrue );
+ //std::cout << "-- end of dumptree in dbfutil before processExpression\n";
+
+ xbInt16 iRc = exp->ProcessExpression();
+ if( iRc != XB_NO_ERROR ){
+ x->DisplayError( iRc );
+ return;
+ }
+
+ //std::cout << "Dump from w/i dbfutil after processing expression\n";
+ //exp->DumpTree( xbTrue );
+ //std::cout << "-- end of dumptree in dbfutil\n";
+
+ xbString sResult;
+ xbDouble dResult;
+ xbDate dtResult;
+ xbBool bResult;
+
+ switch ( exp->GetReturnType()){
+ case XB_EXP_CHAR:
+ exp->GetStringResult( sResult );
+ std::cout << sResult.Str() << "\n";
+ break;
+ case XB_EXP_DATE:
+ exp->GetDateResult( dtResult );
+ std::cout << dtResult.Str() << "\n";
+ break;
+ case XB_EXP_LOGICAL:
+ exp->GetBoolResult( bResult );
+ std::cout << bResult << "\n";
+ break;
+ case XB_EXP_NUMERIC:
+ exp->GetNumericResult( dResult );
+ std::cout << dResult << "\n";
+ break;
+ default:
+ std::cout << "Unknown result type [" << exp->GetReturnType() << std::endl;
+ break;
+ }
+ return;
+}
+
+/*************************************************************************************/
+void xbUtil::ParseAndProcessExpression(){
+ ParseExpression( 1 );
+ if( exp )
+ ProcessParsedExpression( 1 );
+}
+/*************************************************************************************/
+#ifdef XB_DEBUG_SUPPORT
+void xbUtil::DumpExpressionTree(){
+
+ if( exp )
+ exp->DumpTree( xbTrue );
+ else
+ std::cout << "No expression defined\n";
+}
+#endif // XB_DEBUG_SUPPORT
+
+void xbUtil::JulToDate8(){
+ std::cout << "Convert Julian Date to Date8 (CCYYMMDD) format" << std::endl;
+ std::cout << "Enter Julian Value" << std::endl;
+ xbInt32 l = GetLong();
+ xbDate d( l );
+ std::cout << "Date8 value = [" << d.Str() << "]" << std::endl;
+}
+
+void xbUtil::Date8ToJul(){
+ char cLine[12];
+ std::cout << "Convert Date8 (CCYYMMDD) format to Julian Date value" << std::endl;
+ std::cout << "Enter Date8 value:" << std::endl;
+ memset( cLine, 0x00, 12 );
+ std::cin.getline( cLine, 9 );
+
+ if( strlen( cLine ) == 8 ){
+ xbDate d( cLine );
+ std::cout << "Julian Value = [" << d.JulianDays() << "]" << std::endl;
+ } else {
+ std::cout << "Invalid length, expecting 8 characters" << std::endl;
+ }
+}
+
+void xbUtil::IsLeapYear(){
+ std::cout << "Check leap year status for a given year" << std::endl;
+ std::cout << "Enter a four digit year" << std::endl;
+ xbInt32 l = GetLong();
+ xbDate d( l );
+ if( d.IsLeapYear( (xbInt16) l ))
+ std::cout << l << " is a leap year" << std::endl;
+ else
+ std::cout << l << " is not a leap year" << std::endl;
+}
+#endif // XB_EXPRESSION_SUPPORT
+/*************************************************************************************/
+#ifdef XB_SQL_SUPPORT
+void xbUtil::ExecSqlNonQuery(){
+
+ xbSql sql( x );
+ std::cout << "ExecSqlNonQuery\n";
+
+ char sSql[2048];
+ std::cout << "Enter an SQL command (2K max byte max)" << std::endl;
+ std::cin.getline( sSql, 2048 );
+
+ xbInt16 iRc = sql.ExecuteNonQuery( sSql );
+ x->DisplayError( iRc );
+}
+
+void xbUtil::ExecSqlQuery(){
+ std::cout << "ExecSqlQuery\n";
+}
+#endif // XB_SQL_SUPPORT
+
+/*************************************************************************************/
+#ifdef XB_LOCKING_SUPPORT
+void xbUtil::DisplayFileLockSettings(){
+
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+ std::cout << "File Lock Retry Count = [" << dActiveTable->GetLockRetryCount() << "]" << std::endl;
+ std::cout << "File Lock Flavor = [";
+ switch (dActiveTable->GetLockFlavor()){
+ case 1:
+ std::cout << "Dbase]" << std::endl;
+ break;
+ case 2:
+ std::cout << "Clipper]" << std::endl;
+ break;
+ case 3:
+ std::cout << "Fox]" << std::endl;
+ break;
+ case 9:
+ std::cout << "Xbase64]" << std::endl;
+ break;
+ default:
+ std::cout << "Unknown]" << std::endl;
+ break;
+ }
+ std::cout << "File Auto Lock = [";
+
+ if( dActiveTable->GetAutoLock())
+ std::cout << "ON]" << std::endl;
+ else
+ std::cout << "OFF]" << std::endl;
+ if( dActiveTable->GetHeaderLocked())
+ std::cout << "Header Locked = [TRUE]\n";
+ else
+ std::cout << "Header Locked = [FALSE]\n";
+
+ if( dActiveTable->GetTableLocked())
+ std::cout << "Table Locked = [TRUE]\n";
+ else
+ std::cout << "Table Locked = [FALSE]\n";
+
+ if( dActiveTable->GetAppendLocked() > 0 )
+ std::cout << "Append Locked = [" << dActiveTable->GetAppendLocked() << "]\n";
+ else
+ std::cout << "Append Locked = [FALSE]\n";
+
+ #ifdef XB_MEMO_SUPPORT
+ if( dActiveTable->GetMemoLocked())
+ std::cout << "Memo Locked = [TRUE]\n";
+ else
+ std::cout << "Memo Locked = [FALSE]\n";
+ #endif
+
+ xbLinkListNode<xbUInt32> * llN = dActiveTable->GetFirstRecLock();
+ if( llN ){
+ while( llN ){
+ std::cout << "Record Locked = [" << llN->GetKey() << "]\n";
+ llN = llN->GetNextNode();
+ }
+ } else {
+ std::cout << "Record Locked = [None]\n";
+ }
+}
+
+void xbUtil::UpdateFileLockRetryCount(){
+
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+
+ char cBuf[15];
+ std::cout << std::endl << "Enter new File Lock Retry Count: " << std::endl;
+ std::cin.getline( cBuf, 15 );
+ if( strlen( cBuf ) == 0 ){
+ std::cout << "File Lock Retry Count not updated" << std::endl;
+ return;
+ } else {
+ dActiveTable->SetLockRetryCount( atoi( cBuf ));
+ std::cout << "File Lock Retry Count updated to ["
+ << dActiveTable->GetLockRetryCount() << "]" << std::endl;
+ }
+}
+
+void xbUtil::UpdateFileLockFlavor(){
+
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+
+ std::cout << std::endl;
+ std::cout << "Enter new File Lock Flavor: " << std::endl;
+ std::cout << "1 = DBase" << std::endl;
+ std::cout << "2 = Clipper (not implemented yet)" << std::endl;
+ std::cout << "3 = Fox (not implemented yet)" << std::endl;
+ std::cout << "9 = XBase64 (not implemented yet)" << std::endl;
+
+ char cBuf[15];
+ std::cin.getline( cBuf, 15 );
+ if( strlen( cBuf ) == 0 ){
+ std::cout << "File Lock Flavor not updated" << std::endl;
+ return;
+ } else {
+ dActiveTable->SetLockFlavor( atoi( cBuf ));
+ std::cout << "File Lock Flavor updated to ["
+ << dActiveTable->GetLockFlavor() << "]" << std::endl;
+ }
+}
+
+void xbUtil::UpdateFileAutoLock(){
+
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+
+ std::cout << "Enter new File Auto Lock: " << std::endl;
+ std::cout << "-1 = Use System Default" << std::endl;
+ std::cout << " 0 = Disable Auto Lock for this DBF file" << std::endl;
+ std::cout << " 1 = Enable Auto Lock for this DBF file" << std::endl;
+
+ char cBuf[15];
+ std::cin.getline( cBuf, 15 );
+ if( strlen( cBuf ) == 0 ){
+ std::cout << "File Auto Lock Flavor not updated" << std::endl;
+ return;
+ }
+ xbInt16 iOption = atoi( cBuf );
+ if( iOption < -1 || iOption > 1 ){
+ std::cout << "Must be one of:" << std::endl;
+ std::cout << " -1 = Use Default Auto Lock" << std::endl;
+ std::cout << " 0 = File Auto Lock Off" << std::endl;
+ std::cout << " 1 = File Auto Lock On" << std::endl;
+ std::cout << "File Auto Lock Flavor not updated" << std::endl;
+ return;
+ } else {
+ dActiveTable->SetAutoLock( iOption );
+ std::cout << "File Auto Lock updated to ["
+ << dActiveTable->GetAutoLock() << "]" << std::endl;
+ }
+}
+
+void xbUtil::LockDbf(){
+
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+ xbInt16 iRc;
+ std::cout << std::endl << "Lock Table" << std::endl;
+ iRc = dActiveTable->LockTable( XB_LOCK );
+ x->DisplayError( iRc );
+}
+
+void xbUtil::LockAppend(){
+
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+ xbInt16 iRc;
+ std::cout << std::endl << "Lock Append" << std::endl;
+ iRc = dActiveTable->LockAppend( XB_LOCK );
+ x->DisplayError( iRc );
+}
+
+void xbUtil::UnlockAppend(){
+
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+ xbInt16 iRc;
+ std::cout << std::endl << "Unlock Append" << std::endl;
+ iRc = dActiveTable->LockAppend( XB_UNLOCK );
+ x->DisplayError( iRc );
+}
+#ifdef XB_MEMO_SUPPORT
+void xbUtil::LockMemo(){
+
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+ xbInt16 iRc;
+ std::cout << std::endl << "Lock Memo" << std::endl;
+ iRc = dActiveTable->LockMemo( XB_LOCK );
+ x->DisplayError( iRc );
+}
+
+void xbUtil::UnlockMemo(){
+
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+ xbInt16 iRc;
+ std::cout << std::endl << "Unlock Memo" << std::endl;
+ iRc = dActiveTable->LockMemo( XB_UNLOCK );
+ x->DisplayError( iRc );
+}
+#endif
+
+void xbUtil::LockRecord(){
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+
+ xbInt16 iRc;
+ std::cout << std::endl << "Lock Record" << std::endl;
+ std::cout << "Enter record number to lock specific record" << std::endl;
+
+ char cBuf[15];
+ std::cin.getline( cBuf, 15 );
+ //iRc = dActiveTable->LockRecord( XB_LOCK, atol( cBuf ));
+ iRc = dActiveTable->LockRecord( XB_LOCK, strtoul( cBuf, NULL, 0 ));
+
+ x->DisplayError( iRc );
+}
+
+void xbUtil::UnlockRecord(){
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+
+ xbInt16 iRc;
+ std::cout << std::endl << "Unlock Record" << std::endl;
+ std::cout << "Enter record number to unlock specific record" << std::endl;
+
+ char cBuf[15];
+ std::cin.getline( cBuf, 15 );
+ //iRc = dActiveTable->LockRecord( XB_UNLOCK, atol( cBuf ));
+ iRc = dActiveTable->LockRecord( XB_UNLOCK, strtoul( cBuf, NULL, 0 ));
+ x->DisplayError( iRc );
+}
+
+void xbUtil::UnlockDbf(){
+
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+
+ xbInt16 iRc;
+ std::cout << std::endl << "Unlock Table" << std::endl;
+ iRc = dActiveTable->LockTable( XB_UNLOCK );
+ x->DisplayError( iRc );
+}
+
+void xbUtil::UnlockHeader(){
+
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+
+ xbInt16 iRc;
+ std::cout << std::endl << "Unlock Table Header" << std::endl;
+ iRc = dActiveTable->LockHeader( XB_UNLOCK );
+ x->DisplayError( iRc );
+}
+
+void xbUtil::LockHeader(){
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+
+ xbInt16 iRc;
+ std::cout << std::endl << "Lock Table Header" << std::endl;
+ iRc = dActiveTable->LockHeader( XB_LOCK );
+ x->DisplayError( iRc );
+}
+
+#ifdef XB_DEBUG_SUPPORT
+
+void xbUtil::xbFileLock(){
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+
+ char cBufOffset[30];
+ char cBufLen[30];
+
+ std::cout << std::endl << "Enter new File Lock Offset (in bytes from BOF): " << std::endl;
+ std::cin.getline( cBufOffset, 30 );
+ std::cout << std::endl << "Enter new File Lock Len (in Bytes): " << std::endl;
+ std::cin.getline( cBufLen, 30 );
+
+ if( strlen( cBufOffset ) == 0 || strlen( cBufLen ) == 0 ){
+ std::cout << "Offset and length required." << std::endl;
+ return;
+ }
+
+ xbInt64 llSpos;
+ xbInt64 llLen;
+ xbString s1 = cBufOffset;
+ s1.CvtLongLong( llSpos );
+ s1 = cBufLen;
+ s1.CvtLongLong( llLen );
+ xbInt16 iRc = dActiveTable->xbLock( XB_LOCK, llSpos, (size_t) llLen );
+ x->DisplayError( iRc );
+}
+
+void xbUtil::xbFileUnlock(){
+
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+ char cBufOffset[30];
+ char cBufLen[30];
+ std::cout << std::endl << "Enter new File Lock Offset (in bytes from BOF): " << std::endl;
+ std::cin.getline( cBufOffset, 30 );
+ std::cout << std::endl << "Enter new File Lock Len (in Bytes): " << std::endl;
+ std::cin.getline( cBufLen, 30 );
+ if( strlen( cBufOffset ) == 0 || strlen( cBufLen ) == 0 ){
+ std::cout << "Offset and length required." << std::endl;
+ return;
+ }
+ xbInt16 iRc;
+ iRc = dActiveTable->xbLock( XB_UNLOCK, atol( cBufOffset ), (size_t) atol( cBufLen ));
+ x->DisplayError( iRc );
+}
+
+#endif
+#endif
+/*************************************************************************************/
+#ifdef XB_DEBUG_SUPPORT
+#ifdef XB_MEMO_SUPPORT
+
+void xbUtil::DumpDbtHeader(){
+
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+
+ if( !dActiveTable->MemoFieldsExist()){
+ std::cout << "Table has no memo fields" << std::endl;
+ return;
+ }
+
+ xbMemo * mPtr;
+ mPtr = dActiveTable->GetMemoPtr();
+ mPtr->DumpMemoHeader();
+
+}
+#endif
+#endif
+
+/*************************************************************************************/
+#ifdef XB_DEBUG_SUPPORT
+#ifdef XB_MEMO_SUPPORT
+
+void xbUtil::DumpMemoFreeChain(){
+
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+ if( !dActiveTable->MemoFieldsExist()){
+ std::cout << "Table has no memo fields" << std::endl;
+ return;
+ }
+ xbMemo * mPtr;
+ mPtr = dActiveTable->GetMemoPtr();
+ mPtr->DumpMemoFreeChain();
+}
+#endif
+#endif
+
+/*************************************************************************************/
+void xbUtil::ListFieldInfo(){
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+ DisplayActiveTable();
+ dActiveTable->DumpHeader( 2 );
+}
+/*************************************************************************************/
+void xbUtil::UpdateFieldData(){
+ xbInt16 rc;
+ char cFldName[40];
+ char cFldData[256];
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+ std::cout << "Enter Field Name " << std::endl;
+ std::cin.getline( cFldName, 40 );
+
+ std::cout << "Enter Field Data " << std::endl;
+ std::cin.getline( cFldData, 256 );
+
+ if(( rc = dActiveTable->PutField( cFldName, cFldData )) != XB_NO_ERROR ){
+ x->DisplayError( rc );
+ return;
+ }
+ std::cout << "Success" << std::endl;
+}
+/*************************************************************************************/
+#ifdef XB_MEMO_SUPPORT
+void xbUtil::ShowMemoFieldData(){
+ xbInt16 rc;
+ char cFldName[40];
+ char cBuf[15];
+ xbString sMemoData;
+ xbUInt32 ulRecNo;
+ xbUInt32 ulFldLen;
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+ if( !dActiveTable->MemoFieldsExist()){
+ std::cout << "Table has no memo fields" << std::endl;
+ return;
+ }
+ if( dActiveTable->GetCurRecNo() == 0 ){
+ std::cout << "Enter Record number" << std::endl;
+ std::cin.getline( cBuf, 15 );
+ if( strlen( cBuf ) == 0 ){
+ std::cout << "Record number not entered" << std::endl;
+ return;
+ }
+ //ulRecNo = atol( cBuf );
+ ulRecNo = strtoul( cBuf, NULL, 0 );
+ if(( rc = dActiveTable->GetRecord( ulRecNo )) != XB_NO_ERROR ){
+ x->DisplayError( rc );
+ return;
+ }
+ }
+ std::cout << "Enter Memo Field Name " << std::endl;
+ std::cin.getline( cFldName, 40 );
+ if(( rc = dActiveTable->GetMemoField( cFldName, sMemoData )) != XB_NO_ERROR ){
+ std::cout << "rc = " << rc << std::endl;
+ x->DisplayError( rc );
+ return;
+ }
+ if(( rc = dActiveTable->GetMemoFieldLen( cFldName, ulFldLen )) != XB_NO_ERROR ){
+ std::cout << "rc = " << rc << std::endl;
+ x->DisplayError( rc );
+ return;
+ }
+ std::cout << sMemoData.Str() << std::endl;
+ std::cout << "Data length = [" << ulFldLen << "]" << std::endl;
+}
+#endif
+/*************************************************************************************/
+#ifdef XB_MEMO_SUPPORT
+void xbUtil::UpdateMemoFieldData(){
+
+ xbInt16 rc;
+ char cFldName[40];
+ char cBuf[15];
+ char cMemoData[2048];
+ xbUInt32 ulRecNo;
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+ if( !dActiveTable->MemoFieldsExist()){
+ std::cout << "Table has no memo fields" << std::endl;
+ return;
+ }
+ if( dActiveTable->GetCurRecNo() == 0 ){
+ std::cout << "Enter Record number" << std::endl;
+ std::cin.getline( cBuf, 15 );
+ if( strlen( cBuf ) == 0 ){
+ std::cout << "Record number not entered" << std::endl;
+ return;
+ }
+ //ulRecNo = atol( cBuf );
+ ulRecNo = strtoul( cBuf, NULL, 0 );
+ if(( rc = dActiveTable->GetRecord( ulRecNo )) != XB_NO_ERROR ){
+ x->DisplayError( rc );
+ return;
+ }
+ }
+ std::cout << "Enter Memo Field Name " << std::endl;
+ std::cin.getline( cFldName, 40 );
+ std::cout << "Enter Memo Data (2048 bytes max) " << std::endl;
+ std::cin.getline( cMemoData, 2048 );
+ if(( rc = dActiveTable->UpdateMemoField( cFldName, cMemoData )) != XB_NO_ERROR ){
+ std::cout << "rc = " << rc << std::endl;
+ x->DisplayError( rc );
+ return;
+ }
+
+ if(( rc = dActiveTable->PutRecord( dActiveTable->GetCurRecNo())) != XB_NO_ERROR ){
+ std::cout << "rc = " << rc << std::endl;
+ x->DisplayError( rc );
+ return;
+ }
+}
+#endif
+
+/*************************************************************************************/
+#ifdef XB_MEMO_SUPPORT
+void xbUtil::DeleteMemoField(){
+
+ xbInt16 rc;
+ char cFldName[40];
+ char cBuf[15];
+ xbUInt32 ulRecNo;
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+
+ if( !dActiveTable->MemoFieldsExist()){
+ std::cout << "Table has no memo fields" << std::endl;
+ return;
+ }
+
+ if( dActiveTable->GetCurRecNo() == 0 ){
+ std::cout << "Enter Record number" << std::endl;
+ std::cin.getline( cBuf, 15 );
+ if( strlen( cBuf ) == 0 ){
+ std::cout << "Record number not entered" << std::endl;
+ return;
+ }
+ //ulRecNo = atol( cBuf );
+ ulRecNo = strtoul( cBuf, NULL, 0 );
+ if(( rc = dActiveTable->GetRecord( ulRecNo )) != XB_NO_ERROR ){
+ x->DisplayError( rc );
+ return;
+ }
+ }
+ std::cout << "Enter Memo Field Name " << std::endl;
+ std::cin.getline( cFldName, 40 );
+ if(( rc = dActiveTable->UpdateMemoField( cFldName, "" )) != XB_NO_ERROR ){
+ std::cout << "rc = " << rc << std::endl;
+ x->DisplayError( rc );
+ return;
+ }
+ if(( rc = dActiveTable->PutRecord( dActiveTable->GetCurRecNo())) != XB_NO_ERROR ){
+ std::cout << "rc = " << rc << std::endl;
+ x->DisplayError( rc );
+ return;
+ }
+}
+#endif
+/*************************************************************************************/
+void xbUtil::SelectActiveTable(){
+
+ char cBuf[15];
+ xbInt16 iLineNo;
+ if( x->GetOpenTableCount() == 0 ){
+ std::cout << "No open tables" << std::endl;
+ std::cout << "Use menu option =3.4 to open a table" << std::endl;
+ return;
+ }
+
+ x->DisplayTableList();
+ std::cout << std::endl << "Enter line number:" << std::endl;
+ std::cin.getline( cBuf, 15 );
+ if( strlen( cBuf ) == 0 ){
+ std::cout << "Table not selected" << std::endl;
+ return;
+ }
+ iLineNo = atoi( cBuf );
+ dActiveTable = x->GetDbfPtr( iLineNo );
+}
+
+/*************************************************************************************/
+void xbUtil::CommitRecord(){
+
+ xbInt16 rc = XB_NO_ERROR;
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+
+ DisplayActiveTable();
+
+ if(( rc = dActiveTable->Commit()) == XB_NO_ERROR )
+ std::cout << "Success" << std::endl;
+ else
+ x->DisplayError( rc );
+}
+/*************************************************************************************/
+void xbUtil::AbortRecord(){
+
+ xbInt16 rc = XB_NO_ERROR;
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+ DisplayActiveTable();
+
+
+ if(( rc = dActiveTable->Abort()) == XB_NO_ERROR )
+ std::cout << "Success" << std::endl;
+ else
+ x->DisplayError( rc );
+}
+/*************************************************************************************/
+void xbUtil::DumpRecord(){
+
+ char cBuf[15];
+ xbInt16 rc;
+ xbUInt32 ulRecNo;
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+ DisplayActiveTable();
+
+ if( dActiveTable->GetCurRecNo() == 0 ){
+ std::cout << "Enter Record number" << std::endl;
+ std::cin.getline( cBuf, 15 );
+ if( strlen( cBuf ) == 0 ){
+ std::cout << "Record number not entered" << std::endl;
+ return;
+ }
+ //lRecNo = atol( cBuf );
+ ulRecNo = strtoul( cBuf, NULL, 0 );
+ if(( rc = dActiveTable->GetRecord( ulRecNo )) != XB_NO_ERROR ){
+ x->DisplayError( rc );
+ return;
+ }
+ }
+
+ if(( rc = dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2 )) == XB_NO_ERROR )
+ std::cout << "Success" << std::endl;
+ else
+ x->DisplayError( rc );
+}
+/*************************************************************************************/
+void xbUtil::GetFirstRecord(){
+
+ xbInt16 iRc;
+
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+
+ if(( iRc = dActiveTable->GetFirstRecord()) == XB_NO_ERROR )
+ dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2);
+ else
+ x->DisplayError( iRc );
+}
+/*************************************************************************************/
+void xbUtil::GetNextRecord(){
+
+ xbInt16 iRc;
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+ if(( iRc = dActiveTable->GetNextRecord()) == XB_NO_ERROR )
+ dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2);
+ else
+ x->DisplayError( iRc );
+}
+/*************************************************************************************/
+void xbUtil::GetPrevRecord(){
+
+ xbInt16 iRc;
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+ if(( iRc = dActiveTable->GetPrevRecord()) == XB_NO_ERROR )
+ dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2);
+ else
+ x->DisplayError( iRc );
+}
+/*************************************************************************************/
+void xbUtil::GetLastRecord(){
+
+ xbInt16 iRc;
+
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+ if(( iRc = dActiveTable->GetLastRecord()) == XB_NO_ERROR )
+ dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(),2);
+ else
+ x->DisplayError( iRc );
+}
+
+/*************************************************************************************/
+void xbUtil::UndeleteRecord(){
+
+ char cBuf[15];
+ xbInt16 rc;
+ xbUInt32 ulRecNo;
+
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+ DisplayActiveTable();
+ if( dActiveTable->GetCurRecNo() == 0 ){
+ std::cout << "Enter Record number" << std::endl;
+ std::cin.getline( cBuf, 15 );
+ if( strlen( cBuf ) == 0 ){
+ std::cout << "Record number not entered" << std::endl;
+ return;
+ }
+ //lRecNo = atol( cBuf );
+ ulRecNo = strtoul( cBuf, NULL, 0 );
+ if(( rc = dActiveTable->GetRecord( ulRecNo )) != XB_NO_ERROR ){
+ x->DisplayError( rc );
+ return;
+ }
+ }
+ if(( dActiveTable->RecordDeleted()) == xbFalse )
+ std::cout << "Record is not flagged for deletion" << std::endl;
+ else{
+ if(( rc = dActiveTable->UndeleteRecord()) == XB_NO_ERROR )
+ std::cout << "Success" << std::endl;
+ else
+ x->DisplayError( rc );
+ }
+}
+
+/*************************************************************************************/
+void xbUtil::DeleteRecord(){
+
+ char cBuf[15];
+ xbInt16 rc;
+ xbUInt32 ulRecNo;
+
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+ DisplayActiveTable();
+ if( dActiveTable->GetCurRecNo() == 0 ){
+ std::cout << "Enter Record number" << std::endl;
+ std::cin.getline( cBuf, 15 );
+ if( strlen( cBuf ) == 0 ){
+ std::cout << "Record number not entered" << std::endl;
+ return;
+ }
+ //ulRecNo = atol( cBuf );
+
+ ulRecNo = strtoul( cBuf, NULL, 0 );
+ if(( rc = dActiveTable->GetRecord( ulRecNo )) != XB_NO_ERROR ){
+ x->DisplayError( rc );
+ return;
+ }
+ }
+
+ if(( dActiveTable->RecordDeleted()) == xbTrue )
+ std::cout << "Record is already flagged for deletion" << std::endl;
+ else{
+ if(( rc = dActiveTable->DeleteRecord()) == XB_NO_ERROR )
+ std::cout << "Success" << std::endl;
+ else
+ x->DisplayError( rc );
+ }
+}
+
+/*************************************************************************************/
+void xbUtil::PutRecord(){
+
+ char cBuf[15];
+ xbInt16 rc;
+ xbUInt32 ulRecNo;
+
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+ DisplayActiveTable();
+
+ std::cout << "Enter Record number" << std::endl;
+ std::cin.getline( cBuf, 15 );
+ if( strlen( cBuf ) == 0 ){
+ std::cout << "Record number not entered" << std::endl;
+ return;
+ }
+ //lRecNo = atol( cBuf );
+ ulRecNo = strtoul( cBuf, NULL, 0 );
+ if(( rc = dActiveTable->PutRecord( ulRecNo )) == XB_NO_ERROR )
+ std::cout << "Success" << std::endl;
+ else
+ x->DisplayError( rc );
+}
+
+/*************************************************************************************/
+void xbUtil::AppendRecord(){
+
+ xbInt16 rc;
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+ if(( rc = dActiveTable->AppendRecord()) == XB_NO_ERROR )
+ std::cout << "Success" << std::endl;
+ else
+ x->DisplayError( rc );
+}
+
+/*************************************************************************************/
+void xbUtil::BlankRecord(){
+
+ xbInt16 rc;
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+ if(( rc = dActiveTable->BlankRecord()) == XB_NO_ERROR )
+ std::cout << "Success" << std::endl;
+ else
+ x->DisplayError( rc );
+}
+
+/*************************************************************************************/
+void xbUtil::DisplayTableInfo(){
+
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+ dActiveTable->DumpHeader( 1 );
+}
+
+/*************************************************************************************/
+void xbUtil::DeleteTable(){
+
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+
+ dActiveTable->DeleteTable();
+ dActiveTable = NULL;
+ std::cout << "Table deleted.\n";
+
+}
+
+
+/*************************************************************************************/
+void xbUtil::RenameTable(){
+
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+
+ char cBuf[128];
+ std::cout << "Enter new tablefile name (filename.DBF)" << std::endl;
+ std::cin.getline( cBuf, 128 );
+
+ if( cBuf[0] ){
+ dActiveTable->Rename( cBuf );
+ dActiveTable->Close();
+ dActiveTable = NULL;
+ std::cout << "Table closed. Reopen if needed.\n";
+ }
+}
+
+/*************************************************************************************/
+void xbUtil::GetRecord(){
+
+ char cBuf[15];
+ xbInt16 iRc;
+ xbUInt32 ulRecNo;
+
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+
+ DisplayActiveTable();
+
+ std::cout << "Enter Record number" << std::endl;
+ std::cin.getline( cBuf, 15 );
+ if( strlen( cBuf ) == 0 ){
+ std::cout << "Record number not entered" << std::endl;
+ return;
+ }
+ //lRecNo = atol( cBuf );
+ ulRecNo = strtoul( cBuf, NULL, 0 );
+ if(( iRc = dActiveTable->GetRecord( ulRecNo )) == XB_NO_ERROR )
+ dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2);
+ else
+ x->DisplayError( iRc );
+}
+/*************************************************************************************/
+void xbUtil::DisplayActiveTable() const{
+ if( dActiveTable ){
+ std::cout << "Active Table = [" << dActiveTable->GetTblAlias().Str() << "] ";
+ xbUInt32 ulRecCnt = 0;
+ xbInt16 iRc;
+ if(( iRc = dActiveTable->GetRecordCnt( ulRecCnt )) == XB_NO_ERROR ){
+ std::cout << "Total Records = [" << ulRecCnt << "] ";
+ std::cout << "Current Record = [" << dActiveTable->GetCurRecNo() << "] ";
+
+ if( dActiveTable->GetAutoCommit())
+ std::cout << " Auto Commit = [Enabled]";
+ else
+ std::cout << " Auto Commit = [Disabled]";
+
+ std::cout << std::endl;
+ #ifdef XB_INDEX_SUPPORT
+ xbIx *pIx = dActiveTable->GetCurIx();
+ if( pIx ){
+ void *vpTag = dActiveTable->GetCurTag();
+ std::cout << "Active Tag = [" << pIx->GetTagName( vpTag ).Str() << "] Type = [" << dActiveTable->GetCurIxType().Str() <<
+ "] \tFile Name = [" << pIx->GetFileName().Str() << "] Key = [" << pIx->GetKeyExpression( vpTag ).Str() << "]" << std::endl;
+ }
+ #endif // XB_INDEX_SUPPORT
+ std::cout << std::endl;
+ } else {
+ x->DisplayError( iRc );
+ }
+ }
+}
+/*************************************************************************************/
+xbDbf * xbUtil::GetTablePtr( const char * cTitle ){
+
+ xbDbf *d;
+ xbInt16 iOpenTableCnt = x->GetOpenTableCount();
+ char cBuf[15];
+ xbInt16 iLineNo;
+
+ if( iOpenTableCnt == 0 ){
+ std::cout << "No open tables" << std::endl;
+ return NULL;
+ } else if( iOpenTableCnt == 1 ){
+ d = x->GetDbfPtr( 1 );
+ } else {
+ std::cout << "Select file/table " << cTitle << std::endl;
+ x->DisplayTableList();
+ std::cout << std::endl << "Enter line number:" << std::endl;
+ memset( cBuf, 0x00, 15 );
+ std::cin.getline( cBuf, 15 );
+ if( strlen( cBuf ) == 0 ){
+ std::cout << "Table not selected" << std::endl;
+ return NULL;
+ }
+ iLineNo = atoi( cBuf );
+ if( iLineNo < 1 || iLineNo > iOpenTableCnt ){
+ std::cout << "Invalid selection. Valid line numbers are 1 through " << iOpenTableCnt << std::endl;
+ return NULL;
+ }
+ d = x->GetDbfPtr( iLineNo );
+ }
+ return d;
+}
+/*************************************************************************************/
+void xbUtil::UpdateTableAutoCommit(){
+ xbDbf *d;
+ d = GetTablePtr( "" );
+ if( d ){
+ std::cout << "Xbase64 AutoCommit is functionality to determine if table updates should be posted" << std::endl;
+ std::cout << " to the table automatically, even if no xbDbf::PutRecord explicitly executed" << std::endl;
+ std::cout << " If unsure, leave the option turned on at the DBMS level (default)" << std::endl;
+ std::cout << " and don't over ride the setting at the table level" << std::endl << std::endl;
+ std::cout << " -1 ==> Use DBMS setting which is currently [";
+ if( x->GetDefaultAutoCommit() )
+ std::cout << "ON]" << std::endl;
+ else
+ std::cout << "OFF]" << std::endl;
+ std::cout << " 0 ==> Disable Auto Commit for table" << std::endl;
+ std::cout << " 1 ==> Enable Auto Commit for table" << std::endl;
+ std::cout << "Current setting is [" << d->GetAutoCommit() << "]" << std::endl;
+ char cBuf[15];
+ xbInt16 iAuto;
+ std::cout << "Enter new Table Auto Commit: " << std::endl;
+ std::cin.getline( cBuf, 15 );
+ if( strlen( cBuf ) == 0 ) {
+ std::cout << "Not updated" << std::endl;
+ return;
+ }
+ iAuto = atoi( cBuf );
+ if( iAuto < -1 || iAuto > 1 ){
+ std::cout << "Invalid value. Must be one of -1, 0 or 1" << std::endl;
+ return;
+ }
+ d->SetAutoCommit( iAuto );
+ std::cout << "Auto Commit set to [" << d->GetAutoCommit(0) << "]" << std::endl;
+ if( d->GetAutoCommit() )
+ std::cout << "Auto Commit enabled for table" << std::endl;
+ else
+ std::cout << "Auto Commit disabled for table" << std::endl;
+ }
+}
+/*************************************************************************************/
+void xbUtil::CopyDbfStructure(){
+ xbDbf *d;
+ xbInt16 rc;
+ char filename[128];
+ xbFile f( x );
+ xbDbf *dNewTable;
+ d = GetTablePtr( "" );
+
+ if( d ){
+
+ if( d->GetVersion() == 3 ){
+ #ifdef XB_DBF3_SUPPORT
+ dNewTable = new xbDbf3( x );
+ #else
+ std::cout << "Dbase III file support not build into library. See XB_DBF3_SUPPORT" << std::endl;
+ return;
+ #endif
+ } else if( d->GetVersion() == 4 ){
+ #ifdef XB_DBF4_SUPPORT
+ dNewTable = new xbDbf4( x );
+ #else
+ std::cout << "Dbase IV file support not build into library. See XB_DBF4_SUPPORT" << std::endl;
+ return;
+ #endif
+ } else {
+ std::cout << "Unsupported file type file = " << d->GetVersion() << std::endl;
+ return;
+ }
+ std::cout << "Copy Table" << std::endl;
+ std::cout << "Enter new DBF file name (ie; MYFILE.DBF): ";
+ std::cin.getline( filename, 128 );
+ f.SetFileName( filename );
+ if( strlen( filename ) == 0 ){
+ std::cout << "No file name entered" << std::endl;
+ return;
+ }
+ if(( rc = f.FileExists( f.GetFqFileName() )) == xbTrue ){
+ std::cout << "File [" << f.GetFqFileName().Str() << "] already exists " << std::endl;
+ return;
+ }
+ if(( rc = d->CopyDbfStructure( dNewTable, filename, filename, 0, XB_MULTI_USER )) != XB_NO_ERROR ){
+ std::cout << "Error " << rc << " creating new file" << std::endl;
+ x->DisplayError( rc );
+ return;
+ }
+ std::cout << "Table " << f.GetFqFileName().Str() << " created" << std::endl;
+ if(( rc = dNewTable->Close()) != XB_NO_ERROR ){
+ std::cout << "Error " << rc << " closing new file" << std::endl;
+ x->DisplayError( rc );
+ return;
+ }
+ }
+}
+/*************************************************************************************/
+void xbUtil::ZapTable(){
+
+ xbInt16 iRc;
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+ DisplayActiveTable();
+
+ iRc = dActiveTable->Zap();
+ if( iRc == XB_NO_ERROR )
+ std::cout << "Table Zapped (all rows deleted)" << std::endl;
+ else
+ x->DisplayError( iRc );
+}
+/*************************************************************************************/
+void xbUtil::Pack(){
+
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+ DisplayActiveTable();
+ xbInt16 iRc;
+ iRc = dActiveTable->Pack();
+ if( iRc == XB_NO_ERROR )
+ std::cout << "Table Packed" << std::endl;
+ else
+ x->DisplayError( iRc );
+}
+/*************************************************************************************/
+void xbUtil::DisplayTableStats(){
+
+ xbDbf *d;
+ char cBuf[15];
+ xbInt16 iOptionNo;
+ d = GetTablePtr( "" );
+ if( d ){
+ std::cout << "Enter option" << std::endl;
+ std::cout << "1 - Header data only" << std::endl;
+ std::cout << "2 - Field data only" << std::endl;
+ std::cout << "3 - Header and Field data" << std::endl;
+ std::cout << "4 - Header, Field and Memo Header if applicable" << std::endl;
+ std::cout << "5 - DBMS Settings (not stored in the file)" << std::endl << std::endl;
+ std::cin.getline( cBuf, 15 );
+ if( strlen( cBuf ) == 0 ){
+ std::cout << "Option not entered" << std::endl;
+ return;
+ }
+ iOptionNo = atoi( cBuf );
+ if( iOptionNo < 1 || iOptionNo > 5 ){
+ std::cout << "Invalid option [" << cBuf << "] entered. Defaulting to 1" << std::endl;
+ iOptionNo = 1;
+ }
+ if( iOptionNo < 5 ) {
+ // d->ReadHeader( xbTrue, 0 ); moved to DumpHeader routine
+ d->DumpHeader( iOptionNo );
+ } else {
+ // DBMS settings
+ if( d->GetAutoCommit( 0 ) == -1 ){
+ std::cout << "Table Auto Commit = [Use DBMS Setting]" << std::endl;
+ if( x->GetDefaultAutoCommit() )
+ std::cout << "DBMS Auto Commit = [ON]" << std::endl;
+ else
+ std::cout << "DBMS Auto Commit = [OFF]" << std::endl;
+ }
+ else if( d->GetAutoCommit( 0 ) == 0 )
+ std::cout << "Table Auto Commit = [OFF]" << std::endl;
+ else
+ std::cout << "Table Auto Commit = [ON]" << std::endl;
+ }
+ }
+}
+/*************************************************************************************/
+void xbUtil::CloseAllTables(){
+
+ xbInt16 sOpenTableCnt = x->GetOpenTableCount();
+ xbInt16 rc;
+ if( sOpenTableCnt == 0 ){
+ std::cout << "No open tables" << std::endl;
+ return;
+ }
+ rc = x->CloseAllTables();
+ if( rc == XB_NO_ERROR )
+ std::cout << "All open tables closed" << std::endl;
+ else
+ x->DisplayError( rc );
+ dActiveTable = NULL;
+}
+
+/*************************************************************************************/
+void xbUtil::Close(){
+ xbDbf *d;
+// xbInt16 sOpenTableCnt = x->GetOpenTableCount();
+
+ d = GetTablePtr( "to close" );
+ if( d ){
+ d->Close();
+ std::cout << "Table closed" << std::endl;
+ if( d == dActiveTable )
+ dActiveTable = NULL;
+ }
+ else
+ printf( "Can't identify table\n");
+}
+/*************************************************************************************/
+void xbUtil::Open(){
+ xbInt16 rc;
+ xbFile f( x );
+ xbDbf *dTable;
+ char filename[128];
+ unsigned char cFileTypeByte;
+
+ std::cout << "Open Table" << std::endl;
+ std::cout << "Enter DBF file name (.DBF): ";
+ std::cin.getline( filename, 128 );
+ f.SetFileName( filename );
+
+ if( strlen( filename ) == 0 ){
+ std::cout << "No file name entered" << std::endl;
+ return;
+ }
+ if(( rc = f.FileExists( f.GetFqFileName() )) != xbTrue ){
+ std::cout << "File [" << f.GetFqFileName().Str() << "] does not exist " << std::endl;
+ return;
+ }
+ if(( rc = f.GetXbaseFileTypeByte( f.GetFqFileName(), cFileTypeByte )) != XB_NO_ERROR ){
+ std::cout << "Could not open file or determine file type rc = " << rc << " file = " << filename << std::endl;
+ x->DisplayError( rc );
+ return;
+ }
+ std:: cout << "File Type Byte ";
+ x->BitDump( cFileTypeByte );
+ std::cout << "\n";
+ std::cout << "Table Type = [" << f.DetermineXbaseTableVersion( cFileTypeByte ) << "]\n";
+ std::cout << "Memo Type = [" << f.DetermineXbaseMemoVersion( cFileTypeByte ) << "]\n";
+
+ if( f.DetermineXbaseTableVersion( cFileTypeByte ) == 4 ){
+ #ifdef XB_DBF4_SUPPORT
+ dTable = new xbDbf4( x );
+ #else
+ std::cout << "Dbase IV file support not build into library. See XB_DBF4_SUPPORT" << std::endl;
+ return;
+ #endif
+
+ } else if( f.DetermineXbaseTableVersion( cFileTypeByte ) == 3 ){
+ #ifdef XB_DBF3_SUPPORT
+ dTable = new xbDbf3( x );
+ #else
+ std::cout << "Dbase III file support not build into library. See XB_DBF3_SUPPORT" << std::endl;
+ return;
+ #endif
+ } else {
+ std::cout << "Unsupported file type file = " << filename << " type = ";
+ x->BitDump( cFileTypeByte );
+ std::cout << std::endl;
+ return;
+ }
+
+ if(( rc = dTable->Open( filename )) != 0 ){
+ std::cout << "Could not open file rc = " << rc << " file = " << filename << std::endl;
+ x->DisplayError( rc );
+ return;
+ }
+
+ dActiveTable = dTable;
+ dActiveTable->GetFirstRecord();
+
+ if( dActiveTable )
+ std::cout << dActiveTable->GetTblAlias().Str() << " opened" << std::endl;
+ else
+ std::cout << "dActiveTable not set" << std::endl;
+}
+/*************************************************************************************/
+#ifdef XB_LOCKING_SUPPORT
+void xbUtil::UpdateDefaultLockRetries(){
+ char cBuf[15];
+ std::cout << std::endl << "Enter new Default Lock Retry Count: " << std::endl;
+ std::cin.getline( cBuf, 15 );
+ if( strlen( cBuf ) == 0 ){
+ std::cout << "Default Lock Retry Count not updated" << std::endl;
+ return;
+ } else {
+ x->SetDefaultLockRetries( atoi( cBuf ));
+ std::cout << "Default Lock Retry Count updated to ["
+ << x->GetDefaultLockRetries() << "]" << std::endl;
+ }
+}
+
+void xbUtil::UpdateDefaultLockWait(){
+ char cBuf[15];
+ std::cout << std::endl << "Enter new Default Lock Wait Time (in millisecs 1000=1 second): " << std::endl;
+ std::cin.getline( cBuf, 15 );
+ if( strlen( cBuf ) == 0 ){
+ std::cout << "Default Lock Wait Time not updated" << std::endl;
+ return;
+ } else {
+ x->SetDefaultLockWait( atoi( cBuf ));
+ std::cout << "Default Lock Wait Time updated to ["
+ << x->GetDefaultLockWait() << "]" << std::endl;
+ }
+}
+
+void xbUtil::UpdateDefaultLockFlavor(){
+ char cBuf[15];
+ std::cout << std::endl;
+ std::cout << "Enter new Default Lock Flavor: " << std::endl;
+ std::cout << "1 = DBase" << std::endl;
+ std::cout << "2 = Clipper (not implemented yet)" << std::endl;
+ std::cout << "3 = Fox (not implemented yet)" << std::endl;
+ std::cout << "9 = XBase64 (not implemented yet)" << std::endl;
+ std::cin.getline( cBuf, 15 );
+ if( strlen( cBuf ) == 0 ){
+ std::cout << "Default Lock Flavor not updated" << std::endl;
+ return;
+ } else {
+ x->SetDefaultLockFlavor( atoi( cBuf ));
+ std::cout << "Default Lock Flavor updated to ["
+ << x->GetDefaultLockFlavor() << "]" << std::endl;
+ }
+}
+void xbUtil::ToggleDefaultAutoLock(){
+ if( x->GetDefaultAutoLock()){
+ x->DisableDefaultAutoLock();
+ x->WriteLogMessage( "xb_dbfutil - Default Auto Lock disabled" );
+ std::cout << "Default Auto Lock disabled" << std::endl;
+ } else {
+ x->EnableDefaultAutoLock();
+ x->WriteLogMessage( "xb_dbfutil - Default Auto Lock enabled" );
+ std::cout << "Default Auto Lock enabled" << std::endl;
+ }
+}
+
+void xbUtil::ToggleMultiUserMode(){
+ if( x->GetMultiUser()){
+ x->SetMultiUser( xbFalse );
+ x->WriteLogMessage( "xb_dbfutil - Multi user mode disabled" );
+ std::cout << "Multi user mode disabled" << std::endl;
+ } else {
+ x->SetMultiUser( xbTrue );
+ x->WriteLogMessage( "xb_dbfutil - Multu user mode enabled" );
+ std::cout << "Multi user mode enabled" << std::endl;
+ }
+}
+#endif
+/*************************************************************************************/
+void xbUtil::ListFilesInDataDirectory(){
+ std::cout << "List files for [" << x->GetDataDirectory().Str() << "]" << std::endl << std::endl;
+ xbString s1;
+ xbInt16 iCnt = 0;
+
+#ifdef WIN32
+
+ WIN32_FIND_DATA fData;
+ HANDLE hFile;
+
+ xbString sSearchPath = x->GetDataDirectory();
+ xbUInt32 l = sSearchPath.Len();
+ char cPathSeperator = sSearchPath.GetPathSeparator();
+ char cLastChar = sSearchPath.GetCharacter( l );
+
+ if( cLastChar == cPathSeperator )
+ sSearchPath += "*.*";
+ else if( cPathSeperator ){
+ sSearchPath += cPathSeperator;
+ sSearchPath += "*.*";
+ }
+ else
+ sSearchPath += "\\*.*";
+
+ hFile = FindFirstFile( sSearchPath.Str(), &fData );
+ if( hFile == INVALID_HANDLE_VALUE ){
+ std::cout << "Could not open directory" << std::endl;
+ return;
+ }
+
+ do{
+ s1 = fData.cFileName;
+ if( s1 != "." && s1 != ".." ){
+ std::cout << fData.cFileName << std::endl;
+ iCnt++;
+ }
+ } while( FindNextFile( hFile, &fData ));
+ std::cout << std::endl << iCnt << " entries" << std::endl;
+#else
+ DIR *dir;
+ struct dirent *ent;
+
+ if(( dir = opendir( x->GetDataDirectory() )) != NULL ){
+ while(( ent = readdir( dir )) != NULL ){
+ s1 = ent->d_name;
+ if( s1 != "." && s1 != ".." ){
+ std::cout << ent->d_name << std::endl;
+ iCnt++;
+ }
+ }
+ std::cout << std::endl << iCnt << " entries" << std::endl;
+ closedir( dir );
+ }
+ else
+ std::cout << "Could not open directory" << std::endl;
+#endif
+}
+/*************************************************************************************/
+void xbUtil::UpdateLogDirectory(){
+
+ char cNewDir[256];
+ cNewDir[0] = 0x00;
+ std::cout << std::endl << "Update Log Directory" << std::endl;
+ std::cout << "Current Log File Directory = [" << x->GetLogDirectory().Str() << "]" << std::endl;
+ std::cout << "Enter '1' to erase the Log File Directory" << std::endl;
+ std::cout << "Enter '2' to change Log File Directory to [" << x->GetLogDirectory().Str() << "]" << std::endl;
+ std::cout << "Enter new log directory. Enter for no updates." << std::endl;
+ std::cin.getline( cNewDir, 256 );
+ if( strlen( cNewDir ) > 0 ){
+ if( cNewDir[0] == '1' )
+ x->SetLogDirectory( "" );
+ else if( cNewDir[0] == '2' )
+ x->SetLogDirectory( x->GetLogDirectory());
+ else
+ x->SetLogDirectory( cNewDir );
+
+ std::cout << "Log File Directory is [" << x->GetLogDirectory().Str() << "]" << std::endl;
+ }
+ else
+ std::cout << "Log Directory not updated" << std::endl;
+}
+/*************************************************************************************/
+void xbUtil::UpdateLogFileName(){
+ char cNewFile[256];
+ cNewFile[0] = 0x00;
+
+ std::cout << std::endl << "Update Log File Name" << std::endl;
+ std::cout << "Current Log File Name = [" << x->GetLogFileName().Str() << "]" << std::endl;
+ std::cout << "Enter '1' to change change Log File Name to default [" << x->GetLogFileName().Str() << "]" << std::endl;
+ std::cout << "Enter new Log File Name" << std::endl;
+ std::cin.getline( cNewFile, 256 );
+ if( strlen( cNewFile ) > 0 ){
+ if( cNewFile[0] == '1' )
+ x->SetLogFileName( x->GetLogFileName());
+ else
+ x->SetLogFileName( cNewFile );
+
+ std::cout << "Log File Name is [" << x->GetLogFileName().Str() << "]" << std::endl;
+ } else
+ std::cout << "Log File Name not updated" << std::endl;
+}
+/*************************************************************************************/
+void xbUtil::WriteLogMessage(){
+ if( x->GetLogStatus()) {
+ char cMsg[256];
+ std::cout << "Enter a message to write to the log file (256 byte max)" << std::endl;
+ std::cin.getline( cMsg, 256 );
+ x->WriteLogMessage( cMsg );
+ } else
+ std::cout << "Logging disabled" << std::endl;
+}
+/*************************************************************************************/
+void xbUtil::ToggleLoggingStatus(){
+ if( x->GetLogStatus()){
+ x->DisableMsgLogging();
+ x->WriteLogMessage( "xb_dbfutil - Logging disabled" );
+ std::cout << "Logging disabled" << std::endl;
+ } else {
+ x->EnableMsgLogging();
+ x->WriteLogMessage( "xb_dbfutil - Logging enabled" );
+ std::cout << "Logging enabled" << std::endl;
+ }
+}
+/*************************************************************************************/
+void xbUtil::ToggleDefaultAutoCommit(){
+ if( x->GetDefaultAutoCommit()){
+ x->SetDefaultAutoCommit( xbFalse );
+ x->WriteLogMessage( "xb_dbfutil - Default Auto Commit disabled" );
+ std::cout << "Default Auto Commit disabled" << std::endl;
+ } else {
+ x->SetDefaultAutoCommit( xbTrue );
+ x->WriteLogMessage( "xb_dbfutil - Default Auto Commit enabled" );
+ std::cout << "Default Auto Commit enabled" << std::endl;
+ }
+}
+/*************************************************************************************/
+void xbUtil::UpdateDataDirectory(){
+ char cNewDir[256];
+ cNewDir[0] = 0x00;
+ std::cout << std::endl << "Update Default Data Directory" << std::endl;
+ std::cout << "Current Default Data Directory = [" << x->GetDataDirectory().Str() << "]" << std::endl;
+ std::cout << "Enter '1' to erase the Default Data Directory" << std::endl;
+ std::cout << "Enter '2' to change Default Data Directory to [" << PROJECT_DATA_DIR << "]" << std::endl;
+ std::cout << "Enter new directory" << std::endl;
+ std::cin.getline( cNewDir, 256 );
+ if( strlen( cNewDir ) > 0 ){
+ if( cNewDir[0] == '1' )
+ x->SetDataDirectory( "" );
+ else if( cNewDir[0] == '2' )
+ x->SetDataDirectory( PROJECT_DATA_DIR );
+ else
+ x->SetDataDirectory( cNewDir );
+ std::cout << "Default Data Directory is [" << x->GetDataDirectory().Str() << "]" << std::endl;
+ }
+ else
+ std::cout << "Default Data Directory not updated" << std::endl;
+}
+/*************************************************************************************/
+void xbUtil::ListSystemSettings(){
+ std::cout << std::endl << "List System Settings" << std::endl;
+ std::cout << "Default Data Directory = [" << x->GetDataDirectory().Str() << "]" << std::endl;
+// std::cout << "Default File Version = [" << x->GetDefaultFileVersion() << "]" << std::endl;
+ #ifdef XB_LOCKING_SUPPORT
+ std::cout << "Default Auto Locking = [";
+ if( x->GetDefaultAutoLock())
+ std::cout << "ON]" << std::endl;
+ else
+ std::cout << "OFF]" << std::endl;
+
+ std::cout << "Default Lock Retries = [" << x->GetDefaultLockRetries() << "]" << std::endl;
+ std::cout << "Default Lock Wait Time = [" << x->GetDefaultLockWait() << "] (millisecs)" << std::endl;
+
+ std::cout << "Default Lock Flavor = [";
+ switch (x->GetDefaultLockFlavor()){
+ case 1:
+ std::cout << "Dbase]" << std::endl;
+ break;
+ case 2:
+ std::cout << "Clipper]" << std::endl;
+ break;
+ case 3:
+ std::cout << "Fox]" << std::endl;
+ break;
+ case 9:
+ std::cout << "Xbase64]" << std::endl;
+ break;
+ default:
+ std::cout << "Unknown]" << std::endl;
+ break;
+ }
+ #endif
+ std::cout << "Log Directory = [" << x->GetLogDirectory().Str() << "]" << std::endl;
+ std::cout << "Logfile Name = [" << x->GetLogFileName().Str() << "]" << std::endl;
+ std::cout << "Default Auto Commit = [";
+ if( x->GetDefaultAutoCommit())
+ std::cout << "ON]" << std::endl;
+ else
+ std::cout << "OFF]" << std::endl;
+
+ std::cout << "Logging Status = [";
+ if( x->GetLogStatus())
+ std::cout << "ON]" << std::endl;
+ else
+ std::cout << "OFF]" << std::endl;
+ std::cout << "Endian Type = [";
+ if( x->GetEndianType() == 'L' )
+ std::cout << "Little Endian]" << std::endl;
+ else
+ std::cout << "Big Endian]" << std::endl;
+
+ if( x->GetMultiUser())
+ std::cout << "Multi User Mode = [ON]";
+ else
+ std::cout << "Multi User Mode = [OFF]";
+}
+/*************************************************************************************/
+/* This method handles all the complex menu option commands */
+void xbUtil::ProcessOption( const xbString &sOption ){
+
+ if( sOption[1] == '=' ){
+ if( sOption == "=0" )
+ MainMenu();
+ else if( sOption == "=0.99" )
+ // exit right now, now cleanup or termination of anything
+ exit(0);
+ else if( sOption == "=1" )
+ Help();
+ else if( sOption == "=2" )
+ SystemMenu();
+ else if( sOption == "=2.1" )
+ ListSystemSettings();
+ else if( sOption == "=2.2" )
+ UpdateDataDirectory();
+ else if( sOption == "=2.3" )
+ ToggleDefaultAutoCommit();
+ else if( sOption == "=2.4" )
+ UpdateLogDirectory();
+ else if( sOption == "=2.5" )
+ UpdateLogFileName();
+ else if( sOption == "=2.6" )
+ ToggleLoggingStatus();
+ else if( sOption == "=2.7" )
+ WriteLogMessage();
+ #ifdef XB_LOCKING_SUPPORT
+ else if( sOption == "=2.8" )
+ UpdateDefaultLockRetries();
+ else if( sOption == "=2.9" )
+ ToggleDefaultAutoLock();
+ else if( sOption == "=2.10" )
+ UpdateDefaultLockFlavor();
+ else if( sOption == "=2.11" )
+ UpdateDefaultLockWait();
+ else if( sOption == "=2.12" )
+ ToggleMultiUserMode();
+ #endif
+ else if( sOption == "=3" )
+ FileMenu();
+ else if( sOption == "=3.1" )
+ ListFilesInDataDirectory();
+ else if( sOption == "=3.2" )
+ UpdateDataDirectory();
+ else if( sOption == "=3.3" )
+ x->DisplayTableList();
+ else if( sOption == "=3.4" )
+ Open();
+ else if( sOption == "=3.5" )
+ Close();
+ else if( sOption == "=3.6" )
+ CloseAllTables();
+ else if( sOption == "=3.7" )
+ SelectActiveTable();
+ else if( sOption == "=3.8" )
+ DisplayTableStats();
+ else if( sOption == "=3.10" )
+ Pack();
+ else if( sOption == "=3.11" )
+ ZapTable();
+ else if( sOption == "=3.12" )
+ CopyDbfStructure();
+ else if( sOption == "=3.13" )
+ UpdateTableAutoCommit();
+ else if( sOption == "=3.14" )
+ DisplayTableInfo();
+ else if( sOption == "=3.15" )
+ RenameTable();
+ else if( sOption == "=3.16" )
+ DeleteTable();
+ else if( sOption == "=4" )
+ RecordMenu();
+ else if( sOption == "=4.1" )
+ SelectActiveTable();
+ else if( sOption == "=4.2" )
+ GetRecord();
+ else if( sOption == "=4.3" )
+ BlankRecord();
+ else if( sOption == "=4.4" )
+ AppendRecord();
+ else if( sOption == "=4.5" )
+ PutRecord();
+ else if( sOption == "=4.6" )
+ DeleteRecord();
+ else if( sOption == "=4.7" )
+ UndeleteRecord();
+ else if( sOption == "=4.8" )
+ GetFirstRecord();
+ else if( sOption == "=4.9" )
+ GetNextRecord();
+ else if( sOption == "=4.10" )
+ GetPrevRecord();
+ else if( sOption == "=4.11" )
+ GetLastRecord();
+ else if( sOption == "=4.12" )
+ DumpRecord();
+ else if( sOption == "=4.13" )
+ AbortRecord();
+ else if( sOption == "=4.14" )
+ CommitRecord();
+ #ifdef XB_FILTER_SUPPORT
+ else if( sOption == "=4.20" )
+ SetFilter();
+ else if( sOption == "=4.21" )
+ GetFirstFilterRec();
+ else if( sOption == "=4.22" )
+ GetNextFilterRec();
+ else if( sOption == "=4.23" )
+ GetPrevFilterRec();
+ else if( sOption == "=4.24" )
+ GetLastFilterRec();
+ #endif // XB_FILTER_SUPPORT
+ else if( sOption == "=5" )
+ FieldMenu();
+ else if( sOption == "=5.1" )
+ SelectActiveTable();
+ else if( sOption == "=5.2" )
+ ListFieldInfo();
+ else if( sOption == "=5.3" )
+ DumpRecord();
+ else if( sOption == "=5.4" )
+ UpdateFieldData();
+ #ifdef XB_MEMO_SUPPORT
+ else if( sOption == "=5.5" )
+ ShowMemoFieldData();
+ else if( sOption == "=5.6" )
+ UpdateMemoFieldData();
+ else if( sOption == "=5.7" )
+ DeleteMemoField();
+ #endif
+
+ #ifdef XB_LOCKING_SUPPORT
+ else if( sOption == "=6" )
+ LockingMenu();
+ else if( sOption == "=6.1" )
+ DisplayFileLockSettings();
+ else if( sOption == "=6.2" )
+ UpdateFileLockRetryCount();
+ else if( sOption == "=6.3" )
+ UpdateFileLockFlavor();
+ else if( sOption == "=6.4" )
+ UpdateFileAutoLock();
+ else if( sOption == "=6.5" )
+ LockDbf();
+ else if( sOption == "=6.6" )
+ UnlockDbf();
+ else if( sOption == "=6.7" )
+ LockRecord();
+ else if( sOption == "=6.8" )
+ UnlockRecord();
+ else if( sOption == "=6.9" )
+ LockAppend();
+ else if( sOption == "=6.10" )
+ UnlockAppend();
+ else if( sOption == "=6.11" )
+ LockHeader();
+ else if( sOption == "=6.12" )
+ UnlockHeader();
+ #ifdef XB_MEMO_SUPPORT
+ else if( sOption == "=6.13" )
+ LockMemo();
+ else if( sOption == "=6.14" )
+ UnlockMemo();
+ #endif
+
+ #ifdef XB_DEBUG_SUPPORT
+ else if( sOption == "=6.20" )
+ xbFileLock();
+ else if( sOption == "=6.21" )
+ xbFileUnlock();
+ #endif // XB_DEBUG_SUPPORT
+ #endif // XB_LOCKING_SUPPORT
+
+ #ifdef XB_EXPRESSION_SUPPORT
+ else if( sOption == "=7" )
+ ExpressionMenu();
+ else if( sOption == "=7.1" )
+ ParseExpression( 0 );
+ else if( sOption == "=7.2" )
+ ProcessParsedExpression( 0 );
+ else if( sOption == "=7.3" )
+ ParseAndProcessExpression();
+
+ #ifdef XB_DEBUG_SUPPORT
+ else if (sOption == "=7.4" )
+ DumpExpressionTree();
+ #endif // XB_DEBUG_SUPPORT
+ else if (sOption == "=7.10" )
+ Date8ToJul();
+ else if (sOption == "=7.11" )
+ JulToDate8();
+ else if (sOption == "=7.12" )
+ IsLeapYear();
+ #endif // XB_EXPRESSION_SUPPORT
+
+ #ifdef XB_INDEX_SUPPORT
+ else if( sOption == "=8" )
+ IndexMenu();
+ else if( sOption == "=8.1" )
+ SelectActiveTable();
+ else if( sOption == "=8.2" )
+ DisplayOpenIndexFiles();
+ else if( sOption == "=8.3" )
+ DisplaySupportedIndexTypes();
+ else if( sOption == "=8.4" )
+ SelectTag();
+ else if( sOption == "=8.5" )
+ OpenIndex();
+ else if( sOption == "=8.6" )
+ CloseIndexFile();
+ else if( sOption == "=8.7" )
+ CreateIndexTag();
+ else if( sOption == "=8.8" )
+ GetFirstKey();
+ else if( sOption == "=8.9" )
+ GetPrevKey();
+ else if( sOption == "=8.10" )
+ GetNextKey();
+ else if( sOption == "=8.11" )
+ GetLastKey();
+ else if( sOption == "=8.12" )
+ FindKey();
+
+ else if( sOption == "=8.13" )
+ CheckIntegrity();
+ else if( sOption == "=8.14" )
+ Reindex();
+ else if( sOption == "=8.15" )
+ DeleteTag();
+ else if( sOption == "=8.16" )
+ AssociateNonProdIx();
+
+ #ifdef XB_DEBUG_SUPPORT
+ else if( sOption == "=8.20" )
+ DumpIxHeader();
+ else if( sOption == "=8.21" )
+ DumpIxNode();
+ else if( sOption == "=8.22" )
+ DumpIxNodeChain();
+ else if( sOption == "=8.23" )
+ DumpRecsByIx(0);
+ else if( sOption == "=8.24" )
+ DumpRecsByIx(1);
+ else if( sOption == "=8.25" )
+ DumpFreeBlocks();
+ #endif // XB_DEBUG_SUPPORT
+ #endif // XB_INDEX_SUPPORT
+
+ #ifdef XB_SQL_SUPPORT
+ else if( sOption == "=10" )
+ SqlMenu();
+ else if( sOption == "=10.1" )
+ ExecSqlNonQuery();
+ else if( sOption == "=10.2" )
+ ExecSqlQuery();
+ #endif // XB_SQL_SUPPORT
+
+ #ifdef XB_NDXINF_SUPPORT
+ else if( sOption == "=11" )
+ InfFileMenu();
+ else if( sOption == "=11.1" )
+ ListInfFileData();
+ else if( sOption == "=11.2" )
+ AddInfFileData();
+ else if( sOption == "=11.3" )
+ DeleteInfFileData();
+ else if( sOption == "=11.10" )
+ InfFileHelp();
+ #endif // XB_NDXINF_SUPPORT
+
+ #ifdef XB_DEBUG_SUPPORT
+ else if( sOption == "=20" )
+ DebugMenu();
+ else if( sOption == "=20.1" )
+ SelectActiveTable();
+/*
+ #ifdef XB_MEMO_SUPPORT
+ else if( sOption == "=10.2" )
+ DumpDbtHeader();
+ else if( sOption == "=10.3" )
+ DumpMemoFreeChain();
+ #endif
+*/
+
+ #endif
+ else
+ return;
+ }
+}
+
+/*************************************************************************************/
+xbInt32 xbUtil::GetLong(){
+ char cLine[256];
+ xbString sLine;
+ memset( cLine, 0x00, 256 );
+ std::cin.getline( cLine, 256 );
+ sLine = cLine;
+ sLine.Trim();
+ return atol( cLine );
+}
+/*************************************************************************************/
+xbInt16 xbUtil::GetOption(){
+ char cLine[256];
+ xbString sLine;
+ memset( cLine, 0x00, 256 );
+ std::cin.getline( cLine, 256 );
+ sLine = cLine;
+ sLine.Trim();
+
+ if( sLine[1] == '=' || sLine.Pos(".") != 0 ){
+ ProcessOption( sLine );
+ return 0;
+ }
+ else
+ return atoi( cLine );
+}
+/************************************************************************/
+#ifdef XB_INDEX_SUPPORT
+void xbUtil::IndexMenu()
+{
+ int option = 0;
+
+ while( option != 99 ) {
+
+ std::cout << std::endl << std::endl << " 8 - Index Menu" << std::endl;
+ std::cout << "---------------------" << std::endl;
+ DisplayActiveTable();
+
+ std::cout << " 1 - Select Active Table" << std::endl;
+ std::cout << " 2 - Display Open Index Files" << std::endl;
+ std::cout << " 3 - Display Supported Index Types" << std::endl;
+ std::cout << " 4 - Select Active Tag" << std::endl;
+ std::cout << " 5 - Open Index File" << std::endl;
+ std::cout << " 6 - Close Index File" << std::endl;
+ std::cout << " 7 - Create Index Tag" << std::endl;
+ std::cout << " 8 - Get First Key" << std::endl;
+ std::cout << " 9 - Get Next Key" << std::endl;
+ std::cout << " 10 - Get Prev Key" << std::endl;
+ std::cout << " 11 - Get Last Key" << std::endl;
+ std::cout << " 12 - Find Key" << std::endl;
+ std::cout << " 13 - Check Index Integrity" << std::endl;
+ std::cout << " 14 - Reindex" << std::endl;
+ std::cout << " 15 - Delete Tag" << std::endl;
+ std::cout << " 16 - Associate NDX file" << std::endl;
+
+
+ #ifdef XB_DEBUG_SUPPORT
+ std::cout << std::endl;
+ std::cout << " 20 - Dump Header" << std::endl;
+ std::cout << " 21 - Dump Node(s)" << std::endl;
+ std::cout << " 22 - Dump Node Chain" << std::endl;
+ std::cout << " 23 - Dump Recs by Tag Fwd" << std::endl;
+ std::cout << " 24 - Dump Recs by Tag Bwd" << std::endl;
+ std::cout << " 25 - Dump Free Blocks / MDX ulBlock2" << std::endl;
+ #endif // XB_DEBUG_SUPPORT
+
+ std::cout << std::endl;
+ std::cout << std::endl;
+
+ std::cout << " 99 - Exit Menu" << std::endl;
+ option = GetOption();
+
+ switch( option ){
+ case 0: break;
+ case 1: SelectActiveTable(); break;
+ case 2: DisplayOpenIndexFiles(); break;
+ case 3: DisplaySupportedIndexTypes(); break;
+ case 4: SelectTag(); break;
+ case 5: OpenIndex(); break;
+ case 6: CloseIndexFile(); break;
+ case 7: CreateIndexTag(); break;
+
+ case 8: GetFirstKey(); break;
+ case 9: GetNextKey(); break;
+ case 10: GetPrevKey(); break;
+ case 11: GetLastKey(); break;
+
+ case 12: FindKey(); break;
+ case 13: CheckIntegrity(); break;
+ case 14: Reindex(); break;
+ case 15: DeleteTag(); break;
+ case 16: AssociateNonProdIx(); break;
+
+ #ifdef XB_DEBUG_SUPPORT
+ case 20: DumpIxHeader(); break;
+ case 21: DumpIxNode(); break;
+ case 22: DumpIxNodeChain(); break;
+ case 23: DumpRecsByIx(0); break;
+ case 24: DumpRecsByIx(1); break;
+ case 25: DumpFreeBlocks(); break;
+ #endif
+
+ case 99: break;
+ default: std::cout << "Invalid option" << std::endl; break;
+ }
+ }
+}
+#endif
+/************************************************************************/
+#ifdef XB_EXPRESSION_SUPPORT
+void xbUtil::ExpressionMenu()
+{
+ int option = 0;
+
+ while( option != 99 ) {
+ std::cout << std::endl << std::endl << " 7 - Expression Menu" << std::endl;
+ std::cout << " --------------" << std::endl;
+ DisplayActiveTable();
+ std::cout << " 1 - Parse Expression" << std::endl;
+ std::cout << " 2 - Process Parsed Expression" << std::endl;
+ std::cout << " 3 - Parse and Process Expression" << std::endl;
+ #ifdef XB_DEBUG_SUPPORT
+ std::cout << " 4 - Dump Expression Internals" << std::endl;
+ #endif
+ std::cout << " 10 - Date8 To Julian Date" << std::endl;
+ std::cout << " 11 - Julian Date to Date8" << std::endl;
+ std::cout << " 12 - Check Leap Year" << std::endl;
+ std::cout << " 99 - Exit Menu" << std::endl;
+ option = GetOption();
+ switch( option ){
+ case 0: break;
+ case 1: ParseExpression( 0 ); break;
+ case 2: ProcessParsedExpression( 0 ); break;
+ case 3: ParseAndProcessExpression(); break;
+ #ifdef XB_DEBUG_SUPPORT
+ case 4: DumpExpressionTree(); break;
+ #endif
+ case 10: Date8ToJul(); break;
+ case 11: JulToDate8(); break;
+ case 12: IsLeapYear(); break;
+ case 99: break;
+ default: std::cout << "Invalid option" << std::endl; break;
+ }
+ }
+}
+#endif
+/************************************************************************/
+#ifdef XB_LOCKING_SUPPORT
+void xbUtil::LockingMenu()
+{
+ int option = 0;
+
+ while( option != 99 ) {
+ std::cout << std::endl << std::endl << " 6 - Locking Menu" << std::endl;
+ std::cout << "-------------" << std::endl;
+ DisplayActiveTable();
+
+ std::cout << " 1 - Display File Specific Settings" << std::endl;
+ std::cout << " 2 - Update File Retry Count" << std::endl;
+ std::cout << " 3 - Update Locking Flavor" << std::endl;
+ std::cout << " 4 - Update Auto Lock" << std::endl;
+ std::cout << " 5 - Lock table (dbf file)" << std::endl;
+ std::cout << " 6 - Unlock table (dbf file)" << std::endl;
+ std::cout << " 7 - Lock Record" << std::endl;
+ std::cout << " 8 - Unlock Record" << std::endl;
+ std::cout << " 9 - Lock Append" << std::endl;
+ std::cout << " 10 - Unlock Append" << std::endl;
+ std::cout << " 11 - Lock Header" << std::endl;
+ std::cout << " 12 - Unlock Header" << std::endl;
+
+
+ #ifdef XB_MEMO_SUPPORT
+ std::cout << " 13 - Lock Memo File" << std::endl;
+ std::cout << " 14 - Unlock Memo File" << std::endl;
+ #endif // XB_MEMO_SUPPORT
+
+ #ifdef XB_INDEX_SUPPORT
+ std::cout << " 15 - Lock Index File(s)" << std::endl;
+ std::cout << " 16 - Unlock Index File(s)" << std::endl;
+ #endif // XB_INDEX_SUPPORT
+
+ #ifdef XB_DEBUG_SUPPORT
+ std::cout << " 20 - Native xbFile - Lock Bytes" << std::endl;
+ std::cout << " 21 - Native xbFile - Unlock Bytes" << std::endl;
+ #endif // XB_DEBUG_SUPPORT
+
+ std::cout << " 99 - Exit Menu" << std::endl;
+ option = GetOption();
+
+ switch( option ) {
+ case 0: break;
+ case 1: DisplayFileLockSettings(); break;
+ case 2: UpdateFileLockRetryCount(); break;
+ case 3: UpdateFileLockFlavor(); break;
+ case 4: UpdateFileAutoLock(); break;
+ case 5: LockDbf(); break;
+ case 6: UnlockDbf(); break;
+ case 7: LockRecord(); break;
+ case 8: UnlockRecord(); break;
+ case 9: LockAppend(); break;
+ case 10: UnlockAppend(); break;
+ case 11: LockHeader(); break;
+ case 12: UnlockHeader(); break;
+
+ #ifdef XB_MEMO_SUPPORT
+ case 13: LockMemo(); break;
+ case 14: UnlockMemo(); break;
+ #endif // XB_MEMO_SUPPORT
+
+ #ifdef XB_INDEX_SUPPORT
+ case 15: LockIndices(); break;
+ case 16: UnlockIndices(); break;
+ #endif // XB_INDEX_SUPPORT
+
+ #ifdef XB_DEBUG_SUPPORT
+ case 20: xbFileLock(); break;
+ case 21: xbFileUnlock(); break;
+ #endif // XB_DEBUG_SUPPORT
+
+ case 99: break;
+ default: std::cout << "Invalid Option" << std::endl;
+ }
+ }
+}
+#endif
+
+/************************************************************************/
+#ifdef XB_SQL_SUPPORT
+void xbUtil::SqlMenu()
+{
+ int option = 0;
+
+ while( option != 99 ) {
+ std::cout << std::endl << std::endl << "9 - Sql Menu" << std::endl;
+ std::cout << "-------------" << std::endl;
+ DisplayActiveTable();
+
+ std::cout << " 1 - Execute SQL Non Query" << std::endl;
+ std::cout << " 2 - Execute SQL Query" << std::endl;
+ std::cout << "99 - Exit Menu" << std::endl;
+
+ option = GetOption();
+ switch( option ){
+ case 0: break;
+ case 1: ExecSqlNonQuery(); break;
+ case 2: ExecSqlQuery(); break;
+ case 99: break;
+ default: std::cout << "Invalid option" << std::endl; break;
+ }
+ }
+}
+#endif // XB_SQL_SUPPORT
+
+/************************************************************************/
+#ifdef XB_DEBUG_SUPPORT
+void xbUtil::DebugMenu()
+{
+ int option = 0;
+
+ while( option != 99 ) {
+ std::cout << std::endl << std::endl << "10 - Debug Menu" << std::endl;
+ std::cout << "-------------" << std::endl;
+ DisplayActiveTable();
+
+ std::cout << " 1 - Select Active Table" << std::endl;
+ #ifdef XB_MEMO_SUPPORT
+ std::cout << " 2 - Dislay Memo Header Info" << std::endl;
+ std::cout << " 3 - Dump Memo Free Chain" << std::endl;
+ #endif
+
+// //std::cout << "4 - Dump index node chains to file xbase.dmp" << std::endl;
+// //std::cout << "5 - Dump index node chain" << std::endl;
+ std::cout << "99 - Exit Menu" << std::endl;
+ option = GetOption();
+ switch( option ){
+ case 0: break;
+ case 1: SelectActiveTable(); break;
+ #ifdef XB_MEMO_SUPPORT
+ case 2: DumpDbtHeader(); break;
+ case 3: DumpMemoFreeChain(); break;
+ #endif
+ case 99: break;
+ default: std::cout << "Invalid option" << std::endl; break;
+ }
+ }
+}
+#endif // XBASE_DEBUG
+/************************************************************************/
+void xbUtil::FieldMenu()
+{
+ int option = 0;
+
+ while( option != 99 ) {
+ std::cout << std::endl << std::endl << " 5 - Field Menu" << std::endl;
+ std::cout << " --------------" << std::endl;
+ DisplayActiveTable();
+ std::cout << " 1 - Select Active Table" << std::endl;
+ std::cout << " 2 - List Field Info" << std::endl;
+ std::cout << " 3 - Show Field Data (non memo field)" << std::endl;
+ std::cout << " 4 - Update Field Data" << std::endl;
+ #ifdef XB_MEMO_SUPPORT
+ std::cout << " 5 - Show Memo Field Data" << std::endl;
+ std::cout << " 6 - Update Memo Field" << std::endl;
+ std::cout << " 7 - Delete Memo Field" << std::endl;
+ #endif
+
+ std::cout << "99 - Exit Menu" << std::endl;
+ option = GetOption();
+ switch( option ){
+ case 0: break;
+ case 1: SelectActiveTable(); break;
+ case 2: ListFieldInfo(); break;
+ case 3: DumpRecord(); break;
+ case 4: UpdateFieldData(); break;
+ #ifdef XB_MEMO_SUPPORT
+ case 5: ShowMemoFieldData(); break;
+ case 6: UpdateMemoFieldData(); break;
+ case 7: DeleteMemoField(); break;
+ #endif
+ case 99: break;
+ default: std::cout << "Invalid option" << std::endl; break;
+ }
+ }
+}
+/************************************************************************/
+void xbUtil::RecordMenu()
+{
+ int option = 0;
+ while( option != 99 ) {
+ std::cout << std::endl << std::endl << " 4 - Record Menu" << std::endl;
+ std::cout << " ---------------" << std::endl;
+ DisplayActiveTable();
+ std::cout << " 1 - Select Active Table" << std::endl;
+ std::cout << " 2 - Get Record" << std::endl;
+ std::cout << " 3 - Blank Record" << std::endl;
+ std::cout << " 4 - Append Record" << std::endl;
+ std::cout << " 5 - Put Record" << std::endl;
+ std::cout << " 6 - Delete Record" << std::endl;
+ std::cout << " 7 - Undelete Record" << std::endl;
+ std::cout << " 8 - First Record" << std::endl;
+ std::cout << " 9 - Next Record" << std::endl;
+ std::cout << "10 - Prev Record" << std::endl;
+ std::cout << "11 - Last Record" << std::endl;
+ std::cout << "12 - Dump Record" << std::endl;
+ std::cout << "13 - Abort Record Updates" << std::endl;
+ std::cout << "14 - Commit Record Updates" << std::endl;
+
+ #ifdef XB_FILTER_SUPPORT
+ std::cout << "20 - Set Filter" << std::endl;
+ std::cout << "21 - Get First Filter Rec" << std::endl;
+ std::cout << "22 - Get Next Filter Rec" << std::endl;
+ std::cout << "23 - Get Prev Filter Rec" << std::endl;
+ std::cout << "24 - Get Last Filter Rec" << std::endl;
+ #endif // XB_FILTER_SUPPORT
+
+ std::cout << "99 - Exit Menu" << std::endl;
+ option = GetOption();
+
+ switch( option ){
+ case 0: break;
+ case 1: SelectActiveTable(); break;
+ case 2: GetRecord(); break;
+ case 3: BlankRecord(); break;
+ case 4: AppendRecord(); break;
+ case 5: PutRecord(); break;
+ case 6: DeleteRecord(); break;
+ case 7: UndeleteRecord(); break;
+ case 8: GetFirstRecord(); break;
+ case 9: GetNextRecord(); break;
+ case 10: GetPrevRecord(); break;
+ case 11: GetLastRecord(); break;
+ case 12: DumpRecord(); break;
+ case 13: AbortRecord(); break;
+ case 14: CommitRecord(); break;
+
+ #ifdef XB_FILTER_SUPPORT
+ case 20: SetFilter(); break;
+ case 21: GetFirstFilterRec(); break;
+ case 22: GetNextFilterRec(); break;
+ case 23: GetPrevFilterRec(); break;
+ case 24: GetLastFilterRec(); break;
+ #endif // XB_FILTER_SUPPORT
+
+ case 99: break;
+ default: std::cout << "Invalid option" << std::endl; break;
+ }
+ }
+}
+
+/************************************************************************/
+void xbUtil::FileMenu()
+{
+ int option = 0;
+
+ while( option != 99 ) {
+ std::cout << std::endl << std::endl << " 3 - File / Table Menu" << std::endl;
+ std::cout << " ---------------------" << std::endl;
+ DisplayActiveTable();
+ std::cout << " 1 - List files in Default Data Directory" << std::endl;
+ std::cout << " 2 - Update Default Data Directory" << std::endl;
+ std::cout << " 3 - List Open Tables/Files" << std::endl;
+ std::cout << " 4 - Open Table/File" << std::endl;
+ std::cout << " 5 - Close Table/File" << std::endl;
+ std::cout << " 6 - Close All Tables/Files" << std::endl;
+ std::cout << " 7 - Select Active Table" << std::endl;
+ std::cout << " 8 - Table/File Information" << std::endl;
+ std::cout << "10 - Pack" << std::endl;
+ std::cout << "11 - Zap Database" << std::endl;
+ std::cout << "12 - Copy Dbf Structure" << std::endl;
+ std::cout << "13 - Update Table Auto Commit Setting" << std::endl;
+ std::cout << "14 - Display Table Info" << std::endl;
+ std::cout << "15 - Rename Table" << std::endl;
+ std::cout << "16 - Delete Table" << std::endl;
+
+ std::cout << "99 - Exit Menu" << std::endl;
+ option = GetOption();
+
+ switch( option ){
+ case 0: break;
+ case 1: ListFilesInDataDirectory(); break;
+ case 2: UpdateDataDirectory(); break;
+ case 3: x->DisplayTableList(); break;
+ case 4: Open(); break;
+ case 5: Close(); break;
+ case 6: CloseAllTables(); break;
+ case 7: SelectActiveTable(); break;
+ case 8: DisplayTableStats(); break;
+ case 10: Pack(); break;
+ case 11: ZapTable(); break;
+ case 12: CopyDbfStructure(); break;
+ case 13: UpdateTableAutoCommit(); break;
+ case 14: DisplayTableInfo(); break;
+ case 15: RenameTable(); break;
+ case 16: DeleteTable(); break;
+ case 99: break;
+
+ default: std::cout << "Invalid Option" << std::endl;
+ }
+ }
+}
+/************************************************************************/
+#ifdef XB_NDXINF_SUPPORT
+void xbUtil::InfFileMenu()
+{
+
+
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+
+ int option = 0;
+ while( option != 99 ) {
+ std::cout << std::endl << std::endl << " 11 - InfFileData Menu" << std::endl;
+ std::cout << " ---------------------" << std::endl;
+ DisplayActiveTable();
+ std::cout << " 1 - List Inf Contents" << std::endl;
+ std::cout << " 2 - Add NDX File association to [" << dActiveTable->GetTblAlias().Str() << "]" << std::endl;
+ std::cout << " 3 - Delete NDX File association from [" << dActiveTable->GetTblAlias().Str() << "]" << std::endl;
+ std::cout << "10 - Inf File Help" << std::endl;
+ std::cout << "99 - Exit Menu" << std::endl;
+ option = GetOption();
+
+ switch( option ){
+ case 0: break;
+ case 1: ListInfFileData(); break;
+ case 2: AddInfFileData(); break;
+ case 3: DeleteInfFileData(); break;
+ case 10: InfFileHelp(); break;
+ case 99: break;
+ default: std::cout << "Invalid Option" << std::endl;
+ }
+ }
+}
+#endif // XB_NDXINF_SUPPORT
+
+/************************************************************************************/
+void xbUtil::SystemMenu()
+{
+ int option = 0;
+ while( option != 99 ) {
+ std::cout << std::endl << std::endl << " 2 - System Menu" << std::endl;
+ std::cout << " ---------------" << std::endl;
+ DisplayActiveTable();
+ std::cout << " 1 - Display System Settings" << std::endl;
+ std::cout << " 2 - Update Default Data Directory" << std::endl;
+
+ std::cout << " 3 - Toggle Default Auto Commit" << std::endl;
+ std::cout << " 4 - Update Default Log Directory" << std::endl;
+ std::cout << " 5 - Update Default Log File Name" << std::endl;
+ std::cout << " 6 - Toggle Logging Status" << std::endl;
+ std::cout << " 7 - Write Test Log Message" << std::endl;
+ #ifdef XB_LOCKING_SUPPORT
+ std::cout << " 8 - Update Default Lock Retries" << std::endl;
+ std::cout << " 9 - Toggle Default Auto Lock" << std::endl;
+ //std::cout << "10 - Update Lock Flavor" << std::endl; 3/20/17, only one flavor working
+ std::cout << "11 - Update Default Lock Wait Time" << std::endl;
+ std::cout << "12 - Toggle Multi User Mode" << std::endl;
+ #endif
+
+ std::cout << "99 - Exit Menu" << std::endl;
+ option = GetOption();
+
+ switch( option ) {
+ case 0: break;
+ case 1: ListSystemSettings(); break;
+ case 2: UpdateDataDirectory(); break;
+ case 3: ToggleDefaultAutoCommit(); break;
+ case 4: UpdateLogDirectory(); break;
+ case 5: UpdateLogFileName(); break;
+ case 6: ToggleLoggingStatus(); break;
+ case 7: WriteLogMessage(); break;
+ #ifdef XB_LOCKING_SUPPORT
+ case 8: UpdateDefaultLockRetries(); break;
+ case 9: ToggleDefaultAutoLock(); break;
+ case 10: UpdateDefaultLockFlavor(); break;
+ case 11: UpdateDefaultLockWait(); break;
+ case 12: ToggleMultiUserMode(); break;
+ #endif
+
+ case 99: break;
+ default: std::cout << "Invalid Option" << std::endl;
+ }
+ }
+}
+/************************************************************************************/
+void xbUtil::MainMenu()
+{
+ int option = 0;
+ std::cout << std::endl<< std::endl << "XBase64 Utility Program " <<
+ xbase_VERSION_MAJOR << "." << xbase_VERSION_MINOR << "." <<
+ xbase_VERSION_PATCH << "\n";
+
+ DisplayActiveTable();
+ while( option != 99 ) {
+ std::cout << std::endl << std::endl << " 0 - Main Menu" << std::endl;
+ std::cout << " -------------" << std::endl;
+ std::cout << " 1 - Help" << std::endl;
+ std::cout << " 2 - System Menu" << std::endl;
+ std::cout << " 3 - File / Table Menu" << std::endl;
+ std::cout << " 4 - Record Menu" << std::endl;
+ std::cout << " 5 - Field Menu" << std::endl;
+ //std::cout << " 6 - Index Menu" << std::endl;
+ #ifdef XB_LOCKING_SUPPORT
+ std::cout << " 6 - Locking Menu" << std::endl;
+ #endif
+ #ifdef XB_EXPRESSION_SUPPORT
+ std::cout << " 7 - Expression Menu" << std::endl;
+ #endif
+ #ifdef XB_INDEX_SUPPORT
+ std::cout << " 8 - Index Menu" << std::endl;
+ #endif
+
+ #ifdef XB_FILTERS
+ std::cout << " 9 - Filter Menu" << std::endl;
+ #endif
+
+ #ifdef XB_SQL_SUPPORT
+ std::cout << "10 - SQL Menu" << std::endl;
+ #endif // XB_SQL_SUPPORT
+
+ #ifdef XB_NDXINF_SUPPORT
+ std::cout << "11 - INF File Menu" << std::endl;
+ #endif // XB_NDXINF_SUPPORT
+
+ #ifdef XB_DEBUG_SUPPORT
+ std::cout << "20 - Debug Menu" << std::endl;
+ #endif
+
+ std::cout << "99 - Exit" << std::endl;
+ option = GetOption();
+ switch( option ){
+ case 0: break;
+ case 1: Help(); break;
+ case 2: SystemMenu(); break;
+ case 3: FileMenu(); break;
+ case 4: RecordMenu(); break;
+ case 5: FieldMenu(); break;
+
+ #ifdef XB_LOCKING_SUPPORT
+ case 6: LockingMenu(); break;
+ #endif
+
+ #ifdef XB_EXPRESSION_SUPPORT
+ case 7: ExpressionMenu(); break;
+ #endif
+
+ #ifdef XB_INDEX_SUPPORT
+ case 8: IndexMenu(); break;
+ #endif
+
+ #ifdef XB_FILTERS
+ case 9: FilterMenu(); break;
+ #endif
+
+ #ifdef XB_SQL_SUPPORT
+ case 10: SqlMenu(); break;
+ #endif
+
+ #ifdef XB_NDXINF_SUPPORT
+ case 11: InfFileMenu(); break;
+ #endif
+
+ #ifdef XB_DEBUG_SUPPORT
+ case 20: DebugMenu(); break;
+ #endif
+
+ case 99: std::cout << "Bye!! - Thanks for using XBase64" << std::endl; break;
+ default:
+ std::cout << option << " - Invalid function" << std::endl;
+ break;
+ }
+ }
+}
+/*************************************************************************************/
+
+#ifdef XB_INDEX_SUPPORT
+void xbUtil::DisplayOpenIndexFiles(){
+
+ // verify active table selected, if not, select one
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "Table not selected" << std::endl;
+ return;
+ }
+ // if not active indices, display no open NDX indices
+ xbInt32 lIxCnt = dActiveTable->GetPhysicalIxCnt();
+ if( lIxCnt == 0 ){
+ std::cout << "No open index files for table" << std::endl;
+ return;
+ } else {
+ std::cout << " Open Index Files = [" << lIxCnt << "]" << std::endl;
+ std::cout << " FileName\tFile Type\n";
+ std::cout << " ========\t=========\n";
+ }
+ // For each active index
+ // display File Name, Type, Key
+ xbIxList *p = dActiveTable->GetIxList();
+ xbIx *ixp;
+ while( p ){
+ ixp = p->ix;
+ std::cout << " " << ixp->GetFileName().Str() << "\t" << p->sFmt->Str() << std::endl;
+ p = p->next;
+ }
+}
+
+void xbUtil::DisplaySupportedIndexTypes(){
+
+ std::cout << "Supported Index Type" << std::endl;
+ std::cout << "Type MaxTags Asc/Dsc Filters Description" << std::endl;
+ std::cout << "---- ------- -------- ------- --------------------------------" << std::endl;
+ #ifdef XB_NDX_SUPPORT
+ std::cout << "NDX 1 ASC No Dbase III single tag index file" << std::endl;
+ #endif
+ #ifdef XB_MDX_SUPPORT
+ std::cout << "MDX 47 ASC/DSC Yes Dbase IV multiple tag index file" << std::endl;
+ #endif
+}
+
+void xbUtil::SelectTag(){
+ std::cout << "SelectTag" << std::endl;
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "Table not selected" << std::endl;
+ return;
+ }
+
+ xbLinkListNode<xbTag *> *llN = dActiveTable->GetTagList();
+ xbTag *pTag;
+ xbInt16 i = 1;
+ std::cout << "Line\tType\tUnique\tSort\tName\t\tKey Expression\t\tFilter" << std::endl;
+
+ char cUnique;
+ char cSort;
+ xbString s;
+ while( llN ){
+ pTag = llN->GetKey();
+ pTag->GetUnique() ? cUnique = 'Y' : cUnique = 'N';
+ pTag->GetSort() ? cSort = 'D' : cSort = 'A';
+ s.Sprintf( "%d\t%s\t%c\t%c\t%-12s\t%-20s\t%s \n", i++, pTag->GetType().Str(), cUnique, cSort, pTag->GetTagName().Str(), pTag->GetExpression().Str(), pTag->GetFilter().Str() );
+ std::cout << s.Str();
+// std::cout << i++ << "\t" << pTag->GetType() << "\t " << cUnique << "\t " << cSort << "\t" << pTag->GetTagName() << "\t" << pTag->GetExpression() << "\t" << pTag->GetFilter() << std::endl;
+ llN = llN->GetNextNode();
+ }
+ char cBuf[128];
+ std::cout << std::endl << "Enter Line No:" << std::endl;
+ std::cin.getline( cBuf, 128 );
+
+ xbInt32 iSelection = atol( cBuf );
+ if( iSelection < 1 || iSelection > i ){
+ std::cout << "Invalid selection [" << iSelection << "]" << std::endl;
+ } else {
+ llN = dActiveTable->GetTagList();
+ i = 1;
+ for( i = 1; i < iSelection; i++ )
+ llN = llN->GetNextNode();
+ pTag = llN->GetKey();
+ dActiveTable->SetCurTag( pTag->GetType(), pTag->GetIx(), pTag->GetVpTag() );
+ }
+}
+
+void xbUtil::OpenIndex(){
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "Table not selected" << std::endl;
+ return;
+ }
+ xbInt16 iRc;
+
+ char cBuf[128];
+ std::cout << "Enter index type (NDX or MDX)" << std::endl;
+ std::cin.getline( cBuf, 128 );
+ xbString sIxType = cBuf;
+
+ std::cout << "Enter File Name" << std::endl;
+ std::cin.getline( cBuf, 128 );
+ xbString sIxFileName = cBuf;
+
+ iRc = dActiveTable->OpenIndex( sIxType, sIxFileName );
+ x->DisplayError( iRc );
+}
+
+void xbUtil::CloseIndexFile(){
+
+ std::cout << "CloseIndex\n";
+
+ // verify active table selected, if not, select one
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "Table not selected" << std::endl;
+ return;
+ }
+
+ xbIx *pIx = dActiveTable->GetCurIx();
+ if( !pIx )
+ SelectTag();
+
+ pIx = dActiveTable->GetCurIx();
+ if( !pIx ){
+ std::cout << "Tag not selected" << std::endl;
+ return;
+ }
+
+ xbInt16 iRc = dActiveTable->CloseIndexFile( pIx );
+ x->DisplayError( iRc );
+}
+
+void xbUtil::CreateIndexTag(){
+
+ std::cout << "CreateIndexTag\n";
+
+ // verify active table selected, if not, select one
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "Table not selected" << std::endl;
+ return;
+ }
+
+ char cBuf[512];
+ xbString sPrompt = "Enter Index Type (";
+ #ifdef XB_NDX_SUPPORT
+ sPrompt += "NDX";
+ #endif // XB_NDX_SUPPORT
+ #ifdef XB_MDX_SUPPORT
+ sPrompt += " MDX";
+ #endif // XB_MDX_SUPPORT
+ sPrompt += "):";
+ std::cout << sPrompt.Str() << std::endl;
+
+ std::cin.getline( cBuf, 128 );
+ xbString sIxType = cBuf;
+
+ if( sIxType == "NDX" )
+ std::cout << "Enter File Name" << std::endl;
+ else if( sIxType == "MDX" )
+ std::cout << "Enter Tag Name" << std::endl;
+
+ std::cin.getline( cBuf, 128 );
+ xbString sIxName = cBuf;
+
+ if( sIxType != "NDX" && sIxType != "MDX" ){
+ std::cout << "Invalid tag type" << std::endl;
+ return;
+ }
+
+ xbString s;
+ if( sIxType == "NDX" ){
+ s = sIxName;
+ s.ToUpperCase();
+ xbUInt32 lPos = s.Pos( ".NDX" );
+ if( lPos == 0 )
+ sIxName += ".NDX";
+ }
+ if( sIxType == "MDX" ){
+ if( sIxName.Len() > 12 ){
+ std::cout << "Tag name [" << sIxName.Str() << "] to long. Must be 12 bytes or less" << std::endl;
+ return;
+ }
+ }
+
+ xbInt16 iDescending = 0;
+ xbInt16 iUnique = 0;
+
+ std::cout << "Enter Key Expression:" << std::endl;
+ std::cin.getline( cBuf, 512 );
+ xbString sKeyExpression = cBuf;
+
+ xbString sFilter;
+ if( sIxType == "MDX" ){
+ std::cout << "Enter Filter (or enter for none):" << std::endl;
+ std::cin.getline( cBuf, 512 );
+ sFilter = cBuf;
+
+ std::cout << "Descending? (Enter Y for yes):" << std::endl;
+ std::cin.getline( cBuf, 12 );
+ if( cBuf[0] == 'Y' )
+ iDescending = 1;
+ }
+
+ std::cout << "Unique Keys? (Enter Y for yes):" << std::endl;
+ std::cin.getline( cBuf, 12 );
+ if( cBuf[0] == 'Y' )
+ iUnique = 1;
+
+ xbIx *pIx;
+ void *vpTag;
+
+ xbInt16 iRc = dActiveTable->CreateTag( sIxType, sIxName, sKeyExpression, sFilter, iDescending, iUnique, 0, &pIx, &vpTag );
+ x->DisplayError( iRc );
+}
+
+void xbUtil::GetFirstKey(){
+ std::cout << "GetFirstKey\n";
+ // verify active table selected, if not, select one
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+ if( !dActiveTable ){
+ std::cout << "Table not selected" << std::endl;
+ return;
+ }
+ xbIx *pIx = dActiveTable->GetCurIx();
+ if( !pIx )
+ SelectTag();
+ pIx = dActiveTable->GetCurIx();
+ if( !pIx ){
+ std::cout << "Tag not selected" << std::endl;
+ return;
+ }
+ void *vpCurTag = dActiveTable->GetCurTag();
+ xbInt16 iRc = pIx->GetFirstKey( vpCurTag, 1 );
+ if( iRc == XB_NO_ERROR )
+ dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2);
+ else
+ x->DisplayError( iRc );
+}
+
+void xbUtil::GetNextKey(){
+ std::cout << "GetNextKey\n";
+ // verify active table selected, if not, select one
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+ if( !dActiveTable ){
+ std::cout << "Table not selected" << std::endl;
+ return;
+ }
+ xbIx *pIx = dActiveTable->GetCurIx();
+ if( !pIx )
+ SelectTag();
+ pIx = dActiveTable->GetCurIx();
+ if( !pIx ){
+ std::cout << "Tag not selected" << std::endl;
+ return;
+ }
+ void *vpCurTag = dActiveTable->GetCurTag();
+ xbInt16 iRc = pIx->GetNextKey( vpCurTag, 1 );
+ if( iRc == XB_NO_ERROR )
+ dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2);
+ else
+ x->DisplayError( iRc );
+}
+
+void xbUtil::GetPrevKey(){
+ std::cout << "GetPrevKey\n";
+ // verify active table selected, if not, select one
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "Table not selected" << std::endl;
+ return;
+ }
+ xbIx *pIx = dActiveTable->GetCurIx();
+ if( !pIx )
+ SelectTag();
+ pIx = dActiveTable->GetCurIx();
+ if( !pIx ){
+ std::cout << "Tag not selected" << std::endl;
+ return;
+ }
+ void *vpCurTag = dActiveTable->GetCurTag();
+ xbInt16 iRc = pIx->GetPrevKey( vpCurTag, 1 );
+ if( iRc == XB_NO_ERROR )
+ dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2);
+ else
+ x->DisplayError( iRc );
+}
+
+void xbUtil::GetLastKey(){
+ std::cout << "GetLastKey\n";
+ // verify active table selected, if not, select one
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+ if( !dActiveTable ){
+ std::cout << "Table selected" << std::endl;
+ return;
+ }
+ xbIx *pIx = dActiveTable->GetCurIx();
+ if( !pIx )
+ SelectTag();
+ pIx = dActiveTable->GetCurIx();
+ if( !pIx ){
+ std::cout << "Tag not selected" << std::endl;
+ return;
+ }
+ void *vpCurTag = dActiveTable->GetCurTag();
+ xbInt16 iRc = pIx->GetLastKey( vpCurTag, 1 );
+ if( iRc == XB_NO_ERROR )
+ dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2);
+ else
+ x->DisplayError( iRc );
+}
+
+void xbUtil::FindKey(){
+ std::cout << "FindKey\n";
+ // verify active table selected, if not, select one
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+ if( !dActiveTable ){
+ std::cout << "Table not selected" << std::endl;
+ return;
+ }
+ xbIx *pIx = dActiveTable->GetCurIx();
+ if( !pIx )
+ SelectTag();
+ pIx = dActiveTable->GetCurIx();
+ if( !pIx ){
+ std::cout << "Tag not selected" << std::endl;
+ return;
+ }
+ void *vpCurTag = dActiveTable->GetCurTag();
+ char cKeyType = pIx->GetKeyType( vpCurTag );
+
+ switch( cKeyType ){
+ case 'C':
+ std::cout << "Enter character key value:";
+ break;
+ case 'F':
+ case 'N':
+ std::cout << "Enter numeric key value:";
+ break;
+ case 'D':
+ std::cout << "Enter date (YYYYMMDD) key value:";
+ break;
+ default:
+ std::cout << "Unknown key type [" << cKeyType << "]" << std::endl;
+ return;
+ // break;
+ }
+
+ char cBuf[128];
+ std::cin.getline( cBuf, 128 );
+ xbInt16 iRc = 0;
+
+ if( cKeyType == 'C' ){
+ iRc = pIx->FindKey( vpCurTag, cBuf, (xbInt32) strlen( cBuf ), 1 );
+
+ } else if( cKeyType == 'F' || cKeyType == 'N' ){
+ xbDouble d = atof( cBuf );
+ iRc = pIx->FindKey( vpCurTag, d, 1 );
+
+ } else if( cKeyType == 'D' ){
+ xbDate dt( cBuf );
+ iRc = pIx->FindKey( vpCurTag, dt, 1 );
+ }
+
+ if( iRc == XB_NO_ERROR )
+ dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2);
+ else
+ x->DisplayError( iRc );
+}
+
+void xbUtil::CheckIntegrity(){
+ std::cout << "CheckIntegrity\n";
+ // verify active table selected, if not, select one
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+ if( !dActiveTable ){
+ std::cout << "Table not selected" << std::endl;
+ return;
+ }
+ xbIx *pIx = dActiveTable->GetCurIx();
+ if( !pIx )
+ SelectTag();
+ pIx = dActiveTable->GetCurIx();
+ if( !pIx ){
+ std::cout << "Tag not selected" << std::endl;
+ return;
+ }
+ void *vpCurTag = dActiveTable->GetCurTag();
+
+ xbInt16 iRc = pIx->CheckTagIntegrity( vpCurTag, 2 );
+ x->DisplayError( iRc );
+}
+
+void xbUtil::Reindex(){
+ std::cout << "Reindex\n";
+
+ // verify active table selected, if not, select one
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+ if( !dActiveTable ){
+ std::cout << "Table not selected" << std::endl;
+ return;
+ }
+ xbIx *pIx = dActiveTable->GetCurIx();
+ if( !pIx )
+ SelectTag();
+ pIx = dActiveTable->GetCurIx();
+ if( !pIx ){
+ std::cout << "Tag not selected" << std::endl;
+ return;
+ }
+ //void *vpCurTag = dActiveTable->GetCurTag();
+ //xbInt16 iRc = pIx->Reindex( &vpCurTag );
+ xbInt16 iRc = dActiveTable->Reindex( 0 );
+ x->DisplayError( iRc );
+}
+
+void xbUtil::DeleteTag(){
+ std::cout << "DeleteTag\n";
+ // verify active table selected, if not, select one
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+ if( !dActiveTable ){
+ std::cout << "Table not selected" << std::endl;
+ return;
+ }
+ xbIx *pIx = dActiveTable->GetCurIx();
+ if( !pIx )
+ SelectTag();
+ pIx = dActiveTable->GetCurIx();
+ if( !pIx ){
+ std::cout << "Tag not selected" << std::endl;
+ return;
+ }
+ void *vpCurTag = dActiveTable->GetCurTag();
+ xbInt16 iRc = dActiveTable->DeleteTag( dActiveTable->GetCurIxType(), pIx->GetTagName( vpCurTag ));
+ x->DisplayError( iRc );
+}
+
+void xbUtil::AssociateNonProdIx(){
+ std::cout << "See InfFile menu option, option 11 from the main menu or =11 from here\n";
+}
+
+
+#ifdef XB_DEBUG_SUPPORT
+void xbUtil::DumpRecsByIx( xbInt16 iOpt ){
+ // iDirection = 0 - Forward - MDX
+ // = 1 - Reverse - MDX
+
+ std::cout << "DumpRecsByIx\n";
+ // verify active table selected, if not, select one
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+ if( !dActiveTable ){
+ std::cout << "Table not selected" << std::endl;
+ return;
+ }
+ xbIx *pIx = dActiveTable->GetCurIx();
+ if( !pIx )
+ SelectTag();
+ pIx = dActiveTable->GetCurIx();
+ if( !pIx ){
+ std::cout << "Tag not selected" << std::endl;
+ return;
+ }
+ std::cout << "Select destination:" << std::endl;
+ std::cout << "0 - Logfile" << std::endl;
+ std::cout << "1 - Screen" << std::endl;
+ std::cout << "2 - Both" << std::endl;
+ xbInt16 iDispOpt = GetOption();
+ std::cout << "Select format:" << std::endl;
+ std::cout << "0 - With Field Names" << std::endl;
+ std::cout << "1 - 1 line per record" << std::endl;
+ xbInt16 iDispFmt = GetOption();
+
+ x->WriteLogMessage( "--------- Dump Recs By Index -------------", iDispOpt );
+ void *vpCurTag = dActiveTable->GetCurTag();
+ xbUInt32 lRecCnt = 0;
+ xbInt16 iRc = 0;
+
+ if( iOpt == 0 ){
+ iRc = pIx->GetFirstKey( vpCurTag, 1 );
+ if( iRc == XB_NO_ERROR ){
+ lRecCnt++;
+ dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), iDispOpt, iDispFmt );
+ while(( iRc = pIx->GetNextKey( vpCurTag, 1 )) == XB_NO_ERROR ){
+ dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), iDispOpt, iDispFmt );
+ lRecCnt++;
+ }
+ } else {
+ x->DisplayError( iRc );
+ }
+ } else if( iOpt == 1 ) {
+ iRc = pIx->GetLastKey( vpCurTag, 1 );
+ if( iRc == XB_NO_ERROR ){
+ lRecCnt++;
+ dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), iDispOpt, iDispFmt );
+ while(( iRc = pIx->GetPrevKey( vpCurTag, 1 )) == XB_NO_ERROR ){
+ dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), iDispOpt, iDispFmt );
+ lRecCnt++;
+ }
+ }
+ } else {
+ std::cout << "Invalid option " << iOpt << std::endl;
+ return;
+ }
+ std::cout << lRecCnt << " record(s) dumped" << std::endl;
+}
+
+void xbUtil::DumpIxHeader(){
+ std::cout << "DumpIxHeader\n";
+ // verify active table selected, if not, select one
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+ if( !dActiveTable ){
+ std::cout << "Table not selected" << std::endl;
+ return;
+ }
+ xbIx *pIx = dActiveTable->GetCurIx();
+ if( !pIx )
+ SelectTag();
+ pIx = dActiveTable->GetCurIx();
+ if( !pIx ){
+ std::cout << "Tag not selected" << std::endl;
+ return;
+ }
+ std::cout << "0 - Logfile" << std::endl;
+ std::cout << "1 - Screen" << std::endl;
+ std::cout << "2 - Both" << std::endl;
+ xbInt16 iDispOpt = GetOption();
+ pIx->DumpHeader( iDispOpt, 3 );
+
+}
+
+void xbUtil::DumpIxNode(){
+ std::cout << "DumpIxNode\n";
+ // verify active table selected, if not, select one
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "Table not selected" << std::endl;
+ return;
+ }
+
+ xbIx *pIx = dActiveTable->GetCurIx();
+ if( !pIx )
+ SelectTag();
+
+ pIx = dActiveTable->GetCurIx();
+ if( !pIx ){
+ std::cout << "Tag not selected" << std::endl;
+ return;
+ }
+ std::cout << "0 - Logfile" << std::endl;
+ std::cout << "1 - Screen" << std::endl;
+ std::cout << "2 - Both" << std::endl;
+ xbInt16 iDispOpt = GetOption();
+// std::cout << std::endl << "0 - All Blocks" << std::endl;
+// std::cout << "NNN - Specific block number, 0=All" << std::endl;
+// xbUInt32 iBlockOpt = (xbUInt32) GetOption();
+// if( iBlockOpt == 0 ) // dump the header if dumping all blocks
+ // pIx->DumpHeader( iDispOpt );
+ pIx->DumpTagBlocks( iDispOpt, dActiveTable->GetCurTag() );
+}
+
+void xbUtil::DumpIxNodeChain(){
+
+ std::cout << "DumpIxNodeChain\n";
+
+ // verify active table selected, if not, select one
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "Table not selected" << std::endl;
+ return;
+ }
+
+ xbIx *pIx = dActiveTable->GetCurIx();
+ if( !pIx )
+ SelectTag();
+
+ pIx = dActiveTable->GetCurIx();
+ if( !pIx ){
+ std::cout << "Tag not selected" << std::endl;
+ return;
+ }
+
+ std::cout << "0 - Logfile" << std::endl;
+ std::cout << "1 - Screen" << std::endl;
+ std::cout << "2 - Both" << std::endl;
+ xbInt16 iDispOpt = GetOption();
+
+ void *vpCurTag = dActiveTable->GetCurTag();
+ pIx->DumpIxNodeChain( vpCurTag, iDispOpt );
+}
+
+
+void xbUtil::DumpFreeBlocks(){
+ std::cout << "Dump ulBlock2 - (Free Block or Split From Page) for MDX Index file\n";
+ // verify active table selected, if not, select one
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+ if( !dActiveTable ){
+ std::cout << "Table not selected" << std::endl;
+ return;
+ }
+ xbIx *pIx = dActiveTable->GetCurIx();
+ if( !pIx )
+ SelectTag();
+ pIx = dActiveTable->GetCurIx();
+ if( !pIx ){
+ std::cout << "Tag not selected" << std::endl;
+ return;
+ }
+ std::cout << "0 - Logfile" << std::endl;
+ std::cout << "1 - Screen" << std::endl;
+ std::cout << "2 - Both" << std::endl;
+ xbInt16 iDispOpt = GetOption();
+ pIx->DumpFreeBlocks( iDispOpt );
+
+}
+
+
+
+#endif // XB_DEBUG_SUPPORT
+#endif // XB_INDEX_SUPPORT
+
+#ifdef XB_FILTER_SUPPORT
+void xbUtil::SetFilter()
+{
+ // verify active table selected, if not, select one
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "Table not selected" << std::endl;
+ return;
+ }
+
+ char cBuf[128];
+ std::cout << "Enter filter expression:" << std::endl;
+ std::cin.getline( cBuf, 128 );
+ xbString s( cBuf );
+
+ if( filt )
+ delete filt;
+
+ filt = new xbFilter( dActiveTable );
+ xbInt16 iRc = filt->Set( s );
+
+ x->DisplayError( iRc );
+}
+
+void xbUtil::GetFirstFilterRec()
+{
+ // verify active table selected, if not, select one
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "Table not selected" << std::endl;
+ return;
+ }
+
+ xbInt16 iRc;
+ if(( iRc = filt->GetFirstRecord()) == XB_NO_ERROR )
+ dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2);
+ else
+ x->DisplayError( iRc );
+}
+
+void xbUtil::GetNextFilterRec()
+{
+ // verify active table selected, if not, select one
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "Table not selected" << std::endl;
+ return;
+ }
+ xbInt16 iRc;
+ if(( iRc = filt->GetNextRecord()) == XB_NO_ERROR )
+ dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2);
+ else
+ x->DisplayError( iRc );
+}
+
+void xbUtil::GetPrevFilterRec()
+{
+ // verify active table selected, if not, select one
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "Table not selected" << std::endl;
+ return;
+ }
+ xbInt16 iRc;
+ if(( iRc = filt->GetPrevRecord()) == XB_NO_ERROR )
+ dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2);
+ else
+ x->DisplayError( iRc );
+}
+
+void xbUtil::GetLastFilterRec()
+{
+ // verify active table selected, if not, select one
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "Table not selected" << std::endl;
+ return;
+ }
+ xbInt16 iRc;
+ if(( iRc = filt->GetLastRecord()) == XB_NO_ERROR )
+ dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2);
+ else
+ x->DisplayError( iRc );
+}
+#endif // XB_FILTER_SUPPORT
+
+///@endcond DOXYOFF
+
+
+/*************************************************************************************/
+void PrintHelp();
+void PrintHelp(){
+ std::cout << "Usage: xb_dbfutil [-h] [-?] [--help] [-v] [--version]" << std::endl << std::endl;
+ std::cout << "This program provides a menu driven tool for accissing the functionality og the xbase64 library" << std::endl;
+ std::cout << "and provides access to DBF, MDX, NDX and MDT xbase formatted data files." << std::endl << std::endl;
+}
+void PrintVersion();
+void PrintVersion(){
+ std::cout << "Xbase64 Version: " << xbase_VERSION_MAJOR << "." << xbase_VERSION_MINOR << "." << xbase_VERSION_PATCH << std::endl;
+}
+/*************************************************************************************/
+int main(int argc, char *argv[] )
+{
+
+ // std::cout << "xb_dbfutil initializing" << std::endl;
+ xbXBase x;
+
+ xbString sParm;
+ if (x.GetCmdLineOpt( argc, argv, "-h", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "-?", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "--help", sParm )){
+ PrintHelp();
+ return 1;
+ }
+
+ if ( x.GetCmdLineOpt( argc, argv, "-v", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "--version", sParm )){
+ PrintVersion();
+ return 1;
+ }
+
+ xbUtil u( &x );
+ u.MainMenu();
+ return 0;
+}
diff --git a/src/utils/xb_deletall.cpp b/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_deletall.cpp
index 3a8f6e4..3a8f6e4 100755
--- a/src/utils/xb_deletall.cpp
+++ b/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_deletall.cpp
diff --git a/src/utils/xb_dumpdbt.cpp b/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_dumpdbt.cpp
index 05b7209..05b7209 100755
--- a/src/utils/xb_dumpdbt.cpp
+++ b/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_dumpdbt.cpp
diff --git a/src/utils/xb_dumprecs.cpp b/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_dumprecs.cpp
index cf6e33c..cf6e33c 100755
--- a/src/utils/xb_dumprecs.cpp
+++ b/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_dumprecs.cpp
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_execsql.cpp b/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_execsql.cpp
new file mode 100755
index 0000000..3441e91
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_execsql.cpp
@@ -0,0 +1,130 @@
+/* xb_execsql.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2023 Gary A Kunkel
+
+The xb64 software library is covered under
+the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ xb64-devel@lists.sourceforge.net
+ xb64-users@lists.sourceforge.net
+
+*/
+
+#include <xbase.h>
+using namespace xb;
+
+void PrintHelp();
+void PrintHelp(){
+ std::cout << "Usage: xb_execsql [-h] [-?] [--help] [-v] [--version] -i filename.SQL -q --quiet" << std::endl << std::endl;
+ std::cout << "This program processes sql commands from input file 'filename.SQL'" << std::endl << std::endl;
+}
+void PrintVersion();
+void PrintVersion(){
+ std::cout << "Xbase64 Version: " << xbase_VERSION_MAJOR << "." << xbase_VERSION_MINOR << "." << xbase_VERSION_PATCH << std::endl;
+}
+
+
+xbInt16 GetNextSqlCmd( xbFile &f, xbString &sCmd, xbBool bQuiet );
+xbInt16 GetNextSqlCmd( xbFile &f, xbString &sCmd, xbBool bQuiet ){
+ sCmd = "";
+ xbString sLine;
+ xbInt16 iRc = XB_NO_ERROR;
+ xbUInt32 lPos = 0;
+ xbBool bDone = xbFalse;
+ while( !bDone ){
+ if(( iRc = f.xbFgets( 256, sLine )) != XB_NO_ERROR ){
+ bDone = xbTrue;
+ } else {
+
+ if( !bQuiet ){
+ std::cout << sLine;
+ if( sLine.Pos( 0x0a ) == 0 )
+ std::cout << std::endl;
+ }
+
+ // don't need CR/LF chars
+ sLine.ZapChar( 0x0a );
+ sLine.ZapChar( 0x0d );
+
+ // if comment, zap out everything to the right of the hash
+ lPos = sLine.Pos( '#' );
+ if( lPos > 0 )
+ sLine.Left( lPos - 1);
+
+ if( sLine.Pos( ';' ) > 0 ){
+ bDone = xbTrue;
+ sLine.ZapChar( ';' );
+ }
+ }
+ sCmd += sLine;
+ }
+ return iRc;
+}
+
+
+int main(int argc, char* argv[])
+{
+ xbXBase x;
+ xbSql sql( &x );
+ xbFile f( sql.GetXbasePtr() );
+ xbInt16 iRc = XB_NO_ERROR;
+ xbString sFileName = "";
+ xbString sSqlLine = "";
+ xbString sParm = "";
+ xbBool bQuiet = xbFalse;
+
+ x.EnableMsgLogging();
+
+ if (argc < 2 || x.GetCmdLineOpt( argc, argv, "-h", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "-?", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "--help", sParm )){
+ PrintHelp();
+ return 1;
+ }
+
+ if ( x.GetCmdLineOpt( argc, argv, "-v", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "--version", sParm )){
+ PrintVersion();
+ return 1;
+ }
+
+ if ( x.GetCmdLineOpt( argc, argv, "-q", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "--quiet", sParm )){
+ bQuiet = xbTrue;
+ }
+
+ if( !x.GetCmdLineOpt( argc, argv, "-i", sFileName ) || sFileName == "" ){
+ PrintHelp();
+ return 1;
+ }
+
+
+ if(( iRc = f.xbFopen( "r", sFileName, XB_SINGLE_USER )) != XB_NO_ERROR ){
+ xbString sMsg;
+ sMsg.Sprintf( "Error opening [%s]\n", sFileName.Str() );
+ std::cout << sMsg.Str();
+ sql.GetXbasePtr()->DisplayError( iRc );
+ return 1;
+ }
+
+ while( iRc == XB_NO_ERROR ){
+ iRc = GetNextSqlCmd( f, sSqlLine, bQuiet );
+
+ if( iRc == XB_NO_ERROR ){
+
+ sSqlLine.Trim();
+ // std::cout << "Processing line [" << sSqlLine.Str() << "]\n";
+ iRc = sql.ExecuteNonQuery( sSqlLine );
+ if( iRc != XB_NO_ERROR )
+ x.DisplayError( iRc );
+ }
+ }
+
+ f.xbFclose();
+ return 0;
+}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_import.cpp b/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_import.cpp
new file mode 100755
index 0000000..272a0d0
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_import.cpp
@@ -0,0 +1,242 @@
+/* xb_import.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2023 Gary A Kunkel
+
+The xb64 software library is covered under
+the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ xb64-devel@lists.sourceforge.net
+ xb64-users@lists.sourceforge.net
+
+*/
+
+#include <xbase.h>
+using namespace xb;
+
+
+struct sFldMap{
+ xbUInt32 iRecPos;
+ xbInt16 iFldNo;
+ char cFldType;
+ sFldMap *next;
+};
+
+void PrintHelp();
+void PrintHelp(){
+ std::cout << "Usage: xb_execsql [-h] [-?] [--help] [-v] [--version] -i infilename.txt -d delimeter -t table.DBF -q --quiet" << std::endl << std::endl;
+ std::cout << "This program imports data from a text file into a specified DBF file/table." << std::endl << std::endl;
+}
+void PrintVersion();
+void PrintVersion(){
+ std::cout << "Xbase64 Version: " << xbase_VERSION_MAJOR << "." << xbase_VERSION_MINOR << "." << xbase_VERSION_PATCH << std::endl;
+}
+
+
+
+int main(int argc, char* argv[])
+{
+ xbXBase x;
+ xbSql sql( &x );
+ xbFile f( sql.GetXbasePtr() );
+ xbInt16 iRc = XB_NO_ERROR;
+ xbString sFileName = "";
+ xbString sTableName = "";
+ xbString sSqlLine = "";
+ xbString sParm = "";
+ xbString sMsg;
+ xbString sLine;
+ xbString sFld;
+ xbBool bQuiet = xbFalse;
+ char cDelimiter = ',';
+ char cType = ' ';
+ sFldMap *fmFldList = 0;
+ sFldMap *fmTemp = 0;
+ xbInt16 iFldNo = 0;
+ xbUInt32 ulRecCtr = 0;
+ xbBool bRecUpdated;
+ x.EnableMsgLogging();
+
+
+ if (argc < 2 || x.GetCmdLineOpt( argc, argv, "-h", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "-?", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "--help", sParm )){
+ PrintHelp();
+ return 1;
+ }
+
+ if ( x.GetCmdLineOpt( argc, argv, "-v", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "--version", sParm )){
+ PrintVersion();
+ return 1;
+ }
+
+ if ( x.GetCmdLineOpt( argc, argv, "-q", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "--quiet", sParm )){
+ bQuiet = xbTrue;
+ }
+
+ if ( x.GetCmdLineOpt( argc, argv, "-d", sParm )){
+ if( sParm.Len() > 0 ){
+ cDelimiter = sParm[1];
+ }
+ }
+
+ if( !x.GetCmdLineOpt( argc, argv, "-i", sFileName ) || sFileName == "" ){
+ PrintHelp();
+ return 1;
+ }
+
+ if( !x.GetCmdLineOpt( argc, argv, "-t", sTableName ) || sTableName == "" ){
+ PrintHelp();
+ return 1;
+ }
+
+ xbDbf *MyFile = NULL;
+ if(( iRc = x.OpenHighestVersion( sTableName.Str(), "", &MyFile )) != XB_NO_ERROR ){
+ std::cout << "Could not open table/file RC = " << iRc << " file = " << sTableName.Str() << std::endl;
+ x.DisplayError( iRc );
+ return 1;
+ }
+
+ if(( iRc = f.xbFopen( "r", sFileName, XB_SINGLE_USER )) != XB_NO_ERROR ){
+ sMsg.Sprintf( "Error opening [%s]\n", sFileName.Str() );
+ std::cout << sMsg.Str();
+ x.DisplayError( iRc );
+ return 1;
+ }
+
+
+ if(( iRc = f.xbFgets( 1024, sLine )) != XB_NO_ERROR ){
+ sMsg.Sprintf( "Error reading [%s]\n", sFileName.Str() );
+ std::cout << sMsg.Str();
+ x.DisplayError( iRc );
+ return 1;
+ }
+
+
+ // determine how many fields in a record
+ xbUInt32 lFldCnt = sLine.CountChar( cDelimiter, 1 );
+ // std::cout << "in rec = [" << sLine.Str() << "]\n";
+ // std::cout << "fld cnt = [" << lFldCnt << "]\n";
+
+ // do the mapping between field names in source data and field numbers in target table
+ for( xbUInt32 l = 0; l < (lFldCnt + 1); l++ ){
+
+ // get the field
+ sFld.ExtractElement( sLine.Str(), cDelimiter, l+1, 1 );
+ sFld.ZapTrailingChar( 0x0a ); // eliminate CRLF
+ sFld.ZapTrailingChar( 0x0d ); // eliminate CRLF
+
+
+ // do the lookup
+ // std::cout << "processing field [" << l << "] [" << sFld.Str() << "]\n";
+ // if found, create an entry in the field list structure
+ // else if not quiet, display a message
+
+ //iRc = MyFile->GetFieldNo( sFld, &iFldNo );
+
+ if(( iRc = MyFile->GetFieldNo( sFld, iFldNo )) == XB_NO_ERROR ){
+ MyFile->GetFieldType( iFldNo, cType );
+ fmTemp = (sFldMap *) calloc( 1, sizeof( sFldMap ));
+ if( !fmTemp ){
+ std::cout << "Memory allocation error\n";
+ exit(1);
+ } else {
+ fmTemp->iRecPos = l;
+ fmTemp->iFldNo = iFldNo;
+ fmTemp->cFldType = cType;
+ fmTemp->next = fmFldList;
+ fmFldList = fmTemp;
+
+ }
+ } else {
+ if( !bQuiet ){
+ std::cout << "Field [" << sFld.Str() << "] not found in target table" << std::endl;
+ }
+ }
+ }
+
+
+ while( f.xbFgets( 1024, sLine ) == XB_NO_ERROR ){
+ bRecUpdated = xbFalse;
+ // std::cout << sLine.Str() << "\n";
+
+ if(( iRc = MyFile->BlankRecord()) != XB_NO_ERROR ){
+ sMsg.Sprintf( "MyFile->BlankRecord() error [%d]\n", iRc );
+ std::cout << sMsg.Str();
+ x.DisplayError( iRc );
+ } else {
+
+ fmTemp = fmFldList;
+ while( fmTemp ){
+
+ // std::cout << "*** RecPos = " << fmTemp->iRecPos << " FldNo = " << fmTemp->iFldNo << " Type = " << fmTemp->cFldType << "\n";
+
+ sFld.ExtractElement( sLine.Str(), cDelimiter, fmTemp->iRecPos+1, 1 );
+ sFld.ZapTrailingChar( 0x0a ); // eliminate CRLF
+ sFld.ZapTrailingChar( 0x0d ); // eliminate CRLF
+
+ // remove any matching leading and trailing quotes
+ if( sFld[1] == '\'' && sFld[sFld.Len()] == '\'' ){
+ sFld.ZapTrailingChar( '\'' );
+ sFld.ZapLeadingChar ( '\'' );
+ //std::cout << "DataNq = " << sFld.Str() << "\n";
+ } else if( sFld[1] == '"' && sFld[sFld.Len()] == '"' ){
+ sFld.ZapTrailingChar( '"' );
+ sFld.ZapLeadingChar ( '"' );
+ }
+
+ // std::cout << "Data = " << sFld.Str() << "\n";
+ if( sFld.Len() > 0 ){
+ bRecUpdated = xbTrue;
+ if( fmTemp->cFldType == 'C' || fmTemp->cFldType == 'L' || fmTemp->cFldType == 'D' || fmTemp->cFldType == 'N' || fmTemp->cFldType == 'F' ){
+ iRc = MyFile->PutField( fmTemp->iFldNo, sFld );
+ } else if( fmTemp->cFldType == 'M' ){
+ iRc = MyFile->UpdateMemoField( fmTemp->iFldNo, sFld );
+ } else {
+ std::cout << "Field type [" << fmTemp->cFldType << "] not built yet" << std::endl;
+ }
+
+ if( iRc != XB_NO_ERROR && !bQuiet ){
+ std::cout << "Error [" << iRc << "] on field [" << fmTemp->iFldNo << "] on record [" << ulRecCtr << "]" << std::endl;
+ }
+ }
+ fmTemp = fmTemp->next;
+ }
+
+ if( bRecUpdated ){
+ iRc = MyFile->AppendRecord();
+ if( iRc != XB_NO_ERROR ){
+ if( !bQuiet ){
+ std::cout << "Error [" << iRc << "] on appending record [" << ulRecCtr << "]" << std::endl;
+ }
+ MyFile->Abort();
+ } else {
+ iRc = MyFile->Commit();
+ if( iRc != XB_NO_ERROR ){
+ if( !bQuiet ){
+ std::cout << "Error [" << iRc << "] on appending record [" << ulRecCtr << "]" << std::endl;
+ }
+ MyFile->Abort();
+ }
+ }
+ }
+
+ }
+
+ ulRecCtr++;
+
+ }
+
+
+
+
+
+ f.xbFclose();
+ return 0;
+}
+
diff --git a/src/utils/xb_pack.cpp b/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_pack.cpp
index 0cbba7e..0cbba7e 100755
--- a/src/utils/xb_pack.cpp
+++ b/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_pack.cpp
diff --git a/src/utils/xb_tblinfo.cpp b/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_tblinfo.cpp
index 241642a..241642a 100755
--- a/src/utils/xb_tblinfo.cpp
+++ b/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_tblinfo.cpp
diff --git a/src/utils/xb_undelall.cpp b/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_undelall.cpp
index 5fb1323..5fb1323 100755
--- a/src/utils/xb_undelall.cpp
+++ b/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_undelall.cpp
diff --git a/AUTHORS b/AUTHORS
deleted file mode 100755
index 55cd46a..0000000
--- a/AUTHORS
+++ /dev/null
@@ -1,29 +0,0 @@
-This is a list of the people who are or have worked on the XBASE Library.
-
-Derry Bryson <derry@techass.com> - current maintainer
-Mario Motta - testing and bugfixes
-Serge Smirnov <sw1181@mail.ru> - MSVC stuff and OCAML support
-Frolov Sergey - bugfixes (memory leaks)
-Gary Kunkel - original author
-
-------------------------------------------------------------------------------
-The following is the original AUTHORS file for the xbase library
-------------------------------------------------------------------------------
-This is a partial list of the people that have helped with the xbase
-project and something specific they worked on. Most have worked on more
-than what is listed.
-
-Bob Cotton <bcotton@synix.com> - Clipper NTX index support
-Denis Braussen <postoffice@mail.dotcom.fr> - general support
-Denis Pershin <dyp@inetlab.com> - provided library enhancements
-Eirk Bachman <ebp@geocities.com> - keeper of definitive Xbase spec
-Gabriel Emerson <egabriel@io.com> - provided logo
-Kehl Hubertus <kehlh@hotmail.com> - Xbase to Xbase C++ Perl Converter
-Michael Bedward <mbedward@ozemail.com.au> - Expression logic support
-Paul Foster <paulf@quillandmouse.com> - general support
-Vitaly Fedrushkov <willy@snowyowl.csu.ac.ru> - TV support and more
-
-------------------------------------------------------------------------------
-
-If you are missing and you should be included in this file, please let me
-know at xbase@techass.com. Thanks, Derry Bryson.
diff --git a/NEWS b/NEWS
deleted file mode 100755
index 1dd9edd..0000000
--- a/NEWS
+++ /dev/null
@@ -1,115 +0,0 @@
-Xbase64 (Feb 1, 2023)
-------------------------
-
-
-4.1.0 - 03/02/23
-
-1) Created block read functionality, class xbBlockRead
-2) SQL Updates - Started development of structures needed to support basic
- SQL SELECT statement - SELECT f FROM t WHERE x=z ORDER BY o
- Caveat: **** SQL support is still in development phase ******
-3) Updates to class xbTblMgr functionality
-4) New method xbString::Pos( char c, xbUInt32 ulStartPos )
-5) Updated xb_cfg_check program
-6) Added method xbDbf::GetHeaderLen()
-7) Documentation updates
-8) Updates to SQL Create Table logic
-9) Updates to MDX create tag key length calculation
-10) Updated default log file folder to $HOME/xbase64/logs
-11) Updated default data file folder to $HOME/xbase64/data
-12) Created initial round of man pages for utility programs
-13) Created Debian specific build folder
-
-
-4.0.3 - 12/26/22
-
-1) Additional documentation updates
-2) Updates to the rename methods
-3) Added SQL command - "ALTER TABLE tablename.DBF RENAME TO newname.DBF"
-4) Added SQL command - "DELETE FROM tablename.DBF [WHERE expression]"
-5) Update to xbDbf::DumpRecs method to support deleted records
-6) Update to xbDbf::GetLongField - bug fix
-7) Misc updates to xb_dbfutil program
-8) Added reindex logic to xb_pack utility program
-9) Created method xbString::Replace(s1,s2)
-10) Updates to test program xb_ndx_test
-
-
-
-4.0.2 - 12/15/22 Documentation cleanup and updates.
-
-
-
-4.0.1 - 11/22/22 Rewrite of core library.
-The library has been refreshed (Major rewrite) with release 4.0.1
-
-1) 32/64 bit support.
-2) Big Endian or Little Endian support.
-3) Updates for error handling and exception processing.
-4) DBF III and DBF IV support.
-5) NDX, MDX index support.
-6) DBT Memo file support for both version III and version IV files.
-7) Updates and fixes to record and file locking.
-8) Support for logfile generation
-9) The beginnings of SQL support.
-10) CDX and NTX index support which was available in earlier releases
- is still pending inclusion in the latest library rewrite.
-11) Encapsulated library into a namespace called "xb".
-12) Migrated from autoconf and automake to cmake.
-13) Significant testing.
-14) General library cleanup.
-15) Updated license to be the latest GPL.
-16) Updated xbString method names to be more consistant with the rest of the library.
-17) String functions were updated from 0 based routines to 1 based routines.
-
-
-
-
-Xbase64 (Sept 15, 2003)
-------------------------
-
-Xbase64 was branched off the xbase C++ class lib project and given a new name.
-
-There are significant changes in this release.
-
-1) The original author (Gary Kunkel) has resumed working on the project.
-
-2) The project was branched and renamed to xbase64 with 64 bit file
- processing capabilities. The xbase name is being used by other projects,
- so I thought it was time for a new name.
-
-3) Modified the license from LGPL to GPL as recommended by the GNU web site.
- Files that I have not been able to get permission from the original
- author for GPL terms have beed deleted from the library.
-
-4) Trimmed the tree: Dropped support for the xbHtml class, the turbo vision
- interface, and the ybase directory. These are either unused, not working,
- undocumented, not maintained, or I didn't have authority to change the
- license from LGPL to GPL.
-
-5) Didn't move make files forward that were not documented or working.
- These need to be reviewed and brought forward.
-
-6) Worked on the locking logic.
-
-7) Added support for Borland C++ 5.x compiler.
-
-8) Created a new data type of XB_BOOL. Current bool data type was causing
- issues in certain environments.
-
-9) Dropped support for XB_CASTELLANO dates. Changed the logic to use
- system locale settings, this supports descriptive dates in different
- languages.
-
-10) Cleaned up memory leaks.
-
-11) Updates to the documentation.
-
-12) Enhancements to the expression logic
-
-13) Fixed the broken index logic - the ndx and ntx indices are working
- again.
-
------------------------------------------------------------------------
-For a the historical NEWS file history (pre 9/15/03), review the older
-xbase library.
diff --git a/README b/README
deleted file mode 100755
index 2005427..0000000
--- a/README
+++ /dev/null
@@ -1,45 +0,0 @@
- Xbase64 Version 4.1.1
- 12/26/22
-
-
-WHAT IS IT?
------------
-
-Xbase64 is an xbase (i.e. dBase, FoxPro, etc.) compatible C++ class library
-originally by Gary Kunkel and others (see the AUTHORS file).
-
-Xbase64 is useful for accessing data in legacy dBase 3 and 4 database files as
-well as a general light-weight database engine. It includes support for
-DBF (dBase version 3 and 4) data files, NDX and MDX indices and DBT (dBase version 3 and 4).
-It supports file and record locking under *nix and Windows.
-
-
-DIRECTORY LAYOUT
-----------------
-
- /build/borland5.5 Build library for Borland 5.5 environment
- /build/linux32 Build library for Linux 32 bit environment
- /build/linux64 Build library for Linux 64 bit environment
- /build/mac64 Build library for Mac 64 bit environment
- /build/win32vs Build library for Windows 32 bit Visual Studio environment
- /build/win64vs Build library for Windows 64 bit Visual Studio environment
-
- /data Folder for database files
- /docs Library documentation
- /logs Log files
- /sql SQL files
- /src Library source code
-
-
-
-Starting point
---------------
-
- docs/html/index.html
-
-
-
-
-Please email comments, bug reports, and patches to xdb-dev@lists.sourceforge.net
-
-
diff --git a/TODO b/TODO
deleted file mode 100755
index 13310dd..0000000
--- a/TODO
+++ /dev/null
@@ -1,34 +0,0 @@
-
-XBase 64 todo list as of 11/28/22
-
-Xbase64 TODO's (not necessarily in this order!)
------------------------------------------------
-
-
-1) Additional index support
- - NTX - bring legacy code forward
- - CDX - bring legacy code forward
- - IDX - develop
-
-
-2) SQL support
-
-
-3) Support for DBase Version 5 files
-
-
-4) Transaction support
- Create a logging routine
- put hooks in the PutRecord function to log data
-
-
-5) Real deletes
-
- - analysis
- - test this functionality
- - incorporate into dbfutil1
- - update documentation
- - impact on indices
-
-
-6) Block reads
diff --git a/build/borland5.5/CMakeLists.txt b/build/borland5.5/CMakeLists.txt
deleted file mode 100755
index f514c5c..0000000
--- a/build/borland5.5/CMakeLists.txt
+++ /dev/null
@@ -1,761 +0,0 @@
-cmake_minimum_required(VERSION 3.0)
-
-project (xbase64)
-set( xbase_VERSION_MAJOR 4 )
-set( xbase_VERSION_MINOR 1 )
-set( xbase_VERSION_PATCH 0 )
-
-MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
-MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
-MESSAGE( "--- Project Name: " ${CMAKE_PROJECT_NAME} )
-MESSAGE( "--- Install Prefix: " ${CMAKE_INSTALL_PREFIX} )
-
-#Set compiler options
-
-IF( CMAKE_COMPILER_IS_GNUCXX )
- MESSAGE( "Setting GNU compiler options" )
- add_compile_options( -Wall -Wsign-conversion )
-# add_compile_options( -Wall -Wconversion -Wsign-conversion )
- SET( VERBOSE 1 )
-ENDIF( CMAKE_COMPILER_IS_GNUCXX )
-
-IF( BORLAND )
- MESSAGE ("BORLAND COMPILER" )
- #set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w-8022" )
- add_compile_options( -w-8022 )
-ENDIF( BORLAND )
-
-
-MESSAGE( "--- Checking integer sizes" )
-INCLUDE(CheckTypeSize)
-CHECK_TYPE_SIZE( "short int" SHORT_INT )
-CHECK_TYPE_SIZE( int INT )
-CHECK_TYPE_SIZE( __int32 __INT32 )
-CHECK_TYPE_SIZE( int32_t INT32_T )
-CHECK_TYPE_SIZE( long LONG_INT )
-CHECK_TYPE_SIZE( __int64 __INT64 )
-CHECK_TYPE_SIZE( int64_t INT64_T )
-CHECK_TYPE_SIZE( "long long" LONG_LONG )
-CHECK_TYPE_SIZE( u_int64_t U_INT64_T )
-CHECK_TYPE_SIZE( uint64_t UINT64_T )
-CHECK_TYPE_SIZE( "unsigned __int64" UNSIGNED__INT64 )
-CHECK_TYPE_SIZE( "unsigned long long" UNSIGNED_LONG_LONG )
-
-CHECK_TYPE_SIZE( "double" DOUBLE )
-MESSAGE( "--- Double size = " ${DOUBLE} )
-
-
-#determine how 16 bit integer defined on this platform
-SET( iSize 0 )
-IF( HAVE_SHORT_INT AND ${SHORT_INT} EQUAL 2 )
- SET( xbInt16 "short int" )
- SET( xbUInt16 "unsigned short int" )
- SET( iSize ${SHORT_INT} )
- MESSAGE( "--- xbInt16 = [short int]" )
- MESSAGE( "--- xbUInt16 = [unsigned short int]" )
-
-ENDIF( HAVE_SHORT_INT AND ${SHORT_INT} EQUAL 2 )
-IF( NOT ${iSize} EQUAL 2 )
- MESSAGE( "FATAL_ERROR Could not detect 16 bit integer type" )
- MESSAGE( ${iSize} )
- RETURN()
-ENDIF( NOT ${iSize} EQUAL 2 )
-
-#determine how 32 bit integer defined on this platform
-SET( iSize 0 )
-IF( HAVE_INT AND ${INT} EQUAL 4 )
- SET( xbInt32 int )
- SET( xbUInt32 "unsigned int" )
- SET( iSize ${INT} )
- MESSAGE( "--- xbInt32 = [int]" )
- MESSAGE( "--- xbUInt32 = [unsigned int]" )
-ENDIF( HAVE_INT AND ${INT} EQUAL 4 )
-
-IF(( NOT iSize EQUAL 4 ) AND HAVE___INT32 )
- MESSAGE( __int untested if block - see CMakeLists.txt)
- SET( xbInt32 __int32 )
- SET( xbUInt32 "unsigned __int32" )
- SET( iSize ${__INT} )
- MESSAGE( "--- xbInt32 = [__int]" )
- MESSAGE( "--- xbUInt32 = [unsigned __int]" )
-ENDIF(( NOT iSize EQUAL 4 ) AND HAVE___INT32 )
-
-IF(( NOT iSize EQUAL 4 ) AND HAVE_INT32_T )
- SET( xbInt32 int32_t )
- SET( xbUInt32 "u_int32_t" )
- SET( iSize ${INT32_T} )
- MESSAGE( "--- xbInt32 = [int32_t]" )
- MESSAGE( "--- xbUInt32 = [u_int32_t]" )
-ENDIF(( NOT iSize EQUAL 4 ) AND HAVE_INT32_T )
-
-IF( NOT ${iSize} EQUAL 4 )
- MESSAGE( "FATAL_ERROR Could not detect 32 bit integer type" )
- MESSAGE( ${iSize} )
- RETURN()
-ENDIF( NOT ${iSize} EQUAL 4 )
-
-#determine how 64 bit integer defined on this platform
-SET( iSize 0 )
-IF( HAVE___INT64 )
- SET( xbInt64 __int64 )
- SET( iSize ${__INT64} )
- MESSAGE( "--- xbInt64 = [__int64]" )
-ENDIF( HAVE___INT64 )
-
-IF(( NOT iSize EQUAL 8 ) AND HAVE_INT64_T )
- SET( xbInt64 int64_t )
- SET( iSize ${INT64_T} )
- MESSAGE( "--- xbInt64 = [int64_t]" )
-ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_INT64_T )
-
-IF(( NOT iSize EQUAL 8 ) AND HAVE_LONG_LONG )
- SET( xbInt64 "long long" )
- SET( iSize ${LONG_LONG} )
- MESSAGE( "--- xbInt64 = [long long]" )
-ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_LONG_LONG )
-
-IF( NOT ${iSize} EQUAL 8 )
- MESSAGE( "FATAL_ERROR Could not detect 64 bit integer type" )
- MESSAGE( ${iSize} )
- RETURN()
-ENDIF( NOT ${iSize} EQUAL 8 )
-
-#determine how 64 bit unsigned integer defined on this platform
-SET( iSize 0 )
-IF( HAVE_UNSIGNED__INT64 )
- SET( xbUInt64 "unsigned __int64" )
- SET( iSize ${UNSIGNED__INT64} )
- MESSAGE( "--- xbUInt64 = [unsigned __int64]" )
-ENDIF( HAVE_UNSIGNED__INT64 )
-
-IF(( NOT iSize EQUAL 8 ) AND HAVE_UINT64_T )
- SET( xbUInt64 "uint64_t" )
- SET( iSize ${UINT64_T} )
- MESSAGE( "--- xbUInt64 = [uint64_t]" )
-ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_UINT64_T )
-
-IF(( NOT iSize EQUAL 8 ) AND HAVE_U_INT64_T )
- SET( xbUInt64 u_int64_t )
- SET( iSize ${U_INT64_T} )
- MESSAGE( "--- xbUInt64 = [u_int64_t]" )
-ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_U_INT64_T )
-
-IF(( NOT iSize EQUAL 8 ) AND HAVE_UNSIGNED_LONG_LONG )
- SET( xbUInt64 "unsigned long long" )
- SET( iSize ${UNSIGNED_LONG_LONG} )
- MESSAGE( "--- xbUInt64 = [unsigned long long]" )
-ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_UNSIGNED_LONG_LONG )
-
-IF( NOT ${iSize} EQUAL 8 )
- MESSAGE( "FATAL_ERROR Could not detect 64 bit unsigned integer type" )
- MESSAGE( ${iSize} )
- RETURN()
-ENDIF( NOT ${iSize} EQUAL 8 )
-
-#Library options
-option( BUILD_SHARED_LIBS "Build shared libraries" ON)
-option( XB_DBF3_SUPPORT "Compile DBase File Format Version 3 support" ON)
-option( XB_DBF4_SUPPORT "Compile DBase File Format Version 4 support" ON)
-option( XB_MEMO_SUPPORT "Compile memo field support into library" ON)
-option( XB_NDX_SUPPORT "Compile NDX Index support into library" ON)
-option( XB_MDX_SUPPORT "Compile MDX Index support into library" ON)
-option( XB_LOCKING_SUPPORT "Compile Multi User Locking support into library" ON)
-
-option( XB_LOGGING_SUPPORT "Compile message logging support into library" ON)
-option( XB_LINKLIST_SUPPORT "Compile Link List routines into library" ON)
-option( XB_FUNCTION_SUPPORT "Compile XBase Function support into library" ON)
-option( XB_EXPRESSION_SUPPORT "Compile Expression support into library" ON)
-option( XB_INF_SUPPORT "Compile NDX INF file support into library" ON)
-option( XB_FILTER_SUPPORT "Compile Filter support into library" ON)
-option( XB_BLOCKREAD_SUPPORT "Compile Block Read support into library" ON)
-option( XB_SQL_SUPPORT "Compile SQL support into library - alpha" ON)
-option( XB_DEBUG_SUPPORT "Compile debug logic into library" ON)
-option( XB_UTILS_SUPPORT "Compile utility programs" ON)
-option( XB_EXAMPLES_SUPPORT "Compile example programs" ON)
-
-Message( "--- BUILD_SHARED_LIBS " ${BUILD_SHARED_LIBS})
-Message( "--- XB_DBF3_SUPPORT " ${XB_DBF3_SUPPORT})
-Message( "--- XB_DBF4_SUPPORT " ${XB_DBF4_SUPPORT})
-Message( "--- XB_MEMO_SUPPORT " ${XB_MEMO_SUPPORT})
-Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
-Message( "--- XB_MDX_SUPPORT " ${XB_MDX_SUPPORT})
-Message( "--- XB_LOCKING_SUPPORT " ${XB_LOCKING_SUPPORT})
-Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
-Message( "--- XB_FUNCTION_SUPPORT " ${XB_FUNCTION_SUPPORT})
-Message( "--- XB_EXPRESSION_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_FILTER_SUPPORT " ${XB_FILTER_SUPPORT})
-Message( "--- XB_DEBUG_SUPPORT " ${XB_DEBUG_SUPPORT})
-Message( "--- XB_UTILS_SUPPORT " ${XB_UTILS_SUPPORT})
-Message( "--- XB_EXAMPLES_SUPPORT " ${XB_EXAMPLES_SUPPORT})
-Message( "--- XB_LOGGING_SUPPORT " ${XB_LOGGING_SUPPORT})
-Message( "--- XB_SQL_SUPPORT " ${XB_SQL_SUPPORT})
-Message( "--- XB_INF_SUPPORT " ${XB_INF_SUPPORT})
-
-IF( XB_DEBUG_SUPPORT )
- Message( "--- Adding debug support" )
- set( CMAKE_BUILD_TYPE Debug )
-IF( CMAKE_COMPILER_IS_GNUCXX )
- add_compile_options( -Og )
-ENDIF( CMAKE_COMPILER_IS_GNUCXX )
-ENDIF( XB_DEBUG_SUPPORT )
-
-IF( CMAKE_SIZEOF_VOID_P EQUAL 8 )
- MESSAGE( "--- 64 bit compiler detected" )
- set( XB_PLATFORM "x64" )
- set( XB_PLATFORM_64 1 )
- set( XB_LIBNAME "xbase64" )
-
-ELSE( CMAKE_SIZEOF_VOID_P EQUAL 8 )
- MESSAGE( "--- 32 bit compiler detected" )
- set( XB_PLATFORM "x86" )
- set( XB_PLATFORM_32 1 )
- set( XB_LIBNAME "xbase32" )
-
-ENDIF( CMAKE_SIZEOF_VOID_P EQUAL 8 )
-
-
-#Check for the existence of various header files
-INCLUDE (CheckIncludeFiles)
-CHECK_INCLUDE_FILES (ctype.h HAVE_CTYPE_H)
-CHECK_INCLUDE_FILES (dirent.h HAVE_DIRENT_H)
-CHECK_INCLUDE_FILES (fcntl.h HAVE_FCNTL_H)
-CHECK_INCLUDE_FILES (inttypes.h HAVE_INTTYPES_H)
-CHECK_INCLUDE_FILES (pwd.h HAVE_PWD_H)
-CHECK_INCLUDE_FILES (stdarg.h HAVE_STDARG_H)
-CHECK_INCLUDE_FILES (stdargs.h HAVE_STDARGS_H)
-CHECK_INCLUDE_FILES (string.h HAVE_STRING_H)
-CHECK_INCLUDE_FILES (strings.h HAVE_STRINGS_H)
-CHECK_INCLUDE_FILES (sys/stat.h HAVE_STAT_H)
-CHECK_INCLUDE_FILES (unistd.h HAVE_UNISTD_H)
-CHECK_INCLUDE_FILES (varargs.h HAVE_VARARGS_H)
-CHECK_INCLUDE_FILES (windows.h HAVE_WINDOWS_H)
-
-#Check for the existence of various function calls
-INCLUDE( CheckFunctionExists )
-CHECK_FUNCTION_EXISTS(_close HAVE__CLOSE_F)
-CHECK_FUNCTION_EXISTS(fcntl HAVE_FCNTL_F)
-CHECK_FUNCTION_EXISTS(_fdopen HAVE__FDOPEN_F)
-CHECK_FUNCTION_EXISTS(fopen_s HAVE_FOPEN_S_F)
-CHECK_FUNCTION_EXISTS(_fsopen HAVE__FSOPEN_F)
-CHECK_FUNCTION_EXISTS(_fileno HAVE__FILENO_F)
-CHECK_FUNCTION_EXISTS(fork HAVE_FORK_F)
-CHECK_FUNCTION_EXISTS(_fseeki64 HAVE__FSEEKI64_F)
-CHECK_FUNCTION_EXISTS(fseeko HAVE_FSEEKO_F)
-CHECK_FUNCTION_EXISTS(ftruncate HAVE_FTRUNCATE_F)
-CHECK_FUNCTION_EXISTS(_localtime64_s HAVE__LOCALTIME64_S_F)
-CHECK_FUNCTION_EXISTS(LockFile HAVE_LOCKFILE_F)
-CHECK_FUNCTION_EXISTS(locking HAVE_LOCKING_F)
-CHECK_FUNCTION_EXISTS(_locking HAVE__LOCKING_F)
-CHECK_FUNCTION_EXISTS(_open HAVE__OPEN_F)
-CHECK_FUNCTION_EXISTS(SetEndOfFile HAVE_SETENDOFFILE_F)
-
-CHECK_FUNCTION_EXISTS(vsnprintf HAVE_VSNPRINTF_F)
-CHECK_FUNCTION_EXISTS(_vsnprintf_s HAVE__VSNPRINTF_S_F)
-
-
-CHECK_FUNCTION_EXISTS(getopt HAVE_GETOPT_F)
-
-IF( WIN32 )
-
-# Use CHECK_SYMBOL_EXISTS for the Win32API instead of CHECK_FUNCTION_EXISTS
-# Can't detect inline functions in headers
-# Can't detect due to mismatch of calling conventions
-# Can't detect mangled names
-
-INCLUDE( CheckSymbolExists )
-CHECK_SYMBOL_EXISTS(CreateProcessW Windows.h HAVE_CREATEPROCESSW_F )
-CHECK_SYMBOL_EXISTS(vsprintf_s stdio.h HAVE_VSPRINTF_S_F )
-
-ENDIF ( WIN32 )
-
-# IF( NOT HAVE_SENTENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND BORLAND )
-# # ----fix me----
-# # cmake CHECK_FUNCTION_EXISTS - could not find Borland 5.5 SetEndOfFile
-# Set( HAVE_SETENDOFFILE_F "HAVE_SETENDOFFILE_H" )
-# ENDIF ( NOT HAVE_SENTENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND BORLAND )
-
-IF( NOT HAVE_SETENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND WIN32 )
- # ----fix me----
- # cmake CHECK_FUNCTION_EXISTS - could not find Borland 5.5, or Windows VS 32 bit SetEndOfFile
- Set( HAVE_SETENDOFFILE_F "HAVE_SETENDOFFILE_F" )
-ENDIF ( NOT HAVE_SETENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND WIN32 )
-
-IF( XB_NDX_SUPPORT OR XB_MDX_SUPPORT )
- Set( XB_INDEX_SUPPORT "1" )
-ENDIF( XB_NDX_SUPPORT OR XB_MDX_SUPPORT )
-
-
-# Set directories
-# PROJECT_PARENT_DIR is two nodes higher
-get_filename_component( PROJECT_PARENT_DIR ${PROJECT_BINARY_DIR} DIRECTORY )
-get_filename_component( PROJECT_PARENT_DIR ${PROJECT_PARENT_DIR} DIRECTORY )
-
-# MESSAGE( "PROJECT_PARENT_DIR = " ${PROJECT_PARENT_DIR} )
-# MESSAGE( "PROJECT_BINARY_DIR = " ${PROJECT_BINARY_DIR} )
-
-
-set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin/${XB_PLATFORM})
-set( LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib/${XB_PLATFORM})
-set( PROJECT_SOURCE_DIR ${PROJECT_PARENT_DIR}/src)
-set( PROJECT_DATA_DIR ${PROJECT_PARENT_DIR}/data/)
-set( PROJECT_LOG_DIR ${PROJECT_PARENT_DIR}/logs/)
-set( EXTRA_LIBS ${EXTRA_LIBS} ${XB_LIBNAME})
-
-
-
-# Undo bad decisions
-IF( XB_PLATFORM_32 AND XB_LARGEFILE_SUPPORT )
- MESSAGE( "--- Can't build 64 bit environment with a 32 bit compiler" )
- MESSAGE( "--- XB_LARGEFILE_SUPPORT set to OFF" )
- set( XB_LARGEFILE_SUPPORT OFF CACHE BOOL "Use 64 bit large file support?" FORCE )
-ENDIF ( XB_PLATFORM_32 AND XB_LARGEFILE_SUPPORT )
-
-IF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
- MESSAGE( "--- At lease one file format is required. Defaulting to Version 4" )
- set( XB_DBF4_SUPPORT ON CACHE BOOL "Compile DBase File Format Version 4 support" FORCE )
-ENDIF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
-
-IF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
- MESSAGE( "--- Link List support required for DBF V4 Memo files. Setting to ON" )
- set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
-ENDIF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
-
-IF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
- MESSAGE( "--- Link List support required for locking functions. Setting to ON" )
- set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
-ENDIF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
-
-IF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
- MESSAGE( "--- Expression required for indices. Setting to ON" )
- set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
-ENDIF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
-
-IF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
- MESSAGE( "--- Function support required for expressions. Setting to ON" )
- set( XB_FUNCTION_SUPPORT ON CACHE BOOL "Compile XBase Function support into library" FORCE )
-ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
-
-IF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
- MESSAGE( "--- Linklist support required for expressions. Setting to ON" )
- set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
-ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
-
-IF( XB_SQL_SUPPORT AND NOT XB_MEMO_SUPPORT )
- MESSAGE( "--- Memo support required for SQL. Setting to ON" )
- set( XB_MEMO_SUPPORT ON CACHE BOOL "Compile memo field support into library" FORCE )
-ENDIF( XB_SQL_SUPPORT AND NOT XB_MEMO_SUPPORT )
-
-IF( XB_SQL_SUPPORT AND NOT XB_DBF4_SUPPORT )
- MESSAGE( "--- DBF4 support required for SQL. Setting to ON" )
- set( XB_DBF4_SUPPORT ON CACHE BOOL "Compile DBase File Format Version 4 support" FORCE )
-ENDIF( XB_SQL_SUPPORT AND NOT XB_DBF4_SUPPORT )
-
-IF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
- MESSAGE( "--- Expression required for filters. Setting to ON" )
- set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
-ENDIF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
-
-IF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
- MESSAGE( "--- BLOCKREAD support required for SQL. Setting to ON" )
- set( XB_BLOCKREAD_SUPPORT ON CACHE BOOL "Compile Block Read support into library" FORCE )
-ENDIF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
-
-
-# Build configuration header file
-configure_file (
- "${PROJECT_SOURCE_DIR}/include/xbconfig.h.in"
- "${PROJECT_BINARY_DIR}/include/xbconfig.h"
-)
-
-# Microsoft Windows settings
-IF( WIN32 )
-# add_definitions( /D_CRT_SECURE_NO_WARNINGS)
- add_definitions( /EHsc )
-ENDIF( WIN32 )
-
-
-# set up include directories
-include_directories( "${PROJECT_BINARY_DIR}/include" )
-include_directories( "${PROJECT_SOURCE_DIR}/include" )
-
-#build the library
-IF ( BUILD_SHARED_LIBS )
- set( LIB_TYPE SHARED )
-ELSE( BUILD_SHARED_LIBS )
- set( LIB_TYPE STATIC )
-ENDIF( BUILD_SHARED_LIBS )
-MESSAGE( "--- Lib type " ${LIB_TYPE} )
-
-
-
-set (SOURCES ${PROJECT_SOURCE_DIR}/core/xbstring.cpp
- ${PROJECT_SOURCE_DIR}/core/xbssv.cpp
- ${PROJECT_SOURCE_DIR}/core/xbdate.cpp
- ${PROJECT_SOURCE_DIR}/core/xbtblmgr.cpp
- ${PROJECT_SOURCE_DIR}/core/xbxbase.cpp
- ${PROJECT_SOURCE_DIR}/core/xbfile.cpp
- ${PROJECT_SOURCE_DIR}/core/xbdbf.cpp
- ${PROJECT_SOURCE_DIR}/core/xbfields.cpp
- ${PROJECT_SOURCE_DIR}/core/xblog.cpp)
-
-IF( XB_MEMO_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo.cpp )
-ENDIF( XB_MEMO_SUPPORT )
-
-IF( XB_DBF3_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbdbf3.cpp )
- IF( XB_MEMO_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo3.cpp )
- ENDIF( XB_MEMO_SUPPORT )
-ENDIF( XB_DBF3_SUPPORT )
-
-IF( XB_DBF4_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbdbf4.cpp )
- IF( XB_MEMO_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo4.cpp )
- ENDIF( XB_MEMO_SUPPORT )
-ENDIF( XB_DBF4_SUPPORT )
-
-IF( XB_FUNCTION_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbfuncs.cpp )
-ENDIF( XB_FUNCTION_SUPPORT )
-
-IF( XB_EXPRESSION_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbexpnode.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbexp.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbuda.cpp )
-ENDIF( XB_EXPRESSION_SUPPORT )
-
-IF( XB_INDEX_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbbcd.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixbase.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbtag.cpp )
-ENDIF( XB_INDEX_SUPPORT )
-
-IF( XB_NDX_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixndx.cpp )
-ENDIF( XB_NDX_SUPPORT )
-
-
-IF( XB_MDX_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixmdx.cpp )
-ENDIF( XB_MDX_SUPPORT )
-
-IF( XB_SQL_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbalttbl.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrix.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrtbl.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdelete.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdrpix.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdrptbl.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbinsert.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbset.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbsql.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbstmt.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbselect.cpp )
-ENDIF( XB_SQL_SUPPORT )
-
-
-IF( XB_FILTER_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbfilter.cpp )
-ENDIF( XB_FILTER_SUPPORT )
-
-IF( XB_BLOCKREAD_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbblockread.cpp )
-ENDIF( XB_BLOCKREAD_SUPPORT )
-
-
-include( GenerateExportHeader )
-#add_library( xbase ${LIB_TYPE} ${SOURCES} )
-add_library( ${XB_LIBNAME} ${LIB_TYPE} ${SOURCES} )
-#add_library( ${CMAKE_PROJECT_NAME} ${LIB_TYPE} ${SOURCES} )
-
-
-IF( WIN32 )
-MESSAGE( "--- Generating Windows Library Headers" )
-
-#GENERATE_EXPORT_HEADER( xbase
-# BASE_NAME xbase
-
-GENERATE_EXPORT_HEADER( ${XB_LIBNAME}
- BASE_NAME ${XB_LIBNAME}
- EXPORT_MACRO_NAME xbase_EXPORT
- EXPORT_FILE_NAME xbase_Export.h
- STATIC_DEFINE xbase_BUILT_AS_STATIC
-)
-ENDIF( WIN32 )
-
-
-#build test programs
-enable_testing()
-
-add_executable( xb_test_string ${PROJECT_SOURCE_DIR}/tests/xb_test_string.cpp )
-target_link_libraries( xb_test_string ${EXTRA_LIBS})
-add_test( NAME xbString COMMAND xb_test_string QUIET )
-
-add_executable( xb_test_date ${PROJECT_SOURCE_DIR}/tests/xb_test_date.cpp )
-target_link_libraries( xb_test_date ${EXTRA_LIBS})
-add_test( NAME xbDate COMMAND xb_test_date QUIET )
-
-add_executable( xb_test_tblmgr ${PROJECT_SOURCE_DIR}/tests/xb_test_tblmgr.cpp )
-target_link_libraries( xb_test_tblmgr ${EXTRA_LIBS})
-add_test( NAME xbTblMgr COMMAND xb_test_tblmgr QUIET )
-
-add_executable( xb_test_xbase ${PROJECT_SOURCE_DIR}/tests/xb_test_xbase.cpp )
-target_link_libraries( xb_test_xbase ${EXTRA_LIBS})
-add_test( NAME xbXBase COMMAND xb_test_xbase QUIET )
-
-add_executable( xb_test_file ${PROJECT_SOURCE_DIR}/tests/xb_test_file.cpp )
-target_link_libraries( xb_test_file ${EXTRA_LIBS})
-add_test( NAME xbFile COMMAND xb_test_file QUIET )
-
-add_executable( xb_test_log ${PROJECT_SOURCE_DIR}/tests/xb_test_log.cpp )
-target_link_libraries( xb_test_log ${EXTRA_LIBS})
-add_test( NAME xbLog COMMAND xb_test_log QUIET )
-
-IF( XB_LINKLIST_SUPPORT )
-add_executable( xb_test_linklist ${PROJECT_SOURCE_DIR}/tests/xb_test_linklist.cpp )
-target_link_libraries( xb_test_linklist ${EXTRA_LIBS})
-add_test( NAME xbLinkList COMMAND xb_test_linklist QUIET )
-ENDIF( XB_LINKLIST_SUPPORT )
-
-IF( XB_DBF3_SUPPORT )
-add_executable( xb_test_dbf_v3_nomemos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v3_nomemos.cpp )
-target_link_libraries( xb_test_dbf_v3_nomemos ${EXTRA_LIBS})
-add_test( NAME xbDbfV3NoMemos COMMAND xb_test_dbf_v3_nomemos QUIET )
-
-IF( XB_MEMO_SUPPORT )
-add_executable( xb_test_dbf_v3_memos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v3_memos.cpp )
-target_link_libraries( xb_test_dbf_v3_memos ${EXTRA_LIBS})
-add_test( NAME xbDbfV3Memos COMMAND xb_test_dbf_v3_memos QUIET )
-
-ENDIF( XB_MEMO_SUPPORT )
-ENDIF( XB_DBF3_SUPPORT )
-
-IF( XB_DBF4_SUPPORT )
-add_executable( xb_test_dbf_v4_nomemos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v4_nomemos.cpp )
-target_link_libraries( xb_test_dbf_v4_nomemos ${EXTRA_LIBS})
-add_test( NAME xbDbfV4NoMemos COMMAND xb_test_dbf_v4_nomemos QUIET )
-
-IF( XB_MEMO_SUPPORT )
-add_executable( xb_test_dbf_v4_memos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v4_memos.cpp )
-target_link_libraries( xb_test_dbf_v4_memos ${EXTRA_LIBS})
-add_test( NAME xbDbfV4Memos COMMAND xb_test_dbf_v4_memos QUIET )
-
-ENDIF( XB_MEMO_SUPPORT )
-ENDIF( XB_DBF4_SUPPORT )
-
-IF( XB_FUNCTION_SUPPORT )
-add_executable( xb_test_funcs ${PROJECT_SOURCE_DIR}/tests/xb_test_funcs.cpp )
-target_link_libraries( xb_test_funcs ${EXTRA_LIBS})
-add_test( NAME xbFunctions COMMAND xb_test_funcs QUIET )
-ENDIF( XB_FUNCTION_SUPPORT )
-
-IF( XB_NDX_SUPPORT )
-IF( XB_DBF3_SUPPORT )
-add_executable( xb_test_ndx ${PROJECT_SOURCE_DIR}/tests/xb_test_ndx.cpp )
-target_link_libraries( xb_test_ndx ${EXTRA_LIBS})
-add_test( NAME xbIxNdx COMMAND xb_test_ndx QUIET )
-ENDIF( XB_DBF3_SUPPORT )
-ENDIF( XB_NDX_SUPPORT )
-
-IF( XB_MDX_SUPPORT )
-IF( XB_DBF4_SUPPORT )
-add_executable( xb_test_mdx ${PROJECT_SOURCE_DIR}/tests/xb_test_mdx.cpp )
-target_link_libraries( xb_test_mdx ${EXTRA_LIBS})
-add_test( NAME xbIxMdx COMMAND xb_test_mdx QUIET )
-ENDIF( XB_DBF4_SUPPORT )
-ENDIF( XB_MDX_SUPPORT )
-
-IF( XB_INDEX_SUPPORT )
-add_executable( xb_test_bcd ${PROJECT_SOURCE_DIR}/tests/xb_test_bcd.cpp )
-target_link_libraries( xb_test_bcd ${EXTRA_LIBS})
-add_test( NAME xbBcd COMMAND xb_test_bcd QUIET )
-ENDIF( XB_INDEX_SUPPORT )
-
-
-IF( XB_EXPRESSION_SUPPORT )
-
-add_executable( xb_test_expnode ${PROJECT_SOURCE_DIR}/tests/xb_test_expnode.cpp )
-target_link_libraries( xb_test_expnode ${EXTRA_LIBS})
-add_test( NAME xbExpNode COMMAND xb_test_expnode QUIET )
-
-
-add_executable( xb_test_expression ${PROJECT_SOURCE_DIR}/tests/xb_test_expression.cpp )
-target_link_libraries( xb_test_expression ${EXTRA_LIBS})
-add_test( NAME xbExpressions COMMAND xb_test_expression QUIET )
-
-add_executable( xb_test_uda ${PROJECT_SOURCE_DIR}/tests/xb_test_uda.cpp )
-target_link_libraries( xb_test_uda ${EXTRA_LIBS})
-add_test( NAME xbUda COMMAND xb_test_uda QUIET )
-
-ENDIF( XB_EXPRESSION_SUPPORT )
-
-IF( XB_SQL_SUPPORT )
-add_executable( xb_test_sql ${PROJECT_SOURCE_DIR}/tests/xb_test_sql.cpp )
-target_link_libraries( xb_test_sql ${EXTRA_LIBS})
-add_test( NAME xbSql COMMAND xb_test_sql QUIET )
-ENDIF( XB_SQL_SUPPORT )
-
-IF( XB_FILTER_SUPPORT )
-add_executable( xb_test_filter ${PROJECT_SOURCE_DIR}/tests/xb_test_filter.cpp )
-target_link_libraries( xb_test_filter ${EXTRA_LIBS})
-add_test( NAME xbFilter COMMAND xb_test_filter QUIET )
-ENDIF( XB_FILTER_SUPPORT )
-
-IF( XB_BLOCKREAD_SUPPORT )
-add_executable( xb_test_blockread ${PROJECT_SOURCE_DIR}/tests/xb_test_blockread.cpp )
-target_link_libraries( xb_test_blockread ${EXTRA_LIBS})
-add_test( NAME xbBlockRead COMMAND xb_test_blockread QUIET )
-ENDIF( XB_BLOCKREAD_SUPPORT )
-
-
-IF( XB_LOCKING_SUPPORT )
-add_executable( xb_test_lock ${PROJECT_SOURCE_DIR}/tests/xb_test_lock.cpp )
-target_link_libraries( xb_test_lock ${EXTRA_LIBS})
-add_test( NAME xbLock COMMAND xb_test_lock QUIET )
-IF( HAVE_CREATEPROCESSW_F )
-add_executable( xb_test_lock2 ${PROJECT_SOURCE_DIR}/tests/xb_test_lock2.cpp )
-target_link_libraries( xb_test_lock2 ${EXTRA_LIBS})
-ENDIF( HAVE_CREATEPROCESSW_F )
-ENDIF( XB_LOCKING_SUPPORT )
-
-#build example programs
-IF( XB_EXAMPLES_SUPPORT )
- add_executable( xb_ex_string ${PROJECT_SOURCE_DIR}/examples/xb_ex_string.cpp )
- target_link_libraries( xb_ex_string ${EXTRA_LIBS})
-
- add_executable( xb_ex_date ${PROJECT_SOURCE_DIR}/examples/xb_ex_date.cpp )
- target_link_libraries( xb_ex_date ${EXTRA_LIBS})
-
- IF( XB_DBF3_SUPPORT )
- add_executable( xb_ex_v3_create_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v3_create_dbf.cpp )
- target_link_libraries( xb_ex_v3_create_dbf ${EXTRA_LIBS})
-
- add_executable( xb_ex_v3_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v3_upd_dbf.cpp )
- target_link_libraries( xb_ex_v3_upd_dbf ${EXTRA_LIBS})
- ENDIF( XB_DBF3_SUPPORT )
-
- IF( XB_DBF4_SUPPORT )
- add_executable( xb_ex_v4_create_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_create_dbf.cpp )
- target_link_libraries( xb_ex_v4_create_dbf ${EXTRA_LIBS})
- ENDIF( XB_DBF4_SUPPORT )
-
- IF( XB_EXPRESSION_SUPPORT )
- add_executable( xb_ex_expression ${PROJECT_SOURCE_DIR}/examples/xb_ex_expression.cpp )
- target_link_libraries( xb_ex_expression ${EXTRA_LIBS})
- ENDIF( XB_EXPRESSION_SUPPORT )
-
- add_executable( xb_ex_v4_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_upd_dbf.cpp )
- target_link_libraries( xb_ex_v4_upd_dbf ${EXTRA_LIBS})
-
- add_executable( xb_ex_ssv ${PROJECT_SOURCE_DIR}/examples/xb_ex_ssv.cpp )
- target_link_libraries( xb_ex_ssv ${EXTRA_LIBS})
-
-ENDIF( XB_EXAMPLES_SUPPORT )
-
-#build utility programs
-IF( XB_UTILS_SUPPORT )
-
- add_executable( xb_cfg_check ${PROJECT_SOURCE_DIR}/utils/xb_cfg_check.cpp )
- target_link_libraries( xb_cfg_check ${EXTRA_LIBS})
-
- add_executable( xb_copydbf ${PROJECT_SOURCE_DIR}/utils/xb_copydbf.cpp )
- target_link_libraries( xb_copydbf ${EXTRA_LIBS})
-
- add_executable( xb_dbfutil ${PROJECT_SOURCE_DIR}/utils/xb_dbfutil.cpp )
- target_link_libraries( xb_dbfutil ${EXTRA_LIBS})
-
- add_executable( xb_deletall ${PROJECT_SOURCE_DIR}/utils/xb_deletall.cpp )
- target_link_libraries( xb_deletall ${EXTRA_LIBS})
-
- add_executable( xb_dumpdbt ${PROJECT_SOURCE_DIR}/utils/xb_dumpdbt.cpp )
- target_link_libraries( xb_dumpdbt ${EXTRA_LIBS})
-
- add_executable( xb_dumprecs ${PROJECT_SOURCE_DIR}/utils/xb_dumprecs.cpp )
- target_link_libraries( xb_dumprecs ${EXTRA_LIBS})
-
- add_executable( xb_tblinfo ${PROJECT_SOURCE_DIR}/utils/xb_tblinfo.cpp )
- target_link_libraries( xb_tblinfo ${EXTRA_LIBS})
-
- IF( XB_SQL_SUPPORT )
- add_executable( xb_execsql ${PROJECT_SOURCE_DIR}/utils/xb_execsql.cpp )
- target_link_libraries( xb_execsql ${EXTRA_LIBS})
- ENDIF( XB_SQL_SUPPORT )
-
- add_executable( xb_pack ${PROJECT_SOURCE_DIR}/utils/xb_pack.cpp )
- target_link_libraries( xb_pack ${EXTRA_LIBS})
-
- add_executable( xb_undelall ${PROJECT_SOURCE_DIR}/utils/xb_undelall.cpp )
- target_link_libraries( xb_undelall ${EXTRA_LIBS})
-
- install (TARGETS xb_cfg_check DESTINATION bin)
- install (TARGETS xb_copydbf DESTINATION bin)
- install (TARGETS xb_dbfutil DESTINATION bin)
- install (TARGETS xb_deletall DESTINATION bin)
- install (TARGETS xb_dumpdbt DESTINATION bin)
- install (TARGETS xb_dumprecs DESTINATION bin)
- install (TARGETS xb_pack DESTINATION bin)
- install (TARGETS xb_undelall DESTINATION bin)
- IF( XB_SQL_SUPPORT )
- install (TARGETS xb_execsql DESTINATION bin)
- ENDIF( XB_SQL_SUPPORT )
-
-
-
-ENDIF( XB_UTILS_SUPPORT )
-
-install (FILES include/xbconfig.h
- ${PROJECT_SOURCE_DIR}/include/xbase.h
- ${PROJECT_SOURCE_DIR}/include/xbbcd.h
- ${PROJECT_SOURCE_DIR}/include/xbdate.h
- ${PROJECT_SOURCE_DIR}/include/xbdbf.h
- ${PROJECT_SOURCE_DIR}/include/xbexp.h
- ${PROJECT_SOURCE_DIR}/include/xbexpnode.h
- ${PROJECT_SOURCE_DIR}/include/xbfile.h
- ${PROJECT_SOURCE_DIR}/include/xbindex.h
- ${PROJECT_SOURCE_DIR}/include/xblnklst.h
- ${PROJECT_SOURCE_DIR}/include/xblnklstord.h
- ${PROJECT_SOURCE_DIR}/include/xblnknod.h
- ${PROJECT_SOURCE_DIR}/include/xblog.h
- ${PROJECT_SOURCE_DIR}/include/xbmemo.h
- ${PROJECT_SOURCE_DIR}/include/xbretcod.h
- ${PROJECT_SOURCE_DIR}/include/xbsql.h
- ${PROJECT_SOURCE_DIR}/include/xbssv.h
- ${PROJECT_SOURCE_DIR}/include/xbstring.h
- ${PROJECT_SOURCE_DIR}/include/xbtblmgr.h
- ${PROJECT_SOURCE_DIR}/include/xbtypes.h
- ${PROJECT_SOURCE_DIR}/include/xbxbase.h
- ${PROJECT_SOURCE_DIR}/include/xbuda.h
- ${PROJECT_SOURCE_DIR}/include/xbtag.h
- ${PROJECT_SOURCE_DIR}/include/xbfilter.h
- ${PROJECT_SOURCE_DIR}/include/xbblkread.h
- ${PROJECT_SOURCE_DIR}/include/xbsql.h
-
- DESTINATION include/${CMAKE_PROJECT_NAME})
-
-IF( NOT WIN32 )
-install (FILES ${PROJECT_PARENT_DIR}/docs/man/xb_cfg_chk.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_copydbf.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_dbfutil.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_deletall.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_dumpdbt.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_dumprecs.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_pack.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_tblinfo.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_undelall.1.gz
-
- DESTINATION man/man1)
-
-ENDIF( NOT WIN32 )
-
-
-SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.1.0 SOVERSION 0 )
-
-IF( EXISTS /usr/local/lib64 )
-install (TARGETS ${XB_LIBNAME} DESTINATION lib64/${CMAKE_PROJECT_NAME})
-ELSE( EXISTS /usr/local/lib64 )
-install (TARGETS ${XB_LIBNAME} DESTINATION lib/${CMAKE_PROJECT_NAME})
-ENDIF( EXISTS /usr/local/lib64 )
-
-
diff --git a/build/debian/CMakeLists.txt b/build/debian/CMakeLists.txt
deleted file mode 100755
index f514c5c..0000000
--- a/build/debian/CMakeLists.txt
+++ /dev/null
@@ -1,761 +0,0 @@
-cmake_minimum_required(VERSION 3.0)
-
-project (xbase64)
-set( xbase_VERSION_MAJOR 4 )
-set( xbase_VERSION_MINOR 1 )
-set( xbase_VERSION_PATCH 0 )
-
-MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
-MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
-MESSAGE( "--- Project Name: " ${CMAKE_PROJECT_NAME} )
-MESSAGE( "--- Install Prefix: " ${CMAKE_INSTALL_PREFIX} )
-
-#Set compiler options
-
-IF( CMAKE_COMPILER_IS_GNUCXX )
- MESSAGE( "Setting GNU compiler options" )
- add_compile_options( -Wall -Wsign-conversion )
-# add_compile_options( -Wall -Wconversion -Wsign-conversion )
- SET( VERBOSE 1 )
-ENDIF( CMAKE_COMPILER_IS_GNUCXX )
-
-IF( BORLAND )
- MESSAGE ("BORLAND COMPILER" )
- #set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w-8022" )
- add_compile_options( -w-8022 )
-ENDIF( BORLAND )
-
-
-MESSAGE( "--- Checking integer sizes" )
-INCLUDE(CheckTypeSize)
-CHECK_TYPE_SIZE( "short int" SHORT_INT )
-CHECK_TYPE_SIZE( int INT )
-CHECK_TYPE_SIZE( __int32 __INT32 )
-CHECK_TYPE_SIZE( int32_t INT32_T )
-CHECK_TYPE_SIZE( long LONG_INT )
-CHECK_TYPE_SIZE( __int64 __INT64 )
-CHECK_TYPE_SIZE( int64_t INT64_T )
-CHECK_TYPE_SIZE( "long long" LONG_LONG )
-CHECK_TYPE_SIZE( u_int64_t U_INT64_T )
-CHECK_TYPE_SIZE( uint64_t UINT64_T )
-CHECK_TYPE_SIZE( "unsigned __int64" UNSIGNED__INT64 )
-CHECK_TYPE_SIZE( "unsigned long long" UNSIGNED_LONG_LONG )
-
-CHECK_TYPE_SIZE( "double" DOUBLE )
-MESSAGE( "--- Double size = " ${DOUBLE} )
-
-
-#determine how 16 bit integer defined on this platform
-SET( iSize 0 )
-IF( HAVE_SHORT_INT AND ${SHORT_INT} EQUAL 2 )
- SET( xbInt16 "short int" )
- SET( xbUInt16 "unsigned short int" )
- SET( iSize ${SHORT_INT} )
- MESSAGE( "--- xbInt16 = [short int]" )
- MESSAGE( "--- xbUInt16 = [unsigned short int]" )
-
-ENDIF( HAVE_SHORT_INT AND ${SHORT_INT} EQUAL 2 )
-IF( NOT ${iSize} EQUAL 2 )
- MESSAGE( "FATAL_ERROR Could not detect 16 bit integer type" )
- MESSAGE( ${iSize} )
- RETURN()
-ENDIF( NOT ${iSize} EQUAL 2 )
-
-#determine how 32 bit integer defined on this platform
-SET( iSize 0 )
-IF( HAVE_INT AND ${INT} EQUAL 4 )
- SET( xbInt32 int )
- SET( xbUInt32 "unsigned int" )
- SET( iSize ${INT} )
- MESSAGE( "--- xbInt32 = [int]" )
- MESSAGE( "--- xbUInt32 = [unsigned int]" )
-ENDIF( HAVE_INT AND ${INT} EQUAL 4 )
-
-IF(( NOT iSize EQUAL 4 ) AND HAVE___INT32 )
- MESSAGE( __int untested if block - see CMakeLists.txt)
- SET( xbInt32 __int32 )
- SET( xbUInt32 "unsigned __int32" )
- SET( iSize ${__INT} )
- MESSAGE( "--- xbInt32 = [__int]" )
- MESSAGE( "--- xbUInt32 = [unsigned __int]" )
-ENDIF(( NOT iSize EQUAL 4 ) AND HAVE___INT32 )
-
-IF(( NOT iSize EQUAL 4 ) AND HAVE_INT32_T )
- SET( xbInt32 int32_t )
- SET( xbUInt32 "u_int32_t" )
- SET( iSize ${INT32_T} )
- MESSAGE( "--- xbInt32 = [int32_t]" )
- MESSAGE( "--- xbUInt32 = [u_int32_t]" )
-ENDIF(( NOT iSize EQUAL 4 ) AND HAVE_INT32_T )
-
-IF( NOT ${iSize} EQUAL 4 )
- MESSAGE( "FATAL_ERROR Could not detect 32 bit integer type" )
- MESSAGE( ${iSize} )
- RETURN()
-ENDIF( NOT ${iSize} EQUAL 4 )
-
-#determine how 64 bit integer defined on this platform
-SET( iSize 0 )
-IF( HAVE___INT64 )
- SET( xbInt64 __int64 )
- SET( iSize ${__INT64} )
- MESSAGE( "--- xbInt64 = [__int64]" )
-ENDIF( HAVE___INT64 )
-
-IF(( NOT iSize EQUAL 8 ) AND HAVE_INT64_T )
- SET( xbInt64 int64_t )
- SET( iSize ${INT64_T} )
- MESSAGE( "--- xbInt64 = [int64_t]" )
-ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_INT64_T )
-
-IF(( NOT iSize EQUAL 8 ) AND HAVE_LONG_LONG )
- SET( xbInt64 "long long" )
- SET( iSize ${LONG_LONG} )
- MESSAGE( "--- xbInt64 = [long long]" )
-ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_LONG_LONG )
-
-IF( NOT ${iSize} EQUAL 8 )
- MESSAGE( "FATAL_ERROR Could not detect 64 bit integer type" )
- MESSAGE( ${iSize} )
- RETURN()
-ENDIF( NOT ${iSize} EQUAL 8 )
-
-#determine how 64 bit unsigned integer defined on this platform
-SET( iSize 0 )
-IF( HAVE_UNSIGNED__INT64 )
- SET( xbUInt64 "unsigned __int64" )
- SET( iSize ${UNSIGNED__INT64} )
- MESSAGE( "--- xbUInt64 = [unsigned __int64]" )
-ENDIF( HAVE_UNSIGNED__INT64 )
-
-IF(( NOT iSize EQUAL 8 ) AND HAVE_UINT64_T )
- SET( xbUInt64 "uint64_t" )
- SET( iSize ${UINT64_T} )
- MESSAGE( "--- xbUInt64 = [uint64_t]" )
-ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_UINT64_T )
-
-IF(( NOT iSize EQUAL 8 ) AND HAVE_U_INT64_T )
- SET( xbUInt64 u_int64_t )
- SET( iSize ${U_INT64_T} )
- MESSAGE( "--- xbUInt64 = [u_int64_t]" )
-ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_U_INT64_T )
-
-IF(( NOT iSize EQUAL 8 ) AND HAVE_UNSIGNED_LONG_LONG )
- SET( xbUInt64 "unsigned long long" )
- SET( iSize ${UNSIGNED_LONG_LONG} )
- MESSAGE( "--- xbUInt64 = [unsigned long long]" )
-ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_UNSIGNED_LONG_LONG )
-
-IF( NOT ${iSize} EQUAL 8 )
- MESSAGE( "FATAL_ERROR Could not detect 64 bit unsigned integer type" )
- MESSAGE( ${iSize} )
- RETURN()
-ENDIF( NOT ${iSize} EQUAL 8 )
-
-#Library options
-option( BUILD_SHARED_LIBS "Build shared libraries" ON)
-option( XB_DBF3_SUPPORT "Compile DBase File Format Version 3 support" ON)
-option( XB_DBF4_SUPPORT "Compile DBase File Format Version 4 support" ON)
-option( XB_MEMO_SUPPORT "Compile memo field support into library" ON)
-option( XB_NDX_SUPPORT "Compile NDX Index support into library" ON)
-option( XB_MDX_SUPPORT "Compile MDX Index support into library" ON)
-option( XB_LOCKING_SUPPORT "Compile Multi User Locking support into library" ON)
-
-option( XB_LOGGING_SUPPORT "Compile message logging support into library" ON)
-option( XB_LINKLIST_SUPPORT "Compile Link List routines into library" ON)
-option( XB_FUNCTION_SUPPORT "Compile XBase Function support into library" ON)
-option( XB_EXPRESSION_SUPPORT "Compile Expression support into library" ON)
-option( XB_INF_SUPPORT "Compile NDX INF file support into library" ON)
-option( XB_FILTER_SUPPORT "Compile Filter support into library" ON)
-option( XB_BLOCKREAD_SUPPORT "Compile Block Read support into library" ON)
-option( XB_SQL_SUPPORT "Compile SQL support into library - alpha" ON)
-option( XB_DEBUG_SUPPORT "Compile debug logic into library" ON)
-option( XB_UTILS_SUPPORT "Compile utility programs" ON)
-option( XB_EXAMPLES_SUPPORT "Compile example programs" ON)
-
-Message( "--- BUILD_SHARED_LIBS " ${BUILD_SHARED_LIBS})
-Message( "--- XB_DBF3_SUPPORT " ${XB_DBF3_SUPPORT})
-Message( "--- XB_DBF4_SUPPORT " ${XB_DBF4_SUPPORT})
-Message( "--- XB_MEMO_SUPPORT " ${XB_MEMO_SUPPORT})
-Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
-Message( "--- XB_MDX_SUPPORT " ${XB_MDX_SUPPORT})
-Message( "--- XB_LOCKING_SUPPORT " ${XB_LOCKING_SUPPORT})
-Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
-Message( "--- XB_FUNCTION_SUPPORT " ${XB_FUNCTION_SUPPORT})
-Message( "--- XB_EXPRESSION_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_FILTER_SUPPORT " ${XB_FILTER_SUPPORT})
-Message( "--- XB_DEBUG_SUPPORT " ${XB_DEBUG_SUPPORT})
-Message( "--- XB_UTILS_SUPPORT " ${XB_UTILS_SUPPORT})
-Message( "--- XB_EXAMPLES_SUPPORT " ${XB_EXAMPLES_SUPPORT})
-Message( "--- XB_LOGGING_SUPPORT " ${XB_LOGGING_SUPPORT})
-Message( "--- XB_SQL_SUPPORT " ${XB_SQL_SUPPORT})
-Message( "--- XB_INF_SUPPORT " ${XB_INF_SUPPORT})
-
-IF( XB_DEBUG_SUPPORT )
- Message( "--- Adding debug support" )
- set( CMAKE_BUILD_TYPE Debug )
-IF( CMAKE_COMPILER_IS_GNUCXX )
- add_compile_options( -Og )
-ENDIF( CMAKE_COMPILER_IS_GNUCXX )
-ENDIF( XB_DEBUG_SUPPORT )
-
-IF( CMAKE_SIZEOF_VOID_P EQUAL 8 )
- MESSAGE( "--- 64 bit compiler detected" )
- set( XB_PLATFORM "x64" )
- set( XB_PLATFORM_64 1 )
- set( XB_LIBNAME "xbase64" )
-
-ELSE( CMAKE_SIZEOF_VOID_P EQUAL 8 )
- MESSAGE( "--- 32 bit compiler detected" )
- set( XB_PLATFORM "x86" )
- set( XB_PLATFORM_32 1 )
- set( XB_LIBNAME "xbase32" )
-
-ENDIF( CMAKE_SIZEOF_VOID_P EQUAL 8 )
-
-
-#Check for the existence of various header files
-INCLUDE (CheckIncludeFiles)
-CHECK_INCLUDE_FILES (ctype.h HAVE_CTYPE_H)
-CHECK_INCLUDE_FILES (dirent.h HAVE_DIRENT_H)
-CHECK_INCLUDE_FILES (fcntl.h HAVE_FCNTL_H)
-CHECK_INCLUDE_FILES (inttypes.h HAVE_INTTYPES_H)
-CHECK_INCLUDE_FILES (pwd.h HAVE_PWD_H)
-CHECK_INCLUDE_FILES (stdarg.h HAVE_STDARG_H)
-CHECK_INCLUDE_FILES (stdargs.h HAVE_STDARGS_H)
-CHECK_INCLUDE_FILES (string.h HAVE_STRING_H)
-CHECK_INCLUDE_FILES (strings.h HAVE_STRINGS_H)
-CHECK_INCLUDE_FILES (sys/stat.h HAVE_STAT_H)
-CHECK_INCLUDE_FILES (unistd.h HAVE_UNISTD_H)
-CHECK_INCLUDE_FILES (varargs.h HAVE_VARARGS_H)
-CHECK_INCLUDE_FILES (windows.h HAVE_WINDOWS_H)
-
-#Check for the existence of various function calls
-INCLUDE( CheckFunctionExists )
-CHECK_FUNCTION_EXISTS(_close HAVE__CLOSE_F)
-CHECK_FUNCTION_EXISTS(fcntl HAVE_FCNTL_F)
-CHECK_FUNCTION_EXISTS(_fdopen HAVE__FDOPEN_F)
-CHECK_FUNCTION_EXISTS(fopen_s HAVE_FOPEN_S_F)
-CHECK_FUNCTION_EXISTS(_fsopen HAVE__FSOPEN_F)
-CHECK_FUNCTION_EXISTS(_fileno HAVE__FILENO_F)
-CHECK_FUNCTION_EXISTS(fork HAVE_FORK_F)
-CHECK_FUNCTION_EXISTS(_fseeki64 HAVE__FSEEKI64_F)
-CHECK_FUNCTION_EXISTS(fseeko HAVE_FSEEKO_F)
-CHECK_FUNCTION_EXISTS(ftruncate HAVE_FTRUNCATE_F)
-CHECK_FUNCTION_EXISTS(_localtime64_s HAVE__LOCALTIME64_S_F)
-CHECK_FUNCTION_EXISTS(LockFile HAVE_LOCKFILE_F)
-CHECK_FUNCTION_EXISTS(locking HAVE_LOCKING_F)
-CHECK_FUNCTION_EXISTS(_locking HAVE__LOCKING_F)
-CHECK_FUNCTION_EXISTS(_open HAVE__OPEN_F)
-CHECK_FUNCTION_EXISTS(SetEndOfFile HAVE_SETENDOFFILE_F)
-
-CHECK_FUNCTION_EXISTS(vsnprintf HAVE_VSNPRINTF_F)
-CHECK_FUNCTION_EXISTS(_vsnprintf_s HAVE__VSNPRINTF_S_F)
-
-
-CHECK_FUNCTION_EXISTS(getopt HAVE_GETOPT_F)
-
-IF( WIN32 )
-
-# Use CHECK_SYMBOL_EXISTS for the Win32API instead of CHECK_FUNCTION_EXISTS
-# Can't detect inline functions in headers
-# Can't detect due to mismatch of calling conventions
-# Can't detect mangled names
-
-INCLUDE( CheckSymbolExists )
-CHECK_SYMBOL_EXISTS(CreateProcessW Windows.h HAVE_CREATEPROCESSW_F )
-CHECK_SYMBOL_EXISTS(vsprintf_s stdio.h HAVE_VSPRINTF_S_F )
-
-ENDIF ( WIN32 )
-
-# IF( NOT HAVE_SENTENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND BORLAND )
-# # ----fix me----
-# # cmake CHECK_FUNCTION_EXISTS - could not find Borland 5.5 SetEndOfFile
-# Set( HAVE_SETENDOFFILE_F "HAVE_SETENDOFFILE_H" )
-# ENDIF ( NOT HAVE_SENTENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND BORLAND )
-
-IF( NOT HAVE_SETENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND WIN32 )
- # ----fix me----
- # cmake CHECK_FUNCTION_EXISTS - could not find Borland 5.5, or Windows VS 32 bit SetEndOfFile
- Set( HAVE_SETENDOFFILE_F "HAVE_SETENDOFFILE_F" )
-ENDIF ( NOT HAVE_SETENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND WIN32 )
-
-IF( XB_NDX_SUPPORT OR XB_MDX_SUPPORT )
- Set( XB_INDEX_SUPPORT "1" )
-ENDIF( XB_NDX_SUPPORT OR XB_MDX_SUPPORT )
-
-
-# Set directories
-# PROJECT_PARENT_DIR is two nodes higher
-get_filename_component( PROJECT_PARENT_DIR ${PROJECT_BINARY_DIR} DIRECTORY )
-get_filename_component( PROJECT_PARENT_DIR ${PROJECT_PARENT_DIR} DIRECTORY )
-
-# MESSAGE( "PROJECT_PARENT_DIR = " ${PROJECT_PARENT_DIR} )
-# MESSAGE( "PROJECT_BINARY_DIR = " ${PROJECT_BINARY_DIR} )
-
-
-set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin/${XB_PLATFORM})
-set( LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib/${XB_PLATFORM})
-set( PROJECT_SOURCE_DIR ${PROJECT_PARENT_DIR}/src)
-set( PROJECT_DATA_DIR ${PROJECT_PARENT_DIR}/data/)
-set( PROJECT_LOG_DIR ${PROJECT_PARENT_DIR}/logs/)
-set( EXTRA_LIBS ${EXTRA_LIBS} ${XB_LIBNAME})
-
-
-
-# Undo bad decisions
-IF( XB_PLATFORM_32 AND XB_LARGEFILE_SUPPORT )
- MESSAGE( "--- Can't build 64 bit environment with a 32 bit compiler" )
- MESSAGE( "--- XB_LARGEFILE_SUPPORT set to OFF" )
- set( XB_LARGEFILE_SUPPORT OFF CACHE BOOL "Use 64 bit large file support?" FORCE )
-ENDIF ( XB_PLATFORM_32 AND XB_LARGEFILE_SUPPORT )
-
-IF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
- MESSAGE( "--- At lease one file format is required. Defaulting to Version 4" )
- set( XB_DBF4_SUPPORT ON CACHE BOOL "Compile DBase File Format Version 4 support" FORCE )
-ENDIF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
-
-IF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
- MESSAGE( "--- Link List support required for DBF V4 Memo files. Setting to ON" )
- set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
-ENDIF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
-
-IF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
- MESSAGE( "--- Link List support required for locking functions. Setting to ON" )
- set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
-ENDIF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
-
-IF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
- MESSAGE( "--- Expression required for indices. Setting to ON" )
- set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
-ENDIF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
-
-IF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
- MESSAGE( "--- Function support required for expressions. Setting to ON" )
- set( XB_FUNCTION_SUPPORT ON CACHE BOOL "Compile XBase Function support into library" FORCE )
-ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
-
-IF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
- MESSAGE( "--- Linklist support required for expressions. Setting to ON" )
- set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
-ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
-
-IF( XB_SQL_SUPPORT AND NOT XB_MEMO_SUPPORT )
- MESSAGE( "--- Memo support required for SQL. Setting to ON" )
- set( XB_MEMO_SUPPORT ON CACHE BOOL "Compile memo field support into library" FORCE )
-ENDIF( XB_SQL_SUPPORT AND NOT XB_MEMO_SUPPORT )
-
-IF( XB_SQL_SUPPORT AND NOT XB_DBF4_SUPPORT )
- MESSAGE( "--- DBF4 support required for SQL. Setting to ON" )
- set( XB_DBF4_SUPPORT ON CACHE BOOL "Compile DBase File Format Version 4 support" FORCE )
-ENDIF( XB_SQL_SUPPORT AND NOT XB_DBF4_SUPPORT )
-
-IF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
- MESSAGE( "--- Expression required for filters. Setting to ON" )
- set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
-ENDIF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
-
-IF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
- MESSAGE( "--- BLOCKREAD support required for SQL. Setting to ON" )
- set( XB_BLOCKREAD_SUPPORT ON CACHE BOOL "Compile Block Read support into library" FORCE )
-ENDIF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
-
-
-# Build configuration header file
-configure_file (
- "${PROJECT_SOURCE_DIR}/include/xbconfig.h.in"
- "${PROJECT_BINARY_DIR}/include/xbconfig.h"
-)
-
-# Microsoft Windows settings
-IF( WIN32 )
-# add_definitions( /D_CRT_SECURE_NO_WARNINGS)
- add_definitions( /EHsc )
-ENDIF( WIN32 )
-
-
-# set up include directories
-include_directories( "${PROJECT_BINARY_DIR}/include" )
-include_directories( "${PROJECT_SOURCE_DIR}/include" )
-
-#build the library
-IF ( BUILD_SHARED_LIBS )
- set( LIB_TYPE SHARED )
-ELSE( BUILD_SHARED_LIBS )
- set( LIB_TYPE STATIC )
-ENDIF( BUILD_SHARED_LIBS )
-MESSAGE( "--- Lib type " ${LIB_TYPE} )
-
-
-
-set (SOURCES ${PROJECT_SOURCE_DIR}/core/xbstring.cpp
- ${PROJECT_SOURCE_DIR}/core/xbssv.cpp
- ${PROJECT_SOURCE_DIR}/core/xbdate.cpp
- ${PROJECT_SOURCE_DIR}/core/xbtblmgr.cpp
- ${PROJECT_SOURCE_DIR}/core/xbxbase.cpp
- ${PROJECT_SOURCE_DIR}/core/xbfile.cpp
- ${PROJECT_SOURCE_DIR}/core/xbdbf.cpp
- ${PROJECT_SOURCE_DIR}/core/xbfields.cpp
- ${PROJECT_SOURCE_DIR}/core/xblog.cpp)
-
-IF( XB_MEMO_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo.cpp )
-ENDIF( XB_MEMO_SUPPORT )
-
-IF( XB_DBF3_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbdbf3.cpp )
- IF( XB_MEMO_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo3.cpp )
- ENDIF( XB_MEMO_SUPPORT )
-ENDIF( XB_DBF3_SUPPORT )
-
-IF( XB_DBF4_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbdbf4.cpp )
- IF( XB_MEMO_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo4.cpp )
- ENDIF( XB_MEMO_SUPPORT )
-ENDIF( XB_DBF4_SUPPORT )
-
-IF( XB_FUNCTION_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbfuncs.cpp )
-ENDIF( XB_FUNCTION_SUPPORT )
-
-IF( XB_EXPRESSION_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbexpnode.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbexp.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbuda.cpp )
-ENDIF( XB_EXPRESSION_SUPPORT )
-
-IF( XB_INDEX_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbbcd.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixbase.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbtag.cpp )
-ENDIF( XB_INDEX_SUPPORT )
-
-IF( XB_NDX_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixndx.cpp )
-ENDIF( XB_NDX_SUPPORT )
-
-
-IF( XB_MDX_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixmdx.cpp )
-ENDIF( XB_MDX_SUPPORT )
-
-IF( XB_SQL_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbalttbl.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrix.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrtbl.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdelete.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdrpix.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdrptbl.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbinsert.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbset.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbsql.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbstmt.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbselect.cpp )
-ENDIF( XB_SQL_SUPPORT )
-
-
-IF( XB_FILTER_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbfilter.cpp )
-ENDIF( XB_FILTER_SUPPORT )
-
-IF( XB_BLOCKREAD_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbblockread.cpp )
-ENDIF( XB_BLOCKREAD_SUPPORT )
-
-
-include( GenerateExportHeader )
-#add_library( xbase ${LIB_TYPE} ${SOURCES} )
-add_library( ${XB_LIBNAME} ${LIB_TYPE} ${SOURCES} )
-#add_library( ${CMAKE_PROJECT_NAME} ${LIB_TYPE} ${SOURCES} )
-
-
-IF( WIN32 )
-MESSAGE( "--- Generating Windows Library Headers" )
-
-#GENERATE_EXPORT_HEADER( xbase
-# BASE_NAME xbase
-
-GENERATE_EXPORT_HEADER( ${XB_LIBNAME}
- BASE_NAME ${XB_LIBNAME}
- EXPORT_MACRO_NAME xbase_EXPORT
- EXPORT_FILE_NAME xbase_Export.h
- STATIC_DEFINE xbase_BUILT_AS_STATIC
-)
-ENDIF( WIN32 )
-
-
-#build test programs
-enable_testing()
-
-add_executable( xb_test_string ${PROJECT_SOURCE_DIR}/tests/xb_test_string.cpp )
-target_link_libraries( xb_test_string ${EXTRA_LIBS})
-add_test( NAME xbString COMMAND xb_test_string QUIET )
-
-add_executable( xb_test_date ${PROJECT_SOURCE_DIR}/tests/xb_test_date.cpp )
-target_link_libraries( xb_test_date ${EXTRA_LIBS})
-add_test( NAME xbDate COMMAND xb_test_date QUIET )
-
-add_executable( xb_test_tblmgr ${PROJECT_SOURCE_DIR}/tests/xb_test_tblmgr.cpp )
-target_link_libraries( xb_test_tblmgr ${EXTRA_LIBS})
-add_test( NAME xbTblMgr COMMAND xb_test_tblmgr QUIET )
-
-add_executable( xb_test_xbase ${PROJECT_SOURCE_DIR}/tests/xb_test_xbase.cpp )
-target_link_libraries( xb_test_xbase ${EXTRA_LIBS})
-add_test( NAME xbXBase COMMAND xb_test_xbase QUIET )
-
-add_executable( xb_test_file ${PROJECT_SOURCE_DIR}/tests/xb_test_file.cpp )
-target_link_libraries( xb_test_file ${EXTRA_LIBS})
-add_test( NAME xbFile COMMAND xb_test_file QUIET )
-
-add_executable( xb_test_log ${PROJECT_SOURCE_DIR}/tests/xb_test_log.cpp )
-target_link_libraries( xb_test_log ${EXTRA_LIBS})
-add_test( NAME xbLog COMMAND xb_test_log QUIET )
-
-IF( XB_LINKLIST_SUPPORT )
-add_executable( xb_test_linklist ${PROJECT_SOURCE_DIR}/tests/xb_test_linklist.cpp )
-target_link_libraries( xb_test_linklist ${EXTRA_LIBS})
-add_test( NAME xbLinkList COMMAND xb_test_linklist QUIET )
-ENDIF( XB_LINKLIST_SUPPORT )
-
-IF( XB_DBF3_SUPPORT )
-add_executable( xb_test_dbf_v3_nomemos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v3_nomemos.cpp )
-target_link_libraries( xb_test_dbf_v3_nomemos ${EXTRA_LIBS})
-add_test( NAME xbDbfV3NoMemos COMMAND xb_test_dbf_v3_nomemos QUIET )
-
-IF( XB_MEMO_SUPPORT )
-add_executable( xb_test_dbf_v3_memos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v3_memos.cpp )
-target_link_libraries( xb_test_dbf_v3_memos ${EXTRA_LIBS})
-add_test( NAME xbDbfV3Memos COMMAND xb_test_dbf_v3_memos QUIET )
-
-ENDIF( XB_MEMO_SUPPORT )
-ENDIF( XB_DBF3_SUPPORT )
-
-IF( XB_DBF4_SUPPORT )
-add_executable( xb_test_dbf_v4_nomemos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v4_nomemos.cpp )
-target_link_libraries( xb_test_dbf_v4_nomemos ${EXTRA_LIBS})
-add_test( NAME xbDbfV4NoMemos COMMAND xb_test_dbf_v4_nomemos QUIET )
-
-IF( XB_MEMO_SUPPORT )
-add_executable( xb_test_dbf_v4_memos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v4_memos.cpp )
-target_link_libraries( xb_test_dbf_v4_memos ${EXTRA_LIBS})
-add_test( NAME xbDbfV4Memos COMMAND xb_test_dbf_v4_memos QUIET )
-
-ENDIF( XB_MEMO_SUPPORT )
-ENDIF( XB_DBF4_SUPPORT )
-
-IF( XB_FUNCTION_SUPPORT )
-add_executable( xb_test_funcs ${PROJECT_SOURCE_DIR}/tests/xb_test_funcs.cpp )
-target_link_libraries( xb_test_funcs ${EXTRA_LIBS})
-add_test( NAME xbFunctions COMMAND xb_test_funcs QUIET )
-ENDIF( XB_FUNCTION_SUPPORT )
-
-IF( XB_NDX_SUPPORT )
-IF( XB_DBF3_SUPPORT )
-add_executable( xb_test_ndx ${PROJECT_SOURCE_DIR}/tests/xb_test_ndx.cpp )
-target_link_libraries( xb_test_ndx ${EXTRA_LIBS})
-add_test( NAME xbIxNdx COMMAND xb_test_ndx QUIET )
-ENDIF( XB_DBF3_SUPPORT )
-ENDIF( XB_NDX_SUPPORT )
-
-IF( XB_MDX_SUPPORT )
-IF( XB_DBF4_SUPPORT )
-add_executable( xb_test_mdx ${PROJECT_SOURCE_DIR}/tests/xb_test_mdx.cpp )
-target_link_libraries( xb_test_mdx ${EXTRA_LIBS})
-add_test( NAME xbIxMdx COMMAND xb_test_mdx QUIET )
-ENDIF( XB_DBF4_SUPPORT )
-ENDIF( XB_MDX_SUPPORT )
-
-IF( XB_INDEX_SUPPORT )
-add_executable( xb_test_bcd ${PROJECT_SOURCE_DIR}/tests/xb_test_bcd.cpp )
-target_link_libraries( xb_test_bcd ${EXTRA_LIBS})
-add_test( NAME xbBcd COMMAND xb_test_bcd QUIET )
-ENDIF( XB_INDEX_SUPPORT )
-
-
-IF( XB_EXPRESSION_SUPPORT )
-
-add_executable( xb_test_expnode ${PROJECT_SOURCE_DIR}/tests/xb_test_expnode.cpp )
-target_link_libraries( xb_test_expnode ${EXTRA_LIBS})
-add_test( NAME xbExpNode COMMAND xb_test_expnode QUIET )
-
-
-add_executable( xb_test_expression ${PROJECT_SOURCE_DIR}/tests/xb_test_expression.cpp )
-target_link_libraries( xb_test_expression ${EXTRA_LIBS})
-add_test( NAME xbExpressions COMMAND xb_test_expression QUIET )
-
-add_executable( xb_test_uda ${PROJECT_SOURCE_DIR}/tests/xb_test_uda.cpp )
-target_link_libraries( xb_test_uda ${EXTRA_LIBS})
-add_test( NAME xbUda COMMAND xb_test_uda QUIET )
-
-ENDIF( XB_EXPRESSION_SUPPORT )
-
-IF( XB_SQL_SUPPORT )
-add_executable( xb_test_sql ${PROJECT_SOURCE_DIR}/tests/xb_test_sql.cpp )
-target_link_libraries( xb_test_sql ${EXTRA_LIBS})
-add_test( NAME xbSql COMMAND xb_test_sql QUIET )
-ENDIF( XB_SQL_SUPPORT )
-
-IF( XB_FILTER_SUPPORT )
-add_executable( xb_test_filter ${PROJECT_SOURCE_DIR}/tests/xb_test_filter.cpp )
-target_link_libraries( xb_test_filter ${EXTRA_LIBS})
-add_test( NAME xbFilter COMMAND xb_test_filter QUIET )
-ENDIF( XB_FILTER_SUPPORT )
-
-IF( XB_BLOCKREAD_SUPPORT )
-add_executable( xb_test_blockread ${PROJECT_SOURCE_DIR}/tests/xb_test_blockread.cpp )
-target_link_libraries( xb_test_blockread ${EXTRA_LIBS})
-add_test( NAME xbBlockRead COMMAND xb_test_blockread QUIET )
-ENDIF( XB_BLOCKREAD_SUPPORT )
-
-
-IF( XB_LOCKING_SUPPORT )
-add_executable( xb_test_lock ${PROJECT_SOURCE_DIR}/tests/xb_test_lock.cpp )
-target_link_libraries( xb_test_lock ${EXTRA_LIBS})
-add_test( NAME xbLock COMMAND xb_test_lock QUIET )
-IF( HAVE_CREATEPROCESSW_F )
-add_executable( xb_test_lock2 ${PROJECT_SOURCE_DIR}/tests/xb_test_lock2.cpp )
-target_link_libraries( xb_test_lock2 ${EXTRA_LIBS})
-ENDIF( HAVE_CREATEPROCESSW_F )
-ENDIF( XB_LOCKING_SUPPORT )
-
-#build example programs
-IF( XB_EXAMPLES_SUPPORT )
- add_executable( xb_ex_string ${PROJECT_SOURCE_DIR}/examples/xb_ex_string.cpp )
- target_link_libraries( xb_ex_string ${EXTRA_LIBS})
-
- add_executable( xb_ex_date ${PROJECT_SOURCE_DIR}/examples/xb_ex_date.cpp )
- target_link_libraries( xb_ex_date ${EXTRA_LIBS})
-
- IF( XB_DBF3_SUPPORT )
- add_executable( xb_ex_v3_create_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v3_create_dbf.cpp )
- target_link_libraries( xb_ex_v3_create_dbf ${EXTRA_LIBS})
-
- add_executable( xb_ex_v3_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v3_upd_dbf.cpp )
- target_link_libraries( xb_ex_v3_upd_dbf ${EXTRA_LIBS})
- ENDIF( XB_DBF3_SUPPORT )
-
- IF( XB_DBF4_SUPPORT )
- add_executable( xb_ex_v4_create_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_create_dbf.cpp )
- target_link_libraries( xb_ex_v4_create_dbf ${EXTRA_LIBS})
- ENDIF( XB_DBF4_SUPPORT )
-
- IF( XB_EXPRESSION_SUPPORT )
- add_executable( xb_ex_expression ${PROJECT_SOURCE_DIR}/examples/xb_ex_expression.cpp )
- target_link_libraries( xb_ex_expression ${EXTRA_LIBS})
- ENDIF( XB_EXPRESSION_SUPPORT )
-
- add_executable( xb_ex_v4_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_upd_dbf.cpp )
- target_link_libraries( xb_ex_v4_upd_dbf ${EXTRA_LIBS})
-
- add_executable( xb_ex_ssv ${PROJECT_SOURCE_DIR}/examples/xb_ex_ssv.cpp )
- target_link_libraries( xb_ex_ssv ${EXTRA_LIBS})
-
-ENDIF( XB_EXAMPLES_SUPPORT )
-
-#build utility programs
-IF( XB_UTILS_SUPPORT )
-
- add_executable( xb_cfg_check ${PROJECT_SOURCE_DIR}/utils/xb_cfg_check.cpp )
- target_link_libraries( xb_cfg_check ${EXTRA_LIBS})
-
- add_executable( xb_copydbf ${PROJECT_SOURCE_DIR}/utils/xb_copydbf.cpp )
- target_link_libraries( xb_copydbf ${EXTRA_LIBS})
-
- add_executable( xb_dbfutil ${PROJECT_SOURCE_DIR}/utils/xb_dbfutil.cpp )
- target_link_libraries( xb_dbfutil ${EXTRA_LIBS})
-
- add_executable( xb_deletall ${PROJECT_SOURCE_DIR}/utils/xb_deletall.cpp )
- target_link_libraries( xb_deletall ${EXTRA_LIBS})
-
- add_executable( xb_dumpdbt ${PROJECT_SOURCE_DIR}/utils/xb_dumpdbt.cpp )
- target_link_libraries( xb_dumpdbt ${EXTRA_LIBS})
-
- add_executable( xb_dumprecs ${PROJECT_SOURCE_DIR}/utils/xb_dumprecs.cpp )
- target_link_libraries( xb_dumprecs ${EXTRA_LIBS})
-
- add_executable( xb_tblinfo ${PROJECT_SOURCE_DIR}/utils/xb_tblinfo.cpp )
- target_link_libraries( xb_tblinfo ${EXTRA_LIBS})
-
- IF( XB_SQL_SUPPORT )
- add_executable( xb_execsql ${PROJECT_SOURCE_DIR}/utils/xb_execsql.cpp )
- target_link_libraries( xb_execsql ${EXTRA_LIBS})
- ENDIF( XB_SQL_SUPPORT )
-
- add_executable( xb_pack ${PROJECT_SOURCE_DIR}/utils/xb_pack.cpp )
- target_link_libraries( xb_pack ${EXTRA_LIBS})
-
- add_executable( xb_undelall ${PROJECT_SOURCE_DIR}/utils/xb_undelall.cpp )
- target_link_libraries( xb_undelall ${EXTRA_LIBS})
-
- install (TARGETS xb_cfg_check DESTINATION bin)
- install (TARGETS xb_copydbf DESTINATION bin)
- install (TARGETS xb_dbfutil DESTINATION bin)
- install (TARGETS xb_deletall DESTINATION bin)
- install (TARGETS xb_dumpdbt DESTINATION bin)
- install (TARGETS xb_dumprecs DESTINATION bin)
- install (TARGETS xb_pack DESTINATION bin)
- install (TARGETS xb_undelall DESTINATION bin)
- IF( XB_SQL_SUPPORT )
- install (TARGETS xb_execsql DESTINATION bin)
- ENDIF( XB_SQL_SUPPORT )
-
-
-
-ENDIF( XB_UTILS_SUPPORT )
-
-install (FILES include/xbconfig.h
- ${PROJECT_SOURCE_DIR}/include/xbase.h
- ${PROJECT_SOURCE_DIR}/include/xbbcd.h
- ${PROJECT_SOURCE_DIR}/include/xbdate.h
- ${PROJECT_SOURCE_DIR}/include/xbdbf.h
- ${PROJECT_SOURCE_DIR}/include/xbexp.h
- ${PROJECT_SOURCE_DIR}/include/xbexpnode.h
- ${PROJECT_SOURCE_DIR}/include/xbfile.h
- ${PROJECT_SOURCE_DIR}/include/xbindex.h
- ${PROJECT_SOURCE_DIR}/include/xblnklst.h
- ${PROJECT_SOURCE_DIR}/include/xblnklstord.h
- ${PROJECT_SOURCE_DIR}/include/xblnknod.h
- ${PROJECT_SOURCE_DIR}/include/xblog.h
- ${PROJECT_SOURCE_DIR}/include/xbmemo.h
- ${PROJECT_SOURCE_DIR}/include/xbretcod.h
- ${PROJECT_SOURCE_DIR}/include/xbsql.h
- ${PROJECT_SOURCE_DIR}/include/xbssv.h
- ${PROJECT_SOURCE_DIR}/include/xbstring.h
- ${PROJECT_SOURCE_DIR}/include/xbtblmgr.h
- ${PROJECT_SOURCE_DIR}/include/xbtypes.h
- ${PROJECT_SOURCE_DIR}/include/xbxbase.h
- ${PROJECT_SOURCE_DIR}/include/xbuda.h
- ${PROJECT_SOURCE_DIR}/include/xbtag.h
- ${PROJECT_SOURCE_DIR}/include/xbfilter.h
- ${PROJECT_SOURCE_DIR}/include/xbblkread.h
- ${PROJECT_SOURCE_DIR}/include/xbsql.h
-
- DESTINATION include/${CMAKE_PROJECT_NAME})
-
-IF( NOT WIN32 )
-install (FILES ${PROJECT_PARENT_DIR}/docs/man/xb_cfg_chk.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_copydbf.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_dbfutil.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_deletall.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_dumpdbt.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_dumprecs.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_pack.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_tblinfo.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_undelall.1.gz
-
- DESTINATION man/man1)
-
-ENDIF( NOT WIN32 )
-
-
-SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.1.0 SOVERSION 0 )
-
-IF( EXISTS /usr/local/lib64 )
-install (TARGETS ${XB_LIBNAME} DESTINATION lib64/${CMAKE_PROJECT_NAME})
-ELSE( EXISTS /usr/local/lib64 )
-install (TARGETS ${XB_LIBNAME} DESTINATION lib/${CMAKE_PROJECT_NAME})
-ENDIF( EXISTS /usr/local/lib64 )
-
-
diff --git a/build/debian/README.debian b/build/debian/README.debian
deleted file mode 100644
index 2c7e95b..0000000
--- a/build/debian/README.debian
+++ /dev/null
@@ -1,23 +0,0 @@
-
-Debian build stes for Xbase64 - 2/16/23
-
-1) Verify cmake is installed with command: cmake --version
- If it is not installed, install the latest version through the Debian software store.
-
-2) Verify gcc is intalled with the command: gcc --version
- If it is not installed, execute the following commands:
-
- sudo apt update
- sudo apt install build-essential
- gcc --version
-
-3) Build xbase64 library
-
- cd build/debian (go to the appropriate build directory)
- cmake . (configure for your environment)
- make (compile it)
- sudo make install (install it)
- xb_cfg_chk (test it)
-
-
-
diff --git a/build/linux32/CMakeLists.txt b/build/linux32/CMakeLists.txt
deleted file mode 100755
index f514c5c..0000000
--- a/build/linux32/CMakeLists.txt
+++ /dev/null
@@ -1,761 +0,0 @@
-cmake_minimum_required(VERSION 3.0)
-
-project (xbase64)
-set( xbase_VERSION_MAJOR 4 )
-set( xbase_VERSION_MINOR 1 )
-set( xbase_VERSION_PATCH 0 )
-
-MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
-MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
-MESSAGE( "--- Project Name: " ${CMAKE_PROJECT_NAME} )
-MESSAGE( "--- Install Prefix: " ${CMAKE_INSTALL_PREFIX} )
-
-#Set compiler options
-
-IF( CMAKE_COMPILER_IS_GNUCXX )
- MESSAGE( "Setting GNU compiler options" )
- add_compile_options( -Wall -Wsign-conversion )
-# add_compile_options( -Wall -Wconversion -Wsign-conversion )
- SET( VERBOSE 1 )
-ENDIF( CMAKE_COMPILER_IS_GNUCXX )
-
-IF( BORLAND )
- MESSAGE ("BORLAND COMPILER" )
- #set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w-8022" )
- add_compile_options( -w-8022 )
-ENDIF( BORLAND )
-
-
-MESSAGE( "--- Checking integer sizes" )
-INCLUDE(CheckTypeSize)
-CHECK_TYPE_SIZE( "short int" SHORT_INT )
-CHECK_TYPE_SIZE( int INT )
-CHECK_TYPE_SIZE( __int32 __INT32 )
-CHECK_TYPE_SIZE( int32_t INT32_T )
-CHECK_TYPE_SIZE( long LONG_INT )
-CHECK_TYPE_SIZE( __int64 __INT64 )
-CHECK_TYPE_SIZE( int64_t INT64_T )
-CHECK_TYPE_SIZE( "long long" LONG_LONG )
-CHECK_TYPE_SIZE( u_int64_t U_INT64_T )
-CHECK_TYPE_SIZE( uint64_t UINT64_T )
-CHECK_TYPE_SIZE( "unsigned __int64" UNSIGNED__INT64 )
-CHECK_TYPE_SIZE( "unsigned long long" UNSIGNED_LONG_LONG )
-
-CHECK_TYPE_SIZE( "double" DOUBLE )
-MESSAGE( "--- Double size = " ${DOUBLE} )
-
-
-#determine how 16 bit integer defined on this platform
-SET( iSize 0 )
-IF( HAVE_SHORT_INT AND ${SHORT_INT} EQUAL 2 )
- SET( xbInt16 "short int" )
- SET( xbUInt16 "unsigned short int" )
- SET( iSize ${SHORT_INT} )
- MESSAGE( "--- xbInt16 = [short int]" )
- MESSAGE( "--- xbUInt16 = [unsigned short int]" )
-
-ENDIF( HAVE_SHORT_INT AND ${SHORT_INT} EQUAL 2 )
-IF( NOT ${iSize} EQUAL 2 )
- MESSAGE( "FATAL_ERROR Could not detect 16 bit integer type" )
- MESSAGE( ${iSize} )
- RETURN()
-ENDIF( NOT ${iSize} EQUAL 2 )
-
-#determine how 32 bit integer defined on this platform
-SET( iSize 0 )
-IF( HAVE_INT AND ${INT} EQUAL 4 )
- SET( xbInt32 int )
- SET( xbUInt32 "unsigned int" )
- SET( iSize ${INT} )
- MESSAGE( "--- xbInt32 = [int]" )
- MESSAGE( "--- xbUInt32 = [unsigned int]" )
-ENDIF( HAVE_INT AND ${INT} EQUAL 4 )
-
-IF(( NOT iSize EQUAL 4 ) AND HAVE___INT32 )
- MESSAGE( __int untested if block - see CMakeLists.txt)
- SET( xbInt32 __int32 )
- SET( xbUInt32 "unsigned __int32" )
- SET( iSize ${__INT} )
- MESSAGE( "--- xbInt32 = [__int]" )
- MESSAGE( "--- xbUInt32 = [unsigned __int]" )
-ENDIF(( NOT iSize EQUAL 4 ) AND HAVE___INT32 )
-
-IF(( NOT iSize EQUAL 4 ) AND HAVE_INT32_T )
- SET( xbInt32 int32_t )
- SET( xbUInt32 "u_int32_t" )
- SET( iSize ${INT32_T} )
- MESSAGE( "--- xbInt32 = [int32_t]" )
- MESSAGE( "--- xbUInt32 = [u_int32_t]" )
-ENDIF(( NOT iSize EQUAL 4 ) AND HAVE_INT32_T )
-
-IF( NOT ${iSize} EQUAL 4 )
- MESSAGE( "FATAL_ERROR Could not detect 32 bit integer type" )
- MESSAGE( ${iSize} )
- RETURN()
-ENDIF( NOT ${iSize} EQUAL 4 )
-
-#determine how 64 bit integer defined on this platform
-SET( iSize 0 )
-IF( HAVE___INT64 )
- SET( xbInt64 __int64 )
- SET( iSize ${__INT64} )
- MESSAGE( "--- xbInt64 = [__int64]" )
-ENDIF( HAVE___INT64 )
-
-IF(( NOT iSize EQUAL 8 ) AND HAVE_INT64_T )
- SET( xbInt64 int64_t )
- SET( iSize ${INT64_T} )
- MESSAGE( "--- xbInt64 = [int64_t]" )
-ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_INT64_T )
-
-IF(( NOT iSize EQUAL 8 ) AND HAVE_LONG_LONG )
- SET( xbInt64 "long long" )
- SET( iSize ${LONG_LONG} )
- MESSAGE( "--- xbInt64 = [long long]" )
-ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_LONG_LONG )
-
-IF( NOT ${iSize} EQUAL 8 )
- MESSAGE( "FATAL_ERROR Could not detect 64 bit integer type" )
- MESSAGE( ${iSize} )
- RETURN()
-ENDIF( NOT ${iSize} EQUAL 8 )
-
-#determine how 64 bit unsigned integer defined on this platform
-SET( iSize 0 )
-IF( HAVE_UNSIGNED__INT64 )
- SET( xbUInt64 "unsigned __int64" )
- SET( iSize ${UNSIGNED__INT64} )
- MESSAGE( "--- xbUInt64 = [unsigned __int64]" )
-ENDIF( HAVE_UNSIGNED__INT64 )
-
-IF(( NOT iSize EQUAL 8 ) AND HAVE_UINT64_T )
- SET( xbUInt64 "uint64_t" )
- SET( iSize ${UINT64_T} )
- MESSAGE( "--- xbUInt64 = [uint64_t]" )
-ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_UINT64_T )
-
-IF(( NOT iSize EQUAL 8 ) AND HAVE_U_INT64_T )
- SET( xbUInt64 u_int64_t )
- SET( iSize ${U_INT64_T} )
- MESSAGE( "--- xbUInt64 = [u_int64_t]" )
-ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_U_INT64_T )
-
-IF(( NOT iSize EQUAL 8 ) AND HAVE_UNSIGNED_LONG_LONG )
- SET( xbUInt64 "unsigned long long" )
- SET( iSize ${UNSIGNED_LONG_LONG} )
- MESSAGE( "--- xbUInt64 = [unsigned long long]" )
-ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_UNSIGNED_LONG_LONG )
-
-IF( NOT ${iSize} EQUAL 8 )
- MESSAGE( "FATAL_ERROR Could not detect 64 bit unsigned integer type" )
- MESSAGE( ${iSize} )
- RETURN()
-ENDIF( NOT ${iSize} EQUAL 8 )
-
-#Library options
-option( BUILD_SHARED_LIBS "Build shared libraries" ON)
-option( XB_DBF3_SUPPORT "Compile DBase File Format Version 3 support" ON)
-option( XB_DBF4_SUPPORT "Compile DBase File Format Version 4 support" ON)
-option( XB_MEMO_SUPPORT "Compile memo field support into library" ON)
-option( XB_NDX_SUPPORT "Compile NDX Index support into library" ON)
-option( XB_MDX_SUPPORT "Compile MDX Index support into library" ON)
-option( XB_LOCKING_SUPPORT "Compile Multi User Locking support into library" ON)
-
-option( XB_LOGGING_SUPPORT "Compile message logging support into library" ON)
-option( XB_LINKLIST_SUPPORT "Compile Link List routines into library" ON)
-option( XB_FUNCTION_SUPPORT "Compile XBase Function support into library" ON)
-option( XB_EXPRESSION_SUPPORT "Compile Expression support into library" ON)
-option( XB_INF_SUPPORT "Compile NDX INF file support into library" ON)
-option( XB_FILTER_SUPPORT "Compile Filter support into library" ON)
-option( XB_BLOCKREAD_SUPPORT "Compile Block Read support into library" ON)
-option( XB_SQL_SUPPORT "Compile SQL support into library - alpha" ON)
-option( XB_DEBUG_SUPPORT "Compile debug logic into library" ON)
-option( XB_UTILS_SUPPORT "Compile utility programs" ON)
-option( XB_EXAMPLES_SUPPORT "Compile example programs" ON)
-
-Message( "--- BUILD_SHARED_LIBS " ${BUILD_SHARED_LIBS})
-Message( "--- XB_DBF3_SUPPORT " ${XB_DBF3_SUPPORT})
-Message( "--- XB_DBF4_SUPPORT " ${XB_DBF4_SUPPORT})
-Message( "--- XB_MEMO_SUPPORT " ${XB_MEMO_SUPPORT})
-Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
-Message( "--- XB_MDX_SUPPORT " ${XB_MDX_SUPPORT})
-Message( "--- XB_LOCKING_SUPPORT " ${XB_LOCKING_SUPPORT})
-Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
-Message( "--- XB_FUNCTION_SUPPORT " ${XB_FUNCTION_SUPPORT})
-Message( "--- XB_EXPRESSION_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_FILTER_SUPPORT " ${XB_FILTER_SUPPORT})
-Message( "--- XB_DEBUG_SUPPORT " ${XB_DEBUG_SUPPORT})
-Message( "--- XB_UTILS_SUPPORT " ${XB_UTILS_SUPPORT})
-Message( "--- XB_EXAMPLES_SUPPORT " ${XB_EXAMPLES_SUPPORT})
-Message( "--- XB_LOGGING_SUPPORT " ${XB_LOGGING_SUPPORT})
-Message( "--- XB_SQL_SUPPORT " ${XB_SQL_SUPPORT})
-Message( "--- XB_INF_SUPPORT " ${XB_INF_SUPPORT})
-
-IF( XB_DEBUG_SUPPORT )
- Message( "--- Adding debug support" )
- set( CMAKE_BUILD_TYPE Debug )
-IF( CMAKE_COMPILER_IS_GNUCXX )
- add_compile_options( -Og )
-ENDIF( CMAKE_COMPILER_IS_GNUCXX )
-ENDIF( XB_DEBUG_SUPPORT )
-
-IF( CMAKE_SIZEOF_VOID_P EQUAL 8 )
- MESSAGE( "--- 64 bit compiler detected" )
- set( XB_PLATFORM "x64" )
- set( XB_PLATFORM_64 1 )
- set( XB_LIBNAME "xbase64" )
-
-ELSE( CMAKE_SIZEOF_VOID_P EQUAL 8 )
- MESSAGE( "--- 32 bit compiler detected" )
- set( XB_PLATFORM "x86" )
- set( XB_PLATFORM_32 1 )
- set( XB_LIBNAME "xbase32" )
-
-ENDIF( CMAKE_SIZEOF_VOID_P EQUAL 8 )
-
-
-#Check for the existence of various header files
-INCLUDE (CheckIncludeFiles)
-CHECK_INCLUDE_FILES (ctype.h HAVE_CTYPE_H)
-CHECK_INCLUDE_FILES (dirent.h HAVE_DIRENT_H)
-CHECK_INCLUDE_FILES (fcntl.h HAVE_FCNTL_H)
-CHECK_INCLUDE_FILES (inttypes.h HAVE_INTTYPES_H)
-CHECK_INCLUDE_FILES (pwd.h HAVE_PWD_H)
-CHECK_INCLUDE_FILES (stdarg.h HAVE_STDARG_H)
-CHECK_INCLUDE_FILES (stdargs.h HAVE_STDARGS_H)
-CHECK_INCLUDE_FILES (string.h HAVE_STRING_H)
-CHECK_INCLUDE_FILES (strings.h HAVE_STRINGS_H)
-CHECK_INCLUDE_FILES (sys/stat.h HAVE_STAT_H)
-CHECK_INCLUDE_FILES (unistd.h HAVE_UNISTD_H)
-CHECK_INCLUDE_FILES (varargs.h HAVE_VARARGS_H)
-CHECK_INCLUDE_FILES (windows.h HAVE_WINDOWS_H)
-
-#Check for the existence of various function calls
-INCLUDE( CheckFunctionExists )
-CHECK_FUNCTION_EXISTS(_close HAVE__CLOSE_F)
-CHECK_FUNCTION_EXISTS(fcntl HAVE_FCNTL_F)
-CHECK_FUNCTION_EXISTS(_fdopen HAVE__FDOPEN_F)
-CHECK_FUNCTION_EXISTS(fopen_s HAVE_FOPEN_S_F)
-CHECK_FUNCTION_EXISTS(_fsopen HAVE__FSOPEN_F)
-CHECK_FUNCTION_EXISTS(_fileno HAVE__FILENO_F)
-CHECK_FUNCTION_EXISTS(fork HAVE_FORK_F)
-CHECK_FUNCTION_EXISTS(_fseeki64 HAVE__FSEEKI64_F)
-CHECK_FUNCTION_EXISTS(fseeko HAVE_FSEEKO_F)
-CHECK_FUNCTION_EXISTS(ftruncate HAVE_FTRUNCATE_F)
-CHECK_FUNCTION_EXISTS(_localtime64_s HAVE__LOCALTIME64_S_F)
-CHECK_FUNCTION_EXISTS(LockFile HAVE_LOCKFILE_F)
-CHECK_FUNCTION_EXISTS(locking HAVE_LOCKING_F)
-CHECK_FUNCTION_EXISTS(_locking HAVE__LOCKING_F)
-CHECK_FUNCTION_EXISTS(_open HAVE__OPEN_F)
-CHECK_FUNCTION_EXISTS(SetEndOfFile HAVE_SETENDOFFILE_F)
-
-CHECK_FUNCTION_EXISTS(vsnprintf HAVE_VSNPRINTF_F)
-CHECK_FUNCTION_EXISTS(_vsnprintf_s HAVE__VSNPRINTF_S_F)
-
-
-CHECK_FUNCTION_EXISTS(getopt HAVE_GETOPT_F)
-
-IF( WIN32 )
-
-# Use CHECK_SYMBOL_EXISTS for the Win32API instead of CHECK_FUNCTION_EXISTS
-# Can't detect inline functions in headers
-# Can't detect due to mismatch of calling conventions
-# Can't detect mangled names
-
-INCLUDE( CheckSymbolExists )
-CHECK_SYMBOL_EXISTS(CreateProcessW Windows.h HAVE_CREATEPROCESSW_F )
-CHECK_SYMBOL_EXISTS(vsprintf_s stdio.h HAVE_VSPRINTF_S_F )
-
-ENDIF ( WIN32 )
-
-# IF( NOT HAVE_SENTENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND BORLAND )
-# # ----fix me----
-# # cmake CHECK_FUNCTION_EXISTS - could not find Borland 5.5 SetEndOfFile
-# Set( HAVE_SETENDOFFILE_F "HAVE_SETENDOFFILE_H" )
-# ENDIF ( NOT HAVE_SENTENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND BORLAND )
-
-IF( NOT HAVE_SETENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND WIN32 )
- # ----fix me----
- # cmake CHECK_FUNCTION_EXISTS - could not find Borland 5.5, or Windows VS 32 bit SetEndOfFile
- Set( HAVE_SETENDOFFILE_F "HAVE_SETENDOFFILE_F" )
-ENDIF ( NOT HAVE_SETENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND WIN32 )
-
-IF( XB_NDX_SUPPORT OR XB_MDX_SUPPORT )
- Set( XB_INDEX_SUPPORT "1" )
-ENDIF( XB_NDX_SUPPORT OR XB_MDX_SUPPORT )
-
-
-# Set directories
-# PROJECT_PARENT_DIR is two nodes higher
-get_filename_component( PROJECT_PARENT_DIR ${PROJECT_BINARY_DIR} DIRECTORY )
-get_filename_component( PROJECT_PARENT_DIR ${PROJECT_PARENT_DIR} DIRECTORY )
-
-# MESSAGE( "PROJECT_PARENT_DIR = " ${PROJECT_PARENT_DIR} )
-# MESSAGE( "PROJECT_BINARY_DIR = " ${PROJECT_BINARY_DIR} )
-
-
-set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin/${XB_PLATFORM})
-set( LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib/${XB_PLATFORM})
-set( PROJECT_SOURCE_DIR ${PROJECT_PARENT_DIR}/src)
-set( PROJECT_DATA_DIR ${PROJECT_PARENT_DIR}/data/)
-set( PROJECT_LOG_DIR ${PROJECT_PARENT_DIR}/logs/)
-set( EXTRA_LIBS ${EXTRA_LIBS} ${XB_LIBNAME})
-
-
-
-# Undo bad decisions
-IF( XB_PLATFORM_32 AND XB_LARGEFILE_SUPPORT )
- MESSAGE( "--- Can't build 64 bit environment with a 32 bit compiler" )
- MESSAGE( "--- XB_LARGEFILE_SUPPORT set to OFF" )
- set( XB_LARGEFILE_SUPPORT OFF CACHE BOOL "Use 64 bit large file support?" FORCE )
-ENDIF ( XB_PLATFORM_32 AND XB_LARGEFILE_SUPPORT )
-
-IF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
- MESSAGE( "--- At lease one file format is required. Defaulting to Version 4" )
- set( XB_DBF4_SUPPORT ON CACHE BOOL "Compile DBase File Format Version 4 support" FORCE )
-ENDIF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
-
-IF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
- MESSAGE( "--- Link List support required for DBF V4 Memo files. Setting to ON" )
- set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
-ENDIF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
-
-IF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
- MESSAGE( "--- Link List support required for locking functions. Setting to ON" )
- set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
-ENDIF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
-
-IF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
- MESSAGE( "--- Expression required for indices. Setting to ON" )
- set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
-ENDIF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
-
-IF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
- MESSAGE( "--- Function support required for expressions. Setting to ON" )
- set( XB_FUNCTION_SUPPORT ON CACHE BOOL "Compile XBase Function support into library" FORCE )
-ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
-
-IF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
- MESSAGE( "--- Linklist support required for expressions. Setting to ON" )
- set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
-ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
-
-IF( XB_SQL_SUPPORT AND NOT XB_MEMO_SUPPORT )
- MESSAGE( "--- Memo support required for SQL. Setting to ON" )
- set( XB_MEMO_SUPPORT ON CACHE BOOL "Compile memo field support into library" FORCE )
-ENDIF( XB_SQL_SUPPORT AND NOT XB_MEMO_SUPPORT )
-
-IF( XB_SQL_SUPPORT AND NOT XB_DBF4_SUPPORT )
- MESSAGE( "--- DBF4 support required for SQL. Setting to ON" )
- set( XB_DBF4_SUPPORT ON CACHE BOOL "Compile DBase File Format Version 4 support" FORCE )
-ENDIF( XB_SQL_SUPPORT AND NOT XB_DBF4_SUPPORT )
-
-IF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
- MESSAGE( "--- Expression required for filters. Setting to ON" )
- set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
-ENDIF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
-
-IF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
- MESSAGE( "--- BLOCKREAD support required for SQL. Setting to ON" )
- set( XB_BLOCKREAD_SUPPORT ON CACHE BOOL "Compile Block Read support into library" FORCE )
-ENDIF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
-
-
-# Build configuration header file
-configure_file (
- "${PROJECT_SOURCE_DIR}/include/xbconfig.h.in"
- "${PROJECT_BINARY_DIR}/include/xbconfig.h"
-)
-
-# Microsoft Windows settings
-IF( WIN32 )
-# add_definitions( /D_CRT_SECURE_NO_WARNINGS)
- add_definitions( /EHsc )
-ENDIF( WIN32 )
-
-
-# set up include directories
-include_directories( "${PROJECT_BINARY_DIR}/include" )
-include_directories( "${PROJECT_SOURCE_DIR}/include" )
-
-#build the library
-IF ( BUILD_SHARED_LIBS )
- set( LIB_TYPE SHARED )
-ELSE( BUILD_SHARED_LIBS )
- set( LIB_TYPE STATIC )
-ENDIF( BUILD_SHARED_LIBS )
-MESSAGE( "--- Lib type " ${LIB_TYPE} )
-
-
-
-set (SOURCES ${PROJECT_SOURCE_DIR}/core/xbstring.cpp
- ${PROJECT_SOURCE_DIR}/core/xbssv.cpp
- ${PROJECT_SOURCE_DIR}/core/xbdate.cpp
- ${PROJECT_SOURCE_DIR}/core/xbtblmgr.cpp
- ${PROJECT_SOURCE_DIR}/core/xbxbase.cpp
- ${PROJECT_SOURCE_DIR}/core/xbfile.cpp
- ${PROJECT_SOURCE_DIR}/core/xbdbf.cpp
- ${PROJECT_SOURCE_DIR}/core/xbfields.cpp
- ${PROJECT_SOURCE_DIR}/core/xblog.cpp)
-
-IF( XB_MEMO_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo.cpp )
-ENDIF( XB_MEMO_SUPPORT )
-
-IF( XB_DBF3_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbdbf3.cpp )
- IF( XB_MEMO_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo3.cpp )
- ENDIF( XB_MEMO_SUPPORT )
-ENDIF( XB_DBF3_SUPPORT )
-
-IF( XB_DBF4_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbdbf4.cpp )
- IF( XB_MEMO_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo4.cpp )
- ENDIF( XB_MEMO_SUPPORT )
-ENDIF( XB_DBF4_SUPPORT )
-
-IF( XB_FUNCTION_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbfuncs.cpp )
-ENDIF( XB_FUNCTION_SUPPORT )
-
-IF( XB_EXPRESSION_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbexpnode.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbexp.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbuda.cpp )
-ENDIF( XB_EXPRESSION_SUPPORT )
-
-IF( XB_INDEX_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbbcd.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixbase.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbtag.cpp )
-ENDIF( XB_INDEX_SUPPORT )
-
-IF( XB_NDX_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixndx.cpp )
-ENDIF( XB_NDX_SUPPORT )
-
-
-IF( XB_MDX_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixmdx.cpp )
-ENDIF( XB_MDX_SUPPORT )
-
-IF( XB_SQL_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbalttbl.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrix.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrtbl.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdelete.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdrpix.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdrptbl.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbinsert.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbset.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbsql.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbstmt.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbselect.cpp )
-ENDIF( XB_SQL_SUPPORT )
-
-
-IF( XB_FILTER_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbfilter.cpp )
-ENDIF( XB_FILTER_SUPPORT )
-
-IF( XB_BLOCKREAD_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbblockread.cpp )
-ENDIF( XB_BLOCKREAD_SUPPORT )
-
-
-include( GenerateExportHeader )
-#add_library( xbase ${LIB_TYPE} ${SOURCES} )
-add_library( ${XB_LIBNAME} ${LIB_TYPE} ${SOURCES} )
-#add_library( ${CMAKE_PROJECT_NAME} ${LIB_TYPE} ${SOURCES} )
-
-
-IF( WIN32 )
-MESSAGE( "--- Generating Windows Library Headers" )
-
-#GENERATE_EXPORT_HEADER( xbase
-# BASE_NAME xbase
-
-GENERATE_EXPORT_HEADER( ${XB_LIBNAME}
- BASE_NAME ${XB_LIBNAME}
- EXPORT_MACRO_NAME xbase_EXPORT
- EXPORT_FILE_NAME xbase_Export.h
- STATIC_DEFINE xbase_BUILT_AS_STATIC
-)
-ENDIF( WIN32 )
-
-
-#build test programs
-enable_testing()
-
-add_executable( xb_test_string ${PROJECT_SOURCE_DIR}/tests/xb_test_string.cpp )
-target_link_libraries( xb_test_string ${EXTRA_LIBS})
-add_test( NAME xbString COMMAND xb_test_string QUIET )
-
-add_executable( xb_test_date ${PROJECT_SOURCE_DIR}/tests/xb_test_date.cpp )
-target_link_libraries( xb_test_date ${EXTRA_LIBS})
-add_test( NAME xbDate COMMAND xb_test_date QUIET )
-
-add_executable( xb_test_tblmgr ${PROJECT_SOURCE_DIR}/tests/xb_test_tblmgr.cpp )
-target_link_libraries( xb_test_tblmgr ${EXTRA_LIBS})
-add_test( NAME xbTblMgr COMMAND xb_test_tblmgr QUIET )
-
-add_executable( xb_test_xbase ${PROJECT_SOURCE_DIR}/tests/xb_test_xbase.cpp )
-target_link_libraries( xb_test_xbase ${EXTRA_LIBS})
-add_test( NAME xbXBase COMMAND xb_test_xbase QUIET )
-
-add_executable( xb_test_file ${PROJECT_SOURCE_DIR}/tests/xb_test_file.cpp )
-target_link_libraries( xb_test_file ${EXTRA_LIBS})
-add_test( NAME xbFile COMMAND xb_test_file QUIET )
-
-add_executable( xb_test_log ${PROJECT_SOURCE_DIR}/tests/xb_test_log.cpp )
-target_link_libraries( xb_test_log ${EXTRA_LIBS})
-add_test( NAME xbLog COMMAND xb_test_log QUIET )
-
-IF( XB_LINKLIST_SUPPORT )
-add_executable( xb_test_linklist ${PROJECT_SOURCE_DIR}/tests/xb_test_linklist.cpp )
-target_link_libraries( xb_test_linklist ${EXTRA_LIBS})
-add_test( NAME xbLinkList COMMAND xb_test_linklist QUIET )
-ENDIF( XB_LINKLIST_SUPPORT )
-
-IF( XB_DBF3_SUPPORT )
-add_executable( xb_test_dbf_v3_nomemos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v3_nomemos.cpp )
-target_link_libraries( xb_test_dbf_v3_nomemos ${EXTRA_LIBS})
-add_test( NAME xbDbfV3NoMemos COMMAND xb_test_dbf_v3_nomemos QUIET )
-
-IF( XB_MEMO_SUPPORT )
-add_executable( xb_test_dbf_v3_memos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v3_memos.cpp )
-target_link_libraries( xb_test_dbf_v3_memos ${EXTRA_LIBS})
-add_test( NAME xbDbfV3Memos COMMAND xb_test_dbf_v3_memos QUIET )
-
-ENDIF( XB_MEMO_SUPPORT )
-ENDIF( XB_DBF3_SUPPORT )
-
-IF( XB_DBF4_SUPPORT )
-add_executable( xb_test_dbf_v4_nomemos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v4_nomemos.cpp )
-target_link_libraries( xb_test_dbf_v4_nomemos ${EXTRA_LIBS})
-add_test( NAME xbDbfV4NoMemos COMMAND xb_test_dbf_v4_nomemos QUIET )
-
-IF( XB_MEMO_SUPPORT )
-add_executable( xb_test_dbf_v4_memos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v4_memos.cpp )
-target_link_libraries( xb_test_dbf_v4_memos ${EXTRA_LIBS})
-add_test( NAME xbDbfV4Memos COMMAND xb_test_dbf_v4_memos QUIET )
-
-ENDIF( XB_MEMO_SUPPORT )
-ENDIF( XB_DBF4_SUPPORT )
-
-IF( XB_FUNCTION_SUPPORT )
-add_executable( xb_test_funcs ${PROJECT_SOURCE_DIR}/tests/xb_test_funcs.cpp )
-target_link_libraries( xb_test_funcs ${EXTRA_LIBS})
-add_test( NAME xbFunctions COMMAND xb_test_funcs QUIET )
-ENDIF( XB_FUNCTION_SUPPORT )
-
-IF( XB_NDX_SUPPORT )
-IF( XB_DBF3_SUPPORT )
-add_executable( xb_test_ndx ${PROJECT_SOURCE_DIR}/tests/xb_test_ndx.cpp )
-target_link_libraries( xb_test_ndx ${EXTRA_LIBS})
-add_test( NAME xbIxNdx COMMAND xb_test_ndx QUIET )
-ENDIF( XB_DBF3_SUPPORT )
-ENDIF( XB_NDX_SUPPORT )
-
-IF( XB_MDX_SUPPORT )
-IF( XB_DBF4_SUPPORT )
-add_executable( xb_test_mdx ${PROJECT_SOURCE_DIR}/tests/xb_test_mdx.cpp )
-target_link_libraries( xb_test_mdx ${EXTRA_LIBS})
-add_test( NAME xbIxMdx COMMAND xb_test_mdx QUIET )
-ENDIF( XB_DBF4_SUPPORT )
-ENDIF( XB_MDX_SUPPORT )
-
-IF( XB_INDEX_SUPPORT )
-add_executable( xb_test_bcd ${PROJECT_SOURCE_DIR}/tests/xb_test_bcd.cpp )
-target_link_libraries( xb_test_bcd ${EXTRA_LIBS})
-add_test( NAME xbBcd COMMAND xb_test_bcd QUIET )
-ENDIF( XB_INDEX_SUPPORT )
-
-
-IF( XB_EXPRESSION_SUPPORT )
-
-add_executable( xb_test_expnode ${PROJECT_SOURCE_DIR}/tests/xb_test_expnode.cpp )
-target_link_libraries( xb_test_expnode ${EXTRA_LIBS})
-add_test( NAME xbExpNode COMMAND xb_test_expnode QUIET )
-
-
-add_executable( xb_test_expression ${PROJECT_SOURCE_DIR}/tests/xb_test_expression.cpp )
-target_link_libraries( xb_test_expression ${EXTRA_LIBS})
-add_test( NAME xbExpressions COMMAND xb_test_expression QUIET )
-
-add_executable( xb_test_uda ${PROJECT_SOURCE_DIR}/tests/xb_test_uda.cpp )
-target_link_libraries( xb_test_uda ${EXTRA_LIBS})
-add_test( NAME xbUda COMMAND xb_test_uda QUIET )
-
-ENDIF( XB_EXPRESSION_SUPPORT )
-
-IF( XB_SQL_SUPPORT )
-add_executable( xb_test_sql ${PROJECT_SOURCE_DIR}/tests/xb_test_sql.cpp )
-target_link_libraries( xb_test_sql ${EXTRA_LIBS})
-add_test( NAME xbSql COMMAND xb_test_sql QUIET )
-ENDIF( XB_SQL_SUPPORT )
-
-IF( XB_FILTER_SUPPORT )
-add_executable( xb_test_filter ${PROJECT_SOURCE_DIR}/tests/xb_test_filter.cpp )
-target_link_libraries( xb_test_filter ${EXTRA_LIBS})
-add_test( NAME xbFilter COMMAND xb_test_filter QUIET )
-ENDIF( XB_FILTER_SUPPORT )
-
-IF( XB_BLOCKREAD_SUPPORT )
-add_executable( xb_test_blockread ${PROJECT_SOURCE_DIR}/tests/xb_test_blockread.cpp )
-target_link_libraries( xb_test_blockread ${EXTRA_LIBS})
-add_test( NAME xbBlockRead COMMAND xb_test_blockread QUIET )
-ENDIF( XB_BLOCKREAD_SUPPORT )
-
-
-IF( XB_LOCKING_SUPPORT )
-add_executable( xb_test_lock ${PROJECT_SOURCE_DIR}/tests/xb_test_lock.cpp )
-target_link_libraries( xb_test_lock ${EXTRA_LIBS})
-add_test( NAME xbLock COMMAND xb_test_lock QUIET )
-IF( HAVE_CREATEPROCESSW_F )
-add_executable( xb_test_lock2 ${PROJECT_SOURCE_DIR}/tests/xb_test_lock2.cpp )
-target_link_libraries( xb_test_lock2 ${EXTRA_LIBS})
-ENDIF( HAVE_CREATEPROCESSW_F )
-ENDIF( XB_LOCKING_SUPPORT )
-
-#build example programs
-IF( XB_EXAMPLES_SUPPORT )
- add_executable( xb_ex_string ${PROJECT_SOURCE_DIR}/examples/xb_ex_string.cpp )
- target_link_libraries( xb_ex_string ${EXTRA_LIBS})
-
- add_executable( xb_ex_date ${PROJECT_SOURCE_DIR}/examples/xb_ex_date.cpp )
- target_link_libraries( xb_ex_date ${EXTRA_LIBS})
-
- IF( XB_DBF3_SUPPORT )
- add_executable( xb_ex_v3_create_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v3_create_dbf.cpp )
- target_link_libraries( xb_ex_v3_create_dbf ${EXTRA_LIBS})
-
- add_executable( xb_ex_v3_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v3_upd_dbf.cpp )
- target_link_libraries( xb_ex_v3_upd_dbf ${EXTRA_LIBS})
- ENDIF( XB_DBF3_SUPPORT )
-
- IF( XB_DBF4_SUPPORT )
- add_executable( xb_ex_v4_create_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_create_dbf.cpp )
- target_link_libraries( xb_ex_v4_create_dbf ${EXTRA_LIBS})
- ENDIF( XB_DBF4_SUPPORT )
-
- IF( XB_EXPRESSION_SUPPORT )
- add_executable( xb_ex_expression ${PROJECT_SOURCE_DIR}/examples/xb_ex_expression.cpp )
- target_link_libraries( xb_ex_expression ${EXTRA_LIBS})
- ENDIF( XB_EXPRESSION_SUPPORT )
-
- add_executable( xb_ex_v4_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_upd_dbf.cpp )
- target_link_libraries( xb_ex_v4_upd_dbf ${EXTRA_LIBS})
-
- add_executable( xb_ex_ssv ${PROJECT_SOURCE_DIR}/examples/xb_ex_ssv.cpp )
- target_link_libraries( xb_ex_ssv ${EXTRA_LIBS})
-
-ENDIF( XB_EXAMPLES_SUPPORT )
-
-#build utility programs
-IF( XB_UTILS_SUPPORT )
-
- add_executable( xb_cfg_check ${PROJECT_SOURCE_DIR}/utils/xb_cfg_check.cpp )
- target_link_libraries( xb_cfg_check ${EXTRA_LIBS})
-
- add_executable( xb_copydbf ${PROJECT_SOURCE_DIR}/utils/xb_copydbf.cpp )
- target_link_libraries( xb_copydbf ${EXTRA_LIBS})
-
- add_executable( xb_dbfutil ${PROJECT_SOURCE_DIR}/utils/xb_dbfutil.cpp )
- target_link_libraries( xb_dbfutil ${EXTRA_LIBS})
-
- add_executable( xb_deletall ${PROJECT_SOURCE_DIR}/utils/xb_deletall.cpp )
- target_link_libraries( xb_deletall ${EXTRA_LIBS})
-
- add_executable( xb_dumpdbt ${PROJECT_SOURCE_DIR}/utils/xb_dumpdbt.cpp )
- target_link_libraries( xb_dumpdbt ${EXTRA_LIBS})
-
- add_executable( xb_dumprecs ${PROJECT_SOURCE_DIR}/utils/xb_dumprecs.cpp )
- target_link_libraries( xb_dumprecs ${EXTRA_LIBS})
-
- add_executable( xb_tblinfo ${PROJECT_SOURCE_DIR}/utils/xb_tblinfo.cpp )
- target_link_libraries( xb_tblinfo ${EXTRA_LIBS})
-
- IF( XB_SQL_SUPPORT )
- add_executable( xb_execsql ${PROJECT_SOURCE_DIR}/utils/xb_execsql.cpp )
- target_link_libraries( xb_execsql ${EXTRA_LIBS})
- ENDIF( XB_SQL_SUPPORT )
-
- add_executable( xb_pack ${PROJECT_SOURCE_DIR}/utils/xb_pack.cpp )
- target_link_libraries( xb_pack ${EXTRA_LIBS})
-
- add_executable( xb_undelall ${PROJECT_SOURCE_DIR}/utils/xb_undelall.cpp )
- target_link_libraries( xb_undelall ${EXTRA_LIBS})
-
- install (TARGETS xb_cfg_check DESTINATION bin)
- install (TARGETS xb_copydbf DESTINATION bin)
- install (TARGETS xb_dbfutil DESTINATION bin)
- install (TARGETS xb_deletall DESTINATION bin)
- install (TARGETS xb_dumpdbt DESTINATION bin)
- install (TARGETS xb_dumprecs DESTINATION bin)
- install (TARGETS xb_pack DESTINATION bin)
- install (TARGETS xb_undelall DESTINATION bin)
- IF( XB_SQL_SUPPORT )
- install (TARGETS xb_execsql DESTINATION bin)
- ENDIF( XB_SQL_SUPPORT )
-
-
-
-ENDIF( XB_UTILS_SUPPORT )
-
-install (FILES include/xbconfig.h
- ${PROJECT_SOURCE_DIR}/include/xbase.h
- ${PROJECT_SOURCE_DIR}/include/xbbcd.h
- ${PROJECT_SOURCE_DIR}/include/xbdate.h
- ${PROJECT_SOURCE_DIR}/include/xbdbf.h
- ${PROJECT_SOURCE_DIR}/include/xbexp.h
- ${PROJECT_SOURCE_DIR}/include/xbexpnode.h
- ${PROJECT_SOURCE_DIR}/include/xbfile.h
- ${PROJECT_SOURCE_DIR}/include/xbindex.h
- ${PROJECT_SOURCE_DIR}/include/xblnklst.h
- ${PROJECT_SOURCE_DIR}/include/xblnklstord.h
- ${PROJECT_SOURCE_DIR}/include/xblnknod.h
- ${PROJECT_SOURCE_DIR}/include/xblog.h
- ${PROJECT_SOURCE_DIR}/include/xbmemo.h
- ${PROJECT_SOURCE_DIR}/include/xbretcod.h
- ${PROJECT_SOURCE_DIR}/include/xbsql.h
- ${PROJECT_SOURCE_DIR}/include/xbssv.h
- ${PROJECT_SOURCE_DIR}/include/xbstring.h
- ${PROJECT_SOURCE_DIR}/include/xbtblmgr.h
- ${PROJECT_SOURCE_DIR}/include/xbtypes.h
- ${PROJECT_SOURCE_DIR}/include/xbxbase.h
- ${PROJECT_SOURCE_DIR}/include/xbuda.h
- ${PROJECT_SOURCE_DIR}/include/xbtag.h
- ${PROJECT_SOURCE_DIR}/include/xbfilter.h
- ${PROJECT_SOURCE_DIR}/include/xbblkread.h
- ${PROJECT_SOURCE_DIR}/include/xbsql.h
-
- DESTINATION include/${CMAKE_PROJECT_NAME})
-
-IF( NOT WIN32 )
-install (FILES ${PROJECT_PARENT_DIR}/docs/man/xb_cfg_chk.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_copydbf.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_dbfutil.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_deletall.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_dumpdbt.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_dumprecs.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_pack.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_tblinfo.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_undelall.1.gz
-
- DESTINATION man/man1)
-
-ENDIF( NOT WIN32 )
-
-
-SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.1.0 SOVERSION 0 )
-
-IF( EXISTS /usr/local/lib64 )
-install (TARGETS ${XB_LIBNAME} DESTINATION lib64/${CMAKE_PROJECT_NAME})
-ELSE( EXISTS /usr/local/lib64 )
-install (TARGETS ${XB_LIBNAME} DESTINATION lib/${CMAKE_PROJECT_NAME})
-ENDIF( EXISTS /usr/local/lib64 )
-
-
diff --git a/build/linux64/CMakeLists.txt b/build/linux64/CMakeLists.txt
deleted file mode 100755
index f514c5c..0000000
--- a/build/linux64/CMakeLists.txt
+++ /dev/null
@@ -1,761 +0,0 @@
-cmake_minimum_required(VERSION 3.0)
-
-project (xbase64)
-set( xbase_VERSION_MAJOR 4 )
-set( xbase_VERSION_MINOR 1 )
-set( xbase_VERSION_PATCH 0 )
-
-MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
-MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
-MESSAGE( "--- Project Name: " ${CMAKE_PROJECT_NAME} )
-MESSAGE( "--- Install Prefix: " ${CMAKE_INSTALL_PREFIX} )
-
-#Set compiler options
-
-IF( CMAKE_COMPILER_IS_GNUCXX )
- MESSAGE( "Setting GNU compiler options" )
- add_compile_options( -Wall -Wsign-conversion )
-# add_compile_options( -Wall -Wconversion -Wsign-conversion )
- SET( VERBOSE 1 )
-ENDIF( CMAKE_COMPILER_IS_GNUCXX )
-
-IF( BORLAND )
- MESSAGE ("BORLAND COMPILER" )
- #set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w-8022" )
- add_compile_options( -w-8022 )
-ENDIF( BORLAND )
-
-
-MESSAGE( "--- Checking integer sizes" )
-INCLUDE(CheckTypeSize)
-CHECK_TYPE_SIZE( "short int" SHORT_INT )
-CHECK_TYPE_SIZE( int INT )
-CHECK_TYPE_SIZE( __int32 __INT32 )
-CHECK_TYPE_SIZE( int32_t INT32_T )
-CHECK_TYPE_SIZE( long LONG_INT )
-CHECK_TYPE_SIZE( __int64 __INT64 )
-CHECK_TYPE_SIZE( int64_t INT64_T )
-CHECK_TYPE_SIZE( "long long" LONG_LONG )
-CHECK_TYPE_SIZE( u_int64_t U_INT64_T )
-CHECK_TYPE_SIZE( uint64_t UINT64_T )
-CHECK_TYPE_SIZE( "unsigned __int64" UNSIGNED__INT64 )
-CHECK_TYPE_SIZE( "unsigned long long" UNSIGNED_LONG_LONG )
-
-CHECK_TYPE_SIZE( "double" DOUBLE )
-MESSAGE( "--- Double size = " ${DOUBLE} )
-
-
-#determine how 16 bit integer defined on this platform
-SET( iSize 0 )
-IF( HAVE_SHORT_INT AND ${SHORT_INT} EQUAL 2 )
- SET( xbInt16 "short int" )
- SET( xbUInt16 "unsigned short int" )
- SET( iSize ${SHORT_INT} )
- MESSAGE( "--- xbInt16 = [short int]" )
- MESSAGE( "--- xbUInt16 = [unsigned short int]" )
-
-ENDIF( HAVE_SHORT_INT AND ${SHORT_INT} EQUAL 2 )
-IF( NOT ${iSize} EQUAL 2 )
- MESSAGE( "FATAL_ERROR Could not detect 16 bit integer type" )
- MESSAGE( ${iSize} )
- RETURN()
-ENDIF( NOT ${iSize} EQUAL 2 )
-
-#determine how 32 bit integer defined on this platform
-SET( iSize 0 )
-IF( HAVE_INT AND ${INT} EQUAL 4 )
- SET( xbInt32 int )
- SET( xbUInt32 "unsigned int" )
- SET( iSize ${INT} )
- MESSAGE( "--- xbInt32 = [int]" )
- MESSAGE( "--- xbUInt32 = [unsigned int]" )
-ENDIF( HAVE_INT AND ${INT} EQUAL 4 )
-
-IF(( NOT iSize EQUAL 4 ) AND HAVE___INT32 )
- MESSAGE( __int untested if block - see CMakeLists.txt)
- SET( xbInt32 __int32 )
- SET( xbUInt32 "unsigned __int32" )
- SET( iSize ${__INT} )
- MESSAGE( "--- xbInt32 = [__int]" )
- MESSAGE( "--- xbUInt32 = [unsigned __int]" )
-ENDIF(( NOT iSize EQUAL 4 ) AND HAVE___INT32 )
-
-IF(( NOT iSize EQUAL 4 ) AND HAVE_INT32_T )
- SET( xbInt32 int32_t )
- SET( xbUInt32 "u_int32_t" )
- SET( iSize ${INT32_T} )
- MESSAGE( "--- xbInt32 = [int32_t]" )
- MESSAGE( "--- xbUInt32 = [u_int32_t]" )
-ENDIF(( NOT iSize EQUAL 4 ) AND HAVE_INT32_T )
-
-IF( NOT ${iSize} EQUAL 4 )
- MESSAGE( "FATAL_ERROR Could not detect 32 bit integer type" )
- MESSAGE( ${iSize} )
- RETURN()
-ENDIF( NOT ${iSize} EQUAL 4 )
-
-#determine how 64 bit integer defined on this platform
-SET( iSize 0 )
-IF( HAVE___INT64 )
- SET( xbInt64 __int64 )
- SET( iSize ${__INT64} )
- MESSAGE( "--- xbInt64 = [__int64]" )
-ENDIF( HAVE___INT64 )
-
-IF(( NOT iSize EQUAL 8 ) AND HAVE_INT64_T )
- SET( xbInt64 int64_t )
- SET( iSize ${INT64_T} )
- MESSAGE( "--- xbInt64 = [int64_t]" )
-ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_INT64_T )
-
-IF(( NOT iSize EQUAL 8 ) AND HAVE_LONG_LONG )
- SET( xbInt64 "long long" )
- SET( iSize ${LONG_LONG} )
- MESSAGE( "--- xbInt64 = [long long]" )
-ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_LONG_LONG )
-
-IF( NOT ${iSize} EQUAL 8 )
- MESSAGE( "FATAL_ERROR Could not detect 64 bit integer type" )
- MESSAGE( ${iSize} )
- RETURN()
-ENDIF( NOT ${iSize} EQUAL 8 )
-
-#determine how 64 bit unsigned integer defined on this platform
-SET( iSize 0 )
-IF( HAVE_UNSIGNED__INT64 )
- SET( xbUInt64 "unsigned __int64" )
- SET( iSize ${UNSIGNED__INT64} )
- MESSAGE( "--- xbUInt64 = [unsigned __int64]" )
-ENDIF( HAVE_UNSIGNED__INT64 )
-
-IF(( NOT iSize EQUAL 8 ) AND HAVE_UINT64_T )
- SET( xbUInt64 "uint64_t" )
- SET( iSize ${UINT64_T} )
- MESSAGE( "--- xbUInt64 = [uint64_t]" )
-ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_UINT64_T )
-
-IF(( NOT iSize EQUAL 8 ) AND HAVE_U_INT64_T )
- SET( xbUInt64 u_int64_t )
- SET( iSize ${U_INT64_T} )
- MESSAGE( "--- xbUInt64 = [u_int64_t]" )
-ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_U_INT64_T )
-
-IF(( NOT iSize EQUAL 8 ) AND HAVE_UNSIGNED_LONG_LONG )
- SET( xbUInt64 "unsigned long long" )
- SET( iSize ${UNSIGNED_LONG_LONG} )
- MESSAGE( "--- xbUInt64 = [unsigned long long]" )
-ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_UNSIGNED_LONG_LONG )
-
-IF( NOT ${iSize} EQUAL 8 )
- MESSAGE( "FATAL_ERROR Could not detect 64 bit unsigned integer type" )
- MESSAGE( ${iSize} )
- RETURN()
-ENDIF( NOT ${iSize} EQUAL 8 )
-
-#Library options
-option( BUILD_SHARED_LIBS "Build shared libraries" ON)
-option( XB_DBF3_SUPPORT "Compile DBase File Format Version 3 support" ON)
-option( XB_DBF4_SUPPORT "Compile DBase File Format Version 4 support" ON)
-option( XB_MEMO_SUPPORT "Compile memo field support into library" ON)
-option( XB_NDX_SUPPORT "Compile NDX Index support into library" ON)
-option( XB_MDX_SUPPORT "Compile MDX Index support into library" ON)
-option( XB_LOCKING_SUPPORT "Compile Multi User Locking support into library" ON)
-
-option( XB_LOGGING_SUPPORT "Compile message logging support into library" ON)
-option( XB_LINKLIST_SUPPORT "Compile Link List routines into library" ON)
-option( XB_FUNCTION_SUPPORT "Compile XBase Function support into library" ON)
-option( XB_EXPRESSION_SUPPORT "Compile Expression support into library" ON)
-option( XB_INF_SUPPORT "Compile NDX INF file support into library" ON)
-option( XB_FILTER_SUPPORT "Compile Filter support into library" ON)
-option( XB_BLOCKREAD_SUPPORT "Compile Block Read support into library" ON)
-option( XB_SQL_SUPPORT "Compile SQL support into library - alpha" ON)
-option( XB_DEBUG_SUPPORT "Compile debug logic into library" ON)
-option( XB_UTILS_SUPPORT "Compile utility programs" ON)
-option( XB_EXAMPLES_SUPPORT "Compile example programs" ON)
-
-Message( "--- BUILD_SHARED_LIBS " ${BUILD_SHARED_LIBS})
-Message( "--- XB_DBF3_SUPPORT " ${XB_DBF3_SUPPORT})
-Message( "--- XB_DBF4_SUPPORT " ${XB_DBF4_SUPPORT})
-Message( "--- XB_MEMO_SUPPORT " ${XB_MEMO_SUPPORT})
-Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
-Message( "--- XB_MDX_SUPPORT " ${XB_MDX_SUPPORT})
-Message( "--- XB_LOCKING_SUPPORT " ${XB_LOCKING_SUPPORT})
-Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
-Message( "--- XB_FUNCTION_SUPPORT " ${XB_FUNCTION_SUPPORT})
-Message( "--- XB_EXPRESSION_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_FILTER_SUPPORT " ${XB_FILTER_SUPPORT})
-Message( "--- XB_DEBUG_SUPPORT " ${XB_DEBUG_SUPPORT})
-Message( "--- XB_UTILS_SUPPORT " ${XB_UTILS_SUPPORT})
-Message( "--- XB_EXAMPLES_SUPPORT " ${XB_EXAMPLES_SUPPORT})
-Message( "--- XB_LOGGING_SUPPORT " ${XB_LOGGING_SUPPORT})
-Message( "--- XB_SQL_SUPPORT " ${XB_SQL_SUPPORT})
-Message( "--- XB_INF_SUPPORT " ${XB_INF_SUPPORT})
-
-IF( XB_DEBUG_SUPPORT )
- Message( "--- Adding debug support" )
- set( CMAKE_BUILD_TYPE Debug )
-IF( CMAKE_COMPILER_IS_GNUCXX )
- add_compile_options( -Og )
-ENDIF( CMAKE_COMPILER_IS_GNUCXX )
-ENDIF( XB_DEBUG_SUPPORT )
-
-IF( CMAKE_SIZEOF_VOID_P EQUAL 8 )
- MESSAGE( "--- 64 bit compiler detected" )
- set( XB_PLATFORM "x64" )
- set( XB_PLATFORM_64 1 )
- set( XB_LIBNAME "xbase64" )
-
-ELSE( CMAKE_SIZEOF_VOID_P EQUAL 8 )
- MESSAGE( "--- 32 bit compiler detected" )
- set( XB_PLATFORM "x86" )
- set( XB_PLATFORM_32 1 )
- set( XB_LIBNAME "xbase32" )
-
-ENDIF( CMAKE_SIZEOF_VOID_P EQUAL 8 )
-
-
-#Check for the existence of various header files
-INCLUDE (CheckIncludeFiles)
-CHECK_INCLUDE_FILES (ctype.h HAVE_CTYPE_H)
-CHECK_INCLUDE_FILES (dirent.h HAVE_DIRENT_H)
-CHECK_INCLUDE_FILES (fcntl.h HAVE_FCNTL_H)
-CHECK_INCLUDE_FILES (inttypes.h HAVE_INTTYPES_H)
-CHECK_INCLUDE_FILES (pwd.h HAVE_PWD_H)
-CHECK_INCLUDE_FILES (stdarg.h HAVE_STDARG_H)
-CHECK_INCLUDE_FILES (stdargs.h HAVE_STDARGS_H)
-CHECK_INCLUDE_FILES (string.h HAVE_STRING_H)
-CHECK_INCLUDE_FILES (strings.h HAVE_STRINGS_H)
-CHECK_INCLUDE_FILES (sys/stat.h HAVE_STAT_H)
-CHECK_INCLUDE_FILES (unistd.h HAVE_UNISTD_H)
-CHECK_INCLUDE_FILES (varargs.h HAVE_VARARGS_H)
-CHECK_INCLUDE_FILES (windows.h HAVE_WINDOWS_H)
-
-#Check for the existence of various function calls
-INCLUDE( CheckFunctionExists )
-CHECK_FUNCTION_EXISTS(_close HAVE__CLOSE_F)
-CHECK_FUNCTION_EXISTS(fcntl HAVE_FCNTL_F)
-CHECK_FUNCTION_EXISTS(_fdopen HAVE__FDOPEN_F)
-CHECK_FUNCTION_EXISTS(fopen_s HAVE_FOPEN_S_F)
-CHECK_FUNCTION_EXISTS(_fsopen HAVE__FSOPEN_F)
-CHECK_FUNCTION_EXISTS(_fileno HAVE__FILENO_F)
-CHECK_FUNCTION_EXISTS(fork HAVE_FORK_F)
-CHECK_FUNCTION_EXISTS(_fseeki64 HAVE__FSEEKI64_F)
-CHECK_FUNCTION_EXISTS(fseeko HAVE_FSEEKO_F)
-CHECK_FUNCTION_EXISTS(ftruncate HAVE_FTRUNCATE_F)
-CHECK_FUNCTION_EXISTS(_localtime64_s HAVE__LOCALTIME64_S_F)
-CHECK_FUNCTION_EXISTS(LockFile HAVE_LOCKFILE_F)
-CHECK_FUNCTION_EXISTS(locking HAVE_LOCKING_F)
-CHECK_FUNCTION_EXISTS(_locking HAVE__LOCKING_F)
-CHECK_FUNCTION_EXISTS(_open HAVE__OPEN_F)
-CHECK_FUNCTION_EXISTS(SetEndOfFile HAVE_SETENDOFFILE_F)
-
-CHECK_FUNCTION_EXISTS(vsnprintf HAVE_VSNPRINTF_F)
-CHECK_FUNCTION_EXISTS(_vsnprintf_s HAVE__VSNPRINTF_S_F)
-
-
-CHECK_FUNCTION_EXISTS(getopt HAVE_GETOPT_F)
-
-IF( WIN32 )
-
-# Use CHECK_SYMBOL_EXISTS for the Win32API instead of CHECK_FUNCTION_EXISTS
-# Can't detect inline functions in headers
-# Can't detect due to mismatch of calling conventions
-# Can't detect mangled names
-
-INCLUDE( CheckSymbolExists )
-CHECK_SYMBOL_EXISTS(CreateProcessW Windows.h HAVE_CREATEPROCESSW_F )
-CHECK_SYMBOL_EXISTS(vsprintf_s stdio.h HAVE_VSPRINTF_S_F )
-
-ENDIF ( WIN32 )
-
-# IF( NOT HAVE_SENTENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND BORLAND )
-# # ----fix me----
-# # cmake CHECK_FUNCTION_EXISTS - could not find Borland 5.5 SetEndOfFile
-# Set( HAVE_SETENDOFFILE_F "HAVE_SETENDOFFILE_H" )
-# ENDIF ( NOT HAVE_SENTENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND BORLAND )
-
-IF( NOT HAVE_SETENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND WIN32 )
- # ----fix me----
- # cmake CHECK_FUNCTION_EXISTS - could not find Borland 5.5, or Windows VS 32 bit SetEndOfFile
- Set( HAVE_SETENDOFFILE_F "HAVE_SETENDOFFILE_F" )
-ENDIF ( NOT HAVE_SETENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND WIN32 )
-
-IF( XB_NDX_SUPPORT OR XB_MDX_SUPPORT )
- Set( XB_INDEX_SUPPORT "1" )
-ENDIF( XB_NDX_SUPPORT OR XB_MDX_SUPPORT )
-
-
-# Set directories
-# PROJECT_PARENT_DIR is two nodes higher
-get_filename_component( PROJECT_PARENT_DIR ${PROJECT_BINARY_DIR} DIRECTORY )
-get_filename_component( PROJECT_PARENT_DIR ${PROJECT_PARENT_DIR} DIRECTORY )
-
-# MESSAGE( "PROJECT_PARENT_DIR = " ${PROJECT_PARENT_DIR} )
-# MESSAGE( "PROJECT_BINARY_DIR = " ${PROJECT_BINARY_DIR} )
-
-
-set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin/${XB_PLATFORM})
-set( LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib/${XB_PLATFORM})
-set( PROJECT_SOURCE_DIR ${PROJECT_PARENT_DIR}/src)
-set( PROJECT_DATA_DIR ${PROJECT_PARENT_DIR}/data/)
-set( PROJECT_LOG_DIR ${PROJECT_PARENT_DIR}/logs/)
-set( EXTRA_LIBS ${EXTRA_LIBS} ${XB_LIBNAME})
-
-
-
-# Undo bad decisions
-IF( XB_PLATFORM_32 AND XB_LARGEFILE_SUPPORT )
- MESSAGE( "--- Can't build 64 bit environment with a 32 bit compiler" )
- MESSAGE( "--- XB_LARGEFILE_SUPPORT set to OFF" )
- set( XB_LARGEFILE_SUPPORT OFF CACHE BOOL "Use 64 bit large file support?" FORCE )
-ENDIF ( XB_PLATFORM_32 AND XB_LARGEFILE_SUPPORT )
-
-IF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
- MESSAGE( "--- At lease one file format is required. Defaulting to Version 4" )
- set( XB_DBF4_SUPPORT ON CACHE BOOL "Compile DBase File Format Version 4 support" FORCE )
-ENDIF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
-
-IF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
- MESSAGE( "--- Link List support required for DBF V4 Memo files. Setting to ON" )
- set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
-ENDIF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
-
-IF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
- MESSAGE( "--- Link List support required for locking functions. Setting to ON" )
- set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
-ENDIF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
-
-IF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
- MESSAGE( "--- Expression required for indices. Setting to ON" )
- set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
-ENDIF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
-
-IF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
- MESSAGE( "--- Function support required for expressions. Setting to ON" )
- set( XB_FUNCTION_SUPPORT ON CACHE BOOL "Compile XBase Function support into library" FORCE )
-ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
-
-IF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
- MESSAGE( "--- Linklist support required for expressions. Setting to ON" )
- set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
-ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
-
-IF( XB_SQL_SUPPORT AND NOT XB_MEMO_SUPPORT )
- MESSAGE( "--- Memo support required for SQL. Setting to ON" )
- set( XB_MEMO_SUPPORT ON CACHE BOOL "Compile memo field support into library" FORCE )
-ENDIF( XB_SQL_SUPPORT AND NOT XB_MEMO_SUPPORT )
-
-IF( XB_SQL_SUPPORT AND NOT XB_DBF4_SUPPORT )
- MESSAGE( "--- DBF4 support required for SQL. Setting to ON" )
- set( XB_DBF4_SUPPORT ON CACHE BOOL "Compile DBase File Format Version 4 support" FORCE )
-ENDIF( XB_SQL_SUPPORT AND NOT XB_DBF4_SUPPORT )
-
-IF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
- MESSAGE( "--- Expression required for filters. Setting to ON" )
- set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
-ENDIF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
-
-IF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
- MESSAGE( "--- BLOCKREAD support required for SQL. Setting to ON" )
- set( XB_BLOCKREAD_SUPPORT ON CACHE BOOL "Compile Block Read support into library" FORCE )
-ENDIF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
-
-
-# Build configuration header file
-configure_file (
- "${PROJECT_SOURCE_DIR}/include/xbconfig.h.in"
- "${PROJECT_BINARY_DIR}/include/xbconfig.h"
-)
-
-# Microsoft Windows settings
-IF( WIN32 )
-# add_definitions( /D_CRT_SECURE_NO_WARNINGS)
- add_definitions( /EHsc )
-ENDIF( WIN32 )
-
-
-# set up include directories
-include_directories( "${PROJECT_BINARY_DIR}/include" )
-include_directories( "${PROJECT_SOURCE_DIR}/include" )
-
-#build the library
-IF ( BUILD_SHARED_LIBS )
- set( LIB_TYPE SHARED )
-ELSE( BUILD_SHARED_LIBS )
- set( LIB_TYPE STATIC )
-ENDIF( BUILD_SHARED_LIBS )
-MESSAGE( "--- Lib type " ${LIB_TYPE} )
-
-
-
-set (SOURCES ${PROJECT_SOURCE_DIR}/core/xbstring.cpp
- ${PROJECT_SOURCE_DIR}/core/xbssv.cpp
- ${PROJECT_SOURCE_DIR}/core/xbdate.cpp
- ${PROJECT_SOURCE_DIR}/core/xbtblmgr.cpp
- ${PROJECT_SOURCE_DIR}/core/xbxbase.cpp
- ${PROJECT_SOURCE_DIR}/core/xbfile.cpp
- ${PROJECT_SOURCE_DIR}/core/xbdbf.cpp
- ${PROJECT_SOURCE_DIR}/core/xbfields.cpp
- ${PROJECT_SOURCE_DIR}/core/xblog.cpp)
-
-IF( XB_MEMO_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo.cpp )
-ENDIF( XB_MEMO_SUPPORT )
-
-IF( XB_DBF3_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbdbf3.cpp )
- IF( XB_MEMO_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo3.cpp )
- ENDIF( XB_MEMO_SUPPORT )
-ENDIF( XB_DBF3_SUPPORT )
-
-IF( XB_DBF4_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbdbf4.cpp )
- IF( XB_MEMO_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo4.cpp )
- ENDIF( XB_MEMO_SUPPORT )
-ENDIF( XB_DBF4_SUPPORT )
-
-IF( XB_FUNCTION_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbfuncs.cpp )
-ENDIF( XB_FUNCTION_SUPPORT )
-
-IF( XB_EXPRESSION_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbexpnode.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbexp.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbuda.cpp )
-ENDIF( XB_EXPRESSION_SUPPORT )
-
-IF( XB_INDEX_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbbcd.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixbase.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbtag.cpp )
-ENDIF( XB_INDEX_SUPPORT )
-
-IF( XB_NDX_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixndx.cpp )
-ENDIF( XB_NDX_SUPPORT )
-
-
-IF( XB_MDX_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixmdx.cpp )
-ENDIF( XB_MDX_SUPPORT )
-
-IF( XB_SQL_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbalttbl.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrix.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrtbl.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdelete.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdrpix.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdrptbl.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbinsert.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbset.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbsql.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbstmt.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbselect.cpp )
-ENDIF( XB_SQL_SUPPORT )
-
-
-IF( XB_FILTER_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbfilter.cpp )
-ENDIF( XB_FILTER_SUPPORT )
-
-IF( XB_BLOCKREAD_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbblockread.cpp )
-ENDIF( XB_BLOCKREAD_SUPPORT )
-
-
-include( GenerateExportHeader )
-#add_library( xbase ${LIB_TYPE} ${SOURCES} )
-add_library( ${XB_LIBNAME} ${LIB_TYPE} ${SOURCES} )
-#add_library( ${CMAKE_PROJECT_NAME} ${LIB_TYPE} ${SOURCES} )
-
-
-IF( WIN32 )
-MESSAGE( "--- Generating Windows Library Headers" )
-
-#GENERATE_EXPORT_HEADER( xbase
-# BASE_NAME xbase
-
-GENERATE_EXPORT_HEADER( ${XB_LIBNAME}
- BASE_NAME ${XB_LIBNAME}
- EXPORT_MACRO_NAME xbase_EXPORT
- EXPORT_FILE_NAME xbase_Export.h
- STATIC_DEFINE xbase_BUILT_AS_STATIC
-)
-ENDIF( WIN32 )
-
-
-#build test programs
-enable_testing()
-
-add_executable( xb_test_string ${PROJECT_SOURCE_DIR}/tests/xb_test_string.cpp )
-target_link_libraries( xb_test_string ${EXTRA_LIBS})
-add_test( NAME xbString COMMAND xb_test_string QUIET )
-
-add_executable( xb_test_date ${PROJECT_SOURCE_DIR}/tests/xb_test_date.cpp )
-target_link_libraries( xb_test_date ${EXTRA_LIBS})
-add_test( NAME xbDate COMMAND xb_test_date QUIET )
-
-add_executable( xb_test_tblmgr ${PROJECT_SOURCE_DIR}/tests/xb_test_tblmgr.cpp )
-target_link_libraries( xb_test_tblmgr ${EXTRA_LIBS})
-add_test( NAME xbTblMgr COMMAND xb_test_tblmgr QUIET )
-
-add_executable( xb_test_xbase ${PROJECT_SOURCE_DIR}/tests/xb_test_xbase.cpp )
-target_link_libraries( xb_test_xbase ${EXTRA_LIBS})
-add_test( NAME xbXBase COMMAND xb_test_xbase QUIET )
-
-add_executable( xb_test_file ${PROJECT_SOURCE_DIR}/tests/xb_test_file.cpp )
-target_link_libraries( xb_test_file ${EXTRA_LIBS})
-add_test( NAME xbFile COMMAND xb_test_file QUIET )
-
-add_executable( xb_test_log ${PROJECT_SOURCE_DIR}/tests/xb_test_log.cpp )
-target_link_libraries( xb_test_log ${EXTRA_LIBS})
-add_test( NAME xbLog COMMAND xb_test_log QUIET )
-
-IF( XB_LINKLIST_SUPPORT )
-add_executable( xb_test_linklist ${PROJECT_SOURCE_DIR}/tests/xb_test_linklist.cpp )
-target_link_libraries( xb_test_linklist ${EXTRA_LIBS})
-add_test( NAME xbLinkList COMMAND xb_test_linklist QUIET )
-ENDIF( XB_LINKLIST_SUPPORT )
-
-IF( XB_DBF3_SUPPORT )
-add_executable( xb_test_dbf_v3_nomemos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v3_nomemos.cpp )
-target_link_libraries( xb_test_dbf_v3_nomemos ${EXTRA_LIBS})
-add_test( NAME xbDbfV3NoMemos COMMAND xb_test_dbf_v3_nomemos QUIET )
-
-IF( XB_MEMO_SUPPORT )
-add_executable( xb_test_dbf_v3_memos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v3_memos.cpp )
-target_link_libraries( xb_test_dbf_v3_memos ${EXTRA_LIBS})
-add_test( NAME xbDbfV3Memos COMMAND xb_test_dbf_v3_memos QUIET )
-
-ENDIF( XB_MEMO_SUPPORT )
-ENDIF( XB_DBF3_SUPPORT )
-
-IF( XB_DBF4_SUPPORT )
-add_executable( xb_test_dbf_v4_nomemos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v4_nomemos.cpp )
-target_link_libraries( xb_test_dbf_v4_nomemos ${EXTRA_LIBS})
-add_test( NAME xbDbfV4NoMemos COMMAND xb_test_dbf_v4_nomemos QUIET )
-
-IF( XB_MEMO_SUPPORT )
-add_executable( xb_test_dbf_v4_memos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v4_memos.cpp )
-target_link_libraries( xb_test_dbf_v4_memos ${EXTRA_LIBS})
-add_test( NAME xbDbfV4Memos COMMAND xb_test_dbf_v4_memos QUIET )
-
-ENDIF( XB_MEMO_SUPPORT )
-ENDIF( XB_DBF4_SUPPORT )
-
-IF( XB_FUNCTION_SUPPORT )
-add_executable( xb_test_funcs ${PROJECT_SOURCE_DIR}/tests/xb_test_funcs.cpp )
-target_link_libraries( xb_test_funcs ${EXTRA_LIBS})
-add_test( NAME xbFunctions COMMAND xb_test_funcs QUIET )
-ENDIF( XB_FUNCTION_SUPPORT )
-
-IF( XB_NDX_SUPPORT )
-IF( XB_DBF3_SUPPORT )
-add_executable( xb_test_ndx ${PROJECT_SOURCE_DIR}/tests/xb_test_ndx.cpp )
-target_link_libraries( xb_test_ndx ${EXTRA_LIBS})
-add_test( NAME xbIxNdx COMMAND xb_test_ndx QUIET )
-ENDIF( XB_DBF3_SUPPORT )
-ENDIF( XB_NDX_SUPPORT )
-
-IF( XB_MDX_SUPPORT )
-IF( XB_DBF4_SUPPORT )
-add_executable( xb_test_mdx ${PROJECT_SOURCE_DIR}/tests/xb_test_mdx.cpp )
-target_link_libraries( xb_test_mdx ${EXTRA_LIBS})
-add_test( NAME xbIxMdx COMMAND xb_test_mdx QUIET )
-ENDIF( XB_DBF4_SUPPORT )
-ENDIF( XB_MDX_SUPPORT )
-
-IF( XB_INDEX_SUPPORT )
-add_executable( xb_test_bcd ${PROJECT_SOURCE_DIR}/tests/xb_test_bcd.cpp )
-target_link_libraries( xb_test_bcd ${EXTRA_LIBS})
-add_test( NAME xbBcd COMMAND xb_test_bcd QUIET )
-ENDIF( XB_INDEX_SUPPORT )
-
-
-IF( XB_EXPRESSION_SUPPORT )
-
-add_executable( xb_test_expnode ${PROJECT_SOURCE_DIR}/tests/xb_test_expnode.cpp )
-target_link_libraries( xb_test_expnode ${EXTRA_LIBS})
-add_test( NAME xbExpNode COMMAND xb_test_expnode QUIET )
-
-
-add_executable( xb_test_expression ${PROJECT_SOURCE_DIR}/tests/xb_test_expression.cpp )
-target_link_libraries( xb_test_expression ${EXTRA_LIBS})
-add_test( NAME xbExpressions COMMAND xb_test_expression QUIET )
-
-add_executable( xb_test_uda ${PROJECT_SOURCE_DIR}/tests/xb_test_uda.cpp )
-target_link_libraries( xb_test_uda ${EXTRA_LIBS})
-add_test( NAME xbUda COMMAND xb_test_uda QUIET )
-
-ENDIF( XB_EXPRESSION_SUPPORT )
-
-IF( XB_SQL_SUPPORT )
-add_executable( xb_test_sql ${PROJECT_SOURCE_DIR}/tests/xb_test_sql.cpp )
-target_link_libraries( xb_test_sql ${EXTRA_LIBS})
-add_test( NAME xbSql COMMAND xb_test_sql QUIET )
-ENDIF( XB_SQL_SUPPORT )
-
-IF( XB_FILTER_SUPPORT )
-add_executable( xb_test_filter ${PROJECT_SOURCE_DIR}/tests/xb_test_filter.cpp )
-target_link_libraries( xb_test_filter ${EXTRA_LIBS})
-add_test( NAME xbFilter COMMAND xb_test_filter QUIET )
-ENDIF( XB_FILTER_SUPPORT )
-
-IF( XB_BLOCKREAD_SUPPORT )
-add_executable( xb_test_blockread ${PROJECT_SOURCE_DIR}/tests/xb_test_blockread.cpp )
-target_link_libraries( xb_test_blockread ${EXTRA_LIBS})
-add_test( NAME xbBlockRead COMMAND xb_test_blockread QUIET )
-ENDIF( XB_BLOCKREAD_SUPPORT )
-
-
-IF( XB_LOCKING_SUPPORT )
-add_executable( xb_test_lock ${PROJECT_SOURCE_DIR}/tests/xb_test_lock.cpp )
-target_link_libraries( xb_test_lock ${EXTRA_LIBS})
-add_test( NAME xbLock COMMAND xb_test_lock QUIET )
-IF( HAVE_CREATEPROCESSW_F )
-add_executable( xb_test_lock2 ${PROJECT_SOURCE_DIR}/tests/xb_test_lock2.cpp )
-target_link_libraries( xb_test_lock2 ${EXTRA_LIBS})
-ENDIF( HAVE_CREATEPROCESSW_F )
-ENDIF( XB_LOCKING_SUPPORT )
-
-#build example programs
-IF( XB_EXAMPLES_SUPPORT )
- add_executable( xb_ex_string ${PROJECT_SOURCE_DIR}/examples/xb_ex_string.cpp )
- target_link_libraries( xb_ex_string ${EXTRA_LIBS})
-
- add_executable( xb_ex_date ${PROJECT_SOURCE_DIR}/examples/xb_ex_date.cpp )
- target_link_libraries( xb_ex_date ${EXTRA_LIBS})
-
- IF( XB_DBF3_SUPPORT )
- add_executable( xb_ex_v3_create_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v3_create_dbf.cpp )
- target_link_libraries( xb_ex_v3_create_dbf ${EXTRA_LIBS})
-
- add_executable( xb_ex_v3_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v3_upd_dbf.cpp )
- target_link_libraries( xb_ex_v3_upd_dbf ${EXTRA_LIBS})
- ENDIF( XB_DBF3_SUPPORT )
-
- IF( XB_DBF4_SUPPORT )
- add_executable( xb_ex_v4_create_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_create_dbf.cpp )
- target_link_libraries( xb_ex_v4_create_dbf ${EXTRA_LIBS})
- ENDIF( XB_DBF4_SUPPORT )
-
- IF( XB_EXPRESSION_SUPPORT )
- add_executable( xb_ex_expression ${PROJECT_SOURCE_DIR}/examples/xb_ex_expression.cpp )
- target_link_libraries( xb_ex_expression ${EXTRA_LIBS})
- ENDIF( XB_EXPRESSION_SUPPORT )
-
- add_executable( xb_ex_v4_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_upd_dbf.cpp )
- target_link_libraries( xb_ex_v4_upd_dbf ${EXTRA_LIBS})
-
- add_executable( xb_ex_ssv ${PROJECT_SOURCE_DIR}/examples/xb_ex_ssv.cpp )
- target_link_libraries( xb_ex_ssv ${EXTRA_LIBS})
-
-ENDIF( XB_EXAMPLES_SUPPORT )
-
-#build utility programs
-IF( XB_UTILS_SUPPORT )
-
- add_executable( xb_cfg_check ${PROJECT_SOURCE_DIR}/utils/xb_cfg_check.cpp )
- target_link_libraries( xb_cfg_check ${EXTRA_LIBS})
-
- add_executable( xb_copydbf ${PROJECT_SOURCE_DIR}/utils/xb_copydbf.cpp )
- target_link_libraries( xb_copydbf ${EXTRA_LIBS})
-
- add_executable( xb_dbfutil ${PROJECT_SOURCE_DIR}/utils/xb_dbfutil.cpp )
- target_link_libraries( xb_dbfutil ${EXTRA_LIBS})
-
- add_executable( xb_deletall ${PROJECT_SOURCE_DIR}/utils/xb_deletall.cpp )
- target_link_libraries( xb_deletall ${EXTRA_LIBS})
-
- add_executable( xb_dumpdbt ${PROJECT_SOURCE_DIR}/utils/xb_dumpdbt.cpp )
- target_link_libraries( xb_dumpdbt ${EXTRA_LIBS})
-
- add_executable( xb_dumprecs ${PROJECT_SOURCE_DIR}/utils/xb_dumprecs.cpp )
- target_link_libraries( xb_dumprecs ${EXTRA_LIBS})
-
- add_executable( xb_tblinfo ${PROJECT_SOURCE_DIR}/utils/xb_tblinfo.cpp )
- target_link_libraries( xb_tblinfo ${EXTRA_LIBS})
-
- IF( XB_SQL_SUPPORT )
- add_executable( xb_execsql ${PROJECT_SOURCE_DIR}/utils/xb_execsql.cpp )
- target_link_libraries( xb_execsql ${EXTRA_LIBS})
- ENDIF( XB_SQL_SUPPORT )
-
- add_executable( xb_pack ${PROJECT_SOURCE_DIR}/utils/xb_pack.cpp )
- target_link_libraries( xb_pack ${EXTRA_LIBS})
-
- add_executable( xb_undelall ${PROJECT_SOURCE_DIR}/utils/xb_undelall.cpp )
- target_link_libraries( xb_undelall ${EXTRA_LIBS})
-
- install (TARGETS xb_cfg_check DESTINATION bin)
- install (TARGETS xb_copydbf DESTINATION bin)
- install (TARGETS xb_dbfutil DESTINATION bin)
- install (TARGETS xb_deletall DESTINATION bin)
- install (TARGETS xb_dumpdbt DESTINATION bin)
- install (TARGETS xb_dumprecs DESTINATION bin)
- install (TARGETS xb_pack DESTINATION bin)
- install (TARGETS xb_undelall DESTINATION bin)
- IF( XB_SQL_SUPPORT )
- install (TARGETS xb_execsql DESTINATION bin)
- ENDIF( XB_SQL_SUPPORT )
-
-
-
-ENDIF( XB_UTILS_SUPPORT )
-
-install (FILES include/xbconfig.h
- ${PROJECT_SOURCE_DIR}/include/xbase.h
- ${PROJECT_SOURCE_DIR}/include/xbbcd.h
- ${PROJECT_SOURCE_DIR}/include/xbdate.h
- ${PROJECT_SOURCE_DIR}/include/xbdbf.h
- ${PROJECT_SOURCE_DIR}/include/xbexp.h
- ${PROJECT_SOURCE_DIR}/include/xbexpnode.h
- ${PROJECT_SOURCE_DIR}/include/xbfile.h
- ${PROJECT_SOURCE_DIR}/include/xbindex.h
- ${PROJECT_SOURCE_DIR}/include/xblnklst.h
- ${PROJECT_SOURCE_DIR}/include/xblnklstord.h
- ${PROJECT_SOURCE_DIR}/include/xblnknod.h
- ${PROJECT_SOURCE_DIR}/include/xblog.h
- ${PROJECT_SOURCE_DIR}/include/xbmemo.h
- ${PROJECT_SOURCE_DIR}/include/xbretcod.h
- ${PROJECT_SOURCE_DIR}/include/xbsql.h
- ${PROJECT_SOURCE_DIR}/include/xbssv.h
- ${PROJECT_SOURCE_DIR}/include/xbstring.h
- ${PROJECT_SOURCE_DIR}/include/xbtblmgr.h
- ${PROJECT_SOURCE_DIR}/include/xbtypes.h
- ${PROJECT_SOURCE_DIR}/include/xbxbase.h
- ${PROJECT_SOURCE_DIR}/include/xbuda.h
- ${PROJECT_SOURCE_DIR}/include/xbtag.h
- ${PROJECT_SOURCE_DIR}/include/xbfilter.h
- ${PROJECT_SOURCE_DIR}/include/xbblkread.h
- ${PROJECT_SOURCE_DIR}/include/xbsql.h
-
- DESTINATION include/${CMAKE_PROJECT_NAME})
-
-IF( NOT WIN32 )
-install (FILES ${PROJECT_PARENT_DIR}/docs/man/xb_cfg_chk.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_copydbf.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_dbfutil.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_deletall.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_dumpdbt.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_dumprecs.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_pack.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_tblinfo.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_undelall.1.gz
-
- DESTINATION man/man1)
-
-ENDIF( NOT WIN32 )
-
-
-SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.1.0 SOVERSION 0 )
-
-IF( EXISTS /usr/local/lib64 )
-install (TARGETS ${XB_LIBNAME} DESTINATION lib64/${CMAKE_PROJECT_NAME})
-ELSE( EXISTS /usr/local/lib64 )
-install (TARGETS ${XB_LIBNAME} DESTINATION lib/${CMAKE_PROJECT_NAME})
-ENDIF( EXISTS /usr/local/lib64 )
-
-
diff --git a/build/mac64/CMakeLists.txt b/build/mac64/CMakeLists.txt
deleted file mode 100755
index f514c5c..0000000
--- a/build/mac64/CMakeLists.txt
+++ /dev/null
@@ -1,761 +0,0 @@
-cmake_minimum_required(VERSION 3.0)
-
-project (xbase64)
-set( xbase_VERSION_MAJOR 4 )
-set( xbase_VERSION_MINOR 1 )
-set( xbase_VERSION_PATCH 0 )
-
-MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
-MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
-MESSAGE( "--- Project Name: " ${CMAKE_PROJECT_NAME} )
-MESSAGE( "--- Install Prefix: " ${CMAKE_INSTALL_PREFIX} )
-
-#Set compiler options
-
-IF( CMAKE_COMPILER_IS_GNUCXX )
- MESSAGE( "Setting GNU compiler options" )
- add_compile_options( -Wall -Wsign-conversion )
-# add_compile_options( -Wall -Wconversion -Wsign-conversion )
- SET( VERBOSE 1 )
-ENDIF( CMAKE_COMPILER_IS_GNUCXX )
-
-IF( BORLAND )
- MESSAGE ("BORLAND COMPILER" )
- #set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w-8022" )
- add_compile_options( -w-8022 )
-ENDIF( BORLAND )
-
-
-MESSAGE( "--- Checking integer sizes" )
-INCLUDE(CheckTypeSize)
-CHECK_TYPE_SIZE( "short int" SHORT_INT )
-CHECK_TYPE_SIZE( int INT )
-CHECK_TYPE_SIZE( __int32 __INT32 )
-CHECK_TYPE_SIZE( int32_t INT32_T )
-CHECK_TYPE_SIZE( long LONG_INT )
-CHECK_TYPE_SIZE( __int64 __INT64 )
-CHECK_TYPE_SIZE( int64_t INT64_T )
-CHECK_TYPE_SIZE( "long long" LONG_LONG )
-CHECK_TYPE_SIZE( u_int64_t U_INT64_T )
-CHECK_TYPE_SIZE( uint64_t UINT64_T )
-CHECK_TYPE_SIZE( "unsigned __int64" UNSIGNED__INT64 )
-CHECK_TYPE_SIZE( "unsigned long long" UNSIGNED_LONG_LONG )
-
-CHECK_TYPE_SIZE( "double" DOUBLE )
-MESSAGE( "--- Double size = " ${DOUBLE} )
-
-
-#determine how 16 bit integer defined on this platform
-SET( iSize 0 )
-IF( HAVE_SHORT_INT AND ${SHORT_INT} EQUAL 2 )
- SET( xbInt16 "short int" )
- SET( xbUInt16 "unsigned short int" )
- SET( iSize ${SHORT_INT} )
- MESSAGE( "--- xbInt16 = [short int]" )
- MESSAGE( "--- xbUInt16 = [unsigned short int]" )
-
-ENDIF( HAVE_SHORT_INT AND ${SHORT_INT} EQUAL 2 )
-IF( NOT ${iSize} EQUAL 2 )
- MESSAGE( "FATAL_ERROR Could not detect 16 bit integer type" )
- MESSAGE( ${iSize} )
- RETURN()
-ENDIF( NOT ${iSize} EQUAL 2 )
-
-#determine how 32 bit integer defined on this platform
-SET( iSize 0 )
-IF( HAVE_INT AND ${INT} EQUAL 4 )
- SET( xbInt32 int )
- SET( xbUInt32 "unsigned int" )
- SET( iSize ${INT} )
- MESSAGE( "--- xbInt32 = [int]" )
- MESSAGE( "--- xbUInt32 = [unsigned int]" )
-ENDIF( HAVE_INT AND ${INT} EQUAL 4 )
-
-IF(( NOT iSize EQUAL 4 ) AND HAVE___INT32 )
- MESSAGE( __int untested if block - see CMakeLists.txt)
- SET( xbInt32 __int32 )
- SET( xbUInt32 "unsigned __int32" )
- SET( iSize ${__INT} )
- MESSAGE( "--- xbInt32 = [__int]" )
- MESSAGE( "--- xbUInt32 = [unsigned __int]" )
-ENDIF(( NOT iSize EQUAL 4 ) AND HAVE___INT32 )
-
-IF(( NOT iSize EQUAL 4 ) AND HAVE_INT32_T )
- SET( xbInt32 int32_t )
- SET( xbUInt32 "u_int32_t" )
- SET( iSize ${INT32_T} )
- MESSAGE( "--- xbInt32 = [int32_t]" )
- MESSAGE( "--- xbUInt32 = [u_int32_t]" )
-ENDIF(( NOT iSize EQUAL 4 ) AND HAVE_INT32_T )
-
-IF( NOT ${iSize} EQUAL 4 )
- MESSAGE( "FATAL_ERROR Could not detect 32 bit integer type" )
- MESSAGE( ${iSize} )
- RETURN()
-ENDIF( NOT ${iSize} EQUAL 4 )
-
-#determine how 64 bit integer defined on this platform
-SET( iSize 0 )
-IF( HAVE___INT64 )
- SET( xbInt64 __int64 )
- SET( iSize ${__INT64} )
- MESSAGE( "--- xbInt64 = [__int64]" )
-ENDIF( HAVE___INT64 )
-
-IF(( NOT iSize EQUAL 8 ) AND HAVE_INT64_T )
- SET( xbInt64 int64_t )
- SET( iSize ${INT64_T} )
- MESSAGE( "--- xbInt64 = [int64_t]" )
-ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_INT64_T )
-
-IF(( NOT iSize EQUAL 8 ) AND HAVE_LONG_LONG )
- SET( xbInt64 "long long" )
- SET( iSize ${LONG_LONG} )
- MESSAGE( "--- xbInt64 = [long long]" )
-ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_LONG_LONG )
-
-IF( NOT ${iSize} EQUAL 8 )
- MESSAGE( "FATAL_ERROR Could not detect 64 bit integer type" )
- MESSAGE( ${iSize} )
- RETURN()
-ENDIF( NOT ${iSize} EQUAL 8 )
-
-#determine how 64 bit unsigned integer defined on this platform
-SET( iSize 0 )
-IF( HAVE_UNSIGNED__INT64 )
- SET( xbUInt64 "unsigned __int64" )
- SET( iSize ${UNSIGNED__INT64} )
- MESSAGE( "--- xbUInt64 = [unsigned __int64]" )
-ENDIF( HAVE_UNSIGNED__INT64 )
-
-IF(( NOT iSize EQUAL 8 ) AND HAVE_UINT64_T )
- SET( xbUInt64 "uint64_t" )
- SET( iSize ${UINT64_T} )
- MESSAGE( "--- xbUInt64 = [uint64_t]" )
-ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_UINT64_T )
-
-IF(( NOT iSize EQUAL 8 ) AND HAVE_U_INT64_T )
- SET( xbUInt64 u_int64_t )
- SET( iSize ${U_INT64_T} )
- MESSAGE( "--- xbUInt64 = [u_int64_t]" )
-ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_U_INT64_T )
-
-IF(( NOT iSize EQUAL 8 ) AND HAVE_UNSIGNED_LONG_LONG )
- SET( xbUInt64 "unsigned long long" )
- SET( iSize ${UNSIGNED_LONG_LONG} )
- MESSAGE( "--- xbUInt64 = [unsigned long long]" )
-ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_UNSIGNED_LONG_LONG )
-
-IF( NOT ${iSize} EQUAL 8 )
- MESSAGE( "FATAL_ERROR Could not detect 64 bit unsigned integer type" )
- MESSAGE( ${iSize} )
- RETURN()
-ENDIF( NOT ${iSize} EQUAL 8 )
-
-#Library options
-option( BUILD_SHARED_LIBS "Build shared libraries" ON)
-option( XB_DBF3_SUPPORT "Compile DBase File Format Version 3 support" ON)
-option( XB_DBF4_SUPPORT "Compile DBase File Format Version 4 support" ON)
-option( XB_MEMO_SUPPORT "Compile memo field support into library" ON)
-option( XB_NDX_SUPPORT "Compile NDX Index support into library" ON)
-option( XB_MDX_SUPPORT "Compile MDX Index support into library" ON)
-option( XB_LOCKING_SUPPORT "Compile Multi User Locking support into library" ON)
-
-option( XB_LOGGING_SUPPORT "Compile message logging support into library" ON)
-option( XB_LINKLIST_SUPPORT "Compile Link List routines into library" ON)
-option( XB_FUNCTION_SUPPORT "Compile XBase Function support into library" ON)
-option( XB_EXPRESSION_SUPPORT "Compile Expression support into library" ON)
-option( XB_INF_SUPPORT "Compile NDX INF file support into library" ON)
-option( XB_FILTER_SUPPORT "Compile Filter support into library" ON)
-option( XB_BLOCKREAD_SUPPORT "Compile Block Read support into library" ON)
-option( XB_SQL_SUPPORT "Compile SQL support into library - alpha" ON)
-option( XB_DEBUG_SUPPORT "Compile debug logic into library" ON)
-option( XB_UTILS_SUPPORT "Compile utility programs" ON)
-option( XB_EXAMPLES_SUPPORT "Compile example programs" ON)
-
-Message( "--- BUILD_SHARED_LIBS " ${BUILD_SHARED_LIBS})
-Message( "--- XB_DBF3_SUPPORT " ${XB_DBF3_SUPPORT})
-Message( "--- XB_DBF4_SUPPORT " ${XB_DBF4_SUPPORT})
-Message( "--- XB_MEMO_SUPPORT " ${XB_MEMO_SUPPORT})
-Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
-Message( "--- XB_MDX_SUPPORT " ${XB_MDX_SUPPORT})
-Message( "--- XB_LOCKING_SUPPORT " ${XB_LOCKING_SUPPORT})
-Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
-Message( "--- XB_FUNCTION_SUPPORT " ${XB_FUNCTION_SUPPORT})
-Message( "--- XB_EXPRESSION_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_FILTER_SUPPORT " ${XB_FILTER_SUPPORT})
-Message( "--- XB_DEBUG_SUPPORT " ${XB_DEBUG_SUPPORT})
-Message( "--- XB_UTILS_SUPPORT " ${XB_UTILS_SUPPORT})
-Message( "--- XB_EXAMPLES_SUPPORT " ${XB_EXAMPLES_SUPPORT})
-Message( "--- XB_LOGGING_SUPPORT " ${XB_LOGGING_SUPPORT})
-Message( "--- XB_SQL_SUPPORT " ${XB_SQL_SUPPORT})
-Message( "--- XB_INF_SUPPORT " ${XB_INF_SUPPORT})
-
-IF( XB_DEBUG_SUPPORT )
- Message( "--- Adding debug support" )
- set( CMAKE_BUILD_TYPE Debug )
-IF( CMAKE_COMPILER_IS_GNUCXX )
- add_compile_options( -Og )
-ENDIF( CMAKE_COMPILER_IS_GNUCXX )
-ENDIF( XB_DEBUG_SUPPORT )
-
-IF( CMAKE_SIZEOF_VOID_P EQUAL 8 )
- MESSAGE( "--- 64 bit compiler detected" )
- set( XB_PLATFORM "x64" )
- set( XB_PLATFORM_64 1 )
- set( XB_LIBNAME "xbase64" )
-
-ELSE( CMAKE_SIZEOF_VOID_P EQUAL 8 )
- MESSAGE( "--- 32 bit compiler detected" )
- set( XB_PLATFORM "x86" )
- set( XB_PLATFORM_32 1 )
- set( XB_LIBNAME "xbase32" )
-
-ENDIF( CMAKE_SIZEOF_VOID_P EQUAL 8 )
-
-
-#Check for the existence of various header files
-INCLUDE (CheckIncludeFiles)
-CHECK_INCLUDE_FILES (ctype.h HAVE_CTYPE_H)
-CHECK_INCLUDE_FILES (dirent.h HAVE_DIRENT_H)
-CHECK_INCLUDE_FILES (fcntl.h HAVE_FCNTL_H)
-CHECK_INCLUDE_FILES (inttypes.h HAVE_INTTYPES_H)
-CHECK_INCLUDE_FILES (pwd.h HAVE_PWD_H)
-CHECK_INCLUDE_FILES (stdarg.h HAVE_STDARG_H)
-CHECK_INCLUDE_FILES (stdargs.h HAVE_STDARGS_H)
-CHECK_INCLUDE_FILES (string.h HAVE_STRING_H)
-CHECK_INCLUDE_FILES (strings.h HAVE_STRINGS_H)
-CHECK_INCLUDE_FILES (sys/stat.h HAVE_STAT_H)
-CHECK_INCLUDE_FILES (unistd.h HAVE_UNISTD_H)
-CHECK_INCLUDE_FILES (varargs.h HAVE_VARARGS_H)
-CHECK_INCLUDE_FILES (windows.h HAVE_WINDOWS_H)
-
-#Check for the existence of various function calls
-INCLUDE( CheckFunctionExists )
-CHECK_FUNCTION_EXISTS(_close HAVE__CLOSE_F)
-CHECK_FUNCTION_EXISTS(fcntl HAVE_FCNTL_F)
-CHECK_FUNCTION_EXISTS(_fdopen HAVE__FDOPEN_F)
-CHECK_FUNCTION_EXISTS(fopen_s HAVE_FOPEN_S_F)
-CHECK_FUNCTION_EXISTS(_fsopen HAVE__FSOPEN_F)
-CHECK_FUNCTION_EXISTS(_fileno HAVE__FILENO_F)
-CHECK_FUNCTION_EXISTS(fork HAVE_FORK_F)
-CHECK_FUNCTION_EXISTS(_fseeki64 HAVE__FSEEKI64_F)
-CHECK_FUNCTION_EXISTS(fseeko HAVE_FSEEKO_F)
-CHECK_FUNCTION_EXISTS(ftruncate HAVE_FTRUNCATE_F)
-CHECK_FUNCTION_EXISTS(_localtime64_s HAVE__LOCALTIME64_S_F)
-CHECK_FUNCTION_EXISTS(LockFile HAVE_LOCKFILE_F)
-CHECK_FUNCTION_EXISTS(locking HAVE_LOCKING_F)
-CHECK_FUNCTION_EXISTS(_locking HAVE__LOCKING_F)
-CHECK_FUNCTION_EXISTS(_open HAVE__OPEN_F)
-CHECK_FUNCTION_EXISTS(SetEndOfFile HAVE_SETENDOFFILE_F)
-
-CHECK_FUNCTION_EXISTS(vsnprintf HAVE_VSNPRINTF_F)
-CHECK_FUNCTION_EXISTS(_vsnprintf_s HAVE__VSNPRINTF_S_F)
-
-
-CHECK_FUNCTION_EXISTS(getopt HAVE_GETOPT_F)
-
-IF( WIN32 )
-
-# Use CHECK_SYMBOL_EXISTS for the Win32API instead of CHECK_FUNCTION_EXISTS
-# Can't detect inline functions in headers
-# Can't detect due to mismatch of calling conventions
-# Can't detect mangled names
-
-INCLUDE( CheckSymbolExists )
-CHECK_SYMBOL_EXISTS(CreateProcessW Windows.h HAVE_CREATEPROCESSW_F )
-CHECK_SYMBOL_EXISTS(vsprintf_s stdio.h HAVE_VSPRINTF_S_F )
-
-ENDIF ( WIN32 )
-
-# IF( NOT HAVE_SENTENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND BORLAND )
-# # ----fix me----
-# # cmake CHECK_FUNCTION_EXISTS - could not find Borland 5.5 SetEndOfFile
-# Set( HAVE_SETENDOFFILE_F "HAVE_SETENDOFFILE_H" )
-# ENDIF ( NOT HAVE_SENTENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND BORLAND )
-
-IF( NOT HAVE_SETENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND WIN32 )
- # ----fix me----
- # cmake CHECK_FUNCTION_EXISTS - could not find Borland 5.5, or Windows VS 32 bit SetEndOfFile
- Set( HAVE_SETENDOFFILE_F "HAVE_SETENDOFFILE_F" )
-ENDIF ( NOT HAVE_SETENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND WIN32 )
-
-IF( XB_NDX_SUPPORT OR XB_MDX_SUPPORT )
- Set( XB_INDEX_SUPPORT "1" )
-ENDIF( XB_NDX_SUPPORT OR XB_MDX_SUPPORT )
-
-
-# Set directories
-# PROJECT_PARENT_DIR is two nodes higher
-get_filename_component( PROJECT_PARENT_DIR ${PROJECT_BINARY_DIR} DIRECTORY )
-get_filename_component( PROJECT_PARENT_DIR ${PROJECT_PARENT_DIR} DIRECTORY )
-
-# MESSAGE( "PROJECT_PARENT_DIR = " ${PROJECT_PARENT_DIR} )
-# MESSAGE( "PROJECT_BINARY_DIR = " ${PROJECT_BINARY_DIR} )
-
-
-set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin/${XB_PLATFORM})
-set( LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib/${XB_PLATFORM})
-set( PROJECT_SOURCE_DIR ${PROJECT_PARENT_DIR}/src)
-set( PROJECT_DATA_DIR ${PROJECT_PARENT_DIR}/data/)
-set( PROJECT_LOG_DIR ${PROJECT_PARENT_DIR}/logs/)
-set( EXTRA_LIBS ${EXTRA_LIBS} ${XB_LIBNAME})
-
-
-
-# Undo bad decisions
-IF( XB_PLATFORM_32 AND XB_LARGEFILE_SUPPORT )
- MESSAGE( "--- Can't build 64 bit environment with a 32 bit compiler" )
- MESSAGE( "--- XB_LARGEFILE_SUPPORT set to OFF" )
- set( XB_LARGEFILE_SUPPORT OFF CACHE BOOL "Use 64 bit large file support?" FORCE )
-ENDIF ( XB_PLATFORM_32 AND XB_LARGEFILE_SUPPORT )
-
-IF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
- MESSAGE( "--- At lease one file format is required. Defaulting to Version 4" )
- set( XB_DBF4_SUPPORT ON CACHE BOOL "Compile DBase File Format Version 4 support" FORCE )
-ENDIF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
-
-IF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
- MESSAGE( "--- Link List support required for DBF V4 Memo files. Setting to ON" )
- set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
-ENDIF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
-
-IF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
- MESSAGE( "--- Link List support required for locking functions. Setting to ON" )
- set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
-ENDIF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
-
-IF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
- MESSAGE( "--- Expression required for indices. Setting to ON" )
- set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
-ENDIF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
-
-IF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
- MESSAGE( "--- Function support required for expressions. Setting to ON" )
- set( XB_FUNCTION_SUPPORT ON CACHE BOOL "Compile XBase Function support into library" FORCE )
-ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
-
-IF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
- MESSAGE( "--- Linklist support required for expressions. Setting to ON" )
- set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
-ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
-
-IF( XB_SQL_SUPPORT AND NOT XB_MEMO_SUPPORT )
- MESSAGE( "--- Memo support required for SQL. Setting to ON" )
- set( XB_MEMO_SUPPORT ON CACHE BOOL "Compile memo field support into library" FORCE )
-ENDIF( XB_SQL_SUPPORT AND NOT XB_MEMO_SUPPORT )
-
-IF( XB_SQL_SUPPORT AND NOT XB_DBF4_SUPPORT )
- MESSAGE( "--- DBF4 support required for SQL. Setting to ON" )
- set( XB_DBF4_SUPPORT ON CACHE BOOL "Compile DBase File Format Version 4 support" FORCE )
-ENDIF( XB_SQL_SUPPORT AND NOT XB_DBF4_SUPPORT )
-
-IF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
- MESSAGE( "--- Expression required for filters. Setting to ON" )
- set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
-ENDIF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
-
-IF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
- MESSAGE( "--- BLOCKREAD support required for SQL. Setting to ON" )
- set( XB_BLOCKREAD_SUPPORT ON CACHE BOOL "Compile Block Read support into library" FORCE )
-ENDIF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
-
-
-# Build configuration header file
-configure_file (
- "${PROJECT_SOURCE_DIR}/include/xbconfig.h.in"
- "${PROJECT_BINARY_DIR}/include/xbconfig.h"
-)
-
-# Microsoft Windows settings
-IF( WIN32 )
-# add_definitions( /D_CRT_SECURE_NO_WARNINGS)
- add_definitions( /EHsc )
-ENDIF( WIN32 )
-
-
-# set up include directories
-include_directories( "${PROJECT_BINARY_DIR}/include" )
-include_directories( "${PROJECT_SOURCE_DIR}/include" )
-
-#build the library
-IF ( BUILD_SHARED_LIBS )
- set( LIB_TYPE SHARED )
-ELSE( BUILD_SHARED_LIBS )
- set( LIB_TYPE STATIC )
-ENDIF( BUILD_SHARED_LIBS )
-MESSAGE( "--- Lib type " ${LIB_TYPE} )
-
-
-
-set (SOURCES ${PROJECT_SOURCE_DIR}/core/xbstring.cpp
- ${PROJECT_SOURCE_DIR}/core/xbssv.cpp
- ${PROJECT_SOURCE_DIR}/core/xbdate.cpp
- ${PROJECT_SOURCE_DIR}/core/xbtblmgr.cpp
- ${PROJECT_SOURCE_DIR}/core/xbxbase.cpp
- ${PROJECT_SOURCE_DIR}/core/xbfile.cpp
- ${PROJECT_SOURCE_DIR}/core/xbdbf.cpp
- ${PROJECT_SOURCE_DIR}/core/xbfields.cpp
- ${PROJECT_SOURCE_DIR}/core/xblog.cpp)
-
-IF( XB_MEMO_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo.cpp )
-ENDIF( XB_MEMO_SUPPORT )
-
-IF( XB_DBF3_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbdbf3.cpp )
- IF( XB_MEMO_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo3.cpp )
- ENDIF( XB_MEMO_SUPPORT )
-ENDIF( XB_DBF3_SUPPORT )
-
-IF( XB_DBF4_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbdbf4.cpp )
- IF( XB_MEMO_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo4.cpp )
- ENDIF( XB_MEMO_SUPPORT )
-ENDIF( XB_DBF4_SUPPORT )
-
-IF( XB_FUNCTION_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbfuncs.cpp )
-ENDIF( XB_FUNCTION_SUPPORT )
-
-IF( XB_EXPRESSION_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbexpnode.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbexp.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbuda.cpp )
-ENDIF( XB_EXPRESSION_SUPPORT )
-
-IF( XB_INDEX_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbbcd.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixbase.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbtag.cpp )
-ENDIF( XB_INDEX_SUPPORT )
-
-IF( XB_NDX_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixndx.cpp )
-ENDIF( XB_NDX_SUPPORT )
-
-
-IF( XB_MDX_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixmdx.cpp )
-ENDIF( XB_MDX_SUPPORT )
-
-IF( XB_SQL_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbalttbl.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrix.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrtbl.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdelete.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdrpix.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdrptbl.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbinsert.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbset.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbsql.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbstmt.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbselect.cpp )
-ENDIF( XB_SQL_SUPPORT )
-
-
-IF( XB_FILTER_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbfilter.cpp )
-ENDIF( XB_FILTER_SUPPORT )
-
-IF( XB_BLOCKREAD_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbblockread.cpp )
-ENDIF( XB_BLOCKREAD_SUPPORT )
-
-
-include( GenerateExportHeader )
-#add_library( xbase ${LIB_TYPE} ${SOURCES} )
-add_library( ${XB_LIBNAME} ${LIB_TYPE} ${SOURCES} )
-#add_library( ${CMAKE_PROJECT_NAME} ${LIB_TYPE} ${SOURCES} )
-
-
-IF( WIN32 )
-MESSAGE( "--- Generating Windows Library Headers" )
-
-#GENERATE_EXPORT_HEADER( xbase
-# BASE_NAME xbase
-
-GENERATE_EXPORT_HEADER( ${XB_LIBNAME}
- BASE_NAME ${XB_LIBNAME}
- EXPORT_MACRO_NAME xbase_EXPORT
- EXPORT_FILE_NAME xbase_Export.h
- STATIC_DEFINE xbase_BUILT_AS_STATIC
-)
-ENDIF( WIN32 )
-
-
-#build test programs
-enable_testing()
-
-add_executable( xb_test_string ${PROJECT_SOURCE_DIR}/tests/xb_test_string.cpp )
-target_link_libraries( xb_test_string ${EXTRA_LIBS})
-add_test( NAME xbString COMMAND xb_test_string QUIET )
-
-add_executable( xb_test_date ${PROJECT_SOURCE_DIR}/tests/xb_test_date.cpp )
-target_link_libraries( xb_test_date ${EXTRA_LIBS})
-add_test( NAME xbDate COMMAND xb_test_date QUIET )
-
-add_executable( xb_test_tblmgr ${PROJECT_SOURCE_DIR}/tests/xb_test_tblmgr.cpp )
-target_link_libraries( xb_test_tblmgr ${EXTRA_LIBS})
-add_test( NAME xbTblMgr COMMAND xb_test_tblmgr QUIET )
-
-add_executable( xb_test_xbase ${PROJECT_SOURCE_DIR}/tests/xb_test_xbase.cpp )
-target_link_libraries( xb_test_xbase ${EXTRA_LIBS})
-add_test( NAME xbXBase COMMAND xb_test_xbase QUIET )
-
-add_executable( xb_test_file ${PROJECT_SOURCE_DIR}/tests/xb_test_file.cpp )
-target_link_libraries( xb_test_file ${EXTRA_LIBS})
-add_test( NAME xbFile COMMAND xb_test_file QUIET )
-
-add_executable( xb_test_log ${PROJECT_SOURCE_DIR}/tests/xb_test_log.cpp )
-target_link_libraries( xb_test_log ${EXTRA_LIBS})
-add_test( NAME xbLog COMMAND xb_test_log QUIET )
-
-IF( XB_LINKLIST_SUPPORT )
-add_executable( xb_test_linklist ${PROJECT_SOURCE_DIR}/tests/xb_test_linklist.cpp )
-target_link_libraries( xb_test_linklist ${EXTRA_LIBS})
-add_test( NAME xbLinkList COMMAND xb_test_linklist QUIET )
-ENDIF( XB_LINKLIST_SUPPORT )
-
-IF( XB_DBF3_SUPPORT )
-add_executable( xb_test_dbf_v3_nomemos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v3_nomemos.cpp )
-target_link_libraries( xb_test_dbf_v3_nomemos ${EXTRA_LIBS})
-add_test( NAME xbDbfV3NoMemos COMMAND xb_test_dbf_v3_nomemos QUIET )
-
-IF( XB_MEMO_SUPPORT )
-add_executable( xb_test_dbf_v3_memos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v3_memos.cpp )
-target_link_libraries( xb_test_dbf_v3_memos ${EXTRA_LIBS})
-add_test( NAME xbDbfV3Memos COMMAND xb_test_dbf_v3_memos QUIET )
-
-ENDIF( XB_MEMO_SUPPORT )
-ENDIF( XB_DBF3_SUPPORT )
-
-IF( XB_DBF4_SUPPORT )
-add_executable( xb_test_dbf_v4_nomemos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v4_nomemos.cpp )
-target_link_libraries( xb_test_dbf_v4_nomemos ${EXTRA_LIBS})
-add_test( NAME xbDbfV4NoMemos COMMAND xb_test_dbf_v4_nomemos QUIET )
-
-IF( XB_MEMO_SUPPORT )
-add_executable( xb_test_dbf_v4_memos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v4_memos.cpp )
-target_link_libraries( xb_test_dbf_v4_memos ${EXTRA_LIBS})
-add_test( NAME xbDbfV4Memos COMMAND xb_test_dbf_v4_memos QUIET )
-
-ENDIF( XB_MEMO_SUPPORT )
-ENDIF( XB_DBF4_SUPPORT )
-
-IF( XB_FUNCTION_SUPPORT )
-add_executable( xb_test_funcs ${PROJECT_SOURCE_DIR}/tests/xb_test_funcs.cpp )
-target_link_libraries( xb_test_funcs ${EXTRA_LIBS})
-add_test( NAME xbFunctions COMMAND xb_test_funcs QUIET )
-ENDIF( XB_FUNCTION_SUPPORT )
-
-IF( XB_NDX_SUPPORT )
-IF( XB_DBF3_SUPPORT )
-add_executable( xb_test_ndx ${PROJECT_SOURCE_DIR}/tests/xb_test_ndx.cpp )
-target_link_libraries( xb_test_ndx ${EXTRA_LIBS})
-add_test( NAME xbIxNdx COMMAND xb_test_ndx QUIET )
-ENDIF( XB_DBF3_SUPPORT )
-ENDIF( XB_NDX_SUPPORT )
-
-IF( XB_MDX_SUPPORT )
-IF( XB_DBF4_SUPPORT )
-add_executable( xb_test_mdx ${PROJECT_SOURCE_DIR}/tests/xb_test_mdx.cpp )
-target_link_libraries( xb_test_mdx ${EXTRA_LIBS})
-add_test( NAME xbIxMdx COMMAND xb_test_mdx QUIET )
-ENDIF( XB_DBF4_SUPPORT )
-ENDIF( XB_MDX_SUPPORT )
-
-IF( XB_INDEX_SUPPORT )
-add_executable( xb_test_bcd ${PROJECT_SOURCE_DIR}/tests/xb_test_bcd.cpp )
-target_link_libraries( xb_test_bcd ${EXTRA_LIBS})
-add_test( NAME xbBcd COMMAND xb_test_bcd QUIET )
-ENDIF( XB_INDEX_SUPPORT )
-
-
-IF( XB_EXPRESSION_SUPPORT )
-
-add_executable( xb_test_expnode ${PROJECT_SOURCE_DIR}/tests/xb_test_expnode.cpp )
-target_link_libraries( xb_test_expnode ${EXTRA_LIBS})
-add_test( NAME xbExpNode COMMAND xb_test_expnode QUIET )
-
-
-add_executable( xb_test_expression ${PROJECT_SOURCE_DIR}/tests/xb_test_expression.cpp )
-target_link_libraries( xb_test_expression ${EXTRA_LIBS})
-add_test( NAME xbExpressions COMMAND xb_test_expression QUIET )
-
-add_executable( xb_test_uda ${PROJECT_SOURCE_DIR}/tests/xb_test_uda.cpp )
-target_link_libraries( xb_test_uda ${EXTRA_LIBS})
-add_test( NAME xbUda COMMAND xb_test_uda QUIET )
-
-ENDIF( XB_EXPRESSION_SUPPORT )
-
-IF( XB_SQL_SUPPORT )
-add_executable( xb_test_sql ${PROJECT_SOURCE_DIR}/tests/xb_test_sql.cpp )
-target_link_libraries( xb_test_sql ${EXTRA_LIBS})
-add_test( NAME xbSql COMMAND xb_test_sql QUIET )
-ENDIF( XB_SQL_SUPPORT )
-
-IF( XB_FILTER_SUPPORT )
-add_executable( xb_test_filter ${PROJECT_SOURCE_DIR}/tests/xb_test_filter.cpp )
-target_link_libraries( xb_test_filter ${EXTRA_LIBS})
-add_test( NAME xbFilter COMMAND xb_test_filter QUIET )
-ENDIF( XB_FILTER_SUPPORT )
-
-IF( XB_BLOCKREAD_SUPPORT )
-add_executable( xb_test_blockread ${PROJECT_SOURCE_DIR}/tests/xb_test_blockread.cpp )
-target_link_libraries( xb_test_blockread ${EXTRA_LIBS})
-add_test( NAME xbBlockRead COMMAND xb_test_blockread QUIET )
-ENDIF( XB_BLOCKREAD_SUPPORT )
-
-
-IF( XB_LOCKING_SUPPORT )
-add_executable( xb_test_lock ${PROJECT_SOURCE_DIR}/tests/xb_test_lock.cpp )
-target_link_libraries( xb_test_lock ${EXTRA_LIBS})
-add_test( NAME xbLock COMMAND xb_test_lock QUIET )
-IF( HAVE_CREATEPROCESSW_F )
-add_executable( xb_test_lock2 ${PROJECT_SOURCE_DIR}/tests/xb_test_lock2.cpp )
-target_link_libraries( xb_test_lock2 ${EXTRA_LIBS})
-ENDIF( HAVE_CREATEPROCESSW_F )
-ENDIF( XB_LOCKING_SUPPORT )
-
-#build example programs
-IF( XB_EXAMPLES_SUPPORT )
- add_executable( xb_ex_string ${PROJECT_SOURCE_DIR}/examples/xb_ex_string.cpp )
- target_link_libraries( xb_ex_string ${EXTRA_LIBS})
-
- add_executable( xb_ex_date ${PROJECT_SOURCE_DIR}/examples/xb_ex_date.cpp )
- target_link_libraries( xb_ex_date ${EXTRA_LIBS})
-
- IF( XB_DBF3_SUPPORT )
- add_executable( xb_ex_v3_create_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v3_create_dbf.cpp )
- target_link_libraries( xb_ex_v3_create_dbf ${EXTRA_LIBS})
-
- add_executable( xb_ex_v3_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v3_upd_dbf.cpp )
- target_link_libraries( xb_ex_v3_upd_dbf ${EXTRA_LIBS})
- ENDIF( XB_DBF3_SUPPORT )
-
- IF( XB_DBF4_SUPPORT )
- add_executable( xb_ex_v4_create_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_create_dbf.cpp )
- target_link_libraries( xb_ex_v4_create_dbf ${EXTRA_LIBS})
- ENDIF( XB_DBF4_SUPPORT )
-
- IF( XB_EXPRESSION_SUPPORT )
- add_executable( xb_ex_expression ${PROJECT_SOURCE_DIR}/examples/xb_ex_expression.cpp )
- target_link_libraries( xb_ex_expression ${EXTRA_LIBS})
- ENDIF( XB_EXPRESSION_SUPPORT )
-
- add_executable( xb_ex_v4_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_upd_dbf.cpp )
- target_link_libraries( xb_ex_v4_upd_dbf ${EXTRA_LIBS})
-
- add_executable( xb_ex_ssv ${PROJECT_SOURCE_DIR}/examples/xb_ex_ssv.cpp )
- target_link_libraries( xb_ex_ssv ${EXTRA_LIBS})
-
-ENDIF( XB_EXAMPLES_SUPPORT )
-
-#build utility programs
-IF( XB_UTILS_SUPPORT )
-
- add_executable( xb_cfg_check ${PROJECT_SOURCE_DIR}/utils/xb_cfg_check.cpp )
- target_link_libraries( xb_cfg_check ${EXTRA_LIBS})
-
- add_executable( xb_copydbf ${PROJECT_SOURCE_DIR}/utils/xb_copydbf.cpp )
- target_link_libraries( xb_copydbf ${EXTRA_LIBS})
-
- add_executable( xb_dbfutil ${PROJECT_SOURCE_DIR}/utils/xb_dbfutil.cpp )
- target_link_libraries( xb_dbfutil ${EXTRA_LIBS})
-
- add_executable( xb_deletall ${PROJECT_SOURCE_DIR}/utils/xb_deletall.cpp )
- target_link_libraries( xb_deletall ${EXTRA_LIBS})
-
- add_executable( xb_dumpdbt ${PROJECT_SOURCE_DIR}/utils/xb_dumpdbt.cpp )
- target_link_libraries( xb_dumpdbt ${EXTRA_LIBS})
-
- add_executable( xb_dumprecs ${PROJECT_SOURCE_DIR}/utils/xb_dumprecs.cpp )
- target_link_libraries( xb_dumprecs ${EXTRA_LIBS})
-
- add_executable( xb_tblinfo ${PROJECT_SOURCE_DIR}/utils/xb_tblinfo.cpp )
- target_link_libraries( xb_tblinfo ${EXTRA_LIBS})
-
- IF( XB_SQL_SUPPORT )
- add_executable( xb_execsql ${PROJECT_SOURCE_DIR}/utils/xb_execsql.cpp )
- target_link_libraries( xb_execsql ${EXTRA_LIBS})
- ENDIF( XB_SQL_SUPPORT )
-
- add_executable( xb_pack ${PROJECT_SOURCE_DIR}/utils/xb_pack.cpp )
- target_link_libraries( xb_pack ${EXTRA_LIBS})
-
- add_executable( xb_undelall ${PROJECT_SOURCE_DIR}/utils/xb_undelall.cpp )
- target_link_libraries( xb_undelall ${EXTRA_LIBS})
-
- install (TARGETS xb_cfg_check DESTINATION bin)
- install (TARGETS xb_copydbf DESTINATION bin)
- install (TARGETS xb_dbfutil DESTINATION bin)
- install (TARGETS xb_deletall DESTINATION bin)
- install (TARGETS xb_dumpdbt DESTINATION bin)
- install (TARGETS xb_dumprecs DESTINATION bin)
- install (TARGETS xb_pack DESTINATION bin)
- install (TARGETS xb_undelall DESTINATION bin)
- IF( XB_SQL_SUPPORT )
- install (TARGETS xb_execsql DESTINATION bin)
- ENDIF( XB_SQL_SUPPORT )
-
-
-
-ENDIF( XB_UTILS_SUPPORT )
-
-install (FILES include/xbconfig.h
- ${PROJECT_SOURCE_DIR}/include/xbase.h
- ${PROJECT_SOURCE_DIR}/include/xbbcd.h
- ${PROJECT_SOURCE_DIR}/include/xbdate.h
- ${PROJECT_SOURCE_DIR}/include/xbdbf.h
- ${PROJECT_SOURCE_DIR}/include/xbexp.h
- ${PROJECT_SOURCE_DIR}/include/xbexpnode.h
- ${PROJECT_SOURCE_DIR}/include/xbfile.h
- ${PROJECT_SOURCE_DIR}/include/xbindex.h
- ${PROJECT_SOURCE_DIR}/include/xblnklst.h
- ${PROJECT_SOURCE_DIR}/include/xblnklstord.h
- ${PROJECT_SOURCE_DIR}/include/xblnknod.h
- ${PROJECT_SOURCE_DIR}/include/xblog.h
- ${PROJECT_SOURCE_DIR}/include/xbmemo.h
- ${PROJECT_SOURCE_DIR}/include/xbretcod.h
- ${PROJECT_SOURCE_DIR}/include/xbsql.h
- ${PROJECT_SOURCE_DIR}/include/xbssv.h
- ${PROJECT_SOURCE_DIR}/include/xbstring.h
- ${PROJECT_SOURCE_DIR}/include/xbtblmgr.h
- ${PROJECT_SOURCE_DIR}/include/xbtypes.h
- ${PROJECT_SOURCE_DIR}/include/xbxbase.h
- ${PROJECT_SOURCE_DIR}/include/xbuda.h
- ${PROJECT_SOURCE_DIR}/include/xbtag.h
- ${PROJECT_SOURCE_DIR}/include/xbfilter.h
- ${PROJECT_SOURCE_DIR}/include/xbblkread.h
- ${PROJECT_SOURCE_DIR}/include/xbsql.h
-
- DESTINATION include/${CMAKE_PROJECT_NAME})
-
-IF( NOT WIN32 )
-install (FILES ${PROJECT_PARENT_DIR}/docs/man/xb_cfg_chk.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_copydbf.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_dbfutil.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_deletall.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_dumpdbt.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_dumprecs.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_pack.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_tblinfo.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_undelall.1.gz
-
- DESTINATION man/man1)
-
-ENDIF( NOT WIN32 )
-
-
-SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.1.0 SOVERSION 0 )
-
-IF( EXISTS /usr/local/lib64 )
-install (TARGETS ${XB_LIBNAME} DESTINATION lib64/${CMAKE_PROJECT_NAME})
-ELSE( EXISTS /usr/local/lib64 )
-install (TARGETS ${XB_LIBNAME} DESTINATION lib/${CMAKE_PROJECT_NAME})
-ENDIF( EXISTS /usr/local/lib64 )
-
-
diff --git a/build/win32vs/BuildWin.bat b/build/win32vs/BuildWin.bat
deleted file mode 100755
index 421e5c8..0000000
--- a/build/win32vs/BuildWin.bat
+++ /dev/null
@@ -1,8 +0,0 @@
-rem Build using MS Visual Studio
-
-rem cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Debug .
-
-pause To build the Windows Visual Studio 32 bit version, execute this script from a Visual Studio 32 bit command window
-
-cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release .
-nmake \ No newline at end of file
diff --git a/build/win32vs/CMakeLists.txt b/build/win32vs/CMakeLists.txt
deleted file mode 100755
index f514c5c..0000000
--- a/build/win32vs/CMakeLists.txt
+++ /dev/null
@@ -1,761 +0,0 @@
-cmake_minimum_required(VERSION 3.0)
-
-project (xbase64)
-set( xbase_VERSION_MAJOR 4 )
-set( xbase_VERSION_MINOR 1 )
-set( xbase_VERSION_PATCH 0 )
-
-MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
-MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
-MESSAGE( "--- Project Name: " ${CMAKE_PROJECT_NAME} )
-MESSAGE( "--- Install Prefix: " ${CMAKE_INSTALL_PREFIX} )
-
-#Set compiler options
-
-IF( CMAKE_COMPILER_IS_GNUCXX )
- MESSAGE( "Setting GNU compiler options" )
- add_compile_options( -Wall -Wsign-conversion )
-# add_compile_options( -Wall -Wconversion -Wsign-conversion )
- SET( VERBOSE 1 )
-ENDIF( CMAKE_COMPILER_IS_GNUCXX )
-
-IF( BORLAND )
- MESSAGE ("BORLAND COMPILER" )
- #set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w-8022" )
- add_compile_options( -w-8022 )
-ENDIF( BORLAND )
-
-
-MESSAGE( "--- Checking integer sizes" )
-INCLUDE(CheckTypeSize)
-CHECK_TYPE_SIZE( "short int" SHORT_INT )
-CHECK_TYPE_SIZE( int INT )
-CHECK_TYPE_SIZE( __int32 __INT32 )
-CHECK_TYPE_SIZE( int32_t INT32_T )
-CHECK_TYPE_SIZE( long LONG_INT )
-CHECK_TYPE_SIZE( __int64 __INT64 )
-CHECK_TYPE_SIZE( int64_t INT64_T )
-CHECK_TYPE_SIZE( "long long" LONG_LONG )
-CHECK_TYPE_SIZE( u_int64_t U_INT64_T )
-CHECK_TYPE_SIZE( uint64_t UINT64_T )
-CHECK_TYPE_SIZE( "unsigned __int64" UNSIGNED__INT64 )
-CHECK_TYPE_SIZE( "unsigned long long" UNSIGNED_LONG_LONG )
-
-CHECK_TYPE_SIZE( "double" DOUBLE )
-MESSAGE( "--- Double size = " ${DOUBLE} )
-
-
-#determine how 16 bit integer defined on this platform
-SET( iSize 0 )
-IF( HAVE_SHORT_INT AND ${SHORT_INT} EQUAL 2 )
- SET( xbInt16 "short int" )
- SET( xbUInt16 "unsigned short int" )
- SET( iSize ${SHORT_INT} )
- MESSAGE( "--- xbInt16 = [short int]" )
- MESSAGE( "--- xbUInt16 = [unsigned short int]" )
-
-ENDIF( HAVE_SHORT_INT AND ${SHORT_INT} EQUAL 2 )
-IF( NOT ${iSize} EQUAL 2 )
- MESSAGE( "FATAL_ERROR Could not detect 16 bit integer type" )
- MESSAGE( ${iSize} )
- RETURN()
-ENDIF( NOT ${iSize} EQUAL 2 )
-
-#determine how 32 bit integer defined on this platform
-SET( iSize 0 )
-IF( HAVE_INT AND ${INT} EQUAL 4 )
- SET( xbInt32 int )
- SET( xbUInt32 "unsigned int" )
- SET( iSize ${INT} )
- MESSAGE( "--- xbInt32 = [int]" )
- MESSAGE( "--- xbUInt32 = [unsigned int]" )
-ENDIF( HAVE_INT AND ${INT} EQUAL 4 )
-
-IF(( NOT iSize EQUAL 4 ) AND HAVE___INT32 )
- MESSAGE( __int untested if block - see CMakeLists.txt)
- SET( xbInt32 __int32 )
- SET( xbUInt32 "unsigned __int32" )
- SET( iSize ${__INT} )
- MESSAGE( "--- xbInt32 = [__int]" )
- MESSAGE( "--- xbUInt32 = [unsigned __int]" )
-ENDIF(( NOT iSize EQUAL 4 ) AND HAVE___INT32 )
-
-IF(( NOT iSize EQUAL 4 ) AND HAVE_INT32_T )
- SET( xbInt32 int32_t )
- SET( xbUInt32 "u_int32_t" )
- SET( iSize ${INT32_T} )
- MESSAGE( "--- xbInt32 = [int32_t]" )
- MESSAGE( "--- xbUInt32 = [u_int32_t]" )
-ENDIF(( NOT iSize EQUAL 4 ) AND HAVE_INT32_T )
-
-IF( NOT ${iSize} EQUAL 4 )
- MESSAGE( "FATAL_ERROR Could not detect 32 bit integer type" )
- MESSAGE( ${iSize} )
- RETURN()
-ENDIF( NOT ${iSize} EQUAL 4 )
-
-#determine how 64 bit integer defined on this platform
-SET( iSize 0 )
-IF( HAVE___INT64 )
- SET( xbInt64 __int64 )
- SET( iSize ${__INT64} )
- MESSAGE( "--- xbInt64 = [__int64]" )
-ENDIF( HAVE___INT64 )
-
-IF(( NOT iSize EQUAL 8 ) AND HAVE_INT64_T )
- SET( xbInt64 int64_t )
- SET( iSize ${INT64_T} )
- MESSAGE( "--- xbInt64 = [int64_t]" )
-ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_INT64_T )
-
-IF(( NOT iSize EQUAL 8 ) AND HAVE_LONG_LONG )
- SET( xbInt64 "long long" )
- SET( iSize ${LONG_LONG} )
- MESSAGE( "--- xbInt64 = [long long]" )
-ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_LONG_LONG )
-
-IF( NOT ${iSize} EQUAL 8 )
- MESSAGE( "FATAL_ERROR Could not detect 64 bit integer type" )
- MESSAGE( ${iSize} )
- RETURN()
-ENDIF( NOT ${iSize} EQUAL 8 )
-
-#determine how 64 bit unsigned integer defined on this platform
-SET( iSize 0 )
-IF( HAVE_UNSIGNED__INT64 )
- SET( xbUInt64 "unsigned __int64" )
- SET( iSize ${UNSIGNED__INT64} )
- MESSAGE( "--- xbUInt64 = [unsigned __int64]" )
-ENDIF( HAVE_UNSIGNED__INT64 )
-
-IF(( NOT iSize EQUAL 8 ) AND HAVE_UINT64_T )
- SET( xbUInt64 "uint64_t" )
- SET( iSize ${UINT64_T} )
- MESSAGE( "--- xbUInt64 = [uint64_t]" )
-ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_UINT64_T )
-
-IF(( NOT iSize EQUAL 8 ) AND HAVE_U_INT64_T )
- SET( xbUInt64 u_int64_t )
- SET( iSize ${U_INT64_T} )
- MESSAGE( "--- xbUInt64 = [u_int64_t]" )
-ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_U_INT64_T )
-
-IF(( NOT iSize EQUAL 8 ) AND HAVE_UNSIGNED_LONG_LONG )
- SET( xbUInt64 "unsigned long long" )
- SET( iSize ${UNSIGNED_LONG_LONG} )
- MESSAGE( "--- xbUInt64 = [unsigned long long]" )
-ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_UNSIGNED_LONG_LONG )
-
-IF( NOT ${iSize} EQUAL 8 )
- MESSAGE( "FATAL_ERROR Could not detect 64 bit unsigned integer type" )
- MESSAGE( ${iSize} )
- RETURN()
-ENDIF( NOT ${iSize} EQUAL 8 )
-
-#Library options
-option( BUILD_SHARED_LIBS "Build shared libraries" ON)
-option( XB_DBF3_SUPPORT "Compile DBase File Format Version 3 support" ON)
-option( XB_DBF4_SUPPORT "Compile DBase File Format Version 4 support" ON)
-option( XB_MEMO_SUPPORT "Compile memo field support into library" ON)
-option( XB_NDX_SUPPORT "Compile NDX Index support into library" ON)
-option( XB_MDX_SUPPORT "Compile MDX Index support into library" ON)
-option( XB_LOCKING_SUPPORT "Compile Multi User Locking support into library" ON)
-
-option( XB_LOGGING_SUPPORT "Compile message logging support into library" ON)
-option( XB_LINKLIST_SUPPORT "Compile Link List routines into library" ON)
-option( XB_FUNCTION_SUPPORT "Compile XBase Function support into library" ON)
-option( XB_EXPRESSION_SUPPORT "Compile Expression support into library" ON)
-option( XB_INF_SUPPORT "Compile NDX INF file support into library" ON)
-option( XB_FILTER_SUPPORT "Compile Filter support into library" ON)
-option( XB_BLOCKREAD_SUPPORT "Compile Block Read support into library" ON)
-option( XB_SQL_SUPPORT "Compile SQL support into library - alpha" ON)
-option( XB_DEBUG_SUPPORT "Compile debug logic into library" ON)
-option( XB_UTILS_SUPPORT "Compile utility programs" ON)
-option( XB_EXAMPLES_SUPPORT "Compile example programs" ON)
-
-Message( "--- BUILD_SHARED_LIBS " ${BUILD_SHARED_LIBS})
-Message( "--- XB_DBF3_SUPPORT " ${XB_DBF3_SUPPORT})
-Message( "--- XB_DBF4_SUPPORT " ${XB_DBF4_SUPPORT})
-Message( "--- XB_MEMO_SUPPORT " ${XB_MEMO_SUPPORT})
-Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
-Message( "--- XB_MDX_SUPPORT " ${XB_MDX_SUPPORT})
-Message( "--- XB_LOCKING_SUPPORT " ${XB_LOCKING_SUPPORT})
-Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
-Message( "--- XB_FUNCTION_SUPPORT " ${XB_FUNCTION_SUPPORT})
-Message( "--- XB_EXPRESSION_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_FILTER_SUPPORT " ${XB_FILTER_SUPPORT})
-Message( "--- XB_DEBUG_SUPPORT " ${XB_DEBUG_SUPPORT})
-Message( "--- XB_UTILS_SUPPORT " ${XB_UTILS_SUPPORT})
-Message( "--- XB_EXAMPLES_SUPPORT " ${XB_EXAMPLES_SUPPORT})
-Message( "--- XB_LOGGING_SUPPORT " ${XB_LOGGING_SUPPORT})
-Message( "--- XB_SQL_SUPPORT " ${XB_SQL_SUPPORT})
-Message( "--- XB_INF_SUPPORT " ${XB_INF_SUPPORT})
-
-IF( XB_DEBUG_SUPPORT )
- Message( "--- Adding debug support" )
- set( CMAKE_BUILD_TYPE Debug )
-IF( CMAKE_COMPILER_IS_GNUCXX )
- add_compile_options( -Og )
-ENDIF( CMAKE_COMPILER_IS_GNUCXX )
-ENDIF( XB_DEBUG_SUPPORT )
-
-IF( CMAKE_SIZEOF_VOID_P EQUAL 8 )
- MESSAGE( "--- 64 bit compiler detected" )
- set( XB_PLATFORM "x64" )
- set( XB_PLATFORM_64 1 )
- set( XB_LIBNAME "xbase64" )
-
-ELSE( CMAKE_SIZEOF_VOID_P EQUAL 8 )
- MESSAGE( "--- 32 bit compiler detected" )
- set( XB_PLATFORM "x86" )
- set( XB_PLATFORM_32 1 )
- set( XB_LIBNAME "xbase32" )
-
-ENDIF( CMAKE_SIZEOF_VOID_P EQUAL 8 )
-
-
-#Check for the existence of various header files
-INCLUDE (CheckIncludeFiles)
-CHECK_INCLUDE_FILES (ctype.h HAVE_CTYPE_H)
-CHECK_INCLUDE_FILES (dirent.h HAVE_DIRENT_H)
-CHECK_INCLUDE_FILES (fcntl.h HAVE_FCNTL_H)
-CHECK_INCLUDE_FILES (inttypes.h HAVE_INTTYPES_H)
-CHECK_INCLUDE_FILES (pwd.h HAVE_PWD_H)
-CHECK_INCLUDE_FILES (stdarg.h HAVE_STDARG_H)
-CHECK_INCLUDE_FILES (stdargs.h HAVE_STDARGS_H)
-CHECK_INCLUDE_FILES (string.h HAVE_STRING_H)
-CHECK_INCLUDE_FILES (strings.h HAVE_STRINGS_H)
-CHECK_INCLUDE_FILES (sys/stat.h HAVE_STAT_H)
-CHECK_INCLUDE_FILES (unistd.h HAVE_UNISTD_H)
-CHECK_INCLUDE_FILES (varargs.h HAVE_VARARGS_H)
-CHECK_INCLUDE_FILES (windows.h HAVE_WINDOWS_H)
-
-#Check for the existence of various function calls
-INCLUDE( CheckFunctionExists )
-CHECK_FUNCTION_EXISTS(_close HAVE__CLOSE_F)
-CHECK_FUNCTION_EXISTS(fcntl HAVE_FCNTL_F)
-CHECK_FUNCTION_EXISTS(_fdopen HAVE__FDOPEN_F)
-CHECK_FUNCTION_EXISTS(fopen_s HAVE_FOPEN_S_F)
-CHECK_FUNCTION_EXISTS(_fsopen HAVE__FSOPEN_F)
-CHECK_FUNCTION_EXISTS(_fileno HAVE__FILENO_F)
-CHECK_FUNCTION_EXISTS(fork HAVE_FORK_F)
-CHECK_FUNCTION_EXISTS(_fseeki64 HAVE__FSEEKI64_F)
-CHECK_FUNCTION_EXISTS(fseeko HAVE_FSEEKO_F)
-CHECK_FUNCTION_EXISTS(ftruncate HAVE_FTRUNCATE_F)
-CHECK_FUNCTION_EXISTS(_localtime64_s HAVE__LOCALTIME64_S_F)
-CHECK_FUNCTION_EXISTS(LockFile HAVE_LOCKFILE_F)
-CHECK_FUNCTION_EXISTS(locking HAVE_LOCKING_F)
-CHECK_FUNCTION_EXISTS(_locking HAVE__LOCKING_F)
-CHECK_FUNCTION_EXISTS(_open HAVE__OPEN_F)
-CHECK_FUNCTION_EXISTS(SetEndOfFile HAVE_SETENDOFFILE_F)
-
-CHECK_FUNCTION_EXISTS(vsnprintf HAVE_VSNPRINTF_F)
-CHECK_FUNCTION_EXISTS(_vsnprintf_s HAVE__VSNPRINTF_S_F)
-
-
-CHECK_FUNCTION_EXISTS(getopt HAVE_GETOPT_F)
-
-IF( WIN32 )
-
-# Use CHECK_SYMBOL_EXISTS for the Win32API instead of CHECK_FUNCTION_EXISTS
-# Can't detect inline functions in headers
-# Can't detect due to mismatch of calling conventions
-# Can't detect mangled names
-
-INCLUDE( CheckSymbolExists )
-CHECK_SYMBOL_EXISTS(CreateProcessW Windows.h HAVE_CREATEPROCESSW_F )
-CHECK_SYMBOL_EXISTS(vsprintf_s stdio.h HAVE_VSPRINTF_S_F )
-
-ENDIF ( WIN32 )
-
-# IF( NOT HAVE_SENTENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND BORLAND )
-# # ----fix me----
-# # cmake CHECK_FUNCTION_EXISTS - could not find Borland 5.5 SetEndOfFile
-# Set( HAVE_SETENDOFFILE_F "HAVE_SETENDOFFILE_H" )
-# ENDIF ( NOT HAVE_SENTENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND BORLAND )
-
-IF( NOT HAVE_SETENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND WIN32 )
- # ----fix me----
- # cmake CHECK_FUNCTION_EXISTS - could not find Borland 5.5, or Windows VS 32 bit SetEndOfFile
- Set( HAVE_SETENDOFFILE_F "HAVE_SETENDOFFILE_F" )
-ENDIF ( NOT HAVE_SETENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND WIN32 )
-
-IF( XB_NDX_SUPPORT OR XB_MDX_SUPPORT )
- Set( XB_INDEX_SUPPORT "1" )
-ENDIF( XB_NDX_SUPPORT OR XB_MDX_SUPPORT )
-
-
-# Set directories
-# PROJECT_PARENT_DIR is two nodes higher
-get_filename_component( PROJECT_PARENT_DIR ${PROJECT_BINARY_DIR} DIRECTORY )
-get_filename_component( PROJECT_PARENT_DIR ${PROJECT_PARENT_DIR} DIRECTORY )
-
-# MESSAGE( "PROJECT_PARENT_DIR = " ${PROJECT_PARENT_DIR} )
-# MESSAGE( "PROJECT_BINARY_DIR = " ${PROJECT_BINARY_DIR} )
-
-
-set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin/${XB_PLATFORM})
-set( LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib/${XB_PLATFORM})
-set( PROJECT_SOURCE_DIR ${PROJECT_PARENT_DIR}/src)
-set( PROJECT_DATA_DIR ${PROJECT_PARENT_DIR}/data/)
-set( PROJECT_LOG_DIR ${PROJECT_PARENT_DIR}/logs/)
-set( EXTRA_LIBS ${EXTRA_LIBS} ${XB_LIBNAME})
-
-
-
-# Undo bad decisions
-IF( XB_PLATFORM_32 AND XB_LARGEFILE_SUPPORT )
- MESSAGE( "--- Can't build 64 bit environment with a 32 bit compiler" )
- MESSAGE( "--- XB_LARGEFILE_SUPPORT set to OFF" )
- set( XB_LARGEFILE_SUPPORT OFF CACHE BOOL "Use 64 bit large file support?" FORCE )
-ENDIF ( XB_PLATFORM_32 AND XB_LARGEFILE_SUPPORT )
-
-IF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
- MESSAGE( "--- At lease one file format is required. Defaulting to Version 4" )
- set( XB_DBF4_SUPPORT ON CACHE BOOL "Compile DBase File Format Version 4 support" FORCE )
-ENDIF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
-
-IF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
- MESSAGE( "--- Link List support required for DBF V4 Memo files. Setting to ON" )
- set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
-ENDIF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
-
-IF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
- MESSAGE( "--- Link List support required for locking functions. Setting to ON" )
- set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
-ENDIF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
-
-IF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
- MESSAGE( "--- Expression required for indices. Setting to ON" )
- set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
-ENDIF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
-
-IF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
- MESSAGE( "--- Function support required for expressions. Setting to ON" )
- set( XB_FUNCTION_SUPPORT ON CACHE BOOL "Compile XBase Function support into library" FORCE )
-ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
-
-IF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
- MESSAGE( "--- Linklist support required for expressions. Setting to ON" )
- set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
-ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
-
-IF( XB_SQL_SUPPORT AND NOT XB_MEMO_SUPPORT )
- MESSAGE( "--- Memo support required for SQL. Setting to ON" )
- set( XB_MEMO_SUPPORT ON CACHE BOOL "Compile memo field support into library" FORCE )
-ENDIF( XB_SQL_SUPPORT AND NOT XB_MEMO_SUPPORT )
-
-IF( XB_SQL_SUPPORT AND NOT XB_DBF4_SUPPORT )
- MESSAGE( "--- DBF4 support required for SQL. Setting to ON" )
- set( XB_DBF4_SUPPORT ON CACHE BOOL "Compile DBase File Format Version 4 support" FORCE )
-ENDIF( XB_SQL_SUPPORT AND NOT XB_DBF4_SUPPORT )
-
-IF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
- MESSAGE( "--- Expression required for filters. Setting to ON" )
- set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
-ENDIF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
-
-IF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
- MESSAGE( "--- BLOCKREAD support required for SQL. Setting to ON" )
- set( XB_BLOCKREAD_SUPPORT ON CACHE BOOL "Compile Block Read support into library" FORCE )
-ENDIF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
-
-
-# Build configuration header file
-configure_file (
- "${PROJECT_SOURCE_DIR}/include/xbconfig.h.in"
- "${PROJECT_BINARY_DIR}/include/xbconfig.h"
-)
-
-# Microsoft Windows settings
-IF( WIN32 )
-# add_definitions( /D_CRT_SECURE_NO_WARNINGS)
- add_definitions( /EHsc )
-ENDIF( WIN32 )
-
-
-# set up include directories
-include_directories( "${PROJECT_BINARY_DIR}/include" )
-include_directories( "${PROJECT_SOURCE_DIR}/include" )
-
-#build the library
-IF ( BUILD_SHARED_LIBS )
- set( LIB_TYPE SHARED )
-ELSE( BUILD_SHARED_LIBS )
- set( LIB_TYPE STATIC )
-ENDIF( BUILD_SHARED_LIBS )
-MESSAGE( "--- Lib type " ${LIB_TYPE} )
-
-
-
-set (SOURCES ${PROJECT_SOURCE_DIR}/core/xbstring.cpp
- ${PROJECT_SOURCE_DIR}/core/xbssv.cpp
- ${PROJECT_SOURCE_DIR}/core/xbdate.cpp
- ${PROJECT_SOURCE_DIR}/core/xbtblmgr.cpp
- ${PROJECT_SOURCE_DIR}/core/xbxbase.cpp
- ${PROJECT_SOURCE_DIR}/core/xbfile.cpp
- ${PROJECT_SOURCE_DIR}/core/xbdbf.cpp
- ${PROJECT_SOURCE_DIR}/core/xbfields.cpp
- ${PROJECT_SOURCE_DIR}/core/xblog.cpp)
-
-IF( XB_MEMO_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo.cpp )
-ENDIF( XB_MEMO_SUPPORT )
-
-IF( XB_DBF3_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbdbf3.cpp )
- IF( XB_MEMO_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo3.cpp )
- ENDIF( XB_MEMO_SUPPORT )
-ENDIF( XB_DBF3_SUPPORT )
-
-IF( XB_DBF4_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbdbf4.cpp )
- IF( XB_MEMO_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo4.cpp )
- ENDIF( XB_MEMO_SUPPORT )
-ENDIF( XB_DBF4_SUPPORT )
-
-IF( XB_FUNCTION_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbfuncs.cpp )
-ENDIF( XB_FUNCTION_SUPPORT )
-
-IF( XB_EXPRESSION_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbexpnode.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbexp.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbuda.cpp )
-ENDIF( XB_EXPRESSION_SUPPORT )
-
-IF( XB_INDEX_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbbcd.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixbase.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbtag.cpp )
-ENDIF( XB_INDEX_SUPPORT )
-
-IF( XB_NDX_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixndx.cpp )
-ENDIF( XB_NDX_SUPPORT )
-
-
-IF( XB_MDX_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixmdx.cpp )
-ENDIF( XB_MDX_SUPPORT )
-
-IF( XB_SQL_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbalttbl.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrix.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrtbl.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdelete.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdrpix.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdrptbl.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbinsert.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbset.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbsql.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbstmt.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbselect.cpp )
-ENDIF( XB_SQL_SUPPORT )
-
-
-IF( XB_FILTER_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbfilter.cpp )
-ENDIF( XB_FILTER_SUPPORT )
-
-IF( XB_BLOCKREAD_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbblockread.cpp )
-ENDIF( XB_BLOCKREAD_SUPPORT )
-
-
-include( GenerateExportHeader )
-#add_library( xbase ${LIB_TYPE} ${SOURCES} )
-add_library( ${XB_LIBNAME} ${LIB_TYPE} ${SOURCES} )
-#add_library( ${CMAKE_PROJECT_NAME} ${LIB_TYPE} ${SOURCES} )
-
-
-IF( WIN32 )
-MESSAGE( "--- Generating Windows Library Headers" )
-
-#GENERATE_EXPORT_HEADER( xbase
-# BASE_NAME xbase
-
-GENERATE_EXPORT_HEADER( ${XB_LIBNAME}
- BASE_NAME ${XB_LIBNAME}
- EXPORT_MACRO_NAME xbase_EXPORT
- EXPORT_FILE_NAME xbase_Export.h
- STATIC_DEFINE xbase_BUILT_AS_STATIC
-)
-ENDIF( WIN32 )
-
-
-#build test programs
-enable_testing()
-
-add_executable( xb_test_string ${PROJECT_SOURCE_DIR}/tests/xb_test_string.cpp )
-target_link_libraries( xb_test_string ${EXTRA_LIBS})
-add_test( NAME xbString COMMAND xb_test_string QUIET )
-
-add_executable( xb_test_date ${PROJECT_SOURCE_DIR}/tests/xb_test_date.cpp )
-target_link_libraries( xb_test_date ${EXTRA_LIBS})
-add_test( NAME xbDate COMMAND xb_test_date QUIET )
-
-add_executable( xb_test_tblmgr ${PROJECT_SOURCE_DIR}/tests/xb_test_tblmgr.cpp )
-target_link_libraries( xb_test_tblmgr ${EXTRA_LIBS})
-add_test( NAME xbTblMgr COMMAND xb_test_tblmgr QUIET )
-
-add_executable( xb_test_xbase ${PROJECT_SOURCE_DIR}/tests/xb_test_xbase.cpp )
-target_link_libraries( xb_test_xbase ${EXTRA_LIBS})
-add_test( NAME xbXBase COMMAND xb_test_xbase QUIET )
-
-add_executable( xb_test_file ${PROJECT_SOURCE_DIR}/tests/xb_test_file.cpp )
-target_link_libraries( xb_test_file ${EXTRA_LIBS})
-add_test( NAME xbFile COMMAND xb_test_file QUIET )
-
-add_executable( xb_test_log ${PROJECT_SOURCE_DIR}/tests/xb_test_log.cpp )
-target_link_libraries( xb_test_log ${EXTRA_LIBS})
-add_test( NAME xbLog COMMAND xb_test_log QUIET )
-
-IF( XB_LINKLIST_SUPPORT )
-add_executable( xb_test_linklist ${PROJECT_SOURCE_DIR}/tests/xb_test_linklist.cpp )
-target_link_libraries( xb_test_linklist ${EXTRA_LIBS})
-add_test( NAME xbLinkList COMMAND xb_test_linklist QUIET )
-ENDIF( XB_LINKLIST_SUPPORT )
-
-IF( XB_DBF3_SUPPORT )
-add_executable( xb_test_dbf_v3_nomemos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v3_nomemos.cpp )
-target_link_libraries( xb_test_dbf_v3_nomemos ${EXTRA_LIBS})
-add_test( NAME xbDbfV3NoMemos COMMAND xb_test_dbf_v3_nomemos QUIET )
-
-IF( XB_MEMO_SUPPORT )
-add_executable( xb_test_dbf_v3_memos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v3_memos.cpp )
-target_link_libraries( xb_test_dbf_v3_memos ${EXTRA_LIBS})
-add_test( NAME xbDbfV3Memos COMMAND xb_test_dbf_v3_memos QUIET )
-
-ENDIF( XB_MEMO_SUPPORT )
-ENDIF( XB_DBF3_SUPPORT )
-
-IF( XB_DBF4_SUPPORT )
-add_executable( xb_test_dbf_v4_nomemos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v4_nomemos.cpp )
-target_link_libraries( xb_test_dbf_v4_nomemos ${EXTRA_LIBS})
-add_test( NAME xbDbfV4NoMemos COMMAND xb_test_dbf_v4_nomemos QUIET )
-
-IF( XB_MEMO_SUPPORT )
-add_executable( xb_test_dbf_v4_memos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v4_memos.cpp )
-target_link_libraries( xb_test_dbf_v4_memos ${EXTRA_LIBS})
-add_test( NAME xbDbfV4Memos COMMAND xb_test_dbf_v4_memos QUIET )
-
-ENDIF( XB_MEMO_SUPPORT )
-ENDIF( XB_DBF4_SUPPORT )
-
-IF( XB_FUNCTION_SUPPORT )
-add_executable( xb_test_funcs ${PROJECT_SOURCE_DIR}/tests/xb_test_funcs.cpp )
-target_link_libraries( xb_test_funcs ${EXTRA_LIBS})
-add_test( NAME xbFunctions COMMAND xb_test_funcs QUIET )
-ENDIF( XB_FUNCTION_SUPPORT )
-
-IF( XB_NDX_SUPPORT )
-IF( XB_DBF3_SUPPORT )
-add_executable( xb_test_ndx ${PROJECT_SOURCE_DIR}/tests/xb_test_ndx.cpp )
-target_link_libraries( xb_test_ndx ${EXTRA_LIBS})
-add_test( NAME xbIxNdx COMMAND xb_test_ndx QUIET )
-ENDIF( XB_DBF3_SUPPORT )
-ENDIF( XB_NDX_SUPPORT )
-
-IF( XB_MDX_SUPPORT )
-IF( XB_DBF4_SUPPORT )
-add_executable( xb_test_mdx ${PROJECT_SOURCE_DIR}/tests/xb_test_mdx.cpp )
-target_link_libraries( xb_test_mdx ${EXTRA_LIBS})
-add_test( NAME xbIxMdx COMMAND xb_test_mdx QUIET )
-ENDIF( XB_DBF4_SUPPORT )
-ENDIF( XB_MDX_SUPPORT )
-
-IF( XB_INDEX_SUPPORT )
-add_executable( xb_test_bcd ${PROJECT_SOURCE_DIR}/tests/xb_test_bcd.cpp )
-target_link_libraries( xb_test_bcd ${EXTRA_LIBS})
-add_test( NAME xbBcd COMMAND xb_test_bcd QUIET )
-ENDIF( XB_INDEX_SUPPORT )
-
-
-IF( XB_EXPRESSION_SUPPORT )
-
-add_executable( xb_test_expnode ${PROJECT_SOURCE_DIR}/tests/xb_test_expnode.cpp )
-target_link_libraries( xb_test_expnode ${EXTRA_LIBS})
-add_test( NAME xbExpNode COMMAND xb_test_expnode QUIET )
-
-
-add_executable( xb_test_expression ${PROJECT_SOURCE_DIR}/tests/xb_test_expression.cpp )
-target_link_libraries( xb_test_expression ${EXTRA_LIBS})
-add_test( NAME xbExpressions COMMAND xb_test_expression QUIET )
-
-add_executable( xb_test_uda ${PROJECT_SOURCE_DIR}/tests/xb_test_uda.cpp )
-target_link_libraries( xb_test_uda ${EXTRA_LIBS})
-add_test( NAME xbUda COMMAND xb_test_uda QUIET )
-
-ENDIF( XB_EXPRESSION_SUPPORT )
-
-IF( XB_SQL_SUPPORT )
-add_executable( xb_test_sql ${PROJECT_SOURCE_DIR}/tests/xb_test_sql.cpp )
-target_link_libraries( xb_test_sql ${EXTRA_LIBS})
-add_test( NAME xbSql COMMAND xb_test_sql QUIET )
-ENDIF( XB_SQL_SUPPORT )
-
-IF( XB_FILTER_SUPPORT )
-add_executable( xb_test_filter ${PROJECT_SOURCE_DIR}/tests/xb_test_filter.cpp )
-target_link_libraries( xb_test_filter ${EXTRA_LIBS})
-add_test( NAME xbFilter COMMAND xb_test_filter QUIET )
-ENDIF( XB_FILTER_SUPPORT )
-
-IF( XB_BLOCKREAD_SUPPORT )
-add_executable( xb_test_blockread ${PROJECT_SOURCE_DIR}/tests/xb_test_blockread.cpp )
-target_link_libraries( xb_test_blockread ${EXTRA_LIBS})
-add_test( NAME xbBlockRead COMMAND xb_test_blockread QUIET )
-ENDIF( XB_BLOCKREAD_SUPPORT )
-
-
-IF( XB_LOCKING_SUPPORT )
-add_executable( xb_test_lock ${PROJECT_SOURCE_DIR}/tests/xb_test_lock.cpp )
-target_link_libraries( xb_test_lock ${EXTRA_LIBS})
-add_test( NAME xbLock COMMAND xb_test_lock QUIET )
-IF( HAVE_CREATEPROCESSW_F )
-add_executable( xb_test_lock2 ${PROJECT_SOURCE_DIR}/tests/xb_test_lock2.cpp )
-target_link_libraries( xb_test_lock2 ${EXTRA_LIBS})
-ENDIF( HAVE_CREATEPROCESSW_F )
-ENDIF( XB_LOCKING_SUPPORT )
-
-#build example programs
-IF( XB_EXAMPLES_SUPPORT )
- add_executable( xb_ex_string ${PROJECT_SOURCE_DIR}/examples/xb_ex_string.cpp )
- target_link_libraries( xb_ex_string ${EXTRA_LIBS})
-
- add_executable( xb_ex_date ${PROJECT_SOURCE_DIR}/examples/xb_ex_date.cpp )
- target_link_libraries( xb_ex_date ${EXTRA_LIBS})
-
- IF( XB_DBF3_SUPPORT )
- add_executable( xb_ex_v3_create_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v3_create_dbf.cpp )
- target_link_libraries( xb_ex_v3_create_dbf ${EXTRA_LIBS})
-
- add_executable( xb_ex_v3_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v3_upd_dbf.cpp )
- target_link_libraries( xb_ex_v3_upd_dbf ${EXTRA_LIBS})
- ENDIF( XB_DBF3_SUPPORT )
-
- IF( XB_DBF4_SUPPORT )
- add_executable( xb_ex_v4_create_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_create_dbf.cpp )
- target_link_libraries( xb_ex_v4_create_dbf ${EXTRA_LIBS})
- ENDIF( XB_DBF4_SUPPORT )
-
- IF( XB_EXPRESSION_SUPPORT )
- add_executable( xb_ex_expression ${PROJECT_SOURCE_DIR}/examples/xb_ex_expression.cpp )
- target_link_libraries( xb_ex_expression ${EXTRA_LIBS})
- ENDIF( XB_EXPRESSION_SUPPORT )
-
- add_executable( xb_ex_v4_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_upd_dbf.cpp )
- target_link_libraries( xb_ex_v4_upd_dbf ${EXTRA_LIBS})
-
- add_executable( xb_ex_ssv ${PROJECT_SOURCE_DIR}/examples/xb_ex_ssv.cpp )
- target_link_libraries( xb_ex_ssv ${EXTRA_LIBS})
-
-ENDIF( XB_EXAMPLES_SUPPORT )
-
-#build utility programs
-IF( XB_UTILS_SUPPORT )
-
- add_executable( xb_cfg_check ${PROJECT_SOURCE_DIR}/utils/xb_cfg_check.cpp )
- target_link_libraries( xb_cfg_check ${EXTRA_LIBS})
-
- add_executable( xb_copydbf ${PROJECT_SOURCE_DIR}/utils/xb_copydbf.cpp )
- target_link_libraries( xb_copydbf ${EXTRA_LIBS})
-
- add_executable( xb_dbfutil ${PROJECT_SOURCE_DIR}/utils/xb_dbfutil.cpp )
- target_link_libraries( xb_dbfutil ${EXTRA_LIBS})
-
- add_executable( xb_deletall ${PROJECT_SOURCE_DIR}/utils/xb_deletall.cpp )
- target_link_libraries( xb_deletall ${EXTRA_LIBS})
-
- add_executable( xb_dumpdbt ${PROJECT_SOURCE_DIR}/utils/xb_dumpdbt.cpp )
- target_link_libraries( xb_dumpdbt ${EXTRA_LIBS})
-
- add_executable( xb_dumprecs ${PROJECT_SOURCE_DIR}/utils/xb_dumprecs.cpp )
- target_link_libraries( xb_dumprecs ${EXTRA_LIBS})
-
- add_executable( xb_tblinfo ${PROJECT_SOURCE_DIR}/utils/xb_tblinfo.cpp )
- target_link_libraries( xb_tblinfo ${EXTRA_LIBS})
-
- IF( XB_SQL_SUPPORT )
- add_executable( xb_execsql ${PROJECT_SOURCE_DIR}/utils/xb_execsql.cpp )
- target_link_libraries( xb_execsql ${EXTRA_LIBS})
- ENDIF( XB_SQL_SUPPORT )
-
- add_executable( xb_pack ${PROJECT_SOURCE_DIR}/utils/xb_pack.cpp )
- target_link_libraries( xb_pack ${EXTRA_LIBS})
-
- add_executable( xb_undelall ${PROJECT_SOURCE_DIR}/utils/xb_undelall.cpp )
- target_link_libraries( xb_undelall ${EXTRA_LIBS})
-
- install (TARGETS xb_cfg_check DESTINATION bin)
- install (TARGETS xb_copydbf DESTINATION bin)
- install (TARGETS xb_dbfutil DESTINATION bin)
- install (TARGETS xb_deletall DESTINATION bin)
- install (TARGETS xb_dumpdbt DESTINATION bin)
- install (TARGETS xb_dumprecs DESTINATION bin)
- install (TARGETS xb_pack DESTINATION bin)
- install (TARGETS xb_undelall DESTINATION bin)
- IF( XB_SQL_SUPPORT )
- install (TARGETS xb_execsql DESTINATION bin)
- ENDIF( XB_SQL_SUPPORT )
-
-
-
-ENDIF( XB_UTILS_SUPPORT )
-
-install (FILES include/xbconfig.h
- ${PROJECT_SOURCE_DIR}/include/xbase.h
- ${PROJECT_SOURCE_DIR}/include/xbbcd.h
- ${PROJECT_SOURCE_DIR}/include/xbdate.h
- ${PROJECT_SOURCE_DIR}/include/xbdbf.h
- ${PROJECT_SOURCE_DIR}/include/xbexp.h
- ${PROJECT_SOURCE_DIR}/include/xbexpnode.h
- ${PROJECT_SOURCE_DIR}/include/xbfile.h
- ${PROJECT_SOURCE_DIR}/include/xbindex.h
- ${PROJECT_SOURCE_DIR}/include/xblnklst.h
- ${PROJECT_SOURCE_DIR}/include/xblnklstord.h
- ${PROJECT_SOURCE_DIR}/include/xblnknod.h
- ${PROJECT_SOURCE_DIR}/include/xblog.h
- ${PROJECT_SOURCE_DIR}/include/xbmemo.h
- ${PROJECT_SOURCE_DIR}/include/xbretcod.h
- ${PROJECT_SOURCE_DIR}/include/xbsql.h
- ${PROJECT_SOURCE_DIR}/include/xbssv.h
- ${PROJECT_SOURCE_DIR}/include/xbstring.h
- ${PROJECT_SOURCE_DIR}/include/xbtblmgr.h
- ${PROJECT_SOURCE_DIR}/include/xbtypes.h
- ${PROJECT_SOURCE_DIR}/include/xbxbase.h
- ${PROJECT_SOURCE_DIR}/include/xbuda.h
- ${PROJECT_SOURCE_DIR}/include/xbtag.h
- ${PROJECT_SOURCE_DIR}/include/xbfilter.h
- ${PROJECT_SOURCE_DIR}/include/xbblkread.h
- ${PROJECT_SOURCE_DIR}/include/xbsql.h
-
- DESTINATION include/${CMAKE_PROJECT_NAME})
-
-IF( NOT WIN32 )
-install (FILES ${PROJECT_PARENT_DIR}/docs/man/xb_cfg_chk.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_copydbf.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_dbfutil.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_deletall.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_dumpdbt.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_dumprecs.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_pack.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_tblinfo.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_undelall.1.gz
-
- DESTINATION man/man1)
-
-ENDIF( NOT WIN32 )
-
-
-SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.1.0 SOVERSION 0 )
-
-IF( EXISTS /usr/local/lib64 )
-install (TARGETS ${XB_LIBNAME} DESTINATION lib64/${CMAKE_PROJECT_NAME})
-ELSE( EXISTS /usr/local/lib64 )
-install (TARGETS ${XB_LIBNAME} DESTINATION lib/${CMAKE_PROJECT_NAME})
-ENDIF( EXISTS /usr/local/lib64 )
-
-
diff --git a/build/win64vs/BuildWin.bat b/build/win64vs/BuildWin.bat
deleted file mode 100755
index 2151838..0000000
--- a/build/win64vs/BuildWin.bat
+++ /dev/null
@@ -1,11 +0,0 @@
-rem Build using MS Visual Studio
-
-cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Debug .
-
-pause To build the Windows Visual Studio 64 bit version, execute this script from a Visual Studio 64 bit command window
-
-rem cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release .
-
-pause
-
-nmake \ No newline at end of file
diff --git a/build/win64vs/CMakeLists.txt b/build/win64vs/CMakeLists.txt
deleted file mode 100755
index f514c5c..0000000
--- a/build/win64vs/CMakeLists.txt
+++ /dev/null
@@ -1,761 +0,0 @@
-cmake_minimum_required(VERSION 3.0)
-
-project (xbase64)
-set( xbase_VERSION_MAJOR 4 )
-set( xbase_VERSION_MINOR 1 )
-set( xbase_VERSION_PATCH 0 )
-
-MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
-MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
-MESSAGE( "--- Project Name: " ${CMAKE_PROJECT_NAME} )
-MESSAGE( "--- Install Prefix: " ${CMAKE_INSTALL_PREFIX} )
-
-#Set compiler options
-
-IF( CMAKE_COMPILER_IS_GNUCXX )
- MESSAGE( "Setting GNU compiler options" )
- add_compile_options( -Wall -Wsign-conversion )
-# add_compile_options( -Wall -Wconversion -Wsign-conversion )
- SET( VERBOSE 1 )
-ENDIF( CMAKE_COMPILER_IS_GNUCXX )
-
-IF( BORLAND )
- MESSAGE ("BORLAND COMPILER" )
- #set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w-8022" )
- add_compile_options( -w-8022 )
-ENDIF( BORLAND )
-
-
-MESSAGE( "--- Checking integer sizes" )
-INCLUDE(CheckTypeSize)
-CHECK_TYPE_SIZE( "short int" SHORT_INT )
-CHECK_TYPE_SIZE( int INT )
-CHECK_TYPE_SIZE( __int32 __INT32 )
-CHECK_TYPE_SIZE( int32_t INT32_T )
-CHECK_TYPE_SIZE( long LONG_INT )
-CHECK_TYPE_SIZE( __int64 __INT64 )
-CHECK_TYPE_SIZE( int64_t INT64_T )
-CHECK_TYPE_SIZE( "long long" LONG_LONG )
-CHECK_TYPE_SIZE( u_int64_t U_INT64_T )
-CHECK_TYPE_SIZE( uint64_t UINT64_T )
-CHECK_TYPE_SIZE( "unsigned __int64" UNSIGNED__INT64 )
-CHECK_TYPE_SIZE( "unsigned long long" UNSIGNED_LONG_LONG )
-
-CHECK_TYPE_SIZE( "double" DOUBLE )
-MESSAGE( "--- Double size = " ${DOUBLE} )
-
-
-#determine how 16 bit integer defined on this platform
-SET( iSize 0 )
-IF( HAVE_SHORT_INT AND ${SHORT_INT} EQUAL 2 )
- SET( xbInt16 "short int" )
- SET( xbUInt16 "unsigned short int" )
- SET( iSize ${SHORT_INT} )
- MESSAGE( "--- xbInt16 = [short int]" )
- MESSAGE( "--- xbUInt16 = [unsigned short int]" )
-
-ENDIF( HAVE_SHORT_INT AND ${SHORT_INT} EQUAL 2 )
-IF( NOT ${iSize} EQUAL 2 )
- MESSAGE( "FATAL_ERROR Could not detect 16 bit integer type" )
- MESSAGE( ${iSize} )
- RETURN()
-ENDIF( NOT ${iSize} EQUAL 2 )
-
-#determine how 32 bit integer defined on this platform
-SET( iSize 0 )
-IF( HAVE_INT AND ${INT} EQUAL 4 )
- SET( xbInt32 int )
- SET( xbUInt32 "unsigned int" )
- SET( iSize ${INT} )
- MESSAGE( "--- xbInt32 = [int]" )
- MESSAGE( "--- xbUInt32 = [unsigned int]" )
-ENDIF( HAVE_INT AND ${INT} EQUAL 4 )
-
-IF(( NOT iSize EQUAL 4 ) AND HAVE___INT32 )
- MESSAGE( __int untested if block - see CMakeLists.txt)
- SET( xbInt32 __int32 )
- SET( xbUInt32 "unsigned __int32" )
- SET( iSize ${__INT} )
- MESSAGE( "--- xbInt32 = [__int]" )
- MESSAGE( "--- xbUInt32 = [unsigned __int]" )
-ENDIF(( NOT iSize EQUAL 4 ) AND HAVE___INT32 )
-
-IF(( NOT iSize EQUAL 4 ) AND HAVE_INT32_T )
- SET( xbInt32 int32_t )
- SET( xbUInt32 "u_int32_t" )
- SET( iSize ${INT32_T} )
- MESSAGE( "--- xbInt32 = [int32_t]" )
- MESSAGE( "--- xbUInt32 = [u_int32_t]" )
-ENDIF(( NOT iSize EQUAL 4 ) AND HAVE_INT32_T )
-
-IF( NOT ${iSize} EQUAL 4 )
- MESSAGE( "FATAL_ERROR Could not detect 32 bit integer type" )
- MESSAGE( ${iSize} )
- RETURN()
-ENDIF( NOT ${iSize} EQUAL 4 )
-
-#determine how 64 bit integer defined on this platform
-SET( iSize 0 )
-IF( HAVE___INT64 )
- SET( xbInt64 __int64 )
- SET( iSize ${__INT64} )
- MESSAGE( "--- xbInt64 = [__int64]" )
-ENDIF( HAVE___INT64 )
-
-IF(( NOT iSize EQUAL 8 ) AND HAVE_INT64_T )
- SET( xbInt64 int64_t )
- SET( iSize ${INT64_T} )
- MESSAGE( "--- xbInt64 = [int64_t]" )
-ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_INT64_T )
-
-IF(( NOT iSize EQUAL 8 ) AND HAVE_LONG_LONG )
- SET( xbInt64 "long long" )
- SET( iSize ${LONG_LONG} )
- MESSAGE( "--- xbInt64 = [long long]" )
-ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_LONG_LONG )
-
-IF( NOT ${iSize} EQUAL 8 )
- MESSAGE( "FATAL_ERROR Could not detect 64 bit integer type" )
- MESSAGE( ${iSize} )
- RETURN()
-ENDIF( NOT ${iSize} EQUAL 8 )
-
-#determine how 64 bit unsigned integer defined on this platform
-SET( iSize 0 )
-IF( HAVE_UNSIGNED__INT64 )
- SET( xbUInt64 "unsigned __int64" )
- SET( iSize ${UNSIGNED__INT64} )
- MESSAGE( "--- xbUInt64 = [unsigned __int64]" )
-ENDIF( HAVE_UNSIGNED__INT64 )
-
-IF(( NOT iSize EQUAL 8 ) AND HAVE_UINT64_T )
- SET( xbUInt64 "uint64_t" )
- SET( iSize ${UINT64_T} )
- MESSAGE( "--- xbUInt64 = [uint64_t]" )
-ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_UINT64_T )
-
-IF(( NOT iSize EQUAL 8 ) AND HAVE_U_INT64_T )
- SET( xbUInt64 u_int64_t )
- SET( iSize ${U_INT64_T} )
- MESSAGE( "--- xbUInt64 = [u_int64_t]" )
-ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_U_INT64_T )
-
-IF(( NOT iSize EQUAL 8 ) AND HAVE_UNSIGNED_LONG_LONG )
- SET( xbUInt64 "unsigned long long" )
- SET( iSize ${UNSIGNED_LONG_LONG} )
- MESSAGE( "--- xbUInt64 = [unsigned long long]" )
-ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_UNSIGNED_LONG_LONG )
-
-IF( NOT ${iSize} EQUAL 8 )
- MESSAGE( "FATAL_ERROR Could not detect 64 bit unsigned integer type" )
- MESSAGE( ${iSize} )
- RETURN()
-ENDIF( NOT ${iSize} EQUAL 8 )
-
-#Library options
-option( BUILD_SHARED_LIBS "Build shared libraries" ON)
-option( XB_DBF3_SUPPORT "Compile DBase File Format Version 3 support" ON)
-option( XB_DBF4_SUPPORT "Compile DBase File Format Version 4 support" ON)
-option( XB_MEMO_SUPPORT "Compile memo field support into library" ON)
-option( XB_NDX_SUPPORT "Compile NDX Index support into library" ON)
-option( XB_MDX_SUPPORT "Compile MDX Index support into library" ON)
-option( XB_LOCKING_SUPPORT "Compile Multi User Locking support into library" ON)
-
-option( XB_LOGGING_SUPPORT "Compile message logging support into library" ON)
-option( XB_LINKLIST_SUPPORT "Compile Link List routines into library" ON)
-option( XB_FUNCTION_SUPPORT "Compile XBase Function support into library" ON)
-option( XB_EXPRESSION_SUPPORT "Compile Expression support into library" ON)
-option( XB_INF_SUPPORT "Compile NDX INF file support into library" ON)
-option( XB_FILTER_SUPPORT "Compile Filter support into library" ON)
-option( XB_BLOCKREAD_SUPPORT "Compile Block Read support into library" ON)
-option( XB_SQL_SUPPORT "Compile SQL support into library - alpha" ON)
-option( XB_DEBUG_SUPPORT "Compile debug logic into library" ON)
-option( XB_UTILS_SUPPORT "Compile utility programs" ON)
-option( XB_EXAMPLES_SUPPORT "Compile example programs" ON)
-
-Message( "--- BUILD_SHARED_LIBS " ${BUILD_SHARED_LIBS})
-Message( "--- XB_DBF3_SUPPORT " ${XB_DBF3_SUPPORT})
-Message( "--- XB_DBF4_SUPPORT " ${XB_DBF4_SUPPORT})
-Message( "--- XB_MEMO_SUPPORT " ${XB_MEMO_SUPPORT})
-Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
-Message( "--- XB_MDX_SUPPORT " ${XB_MDX_SUPPORT})
-Message( "--- XB_LOCKING_SUPPORT " ${XB_LOCKING_SUPPORT})
-Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
-Message( "--- XB_FUNCTION_SUPPORT " ${XB_FUNCTION_SUPPORT})
-Message( "--- XB_EXPRESSION_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_FILTER_SUPPORT " ${XB_FILTER_SUPPORT})
-Message( "--- XB_DEBUG_SUPPORT " ${XB_DEBUG_SUPPORT})
-Message( "--- XB_UTILS_SUPPORT " ${XB_UTILS_SUPPORT})
-Message( "--- XB_EXAMPLES_SUPPORT " ${XB_EXAMPLES_SUPPORT})
-Message( "--- XB_LOGGING_SUPPORT " ${XB_LOGGING_SUPPORT})
-Message( "--- XB_SQL_SUPPORT " ${XB_SQL_SUPPORT})
-Message( "--- XB_INF_SUPPORT " ${XB_INF_SUPPORT})
-
-IF( XB_DEBUG_SUPPORT )
- Message( "--- Adding debug support" )
- set( CMAKE_BUILD_TYPE Debug )
-IF( CMAKE_COMPILER_IS_GNUCXX )
- add_compile_options( -Og )
-ENDIF( CMAKE_COMPILER_IS_GNUCXX )
-ENDIF( XB_DEBUG_SUPPORT )
-
-IF( CMAKE_SIZEOF_VOID_P EQUAL 8 )
- MESSAGE( "--- 64 bit compiler detected" )
- set( XB_PLATFORM "x64" )
- set( XB_PLATFORM_64 1 )
- set( XB_LIBNAME "xbase64" )
-
-ELSE( CMAKE_SIZEOF_VOID_P EQUAL 8 )
- MESSAGE( "--- 32 bit compiler detected" )
- set( XB_PLATFORM "x86" )
- set( XB_PLATFORM_32 1 )
- set( XB_LIBNAME "xbase32" )
-
-ENDIF( CMAKE_SIZEOF_VOID_P EQUAL 8 )
-
-
-#Check for the existence of various header files
-INCLUDE (CheckIncludeFiles)
-CHECK_INCLUDE_FILES (ctype.h HAVE_CTYPE_H)
-CHECK_INCLUDE_FILES (dirent.h HAVE_DIRENT_H)
-CHECK_INCLUDE_FILES (fcntl.h HAVE_FCNTL_H)
-CHECK_INCLUDE_FILES (inttypes.h HAVE_INTTYPES_H)
-CHECK_INCLUDE_FILES (pwd.h HAVE_PWD_H)
-CHECK_INCLUDE_FILES (stdarg.h HAVE_STDARG_H)
-CHECK_INCLUDE_FILES (stdargs.h HAVE_STDARGS_H)
-CHECK_INCLUDE_FILES (string.h HAVE_STRING_H)
-CHECK_INCLUDE_FILES (strings.h HAVE_STRINGS_H)
-CHECK_INCLUDE_FILES (sys/stat.h HAVE_STAT_H)
-CHECK_INCLUDE_FILES (unistd.h HAVE_UNISTD_H)
-CHECK_INCLUDE_FILES (varargs.h HAVE_VARARGS_H)
-CHECK_INCLUDE_FILES (windows.h HAVE_WINDOWS_H)
-
-#Check for the existence of various function calls
-INCLUDE( CheckFunctionExists )
-CHECK_FUNCTION_EXISTS(_close HAVE__CLOSE_F)
-CHECK_FUNCTION_EXISTS(fcntl HAVE_FCNTL_F)
-CHECK_FUNCTION_EXISTS(_fdopen HAVE__FDOPEN_F)
-CHECK_FUNCTION_EXISTS(fopen_s HAVE_FOPEN_S_F)
-CHECK_FUNCTION_EXISTS(_fsopen HAVE__FSOPEN_F)
-CHECK_FUNCTION_EXISTS(_fileno HAVE__FILENO_F)
-CHECK_FUNCTION_EXISTS(fork HAVE_FORK_F)
-CHECK_FUNCTION_EXISTS(_fseeki64 HAVE__FSEEKI64_F)
-CHECK_FUNCTION_EXISTS(fseeko HAVE_FSEEKO_F)
-CHECK_FUNCTION_EXISTS(ftruncate HAVE_FTRUNCATE_F)
-CHECK_FUNCTION_EXISTS(_localtime64_s HAVE__LOCALTIME64_S_F)
-CHECK_FUNCTION_EXISTS(LockFile HAVE_LOCKFILE_F)
-CHECK_FUNCTION_EXISTS(locking HAVE_LOCKING_F)
-CHECK_FUNCTION_EXISTS(_locking HAVE__LOCKING_F)
-CHECK_FUNCTION_EXISTS(_open HAVE__OPEN_F)
-CHECK_FUNCTION_EXISTS(SetEndOfFile HAVE_SETENDOFFILE_F)
-
-CHECK_FUNCTION_EXISTS(vsnprintf HAVE_VSNPRINTF_F)
-CHECK_FUNCTION_EXISTS(_vsnprintf_s HAVE__VSNPRINTF_S_F)
-
-
-CHECK_FUNCTION_EXISTS(getopt HAVE_GETOPT_F)
-
-IF( WIN32 )
-
-# Use CHECK_SYMBOL_EXISTS for the Win32API instead of CHECK_FUNCTION_EXISTS
-# Can't detect inline functions in headers
-# Can't detect due to mismatch of calling conventions
-# Can't detect mangled names
-
-INCLUDE( CheckSymbolExists )
-CHECK_SYMBOL_EXISTS(CreateProcessW Windows.h HAVE_CREATEPROCESSW_F )
-CHECK_SYMBOL_EXISTS(vsprintf_s stdio.h HAVE_VSPRINTF_S_F )
-
-ENDIF ( WIN32 )
-
-# IF( NOT HAVE_SENTENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND BORLAND )
-# # ----fix me----
-# # cmake CHECK_FUNCTION_EXISTS - could not find Borland 5.5 SetEndOfFile
-# Set( HAVE_SETENDOFFILE_F "HAVE_SETENDOFFILE_H" )
-# ENDIF ( NOT HAVE_SENTENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND BORLAND )
-
-IF( NOT HAVE_SETENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND WIN32 )
- # ----fix me----
- # cmake CHECK_FUNCTION_EXISTS - could not find Borland 5.5, or Windows VS 32 bit SetEndOfFile
- Set( HAVE_SETENDOFFILE_F "HAVE_SETENDOFFILE_F" )
-ENDIF ( NOT HAVE_SETENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND WIN32 )
-
-IF( XB_NDX_SUPPORT OR XB_MDX_SUPPORT )
- Set( XB_INDEX_SUPPORT "1" )
-ENDIF( XB_NDX_SUPPORT OR XB_MDX_SUPPORT )
-
-
-# Set directories
-# PROJECT_PARENT_DIR is two nodes higher
-get_filename_component( PROJECT_PARENT_DIR ${PROJECT_BINARY_DIR} DIRECTORY )
-get_filename_component( PROJECT_PARENT_DIR ${PROJECT_PARENT_DIR} DIRECTORY )
-
-# MESSAGE( "PROJECT_PARENT_DIR = " ${PROJECT_PARENT_DIR} )
-# MESSAGE( "PROJECT_BINARY_DIR = " ${PROJECT_BINARY_DIR} )
-
-
-set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin/${XB_PLATFORM})
-set( LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib/${XB_PLATFORM})
-set( PROJECT_SOURCE_DIR ${PROJECT_PARENT_DIR}/src)
-set( PROJECT_DATA_DIR ${PROJECT_PARENT_DIR}/data/)
-set( PROJECT_LOG_DIR ${PROJECT_PARENT_DIR}/logs/)
-set( EXTRA_LIBS ${EXTRA_LIBS} ${XB_LIBNAME})
-
-
-
-# Undo bad decisions
-IF( XB_PLATFORM_32 AND XB_LARGEFILE_SUPPORT )
- MESSAGE( "--- Can't build 64 bit environment with a 32 bit compiler" )
- MESSAGE( "--- XB_LARGEFILE_SUPPORT set to OFF" )
- set( XB_LARGEFILE_SUPPORT OFF CACHE BOOL "Use 64 bit large file support?" FORCE )
-ENDIF ( XB_PLATFORM_32 AND XB_LARGEFILE_SUPPORT )
-
-IF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
- MESSAGE( "--- At lease one file format is required. Defaulting to Version 4" )
- set( XB_DBF4_SUPPORT ON CACHE BOOL "Compile DBase File Format Version 4 support" FORCE )
-ENDIF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
-
-IF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
- MESSAGE( "--- Link List support required for DBF V4 Memo files. Setting to ON" )
- set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
-ENDIF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
-
-IF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
- MESSAGE( "--- Link List support required for locking functions. Setting to ON" )
- set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
-ENDIF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
-
-IF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
- MESSAGE( "--- Expression required for indices. Setting to ON" )
- set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
-ENDIF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
-
-IF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
- MESSAGE( "--- Function support required for expressions. Setting to ON" )
- set( XB_FUNCTION_SUPPORT ON CACHE BOOL "Compile XBase Function support into library" FORCE )
-ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
-
-IF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
- MESSAGE( "--- Linklist support required for expressions. Setting to ON" )
- set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
-ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
-
-IF( XB_SQL_SUPPORT AND NOT XB_MEMO_SUPPORT )
- MESSAGE( "--- Memo support required for SQL. Setting to ON" )
- set( XB_MEMO_SUPPORT ON CACHE BOOL "Compile memo field support into library" FORCE )
-ENDIF( XB_SQL_SUPPORT AND NOT XB_MEMO_SUPPORT )
-
-IF( XB_SQL_SUPPORT AND NOT XB_DBF4_SUPPORT )
- MESSAGE( "--- DBF4 support required for SQL. Setting to ON" )
- set( XB_DBF4_SUPPORT ON CACHE BOOL "Compile DBase File Format Version 4 support" FORCE )
-ENDIF( XB_SQL_SUPPORT AND NOT XB_DBF4_SUPPORT )
-
-IF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
- MESSAGE( "--- Expression required for filters. Setting to ON" )
- set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
-ENDIF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
-
-IF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
- MESSAGE( "--- BLOCKREAD support required for SQL. Setting to ON" )
- set( XB_BLOCKREAD_SUPPORT ON CACHE BOOL "Compile Block Read support into library" FORCE )
-ENDIF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
-
-
-# Build configuration header file
-configure_file (
- "${PROJECT_SOURCE_DIR}/include/xbconfig.h.in"
- "${PROJECT_BINARY_DIR}/include/xbconfig.h"
-)
-
-# Microsoft Windows settings
-IF( WIN32 )
-# add_definitions( /D_CRT_SECURE_NO_WARNINGS)
- add_definitions( /EHsc )
-ENDIF( WIN32 )
-
-
-# set up include directories
-include_directories( "${PROJECT_BINARY_DIR}/include" )
-include_directories( "${PROJECT_SOURCE_DIR}/include" )
-
-#build the library
-IF ( BUILD_SHARED_LIBS )
- set( LIB_TYPE SHARED )
-ELSE( BUILD_SHARED_LIBS )
- set( LIB_TYPE STATIC )
-ENDIF( BUILD_SHARED_LIBS )
-MESSAGE( "--- Lib type " ${LIB_TYPE} )
-
-
-
-set (SOURCES ${PROJECT_SOURCE_DIR}/core/xbstring.cpp
- ${PROJECT_SOURCE_DIR}/core/xbssv.cpp
- ${PROJECT_SOURCE_DIR}/core/xbdate.cpp
- ${PROJECT_SOURCE_DIR}/core/xbtblmgr.cpp
- ${PROJECT_SOURCE_DIR}/core/xbxbase.cpp
- ${PROJECT_SOURCE_DIR}/core/xbfile.cpp
- ${PROJECT_SOURCE_DIR}/core/xbdbf.cpp
- ${PROJECT_SOURCE_DIR}/core/xbfields.cpp
- ${PROJECT_SOURCE_DIR}/core/xblog.cpp)
-
-IF( XB_MEMO_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo.cpp )
-ENDIF( XB_MEMO_SUPPORT )
-
-IF( XB_DBF3_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbdbf3.cpp )
- IF( XB_MEMO_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo3.cpp )
- ENDIF( XB_MEMO_SUPPORT )
-ENDIF( XB_DBF3_SUPPORT )
-
-IF( XB_DBF4_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbdbf4.cpp )
- IF( XB_MEMO_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo4.cpp )
- ENDIF( XB_MEMO_SUPPORT )
-ENDIF( XB_DBF4_SUPPORT )
-
-IF( XB_FUNCTION_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbfuncs.cpp )
-ENDIF( XB_FUNCTION_SUPPORT )
-
-IF( XB_EXPRESSION_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbexpnode.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbexp.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbuda.cpp )
-ENDIF( XB_EXPRESSION_SUPPORT )
-
-IF( XB_INDEX_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbbcd.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixbase.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbtag.cpp )
-ENDIF( XB_INDEX_SUPPORT )
-
-IF( XB_NDX_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixndx.cpp )
-ENDIF( XB_NDX_SUPPORT )
-
-
-IF( XB_MDX_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixmdx.cpp )
-ENDIF( XB_MDX_SUPPORT )
-
-IF( XB_SQL_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbalttbl.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrix.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrtbl.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdelete.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdrpix.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdrptbl.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbinsert.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbset.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbsql.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbstmt.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbselect.cpp )
-ENDIF( XB_SQL_SUPPORT )
-
-
-IF( XB_FILTER_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbfilter.cpp )
-ENDIF( XB_FILTER_SUPPORT )
-
-IF( XB_BLOCKREAD_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbblockread.cpp )
-ENDIF( XB_BLOCKREAD_SUPPORT )
-
-
-include( GenerateExportHeader )
-#add_library( xbase ${LIB_TYPE} ${SOURCES} )
-add_library( ${XB_LIBNAME} ${LIB_TYPE} ${SOURCES} )
-#add_library( ${CMAKE_PROJECT_NAME} ${LIB_TYPE} ${SOURCES} )
-
-
-IF( WIN32 )
-MESSAGE( "--- Generating Windows Library Headers" )
-
-#GENERATE_EXPORT_HEADER( xbase
-# BASE_NAME xbase
-
-GENERATE_EXPORT_HEADER( ${XB_LIBNAME}
- BASE_NAME ${XB_LIBNAME}
- EXPORT_MACRO_NAME xbase_EXPORT
- EXPORT_FILE_NAME xbase_Export.h
- STATIC_DEFINE xbase_BUILT_AS_STATIC
-)
-ENDIF( WIN32 )
-
-
-#build test programs
-enable_testing()
-
-add_executable( xb_test_string ${PROJECT_SOURCE_DIR}/tests/xb_test_string.cpp )
-target_link_libraries( xb_test_string ${EXTRA_LIBS})
-add_test( NAME xbString COMMAND xb_test_string QUIET )
-
-add_executable( xb_test_date ${PROJECT_SOURCE_DIR}/tests/xb_test_date.cpp )
-target_link_libraries( xb_test_date ${EXTRA_LIBS})
-add_test( NAME xbDate COMMAND xb_test_date QUIET )
-
-add_executable( xb_test_tblmgr ${PROJECT_SOURCE_DIR}/tests/xb_test_tblmgr.cpp )
-target_link_libraries( xb_test_tblmgr ${EXTRA_LIBS})
-add_test( NAME xbTblMgr COMMAND xb_test_tblmgr QUIET )
-
-add_executable( xb_test_xbase ${PROJECT_SOURCE_DIR}/tests/xb_test_xbase.cpp )
-target_link_libraries( xb_test_xbase ${EXTRA_LIBS})
-add_test( NAME xbXBase COMMAND xb_test_xbase QUIET )
-
-add_executable( xb_test_file ${PROJECT_SOURCE_DIR}/tests/xb_test_file.cpp )
-target_link_libraries( xb_test_file ${EXTRA_LIBS})
-add_test( NAME xbFile COMMAND xb_test_file QUIET )
-
-add_executable( xb_test_log ${PROJECT_SOURCE_DIR}/tests/xb_test_log.cpp )
-target_link_libraries( xb_test_log ${EXTRA_LIBS})
-add_test( NAME xbLog COMMAND xb_test_log QUIET )
-
-IF( XB_LINKLIST_SUPPORT )
-add_executable( xb_test_linklist ${PROJECT_SOURCE_DIR}/tests/xb_test_linklist.cpp )
-target_link_libraries( xb_test_linklist ${EXTRA_LIBS})
-add_test( NAME xbLinkList COMMAND xb_test_linklist QUIET )
-ENDIF( XB_LINKLIST_SUPPORT )
-
-IF( XB_DBF3_SUPPORT )
-add_executable( xb_test_dbf_v3_nomemos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v3_nomemos.cpp )
-target_link_libraries( xb_test_dbf_v3_nomemos ${EXTRA_LIBS})
-add_test( NAME xbDbfV3NoMemos COMMAND xb_test_dbf_v3_nomemos QUIET )
-
-IF( XB_MEMO_SUPPORT )
-add_executable( xb_test_dbf_v3_memos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v3_memos.cpp )
-target_link_libraries( xb_test_dbf_v3_memos ${EXTRA_LIBS})
-add_test( NAME xbDbfV3Memos COMMAND xb_test_dbf_v3_memos QUIET )
-
-ENDIF( XB_MEMO_SUPPORT )
-ENDIF( XB_DBF3_SUPPORT )
-
-IF( XB_DBF4_SUPPORT )
-add_executable( xb_test_dbf_v4_nomemos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v4_nomemos.cpp )
-target_link_libraries( xb_test_dbf_v4_nomemos ${EXTRA_LIBS})
-add_test( NAME xbDbfV4NoMemos COMMAND xb_test_dbf_v4_nomemos QUIET )
-
-IF( XB_MEMO_SUPPORT )
-add_executable( xb_test_dbf_v4_memos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v4_memos.cpp )
-target_link_libraries( xb_test_dbf_v4_memos ${EXTRA_LIBS})
-add_test( NAME xbDbfV4Memos COMMAND xb_test_dbf_v4_memos QUIET )
-
-ENDIF( XB_MEMO_SUPPORT )
-ENDIF( XB_DBF4_SUPPORT )
-
-IF( XB_FUNCTION_SUPPORT )
-add_executable( xb_test_funcs ${PROJECT_SOURCE_DIR}/tests/xb_test_funcs.cpp )
-target_link_libraries( xb_test_funcs ${EXTRA_LIBS})
-add_test( NAME xbFunctions COMMAND xb_test_funcs QUIET )
-ENDIF( XB_FUNCTION_SUPPORT )
-
-IF( XB_NDX_SUPPORT )
-IF( XB_DBF3_SUPPORT )
-add_executable( xb_test_ndx ${PROJECT_SOURCE_DIR}/tests/xb_test_ndx.cpp )
-target_link_libraries( xb_test_ndx ${EXTRA_LIBS})
-add_test( NAME xbIxNdx COMMAND xb_test_ndx QUIET )
-ENDIF( XB_DBF3_SUPPORT )
-ENDIF( XB_NDX_SUPPORT )
-
-IF( XB_MDX_SUPPORT )
-IF( XB_DBF4_SUPPORT )
-add_executable( xb_test_mdx ${PROJECT_SOURCE_DIR}/tests/xb_test_mdx.cpp )
-target_link_libraries( xb_test_mdx ${EXTRA_LIBS})
-add_test( NAME xbIxMdx COMMAND xb_test_mdx QUIET )
-ENDIF( XB_DBF4_SUPPORT )
-ENDIF( XB_MDX_SUPPORT )
-
-IF( XB_INDEX_SUPPORT )
-add_executable( xb_test_bcd ${PROJECT_SOURCE_DIR}/tests/xb_test_bcd.cpp )
-target_link_libraries( xb_test_bcd ${EXTRA_LIBS})
-add_test( NAME xbBcd COMMAND xb_test_bcd QUIET )
-ENDIF( XB_INDEX_SUPPORT )
-
-
-IF( XB_EXPRESSION_SUPPORT )
-
-add_executable( xb_test_expnode ${PROJECT_SOURCE_DIR}/tests/xb_test_expnode.cpp )
-target_link_libraries( xb_test_expnode ${EXTRA_LIBS})
-add_test( NAME xbExpNode COMMAND xb_test_expnode QUIET )
-
-
-add_executable( xb_test_expression ${PROJECT_SOURCE_DIR}/tests/xb_test_expression.cpp )
-target_link_libraries( xb_test_expression ${EXTRA_LIBS})
-add_test( NAME xbExpressions COMMAND xb_test_expression QUIET )
-
-add_executable( xb_test_uda ${PROJECT_SOURCE_DIR}/tests/xb_test_uda.cpp )
-target_link_libraries( xb_test_uda ${EXTRA_LIBS})
-add_test( NAME xbUda COMMAND xb_test_uda QUIET )
-
-ENDIF( XB_EXPRESSION_SUPPORT )
-
-IF( XB_SQL_SUPPORT )
-add_executable( xb_test_sql ${PROJECT_SOURCE_DIR}/tests/xb_test_sql.cpp )
-target_link_libraries( xb_test_sql ${EXTRA_LIBS})
-add_test( NAME xbSql COMMAND xb_test_sql QUIET )
-ENDIF( XB_SQL_SUPPORT )
-
-IF( XB_FILTER_SUPPORT )
-add_executable( xb_test_filter ${PROJECT_SOURCE_DIR}/tests/xb_test_filter.cpp )
-target_link_libraries( xb_test_filter ${EXTRA_LIBS})
-add_test( NAME xbFilter COMMAND xb_test_filter QUIET )
-ENDIF( XB_FILTER_SUPPORT )
-
-IF( XB_BLOCKREAD_SUPPORT )
-add_executable( xb_test_blockread ${PROJECT_SOURCE_DIR}/tests/xb_test_blockread.cpp )
-target_link_libraries( xb_test_blockread ${EXTRA_LIBS})
-add_test( NAME xbBlockRead COMMAND xb_test_blockread QUIET )
-ENDIF( XB_BLOCKREAD_SUPPORT )
-
-
-IF( XB_LOCKING_SUPPORT )
-add_executable( xb_test_lock ${PROJECT_SOURCE_DIR}/tests/xb_test_lock.cpp )
-target_link_libraries( xb_test_lock ${EXTRA_LIBS})
-add_test( NAME xbLock COMMAND xb_test_lock QUIET )
-IF( HAVE_CREATEPROCESSW_F )
-add_executable( xb_test_lock2 ${PROJECT_SOURCE_DIR}/tests/xb_test_lock2.cpp )
-target_link_libraries( xb_test_lock2 ${EXTRA_LIBS})
-ENDIF( HAVE_CREATEPROCESSW_F )
-ENDIF( XB_LOCKING_SUPPORT )
-
-#build example programs
-IF( XB_EXAMPLES_SUPPORT )
- add_executable( xb_ex_string ${PROJECT_SOURCE_DIR}/examples/xb_ex_string.cpp )
- target_link_libraries( xb_ex_string ${EXTRA_LIBS})
-
- add_executable( xb_ex_date ${PROJECT_SOURCE_DIR}/examples/xb_ex_date.cpp )
- target_link_libraries( xb_ex_date ${EXTRA_LIBS})
-
- IF( XB_DBF3_SUPPORT )
- add_executable( xb_ex_v3_create_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v3_create_dbf.cpp )
- target_link_libraries( xb_ex_v3_create_dbf ${EXTRA_LIBS})
-
- add_executable( xb_ex_v3_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v3_upd_dbf.cpp )
- target_link_libraries( xb_ex_v3_upd_dbf ${EXTRA_LIBS})
- ENDIF( XB_DBF3_SUPPORT )
-
- IF( XB_DBF4_SUPPORT )
- add_executable( xb_ex_v4_create_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_create_dbf.cpp )
- target_link_libraries( xb_ex_v4_create_dbf ${EXTRA_LIBS})
- ENDIF( XB_DBF4_SUPPORT )
-
- IF( XB_EXPRESSION_SUPPORT )
- add_executable( xb_ex_expression ${PROJECT_SOURCE_DIR}/examples/xb_ex_expression.cpp )
- target_link_libraries( xb_ex_expression ${EXTRA_LIBS})
- ENDIF( XB_EXPRESSION_SUPPORT )
-
- add_executable( xb_ex_v4_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_upd_dbf.cpp )
- target_link_libraries( xb_ex_v4_upd_dbf ${EXTRA_LIBS})
-
- add_executable( xb_ex_ssv ${PROJECT_SOURCE_DIR}/examples/xb_ex_ssv.cpp )
- target_link_libraries( xb_ex_ssv ${EXTRA_LIBS})
-
-ENDIF( XB_EXAMPLES_SUPPORT )
-
-#build utility programs
-IF( XB_UTILS_SUPPORT )
-
- add_executable( xb_cfg_check ${PROJECT_SOURCE_DIR}/utils/xb_cfg_check.cpp )
- target_link_libraries( xb_cfg_check ${EXTRA_LIBS})
-
- add_executable( xb_copydbf ${PROJECT_SOURCE_DIR}/utils/xb_copydbf.cpp )
- target_link_libraries( xb_copydbf ${EXTRA_LIBS})
-
- add_executable( xb_dbfutil ${PROJECT_SOURCE_DIR}/utils/xb_dbfutil.cpp )
- target_link_libraries( xb_dbfutil ${EXTRA_LIBS})
-
- add_executable( xb_deletall ${PROJECT_SOURCE_DIR}/utils/xb_deletall.cpp )
- target_link_libraries( xb_deletall ${EXTRA_LIBS})
-
- add_executable( xb_dumpdbt ${PROJECT_SOURCE_DIR}/utils/xb_dumpdbt.cpp )
- target_link_libraries( xb_dumpdbt ${EXTRA_LIBS})
-
- add_executable( xb_dumprecs ${PROJECT_SOURCE_DIR}/utils/xb_dumprecs.cpp )
- target_link_libraries( xb_dumprecs ${EXTRA_LIBS})
-
- add_executable( xb_tblinfo ${PROJECT_SOURCE_DIR}/utils/xb_tblinfo.cpp )
- target_link_libraries( xb_tblinfo ${EXTRA_LIBS})
-
- IF( XB_SQL_SUPPORT )
- add_executable( xb_execsql ${PROJECT_SOURCE_DIR}/utils/xb_execsql.cpp )
- target_link_libraries( xb_execsql ${EXTRA_LIBS})
- ENDIF( XB_SQL_SUPPORT )
-
- add_executable( xb_pack ${PROJECT_SOURCE_DIR}/utils/xb_pack.cpp )
- target_link_libraries( xb_pack ${EXTRA_LIBS})
-
- add_executable( xb_undelall ${PROJECT_SOURCE_DIR}/utils/xb_undelall.cpp )
- target_link_libraries( xb_undelall ${EXTRA_LIBS})
-
- install (TARGETS xb_cfg_check DESTINATION bin)
- install (TARGETS xb_copydbf DESTINATION bin)
- install (TARGETS xb_dbfutil DESTINATION bin)
- install (TARGETS xb_deletall DESTINATION bin)
- install (TARGETS xb_dumpdbt DESTINATION bin)
- install (TARGETS xb_dumprecs DESTINATION bin)
- install (TARGETS xb_pack DESTINATION bin)
- install (TARGETS xb_undelall DESTINATION bin)
- IF( XB_SQL_SUPPORT )
- install (TARGETS xb_execsql DESTINATION bin)
- ENDIF( XB_SQL_SUPPORT )
-
-
-
-ENDIF( XB_UTILS_SUPPORT )
-
-install (FILES include/xbconfig.h
- ${PROJECT_SOURCE_DIR}/include/xbase.h
- ${PROJECT_SOURCE_DIR}/include/xbbcd.h
- ${PROJECT_SOURCE_DIR}/include/xbdate.h
- ${PROJECT_SOURCE_DIR}/include/xbdbf.h
- ${PROJECT_SOURCE_DIR}/include/xbexp.h
- ${PROJECT_SOURCE_DIR}/include/xbexpnode.h
- ${PROJECT_SOURCE_DIR}/include/xbfile.h
- ${PROJECT_SOURCE_DIR}/include/xbindex.h
- ${PROJECT_SOURCE_DIR}/include/xblnklst.h
- ${PROJECT_SOURCE_DIR}/include/xblnklstord.h
- ${PROJECT_SOURCE_DIR}/include/xblnknod.h
- ${PROJECT_SOURCE_DIR}/include/xblog.h
- ${PROJECT_SOURCE_DIR}/include/xbmemo.h
- ${PROJECT_SOURCE_DIR}/include/xbretcod.h
- ${PROJECT_SOURCE_DIR}/include/xbsql.h
- ${PROJECT_SOURCE_DIR}/include/xbssv.h
- ${PROJECT_SOURCE_DIR}/include/xbstring.h
- ${PROJECT_SOURCE_DIR}/include/xbtblmgr.h
- ${PROJECT_SOURCE_DIR}/include/xbtypes.h
- ${PROJECT_SOURCE_DIR}/include/xbxbase.h
- ${PROJECT_SOURCE_DIR}/include/xbuda.h
- ${PROJECT_SOURCE_DIR}/include/xbtag.h
- ${PROJECT_SOURCE_DIR}/include/xbfilter.h
- ${PROJECT_SOURCE_DIR}/include/xbblkread.h
- ${PROJECT_SOURCE_DIR}/include/xbsql.h
-
- DESTINATION include/${CMAKE_PROJECT_NAME})
-
-IF( NOT WIN32 )
-install (FILES ${PROJECT_PARENT_DIR}/docs/man/xb_cfg_chk.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_copydbf.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_dbfutil.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_deletall.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_dumpdbt.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_dumprecs.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_pack.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_tblinfo.1.gz
- ${PROJECT_PARENT_DIR}/docs/man/xb_undelall.1.gz
-
- DESTINATION man/man1)
-
-ENDIF( NOT WIN32 )
-
-
-SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.1.0 SOVERSION 0 )
-
-IF( EXISTS /usr/local/lib64 )
-install (TARGETS ${XB_LIBNAME} DESTINATION lib64/${CMAKE_PROJECT_NAME})
-ELSE( EXISTS /usr/local/lib64 )
-install (TARGETS ${XB_LIBNAME} DESTINATION lib/${CMAKE_PROJECT_NAME})
-ENDIF( EXISTS /usr/local/lib64 )
-
-
diff --git a/docs/doxygen/html/annotated.html b/docs/doxygen/html/annotated.html
deleted file mode 100644
index 5124dd1..0000000
--- a/docs/doxygen/html/annotated.html
+++ /dev/null
@@ -1,89 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: Data Structures</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-</div><!-- top -->
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div class="header">
- <div class="headertitle"><div class="title">Data Structures</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock">Here are the data structures with brief descriptions:</div><div class="directory">
-<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory">
-<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><a class="el" href="namespacexb.html" target="_self">xb</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbDate.html" target="_self">xbDate</a></td><td class="desc">XbDate class </td></tr>
-<tr id="row_0_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbDbf.html" target="_self">xbDbf</a></td><td class="desc">Base class for handling dbf files/tables </td></tr>
-<tr id="row_0_2_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbFile.html" target="_self">xbFile</a></td><td class="desc">Class for handling low level file I/O </td></tr>
-<tr id="row_0_3_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structxb_1_1xbSchema.html" target="_self">xbSchema</a></td><td class="desc">Schema used for defining tables with CreateTable methods </td></tr>
-<tr id="row_0_4_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbSsv.html" target="_self">xbSsv</a></td><td class="desc">Class for handling shared system variables </td></tr>
-<tr id="row_0_5_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbString.html" target="_self">xbString</a></td><td class="desc">Class for handling string data </td></tr>
-<tr id="row_0_6_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structxb_1_1xbTblList.html" target="_self">xbTblList</a></td><td class="desc"></td></tr>
-<tr id="row_0_7_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbTblMgr.html" target="_self">xbTblMgr</a></td><td class="desc"></td></tr>
-<tr id="row_0_8_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbXBase.html" target="_self">xbXBase</a></td><td class="desc">XbXbase class </td></tr>
-</table>
-</div><!-- directory -->
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/classes.html b/docs/doxygen/html/classes.html
deleted file mode 100644
index 4c2c9d8..0000000
--- a/docs/doxygen/html/classes.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: Data Structure Index</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-</div><!-- top -->
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div class="header">
- <div class="headertitle"><div class="title">Data Structure Index</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="qindex"><a class="qindex" href="#letter_X">X</a></div>
-<div class="classindex">
-<dl class="classindex even">
-<dt class="alphachar"><a id="letter_X" name="letter_X">X</a></dt>
-<dd><a class="el" href="classxb_1_1xbDate.html">xbDate</a> (<a class="el" href="namespacexb.html">xb</a>)</dd><dd><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> (<a class="el" href="namespacexb.html">xb</a>)</dd><dd><a class="el" href="classxb_1_1xbFile.html">xbFile</a> (<a class="el" href="namespacexb.html">xb</a>)</dd><dd><a class="el" href="structxb_1_1xbSchema.html">xbSchema</a> (<a class="el" href="namespacexb.html">xb</a>)</dd><dd><a class="el" href="classxb_1_1xbSsv.html">xbSsv</a> (<a class="el" href="namespacexb.html">xb</a>)</dd><dd><a class="el" href="classxb_1_1xbString.html">xbString</a> (<a class="el" href="namespacexb.html">xb</a>)</dd><dd><a class="el" href="structxb_1_1xbTblList.html">xbTblList</a> (<a class="el" href="namespacexb.html">xb</a>)</dd><dd><a class="el" href="classxb_1_1xbTblMgr.html">xbTblMgr</a> (<a class="el" href="namespacexb.html">xb</a>)</dd><dd><a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> (<a class="el" href="namespacexb.html">xb</a>)</dd></dl>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/classxb_1_1xbDate.html b/docs/doxygen/html/classxb_1_1xbDate.html
deleted file mode 100644
index 67f85fc..0000000
--- a/docs/doxygen/html/classxb_1_1xbDate.html
+++ /dev/null
@@ -1,1914 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: xb::xbDate Class Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="namespacexb.html">xb</a></li><li class="navelem"><a class="el" href="classxb_1_1xbDate.html">xbDate</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> &#124;
-<a href="#pub-static-attribs">Static Public Attributes</a> &#124;
-<a href="#pro-methods">Protected Member Functions</a> &#124;
-<a href="#pro-static-attribs">Static Protected Attributes</a> </div>
- <div class="headertitle"><div class="title">xb::xbDate Class Reference</div></div>
-</div><!--header-->
-<div class="contents">
-
-<p><a class="el" href="classxb_1_1xbDate.html" title="xbDate class.">xbDate</a> class.
- <a href="classxb_1_1xbDate.html#details">More...</a></p>
-
-<p><code>#include &lt;<a class="el" href="xbdate_8h_source.html">xbdate.h</a>&gt;</code></p>
-<div class="dynheader">
-Inheritance diagram for xb::xbDate:</div>
-<div class="dyncontent">
- <div class="center">
- <img src="classxb_1_1xbDate.png" usemap="#xb::xbDate_map" alt=""/>
- <map id="xb::xbDate_map" name="xb::xbDate_map">
-<area href="classxb_1_1xbSsv.html" title="Class for handling shared system variables." alt="xb::xbSsv" shape="rect" coords="0,0,70,24"/>
- </map>
-</div></div>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:ab3150e7db0ab5db10a07d748b55465eb"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#ab3150e7db0ab5db10a07d748b55465eb">xbDate</a> ()</td></tr>
-<tr class="memdesc:ab3150e7db0ab5db10a07d748b55465eb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor. <a href="classxb_1_1xbDate.html#ab3150e7db0ab5db10a07d748b55465eb">More...</a><br /></td></tr>
-<tr class="separator:ab3150e7db0ab5db10a07d748b55465eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac8a4d9330221a3daee21b3c28c1d9719"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#ac8a4d9330221a3daee21b3c28c1d9719">xbDate</a> (const char *Date8)</td></tr>
-<tr class="memdesc:ac8a4d9330221a3daee21b3c28c1d9719"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor. <a href="classxb_1_1xbDate.html#ac8a4d9330221a3daee21b3c28c1d9719">More...</a><br /></td></tr>
-<tr class="separator:ac8a4d9330221a3daee21b3c28c1d9719"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:acf4546f5681735ede18210f60bab68d4"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#acf4546f5681735ede18210f60bab68d4">xbDate</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;Date8)</td></tr>
-<tr class="memdesc:acf4546f5681735ede18210f60bab68d4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor. <a href="classxb_1_1xbDate.html#acf4546f5681735ede18210f60bab68d4">More...</a><br /></td></tr>
-<tr class="separator:acf4546f5681735ede18210f60bab68d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7ab727a7ec184a086ad36ef83b948170"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a7ab727a7ec184a086ad36ef83b948170">xbDate</a> (xbInt32 lJulDate)</td></tr>
-<tr class="memdesc:a7ab727a7ec184a086ad36ef83b948170"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor. <a href="classxb_1_1xbDate.html#a7ab727a7ec184a086ad36ef83b948170">More...</a><br /></td></tr>
-<tr class="separator:a7ab727a7ec184a086ad36ef83b948170"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a05c9680c6eb9fe07ecf13a189b596c37"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a05c9680c6eb9fe07ecf13a189b596c37">~xbDate</a> ()</td></tr>
-<tr class="memdesc:a05c9680c6eb9fe07ecf13a189b596c37"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destructor. <a href="classxb_1_1xbDate.html#a05c9680c6eb9fe07ecf13a189b596c37">More...</a><br /></td></tr>
-<tr class="separator:a05c9680c6eb9fe07ecf13a189b596c37"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2e33ad9415c32e820e08fd8084198690"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a2e33ad9415c32e820e08fd8084198690">operator=</a> (const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;d)</td></tr>
-<tr class="memdesc:a2e33ad9415c32e820e08fd8084198690"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set operator=. <a href="classxb_1_1xbDate.html#a2e33ad9415c32e820e08fd8084198690">More...</a><br /></td></tr>
-<tr class="separator:a2e33ad9415c32e820e08fd8084198690"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a947ba156d04fe063aaa4c9964ae5d163"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a947ba156d04fe063aaa4c9964ae5d163">operator+=</a> (xbInt32 i)</td></tr>
-<tr class="memdesc:a947ba156d04fe063aaa4c9964ae5d163"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator += <a href="classxb_1_1xbDate.html#a947ba156d04fe063aaa4c9964ae5d163">More...</a><br /></td></tr>
-<tr class="separator:a947ba156d04fe063aaa4c9964ae5d163"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4a8f207d759540114373f5e9d6d375f7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a4a8f207d759540114373f5e9d6d375f7">operator-=</a> (xbInt32 i)</td></tr>
-<tr class="memdesc:a4a8f207d759540114373f5e9d6d375f7"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator -= <a href="classxb_1_1xbDate.html#a4a8f207d759540114373f5e9d6d375f7">More...</a><br /></td></tr>
-<tr class="separator:a4a8f207d759540114373f5e9d6d375f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1c7d9e3718c43df18b21646072c8605e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a1c7d9e3718c43df18b21646072c8605e">operator++</a> (xbInt32 i)</td></tr>
-<tr class="memdesc:a1c7d9e3718c43df18b21646072c8605e"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator ++ <a href="classxb_1_1xbDate.html#a1c7d9e3718c43df18b21646072c8605e">More...</a><br /></td></tr>
-<tr class="separator:a1c7d9e3718c43df18b21646072c8605e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae2b33dfee60d324916d833b2098b5a6b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#ae2b33dfee60d324916d833b2098b5a6b">operator--</a> (xbInt32 i)</td></tr>
-<tr class="memdesc:ae2b33dfee60d324916d833b2098b5a6b"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator &ndash; <a href="classxb_1_1xbDate.html#ae2b33dfee60d324916d833b2098b5a6b">More...</a><br /></td></tr>
-<tr class="separator:ae2b33dfee60d324916d833b2098b5a6b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3f3a8802c96098c85aa8d0e19717a979"><td class="memItemLeft" align="right" valign="top">xbInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a3f3a8802c96098c85aa8d0e19717a979">operator-</a> (const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;) const</td></tr>
-<tr class="memdesc:a3f3a8802c96098c85aa8d0e19717a979"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator - <a href="classxb_1_1xbDate.html#a3f3a8802c96098c85aa8d0e19717a979">More...</a><br /></td></tr>
-<tr class="separator:a3f3a8802c96098c85aa8d0e19717a979"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a73ff5c037046ac0a0bb7d73f74e25cbb"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a73ff5c037046ac0a0bb7d73f74e25cbb">operator-</a> (xbInt32 i)</td></tr>
-<tr class="memdesc:a73ff5c037046ac0a0bb7d73f74e25cbb"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator - <a href="classxb_1_1xbDate.html#a73ff5c037046ac0a0bb7d73f74e25cbb">More...</a><br /></td></tr>
-<tr class="separator:a73ff5c037046ac0a0bb7d73f74e25cbb"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad09609bf78cf038886a4f9cd19423f9c"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#ad09609bf78cf038886a4f9cd19423f9c">operator+</a> (xbInt32 i)</td></tr>
-<tr class="memdesc:ad09609bf78cf038886a4f9cd19423f9c"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator + <a href="classxb_1_1xbDate.html#ad09609bf78cf038886a4f9cd19423f9c">More...</a><br /></td></tr>
-<tr class="separator:ad09609bf78cf038886a4f9cd19423f9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aaaf98c1a672066021895f0953b6e94d0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#aaaf98c1a672066021895f0953b6e94d0">operator==</a> (const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;) const</td></tr>
-<tr class="memdesc:aaaf98c1a672066021895f0953b6e94d0"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator == <a href="classxb_1_1xbDate.html#aaaf98c1a672066021895f0953b6e94d0">More...</a><br /></td></tr>
-<tr class="separator:aaaf98c1a672066021895f0953b6e94d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac3aaf8997fc0c36676085e7741f33a8a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#ac3aaf8997fc0c36676085e7741f33a8a">operator!=</a> (const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;) const</td></tr>
-<tr class="memdesc:ac3aaf8997fc0c36676085e7741f33a8a"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator != <a href="classxb_1_1xbDate.html#ac3aaf8997fc0c36676085e7741f33a8a">More...</a><br /></td></tr>
-<tr class="separator:ac3aaf8997fc0c36676085e7741f33a8a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a11f09d97ed527e7ef00ba6f17b9fb02c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a11f09d97ed527e7ef00ba6f17b9fb02c">operator&lt;</a> (const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;) const</td></tr>
-<tr class="memdesc:a11f09d97ed527e7ef00ba6f17b9fb02c"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator &lt; <a href="classxb_1_1xbDate.html#a11f09d97ed527e7ef00ba6f17b9fb02c">More...</a><br /></td></tr>
-<tr class="separator:a11f09d97ed527e7ef00ba6f17b9fb02c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a744031c4031d6ec4595d34acbd1c5860"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a744031c4031d6ec4595d34acbd1c5860">operator&gt;</a> (const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;) const</td></tr>
-<tr class="memdesc:a744031c4031d6ec4595d34acbd1c5860"><td class="mdescLeft">&#160;</td><td class="mdescRight">&gt; <a href="classxb_1_1xbDate.html#a744031c4031d6ec4595d34acbd1c5860">More...</a><br /></td></tr>
-<tr class="separator:a744031c4031d6ec4595d34acbd1c5860"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6d8fa4df4664f3fd8d4cc15e77f6d046"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a6d8fa4df4664f3fd8d4cc15e77f6d046">operator&lt;=</a> (const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;) const</td></tr>
-<tr class="memdesc:a6d8fa4df4664f3fd8d4cc15e77f6d046"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator &lt;= <a href="classxb_1_1xbDate.html#a6d8fa4df4664f3fd8d4cc15e77f6d046">More...</a><br /></td></tr>
-<tr class="separator:a6d8fa4df4664f3fd8d4cc15e77f6d046"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1d81959ea55440588068ea7f82617c99"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a1d81959ea55440588068ea7f82617c99">operator&gt;=</a> (const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;) const</td></tr>
-<tr class="memdesc:a1d81959ea55440588068ea7f82617c99"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator &gt;= <a href="classxb_1_1xbDate.html#a1d81959ea55440588068ea7f82617c99">More...</a><br /></td></tr>
-<tr class="separator:a1d81959ea55440588068ea7f82617c99"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9df58caa54105c489c314785c457e8cb"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a9df58caa54105c489c314785c457e8cb">CalcRollingCenturyForYear</a> (xbInt16 year) const</td></tr>
-<tr class="memdesc:a9df58caa54105c489c314785c457e8cb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculate century for a given year. <a href="classxb_1_1xbDate.html#a9df58caa54105c489c314785c457e8cb">More...</a><br /></td></tr>
-<tr class="separator:a9df58caa54105c489c314785c457e8cb"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a38b2c5285c69ed65e94ece6c22dafde0"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a38b2c5285c69ed65e94ece6c22dafde0">CenturyOf</a> () const</td></tr>
-<tr class="memdesc:a38b2c5285c69ed65e94ece6c22dafde0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get century for date. <a href="classxb_1_1xbDate.html#a38b2c5285c69ed65e94ece6c22dafde0">More...</a><br /></td></tr>
-<tr class="separator:a38b2c5285c69ed65e94ece6c22dafde0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9fc29730b66cddfbb58c69992a99cc7c"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a9fc29730b66cddfbb58c69992a99cc7c">CharDayOf</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sOutCharDay)</td></tr>
-<tr class="memdesc:a9fc29730b66cddfbb58c69992a99cc7c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the day of the week. <a href="classxb_1_1xbDate.html#a9fc29730b66cddfbb58c69992a99cc7c">More...</a><br /></td></tr>
-<tr class="separator:a9fc29730b66cddfbb58c69992a99cc7c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:afffc84f02bd421335ff8ebe9fb3db0ac"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#afffc84f02bd421335ff8ebe9fb3db0ac">CharMonthOf</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sOutCharMonth)</td></tr>
-<tr class="memdesc:afffc84f02bd421335ff8ebe9fb3db0ac"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the month from the date. <a href="classxb_1_1xbDate.html#afffc84f02bd421335ff8ebe9fb3db0ac">More...</a><br /></td></tr>
-<tr class="separator:afffc84f02bd421335ff8ebe9fb3db0ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a367f66ef0c03c1747c12a18784554ccb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a367f66ef0c03c1747c12a18784554ccb">DateIsValid</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDate8) const</td></tr>
-<tr class="memdesc:a367f66ef0c03c1747c12a18784554ccb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check a date for valid data. <a href="classxb_1_1xbDate.html#a367f66ef0c03c1747c12a18784554ccb">More...</a><br /></td></tr>
-<tr class="separator:a367f66ef0c03c1747c12a18784554ccb"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad6417a900ce64a46f8909c0c7a2ddea2"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#ad6417a900ce64a46f8909c0c7a2ddea2">DayOf</a> (xbInt16 iFormat) const</td></tr>
-<tr class="separator:ad6417a900ce64a46f8909c0c7a2ddea2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abb1eb4b0394e4a67aadab15779b1b8c5"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#abb1eb4b0394e4a67aadab15779b1b8c5">CTOD</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sCtodInDate)</td></tr>
-<tr class="memdesc:abb1eb4b0394e4a67aadab15779b1b8c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Format MM/DD/YY date. <a href="classxb_1_1xbDate.html#abb1eb4b0394e4a67aadab15779b1b8c5">More...</a><br /></td></tr>
-<tr class="separator:abb1eb4b0394e4a67aadab15779b1b8c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a01de44dc869f7db99f33046fc91f2c6a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a01de44dc869f7db99f33046fc91f2c6a">FormatDate</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFmtIn, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFmtOut)</td></tr>
-<tr class="separator:a01de44dc869f7db99f33046fc91f2c6a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab43a5d8d929767c0ffdd722972bb8cc0"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#ab43a5d8d929767c0ffdd722972bb8cc0">Str</a> () const</td></tr>
-<tr class="memdesc:ab43a5d8d929767c0ffdd722972bb8cc0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the date value. <a href="classxb_1_1xbDate.html#ab43a5d8d929767c0ffdd722972bb8cc0">More...</a><br /></td></tr>
-<tr class="separator:ab43a5d8d929767c0ffdd722972bb8cc0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af2bd33a72448e2c5ee00d8b711dc5d95"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#af2bd33a72448e2c5ee00d8b711dc5d95">IsLeapYear</a> (xbInt16 iYear) const</td></tr>
-<tr class="memdesc:af2bd33a72448e2c5ee00d8b711dc5d95"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determine if date is a leap year. <a href="classxb_1_1xbDate.html#af2bd33a72448e2c5ee00d8b711dc5d95">More...</a><br /></td></tr>
-<tr class="separator:af2bd33a72448e2c5ee00d8b711dc5d95"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5f8051c31b29244265e8f26ac3547b9b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a5f8051c31b29244265e8f26ac3547b9b">IsLeapYear</a> () const</td></tr>
-<tr class="memdesc:a5f8051c31b29244265e8f26ac3547b9b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determine if date is a leap year. <a href="classxb_1_1xbDate.html#a5f8051c31b29244265e8f26ac3547b9b">More...</a><br /></td></tr>
-<tr class="separator:a5f8051c31b29244265e8f26ac3547b9b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1ee3377d4ead9d31099eee539d9b13a7"><td class="memItemLeft" align="right" valign="top">xbInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a1ee3377d4ead9d31099eee539d9b13a7">JulianDays</a> () const</td></tr>
-<tr class="memdesc:a1ee3377d4ead9d31099eee539d9b13a7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculate julian days for a given date. <a href="classxb_1_1xbDate.html#a1ee3377d4ead9d31099eee539d9b13a7">More...</a><br /></td></tr>
-<tr class="separator:a1ee3377d4ead9d31099eee539d9b13a7"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9d28b2a46d8aaa284b92f44eeb96b2ff"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a9d28b2a46d8aaa284b92f44eeb96b2ff">JulToDate8</a> (xbInt32 lJulDate)</td></tr>
-<tr class="memdesc:a9d28b2a46d8aaa284b92f44eeb96b2ff"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert the number of julian days to gregorian date. <a href="classxb_1_1xbDate.html#a9d28b2a46d8aaa284b92f44eeb96b2ff">More...</a><br /></td></tr>
-<tr class="separator:a9d28b2a46d8aaa284b92f44eeb96b2ff"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a15847866bb7642aa42bc254e0cf2038a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a15847866bb7642aa42bc254e0cf2038a">LastDayOfMonth</a> ()</td></tr>
-<tr class="memdesc:a15847866bb7642aa42bc254e0cf2038a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the date to the last day of month for a given date. <a href="classxb_1_1xbDate.html#a15847866bb7642aa42bc254e0cf2038a">More...</a><br /></td></tr>
-<tr class="separator:a15847866bb7642aa42bc254e0cf2038a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a08bd84c67e1119d8c5c1748cd89d092e"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a08bd84c67e1119d8c5c1748cd89d092e">MonthOf</a> () const</td></tr>
-<tr class="memdesc:a08bd84c67e1119d8c5c1748cd89d092e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the month for the date. <a href="classxb_1_1xbDate.html#a08bd84c67e1119d8c5c1748cd89d092e">More...</a><br /></td></tr>
-<tr class="separator:a08bd84c67e1119d8c5c1748cd89d092e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4b0cde152b5de0f7d26608d1445110b6"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a4b0cde152b5de0f7d26608d1445110b6">Set</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;Date8)</td></tr>
-<tr class="memdesc:a4b0cde152b5de0f7d26608d1445110b6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the date. <a href="classxb_1_1xbDate.html#a4b0cde152b5de0f7d26608d1445110b6">More...</a><br /></td></tr>
-<tr class="separator:a4b0cde152b5de0f7d26608d1445110b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a40ba54a58d64cf56266f020f91584192"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a40ba54a58d64cf56266f020f91584192">Sysdate</a> ()</td></tr>
-<tr class="memdesc:a40ba54a58d64cf56266f020f91584192"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the date equal to the system date. <a href="classxb_1_1xbDate.html#a40ba54a58d64cf56266f020f91584192">More...</a><br /></td></tr>
-<tr class="separator:a40ba54a58d64cf56266f020f91584192"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a31057dfaa36389a16e40e3db82c46262"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a31057dfaa36389a16e40e3db82c46262">YearOf</a> () const</td></tr>
-<tr class="memdesc:a31057dfaa36389a16e40e3db82c46262"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the year of the date. <a href="classxb_1_1xbDate.html#a31057dfaa36389a16e40e3db82c46262">More...</a><br /></td></tr>
-<tr class="separator:a31057dfaa36389a16e40e3db82c46262"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a97dfa59ab9a8e9f17454da0faceb023d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a97dfa59ab9a8e9f17454da0faceb023d">DisplayError</a> (xbInt16 ErrorCode) const</td></tr>
-<tr class="memdesc:a97dfa59ab9a8e9f17454da0faceb023d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Display error message on console for a given error number. <a href="classxb_1_1xbSsv.html#a97dfa59ab9a8e9f17454da0faceb023d">More...</a><br /></td></tr>
-<tr class="separator:a97dfa59ab9a8e9f17454da0faceb023d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6fbb9c3a550ab0b3378f9586a57791d2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a6fbb9c3a550ab0b3378f9586a57791d2">GetDefaultDateFormat</a> () const</td></tr>
-<tr class="memdesc:a6fbb9c3a550ab0b3378f9586a57791d2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the default date format. <a href="classxb_1_1xbSsv.html#a6fbb9c3a550ab0b3378f9586a57791d2">More...</a><br /></td></tr>
-<tr class="separator:a6fbb9c3a550ab0b3378f9586a57791d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">GetDataDirectory</a> () const</td></tr>
-<tr class="memdesc:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current data directory. <a href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">More...</a><br /></td></tr>
-<tr class="separator:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a49cd162f066eef2b829ba7c9f6620243"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">GetEndianType</a> () const</td></tr>
-<tr class="memdesc:a49cd162f066eef2b829ba7c9f6620243"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the Endian type. <a href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">More...</a><br /></td></tr>
-<tr class="separator:a49cd162f066eef2b829ba7c9f6620243"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a56961d2a67b8e7470098626ac4dac7e4"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">GetErrorMessage</a> (xbInt16 ErrorCode) const</td></tr>
-<tr class="memdesc:a56961d2a67b8e7470098626ac4dac7e4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get an error message. <a href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">More...</a><br /></td></tr>
-<tr class="separator:a56961d2a67b8e7470098626ac4dac7e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">SetDataDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDataDirectory)</td></tr>
-<tr class="memdesc:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the data directory. <a href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">More...</a><br /></td></tr>
-<tr class="separator:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5f74db23f8902846d581935c7db73f9c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">SetDefaultDateFormat</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDefaultDateFormat)</td></tr>
-<tr class="memdesc:a5f74db23f8902846d581935c7db73f9c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the default date format. <a href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">More...</a><br /></td></tr>
-<tr class="separator:a5f74db23f8902846d581935c7db73f9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a62e4fd0a5888665c76bbbad962794e72"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72">BitSet</a> (unsigned char c, xbInt16 iBitNo) const</td></tr>
-<tr class="memdesc:a62e4fd0a5888665c76bbbad962794e72"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check a bit in a one byte field and see if it is set. <a href="classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72">More...</a><br /></td></tr>
-<tr class="separator:a62e4fd0a5888665c76bbbad962794e72"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a8551b15a3ce4fa2a40d698db01f4a9ae"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a8551b15a3ce4fa2a40d698db01f4a9ae">BitDump</a> (unsigned char c) const</td></tr>
-<tr class="separator:a8551b15a3ce4fa2a40d698db01f4a9ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aba1395b8e4c7f28c3614061de6e49190"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#aba1395b8e4c7f28c3614061de6e49190">BitDump</a> (char c) const</td></tr>
-<tr class="separator:aba1395b8e4c7f28c3614061de6e49190"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6982f973e81587b04916f4509746aaf5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a6982f973e81587b04916f4509746aaf5">GetDefaultAutoCommit</a> () const</td></tr>
-<tr class="memdesc:a6982f973e81587b04916f4509746aaf5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the default auto commit setting. <a href="classxb_1_1xbSsv.html#a6982f973e81587b04916f4509746aaf5">More...</a><br /></td></tr>
-<tr class="separator:a6982f973e81587b04916f4509746aaf5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">SetDefaultAutoCommit</a> (<a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bDefaultAutoCommit)</td></tr>
-<tr class="memdesc:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the default auto commit. <a href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">More...</a><br /></td></tr>
-<tr class="separator:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">GetHomeDir</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sHomeDirOut)</td></tr>
-<tr class="memdesc:abc9c06c95d71fbad8294e1ae8862cea9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get home directory. <a href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">More...</a><br /></td></tr>
-<tr class="separator:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4822315bded3969b59aeeb683c373051"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a4822315bded3969b59aeeb683c373051">GetLogDirectory</a> () const</td></tr>
-<tr class="separator:a4822315bded3969b59aeeb683c373051"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:afaef09435be73b3111f5edbd7091d861"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#afaef09435be73b3111f5edbd7091d861">GetLogFileName</a> () const</td></tr>
-<tr class="separator:afaef09435be73b3111f5edbd7091d861"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7b992ed97281bf25b5b66f5df686225e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a7b992ed97281bf25b5b66f5df686225e">SetLogDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLogDirectory)</td></tr>
-<tr class="separator:a7b992ed97281bf25b5b66f5df686225e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">GetMultiUser</a> () const</td></tr>
-<tr class="memdesc:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the multi user setting. <a href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">More...</a><br /></td></tr>
-<tr class="separator:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aba6e59512f7172dd55dcf92059e5928c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#aba6e59512f7172dd55dcf92059e5928c">SetMultiUser</a> (<a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bMultiUser)</td></tr>
-<tr class="memdesc:aba6e59512f7172dd55dcf92059e5928c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the multi user setting. <a href="classxb_1_1xbSsv.html#aba6e59512f7172dd55dcf92059e5928c">More...</a><br /></td></tr>
-<tr class="separator:aba6e59512f7172dd55dcf92059e5928c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-static-attribs" name="pub-static-attribs"></a>
-Static Public Attributes</h2></td></tr>
-<tr class="memitem:a6219f1b5e24ea12fe158cd5aea56988e"><td class="memItemLeft" align="right" valign="top">static const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a6219f1b5e24ea12fe158cd5aea56988e">ErrorCodeText</a> []</td></tr>
-<tr class="separator:a6219f1b5e24ea12fe158cd5aea56988e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-methods" name="pro-methods"></a>
-Protected Member Functions</h2></td></tr>
-<tr class="memitem:a904ec348fd029d4a76e72b8fde636108"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a904ec348fd029d4a76e72b8fde636108">SetEndianType</a> ()</td></tr>
-<tr class="memdesc:a904ec348fd029d4a76e72b8fde636108"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the endian type. <a href="classxb_1_1xbSsv.html#a904ec348fd029d4a76e72b8fde636108">More...</a><br /></td></tr>
-<tr class="separator:a904ec348fd029d4a76e72b8fde636108"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-static-attribs" name="pro-static-attribs"></a>
-Static Protected Attributes</h2></td></tr>
-<tr class="memitem:a5849e813f5e8e1cd180f0366637adbf3"><td class="memItemLeft" align="right" valign="top">static xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a5849e813f5e8e1cd180f0366637adbf3">iEndianType</a> = 0</td></tr>
-<tr class="separator:a5849e813f5e8e1cd180f0366637adbf3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9dec3164c3b264882df634915ecf21da"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classxb_1_1xbString.html">xbString</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a9dec3164c3b264882df634915ecf21da">sNullString</a> = &quot;&quot;</td></tr>
-<tr class="separator:a9dec3164c3b264882df634915ecf21da"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p ><a class="el" href="classxb_1_1xbDate.html" title="xbDate class.">xbDate</a> class. </p>
-<p >This <a class="el" href="classxb_1_1xbDate.html" title="xbDate class.">xbDate</a> class handles two type of date values:<br />
-</p>
-<p >1) Gregorian dates with a format of CCYYMMDD. This is how dates are stored in dbf files.<br />
- 2) Julian dates calculated as the number of days since 1901-01-01 + 1721425.<br />
-</p>
-<p >Leap Years: The routines in the class support both leap years (one every four years) and leap centuries (one every four hundred years.)</p>
-<p >A leap year is a year having 366 days, which can be evenly divisible by 4 and not by 100.<br />
- Leap centuries are years which are evenly divisible by 400.<br />
-</p>
-<p >From a programming perspective, Julian dates are useful for date arithmetic, determining the difference between two dates or calculating a future or past date.<br />
-</p>
-<p >To determine the difference between two dates, convert both dates to a Julian date and subtract one from the other.<br />
-</p>
-<p >To calculate a future or past date, convert the base date to a Julian date, add (or subtract) the number of days necessary to (from) it and convert the julian date back to a Gregorian date. </p>
-</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
-<a id="ab3150e7db0ab5db10a07d748b55465eb" name="ab3150e7db0ab5db10a07d748b55465eb"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab3150e7db0ab5db10a07d748b55465eb">&#9670;&nbsp;</a></span>xbDate() <span class="overload">[1/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xb::xbDate::xbDate </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Constructor. </p>
-
-</div>
-</div>
-<a id="ac8a4d9330221a3daee21b3c28c1d9719" name="ac8a4d9330221a3daee21b3c28c1d9719"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac8a4d9330221a3daee21b3c28c1d9719">&#9670;&nbsp;</a></span>xbDate() <span class="overload">[2/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xb::xbDate::xbDate </td>
- <td>(</td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>sDate8In</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Constructor. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sDate8In</td><td>- Input date. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="acf4546f5681735ede18210f60bab68d4" name="acf4546f5681735ede18210f60bab68d4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#acf4546f5681735ede18210f60bab68d4">&#9670;&nbsp;</a></span>xbDate() <span class="overload">[3/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xb::xbDate::xbDate </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sDate8In</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Constructor. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sDate8In</td><td>- Input date. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a7ab727a7ec184a086ad36ef83b948170" name="a7ab727a7ec184a086ad36ef83b948170"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a7ab727a7ec184a086ad36ef83b948170">&#9670;&nbsp;</a></span>xbDate() <span class="overload">[4/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xb::xbDate::xbDate </td>
- <td>(</td>
- <td class="paramtype">xbInt32&#160;</td>
- <td class="paramname"><em>lJulDate</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Constructor. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">lJulDate</td><td>- Input julian date. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a05c9680c6eb9fe07ecf13a189b596c37" name="a05c9680c6eb9fe07ecf13a189b596c37"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a05c9680c6eb9fe07ecf13a189b596c37">&#9670;&nbsp;</a></span>~xbDate()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xb::xbDate::~xbDate </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Destructor. </p>
-
-</div>
-</div>
-<h2 class="groupheader">Member Function Documentation</h2>
-<a id="aba1395b8e4c7f28c3614061de6e49190" name="aba1395b8e4c7f28c3614061de6e49190"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aba1395b8e4c7f28c3614061de6e49190">&#9670;&nbsp;</a></span>BitDump() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::BitDump </td>
- <td>(</td>
- <td class="paramtype">char&#160;</td>
- <td class="paramname"><em>c</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a8551b15a3ce4fa2a40d698db01f4a9ae" name="a8551b15a3ce4fa2a40d698db01f4a9ae"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a8551b15a3ce4fa2a40d698db01f4a9ae">&#9670;&nbsp;</a></span>BitDump() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::BitDump </td>
- <td>(</td>
- <td class="paramtype">unsigned char&#160;</td>
- <td class="paramname"><em>c</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a62e4fd0a5888665c76bbbad962794e72" name="a62e4fd0a5888665c76bbbad962794e72"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a62e4fd0a5888665c76bbbad962794e72">&#9670;&nbsp;</a></span>BitSet()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbSsv::BitSet </td>
- <td>(</td>
- <td class="paramtype">unsigned char&#160;</td>
- <td class="paramname"><em>c</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iBitNo</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Check a bit in a one byte field and see if it is set. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>One byte char field to examine. </td></tr>
- <tr><td class="paramname">iBitNo</td><td>which bit to examine. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue Bit is set<br />
- xbFalse Bit is not set </dd></dl>
-
-</div>
-</div>
-<a id="a9df58caa54105c489c314785c457e8cb" name="a9df58caa54105c489c314785c457e8cb"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a9df58caa54105c489c314785c457e8cb">&#9670;&nbsp;</a></span>CalcRollingCenturyForYear()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDate::CalcRollingCenturyForYear </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iCalcYear</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Calculate century for a given year. </p>
-<p >This routine calculates a century for a given year. It uses an 80/20 rolling date window to calculate the century.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iCalcYear</td><td>- Two digit year to calculate a century for. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Century calculated for the two digit year. </dd></dl>
-
-</div>
-</div>
-<a id="a38b2c5285c69ed65e94ece6c22dafde0" name="a38b2c5285c69ed65e94ece6c22dafde0"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a38b2c5285c69ed65e94ece6c22dafde0">&#9670;&nbsp;</a></span>CenturyOf()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDate::CenturyOf </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Get century for date. </p>
-<dl class="section return"><dt>Returns</dt><dd>This routine returns the century from the date. </dd></dl>
-
-</div>
-</div>
-<a id="a9fc29730b66cddfbb58c69992a99cc7c" name="a9fc29730b66cddfbb58c69992a99cc7c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a9fc29730b66cddfbb58c69992a99cc7c">&#9670;&nbsp;</a></span>CharDayOf()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDate::CharDayOf </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sOutCharDay</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Get the day of the week. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sOutCharDay</td><td>- Output character day of week (Sun-Sat). </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>XB_INVALID_DATE<br />
-XB_NO_ERROR </dd></dl>
-
-</div>
-</div>
-<a id="afffc84f02bd421335ff8ebe9fb3db0ac" name="afffc84f02bd421335ff8ebe9fb3db0ac"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#afffc84f02bd421335ff8ebe9fb3db0ac">&#9670;&nbsp;</a></span>CharMonthOf()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDate::CharMonthOf </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sOutCharMonth</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Get the month from the date. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sOutCharMonth</td><td>- Output character month. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>XB_INVALID_DATE<br />
-XB_NO_ERROR </dd></dl>
-
-</div>
-</div>
-<a id="abb1eb4b0394e4a67aadab15779b1b8c5" name="abb1eb4b0394e4a67aadab15779b1b8c5"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#abb1eb4b0394e4a67aadab15779b1b8c5">&#9670;&nbsp;</a></span>CTOD()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDate::CTOD </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sCtodInDate</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Format MM/DD/YY date. </p>
-<p >This routine takes an MM/DD/YY format date as input and populates a date class with the appropriate YYYYMMDD data.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sCtodInDate</td><td>- MM/DD/YY formatted date as input. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>XB_INVALID_OPTION<br />
-XB_NO_ERROR </dd></dl>
-
-</div>
-</div>
-<a id="a367f66ef0c03c1747c12a18784554ccb" name="a367f66ef0c03c1747c12a18784554ccb"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a367f66ef0c03c1747c12a18784554ccb">&#9670;&nbsp;</a></span>DateIsValid()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbDate::DateIsValid </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sDateIn</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Check a date for valid data. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sDateIn</td><td>- Date to check for valid formaat of CCYYMMDD. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue - Valid date.<br />
-xbFalse - Not a valid date. </dd></dl>
-
-</div>
-</div>
-<a id="ad6417a900ce64a46f8909c0c7a2ddea2" name="ad6417a900ce64a46f8909c0c7a2ddea2"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ad6417a900ce64a46f8909c0c7a2ddea2">&#9670;&nbsp;</a></span>DayOf()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDate::DayOf </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iFormat</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-<p >This routine returns the numeric day. </p><dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iFormat</td><td>XB_FMT_WEEK Number of day in WEEK 0-6 ( Sat - Fri )<br />
- XB_FMT_MONTH Number of day in MONTH 1-31<br />
- XB_FMT_YEAR Number of day in YEAR 1-366 </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>XB_INVALID_OPTION<br />
-XB_NO_ERROR </dd></dl>
-
-</div>
-</div>
-<a id="a97dfa59ab9a8e9f17454da0faceb023d" name="a97dfa59ab9a8e9f17454da0faceb023d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a97dfa59ab9a8e9f17454da0faceb023d">&#9670;&nbsp;</a></span>DisplayError()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::DisplayError </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iErrorCode</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Display error message on console for a given error number. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iErrorCode</td><td>Error number to reference </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a01de44dc869f7db99f33046fc91f2c6a" name="a01de44dc869f7db99f33046fc91f2c6a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a01de44dc869f7db99f33046fc91f2c6a">&#9670;&nbsp;</a></span>FormatDate()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDate::FormatDate </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFmtIn</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sOutFmtDate</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-<p >This routine will reformat a date based on the format specifiers entered in sFmtIn. If no input format is specified, the routine will use the system default date format.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFmtIn</td><td>- A format specifier with the following paramaters:<br />
- <pre class="fragment"> 1) YYDDD - A julian date format
- 2) YY or YYYY will print a 2 or 4 digit year
- 3) M,MM,MMM or MMMM
- M - one digit month if no leading zero
- MM - two digit month, contains leading zero
- MMM - Jan through Dec
- MMMM - January through December
- 4) D,DD,DDD or DDDD
- D - one digit dayif no leading zero
- DD - two digit day, contains leading zero
- DDD - Sun through Sat (or julian if YYDDD)
- DDDD - Sunday through Saturday
-</pre> </td></tr>
- <tr><td class="paramname">sOutFmtDate</td><td>- Reformatted output date. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>XB_NO_ERROR <br />
-<br />
- Format Examples:<br />
- MM/DD/YY<br />
- YYYY-MM-DD<br />
- DDDDDDDDDDD MMMMMMMMMMM DD,YYYY </dd></dl>
-
-</div>
-</div>
-<a id="a1d803a4bfc8ba0561267a0bf9e51f7d9" name="a1d803a4bfc8ba0561267a0bf9e51f7d9"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1d803a4bfc8ba0561267a0bf9e51f7d9">&#9670;&nbsp;</a></span>GetDataDirectory()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetDataDirectory </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the current data directory. </p>
-<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing the current data directory where the database files are stored. </dd></dl>
-
-</div>
-</div>
-<a id="a6982f973e81587b04916f4509746aaf5" name="a6982f973e81587b04916f4509746aaf5"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6982f973e81587b04916f4509746aaf5">&#9670;&nbsp;</a></span>GetDefaultAutoCommit()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbSsv::GetDefaultAutoCommit </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the default auto commit setting. </p>
-<p >When auto commit is enabled, the library will automatically post any updates when moving off an updated record or closing files. If auto commit is disabled, the application program will need to explicitly update the tables using using dbf-&gt;Put() and dbf-&gt;AppendRecord().</p>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue if auto commit is turned on<br />
- xbFalse is auto commit is turned off </dd></dl>
-
-</div>
-</div>
-<a id="a6fbb9c3a550ab0b3378f9586a57791d2" name="a6fbb9c3a550ab0b3378f9586a57791d2"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6fbb9c3a550ab0b3378f9586a57791d2">&#9670;&nbsp;</a></span>GetDefaultDateFormat()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetDefaultDateFormat </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the default date format. </p>
-<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing the default date format. </dd></dl>
-
-</div>
-</div>
-<a id="a49cd162f066eef2b829ba7c9f6620243" name="a49cd162f066eef2b829ba7c9f6620243"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a49cd162f066eef2b829ba7c9f6620243">&#9670;&nbsp;</a></span>GetEndianType()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbSsv::GetEndianType </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the Endian type. </p>
-<dl class="section return"><dt>Returns</dt><dd>B - Big endian<br />
- L - Little endian<br />
- </dd></dl>
-
-</div>
-</div>
-<a id="a56961d2a67b8e7470098626ac4dac7e4" name="a56961d2a67b8e7470098626ac4dac7e4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a56961d2a67b8e7470098626ac4dac7e4">&#9670;&nbsp;</a></span>GetErrorMessage()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">const char * xb::xbSsv::GetErrorMessage </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iErrorCode</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get an error message. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iErrorCode</td><td>ErrorCode is the error number of description to be returned. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Returns a pointer to a string containing a text description for the error code. </dd></dl>
-
-</div>
-</div>
-<a id="abc9c06c95d71fbad8294e1ae8862cea9" name="abc9c06c95d71fbad8294e1ae8862cea9"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#abc9c06c95d71fbad8294e1ae8862cea9">&#9670;&nbsp;</a></span>GetHomeDir()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::GetHomeDir </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sHomeDirOut</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get home directory. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sHomeDirOut</td><td>- Output home directory for current user. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
-
-</div>
-</div>
-<a id="a4822315bded3969b59aeeb683c373051" name="a4822315bded3969b59aeeb683c373051"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4822315bded3969b59aeeb683c373051">&#9670;&nbsp;</a></span>GetLogDirectory()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetLogDirectory </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="afaef09435be73b3111f5edbd7091d861" name="afaef09435be73b3111f5edbd7091d861"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#afaef09435be73b3111f5edbd7091d861">&#9670;&nbsp;</a></span>GetLogFileName()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetLogFileName </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="abd58031c5f1c3766c24d47a82e6fd9c5" name="abd58031c5f1c3766c24d47a82e6fd9c5"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#abd58031c5f1c3766c24d47a82e6fd9c5">&#9670;&nbsp;</a></span>GetMultiUser()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbSsv::GetMultiUser </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the multi user setting. </p>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue - Multi user mode turned on.<br />
- xbFalse - Multi user mode turned off.<br />
- </dd></dl>
-
-</div>
-</div>
-<a id="a5f8051c31b29244265e8f26ac3547b9b" name="a5f8051c31b29244265e8f26ac3547b9b"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5f8051c31b29244265e8f26ac3547b9b">&#9670;&nbsp;</a></span>IsLeapYear() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbDate::IsLeapYear </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Determine if date is a leap year. </p>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue - Is leapyear.<br />
- xbFalse - Not a leap year. </dd></dl>
-
-</div>
-</div>
-<a id="af2bd33a72448e2c5ee00d8b711dc5d95" name="af2bd33a72448e2c5ee00d8b711dc5d95"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af2bd33a72448e2c5ee00d8b711dc5d95">&#9670;&nbsp;</a></span>IsLeapYear() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbDate::IsLeapYear </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iYear</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Determine if date is a leap year. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iYear</td><td>- Year to check for leap year status. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue - Is leapyear.<br />
- xbFalse - Not a leap year. </dd></dl>
-
-</div>
-</div>
-<a id="a1ee3377d4ead9d31099eee539d9b13a7" name="a1ee3377d4ead9d31099eee539d9b13a7"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1ee3377d4ead9d31099eee539d9b13a7">&#9670;&nbsp;</a></span>JulianDays()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt32 xb::xbDate::JulianDays </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Calculate julian days for a given date. </p>
-<dl class="section return"><dt>Returns</dt><dd>The number of days since 01/01/0001 + JUL_OFFSET. </dd></dl>
-
-</div>
-</div>
-<a id="a9d28b2a46d8aaa284b92f44eeb96b2ff" name="a9d28b2a46d8aaa284b92f44eeb96b2ff"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a9d28b2a46d8aaa284b92f44eeb96b2ff">&#9670;&nbsp;</a></span>JulToDate8()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDate::JulToDate8 </td>
- <td>(</td>
- <td class="paramtype">xbInt32&#160;</td>
- <td class="paramname"><em>lJulDays</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Convert the number of julian days to gregorian date. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">lJulDays</td><td>- Julian days. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>XB_NO_ERROR </dd></dl>
-
-</div>
-</div>
-<a id="a15847866bb7642aa42bc254e0cf2038a" name="a15847866bb7642aa42bc254e0cf2038a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a15847866bb7642aa42bc254e0cf2038a">&#9670;&nbsp;</a></span>LastDayOfMonth()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDate::LastDayOfMonth </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Set the date to the last day of month for a given date. </p>
-<p >This routine sets the last date of the month. </p><dl class="section return"><dt>Returns</dt><dd>XB_NO_ERROR </dd></dl>
-
-</div>
-</div>
-<a id="a08bd84c67e1119d8c5c1748cd89d092e" name="a08bd84c67e1119d8c5c1748cd89d092e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a08bd84c67e1119d8c5c1748cd89d092e">&#9670;&nbsp;</a></span>MonthOf()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDate::MonthOf </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Return the month for the date. </p>
-<dl class="section return"><dt>Returns</dt><dd>The month of the date. </dd></dl>
-
-</div>
-</div>
-<a id="ac3aaf8997fc0c36676085e7741f33a8a" name="ac3aaf8997fc0c36676085e7741f33a8a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac3aaf8997fc0c36676085e7741f33a8a">&#9670;&nbsp;</a></span>operator!=()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbDate::operator!= </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;&#160;</td>
- <td class="paramname"><em>dt</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>operator != </p>
-<p >This routine compares two dates for inequality. </p><dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">dt</td><td>- Date to compare. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue - Dates don't match.<br />
-xbFalse - Dates match. </dd></dl>
-
-</div>
-</div>
-<a id="ad09609bf78cf038886a4f9cd19423f9c" name="ad09609bf78cf038886a4f9cd19423f9c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ad09609bf78cf038886a4f9cd19423f9c">&#9670;&nbsp;</a></span>operator+()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">const char * xb::xbDate::operator+ </td>
- <td>(</td>
- <td class="paramtype">xbInt32&#160;</td>
- <td class="paramname"><em>lCount</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>operator + </p>
-<p >This routine adds additional days to a date field. </p><dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">lCount</td><td>- Number of days to add. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>New date in CCYYMMDD format. </dd></dl>
-
-</div>
-</div>
-<a id="a1c7d9e3718c43df18b21646072c8605e" name="a1c7d9e3718c43df18b21646072c8605e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1c7d9e3718c43df18b21646072c8605e">&#9670;&nbsp;</a></span>operator++()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbDate::operator++ </td>
- <td>(</td>
- <td class="paramtype">xbInt32&#160;</td>
- <td class="paramname"><em>i</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>operator ++ </p>
-<p >This routine adds one day to the date field. </p>
-
-</div>
-</div>
-<a id="a947ba156d04fe063aaa4c9964ae5d163" name="a947ba156d04fe063aaa4c9964ae5d163"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a947ba156d04fe063aaa4c9964ae5d163">&#9670;&nbsp;</a></span>operator+=()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbDate::operator+= </td>
- <td>(</td>
- <td class="paramtype">xbInt32&#160;</td>
- <td class="paramname"><em>lDays</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>operator += </p>
-<p >This routine adds lDays to the date </p><dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">lDays</td><td>- Number of days to add to the date. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a3f3a8802c96098c85aa8d0e19717a979" name="a3f3a8802c96098c85aa8d0e19717a979"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a3f3a8802c96098c85aa8d0e19717a979">&#9670;&nbsp;</a></span>operator-() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt32 xb::xbDate::operator- </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;&#160;</td>
- <td class="paramname"><em>dt</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>operator - </p>
-<p >This routine subtracts one date from another date returning the difference. </p><dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">dt</td><td>- Date to subtract. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Number of days </dd></dl>
-
-</div>
-</div>
-<a id="a73ff5c037046ac0a0bb7d73f74e25cbb" name="a73ff5c037046ac0a0bb7d73f74e25cbb"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a73ff5c037046ac0a0bb7d73f74e25cbb">&#9670;&nbsp;</a></span>operator-() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">const char * xb::xbDate::operator- </td>
- <td>(</td>
- <td class="paramtype">xbInt32&#160;</td>
- <td class="paramname"><em>lCount</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>operator - </p>
-<p >This routine subtracts days from a date field. </p><dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">lCount</td><td>- Number of days to subtract. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>New date in CCYYMMDD format. </dd></dl>
-
-</div>
-</div>
-<a id="ae2b33dfee60d324916d833b2098b5a6b" name="ae2b33dfee60d324916d833b2098b5a6b"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae2b33dfee60d324916d833b2098b5a6b">&#9670;&nbsp;</a></span>operator--()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbDate::operator-- </td>
- <td>(</td>
- <td class="paramtype">xbInt32&#160;</td>
- <td class="paramname"><em>i</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>operator &ndash; </p>
-<p >This routine subtracts one day from the date field. </p>
-
-</div>
-</div>
-<a id="a4a8f207d759540114373f5e9d6d375f7" name="a4a8f207d759540114373f5e9d6d375f7"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4a8f207d759540114373f5e9d6d375f7">&#9670;&nbsp;</a></span>operator-=()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbDate::operator-= </td>
- <td>(</td>
- <td class="paramtype">xbInt32&#160;</td>
- <td class="paramname"><em>lDays</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>operator -= </p>
-<p >This routine subtracts lDays from the date. </p><dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">lDays</td><td>- Number of days to subtract from the date. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a11f09d97ed527e7ef00ba6f17b9fb02c" name="a11f09d97ed527e7ef00ba6f17b9fb02c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a11f09d97ed527e7ef00ba6f17b9fb02c">&#9670;&nbsp;</a></span>operator&lt;()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbDate::operator&lt; </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;&#160;</td>
- <td class="paramname"><em>dt</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>operator &lt; </p>
-<p >This routine compares two dates </p><dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">dt</td><td>- Date to compare. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue - Left date is less than right date.<br />
- xbFalse - Left date is not less than right date. </dd></dl>
-
-</div>
-</div>
-<a id="a6d8fa4df4664f3fd8d4cc15e77f6d046" name="a6d8fa4df4664f3fd8d4cc15e77f6d046"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6d8fa4df4664f3fd8d4cc15e77f6d046">&#9670;&nbsp;</a></span>operator&lt;=()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbDate::operator&lt;= </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;&#160;</td>
- <td class="paramname"><em>dt</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>operator &lt;= </p>
-<p >This routine compares two dates </p><dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">dt</td><td>- Date to compare. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue - Left date is less than or equal to right date.<br />
- xbFalse - Left date is not less than or equal to right date. </dd></dl>
-
-</div>
-</div>
-<a id="a2e33ad9415c32e820e08fd8084198690" name="a2e33ad9415c32e820e08fd8084198690"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a2e33ad9415c32e820e08fd8084198690">&#9670;&nbsp;</a></span>operator=()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbDate::operator= </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;&#160;</td>
- <td class="paramname"><em>dt</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Set operator=. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">dt</td><td>- Date value for set operation. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="aaaf98c1a672066021895f0953b6e94d0" name="aaaf98c1a672066021895f0953b6e94d0"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aaaf98c1a672066021895f0953b6e94d0">&#9670;&nbsp;</a></span>operator==()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbDate::operator== </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;&#160;</td>
- <td class="paramname"><em>dt</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>operator == </p>
-<p >This routine compares two dates for equality. </p><dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">dt</td><td>- Date to compare. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue - Dates match.<br />
-xbFalse - Dates don't match. </dd></dl>
-
-</div>
-</div>
-<a id="a744031c4031d6ec4595d34acbd1c5860" name="a744031c4031d6ec4595d34acbd1c5860"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a744031c4031d6ec4595d34acbd1c5860">&#9670;&nbsp;</a></span>operator&gt;()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbDate::operator&gt; </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;&#160;</td>
- <td class="paramname"><em>dt</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>&gt; </p>
-<p >This routine compares two dates </p><dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">dt</td><td>- Date to compare. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue - Left date is greater than right date.<br />
- xbFalse - Left date is not greater than right date. </dd></dl>
-
-</div>
-</div>
-<a id="a1d81959ea55440588068ea7f82617c99" name="a1d81959ea55440588068ea7f82617c99"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1d81959ea55440588068ea7f82617c99">&#9670;&nbsp;</a></span>operator&gt;=()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbDate::operator&gt;= </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;&#160;</td>
- <td class="paramname"><em>dt</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>operator &gt;= </p>
-<p >This routine compares two dates </p><dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">dt</td><td>- Date to compare. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue - Left date is greater than or equal to right date.<br />
- xbFalse - Left date is not greater than or equal to right date. </dd></dl>
-
-</div>
-</div>
-<a id="a4b0cde152b5de0f7d26608d1445110b6" name="a4b0cde152b5de0f7d26608d1445110b6"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4b0cde152b5de0f7d26608d1445110b6">&#9670;&nbsp;</a></span>Set()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDate::Set </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sDateIn</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Set the date. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sDateIn</td><td>- Input date. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>XB_NO_ERROR<br />
-XB_INVALID_DATE </dd></dl>
-
-</div>
-</div>
-<a id="a57caaaadfbd089d9a58ecfcb50c88a6c" name="a57caaaadfbd089d9a58ecfcb50c88a6c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a57caaaadfbd089d9a58ecfcb50c88a6c">&#9670;&nbsp;</a></span>SetDataDirectory()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::SetDataDirectory </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sDataDirectory</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Set the data directory. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sDataDirectory</td><td>Set the data direcroty. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a25542afadaaf39b4fb5a1772a29cc0bd" name="a25542afadaaf39b4fb5a1772a29cc0bd"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a25542afadaaf39b4fb5a1772a29cc0bd">&#9670;&nbsp;</a></span>SetDefaultAutoCommit()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::SetDefaultAutoCommit </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td>
- <td class="paramname"><em>bDefaultAutoCommit</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Set the default auto commit. </p>
-<p >Disabling auto commit requires the application execute explicit updates using dbf-&gt;Put() and dbf-&gt;AppendRecord(). With auto commit on, the library posts updates automatically when moving off the current record or closing a file.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">bDefaultAutoCommit</td><td>xbTrue - Enable default auto commit.<br />
- xbFalse - Disable default auto commit.<br />
- </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a5f74db23f8902846d581935c7db73f9c" name="a5f74db23f8902846d581935c7db73f9c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5f74db23f8902846d581935c7db73f9c">&#9670;&nbsp;</a></span>SetDefaultDateFormat()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::SetDefaultDateFormat </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sDefaultDateFormat</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Set the default date format. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sDefaultDateFormat</td><td>Set the default date format. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a904ec348fd029d4a76e72b8fde636108" name="a904ec348fd029d4a76e72b8fde636108"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a904ec348fd029d4a76e72b8fde636108">&#9670;&nbsp;</a></span>SetEndianType()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::SetEndianType </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Set the endian type. </p>
-<p >This routine determines the Endian-ness at run time instead of compile time as some processers (ie; Sparc,ARM) can be switched either way. This routine is called automatically by the library at startup and does not need to be called in an application program. </p>
-
-</div>
-</div>
-<a id="a7b992ed97281bf25b5b66f5df686225e" name="a7b992ed97281bf25b5b66f5df686225e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a7b992ed97281bf25b5b66f5df686225e">&#9670;&nbsp;</a></span>SetLogDirectory()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::SetLogDirectory </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sLogDirectory</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="aba6e59512f7172dd55dcf92059e5928c" name="aba6e59512f7172dd55dcf92059e5928c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aba6e59512f7172dd55dcf92059e5928c">&#9670;&nbsp;</a></span>SetMultiUser()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::SetMultiUser </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td>
- <td class="paramname"><em>bMultiUser</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the multi user setting. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">bMultiUser</td><td>xbTrue - Turn on Multi user mode.<br />
- xbFalse - Turn off Multi user mode.<br />
- </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="ab43a5d8d929767c0ffdd722972bb8cc0" name="ab43a5d8d929767c0ffdd722972bb8cc0"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab43a5d8d929767c0ffdd722972bb8cc0">&#9670;&nbsp;</a></span>Str()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">const char * xb::xbDate::Str </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Return the date value. </p>
-<dl class="section return"><dt>Returns</dt><dd>char ptr to date value. </dd></dl>
-
-</div>
-</div>
-<a id="a40ba54a58d64cf56266f020f91584192" name="a40ba54a58d64cf56266f020f91584192"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a40ba54a58d64cf56266f020f91584192">&#9670;&nbsp;</a></span>Sysdate()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDate::Sysdate </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Set the date equal to the system date. </p>
-<dl class="section return"><dt>Returns</dt><dd>XB_NO_ERROR </dd></dl>
-
-</div>
-</div>
-<a id="a31057dfaa36389a16e40e3db82c46262" name="a31057dfaa36389a16e40e3db82c46262"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a31057dfaa36389a16e40e3db82c46262">&#9670;&nbsp;</a></span>YearOf()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDate::YearOf </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Returns the year of the date. </p>
-<dl class="section return"><dt>Returns</dt><dd>The year of the date. </dd></dl>
-
-</div>
-</div>
-<h2 class="groupheader">Field Documentation</h2>
-<a id="a6219f1b5e24ea12fe158cd5aea56988e" name="a6219f1b5e24ea12fe158cd5aea56988e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6219f1b5e24ea12fe158cd5aea56988e">&#9670;&nbsp;</a></span>ErrorCodeText</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">const char* xb::xbSsv::ErrorCodeText[]</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a5849e813f5e8e1cd180f0366637adbf3" name="a5849e813f5e8e1cd180f0366637adbf3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5849e813f5e8e1cd180f0366637adbf3">&#9670;&nbsp;</a></span>iEndianType</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbSsv::iEndianType = 0</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">protected</span><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a9dec3164c3b264882df634915ecf21da" name="a9dec3164c3b264882df634915ecf21da"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a9dec3164c3b264882df634915ecf21da">&#9670;&nbsp;</a></span>sNullString</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> xb::xbSsv::sNullString = &quot;&quot;</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">protected</span><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following files:<ul>
-<li>/mnt/1Tdata/xbase/xbase64-4.1.0/src/include/<a class="el" href="xbdate_8h_source.html">xbdate.h</a></li>
-<li>/mnt/1Tdata/xbase/xbase64-4.1.0/src/core/<a class="el" href="xbdate_8cpp.html">xbdate.cpp</a></li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/classxb_1_1xbDbf.html b/docs/doxygen/html/classxb_1_1xbDbf.html
deleted file mode 100644
index 0546182..0000000
--- a/docs/doxygen/html/classxb_1_1xbDbf.html
+++ /dev/null
@@ -1,9122 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: xb::xbDbf Class Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="namespacexb.html">xb</a></li><li class="navelem"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> &#124;
-<a href="#pub-static-attribs">Static Public Attributes</a> &#124;
-<a href="#pro-methods">Protected Member Functions</a> &#124;
-<a href="#pro-attribs">Protected Attributes</a> &#124;
-<a href="#pro-static-attribs">Static Protected Attributes</a> </div>
- <div class="headertitle"><div class="title">xb::xbDbf Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div></div>
-</div><!--header-->
-<div class="contents">
-
-<p>Base class for handling dbf files/tables.
- <a href="classxb_1_1xbDbf.html#details">More...</a></p>
-
-<p><code>#include &lt;<a class="el" href="xbdbf_8h_source.html">xbdbf.h</a>&gt;</code></p>
-<div class="dynheader">
-Inheritance diagram for xb::xbDbf:</div>
-<div class="dyncontent">
- <div class="center">
- <img src="classxb_1_1xbDbf.png" usemap="#xb::xbDbf_map" alt=""/>
- <map id="xb::xbDbf_map" name="xb::xbDbf_map">
-<area href="classxb_1_1xbFile.html" title="Class for handling low level file I/O." alt="xb::xbFile" shape="rect" coords="0,56,65,80"/>
-<area href="classxb_1_1xbSsv.html" title="Class for handling shared system variables." alt="xb::xbSsv" shape="rect" coords="0,0,65,24"/>
- </map>
-</div></div>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:a84a75f80bc0e9b8a22b728767949c204"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a84a75f80bc0e9b8a22b728767949c204">xbDbf</a> (<a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *x)</td></tr>
-<tr class="memdesc:a84a75f80bc0e9b8a22b728767949c204"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor. <a href="classxb_1_1xbDbf.html#a84a75f80bc0e9b8a22b728767949c204">More...</a><br /></td></tr>
-<tr class="separator:a84a75f80bc0e9b8a22b728767949c204"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7eb87521fba8a939c613056d9918d880"><td class="memItemLeft" align="right" valign="top">virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a7eb87521fba8a939c613056d9918d880">~xbDbf</a> ()</td></tr>
-<tr class="memdesc:a7eb87521fba8a939c613056d9918d880"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destructor. <a href="classxb_1_1xbDbf.html#a7eb87521fba8a939c613056d9918d880">More...</a><br /></td></tr>
-<tr class="separator:a7eb87521fba8a939c613056d9918d880"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4edcf31390fbdc8c3558004770fd9f2f"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a4edcf31390fbdc8c3558004770fd9f2f">Abort</a> ()</td></tr>
-<tr class="memdesc:a4edcf31390fbdc8c3558004770fd9f2f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Abort any uncommited changes for the current record buffer. <a href="classxb_1_1xbDbf.html#a4edcf31390fbdc8c3558004770fd9f2f">More...</a><br /></td></tr>
-<tr class="separator:a4edcf31390fbdc8c3558004770fd9f2f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5b412dd796241673eb1aa2c93513d69b"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a5b412dd796241673eb1aa2c93513d69b">AppendRecord</a> ()</td></tr>
-<tr class="memdesc:a5b412dd796241673eb1aa2c93513d69b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Append the current record to the data file. <a href="classxb_1_1xbDbf.html#a5b412dd796241673eb1aa2c93513d69b">More...</a><br /></td></tr>
-<tr class="separator:a5b412dd796241673eb1aa2c93513d69b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a78da5a3d2011a3f2e7618cbdd3ba02d6"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a78da5a3d2011a3f2e7618cbdd3ba02d6">BlankRecord</a> ()</td></tr>
-<tr class="memdesc:a78da5a3d2011a3f2e7618cbdd3ba02d6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Blank the record buffer. <a href="classxb_1_1xbDbf.html#a78da5a3d2011a3f2e7618cbdd3ba02d6">More...</a><br /></td></tr>
-<tr class="separator:a78da5a3d2011a3f2e7618cbdd3ba02d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abd69532c885ab72bcf3fb5066b318f4f"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#abd69532c885ab72bcf3fb5066b318f4f">Commit</a> ()</td></tr>
-<tr class="memdesc:abd69532c885ab72bcf3fb5066b318f4f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Commit updates to disk. <a href="classxb_1_1xbDbf.html#abd69532c885ab72bcf3fb5066b318f4f">More...</a><br /></td></tr>
-<tr class="separator:abd69532c885ab72bcf3fb5066b318f4f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad68d73113e54e1b5f326e90f45e9989d"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ad68d73113e54e1b5f326e90f45e9989d">Close</a> ()</td></tr>
-<tr class="memdesc:ad68d73113e54e1b5f326e90f45e9989d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Close DBF file/table. <a href="classxb_1_1xbDbf.html#ad68d73113e54e1b5f326e90f45e9989d">More...</a><br /></td></tr>
-<tr class="separator:ad68d73113e54e1b5f326e90f45e9989d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a829c615a130a1fdf609d93438d8a6264"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a829c615a130a1fdf609d93438d8a6264">CopyDbfStructure</a> (<a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *dNewTable, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTableAlias, xbInt16 iOverlay, xbInt16 iShareMode)</td></tr>
-<tr class="memdesc:a829c615a130a1fdf609d93438d8a6264"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy table (dbf) file structure. <a href="classxb_1_1xbDbf.html#a829c615a130a1fdf609d93438d8a6264">More...</a><br /></td></tr>
-<tr class="separator:a829c615a130a1fdf609d93438d8a6264"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a73e41bfe679dd06ab16c436652df93f1"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a73e41bfe679dd06ab16c436652df93f1">CreateTable</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;<a class="el" href="classxb_1_1xbDbf.html#a73f9c792d0a769e2e604c1855245a276">sAlias</a>, <a class="el" href="structxb_1_1xbSchema.html">xbSchema</a> *pSchema, xbInt16 iOverlay, xbInt16 iShareMode)=0</td></tr>
-<tr class="separator:a73e41bfe679dd06ab16c436652df93f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4085ed4f049d976124d8edc3d3c56397"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a4085ed4f049d976124d8edc3d3c56397">DeleteTable</a> ()</td></tr>
-<tr class="memdesc:a4085ed4f049d976124d8edc3d3c56397"><td class="mdescLeft">&#160;</td><td class="mdescRight">Delete a table. <a href="classxb_1_1xbDbf.html#a4085ed4f049d976124d8edc3d3c56397">More...</a><br /></td></tr>
-<tr class="separator:a4085ed4f049d976124d8edc3d3c56397"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a01c26b67e312be1e674b3da710e031b9"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a01c26b67e312be1e674b3da710e031b9">DeleteAll</a> (xbInt16 iOption)</td></tr>
-<tr class="memdesc:a01c26b67e312be1e674b3da710e031b9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Delete or undelete all records in a dbf file (table). <a href="classxb_1_1xbDbf.html#a01c26b67e312be1e674b3da710e031b9">More...</a><br /></td></tr>
-<tr class="separator:a01c26b67e312be1e674b3da710e031b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3067fdfa3a7a5c15651f6e89d1102176"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a3067fdfa3a7a5c15651f6e89d1102176">DeleteAllRecords</a> ()</td></tr>
-<tr class="memdesc:a3067fdfa3a7a5c15651f6e89d1102176"><td class="mdescLeft">&#160;</td><td class="mdescRight">Delete all records. <a href="classxb_1_1xbDbf.html#a3067fdfa3a7a5c15651f6e89d1102176">More...</a><br /></td></tr>
-<tr class="separator:a3067fdfa3a7a5c15651f6e89d1102176"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:acd8c10579229f3a2e2c5fdb7fcef90db"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#acd8c10579229f3a2e2c5fdb7fcef90db">DeleteRecord</a> ()</td></tr>
-<tr class="memdesc:acd8c10579229f3a2e2c5fdb7fcef90db"><td class="mdescLeft">&#160;</td><td class="mdescRight">Delete the current record. <a href="classxb_1_1xbDbf.html#acd8c10579229f3a2e2c5fdb7fcef90db">More...</a><br /></td></tr>
-<tr class="separator:acd8c10579229f3a2e2c5fdb7fcef90db"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a309b5b1fb6a5c048c4bfb404d011ac55"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a309b5b1fb6a5c048c4bfb404d011ac55">DumpHeader</a> (xbInt16 iOption) const</td></tr>
-<tr class="memdesc:a309b5b1fb6a5c048c4bfb404d011ac55"><td class="mdescLeft">&#160;</td><td class="mdescRight">Dump dbf file header. <a href="classxb_1_1xbDbf.html#a309b5b1fb6a5c048c4bfb404d011ac55">More...</a><br /></td></tr>
-<tr class="separator:a309b5b1fb6a5c048c4bfb404d011ac55"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aba30399f15885a07f87f904c0d0656fa"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#aba30399f15885a07f87f904c0d0656fa">DumpRecord</a> (xbUInt32 ulRecNo, xbInt16 iOutputDest=0, xbInt16 iOutputFmt=0)</td></tr>
-<tr class="memdesc:aba30399f15885a07f87f904c0d0656fa"><td class="mdescLeft">&#160;</td><td class="mdescRight">Dump record. <a href="classxb_1_1xbDbf.html#aba30399f15885a07f87f904c0d0656fa">More...</a><br /></td></tr>
-<tr class="separator:aba30399f15885a07f87f904c0d0656fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abb9e20c5efacd4fea80f1515abbc6b55"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#abb9e20c5efacd4fea80f1515abbc6b55">GetAutoCommit</a> () const</td></tr>
-<tr class="memdesc:abb9e20c5efacd4fea80f1515abbc6b55"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get auto commit setting. <a href="classxb_1_1xbDbf.html#abb9e20c5efacd4fea80f1515abbc6b55">More...</a><br /></td></tr>
-<tr class="separator:abb9e20c5efacd4fea80f1515abbc6b55"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae0c00226fd2ea7a67f101e795467ed68"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ae0c00226fd2ea7a67f101e795467ed68">GetAutoCommit</a> (xbInt16 iOption) const</td></tr>
-<tr class="memdesc:ae0c00226fd2ea7a67f101e795467ed68"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get auto commit setting. <a href="classxb_1_1xbDbf.html#ae0c00226fd2ea7a67f101e795467ed68">More...</a><br /></td></tr>
-<tr class="separator:ae0c00226fd2ea7a67f101e795467ed68"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad0827a43c025c1184ffebab74cc9e779"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ad0827a43c025c1184ffebab74cc9e779">GetBof</a> ()</td></tr>
-<tr class="memdesc:ad0827a43c025c1184ffebab74cc9e779"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a pointer to the current index object. <a href="classxb_1_1xbDbf.html#ad0827a43c025c1184ffebab74cc9e779">More...</a><br /></td></tr>
-<tr class="separator:ad0827a43c025c1184ffebab74cc9e779"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a643a80a3792a52760c8e09ba18719503"><td class="memItemLeft" align="right" valign="top">virtual xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a643a80a3792a52760c8e09ba18719503">GetCurRecNo</a> () const</td></tr>
-<tr class="memdesc:a643a80a3792a52760c8e09ba18719503"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the current record number. <a href="classxb_1_1xbDbf.html#a643a80a3792a52760c8e09ba18719503">More...</a><br /></td></tr>
-<tr class="separator:a643a80a3792a52760c8e09ba18719503"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac1110d867ba297a52c8b0e83e88f05e6"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ac1110d867ba297a52c8b0e83e88f05e6">GetDbfStatus</a> () const</td></tr>
-<tr class="memdesc:ac1110d867ba297a52c8b0e83e88f05e6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the current dbf status. <a href="classxb_1_1xbDbf.html#ac1110d867ba297a52c8b0e83e88f05e6">More...</a><br /></td></tr>
-<tr class="separator:ac1110d867ba297a52c8b0e83e88f05e6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a256dc1f98626fa77da24e91a38ab5b4d"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a256dc1f98626fa77da24e91a38ab5b4d">GetEof</a> ()</td></tr>
-<tr class="memdesc:a256dc1f98626fa77da24e91a38ab5b4d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return true if dbf file empty or positioned to the last record. <a href="classxb_1_1xbDbf.html#a256dc1f98626fa77da24e91a38ab5b4d">More...</a><br /></td></tr>
-<tr class="separator:a256dc1f98626fa77da24e91a38ab5b4d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:add27d8ef555a13b336b8c804165dc15e"><td class="memItemLeft" align="right" valign="top">virtual xbInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#add27d8ef555a13b336b8c804165dc15e">GetFieldCnt</a> () const</td></tr>
-<tr class="memdesc:add27d8ef555a13b336b8c804165dc15e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the number of fields in the table. <a href="classxb_1_1xbDbf.html#add27d8ef555a13b336b8c804165dc15e">More...</a><br /></td></tr>
-<tr class="separator:add27d8ef555a13b336b8c804165dc15e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6fc5b8a3e2f177d5ceaf9d975cbb5226"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a6fc5b8a3e2f177d5ceaf9d975cbb5226">GetFirstRecord</a> ()</td></tr>
-<tr class="memdesc:a6fc5b8a3e2f177d5ceaf9d975cbb5226"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the first record. <a href="classxb_1_1xbDbf.html#a6fc5b8a3e2f177d5ceaf9d975cbb5226">More...</a><br /></td></tr>
-<tr class="separator:a6fc5b8a3e2f177d5ceaf9d975cbb5226"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:acb78991e8435edd36318c653cb977c1a"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#acb78991e8435edd36318c653cb977c1a">GetFirstRecord</a> (xbInt16 iOption)</td></tr>
-<tr class="memdesc:acb78991e8435edd36318c653cb977c1a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the first record. <a href="classxb_1_1xbDbf.html#acb78991e8435edd36318c653cb977c1a">More...</a><br /></td></tr>
-<tr class="separator:acb78991e8435edd36318c653cb977c1a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad56be2756b7a9f8318d9ba5cf215dafb"><td class="memItemLeft" align="right" valign="top">virtual xbUInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ad56be2756b7a9f8318d9ba5cf215dafb">GetHeaderLen</a> () const</td></tr>
-<tr class="separator:ad56be2756b7a9f8318d9ba5cf215dafb"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a49e667f9c8ee55c36444702663fc5964"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a49e667f9c8ee55c36444702663fc5964">GetLastRecord</a> ()</td></tr>
-<tr class="memdesc:a49e667f9c8ee55c36444702663fc5964"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the last record. <a href="classxb_1_1xbDbf.html#a49e667f9c8ee55c36444702663fc5964">More...</a><br /></td></tr>
-<tr class="separator:a49e667f9c8ee55c36444702663fc5964"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a8ccfa2291417412b6894940d1b92f9a6"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a8ccfa2291417412b6894940d1b92f9a6">GetLastRecord</a> (xbInt16 iOption)</td></tr>
-<tr class="memdesc:a8ccfa2291417412b6894940d1b92f9a6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the last record. <a href="classxb_1_1xbDbf.html#a8ccfa2291417412b6894940d1b92f9a6">More...</a><br /></td></tr>
-<tr class="separator:a8ccfa2291417412b6894940d1b92f9a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab896fe3b734f556de578d30f92b18fe2"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ab896fe3b734f556de578d30f92b18fe2">GetNextRecord</a> ()</td></tr>
-<tr class="memdesc:ab896fe3b734f556de578d30f92b18fe2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the next record. <a href="classxb_1_1xbDbf.html#ab896fe3b734f556de578d30f92b18fe2">More...</a><br /></td></tr>
-<tr class="separator:ab896fe3b734f556de578d30f92b18fe2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3191428a7a92d9107d8d42448884f2ac"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a3191428a7a92d9107d8d42448884f2ac">GetNextRecord</a> (xbInt16 iOption)</td></tr>
-<tr class="memdesc:a3191428a7a92d9107d8d42448884f2ac"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the next record. <a href="classxb_1_1xbDbf.html#a3191428a7a92d9107d8d42448884f2ac">More...</a><br /></td></tr>
-<tr class="separator:a3191428a7a92d9107d8d42448884f2ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a18fdcb4ab15b36cd47fa6f6f7a540d1a"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a18fdcb4ab15b36cd47fa6f6f7a540d1a">GetNextRecord</a> (xbInt16 iOption, xbUInt32 ulStartRec)</td></tr>
-<tr class="memdesc:a18fdcb4ab15b36cd47fa6f6f7a540d1a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the next record. <a href="classxb_1_1xbDbf.html#a18fdcb4ab15b36cd47fa6f6f7a540d1a">More...</a><br /></td></tr>
-<tr class="separator:a18fdcb4ab15b36cd47fa6f6f7a540d1a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab3d248e5221b4f0809897cd43af17a1e"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ab3d248e5221b4f0809897cd43af17a1e">GetPrevRecord</a> ()</td></tr>
-<tr class="memdesc:ab3d248e5221b4f0809897cd43af17a1e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the previous record. <a href="classxb_1_1xbDbf.html#ab3d248e5221b4f0809897cd43af17a1e">More...</a><br /></td></tr>
-<tr class="separator:ab3d248e5221b4f0809897cd43af17a1e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7eadc7b08d73003802b90584f7b33387"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a7eadc7b08d73003802b90584f7b33387">GetPrevRecord</a> (xbInt16 iOption)</td></tr>
-<tr class="memdesc:a7eadc7b08d73003802b90584f7b33387"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the previous record. <a href="classxb_1_1xbDbf.html#a7eadc7b08d73003802b90584f7b33387">More...</a><br /></td></tr>
-<tr class="separator:a7eadc7b08d73003802b90584f7b33387"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a26fba086b07caeab95066bf1c8d25161"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a26fba086b07caeab95066bf1c8d25161">GetRecord</a> (xbUInt32 ulRecNo)</td></tr>
-<tr class="memdesc:a26fba086b07caeab95066bf1c8d25161"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get record for specified record number. <a href="classxb_1_1xbDbf.html#a26fba086b07caeab95066bf1c8d25161">More...</a><br /></td></tr>
-<tr class="separator:a26fba086b07caeab95066bf1c8d25161"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0aaa06d6028e75efc6b5131f7356ecce"><td class="memItemLeft" align="right" valign="top">virtual xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a0aaa06d6028e75efc6b5131f7356ecce">GetRecordCount</a> ()</td></tr>
-<tr class="memdesc:a0aaa06d6028e75efc6b5131f7356ecce"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current number of records in the dbf data file. <a href="classxb_1_1xbDbf.html#a0aaa06d6028e75efc6b5131f7356ecce">More...</a><br /></td></tr>
-<tr class="separator:a0aaa06d6028e75efc6b5131f7356ecce"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac196ad55335e1f4789d698748434dc89"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ac196ad55335e1f4789d698748434dc89">GetRecordCnt</a> (xbUInt32 &amp;ulRecCnt)</td></tr>
-<tr class="memdesc:ac196ad55335e1f4789d698748434dc89"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current number of records in the dbf data file. <a href="classxb_1_1xbDbf.html#ac196ad55335e1f4789d698748434dc89">More...</a><br /></td></tr>
-<tr class="separator:ac196ad55335e1f4789d698748434dc89"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa3e38c4057d726a28a27d07a1610d124"><td class="memItemLeft" align="right" valign="top">virtual char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#aa3e38c4057d726a28a27d07a1610d124">GetRecordBuf</a> (xbInt16 iOpt=0) const</td></tr>
-<tr class="memdesc:aa3e38c4057d726a28a27d07a1610d124"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get pointer to record buffer. <a href="classxb_1_1xbDbf.html#aa3e38c4057d726a28a27d07a1610d124">More...</a><br /></td></tr>
-<tr class="separator:aa3e38c4057d726a28a27d07a1610d124"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab50d76c6e29e81e347a6feb04c2f62bb"><td class="memItemLeft" align="right" valign="top">virtual xbUInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ab50d76c6e29e81e347a6feb04c2f62bb">GetRecordLen</a> () const</td></tr>
-<tr class="memdesc:ab50d76c6e29e81e347a6feb04c2f62bb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the dbf record length. <a href="classxb_1_1xbDbf.html#ab50d76c6e29e81e347a6feb04c2f62bb">More...</a><br /></td></tr>
-<tr class="separator:ab50d76c6e29e81e347a6feb04c2f62bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a27758a325c097f204247908b65ba7fbd"><td class="memItemLeft" align="right" valign="top">virtual const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a27758a325c097f204247908b65ba7fbd">GetTblAlias</a> () const</td></tr>
-<tr class="memdesc:a27758a325c097f204247908b65ba7fbd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the table alias. <a href="classxb_1_1xbDbf.html#a27758a325c097f204247908b65ba7fbd">More...</a><br /></td></tr>
-<tr class="separator:a27758a325c097f204247908b65ba7fbd"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a49212a9eb17f7fa9f303e08d5fc50fc6"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a49212a9eb17f7fa9f303e08d5fc50fc6">GetVersion</a> () const =0</td></tr>
-<tr class="separator:a49212a9eb17f7fa9f303e08d5fc50fc6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab21ec23c076b0c9affdc0f6672bd133f"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ab21ec23c076b0c9affdc0f6672bd133f">GetXbasePtr</a> () const</td></tr>
-<tr class="memdesc:ab21ec23c076b0c9affdc0f6672bd133f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the pointer to the xbXbase structure,. <a href="classxb_1_1xbDbf.html#ab21ec23c076b0c9affdc0f6672bd133f">More...</a><br /></td></tr>
-<tr class="separator:ab21ec23c076b0c9affdc0f6672bd133f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a013dc8c51fc1aa988de39cf3da6da950"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a013dc8c51fc1aa988de39cf3da6da950">MemoFieldsExist</a> () const</td></tr>
-<tr class="memdesc:a013dc8c51fc1aa988de39cf3da6da950"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check for existence of any memo fields. <a href="classxb_1_1xbDbf.html#a013dc8c51fc1aa988de39cf3da6da950">More...</a><br /></td></tr>
-<tr class="separator:a013dc8c51fc1aa988de39cf3da6da950"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a69824d7bafc3f5a15bf7d09f2f511768"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a69824d7bafc3f5a15bf7d09f2f511768">Open</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName)</td></tr>
-<tr class="memdesc:a69824d7bafc3f5a15bf7d09f2f511768"><td class="mdescLeft">&#160;</td><td class="mdescRight">Open a table/dbf file. <a href="classxb_1_1xbDbf.html#a69824d7bafc3f5a15bf7d09f2f511768">More...</a><br /></td></tr>
-<tr class="separator:a69824d7bafc3f5a15bf7d09f2f511768"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae388c5e02adc86e6e9988e697e061610"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ae388c5e02adc86e6e9988e697e061610">Open</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;<a class="el" href="classxb_1_1xbDbf.html#a73f9c792d0a769e2e604c1855245a276">sAlias</a>)</td></tr>
-<tr class="memdesc:ae388c5e02adc86e6e9988e697e061610"><td class="mdescLeft">&#160;</td><td class="mdescRight">Open a table/dbf file. <a href="classxb_1_1xbDbf.html#ae388c5e02adc86e6e9988e697e061610">More...</a><br /></td></tr>
-<tr class="separator:ae388c5e02adc86e6e9988e697e061610"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4d018cbf44d8d8b2145c9acab02c8adf"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a4d018cbf44d8d8b2145c9acab02c8adf">Open</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;<a class="el" href="classxb_1_1xbDbf.html#a73f9c792d0a769e2e604c1855245a276">sAlias</a>, xbInt16 iOpenMode, xbInt16 iShareMode)=0</td></tr>
-<tr class="separator:a4d018cbf44d8d8b2145c9acab02c8adf"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a8a52bf3ef2123c0d17e6b1f67bf0dc55"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a8a52bf3ef2123c0d17e6b1f67bf0dc55">Pack</a> ()</td></tr>
-<tr class="memdesc:a8a52bf3ef2123c0d17e6b1f67bf0dc55"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pack dbf file. <a href="classxb_1_1xbDbf.html#a8a52bf3ef2123c0d17e6b1f67bf0dc55">More...</a><br /></td></tr>
-<tr class="separator:a8a52bf3ef2123c0d17e6b1f67bf0dc55"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a93bb14ad0451355bfa3379128120988a"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a93bb14ad0451355bfa3379128120988a">Pack</a> (xbUInt32 &amp;ulDeletedRecCnt)</td></tr>
-<tr class="memdesc:a93bb14ad0451355bfa3379128120988a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pack dbf file. <a href="classxb_1_1xbDbf.html#a93bb14ad0451355bfa3379128120988a">More...</a><br /></td></tr>
-<tr class="separator:a93bb14ad0451355bfa3379128120988a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3c36a5ffbc7067a1abbcb526dd3b981d"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a3c36a5ffbc7067a1abbcb526dd3b981d">PutRecord</a> ()</td></tr>
-<tr class="memdesc:a3c36a5ffbc7067a1abbcb526dd3b981d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write the current record to disk. <a href="classxb_1_1xbDbf.html#a3c36a5ffbc7067a1abbcb526dd3b981d">More...</a><br /></td></tr>
-<tr class="separator:a3c36a5ffbc7067a1abbcb526dd3b981d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aacbc7bac3ea0c502ee75b838f4f0fcbf"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#aacbc7bac3ea0c502ee75b838f4f0fcbf">PutRecord</a> (xbUInt32 ulRecNo)</td></tr>
-<tr class="memdesc:aacbc7bac3ea0c502ee75b838f4f0fcbf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write record to disk. <a href="classxb_1_1xbDbf.html#aacbc7bac3ea0c502ee75b838f4f0fcbf">More...</a><br /></td></tr>
-<tr class="separator:aacbc7bac3ea0c502ee75b838f4f0fcbf"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a060541addb5bb1f0fe12959ed6f66fb9"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a060541addb5bb1f0fe12959ed6f66fb9">ReadHeader</a> (xbInt16 iFilePositionOption, xbInt16 iReadOption)</td></tr>
-<tr class="memdesc:a060541addb5bb1f0fe12959ed6f66fb9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read dbf file header information. <a href="classxb_1_1xbDbf.html#a060541addb5bb1f0fe12959ed6f66fb9">More...</a><br /></td></tr>
-<tr class="separator:a060541addb5bb1f0fe12959ed6f66fb9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a94d7d626ba691fd4b740c034673e6fc6"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a94d7d626ba691fd4b740c034673e6fc6">RecordDeleted</a> (xbInt16 iOpt=0) const</td></tr>
-<tr class="memdesc:a94d7d626ba691fd4b740c034673e6fc6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return record deletion status. <a href="classxb_1_1xbDbf.html#a94d7d626ba691fd4b740c034673e6fc6">More...</a><br /></td></tr>
-<tr class="separator:a94d7d626ba691fd4b740c034673e6fc6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aeeeb2eb5fabcd0f91d457df07b0e0708"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#aeeeb2eb5fabcd0f91d457df07b0e0708">Rename</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> sNewName)=0</td></tr>
-<tr class="separator:aeeeb2eb5fabcd0f91d457df07b0e0708"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4cf7f0d423164f3cf074ae41f96f4e90"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a4cf7f0d423164f3cf074ae41f96f4e90">SetAutoCommit</a> (xbInt16 <a class="el" href="classxb_1_1xbDbf.html#ab506450954bc86e7bf1d7c4efe681f43">iAutoCommit</a>)</td></tr>
-<tr class="memdesc:a4cf7f0d423164f3cf074ae41f96f4e90"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set auto commit. <a href="classxb_1_1xbDbf.html#a4cf7f0d423164f3cf074ae41f96f4e90">More...</a><br /></td></tr>
-<tr class="separator:a4cf7f0d423164f3cf074ae41f96f4e90"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae94cb1bf9f75184f39d9e1a80ab49d4a"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ae94cb1bf9f75184f39d9e1a80ab49d4a">UndeleteAllRecords</a> ()</td></tr>
-<tr class="memdesc:ae94cb1bf9f75184f39d9e1a80ab49d4a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set auto lock. <a href="classxb_1_1xbDbf.html#ae94cb1bf9f75184f39d9e1a80ab49d4a">More...</a><br /></td></tr>
-<tr class="separator:ae94cb1bf9f75184f39d9e1a80ab49d4a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a255681976a04fc722538bb630507b3a0"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a255681976a04fc722538bb630507b3a0">UndeleteRecord</a> ()</td></tr>
-<tr class="memdesc:a255681976a04fc722538bb630507b3a0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Undelete one record. <a href="classxb_1_1xbDbf.html#a255681976a04fc722538bb630507b3a0">More...</a><br /></td></tr>
-<tr class="separator:a255681976a04fc722538bb630507b3a0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a8ed0693b10b95aaa4e46037758d160ed"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a8ed0693b10b95aaa4e46037758d160ed">Zap</a> ()</td></tr>
-<tr class="memdesc:a8ed0693b10b95aaa4e46037758d160ed"><td class="mdescLeft">&#160;</td><td class="mdescRight">Zap (remove) everything from the file,. <a href="classxb_1_1xbDbf.html#a8ed0693b10b95aaa4e46037758d160ed">More...</a><br /></td></tr>
-<tr class="separator:a8ed0693b10b95aaa4e46037758d160ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad245a26eb8b79610c9ae7bab19e05513"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ad245a26eb8b79610c9ae7bab19e05513">GetField</a> (xbInt16 iFieldNo, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldValue, xbInt16 iRecBufSw) const</td></tr>
-<tr class="memdesc:ad245a26eb8b79610c9ae7bab19e05513"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get field data for field number. <a href="classxb_1_1xbDbf.html#ad245a26eb8b79610c9ae7bab19e05513">More...</a><br /></td></tr>
-<tr class="separator:ad245a26eb8b79610c9ae7bab19e05513"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac81f078f3c932f0da60ad1fbdd848d3e"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ac81f078f3c932f0da60ad1fbdd848d3e">GetField</a> (xbInt16 iFieldNo, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldValue) const</td></tr>
-<tr class="memdesc:ac81f078f3c932f0da60ad1fbdd848d3e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get field data for field number. <a href="classxb_1_1xbDbf.html#ac81f078f3c932f0da60ad1fbdd848d3e">More...</a><br /></td></tr>
-<tr class="separator:ac81f078f3c932f0da60ad1fbdd848d3e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9a0fcf7e2040ab483e3807927833cb26"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a9a0fcf7e2040ab483e3807927833cb26">GetField</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldValue) const</td></tr>
-<tr class="memdesc:a9a0fcf7e2040ab483e3807927833cb26"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get <a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> field for field name. <a href="classxb_1_1xbDbf.html#a9a0fcf7e2040ab483e3807927833cb26">More...</a><br /></td></tr>
-<tr class="separator:a9a0fcf7e2040ab483e3807927833cb26"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abcb4defad2e1b6e67f63cc60737ad840"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#abcb4defad2e1b6e67f63cc60737ad840">GetFieldDecimal</a> (xbInt16 iFieldNo, xbInt16 &amp;iFieldDecimal) const</td></tr>
-<tr class="memdesc:abcb4defad2e1b6e67f63cc60737ad840"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get decimal for field number. <a href="classxb_1_1xbDbf.html#abcb4defad2e1b6e67f63cc60737ad840">More...</a><br /></td></tr>
-<tr class="separator:abcb4defad2e1b6e67f63cc60737ad840"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a607f774fcd6dc0b9913d7a7801b60db2"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a607f774fcd6dc0b9913d7a7801b60db2">GetFieldDecimal</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, xbInt16 &amp;iFieldDecimal) const</td></tr>
-<tr class="memdesc:a607f774fcd6dc0b9913d7a7801b60db2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get decimal for field name. <a href="classxb_1_1xbDbf.html#a607f774fcd6dc0b9913d7a7801b60db2">More...</a><br /></td></tr>
-<tr class="separator:a607f774fcd6dc0b9913d7a7801b60db2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:adda4302b58cc6109b048f19d9b68bbd4"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#adda4302b58cc6109b048f19d9b68bbd4">GetFieldLen</a> (xbInt16 iFieldNo, xbInt16 &amp;iFieldLen) const</td></tr>
-<tr class="memdesc:adda4302b58cc6109b048f19d9b68bbd4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get field length for field number. <a href="classxb_1_1xbDbf.html#adda4302b58cc6109b048f19d9b68bbd4">More...</a><br /></td></tr>
-<tr class="separator:adda4302b58cc6109b048f19d9b68bbd4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:acf06dbccdba1a4bcd90fa0bea6cca59b"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#acf06dbccdba1a4bcd90fa0bea6cca59b">GetFieldLen</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, xbInt16 &amp;iFieldLen) const</td></tr>
-<tr class="memdesc:acf06dbccdba1a4bcd90fa0bea6cca59b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get field length for field name. <a href="classxb_1_1xbDbf.html#acf06dbccdba1a4bcd90fa0bea6cca59b">More...</a><br /></td></tr>
-<tr class="separator:acf06dbccdba1a4bcd90fa0bea6cca59b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5e3e4368bfba1724c016b8859023e34c"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a5e3e4368bfba1724c016b8859023e34c">GetFieldName</a> (xbInt16 iFieldNo, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName) const</td></tr>
-<tr class="memdesc:a5e3e4368bfba1724c016b8859023e34c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the name of the specified field. <a href="classxb_1_1xbDbf.html#a5e3e4368bfba1724c016b8859023e34c">More...</a><br /></td></tr>
-<tr class="separator:a5e3e4368bfba1724c016b8859023e34c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aed9113b5095c6df1b9c854cbd0d8047b"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#aed9113b5095c6df1b9c854cbd0d8047b">GetFieldNo</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, xbInt16 &amp;iFieldNo) const</td></tr>
-<tr class="memdesc:aed9113b5095c6df1b9c854cbd0d8047b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the field number for name. <a href="classxb_1_1xbDbf.html#aed9113b5095c6df1b9c854cbd0d8047b">More...</a><br /></td></tr>
-<tr class="separator:aed9113b5095c6df1b9c854cbd0d8047b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aad9029e63909aeb77d8473256d88bea8"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#aad9029e63909aeb77d8473256d88bea8">GetFieldNo</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName) const</td></tr>
-<tr class="memdesc:aad9029e63909aeb77d8473256d88bea8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get field ID number for a given field name. <a href="classxb_1_1xbDbf.html#aad9029e63909aeb77d8473256d88bea8">More...</a><br /></td></tr>
-<tr class="separator:aad9029e63909aeb77d8473256d88bea8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5143973e4f165651152aa13c8fd45f84"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a5143973e4f165651152aa13c8fd45f84">GetFieldType</a> (xbInt16 iFieldNo, char &amp;cFieldType) const</td></tr>
-<tr class="memdesc:a5143973e4f165651152aa13c8fd45f84"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get field type for field number. <a href="classxb_1_1xbDbf.html#a5143973e4f165651152aa13c8fd45f84">More...</a><br /></td></tr>
-<tr class="separator:a5143973e4f165651152aa13c8fd45f84"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a181db879f1a75f93a34c03513a0b2fea"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a181db879f1a75f93a34c03513a0b2fea">GetFieldType</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, char &amp;cFieldType) const</td></tr>
-<tr class="memdesc:a181db879f1a75f93a34c03513a0b2fea"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get field type for field name. <a href="classxb_1_1xbDbf.html#a181db879f1a75f93a34c03513a0b2fea">More...</a><br /></td></tr>
-<tr class="separator:a181db879f1a75f93a34c03513a0b2fea"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7862215dd2f83a1c488e539cd1f9aec0"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a7862215dd2f83a1c488e539cd1f9aec0">PutField</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldData)</td></tr>
-<tr class="memdesc:a7862215dd2f83a1c488e539cd1f9aec0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Put field for field name. <a href="classxb_1_1xbDbf.html#a7862215dd2f83a1c488e539cd1f9aec0">More...</a><br /></td></tr>
-<tr class="separator:a7862215dd2f83a1c488e539cd1f9aec0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a142b0c0dc904917f3c68c5572c1237b5"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a142b0c0dc904917f3c68c5572c1237b5">PutField</a> (xbInt16 iFieldNo, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldData)</td></tr>
-<tr class="memdesc:a142b0c0dc904917f3c68c5572c1237b5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Put field for field number. <a href="classxb_1_1xbDbf.html#a142b0c0dc904917f3c68c5572c1237b5">More...</a><br /></td></tr>
-<tr class="separator:a142b0c0dc904917f3c68c5572c1237b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab39ac4269ac63bc7ea4f638733bb17f0"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ab39ac4269ac63bc7ea4f638733bb17f0">PutLogicalField</a> (xbInt16 iFieldNo, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldData)</td></tr>
-<tr class="memdesc:ab39ac4269ac63bc7ea4f638733bb17f0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Put logical field for field number. <a href="classxb_1_1xbDbf.html#ab39ac4269ac63bc7ea4f638733bb17f0">More...</a><br /></td></tr>
-<tr class="separator:ab39ac4269ac63bc7ea4f638733bb17f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a507e400ca6526a9e0391cf06dd6a014e"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a507e400ca6526a9e0391cf06dd6a014e">PutLogicalField</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldData)</td></tr>
-<tr class="memdesc:a507e400ca6526a9e0391cf06dd6a014e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Put logical field for field name. <a href="classxb_1_1xbDbf.html#a507e400ca6526a9e0391cf06dd6a014e">More...</a><br /></td></tr>
-<tr class="separator:a507e400ca6526a9e0391cf06dd6a014e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3254f091fc4a1404abed3dd2bcdd6ce6"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a3254f091fc4a1404abed3dd2bcdd6ce6">GetLogicalField</a> (xbInt16 iFieldNo, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldData) const</td></tr>
-<tr class="memdesc:a3254f091fc4a1404abed3dd2bcdd6ce6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get logical field for field number. <a href="classxb_1_1xbDbf.html#a3254f091fc4a1404abed3dd2bcdd6ce6">More...</a><br /></td></tr>
-<tr class="separator:a3254f091fc4a1404abed3dd2bcdd6ce6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9cd6819bfd932ff8507e54d9cb9a624e"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a9cd6819bfd932ff8507e54d9cb9a624e">GetLogicalField</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldData) const</td></tr>
-<tr class="memdesc:a9cd6819bfd932ff8507e54d9cb9a624e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get logical field for field name. <a href="classxb_1_1xbDbf.html#a9cd6819bfd932ff8507e54d9cb9a624e">More...</a><br /></td></tr>
-<tr class="separator:a9cd6819bfd932ff8507e54d9cb9a624e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a423a0cb7bd252cedf956ace4954f275d"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a423a0cb7bd252cedf956ace4954f275d">PutLogicalField</a> (xbInt16 iFieldNo, <a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bFieldData)</td></tr>
-<tr class="memdesc:a423a0cb7bd252cedf956ace4954f275d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Put logical field for field number. <a href="classxb_1_1xbDbf.html#a423a0cb7bd252cedf956ace4954f275d">More...</a><br /></td></tr>
-<tr class="separator:a423a0cb7bd252cedf956ace4954f275d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a623ca3ef5520c42308c1a16b518e7ff3"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a623ca3ef5520c42308c1a16b518e7ff3">PutLogicalField</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bFieldData)</td></tr>
-<tr class="memdesc:a623ca3ef5520c42308c1a16b518e7ff3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Put logical field for field name. <a href="classxb_1_1xbDbf.html#a623ca3ef5520c42308c1a16b518e7ff3">More...</a><br /></td></tr>
-<tr class="separator:a623ca3ef5520c42308c1a16b518e7ff3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aaf615ddcf08f8cd14efc713c2a8d7ae1"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#aaf615ddcf08f8cd14efc713c2a8d7ae1">GetLogicalField</a> (xbInt16 iFieldNo, <a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bFieldData) const</td></tr>
-<tr class="memdesc:aaf615ddcf08f8cd14efc713c2a8d7ae1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get logical field for field number. <a href="classxb_1_1xbDbf.html#aaf615ddcf08f8cd14efc713c2a8d7ae1">More...</a><br /></td></tr>
-<tr class="separator:aaf615ddcf08f8cd14efc713c2a8d7ae1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab28feef20c988b0a6f1c1911a45377b0"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ab28feef20c988b0a6f1c1911a45377b0">GetLogicalField</a> (xbInt16 iFieldNo, <a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bFieldData, xbInt16 iRecBufSw) const</td></tr>
-<tr class="memdesc:ab28feef20c988b0a6f1c1911a45377b0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get logical field for field number. <a href="classxb_1_1xbDbf.html#ab28feef20c988b0a6f1c1911a45377b0">More...</a><br /></td></tr>
-<tr class="separator:ab28feef20c988b0a6f1c1911a45377b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a943cea7fde1b06c1a05184193eff8d2d"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a943cea7fde1b06c1a05184193eff8d2d">GetLogicalField</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bFieldData) const</td></tr>
-<tr class="memdesc:a943cea7fde1b06c1a05184193eff8d2d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get logical field for field name. <a href="classxb_1_1xbDbf.html#a943cea7fde1b06c1a05184193eff8d2d">More...</a><br /></td></tr>
-<tr class="separator:a943cea7fde1b06c1a05184193eff8d2d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abe525c0820640e0a9e169d0b7913cfa1"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#abe525c0820640e0a9e169d0b7913cfa1">GetLongField</a> (xbInt16 iFieldNo, xbInt32 &amp;lFieldValue) const</td></tr>
-<tr class="memdesc:abe525c0820640e0a9e169d0b7913cfa1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get long field for field number. <a href="classxb_1_1xbDbf.html#abe525c0820640e0a9e169d0b7913cfa1">More...</a><br /></td></tr>
-<tr class="separator:abe525c0820640e0a9e169d0b7913cfa1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7b8ef75b17941beac17e50e969b2d3db"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a7b8ef75b17941beac17e50e969b2d3db">GetLongField</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, xbInt32 &amp;lFieldValue) const</td></tr>
-<tr class="memdesc:a7b8ef75b17941beac17e50e969b2d3db"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get long field for field name. <a href="classxb_1_1xbDbf.html#a7b8ef75b17941beac17e50e969b2d3db">More...</a><br /></td></tr>
-<tr class="separator:a7b8ef75b17941beac17e50e969b2d3db"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a56c8f924284bf88aabf90b7930b4eb47"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a56c8f924284bf88aabf90b7930b4eb47">PutLongField</a> (xbInt16 iFieldNo, xbInt32 lFieldValue)</td></tr>
-<tr class="memdesc:a56c8f924284bf88aabf90b7930b4eb47"><td class="mdescLeft">&#160;</td><td class="mdescRight">Put long field for field number. <a href="classxb_1_1xbDbf.html#a56c8f924284bf88aabf90b7930b4eb47">More...</a><br /></td></tr>
-<tr class="separator:a56c8f924284bf88aabf90b7930b4eb47"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae7aad223119edb3d541e9f65e88c9f2f"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ae7aad223119edb3d541e9f65e88c9f2f">PutLongField</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldNo, xbInt32 lFieldValue)</td></tr>
-<tr class="memdesc:ae7aad223119edb3d541e9f65e88c9f2f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Put long field for field name. <a href="classxb_1_1xbDbf.html#ae7aad223119edb3d541e9f65e88c9f2f">More...</a><br /></td></tr>
-<tr class="separator:ae7aad223119edb3d541e9f65e88c9f2f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a67e3a050f9090edf69eee75aef7f5d83"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a67e3a050f9090edf69eee75aef7f5d83">GetULongField</a> (xbInt16 iFieldNo, xbUInt32 &amp;lFieldValue) const</td></tr>
-<tr class="memdesc:a67e3a050f9090edf69eee75aef7f5d83"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get unsigned long field for field number. <a href="classxb_1_1xbDbf.html#a67e3a050f9090edf69eee75aef7f5d83">More...</a><br /></td></tr>
-<tr class="separator:a67e3a050f9090edf69eee75aef7f5d83"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a039eb02418ec4ca862adbc0f95b9cbec"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a039eb02418ec4ca862adbc0f95b9cbec">GetULongField</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, xbUInt32 &amp;lFieldValue) const</td></tr>
-<tr class="memdesc:a039eb02418ec4ca862adbc0f95b9cbec"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get unsigned long field for field name. <a href="classxb_1_1xbDbf.html#a039eb02418ec4ca862adbc0f95b9cbec">More...</a><br /></td></tr>
-<tr class="separator:a039eb02418ec4ca862adbc0f95b9cbec"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af5dec5c9ff903efffdb0490a44d296d2"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#af5dec5c9ff903efffdb0490a44d296d2">PutULongField</a> (xbInt16 iFieldNo, xbUInt32 lFieldValue)</td></tr>
-<tr class="memdesc:af5dec5c9ff903efffdb0490a44d296d2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Put unsigned long field for field number. <a href="classxb_1_1xbDbf.html#af5dec5c9ff903efffdb0490a44d296d2">More...</a><br /></td></tr>
-<tr class="separator:af5dec5c9ff903efffdb0490a44d296d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac62cb97c4e678c83f41788b1ae4d0381"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ac62cb97c4e678c83f41788b1ae4d0381">PutULongField</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldNo, xbUInt32 lFieldValue)</td></tr>
-<tr class="memdesc:ac62cb97c4e678c83f41788b1ae4d0381"><td class="mdescLeft">&#160;</td><td class="mdescRight">Put unsigned long field for field name. <a href="classxb_1_1xbDbf.html#ac62cb97c4e678c83f41788b1ae4d0381">More...</a><br /></td></tr>
-<tr class="separator:ac62cb97c4e678c83f41788b1ae4d0381"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4556041a7ff2f6b6f986729901c11f08"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a4556041a7ff2f6b6f986729901c11f08">GetDoubleField</a> (xbInt16 FieldNo, <a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dFieldValue) const</td></tr>
-<tr class="memdesc:a4556041a7ff2f6b6f986729901c11f08"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get xbDouble field for field number. <a href="classxb_1_1xbDbf.html#a4556041a7ff2f6b6f986729901c11f08">More...</a><br /></td></tr>
-<tr class="separator:a4556041a7ff2f6b6f986729901c11f08"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2370b5e736931441a5968649291b9ef4"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a2370b5e736931441a5968649291b9ef4">GetDoubleField</a> (xbInt16 FieldNo, <a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dFieldValue, xbInt16 iRecBufSw) const</td></tr>
-<tr class="memdesc:a2370b5e736931441a5968649291b9ef4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get xbDouble field for field number. <a href="classxb_1_1xbDbf.html#a2370b5e736931441a5968649291b9ef4">More...</a><br /></td></tr>
-<tr class="separator:a2370b5e736931441a5968649291b9ef4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6e6774df0f2d7733f4b25a9989596d95"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a6e6774df0f2d7733f4b25a9989596d95">GetDoubleField</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dFieldValue) const</td></tr>
-<tr class="memdesc:a6e6774df0f2d7733f4b25a9989596d95"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get xbDouble field for field name. <a href="classxb_1_1xbDbf.html#a6e6774df0f2d7733f4b25a9989596d95">More...</a><br /></td></tr>
-<tr class="separator:a6e6774df0f2d7733f4b25a9989596d95"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4f34842d7e8ff1f16992c2ece2fc38a5"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a4f34842d7e8ff1f16992c2ece2fc38a5">PutDoubleField</a> (xbInt16 FieldNo, <a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dFieldValue)</td></tr>
-<tr class="memdesc:a4f34842d7e8ff1f16992c2ece2fc38a5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Put double field for field number. <a href="classxb_1_1xbDbf.html#a4f34842d7e8ff1f16992c2ece2fc38a5">More...</a><br /></td></tr>
-<tr class="separator:a4f34842d7e8ff1f16992c2ece2fc38a5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae695bbc71c19abc71c0c5f2ff2e1f971"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ae695bbc71c19abc71c0c5f2ff2e1f971">PutDoubleField</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;FieldName, <a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dFieldValue)</td></tr>
-<tr class="memdesc:ae695bbc71c19abc71c0c5f2ff2e1f971"><td class="mdescLeft">&#160;</td><td class="mdescRight">Put double field for field name. <a href="classxb_1_1xbDbf.html#ae695bbc71c19abc71c0c5f2ff2e1f971">More...</a><br /></td></tr>
-<tr class="separator:ae695bbc71c19abc71c0c5f2ff2e1f971"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3443f646038ced14425f067a59c0f2da"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a3443f646038ced14425f067a59c0f2da">GetFloatField</a> (xbInt16 iFieldNo, <a class="el" href="namespacexb.html#a83aa6a550398db55973aa9fb4257e66e">xbFloat</a> &amp;fFieldValue) const</td></tr>
-<tr class="memdesc:a3443f646038ced14425f067a59c0f2da"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get xbFloat field for field number. <a href="classxb_1_1xbDbf.html#a3443f646038ced14425f067a59c0f2da">More...</a><br /></td></tr>
-<tr class="separator:a3443f646038ced14425f067a59c0f2da"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a81ef2f36f921d7ece066a592eb6393eb"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a81ef2f36f921d7ece066a592eb6393eb">GetFloatField</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <a class="el" href="namespacexb.html#a83aa6a550398db55973aa9fb4257e66e">xbFloat</a> &amp;fFieldValue) const</td></tr>
-<tr class="memdesc:a81ef2f36f921d7ece066a592eb6393eb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get xbFloat field for field name. <a href="classxb_1_1xbDbf.html#a81ef2f36f921d7ece066a592eb6393eb">More...</a><br /></td></tr>
-<tr class="separator:a81ef2f36f921d7ece066a592eb6393eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a64161eb50d72e424b11bf3732657ebd8"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a64161eb50d72e424b11bf3732657ebd8">PutFloatField</a> (xbInt16 iFieldNo, <a class="el" href="namespacexb.html#a83aa6a550398db55973aa9fb4257e66e">xbFloat</a> fFieldValue)</td></tr>
-<tr class="memdesc:a64161eb50d72e424b11bf3732657ebd8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Put float field for field number. <a href="classxb_1_1xbDbf.html#a64161eb50d72e424b11bf3732657ebd8">More...</a><br /></td></tr>
-<tr class="separator:a64161eb50d72e424b11bf3732657ebd8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4ea3241bc710d57e5f755efda62288ad"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a4ea3241bc710d57e5f755efda62288ad">PutFloatField</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <a class="el" href="namespacexb.html#a83aa6a550398db55973aa9fb4257e66e">xbFloat</a> fFieldValue)</td></tr>
-<tr class="memdesc:a4ea3241bc710d57e5f755efda62288ad"><td class="mdescLeft">&#160;</td><td class="mdescRight">Put float field for field name. <a href="classxb_1_1xbDbf.html#a4ea3241bc710d57e5f755efda62288ad">More...</a><br /></td></tr>
-<tr class="separator:a4ea3241bc710d57e5f755efda62288ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af78ef1fba949463ff7f829d3cffc4555"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#af78ef1fba949463ff7f829d3cffc4555">GetDateField</a> (xbInt16 iFieldNo, <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;dt) const</td></tr>
-<tr class="memdesc:af78ef1fba949463ff7f829d3cffc4555"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get <a class="el" href="classxb_1_1xbDate.html" title="xbDate class.">xbDate</a> field for field number. <a href="classxb_1_1xbDbf.html#af78ef1fba949463ff7f829d3cffc4555">More...</a><br /></td></tr>
-<tr class="separator:af78ef1fba949463ff7f829d3cffc4555"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac624e06a97666bfd64b4f252b4548b36"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ac624e06a97666bfd64b4f252b4548b36">GetDateField</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;dt) const</td></tr>
-<tr class="memdesc:ac624e06a97666bfd64b4f252b4548b36"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get <a class="el" href="classxb_1_1xbDate.html" title="xbDate class.">xbDate</a> field for field name. <a href="classxb_1_1xbDbf.html#ac624e06a97666bfd64b4f252b4548b36">More...</a><br /></td></tr>
-<tr class="separator:ac624e06a97666bfd64b4f252b4548b36"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a873f04af528a9d81e6a367a59d998ec5"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a873f04af528a9d81e6a367a59d998ec5">PutDateField</a> (xbInt16 iFieldNo, const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;dt)</td></tr>
-<tr class="memdesc:a873f04af528a9d81e6a367a59d998ec5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Put date field for field number. <a href="classxb_1_1xbDbf.html#a873f04af528a9d81e6a367a59d998ec5">More...</a><br /></td></tr>
-<tr class="separator:a873f04af528a9d81e6a367a59d998ec5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a571b36b3a940b1a16d5e834f329b33b9"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a571b36b3a940b1a16d5e834f329b33b9">PutDateField</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;dt)</td></tr>
-<tr class="memdesc:a571b36b3a940b1a16d5e834f329b33b9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Put date field for field name. <a href="classxb_1_1xbDbf.html#a571b36b3a940b1a16d5e834f329b33b9">More...</a><br /></td></tr>
-<tr class="separator:a571b36b3a940b1a16d5e834f329b33b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a060acbfaa8d528f86cb59301814b414a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a060acbfaa8d528f86cb59301814b414a">SetHomeFolders</a> ()</td></tr>
-<tr class="memdesc:a060acbfaa8d528f86cb59301814b414a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create Home Folders. <a href="classxb_1_1xbFile.html#a060acbfaa8d528f86cb59301814b414a">More...</a><br /></td></tr>
-<tr class="separator:a060acbfaa8d528f86cb59301814b414a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aae9a2ddb0adb8165b4ac2b6a28a932f7"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aae9a2ddb0adb8165b4ac2b6a28a932f7">CreateUniqueFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDirIn, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sExtIn, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFqnOut)</td></tr>
-<tr class="memdesc:aae9a2ddb0adb8165b4ac2b6a28a932f7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a unique file name. <a href="classxb_1_1xbFile.html#aae9a2ddb0adb8165b4ac2b6a28a932f7">More...</a><br /></td></tr>
-<tr class="separator:aae9a2ddb0adb8165b4ac2b6a28a932f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae5ffabde2c88ea58324f27e471f6bfc0"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ae5ffabde2c88ea58324f27e471f6bfc0">CreateUniqueFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDirIn, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sExtIn, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFqnOut, xbInt16 iOption)</td></tr>
-<tr class="memdesc:ae5ffabde2c88ea58324f27e471f6bfc0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a unique file name. <a href="classxb_1_1xbFile.html#ae5ffabde2c88ea58324f27e471f6bfc0">More...</a><br /></td></tr>
-<tr class="separator:ae5ffabde2c88ea58324f27e471f6bfc0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:acd0fb2166b2bff7e8a1cf65a7bc8be1e"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#acd0fb2166b2bff7e8a1cf65a7bc8be1e">GetDirectory</a> () const</td></tr>
-<tr class="memdesc:acd0fb2166b2bff7e8a1cf65a7bc8be1e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the directory name. <a href="classxb_1_1xbFile.html#acd0fb2166b2bff7e8a1cf65a7bc8be1e">More...</a><br /></td></tr>
-<tr class="separator:acd0fb2166b2bff7e8a1cf65a7bc8be1e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac95cb882ccbcdedc9a233c6ad9fed07a"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ac95cb882ccbcdedc9a233c6ad9fed07a">GetFileName</a> () const</td></tr>
-<tr class="memdesc:ac95cb882ccbcdedc9a233c6ad9fed07a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the file name. <a href="classxb_1_1xbFile.html#ac95cb882ccbcdedc9a233c6ad9fed07a">More...</a><br /></td></tr>
-<tr class="separator:ac95cb882ccbcdedc9a233c6ad9fed07a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a31b4e641f93206ba23e2a5a27491dcd4"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a31b4e641f93206ba23e2a5a27491dcd4">GetFqFileName</a> () const</td></tr>
-<tr class="memdesc:a31b4e641f93206ba23e2a5a27491dcd4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the fully qualified file name. <a href="classxb_1_1xbFile.html#a31b4e641f93206ba23e2a5a27491dcd4">More...</a><br /></td></tr>
-<tr class="separator:a31b4e641f93206ba23e2a5a27491dcd4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae78a85255488bc78964c16946dbaead3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ae78a85255488bc78964c16946dbaead3">SetDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDirectory)</td></tr>
-<tr class="memdesc:ae78a85255488bc78964c16946dbaead3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the directory. <a href="classxb_1_1xbFile.html#ae78a85255488bc78964c16946dbaead3">More...</a><br /></td></tr>
-<tr class="separator:ae78a85255488bc78964c16946dbaead3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5419eb27e56822f828b2b88a9502a636"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5419eb27e56822f828b2b88a9502a636">SetFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName)</td></tr>
-<tr class="memdesc:a5419eb27e56822f828b2b88a9502a636"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the filename. <a href="classxb_1_1xbFile.html#a5419eb27e56822f828b2b88a9502a636">More...</a><br /></td></tr>
-<tr class="separator:a5419eb27e56822f828b2b88a9502a636"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aee832fa11db2077a532f49e1329bd05a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aee832fa11db2077a532f49e1329bd05a">SetFqFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFqName)</td></tr>
-<tr class="memdesc:aee832fa11db2077a532f49e1329bd05a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the fully qualifed filename. <a href="classxb_1_1xbFile.html#aee832fa11db2077a532f49e1329bd05a">More...</a><br /></td></tr>
-<tr class="separator:aee832fa11db2077a532f49e1329bd05a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a638e14262410a1627819f016a16cdce2"><td class="memItemLeft" align="right" valign="top">xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a638e14262410a1627819f016a16cdce2">GetBlockSize</a> () const</td></tr>
-<tr class="memdesc:a638e14262410a1627819f016a16cdce2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the block size. <a href="classxb_1_1xbFile.html#a638e14262410a1627819f016a16cdce2">More...</a><br /></td></tr>
-<tr class="separator:a638e14262410a1627819f016a16cdce2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a991c5676a6f38fa752435390989f413e"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a991c5676a6f38fa752435390989f413e">SetBlockSize</a> (xbUInt32 ulBlockSize)</td></tr>
-<tr class="memdesc:a991c5676a6f38fa752435390989f413e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the block size. <a href="classxb_1_1xbFile.html#a991c5676a6f38fa752435390989f413e">More...</a><br /></td></tr>
-<tr class="separator:a991c5676a6f38fa752435390989f413e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3c500dc9dac22c49496e4b29386b2dd3"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a3c500dc9dac22c49496e4b29386b2dd3">GetOpenMode</a> () const</td></tr>
-<tr class="memdesc:a3c500dc9dac22c49496e4b29386b2dd3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the open mode of the file. <a href="classxb_1_1xbFile.html#a3c500dc9dac22c49496e4b29386b2dd3">More...</a><br /></td></tr>
-<tr class="separator:a3c500dc9dac22c49496e4b29386b2dd3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9b63e05b77f477ff6109ff7b9432c1b6"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a9b63e05b77f477ff6109ff7b9432c1b6">GetShareMode</a> () const</td></tr>
-<tr class="memdesc:a9b63e05b77f477ff6109ff7b9432c1b6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the share mode of the file. <a href="classxb_1_1xbFile.html#a9b63e05b77f477ff6109ff7b9432c1b6">More...</a><br /></td></tr>
-<tr class="separator:a9b63e05b77f477ff6109ff7b9432c1b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a60c53998e3d1b694134b20a87bc9bf5a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a60c53998e3d1b694134b20a87bc9bf5a">GetFileDirPart</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileDirPartOut) const</td></tr>
-<tr class="memdesc:a60c53998e3d1b694134b20a87bc9bf5a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the directory part of the file name. <a href="classxb_1_1xbFile.html#a60c53998e3d1b694134b20a87bc9bf5a">More...</a><br /></td></tr>
-<tr class="separator:a60c53998e3d1b694134b20a87bc9bf5a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af5127c92892816e9bbc5c19653c4147a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#af5127c92892816e9bbc5c19653c4147a">GetFileDirPart</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sCompleteFileNameIn, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileDirPartOut) const</td></tr>
-<tr class="memdesc:af5127c92892816e9bbc5c19653c4147a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the directory part of the file name. <a href="classxb_1_1xbFile.html#af5127c92892816e9bbc5c19653c4147a">More...</a><br /></td></tr>
-<tr class="separator:af5127c92892816e9bbc5c19653c4147a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a57a9222e5cbb51019d4eeb2c3ac89fa2"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a57a9222e5cbb51019d4eeb2c3ac89fa2">GetFileExtPart</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileExtPartOut) const</td></tr>
-<tr class="memdesc:a57a9222e5cbb51019d4eeb2c3ac89fa2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the extension part of the file name. <a href="classxb_1_1xbFile.html#a57a9222e5cbb51019d4eeb2c3ac89fa2">More...</a><br /></td></tr>
-<tr class="separator:a57a9222e5cbb51019d4eeb2c3ac89fa2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab289b6ffe955321160c1f90220c22e25"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ab289b6ffe955321160c1f90220c22e25">GetFileExtPart</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sCompleteFileNameIn, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileExtPartOut) const</td></tr>
-<tr class="memdesc:ab289b6ffe955321160c1f90220c22e25"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the extension part of the file name. <a href="classxb_1_1xbFile.html#ab289b6ffe955321160c1f90220c22e25">More...</a><br /></td></tr>
-<tr class="separator:ab289b6ffe955321160c1f90220c22e25"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a81422b3dd52763d2cc6c77237ec9af0a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a81422b3dd52763d2cc6c77237ec9af0a">GetFileNamePart</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileNamePartOut) const</td></tr>
-<tr class="memdesc:a81422b3dd52763d2cc6c77237ec9af0a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the name part of the file name. <a href="classxb_1_1xbFile.html#a81422b3dd52763d2cc6c77237ec9af0a">More...</a><br /></td></tr>
-<tr class="separator:a81422b3dd52763d2cc6c77237ec9af0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6110763c5ae996b72c7a62c15bdecc73"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a6110763c5ae996b72c7a62c15bdecc73">GetFileNamePart</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sCompleteFileNameIn, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileNamePartOut) const</td></tr>
-<tr class="memdesc:a6110763c5ae996b72c7a62c15bdecc73"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the name part of the file name. <a href="classxb_1_1xbFile.html#a6110763c5ae996b72c7a62c15bdecc73">More...</a><br /></td></tr>
-<tr class="separator:a6110763c5ae996b72c7a62c15bdecc73"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5548236d38d43b89ae29b9a015b1f678"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5548236d38d43b89ae29b9a015b1f678">GetFileType</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileType) const</td></tr>
-<tr class="memdesc:a5548236d38d43b89ae29b9a015b1f678"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the file type aka Capitalized file extension. <a href="classxb_1_1xbFile.html#a5548236d38d43b89ae29b9a015b1f678">More...</a><br /></td></tr>
-<tr class="separator:a5548236d38d43b89ae29b9a015b1f678"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aaf2e697751a0beff41432a66bb83fb5e"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aaf2e697751a0beff41432a66bb83fb5e">GetXbaseFileTypeByte</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 &amp;iVersion)</td></tr>
-<tr class="memdesc:aaf2e697751a0beff41432a66bb83fb5e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the file type byte and version of the dbf file. <a href="classxb_1_1xbFile.html#aaf2e697751a0beff41432a66bb83fb5e">More...</a><br /></td></tr>
-<tr class="separator:aaf2e697751a0beff41432a66bb83fb5e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7af337808919680b90710ad5e8a99232"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a7af337808919680b90710ad5e8a99232">GetXbaseFileTypeByte</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, unsigned char &amp;cFileTypeByte)</td></tr>
-<tr class="memdesc:a7af337808919680b90710ad5e8a99232"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the file type byte and version of the dbf file. <a href="classxb_1_1xbFile.html#a7af337808919680b90710ad5e8a99232">More...</a><br /></td></tr>
-<tr class="separator:a7af337808919680b90710ad5e8a99232"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a78aebdd21d3de46a450d5f835e3027f6"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a78aebdd21d3de46a450d5f835e3027f6">GetXbaseFileTypeByte</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, unsigned char &amp;cFileTypeByte, xbInt16 &amp;iVersion)</td></tr>
-<tr class="memdesc:a78aebdd21d3de46a450d5f835e3027f6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the file type byte and version of the dbf file. <a href="classxb_1_1xbFile.html#a78aebdd21d3de46a450d5f835e3027f6">More...</a><br /></td></tr>
-<tr class="separator:a78aebdd21d3de46a450d5f835e3027f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae2b6ac26018dc28f77afbb3f008c3f66"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ae2b6ac26018dc28f77afbb3f008c3f66">DetermineXbaseTableVersion</a> (unsigned char cFileTypeByte) const</td></tr>
-<tr class="memdesc:ae2b6ac26018dc28f77afbb3f008c3f66"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determine xbase dbf version. <a href="classxb_1_1xbFile.html#ae2b6ac26018dc28f77afbb3f008c3f66">More...</a><br /></td></tr>
-<tr class="separator:ae2b6ac26018dc28f77afbb3f008c3f66"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5a740033664c9ad2611c90e2a6d0c2d3"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5a740033664c9ad2611c90e2a6d0c2d3">DetermineXbaseMemoVersion</a> (unsigned char cFileTypeByte) const</td></tr>
-<tr class="memdesc:a5a740033664c9ad2611c90e2a6d0c2d3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determine which version the memo (dbt) file is. <a href="classxb_1_1xbFile.html#a5a740033664c9ad2611c90e2a6d0c2d3">More...</a><br /></td></tr>
-<tr class="separator:a5a740033664c9ad2611c90e2a6d0c2d3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a78bd8a11dce102647095baf3aff2b006"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a78bd8a11dce102647095baf3aff2b006">FileExists</a> () const</td></tr>
-<tr class="memdesc:a78bd8a11dce102647095baf3aff2b006"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if a file exists. <a href="classxb_1_1xbFile.html#a78bd8a11dce102647095baf3aff2b006">More...</a><br /></td></tr>
-<tr class="separator:a78bd8a11dce102647095baf3aff2b006"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a174d8a6aabc9cfcd32fedbd1e5b13ddd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a174d8a6aabc9cfcd32fedbd1e5b13ddd">FileExists</a> (xbInt16 iOption) const</td></tr>
-<tr class="memdesc:a174d8a6aabc9cfcd32fedbd1e5b13ddd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if a file exists. <a href="classxb_1_1xbFile.html#a174d8a6aabc9cfcd32fedbd1e5b13ddd">More...</a><br /></td></tr>
-<tr class="separator:a174d8a6aabc9cfcd32fedbd1e5b13ddd"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a61130b4fbf4cf9d5972dcb4993de2f94"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a61130b4fbf4cf9d5972dcb4993de2f94">FileExists</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName) const</td></tr>
-<tr class="memdesc:a61130b4fbf4cf9d5972dcb4993de2f94"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if a file exists. <a href="classxb_1_1xbFile.html#a61130b4fbf4cf9d5972dcb4993de2f94">More...</a><br /></td></tr>
-<tr class="separator:a61130b4fbf4cf9d5972dcb4993de2f94"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0592168f39a10f2a401a88ef781f6148"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a0592168f39a10f2a401a88ef781f6148">FileExists</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iOption) const</td></tr>
-<tr class="memdesc:a0592168f39a10f2a401a88ef781f6148"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if a file exists. <a href="classxb_1_1xbFile.html#a0592168f39a10f2a401a88ef781f6148">More...</a><br /></td></tr>
-<tr class="separator:a0592168f39a10f2a401a88ef781f6148"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7fa837938a32dc9ca3fbc81cbaf50f59"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a7fa837938a32dc9ca3fbc81cbaf50f59">FileIsOpen</a> () const</td></tr>
-<tr class="memdesc:a7fa837938a32dc9ca3fbc81cbaf50f59"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if file is open. <a href="classxb_1_1xbFile.html#a7fa837938a32dc9ca3fbc81cbaf50f59">More...</a><br /></td></tr>
-<tr class="separator:a7fa837938a32dc9ca3fbc81cbaf50f59"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa1bb80340abc7a5c22f87f878e9dc825"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aa1bb80340abc7a5c22f87f878e9dc825">ReadBlock</a> (xbUInt32 ulBlockNo, size_t readSize, void *buf)</td></tr>
-<tr class="memdesc:aa1bb80340abc7a5c22f87f878e9dc825"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read a block of data from file. <a href="classxb_1_1xbFile.html#aa1bb80340abc7a5c22f87f878e9dc825">More...</a><br /></td></tr>
-<tr class="separator:aa1bb80340abc7a5c22f87f878e9dc825"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aef696b1c4c0ef5338e818599f695d485"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aef696b1c4c0ef5338e818599f695d485">ReadBlock</a> (xbUInt32 ulBlockNo, xbUInt32 ulBlockSize, size_t readSize, void *buf)</td></tr>
-<tr class="memdesc:aef696b1c4c0ef5338e818599f695d485"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read a block of data from file. <a href="classxb_1_1xbFile.html#aef696b1c4c0ef5338e818599f695d485">More...</a><br /></td></tr>
-<tr class="separator:aef696b1c4c0ef5338e818599f695d485"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5d871dcfecc2b4338f7a13722aab766c"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5d871dcfecc2b4338f7a13722aab766c">WriteBlock</a> (xbUInt32 ulBlockNo, size_t writeSize, void *buf)</td></tr>
-<tr class="memdesc:a5d871dcfecc2b4338f7a13722aab766c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a block of data to file. <a href="classxb_1_1xbFile.html#a5d871dcfecc2b4338f7a13722aab766c">More...</a><br /></td></tr>
-<tr class="separator:a5d871dcfecc2b4338f7a13722aab766c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a50b63c39e49d44e52078038027b24cc5"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a50b63c39e49d44e52078038027b24cc5">GetFileSize</a> (xbUInt64 &amp;ullFileSize)</td></tr>
-<tr class="memdesc:a50b63c39e49d44e52078038027b24cc5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the size of the file as reported by the OS. <a href="classxb_1_1xbFile.html#a50b63c39e49d44e52078038027b24cc5">More...</a><br /></td></tr>
-<tr class="separator:a50b63c39e49d44e52078038027b24cc5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a02df78f4c90313243f508fc56b95aba8"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a02df78f4c90313243f508fc56b95aba8">GetFileMtime</a> (time_t &amp;mtime)</td></tr>
-<tr class="memdesc:a02df78f4c90313243f508fc56b95aba8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the time of last file modification timestamp as reported by the OS. <a href="classxb_1_1xbFile.html#a02df78f4c90313243f508fc56b95aba8">More...</a><br /></td></tr>
-<tr class="separator:a02df78f4c90313243f508fc56b95aba8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab14e4a11427f5efb81cba1dd32bd1aa1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ab14e4a11427f5efb81cba1dd32bd1aa1">eGetDouble</a> (const char *p) const</td></tr>
-<tr class="memdesc:ab14e4a11427f5efb81cba1dd32bd1aa1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable double value. <a href="classxb_1_1xbFile.html#ab14e4a11427f5efb81cba1dd32bd1aa1">More...</a><br /></td></tr>
-<tr class="separator:ab14e4a11427f5efb81cba1dd32bd1aa1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a60b24a5afc984c586bf384c7e915ba0d"><td class="memItemLeft" align="right" valign="top">xbInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a60b24a5afc984c586bf384c7e915ba0d">eGetInt32</a> (const char *p) const</td></tr>
-<tr class="memdesc:a60b24a5afc984c586bf384c7e915ba0d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable long value. <a href="classxb_1_1xbFile.html#a60b24a5afc984c586bf384c7e915ba0d">More...</a><br /></td></tr>
-<tr class="separator:a60b24a5afc984c586bf384c7e915ba0d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a78f052529d39a18deaface5a0d47d0b0"><td class="memItemLeft" align="right" valign="top">xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a78f052529d39a18deaface5a0d47d0b0">eGetUInt32</a> (const char *p) const</td></tr>
-<tr class="memdesc:a78f052529d39a18deaface5a0d47d0b0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable unsigned long value. <a href="classxb_1_1xbFile.html#a78f052529d39a18deaface5a0d47d0b0">More...</a><br /></td></tr>
-<tr class="separator:a78f052529d39a18deaface5a0d47d0b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac40c991110ddc6fb30a72d90f4652762"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ac40c991110ddc6fb30a72d90f4652762">eGetInt16</a> (const char *p) const</td></tr>
-<tr class="memdesc:ac40c991110ddc6fb30a72d90f4652762"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable short value. <a href="classxb_1_1xbFile.html#ac40c991110ddc6fb30a72d90f4652762">More...</a><br /></td></tr>
-<tr class="separator:ac40c991110ddc6fb30a72d90f4652762"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a936ade458e6d5e6d29f9b5031888d189"><td class="memItemLeft" align="right" valign="top">xbUInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a936ade458e6d5e6d29f9b5031888d189">eGetUInt16</a> (const char *p) const</td></tr>
-<tr class="memdesc:a936ade458e6d5e6d29f9b5031888d189"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable unsigned short value. <a href="classxb_1_1xbFile.html#a936ade458e6d5e6d29f9b5031888d189">More...</a><br /></td></tr>
-<tr class="separator:a936ade458e6d5e6d29f9b5031888d189"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a98b6ff533ae93f90c977a2ba23eeb105"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a98b6ff533ae93f90c977a2ba23eeb105">ePutDouble</a> (char *p, <a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> d)</td></tr>
-<tr class="memdesc:a98b6ff533ae93f90c977a2ba23eeb105"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable double value to memory location. <a href="classxb_1_1xbFile.html#a98b6ff533ae93f90c977a2ba23eeb105">More...</a><br /></td></tr>
-<tr class="separator:a98b6ff533ae93f90c977a2ba23eeb105"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a19c37f76a2ccbb45019cb0fc373d3f46"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a19c37f76a2ccbb45019cb0fc373d3f46">ePutInt32</a> (char *p, xbInt32 l)</td></tr>
-<tr class="memdesc:a19c37f76a2ccbb45019cb0fc373d3f46"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable long value to memory location. <a href="classxb_1_1xbFile.html#a19c37f76a2ccbb45019cb0fc373d3f46">More...</a><br /></td></tr>
-<tr class="separator:a19c37f76a2ccbb45019cb0fc373d3f46"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa3f6ceae4b96f24875d86848bf13a173"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aa3f6ceae4b96f24875d86848bf13a173">ePutUInt32</a> (char *p, xbUInt32 ul)</td></tr>
-<tr class="memdesc:aa3f6ceae4b96f24875d86848bf13a173"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable unsigned long value to memory location. <a href="classxb_1_1xbFile.html#aa3f6ceae4b96f24875d86848bf13a173">More...</a><br /></td></tr>
-<tr class="separator:aa3f6ceae4b96f24875d86848bf13a173"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a29130f12739ac8fa837f4eaedf1338b2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a29130f12739ac8fa837f4eaedf1338b2">ePutInt16</a> (char *p, xbInt16 s)</td></tr>
-<tr class="memdesc:a29130f12739ac8fa837f4eaedf1338b2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable short value to memory location. <a href="classxb_1_1xbFile.html#a29130f12739ac8fa837f4eaedf1338b2">More...</a><br /></td></tr>
-<tr class="separator:a29130f12739ac8fa837f4eaedf1338b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a65e9839f92b96eac7b0d071fac3bbe40"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a65e9839f92b96eac7b0d071fac3bbe40">ePutUInt16</a> (char *p, xbUInt16 s)</td></tr>
-<tr class="memdesc:a65e9839f92b96eac7b0d071fac3bbe40"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable unsigned short value to memory location. <a href="classxb_1_1xbFile.html#a65e9839f92b96eac7b0d071fac3bbe40">More...</a><br /></td></tr>
-<tr class="separator:a65e9839f92b96eac7b0d071fac3bbe40"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a18830b5755d74818f60d9c7ce38ddf2d"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a18830b5755d74818f60d9c7ce38ddf2d">xbFclose</a> ()</td></tr>
-<tr class="memdesc:a18830b5755d74818f60d9c7ce38ddf2d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fclose. <a href="classxb_1_1xbFile.html#a18830b5755d74818f60d9c7ce38ddf2d">More...</a><br /></td></tr>
-<tr class="separator:a18830b5755d74818f60d9c7ce38ddf2d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af5b6356832d2a67212070a1aa605f170"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#af5b6356832d2a67212070a1aa605f170">xbFeof</a> ()</td></tr>
-<tr class="memdesc:af5b6356832d2a67212070a1aa605f170"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary feof. <a href="classxb_1_1xbFile.html#af5b6356832d2a67212070a1aa605f170">More...</a><br /></td></tr>
-<tr class="separator:af5b6356832d2a67212070a1aa605f170"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad205184d43409f04216540ae22f15009"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ad205184d43409f04216540ae22f15009">xbFflush</a> ()</td></tr>
-<tr class="memdesc:ad205184d43409f04216540ae22f15009"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fflush. <a href="classxb_1_1xbFile.html#ad205184d43409f04216540ae22f15009">More...</a><br /></td></tr>
-<tr class="separator:ad205184d43409f04216540ae22f15009"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:afb1c584d2895ffb7834df80aea7eb1e4"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#afb1c584d2895ffb7834df80aea7eb1e4">xbFgetc</a> (xbInt32 &amp;c)</td></tr>
-<tr class="memdesc:afb1c584d2895ffb7834df80aea7eb1e4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fgetc. <a href="classxb_1_1xbFile.html#afb1c584d2895ffb7834df80aea7eb1e4">More...</a><br /></td></tr>
-<tr class="separator:afb1c584d2895ffb7834df80aea7eb1e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5ee229bda4d7d6695e122200e581e7a6"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5ee229bda4d7d6695e122200e581e7a6">xbFgetc</a> (char &amp;c)</td></tr>
-<tr class="memdesc:a5ee229bda4d7d6695e122200e581e7a6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fgetc. <a href="classxb_1_1xbFile.html#a5ee229bda4d7d6695e122200e581e7a6">More...</a><br /></td></tr>
-<tr class="separator:a5ee229bda4d7d6695e122200e581e7a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7cdfef5ede9ac98d44a28a6b7a70972c"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a7cdfef5ede9ac98d44a28a6b7a70972c">xbFopen</a> (xbInt16 iOpenMode)</td></tr>
-<tr class="separator:a7cdfef5ede9ac98d44a28a6b7a70972c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0548cedf0f26b7d8ac221f75b0cd048c"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a0548cedf0f26b7d8ac221f75b0cd048c">xbFopen</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sOpenMode, xbInt16 iShareMode)</td></tr>
-<tr class="memdesc:a0548cedf0f26b7d8ac221f75b0cd048c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fopen. <a href="classxb_1_1xbFile.html#a0548cedf0f26b7d8ac221f75b0cd048c">More...</a><br /></td></tr>
-<tr class="separator:a0548cedf0f26b7d8ac221f75b0cd048c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aabd113333b49c36cad23244b392baab4"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aabd113333b49c36cad23244b392baab4">xbFopen</a> (xbInt16 iOpenMode, xbInt16 iShareMode)</td></tr>
-<tr class="memdesc:aabd113333b49c36cad23244b392baab4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fopen. <a href="classxb_1_1xbFile.html#aabd113333b49c36cad23244b392baab4">More...</a><br /></td></tr>
-<tr class="separator:aabd113333b49c36cad23244b392baab4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab0fa19686ca8953ff4b556fb5b249135"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ab0fa19686ca8953ff4b556fb5b249135">xbFopen</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sMode, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iShareMode)</td></tr>
-<tr class="memdesc:ab0fa19686ca8953ff4b556fb5b249135"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fopen. <a href="classxb_1_1xbFile.html#ab0fa19686ca8953ff4b556fb5b249135">More...</a><br /></td></tr>
-<tr class="separator:ab0fa19686ca8953ff4b556fb5b249135"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af2e940c78956e5cb6824f9a1bc404896"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#af2e940c78956e5cb6824f9a1bc404896">xbFputc</a> (xbInt32 c)</td></tr>
-<tr class="memdesc:af2e940c78956e5cb6824f9a1bc404896"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fputc. <a href="classxb_1_1xbFile.html#af2e940c78956e5cb6824f9a1bc404896">More...</a><br /></td></tr>
-<tr class="separator:af2e940c78956e5cb6824f9a1bc404896"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a863f74cf17df8186d88586b4d2a6441a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a863f74cf17df8186d88586b4d2a6441a">xbFputc</a> (xbInt32 c, xbInt32 iNoTimes)</td></tr>
-<tr class="memdesc:a863f74cf17df8186d88586b4d2a6441a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fputc. <a href="classxb_1_1xbFile.html#a863f74cf17df8186d88586b4d2a6441a">More...</a><br /></td></tr>
-<tr class="separator:a863f74cf17df8186d88586b4d2a6441a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a698f3b40216778562e639e6ca1a47573"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a698f3b40216778562e639e6ca1a47573">xbFputs</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;s)</td></tr>
-<tr class="memdesc:a698f3b40216778562e639e6ca1a47573"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fputs. <a href="classxb_1_1xbFile.html#a698f3b40216778562e639e6ca1a47573">More...</a><br /></td></tr>
-<tr class="separator:a698f3b40216778562e639e6ca1a47573"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab4f6afaa1f77539f27a4f05c26e54e2f"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ab4f6afaa1f77539f27a4f05c26e54e2f">xbFread</a> (void *ptr, size_t size, size_t nmemb)</td></tr>
-<tr class="memdesc:ab4f6afaa1f77539f27a4f05c26e54e2f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fread. <a href="classxb_1_1xbFile.html#ab4f6afaa1f77539f27a4f05c26e54e2f">More...</a><br /></td></tr>
-<tr class="separator:ab4f6afaa1f77539f27a4f05c26e54e2f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad245955ace26e5dde85fd4373b30d026"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ad245955ace26e5dde85fd4373b30d026">xbFgets</a> (size_t lSize, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLine)</td></tr>
-<tr class="memdesc:ad245955ace26e5dde85fd4373b30d026"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fgets. <a href="classxb_1_1xbFile.html#ad245955ace26e5dde85fd4373b30d026">More...</a><br /></td></tr>
-<tr class="separator:ad245955ace26e5dde85fd4373b30d026"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0e1c06aedfa7fbcb92e117f891edd13b"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a0e1c06aedfa7fbcb92e117f891edd13b">xbFtell</a> ()</td></tr>
-<tr class="memdesc:a0e1c06aedfa7fbcb92e117f891edd13b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary ftell. <a href="classxb_1_1xbFile.html#a0e1c06aedfa7fbcb92e117f891edd13b">More...</a><br /></td></tr>
-<tr class="separator:a0e1c06aedfa7fbcb92e117f891edd13b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5337ab8918df240910c0d19b4f298e3d"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5337ab8918df240910c0d19b4f298e3d">xbFseek</a> (xbInt64 llOffset, xbInt32 whence)</td></tr>
-<tr class="memdesc:a5337ab8918df240910c0d19b4f298e3d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fseek. <a href="classxb_1_1xbFile.html#a5337ab8918df240910c0d19b4f298e3d">More...</a><br /></td></tr>
-<tr class="separator:a5337ab8918df240910c0d19b4f298e3d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9891b792f585a696f38a5cf959e30918"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a9891b792f585a696f38a5cf959e30918">xbFTurnOffFileBuffering</a> ()</td></tr>
-<tr class="memdesc:a9891b792f585a696f38a5cf959e30918"><td class="mdescLeft">&#160;</td><td class="mdescRight">Turn off file buffering. <a href="classxb_1_1xbFile.html#a9891b792f585a696f38a5cf959e30918">More...</a><br /></td></tr>
-<tr class="separator:a9891b792f585a696f38a5cf959e30918"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6aadd871d1782944703fed773d44b85f"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a6aadd871d1782944703fed773d44b85f">xbFwrite</a> (const void *ptr, size_t lSize, size_t lNmemb)</td></tr>
-<tr class="memdesc:a6aadd871d1782944703fed773d44b85f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fwrite. <a href="classxb_1_1xbFile.html#a6aadd871d1782944703fed773d44b85f">More...</a><br /></td></tr>
-<tr class="separator:a6aadd871d1782944703fed773d44b85f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a08463f506f425c2385acbe1a561506e9"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a08463f506f425c2385acbe1a561506e9">xbReadUntil</a> (const char cDelim, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sOut)</td></tr>
-<tr class="memdesc:a08463f506f425c2385acbe1a561506e9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read file until a particular character is encountered on input stream. <a href="classxb_1_1xbFile.html#a08463f506f425c2385acbe1a561506e9">More...</a><br /></td></tr>
-<tr class="separator:a08463f506f425c2385acbe1a561506e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6d919366c2ec95e529906bf8842cbf07"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a6d919366c2ec95e529906bf8842cbf07">xbRemove</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iOption)</td></tr>
-<tr class="memdesc:a6d919366c2ec95e529906bf8842cbf07"><td class="mdescLeft">&#160;</td><td class="mdescRight">Delete file. <a href="classxb_1_1xbFile.html#a6d919366c2ec95e529906bf8842cbf07">More...</a><br /></td></tr>
-<tr class="separator:a6d919366c2ec95e529906bf8842cbf07"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a58f6a6751fdf7e9549c273bb75d93eb5"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a58f6a6751fdf7e9549c273bb75d93eb5">xbRemove</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName)</td></tr>
-<tr class="memdesc:a58f6a6751fdf7e9549c273bb75d93eb5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Delete file. <a href="classxb_1_1xbFile.html#a58f6a6751fdf7e9549c273bb75d93eb5">More...</a><br /></td></tr>
-<tr class="separator:a58f6a6751fdf7e9549c273bb75d93eb5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab3c668a8570433188382d31d7c60bd48"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ab3c668a8570433188382d31d7c60bd48">xbRemove</a> ()</td></tr>
-<tr class="memdesc:ab3c668a8570433188382d31d7c60bd48"><td class="mdescLeft">&#160;</td><td class="mdescRight">Delete file. <a href="classxb_1_1xbFile.html#ab3c668a8570433188382d31d7c60bd48">More...</a><br /></td></tr>
-<tr class="separator:ab3c668a8570433188382d31d7c60bd48"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:afc8ce113aa72611a278233f9bb170012"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#afc8ce113aa72611a278233f9bb170012">xbRename</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sOldName, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sNewName)</td></tr>
-<tr class="memdesc:afc8ce113aa72611a278233f9bb170012"><td class="mdescLeft">&#160;</td><td class="mdescRight">Rename file. <a href="classxb_1_1xbFile.html#afc8ce113aa72611a278233f9bb170012">More...</a><br /></td></tr>
-<tr class="separator:afc8ce113aa72611a278233f9bb170012"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7996b6e084665c37c3892faea64b3505"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a7996b6e084665c37c3892faea64b3505">xbRewind</a> ()</td></tr>
-<tr class="memdesc:a7996b6e084665c37c3892faea64b3505"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for rewind. <a href="classxb_1_1xbFile.html#a7996b6e084665c37c3892faea64b3505">More...</a><br /></td></tr>
-<tr class="separator:a7996b6e084665c37c3892faea64b3505"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a518bfcbfa3699d883cf89affee383296"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a518bfcbfa3699d883cf89affee383296">xbTruncate</a> (xbInt64 llSize)</td></tr>
-<tr class="memdesc:a518bfcbfa3699d883cf89affee383296"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for ftruncate. <a href="classxb_1_1xbFile.html#a518bfcbfa3699d883cf89affee383296">More...</a><br /></td></tr>
-<tr class="separator:a518bfcbfa3699d883cf89affee383296"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a361e3cc318bbf1c4d10f069e0800a24e"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a361e3cc318bbf1c4d10f069e0800a24e">NameSuffixMissing</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iOption) const</td></tr>
-<tr class="memdesc:a361e3cc318bbf1c4d10f069e0800a24e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines status of file extension. <a href="classxb_1_1xbFile.html#a361e3cc318bbf1c4d10f069e0800a24e">More...</a><br /></td></tr>
-<tr class="separator:a361e3cc318bbf1c4d10f069e0800a24e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a97dfa59ab9a8e9f17454da0faceb023d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a97dfa59ab9a8e9f17454da0faceb023d">DisplayError</a> (xbInt16 ErrorCode) const</td></tr>
-<tr class="memdesc:a97dfa59ab9a8e9f17454da0faceb023d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Display error message on console for a given error number. <a href="classxb_1_1xbSsv.html#a97dfa59ab9a8e9f17454da0faceb023d">More...</a><br /></td></tr>
-<tr class="separator:a97dfa59ab9a8e9f17454da0faceb023d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6fbb9c3a550ab0b3378f9586a57791d2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a6fbb9c3a550ab0b3378f9586a57791d2">GetDefaultDateFormat</a> () const</td></tr>
-<tr class="memdesc:a6fbb9c3a550ab0b3378f9586a57791d2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the default date format. <a href="classxb_1_1xbSsv.html#a6fbb9c3a550ab0b3378f9586a57791d2">More...</a><br /></td></tr>
-<tr class="separator:a6fbb9c3a550ab0b3378f9586a57791d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">GetDataDirectory</a> () const</td></tr>
-<tr class="memdesc:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current data directory. <a href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">More...</a><br /></td></tr>
-<tr class="separator:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a49cd162f066eef2b829ba7c9f6620243"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">GetEndianType</a> () const</td></tr>
-<tr class="memdesc:a49cd162f066eef2b829ba7c9f6620243"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the Endian type. <a href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">More...</a><br /></td></tr>
-<tr class="separator:a49cd162f066eef2b829ba7c9f6620243"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a56961d2a67b8e7470098626ac4dac7e4"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">GetErrorMessage</a> (xbInt16 ErrorCode) const</td></tr>
-<tr class="memdesc:a56961d2a67b8e7470098626ac4dac7e4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get an error message. <a href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">More...</a><br /></td></tr>
-<tr class="separator:a56961d2a67b8e7470098626ac4dac7e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">SetDataDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDataDirectory)</td></tr>
-<tr class="memdesc:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the data directory. <a href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">More...</a><br /></td></tr>
-<tr class="separator:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5f74db23f8902846d581935c7db73f9c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">SetDefaultDateFormat</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDefaultDateFormat)</td></tr>
-<tr class="memdesc:a5f74db23f8902846d581935c7db73f9c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the default date format. <a href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">More...</a><br /></td></tr>
-<tr class="separator:a5f74db23f8902846d581935c7db73f9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a62e4fd0a5888665c76bbbad962794e72"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72">BitSet</a> (unsigned char c, xbInt16 iBitNo) const</td></tr>
-<tr class="memdesc:a62e4fd0a5888665c76bbbad962794e72"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check a bit in a one byte field and see if it is set. <a href="classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72">More...</a><br /></td></tr>
-<tr class="separator:a62e4fd0a5888665c76bbbad962794e72"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a8551b15a3ce4fa2a40d698db01f4a9ae"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a8551b15a3ce4fa2a40d698db01f4a9ae">BitDump</a> (unsigned char c) const</td></tr>
-<tr class="separator:a8551b15a3ce4fa2a40d698db01f4a9ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aba1395b8e4c7f28c3614061de6e49190"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#aba1395b8e4c7f28c3614061de6e49190">BitDump</a> (char c) const</td></tr>
-<tr class="separator:aba1395b8e4c7f28c3614061de6e49190"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6982f973e81587b04916f4509746aaf5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a6982f973e81587b04916f4509746aaf5">GetDefaultAutoCommit</a> () const</td></tr>
-<tr class="memdesc:a6982f973e81587b04916f4509746aaf5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the default auto commit setting. <a href="classxb_1_1xbSsv.html#a6982f973e81587b04916f4509746aaf5">More...</a><br /></td></tr>
-<tr class="separator:a6982f973e81587b04916f4509746aaf5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">SetDefaultAutoCommit</a> (<a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bDefaultAutoCommit)</td></tr>
-<tr class="memdesc:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the default auto commit. <a href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">More...</a><br /></td></tr>
-<tr class="separator:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">GetHomeDir</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sHomeDirOut)</td></tr>
-<tr class="memdesc:abc9c06c95d71fbad8294e1ae8862cea9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get home directory. <a href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">More...</a><br /></td></tr>
-<tr class="separator:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4822315bded3969b59aeeb683c373051"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a4822315bded3969b59aeeb683c373051">GetLogDirectory</a> () const</td></tr>
-<tr class="separator:a4822315bded3969b59aeeb683c373051"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:afaef09435be73b3111f5edbd7091d861"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#afaef09435be73b3111f5edbd7091d861">GetLogFileName</a> () const</td></tr>
-<tr class="separator:afaef09435be73b3111f5edbd7091d861"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7b992ed97281bf25b5b66f5df686225e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a7b992ed97281bf25b5b66f5df686225e">SetLogDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLogDirectory)</td></tr>
-<tr class="separator:a7b992ed97281bf25b5b66f5df686225e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">GetMultiUser</a> () const</td></tr>
-<tr class="memdesc:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the multi user setting. <a href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">More...</a><br /></td></tr>
-<tr class="separator:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aba6e59512f7172dd55dcf92059e5928c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#aba6e59512f7172dd55dcf92059e5928c">SetMultiUser</a> (<a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bMultiUser)</td></tr>
-<tr class="memdesc:aba6e59512f7172dd55dcf92059e5928c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the multi user setting. <a href="classxb_1_1xbSsv.html#aba6e59512f7172dd55dcf92059e5928c">More...</a><br /></td></tr>
-<tr class="separator:aba6e59512f7172dd55dcf92059e5928c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-static-attribs" name="pub-static-attribs"></a>
-Static Public Attributes</h2></td></tr>
-<tr class="memitem:a6219f1b5e24ea12fe158cd5aea56988e"><td class="memItemLeft" align="right" valign="top">static const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a6219f1b5e24ea12fe158cd5aea56988e">ErrorCodeText</a> []</td></tr>
-<tr class="separator:a6219f1b5e24ea12fe158cd5aea56988e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-methods" name="pro-methods"></a>
-Protected Member Functions</h2></td></tr>
-<tr class="memitem:aabd146c0e1054ab905ec96aedd84b02e"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#aabd146c0e1054ab905ec96aedd84b02e">GetRawField</a> (xbInt16 iFieldNo, char *Buf, xbUInt32 BufSize, xbInt16 iRecBufSw) const</td></tr>
-<tr class="memdesc:aabd146c0e1054ab905ec96aedd84b02e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get raw field data for field number. <a href="classxb_1_1xbDbf.html#aabd146c0e1054ab905ec96aedd84b02e">More...</a><br /></td></tr>
-<tr class="separator:aabd146c0e1054ab905ec96aedd84b02e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad06fe0f7975fb81125d27d82504e6829"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ad06fe0f7975fb81125d27d82504e6829">InitVars</a> ()</td></tr>
-<tr class="separator:ad06fe0f7975fb81125d27d82504e6829"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7e63e852418f337eb7c44de5dcd50323"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a7e63e852418f337eb7c44de5dcd50323">SetVersion</a> ()=0</td></tr>
-<tr class="separator:a7e63e852418f337eb7c44de5dcd50323"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aba5dcac3b4092261bc1669740cdd669d"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#aba5dcac3b4092261bc1669740cdd669d">ValidateSchema</a> (<a class="el" href="structxb_1_1xbSchema.html">xbSchema</a> *s)=0</td></tr>
-<tr class="separator:aba5dcac3b4092261bc1669740cdd669d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a44e1410109ef7b3d11a6af4b704b62b2"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a44e1410109ef7b3d11a6af4b704b62b2">WriteHeader</a> (xbInt16 iPositionOption, xbInt16 iWriteOption)</td></tr>
-<tr class="separator:a44e1410109ef7b3d11a6af4b704b62b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a904ec348fd029d4a76e72b8fde636108"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a904ec348fd029d4a76e72b8fde636108">SetEndianType</a> ()</td></tr>
-<tr class="memdesc:a904ec348fd029d4a76e72b8fde636108"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the endian type. <a href="classxb_1_1xbSsv.html#a904ec348fd029d4a76e72b8fde636108">More...</a><br /></td></tr>
-<tr class="separator:a904ec348fd029d4a76e72b8fde636108"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-attribs" name="pro-attribs"></a>
-Protected Attributes</h2></td></tr>
-<tr class="memitem:afcd99924606be0a9e1e25180bcd1abf8"><td class="memItemLeft" align="right" valign="top">xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#afcd99924606be0a9e1e25180bcd1abf8">ulCurRec</a></td></tr>
-<tr class="separator:afcd99924606be0a9e1e25180bcd1abf8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab506450954bc86e7bf1d7c4efe681f43"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ab506450954bc86e7bf1d7c4efe681f43">iAutoCommit</a></td></tr>
-<tr class="separator:ab506450954bc86e7bf1d7c4efe681f43"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a15f495446f0d75bcf2fa89e3b699d388"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a15f495446f0d75bcf2fa89e3b699d388">iFileVersion</a></td></tr>
-<tr class="separator:a15f495446f0d75bcf2fa89e3b699d388"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a73f9c792d0a769e2e604c1855245a276"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a73f9c792d0a769e2e604c1855245a276">sAlias</a></td></tr>
-<tr class="separator:a73f9c792d0a769e2e604c1855245a276"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5056757614c39f725cc775332494966a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a5056757614c39f725cc775332494966a">iNoOfFields</a></td></tr>
-<tr class="separator:a5056757614c39f725cc775332494966a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6d8e193da3ca414eef1e8866ec5ca81b"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a6d8e193da3ca414eef1e8866ec5ca81b">iDbfStatus</a></td></tr>
-<tr class="separator:a6d8e193da3ca414eef1e8866ec5ca81b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad8c8b5eb12063bb898da1b2cc02cfce7"><td class="memItemLeft" align="right" valign="top">xbSchemaRec *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ad8c8b5eb12063bb898da1b2cc02cfce7">SchemaPtr</a></td></tr>
-<tr class="separator:ad8c8b5eb12063bb898da1b2cc02cfce7"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a8a9b3bce0b741e73473d3ebbd6e6f1cd"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a8a9b3bce0b741e73473d3ebbd6e6f1cd">RecBuf</a></td></tr>
-<tr class="separator:a8a9b3bce0b741e73473d3ebbd6e6f1cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a353ebfc8a2960ef827f429ec74025606"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a353ebfc8a2960ef827f429ec74025606">RecBuf2</a></td></tr>
-<tr class="separator:a353ebfc8a2960ef827f429ec74025606"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3a262abf658e5fa968b57ef457a69470"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a3a262abf658e5fa968b57ef457a69470">cVersion</a></td></tr>
-<tr class="separator:a3a262abf658e5fa968b57ef457a69470"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4fcd6a86ddd32d4a9d76a4074573440a"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a4fcd6a86ddd32d4a9d76a4074573440a">cUpdateYY</a></td></tr>
-<tr class="separator:a4fcd6a86ddd32d4a9d76a4074573440a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9340a5e8ee53eb0f3b6601eec2d71e1b"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a9340a5e8ee53eb0f3b6601eec2d71e1b">cUpdateMM</a></td></tr>
-<tr class="separator:a9340a5e8ee53eb0f3b6601eec2d71e1b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6021789d314cd41488991e708fcd0df2"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a6021789d314cd41488991e708fcd0df2">cUpdateDD</a></td></tr>
-<tr class="separator:a6021789d314cd41488991e708fcd0df2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:acb594ab61dd35b17bdf28394083f8e87"><td class="memItemLeft" align="right" valign="top">xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#acb594ab61dd35b17bdf28394083f8e87">ulNoOfRecs</a></td></tr>
-<tr class="separator:acb594ab61dd35b17bdf28394083f8e87"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a62f5fa9149ae0f6dc75642823de66918"><td class="memItemLeft" align="right" valign="top">xbUInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a62f5fa9149ae0f6dc75642823de66918">uiHeaderLen</a></td></tr>
-<tr class="separator:a62f5fa9149ae0f6dc75642823de66918"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1760e222567e2c849f9c799b9d896e91"><td class="memItemLeft" align="right" valign="top">xbUInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a1760e222567e2c849f9c799b9d896e91">uiRecordLen</a></td></tr>
-<tr class="separator:a1760e222567e2c849f9c799b9d896e91"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac3c89fc3bc6a6abf385478a8adbed970"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ac3c89fc3bc6a6abf385478a8adbed970">cTransactionFlag</a></td></tr>
-<tr class="separator:ac3c89fc3bc6a6abf385478a8adbed970"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a8734e799707582f022fc341d515650f4"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a8734e799707582f022fc341d515650f4">cEncryptionFlag</a></td></tr>
-<tr class="separator:a8734e799707582f022fc341d515650f4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad59074633641e03647e54d2b66c9102b"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ad59074633641e03647e54d2b66c9102b">cIndexFlag</a></td></tr>
-<tr class="separator:ad59074633641e03647e54d2b66c9102b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aea1dfe5cbd1f9cdbcfc8eb04b2c3d5f1"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#aea1dfe5cbd1f9cdbcfc8eb04b2c3d5f1">cLangDriver</a></td></tr>
-<tr class="separator:aea1dfe5cbd1f9cdbcfc8eb04b2c3d5f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae39a67ea391b46055d4ca299cb222004"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ae39a67ea391b46055d4ca299cb222004">xbase</a></td></tr>
-<tr class="separator:ae39a67ea391b46055d4ca299cb222004"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-static-attribs" name="pro-static-attribs"></a>
-Static Protected Attributes</h2></td></tr>
-<tr class="memitem:a5849e813f5e8e1cd180f0366637adbf3"><td class="memItemLeft" align="right" valign="top">static xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a5849e813f5e8e1cd180f0366637adbf3">iEndianType</a> = 0</td></tr>
-<tr class="separator:a5849e813f5e8e1cd180f0366637adbf3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9dec3164c3b264882df634915ecf21da"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classxb_1_1xbString.html">xbString</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a9dec3164c3b264882df634915ecf21da">sNullString</a> = &quot;&quot;</td></tr>
-<tr class="separator:a9dec3164c3b264882df634915ecf21da"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p >Base class for handling dbf files/tables. </p>
-<p >The <a class="el" href="classxb_1_1xbDbf.html" title="Base class for handling dbf files/tables.">xbDbf</a> class is used as a base class for accessing dbf files. <br />
- In line with relational theory, a each dbf file can be considered as a table. The documentation uses the terms dbf and table interchangeably.<br />
-</p>
-<p >This module handles methods for accessing and updating dbf files.</p>
-<p ><br />
- The class is designed to support additional file layouts with a minimal amount of effort. If you are wanting to update the library to support a new dbf file type not currently supported by the library, create a derived class using <a class="el" href="classxb_1_1xbDbf.html" title="Base class for handling dbf files/tables.">xbDbf</a> as a base class and modify methods needed to support the new dbf file version.<br />
- See the following for examples on how to start on this:<br />
- xbDbf3 is a derived class from <a class="el" href="classxb_1_1xbDbf.html" title="Base class for handling dbf files/tables.">xbDbf</a> and supports the original Dbase III+ file version.<br />
- xbDbf4 is a derived class from <a class="el" href="classxb_1_1xbDbf.html" title="Base class for handling dbf files/tables.">xbDbf</a> and supports the original Dbase IV file version.<br />
- </p>
-</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
-<a id="a84a75f80bc0e9b8a22b728767949c204" name="a84a75f80bc0e9b8a22b728767949c204"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a84a75f80bc0e9b8a22b728767949c204">&#9670;&nbsp;</a></span>xbDbf()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xb::xbDbf::xbDbf </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *&#160;</td>
- <td class="paramname"><em>x</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Constructor. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">x</td><td>Pointer to xbXbase </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a7eb87521fba8a939c613056d9918d880" name="a7eb87521fba8a939c613056d9918d880"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a7eb87521fba8a939c613056d9918d880">&#9670;&nbsp;</a></span>~xbDbf()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xb::xbDbf::~xbDbf </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Destructor. </p>
-
-</div>
-</div>
-<h2 class="groupheader">Member Function Documentation</h2>
-<a id="a4edcf31390fbdc8c3558004770fd9f2f" name="a4edcf31390fbdc8c3558004770fd9f2f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4edcf31390fbdc8c3558004770fd9f2f">&#9670;&nbsp;</a></span>Abort()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::Abort </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Abort any uncommited changes for the current record buffer. </p>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a5b412dd796241673eb1aa2c93513d69b" name="a5b412dd796241673eb1aa2c93513d69b"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5b412dd796241673eb1aa2c93513d69b">&#9670;&nbsp;</a></span>AppendRecord()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::AppendRecord </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Append the current record to the data file. </p>
-<p >This method attempts to append the contents of the current record buffer to the end of the DBF file, updates the file date, number of records in the file and updates any open indices associated with this data file.<br />
-</p>
-<p >To add a record, an application would typically blank the record buffer, update various fields in the record buffer, then append the record.<br />
-</p>
-<p >The append method performs the following tasks:<br />
- 1) Create new index key values<br />
- 2) Lock the table<br />
- 3) Lock append bytes<br />
- 4) Lock indices<br />
- 5) Read the dbf header<br />
- 6) Check for dup keys<br />
- 7) Calc last update date, no of recs<br />
- 8) Add keys<br />
- 9) Unlock indices<br />
- 10) Update file header<br />
- 11) Unlock file header<br />
- 12) Append record<br />
- 13) Unlock append bytes<br />
-</p>
-<p >Note: Locking memo files is not needed as the memo file updates are handled outside of the append method.<br />
-</p>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="aba1395b8e4c7f28c3614061de6e49190" name="aba1395b8e4c7f28c3614061de6e49190"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aba1395b8e4c7f28c3614061de6e49190">&#9670;&nbsp;</a></span>BitDump() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::BitDump </td>
- <td>(</td>
- <td class="paramtype">char&#160;</td>
- <td class="paramname"><em>c</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a8551b15a3ce4fa2a40d698db01f4a9ae" name="a8551b15a3ce4fa2a40d698db01f4a9ae"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a8551b15a3ce4fa2a40d698db01f4a9ae">&#9670;&nbsp;</a></span>BitDump() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::BitDump </td>
- <td>(</td>
- <td class="paramtype">unsigned char&#160;</td>
- <td class="paramname"><em>c</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a62e4fd0a5888665c76bbbad962794e72" name="a62e4fd0a5888665c76bbbad962794e72"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a62e4fd0a5888665c76bbbad962794e72">&#9670;&nbsp;</a></span>BitSet()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbSsv::BitSet </td>
- <td>(</td>
- <td class="paramtype">unsigned char&#160;</td>
- <td class="paramname"><em>c</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iBitNo</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Check a bit in a one byte field and see if it is set. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>One byte char field to examine. </td></tr>
- <tr><td class="paramname">iBitNo</td><td>which bit to examine. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue Bit is set<br />
- xbFalse Bit is not set </dd></dl>
-
-</div>
-</div>
-<a id="a78da5a3d2011a3f2e7618cbdd3ba02d6" name="a78da5a3d2011a3f2e7618cbdd3ba02d6"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a78da5a3d2011a3f2e7618cbdd3ba02d6">&#9670;&nbsp;</a></span>BlankRecord()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::BlankRecord </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Blank the record buffer. </p>
-<p >This method would typically be called to initialize the record buffer before updates are applied to append a new record.</p>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="ad68d73113e54e1b5f326e90f45e9989d" name="ad68d73113e54e1b5f326e90f45e9989d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ad68d73113e54e1b5f326e90f45e9989d">&#9670;&nbsp;</a></span>Close()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::Close </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Close DBF file/table. </p>
-<p >This routine flushes any remaining updates to disk, closes the DBF file and any associated memo and index files.</p>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="abd69532c885ab72bcf3fb5066b318f4f" name="abd69532c885ab72bcf3fb5066b318f4f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#abd69532c885ab72bcf3fb5066b318f4f">&#9670;&nbsp;</a></span>Commit()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::Commit </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Commit updates to disk. </p>
-<p >This routine commits any pending updates to disk.</p>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a829c615a130a1fdf609d93438d8a6264" name="a829c615a130a1fdf609d93438d8a6264"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a829c615a130a1fdf609d93438d8a6264">&#9670;&nbsp;</a></span>CopyDbfStructure()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::CopyDbfStructure </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td>
- <td class="paramname"><em>dNewTable</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sNewTableName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sNewTableAlias</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iOverlay</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iShareMode</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Copy table (dbf) file structure. </p>
-<p >This routine will copy the structure of a dbf file and if successful return a pointer to the new table in an open state.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">dNewTable</td><td>Reference to new table object. </td></tr>
- <tr><td class="paramname">sNewTableName</td><td>New table (dbf) name. </td></tr>
- <tr><td class="paramname">sNewTableAlias</td><td>Alias name of new table. </td></tr>
- <tr><td class="paramname">iOverlay</td><td>xbTrue - Overlay existing file.<br />
- xbFalse - Don't overlay existing file. </td></tr>
- <tr><td class="paramname">iShareMode</td><td>XB_SINGLE_USER<br />
- XB_MULTI_USER </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> Copy DBF structure </dd></dl>
-
-</div>
-</div>
-<a id="a73e41bfe679dd06ab16c436652df93f1" name="a73e41bfe679dd06ab16c436652df93f1"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a73e41bfe679dd06ab16c436652df93f1">&#9670;&nbsp;</a></span>CreateTable()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">virtual xbInt16 xb::xbDbf::CreateTable </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sTableName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sAlias</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="structxb_1_1xbSchema.html">xbSchema</a> *&#160;</td>
- <td class="paramname"><em>pSchema</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iOverlay</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iShareMode</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="aae9a2ddb0adb8165b4ac2b6a28a932f7" name="aae9a2ddb0adb8165b4ac2b6a28a932f7"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aae9a2ddb0adb8165b4ac2b6a28a932f7">&#9670;&nbsp;</a></span>CreateUniqueFileName() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::CreateUniqueFileName </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sDirIn</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sExtIn</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFqnOut</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Create a unique file name. </p>
-<p >Given a directory and file extension as inputs, create a unique file name.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sDirIn</td><td>Directory </td></tr>
- <tr><td class="paramname">sExtIn</td><td>File Extension </td></tr>
- <tr><td class="paramname">sFqnOut</td><td>A fully qualifed unique file name as output </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="ae5ffabde2c88ea58324f27e471f6bfc0" name="ae5ffabde2c88ea58324f27e471f6bfc0"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae5ffabde2c88ea58324f27e471f6bfc0">&#9670;&nbsp;</a></span>CreateUniqueFileName() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::CreateUniqueFileName </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sDirIn</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sExtIn</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFqnOut</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iOption</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Create a unique file name. </p>
-<p >Given a directory and file extension as inputs, create a unique file name.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sDirIn</td><td>Directory </td></tr>
- <tr><td class="paramname">sExtIn</td><td>File Extension </td></tr>
- <tr><td class="paramname">iOption</td><td>0 - look only for one file for a given directory and extension<br />
- 1 - if file name extension is "dbf" or "DBF", verify unique dbt or DBT (memo) file is also available<br />
- </td></tr>
- <tr><td class="paramname">sFqnOut</td><td>A fully qualifed unique file name as output </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a01c26b67e312be1e674b3da710e031b9" name="a01c26b67e312be1e674b3da710e031b9"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a01c26b67e312be1e674b3da710e031b9">&#9670;&nbsp;</a></span>DeleteAll()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::DeleteAll </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iOption</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Delete or undelete all records in a dbf file (table). </p>
-<p >This routine deletes or un-deletes all records. The xbase file format contains a leading one byte character used for flagging a record as deleted. When a record is deleted, it's not physically removed from the file, the first byte is flagged as deleted.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iOption</td><td>0 - Delete all records.<br />
- 1 - Un-delete all deleted records. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a3067fdfa3a7a5c15651f6e89d1102176" name="a3067fdfa3a7a5c15651f6e89d1102176"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a3067fdfa3a7a5c15651f6e89d1102176">&#9670;&nbsp;</a></span>DeleteAllRecords()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::DeleteAllRecords </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Delete all records. </p>
-<p >This routine deletes all the records in a table / dbf file.</p>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="acd8c10579229f3a2e2c5fdb7fcef90db" name="acd8c10579229f3a2e2c5fdb7fcef90db"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#acd8c10579229f3a2e2c5fdb7fcef90db">&#9670;&nbsp;</a></span>DeleteRecord()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::DeleteRecord </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Delete the current record. </p>
-<p >This routine flags the current record for deletion if it's not already flagged.</p>
-<dl class="section return"><dt>Returns</dt><dd>XB_NO_ERROR<br />
- XB_INVALID_RECORD </dd></dl>
-
-</div>
-</div>
-<a id="a4085ed4f049d976124d8edc3d3c56397" name="a4085ed4f049d976124d8edc3d3c56397"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4085ed4f049d976124d8edc3d3c56397">&#9670;&nbsp;</a></span>DeleteTable()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::DeleteTable </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Delete a table. </p>
-<p >This routine deletes a given table, associated index files if any, the memo file if any and the .INF file if any. </p><dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a5a740033664c9ad2611c90e2a6d0c2d3" name="a5a740033664c9ad2611c90e2a6d0c2d3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5a740033664c9ad2611c90e2a6d0c2d3">&#9670;&nbsp;</a></span>DetermineXbaseMemoVersion()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::DetermineXbaseMemoVersion </td>
- <td>(</td>
- <td class="paramtype">unsigned char&#160;</td>
- <td class="paramname"><em>cFileTypeByte</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Determine which version the memo (dbt) file is. </p>
-<p >This routine uses the first byte in the dbf file to determine which memo file version is in use. The main difference between version 3 and 4 is that version 4 will reuse blocks if they become available. Version 3 does not.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">cFileTypeByte</td><td>is an output field and is one of:<br />
- <br />
- 0 - none<br />
- 3 - Dbase III+<br />
- 4 - Dbase IV<br />
-</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="ae2b6ac26018dc28f77afbb3f008c3f66" name="ae2b6ac26018dc28f77afbb3f008c3f66"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae2b6ac26018dc28f77afbb3f008c3f66">&#9670;&nbsp;</a></span>DetermineXbaseTableVersion()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::DetermineXbaseTableVersion </td>
- <td>(</td>
- <td class="paramtype">unsigned char&#160;</td>
- <td class="paramname"><em>cFileTypeByte</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Determine xbase dbf version. </p>
-<p >This routine is used to determine which version of the Xbase classes can be used for a given DBF file.<br />
-</p>
-<p >It attempts to use the highest version compiled into the library.<br />
-</p>
-<p >References:<br />
- This routine uses the first byte from the dbf file.<br />
- Per DBase documentation:<br />
- Valid dBASE for Windows table file, bits 0-2 indicate version number: 3 for dBASE Level 5, 4 for dBASE Level 7.<br />
- Bit 3 and bit 7 indicate presence of a dBASE IV or dBASE for Windows memo file;<br />
- Bits 4-6 indicate the presence of a dBASE IV SQL table;<br />
- Bit 7 indicates the presence of any .DBT memo file (either a dBASE III PLUS type or a dBASE IV or dBASE for Windows memo file).<br />
- <br />
- Bachmann spec (used extensively in library build), page 7 - does not match DBase documentation<br />
- <br />
- returns<br />
- 0 - unknown<br />
- 3 - Dbase level 3<br />
- 4 - Dbase level 4<br />
- 5 - Dbase Level 5 (future)<br />
- 7 - Dbase Level 7 (future)<br />
- <br />
- 1x - Clipper files (future)<br />
- 2x - Foxbase files (future)<br />
- <br />
- </p>
-
-</div>
-</div>
-<a id="a97dfa59ab9a8e9f17454da0faceb023d" name="a97dfa59ab9a8e9f17454da0faceb023d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a97dfa59ab9a8e9f17454da0faceb023d">&#9670;&nbsp;</a></span>DisplayError()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::DisplayError </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iErrorCode</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Display error message on console for a given error number. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iErrorCode</td><td>Error number to reference </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a309b5b1fb6a5c048c4bfb404d011ac55" name="a309b5b1fb6a5c048c4bfb404d011ac55"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a309b5b1fb6a5c048c4bfb404d011ac55">&#9670;&nbsp;</a></span>DumpHeader()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::DumpHeader </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iOption</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Dump dbf file header. </p>
-<p >This routine dumps dbf header information to the console.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iOption</td><td>1 = Print header only<br />
- 2 = Field data only<br />
- 3 = Header and Field data<br />
- 4 = Header, Field and Memo header data if applicable </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="aba30399f15885a07f87f904c0d0656fa" name="aba30399f15885a07f87f904c0d0656fa"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aba30399f15885a07f87f904c0d0656fa">&#9670;&nbsp;</a></span>DumpRecord()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::DumpRecord </td>
- <td>(</td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ulRecNo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iOutputDest</em> = <code>0</code>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iOutputFmt</em> = <code>0</code>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Dump record. </p>
-<p >Dump the contents of the specified record</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">ulRecNo</td><td>Record number of record to be dumped. </td></tr>
- <tr><td class="paramname">iOutputDest</td><td>0 = stdout<br />
- 1 = Syslog<br />
- 2 = Both<br />
-</td></tr>
- <tr><td class="paramname">iOutputFmt</td><td>0 = with field names<br />
- 1 = 1 line per rec, no field names<br />
- 2 = 1 line per rec, first line is a list of field names. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="ab14e4a11427f5efb81cba1dd32bd1aa1" name="ab14e4a11427f5efb81cba1dd32bd1aa1"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab14e4a11427f5efb81cba1dd32bd1aa1">&#9670;&nbsp;</a></span>eGetDouble()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> xb::xbFile::eGetDouble </td>
- <td>(</td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>p</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get a portable double value. </p>
-<p >This routine returns a double value from an 8 byte character stream, accounting for endian type.</p>
-<p >Converts a double (64 bit floating point) value stored at p from a portable format to the machine format.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">p</td><td>pointer to memory containing the portable double value</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>the double value. </dd></dl>
-
-</div>
-</div>
-<a id="ac40c991110ddc6fb30a72d90f4652762" name="ac40c991110ddc6fb30a72d90f4652762"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac40c991110ddc6fb30a72d90f4652762">&#9670;&nbsp;</a></span>eGetInt16()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::eGetInt16 </td>
- <td>(</td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>p</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get a portable short value. </p>
-<p >This routine returns a short int value from a 2 byte character stream, accounting for endian type.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">p</td><td>pointer to memory containing the portable long value</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>the short value. </dd></dl>
-
-</div>
-</div>
-<a id="a60b24a5afc984c586bf384c7e915ba0d" name="a60b24a5afc984c586bf384c7e915ba0d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a60b24a5afc984c586bf384c7e915ba0d">&#9670;&nbsp;</a></span>eGetInt32()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt32 xb::xbFile::eGetInt32 </td>
- <td>(</td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>p</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get a portable long value. </p>
-<p >This routine returns a long int value from a 4 byte character stream, accounting for endian type.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">p</td><td>pointer to memory containing the portable long value</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>the long value. </dd></dl>
-
-</div>
-</div>
-<a id="a936ade458e6d5e6d29f9b5031888d189" name="a936ade458e6d5e6d29f9b5031888d189"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a936ade458e6d5e6d29f9b5031888d189">&#9670;&nbsp;</a></span>eGetUInt16()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbUInt16 xb::xbFile::eGetUInt16 </td>
- <td>(</td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>p</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get a portable unsigned short value. </p>
-<p >This routine returns a short unsigned int value from a 2 byte character stream, accounting for endian type.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">p</td><td>pointer to memory containing the portable long value</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>the short value. </dd></dl>
-
-</div>
-</div>
-<a id="a78f052529d39a18deaface5a0d47d0b0" name="a78f052529d39a18deaface5a0d47d0b0"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a78f052529d39a18deaface5a0d47d0b0">&#9670;&nbsp;</a></span>eGetUInt32()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbUInt32 xb::xbFile::eGetUInt32 </td>
- <td>(</td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>p</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get a portable unsigned long value. </p>
-<p >This routine returns an unsigned long int value from a 4 byte character stream, accounting for endian type.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">p</td><td>pointer to memory containing the portable long value</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>the unsigned long value. </dd></dl>
-
-</div>
-</div>
-<a id="a98b6ff533ae93f90c977a2ba23eeb105" name="a98b6ff533ae93f90c977a2ba23eeb105"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a98b6ff533ae93f90c977a2ba23eeb105">&#9670;&nbsp;</a></span>ePutDouble()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbFile::ePutDouble </td>
- <td>(</td>
- <td class="paramtype">char *&#160;</td>
- <td class="paramname"><em>c</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a>&#160;</td>
- <td class="paramname"><em>d</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Write a portable double value to memory location. </p>
-<p >Converts a double (64 bit floating point) value from machine format to a portable format and stores the converted value in the memory referenced by c.</p>
-<p >This routine puts a double value to an 8 byte character stream</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>Pointer to memory to hold converted value </td></tr>
- <tr><td class="paramname">d</td><td>Input value to be converted </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a29130f12739ac8fa837f4eaedf1338b2" name="a29130f12739ac8fa837f4eaedf1338b2"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a29130f12739ac8fa837f4eaedf1338b2">&#9670;&nbsp;</a></span>ePutInt16()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbFile::ePutInt16 </td>
- <td>(</td>
- <td class="paramtype">char *&#160;</td>
- <td class="paramname"><em>c</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>s</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Write a portable short value to memory location. </p>
-<p >Converts a short (16 bit integer) value from machine format to a portable format and stores the converted value in the memory referenced by c.</p>
-<p >This routine puts a short value to a 2 byte character stream</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>Pointer to memory to hold converted value </td></tr>
- <tr><td class="paramname">s</td><td>Input value to be converted </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a19c37f76a2ccbb45019cb0fc373d3f46" name="a19c37f76a2ccbb45019cb0fc373d3f46"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a19c37f76a2ccbb45019cb0fc373d3f46">&#9670;&nbsp;</a></span>ePutInt32()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbFile::ePutInt32 </td>
- <td>(</td>
- <td class="paramtype">char *&#160;</td>
- <td class="paramname"><em>c</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt32&#160;</td>
- <td class="paramname"><em>l</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Write a portable long value to memory location. </p>
-<p >Converts a long (32 bit integer) value from machine format to a portable format and stores the converted value in the memory referenced by c.</p>
-<p >This routine puts a long value to a 4 byte character stream.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>Pointer to memory to hold converted value </td></tr>
- <tr><td class="paramname">l</td><td>Input value to be converted </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a65e9839f92b96eac7b0d071fac3bbe40" name="a65e9839f92b96eac7b0d071fac3bbe40"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a65e9839f92b96eac7b0d071fac3bbe40">&#9670;&nbsp;</a></span>ePutUInt16()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbFile::ePutUInt16 </td>
- <td>(</td>
- <td class="paramtype">char *&#160;</td>
- <td class="paramname"><em>c</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbUInt16&#160;</td>
- <td class="paramname"><em>s</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Write a portable unsigned short value to memory location. </p>
-<p >Converts an unsigned short (16 bit integer) value from machine format to a portable format and stores the converted value in the memory referenced by c.</p>
-<p >This routine puts an unsigned short value to a 2 byte character stream</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>Pointer to memory to hold converted value </td></tr>
- <tr><td class="paramname">s</td><td>Input value to be converted </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="aa3f6ceae4b96f24875d86848bf13a173" name="aa3f6ceae4b96f24875d86848bf13a173"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aa3f6ceae4b96f24875d86848bf13a173">&#9670;&nbsp;</a></span>ePutUInt32()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbFile::ePutUInt32 </td>
- <td>(</td>
- <td class="paramtype">char *&#160;</td>
- <td class="paramname"><em>c</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ul</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Write a portable unsigned long value to memory location. </p>
-<p >Converts an unsigned long (32 bit integer) value from machine format to a portable format and stores the converted value in the memory referenced by c.</p>
-<p >This routine puts an unsigned long value to a 4 byte character stream.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>Pointer to memory to hold converted value </td></tr>
- <tr><td class="paramname">ul</td><td>Input value to be converted </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a78bd8a11dce102647095baf3aff2b006" name="a78bd8a11dce102647095baf3aff2b006"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a78bd8a11dce102647095baf3aff2b006">&#9670;&nbsp;</a></span>FileExists() <span class="overload">[1/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbFile::FileExists </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Determines if a file exists. </p>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue if file exists<br />
- xbFalse if file does not exist </dd></dl>
-
-</div>
-</div>
-<a id="a61130b4fbf4cf9d5972dcb4993de2f94" name="a61130b4fbf4cf9d5972dcb4993de2f94"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a61130b4fbf4cf9d5972dcb4993de2f94">&#9670;&nbsp;</a></span>FileExists() <span class="overload">[2/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbFile::FileExists </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFileName</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Determines if a file exists. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFileName</td><td>- file name to check for</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue if file exists<br />
- xbFalse if file does not exist </dd></dl>
-
-</div>
-</div>
-<a id="a0592168f39a10f2a401a88ef781f6148" name="a0592168f39a10f2a401a88ef781f6148"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0592168f39a10f2a401a88ef781f6148">&#9670;&nbsp;</a></span>FileExists() <span class="overload">[3/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbFile::FileExists </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFileName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iOption</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Determines if a file exists. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFileName</td><td>- file name to check for </td></tr>
- <tr><td class="paramname">iOption</td><td>if 1, assume this is a request for a dbf file and check for the a dbt memo file also, returns true if both files are found</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue if both dbf and dbt files exist<br />
- xbFalse if file does not exist </dd></dl>
-
-</div>
-</div>
-<a id="a174d8a6aabc9cfcd32fedbd1e5b13ddd" name="a174d8a6aabc9cfcd32fedbd1e5b13ddd"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a174d8a6aabc9cfcd32fedbd1e5b13ddd">&#9670;&nbsp;</a></span>FileExists() <span class="overload">[4/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbFile::FileExists </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iOption</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Determines if a file exists. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iOption</td><td>if 1, assume this is a request for a dbf file and check for the a dbt memo file also, returns true if both files are found</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue if both files exist<br />
- xbFalse if file does not exist </dd></dl>
-
-</div>
-</div>
-<a id="a7fa837938a32dc9ca3fbc81cbaf50f59" name="a7fa837938a32dc9ca3fbc81cbaf50f59"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a7fa837938a32dc9ca3fbc81cbaf50f59">&#9670;&nbsp;</a></span>FileIsOpen()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbFile::FileIsOpen </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Determines if file is open. </p>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue if file is open<br />
- xbFalse if file is not open </dd></dl>
-
-</div>
-</div>
-<a id="abb9e20c5efacd4fea80f1515abbc6b55" name="abb9e20c5efacd4fea80f1515abbc6b55"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#abb9e20c5efacd4fea80f1515abbc6b55">&#9670;&nbsp;</a></span>GetAutoCommit() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetAutoCommit </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get auto commit setting. </p>
-<p >This routine returns the table setting if set, otherwise returns the system level setting.</p>
-<dl class="section return"><dt>Returns</dt><dd>Not 0 - Auto commit on for this table.<br />
- 0 - Auto commit off for this table. </dd></dl>
-
-</div>
-</div>
-<a id="ae0c00226fd2ea7a67f101e795467ed68" name="ae0c00226fd2ea7a67f101e795467ed68"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae0c00226fd2ea7a67f101e795467ed68">&#9670;&nbsp;</a></span>GetAutoCommit() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetAutoCommit </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iOption</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get auto commit setting. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iOption</td><td>0 - Specific setting for this table<br />
- 1 - If this table should be auto updated (takes DBMS setting into account) </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Not 0 - Auto commit on for this table.<br />
- 0 - Auto commit off for this table. </dd></dl>
-
-</div>
-</div>
-<a id="a638e14262410a1627819f016a16cdce2" name="a638e14262410a1627819f016a16cdce2"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a638e14262410a1627819f016a16cdce2">&#9670;&nbsp;</a></span>GetBlockSize()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbUInt32 xb::xbFile::GetBlockSize </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the block size. </p>
-<dl class="section return"><dt>Returns</dt><dd>Block Size </dd></dl>
-
-</div>
-</div>
-<a id="ad0827a43c025c1184ffebab74cc9e779" name="ad0827a43c025c1184ffebab74cc9e779"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ad0827a43c025c1184ffebab74cc9e779">&#9670;&nbsp;</a></span>GetBof()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbDbf::GetBof </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get a pointer to the current index object. </p>
-<dl class="section return"><dt>Returns</dt><dd>Pointer to current index.</dd></dl>
-<p>Return true if dbf file empty or positioned to the first record</p>
-<dl class="section return"><dt>Returns</dt><dd>Returns true if dbf file is empty or positioned on the first record. </dd></dl>
-
-</div>
-</div>
-<a id="a643a80a3792a52760c8e09ba18719503" name="a643a80a3792a52760c8e09ba18719503"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a643a80a3792a52760c8e09ba18719503">&#9670;&nbsp;</a></span>GetCurRecNo()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbUInt32 xb::xbDbf::GetCurRecNo </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Return the current record number. </p>
-<dl class="section return"><dt>Returns</dt><dd>Returns the current record number. </dd></dl>
-
-</div>
-</div>
-<a id="a1d803a4bfc8ba0561267a0bf9e51f7d9" name="a1d803a4bfc8ba0561267a0bf9e51f7d9"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1d803a4bfc8ba0561267a0bf9e51f7d9">&#9670;&nbsp;</a></span>GetDataDirectory()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetDataDirectory </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the current data directory. </p>
-<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing the current data directory where the database files are stored. </dd></dl>
-
-</div>
-</div>
-<a id="ac624e06a97666bfd64b4f252b4548b36" name="ac624e06a97666bfd64b4f252b4548b36"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac624e06a97666bfd64b4f252b4548b36">&#9670;&nbsp;</a></span>GetDateField() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetDateField </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFieldName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;&#160;</td>
- <td class="paramname"><em>dtFieldValue</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get <a class="el" href="classxb_1_1xbDate.html" title="xbDate class.">xbDate</a> field for field name. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFieldName</td><td>Name of field to retrieve. </td></tr>
- <tr><td class="paramname">dtFieldValue</td><td>Output field value. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="af78ef1fba949463ff7f829d3cffc4555" name="af78ef1fba949463ff7f829d3cffc4555"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af78ef1fba949463ff7f829d3cffc4555">&#9670;&nbsp;</a></span>GetDateField() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetDateField </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iFieldNo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;&#160;</td>
- <td class="paramname"><em>dtFieldValue</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get <a class="el" href="classxb_1_1xbDate.html" title="xbDate class.">xbDate</a> field for field number. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iFieldNo</td><td>Number of field to retrieve. </td></tr>
- <tr><td class="paramname">dtFieldValue</td><td>Output field value. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="ac1110d867ba297a52c8b0e83e88f05e6" name="ac1110d867ba297a52c8b0e83e88f05e6"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac1110d867ba297a52c8b0e83e88f05e6">&#9670;&nbsp;</a></span>GetDbfStatus()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetDbfStatus </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Return the current dbf status. </p>
-<dl class="section return"><dt>Returns</dt><dd>0 = closed<br />
- 1 = open<br />
- 2 = updates pending<br />
- </dd></dl>
-
-</div>
-</div>
-<a id="a6982f973e81587b04916f4509746aaf5" name="a6982f973e81587b04916f4509746aaf5"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6982f973e81587b04916f4509746aaf5">&#9670;&nbsp;</a></span>GetDefaultAutoCommit()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbSsv::GetDefaultAutoCommit </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the default auto commit setting. </p>
-<p >When auto commit is enabled, the library will automatically post any updates when moving off an updated record or closing files. If auto commit is disabled, the application program will need to explicitly update the tables using using dbf-&gt;Put() and dbf-&gt;<a class="el" href="classxb_1_1xbDbf.html#a5b412dd796241673eb1aa2c93513d69b" title="Append the current record to the data file.">AppendRecord()</a>.</p>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue if auto commit is turned on<br />
- xbFalse is auto commit is turned off </dd></dl>
-
-</div>
-</div>
-<a id="a6fbb9c3a550ab0b3378f9586a57791d2" name="a6fbb9c3a550ab0b3378f9586a57791d2"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6fbb9c3a550ab0b3378f9586a57791d2">&#9670;&nbsp;</a></span>GetDefaultDateFormat()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetDefaultDateFormat </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the default date format. </p>
-<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing the default date format. </dd></dl>
-
-</div>
-</div>
-<a id="acd0fb2166b2bff7e8a1cf65a7bc8be1e" name="acd0fb2166b2bff7e8a1cf65a7bc8be1e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#acd0fb2166b2bff7e8a1cf65a7bc8be1e">&#9670;&nbsp;</a></span>GetDirectory()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbFile::GetDirectory </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the directory name. </p>
-<dl class="section return"><dt>Returns</dt><dd>the directory name of the file </dd></dl>
-
-</div>
-</div>
-<a id="a6e6774df0f2d7733f4b25a9989596d95" name="a6e6774df0f2d7733f4b25a9989596d95"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6e6774df0f2d7733f4b25a9989596d95">&#9670;&nbsp;</a></span>GetDoubleField() <span class="overload">[1/3]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetDoubleField </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFieldName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;&#160;</td>
- <td class="paramname"><em>dFieldValue</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get xbDouble field for field name. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFieldName</td><td>Name of field to retrieve. </td></tr>
- <tr><td class="paramname">dFieldValue</td><td>Output field value. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="a4556041a7ff2f6b6f986729901c11f08" name="a4556041a7ff2f6b6f986729901c11f08"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4556041a7ff2f6b6f986729901c11f08">&#9670;&nbsp;</a></span>GetDoubleField() <span class="overload">[2/3]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetDoubleField </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iFieldNo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;&#160;</td>
- <td class="paramname"><em>dFieldValue</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get xbDouble field for field number. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iFieldNo</td><td>Number of field to retrieve. </td></tr>
- <tr><td class="paramname">dFieldValue</td><td>Output field value. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="a2370b5e736931441a5968649291b9ef4" name="a2370b5e736931441a5968649291b9ef4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a2370b5e736931441a5968649291b9ef4">&#9670;&nbsp;</a></span>GetDoubleField() <span class="overload">[3/3]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetDoubleField </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iFieldNo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;&#160;</td>
- <td class="paramname"><em>dFieldValue</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iRecBufSw</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get xbDouble field for field number. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iFieldNo</td><td>Number of field to retrieve. </td></tr>
- <tr><td class="paramname">dFieldValue</td><td>Output field value. </td></tr>
- <tr><td class="paramname">iRecBufSw</td><td>0 - Record buffer with any updates.<br />
-1 - Record buffer with original data. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="a49cd162f066eef2b829ba7c9f6620243" name="a49cd162f066eef2b829ba7c9f6620243"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a49cd162f066eef2b829ba7c9f6620243">&#9670;&nbsp;</a></span>GetEndianType()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbSsv::GetEndianType </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the Endian type. </p>
-<dl class="section return"><dt>Returns</dt><dd>B - Big endian<br />
- L - Little endian<br />
- </dd></dl>
-
-</div>
-</div>
-<a id="a256dc1f98626fa77da24e91a38ab5b4d" name="a256dc1f98626fa77da24e91a38ab5b4d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a256dc1f98626fa77da24e91a38ab5b4d">&#9670;&nbsp;</a></span>GetEof()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbDbf::GetEof </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Return true if dbf file empty or positioned to the last record. </p>
-<dl class="section return"><dt>Returns</dt><dd>Returns true if dbf file is empty or positioned on the last record. </dd></dl>
-
-</div>
-</div>
-<a id="a56961d2a67b8e7470098626ac4dac7e4" name="a56961d2a67b8e7470098626ac4dac7e4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a56961d2a67b8e7470098626ac4dac7e4">&#9670;&nbsp;</a></span>GetErrorMessage()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">const char * xb::xbSsv::GetErrorMessage </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iErrorCode</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get an error message. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iErrorCode</td><td>ErrorCode is the error number of description to be returned. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Returns a pointer to a string containing a text description for the error code. </dd></dl>
-
-</div>
-</div>
-<a id="a9a0fcf7e2040ab483e3807927833cb26" name="a9a0fcf7e2040ab483e3807927833cb26"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a9a0fcf7e2040ab483e3807927833cb26">&#9670;&nbsp;</a></span>GetField() <span class="overload">[1/3]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetField </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFieldName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFieldValue</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get <a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> field for field name. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFieldName</td><td>Name of field to retrieve </td></tr>
- <tr><td class="paramname">sFieldValue</td><td>Output field value. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="ac81f078f3c932f0da60ad1fbdd848d3e" name="ac81f078f3c932f0da60ad1fbdd848d3e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac81f078f3c932f0da60ad1fbdd848d3e">&#9670;&nbsp;</a></span>GetField() <span class="overload">[2/3]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetField </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iFieldNo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFieldValue</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get field data for field number. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iFieldNo</td><td>Number of field to retrieve. </td></tr>
- <tr><td class="paramname">sFieldValue</td><td>Output field value. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="ad245a26eb8b79610c9ae7bab19e05513" name="ad245a26eb8b79610c9ae7bab19e05513"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ad245a26eb8b79610c9ae7bab19e05513">&#9670;&nbsp;</a></span>GetField() <span class="overload">[3/3]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetField </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iFieldNo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFieldValue</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iRecBufSw</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get field data for field number. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iFieldNo</td><td>Number of field to retrieve. </td></tr>
- <tr><td class="paramname">sFieldValue</td><td>Output field value. </td></tr>
- <tr><td class="paramname">iRecBufSw</td><td>0 - Record buffer with any updates.<br />
-1 - Record buffer with original data. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="add27d8ef555a13b336b8c804165dc15e" name="add27d8ef555a13b336b8c804165dc15e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#add27d8ef555a13b336b8c804165dc15e">&#9670;&nbsp;</a></span>GetFieldCnt()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt32 xb::xbDbf::GetFieldCnt </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Return the number of fields in the table. </p>
-<dl class="section return"><dt>Returns</dt><dd>The number of fields in the table. </dd></dl>
-
-</div>
-</div>
-<a id="a607f774fcd6dc0b9913d7a7801b60db2" name="a607f774fcd6dc0b9913d7a7801b60db2"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a607f774fcd6dc0b9913d7a7801b60db2">&#9670;&nbsp;</a></span>GetFieldDecimal() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetFieldDecimal </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFieldName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16 &amp;&#160;</td>
- <td class="paramname"><em>iFieldDecimal</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get decimal for field name. </p>
-<p >This routine retreives a field's decimal length. </p><dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFieldName</td><td>Name of field to retrieve </td></tr>
- <tr><td class="paramname">iFieldDecimal</td><td>Output field value. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="abcb4defad2e1b6e67f63cc60737ad840" name="abcb4defad2e1b6e67f63cc60737ad840"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#abcb4defad2e1b6e67f63cc60737ad840">&#9670;&nbsp;</a></span>GetFieldDecimal() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetFieldDecimal </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iFieldNo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16 &amp;&#160;</td>
- <td class="paramname"><em>iFieldDecimal</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get decimal for field number. </p>
-<p >This routine retreives a field's decimal length. </p><dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iFieldNo</td><td>Number of field to retrieve </td></tr>
- <tr><td class="paramname">iFieldDecimal</td><td>Output field value. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="acf06dbccdba1a4bcd90fa0bea6cca59b" name="acf06dbccdba1a4bcd90fa0bea6cca59b"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#acf06dbccdba1a4bcd90fa0bea6cca59b">&#9670;&nbsp;</a></span>GetFieldLen() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetFieldLen </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFieldName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16 &amp;&#160;</td>
- <td class="paramname"><em>iFieldLen</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get field length for field name. </p>
-<p >This function retrieves a field's length.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFieldName</td><td>Name of field to retrieve </td></tr>
- <tr><td class="paramname">iFieldLen</td><td>Output field length value. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="adda4302b58cc6109b048f19d9b68bbd4" name="adda4302b58cc6109b048f19d9b68bbd4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#adda4302b58cc6109b048f19d9b68bbd4">&#9670;&nbsp;</a></span>GetFieldLen() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetFieldLen </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iFieldNo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16 &amp;&#160;</td>
- <td class="paramname"><em>iFieldLen</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get field length for field number. </p>
-<p >This function retrieves a field's length.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iFieldNo</td><td>Name of field to retrieve </td></tr>
- <tr><td class="paramname">iFieldLen</td><td>Output field length value. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="a5e3e4368bfba1724c016b8859023e34c" name="a5e3e4368bfba1724c016b8859023e34c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5e3e4368bfba1724c016b8859023e34c">&#9670;&nbsp;</a></span>GetFieldName()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetFieldName </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iFieldNo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFieldName</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Returns the name of the specified field. </p>
-<p >Returns a pointer to the name for the field specified by iFieldNo.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iFieldNo</td><td>Number of field. </td></tr>
- <tr><td class="paramname">sFieldName</td><td>Output variable containing the field name. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="aad9029e63909aeb77d8473256d88bea8" name="aad9029e63909aeb77d8473256d88bea8"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aad9029e63909aeb77d8473256d88bea8">&#9670;&nbsp;</a></span>GetFieldNo() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetFieldNo </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFieldName</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get field ID number for a given field name. </p>
-<p >Returns the field number for the named field.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFieldName</td><td>Name of field. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Number of field or XB_INVALID_FIELD_NAME. </dd></dl>
-
-</div>
-</div>
-<a id="aed9113b5095c6df1b9c854cbd0d8047b" name="aed9113b5095c6df1b9c854cbd0d8047b"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aed9113b5095c6df1b9c854cbd0d8047b">&#9670;&nbsp;</a></span>GetFieldNo() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetFieldNo </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFieldName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16 &amp;&#160;</td>
- <td class="paramname"><em>iFieldNo</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the field number for name. </p>
-<p >Returns the field number for the named field.</p>
-<p >All field get/put methods require either a field number or field name as one of the parameters. Using the methods that take the field numbers will yield slightly better performance because the methods that take a name, have to look up the number.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFieldName</td><td>Name of field. </td></tr>
- <tr><td class="paramname">iFieldNo</td><td>Output field number for the given name. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Number of field named fldName. </dd></dl>
-
-</div>
-</div>
-<a id="a181db879f1a75f93a34c03513a0b2fea" name="a181db879f1a75f93a34c03513a0b2fea"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a181db879f1a75f93a34c03513a0b2fea">&#9670;&nbsp;</a></span>GetFieldType() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetFieldType </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFieldName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char &amp;&#160;</td>
- <td class="paramname"><em>cFieldType</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get field type for field name. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFieldName</td><td>Field name. </td></tr>
- <tr><td class="paramname">cFieldType</td><td>Output field type. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="a5143973e4f165651152aa13c8fd45f84" name="a5143973e4f165651152aa13c8fd45f84"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5143973e4f165651152aa13c8fd45f84">&#9670;&nbsp;</a></span>GetFieldType() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetFieldType </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iFieldNo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char &amp;&#160;</td>
- <td class="paramname"><em>cFieldType</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get field type for field number. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iFieldNo</td><td>Field number. </td></tr>
- <tr><td class="paramname">cFieldType</td><td>Output field type. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="af5127c92892816e9bbc5c19653c4147a" name="af5127c92892816e9bbc5c19653c4147a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af5127c92892816e9bbc5c19653c4147a">&#9670;&nbsp;</a></span>GetFileDirPart() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::GetFileDirPart </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sCompleteFileNameIn</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFileDirPartOut</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the directory part of the file name. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sCompleteFileNameIn</td><td>- a fully qualfied input file name </td></tr>
- <tr><td class="paramname">sFileDirPartOut</td><td>- the returned directory name part out of sCompleteFileNameIn </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a60c53998e3d1b694134b20a87bc9bf5a" name="a60c53998e3d1b694134b20a87bc9bf5a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a60c53998e3d1b694134b20a87bc9bf5a">&#9670;&nbsp;</a></span>GetFileDirPart() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::GetFileDirPart </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFileDirPartOut</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the directory part of the file name. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFileDirPartOut</td><td>- the returned directory name </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="ab289b6ffe955321160c1f90220c22e25" name="ab289b6ffe955321160c1f90220c22e25"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab289b6ffe955321160c1f90220c22e25">&#9670;&nbsp;</a></span>GetFileExtPart() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::GetFileExtPart </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sCompleteFileNameIn</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFileExtPartOut</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the extension part of the file name. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sCompleteFileNameIn</td><td>- a fully qualfied input file name</td></tr>
- <tr><td class="paramname">sFileExtPartOut</td><td>- the returned directory name part out of sCompleteFileNameIn </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a57a9222e5cbb51019d4eeb2c3ac89fa2" name="a57a9222e5cbb51019d4eeb2c3ac89fa2"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a57a9222e5cbb51019d4eeb2c3ac89fa2">&#9670;&nbsp;</a></span>GetFileExtPart() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::GetFileExtPart </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFileNameExtOut</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the extension part of the file name. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFileNameExtOut</td><td>- the returned extension part out of sCompleteFileNameIn </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a02df78f4c90313243f508fc56b95aba8" name="a02df78f4c90313243f508fc56b95aba8"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a02df78f4c90313243f508fc56b95aba8">&#9670;&nbsp;</a></span>GetFileMtime()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::GetFileMtime </td>
- <td>(</td>
- <td class="paramtype">time_t &amp;&#160;</td>
- <td class="paramname"><em>mtime</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the time of last file modification timestamp as reported by the OS. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">mtime</td><td>- returned time of last file modification </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="ac95cb882ccbcdedc9a233c6ad9fed07a" name="ac95cb882ccbcdedc9a233c6ad9fed07a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac95cb882ccbcdedc9a233c6ad9fed07a">&#9670;&nbsp;</a></span>GetFileName()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbFile::GetFileName </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the file name. </p>
-<dl class="section return"><dt>Returns</dt><dd>the file name portion of the file </dd></dl>
-
-</div>
-</div>
-<a id="a6110763c5ae996b72c7a62c15bdecc73" name="a6110763c5ae996b72c7a62c15bdecc73"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6110763c5ae996b72c7a62c15bdecc73">&#9670;&nbsp;</a></span>GetFileNamePart() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::GetFileNamePart </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sCompleteFileNameIn</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFileNamePartOut</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the name part of the file name. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sCompleteFileNameIn</td><td>- a fully qualified input file name </td></tr>
- <tr><td class="paramname">sFileNamePartOut</td><td>- the returned file name part out of sCompleteFileNameIn </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a81422b3dd52763d2cc6c77237ec9af0a" name="a81422b3dd52763d2cc6c77237ec9af0a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a81422b3dd52763d2cc6c77237ec9af0a">&#9670;&nbsp;</a></span>GetFileNamePart() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::GetFileNamePart </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFileNamePartOut</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the name part of the file name. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFileNamePartOut</td><td>- the returned file name part out of sCompleteFileNameIn </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a50b63c39e49d44e52078038027b24cc5" name="a50b63c39e49d44e52078038027b24cc5"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a50b63c39e49d44e52078038027b24cc5">&#9670;&nbsp;</a></span>GetFileSize()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::GetFileSize </td>
- <td>(</td>
- <td class="paramtype">xbUInt64 &amp;&#160;</td>
- <td class="paramname"><em>ullFileSize</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the size of the file as reported by the OS. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">ullFileSize</td><td>- unsigned long long field as output </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a5548236d38d43b89ae29b9a015b1f678" name="a5548236d38d43b89ae29b9a015b1f678"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5548236d38d43b89ae29b9a015b1f678">&#9670;&nbsp;</a></span>GetFileType()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::GetFileType </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFileTypeOut</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the file type aka Capitalized file extension. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFileTypeOut</td><td>- the returned extension part out of sCompleteFileNameIn </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a6fc5b8a3e2f177d5ceaf9d975cbb5226" name="a6fc5b8a3e2f177d5ceaf9d975cbb5226"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6fc5b8a3e2f177d5ceaf9d975cbb5226">&#9670;&nbsp;</a></span>GetFirstRecord() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetFirstRecord </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the first record. </p>
-<p >Get the first not deleted record. This routines skips over any deleted records. </p><dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="acb78991e8435edd36318c653cb977c1a" name="acb78991e8435edd36318c653cb977c1a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#acb78991e8435edd36318c653cb977c1a">&#9670;&nbsp;</a></span>GetFirstRecord() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetFirstRecord </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iOption</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the first record. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iOption</td><td>XB_ALL_RECS - Get the first record, deleted or not.<br />
- XB_ACTIVE_RECS - Get the first active record.<br />
- XB_DELETED_RECS - Get the first deleted record.<br />
- </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a81ef2f36f921d7ece066a592eb6393eb" name="a81ef2f36f921d7ece066a592eb6393eb"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a81ef2f36f921d7ece066a592eb6393eb">&#9670;&nbsp;</a></span>GetFloatField() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetFloatField </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFieldName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="namespacexb.html#a83aa6a550398db55973aa9fb4257e66e">xbFloat</a> &amp;&#160;</td>
- <td class="paramname"><em>fFieldValue</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get xbFloat field for field name. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFieldName</td><td>Number of field to retrieve. </td></tr>
- <tr><td class="paramname">fFieldValue</td><td>Output field value. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="a3443f646038ced14425f067a59c0f2da" name="a3443f646038ced14425f067a59c0f2da"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a3443f646038ced14425f067a59c0f2da">&#9670;&nbsp;</a></span>GetFloatField() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetFloatField </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iFieldNo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="namespacexb.html#a83aa6a550398db55973aa9fb4257e66e">xbFloat</a> &amp;&#160;</td>
- <td class="paramname"><em>fFieldValue</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get xbFloat field for field number. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iFieldNo</td><td>Number of field to retrieve. </td></tr>
- <tr><td class="paramname">fFieldValue</td><td>Output field value. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="a31b4e641f93206ba23e2a5a27491dcd4" name="a31b4e641f93206ba23e2a5a27491dcd4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a31b4e641f93206ba23e2a5a27491dcd4">&#9670;&nbsp;</a></span>GetFqFileName()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbFile::GetFqFileName </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the fully qualified file name. </p>
-<dl class="section return"><dt>Returns</dt><dd>the fully qualfied name of the file </dd></dl>
-
-</div>
-</div>
-<a id="ad56be2756b7a9f8318d9ba5cf215dafb" name="ad56be2756b7a9f8318d9ba5cf215dafb"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ad56be2756b7a9f8318d9ba5cf215dafb">&#9670;&nbsp;</a></span>GetHeaderLen()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">virtual xbUInt16 xb::xbDbf::GetHeaderLen </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="abc9c06c95d71fbad8294e1ae8862cea9" name="abc9c06c95d71fbad8294e1ae8862cea9"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#abc9c06c95d71fbad8294e1ae8862cea9">&#9670;&nbsp;</a></span>GetHomeDir()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::GetHomeDir </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sHomeDirOut</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get home directory. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sHomeDirOut</td><td>- Output home directory for current user. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
-
-</div>
-</div>
-<a id="a49e667f9c8ee55c36444702663fc5964" name="a49e667f9c8ee55c36444702663fc5964"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a49e667f9c8ee55c36444702663fc5964">&#9670;&nbsp;</a></span>GetLastRecord() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetLastRecord </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the last record. </p>
-<p >Get the last not deleted record. This routines skips over any deleted records. </p><dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a8ccfa2291417412b6894940d1b92f9a6" name="a8ccfa2291417412b6894940d1b92f9a6"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a8ccfa2291417412b6894940d1b92f9a6">&#9670;&nbsp;</a></span>GetLastRecord() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetLastRecord </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iOption</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the last record. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iOption</td><td>XB_ALL_RECS - Get the last record, deleted or not.<br />
- XB_ACTIVE_RECS - Get the last active record.<br />
- XB_DELETED_RECS - Get the last deleted record.<br />
- </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a4822315bded3969b59aeeb683c373051" name="a4822315bded3969b59aeeb683c373051"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4822315bded3969b59aeeb683c373051">&#9670;&nbsp;</a></span>GetLogDirectory()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetLogDirectory </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="afaef09435be73b3111f5edbd7091d861" name="afaef09435be73b3111f5edbd7091d861"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#afaef09435be73b3111f5edbd7091d861">&#9670;&nbsp;</a></span>GetLogFileName()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetLogFileName </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a943cea7fde1b06c1a05184193eff8d2d" name="a943cea7fde1b06c1a05184193eff8d2d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a943cea7fde1b06c1a05184193eff8d2d">&#9670;&nbsp;</a></span>GetLogicalField() <span class="overload">[1/5]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetLogicalField </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFieldName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;&#160;</td>
- <td class="paramname"><em>bFieldValue</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get logical field for field name. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFieldName</td><td>Name of field to retrieve. </td></tr>
- <tr><td class="paramname">bFieldValue</td><td>Output field value. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="a9cd6819bfd932ff8507e54d9cb9a624e" name="a9cd6819bfd932ff8507e54d9cb9a624e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a9cd6819bfd932ff8507e54d9cb9a624e">&#9670;&nbsp;</a></span>GetLogicalField() <span class="overload">[2/5]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetLogicalField </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFieldName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFieldValue</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get logical field for field name. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFieldName</td><td>Name of field to retrieve. </td></tr>
- <tr><td class="paramname">sFieldValue</td><td>Output field value. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="aaf615ddcf08f8cd14efc713c2a8d7ae1" name="aaf615ddcf08f8cd14efc713c2a8d7ae1"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aaf615ddcf08f8cd14efc713c2a8d7ae1">&#9670;&nbsp;</a></span>GetLogicalField() <span class="overload">[3/5]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetLogicalField </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iFieldNo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;&#160;</td>
- <td class="paramname"><em>bFieldValue</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get logical field for field number. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iFieldNo</td><td>Number of field to retrieve. </td></tr>
- <tr><td class="paramname">bFieldValue</td><td>Output field value. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="ab28feef20c988b0a6f1c1911a45377b0" name="ab28feef20c988b0a6f1c1911a45377b0"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab28feef20c988b0a6f1c1911a45377b0">&#9670;&nbsp;</a></span>GetLogicalField() <span class="overload">[4/5]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetLogicalField </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iFieldNo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;&#160;</td>
- <td class="paramname"><em>bFieldValue</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iRecBufSw</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get logical field for field number. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iFieldNo</td><td>Number of field to retrieve. </td></tr>
- <tr><td class="paramname">bFieldValue</td><td>Output field value. </td></tr>
- <tr><td class="paramname">iRecBufSw</td><td>0 - Record buffer with any updates.<br />
-1 - Record buffer with original data. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="a3254f091fc4a1404abed3dd2bcdd6ce6" name="a3254f091fc4a1404abed3dd2bcdd6ce6"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a3254f091fc4a1404abed3dd2bcdd6ce6">&#9670;&nbsp;</a></span>GetLogicalField() <span class="overload">[5/5]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetLogicalField </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iFieldNo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFieldValue</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get logical field for field number. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iFieldNo</td><td>Number of field to retrieve. </td></tr>
- <tr><td class="paramname">sFieldValue</td><td>Output field value. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="a7b8ef75b17941beac17e50e969b2d3db" name="a7b8ef75b17941beac17e50e969b2d3db"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a7b8ef75b17941beac17e50e969b2d3db">&#9670;&nbsp;</a></span>GetLongField() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetLongField </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFieldName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt32 &amp;&#160;</td>
- <td class="paramname"><em>lFieldValue</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get long field for field name. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFieldName</td><td>Number of field to retrieve. </td></tr>
- <tr><td class="paramname">lFieldValue</td><td>Output field value. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="abe525c0820640e0a9e169d0b7913cfa1" name="abe525c0820640e0a9e169d0b7913cfa1"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#abe525c0820640e0a9e169d0b7913cfa1">&#9670;&nbsp;</a></span>GetLongField() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetLongField </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iFieldNo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt32 &amp;&#160;</td>
- <td class="paramname"><em>lFieldValue</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get long field for field number. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iFieldNo</td><td>Number of field to retrieve. </td></tr>
- <tr><td class="paramname">lFieldValue</td><td>Output field value. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="abd58031c5f1c3766c24d47a82e6fd9c5" name="abd58031c5f1c3766c24d47a82e6fd9c5"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#abd58031c5f1c3766c24d47a82e6fd9c5">&#9670;&nbsp;</a></span>GetMultiUser()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbSsv::GetMultiUser </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the multi user setting. </p>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue - Multi user mode turned on.<br />
- xbFalse - Multi user mode turned off.<br />
- </dd></dl>
-
-</div>
-</div>
-<a id="ab896fe3b734f556de578d30f92b18fe2" name="ab896fe3b734f556de578d30f92b18fe2"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab896fe3b734f556de578d30f92b18fe2">&#9670;&nbsp;</a></span>GetNextRecord() <span class="overload">[1/3]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetNextRecord </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the next record. </p>
-<p >Get the next not deleted record. This routines skips over any deleted records. </p><dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a3191428a7a92d9107d8d42448884f2ac" name="a3191428a7a92d9107d8d42448884f2ac"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a3191428a7a92d9107d8d42448884f2ac">&#9670;&nbsp;</a></span>GetNextRecord() <span class="overload">[2/3]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetNextRecord </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iOption</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the next record. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iOption</td><td>XB_ALL_RECS - Get the next record, deleted or not.<br />
- XB_ACTIVE_RECS - Get the next active record.<br />
- XB_DELETED_RECS - Get the next deleted record.<br />
- </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a18fdcb4ab15b36cd47fa6f6f7a540d1a" name="a18fdcb4ab15b36cd47fa6f6f7a540d1a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a18fdcb4ab15b36cd47fa6f6f7a540d1a">&#9670;&nbsp;</a></span>GetNextRecord() <span class="overload">[3/3]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetNextRecord </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iOption</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ulStartRec</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the next record. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iOption</td><td>XB_ALL_RECS - Get the next record, deleted or not.<br />
- XB_ACTIVE_RECS - Get the next active record.<br />
- XB_DELETED_RECS - Get the next deleted record.<br />
- </td></tr>
- <tr><td class="paramname">ulStartRec</td><td>Get next record, starting from ulStartRec. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a3c500dc9dac22c49496e4b29386b2dd3" name="a3c500dc9dac22c49496e4b29386b2dd3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a3c500dc9dac22c49496e4b29386b2dd3">&#9670;&nbsp;</a></span>GetOpenMode()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::GetOpenMode </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the open mode of the file. </p>
-<dl class="section return"><dt>Returns</dt><dd>XB_READ<br />
- XB_READ_WRITE<br />
- XB_WRITE<br />
- </dd></dl>
-
-</div>
-</div>
-<a id="ab3d248e5221b4f0809897cd43af17a1e" name="ab3d248e5221b4f0809897cd43af17a1e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab3d248e5221b4f0809897cd43af17a1e">&#9670;&nbsp;</a></span>GetPrevRecord() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetPrevRecord </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the previous record. </p>
-<p >Get the previous not deleted record. This routine skips over any deleted records. </p><dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a7eadc7b08d73003802b90584f7b33387" name="a7eadc7b08d73003802b90584f7b33387"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a7eadc7b08d73003802b90584f7b33387">&#9670;&nbsp;</a></span>GetPrevRecord() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetPrevRecord </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iOption</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the previous record. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iOption</td><td>XB_ALL_RECS - Get the previous record, deleted or not.<br />
- XB_ACTIVE_RECS - Get the previous active record.<br />
- XB_DELETED_RECS - Get the previous deleted record.<br />
- </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="aabd146c0e1054ab905ec96aedd84b02e" name="aabd146c0e1054ab905ec96aedd84b02e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aabd146c0e1054ab905ec96aedd84b02e">&#9670;&nbsp;</a></span>GetRawField()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetRawField </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iFieldNo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char *&#160;</td>
- <td class="paramname"><em>cBuf</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ulBufSize</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iRecBufSw</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get raw field data for field number. </p>
-<p >This is a protected method, used by other methods. This method would be subject to buffer overflows if made public.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iFieldNo</td><td>Number of field to retrieve. </td></tr>
- <tr><td class="paramname">cBuf</td><td>Pointer to buffer area provided by calling application program. </td></tr>
- <tr><td class="paramname">ulBufSize</td><td>Size of data to copy </td></tr>
- <tr><td class="paramname">iRecBufSw</td><td>0 - Record buffer with any updates.<br />
-1 - Record buffer with original data. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="a26fba086b07caeab95066bf1c8d25161" name="a26fba086b07caeab95066bf1c8d25161"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a26fba086b07caeab95066bf1c8d25161">&#9670;&nbsp;</a></span>GetRecord()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetRecord </td>
- <td>(</td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ulRecNo</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get record for specified record number. </p>
-<p >Retrieve a record from disk and load it into the record buffer. If auto commit is enabled and there are pending updates, this routine will flush the updates to disk before proceeding to ulRecNo.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">ulRecNo</td><td>- Record number to retrieve. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="aa3e38c4057d726a28a27d07a1610d124" name="aa3e38c4057d726a28a27d07a1610d124"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aa3e38c4057d726a28a27d07a1610d124">&#9670;&nbsp;</a></span>GetRecordBuf()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">char * xb::xbDbf::GetRecordBuf </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iOpt</em> = <code>0</code></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get pointer to record buffer. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iOpt</td><td>0 for RecBuf (current) or 1 for RecBuf2 (original contents)</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Pointer to record buffer. </dd></dl>
-
-</div>
-</div>
-<a id="ac196ad55335e1f4789d698748434dc89" name="ac196ad55335e1f4789d698748434dc89"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac196ad55335e1f4789d698748434dc89">&#9670;&nbsp;</a></span>GetRecordCnt()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetRecordCnt </td>
- <td>(</td>
- <td class="paramtype">xbUInt32 &amp;&#160;</td>
- <td class="paramname"><em>ulRecCnt</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the current number of records in the dbf data file. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">ulRecCnt</td><td>Output number of records in file. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a0aaa06d6028e75efc6b5131f7356ecce" name="a0aaa06d6028e75efc6b5131f7356ecce"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0aaa06d6028e75efc6b5131f7356ecce">&#9670;&nbsp;</a></span>GetRecordCount()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbUInt32 xb::xbDbf::GetRecordCount </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the current number of records in the dbf data file. </p>
-<dl class="section return"><dt>Returns</dt><dd>Record count or <a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="ab50d76c6e29e81e347a6feb04c2f62bb" name="ab50d76c6e29e81e347a6feb04c2f62bb"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab50d76c6e29e81e347a6feb04c2f62bb">&#9670;&nbsp;</a></span>GetRecordLen()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbUInt16 xb::xbDbf::GetRecordLen </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the dbf record length. </p>
-<dl class="section return"><dt>Returns</dt><dd>Record length. </dd></dl>
-
-</div>
-</div>
-<a id="a9b63e05b77f477ff6109ff7b9432c1b6" name="a9b63e05b77f477ff6109ff7b9432c1b6"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a9b63e05b77f477ff6109ff7b9432c1b6">&#9670;&nbsp;</a></span>GetShareMode()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::GetShareMode </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the share mode of the file. </p>
-<dl class="section return"><dt>Returns</dt><dd>XB_SINGLE_USER - (file buffering on&gt;<br />
- XB_MULTI_USER - (file buffering off)<br />
- </dd></dl>
-
-</div>
-</div>
-<a id="a27758a325c097f204247908b65ba7fbd" name="a27758a325c097f204247908b65ba7fbd"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a27758a325c097f204247908b65ba7fbd">&#9670;&nbsp;</a></span>GetTblAlias()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbDbf::GetTblAlias </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the table alias. </p>
-<p >This routine returns the table alias. </p><dl class="section return"><dt>Returns</dt><dd>Table alias </dd></dl>
-
-</div>
-</div>
-<a id="a039eb02418ec4ca862adbc0f95b9cbec" name="a039eb02418ec4ca862adbc0f95b9cbec"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a039eb02418ec4ca862adbc0f95b9cbec">&#9670;&nbsp;</a></span>GetULongField() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetULongField </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFieldName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbUInt32 &amp;&#160;</td>
- <td class="paramname"><em>ulFieldValue</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get unsigned long field for field name. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFieldName</td><td>Number of field to retrieve. </td></tr>
- <tr><td class="paramname">ulFieldValue</td><td>Output field value. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="a67e3a050f9090edf69eee75aef7f5d83" name="a67e3a050f9090edf69eee75aef7f5d83"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a67e3a050f9090edf69eee75aef7f5d83">&#9670;&nbsp;</a></span>GetULongField() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::GetULongField </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iFieldNo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbUInt32 &amp;&#160;</td>
- <td class="paramname"><em>ulFieldValue</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get unsigned long field for field number. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iFieldNo</td><td>Number of field to retrieve. </td></tr>
- <tr><td class="paramname">ulFieldValue</td><td>Output field value. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="a49212a9eb17f7fa9f303e08d5fc50fc6" name="a49212a9eb17f7fa9f303e08d5fc50fc6"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a49212a9eb17f7fa9f303e08d5fc50fc6">&#9670;&nbsp;</a></span>GetVersion()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">virtual xbInt16 xb::xbDbf::GetVersion </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a7af337808919680b90710ad5e8a99232" name="a7af337808919680b90710ad5e8a99232"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a7af337808919680b90710ad5e8a99232">&#9670;&nbsp;</a></span>GetXbaseFileTypeByte() <span class="overload">[1/3]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::GetXbaseFileTypeByte </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFileName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">unsigned char &amp;&#160;</td>
- <td class="paramname"><em>cFileTypeByte</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the file type byte and version of the dbf file. </p>
-<p >Pull the first bye off the DBF file for further inspection. First byte has various bits set to determine what the file format is.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFileName</td><td>- Name of file to examine </td></tr>
- <tr><td class="paramname">cFileTypeByte</td><td>- Retruned first byte of dbf file </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a78aebdd21d3de46a450d5f835e3027f6" name="a78aebdd21d3de46a450d5f835e3027f6"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a78aebdd21d3de46a450d5f835e3027f6">&#9670;&nbsp;</a></span>GetXbaseFileTypeByte() <span class="overload">[2/3]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::GetXbaseFileTypeByte </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFileName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">unsigned char &amp;&#160;</td>
- <td class="paramname"><em>cFileTypeByte</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16 &amp;&#160;</td>
- <td class="paramname"><em>iVersion</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the file type byte and version of the dbf file. </p>
-<p >Pull the first bye off the DBF file for further inspection. First byte has various bits set to determine what the file format is.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFileName</td><td>- Name of file to examine </td></tr>
- <tr><td class="paramname">cFileTypeByte</td><td>- Returned first byte of dbf file </td></tr>
- <tr><td class="paramname">iVersion</td><td>- Returned file version </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="aaf2e697751a0beff41432a66bb83fb5e" name="aaf2e697751a0beff41432a66bb83fb5e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aaf2e697751a0beff41432a66bb83fb5e">&#9670;&nbsp;</a></span>GetXbaseFileTypeByte() <span class="overload">[3/3]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::GetXbaseFileTypeByte </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFileName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16 &amp;&#160;</td>
- <td class="paramname"><em>iVersion</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the file type byte and version of the dbf file. </p>
-<p >Pull the first bye off the DBF file for further inspection. First byte has various bits set to determine what the file format is.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFileName</td><td>- Name of file to examine </td></tr>
- <tr><td class="paramname">iVersion</td><td>- Returned file version </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="ab21ec23c076b0c9affdc0f6672bd133f" name="ab21ec23c076b0c9affdc0f6672bd133f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab21ec23c076b0c9affdc0f6672bd133f">&#9670;&nbsp;</a></span>GetXbasePtr()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> * xb::xbDbf::GetXbasePtr </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the pointer to the xbXbase structure,. </p>
-<dl class="section return"><dt>Returns</dt><dd>Pointer to xbXbase structure. </dd></dl>
-
-</div>
-</div>
-<a id="ad06fe0f7975fb81125d27d82504e6829" name="ad06fe0f7975fb81125d27d82504e6829"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ad06fe0f7975fb81125d27d82504e6829">&#9670;&nbsp;</a></span>InitVars()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbDbf::InitVars </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a013dc8c51fc1aa988de39cf3da6da950" name="a013dc8c51fc1aa988de39cf3da6da950"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a013dc8c51fc1aa988de39cf3da6da950">&#9670;&nbsp;</a></span>MemoFieldsExist()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbDbf::MemoFieldsExist </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Check for existence of any memo fields. </p>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue - Memo fields exist.<br />
-xbFalse - Memo fields don't exist. </dd></dl>
-
-</div>
-</div>
-<a id="a361e3cc318bbf1c4d10f069e0800a24e" name="a361e3cc318bbf1c4d10f069e0800a24e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a361e3cc318bbf1c4d10f069e0800a24e">&#9670;&nbsp;</a></span>NameSuffixMissing()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::NameSuffixMissing </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFileName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iOption</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Determines status of file extension. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFileName</td><td>- Name of file to examine </td></tr>
- <tr><td class="paramname">iOption</td><td>- Inspection type<br />
- 1 check for DBF<br />
- 2 check for NDX<br />
- 3 check for MDX<br />
- 4 check for NTX<br />
-</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>0 if suffix found<br />
- 1 if suffix not found, lower case<br />
- 2 is suffix not found, upper case<br />
- </dd></dl>
-
-</div>
-</div>
-<a id="a69824d7bafc3f5a15bf7d09f2f511768" name="a69824d7bafc3f5a15bf7d09f2f511768"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a69824d7bafc3f5a15bf7d09f2f511768">&#9670;&nbsp;</a></span>Open() <span class="overload">[1/3]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::Open </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sTableName</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Open a table/dbf file. </p>
-<p >This routine sets the alias name to the same as the table name.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sTableName</td><td>Table name to open, Include the .dbf or .DBF extension. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="ae388c5e02adc86e6e9988e697e061610" name="ae388c5e02adc86e6e9988e697e061610"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae388c5e02adc86e6e9988e697e061610">&#9670;&nbsp;</a></span>Open() <span class="overload">[2/3]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::Open </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sTableName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sAlias</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Open a table/dbf file. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sTableName</td><td>Table name to open, Include the .dbf or .DBF extension. </td></tr>
- <tr><td class="paramname">sAlias</td><td>Alias name to assign to this entry. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a4d018cbf44d8d8b2145c9acab02c8adf" name="a4d018cbf44d8d8b2145c9acab02c8adf"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4d018cbf44d8d8b2145c9acab02c8adf">&#9670;&nbsp;</a></span>Open() <span class="overload">[3/3]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">virtual xbInt16 xb::xbDbf::Open </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sTableName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sAlias</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iOpenMode</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iShareMode</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a8a52bf3ef2123c0d17e6b1f67bf0dc55" name="a8a52bf3ef2123c0d17e6b1f67bf0dc55"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a8a52bf3ef2123c0d17e6b1f67bf0dc55">&#9670;&nbsp;</a></span>Pack() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::Pack </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Pack dbf file. </p>
-<p >This routine eliminates all deleted records from the file. </p><dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a93bb14ad0451355bfa3379128120988a" name="a93bb14ad0451355bfa3379128120988a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a93bb14ad0451355bfa3379128120988a">&#9670;&nbsp;</a></span>Pack() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::Pack </td>
- <td>(</td>
- <td class="paramtype">xbUInt32 &amp;&#160;</td>
- <td class="paramname"><em>ulDeletedRecCnt</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Pack dbf file. </p>
-<p >This routine eliminates all deleted records from the file and clears out any unused blocks in the memo file if one exists. </p><dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">ulDeletedRecCnt</td><td>- Output - number of recrods removed from the file. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a571b36b3a940b1a16d5e834f329b33b9" name="a571b36b3a940b1a16d5e834f329b33b9"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a571b36b3a940b1a16d5e834f329b33b9">&#9670;&nbsp;</a></span>PutDateField() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::PutDateField </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFieldName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;&#160;</td>
- <td class="paramname"><em>dtFieldValue</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Put date field for field name. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFieldName</td><td>Name of field to update. </td></tr>
- <tr><td class="paramname">dtFieldValue</td><td>Field value. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="a873f04af528a9d81e6a367a59d998ec5" name="a873f04af528a9d81e6a367a59d998ec5"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a873f04af528a9d81e6a367a59d998ec5">&#9670;&nbsp;</a></span>PutDateField() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::PutDateField </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iFieldNo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;&#160;</td>
- <td class="paramname"><em>dtFieldValue</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Put date field for field number. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iFieldNo</td><td>Number of field to update. </td></tr>
- <tr><td class="paramname">dtFieldValue</td><td>Field value. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="ae695bbc71c19abc71c0c5f2ff2e1f971" name="ae695bbc71c19abc71c0c5f2ff2e1f971"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae695bbc71c19abc71c0c5f2ff2e1f971">&#9670;&nbsp;</a></span>PutDoubleField() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::PutDoubleField </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFieldName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a>&#160;</td>
- <td class="paramname"><em>dFieldValue</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Put double field for field name. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFieldName</td><td>Name of field to update. </td></tr>
- <tr><td class="paramname">dFieldValue</td><td>Field value. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="a4f34842d7e8ff1f16992c2ece2fc38a5" name="a4f34842d7e8ff1f16992c2ece2fc38a5"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4f34842d7e8ff1f16992c2ece2fc38a5">&#9670;&nbsp;</a></span>PutDoubleField() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::PutDoubleField </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iFieldNo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a>&#160;</td>
- <td class="paramname"><em>dFieldValue</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Put double field for field number. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iFieldNo</td><td>Number of field to update. </td></tr>
- <tr><td class="paramname">dFieldValue</td><td>Field value. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="a7862215dd2f83a1c488e539cd1f9aec0" name="a7862215dd2f83a1c488e539cd1f9aec0"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a7862215dd2f83a1c488e539cd1f9aec0">&#9670;&nbsp;</a></span>PutField() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::PutField </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFieldName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFieldValue</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Put field for field name. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFieldName</td><td>Name of field to update. </td></tr>
- <tr><td class="paramname">sFieldValue</td><td>Field value. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="a142b0c0dc904917f3c68c5572c1237b5" name="a142b0c0dc904917f3c68c5572c1237b5"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a142b0c0dc904917f3c68c5572c1237b5">&#9670;&nbsp;</a></span>PutField() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::PutField </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iFieldNo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFieldValue</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Put field for field number. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iFieldNo</td><td>Number of field to update. </td></tr>
- <tr><td class="paramname">sFieldValue</td><td>Field value. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="a4ea3241bc710d57e5f755efda62288ad" name="a4ea3241bc710d57e5f755efda62288ad"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4ea3241bc710d57e5f755efda62288ad">&#9670;&nbsp;</a></span>PutFloatField() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::PutFloatField </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFieldName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="namespacexb.html#a83aa6a550398db55973aa9fb4257e66e">xbFloat</a>&#160;</td>
- <td class="paramname"><em>fFieldValue</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Put float field for field name. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFieldName</td><td>Name of field to update. </td></tr>
- <tr><td class="paramname">fFieldValue</td><td>Field value. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="a64161eb50d72e424b11bf3732657ebd8" name="a64161eb50d72e424b11bf3732657ebd8"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a64161eb50d72e424b11bf3732657ebd8">&#9670;&nbsp;</a></span>PutFloatField() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::PutFloatField </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iFieldNo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="namespacexb.html#a83aa6a550398db55973aa9fb4257e66e">xbFloat</a>&#160;</td>
- <td class="paramname"><em>fFieldValue</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Put float field for field number. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iFieldNo</td><td>Number of field to update. </td></tr>
- <tr><td class="paramname">fFieldValue</td><td>Field value. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="a507e400ca6526a9e0391cf06dd6a014e" name="a507e400ca6526a9e0391cf06dd6a014e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a507e400ca6526a9e0391cf06dd6a014e">&#9670;&nbsp;</a></span>PutLogicalField() <span class="overload">[1/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::PutLogicalField </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFieldName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFieldValue</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Put logical field for field name. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFieldName</td><td>Name of field to update. </td></tr>
- <tr><td class="paramname">sFieldValue</td><td>Field value. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="a623ca3ef5520c42308c1a16b518e7ff3" name="a623ca3ef5520c42308c1a16b518e7ff3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a623ca3ef5520c42308c1a16b518e7ff3">&#9670;&nbsp;</a></span>PutLogicalField() <span class="overload">[2/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::PutLogicalField </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFieldName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td>
- <td class="paramname"><em>bFieldValue</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Put logical field for field name. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFieldName</td><td>Name of field to update. </td></tr>
- <tr><td class="paramname">bFieldValue</td><td>Field value. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="ab39ac4269ac63bc7ea4f638733bb17f0" name="ab39ac4269ac63bc7ea4f638733bb17f0"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab39ac4269ac63bc7ea4f638733bb17f0">&#9670;&nbsp;</a></span>PutLogicalField() <span class="overload">[3/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::PutLogicalField </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iFieldNo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFieldValue</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Put logical field for field number. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iFieldNo</td><td>Number of field to update. </td></tr>
- <tr><td class="paramname">sFieldValue</td><td>Field value. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="a423a0cb7bd252cedf956ace4954f275d" name="a423a0cb7bd252cedf956ace4954f275d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a423a0cb7bd252cedf956ace4954f275d">&#9670;&nbsp;</a></span>PutLogicalField() <span class="overload">[4/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::PutLogicalField </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iFieldNo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td>
- <td class="paramname"><em>bFieldValue</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Put logical field for field number. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iFieldNo</td><td>Number of field to update. </td></tr>
- <tr><td class="paramname">bFieldValue</td><td>Field value. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="ae7aad223119edb3d541e9f65e88c9f2f" name="ae7aad223119edb3d541e9f65e88c9f2f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae7aad223119edb3d541e9f65e88c9f2f">&#9670;&nbsp;</a></span>PutLongField() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::PutLongField </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFieldName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt32&#160;</td>
- <td class="paramname"><em>lFieldValue</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Put long field for field name. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFieldName</td><td>Name of field to update. </td></tr>
- <tr><td class="paramname">lFieldValue</td><td>Field value. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="a56c8f924284bf88aabf90b7930b4eb47" name="a56c8f924284bf88aabf90b7930b4eb47"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a56c8f924284bf88aabf90b7930b4eb47">&#9670;&nbsp;</a></span>PutLongField() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::PutLongField </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iFieldNo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt32&#160;</td>
- <td class="paramname"><em>lFieldValue</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Put long field for field number. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iFieldNo</td><td>Number of field to update. </td></tr>
- <tr><td class="paramname">lFieldValue</td><td>Field value. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="a3c36a5ffbc7067a1abbcb526dd3b981d" name="a3c36a5ffbc7067a1abbcb526dd3b981d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a3c36a5ffbc7067a1abbcb526dd3b981d">&#9670;&nbsp;</a></span>PutRecord() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::PutRecord </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Write the current record to disk. </p>
-<p >This routine is used to write any updates to the current record buffer to disk.</p>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="aacbc7bac3ea0c502ee75b838f4f0fcbf" name="aacbc7bac3ea0c502ee75b838f4f0fcbf"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aacbc7bac3ea0c502ee75b838f4f0fcbf">&#9670;&nbsp;</a></span>PutRecord() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::PutRecord </td>
- <td>(</td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ulRecNo</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Write record to disk. </p>
-<p >This routine is used to write a copy of the current record buffer to disk for a given record number.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">ulRecNo</td><td>Record number to update. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="ac62cb97c4e678c83f41788b1ae4d0381" name="ac62cb97c4e678c83f41788b1ae4d0381"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac62cb97c4e678c83f41788b1ae4d0381">&#9670;&nbsp;</a></span>PutULongField() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::PutULongField </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFieldName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ulFieldValue</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Put unsigned long field for field name. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFieldName</td><td>Name of field to update. </td></tr>
- <tr><td class="paramname">ulFieldValue</td><td>Field value. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="af5dec5c9ff903efffdb0490a44d296d2" name="af5dec5c9ff903efffdb0490a44d296d2"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af5dec5c9ff903efffdb0490a44d296d2">&#9670;&nbsp;</a></span>PutULongField() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::PutULongField </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iFieldNo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ulFieldValue</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Put unsigned long field for field number. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iFieldNo</td><td>Number of field to update. </td></tr>
- <tr><td class="paramname">ulFieldValue</td><td>Field value. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
- XB_NO_ERROR<br />
-XB_INVALID_DATA<br />
-XB_INVALID_FIELD_NO<br />
-XB_INVALID_FIELD_NAME<br />
- XB_INVALID_FIELD_TYPE<br />
-XB_INVALID_DATA </dd></dl>
-
-</div>
-</div>
-<a id="aa1bb80340abc7a5c22f87f878e9dc825" name="aa1bb80340abc7a5c22f87f878e9dc825"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aa1bb80340abc7a5c22f87f878e9dc825">&#9670;&nbsp;</a></span>ReadBlock() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::ReadBlock </td>
- <td>(</td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ulBlockNo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">size_t&#160;</td>
- <td class="paramname"><em>lReadSize</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">void *&#160;</td>
- <td class="paramname"><em>buf</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Read a block of data from file. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">ulBlockNo</td><td>- block number to read </td></tr>
- <tr><td class="paramname">lReadSize</td><td>- size of data to read at block location, set to 0 to read blocksize </td></tr>
- <tr><td class="paramname">*buf</td><td>- pointer to buffer to write output data, assumed to be previosuly allocated and large enough to contain data </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="aef696b1c4c0ef5338e818599f695d485" name="aef696b1c4c0ef5338e818599f695d485"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aef696b1c4c0ef5338e818599f695d485">&#9670;&nbsp;</a></span>ReadBlock() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::ReadBlock </td>
- <td>(</td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ulBlockNo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ulBlockSize</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">size_t&#160;</td>
- <td class="paramname"><em>lReadSize</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">void *&#160;</td>
- <td class="paramname"><em>buf</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Read a block of data from file. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">ulBlockNo</td><td>- block number to read </td></tr>
- <tr><td class="paramname">ulBlockSize</td><td>- block size </td></tr>
- <tr><td class="paramname">lReadSize</td><td>- size of data to read at block location, set to 0 to read blocksize </td></tr>
- <tr><td class="paramname">buf</td><td>- pointer to buffer to write output data, assumed to be previosuly allocated and large enough to contain data </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a060541addb5bb1f0fe12959ed6f66fb9" name="a060541addb5bb1f0fe12959ed6f66fb9"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a060541addb5bb1f0fe12959ed6f66fb9">&#9670;&nbsp;</a></span>ReadHeader()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::ReadHeader </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iPositionOption</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iReadOption</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Read dbf file header information. </p>
-<p >This method assumes the header has been locked appropriately in a multi user environment</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iPositionOption</td><td>0 - Don't fseek to beginning of file before read.<br />
- 1 - Start from beginning of file.</td></tr>
- <tr><td class="paramname">iReadOption</td><td>0 - Read entire 32 byte header<br />
- 1 - Read first eight bytes which includes the last update date and number of records.</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a94d7d626ba691fd4b740c034673e6fc6" name="a94d7d626ba691fd4b740c034673e6fc6"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a94d7d626ba691fd4b740c034673e6fc6">&#9670;&nbsp;</a></span>RecordDeleted()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::RecordDeleted </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iOpt</em> = <code>0</code></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Return record deletion status. </p>
-<p >This routine returns the record deletion status. </p><dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iOpt</td><td>0 = Current record buffer, 1 = Original record buffer </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue - Record deleted.<br />
-xbFalse - Record not deleted. </dd></dl>
-
-</div>
-</div>
-<a id="aeeeb2eb5fabcd0f91d457df07b0e0708" name="aeeeb2eb5fabcd0f91d457df07b0e0708"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aeeeb2eb5fabcd0f91d457df07b0e0708">&#9670;&nbsp;</a></span>Rename()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">virtual xbInt16 xb::xbDbf::Rename </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a>&#160;</td>
- <td class="paramname"><em>sNewName</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a4cf7f0d423164f3cf074ae41f96f4e90" name="a4cf7f0d423164f3cf074ae41f96f4e90"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4cf7f0d423164f3cf074ae41f96f4e90">&#9670;&nbsp;</a></span>SetAutoCommit()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::SetAutoCommit </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iAutoCommit</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Set auto commit. </p>
-<p >This routine sets the auto commit setting for this table. </p><dl class="section return"><dt>Returns</dt><dd>XB_NO_ERROR; </dd></dl>
-
-</div>
-</div>
-<a id="a991c5676a6f38fa752435390989f413e" name="a991c5676a6f38fa752435390989f413e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a991c5676a6f38fa752435390989f413e">&#9670;&nbsp;</a></span>SetBlockSize()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::SetBlockSize </td>
- <td>(</td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ulBlockSize</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Set the block size. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">ulBlockSize</td><td>- unsigned long block size, divisible by 512 </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a57caaaadfbd089d9a58ecfcb50c88a6c" name="a57caaaadfbd089d9a58ecfcb50c88a6c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a57caaaadfbd089d9a58ecfcb50c88a6c">&#9670;&nbsp;</a></span>SetDataDirectory()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::SetDataDirectory </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sDataDirectory</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Set the data directory. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sDataDirectory</td><td>Set the data direcroty. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a25542afadaaf39b4fb5a1772a29cc0bd" name="a25542afadaaf39b4fb5a1772a29cc0bd"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a25542afadaaf39b4fb5a1772a29cc0bd">&#9670;&nbsp;</a></span>SetDefaultAutoCommit()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::SetDefaultAutoCommit </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td>
- <td class="paramname"><em>bDefaultAutoCommit</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Set the default auto commit. </p>
-<p >Disabling auto commit requires the application execute explicit updates using dbf-&gt;Put() and dbf-&gt;<a class="el" href="classxb_1_1xbDbf.html#a5b412dd796241673eb1aa2c93513d69b" title="Append the current record to the data file.">AppendRecord()</a>. With auto commit on, the library posts updates automatically when moving off the current record or closing a file.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">bDefaultAutoCommit</td><td>xbTrue - Enable default auto commit.<br />
- xbFalse - Disable default auto commit.<br />
- </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a5f74db23f8902846d581935c7db73f9c" name="a5f74db23f8902846d581935c7db73f9c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5f74db23f8902846d581935c7db73f9c">&#9670;&nbsp;</a></span>SetDefaultDateFormat()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::SetDefaultDateFormat </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sDefaultDateFormat</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Set the default date format. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sDefaultDateFormat</td><td>Set the default date format. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="ae78a85255488bc78964c16946dbaead3" name="ae78a85255488bc78964c16946dbaead3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae78a85255488bc78964c16946dbaead3">&#9670;&nbsp;</a></span>SetDirectory()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbFile::SetDirectory </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sDirectory</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Set the directory. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sDirectory</td><td>- Valid directory name </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a904ec348fd029d4a76e72b8fde636108" name="a904ec348fd029d4a76e72b8fde636108"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a904ec348fd029d4a76e72b8fde636108">&#9670;&nbsp;</a></span>SetEndianType()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::SetEndianType </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Set the endian type. </p>
-<p >This routine determines the Endian-ness at run time instead of compile time as some processers (ie; Sparc,ARM) can be switched either way. This routine is called automatically by the library at startup and does not need to be called in an application program. </p>
-
-</div>
-</div>
-<a id="a5419eb27e56822f828b2b88a9502a636" name="a5419eb27e56822f828b2b88a9502a636"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5419eb27e56822f828b2b88a9502a636">&#9670;&nbsp;</a></span>SetFileName()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbFile::SetFileName </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFileName</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Set the filename. </p>
-<p >This routine builds out two internal variables from the input file name<br />
- sFileName - the file name part<br />
- sFqFileName - the fully qualified file name<br />
-</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFileName</td><td>- Input file name </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="aee832fa11db2077a532f49e1329bd05a" name="aee832fa11db2077a532f49e1329bd05a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aee832fa11db2077a532f49e1329bd05a">&#9670;&nbsp;</a></span>SetFqFileName()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbFile::SetFqFileName </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFqFileName</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Set the fully qualifed filename. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFqFileName</td><td>- Fully qualifed input file name </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a060acbfaa8d528f86cb59301814b414a" name="a060acbfaa8d528f86cb59301814b414a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a060acbfaa8d528f86cb59301814b414a">&#9670;&nbsp;</a></span>SetHomeFolders()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::SetHomeFolders </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Create Home Folders. </p>
-<p >Create xbase64 log and data folders in the home directory for current usre.</p>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a7b992ed97281bf25b5b66f5df686225e" name="a7b992ed97281bf25b5b66f5df686225e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a7b992ed97281bf25b5b66f5df686225e">&#9670;&nbsp;</a></span>SetLogDirectory()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::SetLogDirectory </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sLogDirectory</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="aba6e59512f7172dd55dcf92059e5928c" name="aba6e59512f7172dd55dcf92059e5928c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aba6e59512f7172dd55dcf92059e5928c">&#9670;&nbsp;</a></span>SetMultiUser()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::SetMultiUser </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td>
- <td class="paramname"><em>bMultiUser</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the multi user setting. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">bMultiUser</td><td>xbTrue - Turn on Multi user mode.<br />
- xbFalse - Turn off Multi user mode.<br />
- </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a7e63e852418f337eb7c44de5dcd50323" name="a7e63e852418f337eb7c44de5dcd50323"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a7e63e852418f337eb7c44de5dcd50323">&#9670;&nbsp;</a></span>SetVersion()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">virtual xbInt16 xb::xbDbf::SetVersion </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ae94cb1bf9f75184f39d9e1a80ab49d4a" name="ae94cb1bf9f75184f39d9e1a80ab49d4a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae94cb1bf9f75184f39d9e1a80ab49d4a">&#9670;&nbsp;</a></span>UndeleteAllRecords()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::UndeleteAllRecords </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Set auto lock. </p>
-<p >This routine sets the auto lock setting for this table. There is an overall system level auto lock default setting and each table can have it's own autolock setting. This method controls the table level auto lock setting.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iAutoLock</td><td>1 - Use auto lock for this table.<br />
- 0 - Don't use auto lock for this table.<br />
- -1 - (minus one) Use system default.<br />
- </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a></dd></dl>
-<p>Set the header locked status.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">bHeaderLocked</td><td>xbTrue - Locked<br />
-xbFalse - Not locked. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>void</dd></dl>
-<p>Set lock flavor.</p>
-<p >This routine is for future expansion. </p><dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iLockFlavor</td><td>1 - Use Dbase (tm) style locking. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>void</dd></dl>
-<p>Set table locked status.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">bTableLocked</td><td>- xbTrue Table locked.<br />
-xbFalse Table unlocked. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>void</dd></dl>
-<p>Undelete all records.</p>
-<p >This routine will remove the deletion flag on any deleted records in the table. </p><dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a255681976a04fc722538bb630507b3a0" name="a255681976a04fc722538bb630507b3a0"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a255681976a04fc722538bb630507b3a0">&#9670;&nbsp;</a></span>UndeleteRecord()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::UndeleteRecord </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Undelete one record. </p>
-<p >This routine will undelete the current record, if it is deleted. </p><dl class="section return"><dt>Returns</dt><dd>XB_NO_ERROR<br />
-XB_INVALID_RECORD </dd></dl>
-
-</div>
-</div>
-<a id="aba5dcac3b4092261bc1669740cdd669d" name="aba5dcac3b4092261bc1669740cdd669d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aba5dcac3b4092261bc1669740cdd669d">&#9670;&nbsp;</a></span>ValidateSchema()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">virtual xbInt16 xb::xbDbf::ValidateSchema </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structxb_1_1xbSchema.html">xbSchema</a> *&#160;</td>
- <td class="paramname"><em>s</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a5d871dcfecc2b4338f7a13722aab766c" name="a5d871dcfecc2b4338f7a13722aab766c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5d871dcfecc2b4338f7a13722aab766c">&#9670;&nbsp;</a></span>WriteBlock()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::WriteBlock </td>
- <td>(</td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ulBlockNo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">size_t&#160;</td>
- <td class="paramname"><em>lWriteSize</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">void *&#160;</td>
- <td class="paramname"><em>buf</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Write a block of data to file. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">ulBlockNo</td><td>- block number to write </td></tr>
- <tr><td class="paramname">lWriteSize</td><td>- size of data to write, set to 0 to write blocksize </td></tr>
- <tr><td class="paramname">*buf</td><td>- pointer to buffer of data to be written </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a44e1410109ef7b3d11a6af4b704b62b2" name="a44e1410109ef7b3d11a6af4b704b62b2"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a44e1410109ef7b3d11a6af4b704b62b2">&#9670;&nbsp;</a></span>WriteHeader()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::WriteHeader </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iPositionOption</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iWriteOption</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a18830b5755d74818f60d9c7ce38ddf2d" name="a18830b5755d74818f60d9c7ce38ddf2d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a18830b5755d74818f60d9c7ce38ddf2d">&#9670;&nbsp;</a></span>xbFclose()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbFclose </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Xbase wrapper for standard libary fclose. </p>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="af5b6356832d2a67212070a1aa605f170" name="af5b6356832d2a67212070a1aa605f170"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af5b6356832d2a67212070a1aa605f170">&#9670;&nbsp;</a></span>xbFeof()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbFeof </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Xbase wrapper for standard libary feof. </p>
-<dl class="section return"><dt>Returns</dt><dd>non zero if end-of-file is set for the stream. </dd></dl>
-
-</div>
-</div>
-<a id="ad205184d43409f04216540ae22f15009" name="ad205184d43409f04216540ae22f15009"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ad205184d43409f04216540ae22f15009">&#9670;&nbsp;</a></span>xbFflush()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbFflush </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Xbase wrapper for standard libary fflush. </p>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a5ee229bda4d7d6695e122200e581e7a6" name="a5ee229bda4d7d6695e122200e581e7a6"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5ee229bda4d7d6695e122200e581e7a6">&#9670;&nbsp;</a></span>xbFgetc() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbFgetc </td>
- <td>(</td>
- <td class="paramtype">char &amp;&#160;</td>
- <td class="paramname"><em>c</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Xbase wrapper for standard libary fgetc. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>- output character returned by fgetc </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="afb1c584d2895ffb7834df80aea7eb1e4" name="afb1c584d2895ffb7834df80aea7eb1e4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#afb1c584d2895ffb7834df80aea7eb1e4">&#9670;&nbsp;</a></span>xbFgetc() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbFgetc </td>
- <td>(</td>
- <td class="paramtype">xbInt32 &amp;&#160;</td>
- <td class="paramname"><em>c</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Xbase wrapper for standard libary fgetc. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>- output integer returned by fgetc </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="ad245955ace26e5dde85fd4373b30d026" name="ad245955ace26e5dde85fd4373b30d026"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ad245955ace26e5dde85fd4373b30d026">&#9670;&nbsp;</a></span>xbFgets()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbFgets </td>
- <td>(</td>
- <td class="paramtype">size_t&#160;</td>
- <td class="paramname"><em>lSize</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>s</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Xbase wrapper for standard libary fgets. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">lSize</td><td>- reads in at most, one character less than lSize </td></tr>
- <tr><td class="paramname">s</td><td>- an <a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing data returned by fseek </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="ab0fa19686ca8953ff4b556fb5b249135" name="ab0fa19686ca8953ff4b556fb5b249135"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab0fa19686ca8953ff4b556fb5b249135">&#9670;&nbsp;</a></span>xbFopen() <span class="overload">[1/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbFopen </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sOpenMode</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFileName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iShareMode</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Xbase wrapper for standard libary fopen. </p>
-<p >This routine supports all the standard C library open modes. The Xbase routines only use "r" and "r+b".</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sOpenMode</td><td><table class="doxtable">
-<tr>
-<th>OpenMode</th><th>Description </th></tr>
-<tr>
-<td>r</td><td>Reading </td></tr>
-<tr>
-<td>r+</td><td>Reading and Writing </td></tr>
-<tr>
-<td>w</td><td>Open for writing. Truncate to zero bytes if it exists </td></tr>
-<tr>
-<td>w+</td><td>Open for reading and writing, truncate to zero bytes if it exists </td></tr>
-<tr>
-<td>a</td><td>Open for append </td></tr>
-<tr>
-<td>a+</td><td>Open for reading and writing (at end). </td></tr>
-</table>
-The mode can also include the letter "b" for binary ie; "r+b". The "b" is ignored on POSIX compliant systems, but is included for cross platform compatibility. </td></tr>
- <tr><td class="paramname">sFileName</td><td>File name to open </td></tr>
- <tr><td class="paramname">iShareMode</td><td>XB_SINGLE_USER<br />
- XB_MULTI_USER<br />
- </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a0548cedf0f26b7d8ac221f75b0cd048c" name="a0548cedf0f26b7d8ac221f75b0cd048c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0548cedf0f26b7d8ac221f75b0cd048c">&#9670;&nbsp;</a></span>xbFopen() <span class="overload">[2/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbFopen </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sOpenMode</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iShareMode</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Xbase wrapper for standard libary fopen. </p>
-<p >This routine supports all the standard C library open modes. The Xbase routines only use "r" and "r+".</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sOpenMode</td><td><table class="doxtable">
-<tr>
-<th>OpenMode</th><th>Description </th></tr>
-<tr>
-<td>r</td><td>Reading </td></tr>
-<tr>
-<td>r+</td><td>Reading and Writing </td></tr>
-<tr>
-<td>w</td><td>Open for writing. Truncate to zero bytes if it exists </td></tr>
-<tr>
-<td>w+</td><td>Open for reading and writing, truncate to zero bytes if it exists </td></tr>
-<tr>
-<td>a</td><td>Open for append </td></tr>
-<tr>
-<td>a+</td><td>Open for reading and writing (at end). </td></tr>
-</table>
-The mode can also include the letter "b" for binary ie; "r+b". The "b" is ignored on POSIX compliant systems, but is included for cross platform compatibility. </td></tr>
- <tr><td class="paramname">iShareMode</td><td>XB_SINGLE_USER<br />
- XB_MULTI_USER<br />
- </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a7cdfef5ede9ac98d44a28a6b7a70972c" name="a7cdfef5ede9ac98d44a28a6b7a70972c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a7cdfef5ede9ac98d44a28a6b7a70972c">&#9670;&nbsp;</a></span>xbFopen() <span class="overload">[3/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbFopen </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iOpenMode</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="aabd113333b49c36cad23244b392baab4" name="aabd113333b49c36cad23244b392baab4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aabd113333b49c36cad23244b392baab4">&#9670;&nbsp;</a></span>xbFopen() <span class="overload">[4/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbFopen </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iOpenMode</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iShareMode</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Xbase wrapper for standard libary fopen. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iOpenMode</td><td>XB_READ<br />
- XB_READ_WRITE<br />
- </td></tr>
- <tr><td class="paramname">iShareMode</td><td>XB_SINGLE_USER<br />
- XB_MULTI_USER<br />
- </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="af2e940c78956e5cb6824f9a1bc404896" name="af2e940c78956e5cb6824f9a1bc404896"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af2e940c78956e5cb6824f9a1bc404896">&#9670;&nbsp;</a></span>xbFputc() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbFputc </td>
- <td>(</td>
- <td class="paramtype">xbInt32&#160;</td>
- <td class="paramname"><em>c</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Xbase wrapper for standard libary fputc. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>Character to write </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a863f74cf17df8186d88586b4d2a6441a" name="a863f74cf17df8186d88586b4d2a6441a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a863f74cf17df8186d88586b4d2a6441a">&#9670;&nbsp;</a></span>xbFputc() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbFputc </td>
- <td>(</td>
- <td class="paramtype">xbInt32&#160;</td>
- <td class="paramname"><em>c</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt32&#160;</td>
- <td class="paramname"><em>iNoOfTimes</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Xbase wrapper for standard libary fputc. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>Character to write </td></tr>
- <tr><td class="paramname">iNoOfTimes</td><td>Number of times to write the character </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a698f3b40216778562e639e6ca1a47573" name="a698f3b40216778562e639e6ca1a47573"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a698f3b40216778562e639e6ca1a47573">&#9670;&nbsp;</a></span>xbFputs()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbFputs </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>s</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Xbase wrapper for standard libary fputs. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">s</td><td><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> to write to file </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="ab4f6afaa1f77539f27a4f05c26e54e2f" name="ab4f6afaa1f77539f27a4f05c26e54e2f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab4f6afaa1f77539f27a4f05c26e54e2f">&#9670;&nbsp;</a></span>xbFread()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbFread </td>
- <td>(</td>
- <td class="paramtype">void *&#160;</td>
- <td class="paramname"><em>p</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">size_t&#160;</td>
- <td class="paramname"><em>size</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">size_t&#160;</td>
- <td class="paramname"><em>nmemb</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Xbase wrapper for standard libary fread. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">p</td><td>Pointer to data to write </td></tr>
- <tr><td class="paramname">size</td><td>size of write </td></tr>
- <tr><td class="paramname">nmemb</td><td>Number of times to read it </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a5337ab8918df240910c0d19b4f298e3d" name="a5337ab8918df240910c0d19b4f298e3d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5337ab8918df240910c0d19b4f298e3d">&#9670;&nbsp;</a></span>xbFseek()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbFseek </td>
- <td>(</td>
- <td class="paramtype">xbInt64&#160;</td>
- <td class="paramname"><em>lOffset</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt32&#160;</td>
- <td class="paramname"><em>iWhence</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Xbase wrapper for standard libary fseek. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">lOffset</td><td>Position in file to seek to </td></tr>
- <tr><td class="paramname">iWhence</td><td>SEEK_SET - from beginning of file<br />
- SEEK_CUR - from current position<br />
- SEEK_END - from end of file<br />
- </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a0e1c06aedfa7fbcb92e117f891edd13b" name="a0e1c06aedfa7fbcb92e117f891edd13b"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0e1c06aedfa7fbcb92e117f891edd13b">&#9670;&nbsp;</a></span>xbFtell()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">size_t xb::xbFile::xbFtell </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Xbase wrapper for standard libary ftell. </p>
-<p >Returns the current file position. </p><dl class="section return"><dt>Returns</dt><dd>Current file position. </dd></dl>
-
-</div>
-</div>
-<a id="a9891b792f585a696f38a5cf959e30918" name="a9891b792f585a696f38a5cf959e30918"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a9891b792f585a696f38a5cf959e30918">&#9670;&nbsp;</a></span>xbFTurnOffFileBuffering()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbFile::xbFTurnOffFileBuffering </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Turn off file buffering. </p>
-<p >Turns off file buffering. File buffering can't be used while in multi user mode. </p>
-
-</div>
-</div>
-<a id="a6aadd871d1782944703fed773d44b85f" name="a6aadd871d1782944703fed773d44b85f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6aadd871d1782944703fed773d44b85f">&#9670;&nbsp;</a></span>xbFwrite()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbFwrite </td>
- <td>(</td>
- <td class="paramtype">const void *&#160;</td>
- <td class="paramname"><em>p</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">size_t&#160;</td>
- <td class="paramname"><em>size</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">size_t&#160;</td>
- <td class="paramname"><em>nmemb</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Xbase wrapper for standard libary fwrite. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">p</td><td>Pointer to data buffer to write </td></tr>
- <tr><td class="paramname">size</td><td>Size of data to write </td></tr>
- <tr><td class="paramname">nmemb</td><td>Number of times to write data buffer </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a08463f506f425c2385acbe1a561506e9" name="a08463f506f425c2385acbe1a561506e9"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a08463f506f425c2385acbe1a561506e9">&#9670;&nbsp;</a></span>xbReadUntil()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbReadUntil </td>
- <td>(</td>
- <td class="paramtype">const char&#160;</td>
- <td class="paramname"><em>cDelim</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sOut</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Read file until a particular character is encountered on input stream. </p>
-<p >This routine will read until cDelim is encountered or eof, which ever occurs first.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">cDelim</td><td>Delimiter to stop writing at. </td></tr>
- <tr><td class="paramname">sOut</td><td>Output <a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing data read </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="ab3c668a8570433188382d31d7c60bd48" name="ab3c668a8570433188382d31d7c60bd48"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab3c668a8570433188382d31d7c60bd48">&#9670;&nbsp;</a></span>xbRemove() <span class="overload">[1/3]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbRemove </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Delete file. </p>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a58f6a6751fdf7e9549c273bb75d93eb5" name="a58f6a6751fdf7e9549c273bb75d93eb5"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a58f6a6751fdf7e9549c273bb75d93eb5">&#9670;&nbsp;</a></span>xbRemove() <span class="overload">[2/3]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbRemove </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFileNameIn</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Delete file. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFileNameIn</td><td>Name of file to delete </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a6d919366c2ec95e529906bf8842cbf07" name="a6d919366c2ec95e529906bf8842cbf07"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6d919366c2ec95e529906bf8842cbf07">&#9670;&nbsp;</a></span>xbRemove() <span class="overload">[3/3]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbRemove </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFileNameIn</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iOption</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Delete file. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFileNameIn</td><td>Name of file to delete </td></tr>
- <tr><td class="paramname">iOption</td><td>If Set to 1, assume this is a delete request for a dbf file, and should rename the dbt file also </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="afc8ce113aa72611a278233f9bb170012" name="afc8ce113aa72611a278233f9bb170012"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#afc8ce113aa72611a278233f9bb170012">&#9670;&nbsp;</a></span>xbRename()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbRename </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sOldName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sNewName</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Rename file. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sOldName</td><td>Original file name </td></tr>
- <tr><td class="paramname">sNewName</td><td>New file name </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a7996b6e084665c37c3892faea64b3505" name="a7996b6e084665c37c3892faea64b3505"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a7996b6e084665c37c3892faea64b3505">&#9670;&nbsp;</a></span>xbRewind()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbFile::xbRewind </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Xbase wrapper for rewind. </p>
-<p >Set file pointer at beginning of file. </p>
-
-</div>
-</div>
-<a id="a518bfcbfa3699d883cf89affee383296" name="a518bfcbfa3699d883cf89affee383296"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a518bfcbfa3699d883cf89affee383296">&#9670;&nbsp;</a></span>xbTruncate()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbTruncate </td>
- <td>(</td>
- <td class="paramtype">xbInt64&#160;</td>
- <td class="paramname"><em>llSize</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Xbase wrapper for ftruncate. </p>
-<p >Set file size to llSize </p><dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">llSize</td><td>New file size. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a8ed0693b10b95aaa4e46037758d160ed" name="a8ed0693b10b95aaa4e46037758d160ed"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a8ed0693b10b95aaa4e46037758d160ed">&#9670;&nbsp;</a></span>Zap()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::Zap </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Zap (remove) everything from the file,. </p>
-<p >This routine eliminates everything from the dbf file and dbt memo file. </p><dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<h2 class="groupheader">Field Documentation</h2>
-<a id="a8734e799707582f022fc341d515650f4" name="a8734e799707582f022fc341d515650f4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a8734e799707582f022fc341d515650f4">&#9670;&nbsp;</a></span>cEncryptionFlag</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">char xb::xbDbf::cEncryptionFlag</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ad59074633641e03647e54d2b66c9102b" name="ad59074633641e03647e54d2b66c9102b"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ad59074633641e03647e54d2b66c9102b">&#9670;&nbsp;</a></span>cIndexFlag</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">char xb::xbDbf::cIndexFlag</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="aea1dfe5cbd1f9cdbcfc8eb04b2c3d5f1" name="aea1dfe5cbd1f9cdbcfc8eb04b2c3d5f1"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aea1dfe5cbd1f9cdbcfc8eb04b2c3d5f1">&#9670;&nbsp;</a></span>cLangDriver</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">char xb::xbDbf::cLangDriver</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ac3c89fc3bc6a6abf385478a8adbed970" name="ac3c89fc3bc6a6abf385478a8adbed970"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac3c89fc3bc6a6abf385478a8adbed970">&#9670;&nbsp;</a></span>cTransactionFlag</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">char xb::xbDbf::cTransactionFlag</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a6021789d314cd41488991e708fcd0df2" name="a6021789d314cd41488991e708fcd0df2"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6021789d314cd41488991e708fcd0df2">&#9670;&nbsp;</a></span>cUpdateDD</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">char xb::xbDbf::cUpdateDD</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a9340a5e8ee53eb0f3b6601eec2d71e1b" name="a9340a5e8ee53eb0f3b6601eec2d71e1b"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a9340a5e8ee53eb0f3b6601eec2d71e1b">&#9670;&nbsp;</a></span>cUpdateMM</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">char xb::xbDbf::cUpdateMM</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a4fcd6a86ddd32d4a9d76a4074573440a" name="a4fcd6a86ddd32d4a9d76a4074573440a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4fcd6a86ddd32d4a9d76a4074573440a">&#9670;&nbsp;</a></span>cUpdateYY</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">char xb::xbDbf::cUpdateYY</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a3a262abf658e5fa968b57ef457a69470" name="a3a262abf658e5fa968b57ef457a69470"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a3a262abf658e5fa968b57ef457a69470">&#9670;&nbsp;</a></span>cVersion</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">unsigned char xb::xbDbf::cVersion</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a6219f1b5e24ea12fe158cd5aea56988e" name="a6219f1b5e24ea12fe158cd5aea56988e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6219f1b5e24ea12fe158cd5aea56988e">&#9670;&nbsp;</a></span>ErrorCodeText</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">const char* xb::xbSsv::ErrorCodeText[]</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ab506450954bc86e7bf1d7c4efe681f43" name="ab506450954bc86e7bf1d7c4efe681f43"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab506450954bc86e7bf1d7c4efe681f43">&#9670;&nbsp;</a></span>iAutoCommit</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::iAutoCommit</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a6d8e193da3ca414eef1e8866ec5ca81b" name="a6d8e193da3ca414eef1e8866ec5ca81b"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6d8e193da3ca414eef1e8866ec5ca81b">&#9670;&nbsp;</a></span>iDbfStatus</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::iDbfStatus</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a5849e813f5e8e1cd180f0366637adbf3" name="a5849e813f5e8e1cd180f0366637adbf3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5849e813f5e8e1cd180f0366637adbf3">&#9670;&nbsp;</a></span>iEndianType</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbSsv::iEndianType = 0</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">protected</span><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a15f495446f0d75bcf2fa89e3b699d388" name="a15f495446f0d75bcf2fa89e3b699d388"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a15f495446f0d75bcf2fa89e3b699d388">&#9670;&nbsp;</a></span>iFileVersion</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::iFileVersion</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a5056757614c39f725cc775332494966a" name="a5056757614c39f725cc775332494966a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5056757614c39f725cc775332494966a">&#9670;&nbsp;</a></span>iNoOfFields</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbDbf::iNoOfFields</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a8a9b3bce0b741e73473d3ebbd6e6f1cd" name="a8a9b3bce0b741e73473d3ebbd6e6f1cd"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a8a9b3bce0b741e73473d3ebbd6e6f1cd">&#9670;&nbsp;</a></span>RecBuf</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">char* xb::xbDbf::RecBuf</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a353ebfc8a2960ef827f429ec74025606" name="a353ebfc8a2960ef827f429ec74025606"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a353ebfc8a2960ef827f429ec74025606">&#9670;&nbsp;</a></span>RecBuf2</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">char* xb::xbDbf::RecBuf2</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a73f9c792d0a769e2e604c1855245a276" name="a73f9c792d0a769e2e604c1855245a276"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a73f9c792d0a769e2e604c1855245a276">&#9670;&nbsp;</a></span>sAlias</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> xb::xbDbf::sAlias</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ad8c8b5eb12063bb898da1b2cc02cfce7" name="ad8c8b5eb12063bb898da1b2cc02cfce7"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ad8c8b5eb12063bb898da1b2cc02cfce7">&#9670;&nbsp;</a></span>SchemaPtr</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbSchemaRec* xb::xbDbf::SchemaPtr</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a9dec3164c3b264882df634915ecf21da" name="a9dec3164c3b264882df634915ecf21da"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a9dec3164c3b264882df634915ecf21da">&#9670;&nbsp;</a></span>sNullString</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> xb::xbSsv::sNullString = &quot;&quot;</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">protected</span><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a62f5fa9149ae0f6dc75642823de66918" name="a62f5fa9149ae0f6dc75642823de66918"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a62f5fa9149ae0f6dc75642823de66918">&#9670;&nbsp;</a></span>uiHeaderLen</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbUInt16 xb::xbDbf::uiHeaderLen</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a1760e222567e2c849f9c799b9d896e91" name="a1760e222567e2c849f9c799b9d896e91"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1760e222567e2c849f9c799b9d896e91">&#9670;&nbsp;</a></span>uiRecordLen</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbUInt16 xb::xbDbf::uiRecordLen</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="afcd99924606be0a9e1e25180bcd1abf8" name="afcd99924606be0a9e1e25180bcd1abf8"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#afcd99924606be0a9e1e25180bcd1abf8">&#9670;&nbsp;</a></span>ulCurRec</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbUInt32 xb::xbDbf::ulCurRec</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="acb594ab61dd35b17bdf28394083f8e87" name="acb594ab61dd35b17bdf28394083f8e87"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#acb594ab61dd35b17bdf28394083f8e87">&#9670;&nbsp;</a></span>ulNoOfRecs</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbUInt32 xb::xbDbf::ulNoOfRecs</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ae39a67ea391b46055d4ca299cb222004" name="ae39a67ea391b46055d4ca299cb222004"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae39a67ea391b46055d4ca299cb222004">&#9670;&nbsp;</a></span>xbase</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbXBase.html">xbXBase</a>* xb::xbFile::xbase</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following files:<ul>
-<li>/mnt/1Tdata/xbase/xbase64-4.1.0/src/include/<a class="el" href="xbdbf_8h_source.html">xbdbf.h</a></li>
-<li>/mnt/1Tdata/xbase/xbase64-4.1.0/src/core/<a class="el" href="xbdbf_8cpp.html">xbdbf.cpp</a></li>
-<li>/mnt/1Tdata/xbase/xbase64-4.1.0/src/core/<a class="el" href="xbfields_8cpp.html">xbfields.cpp</a></li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/classxb_1_1xbFile.html b/docs/doxygen/html/classxb_1_1xbFile.html
deleted file mode 100644
index 885e969..0000000
--- a/docs/doxygen/html/classxb_1_1xbFile.html
+++ /dev/null
@@ -1,3432 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: xb::xbFile Class Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="namespacexb.html">xb</a></li><li class="navelem"><a class="el" href="classxb_1_1xbFile.html">xbFile</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> &#124;
-<a href="#pub-static-attribs">Static Public Attributes</a> &#124;
-<a href="#pro-methods">Protected Member Functions</a> &#124;
-<a href="#pro-attribs">Protected Attributes</a> &#124;
-<a href="#pro-static-attribs">Static Protected Attributes</a> </div>
- <div class="headertitle"><div class="title">xb::xbFile Class Reference</div></div>
-</div><!--header-->
-<div class="contents">
-
-<p>Class for handling low level file I/O.
- <a href="classxb_1_1xbFile.html#details">More...</a></p>
-
-<p><code>#include &lt;<a class="el" href="xbfile_8h_source.html">xbfile.h</a>&gt;</code></p>
-<div class="dynheader">
-Inheritance diagram for xb::xbFile:</div>
-<div class="dyncontent">
- <div class="center">
- <img src="classxb_1_1xbFile.png" usemap="#xb::xbFile_map" alt=""/>
- <map id="xb::xbFile_map" name="xb::xbFile_map">
-<area href="classxb_1_1xbSsv.html" title="Class for handling shared system variables." alt="xb::xbSsv" shape="rect" coords="0,0,65,24"/>
-<area href="classxb_1_1xbDbf.html" title="Base class for handling dbf files/tables." alt="xb::xbDbf" shape="rect" coords="0,112,65,136"/>
- </map>
-</div></div>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:a869eedd74c6eddc308852eb546c87176"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a869eedd74c6eddc308852eb546c87176">xbFile</a> (<a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *x)</td></tr>
-<tr class="memdesc:a869eedd74c6eddc308852eb546c87176"><td class="mdescLeft">&#160;</td><td class="mdescRight">Class Constructor. <a href="classxb_1_1xbFile.html#a869eedd74c6eddc308852eb546c87176">More...</a><br /></td></tr>
-<tr class="separator:a869eedd74c6eddc308852eb546c87176"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a491f6c48076e89da2e791a42b2727a90"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a491f6c48076e89da2e791a42b2727a90">~xbFile</a> ()</td></tr>
-<tr class="memdesc:a491f6c48076e89da2e791a42b2727a90"><td class="mdescLeft">&#160;</td><td class="mdescRight">Class Destructor. <a href="classxb_1_1xbFile.html#a491f6c48076e89da2e791a42b2727a90">More...</a><br /></td></tr>
-<tr class="separator:a491f6c48076e89da2e791a42b2727a90"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a060acbfaa8d528f86cb59301814b414a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a060acbfaa8d528f86cb59301814b414a">SetHomeFolders</a> ()</td></tr>
-<tr class="memdesc:a060acbfaa8d528f86cb59301814b414a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create Home Folders. <a href="classxb_1_1xbFile.html#a060acbfaa8d528f86cb59301814b414a">More...</a><br /></td></tr>
-<tr class="separator:a060acbfaa8d528f86cb59301814b414a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aae9a2ddb0adb8165b4ac2b6a28a932f7"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aae9a2ddb0adb8165b4ac2b6a28a932f7">CreateUniqueFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDirIn, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sExtIn, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFqnOut)</td></tr>
-<tr class="memdesc:aae9a2ddb0adb8165b4ac2b6a28a932f7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a unique file name. <a href="classxb_1_1xbFile.html#aae9a2ddb0adb8165b4ac2b6a28a932f7">More...</a><br /></td></tr>
-<tr class="separator:aae9a2ddb0adb8165b4ac2b6a28a932f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae5ffabde2c88ea58324f27e471f6bfc0"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ae5ffabde2c88ea58324f27e471f6bfc0">CreateUniqueFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDirIn, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sExtIn, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFqnOut, xbInt16 iOption)</td></tr>
-<tr class="memdesc:ae5ffabde2c88ea58324f27e471f6bfc0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a unique file name. <a href="classxb_1_1xbFile.html#ae5ffabde2c88ea58324f27e471f6bfc0">More...</a><br /></td></tr>
-<tr class="separator:ae5ffabde2c88ea58324f27e471f6bfc0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:acd0fb2166b2bff7e8a1cf65a7bc8be1e"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#acd0fb2166b2bff7e8a1cf65a7bc8be1e">GetDirectory</a> () const</td></tr>
-<tr class="memdesc:acd0fb2166b2bff7e8a1cf65a7bc8be1e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the directory name. <a href="classxb_1_1xbFile.html#acd0fb2166b2bff7e8a1cf65a7bc8be1e">More...</a><br /></td></tr>
-<tr class="separator:acd0fb2166b2bff7e8a1cf65a7bc8be1e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac95cb882ccbcdedc9a233c6ad9fed07a"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ac95cb882ccbcdedc9a233c6ad9fed07a">GetFileName</a> () const</td></tr>
-<tr class="memdesc:ac95cb882ccbcdedc9a233c6ad9fed07a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the file name. <a href="classxb_1_1xbFile.html#ac95cb882ccbcdedc9a233c6ad9fed07a">More...</a><br /></td></tr>
-<tr class="separator:ac95cb882ccbcdedc9a233c6ad9fed07a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a31b4e641f93206ba23e2a5a27491dcd4"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a31b4e641f93206ba23e2a5a27491dcd4">GetFqFileName</a> () const</td></tr>
-<tr class="memdesc:a31b4e641f93206ba23e2a5a27491dcd4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the fully qualified file name. <a href="classxb_1_1xbFile.html#a31b4e641f93206ba23e2a5a27491dcd4">More...</a><br /></td></tr>
-<tr class="separator:a31b4e641f93206ba23e2a5a27491dcd4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae78a85255488bc78964c16946dbaead3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ae78a85255488bc78964c16946dbaead3">SetDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDirectory)</td></tr>
-<tr class="memdesc:ae78a85255488bc78964c16946dbaead3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the directory. <a href="classxb_1_1xbFile.html#ae78a85255488bc78964c16946dbaead3">More...</a><br /></td></tr>
-<tr class="separator:ae78a85255488bc78964c16946dbaead3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5419eb27e56822f828b2b88a9502a636"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5419eb27e56822f828b2b88a9502a636">SetFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName)</td></tr>
-<tr class="memdesc:a5419eb27e56822f828b2b88a9502a636"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the filename. <a href="classxb_1_1xbFile.html#a5419eb27e56822f828b2b88a9502a636">More...</a><br /></td></tr>
-<tr class="separator:a5419eb27e56822f828b2b88a9502a636"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aee832fa11db2077a532f49e1329bd05a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aee832fa11db2077a532f49e1329bd05a">SetFqFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFqName)</td></tr>
-<tr class="memdesc:aee832fa11db2077a532f49e1329bd05a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the fully qualifed filename. <a href="classxb_1_1xbFile.html#aee832fa11db2077a532f49e1329bd05a">More...</a><br /></td></tr>
-<tr class="separator:aee832fa11db2077a532f49e1329bd05a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a638e14262410a1627819f016a16cdce2"><td class="memItemLeft" align="right" valign="top">xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a638e14262410a1627819f016a16cdce2">GetBlockSize</a> () const</td></tr>
-<tr class="memdesc:a638e14262410a1627819f016a16cdce2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the block size. <a href="classxb_1_1xbFile.html#a638e14262410a1627819f016a16cdce2">More...</a><br /></td></tr>
-<tr class="separator:a638e14262410a1627819f016a16cdce2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a991c5676a6f38fa752435390989f413e"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a991c5676a6f38fa752435390989f413e">SetBlockSize</a> (xbUInt32 ulBlockSize)</td></tr>
-<tr class="memdesc:a991c5676a6f38fa752435390989f413e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the block size. <a href="classxb_1_1xbFile.html#a991c5676a6f38fa752435390989f413e">More...</a><br /></td></tr>
-<tr class="separator:a991c5676a6f38fa752435390989f413e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3c500dc9dac22c49496e4b29386b2dd3"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a3c500dc9dac22c49496e4b29386b2dd3">GetOpenMode</a> () const</td></tr>
-<tr class="memdesc:a3c500dc9dac22c49496e4b29386b2dd3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the open mode of the file. <a href="classxb_1_1xbFile.html#a3c500dc9dac22c49496e4b29386b2dd3">More...</a><br /></td></tr>
-<tr class="separator:a3c500dc9dac22c49496e4b29386b2dd3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9b63e05b77f477ff6109ff7b9432c1b6"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a9b63e05b77f477ff6109ff7b9432c1b6">GetShareMode</a> () const</td></tr>
-<tr class="memdesc:a9b63e05b77f477ff6109ff7b9432c1b6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the share mode of the file. <a href="classxb_1_1xbFile.html#a9b63e05b77f477ff6109ff7b9432c1b6">More...</a><br /></td></tr>
-<tr class="separator:a9b63e05b77f477ff6109ff7b9432c1b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a60c53998e3d1b694134b20a87bc9bf5a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a60c53998e3d1b694134b20a87bc9bf5a">GetFileDirPart</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileDirPartOut) const</td></tr>
-<tr class="memdesc:a60c53998e3d1b694134b20a87bc9bf5a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the directory part of the file name. <a href="classxb_1_1xbFile.html#a60c53998e3d1b694134b20a87bc9bf5a">More...</a><br /></td></tr>
-<tr class="separator:a60c53998e3d1b694134b20a87bc9bf5a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af5127c92892816e9bbc5c19653c4147a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#af5127c92892816e9bbc5c19653c4147a">GetFileDirPart</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sCompleteFileNameIn, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileDirPartOut) const</td></tr>
-<tr class="memdesc:af5127c92892816e9bbc5c19653c4147a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the directory part of the file name. <a href="classxb_1_1xbFile.html#af5127c92892816e9bbc5c19653c4147a">More...</a><br /></td></tr>
-<tr class="separator:af5127c92892816e9bbc5c19653c4147a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a57a9222e5cbb51019d4eeb2c3ac89fa2"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a57a9222e5cbb51019d4eeb2c3ac89fa2">GetFileExtPart</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileExtPartOut) const</td></tr>
-<tr class="memdesc:a57a9222e5cbb51019d4eeb2c3ac89fa2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the extension part of the file name. <a href="classxb_1_1xbFile.html#a57a9222e5cbb51019d4eeb2c3ac89fa2">More...</a><br /></td></tr>
-<tr class="separator:a57a9222e5cbb51019d4eeb2c3ac89fa2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab289b6ffe955321160c1f90220c22e25"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ab289b6ffe955321160c1f90220c22e25">GetFileExtPart</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sCompleteFileNameIn, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileExtPartOut) const</td></tr>
-<tr class="memdesc:ab289b6ffe955321160c1f90220c22e25"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the extension part of the file name. <a href="classxb_1_1xbFile.html#ab289b6ffe955321160c1f90220c22e25">More...</a><br /></td></tr>
-<tr class="separator:ab289b6ffe955321160c1f90220c22e25"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a81422b3dd52763d2cc6c77237ec9af0a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a81422b3dd52763d2cc6c77237ec9af0a">GetFileNamePart</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileNamePartOut) const</td></tr>
-<tr class="memdesc:a81422b3dd52763d2cc6c77237ec9af0a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the name part of the file name. <a href="classxb_1_1xbFile.html#a81422b3dd52763d2cc6c77237ec9af0a">More...</a><br /></td></tr>
-<tr class="separator:a81422b3dd52763d2cc6c77237ec9af0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6110763c5ae996b72c7a62c15bdecc73"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a6110763c5ae996b72c7a62c15bdecc73">GetFileNamePart</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sCompleteFileNameIn, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileNamePartOut) const</td></tr>
-<tr class="memdesc:a6110763c5ae996b72c7a62c15bdecc73"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the name part of the file name. <a href="classxb_1_1xbFile.html#a6110763c5ae996b72c7a62c15bdecc73">More...</a><br /></td></tr>
-<tr class="separator:a6110763c5ae996b72c7a62c15bdecc73"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5548236d38d43b89ae29b9a015b1f678"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5548236d38d43b89ae29b9a015b1f678">GetFileType</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileType) const</td></tr>
-<tr class="memdesc:a5548236d38d43b89ae29b9a015b1f678"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the file type aka Capitalized file extension. <a href="classxb_1_1xbFile.html#a5548236d38d43b89ae29b9a015b1f678">More...</a><br /></td></tr>
-<tr class="separator:a5548236d38d43b89ae29b9a015b1f678"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aaf2e697751a0beff41432a66bb83fb5e"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aaf2e697751a0beff41432a66bb83fb5e">GetXbaseFileTypeByte</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 &amp;iVersion)</td></tr>
-<tr class="memdesc:aaf2e697751a0beff41432a66bb83fb5e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the file type byte and version of the dbf file. <a href="classxb_1_1xbFile.html#aaf2e697751a0beff41432a66bb83fb5e">More...</a><br /></td></tr>
-<tr class="separator:aaf2e697751a0beff41432a66bb83fb5e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7af337808919680b90710ad5e8a99232"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a7af337808919680b90710ad5e8a99232">GetXbaseFileTypeByte</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, unsigned char &amp;cFileTypeByte)</td></tr>
-<tr class="memdesc:a7af337808919680b90710ad5e8a99232"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the file type byte and version of the dbf file. <a href="classxb_1_1xbFile.html#a7af337808919680b90710ad5e8a99232">More...</a><br /></td></tr>
-<tr class="separator:a7af337808919680b90710ad5e8a99232"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a78aebdd21d3de46a450d5f835e3027f6"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a78aebdd21d3de46a450d5f835e3027f6">GetXbaseFileTypeByte</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, unsigned char &amp;cFileTypeByte, xbInt16 &amp;iVersion)</td></tr>
-<tr class="memdesc:a78aebdd21d3de46a450d5f835e3027f6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the file type byte and version of the dbf file. <a href="classxb_1_1xbFile.html#a78aebdd21d3de46a450d5f835e3027f6">More...</a><br /></td></tr>
-<tr class="separator:a78aebdd21d3de46a450d5f835e3027f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae2b6ac26018dc28f77afbb3f008c3f66"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ae2b6ac26018dc28f77afbb3f008c3f66">DetermineXbaseTableVersion</a> (unsigned char cFileTypeByte) const</td></tr>
-<tr class="memdesc:ae2b6ac26018dc28f77afbb3f008c3f66"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determine xbase dbf version. <a href="classxb_1_1xbFile.html#ae2b6ac26018dc28f77afbb3f008c3f66">More...</a><br /></td></tr>
-<tr class="separator:ae2b6ac26018dc28f77afbb3f008c3f66"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5a740033664c9ad2611c90e2a6d0c2d3"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5a740033664c9ad2611c90e2a6d0c2d3">DetermineXbaseMemoVersion</a> (unsigned char cFileTypeByte) const</td></tr>
-<tr class="memdesc:a5a740033664c9ad2611c90e2a6d0c2d3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determine which version the memo (dbt) file is. <a href="classxb_1_1xbFile.html#a5a740033664c9ad2611c90e2a6d0c2d3">More...</a><br /></td></tr>
-<tr class="separator:a5a740033664c9ad2611c90e2a6d0c2d3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a78bd8a11dce102647095baf3aff2b006"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a78bd8a11dce102647095baf3aff2b006">FileExists</a> () const</td></tr>
-<tr class="memdesc:a78bd8a11dce102647095baf3aff2b006"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if a file exists. <a href="classxb_1_1xbFile.html#a78bd8a11dce102647095baf3aff2b006">More...</a><br /></td></tr>
-<tr class="separator:a78bd8a11dce102647095baf3aff2b006"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a174d8a6aabc9cfcd32fedbd1e5b13ddd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a174d8a6aabc9cfcd32fedbd1e5b13ddd">FileExists</a> (xbInt16 iOption) const</td></tr>
-<tr class="memdesc:a174d8a6aabc9cfcd32fedbd1e5b13ddd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if a file exists. <a href="classxb_1_1xbFile.html#a174d8a6aabc9cfcd32fedbd1e5b13ddd">More...</a><br /></td></tr>
-<tr class="separator:a174d8a6aabc9cfcd32fedbd1e5b13ddd"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a61130b4fbf4cf9d5972dcb4993de2f94"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a61130b4fbf4cf9d5972dcb4993de2f94">FileExists</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName) const</td></tr>
-<tr class="memdesc:a61130b4fbf4cf9d5972dcb4993de2f94"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if a file exists. <a href="classxb_1_1xbFile.html#a61130b4fbf4cf9d5972dcb4993de2f94">More...</a><br /></td></tr>
-<tr class="separator:a61130b4fbf4cf9d5972dcb4993de2f94"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0592168f39a10f2a401a88ef781f6148"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a0592168f39a10f2a401a88ef781f6148">FileExists</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iOption) const</td></tr>
-<tr class="memdesc:a0592168f39a10f2a401a88ef781f6148"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if a file exists. <a href="classxb_1_1xbFile.html#a0592168f39a10f2a401a88ef781f6148">More...</a><br /></td></tr>
-<tr class="separator:a0592168f39a10f2a401a88ef781f6148"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7fa837938a32dc9ca3fbc81cbaf50f59"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a7fa837938a32dc9ca3fbc81cbaf50f59">FileIsOpen</a> () const</td></tr>
-<tr class="memdesc:a7fa837938a32dc9ca3fbc81cbaf50f59"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if file is open. <a href="classxb_1_1xbFile.html#a7fa837938a32dc9ca3fbc81cbaf50f59">More...</a><br /></td></tr>
-<tr class="separator:a7fa837938a32dc9ca3fbc81cbaf50f59"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa1bb80340abc7a5c22f87f878e9dc825"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aa1bb80340abc7a5c22f87f878e9dc825">ReadBlock</a> (xbUInt32 ulBlockNo, size_t readSize, void *buf)</td></tr>
-<tr class="memdesc:aa1bb80340abc7a5c22f87f878e9dc825"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read a block of data from file. <a href="classxb_1_1xbFile.html#aa1bb80340abc7a5c22f87f878e9dc825">More...</a><br /></td></tr>
-<tr class="separator:aa1bb80340abc7a5c22f87f878e9dc825"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aef696b1c4c0ef5338e818599f695d485"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aef696b1c4c0ef5338e818599f695d485">ReadBlock</a> (xbUInt32 ulBlockNo, xbUInt32 ulBlockSize, size_t readSize, void *buf)</td></tr>
-<tr class="memdesc:aef696b1c4c0ef5338e818599f695d485"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read a block of data from file. <a href="classxb_1_1xbFile.html#aef696b1c4c0ef5338e818599f695d485">More...</a><br /></td></tr>
-<tr class="separator:aef696b1c4c0ef5338e818599f695d485"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5d871dcfecc2b4338f7a13722aab766c"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5d871dcfecc2b4338f7a13722aab766c">WriteBlock</a> (xbUInt32 ulBlockNo, size_t writeSize, void *buf)</td></tr>
-<tr class="memdesc:a5d871dcfecc2b4338f7a13722aab766c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a block of data to file. <a href="classxb_1_1xbFile.html#a5d871dcfecc2b4338f7a13722aab766c">More...</a><br /></td></tr>
-<tr class="separator:a5d871dcfecc2b4338f7a13722aab766c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a50b63c39e49d44e52078038027b24cc5"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a50b63c39e49d44e52078038027b24cc5">GetFileSize</a> (xbUInt64 &amp;ullFileSize)</td></tr>
-<tr class="memdesc:a50b63c39e49d44e52078038027b24cc5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the size of the file as reported by the OS. <a href="classxb_1_1xbFile.html#a50b63c39e49d44e52078038027b24cc5">More...</a><br /></td></tr>
-<tr class="separator:a50b63c39e49d44e52078038027b24cc5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a02df78f4c90313243f508fc56b95aba8"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a02df78f4c90313243f508fc56b95aba8">GetFileMtime</a> (time_t &amp;mtime)</td></tr>
-<tr class="memdesc:a02df78f4c90313243f508fc56b95aba8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the time of last file modification timestamp as reported by the OS. <a href="classxb_1_1xbFile.html#a02df78f4c90313243f508fc56b95aba8">More...</a><br /></td></tr>
-<tr class="separator:a02df78f4c90313243f508fc56b95aba8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab14e4a11427f5efb81cba1dd32bd1aa1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ab14e4a11427f5efb81cba1dd32bd1aa1">eGetDouble</a> (const char *p) const</td></tr>
-<tr class="memdesc:ab14e4a11427f5efb81cba1dd32bd1aa1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable double value. <a href="classxb_1_1xbFile.html#ab14e4a11427f5efb81cba1dd32bd1aa1">More...</a><br /></td></tr>
-<tr class="separator:ab14e4a11427f5efb81cba1dd32bd1aa1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a60b24a5afc984c586bf384c7e915ba0d"><td class="memItemLeft" align="right" valign="top">xbInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a60b24a5afc984c586bf384c7e915ba0d">eGetInt32</a> (const char *p) const</td></tr>
-<tr class="memdesc:a60b24a5afc984c586bf384c7e915ba0d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable long value. <a href="classxb_1_1xbFile.html#a60b24a5afc984c586bf384c7e915ba0d">More...</a><br /></td></tr>
-<tr class="separator:a60b24a5afc984c586bf384c7e915ba0d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a78f052529d39a18deaface5a0d47d0b0"><td class="memItemLeft" align="right" valign="top">xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a78f052529d39a18deaface5a0d47d0b0">eGetUInt32</a> (const char *p) const</td></tr>
-<tr class="memdesc:a78f052529d39a18deaface5a0d47d0b0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable unsigned long value. <a href="classxb_1_1xbFile.html#a78f052529d39a18deaface5a0d47d0b0">More...</a><br /></td></tr>
-<tr class="separator:a78f052529d39a18deaface5a0d47d0b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac40c991110ddc6fb30a72d90f4652762"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ac40c991110ddc6fb30a72d90f4652762">eGetInt16</a> (const char *p) const</td></tr>
-<tr class="memdesc:ac40c991110ddc6fb30a72d90f4652762"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable short value. <a href="classxb_1_1xbFile.html#ac40c991110ddc6fb30a72d90f4652762">More...</a><br /></td></tr>
-<tr class="separator:ac40c991110ddc6fb30a72d90f4652762"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a936ade458e6d5e6d29f9b5031888d189"><td class="memItemLeft" align="right" valign="top">xbUInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a936ade458e6d5e6d29f9b5031888d189">eGetUInt16</a> (const char *p) const</td></tr>
-<tr class="memdesc:a936ade458e6d5e6d29f9b5031888d189"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable unsigned short value. <a href="classxb_1_1xbFile.html#a936ade458e6d5e6d29f9b5031888d189">More...</a><br /></td></tr>
-<tr class="separator:a936ade458e6d5e6d29f9b5031888d189"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a98b6ff533ae93f90c977a2ba23eeb105"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a98b6ff533ae93f90c977a2ba23eeb105">ePutDouble</a> (char *p, <a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> d)</td></tr>
-<tr class="memdesc:a98b6ff533ae93f90c977a2ba23eeb105"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable double value to memory location. <a href="classxb_1_1xbFile.html#a98b6ff533ae93f90c977a2ba23eeb105">More...</a><br /></td></tr>
-<tr class="separator:a98b6ff533ae93f90c977a2ba23eeb105"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a19c37f76a2ccbb45019cb0fc373d3f46"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a19c37f76a2ccbb45019cb0fc373d3f46">ePutInt32</a> (char *p, xbInt32 l)</td></tr>
-<tr class="memdesc:a19c37f76a2ccbb45019cb0fc373d3f46"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable long value to memory location. <a href="classxb_1_1xbFile.html#a19c37f76a2ccbb45019cb0fc373d3f46">More...</a><br /></td></tr>
-<tr class="separator:a19c37f76a2ccbb45019cb0fc373d3f46"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa3f6ceae4b96f24875d86848bf13a173"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aa3f6ceae4b96f24875d86848bf13a173">ePutUInt32</a> (char *p, xbUInt32 ul)</td></tr>
-<tr class="memdesc:aa3f6ceae4b96f24875d86848bf13a173"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable unsigned long value to memory location. <a href="classxb_1_1xbFile.html#aa3f6ceae4b96f24875d86848bf13a173">More...</a><br /></td></tr>
-<tr class="separator:aa3f6ceae4b96f24875d86848bf13a173"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a29130f12739ac8fa837f4eaedf1338b2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a29130f12739ac8fa837f4eaedf1338b2">ePutInt16</a> (char *p, xbInt16 s)</td></tr>
-<tr class="memdesc:a29130f12739ac8fa837f4eaedf1338b2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable short value to memory location. <a href="classxb_1_1xbFile.html#a29130f12739ac8fa837f4eaedf1338b2">More...</a><br /></td></tr>
-<tr class="separator:a29130f12739ac8fa837f4eaedf1338b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a65e9839f92b96eac7b0d071fac3bbe40"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a65e9839f92b96eac7b0d071fac3bbe40">ePutUInt16</a> (char *p, xbUInt16 s)</td></tr>
-<tr class="memdesc:a65e9839f92b96eac7b0d071fac3bbe40"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable unsigned short value to memory location. <a href="classxb_1_1xbFile.html#a65e9839f92b96eac7b0d071fac3bbe40">More...</a><br /></td></tr>
-<tr class="separator:a65e9839f92b96eac7b0d071fac3bbe40"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a18830b5755d74818f60d9c7ce38ddf2d"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a18830b5755d74818f60d9c7ce38ddf2d">xbFclose</a> ()</td></tr>
-<tr class="memdesc:a18830b5755d74818f60d9c7ce38ddf2d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fclose. <a href="classxb_1_1xbFile.html#a18830b5755d74818f60d9c7ce38ddf2d">More...</a><br /></td></tr>
-<tr class="separator:a18830b5755d74818f60d9c7ce38ddf2d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af5b6356832d2a67212070a1aa605f170"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#af5b6356832d2a67212070a1aa605f170">xbFeof</a> ()</td></tr>
-<tr class="memdesc:af5b6356832d2a67212070a1aa605f170"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary feof. <a href="classxb_1_1xbFile.html#af5b6356832d2a67212070a1aa605f170">More...</a><br /></td></tr>
-<tr class="separator:af5b6356832d2a67212070a1aa605f170"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad205184d43409f04216540ae22f15009"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ad205184d43409f04216540ae22f15009">xbFflush</a> ()</td></tr>
-<tr class="memdesc:ad205184d43409f04216540ae22f15009"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fflush. <a href="classxb_1_1xbFile.html#ad205184d43409f04216540ae22f15009">More...</a><br /></td></tr>
-<tr class="separator:ad205184d43409f04216540ae22f15009"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:afb1c584d2895ffb7834df80aea7eb1e4"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#afb1c584d2895ffb7834df80aea7eb1e4">xbFgetc</a> (xbInt32 &amp;c)</td></tr>
-<tr class="memdesc:afb1c584d2895ffb7834df80aea7eb1e4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fgetc. <a href="classxb_1_1xbFile.html#afb1c584d2895ffb7834df80aea7eb1e4">More...</a><br /></td></tr>
-<tr class="separator:afb1c584d2895ffb7834df80aea7eb1e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5ee229bda4d7d6695e122200e581e7a6"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5ee229bda4d7d6695e122200e581e7a6">xbFgetc</a> (char &amp;c)</td></tr>
-<tr class="memdesc:a5ee229bda4d7d6695e122200e581e7a6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fgetc. <a href="classxb_1_1xbFile.html#a5ee229bda4d7d6695e122200e581e7a6">More...</a><br /></td></tr>
-<tr class="separator:a5ee229bda4d7d6695e122200e581e7a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7cdfef5ede9ac98d44a28a6b7a70972c"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a7cdfef5ede9ac98d44a28a6b7a70972c">xbFopen</a> (xbInt16 iOpenMode)</td></tr>
-<tr class="separator:a7cdfef5ede9ac98d44a28a6b7a70972c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0548cedf0f26b7d8ac221f75b0cd048c"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a0548cedf0f26b7d8ac221f75b0cd048c">xbFopen</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sOpenMode, xbInt16 iShareMode)</td></tr>
-<tr class="memdesc:a0548cedf0f26b7d8ac221f75b0cd048c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fopen. <a href="classxb_1_1xbFile.html#a0548cedf0f26b7d8ac221f75b0cd048c">More...</a><br /></td></tr>
-<tr class="separator:a0548cedf0f26b7d8ac221f75b0cd048c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aabd113333b49c36cad23244b392baab4"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aabd113333b49c36cad23244b392baab4">xbFopen</a> (xbInt16 iOpenMode, xbInt16 iShareMode)</td></tr>
-<tr class="memdesc:aabd113333b49c36cad23244b392baab4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fopen. <a href="classxb_1_1xbFile.html#aabd113333b49c36cad23244b392baab4">More...</a><br /></td></tr>
-<tr class="separator:aabd113333b49c36cad23244b392baab4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab0fa19686ca8953ff4b556fb5b249135"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ab0fa19686ca8953ff4b556fb5b249135">xbFopen</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sMode, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iShareMode)</td></tr>
-<tr class="memdesc:ab0fa19686ca8953ff4b556fb5b249135"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fopen. <a href="classxb_1_1xbFile.html#ab0fa19686ca8953ff4b556fb5b249135">More...</a><br /></td></tr>
-<tr class="separator:ab0fa19686ca8953ff4b556fb5b249135"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af2e940c78956e5cb6824f9a1bc404896"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#af2e940c78956e5cb6824f9a1bc404896">xbFputc</a> (xbInt32 c)</td></tr>
-<tr class="memdesc:af2e940c78956e5cb6824f9a1bc404896"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fputc. <a href="classxb_1_1xbFile.html#af2e940c78956e5cb6824f9a1bc404896">More...</a><br /></td></tr>
-<tr class="separator:af2e940c78956e5cb6824f9a1bc404896"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a863f74cf17df8186d88586b4d2a6441a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a863f74cf17df8186d88586b4d2a6441a">xbFputc</a> (xbInt32 c, xbInt32 iNoTimes)</td></tr>
-<tr class="memdesc:a863f74cf17df8186d88586b4d2a6441a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fputc. <a href="classxb_1_1xbFile.html#a863f74cf17df8186d88586b4d2a6441a">More...</a><br /></td></tr>
-<tr class="separator:a863f74cf17df8186d88586b4d2a6441a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a698f3b40216778562e639e6ca1a47573"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a698f3b40216778562e639e6ca1a47573">xbFputs</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;s)</td></tr>
-<tr class="memdesc:a698f3b40216778562e639e6ca1a47573"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fputs. <a href="classxb_1_1xbFile.html#a698f3b40216778562e639e6ca1a47573">More...</a><br /></td></tr>
-<tr class="separator:a698f3b40216778562e639e6ca1a47573"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab4f6afaa1f77539f27a4f05c26e54e2f"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ab4f6afaa1f77539f27a4f05c26e54e2f">xbFread</a> (void *ptr, size_t size, size_t nmemb)</td></tr>
-<tr class="memdesc:ab4f6afaa1f77539f27a4f05c26e54e2f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fread. <a href="classxb_1_1xbFile.html#ab4f6afaa1f77539f27a4f05c26e54e2f">More...</a><br /></td></tr>
-<tr class="separator:ab4f6afaa1f77539f27a4f05c26e54e2f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad245955ace26e5dde85fd4373b30d026"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ad245955ace26e5dde85fd4373b30d026">xbFgets</a> (size_t lSize, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLine)</td></tr>
-<tr class="memdesc:ad245955ace26e5dde85fd4373b30d026"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fgets. <a href="classxb_1_1xbFile.html#ad245955ace26e5dde85fd4373b30d026">More...</a><br /></td></tr>
-<tr class="separator:ad245955ace26e5dde85fd4373b30d026"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0e1c06aedfa7fbcb92e117f891edd13b"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a0e1c06aedfa7fbcb92e117f891edd13b">xbFtell</a> ()</td></tr>
-<tr class="memdesc:a0e1c06aedfa7fbcb92e117f891edd13b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary ftell. <a href="classxb_1_1xbFile.html#a0e1c06aedfa7fbcb92e117f891edd13b">More...</a><br /></td></tr>
-<tr class="separator:a0e1c06aedfa7fbcb92e117f891edd13b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5337ab8918df240910c0d19b4f298e3d"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5337ab8918df240910c0d19b4f298e3d">xbFseek</a> (xbInt64 llOffset, xbInt32 whence)</td></tr>
-<tr class="memdesc:a5337ab8918df240910c0d19b4f298e3d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fseek. <a href="classxb_1_1xbFile.html#a5337ab8918df240910c0d19b4f298e3d">More...</a><br /></td></tr>
-<tr class="separator:a5337ab8918df240910c0d19b4f298e3d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9891b792f585a696f38a5cf959e30918"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a9891b792f585a696f38a5cf959e30918">xbFTurnOffFileBuffering</a> ()</td></tr>
-<tr class="memdesc:a9891b792f585a696f38a5cf959e30918"><td class="mdescLeft">&#160;</td><td class="mdescRight">Turn off file buffering. <a href="classxb_1_1xbFile.html#a9891b792f585a696f38a5cf959e30918">More...</a><br /></td></tr>
-<tr class="separator:a9891b792f585a696f38a5cf959e30918"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6aadd871d1782944703fed773d44b85f"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a6aadd871d1782944703fed773d44b85f">xbFwrite</a> (const void *ptr, size_t lSize, size_t lNmemb)</td></tr>
-<tr class="memdesc:a6aadd871d1782944703fed773d44b85f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fwrite. <a href="classxb_1_1xbFile.html#a6aadd871d1782944703fed773d44b85f">More...</a><br /></td></tr>
-<tr class="separator:a6aadd871d1782944703fed773d44b85f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a08463f506f425c2385acbe1a561506e9"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a08463f506f425c2385acbe1a561506e9">xbReadUntil</a> (const char cDelim, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sOut)</td></tr>
-<tr class="memdesc:a08463f506f425c2385acbe1a561506e9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read file until a particular character is encountered on input stream. <a href="classxb_1_1xbFile.html#a08463f506f425c2385acbe1a561506e9">More...</a><br /></td></tr>
-<tr class="separator:a08463f506f425c2385acbe1a561506e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6d919366c2ec95e529906bf8842cbf07"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a6d919366c2ec95e529906bf8842cbf07">xbRemove</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iOption)</td></tr>
-<tr class="memdesc:a6d919366c2ec95e529906bf8842cbf07"><td class="mdescLeft">&#160;</td><td class="mdescRight">Delete file. <a href="classxb_1_1xbFile.html#a6d919366c2ec95e529906bf8842cbf07">More...</a><br /></td></tr>
-<tr class="separator:a6d919366c2ec95e529906bf8842cbf07"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a58f6a6751fdf7e9549c273bb75d93eb5"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a58f6a6751fdf7e9549c273bb75d93eb5">xbRemove</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName)</td></tr>
-<tr class="memdesc:a58f6a6751fdf7e9549c273bb75d93eb5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Delete file. <a href="classxb_1_1xbFile.html#a58f6a6751fdf7e9549c273bb75d93eb5">More...</a><br /></td></tr>
-<tr class="separator:a58f6a6751fdf7e9549c273bb75d93eb5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab3c668a8570433188382d31d7c60bd48"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ab3c668a8570433188382d31d7c60bd48">xbRemove</a> ()</td></tr>
-<tr class="memdesc:ab3c668a8570433188382d31d7c60bd48"><td class="mdescLeft">&#160;</td><td class="mdescRight">Delete file. <a href="classxb_1_1xbFile.html#ab3c668a8570433188382d31d7c60bd48">More...</a><br /></td></tr>
-<tr class="separator:ab3c668a8570433188382d31d7c60bd48"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:afc8ce113aa72611a278233f9bb170012"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#afc8ce113aa72611a278233f9bb170012">xbRename</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sOldName, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sNewName)</td></tr>
-<tr class="memdesc:afc8ce113aa72611a278233f9bb170012"><td class="mdescLeft">&#160;</td><td class="mdescRight">Rename file. <a href="classxb_1_1xbFile.html#afc8ce113aa72611a278233f9bb170012">More...</a><br /></td></tr>
-<tr class="separator:afc8ce113aa72611a278233f9bb170012"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7996b6e084665c37c3892faea64b3505"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a7996b6e084665c37c3892faea64b3505">xbRewind</a> ()</td></tr>
-<tr class="memdesc:a7996b6e084665c37c3892faea64b3505"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for rewind. <a href="classxb_1_1xbFile.html#a7996b6e084665c37c3892faea64b3505">More...</a><br /></td></tr>
-<tr class="separator:a7996b6e084665c37c3892faea64b3505"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a518bfcbfa3699d883cf89affee383296"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a518bfcbfa3699d883cf89affee383296">xbTruncate</a> (xbInt64 llSize)</td></tr>
-<tr class="memdesc:a518bfcbfa3699d883cf89affee383296"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for ftruncate. <a href="classxb_1_1xbFile.html#a518bfcbfa3699d883cf89affee383296">More...</a><br /></td></tr>
-<tr class="separator:a518bfcbfa3699d883cf89affee383296"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a361e3cc318bbf1c4d10f069e0800a24e"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a361e3cc318bbf1c4d10f069e0800a24e">NameSuffixMissing</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iOption) const</td></tr>
-<tr class="memdesc:a361e3cc318bbf1c4d10f069e0800a24e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines status of file extension. <a href="classxb_1_1xbFile.html#a361e3cc318bbf1c4d10f069e0800a24e">More...</a><br /></td></tr>
-<tr class="separator:a361e3cc318bbf1c4d10f069e0800a24e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a97dfa59ab9a8e9f17454da0faceb023d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a97dfa59ab9a8e9f17454da0faceb023d">DisplayError</a> (xbInt16 ErrorCode) const</td></tr>
-<tr class="memdesc:a97dfa59ab9a8e9f17454da0faceb023d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Display error message on console for a given error number. <a href="classxb_1_1xbSsv.html#a97dfa59ab9a8e9f17454da0faceb023d">More...</a><br /></td></tr>
-<tr class="separator:a97dfa59ab9a8e9f17454da0faceb023d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6fbb9c3a550ab0b3378f9586a57791d2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a6fbb9c3a550ab0b3378f9586a57791d2">GetDefaultDateFormat</a> () const</td></tr>
-<tr class="memdesc:a6fbb9c3a550ab0b3378f9586a57791d2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the default date format. <a href="classxb_1_1xbSsv.html#a6fbb9c3a550ab0b3378f9586a57791d2">More...</a><br /></td></tr>
-<tr class="separator:a6fbb9c3a550ab0b3378f9586a57791d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">GetDataDirectory</a> () const</td></tr>
-<tr class="memdesc:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current data directory. <a href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">More...</a><br /></td></tr>
-<tr class="separator:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a49cd162f066eef2b829ba7c9f6620243"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">GetEndianType</a> () const</td></tr>
-<tr class="memdesc:a49cd162f066eef2b829ba7c9f6620243"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the Endian type. <a href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">More...</a><br /></td></tr>
-<tr class="separator:a49cd162f066eef2b829ba7c9f6620243"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a56961d2a67b8e7470098626ac4dac7e4"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">GetErrorMessage</a> (xbInt16 ErrorCode) const</td></tr>
-<tr class="memdesc:a56961d2a67b8e7470098626ac4dac7e4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get an error message. <a href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">More...</a><br /></td></tr>
-<tr class="separator:a56961d2a67b8e7470098626ac4dac7e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">SetDataDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDataDirectory)</td></tr>
-<tr class="memdesc:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the data directory. <a href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">More...</a><br /></td></tr>
-<tr class="separator:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5f74db23f8902846d581935c7db73f9c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">SetDefaultDateFormat</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDefaultDateFormat)</td></tr>
-<tr class="memdesc:a5f74db23f8902846d581935c7db73f9c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the default date format. <a href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">More...</a><br /></td></tr>
-<tr class="separator:a5f74db23f8902846d581935c7db73f9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a62e4fd0a5888665c76bbbad962794e72"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72">BitSet</a> (unsigned char c, xbInt16 iBitNo) const</td></tr>
-<tr class="memdesc:a62e4fd0a5888665c76bbbad962794e72"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check a bit in a one byte field and see if it is set. <a href="classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72">More...</a><br /></td></tr>
-<tr class="separator:a62e4fd0a5888665c76bbbad962794e72"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a8551b15a3ce4fa2a40d698db01f4a9ae"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a8551b15a3ce4fa2a40d698db01f4a9ae">BitDump</a> (unsigned char c) const</td></tr>
-<tr class="separator:a8551b15a3ce4fa2a40d698db01f4a9ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aba1395b8e4c7f28c3614061de6e49190"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#aba1395b8e4c7f28c3614061de6e49190">BitDump</a> (char c) const</td></tr>
-<tr class="separator:aba1395b8e4c7f28c3614061de6e49190"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6982f973e81587b04916f4509746aaf5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a6982f973e81587b04916f4509746aaf5">GetDefaultAutoCommit</a> () const</td></tr>
-<tr class="memdesc:a6982f973e81587b04916f4509746aaf5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the default auto commit setting. <a href="classxb_1_1xbSsv.html#a6982f973e81587b04916f4509746aaf5">More...</a><br /></td></tr>
-<tr class="separator:a6982f973e81587b04916f4509746aaf5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">SetDefaultAutoCommit</a> (<a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bDefaultAutoCommit)</td></tr>
-<tr class="memdesc:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the default auto commit. <a href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">More...</a><br /></td></tr>
-<tr class="separator:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">GetHomeDir</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sHomeDirOut)</td></tr>
-<tr class="memdesc:abc9c06c95d71fbad8294e1ae8862cea9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get home directory. <a href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">More...</a><br /></td></tr>
-<tr class="separator:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4822315bded3969b59aeeb683c373051"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a4822315bded3969b59aeeb683c373051">GetLogDirectory</a> () const</td></tr>
-<tr class="separator:a4822315bded3969b59aeeb683c373051"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:afaef09435be73b3111f5edbd7091d861"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#afaef09435be73b3111f5edbd7091d861">GetLogFileName</a> () const</td></tr>
-<tr class="separator:afaef09435be73b3111f5edbd7091d861"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7b992ed97281bf25b5b66f5df686225e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a7b992ed97281bf25b5b66f5df686225e">SetLogDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLogDirectory)</td></tr>
-<tr class="separator:a7b992ed97281bf25b5b66f5df686225e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">GetMultiUser</a> () const</td></tr>
-<tr class="memdesc:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the multi user setting. <a href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">More...</a><br /></td></tr>
-<tr class="separator:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aba6e59512f7172dd55dcf92059e5928c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#aba6e59512f7172dd55dcf92059e5928c">SetMultiUser</a> (<a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bMultiUser)</td></tr>
-<tr class="memdesc:aba6e59512f7172dd55dcf92059e5928c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the multi user setting. <a href="classxb_1_1xbSsv.html#aba6e59512f7172dd55dcf92059e5928c">More...</a><br /></td></tr>
-<tr class="separator:aba6e59512f7172dd55dcf92059e5928c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-static-attribs" name="pub-static-attribs"></a>
-Static Public Attributes</h2></td></tr>
-<tr class="memitem:a6219f1b5e24ea12fe158cd5aea56988e"><td class="memItemLeft" align="right" valign="top">static const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a6219f1b5e24ea12fe158cd5aea56988e">ErrorCodeText</a> []</td></tr>
-<tr class="separator:a6219f1b5e24ea12fe158cd5aea56988e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-methods" name="pro-methods"></a>
-Protected Member Functions</h2></td></tr>
-<tr class="memitem:a904ec348fd029d4a76e72b8fde636108"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a904ec348fd029d4a76e72b8fde636108">SetEndianType</a> ()</td></tr>
-<tr class="memdesc:a904ec348fd029d4a76e72b8fde636108"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the endian type. <a href="classxb_1_1xbSsv.html#a904ec348fd029d4a76e72b8fde636108">More...</a><br /></td></tr>
-<tr class="separator:a904ec348fd029d4a76e72b8fde636108"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-attribs" name="pro-attribs"></a>
-Protected Attributes</h2></td></tr>
-<tr class="memitem:ae39a67ea391b46055d4ca299cb222004"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ae39a67ea391b46055d4ca299cb222004">xbase</a></td></tr>
-<tr class="separator:ae39a67ea391b46055d4ca299cb222004"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-static-attribs" name="pro-static-attribs"></a>
-Static Protected Attributes</h2></td></tr>
-<tr class="memitem:a5849e813f5e8e1cd180f0366637adbf3"><td class="memItemLeft" align="right" valign="top">static xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a5849e813f5e8e1cd180f0366637adbf3">iEndianType</a> = 0</td></tr>
-<tr class="separator:a5849e813f5e8e1cd180f0366637adbf3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9dec3164c3b264882df634915ecf21da"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classxb_1_1xbString.html">xbString</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a9dec3164c3b264882df634915ecf21da">sNullString</a> = &quot;&quot;</td></tr>
-<tr class="separator:a9dec3164c3b264882df634915ecf21da"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p >Class for handling low level file I/O. </p>
-<p >The <a class="el" href="classxb_1_1xbFile.html" title="Class for handling low level file I/O.">xbFile</a> class is used as an abstraction layer to isolate the library from the nuances of different operating systems and machine architectures.</p>
-<p >This module handles low level file I/O and is a base class for the (dbf) table, (dbt) memo and (ndx,mdx) index classes. Files are opened and manipulated via methods in the <a class="el" href="classxb_1_1xbFile.html" title="Class for handling low level file I/O.">xbFile</a> class.<br />
- This class handles:<br />
- 1) Big and little endian reads/writes<br />
- 2) 32 or 64 bit system calls, depending on OS<br />
- 3) Various different c/c++ calls to open/close/read/write based on OS and compiler version<br />
- <br />
- If you are wanting to port this library to a new platform, start with this class. This class could be used if you want to write a platform independent program that needs R/W file access. </p>
-</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
-<a id="a869eedd74c6eddc308852eb546c87176" name="a869eedd74c6eddc308852eb546c87176"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a869eedd74c6eddc308852eb546c87176">&#9670;&nbsp;</a></span>xbFile()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xb::xbFile::xbFile </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *&#160;</td>
- <td class="paramname"><em>x</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Class Constructor. </p>
-
-</div>
-</div>
-<a id="a491f6c48076e89da2e791a42b2727a90" name="a491f6c48076e89da2e791a42b2727a90"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a491f6c48076e89da2e791a42b2727a90">&#9670;&nbsp;</a></span>~xbFile()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xb::xbFile::~xbFile </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Class Destructor. </p>
-
-</div>
-</div>
-<h2 class="groupheader">Member Function Documentation</h2>
-<a id="aba1395b8e4c7f28c3614061de6e49190" name="aba1395b8e4c7f28c3614061de6e49190"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aba1395b8e4c7f28c3614061de6e49190">&#9670;&nbsp;</a></span>BitDump() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::BitDump </td>
- <td>(</td>
- <td class="paramtype">char&#160;</td>
- <td class="paramname"><em>c</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a8551b15a3ce4fa2a40d698db01f4a9ae" name="a8551b15a3ce4fa2a40d698db01f4a9ae"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a8551b15a3ce4fa2a40d698db01f4a9ae">&#9670;&nbsp;</a></span>BitDump() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::BitDump </td>
- <td>(</td>
- <td class="paramtype">unsigned char&#160;</td>
- <td class="paramname"><em>c</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a62e4fd0a5888665c76bbbad962794e72" name="a62e4fd0a5888665c76bbbad962794e72"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a62e4fd0a5888665c76bbbad962794e72">&#9670;&nbsp;</a></span>BitSet()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbSsv::BitSet </td>
- <td>(</td>
- <td class="paramtype">unsigned char&#160;</td>
- <td class="paramname"><em>c</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iBitNo</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Check a bit in a one byte field and see if it is set. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>One byte char field to examine. </td></tr>
- <tr><td class="paramname">iBitNo</td><td>which bit to examine. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue Bit is set<br />
- xbFalse Bit is not set </dd></dl>
-
-</div>
-</div>
-<a id="aae9a2ddb0adb8165b4ac2b6a28a932f7" name="aae9a2ddb0adb8165b4ac2b6a28a932f7"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aae9a2ddb0adb8165b4ac2b6a28a932f7">&#9670;&nbsp;</a></span>CreateUniqueFileName() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::CreateUniqueFileName </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sDirIn</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sExtIn</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFqnOut</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Create a unique file name. </p>
-<p >Given a directory and file extension as inputs, create a unique file name.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sDirIn</td><td>Directory </td></tr>
- <tr><td class="paramname">sExtIn</td><td>File Extension </td></tr>
- <tr><td class="paramname">sFqnOut</td><td>A fully qualifed unique file name as output </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="ae5ffabde2c88ea58324f27e471f6bfc0" name="ae5ffabde2c88ea58324f27e471f6bfc0"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae5ffabde2c88ea58324f27e471f6bfc0">&#9670;&nbsp;</a></span>CreateUniqueFileName() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::CreateUniqueFileName </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sDirIn</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sExtIn</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFqnOut</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iOption</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Create a unique file name. </p>
-<p >Given a directory and file extension as inputs, create a unique file name.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sDirIn</td><td>Directory </td></tr>
- <tr><td class="paramname">sExtIn</td><td>File Extension </td></tr>
- <tr><td class="paramname">iOption</td><td>0 - look only for one file for a given directory and extension<br />
- 1 - if file name extension is "dbf" or "DBF", verify unique dbt or DBT (memo) file is also available<br />
- </td></tr>
- <tr><td class="paramname">sFqnOut</td><td>A fully qualifed unique file name as output </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a5a740033664c9ad2611c90e2a6d0c2d3" name="a5a740033664c9ad2611c90e2a6d0c2d3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5a740033664c9ad2611c90e2a6d0c2d3">&#9670;&nbsp;</a></span>DetermineXbaseMemoVersion()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::DetermineXbaseMemoVersion </td>
- <td>(</td>
- <td class="paramtype">unsigned char&#160;</td>
- <td class="paramname"><em>cFileTypeByte</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Determine which version the memo (dbt) file is. </p>
-<p >This routine uses the first byte in the dbf file to determine which memo file version is in use. The main difference between version 3 and 4 is that version 4 will reuse blocks if they become available. Version 3 does not.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">cFileTypeByte</td><td>is an output field and is one of:<br />
- <br />
- 0 - none<br />
- 3 - Dbase III+<br />
- 4 - Dbase IV<br />
-</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="ae2b6ac26018dc28f77afbb3f008c3f66" name="ae2b6ac26018dc28f77afbb3f008c3f66"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae2b6ac26018dc28f77afbb3f008c3f66">&#9670;&nbsp;</a></span>DetermineXbaseTableVersion()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::DetermineXbaseTableVersion </td>
- <td>(</td>
- <td class="paramtype">unsigned char&#160;</td>
- <td class="paramname"><em>cFileTypeByte</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Determine xbase dbf version. </p>
-<p >This routine is used to determine which version of the Xbase classes can be used for a given DBF file.<br />
-</p>
-<p >It attempts to use the highest version compiled into the library.<br />
-</p>
-<p >References:<br />
- This routine uses the first byte from the dbf file.<br />
- Per DBase documentation:<br />
- Valid dBASE for Windows table file, bits 0-2 indicate version number: 3 for dBASE Level 5, 4 for dBASE Level 7.<br />
- Bit 3 and bit 7 indicate presence of a dBASE IV or dBASE for Windows memo file;<br />
- Bits 4-6 indicate the presence of a dBASE IV SQL table;<br />
- Bit 7 indicates the presence of any .DBT memo file (either a dBASE III PLUS type or a dBASE IV or dBASE for Windows memo file).<br />
- <br />
- Bachmann spec (used extensively in library build), page 7 - does not match DBase documentation<br />
- <br />
- returns<br />
- 0 - unknown<br />
- 3 - Dbase level 3<br />
- 4 - Dbase level 4<br />
- 5 - Dbase Level 5 (future)<br />
- 7 - Dbase Level 7 (future)<br />
- <br />
- 1x - Clipper files (future)<br />
- 2x - Foxbase files (future)<br />
- <br />
- </p>
-
-</div>
-</div>
-<a id="a97dfa59ab9a8e9f17454da0faceb023d" name="a97dfa59ab9a8e9f17454da0faceb023d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a97dfa59ab9a8e9f17454da0faceb023d">&#9670;&nbsp;</a></span>DisplayError()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::DisplayError </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iErrorCode</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Display error message on console for a given error number. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iErrorCode</td><td>Error number to reference </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="ab14e4a11427f5efb81cba1dd32bd1aa1" name="ab14e4a11427f5efb81cba1dd32bd1aa1"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab14e4a11427f5efb81cba1dd32bd1aa1">&#9670;&nbsp;</a></span>eGetDouble()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> xb::xbFile::eGetDouble </td>
- <td>(</td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>p</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Get a portable double value. </p>
-<p >This routine returns a double value from an 8 byte character stream, accounting for endian type.</p>
-<p >Converts a double (64 bit floating point) value stored at p from a portable format to the machine format.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">p</td><td>pointer to memory containing the portable double value</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>the double value. </dd></dl>
-
-</div>
-</div>
-<a id="ac40c991110ddc6fb30a72d90f4652762" name="ac40c991110ddc6fb30a72d90f4652762"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac40c991110ddc6fb30a72d90f4652762">&#9670;&nbsp;</a></span>eGetInt16()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::eGetInt16 </td>
- <td>(</td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>p</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Get a portable short value. </p>
-<p >This routine returns a short int value from a 2 byte character stream, accounting for endian type.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">p</td><td>pointer to memory containing the portable long value</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>the short value. </dd></dl>
-
-</div>
-</div>
-<a id="a60b24a5afc984c586bf384c7e915ba0d" name="a60b24a5afc984c586bf384c7e915ba0d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a60b24a5afc984c586bf384c7e915ba0d">&#9670;&nbsp;</a></span>eGetInt32()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt32 xb::xbFile::eGetInt32 </td>
- <td>(</td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>p</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Get a portable long value. </p>
-<p >This routine returns a long int value from a 4 byte character stream, accounting for endian type.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">p</td><td>pointer to memory containing the portable long value</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>the long value. </dd></dl>
-
-</div>
-</div>
-<a id="a936ade458e6d5e6d29f9b5031888d189" name="a936ade458e6d5e6d29f9b5031888d189"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a936ade458e6d5e6d29f9b5031888d189">&#9670;&nbsp;</a></span>eGetUInt16()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbUInt16 xb::xbFile::eGetUInt16 </td>
- <td>(</td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>p</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Get a portable unsigned short value. </p>
-<p >This routine returns a short unsigned int value from a 2 byte character stream, accounting for endian type.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">p</td><td>pointer to memory containing the portable long value</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>the short value. </dd></dl>
-
-</div>
-</div>
-<a id="a78f052529d39a18deaface5a0d47d0b0" name="a78f052529d39a18deaface5a0d47d0b0"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a78f052529d39a18deaface5a0d47d0b0">&#9670;&nbsp;</a></span>eGetUInt32()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbUInt32 xb::xbFile::eGetUInt32 </td>
- <td>(</td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>p</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Get a portable unsigned long value. </p>
-<p >This routine returns an unsigned long int value from a 4 byte character stream, accounting for endian type.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">p</td><td>pointer to memory containing the portable long value</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>the unsigned long value. </dd></dl>
-
-</div>
-</div>
-<a id="a98b6ff533ae93f90c977a2ba23eeb105" name="a98b6ff533ae93f90c977a2ba23eeb105"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a98b6ff533ae93f90c977a2ba23eeb105">&#9670;&nbsp;</a></span>ePutDouble()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbFile::ePutDouble </td>
- <td>(</td>
- <td class="paramtype">char *&#160;</td>
- <td class="paramname"><em>c</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a>&#160;</td>
- <td class="paramname"><em>d</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Write a portable double value to memory location. </p>
-<p >Converts a double (64 bit floating point) value from machine format to a portable format and stores the converted value in the memory referenced by c.</p>
-<p >This routine puts a double value to an 8 byte character stream</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>Pointer to memory to hold converted value </td></tr>
- <tr><td class="paramname">d</td><td>Input value to be converted </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a29130f12739ac8fa837f4eaedf1338b2" name="a29130f12739ac8fa837f4eaedf1338b2"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a29130f12739ac8fa837f4eaedf1338b2">&#9670;&nbsp;</a></span>ePutInt16()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbFile::ePutInt16 </td>
- <td>(</td>
- <td class="paramtype">char *&#160;</td>
- <td class="paramname"><em>c</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>s</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Write a portable short value to memory location. </p>
-<p >Converts a short (16 bit integer) value from machine format to a portable format and stores the converted value in the memory referenced by c.</p>
-<p >This routine puts a short value to a 2 byte character stream</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>Pointer to memory to hold converted value </td></tr>
- <tr><td class="paramname">s</td><td>Input value to be converted </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a19c37f76a2ccbb45019cb0fc373d3f46" name="a19c37f76a2ccbb45019cb0fc373d3f46"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a19c37f76a2ccbb45019cb0fc373d3f46">&#9670;&nbsp;</a></span>ePutInt32()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbFile::ePutInt32 </td>
- <td>(</td>
- <td class="paramtype">char *&#160;</td>
- <td class="paramname"><em>c</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt32&#160;</td>
- <td class="paramname"><em>l</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Write a portable long value to memory location. </p>
-<p >Converts a long (32 bit integer) value from machine format to a portable format and stores the converted value in the memory referenced by c.</p>
-<p >This routine puts a long value to a 4 byte character stream.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>Pointer to memory to hold converted value </td></tr>
- <tr><td class="paramname">l</td><td>Input value to be converted </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a65e9839f92b96eac7b0d071fac3bbe40" name="a65e9839f92b96eac7b0d071fac3bbe40"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a65e9839f92b96eac7b0d071fac3bbe40">&#9670;&nbsp;</a></span>ePutUInt16()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbFile::ePutUInt16 </td>
- <td>(</td>
- <td class="paramtype">char *&#160;</td>
- <td class="paramname"><em>c</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbUInt16&#160;</td>
- <td class="paramname"><em>s</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Write a portable unsigned short value to memory location. </p>
-<p >Converts an unsigned short (16 bit integer) value from machine format to a portable format and stores the converted value in the memory referenced by c.</p>
-<p >This routine puts an unsigned short value to a 2 byte character stream</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>Pointer to memory to hold converted value </td></tr>
- <tr><td class="paramname">s</td><td>Input value to be converted </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="aa3f6ceae4b96f24875d86848bf13a173" name="aa3f6ceae4b96f24875d86848bf13a173"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aa3f6ceae4b96f24875d86848bf13a173">&#9670;&nbsp;</a></span>ePutUInt32()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbFile::ePutUInt32 </td>
- <td>(</td>
- <td class="paramtype">char *&#160;</td>
- <td class="paramname"><em>c</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ul</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Write a portable unsigned long value to memory location. </p>
-<p >Converts an unsigned long (32 bit integer) value from machine format to a portable format and stores the converted value in the memory referenced by c.</p>
-<p >This routine puts an unsigned long value to a 4 byte character stream.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>Pointer to memory to hold converted value </td></tr>
- <tr><td class="paramname">ul</td><td>Input value to be converted </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a78bd8a11dce102647095baf3aff2b006" name="a78bd8a11dce102647095baf3aff2b006"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a78bd8a11dce102647095baf3aff2b006">&#9670;&nbsp;</a></span>FileExists() <span class="overload">[1/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbFile::FileExists </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Determines if a file exists. </p>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue if file exists<br />
- xbFalse if file does not exist </dd></dl>
-
-</div>
-</div>
-<a id="a61130b4fbf4cf9d5972dcb4993de2f94" name="a61130b4fbf4cf9d5972dcb4993de2f94"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a61130b4fbf4cf9d5972dcb4993de2f94">&#9670;&nbsp;</a></span>FileExists() <span class="overload">[2/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbFile::FileExists </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFileName</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Determines if a file exists. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFileName</td><td>- file name to check for</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue if file exists<br />
- xbFalse if file does not exist </dd></dl>
-
-</div>
-</div>
-<a id="a0592168f39a10f2a401a88ef781f6148" name="a0592168f39a10f2a401a88ef781f6148"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0592168f39a10f2a401a88ef781f6148">&#9670;&nbsp;</a></span>FileExists() <span class="overload">[3/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbFile::FileExists </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFileName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iOption</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Determines if a file exists. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFileName</td><td>- file name to check for </td></tr>
- <tr><td class="paramname">iOption</td><td>if 1, assume this is a request for a dbf file and check for the a dbt memo file also, returns true if both files are found</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue if both dbf and dbt files exist<br />
- xbFalse if file does not exist </dd></dl>
-
-</div>
-</div>
-<a id="a174d8a6aabc9cfcd32fedbd1e5b13ddd" name="a174d8a6aabc9cfcd32fedbd1e5b13ddd"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a174d8a6aabc9cfcd32fedbd1e5b13ddd">&#9670;&nbsp;</a></span>FileExists() <span class="overload">[4/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbFile::FileExists </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iOption</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Determines if a file exists. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iOption</td><td>if 1, assume this is a request for a dbf file and check for the a dbt memo file also, returns true if both files are found</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue if both files exist<br />
- xbFalse if file does not exist </dd></dl>
-
-</div>
-</div>
-<a id="a7fa837938a32dc9ca3fbc81cbaf50f59" name="a7fa837938a32dc9ca3fbc81cbaf50f59"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a7fa837938a32dc9ca3fbc81cbaf50f59">&#9670;&nbsp;</a></span>FileIsOpen()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbFile::FileIsOpen </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Determines if file is open. </p>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue if file is open<br />
- xbFalse if file is not open </dd></dl>
-
-</div>
-</div>
-<a id="a638e14262410a1627819f016a16cdce2" name="a638e14262410a1627819f016a16cdce2"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a638e14262410a1627819f016a16cdce2">&#9670;&nbsp;</a></span>GetBlockSize()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbUInt32 xb::xbFile::GetBlockSize </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Get the block size. </p>
-<dl class="section return"><dt>Returns</dt><dd>Block Size </dd></dl>
-
-</div>
-</div>
-<a id="a1d803a4bfc8ba0561267a0bf9e51f7d9" name="a1d803a4bfc8ba0561267a0bf9e51f7d9"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1d803a4bfc8ba0561267a0bf9e51f7d9">&#9670;&nbsp;</a></span>GetDataDirectory()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetDataDirectory </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the current data directory. </p>
-<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing the current data directory where the database files are stored. </dd></dl>
-
-</div>
-</div>
-<a id="a6982f973e81587b04916f4509746aaf5" name="a6982f973e81587b04916f4509746aaf5"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6982f973e81587b04916f4509746aaf5">&#9670;&nbsp;</a></span>GetDefaultAutoCommit()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbSsv::GetDefaultAutoCommit </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the default auto commit setting. </p>
-<p >When auto commit is enabled, the library will automatically post any updates when moving off an updated record or closing files. If auto commit is disabled, the application program will need to explicitly update the tables using using dbf-&gt;Put() and dbf-&gt;AppendRecord().</p>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue if auto commit is turned on<br />
- xbFalse is auto commit is turned off </dd></dl>
-
-</div>
-</div>
-<a id="a6fbb9c3a550ab0b3378f9586a57791d2" name="a6fbb9c3a550ab0b3378f9586a57791d2"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6fbb9c3a550ab0b3378f9586a57791d2">&#9670;&nbsp;</a></span>GetDefaultDateFormat()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetDefaultDateFormat </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the default date format. </p>
-<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing the default date format. </dd></dl>
-
-</div>
-</div>
-<a id="acd0fb2166b2bff7e8a1cf65a7bc8be1e" name="acd0fb2166b2bff7e8a1cf65a7bc8be1e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#acd0fb2166b2bff7e8a1cf65a7bc8be1e">&#9670;&nbsp;</a></span>GetDirectory()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbFile::GetDirectory </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Get the directory name. </p>
-<dl class="section return"><dt>Returns</dt><dd>the directory name of the file </dd></dl>
-
-</div>
-</div>
-<a id="a49cd162f066eef2b829ba7c9f6620243" name="a49cd162f066eef2b829ba7c9f6620243"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a49cd162f066eef2b829ba7c9f6620243">&#9670;&nbsp;</a></span>GetEndianType()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbSsv::GetEndianType </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the Endian type. </p>
-<dl class="section return"><dt>Returns</dt><dd>B - Big endian<br />
- L - Little endian<br />
- </dd></dl>
-
-</div>
-</div>
-<a id="a56961d2a67b8e7470098626ac4dac7e4" name="a56961d2a67b8e7470098626ac4dac7e4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a56961d2a67b8e7470098626ac4dac7e4">&#9670;&nbsp;</a></span>GetErrorMessage()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">const char * xb::xbSsv::GetErrorMessage </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iErrorCode</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get an error message. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iErrorCode</td><td>ErrorCode is the error number of description to be returned. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Returns a pointer to a string containing a text description for the error code. </dd></dl>
-
-</div>
-</div>
-<a id="af5127c92892816e9bbc5c19653c4147a" name="af5127c92892816e9bbc5c19653c4147a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af5127c92892816e9bbc5c19653c4147a">&#9670;&nbsp;</a></span>GetFileDirPart() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::GetFileDirPart </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sCompleteFileNameIn</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFileDirPartOut</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Get the directory part of the file name. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sCompleteFileNameIn</td><td>- a fully qualfied input file name </td></tr>
- <tr><td class="paramname">sFileDirPartOut</td><td>- the returned directory name part out of sCompleteFileNameIn </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a60c53998e3d1b694134b20a87bc9bf5a" name="a60c53998e3d1b694134b20a87bc9bf5a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a60c53998e3d1b694134b20a87bc9bf5a">&#9670;&nbsp;</a></span>GetFileDirPart() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::GetFileDirPart </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFileDirPartOut</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Get the directory part of the file name. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFileDirPartOut</td><td>- the returned directory name </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="ab289b6ffe955321160c1f90220c22e25" name="ab289b6ffe955321160c1f90220c22e25"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab289b6ffe955321160c1f90220c22e25">&#9670;&nbsp;</a></span>GetFileExtPart() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::GetFileExtPart </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sCompleteFileNameIn</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFileExtPartOut</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Get the extension part of the file name. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sCompleteFileNameIn</td><td>- a fully qualfied input file name</td></tr>
- <tr><td class="paramname">sFileExtPartOut</td><td>- the returned directory name part out of sCompleteFileNameIn </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a57a9222e5cbb51019d4eeb2c3ac89fa2" name="a57a9222e5cbb51019d4eeb2c3ac89fa2"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a57a9222e5cbb51019d4eeb2c3ac89fa2">&#9670;&nbsp;</a></span>GetFileExtPart() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::GetFileExtPart </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFileNameExtOut</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Get the extension part of the file name. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFileNameExtOut</td><td>- the returned extension part out of sCompleteFileNameIn </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a02df78f4c90313243f508fc56b95aba8" name="a02df78f4c90313243f508fc56b95aba8"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a02df78f4c90313243f508fc56b95aba8">&#9670;&nbsp;</a></span>GetFileMtime()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::GetFileMtime </td>
- <td>(</td>
- <td class="paramtype">time_t &amp;&#160;</td>
- <td class="paramname"><em>mtime</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Get the time of last file modification timestamp as reported by the OS. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">mtime</td><td>- returned time of last file modification </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="ac95cb882ccbcdedc9a233c6ad9fed07a" name="ac95cb882ccbcdedc9a233c6ad9fed07a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac95cb882ccbcdedc9a233c6ad9fed07a">&#9670;&nbsp;</a></span>GetFileName()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbFile::GetFileName </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Get the file name. </p>
-<dl class="section return"><dt>Returns</dt><dd>the file name portion of the file </dd></dl>
-
-</div>
-</div>
-<a id="a6110763c5ae996b72c7a62c15bdecc73" name="a6110763c5ae996b72c7a62c15bdecc73"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6110763c5ae996b72c7a62c15bdecc73">&#9670;&nbsp;</a></span>GetFileNamePart() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::GetFileNamePart </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sCompleteFileNameIn</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFileNamePartOut</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Get the name part of the file name. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sCompleteFileNameIn</td><td>- a fully qualified input file name </td></tr>
- <tr><td class="paramname">sFileNamePartOut</td><td>- the returned file name part out of sCompleteFileNameIn </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a81422b3dd52763d2cc6c77237ec9af0a" name="a81422b3dd52763d2cc6c77237ec9af0a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a81422b3dd52763d2cc6c77237ec9af0a">&#9670;&nbsp;</a></span>GetFileNamePart() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::GetFileNamePart </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFileNamePartOut</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Get the name part of the file name. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFileNamePartOut</td><td>- the returned file name part out of sCompleteFileNameIn </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a50b63c39e49d44e52078038027b24cc5" name="a50b63c39e49d44e52078038027b24cc5"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a50b63c39e49d44e52078038027b24cc5">&#9670;&nbsp;</a></span>GetFileSize()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::GetFileSize </td>
- <td>(</td>
- <td class="paramtype">xbUInt64 &amp;&#160;</td>
- <td class="paramname"><em>ullFileSize</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Get the size of the file as reported by the OS. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">ullFileSize</td><td>- unsigned long long field as output </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a5548236d38d43b89ae29b9a015b1f678" name="a5548236d38d43b89ae29b9a015b1f678"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5548236d38d43b89ae29b9a015b1f678">&#9670;&nbsp;</a></span>GetFileType()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::GetFileType </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFileTypeOut</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Get the file type aka Capitalized file extension. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFileTypeOut</td><td>- the returned extension part out of sCompleteFileNameIn </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a31b4e641f93206ba23e2a5a27491dcd4" name="a31b4e641f93206ba23e2a5a27491dcd4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a31b4e641f93206ba23e2a5a27491dcd4">&#9670;&nbsp;</a></span>GetFqFileName()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbFile::GetFqFileName </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Get the fully qualified file name. </p>
-<dl class="section return"><dt>Returns</dt><dd>the fully qualfied name of the file </dd></dl>
-
-</div>
-</div>
-<a id="abc9c06c95d71fbad8294e1ae8862cea9" name="abc9c06c95d71fbad8294e1ae8862cea9"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#abc9c06c95d71fbad8294e1ae8862cea9">&#9670;&nbsp;</a></span>GetHomeDir()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::GetHomeDir </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sHomeDirOut</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get home directory. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sHomeDirOut</td><td>- Output home directory for current user. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
-
-</div>
-</div>
-<a id="a4822315bded3969b59aeeb683c373051" name="a4822315bded3969b59aeeb683c373051"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4822315bded3969b59aeeb683c373051">&#9670;&nbsp;</a></span>GetLogDirectory()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetLogDirectory </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="afaef09435be73b3111f5edbd7091d861" name="afaef09435be73b3111f5edbd7091d861"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#afaef09435be73b3111f5edbd7091d861">&#9670;&nbsp;</a></span>GetLogFileName()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetLogFileName </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="abd58031c5f1c3766c24d47a82e6fd9c5" name="abd58031c5f1c3766c24d47a82e6fd9c5"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#abd58031c5f1c3766c24d47a82e6fd9c5">&#9670;&nbsp;</a></span>GetMultiUser()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbSsv::GetMultiUser </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the multi user setting. </p>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue - Multi user mode turned on.<br />
- xbFalse - Multi user mode turned off.<br />
- </dd></dl>
-
-</div>
-</div>
-<a id="a3c500dc9dac22c49496e4b29386b2dd3" name="a3c500dc9dac22c49496e4b29386b2dd3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a3c500dc9dac22c49496e4b29386b2dd3">&#9670;&nbsp;</a></span>GetOpenMode()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::GetOpenMode </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Get the open mode of the file. </p>
-<dl class="section return"><dt>Returns</dt><dd>XB_READ<br />
- XB_READ_WRITE<br />
- XB_WRITE<br />
- </dd></dl>
-
-</div>
-</div>
-<a id="a9b63e05b77f477ff6109ff7b9432c1b6" name="a9b63e05b77f477ff6109ff7b9432c1b6"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a9b63e05b77f477ff6109ff7b9432c1b6">&#9670;&nbsp;</a></span>GetShareMode()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::GetShareMode </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Get the share mode of the file. </p>
-<dl class="section return"><dt>Returns</dt><dd>XB_SINGLE_USER - (file buffering on&gt;<br />
- XB_MULTI_USER - (file buffering off)<br />
- </dd></dl>
-
-</div>
-</div>
-<a id="a7af337808919680b90710ad5e8a99232" name="a7af337808919680b90710ad5e8a99232"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a7af337808919680b90710ad5e8a99232">&#9670;&nbsp;</a></span>GetXbaseFileTypeByte() <span class="overload">[1/3]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::GetXbaseFileTypeByte </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFileName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">unsigned char &amp;&#160;</td>
- <td class="paramname"><em>cFileTypeByte</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Get the file type byte and version of the dbf file. </p>
-<p >Pull the first bye off the DBF file for further inspection. First byte has various bits set to determine what the file format is.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFileName</td><td>- Name of file to examine </td></tr>
- <tr><td class="paramname">cFileTypeByte</td><td>- Retruned first byte of dbf file </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a78aebdd21d3de46a450d5f835e3027f6" name="a78aebdd21d3de46a450d5f835e3027f6"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a78aebdd21d3de46a450d5f835e3027f6">&#9670;&nbsp;</a></span>GetXbaseFileTypeByte() <span class="overload">[2/3]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::GetXbaseFileTypeByte </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFileName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">unsigned char &amp;&#160;</td>
- <td class="paramname"><em>cFileTypeByte</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16 &amp;&#160;</td>
- <td class="paramname"><em>iVersion</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Get the file type byte and version of the dbf file. </p>
-<p >Pull the first bye off the DBF file for further inspection. First byte has various bits set to determine what the file format is.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFileName</td><td>- Name of file to examine </td></tr>
- <tr><td class="paramname">cFileTypeByte</td><td>- Returned first byte of dbf file </td></tr>
- <tr><td class="paramname">iVersion</td><td>- Returned file version </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="aaf2e697751a0beff41432a66bb83fb5e" name="aaf2e697751a0beff41432a66bb83fb5e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aaf2e697751a0beff41432a66bb83fb5e">&#9670;&nbsp;</a></span>GetXbaseFileTypeByte() <span class="overload">[3/3]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::GetXbaseFileTypeByte </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFileName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16 &amp;&#160;</td>
- <td class="paramname"><em>iVersion</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Get the file type byte and version of the dbf file. </p>
-<p >Pull the first bye off the DBF file for further inspection. First byte has various bits set to determine what the file format is.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFileName</td><td>- Name of file to examine </td></tr>
- <tr><td class="paramname">iVersion</td><td>- Returned file version </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a361e3cc318bbf1c4d10f069e0800a24e" name="a361e3cc318bbf1c4d10f069e0800a24e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a361e3cc318bbf1c4d10f069e0800a24e">&#9670;&nbsp;</a></span>NameSuffixMissing()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::NameSuffixMissing </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFileName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iOption</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Determines status of file extension. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFileName</td><td>- Name of file to examine </td></tr>
- <tr><td class="paramname">iOption</td><td>- Inspection type<br />
- 1 check for DBF<br />
- 2 check for NDX<br />
- 3 check for MDX<br />
- 4 check for NTX<br />
-</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>0 if suffix found<br />
- 1 if suffix not found, lower case<br />
- 2 is suffix not found, upper case<br />
- </dd></dl>
-
-</div>
-</div>
-<a id="aa1bb80340abc7a5c22f87f878e9dc825" name="aa1bb80340abc7a5c22f87f878e9dc825"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aa1bb80340abc7a5c22f87f878e9dc825">&#9670;&nbsp;</a></span>ReadBlock() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::ReadBlock </td>
- <td>(</td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ulBlockNo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">size_t&#160;</td>
- <td class="paramname"><em>lReadSize</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">void *&#160;</td>
- <td class="paramname"><em>buf</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Read a block of data from file. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">ulBlockNo</td><td>- block number to read </td></tr>
- <tr><td class="paramname">lReadSize</td><td>- size of data to read at block location, set to 0 to read blocksize </td></tr>
- <tr><td class="paramname">*buf</td><td>- pointer to buffer to write output data, assumed to be previosuly allocated and large enough to contain data </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="aef696b1c4c0ef5338e818599f695d485" name="aef696b1c4c0ef5338e818599f695d485"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aef696b1c4c0ef5338e818599f695d485">&#9670;&nbsp;</a></span>ReadBlock() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::ReadBlock </td>
- <td>(</td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ulBlockNo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ulBlockSize</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">size_t&#160;</td>
- <td class="paramname"><em>lReadSize</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">void *&#160;</td>
- <td class="paramname"><em>buf</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Read a block of data from file. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">ulBlockNo</td><td>- block number to read </td></tr>
- <tr><td class="paramname">ulBlockSize</td><td>- block size </td></tr>
- <tr><td class="paramname">lReadSize</td><td>- size of data to read at block location, set to 0 to read blocksize </td></tr>
- <tr><td class="paramname">buf</td><td>- pointer to buffer to write output data, assumed to be previosuly allocated and large enough to contain data </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a991c5676a6f38fa752435390989f413e" name="a991c5676a6f38fa752435390989f413e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a991c5676a6f38fa752435390989f413e">&#9670;&nbsp;</a></span>SetBlockSize()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::SetBlockSize </td>
- <td>(</td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ulBlockSize</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Set the block size. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">ulBlockSize</td><td>- unsigned long block size, divisible by 512 </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a57caaaadfbd089d9a58ecfcb50c88a6c" name="a57caaaadfbd089d9a58ecfcb50c88a6c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a57caaaadfbd089d9a58ecfcb50c88a6c">&#9670;&nbsp;</a></span>SetDataDirectory()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::SetDataDirectory </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sDataDirectory</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Set the data directory. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sDataDirectory</td><td>Set the data direcroty. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a25542afadaaf39b4fb5a1772a29cc0bd" name="a25542afadaaf39b4fb5a1772a29cc0bd"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a25542afadaaf39b4fb5a1772a29cc0bd">&#9670;&nbsp;</a></span>SetDefaultAutoCommit()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::SetDefaultAutoCommit </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td>
- <td class="paramname"><em>bDefaultAutoCommit</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Set the default auto commit. </p>
-<p >Disabling auto commit requires the application execute explicit updates using dbf-&gt;Put() and dbf-&gt;AppendRecord(). With auto commit on, the library posts updates automatically when moving off the current record or closing a file.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">bDefaultAutoCommit</td><td>xbTrue - Enable default auto commit.<br />
- xbFalse - Disable default auto commit.<br />
- </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a5f74db23f8902846d581935c7db73f9c" name="a5f74db23f8902846d581935c7db73f9c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5f74db23f8902846d581935c7db73f9c">&#9670;&nbsp;</a></span>SetDefaultDateFormat()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::SetDefaultDateFormat </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sDefaultDateFormat</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Set the default date format. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sDefaultDateFormat</td><td>Set the default date format. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="ae78a85255488bc78964c16946dbaead3" name="ae78a85255488bc78964c16946dbaead3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae78a85255488bc78964c16946dbaead3">&#9670;&nbsp;</a></span>SetDirectory()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbFile::SetDirectory </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sDirectory</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Set the directory. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sDirectory</td><td>- Valid directory name </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a904ec348fd029d4a76e72b8fde636108" name="a904ec348fd029d4a76e72b8fde636108"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a904ec348fd029d4a76e72b8fde636108">&#9670;&nbsp;</a></span>SetEndianType()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::SetEndianType </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Set the endian type. </p>
-<p >This routine determines the Endian-ness at run time instead of compile time as some processers (ie; Sparc,ARM) can be switched either way. This routine is called automatically by the library at startup and does not need to be called in an application program. </p>
-
-</div>
-</div>
-<a id="a5419eb27e56822f828b2b88a9502a636" name="a5419eb27e56822f828b2b88a9502a636"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5419eb27e56822f828b2b88a9502a636">&#9670;&nbsp;</a></span>SetFileName()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbFile::SetFileName </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFileName</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Set the filename. </p>
-<p >This routine builds out two internal variables from the input file name<br />
- sFileName - the file name part<br />
- sFqFileName - the fully qualified file name<br />
-</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFileName</td><td>- Input file name </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="aee832fa11db2077a532f49e1329bd05a" name="aee832fa11db2077a532f49e1329bd05a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aee832fa11db2077a532f49e1329bd05a">&#9670;&nbsp;</a></span>SetFqFileName()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbFile::SetFqFileName </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFqFileName</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Set the fully qualifed filename. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFqFileName</td><td>- Fully qualifed input file name </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a060acbfaa8d528f86cb59301814b414a" name="a060acbfaa8d528f86cb59301814b414a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a060acbfaa8d528f86cb59301814b414a">&#9670;&nbsp;</a></span>SetHomeFolders()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::SetHomeFolders </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Create Home Folders. </p>
-<p >Create xbase64 log and data folders in the home directory for current usre.</p>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a7b992ed97281bf25b5b66f5df686225e" name="a7b992ed97281bf25b5b66f5df686225e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a7b992ed97281bf25b5b66f5df686225e">&#9670;&nbsp;</a></span>SetLogDirectory()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::SetLogDirectory </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sLogDirectory</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="aba6e59512f7172dd55dcf92059e5928c" name="aba6e59512f7172dd55dcf92059e5928c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aba6e59512f7172dd55dcf92059e5928c">&#9670;&nbsp;</a></span>SetMultiUser()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::SetMultiUser </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td>
- <td class="paramname"><em>bMultiUser</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the multi user setting. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">bMultiUser</td><td>xbTrue - Turn on Multi user mode.<br />
- xbFalse - Turn off Multi user mode.<br />
- </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a5d871dcfecc2b4338f7a13722aab766c" name="a5d871dcfecc2b4338f7a13722aab766c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5d871dcfecc2b4338f7a13722aab766c">&#9670;&nbsp;</a></span>WriteBlock()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::WriteBlock </td>
- <td>(</td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ulBlockNo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">size_t&#160;</td>
- <td class="paramname"><em>lWriteSize</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">void *&#160;</td>
- <td class="paramname"><em>buf</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Write a block of data to file. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">ulBlockNo</td><td>- block number to write </td></tr>
- <tr><td class="paramname">lWriteSize</td><td>- size of data to write, set to 0 to write blocksize </td></tr>
- <tr><td class="paramname">*buf</td><td>- pointer to buffer of data to be written </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a18830b5755d74818f60d9c7ce38ddf2d" name="a18830b5755d74818f60d9c7ce38ddf2d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a18830b5755d74818f60d9c7ce38ddf2d">&#9670;&nbsp;</a></span>xbFclose()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbFclose </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Xbase wrapper for standard libary fclose. </p>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="af5b6356832d2a67212070a1aa605f170" name="af5b6356832d2a67212070a1aa605f170"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af5b6356832d2a67212070a1aa605f170">&#9670;&nbsp;</a></span>xbFeof()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbFeof </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Xbase wrapper for standard libary feof. </p>
-<dl class="section return"><dt>Returns</dt><dd>non zero if end-of-file is set for the stream. </dd></dl>
-
-</div>
-</div>
-<a id="ad205184d43409f04216540ae22f15009" name="ad205184d43409f04216540ae22f15009"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ad205184d43409f04216540ae22f15009">&#9670;&nbsp;</a></span>xbFflush()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbFflush </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Xbase wrapper for standard libary fflush. </p>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a5ee229bda4d7d6695e122200e581e7a6" name="a5ee229bda4d7d6695e122200e581e7a6"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5ee229bda4d7d6695e122200e581e7a6">&#9670;&nbsp;</a></span>xbFgetc() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbFgetc </td>
- <td>(</td>
- <td class="paramtype">char &amp;&#160;</td>
- <td class="paramname"><em>c</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Xbase wrapper for standard libary fgetc. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>- output character returned by fgetc </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="afb1c584d2895ffb7834df80aea7eb1e4" name="afb1c584d2895ffb7834df80aea7eb1e4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#afb1c584d2895ffb7834df80aea7eb1e4">&#9670;&nbsp;</a></span>xbFgetc() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbFgetc </td>
- <td>(</td>
- <td class="paramtype">xbInt32 &amp;&#160;</td>
- <td class="paramname"><em>c</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Xbase wrapper for standard libary fgetc. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>- output integer returned by fgetc </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="ad245955ace26e5dde85fd4373b30d026" name="ad245955ace26e5dde85fd4373b30d026"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ad245955ace26e5dde85fd4373b30d026">&#9670;&nbsp;</a></span>xbFgets()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbFgets </td>
- <td>(</td>
- <td class="paramtype">size_t&#160;</td>
- <td class="paramname"><em>lSize</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>s</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Xbase wrapper for standard libary fgets. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">lSize</td><td>- reads in at most, one character less than lSize </td></tr>
- <tr><td class="paramname">s</td><td>- an <a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing data returned by fseek </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="ab0fa19686ca8953ff4b556fb5b249135" name="ab0fa19686ca8953ff4b556fb5b249135"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab0fa19686ca8953ff4b556fb5b249135">&#9670;&nbsp;</a></span>xbFopen() <span class="overload">[1/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbFopen </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sOpenMode</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFileName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iShareMode</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Xbase wrapper for standard libary fopen. </p>
-<p >This routine supports all the standard C library open modes. The Xbase routines only use "r" and "r+b".</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sOpenMode</td><td><table class="doxtable">
-<tr>
-<th>OpenMode</th><th>Description </th></tr>
-<tr>
-<td>r</td><td>Reading </td></tr>
-<tr>
-<td>r+</td><td>Reading and Writing </td></tr>
-<tr>
-<td>w</td><td>Open for writing. Truncate to zero bytes if it exists </td></tr>
-<tr>
-<td>w+</td><td>Open for reading and writing, truncate to zero bytes if it exists </td></tr>
-<tr>
-<td>a</td><td>Open for append </td></tr>
-<tr>
-<td>a+</td><td>Open for reading and writing (at end). </td></tr>
-</table>
-The mode can also include the letter "b" for binary ie; "r+b". The "b" is ignored on POSIX compliant systems, but is included for cross platform compatibility. </td></tr>
- <tr><td class="paramname">sFileName</td><td>File name to open </td></tr>
- <tr><td class="paramname">iShareMode</td><td>XB_SINGLE_USER<br />
- XB_MULTI_USER<br />
- </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a0548cedf0f26b7d8ac221f75b0cd048c" name="a0548cedf0f26b7d8ac221f75b0cd048c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0548cedf0f26b7d8ac221f75b0cd048c">&#9670;&nbsp;</a></span>xbFopen() <span class="overload">[2/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbFopen </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sOpenMode</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iShareMode</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Xbase wrapper for standard libary fopen. </p>
-<p >This routine supports all the standard C library open modes. The Xbase routines only use "r" and "r+".</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sOpenMode</td><td><table class="doxtable">
-<tr>
-<th>OpenMode</th><th>Description </th></tr>
-<tr>
-<td>r</td><td>Reading </td></tr>
-<tr>
-<td>r+</td><td>Reading and Writing </td></tr>
-<tr>
-<td>w</td><td>Open for writing. Truncate to zero bytes if it exists </td></tr>
-<tr>
-<td>w+</td><td>Open for reading and writing, truncate to zero bytes if it exists </td></tr>
-<tr>
-<td>a</td><td>Open for append </td></tr>
-<tr>
-<td>a+</td><td>Open for reading and writing (at end). </td></tr>
-</table>
-The mode can also include the letter "b" for binary ie; "r+b". The "b" is ignored on POSIX compliant systems, but is included for cross platform compatibility. </td></tr>
- <tr><td class="paramname">iShareMode</td><td>XB_SINGLE_USER<br />
- XB_MULTI_USER<br />
- </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a7cdfef5ede9ac98d44a28a6b7a70972c" name="a7cdfef5ede9ac98d44a28a6b7a70972c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a7cdfef5ede9ac98d44a28a6b7a70972c">&#9670;&nbsp;</a></span>xbFopen() <span class="overload">[3/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbFopen </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iOpenMode</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="aabd113333b49c36cad23244b392baab4" name="aabd113333b49c36cad23244b392baab4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aabd113333b49c36cad23244b392baab4">&#9670;&nbsp;</a></span>xbFopen() <span class="overload">[4/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbFopen </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iOpenMode</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iShareMode</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Xbase wrapper for standard libary fopen. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iOpenMode</td><td>XB_READ<br />
- XB_READ_WRITE<br />
- </td></tr>
- <tr><td class="paramname">iShareMode</td><td>XB_SINGLE_USER<br />
- XB_MULTI_USER<br />
- </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="af2e940c78956e5cb6824f9a1bc404896" name="af2e940c78956e5cb6824f9a1bc404896"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af2e940c78956e5cb6824f9a1bc404896">&#9670;&nbsp;</a></span>xbFputc() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbFputc </td>
- <td>(</td>
- <td class="paramtype">xbInt32&#160;</td>
- <td class="paramname"><em>c</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Xbase wrapper for standard libary fputc. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>Character to write </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a863f74cf17df8186d88586b4d2a6441a" name="a863f74cf17df8186d88586b4d2a6441a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a863f74cf17df8186d88586b4d2a6441a">&#9670;&nbsp;</a></span>xbFputc() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbFputc </td>
- <td>(</td>
- <td class="paramtype">xbInt32&#160;</td>
- <td class="paramname"><em>c</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt32&#160;</td>
- <td class="paramname"><em>iNoOfTimes</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Xbase wrapper for standard libary fputc. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>Character to write </td></tr>
- <tr><td class="paramname">iNoOfTimes</td><td>Number of times to write the character </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a698f3b40216778562e639e6ca1a47573" name="a698f3b40216778562e639e6ca1a47573"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a698f3b40216778562e639e6ca1a47573">&#9670;&nbsp;</a></span>xbFputs()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbFputs </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>s</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Xbase wrapper for standard libary fputs. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">s</td><td><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> to write to file </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="ab4f6afaa1f77539f27a4f05c26e54e2f" name="ab4f6afaa1f77539f27a4f05c26e54e2f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab4f6afaa1f77539f27a4f05c26e54e2f">&#9670;&nbsp;</a></span>xbFread()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbFread </td>
- <td>(</td>
- <td class="paramtype">void *&#160;</td>
- <td class="paramname"><em>p</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">size_t&#160;</td>
- <td class="paramname"><em>size</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">size_t&#160;</td>
- <td class="paramname"><em>nmemb</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Xbase wrapper for standard libary fread. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">p</td><td>Pointer to data to write </td></tr>
- <tr><td class="paramname">size</td><td>size of write </td></tr>
- <tr><td class="paramname">nmemb</td><td>Number of times to read it </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a5337ab8918df240910c0d19b4f298e3d" name="a5337ab8918df240910c0d19b4f298e3d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5337ab8918df240910c0d19b4f298e3d">&#9670;&nbsp;</a></span>xbFseek()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbFseek </td>
- <td>(</td>
- <td class="paramtype">xbInt64&#160;</td>
- <td class="paramname"><em>lOffset</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt32&#160;</td>
- <td class="paramname"><em>iWhence</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Xbase wrapper for standard libary fseek. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">lOffset</td><td>Position in file to seek to </td></tr>
- <tr><td class="paramname">iWhence</td><td>SEEK_SET - from beginning of file<br />
- SEEK_CUR - from current position<br />
- SEEK_END - from end of file<br />
- </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a0e1c06aedfa7fbcb92e117f891edd13b" name="a0e1c06aedfa7fbcb92e117f891edd13b"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0e1c06aedfa7fbcb92e117f891edd13b">&#9670;&nbsp;</a></span>xbFtell()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">size_t xb::xbFile::xbFtell </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Xbase wrapper for standard libary ftell. </p>
-<p >Returns the current file position. </p><dl class="section return"><dt>Returns</dt><dd>Current file position. </dd></dl>
-
-</div>
-</div>
-<a id="a9891b792f585a696f38a5cf959e30918" name="a9891b792f585a696f38a5cf959e30918"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a9891b792f585a696f38a5cf959e30918">&#9670;&nbsp;</a></span>xbFTurnOffFileBuffering()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbFile::xbFTurnOffFileBuffering </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Turn off file buffering. </p>
-<p >Turns off file buffering. File buffering can't be used while in multi user mode. </p>
-
-</div>
-</div>
-<a id="a6aadd871d1782944703fed773d44b85f" name="a6aadd871d1782944703fed773d44b85f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6aadd871d1782944703fed773d44b85f">&#9670;&nbsp;</a></span>xbFwrite()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbFwrite </td>
- <td>(</td>
- <td class="paramtype">const void *&#160;</td>
- <td class="paramname"><em>p</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">size_t&#160;</td>
- <td class="paramname"><em>size</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">size_t&#160;</td>
- <td class="paramname"><em>nmemb</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Xbase wrapper for standard libary fwrite. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">p</td><td>Pointer to data buffer to write </td></tr>
- <tr><td class="paramname">size</td><td>Size of data to write </td></tr>
- <tr><td class="paramname">nmemb</td><td>Number of times to write data buffer </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a08463f506f425c2385acbe1a561506e9" name="a08463f506f425c2385acbe1a561506e9"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a08463f506f425c2385acbe1a561506e9">&#9670;&nbsp;</a></span>xbReadUntil()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbReadUntil </td>
- <td>(</td>
- <td class="paramtype">const char&#160;</td>
- <td class="paramname"><em>cDelim</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sOut</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Read file until a particular character is encountered on input stream. </p>
-<p >This routine will read until cDelim is encountered or eof, which ever occurs first.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">cDelim</td><td>Delimiter to stop writing at. </td></tr>
- <tr><td class="paramname">sOut</td><td>Output <a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing data read </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="ab3c668a8570433188382d31d7c60bd48" name="ab3c668a8570433188382d31d7c60bd48"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab3c668a8570433188382d31d7c60bd48">&#9670;&nbsp;</a></span>xbRemove() <span class="overload">[1/3]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbRemove </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Delete file. </p>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a58f6a6751fdf7e9549c273bb75d93eb5" name="a58f6a6751fdf7e9549c273bb75d93eb5"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a58f6a6751fdf7e9549c273bb75d93eb5">&#9670;&nbsp;</a></span>xbRemove() <span class="overload">[2/3]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbRemove </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFileNameIn</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Delete file. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFileNameIn</td><td>Name of file to delete </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a6d919366c2ec95e529906bf8842cbf07" name="a6d919366c2ec95e529906bf8842cbf07"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6d919366c2ec95e529906bf8842cbf07">&#9670;&nbsp;</a></span>xbRemove() <span class="overload">[3/3]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbRemove </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFileNameIn</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iOption</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Delete file. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFileNameIn</td><td>Name of file to delete </td></tr>
- <tr><td class="paramname">iOption</td><td>If Set to 1, assume this is a delete request for a dbf file, and should rename the dbt file also </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="afc8ce113aa72611a278233f9bb170012" name="afc8ce113aa72611a278233f9bb170012"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#afc8ce113aa72611a278233f9bb170012">&#9670;&nbsp;</a></span>xbRename()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbRename </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sOldName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sNewName</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Rename file. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sOldName</td><td>Original file name </td></tr>
- <tr><td class="paramname">sNewName</td><td>New file name </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="a7996b6e084665c37c3892faea64b3505" name="a7996b6e084665c37c3892faea64b3505"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a7996b6e084665c37c3892faea64b3505">&#9670;&nbsp;</a></span>xbRewind()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbFile::xbRewind </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Xbase wrapper for rewind. </p>
-<p >Set file pointer at beginning of file. </p>
-
-</div>
-</div>
-<a id="a518bfcbfa3699d883cf89affee383296" name="a518bfcbfa3699d883cf89affee383296"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a518bfcbfa3699d883cf89affee383296">&#9670;&nbsp;</a></span>xbTruncate()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::xbTruncate </td>
- <td>(</td>
- <td class="paramtype">xbInt64&#160;</td>
- <td class="paramname"><em>llSize</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Xbase wrapper for ftruncate. </p>
-<p >Set file size to llSize </p><dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">llSize</td><td>New file size. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<h2 class="groupheader">Field Documentation</h2>
-<a id="a6219f1b5e24ea12fe158cd5aea56988e" name="a6219f1b5e24ea12fe158cd5aea56988e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6219f1b5e24ea12fe158cd5aea56988e">&#9670;&nbsp;</a></span>ErrorCodeText</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">const char* xb::xbSsv::ErrorCodeText[]</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a5849e813f5e8e1cd180f0366637adbf3" name="a5849e813f5e8e1cd180f0366637adbf3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5849e813f5e8e1cd180f0366637adbf3">&#9670;&nbsp;</a></span>iEndianType</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbSsv::iEndianType = 0</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">protected</span><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a9dec3164c3b264882df634915ecf21da" name="a9dec3164c3b264882df634915ecf21da"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a9dec3164c3b264882df634915ecf21da">&#9670;&nbsp;</a></span>sNullString</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> xb::xbSsv::sNullString = &quot;&quot;</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">protected</span><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ae39a67ea391b46055d4ca299cb222004" name="ae39a67ea391b46055d4ca299cb222004"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae39a67ea391b46055d4ca299cb222004">&#9670;&nbsp;</a></span>xbase</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbXBase.html">xbXBase</a>* xb::xbFile::xbase</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following files:<ul>
-<li>/mnt/1Tdata/xbase/xbase64-4.1.0/src/include/<a class="el" href="xbfile_8h_source.html">xbfile.h</a></li>
-<li>/mnt/1Tdata/xbase/xbase64-4.1.0/src/core/<a class="el" href="xbfile_8cpp.html">xbfile.cpp</a></li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/classxb_1_1xbSsv.html b/docs/doxygen/html/classxb_1_1xbSsv.html
deleted file mode 100644
index 96a07d8..0000000
--- a/docs/doxygen/html/classxb_1_1xbSsv.html
+++ /dev/null
@@ -1,722 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: xb::xbSsv Class Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="namespacexb.html">xb</a></li><li class="navelem"><a class="el" href="classxb_1_1xbSsv.html">xbSsv</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> &#124;
-<a href="#pub-static-attribs">Static Public Attributes</a> &#124;
-<a href="#pro-methods">Protected Member Functions</a> &#124;
-<a href="#pro-static-attribs">Static Protected Attributes</a> </div>
- <div class="headertitle"><div class="title">xb::xbSsv Class Reference</div></div>
-</div><!--header-->
-<div class="contents">
-
-<p>Class for handling shared system variables.
- <a href="classxb_1_1xbSsv.html#details">More...</a></p>
-
-<p><code>#include &lt;<a class="el" href="xbssv_8h_source.html">xbssv.h</a>&gt;</code></p>
-<div class="dynheader">
-Inheritance diagram for xb::xbSsv:</div>
-<div class="dyncontent">
- <div class="center">
- <img src="classxb_1_1xbSsv.png" usemap="#xb::xbSsv_map" alt=""/>
- <map id="xb::xbSsv_map" name="xb::xbSsv_map">
-<area href="classxb_1_1xbDate.html" title="xbDate class." alt="xb::xbDate" shape="rect" coords="0,56,84,80"/>
-<area href="classxb_1_1xbFile.html" title="Class for handling low level file I/O." alt="xb::xbFile" shape="rect" coords="94,56,178,80"/>
-<area href="classxb_1_1xbTblMgr.html" alt="xb::xbTblMgr" shape="rect" coords="188,56,272,80"/>
-<area href="classxb_1_1xbDbf.html" title="Base class for handling dbf files/tables." alt="xb::xbDbf" shape="rect" coords="94,112,178,136"/>
-<area href="classxb_1_1xbXBase.html" title="xbXbase class." alt="xb::xbXBase" shape="rect" coords="188,112,272,136"/>
- </map>
-</div></div>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:a58f85692c3167af20b1a7c17c621523b"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a58f85692c3167af20b1a7c17c621523b">xbSsv</a> ()</td></tr>
-<tr class="memdesc:a58f85692c3167af20b1a7c17c621523b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Class Constructor. <a href="classxb_1_1xbSsv.html#a58f85692c3167af20b1a7c17c621523b">More...</a><br /></td></tr>
-<tr class="separator:a58f85692c3167af20b1a7c17c621523b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a97dfa59ab9a8e9f17454da0faceb023d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a97dfa59ab9a8e9f17454da0faceb023d">DisplayError</a> (xbInt16 ErrorCode) const</td></tr>
-<tr class="memdesc:a97dfa59ab9a8e9f17454da0faceb023d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Display error message on console for a given error number. <a href="classxb_1_1xbSsv.html#a97dfa59ab9a8e9f17454da0faceb023d">More...</a><br /></td></tr>
-<tr class="separator:a97dfa59ab9a8e9f17454da0faceb023d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6fbb9c3a550ab0b3378f9586a57791d2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a6fbb9c3a550ab0b3378f9586a57791d2">GetDefaultDateFormat</a> () const</td></tr>
-<tr class="memdesc:a6fbb9c3a550ab0b3378f9586a57791d2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the default date format. <a href="classxb_1_1xbSsv.html#a6fbb9c3a550ab0b3378f9586a57791d2">More...</a><br /></td></tr>
-<tr class="separator:a6fbb9c3a550ab0b3378f9586a57791d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">GetDataDirectory</a> () const</td></tr>
-<tr class="memdesc:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current data directory. <a href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">More...</a><br /></td></tr>
-<tr class="separator:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a49cd162f066eef2b829ba7c9f6620243"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">GetEndianType</a> () const</td></tr>
-<tr class="memdesc:a49cd162f066eef2b829ba7c9f6620243"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the Endian type. <a href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">More...</a><br /></td></tr>
-<tr class="separator:a49cd162f066eef2b829ba7c9f6620243"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a56961d2a67b8e7470098626ac4dac7e4"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">GetErrorMessage</a> (xbInt16 ErrorCode) const</td></tr>
-<tr class="memdesc:a56961d2a67b8e7470098626ac4dac7e4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get an error message. <a href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">More...</a><br /></td></tr>
-<tr class="separator:a56961d2a67b8e7470098626ac4dac7e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">SetDataDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDataDirectory)</td></tr>
-<tr class="memdesc:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the data directory. <a href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">More...</a><br /></td></tr>
-<tr class="separator:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5f74db23f8902846d581935c7db73f9c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">SetDefaultDateFormat</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDefaultDateFormat)</td></tr>
-<tr class="memdesc:a5f74db23f8902846d581935c7db73f9c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the default date format. <a href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">More...</a><br /></td></tr>
-<tr class="separator:a5f74db23f8902846d581935c7db73f9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a62e4fd0a5888665c76bbbad962794e72"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72">BitSet</a> (unsigned char c, xbInt16 iBitNo) const</td></tr>
-<tr class="memdesc:a62e4fd0a5888665c76bbbad962794e72"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check a bit in a one byte field and see if it is set. <a href="classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72">More...</a><br /></td></tr>
-<tr class="separator:a62e4fd0a5888665c76bbbad962794e72"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a8551b15a3ce4fa2a40d698db01f4a9ae"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a8551b15a3ce4fa2a40d698db01f4a9ae">BitDump</a> (unsigned char c) const</td></tr>
-<tr class="separator:a8551b15a3ce4fa2a40d698db01f4a9ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aba1395b8e4c7f28c3614061de6e49190"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#aba1395b8e4c7f28c3614061de6e49190">BitDump</a> (char c) const</td></tr>
-<tr class="separator:aba1395b8e4c7f28c3614061de6e49190"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6982f973e81587b04916f4509746aaf5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a6982f973e81587b04916f4509746aaf5">GetDefaultAutoCommit</a> () const</td></tr>
-<tr class="memdesc:a6982f973e81587b04916f4509746aaf5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the default auto commit setting. <a href="classxb_1_1xbSsv.html#a6982f973e81587b04916f4509746aaf5">More...</a><br /></td></tr>
-<tr class="separator:a6982f973e81587b04916f4509746aaf5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">SetDefaultAutoCommit</a> (<a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bDefaultAutoCommit)</td></tr>
-<tr class="memdesc:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the default auto commit. <a href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">More...</a><br /></td></tr>
-<tr class="separator:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">GetHomeDir</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sHomeDirOut)</td></tr>
-<tr class="memdesc:abc9c06c95d71fbad8294e1ae8862cea9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get home directory. <a href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">More...</a><br /></td></tr>
-<tr class="separator:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4822315bded3969b59aeeb683c373051"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a4822315bded3969b59aeeb683c373051">GetLogDirectory</a> () const</td></tr>
-<tr class="separator:a4822315bded3969b59aeeb683c373051"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:afaef09435be73b3111f5edbd7091d861"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#afaef09435be73b3111f5edbd7091d861">GetLogFileName</a> () const</td></tr>
-<tr class="separator:afaef09435be73b3111f5edbd7091d861"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7b992ed97281bf25b5b66f5df686225e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a7b992ed97281bf25b5b66f5df686225e">SetLogDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLogDirectory)</td></tr>
-<tr class="separator:a7b992ed97281bf25b5b66f5df686225e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">GetMultiUser</a> () const</td></tr>
-<tr class="memdesc:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the multi user setting. <a href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">More...</a><br /></td></tr>
-<tr class="separator:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aba6e59512f7172dd55dcf92059e5928c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#aba6e59512f7172dd55dcf92059e5928c">SetMultiUser</a> (<a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bMultiUser)</td></tr>
-<tr class="memdesc:aba6e59512f7172dd55dcf92059e5928c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the multi user setting. <a href="classxb_1_1xbSsv.html#aba6e59512f7172dd55dcf92059e5928c">More...</a><br /></td></tr>
-<tr class="separator:aba6e59512f7172dd55dcf92059e5928c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-static-attribs" name="pub-static-attribs"></a>
-Static Public Attributes</h2></td></tr>
-<tr class="memitem:a6219f1b5e24ea12fe158cd5aea56988e"><td class="memItemLeft" align="right" valign="top">static const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a6219f1b5e24ea12fe158cd5aea56988e">ErrorCodeText</a> []</td></tr>
-<tr class="separator:a6219f1b5e24ea12fe158cd5aea56988e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-methods" name="pro-methods"></a>
-Protected Member Functions</h2></td></tr>
-<tr class="memitem:a904ec348fd029d4a76e72b8fde636108"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a904ec348fd029d4a76e72b8fde636108">SetEndianType</a> ()</td></tr>
-<tr class="memdesc:a904ec348fd029d4a76e72b8fde636108"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the endian type. <a href="classxb_1_1xbSsv.html#a904ec348fd029d4a76e72b8fde636108">More...</a><br /></td></tr>
-<tr class="separator:a904ec348fd029d4a76e72b8fde636108"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-static-attribs" name="pro-static-attribs"></a>
-Static Protected Attributes</h2></td></tr>
-<tr class="memitem:a5849e813f5e8e1cd180f0366637adbf3"><td class="memItemLeft" align="right" valign="top">static xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a5849e813f5e8e1cd180f0366637adbf3">iEndianType</a> = 0</td></tr>
-<tr class="separator:a5849e813f5e8e1cd180f0366637adbf3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9dec3164c3b264882df634915ecf21da"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classxb_1_1xbString.html">xbString</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a9dec3164c3b264882df634915ecf21da">sNullString</a> = &quot;&quot;</td></tr>
-<tr class="separator:a9dec3164c3b264882df634915ecf21da"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p >Class for handling shared system variables. </p>
-<p >This class defines static variables which are referenced across class instances.</p>
-<p >This class is designed to have the variables set when the <a class="el" href="classxb_1_1xbXBase.html" title="xbXbase class.">xbXBase</a> class constructor is called (<a class="el" href="classxb_1_1xbXBase.html" title="xbXbase class.">xbXBase</a> is a derived class). The xbXbase class is designed to be called first in an application programs, and it is only called once. The static values in this class are typically initialized at program startup and don't require additional updates. </p>
-</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
-<a id="a58f85692c3167af20b1a7c17c621523b" name="a58f85692c3167af20b1a7c17c621523b"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a58f85692c3167af20b1a7c17c621523b">&#9670;&nbsp;</a></span>xbSsv()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xb::xbSsv::xbSsv </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Class Constructor. </p>
-
-</div>
-</div>
-<h2 class="groupheader">Member Function Documentation</h2>
-<a id="aba1395b8e4c7f28c3614061de6e49190" name="aba1395b8e4c7f28c3614061de6e49190"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aba1395b8e4c7f28c3614061de6e49190">&#9670;&nbsp;</a></span>BitDump() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::BitDump </td>
- <td>(</td>
- <td class="paramtype">char&#160;</td>
- <td class="paramname"><em>c</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a8551b15a3ce4fa2a40d698db01f4a9ae" name="a8551b15a3ce4fa2a40d698db01f4a9ae"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a8551b15a3ce4fa2a40d698db01f4a9ae">&#9670;&nbsp;</a></span>BitDump() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::BitDump </td>
- <td>(</td>
- <td class="paramtype">unsigned char&#160;</td>
- <td class="paramname"><em>c</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a62e4fd0a5888665c76bbbad962794e72" name="a62e4fd0a5888665c76bbbad962794e72"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a62e4fd0a5888665c76bbbad962794e72">&#9670;&nbsp;</a></span>BitSet()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbSsv::BitSet </td>
- <td>(</td>
- <td class="paramtype">unsigned char&#160;</td>
- <td class="paramname"><em>c</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iBitNo</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Check a bit in a one byte field and see if it is set. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>One byte char field to examine. </td></tr>
- <tr><td class="paramname">iBitNo</td><td>which bit to examine. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue Bit is set<br />
- xbFalse Bit is not set </dd></dl>
-
-</div>
-</div>
-<a id="a97dfa59ab9a8e9f17454da0faceb023d" name="a97dfa59ab9a8e9f17454da0faceb023d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a97dfa59ab9a8e9f17454da0faceb023d">&#9670;&nbsp;</a></span>DisplayError()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::DisplayError </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iErrorCode</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Display error message on console for a given error number. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iErrorCode</td><td>Error number to reference </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a1d803a4bfc8ba0561267a0bf9e51f7d9" name="a1d803a4bfc8ba0561267a0bf9e51f7d9"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1d803a4bfc8ba0561267a0bf9e51f7d9">&#9670;&nbsp;</a></span>GetDataDirectory()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetDataDirectory </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Get the current data directory. </p>
-<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing the current data directory where the database files are stored. </dd></dl>
-
-</div>
-</div>
-<a id="a6982f973e81587b04916f4509746aaf5" name="a6982f973e81587b04916f4509746aaf5"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6982f973e81587b04916f4509746aaf5">&#9670;&nbsp;</a></span>GetDefaultAutoCommit()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbSsv::GetDefaultAutoCommit </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Get the default auto commit setting. </p>
-<p >When auto commit is enabled, the library will automatically post any updates when moving off an updated record or closing files. If auto commit is disabled, the application program will need to explicitly update the tables using using dbf-&gt;Put() and dbf-&gt;AppendRecord().</p>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue if auto commit is turned on<br />
- xbFalse is auto commit is turned off </dd></dl>
-
-</div>
-</div>
-<a id="a6fbb9c3a550ab0b3378f9586a57791d2" name="a6fbb9c3a550ab0b3378f9586a57791d2"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6fbb9c3a550ab0b3378f9586a57791d2">&#9670;&nbsp;</a></span>GetDefaultDateFormat()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetDefaultDateFormat </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Get the default date format. </p>
-<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing the default date format. </dd></dl>
-
-</div>
-</div>
-<a id="a49cd162f066eef2b829ba7c9f6620243" name="a49cd162f066eef2b829ba7c9f6620243"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a49cd162f066eef2b829ba7c9f6620243">&#9670;&nbsp;</a></span>GetEndianType()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbSsv::GetEndianType </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Get the Endian type. </p>
-<dl class="section return"><dt>Returns</dt><dd>B - Big endian<br />
- L - Little endian<br />
- </dd></dl>
-
-</div>
-</div>
-<a id="a56961d2a67b8e7470098626ac4dac7e4" name="a56961d2a67b8e7470098626ac4dac7e4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a56961d2a67b8e7470098626ac4dac7e4">&#9670;&nbsp;</a></span>GetErrorMessage()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">const char * xb::xbSsv::GetErrorMessage </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iErrorCode</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Get an error message. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iErrorCode</td><td>ErrorCode is the error number of description to be returned. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Returns a pointer to a string containing a text description for the error code. </dd></dl>
-
-</div>
-</div>
-<a id="abc9c06c95d71fbad8294e1ae8862cea9" name="abc9c06c95d71fbad8294e1ae8862cea9"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#abc9c06c95d71fbad8294e1ae8862cea9">&#9670;&nbsp;</a></span>GetHomeDir()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::GetHomeDir </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sHomeDirOut</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Get home directory. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sHomeDirOut</td><td>- Output home directory for current user. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
-
-</div>
-</div>
-<a id="a4822315bded3969b59aeeb683c373051" name="a4822315bded3969b59aeeb683c373051"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4822315bded3969b59aeeb683c373051">&#9670;&nbsp;</a></span>GetLogDirectory()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetLogDirectory </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="afaef09435be73b3111f5edbd7091d861" name="afaef09435be73b3111f5edbd7091d861"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#afaef09435be73b3111f5edbd7091d861">&#9670;&nbsp;</a></span>GetLogFileName()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetLogFileName </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="abd58031c5f1c3766c24d47a82e6fd9c5" name="abd58031c5f1c3766c24d47a82e6fd9c5"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#abd58031c5f1c3766c24d47a82e6fd9c5">&#9670;&nbsp;</a></span>GetMultiUser()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbSsv::GetMultiUser </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Get the multi user setting. </p>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue - Multi user mode turned on.<br />
- xbFalse - Multi user mode turned off.<br />
- </dd></dl>
-
-</div>
-</div>
-<a id="a57caaaadfbd089d9a58ecfcb50c88a6c" name="a57caaaadfbd089d9a58ecfcb50c88a6c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a57caaaadfbd089d9a58ecfcb50c88a6c">&#9670;&nbsp;</a></span>SetDataDirectory()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::SetDataDirectory </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sDataDirectory</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Set the data directory. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sDataDirectory</td><td>Set the data direcroty. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a25542afadaaf39b4fb5a1772a29cc0bd" name="a25542afadaaf39b4fb5a1772a29cc0bd"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a25542afadaaf39b4fb5a1772a29cc0bd">&#9670;&nbsp;</a></span>SetDefaultAutoCommit()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::SetDefaultAutoCommit </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td>
- <td class="paramname"><em>bDefaultAutoCommit</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Set the default auto commit. </p>
-<p >Disabling auto commit requires the application execute explicit updates using dbf-&gt;Put() and dbf-&gt;AppendRecord(). With auto commit on, the library posts updates automatically when moving off the current record or closing a file.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">bDefaultAutoCommit</td><td>xbTrue - Enable default auto commit.<br />
- xbFalse - Disable default auto commit.<br />
- </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a5f74db23f8902846d581935c7db73f9c" name="a5f74db23f8902846d581935c7db73f9c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5f74db23f8902846d581935c7db73f9c">&#9670;&nbsp;</a></span>SetDefaultDateFormat()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::SetDefaultDateFormat </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sDefaultDateFormat</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Set the default date format. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sDefaultDateFormat</td><td>Set the default date format. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a904ec348fd029d4a76e72b8fde636108" name="a904ec348fd029d4a76e72b8fde636108"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a904ec348fd029d4a76e72b8fde636108">&#9670;&nbsp;</a></span>SetEndianType()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::SetEndianType </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Set the endian type. </p>
-<p >This routine determines the Endian-ness at run time instead of compile time as some processers (ie; Sparc,ARM) can be switched either way. This routine is called automatically by the library at startup and does not need to be called in an application program. </p>
-
-</div>
-</div>
-<a id="a7b992ed97281bf25b5b66f5df686225e" name="a7b992ed97281bf25b5b66f5df686225e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a7b992ed97281bf25b5b66f5df686225e">&#9670;&nbsp;</a></span>SetLogDirectory()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::SetLogDirectory </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sLogDirectory</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="aba6e59512f7172dd55dcf92059e5928c" name="aba6e59512f7172dd55dcf92059e5928c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aba6e59512f7172dd55dcf92059e5928c">&#9670;&nbsp;</a></span>SetMultiUser()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::SetMultiUser </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td>
- <td class="paramname"><em>bMultiUser</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Get the multi user setting. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">bMultiUser</td><td>xbTrue - Turn on Multi user mode.<br />
- xbFalse - Turn off Multi user mode.<br />
- </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<h2 class="groupheader">Field Documentation</h2>
-<a id="a6219f1b5e24ea12fe158cd5aea56988e" name="a6219f1b5e24ea12fe158cd5aea56988e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6219f1b5e24ea12fe158cd5aea56988e">&#9670;&nbsp;</a></span>ErrorCodeText</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">const char* xb::xbSsv::ErrorCodeText[]</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">static</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a5849e813f5e8e1cd180f0366637adbf3" name="a5849e813f5e8e1cd180f0366637adbf3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5849e813f5e8e1cd180f0366637adbf3">&#9670;&nbsp;</a></span>iEndianType</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbSsv::iEndianType = 0</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">protected</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a9dec3164c3b264882df634915ecf21da" name="a9dec3164c3b264882df634915ecf21da"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a9dec3164c3b264882df634915ecf21da">&#9670;&nbsp;</a></span>sNullString</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> xb::xbSsv::sNullString = &quot;&quot;</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">protected</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following files:<ul>
-<li>/mnt/1Tdata/xbase/xbase64-4.1.0/src/include/<a class="el" href="xbssv_8h_source.html">xbssv.h</a></li>
-<li>/mnt/1Tdata/xbase/xbase64-4.1.0/src/core/<a class="el" href="xbssv_8cpp.html">xbssv.cpp</a></li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/classxb_1_1xbString.html b/docs/doxygen/html/classxb_1_1xbString.html
deleted file mode 100644
index 1cf60fe..0000000
--- a/docs/doxygen/html/classxb_1_1xbString.html
+++ /dev/null
@@ -1,2888 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: xb::xbString Class Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="namespacexb.html">xb</a></li><li class="navelem"><a class="el" href="classxb_1_1xbString.html">xbString</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> &#124;
-<a href="#friends">Friends</a> </div>
- <div class="headertitle"><div class="title">xb::xbString Class Reference</div></div>
-</div><!--header-->
-<div class="contents">
-
-<p>Class for handling string data.
- <a href="classxb_1_1xbString.html#details">More...</a></p>
-
-<p><code>#include &lt;<a class="el" href="xbstring_8h_source.html">xbstring.h</a>&gt;</code></p>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:a63f9313217e0ff3c9789ec59316216a1"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a63f9313217e0ff3c9789ec59316216a1">xbString</a> (xbUInt32 size)</td></tr>
-<tr class="memdesc:a63f9313217e0ff3c9789ec59316216a1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor. <a href="classxb_1_1xbString.html#a63f9313217e0ff3c9789ec59316216a1">More...</a><br /></td></tr>
-<tr class="separator:a63f9313217e0ff3c9789ec59316216a1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a14bbaa293c8d40dd6c64332f2668a92e"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a14bbaa293c8d40dd6c64332f2668a92e">xbString</a> (char c)</td></tr>
-<tr class="memdesc:a14bbaa293c8d40dd6c64332f2668a92e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor. <a href="classxb_1_1xbString.html#a14bbaa293c8d40dd6c64332f2668a92e">More...</a><br /></td></tr>
-<tr class="separator:a14bbaa293c8d40dd6c64332f2668a92e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a18f3598dcdf2ec5692274fc8ee769ad7"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a18f3598dcdf2ec5692274fc8ee769ad7">xbString</a> (const char *s, xbUInt32 lMaxLen)</td></tr>
-<tr class="memdesc:a18f3598dcdf2ec5692274fc8ee769ad7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor. <a href="classxb_1_1xbString.html#a18f3598dcdf2ec5692274fc8ee769ad7">More...</a><br /></td></tr>
-<tr class="separator:a18f3598dcdf2ec5692274fc8ee769ad7"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0d81016b93fc36ebbbafacf35c677f07"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a0d81016b93fc36ebbbafacf35c677f07">xbString</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;s)</td></tr>
-<tr class="memdesc:a0d81016b93fc36ebbbafacf35c677f07"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor. <a href="classxb_1_1xbString.html#a0d81016b93fc36ebbbafacf35c677f07">More...</a><br /></td></tr>
-<tr class="separator:a0d81016b93fc36ebbbafacf35c677f07"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a25856311106c5fb15d39017b63f0ddc7"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a25856311106c5fb15d39017b63f0ddc7">xbString</a> (const char *=&quot;&quot;)</td></tr>
-<tr class="memdesc:a25856311106c5fb15d39017b63f0ddc7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor. <a href="classxb_1_1xbString.html#a25856311106c5fb15d39017b63f0ddc7">More...</a><br /></td></tr>
-<tr class="separator:a25856311106c5fb15d39017b63f0ddc7"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad865b55e3b08dffd527afee8e7e8e3fe"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#ad865b55e3b08dffd527afee8e7e8e3fe">xbString</a> (<a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> d)</td></tr>
-<tr class="memdesc:ad865b55e3b08dffd527afee8e7e8e3fe"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor. <a href="classxb_1_1xbString.html#ad865b55e3b08dffd527afee8e7e8e3fe">More...</a><br /></td></tr>
-<tr class="separator:ad865b55e3b08dffd527afee8e7e8e3fe"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a10a6549efab02bc76ab33b15916b1eb1"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a10a6549efab02bc76ab33b15916b1eb1">~xbString</a> ()</td></tr>
-<tr class="memdesc:a10a6549efab02bc76ab33b15916b1eb1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destructor. <a href="classxb_1_1xbString.html#a10a6549efab02bc76ab33b15916b1eb1">More...</a><br /></td></tr>
-<tr class="separator:a10a6549efab02bc76ab33b15916b1eb1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4f69d11cbd43edf71725a606d0ca8f40"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a4f69d11cbd43edf71725a606d0ca8f40">operator=</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;s)</td></tr>
-<tr class="memdesc:a4f69d11cbd43edf71725a606d0ca8f40"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set operator =. <a href="classxb_1_1xbString.html#a4f69d11cbd43edf71725a606d0ca8f40">More...</a><br /></td></tr>
-<tr class="separator:a4f69d11cbd43edf71725a606d0ca8f40"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a84ae7d16c5d73c5aa2270aa9895a7f7c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a84ae7d16c5d73c5aa2270aa9895a7f7c">operator=</a> (const char *s)</td></tr>
-<tr class="memdesc:a84ae7d16c5d73c5aa2270aa9895a7f7c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set operator =. <a href="classxb_1_1xbString.html#a84ae7d16c5d73c5aa2270aa9895a7f7c">More...</a><br /></td></tr>
-<tr class="separator:a84ae7d16c5d73c5aa2270aa9895a7f7c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a545df0ae9590f0ea5844a165e38a6388"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a545df0ae9590f0ea5844a165e38a6388">operator const char *</a> () const</td></tr>
-<tr class="memdesc:a545df0ae9590f0ea5844a165e38a6388"><td class="mdescLeft">&#160;</td><td class="mdescRight">Operator const char *. <a href="classxb_1_1xbString.html#a545df0ae9590f0ea5844a165e38a6388">More...</a><br /></td></tr>
-<tr class="separator:a545df0ae9590f0ea5844a165e38a6388"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abe45e463226ac8e18550ced18c5a9df3"><td class="memItemLeft" align="right" valign="top">char &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#abe45e463226ac8e18550ced18c5a9df3">operator[]</a> (xbUInt32 n) const</td></tr>
-<tr class="memdesc:abe45e463226ac8e18550ced18c5a9df3"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator [] <a href="classxb_1_1xbString.html#abe45e463226ac8e18550ced18c5a9df3">More...</a><br /></td></tr>
-<tr class="separator:abe45e463226ac8e18550ced18c5a9df3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4deaa68d9571753349c29baacb5613e8"><td class="memItemLeft" align="right" valign="top">char &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a4deaa68d9571753349c29baacb5613e8">operator[]</a> (xbInt32 n) const</td></tr>
-<tr class="memdesc:a4deaa68d9571753349c29baacb5613e8"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator [] <a href="classxb_1_1xbString.html#a4deaa68d9571753349c29baacb5613e8">More...</a><br /></td></tr>
-<tr class="separator:a4deaa68d9571753349c29baacb5613e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a76a47af239797a266ada6141c150001c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a76a47af239797a266ada6141c150001c">operator+=</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;s)</td></tr>
-<tr class="memdesc:a76a47af239797a266ada6141c150001c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Append operator +=. <a href="classxb_1_1xbString.html#a76a47af239797a266ada6141c150001c">More...</a><br /></td></tr>
-<tr class="separator:a76a47af239797a266ada6141c150001c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab319120dbad9107e1e7090139c956100"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#ab319120dbad9107e1e7090139c956100">operator+=</a> (const char *s)</td></tr>
-<tr class="memdesc:ab319120dbad9107e1e7090139c956100"><td class="mdescLeft">&#160;</td><td class="mdescRight">Append operator +=. <a href="classxb_1_1xbString.html#ab319120dbad9107e1e7090139c956100">More...</a><br /></td></tr>
-<tr class="separator:ab319120dbad9107e1e7090139c956100"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae12f45b8be84e438e032c0b860f985c6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#ae12f45b8be84e438e032c0b860f985c6">operator+=</a> (char c)</td></tr>
-<tr class="memdesc:ae12f45b8be84e438e032c0b860f985c6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Append operator +=. <a href="classxb_1_1xbString.html#ae12f45b8be84e438e032c0b860f985c6">More...</a><br /></td></tr>
-<tr class="separator:ae12f45b8be84e438e032c0b860f985c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa7f4db1b4eae9dfad46346db6e17ea15"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#aa7f4db1b4eae9dfad46346db6e17ea15">operator-=</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;s)</td></tr>
-<tr class="memdesc:aa7f4db1b4eae9dfad46346db6e17ea15"><td class="mdescLeft">&#160;</td><td class="mdescRight">Append operator -=. <a href="classxb_1_1xbString.html#aa7f4db1b4eae9dfad46346db6e17ea15">More...</a><br /></td></tr>
-<tr class="separator:aa7f4db1b4eae9dfad46346db6e17ea15"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aaae97e6eda3d18c9f463993ade985bf4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#aaae97e6eda3d18c9f463993ade985bf4">operator-=</a> (const char *s)</td></tr>
-<tr class="memdesc:aaae97e6eda3d18c9f463993ade985bf4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Append operator -=. <a href="classxb_1_1xbString.html#aaae97e6eda3d18c9f463993ade985bf4">More...</a><br /></td></tr>
-<tr class="separator:aaae97e6eda3d18c9f463993ade985bf4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:adcafd019df23bb5724c46e34f3f31194"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#adcafd019df23bb5724c46e34f3f31194">operator-=</a> (char c)</td></tr>
-<tr class="memdesc:adcafd019df23bb5724c46e34f3f31194"><td class="mdescLeft">&#160;</td><td class="mdescRight">Append operator -=. <a href="classxb_1_1xbString.html#adcafd019df23bb5724c46e34f3f31194">More...</a><br /></td></tr>
-<tr class="separator:adcafd019df23bb5724c46e34f3f31194"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2df3ed2fc9456214f5fd2fcf77b69bc1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a2df3ed2fc9456214f5fd2fcf77b69bc1">operator==</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;) const</td></tr>
-<tr class="memdesc:a2df3ed2fc9456214f5fd2fcf77b69bc1"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator == <a href="classxb_1_1xbString.html#a2df3ed2fc9456214f5fd2fcf77b69bc1">More...</a><br /></td></tr>
-<tr class="separator:a2df3ed2fc9456214f5fd2fcf77b69bc1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a94031269af3c433393d4cf0ff9b4be38"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a94031269af3c433393d4cf0ff9b4be38">operator==</a> (const char *) const</td></tr>
-<tr class="memdesc:a94031269af3c433393d4cf0ff9b4be38"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator == <a href="classxb_1_1xbString.html#a94031269af3c433393d4cf0ff9b4be38">More...</a><br /></td></tr>
-<tr class="separator:a94031269af3c433393d4cf0ff9b4be38"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:acf89691607050b0505dc6af28d059c38"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#acf89691607050b0505dc6af28d059c38">operator!=</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;) const</td></tr>
-<tr class="memdesc:acf89691607050b0505dc6af28d059c38"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator != <a href="classxb_1_1xbString.html#acf89691607050b0505dc6af28d059c38">More...</a><br /></td></tr>
-<tr class="separator:acf89691607050b0505dc6af28d059c38"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a822448f2a0ce653473d4c1de5763a3a6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a822448f2a0ce653473d4c1de5763a3a6">operator!=</a> (const char *) const</td></tr>
-<tr class="memdesc:a822448f2a0ce653473d4c1de5763a3a6"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator != <a href="classxb_1_1xbString.html#a822448f2a0ce653473d4c1de5763a3a6">More...</a><br /></td></tr>
-<tr class="separator:a822448f2a0ce653473d4c1de5763a3a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a71c7aafa0d523c72cbe58c474be2270a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a71c7aafa0d523c72cbe58c474be2270a">operator&lt;</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;) const</td></tr>
-<tr class="memdesc:a71c7aafa0d523c72cbe58c474be2270a"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator &lt; <a href="classxb_1_1xbString.html#a71c7aafa0d523c72cbe58c474be2270a">More...</a><br /></td></tr>
-<tr class="separator:a71c7aafa0d523c72cbe58c474be2270a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae46f6a45da5686b607a4edf2786a2fff"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#ae46f6a45da5686b607a4edf2786a2fff">operator&gt;</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;) const</td></tr>
-<tr class="memdesc:ae46f6a45da5686b607a4edf2786a2fff"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator &gt; <a href="classxb_1_1xbString.html#ae46f6a45da5686b607a4edf2786a2fff">More...</a><br /></td></tr>
-<tr class="separator:ae46f6a45da5686b607a4edf2786a2fff"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a461f245e60cddfdf5f78a972a46e5880"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a461f245e60cddfdf5f78a972a46e5880">operator&lt;=</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;) const</td></tr>
-<tr class="memdesc:a461f245e60cddfdf5f78a972a46e5880"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator &lt;= <a href="classxb_1_1xbString.html#a461f245e60cddfdf5f78a972a46e5880">More...</a><br /></td></tr>
-<tr class="separator:a461f245e60cddfdf5f78a972a46e5880"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a8f16643cb7ba3ee9cf685422c9ea0e67"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a8f16643cb7ba3ee9cf685422c9ea0e67">operator&gt;=</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;) const</td></tr>
-<tr class="memdesc:a8f16643cb7ba3ee9cf685422c9ea0e67"><td class="mdescLeft">&#160;</td><td class="mdescRight">operator &gt;= <a href="classxb_1_1xbString.html#a8f16643cb7ba3ee9cf685422c9ea0e67">More...</a><br /></td></tr>
-<tr class="separator:a8f16643cb7ba3ee9cf685422c9ea0e67"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a06abec236b95f6933ba17bf67089f7cf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a06abec236b95f6933ba17bf67089f7cf">operator-</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;s)</td></tr>
-<tr class="memdesc:a06abec236b95f6933ba17bf67089f7cf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Concatonate operator -. <a href="classxb_1_1xbString.html#a06abec236b95f6933ba17bf67089f7cf">More...</a><br /></td></tr>
-<tr class="separator:a06abec236b95f6933ba17bf67089f7cf"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aab556e8c3cb478dd95643327d72a48bd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#aab556e8c3cb478dd95643327d72a48bd">operator+</a> (const char *s)</td></tr>
-<tr class="memdesc:aab556e8c3cb478dd95643327d72a48bd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Concatonate operator +. <a href="classxb_1_1xbString.html#aab556e8c3cb478dd95643327d72a48bd">More...</a><br /></td></tr>
-<tr class="separator:aab556e8c3cb478dd95643327d72a48bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1f289d577ba90c500bc1be3ec7bb0206"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a1f289d577ba90c500bc1be3ec7bb0206">operator+</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;s)</td></tr>
-<tr class="memdesc:a1f289d577ba90c500bc1be3ec7bb0206"><td class="mdescLeft">&#160;</td><td class="mdescRight">Concatonate operator +. <a href="classxb_1_1xbString.html#a1f289d577ba90c500bc1be3ec7bb0206">More...</a><br /></td></tr>
-<tr class="separator:a1f289d577ba90c500bc1be3ec7bb0206"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af559654baba81c3c0c19823c0b7a69d3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#af559654baba81c3c0c19823c0b7a69d3">operator+</a> (const char c)</td></tr>
-<tr class="memdesc:af559654baba81c3c0c19823c0b7a69d3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Concatonate operator +. <a href="classxb_1_1xbString.html#af559654baba81c3c0c19823c0b7a69d3">More...</a><br /></td></tr>
-<tr class="separator:af559654baba81c3c0c19823c0b7a69d3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6c4fdb689d27a9d19a0b5b4236e1ca62"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a6c4fdb689d27a9d19a0b5b4236e1ca62">AddBackSlash</a> (char c)</td></tr>
-<tr class="memdesc:a6c4fdb689d27a9d19a0b5b4236e1ca62"><td class="mdescLeft">&#160;</td><td class="mdescRight">Add a prefixing back slash to specified characters in the string. <a href="classxb_1_1xbString.html#a6c4fdb689d27a9d19a0b5b4236e1ca62">More...</a><br /></td></tr>
-<tr class="separator:a6c4fdb689d27a9d19a0b5b4236e1ca62"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a8f202e4798491f2ae9ce51ff58dd5815"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a8f202e4798491f2ae9ce51ff58dd5815">Append</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;s)</td></tr>
-<tr class="memdesc:a8f202e4798491f2ae9ce51ff58dd5815"><td class="mdescLeft">&#160;</td><td class="mdescRight">Append data to string. <a href="classxb_1_1xbString.html#a8f202e4798491f2ae9ce51ff58dd5815">More...</a><br /></td></tr>
-<tr class="separator:a8f202e4798491f2ae9ce51ff58dd5815"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1922319303feb6da1f40b5994c5e8240"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a1922319303feb6da1f40b5994c5e8240">Append</a> (const char *s)</td></tr>
-<tr class="memdesc:a1922319303feb6da1f40b5994c5e8240"><td class="mdescLeft">&#160;</td><td class="mdescRight">Append data to string. <a href="classxb_1_1xbString.html#a1922319303feb6da1f40b5994c5e8240">More...</a><br /></td></tr>
-<tr class="separator:a1922319303feb6da1f40b5994c5e8240"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a097453cb71fbf0b5511cf1259ddce4fb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a097453cb71fbf0b5511cf1259ddce4fb">Append</a> (const char *s, xbUInt32 iByteCount)</td></tr>
-<tr class="memdesc:a097453cb71fbf0b5511cf1259ddce4fb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Append data to string. <a href="classxb_1_1xbString.html#a097453cb71fbf0b5511cf1259ddce4fb">More...</a><br /></td></tr>
-<tr class="separator:a097453cb71fbf0b5511cf1259ddce4fb"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a093c6ab5df375a2589755bb8f48fa5c7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a093c6ab5df375a2589755bb8f48fa5c7">Append</a> (char c)</td></tr>
-<tr class="memdesc:a093c6ab5df375a2589755bb8f48fa5c7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Append data to string. <a href="classxb_1_1xbString.html#a093c6ab5df375a2589755bb8f48fa5c7">More...</a><br /></td></tr>
-<tr class="separator:a093c6ab5df375a2589755bb8f48fa5c7"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a85bef82dfa22122a1ab8dfe58a107d96"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a85bef82dfa22122a1ab8dfe58a107d96">Assign</a> (const char *srcStr, xbUInt32 lStartPos, xbUInt32 lCopyLen)</td></tr>
-<tr class="memdesc:a85bef82dfa22122a1ab8dfe58a107d96"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assign portion of string. <a href="classxb_1_1xbString.html#a85bef82dfa22122a1ab8dfe58a107d96">More...</a><br /></td></tr>
-<tr class="separator:a85bef82dfa22122a1ab8dfe58a107d96"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a08eb7ca6740423acab4e8bd7a6c8043d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a08eb7ca6740423acab4e8bd7a6c8043d">Assign</a> (const char *srcStr, xbUInt32 lStartPos)</td></tr>
-<tr class="memdesc:a08eb7ca6740423acab4e8bd7a6c8043d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assign portion of string. <a href="classxb_1_1xbString.html#a08eb7ca6740423acab4e8bd7a6c8043d">More...</a><br /></td></tr>
-<tr class="separator:a08eb7ca6740423acab4e8bd7a6c8043d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac6afd224dfbe439ce083c8dd1ad3246c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#ac6afd224dfbe439ce083c8dd1ad3246c">Assign</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;s, xbUInt32 pos, xbUInt32 lCopyLen)</td></tr>
-<tr class="memdesc:ac6afd224dfbe439ce083c8dd1ad3246c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assign portion of string. <a href="classxb_1_1xbString.html#ac6afd224dfbe439ce083c8dd1ad3246c">More...</a><br /></td></tr>
-<tr class="separator:ac6afd224dfbe439ce083c8dd1ad3246c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4f1d709d9f6c56959e8549157b4ee68c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a4f1d709d9f6c56959e8549157b4ee68c">Assign</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;s, xbUInt32 lCopyLen)</td></tr>
-<tr class="memdesc:a4f1d709d9f6c56959e8549157b4ee68c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assign portion of string. <a href="classxb_1_1xbString.html#a4f1d709d9f6c56959e8549157b4ee68c">More...</a><br /></td></tr>
-<tr class="separator:a4f1d709d9f6c56959e8549157b4ee68c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac7a8466b03c04df838bd182ef244f792"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#ac7a8466b03c04df838bd182ef244f792">Copy</a> () const</td></tr>
-<tr class="memdesc:ac7a8466b03c04df838bd182ef244f792"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy a string. <a href="classxb_1_1xbString.html#ac7a8466b03c04df838bd182ef244f792">More...</a><br /></td></tr>
-<tr class="separator:ac7a8466b03c04df838bd182ef244f792"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a26bc14d92dc7ce1f2bf31cd74af0db0f"><td class="memItemLeft" align="right" valign="top">xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a26bc14d92dc7ce1f2bf31cd74af0db0f">CountChar</a> (char c) const</td></tr>
-<tr class="memdesc:a26bc14d92dc7ce1f2bf31cd74af0db0f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Count the number of characters in the string. <a href="classxb_1_1xbString.html#a26bc14d92dc7ce1f2bf31cd74af0db0f">More...</a><br /></td></tr>
-<tr class="separator:a26bc14d92dc7ce1f2bf31cd74af0db0f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:adc0204bcfd1c052b9aea9229b10acf72"><td class="memItemLeft" align="right" valign="top">xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#adc0204bcfd1c052b9aea9229b10acf72">CountChar</a> (char c, xbInt16 iOpt) const</td></tr>
-<tr class="memdesc:adc0204bcfd1c052b9aea9229b10acf72"><td class="mdescLeft">&#160;</td><td class="mdescRight">Count the number of characters in the string. <a href="classxb_1_1xbString.html#adc0204bcfd1c052b9aea9229b10acf72">More...</a><br /></td></tr>
-<tr class="separator:adc0204bcfd1c052b9aea9229b10acf72"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0a737bd408a94903f214eb2879eb56de"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a0a737bd408a94903f214eb2879eb56de">CvtHexChar</a> (char &amp;cOut)</td></tr>
-<tr class="memdesc:a0a737bd408a94903f214eb2879eb56de"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert hex character to string. <a href="classxb_1_1xbString.html#a0a737bd408a94903f214eb2879eb56de">More...</a><br /></td></tr>
-<tr class="separator:a0a737bd408a94903f214eb2879eb56de"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab5eb6918a0ae9ab6c0e961318f3d1eb0"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#ab5eb6918a0ae9ab6c0e961318f3d1eb0">CvtHexString</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sOut)</td></tr>
-<tr class="memdesc:ab5eb6918a0ae9ab6c0e961318f3d1eb0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert string of hex characters to string. <a href="classxb_1_1xbString.html#ab5eb6918a0ae9ab6c0e961318f3d1eb0">More...</a><br /></td></tr>
-<tr class="separator:ab5eb6918a0ae9ab6c0e961318f3d1eb0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1528b30b84a41c3564ef31d1f4496b15"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a1528b30b84a41c3564ef31d1f4496b15">CvtULongLong</a> (xbUInt64 &amp;ullOut)</td></tr>
-<tr class="memdesc:a1528b30b84a41c3564ef31d1f4496b15"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert string to xbUInt64 number. <a href="classxb_1_1xbString.html#a1528b30b84a41c3564ef31d1f4496b15">More...</a><br /></td></tr>
-<tr class="separator:a1528b30b84a41c3564ef31d1f4496b15"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae3ab18365e132323f8ae4c99eb72181c"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#ae3ab18365e132323f8ae4c99eb72181c">CvtLongLong</a> (xbInt64 &amp;llOut)</td></tr>
-<tr class="memdesc:ae3ab18365e132323f8ae4c99eb72181c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert string to xbInt64 number. <a href="classxb_1_1xbString.html#ae3ab18365e132323f8ae4c99eb72181c">More...</a><br /></td></tr>
-<tr class="separator:ae3ab18365e132323f8ae4c99eb72181c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a77195fc4957952625cb33bb503517a3e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a77195fc4957952625cb33bb503517a3e">ExtractElement</a> (const char *src, char delim, xbUInt32 iCnt, xbInt16 iOpt=0)</td></tr>
-<tr class="memdesc:a77195fc4957952625cb33bb503517a3e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extract an element out of a delimited string. <a href="classxb_1_1xbString.html#a77195fc4957952625cb33bb503517a3e">More...</a><br /></td></tr>
-<tr class="separator:a77195fc4957952625cb33bb503517a3e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a685187a5f8401b322fc61f3fbe56330d"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a685187a5f8401b322fc61f3fbe56330d">GetCharacter</a> (xbUInt32 lPos) const</td></tr>
-<tr class="memdesc:a685187a5f8401b322fc61f3fbe56330d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a character by position. <a href="classxb_1_1xbString.html#a685187a5f8401b322fc61f3fbe56330d">More...</a><br /></td></tr>
-<tr class="separator:a685187a5f8401b322fc61f3fbe56330d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac7698665f44413a5e99a5b5bc573c6df"><td class="memItemLeft" align="right" valign="top">xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#ac7698665f44413a5e99a5b5bc573c6df">GetLastPos</a> (char c) const</td></tr>
-<tr class="memdesc:ac7698665f44413a5e99a5b5bc573c6df"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the position of the last occurrence of a given character. <a href="classxb_1_1xbString.html#ac7698665f44413a5e99a5b5bc573c6df">More...</a><br /></td></tr>
-<tr class="separator:ac7698665f44413a5e99a5b5bc573c6df"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1c55587904fe7e534290559d0ecb8646"><td class="memItemLeft" align="right" valign="top">xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a1c55587904fe7e534290559d0ecb8646">GetLastPos</a> (const char *s) const</td></tr>
-<tr class="memdesc:a1c55587904fe7e534290559d0ecb8646"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the position of the last occurrence of a given string. <a href="classxb_1_1xbString.html#a1c55587904fe7e534290559d0ecb8646">More...</a><br /></td></tr>
-<tr class="separator:a1c55587904fe7e534290559d0ecb8646"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af8b8b808cf43cd352321b43f500142db"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#af8b8b808cf43cd352321b43f500142db">GetPathSeparator</a> () const</td></tr>
-<tr class="memdesc:af8b8b808cf43cd352321b43f500142db"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the path separator out of the string. <a href="classxb_1_1xbString.html#af8b8b808cf43cd352321b43f500142db">More...</a><br /></td></tr>
-<tr class="separator:af8b8b808cf43cd352321b43f500142db"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6c33e73659f8e98819289d2661c7271c"><td class="memItemLeft" align="right" valign="top">xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a6c33e73659f8e98819289d2661c7271c">GetSize</a> () const</td></tr>
-<tr class="memdesc:a6c33e73659f8e98819289d2661c7271c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Retrieve the size of the string buffer. <a href="classxb_1_1xbString.html#a6c33e73659f8e98819289d2661c7271c">More...</a><br /></td></tr>
-<tr class="separator:a6c33e73659f8e98819289d2661c7271c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa13f6b72e5a529eab04545892bbc98b4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#aa13f6b72e5a529eab04545892bbc98b4">HasAlphaChars</a> () const</td></tr>
-<tr class="memdesc:aa13f6b72e5a529eab04545892bbc98b4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determine if the string has any alpha characters. <a href="classxb_1_1xbString.html#aa13f6b72e5a529eab04545892bbc98b4">More...</a><br /></td></tr>
-<tr class="separator:aa13f6b72e5a529eab04545892bbc98b4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4a255a30d683acd62ea09c1617b53cb3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a4a255a30d683acd62ea09c1617b53cb3">IsEmpty</a> () const</td></tr>
-<tr class="memdesc:a4a255a30d683acd62ea09c1617b53cb3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determine if string is empty. <a href="classxb_1_1xbString.html#a4a255a30d683acd62ea09c1617b53cb3">More...</a><br /></td></tr>
-<tr class="separator:a4a255a30d683acd62ea09c1617b53cb3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3fa34fa31bcb7244ecb054ab628ad500"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a3fa34fa31bcb7244ecb054ab628ad500">IsNull</a> () const</td></tr>
-<tr class="memdesc:a3fa34fa31bcb7244ecb054ab628ad500"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determine if string is NULL. <a href="classxb_1_1xbString.html#a3fa34fa31bcb7244ecb054ab628ad500">More...</a><br /></td></tr>
-<tr class="separator:a3fa34fa31bcb7244ecb054ab628ad500"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:acdc3a6d6955b99f0a6b1d181fb3098b9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#acdc3a6d6955b99f0a6b1d181fb3098b9">Left</a> (xbUInt32 ulLen)</td></tr>
-<tr class="memdesc:acdc3a6d6955b99f0a6b1d181fb3098b9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Retain left part of string, drop rightmost characters. <a href="classxb_1_1xbString.html#acdc3a6d6955b99f0a6b1d181fb3098b9">More...</a><br /></td></tr>
-<tr class="separator:acdc3a6d6955b99f0a6b1d181fb3098b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a998b240eedac311aea5843047f55649b"><td class="memItemLeft" align="right" valign="top">xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a998b240eedac311aea5843047f55649b">Len</a> () const</td></tr>
-<tr class="memdesc:a998b240eedac311aea5843047f55649b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Retrieve length of current string. <a href="classxb_1_1xbString.html#a998b240eedac311aea5843047f55649b">More...</a><br /></td></tr>
-<tr class="separator:a998b240eedac311aea5843047f55649b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a90e0d0be4fd0d82dd2ebbe689adf18ee"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a90e0d0be4fd0d82dd2ebbe689adf18ee">Ltrim</a> ()</td></tr>
-<tr class="memdesc:a90e0d0be4fd0d82dd2ebbe689adf18ee"><td class="mdescLeft">&#160;</td><td class="mdescRight">Left trim white space from string. <a href="classxb_1_1xbString.html#a90e0d0be4fd0d82dd2ebbe689adf18ee">More...</a><br /></td></tr>
-<tr class="separator:a90e0d0be4fd0d82dd2ebbe689adf18ee"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a656f5854f74064b7257ff96d96dfb68b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a656f5854f74064b7257ff96d96dfb68b">Ltrunc</a> (xbUInt32 ulCnt)</td></tr>
-<tr class="memdesc:a656f5854f74064b7257ff96d96dfb68b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Left truncate string. <a href="classxb_1_1xbString.html#a656f5854f74064b7257ff96d96dfb68b">More...</a><br /></td></tr>
-<tr class="separator:a656f5854f74064b7257ff96d96dfb68b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0f9eefc836b24c4ee7c5a316c5d812b7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a0f9eefc836b24c4ee7c5a316c5d812b7">Mid</a> (xbUInt32 ulPos, xbUInt32 lLen)</td></tr>
-<tr class="memdesc:a0f9eefc836b24c4ee7c5a316c5d812b7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extract portion of data from string. <a href="classxb_1_1xbString.html#a0f9eefc836b24c4ee7c5a316c5d812b7">More...</a><br /></td></tr>
-<tr class="separator:a0f9eefc836b24c4ee7c5a316c5d812b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6a09cfed22066b0c72432f26960f9e7b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a6a09cfed22066b0c72432f26960f9e7b">PadLeft</a> (char c, xbUInt32 ulLen)</td></tr>
-<tr class="memdesc:a6a09cfed22066b0c72432f26960f9e7b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Left pad string. <a href="classxb_1_1xbString.html#a6a09cfed22066b0c72432f26960f9e7b">More...</a><br /></td></tr>
-<tr class="separator:a6a09cfed22066b0c72432f26960f9e7b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aba13f0c77eb6c4a22996039569fad284"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#aba13f0c77eb6c4a22996039569fad284">PadRight</a> (char c, xbUInt32 ulLen)</td></tr>
-<tr class="memdesc:aba13f0c77eb6c4a22996039569fad284"><td class="mdescLeft">&#160;</td><td class="mdescRight">Right pad string. <a href="classxb_1_1xbString.html#aba13f0c77eb6c4a22996039569fad284">More...</a><br /></td></tr>
-<tr class="separator:aba13f0c77eb6c4a22996039569fad284"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1b586890138da8bf0e23090bd8b34581"><td class="memItemLeft" align="right" valign="top">xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a1b586890138da8bf0e23090bd8b34581">Pos</a> (char c, xbUInt32 ulStartPos) const</td></tr>
-<tr class="memdesc:a1b586890138da8bf0e23090bd8b34581"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determine position of a given character. <a href="classxb_1_1xbString.html#a1b586890138da8bf0e23090bd8b34581">More...</a><br /></td></tr>
-<tr class="separator:a1b586890138da8bf0e23090bd8b34581"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3baf59d15099589ff631995f129e582b"><td class="memItemLeft" align="right" valign="top">xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a3baf59d15099589ff631995f129e582b">Pos</a> (char c) const</td></tr>
-<tr class="memdesc:a3baf59d15099589ff631995f129e582b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determine position of a given character. <a href="classxb_1_1xbString.html#a3baf59d15099589ff631995f129e582b">More...</a><br /></td></tr>
-<tr class="separator:a3baf59d15099589ff631995f129e582b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a8705d7277b72f5aa98021e84438914da"><td class="memItemLeft" align="right" valign="top">xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a8705d7277b72f5aa98021e84438914da">Pos</a> (const char *s) const</td></tr>
-<tr class="memdesc:a8705d7277b72f5aa98021e84438914da"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determine position of a given substring. <a href="classxb_1_1xbString.html#a8705d7277b72f5aa98021e84438914da">More...</a><br /></td></tr>
-<tr class="separator:a8705d7277b72f5aa98021e84438914da"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1bae6fa8f608261f6e889616482f6e39"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a1bae6fa8f608261f6e889616482f6e39">PutAt</a> (xbUInt32 ulPos, char c)</td></tr>
-<tr class="memdesc:a1bae6fa8f608261f6e889616482f6e39"><td class="mdescLeft">&#160;</td><td class="mdescRight">Insert character into string. <a href="classxb_1_1xbString.html#a1bae6fa8f608261f6e889616482f6e39">More...</a><br /></td></tr>
-<tr class="separator:a1bae6fa8f608261f6e889616482f6e39"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:afaac65eaa6d9ef1596d6a0e7b91ed0f2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#afaac65eaa6d9ef1596d6a0e7b91ed0f2">Remove</a> (xbUInt32 ulPos, xbUInt32 ulN)</td></tr>
-<tr class="memdesc:afaac65eaa6d9ef1596d6a0e7b91ed0f2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Remove portion of string. <a href="classxb_1_1xbString.html#afaac65eaa6d9ef1596d6a0e7b91ed0f2">More...</a><br /></td></tr>
-<tr class="separator:afaac65eaa6d9ef1596d6a0e7b91ed0f2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac721d643c60b5c5acf60c2bce99596fa"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#ac721d643c60b5c5acf60c2bce99596fa">Replace</a> (const char *sReplace, const char *sReplaceWith, xbInt16 iOpt=0)</td></tr>
-<tr class="memdesc:ac721d643c60b5c5acf60c2bce99596fa"><td class="mdescLeft">&#160;</td><td class="mdescRight">Replace a value within a string with another value. <a href="classxb_1_1xbString.html#ac721d643c60b5c5acf60c2bce99596fa">More...</a><br /></td></tr>
-<tr class="separator:ac721d643c60b5c5acf60c2bce99596fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa6d346ab04e5bb8852f0bb996163a35e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#aa6d346ab04e5bb8852f0bb996163a35e">Resize</a> (xbUInt32 lSize)</td></tr>
-<tr class="memdesc:aa6d346ab04e5bb8852f0bb996163a35e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Resize a string. <a href="classxb_1_1xbString.html#aa6d346ab04e5bb8852f0bb996163a35e">More...</a><br /></td></tr>
-<tr class="separator:aa6d346ab04e5bb8852f0bb996163a35e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aaf330188d67c347ecae0d16f65b22077"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#aaf330188d67c347ecae0d16f65b22077">Rtrim</a> ()</td></tr>
-<tr class="memdesc:aaf330188d67c347ecae0d16f65b22077"><td class="mdescLeft">&#160;</td><td class="mdescRight">Right trim the string. <a href="classxb_1_1xbString.html#aaf330188d67c347ecae0d16f65b22077">More...</a><br /></td></tr>
-<tr class="separator:aaf330188d67c347ecae0d16f65b22077"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab85753d2c39882e946a8468cbb587700"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#ab85753d2c39882e946a8468cbb587700">Set</a> (const char *s)</td></tr>
-<tr class="memdesc:ab85753d2c39882e946a8468cbb587700"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the value of the string. <a href="classxb_1_1xbString.html#ab85753d2c39882e946a8468cbb587700">More...</a><br /></td></tr>
-<tr class="separator:ab85753d2c39882e946a8468cbb587700"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac0d08bd688fd0e3707e32886d0dfeb09"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#ac0d08bd688fd0e3707e32886d0dfeb09">Set</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;s)</td></tr>
-<tr class="memdesc:ac0d08bd688fd0e3707e32886d0dfeb09"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the value of the string. <a href="classxb_1_1xbString.html#ac0d08bd688fd0e3707e32886d0dfeb09">More...</a><br /></td></tr>
-<tr class="separator:ac0d08bd688fd0e3707e32886d0dfeb09"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6eba6ccd0c805a22516de2c18a30f8a3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a6eba6ccd0c805a22516de2c18a30f8a3">Set</a> (const char *s, xbUInt32 ulSize)</td></tr>
-<tr class="memdesc:a6eba6ccd0c805a22516de2c18a30f8a3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the value of the string. <a href="classxb_1_1xbString.html#a6eba6ccd0c805a22516de2c18a30f8a3">More...</a><br /></td></tr>
-<tr class="separator:a6eba6ccd0c805a22516de2c18a30f8a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3af5b1f111f94b0667551fcbd1d97abd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a3af5b1f111f94b0667551fcbd1d97abd">SetNum</a> (xbInt32 lNum)</td></tr>
-<tr class="memdesc:a3af5b1f111f94b0667551fcbd1d97abd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the string to long integer numeric value. <a href="classxb_1_1xbString.html#a3af5b1f111f94b0667551fcbd1d97abd">More...</a><br /></td></tr>
-<tr class="separator:a3af5b1f111f94b0667551fcbd1d97abd"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9e9bfa29d86377b915f1628aeb0e9195"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a9e9bfa29d86377b915f1628aeb0e9195">Sprintf</a> (const char *format,...)</td></tr>
-<tr class="memdesc:a9e9bfa29d86377b915f1628aeb0e9195"><td class="mdescLeft">&#160;</td><td class="mdescRight">Printf routine for formatting a string. <a href="classxb_1_1xbString.html#a9e9bfa29d86377b915f1628aeb0e9195">More...</a><br /></td></tr>
-<tr class="separator:a9e9bfa29d86377b915f1628aeb0e9195"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6715f4c0010f3ab487c9d787838a29b3"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a6715f4c0010f3ab487c9d787838a29b3">Str</a> () const</td></tr>
-<tr class="memdesc:a6715f4c0010f3ab487c9d787838a29b3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return string data. <a href="classxb_1_1xbString.html#a6715f4c0010f3ab487c9d787838a29b3">More...</a><br /></td></tr>
-<tr class="separator:a6715f4c0010f3ab487c9d787838a29b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3bc9e856c34f0c240a6e36e5b6e3ea7b"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a3bc9e856c34f0c240a6e36e5b6e3ea7b">strncpy</a> (char *cDest, xbUInt32 n) const</td></tr>
-<tr class="memdesc:a3bc9e856c34f0c240a6e36e5b6e3ea7b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy all or part of string to character array. <a href="classxb_1_1xbString.html#a3bc9e856c34f0c240a6e36e5b6e3ea7b">More...</a><br /></td></tr>
-<tr class="separator:a3bc9e856c34f0c240a6e36e5b6e3ea7b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a054683872e1f05d11c2cf8683a63a6fe"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a054683872e1f05d11c2cf8683a63a6fe">SwapChars</a> (char from, char to)</td></tr>
-<tr class="memdesc:a054683872e1f05d11c2cf8683a63a6fe"><td class="mdescLeft">&#160;</td><td class="mdescRight">Swap characters. <a href="classxb_1_1xbString.html#a054683872e1f05d11c2cf8683a63a6fe">More...</a><br /></td></tr>
-<tr class="separator:a054683872e1f05d11c2cf8683a63a6fe"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a602cac1a6ef3f6b52f587ac4c0ef4fb2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a602cac1a6ef3f6b52f587ac4c0ef4fb2">ToLowerCase</a> ()</td></tr>
-<tr class="memdesc:a602cac1a6ef3f6b52f587ac4c0ef4fb2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Replace all upper case charaters with lower case characters. <a href="classxb_1_1xbString.html#a602cac1a6ef3f6b52f587ac4c0ef4fb2">More...</a><br /></td></tr>
-<tr class="separator:a602cac1a6ef3f6b52f587ac4c0ef4fb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a68001d0a44e6b4fe61e29a4e41ded9d4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a68001d0a44e6b4fe61e29a4e41ded9d4">ToUpperCase</a> ()</td></tr>
-<tr class="memdesc:a68001d0a44e6b4fe61e29a4e41ded9d4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Replace all lower case charaters with lower case characters. <a href="classxb_1_1xbString.html#a68001d0a44e6b4fe61e29a4e41ded9d4">More...</a><br /></td></tr>
-<tr class="separator:a68001d0a44e6b4fe61e29a4e41ded9d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abc9bd33687d4e03ca52d77885721d626"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#abc9bd33687d4e03ca52d77885721d626">Trim</a> ()</td></tr>
-<tr class="memdesc:abc9bd33687d4e03ca52d77885721d626"><td class="mdescLeft">&#160;</td><td class="mdescRight">Trim all leading and trailing white space from string. <a href="classxb_1_1xbString.html#abc9bd33687d4e03ca52d77885721d626">More...</a><br /></td></tr>
-<tr class="separator:abc9bd33687d4e03ca52d77885721d626"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a72b16c15fd8822efaa5f158c34df7b1e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a72b16c15fd8822efaa5f158c34df7b1e">ValidLogicalValue</a> () const</td></tr>
-<tr class="memdesc:a72b16c15fd8822efaa5f158c34df7b1e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check for valid logical field data. <a href="classxb_1_1xbString.html#a72b16c15fd8822efaa5f158c34df7b1e">More...</a><br /></td></tr>
-<tr class="separator:a72b16c15fd8822efaa5f158c34df7b1e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aeed920d2a25111f776ddde2d530eb81b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#aeed920d2a25111f776ddde2d530eb81b">ValidNumericValue</a> () const</td></tr>
-<tr class="memdesc:aeed920d2a25111f776ddde2d530eb81b"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function returns true if the data is valid numeric data. <a href="classxb_1_1xbString.html#aeed920d2a25111f776ddde2d530eb81b">More...</a><br /></td></tr>
-<tr class="separator:aeed920d2a25111f776ddde2d530eb81b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2fd30956a26a260d1ef6fdbe73dd93f9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a2fd30956a26a260d1ef6fdbe73dd93f9">ZapChar</a> (char c)</td></tr>
-<tr class="memdesc:a2fd30956a26a260d1ef6fdbe73dd93f9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Remove every instance of a character from a string. <a href="classxb_1_1xbString.html#a2fd30956a26a260d1ef6fdbe73dd93f9">More...</a><br /></td></tr>
-<tr class="separator:a2fd30956a26a260d1ef6fdbe73dd93f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:addc3a470f6cd85d4c21bf9da38cf5ac9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#addc3a470f6cd85d4c21bf9da38cf5ac9">ZapLeadingChar</a> (char c)</td></tr>
-<tr class="memdesc:addc3a470f6cd85d4c21bf9da38cf5ac9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Remove leading character from a string. <a href="classxb_1_1xbString.html#addc3a470f6cd85d4c21bf9da38cf5ac9">More...</a><br /></td></tr>
-<tr class="separator:addc3a470f6cd85d4c21bf9da38cf5ac9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:afe3415bfa2e1089b792aeda0462fb99e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#afe3415bfa2e1089b792aeda0462fb99e">ZapTrailingChar</a> (char c)</td></tr>
-<tr class="memdesc:afe3415bfa2e1089b792aeda0462fb99e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Remove trailing character from a string. <a href="classxb_1_1xbString.html#afe3415bfa2e1089b792aeda0462fb99e">More...</a><br /></td></tr>
-<tr class="separator:afe3415bfa2e1089b792aeda0462fb99e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="friends" name="friends"></a>
-Friends</h2></td></tr>
-<tr class="memitem:a3fa915061156521e9dd772a8d7e5f8fb"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a3fa915061156521e9dd772a8d7e5f8fb">operator&lt;&lt;</a> (std::ostream &amp;os, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;s)</td></tr>
-<tr class="memdesc:a3fa915061156521e9dd772a8d7e5f8fb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stream insertion operator &lt;&lt;. <a href="classxb_1_1xbString.html#a3fa915061156521e9dd772a8d7e5f8fb">More...</a><br /></td></tr>
-<tr class="separator:a3fa915061156521e9dd772a8d7e5f8fb"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p >Class for handling string data. </p>
-<p >This class defines a basic string class with all the functions one would expect in a string class.</p>
-<p >For purposes of the <a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> class, a string is defined as a variable sized array of one byte characters terminated with a null (0x00 or \0) byte.<br />
-<br />
-</p>
-<p >This version of the <a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> class does not support wide (wchar_t) characters. Perhaps you would be interested in creating a class for supporting wide characters.<br />
-<br />
-</p>
-<p >This string class handle strings in a 1-based (not 0 based) fashion. Any string routines taking an offset use a 1-based value. That is, the first position of the string is position 1, not 0.<br />
-<br />
- <br />
-</p>
-<p >Position 1 (not 0) is considered the first position in a string. <br />
- A return of 0 would indicate a not found condition. A return of 1, would be the first byte. </p>
-</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
-<a id="a63f9313217e0ff3c9789ec59316216a1" name="a63f9313217e0ff3c9789ec59316216a1"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a63f9313217e0ff3c9789ec59316216a1">&#9670;&nbsp;</a></span>xbString() <span class="overload">[1/6]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xb::xbString::xbString </td>
- <td>(</td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ulSize</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Constructor. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">ulSize</td><td>- Allocation size. The allocation size is normally handled internally by the class, but it can be set in this constructor. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a14bbaa293c8d40dd6c64332f2668a92e" name="a14bbaa293c8d40dd6c64332f2668a92e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a14bbaa293c8d40dd6c64332f2668a92e">&#9670;&nbsp;</a></span>xbString() <span class="overload">[2/6]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xb::xbString::xbString </td>
- <td>(</td>
- <td class="paramtype">char&#160;</td>
- <td class="paramname"><em>c</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Constructor. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>- Initialize string to c. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a18f3598dcdf2ec5692274fc8ee769ad7" name="a18f3598dcdf2ec5692274fc8ee769ad7"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a18f3598dcdf2ec5692274fc8ee769ad7">&#9670;&nbsp;</a></span>xbString() <span class="overload">[3/6]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xb::xbString::xbString </td>
- <td>(</td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>s</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ulMaxLen</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Constructor. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">s</td><td>Initialize string to s. </td></tr>
- <tr><td class="paramname">ulMaxLen</td><td>Maximum length of string. Truncate any characters greater than ulMaxLen. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a0d81016b93fc36ebbbafacf35c677f07" name="a0d81016b93fc36ebbbafacf35c677f07"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0d81016b93fc36ebbbafacf35c677f07">&#9670;&nbsp;</a></span>xbString() <span class="overload">[4/6]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xb::xbString::xbString </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>s</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Constructor. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">s</td><td>Initialize string to s. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a25856311106c5fb15d39017b63f0ddc7" name="a25856311106c5fb15d39017b63f0ddc7"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a25856311106c5fb15d39017b63f0ddc7">&#9670;&nbsp;</a></span>xbString() <span class="overload">[5/6]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xb::xbString::xbString </td>
- <td>(</td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>s</em> = <code>&quot;&quot;</code></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Constructor. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">s</td><td>- Initialize string to s. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="ad865b55e3b08dffd527afee8e7e8e3fe" name="ad865b55e3b08dffd527afee8e7e8e3fe"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ad865b55e3b08dffd527afee8e7e8e3fe">&#9670;&nbsp;</a></span>xbString() <span class="overload">[6/6]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xb::xbString::xbString </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a>&#160;</td>
- <td class="paramname"><em>d</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Constructor. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">d</td><td>- Initiailize string to d. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a10a6549efab02bc76ab33b15916b1eb1" name="a10a6549efab02bc76ab33b15916b1eb1"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a10a6549efab02bc76ab33b15916b1eb1">&#9670;&nbsp;</a></span>~xbString()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xb::xbString::~xbString </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Destructor. </p>
-
-</div>
-</div>
-<h2 class="groupheader">Member Function Documentation</h2>
-<a id="a6c4fdb689d27a9d19a0b5b4236e1ca62" name="a6c4fdb689d27a9d19a0b5b4236e1ca62"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6c4fdb689d27a9d19a0b5b4236e1ca62">&#9670;&nbsp;</a></span>AddBackSlash()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::AddBackSlash </td>
- <td>(</td>
- <td class="paramtype">char&#160;</td>
- <td class="paramname"><em>c</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Add a prefixing back slash to specified characters in the string. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>Character to prefix with a backslash. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
-
-</div>
-</div>
-<a id="a093c6ab5df375a2589755bb8f48fa5c7" name="a093c6ab5df375a2589755bb8f48fa5c7"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a093c6ab5df375a2589755bb8f48fa5c7">&#9670;&nbsp;</a></span>Append() <span class="overload">[1/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Append </td>
- <td>(</td>
- <td class="paramtype">char&#160;</td>
- <td class="paramname"><em>c</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Append data to string. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>String data to append. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
-
-</div>
-</div>
-<a id="a1922319303feb6da1f40b5994c5e8240" name="a1922319303feb6da1f40b5994c5e8240"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1922319303feb6da1f40b5994c5e8240">&#9670;&nbsp;</a></span>Append() <span class="overload">[2/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Append </td>
- <td>(</td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>s</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Append data to string. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">s</td><td>String data to append. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
-
-</div>
-</div>
-<a id="a097453cb71fbf0b5511cf1259ddce4fb" name="a097453cb71fbf0b5511cf1259ddce4fb"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a097453cb71fbf0b5511cf1259ddce4fb">&#9670;&nbsp;</a></span>Append() <span class="overload">[3/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Append </td>
- <td>(</td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>s</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ulByteCount</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Append data to string. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">s</td><td>String data to append. </td></tr>
- <tr><td class="paramname">ulByteCount</td><td>Maximum number of bytes to append. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
-
-</div>
-</div>
-<a id="a8f202e4798491f2ae9ce51ff58dd5815" name="a8f202e4798491f2ae9ce51ff58dd5815"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a8f202e4798491f2ae9ce51ff58dd5815">&#9670;&nbsp;</a></span>Append() <span class="overload">[4/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Append </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>s</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Append data to string. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">s</td><td>String data to append. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
-
-</div>
-</div>
-<a id="a08eb7ca6740423acab4e8bd7a6c8043d" name="a08eb7ca6740423acab4e8bd7a6c8043d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a08eb7ca6740423acab4e8bd7a6c8043d">&#9670;&nbsp;</a></span>Assign() <span class="overload">[1/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Assign </td>
- <td>(</td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>sStr</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ulStartPos</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Assign portion of string. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sStr</td><td>- Source string for copy operation. sStr needs to be a Null terminated string. </td></tr>
- <tr><td class="paramname">ulStartPos</td><td>- Starting position within source string. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
-
-</div>
-</div>
-<a id="a85bef82dfa22122a1ab8dfe58a107d96" name="a85bef82dfa22122a1ab8dfe58a107d96"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a85bef82dfa22122a1ab8dfe58a107d96">&#9670;&nbsp;</a></span>Assign() <span class="overload">[2/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Assign </td>
- <td>(</td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>sStr</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ulStartPos</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ulCopyLen</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Assign portion of string. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sStr</td><td>- Source string for copy operation. sStr needs to be a Null terminated string. </td></tr>
- <tr><td class="paramname">ulStartPos</td><td>- Starting position within source string. </td></tr>
- <tr><td class="paramname">ulCopyLen</td><td>- Length of data to copy. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
-
-</div>
-</div>
-<a id="a4f1d709d9f6c56959e8549157b4ee68c" name="a4f1d709d9f6c56959e8549157b4ee68c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4f1d709d9f6c56959e8549157b4ee68c">&#9670;&nbsp;</a></span>Assign() <span class="overload">[3/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Assign </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sStr</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ulStartPos</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Assign portion of string. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sStr</td><td>- Source string for copy operation. sStr needs to be a Null terminated string. </td></tr>
- <tr><td class="paramname">ulStartPos</td><td>- Starting position within source string. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
-
-</div>
-</div>
-<a id="ac6afd224dfbe439ce083c8dd1ad3246c" name="ac6afd224dfbe439ce083c8dd1ad3246c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac6afd224dfbe439ce083c8dd1ad3246c">&#9670;&nbsp;</a></span>Assign() <span class="overload">[4/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Assign </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sStr</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ulStartPos</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ulCopyLen</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Assign portion of string. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sStr</td><td>- Source string for copy operation. sStr needs to be a Null terminated string. </td></tr>
- <tr><td class="paramname">ulStartPos</td><td>- Starting position within source string. </td></tr>
- <tr><td class="paramname">ulCopyLen</td><td>- Length of data to copy. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
-
-</div>
-</div>
-<a id="ac7a8466b03c04df838bd182ef244f792" name="ac7a8466b03c04df838bd182ef244f792"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac7a8466b03c04df838bd182ef244f792">&#9670;&nbsp;</a></span>Copy()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> xb::xbString::Copy </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Copy a string. </p>
-<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a>. </dd></dl>
-
-</div>
-</div>
-<a id="a26bc14d92dc7ce1f2bf31cd74af0db0f" name="a26bc14d92dc7ce1f2bf31cd74af0db0f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a26bc14d92dc7ce1f2bf31cd74af0db0f">&#9670;&nbsp;</a></span>CountChar() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbUInt32 xb::xbString::CountChar </td>
- <td>(</td>
- <td class="paramtype">char&#160;</td>
- <td class="paramname"><em>c</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Count the number of characters in the string. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>Character to count. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The number of characters. </dd></dl>
-
-</div>
-</div>
-<a id="adc0204bcfd1c052b9aea9229b10acf72" name="adc0204bcfd1c052b9aea9229b10acf72"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#adc0204bcfd1c052b9aea9229b10acf72">&#9670;&nbsp;</a></span>CountChar() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbUInt32 xb::xbString::CountChar </td>
- <td>(</td>
- <td class="paramtype">char&#160;</td>
- <td class="paramname"><em>c</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iOpt</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Count the number of characters in the string. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>Character to count. </td></tr>
- <tr><td class="paramname">iOpt</td><td>0 - Count the number of characters.<br />
- 1 - Count the number of characters not between single or double quotes. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>The number of characters. </dd></dl>
-
-</div>
-</div>
-<a id="a0a737bd408a94903f214eb2879eb56de" name="a0a737bd408a94903f214eb2879eb56de"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0a737bd408a94903f214eb2879eb56de">&#9670;&nbsp;</a></span>CvtHexChar()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbString::CvtHexChar </td>
- <td>(</td>
- <td class="paramtype">char &amp;&#160;</td>
- <td class="paramname"><em>cOut</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Convert hex character to string. </p>
-<p >This routine converts a four byte string in the format of 0x00 to a one byte char value. The first four bytes of the string must be in the format 0x00. Anything past the first four bytes is disregarded.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">cOut</td><td>Output character. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>XB_INVALID_PARM on error<br />
- XB_NO_ERROR on success. </dd></dl>
-
-</div>
-</div>
-<a id="ab5eb6918a0ae9ab6c0e961318f3d1eb0" name="ab5eb6918a0ae9ab6c0e961318f3d1eb0"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab5eb6918a0ae9ab6c0e961318f3d1eb0">&#9670;&nbsp;</a></span>CvtHexString()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbString::CvtHexString </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sOut</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Convert string of hex characters to string. </p>
-<p >This routine converts a string of four byte format of 0x00 to a string of one byte chars.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sOut</td><td>Output string of converted characters. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>XB_INVALID_PARM on error<br />
- XB_NO_ERROR on success. </dd></dl>
-
-</div>
-</div>
-<a id="ae3ab18365e132323f8ae4c99eb72181c" name="ae3ab18365e132323f8ae4c99eb72181c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae3ab18365e132323f8ae4c99eb72181c">&#9670;&nbsp;</a></span>CvtLongLong()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbString::CvtLongLong </td>
- <td>(</td>
- <td class="paramtype">xbInt64 &amp;&#160;</td>
- <td class="paramname"><em>llOut</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Convert string to xbInt64 number. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">llOut</td><td>- output long long. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>XB_NO_ERROR </dd></dl>
-
-</div>
-</div>
-<a id="a1528b30b84a41c3564ef31d1f4496b15" name="a1528b30b84a41c3564ef31d1f4496b15"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1528b30b84a41c3564ef31d1f4496b15">&#9670;&nbsp;</a></span>CvtULongLong()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbString::CvtULongLong </td>
- <td>(</td>
- <td class="paramtype">xbUInt64 &amp;&#160;</td>
- <td class="paramname"><em>ullOut</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Convert string to xbUInt64 number. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">ullOut</td><td>- output unsigned long long. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>XB_NO_ERROR </dd></dl>
-
-</div>
-</div>
-<a id="a77195fc4957952625cb33bb503517a3e" name="a77195fc4957952625cb33bb503517a3e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a77195fc4957952625cb33bb503517a3e">&#9670;&nbsp;</a></span>ExtractElement()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::ExtractElement </td>
- <td>(</td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>pSrc</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char&#160;</td>
- <td class="paramname"><em>cDelim</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>lSkipCnt</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iOpt</em> = <code>0</code>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Extract an element out of a delimited string. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">pSrc</td><td>Source string. </td></tr>
- <tr><td class="paramname">cDelim</td><td>Delimiter. </td></tr>
- <tr><td class="paramname">lSkipCnt</td><td>Number of delimiters to skip. </td></tr>
- <tr><td class="paramname">iOpt</td><td>0 - ignore single and double quotes.<br />
- 1 - ignore delimiters between single or double quotes. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Reference to string extracted from element. </dd></dl>
-
-</div>
-</div>
-<a id="a685187a5f8401b322fc61f3fbe56330d" name="a685187a5f8401b322fc61f3fbe56330d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a685187a5f8401b322fc61f3fbe56330d">&#9670;&nbsp;</a></span>GetCharacter()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">char xb::xbString::GetCharacter </td>
- <td>(</td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>n</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Get a character by position. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">n</td><td>- Position in string to extract. First position is 1 (not 0). </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Character from position n, or null. </dd></dl>
-
-</div>
-</div>
-<a id="ac7698665f44413a5e99a5b5bc573c6df" name="ac7698665f44413a5e99a5b5bc573c6df"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac7698665f44413a5e99a5b5bc573c6df">&#9670;&nbsp;</a></span>GetLastPos() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbUInt32 xb::xbString::GetLastPos </td>
- <td>(</td>
- <td class="paramtype">char&#160;</td>
- <td class="paramname"><em>c</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Get the position of the last occurrence of a given character. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>- Character to search for. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Last position of character in the string. </dd></dl>
-
-</div>
-</div>
-<a id="a1c55587904fe7e534290559d0ecb8646" name="a1c55587904fe7e534290559d0ecb8646"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1c55587904fe7e534290559d0ecb8646">&#9670;&nbsp;</a></span>GetLastPos() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbUInt32 xb::xbString::GetLastPos </td>
- <td>(</td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>s</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Get the position of the last occurrence of a given string. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">s</td><td>- String to search for. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Last position of character in the string. </dd></dl>
-
-</div>
-</div>
-<a id="af8b8b808cf43cd352321b43f500142db" name="af8b8b808cf43cd352321b43f500142db"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af8b8b808cf43cd352321b43f500142db">&#9670;&nbsp;</a></span>GetPathSeparator()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">char xb::xbString::GetPathSeparator </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Get the path separator out of the string. </p>
-<dl class="section return"><dt>Returns</dt><dd>Char value containing either / or \ depending on OS. </dd></dl>
-
-</div>
-</div>
-<a id="a6c33e73659f8e98819289d2661c7271c" name="a6c33e73659f8e98819289d2661c7271c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6c33e73659f8e98819289d2661c7271c">&#9670;&nbsp;</a></span>GetSize()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbUInt32 xb::xbString::GetSize </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Retrieve the size of the string buffer. </p>
-<dl class="section return"><dt>Returns</dt><dd>Size of string buffer including the null terminating byte. </dd></dl>
-
-</div>
-</div>
-<a id="aa13f6b72e5a529eab04545892bbc98b4" name="aa13f6b72e5a529eab04545892bbc98b4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aa13f6b72e5a529eab04545892bbc98b4">&#9670;&nbsp;</a></span>HasAlphaChars()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbString::HasAlphaChars </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Determine if the string has any alpha characters. </p>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue - String contains one or more aloha characters.<br />
- xbFalse - String contains no alpha characters. </dd></dl>
-
-</div>
-</div>
-<a id="a4a255a30d683acd62ea09c1617b53cb3" name="a4a255a30d683acd62ea09c1617b53cb3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4a255a30d683acd62ea09c1617b53cb3">&#9670;&nbsp;</a></span>IsEmpty()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbString::IsEmpty </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Determine if string is empty. </p>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue if string is empty.<br />
- xbFalse if string is not empty. </dd></dl>
-
-</div>
-</div>
-<a id="a3fa34fa31bcb7244ecb054ab628ad500" name="a3fa34fa31bcb7244ecb054ab628ad500"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a3fa34fa31bcb7244ecb054ab628ad500">&#9670;&nbsp;</a></span>IsNull()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbString::IsNull </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Determine if string is NULL. </p>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue if string is NULL.<br />
- xbFalse if string is not NULL. </dd></dl>
-
-</div>
-</div>
-<a id="acdc3a6d6955b99f0a6b1d181fb3098b9" name="acdc3a6d6955b99f0a6b1d181fb3098b9"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#acdc3a6d6955b99f0a6b1d181fb3098b9">&#9670;&nbsp;</a></span>Left()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Left </td>
- <td>(</td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ulLen</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Retain left part of string, drop rightmost characters. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">ulLen</td><td>New string length, truncate rightmost excess. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Reference to string. </dd></dl>
-
-</div>
-</div>
-<a id="a998b240eedac311aea5843047f55649b" name="a998b240eedac311aea5843047f55649b"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a998b240eedac311aea5843047f55649b">&#9670;&nbsp;</a></span>Len()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbUInt32 xb::xbString::Len </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Retrieve length of current string. </p>
-<dl class="section return"><dt>Returns</dt><dd>String length, excluding the terminating null byte. </dd></dl>
-
-</div>
-</div>
-<a id="a90e0d0be4fd0d82dd2ebbe689adf18ee" name="a90e0d0be4fd0d82dd2ebbe689adf18ee"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a90e0d0be4fd0d82dd2ebbe689adf18ee">&#9670;&nbsp;</a></span>Ltrim()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Ltrim </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Left trim white space from string. </p>
-<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
-
-</div>
-</div>
-<a id="a656f5854f74064b7257ff96d96dfb68b" name="a656f5854f74064b7257ff96d96dfb68b"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a656f5854f74064b7257ff96d96dfb68b">&#9670;&nbsp;</a></span>Ltrunc()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Ltrunc </td>
- <td>(</td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ulCnt</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Left truncate string. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">ulCnt</td><td>Number of bytes to remove from the left. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
-
-</div>
-</div>
-<a id="a0f9eefc836b24c4ee7c5a316c5d812b7" name="a0f9eefc836b24c4ee7c5a316c5d812b7"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0f9eefc836b24c4ee7c5a316c5d812b7">&#9670;&nbsp;</a></span>Mid()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Mid </td>
- <td>(</td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ulStartPos</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ulTargLen</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Extract portion of data from string. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">ulStartPos</td><td>Starting position </td></tr>
- <tr><td class="paramname">ulTargLen</td><td>Length </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Reference to string </dd></dl>
-
-</div>
-</div>
-<a id="a545df0ae9590f0ea5844a165e38a6388" name="a545df0ae9590f0ea5844a165e38a6388"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a545df0ae9590f0ea5844a165e38a6388">&#9670;&nbsp;</a></span>operator const char *()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xb::xbString::operator const char * </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Operator const char *. </p>
-<dl class="section return"><dt>Returns</dt><dd>Pointer to string data. </dd></dl>
-
-</div>
-</div>
-<a id="a822448f2a0ce653473d4c1de5763a3a6" name="a822448f2a0ce653473d4c1de5763a3a6"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a822448f2a0ce653473d4c1de5763a3a6">&#9670;&nbsp;</a></span>operator!=() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbString::operator!= </td>
- <td>(</td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>s</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>operator != </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">s</td><td>String to compare </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue - Strings don't match.<br />
- zbFalse - Strings match.<br />
- </dd></dl>
-
-</div>
-</div>
-<a id="acf89691607050b0505dc6af28d059c38" name="acf89691607050b0505dc6af28d059c38"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#acf89691607050b0505dc6af28d059c38">&#9670;&nbsp;</a></span>operator!=() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbString::operator!= </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>s</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>operator != </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">s</td><td>String to compare </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue - Strings don't match.<br />
- xbFalse - Strings match.<br />
- </dd></dl>
-
-</div>
-</div>
-<a id="aab556e8c3cb478dd95643327d72a48bd" name="aab556e8c3cb478dd95643327d72a48bd"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aab556e8c3cb478dd95643327d72a48bd">&#9670;&nbsp;</a></span>operator+() <span class="overload">[1/3]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> xb::xbString::operator+ </td>
- <td>(</td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>s1</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Concatonate operator +. </p>
-<p >Concatonate left string with right string returning reference to new string.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">s1</td><td>Right string operator. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="af559654baba81c3c0c19823c0b7a69d3" name="af559654baba81c3c0c19823c0b7a69d3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af559654baba81c3c0c19823c0b7a69d3">&#9670;&nbsp;</a></span>operator+() <span class="overload">[2/3]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> xb::xbString::operator+ </td>
- <td>(</td>
- <td class="paramtype">const char&#160;</td>
- <td class="paramname"><em>c</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Concatonate operator +. </p>
-<p >Concatonate left string with right string returning reference to new string.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>Right string operator. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a1f289d577ba90c500bc1be3ec7bb0206" name="a1f289d577ba90c500bc1be3ec7bb0206"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1f289d577ba90c500bc1be3ec7bb0206">&#9670;&nbsp;</a></span>operator+() <span class="overload">[3/3]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> xb::xbString::operator+ </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>s1</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Concatonate operator +. </p>
-<p >Concatonate left string with right string returning reference to new string.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">s1</td><td>Right string operator. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="ae12f45b8be84e438e032c0b860f985c6" name="ae12f45b8be84e438e032c0b860f985c6"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae12f45b8be84e438e032c0b860f985c6">&#9670;&nbsp;</a></span>operator+=() <span class="overload">[1/3]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::operator+= </td>
- <td>(</td>
- <td class="paramtype">char&#160;</td>
- <td class="paramname"><em>c</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Append operator +=. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>- Append c to the string. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="ab319120dbad9107e1e7090139c956100" name="ab319120dbad9107e1e7090139c956100"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab319120dbad9107e1e7090139c956100">&#9670;&nbsp;</a></span>operator+=() <span class="overload">[2/3]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::operator+= </td>
- <td>(</td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>s</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Append operator +=. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">s</td><td>- Append s to the string. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a76a47af239797a266ada6141c150001c" name="a76a47af239797a266ada6141c150001c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a76a47af239797a266ada6141c150001c">&#9670;&nbsp;</a></span>operator+=() <span class="overload">[3/3]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::operator+= </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>s</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Append operator +=. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">s</td><td>- Append s to the string. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a06abec236b95f6933ba17bf67089f7cf" name="a06abec236b95f6933ba17bf67089f7cf"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a06abec236b95f6933ba17bf67089f7cf">&#9670;&nbsp;</a></span>operator-()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> xb::xbString::operator- </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>s1</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Concatonate operator -. </p>
-<p >Concatonate left string with right string returning reference to new string. Both strings are trimmed.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">s1</td><td>Right string operator. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="adcafd019df23bb5724c46e34f3f31194" name="adcafd019df23bb5724c46e34f3f31194"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#adcafd019df23bb5724c46e34f3f31194">&#9670;&nbsp;</a></span>operator-=() <span class="overload">[1/3]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::operator-= </td>
- <td>(</td>
- <td class="paramtype">char&#160;</td>
- <td class="paramname"><em>c</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Append operator -=. </p>
-<p >Append c to the right of this string, trimming right space on this string first. </p><dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>- Append s to the right of the string value. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="aaae97e6eda3d18c9f463993ade985bf4" name="aaae97e6eda3d18c9f463993ade985bf4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aaae97e6eda3d18c9f463993ade985bf4">&#9670;&nbsp;</a></span>operator-=() <span class="overload">[2/3]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::operator-= </td>
- <td>(</td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>s</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Append operator -=. </p>
-<p >Append s to the right of this string, right trimming both strings. </p><dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">s</td><td>- Append s to the right of the string value. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="aa7f4db1b4eae9dfad46346db6e17ea15" name="aa7f4db1b4eae9dfad46346db6e17ea15"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aa7f4db1b4eae9dfad46346db6e17ea15">&#9670;&nbsp;</a></span>operator-=() <span class="overload">[3/3]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::operator-= </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>s</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Append operator -=. </p>
-<p >Append s to the right of this string, right trimming both strings. </p><dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">s</td><td>- Append s to the right of the string value. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a71c7aafa0d523c72cbe58c474be2270a" name="a71c7aafa0d523c72cbe58c474be2270a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a71c7aafa0d523c72cbe58c474be2270a">&#9670;&nbsp;</a></span>operator&lt;()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbString::operator&lt; </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>s</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>operator &lt; </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">s</td><td>String to compare </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue - Left string is less than the right string.<br />
- zbFalse - Left string is not less than the right string.<br />
- </dd></dl>
-
-</div>
-</div>
-<a id="a461f245e60cddfdf5f78a972a46e5880" name="a461f245e60cddfdf5f78a972a46e5880"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a461f245e60cddfdf5f78a972a46e5880">&#9670;&nbsp;</a></span>operator&lt;=()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbString::operator&lt;= </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>s</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>operator &lt;= </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">s</td><td>String to compare </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue - Left string is less than or equal to the right string.<br />
- zbFalse - Left string is not less than or equal to the right string.<br />
- </dd></dl>
-
-</div>
-</div>
-<a id="a84ae7d16c5d73c5aa2270aa9895a7f7c" name="a84ae7d16c5d73c5aa2270aa9895a7f7c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a84ae7d16c5d73c5aa2270aa9895a7f7c">&#9670;&nbsp;</a></span>operator=() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::operator= </td>
- <td>(</td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>s</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Set operator =. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">s</td><td>- Set the string to the string on the right of the equal sign. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a4f69d11cbd43edf71725a606d0ca8f40" name="a4f69d11cbd43edf71725a606d0ca8f40"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4f69d11cbd43edf71725a606d0ca8f40">&#9670;&nbsp;</a></span>operator=() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::operator= </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>s</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Set operator =. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">s</td><td>- Set the string to the string on the right of the equal sign. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a94031269af3c433393d4cf0ff9b4be38" name="a94031269af3c433393d4cf0ff9b4be38"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a94031269af3c433393d4cf0ff9b4be38">&#9670;&nbsp;</a></span>operator==() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbString::operator== </td>
- <td>(</td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>s</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>operator == </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">s</td><td>String to compare </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue - Strings match.<br />
- zbFalse - Strings don't match.<br />
- </dd></dl>
-
-</div>
-</div>
-<a id="a2df3ed2fc9456214f5fd2fcf77b69bc1" name="a2df3ed2fc9456214f5fd2fcf77b69bc1"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a2df3ed2fc9456214f5fd2fcf77b69bc1">&#9670;&nbsp;</a></span>operator==() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbString::operator== </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>s</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>operator == </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">s</td><td>String to compare </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue - Strings match.<br />
- zbFalse - Strings don't match.<br />
- </dd></dl>
-
-</div>
-</div>
-<a id="ae46f6a45da5686b607a4edf2786a2fff" name="ae46f6a45da5686b607a4edf2786a2fff"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae46f6a45da5686b607a4edf2786a2fff">&#9670;&nbsp;</a></span>operator&gt;()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbString::operator&gt; </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>s</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>operator &gt; </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">s</td><td>String to compare </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue - Left string is greater than the right string.<br />
- zbFalse - Left string is not greater than the right string.<br />
- </dd></dl>
-
-</div>
-</div>
-<a id="a8f16643cb7ba3ee9cf685422c9ea0e67" name="a8f16643cb7ba3ee9cf685422c9ea0e67"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a8f16643cb7ba3ee9cf685422c9ea0e67">&#9670;&nbsp;</a></span>operator&gt;=()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbString::operator&gt;= </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>s</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>operator &gt;= </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">s</td><td>String to compare </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue - Left string is greater than or equal to the right string.<br />
- zbFalse - Left string is not greater than or equal to the right string.<br />
- </dd></dl>
-
-</div>
-</div>
-<a id="a4deaa68d9571753349c29baacb5613e8" name="a4deaa68d9571753349c29baacb5613e8"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4deaa68d9571753349c29baacb5613e8">&#9670;&nbsp;</a></span>operator[]() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">char &amp; xb::xbString::operator[] </td>
- <td>(</td>
- <td class="paramtype">xbInt32&#160;</td>
- <td class="paramname"><em>n</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>operator [] </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">n</td><td>- Offset into the string of the byte to retrieve. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>c - The character to return from the offset within the [] brackets. </dd></dl>
-
-</div>
-</div>
-<a id="abe45e463226ac8e18550ced18c5a9df3" name="abe45e463226ac8e18550ced18c5a9df3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#abe45e463226ac8e18550ced18c5a9df3">&#9670;&nbsp;</a></span>operator[]() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">char &amp; xb::xbString::operator[] </td>
- <td>(</td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>n</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>operator [] </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">n</td><td>- Offset into the string of the byte to retrieve. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>c - The character to return from the offset within the [] brackets. </dd></dl>
-
-</div>
-</div>
-<a id="a6a09cfed22066b0c72432f26960f9e7b" name="a6a09cfed22066b0c72432f26960f9e7b"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6a09cfed22066b0c72432f26960f9e7b">&#9670;&nbsp;</a></span>PadLeft()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::PadLeft </td>
- <td>(</td>
- <td class="paramtype">char&#160;</td>
- <td class="paramname"><em>c</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ulNewLen</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Left pad string. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>Padding character. </td></tr>
- <tr><td class="paramname">ulNewLen</td><td>New string length. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
-
-</div>
-</div>
-<a id="aba13f0c77eb6c4a22996039569fad284" name="aba13f0c77eb6c4a22996039569fad284"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aba13f0c77eb6c4a22996039569fad284">&#9670;&nbsp;</a></span>PadRight()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::PadRight </td>
- <td>(</td>
- <td class="paramtype">char&#160;</td>
- <td class="paramname"><em>c</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ulNewLen</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Right pad string. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>Padding character. </td></tr>
- <tr><td class="paramname">ulNewLen</td><td>New string length. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
-
-</div>
-</div>
-<a id="a3baf59d15099589ff631995f129e582b" name="a3baf59d15099589ff631995f129e582b"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a3baf59d15099589ff631995f129e582b">&#9670;&nbsp;</a></span>Pos() <span class="overload">[1/3]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbUInt32 xb::xbString::Pos </td>
- <td>(</td>
- <td class="paramtype">char&#160;</td>
- <td class="paramname"><em>c</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Determine position of a given character. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>Seek character </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Position within string. Returns 0 if not found. </dd></dl>
-
-</div>
-</div>
-<a id="a1b586890138da8bf0e23090bd8b34581" name="a1b586890138da8bf0e23090bd8b34581"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1b586890138da8bf0e23090bd8b34581">&#9670;&nbsp;</a></span>Pos() <span class="overload">[2/3]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbUInt32 xb::xbString::Pos </td>
- <td>(</td>
- <td class="paramtype">char&#160;</td>
- <td class="paramname"><em>c</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ulStartPos</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Determine position of a given character. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>Seek character </td></tr>
- <tr><td class="paramname">ulStartPos</td><td>starting position for search, first position is 1 </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Position within string. Returns 0 if not found. </dd></dl>
-
-</div>
-</div>
-<a id="a8705d7277b72f5aa98021e84438914da" name="a8705d7277b72f5aa98021e84438914da"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a8705d7277b72f5aa98021e84438914da">&#9670;&nbsp;</a></span>Pos() <span class="overload">[3/3]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbUInt32 xb::xbString::Pos </td>
- <td>(</td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>s</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Determine position of a given substring. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">s</td><td>Substring </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Position within string. Returns 0 if not found. </dd></dl>
-
-</div>
-</div>
-<a id="a1bae6fa8f608261f6e889616482f6e39" name="a1bae6fa8f608261f6e889616482f6e39"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1bae6fa8f608261f6e889616482f6e39">&#9670;&nbsp;</a></span>PutAt()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::PutAt </td>
- <td>(</td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ulPos</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char&#160;</td>
- <td class="paramname"><em>c</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Insert character into string. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">ulPos</td><td>Insertion position. </td></tr>
- <tr><td class="paramname">c</td><td>Character to insert. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
-
-</div>
-</div>
-<a id="afaac65eaa6d9ef1596d6a0e7b91ed0f2" name="afaac65eaa6d9ef1596d6a0e7b91ed0f2"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#afaac65eaa6d9ef1596d6a0e7b91ed0f2">&#9670;&nbsp;</a></span>Remove()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Remove </td>
- <td>(</td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ulStartPos</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ulDelSize</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Remove portion of string. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">ulStartPos</td><td>Starting position for removal operation. </td></tr>
- <tr><td class="paramname">ulDelSize</td><td>Size of deletion. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Reference to string. </dd></dl>
-
-</div>
-</div>
-<a id="ac721d643c60b5c5acf60c2bce99596fa" name="ac721d643c60b5c5acf60c2bce99596fa"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac721d643c60b5c5acf60c2bce99596fa">&#9670;&nbsp;</a></span>Replace()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Replace </td>
- <td>(</td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>sReplace</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>sReplaceWith</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iOption</em> = <code>0</code>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Replace a value within a string with another value. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sReplace</td><td>- Character string to replace. </td></tr>
- <tr><td class="paramname">sReplaceWith</td><td>- Character string to replace with </td></tr>
- <tr><td class="paramname">iOption</td><td>- 0 = All occurrences, 1 = first occurrence </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
-
-</div>
-</div>
-<a id="aa6d346ab04e5bb8852f0bb996163a35e" name="aa6d346ab04e5bb8852f0bb996163a35e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aa6d346ab04e5bb8852f0bb996163a35e">&#9670;&nbsp;</a></span>Resize()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Resize </td>
- <td>(</td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ulSize</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Resize a string. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">ulSize</td><td>- New string size, including null termination byte. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
-
-</div>
-</div>
-<a id="aaf330188d67c347ecae0d16f65b22077" name="aaf330188d67c347ecae0d16f65b22077"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aaf330188d67c347ecae0d16f65b22077">&#9670;&nbsp;</a></span>Rtrim()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Rtrim </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Right trim the string. </p>
-<p >This routine removes any trailing white space on the string.</p>
-<dl class="section return"><dt>Returns</dt><dd>Reference to string. </dd></dl>
-
-</div>
-</div>
-<a id="ab85753d2c39882e946a8468cbb587700" name="ab85753d2c39882e946a8468cbb587700"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab85753d2c39882e946a8468cbb587700">&#9670;&nbsp;</a></span>Set() <span class="overload">[1/3]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Set </td>
- <td>(</td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>s</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Set the value of the string. </p>
-<p >Note: This routine fails if you try to set the string to itself or some part of itself.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">s</td><td>Value to set the string. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Reference to string. </dd></dl>
-
-</div>
-</div>
-<a id="a6eba6ccd0c805a22516de2c18a30f8a3" name="a6eba6ccd0c805a22516de2c18a30f8a3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6eba6ccd0c805a22516de2c18a30f8a3">&#9670;&nbsp;</a></span>Set() <span class="overload">[2/3]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Set </td>
- <td>(</td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>s</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>ulSize</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Set the value of the string. </p>
-<p >Note: This routine fails if you try to set the string to itself or some part of itself.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">s</td><td>Value to set the string. </td></tr>
- <tr><td class="paramname">ulSize</td><td>Maximum size of resultant string. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Reference to string. </dd></dl>
-
-</div>
-</div>
-<a id="ac0d08bd688fd0e3707e32886d0dfeb09" name="ac0d08bd688fd0e3707e32886d0dfeb09"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac0d08bd688fd0e3707e32886d0dfeb09">&#9670;&nbsp;</a></span>Set() <span class="overload">[3/3]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Set </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>s</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Set the value of the string. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">s</td><td>Value to set the string. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Reference to string. </dd></dl>
-
-</div>
-</div>
-<a id="a3af5b1f111f94b0667551fcbd1d97abd" name="a3af5b1f111f94b0667551fcbd1d97abd"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a3af5b1f111f94b0667551fcbd1d97abd">&#9670;&nbsp;</a></span>SetNum()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::SetNum </td>
- <td>(</td>
- <td class="paramtype">xbInt32&#160;</td>
- <td class="paramname"><em>lNum</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Set the string to long integer numeric value. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">lNum</td><td>Value to set the string </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
-
-</div>
-</div>
-<a id="a9e9bfa29d86377b915f1628aeb0e9195" name="a9e9bfa29d86377b915f1628aeb0e9195"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a9e9bfa29d86377b915f1628aeb0e9195">&#9670;&nbsp;</a></span>Sprintf()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Sprintf </td>
- <td>(</td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>sFormat</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">&#160;</td>
- <td class="paramname"><em>...</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Printf routine for formatting a string. </p>
-<p >See documentation on the standard C printf function for how to use this.</p>
-<p >MyString.Sprintf( "a number %d some text %s", 100, "test text data" );</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sFormat</td><td>A format specifier </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Reference to a formatted string </dd></dl>
-
-</div>
-</div>
-<a id="a6715f4c0010f3ab487c9d787838a29b3" name="a6715f4c0010f3ab487c9d787838a29b3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6715f4c0010f3ab487c9d787838a29b3">&#9670;&nbsp;</a></span>Str()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">const char * xb::xbString::Str </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Return string data. </p>
-<dl class="section return"><dt>Returns</dt><dd>char * to string data or NULL if string is empty </dd></dl>
-
-</div>
-</div>
-<a id="a3bc9e856c34f0c240a6e36e5b6e3ea7b" name="a3bc9e856c34f0c240a6e36e5b6e3ea7b"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a3bc9e856c34f0c240a6e36e5b6e3ea7b">&#9670;&nbsp;</a></span>strncpy()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">char * xb::xbString::strncpy </td>
- <td>(</td>
- <td class="paramtype">char *&#160;</td>
- <td class="paramname"><em>cDest</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>n</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Copy all or part of string to character array. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">cDest</td><td>pointer to destination buffer. </td></tr>
- <tr><td class="paramname">n</td><td>Number of bytest to copy. It is the responsibility of the application to verify the buffer is large enough to hold the string contents. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>char * to result </dd></dl>
-
-</div>
-</div>
-<a id="a054683872e1f05d11c2cf8683a63a6fe" name="a054683872e1f05d11c2cf8683a63a6fe"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a054683872e1f05d11c2cf8683a63a6fe">&#9670;&nbsp;</a></span>SwapChars()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::SwapChars </td>
- <td>(</td>
- <td class="paramtype">char&#160;</td>
- <td class="paramname"><em>cFrom</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char&#160;</td>
- <td class="paramname"><em>cTo</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Swap characters. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">cFrom</td><td>character to replace. </td></tr>
- <tr><td class="paramname">cTo</td><td>character to replace with. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
-
-</div>
-</div>
-<a id="a602cac1a6ef3f6b52f587ac4c0ef4fb2" name="a602cac1a6ef3f6b52f587ac4c0ef4fb2"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a602cac1a6ef3f6b52f587ac4c0ef4fb2">&#9670;&nbsp;</a></span>ToLowerCase()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::ToLowerCase </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Replace all upper case charaters with lower case characters. </p>
-<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
-
-</div>
-</div>
-<a id="a68001d0a44e6b4fe61e29a4e41ded9d4" name="a68001d0a44e6b4fe61e29a4e41ded9d4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a68001d0a44e6b4fe61e29a4e41ded9d4">&#9670;&nbsp;</a></span>ToUpperCase()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::ToUpperCase </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Replace all lower case charaters with lower case characters. </p>
-<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
-
-</div>
-</div>
-<a id="abc9bd33687d4e03ca52d77885721d626" name="abc9bd33687d4e03ca52d77885721d626"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#abc9bd33687d4e03ca52d77885721d626">&#9670;&nbsp;</a></span>Trim()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::Trim </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Trim all leading and trailing white space from string. </p>
-<dl class="section return"><dt>Returns</dt><dd>Reference to string. </dd></dl>
-
-</div>
-</div>
-<a id="a72b16c15fd8822efaa5f158c34df7b1e" name="a72b16c15fd8822efaa5f158c34df7b1e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a72b16c15fd8822efaa5f158c34df7b1e">&#9670;&nbsp;</a></span>ValidLogicalValue()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbString::ValidLogicalValue </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Check for valid logical field data. </p>
-<p >Valid logical data is one 'T', 'F', 'N' or 'Y'.<br />
-</p>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue if the data is valid logical data.<br />
- xbFalse if not valid logical data. </dd></dl>
-
-</div>
-</div>
-<a id="aeed920d2a25111f776ddde2d530eb81b" name="aeed920d2a25111f776ddde2d530eb81b"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aeed920d2a25111f776ddde2d530eb81b">&#9670;&nbsp;</a></span>ValidNumericValue()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbString::ValidNumericValue </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>This function returns true if the data is valid numeric data. </p>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue if valid numeric data.<br />
- xbFalse if not valid numeric daata. </dd></dl>
-
-</div>
-</div>
-<a id="a2fd30956a26a260d1ef6fdbe73dd93f9" name="a2fd30956a26a260d1ef6fdbe73dd93f9"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a2fd30956a26a260d1ef6fdbe73dd93f9">&#9670;&nbsp;</a></span>ZapChar()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::ZapChar </td>
- <td>(</td>
- <td class="paramtype">char&#160;</td>
- <td class="paramname"><em>c</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Remove every instance of a character from a string. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>character to remove from string. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Reference to this stirng.void </dd></dl>
-
-</div>
-</div>
-<a id="addc3a470f6cd85d4c21bf9da38cf5ac9" name="addc3a470f6cd85d4c21bf9da38cf5ac9"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#addc3a470f6cd85d4c21bf9da38cf5ac9">&#9670;&nbsp;</a></span>ZapLeadingChar()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::ZapLeadingChar </td>
- <td>(</td>
- <td class="paramtype">char&#160;</td>
- <td class="paramname"><em>c</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Remove leading character from a string. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>character to remove from beginning of string. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
-
-</div>
-</div>
-<a id="afe3415bfa2e1089b792aeda0462fb99e" name="afe3415bfa2e1089b792aeda0462fb99e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#afe3415bfa2e1089b792aeda0462fb99e">&#9670;&nbsp;</a></span>ZapTrailingChar()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::ZapTrailingChar </td>
- <td>(</td>
- <td class="paramtype">char&#160;</td>
- <td class="paramname"><em>c</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Remove trailing character from a string. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>character to remove from ending of string. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Reference to this string. </dd></dl>
-
-</div>
-</div>
-<h2 class="groupheader">Friends And Related Function Documentation</h2>
-<a id="a3fa915061156521e9dd772a8d7e5f8fb" name="a3fa915061156521e9dd772a8d7e5f8fb"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a3fa915061156521e9dd772a8d7e5f8fb">&#9670;&nbsp;</a></span>operator&lt;&lt;</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">std::ostream &amp; operator&lt;&lt; </td>
- <td>(</td>
- <td class="paramtype">std::ostream &amp;&#160;</td>
- <td class="paramname"><em>os</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>s</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">friend</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Stream insertion operator &lt;&lt;. </p>
-<p >std::cout &lt;&lt; MyString &lt;&lt; std::endl;</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">os</td><td>Output stream </td></tr>
- <tr><td class="paramname">s</td><td>String to send to output stream </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following files:<ul>
-<li>/mnt/1Tdata/xbase/xbase64-4.1.0/src/include/<a class="el" href="xbstring_8h_source.html">xbstring.h</a></li>
-<li>/mnt/1Tdata/xbase/xbase64-4.1.0/src/core/<a class="el" href="xbstring_8cpp.html">xbstring.cpp</a></li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/classxb_1_1xbTblMgr.html b/docs/doxygen/html/classxb_1_1xbTblMgr.html
deleted file mode 100644
index c94fe35..0000000
--- a/docs/doxygen/html/classxb_1_1xbTblMgr.html
+++ /dev/null
@@ -1,1076 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: xb::xbTblMgr Class Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="namespacexb.html">xb</a></li><li class="navelem"><a class="el" href="classxb_1_1xbTblMgr.html">xbTblMgr</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> &#124;
-<a href="#pub-static-attribs">Static Public Attributes</a> &#124;
-<a href="#pro-methods">Protected Member Functions</a> &#124;
-<a href="#pro-static-attribs">Static Protected Attributes</a> </div>
- <div class="headertitle"><div class="title">xb::xbTblMgr Class Reference</div></div>
-</div><!--header-->
-<div class="contents">
-
-<p><code>#include &lt;<a class="el" href="xbtblmgr_8h_source.html">xbtblmgr.h</a>&gt;</code></p>
-<div class="dynheader">
-Inheritance diagram for xb::xbTblMgr:</div>
-<div class="dyncontent">
- <div class="center">
- <img src="classxb_1_1xbTblMgr.png" usemap="#xb::xbTblMgr_map" alt=""/>
- <map id="xb::xbTblMgr_map" name="xb::xbTblMgr_map">
-<area href="classxb_1_1xbSsv.html" title="Class for handling shared system variables." alt="xb::xbSsv" shape="rect" coords="0,0,84,24"/>
-<area href="classxb_1_1xbXBase.html" title="xbXbase class." alt="xb::xbXBase" shape="rect" coords="0,112,84,136"/>
- </map>
-</div></div>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:aad83f5ecc184ca6cbdfc6f356b598d6c"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#aad83f5ecc184ca6cbdfc6f356b598d6c">xbTblMgr</a> ()</td></tr>
-<tr class="separator:aad83f5ecc184ca6cbdfc6f356b598d6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aad6be32d7b3378c71d47fa27ebfe6cbf"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#aad6be32d7b3378c71d47fa27ebfe6cbf">~xbTblMgr</a> ()</td></tr>
-<tr class="separator:aad6be32d7b3378c71d47fa27ebfe6cbf"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af16832ff2bfaee09265652e0fc03709a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#af16832ff2bfaee09265652e0fc03709a">AddTblToTblList</a> (<a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *d, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFqTblName)</td></tr>
-<tr class="separator:af16832ff2bfaee09265652e0fc03709a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2033188e9b08778188a034a6fc90ca85"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#a2033188e9b08778188a034a6fc90ca85">AddTblToTblList</a> (<a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *d, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFqTblName, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTblAlias)</td></tr>
-<tr class="separator:a2033188e9b08778188a034a6fc90ca85"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5eebffb9e8cc64141e35c2622045cb50"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#a5eebffb9e8cc64141e35c2622045cb50">DisplayTableList</a> () const</td></tr>
-<tr class="separator:a5eebffb9e8cc64141e35c2622045cb50"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad8a5d28a2ee6720a9aa74bcb45662cf5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#ad8a5d28a2ee6720a9aa74bcb45662cf5">GetDbfPtr</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTblAlias) const</td></tr>
-<tr class="separator:ad8a5d28a2ee6720a9aa74bcb45662cf5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a801dfecf7fc216954b4197b2c31b25d6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#a801dfecf7fc216954b4197b2c31b25d6">GetDbfPtr</a> (xbInt16 sItemNo) const</td></tr>
-<tr class="separator:a801dfecf7fc216954b4197b2c31b25d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:acbf148ddba4297021cfb980a161ebef9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structxb_1_1xbTblList.html">xbTblList</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#acbf148ddba4297021cfb980a161ebef9">GetTblListEntry</a> (<a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *d)</td></tr>
-<tr class="separator:acbf148ddba4297021cfb980a161ebef9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad0d2d4adabc0dc0e761cfdee63c84069"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#ad0d2d4adabc0dc0e761cfdee63c84069">GetOpenTableCount</a> () const</td></tr>
-<tr class="separator:ad0d2d4adabc0dc0e761cfdee63c84069"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac8eaef41acf08911b90f900aac8e70af"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#ac8eaef41acf08911b90f900aac8e70af">RemoveTblFromTblList</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTblAlias)</td></tr>
-<tr class="separator:ac8eaef41acf08911b90f900aac8e70af"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3d82b6e73d5c0bc8cac22b9a260389c1"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#a3d82b6e73d5c0bc8cac22b9a260389c1">RemoveTblFromTblList</a> (<a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *d)</td></tr>
-<tr class="separator:a3d82b6e73d5c0bc8cac22b9a260389c1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a97dfa59ab9a8e9f17454da0faceb023d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a97dfa59ab9a8e9f17454da0faceb023d">DisplayError</a> (xbInt16 ErrorCode) const</td></tr>
-<tr class="memdesc:a97dfa59ab9a8e9f17454da0faceb023d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Display error message on console for a given error number. <a href="classxb_1_1xbSsv.html#a97dfa59ab9a8e9f17454da0faceb023d">More...</a><br /></td></tr>
-<tr class="separator:a97dfa59ab9a8e9f17454da0faceb023d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6fbb9c3a550ab0b3378f9586a57791d2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a6fbb9c3a550ab0b3378f9586a57791d2">GetDefaultDateFormat</a> () const</td></tr>
-<tr class="memdesc:a6fbb9c3a550ab0b3378f9586a57791d2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the default date format. <a href="classxb_1_1xbSsv.html#a6fbb9c3a550ab0b3378f9586a57791d2">More...</a><br /></td></tr>
-<tr class="separator:a6fbb9c3a550ab0b3378f9586a57791d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">GetDataDirectory</a> () const</td></tr>
-<tr class="memdesc:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current data directory. <a href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">More...</a><br /></td></tr>
-<tr class="separator:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a49cd162f066eef2b829ba7c9f6620243"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">GetEndianType</a> () const</td></tr>
-<tr class="memdesc:a49cd162f066eef2b829ba7c9f6620243"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the Endian type. <a href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">More...</a><br /></td></tr>
-<tr class="separator:a49cd162f066eef2b829ba7c9f6620243"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a56961d2a67b8e7470098626ac4dac7e4"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">GetErrorMessage</a> (xbInt16 ErrorCode) const</td></tr>
-<tr class="memdesc:a56961d2a67b8e7470098626ac4dac7e4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get an error message. <a href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">More...</a><br /></td></tr>
-<tr class="separator:a56961d2a67b8e7470098626ac4dac7e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">SetDataDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDataDirectory)</td></tr>
-<tr class="memdesc:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the data directory. <a href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">More...</a><br /></td></tr>
-<tr class="separator:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5f74db23f8902846d581935c7db73f9c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">SetDefaultDateFormat</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDefaultDateFormat)</td></tr>
-<tr class="memdesc:a5f74db23f8902846d581935c7db73f9c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the default date format. <a href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">More...</a><br /></td></tr>
-<tr class="separator:a5f74db23f8902846d581935c7db73f9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a62e4fd0a5888665c76bbbad962794e72"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72">BitSet</a> (unsigned char c, xbInt16 iBitNo) const</td></tr>
-<tr class="memdesc:a62e4fd0a5888665c76bbbad962794e72"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check a bit in a one byte field and see if it is set. <a href="classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72">More...</a><br /></td></tr>
-<tr class="separator:a62e4fd0a5888665c76bbbad962794e72"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a8551b15a3ce4fa2a40d698db01f4a9ae"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a8551b15a3ce4fa2a40d698db01f4a9ae">BitDump</a> (unsigned char c) const</td></tr>
-<tr class="separator:a8551b15a3ce4fa2a40d698db01f4a9ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aba1395b8e4c7f28c3614061de6e49190"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#aba1395b8e4c7f28c3614061de6e49190">BitDump</a> (char c) const</td></tr>
-<tr class="separator:aba1395b8e4c7f28c3614061de6e49190"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6982f973e81587b04916f4509746aaf5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a6982f973e81587b04916f4509746aaf5">GetDefaultAutoCommit</a> () const</td></tr>
-<tr class="memdesc:a6982f973e81587b04916f4509746aaf5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the default auto commit setting. <a href="classxb_1_1xbSsv.html#a6982f973e81587b04916f4509746aaf5">More...</a><br /></td></tr>
-<tr class="separator:a6982f973e81587b04916f4509746aaf5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">SetDefaultAutoCommit</a> (<a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bDefaultAutoCommit)</td></tr>
-<tr class="memdesc:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the default auto commit. <a href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">More...</a><br /></td></tr>
-<tr class="separator:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">GetHomeDir</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sHomeDirOut)</td></tr>
-<tr class="memdesc:abc9c06c95d71fbad8294e1ae8862cea9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get home directory. <a href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">More...</a><br /></td></tr>
-<tr class="separator:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4822315bded3969b59aeeb683c373051"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a4822315bded3969b59aeeb683c373051">GetLogDirectory</a> () const</td></tr>
-<tr class="separator:a4822315bded3969b59aeeb683c373051"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:afaef09435be73b3111f5edbd7091d861"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#afaef09435be73b3111f5edbd7091d861">GetLogFileName</a> () const</td></tr>
-<tr class="separator:afaef09435be73b3111f5edbd7091d861"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7b992ed97281bf25b5b66f5df686225e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a7b992ed97281bf25b5b66f5df686225e">SetLogDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLogDirectory)</td></tr>
-<tr class="separator:a7b992ed97281bf25b5b66f5df686225e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">GetMultiUser</a> () const</td></tr>
-<tr class="memdesc:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the multi user setting. <a href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">More...</a><br /></td></tr>
-<tr class="separator:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aba6e59512f7172dd55dcf92059e5928c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#aba6e59512f7172dd55dcf92059e5928c">SetMultiUser</a> (<a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bMultiUser)</td></tr>
-<tr class="memdesc:aba6e59512f7172dd55dcf92059e5928c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the multi user setting. <a href="classxb_1_1xbSsv.html#aba6e59512f7172dd55dcf92059e5928c">More...</a><br /></td></tr>
-<tr class="separator:aba6e59512f7172dd55dcf92059e5928c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-static-attribs" name="pub-static-attribs"></a>
-Static Public Attributes</h2></td></tr>
-<tr class="memitem:a6219f1b5e24ea12fe158cd5aea56988e"><td class="memItemLeft" align="right" valign="top">static const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a6219f1b5e24ea12fe158cd5aea56988e">ErrorCodeText</a> []</td></tr>
-<tr class="separator:a6219f1b5e24ea12fe158cd5aea56988e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-methods" name="pro-methods"></a>
-Protected Member Functions</h2></td></tr>
-<tr class="memitem:a904ec348fd029d4a76e72b8fde636108"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a904ec348fd029d4a76e72b8fde636108">SetEndianType</a> ()</td></tr>
-<tr class="memdesc:a904ec348fd029d4a76e72b8fde636108"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the endian type. <a href="classxb_1_1xbSsv.html#a904ec348fd029d4a76e72b8fde636108">More...</a><br /></td></tr>
-<tr class="separator:a904ec348fd029d4a76e72b8fde636108"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-static-attribs" name="pro-static-attribs"></a>
-Static Protected Attributes</h2></td></tr>
-<tr class="memitem:a5849e813f5e8e1cd180f0366637adbf3"><td class="memItemLeft" align="right" valign="top">static xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a5849e813f5e8e1cd180f0366637adbf3">iEndianType</a> = 0</td></tr>
-<tr class="separator:a5849e813f5e8e1cd180f0366637adbf3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9dec3164c3b264882df634915ecf21da"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classxb_1_1xbString.html">xbString</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a9dec3164c3b264882df634915ecf21da">sNullString</a> = &quot;&quot;</td></tr>
-<tr class="separator:a9dec3164c3b264882df634915ecf21da"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
-<a id="aad83f5ecc184ca6cbdfc6f356b598d6c" name="aad83f5ecc184ca6cbdfc6f356b598d6c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aad83f5ecc184ca6cbdfc6f356b598d6c">&#9670;&nbsp;</a></span>xbTblMgr()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xb::xbTblMgr::xbTblMgr </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="aad6be32d7b3378c71d47fa27ebfe6cbf" name="aad6be32d7b3378c71d47fa27ebfe6cbf"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aad6be32d7b3378c71d47fa27ebfe6cbf">&#9670;&nbsp;</a></span>~xbTblMgr()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xb::xbTblMgr::~xbTblMgr </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<h2 class="groupheader">Member Function Documentation</h2>
-<a id="af16832ff2bfaee09265652e0fc03709a" name="af16832ff2bfaee09265652e0fc03709a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af16832ff2bfaee09265652e0fc03709a">&#9670;&nbsp;</a></span>AddTblToTblList() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbTblMgr::AddTblToTblList </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td>
- <td class="paramname"><em>d</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFqTblName</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a2033188e9b08778188a034a6fc90ca85" name="a2033188e9b08778188a034a6fc90ca85"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a2033188e9b08778188a034a6fc90ca85">&#9670;&nbsp;</a></span>AddTblToTblList() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbTblMgr::AddTblToTblList </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td>
- <td class="paramname"><em>d</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFqTblName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sTblAlias</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="aba1395b8e4c7f28c3614061de6e49190" name="aba1395b8e4c7f28c3614061de6e49190"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aba1395b8e4c7f28c3614061de6e49190">&#9670;&nbsp;</a></span>BitDump() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::BitDump </td>
- <td>(</td>
- <td class="paramtype">char&#160;</td>
- <td class="paramname"><em>c</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a8551b15a3ce4fa2a40d698db01f4a9ae" name="a8551b15a3ce4fa2a40d698db01f4a9ae"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a8551b15a3ce4fa2a40d698db01f4a9ae">&#9670;&nbsp;</a></span>BitDump() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::BitDump </td>
- <td>(</td>
- <td class="paramtype">unsigned char&#160;</td>
- <td class="paramname"><em>c</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a62e4fd0a5888665c76bbbad962794e72" name="a62e4fd0a5888665c76bbbad962794e72"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a62e4fd0a5888665c76bbbad962794e72">&#9670;&nbsp;</a></span>BitSet()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbSsv::BitSet </td>
- <td>(</td>
- <td class="paramtype">unsigned char&#160;</td>
- <td class="paramname"><em>c</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iBitNo</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Check a bit in a one byte field and see if it is set. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>One byte char field to examine. </td></tr>
- <tr><td class="paramname">iBitNo</td><td>which bit to examine. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue Bit is set<br />
- xbFalse Bit is not set </dd></dl>
-
-</div>
-</div>
-<a id="a97dfa59ab9a8e9f17454da0faceb023d" name="a97dfa59ab9a8e9f17454da0faceb023d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a97dfa59ab9a8e9f17454da0faceb023d">&#9670;&nbsp;</a></span>DisplayError()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::DisplayError </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iErrorCode</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Display error message on console for a given error number. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iErrorCode</td><td>Error number to reference </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a5eebffb9e8cc64141e35c2622045cb50" name="a5eebffb9e8cc64141e35c2622045cb50"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5eebffb9e8cc64141e35c2622045cb50">&#9670;&nbsp;</a></span>DisplayTableList()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbTblMgr::DisplayTableList </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a1d803a4bfc8ba0561267a0bf9e51f7d9" name="a1d803a4bfc8ba0561267a0bf9e51f7d9"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1d803a4bfc8ba0561267a0bf9e51f7d9">&#9670;&nbsp;</a></span>GetDataDirectory()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetDataDirectory </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the current data directory. </p>
-<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing the current data directory where the database files are stored. </dd></dl>
-
-</div>
-</div>
-<a id="ad8a5d28a2ee6720a9aa74bcb45662cf5" name="ad8a5d28a2ee6720a9aa74bcb45662cf5"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ad8a5d28a2ee6720a9aa74bcb45662cf5">&#9670;&nbsp;</a></span>GetDbfPtr() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> * xb::xbTblMgr::GetDbfPtr </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sTblAlias</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a801dfecf7fc216954b4197b2c31b25d6" name="a801dfecf7fc216954b4197b2c31b25d6"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a801dfecf7fc216954b4197b2c31b25d6">&#9670;&nbsp;</a></span>GetDbfPtr() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> * xb::xbTblMgr::GetDbfPtr </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>sItemNo</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a6982f973e81587b04916f4509746aaf5" name="a6982f973e81587b04916f4509746aaf5"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6982f973e81587b04916f4509746aaf5">&#9670;&nbsp;</a></span>GetDefaultAutoCommit()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbSsv::GetDefaultAutoCommit </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the default auto commit setting. </p>
-<p >When auto commit is enabled, the library will automatically post any updates when moving off an updated record or closing files. If auto commit is disabled, the application program will need to explicitly update the tables using using dbf-&gt;Put() and dbf-&gt;AppendRecord().</p>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue if auto commit is turned on<br />
- xbFalse is auto commit is turned off </dd></dl>
-
-</div>
-</div>
-<a id="a6fbb9c3a550ab0b3378f9586a57791d2" name="a6fbb9c3a550ab0b3378f9586a57791d2"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6fbb9c3a550ab0b3378f9586a57791d2">&#9670;&nbsp;</a></span>GetDefaultDateFormat()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetDefaultDateFormat </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the default date format. </p>
-<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing the default date format. </dd></dl>
-
-</div>
-</div>
-<a id="a49cd162f066eef2b829ba7c9f6620243" name="a49cd162f066eef2b829ba7c9f6620243"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a49cd162f066eef2b829ba7c9f6620243">&#9670;&nbsp;</a></span>GetEndianType()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbSsv::GetEndianType </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the Endian type. </p>
-<dl class="section return"><dt>Returns</dt><dd>B - Big endian<br />
- L - Little endian<br />
- </dd></dl>
-
-</div>
-</div>
-<a id="a56961d2a67b8e7470098626ac4dac7e4" name="a56961d2a67b8e7470098626ac4dac7e4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a56961d2a67b8e7470098626ac4dac7e4">&#9670;&nbsp;</a></span>GetErrorMessage()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">const char * xb::xbSsv::GetErrorMessage </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iErrorCode</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get an error message. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iErrorCode</td><td>ErrorCode is the error number of description to be returned. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Returns a pointer to a string containing a text description for the error code. </dd></dl>
-
-</div>
-</div>
-<a id="abc9c06c95d71fbad8294e1ae8862cea9" name="abc9c06c95d71fbad8294e1ae8862cea9"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#abc9c06c95d71fbad8294e1ae8862cea9">&#9670;&nbsp;</a></span>GetHomeDir()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::GetHomeDir </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sHomeDirOut</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get home directory. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sHomeDirOut</td><td>- Output home directory for current user. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
-
-</div>
-</div>
-<a id="a4822315bded3969b59aeeb683c373051" name="a4822315bded3969b59aeeb683c373051"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4822315bded3969b59aeeb683c373051">&#9670;&nbsp;</a></span>GetLogDirectory()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetLogDirectory </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="afaef09435be73b3111f5edbd7091d861" name="afaef09435be73b3111f5edbd7091d861"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#afaef09435be73b3111f5edbd7091d861">&#9670;&nbsp;</a></span>GetLogFileName()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetLogFileName </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="abd58031c5f1c3766c24d47a82e6fd9c5" name="abd58031c5f1c3766c24d47a82e6fd9c5"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#abd58031c5f1c3766c24d47a82e6fd9c5">&#9670;&nbsp;</a></span>GetMultiUser()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbSsv::GetMultiUser </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the multi user setting. </p>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue - Multi user mode turned on.<br />
- xbFalse - Multi user mode turned off.<br />
- </dd></dl>
-
-</div>
-</div>
-<a id="ad0d2d4adabc0dc0e761cfdee63c84069" name="ad0d2d4adabc0dc0e761cfdee63c84069"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ad0d2d4adabc0dc0e761cfdee63c84069">&#9670;&nbsp;</a></span>GetOpenTableCount()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbTblMgr::GetOpenTableCount </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="acbf148ddba4297021cfb980a161ebef9" name="acbf148ddba4297021cfb980a161ebef9"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#acbf148ddba4297021cfb980a161ebef9">&#9670;&nbsp;</a></span>GetTblListEntry()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="structxb_1_1xbTblList.html">xbTblList</a> * xb::xbTblMgr::GetTblListEntry </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td>
- <td class="paramname"><em>d</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ac8eaef41acf08911b90f900aac8e70af" name="ac8eaef41acf08911b90f900aac8e70af"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac8eaef41acf08911b90f900aac8e70af">&#9670;&nbsp;</a></span>RemoveTblFromTblList() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbTblMgr::RemoveTblFromTblList </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sTblAlias</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a3d82b6e73d5c0bc8cac22b9a260389c1" name="a3d82b6e73d5c0bc8cac22b9a260389c1"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a3d82b6e73d5c0bc8cac22b9a260389c1">&#9670;&nbsp;</a></span>RemoveTblFromTblList() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbTblMgr::RemoveTblFromTblList </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td>
- <td class="paramname"><em>d</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a57caaaadfbd089d9a58ecfcb50c88a6c" name="a57caaaadfbd089d9a58ecfcb50c88a6c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a57caaaadfbd089d9a58ecfcb50c88a6c">&#9670;&nbsp;</a></span>SetDataDirectory()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::SetDataDirectory </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sDataDirectory</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Set the data directory. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sDataDirectory</td><td>Set the data direcroty. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a25542afadaaf39b4fb5a1772a29cc0bd" name="a25542afadaaf39b4fb5a1772a29cc0bd"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a25542afadaaf39b4fb5a1772a29cc0bd">&#9670;&nbsp;</a></span>SetDefaultAutoCommit()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::SetDefaultAutoCommit </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td>
- <td class="paramname"><em>bDefaultAutoCommit</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Set the default auto commit. </p>
-<p >Disabling auto commit requires the application execute explicit updates using dbf-&gt;Put() and dbf-&gt;AppendRecord(). With auto commit on, the library posts updates automatically when moving off the current record or closing a file.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">bDefaultAutoCommit</td><td>xbTrue - Enable default auto commit.<br />
- xbFalse - Disable default auto commit.<br />
- </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a5f74db23f8902846d581935c7db73f9c" name="a5f74db23f8902846d581935c7db73f9c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5f74db23f8902846d581935c7db73f9c">&#9670;&nbsp;</a></span>SetDefaultDateFormat()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::SetDefaultDateFormat </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sDefaultDateFormat</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Set the default date format. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sDefaultDateFormat</td><td>Set the default date format. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a904ec348fd029d4a76e72b8fde636108" name="a904ec348fd029d4a76e72b8fde636108"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a904ec348fd029d4a76e72b8fde636108">&#9670;&nbsp;</a></span>SetEndianType()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::SetEndianType </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Set the endian type. </p>
-<p >This routine determines the Endian-ness at run time instead of compile time as some processers (ie; Sparc,ARM) can be switched either way. This routine is called automatically by the library at startup and does not need to be called in an application program. </p>
-
-</div>
-</div>
-<a id="a7b992ed97281bf25b5b66f5df686225e" name="a7b992ed97281bf25b5b66f5df686225e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a7b992ed97281bf25b5b66f5df686225e">&#9670;&nbsp;</a></span>SetLogDirectory()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::SetLogDirectory </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sLogDirectory</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="aba6e59512f7172dd55dcf92059e5928c" name="aba6e59512f7172dd55dcf92059e5928c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aba6e59512f7172dd55dcf92059e5928c">&#9670;&nbsp;</a></span>SetMultiUser()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::SetMultiUser </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td>
- <td class="paramname"><em>bMultiUser</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the multi user setting. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">bMultiUser</td><td>xbTrue - Turn on Multi user mode.<br />
- xbFalse - Turn off Multi user mode.<br />
- </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<h2 class="groupheader">Field Documentation</h2>
-<a id="a6219f1b5e24ea12fe158cd5aea56988e" name="a6219f1b5e24ea12fe158cd5aea56988e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6219f1b5e24ea12fe158cd5aea56988e">&#9670;&nbsp;</a></span>ErrorCodeText</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">const char* xb::xbSsv::ErrorCodeText[]</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a5849e813f5e8e1cd180f0366637adbf3" name="a5849e813f5e8e1cd180f0366637adbf3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5849e813f5e8e1cd180f0366637adbf3">&#9670;&nbsp;</a></span>iEndianType</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbSsv::iEndianType = 0</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">protected</span><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a9dec3164c3b264882df634915ecf21da" name="a9dec3164c3b264882df634915ecf21da"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a9dec3164c3b264882df634915ecf21da">&#9670;&nbsp;</a></span>sNullString</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> xb::xbSsv::sNullString = &quot;&quot;</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">protected</span><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following files:<ul>
-<li>/mnt/1Tdata/xbase/xbase64-4.1.0/src/include/<a class="el" href="xbtblmgr_8h_source.html">xbtblmgr.h</a></li>
-<li>/mnt/1Tdata/xbase/xbase64-4.1.0/src/core/<a class="el" href="xbtblmgr_8cpp.html">xbtblmgr.cpp</a></li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/classxb_1_1xbXBase.html b/docs/doxygen/html/classxb_1_1xbXBase.html
deleted file mode 100644
index 5d4767f..0000000
--- a/docs/doxygen/html/classxb_1_1xbXBase.html
+++ /dev/null
@@ -1,1842 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: xb::xbXBase Class Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="namespacexb.html">xb</a></li><li class="navelem"><a class="el" href="classxb_1_1xbXBase.html">xbXBase</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> &#124;
-<a href="#pub-static-attribs">Static Public Attributes</a> &#124;
-<a href="#pro-methods">Protected Member Functions</a> &#124;
-<a href="#pro-static-methods">Static Protected Member Functions</a> &#124;
-<a href="#pro-static-attribs">Static Protected Attributes</a> &#124;
-<a href="#friends">Friends</a> </div>
- <div class="headertitle"><div class="title">xb::xbXBase Class Reference</div></div>
-</div><!--header-->
-<div class="contents">
-
-<p>xbXbase class.
- <a href="classxb_1_1xbXBase.html#details">More...</a></p>
-
-<p><code>#include &lt;<a class="el" href="xbxbase_8h_source.html">xbxbase.h</a>&gt;</code></p>
-<div class="dynheader">
-Inheritance diagram for xb::xbXBase:</div>
-<div class="dyncontent">
- <div class="center">
- <img src="classxb_1_1xbXBase.png" usemap="#xb::xbXBase_map" alt=""/>
- <map id="xb::xbXBase_map" name="xb::xbXBase_map">
-<area href="classxb_1_1xbTblMgr.html" alt="xb::xbTblMgr" shape="rect" coords="0,56,84,80"/>
-<area href="classxb_1_1xbSsv.html" title="Class for handling shared system variables." alt="xb::xbSsv" shape="rect" coords="0,0,84,24"/>
- </map>
-</div></div>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:a6c68588e33946fb5416af3f86fe83224"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#a6c68588e33946fb5416af3f86fe83224">xbXBase</a> ()</td></tr>
-<tr class="memdesc:a6c68588e33946fb5416af3f86fe83224"><td class="mdescLeft">&#160;</td><td class="mdescRight">Class Constructor. <a href="classxb_1_1xbXBase.html#a6c68588e33946fb5416af3f86fe83224">More...</a><br /></td></tr>
-<tr class="separator:a6c68588e33946fb5416af3f86fe83224"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a204f8634894ac2066d3209117803306d"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#a204f8634894ac2066d3209117803306d">~xbXBase</a> ()</td></tr>
-<tr class="memdesc:a204f8634894ac2066d3209117803306d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Class Deconstructor. <a href="classxb_1_1xbXBase.html#a204f8634894ac2066d3209117803306d">More...</a><br /></td></tr>
-<tr class="separator:a204f8634894ac2066d3209117803306d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:afccb552ca0daff779c0500ff20d22c2b"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#afccb552ca0daff779c0500ff20d22c2b">CloseAllTables</a> ()</td></tr>
-<tr class="memdesc:afccb552ca0daff779c0500ff20d22c2b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Close all tables / files. <a href="classxb_1_1xbXBase.html#afccb552ca0daff779c0500ff20d22c2b">More...</a><br /></td></tr>
-<tr class="separator:afccb552ca0daff779c0500ff20d22c2b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae357fac4fdebdf49e46563cf611caf65"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#ae357fac4fdebdf49e46563cf611caf65">DisableMsgLogging</a> ()</td></tr>
-<tr class="separator:ae357fac4fdebdf49e46563cf611caf65"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a470e6eb0ed0be60338f9b40976d3ad48"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#a470e6eb0ed0be60338f9b40976d3ad48">EnableMsgLogging</a> ()</td></tr>
-<tr class="separator:a470e6eb0ed0be60338f9b40976d3ad48"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5a5ecaed9777978344902446c9ae3b8e"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#a5a5ecaed9777978344902446c9ae3b8e">FlushLog</a> ()</td></tr>
-<tr class="separator:a5a5ecaed9777978344902446c9ae3b8e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a51d49b4d699740194b28c6ec0d0ee07b"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#a51d49b4d699740194b28c6ec0d0ee07b">GetLogDirectory</a> () const</td></tr>
-<tr class="separator:a51d49b4d699740194b28c6ec0d0ee07b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac0744edf9e4aa959d8cf2daa874376af"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#ac0744edf9e4aa959d8cf2daa874376af">GetLogFileName</a> () const</td></tr>
-<tr class="separator:ac0744edf9e4aa959d8cf2daa874376af"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab5d63cd7d9137eba8a1d4d9c3df522b7"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#ab5d63cd7d9137eba8a1d4d9c3df522b7">GetLogFqFileName</a> () const</td></tr>
-<tr class="separator:ab5d63cd7d9137eba8a1d4d9c3df522b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ade34cd72c2a7e70fb55429a8a6f6c028"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#ade34cd72c2a7e70fb55429a8a6f6c028">GetLogStatus</a> () const</td></tr>
-<tr class="separator:ade34cd72c2a7e70fb55429a8a6f6c028"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa957eb502ecd076e5df89e7415cb094b"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#aa957eb502ecd076e5df89e7415cb094b">OpenHighestVersion</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sAlias, <a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> &amp;dbf, int dummy)</td></tr>
-<tr class="separator:aa957eb502ecd076e5df89e7415cb094b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:afa7bbac08a4601f49cd53b457196ee0e"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#afa7bbac08a4601f49cd53b457196ee0e">OpenHighestVersion</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sAlias, <a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> **dbf)</td></tr>
-<tr class="separator:afa7bbac08a4601f49cd53b457196ee0e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aafb1abd6b6124cddf635adaf9f615a4a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#aafb1abd6b6124cddf635adaf9f615a4a">Open</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, xbInt16 &amp;iRc)</td></tr>
-<tr class="memdesc:aafb1abd6b6124cddf635adaf9f615a4a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Open highest qualified class available for dbf file. <a href="classxb_1_1xbXBase.html#aafb1abd6b6124cddf635adaf9f615a4a">More...</a><br /></td></tr>
-<tr class="separator:aafb1abd6b6124cddf635adaf9f615a4a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab35cec5ac8f0fa95f10653ca7ac817f6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#ab35cec5ac8f0fa95f10653ca7ac817f6">Open</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sAlias, xbInt16 iOpenMode, xbInt16 iShareMode, xbInt16 iVersion, xbInt16 &amp;iRc)</td></tr>
-<tr class="memdesc:ab35cec5ac8f0fa95f10653ca7ac817f6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Open highest qualified class available for dbf file. <a href="classxb_1_1xbXBase.html#ab35cec5ac8f0fa95f10653ca7ac817f6">More...</a><br /></td></tr>
-<tr class="separator:ab35cec5ac8f0fa95f10653ca7ac817f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a48d82dbe298c6f4cf68a63ac82dd8292"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#a48d82dbe298c6f4cf68a63ac82dd8292">SetLogDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLogFileDirectory)</td></tr>
-<tr class="separator:a48d82dbe298c6f4cf68a63ac82dd8292"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a94010b88a309315ef980715eb581336c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#a94010b88a309315ef980715eb581336c">SetLogFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLogFileName)</td></tr>
-<tr class="separator:a94010b88a309315ef980715eb581336c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a666a0cb5b76ec7a9a3677d339e0c6b42"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#a666a0cb5b76ec7a9a3677d339e0c6b42">SetLogSize</a> (size_t lSize)</td></tr>
-<tr class="separator:a666a0cb5b76ec7a9a3677d339e0c6b42"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9ca5be73abffd0fdd18bdc799877272a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#a9ca5be73abffd0fdd18bdc799877272a">WriteLogMessage</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLogMessage, xbInt16 iOutputOpt=0)</td></tr>
-<tr class="separator:a9ca5be73abffd0fdd18bdc799877272a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0dff00b9ee3c288841e137ca01168116"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#a0dff00b9ee3c288841e137ca01168116">WriteLogBytes</a> (xbUInt32 lCnt, const char *p)</td></tr>
-<tr class="separator:a0dff00b9ee3c288841e137ca01168116"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0915aff7be4b2dd3e881f3c5d0da4baf"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#a0915aff7be4b2dd3e881f3c5d0da4baf">xbSleep</a> (xbInt32 lMillisecs)</td></tr>
-<tr class="memdesc:a0915aff7be4b2dd3e881f3c5d0da4baf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Cross platform sleep function. <a href="classxb_1_1xbXBase.html#a0915aff7be4b2dd3e881f3c5d0da4baf">More...</a><br /></td></tr>
-<tr class="separator:a0915aff7be4b2dd3e881f3c5d0da4baf"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aadecb3ac460d8e94b88b2e809e22f48e"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#aadecb3ac460d8e94b88b2e809e22f48e">GetCmdLineOpt</a> (xbInt32 lArgc, char **argv, const char *sOptRqst, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sParmOut)</td></tr>
-<tr class="memdesc:aadecb3ac460d8e94b88b2e809e22f48e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Parse commmand line options for a given parm request. <a href="classxb_1_1xbXBase.html#aadecb3ac460d8e94b88b2e809e22f48e">More...</a><br /></td></tr>
-<tr class="separator:aadecb3ac460d8e94b88b2e809e22f48e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a8612e0c5334349fbceb9394b47817fd5"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#a8612e0c5334349fbceb9394b47817fd5">GetCmdLineOpt</a> (xbInt32 lArgc, char **argv, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sOptRqst, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sParmOut)</td></tr>
-<tr class="memdesc:a8612e0c5334349fbceb9394b47817fd5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Parse commmand line options for a given parm request. <a href="classxb_1_1xbXBase.html#a8612e0c5334349fbceb9394b47817fd5">More...</a><br /></td></tr>
-<tr class="separator:a8612e0c5334349fbceb9394b47817fd5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af16832ff2bfaee09265652e0fc03709a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#af16832ff2bfaee09265652e0fc03709a">AddTblToTblList</a> (<a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *d, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFqTblName)</td></tr>
-<tr class="separator:af16832ff2bfaee09265652e0fc03709a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2033188e9b08778188a034a6fc90ca85"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#a2033188e9b08778188a034a6fc90ca85">AddTblToTblList</a> (<a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *d, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFqTblName, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTblAlias)</td></tr>
-<tr class="separator:a2033188e9b08778188a034a6fc90ca85"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5eebffb9e8cc64141e35c2622045cb50"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#a5eebffb9e8cc64141e35c2622045cb50">DisplayTableList</a> () const</td></tr>
-<tr class="separator:a5eebffb9e8cc64141e35c2622045cb50"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad8a5d28a2ee6720a9aa74bcb45662cf5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#ad8a5d28a2ee6720a9aa74bcb45662cf5">GetDbfPtr</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTblAlias) const</td></tr>
-<tr class="separator:ad8a5d28a2ee6720a9aa74bcb45662cf5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a801dfecf7fc216954b4197b2c31b25d6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#a801dfecf7fc216954b4197b2c31b25d6">GetDbfPtr</a> (xbInt16 sItemNo) const</td></tr>
-<tr class="separator:a801dfecf7fc216954b4197b2c31b25d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:acbf148ddba4297021cfb980a161ebef9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structxb_1_1xbTblList.html">xbTblList</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#acbf148ddba4297021cfb980a161ebef9">GetTblListEntry</a> (<a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *d)</td></tr>
-<tr class="separator:acbf148ddba4297021cfb980a161ebef9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad0d2d4adabc0dc0e761cfdee63c84069"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#ad0d2d4adabc0dc0e761cfdee63c84069">GetOpenTableCount</a> () const</td></tr>
-<tr class="separator:ad0d2d4adabc0dc0e761cfdee63c84069"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac8eaef41acf08911b90f900aac8e70af"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#ac8eaef41acf08911b90f900aac8e70af">RemoveTblFromTblList</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTblAlias)</td></tr>
-<tr class="separator:ac8eaef41acf08911b90f900aac8e70af"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3d82b6e73d5c0bc8cac22b9a260389c1"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html#a3d82b6e73d5c0bc8cac22b9a260389c1">RemoveTblFromTblList</a> (<a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *d)</td></tr>
-<tr class="separator:a3d82b6e73d5c0bc8cac22b9a260389c1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a97dfa59ab9a8e9f17454da0faceb023d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a97dfa59ab9a8e9f17454da0faceb023d">DisplayError</a> (xbInt16 ErrorCode) const</td></tr>
-<tr class="memdesc:a97dfa59ab9a8e9f17454da0faceb023d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Display error message on console for a given error number. <a href="classxb_1_1xbSsv.html#a97dfa59ab9a8e9f17454da0faceb023d">More...</a><br /></td></tr>
-<tr class="separator:a97dfa59ab9a8e9f17454da0faceb023d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6fbb9c3a550ab0b3378f9586a57791d2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a6fbb9c3a550ab0b3378f9586a57791d2">GetDefaultDateFormat</a> () const</td></tr>
-<tr class="memdesc:a6fbb9c3a550ab0b3378f9586a57791d2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the default date format. <a href="classxb_1_1xbSsv.html#a6fbb9c3a550ab0b3378f9586a57791d2">More...</a><br /></td></tr>
-<tr class="separator:a6fbb9c3a550ab0b3378f9586a57791d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">GetDataDirectory</a> () const</td></tr>
-<tr class="memdesc:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current data directory. <a href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">More...</a><br /></td></tr>
-<tr class="separator:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a49cd162f066eef2b829ba7c9f6620243"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">GetEndianType</a> () const</td></tr>
-<tr class="memdesc:a49cd162f066eef2b829ba7c9f6620243"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the Endian type. <a href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">More...</a><br /></td></tr>
-<tr class="separator:a49cd162f066eef2b829ba7c9f6620243"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a56961d2a67b8e7470098626ac4dac7e4"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">GetErrorMessage</a> (xbInt16 ErrorCode) const</td></tr>
-<tr class="memdesc:a56961d2a67b8e7470098626ac4dac7e4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get an error message. <a href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">More...</a><br /></td></tr>
-<tr class="separator:a56961d2a67b8e7470098626ac4dac7e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">SetDataDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDataDirectory)</td></tr>
-<tr class="memdesc:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the data directory. <a href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">More...</a><br /></td></tr>
-<tr class="separator:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5f74db23f8902846d581935c7db73f9c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">SetDefaultDateFormat</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDefaultDateFormat)</td></tr>
-<tr class="memdesc:a5f74db23f8902846d581935c7db73f9c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the default date format. <a href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">More...</a><br /></td></tr>
-<tr class="separator:a5f74db23f8902846d581935c7db73f9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a62e4fd0a5888665c76bbbad962794e72"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72">BitSet</a> (unsigned char c, xbInt16 iBitNo) const</td></tr>
-<tr class="memdesc:a62e4fd0a5888665c76bbbad962794e72"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check a bit in a one byte field and see if it is set. <a href="classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72">More...</a><br /></td></tr>
-<tr class="separator:a62e4fd0a5888665c76bbbad962794e72"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a8551b15a3ce4fa2a40d698db01f4a9ae"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a8551b15a3ce4fa2a40d698db01f4a9ae">BitDump</a> (unsigned char c) const</td></tr>
-<tr class="separator:a8551b15a3ce4fa2a40d698db01f4a9ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aba1395b8e4c7f28c3614061de6e49190"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#aba1395b8e4c7f28c3614061de6e49190">BitDump</a> (char c) const</td></tr>
-<tr class="separator:aba1395b8e4c7f28c3614061de6e49190"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6982f973e81587b04916f4509746aaf5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a6982f973e81587b04916f4509746aaf5">GetDefaultAutoCommit</a> () const</td></tr>
-<tr class="memdesc:a6982f973e81587b04916f4509746aaf5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the default auto commit setting. <a href="classxb_1_1xbSsv.html#a6982f973e81587b04916f4509746aaf5">More...</a><br /></td></tr>
-<tr class="separator:a6982f973e81587b04916f4509746aaf5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">SetDefaultAutoCommit</a> (<a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bDefaultAutoCommit)</td></tr>
-<tr class="memdesc:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the default auto commit. <a href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">More...</a><br /></td></tr>
-<tr class="separator:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">GetHomeDir</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sHomeDirOut)</td></tr>
-<tr class="memdesc:abc9c06c95d71fbad8294e1ae8862cea9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get home directory. <a href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">More...</a><br /></td></tr>
-<tr class="separator:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">GetMultiUser</a> () const</td></tr>
-<tr class="memdesc:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the multi user setting. <a href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">More...</a><br /></td></tr>
-<tr class="separator:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aba6e59512f7172dd55dcf92059e5928c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#aba6e59512f7172dd55dcf92059e5928c">SetMultiUser</a> (<a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bMultiUser)</td></tr>
-<tr class="memdesc:aba6e59512f7172dd55dcf92059e5928c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the multi user setting. <a href="classxb_1_1xbSsv.html#aba6e59512f7172dd55dcf92059e5928c">More...</a><br /></td></tr>
-<tr class="separator:aba6e59512f7172dd55dcf92059e5928c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-static-attribs" name="pub-static-attribs"></a>
-Static Public Attributes</h2></td></tr>
-<tr class="memitem:a6219f1b5e24ea12fe158cd5aea56988e"><td class="memItemLeft" align="right" valign="top">static const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a6219f1b5e24ea12fe158cd5aea56988e">ErrorCodeText</a> []</td></tr>
-<tr class="separator:a6219f1b5e24ea12fe158cd5aea56988e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-methods" name="pro-methods"></a>
-Protected Member Functions</h2></td></tr>
-<tr class="memitem:ae52e53340593b4253936c1372ec15ee1"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#ae52e53340593b4253936c1372ec15ee1">GetFunctionInfo</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sExpLine, char &amp;cReturnType, xbInt16 &amp;iReturnLenCalc, xbInt32 &amp;lReturnLenVal) const</td></tr>
-<tr class="separator:ae52e53340593b4253936c1372ec15ee1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a904ec348fd029d4a76e72b8fde636108"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a904ec348fd029d4a76e72b8fde636108">SetEndianType</a> ()</td></tr>
-<tr class="memdesc:a904ec348fd029d4a76e72b8fde636108"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the endian type. <a href="classxb_1_1xbSsv.html#a904ec348fd029d4a76e72b8fde636108">More...</a><br /></td></tr>
-<tr class="separator:a904ec348fd029d4a76e72b8fde636108"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-static-methods" name="pro-static-methods"></a>
-Static Protected Member Functions</h2></td></tr>
-<tr class="memitem:a1b239c021358476382942522911b5c66"><td class="memItemLeft" align="right" valign="top">static xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#a1b239c021358476382942522911b5c66">xbMemcmp</a> (const unsigned char *s1, const unsigned char *s2, size_t n)</td></tr>
-<tr class="memdesc:a1b239c021358476382942522911b5c66"><td class="mdescLeft">&#160;</td><td class="mdescRight">Cross memcmp function. <a href="classxb_1_1xbXBase.html#a1b239c021358476382942522911b5c66">More...</a><br /></td></tr>
-<tr class="separator:a1b239c021358476382942522911b5c66"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-static-attribs" name="pro-static-attribs"></a>
-Static Protected Attributes</h2></td></tr>
-<tr class="memitem:a5849e813f5e8e1cd180f0366637adbf3"><td class="memItemLeft" align="right" valign="top">static xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a5849e813f5e8e1cd180f0366637adbf3">iEndianType</a> = 0</td></tr>
-<tr class="separator:a5849e813f5e8e1cd180f0366637adbf3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9dec3164c3b264882df634915ecf21da"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classxb_1_1xbString.html">xbString</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a9dec3164c3b264882df634915ecf21da">sNullString</a> = &quot;&quot;</td></tr>
-<tr class="separator:a9dec3164c3b264882df634915ecf21da"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="friends" name="friends"></a>
-Friends</h2></td></tr>
-<tr class="memitem:a86a53ce3efbf910996df0f853f1c0add"><td class="memItemLeft" align="right" valign="top">class&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#a86a53ce3efbf910996df0f853f1c0add">xbBcd</a></td></tr>
-<tr class="separator:a86a53ce3efbf910996df0f853f1c0add"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3c3e5617be811d732472fe2cc8fb18cc"><td class="memItemLeft" align="right" valign="top">class&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#a3c3e5617be811d732472fe2cc8fb18cc">xbExp</a></td></tr>
-<tr class="separator:a3c3e5617be811d732472fe2cc8fb18cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p >xbXbase class. </p>
-<p >The <a class="el" href="classxb_1_1xbXBase.html" title="xbXbase class.">xbXBase</a> class is the core class that needs to be in every application program. </p>
-</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
-<a id="a6c68588e33946fb5416af3f86fe83224" name="a6c68588e33946fb5416af3f86fe83224"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6c68588e33946fb5416af3f86fe83224">&#9670;&nbsp;</a></span>xbXBase()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xb::xbXBase::xbXBase </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Class Constructor. </p>
-
-</div>
-</div>
-<a id="a204f8634894ac2066d3209117803306d" name="a204f8634894ac2066d3209117803306d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a204f8634894ac2066d3209117803306d">&#9670;&nbsp;</a></span>~xbXBase()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xb::xbXBase::~xbXBase </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Class Deconstructor. </p>
-
-</div>
-</div>
-<h2 class="groupheader">Member Function Documentation</h2>
-<a id="af16832ff2bfaee09265652e0fc03709a" name="af16832ff2bfaee09265652e0fc03709a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af16832ff2bfaee09265652e0fc03709a">&#9670;&nbsp;</a></span>AddTblToTblList() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbTblMgr::AddTblToTblList </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td>
- <td class="paramname"><em>d</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFqTblName</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a2033188e9b08778188a034a6fc90ca85" name="a2033188e9b08778188a034a6fc90ca85"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a2033188e9b08778188a034a6fc90ca85">&#9670;&nbsp;</a></span>AddTblToTblList() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbTblMgr::AddTblToTblList </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td>
- <td class="paramname"><em>d</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFqTblName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sTblAlias</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="aba1395b8e4c7f28c3614061de6e49190" name="aba1395b8e4c7f28c3614061de6e49190"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aba1395b8e4c7f28c3614061de6e49190">&#9670;&nbsp;</a></span>BitDump() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::BitDump </td>
- <td>(</td>
- <td class="paramtype">char&#160;</td>
- <td class="paramname"><em>c</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a8551b15a3ce4fa2a40d698db01f4a9ae" name="a8551b15a3ce4fa2a40d698db01f4a9ae"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a8551b15a3ce4fa2a40d698db01f4a9ae">&#9670;&nbsp;</a></span>BitDump() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::BitDump </td>
- <td>(</td>
- <td class="paramtype">unsigned char&#160;</td>
- <td class="paramname"><em>c</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a62e4fd0a5888665c76bbbad962794e72" name="a62e4fd0a5888665c76bbbad962794e72"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a62e4fd0a5888665c76bbbad962794e72">&#9670;&nbsp;</a></span>BitSet()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbSsv::BitSet </td>
- <td>(</td>
- <td class="paramtype">unsigned char&#160;</td>
- <td class="paramname"><em>c</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iBitNo</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Check a bit in a one byte field and see if it is set. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td>One byte char field to examine. </td></tr>
- <tr><td class="paramname">iBitNo</td><td>which bit to examine. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue Bit is set<br />
- xbFalse Bit is not set </dd></dl>
-
-</div>
-</div>
-<a id="afccb552ca0daff779c0500ff20d22c2b" name="afccb552ca0daff779c0500ff20d22c2b"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#afccb552ca0daff779c0500ff20d22c2b">&#9670;&nbsp;</a></span>CloseAllTables()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbXBase::CloseAllTables </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Close all tables / files. </p>
-<p >This closes everything. </p><dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="ae357fac4fdebdf49e46563cf611caf65" name="ae357fac4fdebdf49e46563cf611caf65"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae357fac4fdebdf49e46563cf611caf65">&#9670;&nbsp;</a></span>DisableMsgLogging()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbXBase::DisableMsgLogging </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a97dfa59ab9a8e9f17454da0faceb023d" name="a97dfa59ab9a8e9f17454da0faceb023d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a97dfa59ab9a8e9f17454da0faceb023d">&#9670;&nbsp;</a></span>DisplayError()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::DisplayError </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iErrorCode</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Display error message on console for a given error number. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iErrorCode</td><td>Error number to reference </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a5eebffb9e8cc64141e35c2622045cb50" name="a5eebffb9e8cc64141e35c2622045cb50"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5eebffb9e8cc64141e35c2622045cb50">&#9670;&nbsp;</a></span>DisplayTableList()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbTblMgr::DisplayTableList </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a470e6eb0ed0be60338f9b40976d3ad48" name="a470e6eb0ed0be60338f9b40976d3ad48"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a470e6eb0ed0be60338f9b40976d3ad48">&#9670;&nbsp;</a></span>EnableMsgLogging()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbXBase::EnableMsgLogging </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a5a5ecaed9777978344902446c9ae3b8e" name="a5a5ecaed9777978344902446c9ae3b8e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5a5ecaed9777978344902446c9ae3b8e">&#9670;&nbsp;</a></span>FlushLog()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbXBase::FlushLog </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="aadecb3ac460d8e94b88b2e809e22f48e" name="aadecb3ac460d8e94b88b2e809e22f48e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aadecb3ac460d8e94b88b2e809e22f48e">&#9670;&nbsp;</a></span>GetCmdLineOpt() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbXBase::GetCmdLineOpt </td>
- <td>(</td>
- <td class="paramtype">xbInt32&#160;</td>
- <td class="paramname"><em>lArgc</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char **&#160;</td>
- <td class="paramname"><em>sArgv</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>sOptRqst</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sParmOut</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Parse commmand line options for a given parm request. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">lArgc</td><td>Value passed from main( argc, argv[] ) </td></tr>
- <tr><td class="paramname">sArgv</td><td>Valued passed from main </td></tr>
- <tr><td class="paramname">sOptRqst</td><td>Option to search for in the arguments list </td></tr>
- <tr><td class="paramname">sParmOut</td><td>String token immediately to the right of the the option request, if found </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>0 - paramater request not found<br />
- 1 - Parameter found </dd></dl>
-
-</div>
-</div>
-<a id="a8612e0c5334349fbceb9394b47817fd5" name="a8612e0c5334349fbceb9394b47817fd5"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a8612e0c5334349fbceb9394b47817fd5">&#9670;&nbsp;</a></span>GetCmdLineOpt() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbXBase::GetCmdLineOpt </td>
- <td>(</td>
- <td class="paramtype">xbInt32&#160;</td>
- <td class="paramname"><em>lArgc</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char **&#160;</td>
- <td class="paramname"><em>sArgv</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sOptRqst</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sParmOut</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Parse commmand line options for a given parm request. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">lArgc</td><td>Value passed from main( argc, argv[] ) </td></tr>
- <tr><td class="paramname">sArgv</td><td>Valued passed from main </td></tr>
- <tr><td class="paramname">sOptRqst</td><td>Option to search for in the arguments list </td></tr>
- <tr><td class="paramname">sParmOut</td><td>String token immediately to the right of the the option request, if found </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>0 - paramater request not found<br />
- 1 - Parameter found </dd></dl>
-
-</div>
-</div>
-<a id="a1d803a4bfc8ba0561267a0bf9e51f7d9" name="a1d803a4bfc8ba0561267a0bf9e51f7d9"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1d803a4bfc8ba0561267a0bf9e51f7d9">&#9670;&nbsp;</a></span>GetDataDirectory()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetDataDirectory </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the current data directory. </p>
-<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing the current data directory where the database files are stored. </dd></dl>
-
-</div>
-</div>
-<a id="ad8a5d28a2ee6720a9aa74bcb45662cf5" name="ad8a5d28a2ee6720a9aa74bcb45662cf5"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ad8a5d28a2ee6720a9aa74bcb45662cf5">&#9670;&nbsp;</a></span>GetDbfPtr() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> * xb::xbTblMgr::GetDbfPtr </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sTblAlias</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a801dfecf7fc216954b4197b2c31b25d6" name="a801dfecf7fc216954b4197b2c31b25d6"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a801dfecf7fc216954b4197b2c31b25d6">&#9670;&nbsp;</a></span>GetDbfPtr() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> * xb::xbTblMgr::GetDbfPtr </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>sItemNo</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a6982f973e81587b04916f4509746aaf5" name="a6982f973e81587b04916f4509746aaf5"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6982f973e81587b04916f4509746aaf5">&#9670;&nbsp;</a></span>GetDefaultAutoCommit()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbSsv::GetDefaultAutoCommit </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the default auto commit setting. </p>
-<p >When auto commit is enabled, the library will automatically post any updates when moving off an updated record or closing files. If auto commit is disabled, the application program will need to explicitly update the tables using using dbf-&gt;Put() and dbf-&gt;AppendRecord().</p>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue if auto commit is turned on<br />
- xbFalse is auto commit is turned off </dd></dl>
-
-</div>
-</div>
-<a id="a6fbb9c3a550ab0b3378f9586a57791d2" name="a6fbb9c3a550ab0b3378f9586a57791d2"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6fbb9c3a550ab0b3378f9586a57791d2">&#9670;&nbsp;</a></span>GetDefaultDateFormat()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetDefaultDateFormat </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the default date format. </p>
-<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing the default date format. </dd></dl>
-
-</div>
-</div>
-<a id="a49cd162f066eef2b829ba7c9f6620243" name="a49cd162f066eef2b829ba7c9f6620243"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a49cd162f066eef2b829ba7c9f6620243">&#9670;&nbsp;</a></span>GetEndianType()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbSsv::GetEndianType </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the Endian type. </p>
-<dl class="section return"><dt>Returns</dt><dd>B - Big endian<br />
- L - Little endian<br />
- </dd></dl>
-
-</div>
-</div>
-<a id="a56961d2a67b8e7470098626ac4dac7e4" name="a56961d2a67b8e7470098626ac4dac7e4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a56961d2a67b8e7470098626ac4dac7e4">&#9670;&nbsp;</a></span>GetErrorMessage()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">const char * xb::xbSsv::GetErrorMessage </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iErrorCode</em></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get an error message. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">iErrorCode</td><td>ErrorCode is the error number of description to be returned. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Returns a pointer to a string containing a text description for the error code. </dd></dl>
-
-</div>
-</div>
-<a id="ae52e53340593b4253936c1372ec15ee1" name="ae52e53340593b4253936c1372ec15ee1"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae52e53340593b4253936c1372ec15ee1">&#9670;&nbsp;</a></span>GetFunctionInfo()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbXBase::GetFunctionInfo </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sExpLine</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char &amp;&#160;</td>
- <td class="paramname"><em>cReturnType</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16 &amp;&#160;</td>
- <td class="paramname"><em>iReturnLenCalc</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt32 &amp;&#160;</td>
- <td class="paramname"><em>lReturnLenVal</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="abc9c06c95d71fbad8294e1ae8862cea9" name="abc9c06c95d71fbad8294e1ae8862cea9"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#abc9c06c95d71fbad8294e1ae8862cea9">&#9670;&nbsp;</a></span>GetHomeDir()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::GetHomeDir </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sHomeDirOut</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get home directory. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sHomeDirOut</td><td>- Output home directory for current user. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
-
-</div>
-</div>
-<a id="a51d49b4d699740194b28c6ec0d0ee07b" name="a51d49b4d699740194b28c6ec0d0ee07b"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a51d49b4d699740194b28c6ec0d0ee07b">&#9670;&nbsp;</a></span>GetLogDirectory()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbXBase::GetLogDirectory </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ac0744edf9e4aa959d8cf2daa874376af" name="ac0744edf9e4aa959d8cf2daa874376af"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac0744edf9e4aa959d8cf2daa874376af">&#9670;&nbsp;</a></span>GetLogFileName()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbXBase::GetLogFileName </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ab5d63cd7d9137eba8a1d4d9c3df522b7" name="ab5d63cd7d9137eba8a1d4d9c3df522b7"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab5d63cd7d9137eba8a1d4d9c3df522b7">&#9670;&nbsp;</a></span>GetLogFqFileName()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbXBase::GetLogFqFileName </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ade34cd72c2a7e70fb55429a8a6f6c028" name="ade34cd72c2a7e70fb55429a8a6f6c028"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ade34cd72c2a7e70fb55429a8a6f6c028">&#9670;&nbsp;</a></span>GetLogStatus()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbXBase::GetLogStatus </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="abd58031c5f1c3766c24d47a82e6fd9c5" name="abd58031c5f1c3766c24d47a82e6fd9c5"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#abd58031c5f1c3766c24d47a82e6fd9c5">&#9670;&nbsp;</a></span>GetMultiUser()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbSsv::GetMultiUser </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the multi user setting. </p>
-<dl class="section return"><dt>Returns</dt><dd>xbTrue - Multi user mode turned on.<br />
- xbFalse - Multi user mode turned off.<br />
- </dd></dl>
-
-</div>
-</div>
-<a id="ad0d2d4adabc0dc0e761cfdee63c84069" name="ad0d2d4adabc0dc0e761cfdee63c84069"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ad0d2d4adabc0dc0e761cfdee63c84069">&#9670;&nbsp;</a></span>GetOpenTableCount()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbTblMgr::GetOpenTableCount </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="acbf148ddba4297021cfb980a161ebef9" name="acbf148ddba4297021cfb980a161ebef9"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#acbf148ddba4297021cfb980a161ebef9">&#9670;&nbsp;</a></span>GetTblListEntry()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="structxb_1_1xbTblList.html">xbTblList</a> * xb::xbTblMgr::GetTblListEntry </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td>
- <td class="paramname"><em>d</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ab35cec5ac8f0fa95f10653ca7ac817f6" name="ab35cec5ac8f0fa95f10653ca7ac817f6"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab35cec5ac8f0fa95f10653ca7ac817f6">&#9670;&nbsp;</a></span>Open() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> * xb::xbXBase::Open </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sTableName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sAlias</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iOpenMode</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iShareMode</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iRequestVersion</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16 &amp;&#160;</td>
- <td class="paramname"><em>iRc</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Open highest qualified class available for dbf file. </p>
-<p >This routine can open various versions of the dbf file dependent on the iVersion field</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sTableName</td><td>- Table name to open. </td></tr>
- <tr><td class="paramname">sAlias</td><td>- Optional alias name. </td></tr>
- <tr><td class="paramname">iOpenMode</td><td>- XB_READ_WRITE or XB_READ </td></tr>
- <tr><td class="paramname">iShareMode</td><td>- XB_SINGLE_USER or XB_MULTI_USER </td></tr>
- <tr><td class="paramname">iRequestVersion</td><td>0 - Highest available 4 - Version four dbf 3 - Version three dbf </td></tr>
- <tr><td class="paramname">iRc</td><td>- Return code from open request </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>param dbf - Output pointer to dbf file opened or null if error </dd></dl>
-
-</div>
-</div>
-<a id="aafb1abd6b6124cddf635adaf9f615a4a" name="aafb1abd6b6124cddf635adaf9f615a4a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aafb1abd6b6124cddf635adaf9f615a4a">&#9670;&nbsp;</a></span>Open() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> * xb::xbXBase::Open </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sTableName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16 &amp;&#160;</td>
- <td class="paramname"><em>iRc</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Open highest qualified class available for dbf file. </p>
-<p >This routine opens the highest available version of the dbf file. Defaults to XB_READ_WRITE and XB_MULTI_USER mode. </p><dl class="section return"><dt>Returns</dt><dd>param dbf - Output pointer to dbf file opened or null if error </dd></dl>
-
-</div>
-</div>
-<a id="aa957eb502ecd076e5df89e7415cb094b" name="aa957eb502ecd076e5df89e7415cb094b"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aa957eb502ecd076e5df89e7415cb094b">&#9670;&nbsp;</a></span>OpenHighestVersion() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbXBase::OpenHighestVersion </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sTableName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sAlias</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> &amp;&#160;</td>
- <td class="paramname"><em>dbf</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">int&#160;</td>
- <td class="paramname"><em>dummy</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="afa7bbac08a4601f49cd53b457196ee0e" name="afa7bbac08a4601f49cd53b457196ee0e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#afa7bbac08a4601f49cd53b457196ee0e">&#9670;&nbsp;</a></span>OpenHighestVersion() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbXBase::OpenHighestVersion </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sTableName</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sAlias</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> **&#160;</td>
- <td class="paramname"><em>dbf</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ac8eaef41acf08911b90f900aac8e70af" name="ac8eaef41acf08911b90f900aac8e70af"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac8eaef41acf08911b90f900aac8e70af">&#9670;&nbsp;</a></span>RemoveTblFromTblList() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbTblMgr::RemoveTblFromTblList </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sTblAlias</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a3d82b6e73d5c0bc8cac22b9a260389c1" name="a3d82b6e73d5c0bc8cac22b9a260389c1"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a3d82b6e73d5c0bc8cac22b9a260389c1">&#9670;&nbsp;</a></span>RemoveTblFromTblList() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbTblMgr::RemoveTblFromTblList </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td>
- <td class="paramname"><em>d</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a57caaaadfbd089d9a58ecfcb50c88a6c" name="a57caaaadfbd089d9a58ecfcb50c88a6c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a57caaaadfbd089d9a58ecfcb50c88a6c">&#9670;&nbsp;</a></span>SetDataDirectory()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::SetDataDirectory </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sDataDirectory</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Set the data directory. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sDataDirectory</td><td>Set the data direcroty. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a25542afadaaf39b4fb5a1772a29cc0bd" name="a25542afadaaf39b4fb5a1772a29cc0bd"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a25542afadaaf39b4fb5a1772a29cc0bd">&#9670;&nbsp;</a></span>SetDefaultAutoCommit()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::SetDefaultAutoCommit </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td>
- <td class="paramname"><em>bDefaultAutoCommit</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Set the default auto commit. </p>
-<p >Disabling auto commit requires the application execute explicit updates using dbf-&gt;Put() and dbf-&gt;AppendRecord(). With auto commit on, the library posts updates automatically when moving off the current record or closing a file.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">bDefaultAutoCommit</td><td>xbTrue - Enable default auto commit.<br />
- xbFalse - Disable default auto commit.<br />
- </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a5f74db23f8902846d581935c7db73f9c" name="a5f74db23f8902846d581935c7db73f9c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5f74db23f8902846d581935c7db73f9c">&#9670;&nbsp;</a></span>SetDefaultDateFormat()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::SetDefaultDateFormat </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sDefaultDateFormat</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Set the default date format. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">sDefaultDateFormat</td><td>Set the default date format. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a904ec348fd029d4a76e72b8fde636108" name="a904ec348fd029d4a76e72b8fde636108"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a904ec348fd029d4a76e72b8fde636108">&#9670;&nbsp;</a></span>SetEndianType()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::SetEndianType </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Set the endian type. </p>
-<p >This routine determines the Endian-ness at run time instead of compile time as some processers (ie; Sparc,ARM) can be switched either way. This routine is called automatically by the library at startup and does not need to be called in an application program. </p>
-
-</div>
-</div>
-<a id="a48d82dbe298c6f4cf68a63ac82dd8292" name="a48d82dbe298c6f4cf68a63ac82dd8292"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a48d82dbe298c6f4cf68a63ac82dd8292">&#9670;&nbsp;</a></span>SetLogDirectory()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbXBase::SetLogDirectory </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sLogFileDirectory</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a94010b88a309315ef980715eb581336c" name="a94010b88a309315ef980715eb581336c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a94010b88a309315ef980715eb581336c">&#9670;&nbsp;</a></span>SetLogFileName()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbXBase::SetLogFileName </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sLogFileName</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a666a0cb5b76ec7a9a3677d339e0c6b42" name="a666a0cb5b76ec7a9a3677d339e0c6b42"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a666a0cb5b76ec7a9a3677d339e0c6b42">&#9670;&nbsp;</a></span>SetLogSize()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbXBase::SetLogSize </td>
- <td>(</td>
- <td class="paramtype">size_t&#160;</td>
- <td class="paramname"><em>lSize</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="aba6e59512f7172dd55dcf92059e5928c" name="aba6e59512f7172dd55dcf92059e5928c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aba6e59512f7172dd55dcf92059e5928c">&#9670;&nbsp;</a></span>SetMultiUser()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbSsv::SetMultiUser </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td>
- <td class="paramname"><em>bMultiUser</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Get the multi user setting. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">bMultiUser</td><td>xbTrue - Turn on Multi user mode.<br />
- xbFalse - Turn off Multi user mode.<br />
- </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a0dff00b9ee3c288841e137ca01168116" name="a0dff00b9ee3c288841e137ca01168116"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0dff00b9ee3c288841e137ca01168116">&#9670;&nbsp;</a></span>WriteLogBytes()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbXBase::WriteLogBytes </td>
- <td>(</td>
- <td class="paramtype">xbUInt32&#160;</td>
- <td class="paramname"><em>lCnt</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>p</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a9ca5be73abffd0fdd18bdc799877272a" name="a9ca5be73abffd0fdd18bdc799877272a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a9ca5be73abffd0fdd18bdc799877272a">&#9670;&nbsp;</a></span>WriteLogMessage()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbXBase::WriteLogMessage </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sLogMessage</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iOutputOpt</em> = <code>0</code>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a1b239c021358476382942522911b5c66" name="a1b239c021358476382942522911b5c66"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1b239c021358476382942522911b5c66">&#9670;&nbsp;</a></span>xbMemcmp()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbXBase::xbMemcmp </td>
- <td>(</td>
- <td class="paramtype">const unsigned char *&#160;</td>
- <td class="paramname"><em>s1</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const unsigned char *&#160;</td>
- <td class="paramname"><em>s2</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">size_t&#160;</td>
- <td class="paramname"><em>n</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">protected</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Cross memcmp function. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">s1</td><td>Left operand to compare. </td></tr>
- <tr><td class="paramname">s2</td><td>Right operand to compare. </td></tr>
- <tr><td class="paramname">n</td><td>Number of bytes to compare. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>1 s1 &gt; s2<br />
- 0 s1 == s2<br />
- -1 s1 &lt; s2 </dd></dl>
-
-</div>
-</div>
-<a id="a0915aff7be4b2dd3e881f3c5d0da4baf" name="a0915aff7be4b2dd3e881f3c5d0da4baf"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0915aff7be4b2dd3e881f3c5d0da4baf">&#9670;&nbsp;</a></span>xbSleep()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void xb::xbXBase::xbSleep </td>
- <td>(</td>
- <td class="paramtype">xbInt32&#160;</td>
- <td class="paramname"><em>lMillisecs</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Cross platform sleep function. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">lMillisecs</td><td>Milliseconds to sleep. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<h2 class="groupheader">Friends And Related Function Documentation</h2>
-<a id="a86a53ce3efbf910996df0f853f1c0add" name="a86a53ce3efbf910996df0f853f1c0add"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a86a53ce3efbf910996df0f853f1c0add">&#9670;&nbsp;</a></span>xbBcd</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">friend class xbBcd</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">friend</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a3c3e5617be811d732472fe2cc8fb18cc" name="a3c3e5617be811d732472fe2cc8fb18cc"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a3c3e5617be811d732472fe2cc8fb18cc">&#9670;&nbsp;</a></span>xbExp</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">friend class xbExp</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">friend</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<h2 class="groupheader">Field Documentation</h2>
-<a id="a6219f1b5e24ea12fe158cd5aea56988e" name="a6219f1b5e24ea12fe158cd5aea56988e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6219f1b5e24ea12fe158cd5aea56988e">&#9670;&nbsp;</a></span>ErrorCodeText</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">const char* xb::xbSsv::ErrorCodeText[]</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a5849e813f5e8e1cd180f0366637adbf3" name="a5849e813f5e8e1cd180f0366637adbf3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5849e813f5e8e1cd180f0366637adbf3">&#9670;&nbsp;</a></span>iEndianType</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbSsv::iEndianType = 0</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">protected</span><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a9dec3164c3b264882df634915ecf21da" name="a9dec3164c3b264882df634915ecf21da"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a9dec3164c3b264882df634915ecf21da">&#9670;&nbsp;</a></span>sNullString</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> xb::xbSsv::sNullString = &quot;&quot;</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">protected</span><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following files:<ul>
-<li>/mnt/1Tdata/xbase/xbase64-4.1.0/src/include/<a class="el" href="xbxbase_8h_source.html">xbxbase.h</a></li>
-<li>/mnt/1Tdata/xbase/xbase64-4.1.0/src/core/<a class="el" href="xbxbase_8cpp.html">xbxbase.cpp</a></li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/dir_25b94c3afce00ed38231227d8141f932.html b/docs/doxygen/html/dir_25b94c3afce00ed38231227d8141f932.html
deleted file mode 100644
index 48adaeb..0000000
--- a/docs/doxygen/html/dir_25b94c3afce00ed38231227d8141f932.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/sql Directory Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_25b94c3afce00ed38231227d8141f932.html">sql</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">sql Directory Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a>
-Files</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbalttbl_8cpp.html">xbalttbl.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbcrix_8cpp.html">xbcrix.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbcrtbl_8cpp.html">xbcrtbl.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbcrtbl_8save_8cpp.html">xbcrtbl.save.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdelete_8cpp.html">xbdelete.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdrpix_8cpp.html">xbdrpix.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdrptbl_8cpp.html">xbdrptbl.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbinsert_8cpp.html">xbinsert.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbselect_8cpp.html">xbselect.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbset_8cpp.html">xbset.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbsql_8cpp.html">xbsql.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbstmt_8cpp.html">xbstmt.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/dir_313caf1132e152dd9b58bea13a4052ca.html b/docs/doxygen/html/dir_313caf1132e152dd9b58bea13a4052ca.html
deleted file mode 100644
index 0a07b74..0000000
--- a/docs/doxygen/html/dir_313caf1132e152dd9b58bea13a4052ca.html
+++ /dev/null
@@ -1,103 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/utils Directory Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_313caf1132e152dd9b58bea13a4052ca.html">utils</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">utils Directory Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a>
-Files</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__cfg__check_8cpp.html">xb_cfg_check.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__copydbf_8cpp.html">xb_copydbf.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__dbfutil_8cpp.html">xb_dbfutil.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__deletall_8cpp.html">xb_deletall.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__dumpdbt_8cpp.html">xb_dumpdbt.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__dumprecs_8cpp.html">xb_dumprecs.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__execsql_8cpp.html">xb_execsql.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__pack_8cpp.html">xb_pack.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__tblinfo_8cpp.html">xb_tblinfo.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__undelall_8cpp.html">xb_undelall.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/docs/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html
deleted file mode 100644
index 82d0f44..0000000
--- a/docs/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html
+++ /dev/null
@@ -1,95 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src Directory Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">src Directory Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="subdirs" name="subdirs"></a>
-Directories</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_e931c1a3f0014e624d0645a271726ad2.html">examples</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_25b94c3afce00ed38231227d8141f932.html">sql</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_313caf1132e152dd9b58bea13a4052ca.html">utils</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/dir_aebb8dcc11953d78e620bbef0b9e2183.html b/docs/doxygen/html/dir_aebb8dcc11953d78e620bbef0b9e2183.html
deleted file mode 100644
index f8b8ebe..0000000
--- a/docs/doxygen/html/dir_aebb8dcc11953d78e620bbef0b9e2183.html
+++ /dev/null
@@ -1,133 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core Directory Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">core Directory Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a>
-Files</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbbcd_8cpp.html">xbbcd.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbblockread_8cpp.html">xbblockread.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdate_8cpp.html">xbdate.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8cpp.html">xbdbf.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf3_8cpp.html">xbdbf3.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf4_8cpp.html">xbdbf4.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbexp_8cpp.html">xbexp.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbexpnode_8cpp.html">xbexpnode.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbfields_8cpp.html">xbfields.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbfile_8cpp.html">xbfile.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbfilter_8cpp.html">xbfilter.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbfuncs_8cpp.html">xbfuncs.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbixbase_8cpp.html">xbixbase.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbixmdx_8cpp.html">xbixmdx.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbixndx_8cpp.html">xbixndx.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xblog_8cpp.html">xblog.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbmemo_8cpp.html">xbmemo.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbmemo3_8cpp.html">xbmemo3.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbmemo4_8cpp.html">xbmemo4.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbssv_8cpp.html">xbssv.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbstring_8cpp.html">xbstring.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbtag_8cpp.html">xbtag.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbtblmgr_8cpp.html">xbtblmgr.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbuda_8cpp.html">xbuda.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbxbase_8cpp.html">xbxbase.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/dir_b0856f6b0d80ccb263b2f415c91f9e17.html b/docs/doxygen/html/dir_b0856f6b0d80ccb263b2f415c91f9e17.html
deleted file mode 100644
index 7e0bf9d..0000000
--- a/docs/doxygen/html/dir_b0856f6b0d80ccb263b2f415c91f9e17.html
+++ /dev/null
@@ -1,131 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include Directory Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">include Directory Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a>
-Files</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbase_8h.html">xbase.h</a> <a href="xbase_8h_source.html">[code]</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbbcd_8h.html">xbbcd.h</a> <a href="xbbcd_8h_source.html">[code]</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbblkread_8h.html">xbblkread.h</a> <a href="xbblkread_8h_source.html">[code]</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdate_8h.html">xbdate.h</a> <a href="xbdate_8h_source.html">[code]</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html">xbdbf.h</a> <a href="xbdbf_8h_source.html">[code]</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbexp_8h.html">xbexp.h</a> <a href="xbexp_8h_source.html">[code]</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbexpnode_8h.html">xbexpnode.h</a> <a href="xbexpnode_8h_source.html">[code]</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbfile_8h.html">xbfile.h</a> <a href="xbfile_8h_source.html">[code]</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbfilter_8h.html">xbfilter.h</a> <a href="xbfilter_8h_source.html">[code]</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbindex_8h.html">xbindex.h</a> <a href="xbindex_8h_source.html">[code]</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xblnklst_8h.html">xblnklst.h</a> <a href="xblnklst_8h_source.html">[code]</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xblnklstord_8h.html">xblnklstord.h</a> <a href="xblnklstord_8h_source.html">[code]</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xblnknod_8h.html">xblnknod.h</a> <a href="xblnknod_8h_source.html">[code]</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xblog_8h.html">xblog.h</a> <a href="xblog_8h_source.html">[code]</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbmemo_8h.html">xbmemo.h</a> <a href="xbmemo_8h_source.html">[code]</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html">xbretcod.h</a> <a href="xbretcod_8h_source.html">[code]</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbsql_8h.html">xbsql.h</a> <a href="xbsql_8h_source.html">[code]</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbssv_8h.html">xbssv.h</a> <a href="xbssv_8h_source.html">[code]</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbstring_8h.html">xbstring.h</a> <a href="xbstring_8h_source.html">[code]</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbtag_8h.html">xbtag.h</a> <a href="xbtag_8h_source.html">[code]</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbtblmgr_8h.html">xbtblmgr.h</a> <a href="xbtblmgr_8h_source.html">[code]</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbtypes_8h.html">xbtypes.h</a> <a href="xbtypes_8h_source.html">[code]</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbuda_8h.html">xbuda.h</a> <a href="xbuda_8h_source.html">[code]</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbxbase_8h.html">xbxbase.h</a> <a href="xbxbase_8h_source.html">[code]</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/dir_d93a1d4020dea85bb71b237545b5e722.html b/docs/doxygen/html/dir_d93a1d4020dea85bb71b237545b5e722.html
deleted file mode 100644
index 3345e9b..0000000
--- a/docs/doxygen/html/dir_d93a1d4020dea85bb71b237545b5e722.html
+++ /dev/null
@@ -1,131 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests Directory Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">tests Directory Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a>
-Files</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__bcd_8cpp.html">xb_test_bcd.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__blockread_8cpp.html">xb_test_blockread.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__date_8cpp.html">xb_test_date.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__dbf__v3__memos_8cpp.html">xb_test_dbf_v3_memos.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__dbf__v3__nomemos_8cpp.html">xb_test_dbf_v3_nomemos.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__dbf__v4__memos_8cpp.html">xb_test_dbf_v4_memos.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__dbf__v4__nomemos_8cpp.html">xb_test_dbf_v4_nomemos.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__expnode_8cpp.html">xb_test_expnode.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__expression_8cpp.html">xb_test_expression.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__file_8cpp.html">xb_test_file.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__filter_8cpp.html">xb_test_filter.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__funcs_8cpp.html">xb_test_funcs.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__linklist_8cpp.html">xb_test_linklist.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__lock_8cpp.html">xb_test_lock.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__lock2_8cpp.html">xb_test_lock2.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__log_8cpp.html">xb_test_log.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__mdx_8cpp.html">xb_test_mdx.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__ndx_8cpp.html">xb_test_ndx.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__sql_8cpp.html">xb_test_sql.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__string_8cpp.html">xb_test_string.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__tblmgr_8cpp.html">xb_test_tblmgr.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__uda_8cpp.html">xb_test_uda.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__xbase_8cpp.html">xb_test_xbase.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/dir_e931c1a3f0014e624d0645a271726ad2.html b/docs/doxygen/html/dir_e931c1a3f0014e624d0645a271726ad2.html
deleted file mode 100644
index b4eef2e..0000000
--- a/docs/doxygen/html/dir_e931c1a3f0014e624d0645a271726ad2.html
+++ /dev/null
@@ -1,101 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/examples Directory Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e931c1a3f0014e624d0645a271726ad2.html">examples</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">examples Directory Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a>
-Files</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__date_8cpp.html">xb_ex_date.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__expression_8cpp.html">xb_ex_expression.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__sql_8cpp.html">xb_ex_sql.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__ssv_8cpp.html">xb_ex_ssv.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__string_8cpp.html">xb_ex_string.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__v3__create__dbf_8cpp.html">xb_ex_v3_create_dbf.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__v3__upd__dbf_8cpp.html">xb_ex_v3_upd_dbf.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__v4__create__dbf_8cpp.html">xb_ex_v4_create_dbf.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__v4__upd__dbf_8cpp.html">xb_ex_v4_upd_dbf.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/files.html b/docs/doxygen/html/files.html
deleted file mode 100644
index cbd1de4..0000000
--- a/docs/doxygen/html/files.html
+++ /dev/null
@@ -1,190 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: File List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-</div><!-- top -->
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div class="header">
- <div class="headertitle"><div class="title">File List</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock">Here is a list of all files with brief descriptions:</div><div class="directory">
-<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span>]</div><table class="directory">
-<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">&#9660;</span><span id="img_0_" class="iconfopen" onclick="toggleFolder('0_')">&#160;</span><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html" target="_self">src</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_0_" class="arrow" onclick="toggleFolder('0_0_')">&#9658;</span><span id="img_0_0_" class="iconfclosed" onclick="toggleFolder('0_0_')">&#160;</span><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html" target="_self">core</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_0_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbbcd_8cpp.html" target="_self">xbbcd.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_1_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbblockread_8cpp.html" target="_self">xbblockread.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_2_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbdate_8cpp.html" target="_self">xbdate.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_3_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbdbf_8cpp.html" target="_self">xbdbf.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_4_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbdbf3_8cpp.html" target="_self">xbdbf3.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_5_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbdbf4_8cpp.html" target="_self">xbdbf4.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_6_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbexp_8cpp.html" target="_self">xbexp.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_7_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbexpnode_8cpp.html" target="_self">xbexpnode.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_8_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbfields_8cpp.html" target="_self">xbfields.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_9_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbfile_8cpp.html" target="_self">xbfile.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_10_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbfilter_8cpp.html" target="_self">xbfilter.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_11_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbfuncs_8cpp.html" target="_self">xbfuncs.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_12_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbixbase_8cpp.html" target="_self">xbixbase.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_13_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbixmdx_8cpp.html" target="_self">xbixmdx.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_14_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbixndx_8cpp.html" target="_self">xbixndx.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_15_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xblog_8cpp.html" target="_self">xblog.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_16_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbmemo_8cpp.html" target="_self">xbmemo.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_17_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbmemo3_8cpp.html" target="_self">xbmemo3.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_18_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbmemo4_8cpp.html" target="_self">xbmemo4.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_19_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbssv_8cpp.html" target="_self">xbssv.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_20_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbstring_8cpp.html" target="_self">xbstring.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_21_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbtag_8cpp.html" target="_self">xbtag.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_22_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbtblmgr_8cpp.html" target="_self">xbtblmgr.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_23_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbuda_8cpp.html" target="_self">xbuda.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_24_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbxbase_8cpp.html" target="_self">xbxbase.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_1_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_1_" class="arrow" onclick="toggleFolder('0_1_')">&#9658;</span><span id="img_0_1_" class="iconfclosed" onclick="toggleFolder('0_1_')">&#160;</span><a class="el" href="dir_e931c1a3f0014e624d0645a271726ad2.html" target="_self">examples</a></td><td class="desc"></td></tr>
-<tr id="row_0_1_0_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__ex__date_8cpp.html" target="_self">xb_ex_date.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_1_1_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__ex__expression_8cpp.html" target="_self">xb_ex_expression.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_1_2_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__ex__sql_8cpp.html" target="_self">xb_ex_sql.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_1_3_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__ex__ssv_8cpp.html" target="_self">xb_ex_ssv.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_1_4_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__ex__string_8cpp.html" target="_self">xb_ex_string.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_1_5_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__ex__v3__create__dbf_8cpp.html" target="_self">xb_ex_v3_create_dbf.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_1_6_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__ex__v3__upd__dbf_8cpp.html" target="_self">xb_ex_v3_upd_dbf.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_1_7_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__ex__v4__create__dbf_8cpp.html" target="_self">xb_ex_v4_create_dbf.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_1_8_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__ex__v4__upd__dbf_8cpp.html" target="_self">xb_ex_v4_upd_dbf.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_2_" class="arrow" onclick="toggleFolder('0_2_')">&#9658;</span><span id="img_0_2_" class="iconfclosed" onclick="toggleFolder('0_2_')">&#160;</span><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html" target="_self">include</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_0_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbase_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbase_8h.html" target="_self">xbase.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_1_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbbcd_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbbcd_8h.html" target="_self">xbbcd.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_2_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbblkread_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbblkread_8h.html" target="_self">xbblkread.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_3_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbdate_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbdate_8h.html" target="_self">xbdate.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_4_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbdbf_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbdbf_8h.html" target="_self">xbdbf.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_5_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbexp_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbexp_8h.html" target="_self">xbexp.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_6_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbexpnode_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbexpnode_8h.html" target="_self">xbexpnode.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_7_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbfile_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbfile_8h.html" target="_self">xbfile.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_8_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbfilter_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbfilter_8h.html" target="_self">xbfilter.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_9_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbindex_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbindex_8h.html" target="_self">xbindex.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_10_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xblnklst_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xblnklst_8h.html" target="_self">xblnklst.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_11_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xblnklstord_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xblnklstord_8h.html" target="_self">xblnklstord.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_12_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xblnknod_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xblnknod_8h.html" target="_self">xblnknod.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_13_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xblog_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xblog_8h.html" target="_self">xblog.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_14_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbmemo_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbmemo_8h.html" target="_self">xbmemo.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_15_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbretcod_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbretcod_8h.html" target="_self">xbretcod.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_16_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbsql_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbsql_8h.html" target="_self">xbsql.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_17_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbssv_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbssv_8h.html" target="_self">xbssv.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_18_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbstring_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbstring_8h.html" target="_self">xbstring.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_19_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbtag_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbtag_8h.html" target="_self">xbtag.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_20_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbtblmgr_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbtblmgr_8h.html" target="_self">xbtblmgr.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_21_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbtypes_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbtypes_8h.html" target="_self">xbtypes.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_22_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbuda_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbuda_8h.html" target="_self">xbuda.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_23_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbxbase_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbxbase_8h.html" target="_self">xbxbase.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_3_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_3_" class="arrow" onclick="toggleFolder('0_3_')">&#9658;</span><span id="img_0_3_" class="iconfclosed" onclick="toggleFolder('0_3_')">&#160;</span><a class="el" href="dir_25b94c3afce00ed38231227d8141f932.html" target="_self">sql</a></td><td class="desc"></td></tr>
-<tr id="row_0_3_0_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbalttbl_8cpp.html" target="_self">xbalttbl.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_3_1_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbcrix_8cpp.html" target="_self">xbcrix.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_3_2_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbcrtbl_8cpp.html" target="_self">xbcrtbl.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_3_3_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbcrtbl_8save_8cpp.html" target="_self">xbcrtbl.save.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_3_4_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbdelete_8cpp.html" target="_self">xbdelete.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_3_5_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbdrpix_8cpp.html" target="_self">xbdrpix.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_3_6_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbdrptbl_8cpp.html" target="_self">xbdrptbl.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_3_7_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbinsert_8cpp.html" target="_self">xbinsert.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_3_8_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbselect_8cpp.html" target="_self">xbselect.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_3_9_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbset_8cpp.html" target="_self">xbset.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_3_10_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbsql_8cpp.html" target="_self">xbsql.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_3_11_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbstmt_8cpp.html" target="_self">xbstmt.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_4_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_4_" class="arrow" onclick="toggleFolder('0_4_')">&#9658;</span><span id="img_0_4_" class="iconfclosed" onclick="toggleFolder('0_4_')">&#160;</span><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html" target="_self">tests</a></td><td class="desc"></td></tr>
-<tr id="row_0_4_0_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="tstfuncs_8cpp.html" target="_self">tstfuncs.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_4_1_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__bcd_8cpp.html" target="_self">xb_test_bcd.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_4_2_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__blockread_8cpp.html" target="_self">xb_test_blockread.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_4_3_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__date_8cpp.html" target="_self">xb_test_date.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_4_4_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__dbf__v3__memos_8cpp.html" target="_self">xb_test_dbf_v3_memos.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_4_5_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__dbf__v3__nomemos_8cpp.html" target="_self">xb_test_dbf_v3_nomemos.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_4_6_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__dbf__v4__memos_8cpp.html" target="_self">xb_test_dbf_v4_memos.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_4_7_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__dbf__v4__nomemos_8cpp.html" target="_self">xb_test_dbf_v4_nomemos.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_4_8_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__expnode_8cpp.html" target="_self">xb_test_expnode.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_4_9_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__expression_8cpp.html" target="_self">xb_test_expression.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_4_10_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__file_8cpp.html" target="_self">xb_test_file.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_4_11_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__filter_8cpp.html" target="_self">xb_test_filter.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_4_12_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__funcs_8cpp.html" target="_self">xb_test_funcs.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_4_13_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__linklist_8cpp.html" target="_self">xb_test_linklist.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_4_14_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__lock_8cpp.html" target="_self">xb_test_lock.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_4_15_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__lock2_8cpp.html" target="_self">xb_test_lock2.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_4_16_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__log_8cpp.html" target="_self">xb_test_log.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_4_17_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__mdx_8cpp.html" target="_self">xb_test_mdx.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_4_18_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__ndx_8cpp.html" target="_self">xb_test_ndx.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_4_19_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__sql_8cpp.html" target="_self">xb_test_sql.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_4_20_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__string_8cpp.html" target="_self">xb_test_string.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_4_21_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__tblmgr_8cpp.html" target="_self">xb_test_tblmgr.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_4_22_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__uda_8cpp.html" target="_self">xb_test_uda.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_4_23_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__xbase_8cpp.html" target="_self">xb_test_xbase.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_5_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_5_" class="arrow" onclick="toggleFolder('0_5_')">&#9658;</span><span id="img_0_5_" class="iconfclosed" onclick="toggleFolder('0_5_')">&#160;</span><a class="el" href="dir_313caf1132e152dd9b58bea13a4052ca.html" target="_self">utils</a></td><td class="desc"></td></tr>
-<tr id="row_0_5_0_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__cfg__check_8cpp.html" target="_self">xb_cfg_check.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_5_1_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__copydbf_8cpp.html" target="_self">xb_copydbf.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_5_2_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__dbfutil_8cpp.html" target="_self">xb_dbfutil.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_5_3_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__deletall_8cpp.html" target="_self">xb_deletall.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_5_4_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__dumpdbt_8cpp.html" target="_self">xb_dumpdbt.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_5_5_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__dumprecs_8cpp.html" target="_self">xb_dumprecs.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_5_6_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__execsql_8cpp.html" target="_self">xb_execsql.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_5_7_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__pack_8cpp.html" target="_self">xb_pack.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_5_8_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__tblinfo_8cpp.html" target="_self">xb_tblinfo.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_5_9_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__undelall_8cpp.html" target="_self">xb_undelall.cpp</a></td><td class="desc"></td></tr>
-</table>
-</div><!-- directory -->
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/functions_c.html b/docs/doxygen/html/functions_c.html
deleted file mode 100644
index efdafde..0000000
--- a/docs/doxygen/html/functions_c.html
+++ /dev/null
@@ -1,103 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: Data Fields</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-</div><!-- top -->
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div class="contents">
-<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
-
-<h3><a id="index_c" name="index_c"></a>- c -</h3><ul>
-<li>CalcRollingCenturyForYear()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a9df58caa54105c489c314785c457e8cb">xb::xbDate</a></li>
-<li>cEncryptionFlag&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a8734e799707582f022fc341d515650f4">xb::xbDbf</a></li>
-<li>CenturyOf()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a38b2c5285c69ed65e94ece6c22dafde0">xb::xbDate</a></li>
-<li>cFieldName&#160;:&#160;<a class="el" href="structxb_1_1xbSchema.html#a514183856094123fd37df67885b4681e">xb::xbSchema</a></li>
-<li>CharDayOf()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a9fc29730b66cddfbb58c69992a99cc7c">xb::xbDate</a></li>
-<li>CharMonthOf()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#afffc84f02bd421335ff8ebe9fb3db0ac">xb::xbDate</a></li>
-<li>cIndexFlag&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ad59074633641e03647e54d2b66c9102b">xb::xbDbf</a></li>
-<li>cLangDriver&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#aea1dfe5cbd1f9cdbcfc8eb04b2c3d5f1">xb::xbDbf</a></li>
-<li>Close()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ad68d73113e54e1b5f326e90f45e9989d">xb::xbDbf</a></li>
-<li>CloseAllTables()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#afccb552ca0daff779c0500ff20d22c2b">xb::xbXBase</a></li>
-<li>Commit()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#abd69532c885ab72bcf3fb5066b318f4f">xb::xbDbf</a></li>
-<li>Copy()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#ac7a8466b03c04df838bd182ef244f792">xb::xbString</a></li>
-<li>CopyDbfStructure()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a829c615a130a1fdf609d93438d8a6264">xb::xbDbf</a></li>
-<li>CountChar()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#adc0204bcfd1c052b9aea9229b10acf72">xb::xbString</a></li>
-<li>CreateTable()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a73e41bfe679dd06ab16c436652df93f1">xb::xbDbf</a></li>
-<li>CreateUniqueFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#aae9a2ddb0adb8165b4ac2b6a28a932f7">xb::xbFile</a></li>
-<li>CTOD()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#abb1eb4b0394e4a67aadab15779b1b8c5">xb::xbDate</a></li>
-<li>cTransactionFlag&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ac3c89fc3bc6a6abf385478a8adbed970">xb::xbDbf</a></li>
-<li>cType&#160;:&#160;<a class="el" href="structxb_1_1xbSchema.html#a1d612b2ed5dc0b0289c9e91b3cda3a25">xb::xbSchema</a></li>
-<li>cUpdateDD&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a6021789d314cd41488991e708fcd0df2">xb::xbDbf</a></li>
-<li>cUpdateMM&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a9340a5e8ee53eb0f3b6601eec2d71e1b">xb::xbDbf</a></li>
-<li>cUpdateYY&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a4fcd6a86ddd32d4a9d76a4074573440a">xb::xbDbf</a></li>
-<li>cVersion&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a3a262abf658e5fa968b57ef457a69470">xb::xbDbf</a></li>
-<li>CvtHexChar()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a0a737bd408a94903f214eb2879eb56de">xb::xbString</a></li>
-<li>CvtHexString()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#ab5eb6918a0ae9ab6c0e961318f3d1eb0">xb::xbString</a></li>
-<li>CvtLongLong()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#ae3ab18365e132323f8ae4c99eb72181c">xb::xbString</a></li>
-<li>CvtULongLong()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a1528b30b84a41c3564ef31d1f4496b15">xb::xbString</a></li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/functions_d.html b/docs/doxygen/html/functions_d.html
deleted file mode 100644
index 21f0ffb..0000000
--- a/docs/doxygen/html/functions_d.html
+++ /dev/null
@@ -1,89 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: Data Fields</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-</div><!-- top -->
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div class="contents">
-<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
-
-<h3><a id="index_d" name="index_d"></a>- d -</h3><ul>
-<li>DateIsValid()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a367f66ef0c03c1747c12a18784554ccb">xb::xbDate</a></li>
-<li>DayOf()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#ad6417a900ce64a46f8909c0c7a2ddea2">xb::xbDate</a></li>
-<li>DeleteAll()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a01c26b67e312be1e674b3da710e031b9">xb::xbDbf</a></li>
-<li>DeleteAllRecords()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a3067fdfa3a7a5c15651f6e89d1102176">xb::xbDbf</a></li>
-<li>DeleteRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#acd8c10579229f3a2e2c5fdb7fcef90db">xb::xbDbf</a></li>
-<li>DeleteTable()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a4085ed4f049d976124d8edc3d3c56397">xb::xbDbf</a></li>
-<li>DetermineXbaseMemoVersion()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a5a740033664c9ad2611c90e2a6d0c2d3">xb::xbFile</a></li>
-<li>DetermineXbaseTableVersion()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#ae2b6ac26018dc28f77afbb3f008c3f66">xb::xbFile</a></li>
-<li>DisableMsgLogging()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#ae357fac4fdebdf49e46563cf611caf65">xb::xbXBase</a></li>
-<li>DisplayError()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a97dfa59ab9a8e9f17454da0faceb023d">xb::xbSsv</a></li>
-<li>DisplayTableList()&#160;:&#160;<a class="el" href="classxb_1_1xbTblMgr.html#a5eebffb9e8cc64141e35c2622045cb50">xb::xbTblMgr</a></li>
-<li>DumpHeader()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a309b5b1fb6a5c048c4bfb404d011ac55">xb::xbDbf</a></li>
-<li>DumpRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#aba30399f15885a07f87f904c0d0656fa">xb::xbDbf</a></li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/functions_e.html b/docs/doxygen/html/functions_e.html
deleted file mode 100644
index 74be731..0000000
--- a/docs/doxygen/html/functions_e.html
+++ /dev/null
@@ -1,89 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: Data Fields</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-</div><!-- top -->
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div class="contents">
-<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
-
-<h3><a id="index_e" name="index_e"></a>- e -</h3><ul>
-<li>eGetDouble()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#ab14e4a11427f5efb81cba1dd32bd1aa1">xb::xbFile</a></li>
-<li>eGetInt16()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#ac40c991110ddc6fb30a72d90f4652762">xb::xbFile</a></li>
-<li>eGetInt32()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a60b24a5afc984c586bf384c7e915ba0d">xb::xbFile</a></li>
-<li>eGetUInt16()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a936ade458e6d5e6d29f9b5031888d189">xb::xbFile</a></li>
-<li>eGetUInt32()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a78f052529d39a18deaface5a0d47d0b0">xb::xbFile</a></li>
-<li>EnableMsgLogging()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#a470e6eb0ed0be60338f9b40976d3ad48">xb::xbXBase</a></li>
-<li>ePutDouble()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a98b6ff533ae93f90c977a2ba23eeb105">xb::xbFile</a></li>
-<li>ePutInt16()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a29130f12739ac8fa837f4eaedf1338b2">xb::xbFile</a></li>
-<li>ePutInt32()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a19c37f76a2ccbb45019cb0fc373d3f46">xb::xbFile</a></li>
-<li>ePutUInt16()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a65e9839f92b96eac7b0d071fac3bbe40">xb::xbFile</a></li>
-<li>ePutUInt32()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#aa3f6ceae4b96f24875d86848bf13a173">xb::xbFile</a></li>
-<li>ErrorCodeText&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a6219f1b5e24ea12fe158cd5aea56988e">xb::xbSsv</a></li>
-<li>ExtractElement()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a77195fc4957952625cb33bb503517a3e">xb::xbString</a></li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/functions_func_c.html b/docs/doxygen/html/functions_func_c.html
deleted file mode 100644
index c1c8ba2..0000000
--- a/docs/doxygen/html/functions_func_c.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: Data Fields - Functions</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-</div><!-- top -->
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div class="contents">
-&#160;
-
-<h3><a id="index_c" name="index_c"></a>- c -</h3><ul>
-<li>CalcRollingCenturyForYear()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a9df58caa54105c489c314785c457e8cb">xb::xbDate</a></li>
-<li>CenturyOf()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a38b2c5285c69ed65e94ece6c22dafde0">xb::xbDate</a></li>
-<li>CharDayOf()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a9fc29730b66cddfbb58c69992a99cc7c">xb::xbDate</a></li>
-<li>CharMonthOf()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#afffc84f02bd421335ff8ebe9fb3db0ac">xb::xbDate</a></li>
-<li>Close()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ad68d73113e54e1b5f326e90f45e9989d">xb::xbDbf</a></li>
-<li>CloseAllTables()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#afccb552ca0daff779c0500ff20d22c2b">xb::xbXBase</a></li>
-<li>Commit()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#abd69532c885ab72bcf3fb5066b318f4f">xb::xbDbf</a></li>
-<li>Copy()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#ac7a8466b03c04df838bd182ef244f792">xb::xbString</a></li>
-<li>CopyDbfStructure()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a829c615a130a1fdf609d93438d8a6264">xb::xbDbf</a></li>
-<li>CountChar()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a26bc14d92dc7ce1f2bf31cd74af0db0f">xb::xbString</a></li>
-<li>CreateTable()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a73e41bfe679dd06ab16c436652df93f1">xb::xbDbf</a></li>
-<li>CreateUniqueFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#aae9a2ddb0adb8165b4ac2b6a28a932f7">xb::xbFile</a></li>
-<li>CTOD()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#abb1eb4b0394e4a67aadab15779b1b8c5">xb::xbDate</a></li>
-<li>CvtHexChar()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a0a737bd408a94903f214eb2879eb56de">xb::xbString</a></li>
-<li>CvtHexString()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#ab5eb6918a0ae9ab6c0e961318f3d1eb0">xb::xbString</a></li>
-<li>CvtLongLong()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#ae3ab18365e132323f8ae4c99eb72181c">xb::xbString</a></li>
-<li>CvtULongLong()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a1528b30b84a41c3564ef31d1f4496b15">xb::xbString</a></li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/functions_func_d.html b/docs/doxygen/html/functions_func_d.html
deleted file mode 100644
index 4f361cd..0000000
--- a/docs/doxygen/html/functions_func_d.html
+++ /dev/null
@@ -1,89 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: Data Fields - Functions</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-</div><!-- top -->
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div class="contents">
-&#160;
-
-<h3><a id="index_d" name="index_d"></a>- d -</h3><ul>
-<li>DateIsValid()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a367f66ef0c03c1747c12a18784554ccb">xb::xbDate</a></li>
-<li>DayOf()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#ad6417a900ce64a46f8909c0c7a2ddea2">xb::xbDate</a></li>
-<li>DeleteAll()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a01c26b67e312be1e674b3da710e031b9">xb::xbDbf</a></li>
-<li>DeleteAllRecords()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a3067fdfa3a7a5c15651f6e89d1102176">xb::xbDbf</a></li>
-<li>DeleteRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#acd8c10579229f3a2e2c5fdb7fcef90db">xb::xbDbf</a></li>
-<li>DeleteTable()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a4085ed4f049d976124d8edc3d3c56397">xb::xbDbf</a></li>
-<li>DetermineXbaseMemoVersion()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a5a740033664c9ad2611c90e2a6d0c2d3">xb::xbFile</a></li>
-<li>DetermineXbaseTableVersion()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#ae2b6ac26018dc28f77afbb3f008c3f66">xb::xbFile</a></li>
-<li>DisableMsgLogging()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#ae357fac4fdebdf49e46563cf611caf65">xb::xbXBase</a></li>
-<li>DisplayError()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a97dfa59ab9a8e9f17454da0faceb023d">xb::xbSsv</a></li>
-<li>DisplayTableList()&#160;:&#160;<a class="el" href="classxb_1_1xbTblMgr.html#a5eebffb9e8cc64141e35c2622045cb50">xb::xbTblMgr</a></li>
-<li>DumpHeader()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a309b5b1fb6a5c048c4bfb404d011ac55">xb::xbDbf</a></li>
-<li>DumpRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#aba30399f15885a07f87f904c0d0656fa">xb::xbDbf</a></li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/functions_func_e.html b/docs/doxygen/html/functions_func_e.html
deleted file mode 100644
index 430c0ac..0000000
--- a/docs/doxygen/html/functions_func_e.html
+++ /dev/null
@@ -1,88 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: Data Fields - Functions</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-</div><!-- top -->
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div class="contents">
-&#160;
-
-<h3><a id="index_e" name="index_e"></a>- e -</h3><ul>
-<li>eGetDouble()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#ab14e4a11427f5efb81cba1dd32bd1aa1">xb::xbFile</a></li>
-<li>eGetInt16()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#ac40c991110ddc6fb30a72d90f4652762">xb::xbFile</a></li>
-<li>eGetInt32()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a60b24a5afc984c586bf384c7e915ba0d">xb::xbFile</a></li>
-<li>eGetUInt16()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a936ade458e6d5e6d29f9b5031888d189">xb::xbFile</a></li>
-<li>eGetUInt32()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a78f052529d39a18deaface5a0d47d0b0">xb::xbFile</a></li>
-<li>EnableMsgLogging()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#a470e6eb0ed0be60338f9b40976d3ad48">xb::xbXBase</a></li>
-<li>ePutDouble()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a98b6ff533ae93f90c977a2ba23eeb105">xb::xbFile</a></li>
-<li>ePutInt16()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a29130f12739ac8fa837f4eaedf1338b2">xb::xbFile</a></li>
-<li>ePutInt32()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a19c37f76a2ccbb45019cb0fc373d3f46">xb::xbFile</a></li>
-<li>ePutUInt16()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a65e9839f92b96eac7b0d071fac3bbe40">xb::xbFile</a></li>
-<li>ePutUInt32()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#aa3f6ceae4b96f24875d86848bf13a173">xb::xbFile</a></li>
-<li>ExtractElement()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a77195fc4957952625cb33bb503517a3e">xb::xbString</a></li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/functions_func_g.html b/docs/doxygen/html/functions_func_g.html
deleted file mode 100644
index 18ab1bc..0000000
--- a/docs/doxygen/html/functions_func_g.html
+++ /dev/null
@@ -1,141 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: Data Fields - Functions</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-</div><!-- top -->
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div class="contents">
-&#160;
-
-<h3><a id="index_g" name="index_g"></a>- g -</h3><ul>
-<li>GetAutoCommit()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ae0c00226fd2ea7a67f101e795467ed68">xb::xbDbf</a></li>
-<li>GetBlockSize()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a638e14262410a1627819f016a16cdce2">xb::xbFile</a></li>
-<li>GetBof()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ad0827a43c025c1184ffebab74cc9e779">xb::xbDbf</a></li>
-<li>GetCharacter()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a685187a5f8401b322fc61f3fbe56330d">xb::xbString</a></li>
-<li>GetCmdLineOpt()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#aadecb3ac460d8e94b88b2e809e22f48e">xb::xbXBase</a></li>
-<li>GetCurRecNo()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a643a80a3792a52760c8e09ba18719503">xb::xbDbf</a></li>
-<li>GetDataDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">xb::xbSsv</a></li>
-<li>GetDateField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#af78ef1fba949463ff7f829d3cffc4555">xb::xbDbf</a></li>
-<li>GetDbfPtr()&#160;:&#160;<a class="el" href="classxb_1_1xbTblMgr.html#ad8a5d28a2ee6720a9aa74bcb45662cf5">xb::xbTblMgr</a></li>
-<li>GetDbfStatus()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ac1110d867ba297a52c8b0e83e88f05e6">xb::xbDbf</a></li>
-<li>GetDefaultAutoCommit()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a6982f973e81587b04916f4509746aaf5">xb::xbSsv</a></li>
-<li>GetDefaultDateFormat()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a6fbb9c3a550ab0b3378f9586a57791d2">xb::xbSsv</a></li>
-<li>GetDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#acd0fb2166b2bff7e8a1cf65a7bc8be1e">xb::xbFile</a></li>
-<li>GetDoubleField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a4556041a7ff2f6b6f986729901c11f08">xb::xbDbf</a></li>
-<li>GetEndianType()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">xb::xbSsv</a></li>
-<li>GetEof()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a256dc1f98626fa77da24e91a38ab5b4d">xb::xbDbf</a></li>
-<li>GetErrorMessage()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">xb::xbSsv</a></li>
-<li>GetField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a9a0fcf7e2040ab483e3807927833cb26">xb::xbDbf</a></li>
-<li>GetFieldCnt()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#add27d8ef555a13b336b8c804165dc15e">xb::xbDbf</a></li>
-<li>GetFieldDecimal()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#abcb4defad2e1b6e67f63cc60737ad840">xb::xbDbf</a></li>
-<li>GetFieldLen()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#adda4302b58cc6109b048f19d9b68bbd4">xb::xbDbf</a></li>
-<li>GetFieldName()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a5e3e4368bfba1724c016b8859023e34c">xb::xbDbf</a></li>
-<li>GetFieldNo()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#aed9113b5095c6df1b9c854cbd0d8047b">xb::xbDbf</a></li>
-<li>GetFieldType()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a5143973e4f165651152aa13c8fd45f84">xb::xbDbf</a></li>
-<li>GetFileDirPart()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a60c53998e3d1b694134b20a87bc9bf5a">xb::xbFile</a></li>
-<li>GetFileExtPart()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a57a9222e5cbb51019d4eeb2c3ac89fa2">xb::xbFile</a></li>
-<li>GetFileMtime()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a02df78f4c90313243f508fc56b95aba8">xb::xbFile</a></li>
-<li>GetFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#ac95cb882ccbcdedc9a233c6ad9fed07a">xb::xbFile</a></li>
-<li>GetFileNamePart()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a81422b3dd52763d2cc6c77237ec9af0a">xb::xbFile</a></li>
-<li>GetFileSize()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a50b63c39e49d44e52078038027b24cc5">xb::xbFile</a></li>
-<li>GetFileType()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a5548236d38d43b89ae29b9a015b1f678">xb::xbFile</a></li>
-<li>GetFirstRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a6fc5b8a3e2f177d5ceaf9d975cbb5226">xb::xbDbf</a></li>
-<li>GetFloatField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a3443f646038ced14425f067a59c0f2da">xb::xbDbf</a></li>
-<li>GetFqFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a31b4e641f93206ba23e2a5a27491dcd4">xb::xbFile</a></li>
-<li>GetFunctionInfo()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#ae52e53340593b4253936c1372ec15ee1">xb::xbXBase</a></li>
-<li>GetHeaderLen()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ad56be2756b7a9f8318d9ba5cf215dafb">xb::xbDbf</a></li>
-<li>GetHomeDir()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">xb::xbSsv</a></li>
-<li>GetLastPos()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#ac7698665f44413a5e99a5b5bc573c6df">xb::xbString</a></li>
-<li>GetLastRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a49e667f9c8ee55c36444702663fc5964">xb::xbDbf</a></li>
-<li>GetLogDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a4822315bded3969b59aeeb683c373051">xb::xbSsv</a>, <a class="el" href="classxb_1_1xbXBase.html#a51d49b4d699740194b28c6ec0d0ee07b">xb::xbXBase</a></li>
-<li>GetLogFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#afaef09435be73b3111f5edbd7091d861">xb::xbSsv</a>, <a class="el" href="classxb_1_1xbXBase.html#ac0744edf9e4aa959d8cf2daa874376af">xb::xbXBase</a></li>
-<li>GetLogFqFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#ab5d63cd7d9137eba8a1d4d9c3df522b7">xb::xbXBase</a></li>
-<li>GetLogicalField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a3254f091fc4a1404abed3dd2bcdd6ce6">xb::xbDbf</a></li>
-<li>GetLogStatus()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#ade34cd72c2a7e70fb55429a8a6f6c028">xb::xbXBase</a></li>
-<li>GetLongField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#abe525c0820640e0a9e169d0b7913cfa1">xb::xbDbf</a></li>
-<li>GetMultiUser()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">xb::xbSsv</a></li>
-<li>GetNextRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a18fdcb4ab15b36cd47fa6f6f7a540d1a">xb::xbDbf</a></li>
-<li>GetOpenMode()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a3c500dc9dac22c49496e4b29386b2dd3">xb::xbFile</a></li>
-<li>GetOpenTableCount()&#160;:&#160;<a class="el" href="classxb_1_1xbTblMgr.html#ad0d2d4adabc0dc0e761cfdee63c84069">xb::xbTblMgr</a></li>
-<li>GetPathSeparator()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#af8b8b808cf43cd352321b43f500142db">xb::xbString</a></li>
-<li>GetPrevRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ab3d248e5221b4f0809897cd43af17a1e">xb::xbDbf</a></li>
-<li>GetRawField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#aabd146c0e1054ab905ec96aedd84b02e">xb::xbDbf</a></li>
-<li>GetRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a26fba086b07caeab95066bf1c8d25161">xb::xbDbf</a></li>
-<li>GetRecordBuf()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#aa3e38c4057d726a28a27d07a1610d124">xb::xbDbf</a></li>
-<li>GetRecordCnt()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ac196ad55335e1f4789d698748434dc89">xb::xbDbf</a></li>
-<li>GetRecordCount()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a0aaa06d6028e75efc6b5131f7356ecce">xb::xbDbf</a></li>
-<li>GetRecordLen()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ab50d76c6e29e81e347a6feb04c2f62bb">xb::xbDbf</a></li>
-<li>GetShareMode()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a9b63e05b77f477ff6109ff7b9432c1b6">xb::xbFile</a></li>
-<li>GetSize()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a6c33e73659f8e98819289d2661c7271c">xb::xbString</a></li>
-<li>GetTblAlias()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a27758a325c097f204247908b65ba7fbd">xb::xbDbf</a></li>
-<li>GetTblListEntry()&#160;:&#160;<a class="el" href="classxb_1_1xbTblMgr.html#acbf148ddba4297021cfb980a161ebef9">xb::xbTblMgr</a></li>
-<li>GetULongField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a67e3a050f9090edf69eee75aef7f5d83">xb::xbDbf</a></li>
-<li>GetVersion()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a49212a9eb17f7fa9f303e08d5fc50fc6">xb::xbDbf</a></li>
-<li>GetXbaseFileTypeByte()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#aaf2e697751a0beff41432a66bb83fb5e">xb::xbFile</a></li>
-<li>GetXbasePtr()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ab21ec23c076b0c9affdc0f6672bd133f">xb::xbDbf</a></li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/functions_func_i.html b/docs/doxygen/html/functions_func_i.html
deleted file mode 100644
index 91a9531..0000000
--- a/docs/doxygen/html/functions_func_i.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: Data Fields - Functions</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-</div><!-- top -->
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div class="contents">
-&#160;
-
-<h3><a id="index_i" name="index_i"></a>- i -</h3><ul>
-<li>InitVars()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ad06fe0f7975fb81125d27d82504e6829">xb::xbDbf</a></li>
-<li>IsEmpty()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a4a255a30d683acd62ea09c1617b53cb3">xb::xbString</a></li>
-<li>IsLeapYear()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#af2bd33a72448e2c5ee00d8b711dc5d95">xb::xbDate</a></li>
-<li>IsNull()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a3fa34fa31bcb7244ecb054ab628ad500">xb::xbString</a></li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/functions_func_s.html b/docs/doxygen/html/functions_func_s.html
deleted file mode 100644
index 99e6b3c..0000000
--- a/docs/doxygen/html/functions_func_s.html
+++ /dev/null
@@ -1,98 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: Data Fields - Functions</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-</div><!-- top -->
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div class="contents">
-&#160;
-
-<h3><a id="index_s" name="index_s"></a>- s -</h3><ul>
-<li>Set()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a4b0cde152b5de0f7d26608d1445110b6">xb::xbDate</a>, <a class="el" href="classxb_1_1xbString.html#ab85753d2c39882e946a8468cbb587700">xb::xbString</a></li>
-<li>SetAutoCommit()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a4cf7f0d423164f3cf074ae41f96f4e90">xb::xbDbf</a></li>
-<li>SetBlockSize()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a991c5676a6f38fa752435390989f413e">xb::xbFile</a></li>
-<li>SetDataDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">xb::xbSsv</a></li>
-<li>SetDefaultAutoCommit()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">xb::xbSsv</a></li>
-<li>SetDefaultDateFormat()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">xb::xbSsv</a></li>
-<li>SetDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#ae78a85255488bc78964c16946dbaead3">xb::xbFile</a></li>
-<li>SetEndianType()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a904ec348fd029d4a76e72b8fde636108">xb::xbSsv</a></li>
-<li>SetFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a5419eb27e56822f828b2b88a9502a636">xb::xbFile</a></li>
-<li>SetFqFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#aee832fa11db2077a532f49e1329bd05a">xb::xbFile</a></li>
-<li>SetHomeFolders()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a060acbfaa8d528f86cb59301814b414a">xb::xbFile</a></li>
-<li>SetLogDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a7b992ed97281bf25b5b66f5df686225e">xb::xbSsv</a>, <a class="el" href="classxb_1_1xbXBase.html#a48d82dbe298c6f4cf68a63ac82dd8292">xb::xbXBase</a></li>
-<li>SetLogFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#a94010b88a309315ef980715eb581336c">xb::xbXBase</a></li>
-<li>SetLogSize()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#a666a0cb5b76ec7a9a3677d339e0c6b42">xb::xbXBase</a></li>
-<li>SetMultiUser()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#aba6e59512f7172dd55dcf92059e5928c">xb::xbSsv</a></li>
-<li>SetNum()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a3af5b1f111f94b0667551fcbd1d97abd">xb::xbString</a></li>
-<li>SetVersion()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a7e63e852418f337eb7c44de5dcd50323">xb::xbDbf</a></li>
-<li>Sprintf()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a9e9bfa29d86377b915f1628aeb0e9195">xb::xbString</a></li>
-<li>Str()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#ab43a5d8d929767c0ffdd722972bb8cc0">xb::xbDate</a>, <a class="el" href="classxb_1_1xbString.html#a6715f4c0010f3ab487c9d787838a29b3">xb::xbString</a></li>
-<li>strncpy()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a3bc9e856c34f0c240a6e36e5b6e3ea7b">xb::xbString</a></li>
-<li>SwapChars()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a054683872e1f05d11c2cf8683a63a6fe">xb::xbString</a></li>
-<li>Sysdate()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a40ba54a58d64cf56266f020f91584192">xb::xbDate</a></li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/functions_g.html b/docs/doxygen/html/functions_g.html
deleted file mode 100644
index d67e26c..0000000
--- a/docs/doxygen/html/functions_g.html
+++ /dev/null
@@ -1,141 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: Data Fields</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-</div><!-- top -->
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div class="contents">
-<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
-
-<h3><a id="index_g" name="index_g"></a>- g -</h3><ul>
-<li>GetAutoCommit()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ae0c00226fd2ea7a67f101e795467ed68">xb::xbDbf</a></li>
-<li>GetBlockSize()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a638e14262410a1627819f016a16cdce2">xb::xbFile</a></li>
-<li>GetBof()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ad0827a43c025c1184ffebab74cc9e779">xb::xbDbf</a></li>
-<li>GetCharacter()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a685187a5f8401b322fc61f3fbe56330d">xb::xbString</a></li>
-<li>GetCmdLineOpt()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#aadecb3ac460d8e94b88b2e809e22f48e">xb::xbXBase</a></li>
-<li>GetCurRecNo()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a643a80a3792a52760c8e09ba18719503">xb::xbDbf</a></li>
-<li>GetDataDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">xb::xbSsv</a></li>
-<li>GetDateField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#af78ef1fba949463ff7f829d3cffc4555">xb::xbDbf</a></li>
-<li>GetDbfPtr()&#160;:&#160;<a class="el" href="classxb_1_1xbTblMgr.html#ad8a5d28a2ee6720a9aa74bcb45662cf5">xb::xbTblMgr</a></li>
-<li>GetDbfStatus()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ac1110d867ba297a52c8b0e83e88f05e6">xb::xbDbf</a></li>
-<li>GetDefaultAutoCommit()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a6982f973e81587b04916f4509746aaf5">xb::xbSsv</a></li>
-<li>GetDefaultDateFormat()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a6fbb9c3a550ab0b3378f9586a57791d2">xb::xbSsv</a></li>
-<li>GetDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#acd0fb2166b2bff7e8a1cf65a7bc8be1e">xb::xbFile</a></li>
-<li>GetDoubleField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a4556041a7ff2f6b6f986729901c11f08">xb::xbDbf</a></li>
-<li>GetEndianType()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">xb::xbSsv</a></li>
-<li>GetEof()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a256dc1f98626fa77da24e91a38ab5b4d">xb::xbDbf</a></li>
-<li>GetErrorMessage()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">xb::xbSsv</a></li>
-<li>GetField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a9a0fcf7e2040ab483e3807927833cb26">xb::xbDbf</a></li>
-<li>GetFieldCnt()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#add27d8ef555a13b336b8c804165dc15e">xb::xbDbf</a></li>
-<li>GetFieldDecimal()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#abcb4defad2e1b6e67f63cc60737ad840">xb::xbDbf</a></li>
-<li>GetFieldLen()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#adda4302b58cc6109b048f19d9b68bbd4">xb::xbDbf</a></li>
-<li>GetFieldName()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a5e3e4368bfba1724c016b8859023e34c">xb::xbDbf</a></li>
-<li>GetFieldNo()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#aed9113b5095c6df1b9c854cbd0d8047b">xb::xbDbf</a></li>
-<li>GetFieldType()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a5143973e4f165651152aa13c8fd45f84">xb::xbDbf</a></li>
-<li>GetFileDirPart()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a60c53998e3d1b694134b20a87bc9bf5a">xb::xbFile</a></li>
-<li>GetFileExtPart()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a57a9222e5cbb51019d4eeb2c3ac89fa2">xb::xbFile</a></li>
-<li>GetFileMtime()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a02df78f4c90313243f508fc56b95aba8">xb::xbFile</a></li>
-<li>GetFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#ac95cb882ccbcdedc9a233c6ad9fed07a">xb::xbFile</a></li>
-<li>GetFileNamePart()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a81422b3dd52763d2cc6c77237ec9af0a">xb::xbFile</a></li>
-<li>GetFileSize()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a50b63c39e49d44e52078038027b24cc5">xb::xbFile</a></li>
-<li>GetFileType()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a5548236d38d43b89ae29b9a015b1f678">xb::xbFile</a></li>
-<li>GetFirstRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a6fc5b8a3e2f177d5ceaf9d975cbb5226">xb::xbDbf</a></li>
-<li>GetFloatField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a3443f646038ced14425f067a59c0f2da">xb::xbDbf</a></li>
-<li>GetFqFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a31b4e641f93206ba23e2a5a27491dcd4">xb::xbFile</a></li>
-<li>GetFunctionInfo()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#ae52e53340593b4253936c1372ec15ee1">xb::xbXBase</a></li>
-<li>GetHeaderLen()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ad56be2756b7a9f8318d9ba5cf215dafb">xb::xbDbf</a></li>
-<li>GetHomeDir()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">xb::xbSsv</a></li>
-<li>GetLastPos()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#ac7698665f44413a5e99a5b5bc573c6df">xb::xbString</a></li>
-<li>GetLastRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a49e667f9c8ee55c36444702663fc5964">xb::xbDbf</a></li>
-<li>GetLogDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a4822315bded3969b59aeeb683c373051">xb::xbSsv</a>, <a class="el" href="classxb_1_1xbXBase.html#a51d49b4d699740194b28c6ec0d0ee07b">xb::xbXBase</a></li>
-<li>GetLogFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#afaef09435be73b3111f5edbd7091d861">xb::xbSsv</a>, <a class="el" href="classxb_1_1xbXBase.html#ac0744edf9e4aa959d8cf2daa874376af">xb::xbXBase</a></li>
-<li>GetLogFqFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#ab5d63cd7d9137eba8a1d4d9c3df522b7">xb::xbXBase</a></li>
-<li>GetLogicalField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a3254f091fc4a1404abed3dd2bcdd6ce6">xb::xbDbf</a></li>
-<li>GetLogStatus()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#ade34cd72c2a7e70fb55429a8a6f6c028">xb::xbXBase</a></li>
-<li>GetLongField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#abe525c0820640e0a9e169d0b7913cfa1">xb::xbDbf</a></li>
-<li>GetMultiUser()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">xb::xbSsv</a></li>
-<li>GetNextRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a18fdcb4ab15b36cd47fa6f6f7a540d1a">xb::xbDbf</a></li>
-<li>GetOpenMode()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a3c500dc9dac22c49496e4b29386b2dd3">xb::xbFile</a></li>
-<li>GetOpenTableCount()&#160;:&#160;<a class="el" href="classxb_1_1xbTblMgr.html#ad0d2d4adabc0dc0e761cfdee63c84069">xb::xbTblMgr</a></li>
-<li>GetPathSeparator()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#af8b8b808cf43cd352321b43f500142db">xb::xbString</a></li>
-<li>GetPrevRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ab3d248e5221b4f0809897cd43af17a1e">xb::xbDbf</a></li>
-<li>GetRawField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#aabd146c0e1054ab905ec96aedd84b02e">xb::xbDbf</a></li>
-<li>GetRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a26fba086b07caeab95066bf1c8d25161">xb::xbDbf</a></li>
-<li>GetRecordBuf()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#aa3e38c4057d726a28a27d07a1610d124">xb::xbDbf</a></li>
-<li>GetRecordCnt()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ac196ad55335e1f4789d698748434dc89">xb::xbDbf</a></li>
-<li>GetRecordCount()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a0aaa06d6028e75efc6b5131f7356ecce">xb::xbDbf</a></li>
-<li>GetRecordLen()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ab50d76c6e29e81e347a6feb04c2f62bb">xb::xbDbf</a></li>
-<li>GetShareMode()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a9b63e05b77f477ff6109ff7b9432c1b6">xb::xbFile</a></li>
-<li>GetSize()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a6c33e73659f8e98819289d2661c7271c">xb::xbString</a></li>
-<li>GetTblAlias()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a27758a325c097f204247908b65ba7fbd">xb::xbDbf</a></li>
-<li>GetTblListEntry()&#160;:&#160;<a class="el" href="classxb_1_1xbTblMgr.html#acbf148ddba4297021cfb980a161ebef9">xb::xbTblMgr</a></li>
-<li>GetULongField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a67e3a050f9090edf69eee75aef7f5d83">xb::xbDbf</a></li>
-<li>GetVersion()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a49212a9eb17f7fa9f303e08d5fc50fc6">xb::xbDbf</a></li>
-<li>GetXbaseFileTypeByte()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#aaf2e697751a0beff41432a66bb83fb5e">xb::xbFile</a></li>
-<li>GetXbasePtr()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ab21ec23c076b0c9affdc0f6672bd133f">xb::xbDbf</a></li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/functions_i.html b/docs/doxygen/html/functions_i.html
deleted file mode 100644
index 3f935d6..0000000
--- a/docs/doxygen/html/functions_i.html
+++ /dev/null
@@ -1,87 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: Data Fields</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-</div><!-- top -->
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div class="contents">
-<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
-
-<h3><a id="index_i" name="index_i"></a>- i -</h3><ul>
-<li>iAutoCommit&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ab506450954bc86e7bf1d7c4efe681f43">xb::xbDbf</a></li>
-<li>iDbfStatus&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a6d8e193da3ca414eef1e8866ec5ca81b">xb::xbDbf</a></li>
-<li>iEndianType&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a5849e813f5e8e1cd180f0366637adbf3">xb::xbSsv</a></li>
-<li>iFieldLen&#160;:&#160;<a class="el" href="structxb_1_1xbSchema.html#a2da554af25ef628acf59bb52996056ac">xb::xbSchema</a></li>
-<li>iFileVersion&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a15f495446f0d75bcf2fa89e3b699d388">xb::xbDbf</a></li>
-<li>InitVars()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ad06fe0f7975fb81125d27d82504e6829">xb::xbDbf</a></li>
-<li>iNoOfDecs&#160;:&#160;<a class="el" href="structxb_1_1xbSchema.html#a55bab3bb69dee3508d168c93e182d4b9">xb::xbSchema</a></li>
-<li>iNoOfFields&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a5056757614c39f725cc775332494966a">xb::xbDbf</a></li>
-<li>IsEmpty()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a4a255a30d683acd62ea09c1617b53cb3">xb::xbString</a></li>
-<li>IsLeapYear()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#af2bd33a72448e2c5ee00d8b711dc5d95">xb::xbDate</a></li>
-<li>IsNull()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a3fa34fa31bcb7244ecb054ab628ad500">xb::xbString</a></li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/functions_n.html b/docs/doxygen/html/functions_n.html
deleted file mode 100644
index 5cb8df5..0000000
--- a/docs/doxygen/html/functions_n.html
+++ /dev/null
@@ -1,77 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: Data Fields</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-</div><!-- top -->
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div class="contents">
-<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
-
-<h3><a id="index_n" name="index_n"></a>- n -</h3><ul>
-<li>NameSuffixMissing()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a361e3cc318bbf1c4d10f069e0800a24e">xb::xbFile</a></li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/functions_s.html b/docs/doxygen/html/functions_s.html
deleted file mode 100644
index c0cb82b..0000000
--- a/docs/doxygen/html/functions_s.html
+++ /dev/null
@@ -1,101 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: Data Fields</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-</div><!-- top -->
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div class="contents">
-<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
-
-<h3><a id="index_s" name="index_s"></a>- s -</h3><ul>
-<li>sAlias&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a73f9c792d0a769e2e604c1855245a276">xb::xbDbf</a></li>
-<li>SchemaPtr&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ad8c8b5eb12063bb898da1b2cc02cfce7">xb::xbDbf</a></li>
-<li>Set()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a4b0cde152b5de0f7d26608d1445110b6">xb::xbDate</a>, <a class="el" href="classxb_1_1xbString.html#ab85753d2c39882e946a8468cbb587700">xb::xbString</a></li>
-<li>SetAutoCommit()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a4cf7f0d423164f3cf074ae41f96f4e90">xb::xbDbf</a></li>
-<li>SetBlockSize()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a991c5676a6f38fa752435390989f413e">xb::xbFile</a></li>
-<li>SetDataDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">xb::xbSsv</a></li>
-<li>SetDefaultAutoCommit()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">xb::xbSsv</a></li>
-<li>SetDefaultDateFormat()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">xb::xbSsv</a></li>
-<li>SetDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#ae78a85255488bc78964c16946dbaead3">xb::xbFile</a></li>
-<li>SetEndianType()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a904ec348fd029d4a76e72b8fde636108">xb::xbSsv</a></li>
-<li>SetFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a5419eb27e56822f828b2b88a9502a636">xb::xbFile</a></li>
-<li>SetFqFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#aee832fa11db2077a532f49e1329bd05a">xb::xbFile</a></li>
-<li>SetHomeFolders()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a060acbfaa8d528f86cb59301814b414a">xb::xbFile</a></li>
-<li>SetLogDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a7b992ed97281bf25b5b66f5df686225e">xb::xbSsv</a>, <a class="el" href="classxb_1_1xbXBase.html#a48d82dbe298c6f4cf68a63ac82dd8292">xb::xbXBase</a></li>
-<li>SetLogFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#a94010b88a309315ef980715eb581336c">xb::xbXBase</a></li>
-<li>SetLogSize()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#a666a0cb5b76ec7a9a3677d339e0c6b42">xb::xbXBase</a></li>
-<li>SetMultiUser()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#aba6e59512f7172dd55dcf92059e5928c">xb::xbSsv</a></li>
-<li>SetNum()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a3af5b1f111f94b0667551fcbd1d97abd">xb::xbString</a></li>
-<li>SetVersion()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a7e63e852418f337eb7c44de5dcd50323">xb::xbDbf</a></li>
-<li>sNullString&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a9dec3164c3b264882df634915ecf21da">xb::xbSsv</a></li>
-<li>Sprintf()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a9e9bfa29d86377b915f1628aeb0e9195">xb::xbString</a></li>
-<li>Str()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#ab43a5d8d929767c0ffdd722972bb8cc0">xb::xbDate</a>, <a class="el" href="classxb_1_1xbString.html#a6715f4c0010f3ab487c9d787838a29b3">xb::xbString</a></li>
-<li>strncpy()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a3bc9e856c34f0c240a6e36e5b6e3ea7b">xb::xbString</a></li>
-<li>SwapChars()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a054683872e1f05d11c2cf8683a63a6fe">xb::xbString</a></li>
-<li>Sysdate()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a40ba54a58d64cf56266f020f91584192">xb::xbDate</a></li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/functions_vars.html b/docs/doxygen/html/functions_vars.html
deleted file mode 100644
index 557c2b3..0000000
--- a/docs/doxygen/html/functions_vars.html
+++ /dev/null
@@ -1,137 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: Data Fields - Variables</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-</div><!-- top -->
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div class="contents">
-&#160;
-
-<h3><a id="index_c" name="index_c"></a>- c -</h3><ul>
-<li>cEncryptionFlag&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a8734e799707582f022fc341d515650f4">xb::xbDbf</a></li>
-<li>cFieldName&#160;:&#160;<a class="el" href="structxb_1_1xbSchema.html#a514183856094123fd37df67885b4681e">xb::xbSchema</a></li>
-<li>cIndexFlag&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ad59074633641e03647e54d2b66c9102b">xb::xbDbf</a></li>
-<li>cLangDriver&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#aea1dfe5cbd1f9cdbcfc8eb04b2c3d5f1">xb::xbDbf</a></li>
-<li>cTransactionFlag&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ac3c89fc3bc6a6abf385478a8adbed970">xb::xbDbf</a></li>
-<li>cType&#160;:&#160;<a class="el" href="structxb_1_1xbSchema.html#a1d612b2ed5dc0b0289c9e91b3cda3a25">xb::xbSchema</a></li>
-<li>cUpdateDD&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a6021789d314cd41488991e708fcd0df2">xb::xbDbf</a></li>
-<li>cUpdateMM&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a9340a5e8ee53eb0f3b6601eec2d71e1b">xb::xbDbf</a></li>
-<li>cUpdateYY&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a4fcd6a86ddd32d4a9d76a4074573440a">xb::xbDbf</a></li>
-<li>cVersion&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a3a262abf658e5fa968b57ef457a69470">xb::xbDbf</a></li>
-</ul>
-
-
-<h3><a id="index_e" name="index_e"></a>- e -</h3><ul>
-<li>ErrorCodeText&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a6219f1b5e24ea12fe158cd5aea56988e">xb::xbSsv</a></li>
-</ul>
-
-
-<h3><a id="index_i" name="index_i"></a>- i -</h3><ul>
-<li>iAutoCommit&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ab506450954bc86e7bf1d7c4efe681f43">xb::xbDbf</a></li>
-<li>iDbfStatus&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a6d8e193da3ca414eef1e8866ec5ca81b">xb::xbDbf</a></li>
-<li>iEndianType&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a5849e813f5e8e1cd180f0366637adbf3">xb::xbSsv</a></li>
-<li>iFieldLen&#160;:&#160;<a class="el" href="structxb_1_1xbSchema.html#a2da554af25ef628acf59bb52996056ac">xb::xbSchema</a></li>
-<li>iFileVersion&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a15f495446f0d75bcf2fa89e3b699d388">xb::xbDbf</a></li>
-<li>iNoOfDecs&#160;:&#160;<a class="el" href="structxb_1_1xbSchema.html#a55bab3bb69dee3508d168c93e182d4b9">xb::xbSchema</a></li>
-<li>iNoOfFields&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a5056757614c39f725cc775332494966a">xb::xbDbf</a></li>
-</ul>
-
-
-<h3><a id="index_p" name="index_p"></a>- p -</h3><ul>
-<li>pDbf&#160;:&#160;<a class="el" href="structxb_1_1xbTblList.html#a387d3f6bbf291a1fb96d276ed9bb96b6">xb::xbTblList</a></li>
-<li>pNext&#160;:&#160;<a class="el" href="structxb_1_1xbTblList.html#a3fd169fcf0fd4df927544e5342db583c">xb::xbTblList</a></li>
-<li>psFqTblName&#160;:&#160;<a class="el" href="structxb_1_1xbTblList.html#aceec65f6f6b585788cf98e8dabd2737d">xb::xbTblList</a></li>
-<li>psTblAlias&#160;:&#160;<a class="el" href="structxb_1_1xbTblList.html#ac87742c8a6b1cf2e7e35218e96966a05">xb::xbTblList</a></li>
-<li>psTblName&#160;:&#160;<a class="el" href="structxb_1_1xbTblList.html#a02c3b0c47fd104ef9758b375ecdcfd0f">xb::xbTblList</a></li>
-</ul>
-
-
-<h3><a id="index_r" name="index_r"></a>- r -</h3><ul>
-<li>RecBuf&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a8a9b3bce0b741e73473d3ebbd6e6f1cd">xb::xbDbf</a></li>
-<li>RecBuf2&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a353ebfc8a2960ef827f429ec74025606">xb::xbDbf</a></li>
-</ul>
-
-
-<h3><a id="index_s" name="index_s"></a>- s -</h3><ul>
-<li>sAlias&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a73f9c792d0a769e2e604c1855245a276">xb::xbDbf</a></li>
-<li>SchemaPtr&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ad8c8b5eb12063bb898da1b2cc02cfce7">xb::xbDbf</a></li>
-<li>sNullString&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a9dec3164c3b264882df634915ecf21da">xb::xbSsv</a></li>
-</ul>
-
-
-<h3><a id="index_u" name="index_u"></a>- u -</h3><ul>
-<li>uiHeaderLen&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a62f5fa9149ae0f6dc75642823de66918">xb::xbDbf</a></li>
-<li>uiRecordLen&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a1760e222567e2c849f9c799b9d896e91">xb::xbDbf</a></li>
-<li>ulCurRec&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#afcd99924606be0a9e1e25180bcd1abf8">xb::xbDbf</a></li>
-<li>ulNoOfRecs&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#acb594ab61dd35b17bdf28394083f8e87">xb::xbDbf</a></li>
-</ul>
-
-
-<h3><a id="index_x" name="index_x"></a>- x -</h3><ul>
-<li>xbase&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#ae39a67ea391b46055d4ca299cb222004">xb::xbFile</a></li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/globals.html b/docs/doxygen/html/globals.html
deleted file mode 100644
index b12ae53..0000000
--- a/docs/doxygen/html/globals.html
+++ /dev/null
@@ -1,225 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: Globals</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-</div><!-- top -->
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div class="contents">
-<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
-
-<h3><a id="index_c" name="index_c"></a>- c -</h3><ul>
-<li>ChronTime()&#160;:&#160;<a class="el" href="tstfuncs_8cpp.html#af990eed1e43605771a5810196b4043f7">tstfuncs.cpp</a></li>
-</ul>
-
-
-<h3><a id="index_d" name="index_d"></a>- d -</h3><ul>
-<li>dblEquals()&#160;:&#160;<a class="el" href="tstfuncs_8cpp.html#a8b8e417213c57f2ea0bcb61a7fb28860">tstfuncs.cpp</a></li>
-<li>dblMax()&#160;:&#160;<a class="el" href="tstfuncs_8cpp.html#a69a6e718e066af7f8392e5f1fea40d1b">tstfuncs.cpp</a></li>
-<li>dblMin()&#160;:&#160;<a class="el" href="tstfuncs_8cpp.html#a4d7b8f3f1ce52c6c0a281f25419f4c93">tstfuncs.cpp</a></li>
-<li>DevTester()&#160;:&#160;<a class="el" href="xb__test__expression_8cpp.html#aee57237c5f5b9b4d80e84bf530eb42bc">xb_test_expression.cpp</a></li>
-</ul>
-
-
-<h3><a id="index_g" name="index_g"></a>- g -</h3><ul>
-<li>GetNextSqlCmd()&#160;:&#160;<a class="el" href="xb__execsql_8cpp.html#af888ba5e7e94d92c2165362b87f1ea0e">xb_execsql.cpp</a></li>
-</ul>
-
-
-<h3><a id="index_i" name="index_i"></a>- i -</h3><ul>
-<li>InitTime()&#160;:&#160;<a class="el" href="tstfuncs_8cpp.html#ab1f17da15e67a8b2460d5a88b7a3db6e">tstfuncs.cpp</a></li>
-</ul>
-
-
-<h3><a id="index_j" name="index_j"></a>- j -</h3><ul>
-<li>JUL_OFFSET&#160;:&#160;<a class="el" href="xbdate_8h.html#a119f32fda399e2ebc2d734012a130e8f">xbdate.h</a></li>
-</ul>
-
-
-<h3><a id="index_l" name="index_l"></a>- l -</h3><ul>
-<li>LK_CLIPPER&#160;:&#160;<a class="el" href="xbdbf_8h.html#a01d6d7910b0da2170eb904a97d864a41">xbdbf.h</a></li>
-<li>LK_DBASE&#160;:&#160;<a class="el" href="xbdbf_8h.html#a4c08d01bd69e295b001bd00a228d8106">xbdbf.h</a></li>
-<li>LK_FOX&#160;:&#160;<a class="el" href="xbdbf_8h.html#a65e29186276222f460a7171803e07adf">xbdbf.h</a></li>
-<li>LK_XBASE64&#160;:&#160;<a class="el" href="xbdbf_8h.html#a42aea0ccd94f7422c8e0d7422dce85a4">xbdbf.h</a></li>
-</ul>
-
-
-<h3><a id="index_m" name="index_m"></a>- m -</h3><ul>
-<li>main()&#160;:&#160;<a class="el" href="xb__cfg__check_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_cfg_check.cpp</a>, <a class="el" href="xb__test__lock_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_lock.cpp</a>, <a class="el" href="xb__test__lock2_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_lock2.cpp</a>, <a class="el" href="xb__test__log_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_log.cpp</a>, <a class="el" href="xb__test__mdx_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_mdx.cpp</a>, <a class="el" href="xb__test__ndx_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_ndx.cpp</a>, <a class="el" href="xb__test__sql_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_sql.cpp</a>, <a class="el" href="xb__test__string_8cpp.html#aabf71bc9adb6daf457b2ea8879ae537f">xb_test_string.cpp</a>, <a class="el" href="xb__test__tblmgr_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_tblmgr.cpp</a>, <a class="el" href="xb__test__uda_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_uda.cpp</a>, <a class="el" href="xb__test__xbase_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_xbase.cpp</a>, <a class="el" href="xb__ex__expression_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_expression.cpp</a>, <a class="el" href="xb__copydbf_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_copydbf.cpp</a>, <a class="el" href="xb__dbfutil_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_dbfutil.cpp</a>, <a class="el" href="xb__deletall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_deletall.cpp</a>, <a class="el" href="xb__dumpdbt_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_dumpdbt.cpp</a>, <a class="el" href="xb__dumprecs_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_dumprecs.cpp</a>, <a class="el" href="xb__execsql_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_execsql.cpp</a>, <a class="el" href="xb__pack_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_pack.cpp</a>, <a class="el" href="xb__tblinfo_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_tblinfo.cpp</a>, <a class="el" href="xb__undelall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_undelall.cpp</a>, <a class="el" href="xb__test__funcs_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_funcs.cpp</a>, <a class="el" href="xb__ex__date_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_date.cpp</a>, <a class="el" href="xb__ex__sql_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_ex_sql.cpp</a>, <a class="el" href="xb__ex__ssv_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_ex_ssv.cpp</a>, <a class="el" href="xb__ex__string_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_string.cpp</a>, <a class="el" href="xb__ex__v3__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_v3_create_dbf.cpp</a>, <a class="el" href="xb__ex__v3__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_v3_upd_dbf.cpp</a>, <a class="el" href="xb__ex__v4__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_v4_create_dbf.cpp</a>, <a class="el" href="xb__ex__v4__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_v4_upd_dbf.cpp</a>, <a class="el" href="xb__test__bcd_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_bcd.cpp</a>, <a class="el" href="xb__test__blockread_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_blockread.cpp</a>, <a class="el" href="xb__test__date_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_date.cpp</a>, <a class="el" href="xb__test__dbf__v3__memos_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_dbf_v3_memos.cpp</a>, <a class="el" href="xb__test__dbf__v3__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_dbf_v3_nomemos.cpp</a>, <a class="el" href="xb__test__dbf__v4__memos_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_dbf_v4_memos.cpp</a>, <a class="el" href="xb__test__dbf__v4__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_dbf_v4_nomemos.cpp</a>, <a class="el" href="xb__test__expnode_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_expnode.cpp</a>, <a class="el" href="xb__test__expression_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_expression.cpp</a>, <a class="el" href="xb__test__file_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_file.cpp</a>, <a class="el" href="xb__test__filter_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_filter.cpp</a>, <a class="el" href="xb__test__linklist_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_linklist.cpp</a></li>
-<li>MyDbfRec&#160;:&#160;<a class="el" href="xb__test__blockread_8cpp.html#af68c3291a63fdf20ffa0e477460d148e">xb_test_blockread.cpp</a></li>
-<li>MyV4Record&#160;:&#160;<a class="el" href="xb__ex__expression_8cpp.html#a2122b9562802e2fd799b20454000dc99">xb_ex_expression.cpp</a></li>
-</ul>
-
-
-<h3><a id="index_p" name="index_p"></a>- p -</h3><ul>
-<li>PrintHelp()&#160;:&#160;<a class="el" href="xb__dbfutil_8cpp.html#a9c55a055e1cd4249c7f47e19dc7ac564">xb_dbfutil.cpp</a>, <a class="el" href="xb__deletall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_deletall.cpp</a>, <a class="el" href="xb__dumpdbt_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_dumpdbt.cpp</a>, <a class="el" href="xb__dumprecs_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_dumprecs.cpp</a>, <a class="el" href="xb__pack_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_pack.cpp</a>, <a class="el" href="xb__tblinfo_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_tblinfo.cpp</a>, <a class="el" href="xb__undelall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_undelall.cpp</a>, <a class="el" href="xb__copydbf_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_copydbf.cpp</a></li>
-<li>PrintResult()&#160;:&#160;<a class="el" href="xb__ex__expression_8cpp.html#a3234afc912211aec54c10d363d28cbda">xb_ex_expression.cpp</a></li>
-<li>PrintVersion()&#160;:&#160;<a class="el" href="xb__copydbf_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_copydbf.cpp</a>, <a class="el" href="xb__dbfutil_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_dbfutil.cpp</a>, <a class="el" href="xb__deletall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_deletall.cpp</a>, <a class="el" href="xb__dumpdbt_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_dumpdbt.cpp</a>, <a class="el" href="xb__dumprecs_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_dumprecs.cpp</a>, <a class="el" href="xb__pack_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_pack.cpp</a>, <a class="el" href="xb__tblinfo_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_tblinfo.cpp</a>, <a class="el" href="xb__undelall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_undelall.cpp</a></li>
-</ul>
-
-
-<h3><a id="index_t" name="index_t"></a>- t -</h3><ul>
-<li>TestMethod()&#160;:&#160;<a class="el" href="tstfuncs_8cpp.html#a265547b80a3aef5836952bede5288e2c">tstfuncs.cpp</a>, <a class="el" href="xb__test__expression_8cpp.html#ad52c27685018dda7c5c4b26fb445860e">xb_test_expression.cpp</a></li>
-<li>TestTokenMethod()&#160;:&#160;<a class="el" href="xb__test__expression_8cpp.html#a440d64b55abaa9e14e73ecc132d1084d">xb_test_expression.cpp</a></li>
-<li>TestWeight()&#160;:&#160;<a class="el" href="xb__test__expression_8cpp.html#af56b6dbc38e0d23caaf6531526315379">xb_test_expression.cpp</a></li>
-<li>timer&#160;:&#160;<a class="el" href="tstfuncs_8cpp.html#ae2281da6157495d69406c35f69a61f9f">tstfuncs.cpp</a></li>
-</ul>
-
-
-<h3><a id="index_v" name="index_v"></a>- v -</h3><ul>
-<li>VERBOSE&#160;:&#160;<a class="el" href="xb__test__string_8cpp.html#a42f8c497a1968074f38bf5055c650dca">xb_test_string.cpp</a></li>
-</ul>
-
-
-<h3><a id="index_x" name="index_x"></a>- x -</h3><ul>
-<li>XB_ACTIVE_RECS&#160;:&#160;<a class="el" href="xbdbf_8h.html#a1c44bb25bf2e23a3a9d3d2312df0b592">xbdbf.h</a></li>
-<li>XB_ALL_RECS&#160;:&#160;<a class="el" href="xbdbf_8h.html#a8bd17730da3ba5c55a6a07bc482dd0e4">xbdbf.h</a></li>
-<li>XB_ALREADY_OPEN&#160;:&#160;<a class="el" href="xbretcod_8h.html#aa2ff8301503f446c6a5f6510090e520f">xbretcod.h</a></li>
-<li>XB_BLOCKREAD_NOT_ENABLED&#160;:&#160;<a class="el" href="xbretcod_8h.html#aae9241d91cfb37f5d236128b3bce0a4a">xbretcod.h</a></li>
-<li>XB_BOF&#160;:&#160;<a class="el" href="xbretcod_8h.html#ade5f3a7cf1467d12761e4e21b5e4200f">xbretcod.h</a></li>
-<li>XB_CHAR_FLD&#160;:&#160;<a class="el" href="xbdbf_8h.html#a20f739b9d9dc6a002a246a999e76aeaa">xbdbf.h</a></li>
-<li>XB_CHAREOF&#160;:&#160;<a class="el" href="xbdbf_8h.html#ada1115f596131888c04df61546b198c4">xbdbf.h</a></li>
-<li>XB_CHARHDR&#160;:&#160;<a class="el" href="xbdbf_8h.html#a35d56cac7959c1e5c761684ced3f1e17">xbdbf.h</a></li>
-<li>XB_CLOSE_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#a030684d5541cf6127a76d81b0684b235">xbretcod.h</a></li>
-<li>XB_CLOSED&#160;:&#160;<a class="el" href="xbdbf_8h.html#a843ca4569326dbd1d0647899b0eb512f">xbdbf.h</a></li>
-<li>XB_DATE_FLD&#160;:&#160;<a class="el" href="xbdbf_8h.html#a7f685e6f5fe804b2174725a27ce73adc">xbdbf.h</a></li>
-<li>XB_DBF_FILE_NOT_OPEN&#160;:&#160;<a class="el" href="xbretcod_8h.html#a8104510b347c87998eadd0b27201e3c2">xbretcod.h</a></li>
-<li>XB_DELETE_FAILED&#160;:&#160;<a class="el" href="xbretcod_8h.html#ada15513935d5ede9216f07c0438f34d2">xbretcod.h</a></li>
-<li>XB_DELETED_RECS&#160;:&#160;<a class="el" href="xbdbf_8h.html#acc0a441854ed92b9d65d1181a97cad43">xbdbf.h</a></li>
-<li>XB_DIRECTORY_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#af532df74147ce2d872f61abfee49c53e">xbretcod.h</a></li>
-<li>XB_DONTOVERLAY&#160;:&#160;<a class="el" href="xbdbf_8h.html#a7b797840abdb3291373d15978103a778">xbdbf.h</a></li>
-<li>XB_DUP_TABLE_OR_ALIAS&#160;:&#160;<a class="el" href="xbretcod_8h.html#ac18036408d10e5eee1bf76cf92352b95">xbretcod.h</a></li>
-<li>XB_EMPTY&#160;:&#160;<a class="el" href="xbretcod_8h.html#a18068d0cbe0c7a1b4dd3176220180c29">xbretcod.h</a></li>
-<li>XB_EOF&#160;:&#160;<a class="el" href="xbretcod_8h.html#a8b47031e90c3f86306c7058e4490d3b7">xbretcod.h</a></li>
-<li>XB_FILE_EXISTS&#160;:&#160;<a class="el" href="xbretcod_8h.html#a54303a9677dbd5342233f33dd08c64d0">xbretcod.h</a></li>
-<li>XB_FILE_NOT_FOUND&#160;:&#160;<a class="el" href="xbretcod_8h.html#ad090af330c93111d12f6de35dbb065bc">xbretcod.h</a></li>
-<li>XB_FILE_TYPE_NOT_SUPPORTED&#160;:&#160;<a class="el" href="xbretcod_8h.html#ab7b9130a5f1df9975cfeaf6241933596">xbretcod.h</a></li>
-<li>XB_FLOAT_FLD&#160;:&#160;<a class="el" href="xbdbf_8h.html#a96ab4218d70ab603b4866354ce8c18cd">xbdbf.h</a></li>
-<li>XB_FMT_MONTH&#160;:&#160;<a class="el" href="xbdate_8h.html#aeacf2f7cc897ab5bd64781c0fb52b75d">xbdate.h</a></li>
-<li>XB_FMT_WEEK&#160;:&#160;<a class="el" href="xbdate_8h.html#a8f22704d3fd93fa85dd93b6c699e8178">xbdate.h</a></li>
-<li>XB_FMT_YEAR&#160;:&#160;<a class="el" href="xbdate_8h.html#aa29d78982a9e007874af1c4f4e4d1aa4">xbdate.h</a></li>
-<li>XB_INCOMPATIBLE_OPERANDS&#160;:&#160;<a class="el" href="xbretcod_8h.html#af141ec58b7ca7360e0be6c61d015ea74">xbretcod.h</a></li>
-<li>XB_INCONSISTENT_PARM_LENS&#160;:&#160;<a class="el" href="xbretcod_8h.html#adc4b24bfffa202f8df25409894e547b9">xbretcod.h</a></li>
-<li>XB_INVALID_BLOCK_NO&#160;:&#160;<a class="el" href="xbretcod_8h.html#a4e13b529b486c43ca600ce7d8ddbf3c2">xbretcod.h</a></li>
-<li>XB_INVALID_BLOCK_SIZE&#160;:&#160;<a class="el" href="xbretcod_8h.html#a1bd22921612389c37f6b2eac438c62c5">xbretcod.h</a></li>
-<li>XB_INVALID_DATA&#160;:&#160;<a class="el" href="xbretcod_8h.html#afb40bbed323ecb369dd430a2e1242f9a">xbretcod.h</a></li>
-<li>XB_INVALID_DATE&#160;:&#160;<a class="el" href="xbretcod_8h.html#a702475500357a27b8a34463be3e11925">xbretcod.h</a></li>
-<li>XB_INVALID_EXPRESSION&#160;:&#160;<a class="el" href="xbretcod_8h.html#a54db562c3cae97581812b4fccd52b71a">xbretcod.h</a></li>
-<li>XB_INVALID_FIELD&#160;:&#160;<a class="el" href="xbretcod_8h.html#a34180b2e2bd350ba2ebcdd1335e15d7e">xbretcod.h</a></li>
-<li>XB_INVALID_FIELD_LEN&#160;:&#160;<a class="el" href="xbretcod_8h.html#a7bd322c0efbba17f68ccccd6cf624411">xbretcod.h</a></li>
-<li>XB_INVALID_FIELD_NAME&#160;:&#160;<a class="el" href="xbretcod_8h.html#a59403978784130834cf39434cb73f96e">xbretcod.h</a></li>
-<li>XB_INVALID_FIELD_NO&#160;:&#160;<a class="el" href="xbretcod_8h.html#a09d6c08a44316f551108a74003efd381">xbretcod.h</a></li>
-<li>XB_INVALID_FIELD_TYPE&#160;:&#160;<a class="el" href="xbretcod_8h.html#a79e2588f067d6e236c0e5a2c0728ba9f">xbretcod.h</a></li>
-<li>XB_INVALID_FUNCTION&#160;:&#160;<a class="el" href="xbretcod_8h.html#a2b7e5e440dbcf5e6dc885b24dbe28742">xbretcod.h</a></li>
-<li>XB_INVALID_INDEX&#160;:&#160;<a class="el" href="xbretcod_8h.html#acd175ef0541e2cad424791bd87619dd4">xbretcod.h</a></li>
-<li>XB_INVALID_KEYNO&#160;:&#160;<a class="el" href="xbretcod_8h.html#aec2c0ac2bd62e0329ef130e4fbda39f8">xbretcod.h</a></li>
-<li>XB_INVALID_LOCK_OPTION&#160;:&#160;<a class="el" href="xbretcod_8h.html#ab45735e63c208eb7e6d6df31fd527aec">xbretcod.h</a></li>
-<li>XB_INVALID_MEMO_FIELD&#160;:&#160;<a class="el" href="xbretcod_8h.html#a187c50745f51bfe4aa6f70a92f16c59f">xbretcod.h</a></li>
-<li>XB_INVALID_NODELINK&#160;:&#160;<a class="el" href="xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb">xbretcod.h</a></li>
-<li>XB_INVALID_OBJECT&#160;:&#160;<a class="el" href="xbretcod_8h.html#a418c047353bc683d0fd6ecbbdd5b7885">xbretcod.h</a></li>
-<li>XB_INVALID_OPTION&#160;:&#160;<a class="el" href="xbretcod_8h.html#af1cd0baf346cad686fa4dd11f700012a">xbretcod.h</a></li>
-<li>XB_INVALID_PAGE&#160;:&#160;<a class="el" href="xbretcod_8h.html#ad0aba12b5ae2137f8d6abd28b47f95f0">xbretcod.h</a></li>
-<li>XB_INVALID_PARM&#160;:&#160;<a class="el" href="xbretcod_8h.html#a4cedf96581c9cbc9c14d07494143702d">xbretcod.h</a></li>
-<li>XB_INVALID_RECORD&#160;:&#160;<a class="el" href="xbretcod_8h.html#a0fd212f912b2e62700a66bae95bd73a1">xbretcod.h</a></li>
-<li>XB_INVALID_TABLE_NAME&#160;:&#160;<a class="el" href="xbretcod_8h.html#a53891c95a78483704d2a8e14c4499f92">xbretcod.h</a></li>
-<li>XB_INVALID_TAG&#160;:&#160;<a class="el" href="xbretcod_8h.html#a176d917912d3433f065483f905a4c50a">xbretcod.h</a></li>
-<li>XB_KEY_NOT_UNIQUE&#160;:&#160;<a class="el" href="xbretcod_8h.html#ad60dbb1862c0c1c2dc0464cfbfd93a34">xbretcod.h</a></li>
-<li>XB_LIMIT_REACHED&#160;:&#160;<a class="el" href="xbretcod_8h.html#a59f1a8a6aca19595c2d1804349a24850">xbretcod.h</a></li>
-<li>XB_LOCK&#160;:&#160;<a class="el" href="xbdbf_8h.html#a395a2e101a793bacabf6bc079d178e29">xbdbf.h</a></li>
-<li>XB_LOCK_FAILED&#160;:&#160;<a class="el" href="xbretcod_8h.html#a001e24b39e0f155fb1e892f5b1b9cff1">xbretcod.h</a></li>
-<li>XB_LOGICAL_FLD&#160;:&#160;<a class="el" href="xbdbf_8h.html#a2f6d5073af761bc1a806a2c7b1c1d886">xbdbf.h</a></li>
-<li>XB_MAX_ERROR_NO&#160;:&#160;<a class="el" href="xbretcod_8h.html#a299419a9c80e000b74bf97a2d24d6a3d">xbretcod.h</a></li>
-<li>XB_MEMCPY_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#aa2925f035e3b186d7efa14648ea0e86d">xbretcod.h</a></li>
-<li>XB_MEMO_FLD&#160;:&#160;<a class="el" href="xbdbf_8h.html#a23fa19b19cb43bd6dcc59a5a3f6c30ad">xbdbf.h</a></li>
-<li>XB_MULTI_USER&#160;:&#160;<a class="el" href="xbfile_8h.html#a05c0fc99ba71cf953d046d12f3f874bc">xbfile.h</a></li>
-<li>XB_NO_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">xbretcod.h</a></li>
-<li>XB_NO_MEMORY&#160;:&#160;<a class="el" href="xbretcod_8h.html#ae687fc7d872ba0475a8477e4447f9b54">xbretcod.h</a></li>
-<li>XB_NOT_FOUND&#160;:&#160;<a class="el" href="xbretcod_8h.html#ac2606659a54111334f5b02861e533700">xbretcod.h</a></li>
-<li>XB_NOT_OPEN&#160;:&#160;<a class="el" href="xbretcod_8h.html#a9474b400f647bdefbbb07e5177e8d7a1">xbretcod.h</a></li>
-<li>XB_NUMERIC_FLD&#160;:&#160;<a class="el" href="xbdbf_8h.html#ae9fb6d69cc5edc94d36ae403c22ec1c6">xbdbf.h</a></li>
-<li>XB_OPEN&#160;:&#160;<a class="el" href="xbdbf_8h.html#a9a6dafbb07cac744eb14094efa739409">xbdbf.h</a></li>
-<li>XB_OPEN_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#aaab55236993a1d3acb29206252a904c8">xbretcod.h</a></li>
-<li>XB_OVERLAY&#160;:&#160;<a class="el" href="xbdbf_8h.html#a6fe10b307878b4612b04c2c876a4a592">xbdbf.h</a></li>
-<li>XB_PARSE_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#aec713cac2b03a0d536a2d16336ae7c0b">xbretcod.h</a></li>
-<li>XB_READ&#160;:&#160;<a class="el" href="xbfile_8h.html#ae58c73e0ba237fcf67ee20feea6c2743">xbfile.h</a></li>
-<li>XB_READ_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#adbd40585db8bb748d191f94a33bac710">xbretcod.h</a></li>
-<li>XB_READ_WRITE&#160;:&#160;<a class="el" href="xbfile_8h.html#af991a288c327f6857e90156ea734a633">xbfile.h</a></li>
-<li>XB_RENAME_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#a373f30b2efcbbab9f6d060fb3fe8cba3">xbretcod.h</a></li>
-<li>XB_SEEK_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#a0455ad8719e153b08ec68b10c81e9f41">xbretcod.h</a></li>
-<li>XB_SINGLE_USER&#160;:&#160;<a class="el" href="xbfile_8h.html#a9ec4d60a008c667d9861e3b3814f0232">xbfile.h</a></li>
-<li>XB_SYNTAX_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#a5db3a90f215534143bdde81253729c7f">xbretcod.h</a></li>
-<li>XB_TABLE_NOT_LOCKED&#160;:&#160;<a class="el" href="xbretcod_8h.html#af6aaf779fddecca521d785666f6dc56b">xbretcod.h</a></li>
-<li>XB_UNBALANCED_PARENS&#160;:&#160;<a class="el" href="xbretcod_8h.html#aff5646a6b0884ff81004de6961473ea6">xbretcod.h</a></li>
-<li>XB_UNBALANCED_QUOTES&#160;:&#160;<a class="el" href="xbretcod_8h.html#aedfa20a6c4eb9ba3063ba56be8280eac">xbretcod.h</a></li>
-<li>XB_UNLOCK&#160;:&#160;<a class="el" href="xbdbf_8h.html#a21389b73e7b4e7e185fa635b9e354c2e">xbdbf.h</a></li>
-<li>XB_UPDATED&#160;:&#160;<a class="el" href="xbdbf_8h.html#a26e7eeda69f32bc88b08a208ca9e7991">xbdbf.h</a></li>
-<li>XB_WRITE&#160;:&#160;<a class="el" href="xbfile_8h.html#abbf99e259c2f31572c886da6d85b1359">xbfile.h</a></li>
-<li>XB_WRITE_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#aef34ebe6726057f805d6063130280549">xbretcod.h</a></li>
-<li>xbFalse&#160;:&#160;<a class="el" href="xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc">xbtypes.h</a></li>
-<li>xbFileNo&#160;:&#160;<a class="el" href="xbtypes_8h.html#a2c65f692ac861990861575e18f72f6eb">xbtypes.h</a></li>
-<li>xbTrue&#160;:&#160;<a class="el" href="xbtypes_8h.html#ab0ae00665298fe7f5292691cb98ec2d9">xbtypes.h</a></li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/globals_defs.html b/docs/doxygen/html/globals_defs.html
deleted file mode 100644
index 7857849..0000000
--- a/docs/doxygen/html/globals_defs.html
+++ /dev/null
@@ -1,180 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: Globals</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-</div><!-- top -->
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div class="contents">
-&#160;
-
-<h3><a id="index_j" name="index_j"></a>- j -</h3><ul>
-<li>JUL_OFFSET&#160;:&#160;<a class="el" href="xbdate_8h.html#a119f32fda399e2ebc2d734012a130e8f">xbdate.h</a></li>
-</ul>
-
-
-<h3><a id="index_l" name="index_l"></a>- l -</h3><ul>
-<li>LK_CLIPPER&#160;:&#160;<a class="el" href="xbdbf_8h.html#a01d6d7910b0da2170eb904a97d864a41">xbdbf.h</a></li>
-<li>LK_DBASE&#160;:&#160;<a class="el" href="xbdbf_8h.html#a4c08d01bd69e295b001bd00a228d8106">xbdbf.h</a></li>
-<li>LK_FOX&#160;:&#160;<a class="el" href="xbdbf_8h.html#a65e29186276222f460a7171803e07adf">xbdbf.h</a></li>
-<li>LK_XBASE64&#160;:&#160;<a class="el" href="xbdbf_8h.html#a42aea0ccd94f7422c8e0d7422dce85a4">xbdbf.h</a></li>
-</ul>
-
-
-<h3><a id="index_v" name="index_v"></a>- v -</h3><ul>
-<li>VERBOSE&#160;:&#160;<a class="el" href="xb__test__string_8cpp.html#a42f8c497a1968074f38bf5055c650dca">xb_test_string.cpp</a></li>
-</ul>
-
-
-<h3><a id="index_x" name="index_x"></a>- x -</h3><ul>
-<li>XB_ACTIVE_RECS&#160;:&#160;<a class="el" href="xbdbf_8h.html#a1c44bb25bf2e23a3a9d3d2312df0b592">xbdbf.h</a></li>
-<li>XB_ALL_RECS&#160;:&#160;<a class="el" href="xbdbf_8h.html#a8bd17730da3ba5c55a6a07bc482dd0e4">xbdbf.h</a></li>
-<li>XB_ALREADY_OPEN&#160;:&#160;<a class="el" href="xbretcod_8h.html#aa2ff8301503f446c6a5f6510090e520f">xbretcod.h</a></li>
-<li>XB_BLOCKREAD_NOT_ENABLED&#160;:&#160;<a class="el" href="xbretcod_8h.html#aae9241d91cfb37f5d236128b3bce0a4a">xbretcod.h</a></li>
-<li>XB_BOF&#160;:&#160;<a class="el" href="xbretcod_8h.html#ade5f3a7cf1467d12761e4e21b5e4200f">xbretcod.h</a></li>
-<li>XB_CHAR_FLD&#160;:&#160;<a class="el" href="xbdbf_8h.html#a20f739b9d9dc6a002a246a999e76aeaa">xbdbf.h</a></li>
-<li>XB_CHAREOF&#160;:&#160;<a class="el" href="xbdbf_8h.html#ada1115f596131888c04df61546b198c4">xbdbf.h</a></li>
-<li>XB_CHARHDR&#160;:&#160;<a class="el" href="xbdbf_8h.html#a35d56cac7959c1e5c761684ced3f1e17">xbdbf.h</a></li>
-<li>XB_CLOSE_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#a030684d5541cf6127a76d81b0684b235">xbretcod.h</a></li>
-<li>XB_CLOSED&#160;:&#160;<a class="el" href="xbdbf_8h.html#a843ca4569326dbd1d0647899b0eb512f">xbdbf.h</a></li>
-<li>XB_DATE_FLD&#160;:&#160;<a class="el" href="xbdbf_8h.html#a7f685e6f5fe804b2174725a27ce73adc">xbdbf.h</a></li>
-<li>XB_DBF_FILE_NOT_OPEN&#160;:&#160;<a class="el" href="xbretcod_8h.html#a8104510b347c87998eadd0b27201e3c2">xbretcod.h</a></li>
-<li>XB_DELETE_FAILED&#160;:&#160;<a class="el" href="xbretcod_8h.html#ada15513935d5ede9216f07c0438f34d2">xbretcod.h</a></li>
-<li>XB_DELETED_RECS&#160;:&#160;<a class="el" href="xbdbf_8h.html#acc0a441854ed92b9d65d1181a97cad43">xbdbf.h</a></li>
-<li>XB_DIRECTORY_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#af532df74147ce2d872f61abfee49c53e">xbretcod.h</a></li>
-<li>XB_DONTOVERLAY&#160;:&#160;<a class="el" href="xbdbf_8h.html#a7b797840abdb3291373d15978103a778">xbdbf.h</a></li>
-<li>XB_DUP_TABLE_OR_ALIAS&#160;:&#160;<a class="el" href="xbretcod_8h.html#ac18036408d10e5eee1bf76cf92352b95">xbretcod.h</a></li>
-<li>XB_EMPTY&#160;:&#160;<a class="el" href="xbretcod_8h.html#a18068d0cbe0c7a1b4dd3176220180c29">xbretcod.h</a></li>
-<li>XB_EOF&#160;:&#160;<a class="el" href="xbretcod_8h.html#a8b47031e90c3f86306c7058e4490d3b7">xbretcod.h</a></li>
-<li>XB_FILE_EXISTS&#160;:&#160;<a class="el" href="xbretcod_8h.html#a54303a9677dbd5342233f33dd08c64d0">xbretcod.h</a></li>
-<li>XB_FILE_NOT_FOUND&#160;:&#160;<a class="el" href="xbretcod_8h.html#ad090af330c93111d12f6de35dbb065bc">xbretcod.h</a></li>
-<li>XB_FILE_TYPE_NOT_SUPPORTED&#160;:&#160;<a class="el" href="xbretcod_8h.html#ab7b9130a5f1df9975cfeaf6241933596">xbretcod.h</a></li>
-<li>XB_FLOAT_FLD&#160;:&#160;<a class="el" href="xbdbf_8h.html#a96ab4218d70ab603b4866354ce8c18cd">xbdbf.h</a></li>
-<li>XB_FMT_MONTH&#160;:&#160;<a class="el" href="xbdate_8h.html#aeacf2f7cc897ab5bd64781c0fb52b75d">xbdate.h</a></li>
-<li>XB_FMT_WEEK&#160;:&#160;<a class="el" href="xbdate_8h.html#a8f22704d3fd93fa85dd93b6c699e8178">xbdate.h</a></li>
-<li>XB_FMT_YEAR&#160;:&#160;<a class="el" href="xbdate_8h.html#aa29d78982a9e007874af1c4f4e4d1aa4">xbdate.h</a></li>
-<li>XB_INCOMPATIBLE_OPERANDS&#160;:&#160;<a class="el" href="xbretcod_8h.html#af141ec58b7ca7360e0be6c61d015ea74">xbretcod.h</a></li>
-<li>XB_INCONSISTENT_PARM_LENS&#160;:&#160;<a class="el" href="xbretcod_8h.html#adc4b24bfffa202f8df25409894e547b9">xbretcod.h</a></li>
-<li>XB_INVALID_BLOCK_NO&#160;:&#160;<a class="el" href="xbretcod_8h.html#a4e13b529b486c43ca600ce7d8ddbf3c2">xbretcod.h</a></li>
-<li>XB_INVALID_BLOCK_SIZE&#160;:&#160;<a class="el" href="xbretcod_8h.html#a1bd22921612389c37f6b2eac438c62c5">xbretcod.h</a></li>
-<li>XB_INVALID_DATA&#160;:&#160;<a class="el" href="xbretcod_8h.html#afb40bbed323ecb369dd430a2e1242f9a">xbretcod.h</a></li>
-<li>XB_INVALID_DATE&#160;:&#160;<a class="el" href="xbretcod_8h.html#a702475500357a27b8a34463be3e11925">xbretcod.h</a></li>
-<li>XB_INVALID_EXPRESSION&#160;:&#160;<a class="el" href="xbretcod_8h.html#a54db562c3cae97581812b4fccd52b71a">xbretcod.h</a></li>
-<li>XB_INVALID_FIELD&#160;:&#160;<a class="el" href="xbretcod_8h.html#a34180b2e2bd350ba2ebcdd1335e15d7e">xbretcod.h</a></li>
-<li>XB_INVALID_FIELD_LEN&#160;:&#160;<a class="el" href="xbretcod_8h.html#a7bd322c0efbba17f68ccccd6cf624411">xbretcod.h</a></li>
-<li>XB_INVALID_FIELD_NAME&#160;:&#160;<a class="el" href="xbretcod_8h.html#a59403978784130834cf39434cb73f96e">xbretcod.h</a></li>
-<li>XB_INVALID_FIELD_NO&#160;:&#160;<a class="el" href="xbretcod_8h.html#a09d6c08a44316f551108a74003efd381">xbretcod.h</a></li>
-<li>XB_INVALID_FIELD_TYPE&#160;:&#160;<a class="el" href="xbretcod_8h.html#a79e2588f067d6e236c0e5a2c0728ba9f">xbretcod.h</a></li>
-<li>XB_INVALID_FUNCTION&#160;:&#160;<a class="el" href="xbretcod_8h.html#a2b7e5e440dbcf5e6dc885b24dbe28742">xbretcod.h</a></li>
-<li>XB_INVALID_INDEX&#160;:&#160;<a class="el" href="xbretcod_8h.html#acd175ef0541e2cad424791bd87619dd4">xbretcod.h</a></li>
-<li>XB_INVALID_KEYNO&#160;:&#160;<a class="el" href="xbretcod_8h.html#aec2c0ac2bd62e0329ef130e4fbda39f8">xbretcod.h</a></li>
-<li>XB_INVALID_LOCK_OPTION&#160;:&#160;<a class="el" href="xbretcod_8h.html#ab45735e63c208eb7e6d6df31fd527aec">xbretcod.h</a></li>
-<li>XB_INVALID_MEMO_FIELD&#160;:&#160;<a class="el" href="xbretcod_8h.html#a187c50745f51bfe4aa6f70a92f16c59f">xbretcod.h</a></li>
-<li>XB_INVALID_NODELINK&#160;:&#160;<a class="el" href="xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb">xbretcod.h</a></li>
-<li>XB_INVALID_OBJECT&#160;:&#160;<a class="el" href="xbretcod_8h.html#a418c047353bc683d0fd6ecbbdd5b7885">xbretcod.h</a></li>
-<li>XB_INVALID_OPTION&#160;:&#160;<a class="el" href="xbretcod_8h.html#af1cd0baf346cad686fa4dd11f700012a">xbretcod.h</a></li>
-<li>XB_INVALID_PAGE&#160;:&#160;<a class="el" href="xbretcod_8h.html#ad0aba12b5ae2137f8d6abd28b47f95f0">xbretcod.h</a></li>
-<li>XB_INVALID_PARM&#160;:&#160;<a class="el" href="xbretcod_8h.html#a4cedf96581c9cbc9c14d07494143702d">xbretcod.h</a></li>
-<li>XB_INVALID_RECORD&#160;:&#160;<a class="el" href="xbretcod_8h.html#a0fd212f912b2e62700a66bae95bd73a1">xbretcod.h</a></li>
-<li>XB_INVALID_TABLE_NAME&#160;:&#160;<a class="el" href="xbretcod_8h.html#a53891c95a78483704d2a8e14c4499f92">xbretcod.h</a></li>
-<li>XB_INVALID_TAG&#160;:&#160;<a class="el" href="xbretcod_8h.html#a176d917912d3433f065483f905a4c50a">xbretcod.h</a></li>
-<li>XB_KEY_NOT_UNIQUE&#160;:&#160;<a class="el" href="xbretcod_8h.html#ad60dbb1862c0c1c2dc0464cfbfd93a34">xbretcod.h</a></li>
-<li>XB_LIMIT_REACHED&#160;:&#160;<a class="el" href="xbretcod_8h.html#a59f1a8a6aca19595c2d1804349a24850">xbretcod.h</a></li>
-<li>XB_LOCK&#160;:&#160;<a class="el" href="xbdbf_8h.html#a395a2e101a793bacabf6bc079d178e29">xbdbf.h</a></li>
-<li>XB_LOCK_FAILED&#160;:&#160;<a class="el" href="xbretcod_8h.html#a001e24b39e0f155fb1e892f5b1b9cff1">xbretcod.h</a></li>
-<li>XB_LOGICAL_FLD&#160;:&#160;<a class="el" href="xbdbf_8h.html#a2f6d5073af761bc1a806a2c7b1c1d886">xbdbf.h</a></li>
-<li>XB_MAX_ERROR_NO&#160;:&#160;<a class="el" href="xbretcod_8h.html#a299419a9c80e000b74bf97a2d24d6a3d">xbretcod.h</a></li>
-<li>XB_MEMCPY_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#aa2925f035e3b186d7efa14648ea0e86d">xbretcod.h</a></li>
-<li>XB_MEMO_FLD&#160;:&#160;<a class="el" href="xbdbf_8h.html#a23fa19b19cb43bd6dcc59a5a3f6c30ad">xbdbf.h</a></li>
-<li>XB_MULTI_USER&#160;:&#160;<a class="el" href="xbfile_8h.html#a05c0fc99ba71cf953d046d12f3f874bc">xbfile.h</a></li>
-<li>XB_NO_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">xbretcod.h</a></li>
-<li>XB_NO_MEMORY&#160;:&#160;<a class="el" href="xbretcod_8h.html#ae687fc7d872ba0475a8477e4447f9b54">xbretcod.h</a></li>
-<li>XB_NOT_FOUND&#160;:&#160;<a class="el" href="xbretcod_8h.html#ac2606659a54111334f5b02861e533700">xbretcod.h</a></li>
-<li>XB_NOT_OPEN&#160;:&#160;<a class="el" href="xbretcod_8h.html#a9474b400f647bdefbbb07e5177e8d7a1">xbretcod.h</a></li>
-<li>XB_NUMERIC_FLD&#160;:&#160;<a class="el" href="xbdbf_8h.html#ae9fb6d69cc5edc94d36ae403c22ec1c6">xbdbf.h</a></li>
-<li>XB_OPEN&#160;:&#160;<a class="el" href="xbdbf_8h.html#a9a6dafbb07cac744eb14094efa739409">xbdbf.h</a></li>
-<li>XB_OPEN_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#aaab55236993a1d3acb29206252a904c8">xbretcod.h</a></li>
-<li>XB_OVERLAY&#160;:&#160;<a class="el" href="xbdbf_8h.html#a6fe10b307878b4612b04c2c876a4a592">xbdbf.h</a></li>
-<li>XB_PARSE_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#aec713cac2b03a0d536a2d16336ae7c0b">xbretcod.h</a></li>
-<li>XB_READ&#160;:&#160;<a class="el" href="xbfile_8h.html#ae58c73e0ba237fcf67ee20feea6c2743">xbfile.h</a></li>
-<li>XB_READ_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#adbd40585db8bb748d191f94a33bac710">xbretcod.h</a></li>
-<li>XB_READ_WRITE&#160;:&#160;<a class="el" href="xbfile_8h.html#af991a288c327f6857e90156ea734a633">xbfile.h</a></li>
-<li>XB_RENAME_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#a373f30b2efcbbab9f6d060fb3fe8cba3">xbretcod.h</a></li>
-<li>XB_SEEK_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#a0455ad8719e153b08ec68b10c81e9f41">xbretcod.h</a></li>
-<li>XB_SINGLE_USER&#160;:&#160;<a class="el" href="xbfile_8h.html#a9ec4d60a008c667d9861e3b3814f0232">xbfile.h</a></li>
-<li>XB_SYNTAX_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#a5db3a90f215534143bdde81253729c7f">xbretcod.h</a></li>
-<li>XB_TABLE_NOT_LOCKED&#160;:&#160;<a class="el" href="xbretcod_8h.html#af6aaf779fddecca521d785666f6dc56b">xbretcod.h</a></li>
-<li>XB_UNBALANCED_PARENS&#160;:&#160;<a class="el" href="xbretcod_8h.html#aff5646a6b0884ff81004de6961473ea6">xbretcod.h</a></li>
-<li>XB_UNBALANCED_QUOTES&#160;:&#160;<a class="el" href="xbretcod_8h.html#aedfa20a6c4eb9ba3063ba56be8280eac">xbretcod.h</a></li>
-<li>XB_UNLOCK&#160;:&#160;<a class="el" href="xbdbf_8h.html#a21389b73e7b4e7e185fa635b9e354c2e">xbdbf.h</a></li>
-<li>XB_UPDATED&#160;:&#160;<a class="el" href="xbdbf_8h.html#a26e7eeda69f32bc88b08a208ca9e7991">xbdbf.h</a></li>
-<li>XB_WRITE&#160;:&#160;<a class="el" href="xbfile_8h.html#abbf99e259c2f31572c886da6d85b1359">xbfile.h</a></li>
-<li>XB_WRITE_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#aef34ebe6726057f805d6063130280549">xbretcod.h</a></li>
-<li>xbFalse&#160;:&#160;<a class="el" href="xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc">xbtypes.h</a></li>
-<li>xbFileNo&#160;:&#160;<a class="el" href="xbtypes_8h.html#a2c65f692ac861990861575e18f72f6eb">xbtypes.h</a></li>
-<li>xbTrue&#160;:&#160;<a class="el" href="xbtypes_8h.html#ab0ae00665298fe7f5292691cb98ec2d9">xbtypes.h</a></li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/globals_func.html b/docs/doxygen/html/globals_func.html
deleted file mode 100644
index 601295d..0000000
--- a/docs/doxygen/html/globals_func.html
+++ /dev/null
@@ -1,114 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: Globals</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-</div><!-- top -->
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div class="contents">
-&#160;
-
-<h3><a id="index_c" name="index_c"></a>- c -</h3><ul>
-<li>ChronTime()&#160;:&#160;<a class="el" href="tstfuncs_8cpp.html#af990eed1e43605771a5810196b4043f7">tstfuncs.cpp</a></li>
-</ul>
-
-
-<h3><a id="index_d" name="index_d"></a>- d -</h3><ul>
-<li>dblEquals()&#160;:&#160;<a class="el" href="tstfuncs_8cpp.html#a8b8e417213c57f2ea0bcb61a7fb28860">tstfuncs.cpp</a></li>
-<li>dblMax()&#160;:&#160;<a class="el" href="tstfuncs_8cpp.html#a69a6e718e066af7f8392e5f1fea40d1b">tstfuncs.cpp</a></li>
-<li>dblMin()&#160;:&#160;<a class="el" href="tstfuncs_8cpp.html#a4d7b8f3f1ce52c6c0a281f25419f4c93">tstfuncs.cpp</a></li>
-<li>DevTester()&#160;:&#160;<a class="el" href="xb__test__expression_8cpp.html#aee57237c5f5b9b4d80e84bf530eb42bc">xb_test_expression.cpp</a></li>
-</ul>
-
-
-<h3><a id="index_g" name="index_g"></a>- g -</h3><ul>
-<li>GetNextSqlCmd()&#160;:&#160;<a class="el" href="xb__execsql_8cpp.html#af888ba5e7e94d92c2165362b87f1ea0e">xb_execsql.cpp</a></li>
-</ul>
-
-
-<h3><a id="index_i" name="index_i"></a>- i -</h3><ul>
-<li>InitTime()&#160;:&#160;<a class="el" href="tstfuncs_8cpp.html#ab1f17da15e67a8b2460d5a88b7a3db6e">tstfuncs.cpp</a></li>
-</ul>
-
-
-<h3><a id="index_m" name="index_m"></a>- m -</h3><ul>
-<li>main()&#160;:&#160;<a class="el" href="xb__cfg__check_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_cfg_check.cpp</a>, <a class="el" href="xb__test__lock_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_lock.cpp</a>, <a class="el" href="xb__test__lock2_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_lock2.cpp</a>, <a class="el" href="xb__test__log_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_log.cpp</a>, <a class="el" href="xb__test__mdx_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_mdx.cpp</a>, <a class="el" href="xb__test__ndx_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_ndx.cpp</a>, <a class="el" href="xb__test__sql_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_sql.cpp</a>, <a class="el" href="xb__test__string_8cpp.html#aabf71bc9adb6daf457b2ea8879ae537f">xb_test_string.cpp</a>, <a class="el" href="xb__test__tblmgr_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_tblmgr.cpp</a>, <a class="el" href="xb__test__uda_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_uda.cpp</a>, <a class="el" href="xb__test__xbase_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_xbase.cpp</a>, <a class="el" href="xb__test__linklist_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_linklist.cpp</a>, <a class="el" href="xb__copydbf_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_copydbf.cpp</a>, <a class="el" href="xb__dbfutil_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_dbfutil.cpp</a>, <a class="el" href="xb__deletall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_deletall.cpp</a>, <a class="el" href="xb__dumpdbt_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_dumpdbt.cpp</a>, <a class="el" href="xb__dumprecs_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_dumprecs.cpp</a>, <a class="el" href="xb__execsql_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_execsql.cpp</a>, <a class="el" href="xb__pack_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_pack.cpp</a>, <a class="el" href="xb__tblinfo_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_tblinfo.cpp</a>, <a class="el" href="xb__undelall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_undelall.cpp</a>, <a class="el" href="xb__test__date_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_date.cpp</a>, <a class="el" href="xb__ex__expression_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_expression.cpp</a>, <a class="el" href="xb__ex__sql_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_ex_sql.cpp</a>, <a class="el" href="xb__ex__ssv_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_ex_ssv.cpp</a>, <a class="el" href="xb__ex__string_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_string.cpp</a>, <a class="el" href="xb__ex__v3__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_v3_create_dbf.cpp</a>, <a class="el" href="xb__ex__v3__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_v3_upd_dbf.cpp</a>, <a class="el" href="xb__ex__v4__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_v4_create_dbf.cpp</a>, <a class="el" href="xb__ex__v4__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_v4_upd_dbf.cpp</a>, <a class="el" href="xb__test__bcd_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_bcd.cpp</a>, <a class="el" href="xb__test__blockread_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_blockread.cpp</a>, <a class="el" href="xb__ex__date_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_date.cpp</a>, <a class="el" href="xb__test__dbf__v3__memos_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_dbf_v3_memos.cpp</a>, <a class="el" href="xb__test__dbf__v3__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_dbf_v3_nomemos.cpp</a>, <a class="el" href="xb__test__dbf__v4__memos_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_dbf_v4_memos.cpp</a>, <a class="el" href="xb__test__dbf__v4__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_dbf_v4_nomemos.cpp</a>, <a class="el" href="xb__test__expnode_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_expnode.cpp</a>, <a class="el" href="xb__test__expression_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_expression.cpp</a>, <a class="el" href="xb__test__file_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_file.cpp</a>, <a class="el" href="xb__test__filter_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_filter.cpp</a>, <a class="el" href="xb__test__funcs_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_funcs.cpp</a></li>
-</ul>
-
-
-<h3><a id="index_p" name="index_p"></a>- p -</h3><ul>
-<li>PrintHelp()&#160;:&#160;<a class="el" href="xb__dbfutil_8cpp.html#a9c55a055e1cd4249c7f47e19dc7ac564">xb_dbfutil.cpp</a>, <a class="el" href="xb__deletall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_deletall.cpp</a>, <a class="el" href="xb__dumpdbt_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_dumpdbt.cpp</a>, <a class="el" href="xb__dumprecs_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_dumprecs.cpp</a>, <a class="el" href="xb__pack_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_pack.cpp</a>, <a class="el" href="xb__tblinfo_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_tblinfo.cpp</a>, <a class="el" href="xb__undelall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_undelall.cpp</a>, <a class="el" href="xb__copydbf_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_copydbf.cpp</a></li>
-<li>PrintResult()&#160;:&#160;<a class="el" href="xb__ex__expression_8cpp.html#a3234afc912211aec54c10d363d28cbda">xb_ex_expression.cpp</a></li>
-<li>PrintVersion()&#160;:&#160;<a class="el" href="xb__copydbf_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_copydbf.cpp</a>, <a class="el" href="xb__dbfutil_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_dbfutil.cpp</a>, <a class="el" href="xb__deletall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_deletall.cpp</a>, <a class="el" href="xb__dumpdbt_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_dumpdbt.cpp</a>, <a class="el" href="xb__dumprecs_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_dumprecs.cpp</a>, <a class="el" href="xb__pack_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_pack.cpp</a>, <a class="el" href="xb__tblinfo_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_tblinfo.cpp</a>, <a class="el" href="xb__undelall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_undelall.cpp</a></li>
-</ul>
-
-
-<h3><a id="index_t" name="index_t"></a>- t -</h3><ul>
-<li>TestMethod()&#160;:&#160;<a class="el" href="tstfuncs_8cpp.html#a265547b80a3aef5836952bede5288e2c">tstfuncs.cpp</a>, <a class="el" href="xb__test__expression_8cpp.html#ad52c27685018dda7c5c4b26fb445860e">xb_test_expression.cpp</a></li>
-<li>TestTokenMethod()&#160;:&#160;<a class="el" href="xb__test__expression_8cpp.html#a440d64b55abaa9e14e73ecc132d1084d">xb_test_expression.cpp</a></li>
-<li>TestWeight()&#160;:&#160;<a class="el" href="xb__test__expression_8cpp.html#af56b6dbc38e0d23caaf6531526315379">xb_test_expression.cpp</a></li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/hierarchy.html b/docs/doxygen/html/hierarchy.html
deleted file mode 100644
index 0644499..0000000
--- a/docs/doxygen/html/hierarchy.html
+++ /dev/null
@@ -1,88 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: Class Hierarchy</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-</div><!-- top -->
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div class="header">
- <div class="headertitle"><div class="title">Class Hierarchy</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock">This inheritance list is sorted roughly, but not completely, alphabetically:</div><div class="directory">
-<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span>]</div><table class="directory">
-<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structxb_1_1xbSchema.html" target="_self">xb::xbSchema</a></td><td class="desc">Schema used for defining tables with CreateTable methods </td></tr>
-<tr id="row_1_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_1_" class="arrow" onclick="toggleFolder('1_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbSsv.html" target="_self">xb::xbSsv</a></td><td class="desc">Class for handling shared system variables </td></tr>
-<tr id="row_1_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbDate.html" target="_self">xb::xbDate</a></td><td class="desc">XbDate class </td></tr>
-<tr id="row_1_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_1_1_" class="arrow" onclick="toggleFolder('1_1_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbFile.html" target="_self">xb::xbFile</a></td><td class="desc">Class for handling low level file I/O </td></tr>
-<tr id="row_1_1_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbDbf.html" target="_self">xb::xbDbf</a></td><td class="desc">Base class for handling dbf files/tables </td></tr>
-<tr id="row_1_2_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_1_2_" class="arrow" onclick="toggleFolder('1_2_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbTblMgr.html" target="_self">xb::xbTblMgr</a></td><td class="desc"></td></tr>
-<tr id="row_1_2_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbXBase.html" target="_self">xb::xbXBase</a></td><td class="desc">XbXbase class </td></tr>
-<tr id="row_2_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbString.html" target="_self">xb::xbString</a></td><td class="desc">Class for handling string data </td></tr>
-<tr id="row_3_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structxb_1_1xbTblList.html" target="_self">xb::xbTblList</a></td><td class="desc"></td></tr>
-</table>
-</div><!-- directory -->
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/menudata.js b/docs/doxygen/html/menudata.js
deleted file mode 100644
index 2959441..0000000
--- a/docs/doxygen/html/menudata.js
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- @licstart The following is the entire license notice for the JavaScript code in this file.
-
- The MIT License (MIT)
-
- Copyright (C) 1997-2020 by Dimitri van Heesch
-
- Permission is hereby granted, free of charge, to any person obtaining a copy of this software
- and associated documentation files (the "Software"), to deal in the Software without restriction,
- including without limitation the rights to use, copy, modify, merge, publish, distribute,
- sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all copies or
- substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
- BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
- @licend The above is the entire license notice for the JavaScript code in this file
-*/
-var menudata={children:[
-{text:"Main Page",url:"index.html"},
-{text:"Namespaces",url:"namespaces.html",children:[
-{text:"Namespace List",url:"namespaces.html"},
-{text:"Namespace Members",url:"namespacemembers.html",children:[
-{text:"All",url:"namespacemembers.html"},
-{text:"Functions",url:"namespacemembers_func.html"},
-{text:"Variables",url:"namespacemembers_vars.html"},
-{text:"Typedefs",url:"namespacemembers_type.html"}]}]},
-{text:"Data Structures",url:"annotated.html",children:[
-{text:"Data Structures",url:"annotated.html"},
-{text:"Data Structure Index",url:"classes.html"},
-{text:"Class Hierarchy",url:"hierarchy.html"},
-{text:"Data Fields",url:"functions.html",children:[
-{text:"All",url:"functions.html",children:[
-{text:"a",url:"functions.html#index_a"},
-{text:"b",url:"functions_b.html#index_b"},
-{text:"c",url:"functions_c.html#index_c"},
-{text:"d",url:"functions_d.html#index_d"},
-{text:"e",url:"functions_e.html#index_e"},
-{text:"f",url:"functions_f.html#index_f"},
-{text:"g",url:"functions_g.html#index_g"},
-{text:"h",url:"functions_h.html#index_h"},
-{text:"i",url:"functions_i.html#index_i"},
-{text:"j",url:"functions_j.html#index_j"},
-{text:"l",url:"functions_l.html#index_l"},
-{text:"m",url:"functions_m.html#index_m"},
-{text:"n",url:"functions_n.html#index_n"},
-{text:"o",url:"functions_o.html#index_o"},
-{text:"p",url:"functions_p.html#index_p"},
-{text:"r",url:"functions_r.html#index_r"},
-{text:"s",url:"functions_s.html#index_s"},
-{text:"t",url:"functions_t.html#index_t"},
-{text:"u",url:"functions_u.html#index_u"},
-{text:"v",url:"functions_v.html#index_v"},
-{text:"w",url:"functions_w.html#index_w"},
-{text:"x",url:"functions_x.html#index_x"},
-{text:"y",url:"functions_y.html#index_y"},
-{text:"z",url:"functions_z.html#index_z"},
-{text:"~",url:"functions_~.html#index__7E"}]},
-{text:"Functions",url:"functions_func.html",children:[
-{text:"a",url:"functions_func.html#index_a"},
-{text:"b",url:"functions_func_b.html#index_b"},
-{text:"c",url:"functions_func_c.html#index_c"},
-{text:"d",url:"functions_func_d.html#index_d"},
-{text:"e",url:"functions_func_e.html#index_e"},
-{text:"f",url:"functions_func_f.html#index_f"},
-{text:"g",url:"functions_func_g.html#index_g"},
-{text:"h",url:"functions_func_h.html#index_h"},
-{text:"i",url:"functions_func_i.html#index_i"},
-{text:"j",url:"functions_func_j.html#index_j"},
-{text:"l",url:"functions_func_l.html#index_l"},
-{text:"m",url:"functions_func_m.html#index_m"},
-{text:"n",url:"functions_func_n.html#index_n"},
-{text:"o",url:"functions_func_o.html#index_o"},
-{text:"p",url:"functions_func_p.html#index_p"},
-{text:"r",url:"functions_func_r.html#index_r"},
-{text:"s",url:"functions_func_s.html#index_s"},
-{text:"t",url:"functions_func_t.html#index_t"},
-{text:"u",url:"functions_func_u.html#index_u"},
-{text:"v",url:"functions_func_v.html#index_v"},
-{text:"w",url:"functions_func_w.html#index_w"},
-{text:"x",url:"functions_func_x.html#index_x"},
-{text:"y",url:"functions_func_y.html#index_y"},
-{text:"z",url:"functions_func_z.html#index_z"},
-{text:"~",url:"functions_func_~.html#index__7E"}]},
-{text:"Variables",url:"functions_vars.html",children:[
-{text:"c",url:"functions_vars.html#index_c"},
-{text:"e",url:"functions_vars.html#index_e"},
-{text:"i",url:"functions_vars.html#index_i"},
-{text:"p",url:"functions_vars.html#index_p"},
-{text:"r",url:"functions_vars.html#index_r"},
-{text:"s",url:"functions_vars.html#index_s"},
-{text:"u",url:"functions_vars.html#index_u"},
-{text:"x",url:"functions_vars.html#index_x"}]},
-{text:"Related Functions",url:"functions_rela.html"}]}]},
-{text:"Files",url:"files.html",children:[
-{text:"File List",url:"files.html"},
-{text:"Globals",url:"globals.html",children:[
-{text:"All",url:"globals.html",children:[
-{text:"c",url:"globals.html#index_c"},
-{text:"d",url:"globals.html#index_d"},
-{text:"g",url:"globals.html#index_g"},
-{text:"i",url:"globals.html#index_i"},
-{text:"j",url:"globals.html#index_j"},
-{text:"l",url:"globals.html#index_l"},
-{text:"m",url:"globals.html#index_m"},
-{text:"p",url:"globals.html#index_p"},
-{text:"t",url:"globals.html#index_t"},
-{text:"v",url:"globals.html#index_v"},
-{text:"x",url:"globals.html#index_x"}]},
-{text:"Functions",url:"globals_func.html",children:[
-{text:"c",url:"globals_func.html#index_c"},
-{text:"d",url:"globals_func.html#index_d"},
-{text:"g",url:"globals_func.html#index_g"},
-{text:"i",url:"globals_func.html#index_i"},
-{text:"m",url:"globals_func.html#index_m"},
-{text:"p",url:"globals_func.html#index_p"},
-{text:"t",url:"globals_func.html#index_t"}]},
-{text:"Variables",url:"globals_vars.html"},
-{text:"Macros",url:"globals_defs.html",children:[
-{text:"j",url:"globals_defs.html#index_j"},
-{text:"l",url:"globals_defs.html#index_l"},
-{text:"v",url:"globals_defs.html#index_v"},
-{text:"x",url:"globals_defs.html#index_x"}]}]}]}]}
diff --git a/docs/doxygen/html/search/all_0.js b/docs/doxygen/html/search/all_0.js
deleted file mode 100644
index 1e4e72c..0000000
--- a/docs/doxygen/html/search/all_0.js
+++ /dev/null
@@ -1,9 +0,0 @@
-var searchData=
-[
- ['abort_0',['Abort',['../classxb_1_1xbDbf.html#a4edcf31390fbdc8c3558004770fd9f2f',1,'xb::xbDbf']]],
- ['addbackslash_1',['AddBackSlash',['../classxb_1_1xbString.html#a6c4fdb689d27a9d19a0b5b4236e1ca62',1,'xb::xbString']]],
- ['addtbltotbllist_2',['AddTblToTblList',['../classxb_1_1xbTblMgr.html#af16832ff2bfaee09265652e0fc03709a',1,'xb::xbTblMgr::AddTblToTblList(xbDbf *d, const xbString &amp;sFqTblName)'],['../classxb_1_1xbTblMgr.html#a2033188e9b08778188a034a6fc90ca85',1,'xb::xbTblMgr::AddTblToTblList(xbDbf *d, const xbString &amp;sFqTblName, const xbString &amp;sTblAlias)']]],
- ['append_3',['Append',['../classxb_1_1xbString.html#a8f202e4798491f2ae9ce51ff58dd5815',1,'xb::xbString::Append(const xbString &amp;s)'],['../classxb_1_1xbString.html#a1922319303feb6da1f40b5994c5e8240',1,'xb::xbString::Append(const char *s)'],['../classxb_1_1xbString.html#a097453cb71fbf0b5511cf1259ddce4fb',1,'xb::xbString::Append(const char *s, xbUInt32 iByteCount)'],['../classxb_1_1xbString.html#a093c6ab5df375a2589755bb8f48fa5c7',1,'xb::xbString::Append(char c)']]],
- ['appendrecord_4',['AppendRecord',['../classxb_1_1xbDbf.html#a5b412dd796241673eb1aa2c93513d69b',1,'xb::xbDbf']]],
- ['assign_5',['Assign',['../classxb_1_1xbString.html#a85bef82dfa22122a1ab8dfe58a107d96',1,'xb::xbString::Assign(const char *srcStr, xbUInt32 lStartPos, xbUInt32 lCopyLen)'],['../classxb_1_1xbString.html#a08eb7ca6740423acab4e8bd7a6c8043d',1,'xb::xbString::Assign(const char *srcStr, xbUInt32 lStartPos)'],['../classxb_1_1xbString.html#ac6afd224dfbe439ce083c8dd1ad3246c',1,'xb::xbString::Assign(const xbString &amp;s, xbUInt32 pos, xbUInt32 lCopyLen)'],['../classxb_1_1xbString.html#a4f1d709d9f6c56959e8549157b4ee68c',1,'xb::xbString::Assign(const xbString &amp;s, xbUInt32 lCopyLen)']]]
-];
diff --git a/docs/doxygen/html/search/all_10.js b/docs/doxygen/html/search/all_10.js
deleted file mode 100644
index 8645b5c..0000000
--- a/docs/doxygen/html/search/all_10.js
+++ /dev/null
@@ -1,28 +0,0 @@
-var searchData=
-[
- ['salias_0',['sAlias',['../classxb_1_1xbDbf.html#a73f9c792d0a769e2e604c1855245a276',1,'xb::xbDbf']]],
- ['schemaptr_1',['SchemaPtr',['../classxb_1_1xbDbf.html#ad8c8b5eb12063bb898da1b2cc02cfce7',1,'xb::xbDbf']]],
- ['set_2',['Set',['../classxb_1_1xbDate.html#a4b0cde152b5de0f7d26608d1445110b6',1,'xb::xbDate::Set()'],['../classxb_1_1xbString.html#ab85753d2c39882e946a8468cbb587700',1,'xb::xbString::Set(const char *s)'],['../classxb_1_1xbString.html#ac0d08bd688fd0e3707e32886d0dfeb09',1,'xb::xbString::Set(const xbString &amp;s)'],['../classxb_1_1xbString.html#a6eba6ccd0c805a22516de2c18a30f8a3',1,'xb::xbString::Set(const char *s, xbUInt32 ulSize)']]],
- ['setautocommit_3',['SetAutoCommit',['../classxb_1_1xbDbf.html#a4cf7f0d423164f3cf074ae41f96f4e90',1,'xb::xbDbf']]],
- ['setblocksize_4',['SetBlockSize',['../classxb_1_1xbFile.html#a991c5676a6f38fa752435390989f413e',1,'xb::xbFile']]],
- ['setdatadirectory_5',['SetDataDirectory',['../classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c',1,'xb::xbSsv']]],
- ['setdefaultautocommit_6',['SetDefaultAutoCommit',['../classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd',1,'xb::xbSsv']]],
- ['setdefaultdateformat_7',['SetDefaultDateFormat',['../classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c',1,'xb::xbSsv']]],
- ['setdirectory_8',['SetDirectory',['../classxb_1_1xbFile.html#ae78a85255488bc78964c16946dbaead3',1,'xb::xbFile']]],
- ['setendiantype_9',['SetEndianType',['../classxb_1_1xbSsv.html#a904ec348fd029d4a76e72b8fde636108',1,'xb::xbSsv']]],
- ['setfilename_10',['SetFileName',['../classxb_1_1xbFile.html#a5419eb27e56822f828b2b88a9502a636',1,'xb::xbFile']]],
- ['setfqfilename_11',['SetFqFileName',['../classxb_1_1xbFile.html#aee832fa11db2077a532f49e1329bd05a',1,'xb::xbFile']]],
- ['sethomefolders_12',['SetHomeFolders',['../classxb_1_1xbFile.html#a060acbfaa8d528f86cb59301814b414a',1,'xb::xbFile']]],
- ['setlogdirectory_13',['SetLogDirectory',['../classxb_1_1xbSsv.html#a7b992ed97281bf25b5b66f5df686225e',1,'xb::xbSsv::SetLogDirectory()'],['../classxb_1_1xbXBase.html#a48d82dbe298c6f4cf68a63ac82dd8292',1,'xb::xbXBase::SetLogDirectory(const xbString &amp;sLogFileDirectory)']]],
- ['setlogfilename_14',['SetLogFileName',['../classxb_1_1xbXBase.html#a94010b88a309315ef980715eb581336c',1,'xb::xbXBase']]],
- ['setlogsize_15',['SetLogSize',['../classxb_1_1xbXBase.html#a666a0cb5b76ec7a9a3677d339e0c6b42',1,'xb::xbXBase']]],
- ['setmultiuser_16',['SetMultiUser',['../classxb_1_1xbSsv.html#aba6e59512f7172dd55dcf92059e5928c',1,'xb::xbSsv']]],
- ['setnum_17',['SetNum',['../classxb_1_1xbString.html#a3af5b1f111f94b0667551fcbd1d97abd',1,'xb::xbString']]],
- ['setversion_18',['SetVersion',['../classxb_1_1xbDbf.html#a7e63e852418f337eb7c44de5dcd50323',1,'xb::xbDbf']]],
- ['snullstring_19',['sNullString',['../classxb_1_1xbSsv.html#a9dec3164c3b264882df634915ecf21da',1,'xb::xbSsv']]],
- ['sprintf_20',['Sprintf',['../classxb_1_1xbString.html#a9e9bfa29d86377b915f1628aeb0e9195',1,'xb::xbString']]],
- ['str_21',['Str',['../classxb_1_1xbDate.html#ab43a5d8d929767c0ffdd722972bb8cc0',1,'xb::xbDate::Str()'],['../classxb_1_1xbString.html#a6715f4c0010f3ab487c9d787838a29b3',1,'xb::xbString::Str() const']]],
- ['strncpy_22',['strncpy',['../classxb_1_1xbString.html#a3bc9e856c34f0c240a6e36e5b6e3ea7b',1,'xb::xbString']]],
- ['swapchars_23',['SwapChars',['../classxb_1_1xbString.html#a054683872e1f05d11c2cf8683a63a6fe',1,'xb::xbString']]],
- ['sysdate_24',['Sysdate',['../classxb_1_1xbDate.html#a40ba54a58d64cf56266f020f91584192',1,'xb::xbDate']]]
-];
diff --git a/docs/doxygen/html/search/all_15.js b/docs/doxygen/html/search/all_15.js
deleted file mode 100644
index d8f30c5..0000000
--- a/docs/doxygen/html/search/all_15.js
+++ /dev/null
@@ -1,231 +0,0 @@
-var searchData=
-[
- ['xb_0',['xb',['../namespacexb.html',1,'']]],
- ['xb_5factive_5frecs_1',['XB_ACTIVE_RECS',['../xbdbf_8h.html#a1c44bb25bf2e23a3a9d3d2312df0b592',1,'xbdbf.h']]],
- ['xb_5fall_5frecs_2',['XB_ALL_RECS',['../xbdbf_8h.html#a8bd17730da3ba5c55a6a07bc482dd0e4',1,'xbdbf.h']]],
- ['xb_5falready_5fopen_3',['XB_ALREADY_OPEN',['../xbretcod_8h.html#aa2ff8301503f446c6a5f6510090e520f',1,'xbretcod.h']]],
- ['xb_5fblockread_5fnot_5fenabled_4',['XB_BLOCKREAD_NOT_ENABLED',['../xbretcod_8h.html#aae9241d91cfb37f5d236128b3bce0a4a',1,'xbretcod.h']]],
- ['xb_5fbof_5',['XB_BOF',['../xbretcod_8h.html#ade5f3a7cf1467d12761e4e21b5e4200f',1,'xbretcod.h']]],
- ['xb_5fcfg_5fcheck_2ecpp_6',['xb_cfg_check.cpp',['../xb__cfg__check_8cpp.html',1,'']]],
- ['xb_5fchar_5ffld_7',['XB_CHAR_FLD',['../xbdbf_8h.html#a20f739b9d9dc6a002a246a999e76aeaa',1,'xbdbf.h']]],
- ['xb_5fchareof_8',['XB_CHAREOF',['../xbdbf_8h.html#ada1115f596131888c04df61546b198c4',1,'xbdbf.h']]],
- ['xb_5fcharhdr_9',['XB_CHARHDR',['../xbdbf_8h.html#a35d56cac7959c1e5c761684ced3f1e17',1,'xbdbf.h']]],
- ['xb_5fclose_5ferror_10',['XB_CLOSE_ERROR',['../xbretcod_8h.html#a030684d5541cf6127a76d81b0684b235',1,'xbretcod.h']]],
- ['xb_5fclosed_11',['XB_CLOSED',['../xbdbf_8h.html#a843ca4569326dbd1d0647899b0eb512f',1,'xbdbf.h']]],
- ['xb_5fcopydbf_2ecpp_12',['xb_copydbf.cpp',['../xb__copydbf_8cpp.html',1,'']]],
- ['xb_5fdate_5ffld_13',['XB_DATE_FLD',['../xbdbf_8h.html#a7f685e6f5fe804b2174725a27ce73adc',1,'xbdbf.h']]],
- ['xb_5fdbf_5ffile_5fnot_5fopen_14',['XB_DBF_FILE_NOT_OPEN',['../xbretcod_8h.html#a8104510b347c87998eadd0b27201e3c2',1,'xbretcod.h']]],
- ['xb_5fdbfutil_2ecpp_15',['xb_dbfutil.cpp',['../xb__dbfutil_8cpp.html',1,'']]],
- ['xb_5fdeletall_2ecpp_16',['xb_deletall.cpp',['../xb__deletall_8cpp.html',1,'']]],
- ['xb_5fdelete_5ffailed_17',['XB_DELETE_FAILED',['../xbretcod_8h.html#ada15513935d5ede9216f07c0438f34d2',1,'xbretcod.h']]],
- ['xb_5fdeleted_5frecs_18',['XB_DELETED_RECS',['../xbdbf_8h.html#acc0a441854ed92b9d65d1181a97cad43',1,'xbdbf.h']]],
- ['xb_5fdirectory_5ferror_19',['XB_DIRECTORY_ERROR',['../xbretcod_8h.html#af532df74147ce2d872f61abfee49c53e',1,'xbretcod.h']]],
- ['xb_5fdontoverlay_20',['XB_DONTOVERLAY',['../xbdbf_8h.html#a7b797840abdb3291373d15978103a778',1,'xbdbf.h']]],
- ['xb_5fdumpdbt_2ecpp_21',['xb_dumpdbt.cpp',['../xb__dumpdbt_8cpp.html',1,'']]],
- ['xb_5fdumprecs_2ecpp_22',['xb_dumprecs.cpp',['../xb__dumprecs_8cpp.html',1,'']]],
- ['xb_5fdup_5ftable_5for_5falias_23',['XB_DUP_TABLE_OR_ALIAS',['../xbretcod_8h.html#ac18036408d10e5eee1bf76cf92352b95',1,'xbretcod.h']]],
- ['xb_5fempty_24',['XB_EMPTY',['../xbretcod_8h.html#a18068d0cbe0c7a1b4dd3176220180c29',1,'xbretcod.h']]],
- ['xb_5feof_25',['XB_EOF',['../xbretcod_8h.html#a8b47031e90c3f86306c7058e4490d3b7',1,'xbretcod.h']]],
- ['xb_5fex_5fdate_2ecpp_26',['xb_ex_date.cpp',['../xb__ex__date_8cpp.html',1,'']]],
- ['xb_5fex_5fexpression_2ecpp_27',['xb_ex_expression.cpp',['../xb__ex__expression_8cpp.html',1,'']]],
- ['xb_5fex_5fsql_2ecpp_28',['xb_ex_sql.cpp',['../xb__ex__sql_8cpp.html',1,'']]],
- ['xb_5fex_5fssv_2ecpp_29',['xb_ex_ssv.cpp',['../xb__ex__ssv_8cpp.html',1,'']]],
- ['xb_5fex_5fstring_2ecpp_30',['xb_ex_string.cpp',['../xb__ex__string_8cpp.html',1,'']]],
- ['xb_5fex_5fv3_5fcreate_5fdbf_2ecpp_31',['xb_ex_v3_create_dbf.cpp',['../xb__ex__v3__create__dbf_8cpp.html',1,'']]],
- ['xb_5fex_5fv3_5fupd_5fdbf_2ecpp_32',['xb_ex_v3_upd_dbf.cpp',['../xb__ex__v3__upd__dbf_8cpp.html',1,'']]],
- ['xb_5fex_5fv4_5fcreate_5fdbf_2ecpp_33',['xb_ex_v4_create_dbf.cpp',['../xb__ex__v4__create__dbf_8cpp.html',1,'']]],
- ['xb_5fex_5fv4_5fupd_5fdbf_2ecpp_34',['xb_ex_v4_upd_dbf.cpp',['../xb__ex__v4__upd__dbf_8cpp.html',1,'']]],
- ['xb_5fexecsql_2ecpp_35',['xb_execsql.cpp',['../xb__execsql_8cpp.html',1,'']]],
- ['xb_5ffile_5fexists_36',['XB_FILE_EXISTS',['../xbretcod_8h.html#a54303a9677dbd5342233f33dd08c64d0',1,'xbretcod.h']]],
- ['xb_5ffile_5fnot_5ffound_37',['XB_FILE_NOT_FOUND',['../xbretcod_8h.html#ad090af330c93111d12f6de35dbb065bc',1,'xbretcod.h']]],
- ['xb_5ffile_5ftype_5fnot_5fsupported_38',['XB_FILE_TYPE_NOT_SUPPORTED',['../xbretcod_8h.html#ab7b9130a5f1df9975cfeaf6241933596',1,'xbretcod.h']]],
- ['xb_5ffloat_5ffld_39',['XB_FLOAT_FLD',['../xbdbf_8h.html#a96ab4218d70ab603b4866354ce8c18cd',1,'xbdbf.h']]],
- ['xb_5ffmt_5fmonth_40',['XB_FMT_MONTH',['../xbdate_8h.html#aeacf2f7cc897ab5bd64781c0fb52b75d',1,'xbdate.h']]],
- ['xb_5ffmt_5fweek_41',['XB_FMT_WEEK',['../xbdate_8h.html#a8f22704d3fd93fa85dd93b6c699e8178',1,'xbdate.h']]],
- ['xb_5ffmt_5fyear_42',['XB_FMT_YEAR',['../xbdate_8h.html#aa29d78982a9e007874af1c4f4e4d1aa4',1,'xbdate.h']]],
- ['xb_5fincompatible_5foperands_43',['XB_INCOMPATIBLE_OPERANDS',['../xbretcod_8h.html#af141ec58b7ca7360e0be6c61d015ea74',1,'xbretcod.h']]],
- ['xb_5finconsistent_5fparm_5flens_44',['XB_INCONSISTENT_PARM_LENS',['../xbretcod_8h.html#adc4b24bfffa202f8df25409894e547b9',1,'xbretcod.h']]],
- ['xb_5finvalid_5fblock_5fno_45',['XB_INVALID_BLOCK_NO',['../xbretcod_8h.html#a4e13b529b486c43ca600ce7d8ddbf3c2',1,'xbretcod.h']]],
- ['xb_5finvalid_5fblock_5fsize_46',['XB_INVALID_BLOCK_SIZE',['../xbretcod_8h.html#a1bd22921612389c37f6b2eac438c62c5',1,'xbretcod.h']]],
- ['xb_5finvalid_5fdata_47',['XB_INVALID_DATA',['../xbretcod_8h.html#afb40bbed323ecb369dd430a2e1242f9a',1,'xbretcod.h']]],
- ['xb_5finvalid_5fdate_48',['XB_INVALID_DATE',['../xbretcod_8h.html#a702475500357a27b8a34463be3e11925',1,'xbretcod.h']]],
- ['xb_5finvalid_5fexpression_49',['XB_INVALID_EXPRESSION',['../xbretcod_8h.html#a54db562c3cae97581812b4fccd52b71a',1,'xbretcod.h']]],
- ['xb_5finvalid_5ffield_50',['XB_INVALID_FIELD',['../xbretcod_8h.html#a34180b2e2bd350ba2ebcdd1335e15d7e',1,'xbretcod.h']]],
- ['xb_5finvalid_5ffield_5flen_51',['XB_INVALID_FIELD_LEN',['../xbretcod_8h.html#a7bd322c0efbba17f68ccccd6cf624411',1,'xbretcod.h']]],
- ['xb_5finvalid_5ffield_5fname_52',['XB_INVALID_FIELD_NAME',['../xbretcod_8h.html#a59403978784130834cf39434cb73f96e',1,'xbretcod.h']]],
- ['xb_5finvalid_5ffield_5fno_53',['XB_INVALID_FIELD_NO',['../xbretcod_8h.html#a09d6c08a44316f551108a74003efd381',1,'xbretcod.h']]],
- ['xb_5finvalid_5ffield_5ftype_54',['XB_INVALID_FIELD_TYPE',['../xbretcod_8h.html#a79e2588f067d6e236c0e5a2c0728ba9f',1,'xbretcod.h']]],
- ['xb_5finvalid_5ffunction_55',['XB_INVALID_FUNCTION',['../xbretcod_8h.html#a2b7e5e440dbcf5e6dc885b24dbe28742',1,'xbretcod.h']]],
- ['xb_5finvalid_5findex_56',['XB_INVALID_INDEX',['../xbretcod_8h.html#acd175ef0541e2cad424791bd87619dd4',1,'xbretcod.h']]],
- ['xb_5finvalid_5fkeyno_57',['XB_INVALID_KEYNO',['../xbretcod_8h.html#aec2c0ac2bd62e0329ef130e4fbda39f8',1,'xbretcod.h']]],
- ['xb_5finvalid_5flock_5foption_58',['XB_INVALID_LOCK_OPTION',['../xbretcod_8h.html#ab45735e63c208eb7e6d6df31fd527aec',1,'xbretcod.h']]],
- ['xb_5finvalid_5fmemo_5ffield_59',['XB_INVALID_MEMO_FIELD',['../xbretcod_8h.html#a187c50745f51bfe4aa6f70a92f16c59f',1,'xbretcod.h']]],
- ['xb_5finvalid_5fnodelink_60',['XB_INVALID_NODELINK',['../xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb',1,'xbretcod.h']]],
- ['xb_5finvalid_5fobject_61',['XB_INVALID_OBJECT',['../xbretcod_8h.html#a418c047353bc683d0fd6ecbbdd5b7885',1,'xbretcod.h']]],
- ['xb_5finvalid_5foption_62',['XB_INVALID_OPTION',['../xbretcod_8h.html#af1cd0baf346cad686fa4dd11f700012a',1,'xbretcod.h']]],
- ['xb_5finvalid_5fpage_63',['XB_INVALID_PAGE',['../xbretcod_8h.html#ad0aba12b5ae2137f8d6abd28b47f95f0',1,'xbretcod.h']]],
- ['xb_5finvalid_5fparm_64',['XB_INVALID_PARM',['../xbretcod_8h.html#a4cedf96581c9cbc9c14d07494143702d',1,'xbretcod.h']]],
- ['xb_5finvalid_5frecord_65',['XB_INVALID_RECORD',['../xbretcod_8h.html#a0fd212f912b2e62700a66bae95bd73a1',1,'xbretcod.h']]],
- ['xb_5finvalid_5ftable_5fname_66',['XB_INVALID_TABLE_NAME',['../xbretcod_8h.html#a53891c95a78483704d2a8e14c4499f92',1,'xbretcod.h']]],
- ['xb_5finvalid_5ftag_67',['XB_INVALID_TAG',['../xbretcod_8h.html#a176d917912d3433f065483f905a4c50a',1,'xbretcod.h']]],
- ['xb_5fkey_5fnot_5funique_68',['XB_KEY_NOT_UNIQUE',['../xbretcod_8h.html#ad60dbb1862c0c1c2dc0464cfbfd93a34',1,'xbretcod.h']]],
- ['xb_5flimit_5freached_69',['XB_LIMIT_REACHED',['../xbretcod_8h.html#a59f1a8a6aca19595c2d1804349a24850',1,'xbretcod.h']]],
- ['xb_5flock_70',['XB_LOCK',['../xbdbf_8h.html#a395a2e101a793bacabf6bc079d178e29',1,'xbdbf.h']]],
- ['xb_5flock_5ffailed_71',['XB_LOCK_FAILED',['../xbretcod_8h.html#a001e24b39e0f155fb1e892f5b1b9cff1',1,'xbretcod.h']]],
- ['xb_5flogical_5ffld_72',['XB_LOGICAL_FLD',['../xbdbf_8h.html#a2f6d5073af761bc1a806a2c7b1c1d886',1,'xbdbf.h']]],
- ['xb_5fmax_5ferror_5fno_73',['XB_MAX_ERROR_NO',['../xbretcod_8h.html#a299419a9c80e000b74bf97a2d24d6a3d',1,'xbretcod.h']]],
- ['xb_5fmemcpy_5ferror_74',['XB_MEMCPY_ERROR',['../xbretcod_8h.html#aa2925f035e3b186d7efa14648ea0e86d',1,'xbretcod.h']]],
- ['xb_5fmemo_5ffld_75',['XB_MEMO_FLD',['../xbdbf_8h.html#a23fa19b19cb43bd6dcc59a5a3f6c30ad',1,'xbdbf.h']]],
- ['xb_5fmulti_5fuser_76',['XB_MULTI_USER',['../xbfile_8h.html#a05c0fc99ba71cf953d046d12f3f874bc',1,'xbfile.h']]],
- ['xb_5fno_5ferror_77',['XB_NO_ERROR',['../xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23',1,'xbretcod.h']]],
- ['xb_5fno_5fmemory_78',['XB_NO_MEMORY',['../xbretcod_8h.html#ae687fc7d872ba0475a8477e4447f9b54',1,'xbretcod.h']]],
- ['xb_5fnot_5ffound_79',['XB_NOT_FOUND',['../xbretcod_8h.html#ac2606659a54111334f5b02861e533700',1,'xbretcod.h']]],
- ['xb_5fnot_5fopen_80',['XB_NOT_OPEN',['../xbretcod_8h.html#a9474b400f647bdefbbb07e5177e8d7a1',1,'xbretcod.h']]],
- ['xb_5fnumeric_5ffld_81',['XB_NUMERIC_FLD',['../xbdbf_8h.html#ae9fb6d69cc5edc94d36ae403c22ec1c6',1,'xbdbf.h']]],
- ['xb_5fopen_82',['XB_OPEN',['../xbdbf_8h.html#a9a6dafbb07cac744eb14094efa739409',1,'xbdbf.h']]],
- ['xb_5fopen_5ferror_83',['XB_OPEN_ERROR',['../xbretcod_8h.html#aaab55236993a1d3acb29206252a904c8',1,'xbretcod.h']]],
- ['xb_5foverlay_84',['XB_OVERLAY',['../xbdbf_8h.html#a6fe10b307878b4612b04c2c876a4a592',1,'xbdbf.h']]],
- ['xb_5fpack_2ecpp_85',['xb_pack.cpp',['../xb__pack_8cpp.html',1,'']]],
- ['xb_5fparse_5ferror_86',['XB_PARSE_ERROR',['../xbretcod_8h.html#aec713cac2b03a0d536a2d16336ae7c0b',1,'xbretcod.h']]],
- ['xb_5fread_87',['XB_READ',['../xbfile_8h.html#ae58c73e0ba237fcf67ee20feea6c2743',1,'xbfile.h']]],
- ['xb_5fread_5ferror_88',['XB_READ_ERROR',['../xbretcod_8h.html#adbd40585db8bb748d191f94a33bac710',1,'xbretcod.h']]],
- ['xb_5fread_5fwrite_89',['XB_READ_WRITE',['../xbfile_8h.html#af991a288c327f6857e90156ea734a633',1,'xbfile.h']]],
- ['xb_5frename_5ferror_90',['XB_RENAME_ERROR',['../xbretcod_8h.html#a373f30b2efcbbab9f6d060fb3fe8cba3',1,'xbretcod.h']]],
- ['xb_5fseek_5ferror_91',['XB_SEEK_ERROR',['../xbretcod_8h.html#a0455ad8719e153b08ec68b10c81e9f41',1,'xbretcod.h']]],
- ['xb_5fsingle_5fuser_92',['XB_SINGLE_USER',['../xbfile_8h.html#a9ec4d60a008c667d9861e3b3814f0232',1,'xbfile.h']]],
- ['xb_5fsyntax_5ferror_93',['XB_SYNTAX_ERROR',['../xbretcod_8h.html#a5db3a90f215534143bdde81253729c7f',1,'xbretcod.h']]],
- ['xb_5ftable_5fnot_5flocked_94',['XB_TABLE_NOT_LOCKED',['../xbretcod_8h.html#af6aaf779fddecca521d785666f6dc56b',1,'xbretcod.h']]],
- ['xb_5ftblinfo_2ecpp_95',['xb_tblinfo.cpp',['../xb__tblinfo_8cpp.html',1,'']]],
- ['xb_5ftest_5fbcd_2ecpp_96',['xb_test_bcd.cpp',['../xb__test__bcd_8cpp.html',1,'']]],
- ['xb_5ftest_5fblockread_2ecpp_97',['xb_test_blockread.cpp',['../xb__test__blockread_8cpp.html',1,'']]],
- ['xb_5ftest_5fdate_2ecpp_98',['xb_test_date.cpp',['../xb__test__date_8cpp.html',1,'']]],
- ['xb_5ftest_5fdbf_5fv3_5fmemos_2ecpp_99',['xb_test_dbf_v3_memos.cpp',['../xb__test__dbf__v3__memos_8cpp.html',1,'']]],
- ['xb_5ftest_5fdbf_5fv3_5fnomemos_2ecpp_100',['xb_test_dbf_v3_nomemos.cpp',['../xb__test__dbf__v3__nomemos_8cpp.html',1,'']]],
- ['xb_5ftest_5fdbf_5fv4_5fmemos_2ecpp_101',['xb_test_dbf_v4_memos.cpp',['../xb__test__dbf__v4__memos_8cpp.html',1,'']]],
- ['xb_5ftest_5fdbf_5fv4_5fnomemos_2ecpp_102',['xb_test_dbf_v4_nomemos.cpp',['../xb__test__dbf__v4__nomemos_8cpp.html',1,'']]],
- ['xb_5ftest_5fexpnode_2ecpp_103',['xb_test_expnode.cpp',['../xb__test__expnode_8cpp.html',1,'']]],
- ['xb_5ftest_5fexpression_2ecpp_104',['xb_test_expression.cpp',['../xb__test__expression_8cpp.html',1,'']]],
- ['xb_5ftest_5ffile_2ecpp_105',['xb_test_file.cpp',['../xb__test__file_8cpp.html',1,'']]],
- ['xb_5ftest_5ffilter_2ecpp_106',['xb_test_filter.cpp',['../xb__test__filter_8cpp.html',1,'']]],
- ['xb_5ftest_5ffuncs_2ecpp_107',['xb_test_funcs.cpp',['../xb__test__funcs_8cpp.html',1,'']]],
- ['xb_5ftest_5flinklist_2ecpp_108',['xb_test_linklist.cpp',['../xb__test__linklist_8cpp.html',1,'']]],
- ['xb_5ftest_5flock_2ecpp_109',['xb_test_lock.cpp',['../xb__test__lock_8cpp.html',1,'']]],
- ['xb_5ftest_5flock2_2ecpp_110',['xb_test_lock2.cpp',['../xb__test__lock2_8cpp.html',1,'']]],
- ['xb_5ftest_5flog_2ecpp_111',['xb_test_log.cpp',['../xb__test__log_8cpp.html',1,'']]],
- ['xb_5ftest_5fmdx_2ecpp_112',['xb_test_mdx.cpp',['../xb__test__mdx_8cpp.html',1,'']]],
- ['xb_5ftest_5fndx_2ecpp_113',['xb_test_ndx.cpp',['../xb__test__ndx_8cpp.html',1,'']]],
- ['xb_5ftest_5fsql_2ecpp_114',['xb_test_sql.cpp',['../xb__test__sql_8cpp.html',1,'']]],
- ['xb_5ftest_5fstring_2ecpp_115',['xb_test_string.cpp',['../xb__test__string_8cpp.html',1,'']]],
- ['xb_5ftest_5ftblmgr_2ecpp_116',['xb_test_tblmgr.cpp',['../xb__test__tblmgr_8cpp.html',1,'']]],
- ['xb_5ftest_5fuda_2ecpp_117',['xb_test_uda.cpp',['../xb__test__uda_8cpp.html',1,'']]],
- ['xb_5ftest_5fxbase_2ecpp_118',['xb_test_xbase.cpp',['../xb__test__xbase_8cpp.html',1,'']]],
- ['xb_5funbalanced_5fparens_119',['XB_UNBALANCED_PARENS',['../xbretcod_8h.html#aff5646a6b0884ff81004de6961473ea6',1,'xbretcod.h']]],
- ['xb_5funbalanced_5fquotes_120',['XB_UNBALANCED_QUOTES',['../xbretcod_8h.html#aedfa20a6c4eb9ba3063ba56be8280eac',1,'xbretcod.h']]],
- ['xb_5fundelall_2ecpp_121',['xb_undelall.cpp',['../xb__undelall_8cpp.html',1,'']]],
- ['xb_5funlock_122',['XB_UNLOCK',['../xbdbf_8h.html#a21389b73e7b4e7e185fa635b9e354c2e',1,'xbdbf.h']]],
- ['xb_5fupdated_123',['XB_UPDATED',['../xbdbf_8h.html#a26e7eeda69f32bc88b08a208ca9e7991',1,'xbdbf.h']]],
- ['xb_5fwrite_124',['XB_WRITE',['../xbfile_8h.html#abbf99e259c2f31572c886da6d85b1359',1,'xbfile.h']]],
- ['xb_5fwrite_5ferror_125',['XB_WRITE_ERROR',['../xbretcod_8h.html#aef34ebe6726057f805d6063130280549',1,'xbretcod.h']]],
- ['xbalttbl_2ecpp_126',['xbalttbl.cpp',['../xbalttbl_8cpp.html',1,'']]],
- ['xbase_127',['xbase',['../classxb_1_1xbFile.html#ae39a67ea391b46055d4ca299cb222004',1,'xb::xbFile']]],
- ['xbase_2eh_128',['xbase.h',['../xbase_8h.html',1,'']]],
- ['xbbcd_129',['xbBcd',['../classxb_1_1xbXBase.html#a86a53ce3efbf910996df0f853f1c0add',1,'xb::xbXBase']]],
- ['xbbcd_2ecpp_130',['xbbcd.cpp',['../xbbcd_8cpp.html',1,'']]],
- ['xbbcd_2eh_131',['xbbcd.h',['../xbbcd_8h.html',1,'']]],
- ['xbblkread_2eh_132',['xbblkread.h',['../xbblkread_8h.html',1,'']]],
- ['xbblockread_2ecpp_133',['xbblockread.cpp',['../xbblockread_8cpp.html',1,'']]],
- ['xbbool_134',['xbBool',['../namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f',1,'xb']]],
- ['xbcrix_2ecpp_135',['xbcrix.cpp',['../xbcrix_8cpp.html',1,'']]],
- ['xbcrtbl_2ecpp_136',['xbcrtbl.cpp',['../xbcrtbl_8cpp.html',1,'']]],
- ['xbcrtbl_2esave_2ecpp_137',['xbcrtbl.save.cpp',['../xbcrtbl_8save_8cpp.html',1,'']]],
- ['xbdate_138',['xbDate',['../classxb_1_1xbDate.html',1,'xb::xbDate'],['../classxb_1_1xbDate.html#a7ab727a7ec184a086ad36ef83b948170',1,'xb::xbDate::xbDate(xbInt32 lJulDate)'],['../classxb_1_1xbDate.html#acf4546f5681735ede18210f60bab68d4',1,'xb::xbDate::xbDate(const xbString &amp;Date8)'],['../classxb_1_1xbDate.html#ac8a4d9330221a3daee21b3c28c1d9719',1,'xb::xbDate::xbDate(const char *Date8)'],['../classxb_1_1xbDate.html#ab3150e7db0ab5db10a07d748b55465eb',1,'xb::xbDate::xbDate()']]],
- ['xbdate_2ecpp_139',['xbdate.cpp',['../xbdate_8cpp.html',1,'']]],
- ['xbdate_2eh_140',['xbdate.h',['../xbdate_8h.html',1,'']]],
- ['xbdbf_141',['xbDbf',['../classxb_1_1xbDbf.html',1,'xb::xbDbf'],['../classxb_1_1xbDbf.html#a84a75f80bc0e9b8a22b728767949c204',1,'xb::xbDbf::xbDbf()'],['../namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b',1,'xb::xbDbf()']]],
- ['xbdbf_2ecpp_142',['xbdbf.cpp',['../xbdbf_8cpp.html',1,'']]],
- ['xbdbf_2eh_143',['xbdbf.h',['../xbdbf_8h.html',1,'']]],
- ['xbdbf3_2ecpp_144',['xbdbf3.cpp',['../xbdbf3_8cpp.html',1,'']]],
- ['xbdbf4_2ecpp_145',['xbdbf4.cpp',['../xbdbf4_8cpp.html',1,'']]],
- ['xbdelete_2ecpp_146',['xbdelete.cpp',['../xbdelete_8cpp.html',1,'']]],
- ['xbdouble_147',['xbDouble',['../namespacexb.html#a25f47b226ce924a5c78f97989b0744a2',1,'xb']]],
- ['xbdrpix_2ecpp_148',['xbdrpix.cpp',['../xbdrpix_8cpp.html',1,'']]],
- ['xbdrptbl_2ecpp_149',['xbdrptbl.cpp',['../xbdrptbl_8cpp.html',1,'']]],
- ['xberrormessages_150',['xbErrorMessages',['../namespacexb.html#a04be228a037d220dd5564f5ef618adcc',1,'xb']]],
- ['xbexp_151',['xbExp',['../classxb_1_1xbXBase.html#a3c3e5617be811d732472fe2cc8fb18cc',1,'xb::xbXBase']]],
- ['xbexp_2ecpp_152',['xbexp.cpp',['../xbexp_8cpp.html',1,'']]],
- ['xbexp_2eh_153',['xbexp.h',['../xbexp_8h.html',1,'']]],
- ['xbexpnode_2ecpp_154',['xbexpnode.cpp',['../xbexpnode_8cpp.html',1,'']]],
- ['xbexpnode_2eh_155',['xbexpnode.h',['../xbexpnode_8h.html',1,'']]],
- ['xbfalse_156',['xbFalse',['../xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc',1,'xbtypes.h']]],
- ['xbfclose_157',['xbFclose',['../classxb_1_1xbFile.html#a18830b5755d74818f60d9c7ce38ddf2d',1,'xb::xbFile']]],
- ['xbfeof_158',['xbFeof',['../classxb_1_1xbFile.html#af5b6356832d2a67212070a1aa605f170',1,'xb::xbFile']]],
- ['xbfflush_159',['xbFflush',['../classxb_1_1xbFile.html#ad205184d43409f04216540ae22f15009',1,'xb::xbFile']]],
- ['xbfgetc_160',['xbFgetc',['../classxb_1_1xbFile.html#afb1c584d2895ffb7834df80aea7eb1e4',1,'xb::xbFile::xbFgetc(xbInt32 &amp;c)'],['../classxb_1_1xbFile.html#a5ee229bda4d7d6695e122200e581e7a6',1,'xb::xbFile::xbFgetc(char &amp;c)']]],
- ['xbfgets_161',['xbFgets',['../classxb_1_1xbFile.html#ad245955ace26e5dde85fd4373b30d026',1,'xb::xbFile']]],
- ['xbfields_2ecpp_162',['xbfields.cpp',['../xbfields_8cpp.html',1,'']]],
- ['xbfile_163',['xbFile',['../classxb_1_1xbFile.html',1,'xb::xbFile'],['../classxb_1_1xbFile.html#a869eedd74c6eddc308852eb546c87176',1,'xb::xbFile::xbFile()']]],
- ['xbfile_2ecpp_164',['xbfile.cpp',['../xbfile_8cpp.html',1,'']]],
- ['xbfile_2eh_165',['xbfile.h',['../xbfile_8h.html',1,'']]],
- ['xbfileno_166',['xbFileNo',['../xbtypes_8h.html#a2c65f692ac861990861575e18f72f6eb',1,'xbtypes.h']]],
- ['xbfilter_2ecpp_167',['xbfilter.cpp',['../xbfilter_8cpp.html',1,'']]],
- ['xbfilter_2eh_168',['xbfilter.h',['../xbfilter_8h.html',1,'']]],
- ['xbfloat_169',['xbFloat',['../namespacexb.html#a83aa6a550398db55973aa9fb4257e66e',1,'xb']]],
- ['xbfopen_170',['xbFopen',['../classxb_1_1xbFile.html#ab0fa19686ca8953ff4b556fb5b249135',1,'xb::xbFile::xbFopen(const xbString &amp;sMode, const xbString &amp;sFileName, xbInt16 iShareMode)'],['../classxb_1_1xbFile.html#a7cdfef5ede9ac98d44a28a6b7a70972c',1,'xb::xbFile::xbFopen(xbInt16 iOpenMode)'],['../classxb_1_1xbFile.html#a0548cedf0f26b7d8ac221f75b0cd048c',1,'xb::xbFile::xbFopen(const xbString &amp;sOpenMode, xbInt16 iShareMode)'],['../classxb_1_1xbFile.html#aabd113333b49c36cad23244b392baab4',1,'xb::xbFile::xbFopen(xbInt16 iOpenMode, xbInt16 iShareMode)']]],
- ['xbfputc_171',['xbFputc',['../classxb_1_1xbFile.html#af2e940c78956e5cb6824f9a1bc404896',1,'xb::xbFile::xbFputc(xbInt32 c)'],['../classxb_1_1xbFile.html#a863f74cf17df8186d88586b4d2a6441a',1,'xb::xbFile::xbFputc(xbInt32 c, xbInt32 iNoTimes)']]],
- ['xbfputs_172',['xbFputs',['../classxb_1_1xbFile.html#a698f3b40216778562e639e6ca1a47573',1,'xb::xbFile']]],
- ['xbfread_173',['xbFread',['../classxb_1_1xbFile.html#ab4f6afaa1f77539f27a4f05c26e54e2f',1,'xb::xbFile']]],
- ['xbfseek_174',['xbFseek',['../classxb_1_1xbFile.html#a5337ab8918df240910c0d19b4f298e3d',1,'xb::xbFile']]],
- ['xbftell_175',['xbFtell',['../classxb_1_1xbFile.html#a0e1c06aedfa7fbcb92e117f891edd13b',1,'xb::xbFile']]],
- ['xbfturnofffilebuffering_176',['xbFTurnOffFileBuffering',['../classxb_1_1xbFile.html#a9891b792f585a696f38a5cf959e30918',1,'xb::xbFile']]],
- ['xbfuncs_2ecpp_177',['xbfuncs.cpp',['../xbfuncs_8cpp.html',1,'']]],
- ['xbfwrite_178',['xbFwrite',['../classxb_1_1xbFile.html#a6aadd871d1782944703fed773d44b85f',1,'xb::xbFile']]],
- ['xbindex_2eh_179',['xbindex.h',['../xbindex_8h.html',1,'']]],
- ['xbinsert_2ecpp_180',['xbinsert.cpp',['../xbinsert_8cpp.html',1,'']]],
- ['xbixbase_2ecpp_181',['xbixbase.cpp',['../xbixbase_8cpp.html',1,'']]],
- ['xbixmdx_2ecpp_182',['xbixmdx.cpp',['../xbixmdx_8cpp.html',1,'']]],
- ['xbixndx_2ecpp_183',['xbixndx.cpp',['../xbixndx_8cpp.html',1,'']]],
- ['xblnklst_2eh_184',['xblnklst.h',['../xblnklst_8h.html',1,'']]],
- ['xblnklstord_2eh_185',['xblnklstord.h',['../xblnklstord_8h.html',1,'']]],
- ['xblnknod_2eh_186',['xblnknod.h',['../xblnknod_8h.html',1,'']]],
- ['xblog_187',['xbLog',['../namespacexb.html#a4a31fbe9110c9e55495ce71e642d785c',1,'xb']]],
- ['xblog_2ecpp_188',['xblog.cpp',['../xblog_8cpp.html',1,'']]],
- ['xblog_2eh_189',['xblog.h',['../xblog_8h.html',1,'']]],
- ['xbmemcmp_190',['xbMemcmp',['../classxb_1_1xbXBase.html#a1b239c021358476382942522911b5c66',1,'xb::xbXBase']]],
- ['xbmemo_2ecpp_191',['xbmemo.cpp',['../xbmemo_8cpp.html',1,'']]],
- ['xbmemo_2eh_192',['xbmemo.h',['../xbmemo_8h.html',1,'']]],
- ['xbmemo3_2ecpp_193',['xbmemo3.cpp',['../xbmemo3_8cpp.html',1,'']]],
- ['xbmemo4_2ecpp_194',['xbmemo4.cpp',['../xbmemo4_8cpp.html',1,'']]],
- ['xbofft_195',['xbOffT',['../namespacexb.html#ac963d9fde6debb416303cfbed35fb793',1,'xb']]],
- ['xbreaduntil_196',['xbReadUntil',['../classxb_1_1xbFile.html#a08463f506f425c2385acbe1a561506e9',1,'xb::xbFile']]],
- ['xbremove_197',['xbRemove',['../classxb_1_1xbFile.html#ab3c668a8570433188382d31d7c60bd48',1,'xb::xbFile::xbRemove()'],['../classxb_1_1xbFile.html#a6d919366c2ec95e529906bf8842cbf07',1,'xb::xbFile::xbRemove(const xbString &amp;sFileName, xbInt16 iOption)'],['../classxb_1_1xbFile.html#a58f6a6751fdf7e9549c273bb75d93eb5',1,'xb::xbFile::xbRemove(const xbString &amp;sFileName)']]],
- ['xbrename_198',['xbRename',['../classxb_1_1xbFile.html#afc8ce113aa72611a278233f9bb170012',1,'xb::xbFile']]],
- ['xbretcod_2eh_199',['xbretcod.h',['../xbretcod_8h.html',1,'']]],
- ['xbrewind_200',['xbRewind',['../classxb_1_1xbFile.html#a7996b6e084665c37c3892faea64b3505',1,'xb::xbFile']]],
- ['xbschema_201',['xbSchema',['../structxb_1_1xbSchema.html',1,'xb']]],
- ['xbselect_2ecpp_202',['xbselect.cpp',['../xbselect_8cpp.html',1,'']]],
- ['xbset_2ecpp_203',['xbset.cpp',['../xbset_8cpp.html',1,'']]],
- ['xbsleep_204',['xbSleep',['../classxb_1_1xbXBase.html#a0915aff7be4b2dd3e881f3c5d0da4baf',1,'xb::xbXBase']]],
- ['xbsql_2ecpp_205',['xbsql.cpp',['../xbsql_8cpp.html',1,'']]],
- ['xbsql_2eh_206',['xbsql.h',['../xbsql_8h.html',1,'']]],
- ['xbssv_207',['xbSsv',['../classxb_1_1xbSsv.html',1,'xb::xbSsv'],['../classxb_1_1xbSsv.html#a58f85692c3167af20b1a7c17c621523b',1,'xb::xbSsv::xbSsv()']]],
- ['xbssv_2ecpp_208',['xbssv.cpp',['../xbssv_8cpp.html',1,'']]],
- ['xbssv_2eh_209',['xbssv.h',['../xbssv_8h.html',1,'']]],
- ['xbstmt_2ecpp_210',['xbstmt.cpp',['../xbstmt_8cpp.html',1,'']]],
- ['xbstring_211',['xbString',['../classxb_1_1xbString.html',1,'xb::xbString'],['../classxb_1_1xbString.html#ad865b55e3b08dffd527afee8e7e8e3fe',1,'xb::xbString::xbString(xbDouble d)'],['../classxb_1_1xbString.html#a25856311106c5fb15d39017b63f0ddc7',1,'xb::xbString::xbString(const char *=&quot;&quot;)'],['../classxb_1_1xbString.html#a0d81016b93fc36ebbbafacf35c677f07',1,'xb::xbString::xbString(const xbString &amp;s)'],['../classxb_1_1xbString.html#a63f9313217e0ff3c9789ec59316216a1',1,'xb::xbString::xbString(xbUInt32 size)'],['../classxb_1_1xbString.html#a14bbaa293c8d40dd6c64332f2668a92e',1,'xb::xbString::xbString(char c)'],['../classxb_1_1xbString.html#a18f3598dcdf2ec5692274fc8ee769ad7',1,'xb::xbString::xbString(const char *s, xbUInt32 lMaxLen)']]],
- ['xbstring_2ecpp_212',['xbstring.cpp',['../xbstring_8cpp.html',1,'']]],
- ['xbstring_2eh_213',['xbstring.h',['../xbstring_8h.html',1,'']]],
- ['xbtag_2ecpp_214',['xbtag.cpp',['../xbtag_8cpp.html',1,'']]],
- ['xbtag_2eh_215',['xbtag.h',['../xbtag_8h.html',1,'']]],
- ['xbtbllist_216',['xbTblList',['../structxb_1_1xbTblList.html',1,'xb']]],
- ['xbtblmgr_217',['xbTblMgr',['../classxb_1_1xbTblMgr.html',1,'xb::xbTblMgr'],['../classxb_1_1xbTblMgr.html#aad83f5ecc184ca6cbdfc6f356b598d6c',1,'xb::xbTblMgr::xbTblMgr()']]],
- ['xbtblmgr_2ecpp_218',['xbtblmgr.cpp',['../xbtblmgr_8cpp.html',1,'']]],
- ['xbtblmgr_2eh_219',['xbtblmgr.h',['../xbtblmgr_8h.html',1,'']]],
- ['xbtrue_220',['xbTrue',['../xbtypes_8h.html#ab0ae00665298fe7f5292691cb98ec2d9',1,'xbtypes.h']]],
- ['xbtruncate_221',['xbTruncate',['../classxb_1_1xbFile.html#a518bfcbfa3699d883cf89affee383296',1,'xb::xbFile']]],
- ['xbtypes_2eh_222',['xbtypes.h',['../xbtypes_8h.html',1,'']]],
- ['xbuda_2ecpp_223',['xbuda.cpp',['../xbuda_8cpp.html',1,'']]],
- ['xbuda_2eh_224',['xbuda.h',['../xbuda_8h.html',1,'']]],
- ['xbxbase_225',['xbXBase',['../classxb_1_1xbXBase.html',1,'xb::xbXBase'],['../classxb_1_1xbXBase.html#a6c68588e33946fb5416af3f86fe83224',1,'xb::xbXBase::xbXBase()'],['../namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0',1,'xb::xbXBase()']]],
- ['xbxbase_2ecpp_226',['xbxbase.cpp',['../xbxbase_8cpp.html',1,'']]],
- ['xbxbase_2eh_227',['xbxbase.h',['../xbxbase_8h.html',1,'']]]
-];
diff --git a/docs/doxygen/html/search/all_2.js b/docs/doxygen/html/search/all_2.js
deleted file mode 100644
index 83b0227..0000000
--- a/docs/doxygen/html/search/all_2.js
+++ /dev/null
@@ -1,31 +0,0 @@
-var searchData=
-[
- ['calcrollingcenturyforyear_0',['CalcRollingCenturyForYear',['../classxb_1_1xbDate.html#a9df58caa54105c489c314785c457e8cb',1,'xb::xbDate']]],
- ['cencryptionflag_1',['cEncryptionFlag',['../classxb_1_1xbDbf.html#a8734e799707582f022fc341d515650f4',1,'xb::xbDbf']]],
- ['centuryof_2',['CenturyOf',['../classxb_1_1xbDate.html#a38b2c5285c69ed65e94ece6c22dafde0',1,'xb::xbDate']]],
- ['cfieldname_3',['cFieldName',['../structxb_1_1xbSchema.html#a514183856094123fd37df67885b4681e',1,'xb::xbSchema']]],
- ['chardayof_4',['CharDayOf',['../classxb_1_1xbDate.html#a9fc29730b66cddfbb58c69992a99cc7c',1,'xb::xbDate']]],
- ['charmonthof_5',['CharMonthOf',['../classxb_1_1xbDate.html#afffc84f02bd421335ff8ebe9fb3db0ac',1,'xb::xbDate']]],
- ['chrontime_6',['ChronTime',['../tstfuncs_8cpp.html#af990eed1e43605771a5810196b4043f7',1,'tstfuncs.cpp']]],
- ['cindexflag_7',['cIndexFlag',['../classxb_1_1xbDbf.html#ad59074633641e03647e54d2b66c9102b',1,'xb::xbDbf']]],
- ['clangdriver_8',['cLangDriver',['../classxb_1_1xbDbf.html#aea1dfe5cbd1f9cdbcfc8eb04b2c3d5f1',1,'xb::xbDbf']]],
- ['close_9',['Close',['../classxb_1_1xbDbf.html#ad68d73113e54e1b5f326e90f45e9989d',1,'xb::xbDbf']]],
- ['closealltables_10',['CloseAllTables',['../classxb_1_1xbXBase.html#afccb552ca0daff779c0500ff20d22c2b',1,'xb::xbXBase']]],
- ['commit_11',['Commit',['../classxb_1_1xbDbf.html#abd69532c885ab72bcf3fb5066b318f4f',1,'xb::xbDbf']]],
- ['copy_12',['Copy',['../classxb_1_1xbString.html#ac7a8466b03c04df838bd182ef244f792',1,'xb::xbString']]],
- ['copydbfstructure_13',['CopyDbfStructure',['../classxb_1_1xbDbf.html#a829c615a130a1fdf609d93438d8a6264',1,'xb::xbDbf']]],
- ['countchar_14',['CountChar',['../classxb_1_1xbString.html#adc0204bcfd1c052b9aea9229b10acf72',1,'xb::xbString::CountChar(char c, xbInt16 iOpt) const'],['../classxb_1_1xbString.html#a26bc14d92dc7ce1f2bf31cd74af0db0f',1,'xb::xbString::CountChar(char c) const']]],
- ['createtable_15',['CreateTable',['../classxb_1_1xbDbf.html#a73e41bfe679dd06ab16c436652df93f1',1,'xb::xbDbf']]],
- ['createuniquefilename_16',['CreateUniqueFileName',['../classxb_1_1xbFile.html#aae9a2ddb0adb8165b4ac2b6a28a932f7',1,'xb::xbFile::CreateUniqueFileName(const xbString &amp;sDirIn, const xbString &amp;sExtIn, xbString &amp;sFqnOut)'],['../classxb_1_1xbFile.html#ae5ffabde2c88ea58324f27e471f6bfc0',1,'xb::xbFile::CreateUniqueFileName(const xbString &amp;sDirIn, const xbString &amp;sExtIn, xbString &amp;sFqnOut, xbInt16 iOption)']]],
- ['ctod_17',['CTOD',['../classxb_1_1xbDate.html#abb1eb4b0394e4a67aadab15779b1b8c5',1,'xb::xbDate']]],
- ['ctransactionflag_18',['cTransactionFlag',['../classxb_1_1xbDbf.html#ac3c89fc3bc6a6abf385478a8adbed970',1,'xb::xbDbf']]],
- ['ctype_19',['cType',['../structxb_1_1xbSchema.html#a1d612b2ed5dc0b0289c9e91b3cda3a25',1,'xb::xbSchema']]],
- ['cupdatedd_20',['cUpdateDD',['../classxb_1_1xbDbf.html#a6021789d314cd41488991e708fcd0df2',1,'xb::xbDbf']]],
- ['cupdatemm_21',['cUpdateMM',['../classxb_1_1xbDbf.html#a9340a5e8ee53eb0f3b6601eec2d71e1b',1,'xb::xbDbf']]],
- ['cupdateyy_22',['cUpdateYY',['../classxb_1_1xbDbf.html#a4fcd6a86ddd32d4a9d76a4074573440a',1,'xb::xbDbf']]],
- ['cversion_23',['cVersion',['../classxb_1_1xbDbf.html#a3a262abf658e5fa968b57ef457a69470',1,'xb::xbDbf']]],
- ['cvthexchar_24',['CvtHexChar',['../classxb_1_1xbString.html#a0a737bd408a94903f214eb2879eb56de',1,'xb::xbString']]],
- ['cvthexstring_25',['CvtHexString',['../classxb_1_1xbString.html#ab5eb6918a0ae9ab6c0e961318f3d1eb0',1,'xb::xbString']]],
- ['cvtlonglong_26',['CvtLongLong',['../classxb_1_1xbString.html#ae3ab18365e132323f8ae4c99eb72181c',1,'xb::xbString']]],
- ['cvtulonglong_27',['CvtULongLong',['../classxb_1_1xbString.html#a1528b30b84a41c3564ef31d1f4496b15',1,'xb::xbString']]]
-];
diff --git a/docs/doxygen/html/search/all_3.js b/docs/doxygen/html/search/all_3.js
deleted file mode 100644
index e2fc7b3..0000000
--- a/docs/doxygen/html/search/all_3.js
+++ /dev/null
@@ -1,20 +0,0 @@
-var searchData=
-[
- ['dateisvalid_0',['DateIsValid',['../classxb_1_1xbDate.html#a367f66ef0c03c1747c12a18784554ccb',1,'xb::xbDate']]],
- ['dayof_1',['DayOf',['../classxb_1_1xbDate.html#ad6417a900ce64a46f8909c0c7a2ddea2',1,'xb::xbDate']]],
- ['dblequals_2',['dblEquals',['../tstfuncs_8cpp.html#a8b8e417213c57f2ea0bcb61a7fb28860',1,'tstfuncs.cpp']]],
- ['dblmax_3',['dblMax',['../tstfuncs_8cpp.html#a69a6e718e066af7f8392e5f1fea40d1b',1,'tstfuncs.cpp']]],
- ['dblmin_4',['dblMin',['../tstfuncs_8cpp.html#a4d7b8f3f1ce52c6c0a281f25419f4c93',1,'tstfuncs.cpp']]],
- ['deleteall_5',['DeleteAll',['../classxb_1_1xbDbf.html#a01c26b67e312be1e674b3da710e031b9',1,'xb::xbDbf']]],
- ['deleteallrecords_6',['DeleteAllRecords',['../classxb_1_1xbDbf.html#a3067fdfa3a7a5c15651f6e89d1102176',1,'xb::xbDbf']]],
- ['deleterecord_7',['DeleteRecord',['../classxb_1_1xbDbf.html#acd8c10579229f3a2e2c5fdb7fcef90db',1,'xb::xbDbf']]],
- ['deletetable_8',['DeleteTable',['../classxb_1_1xbDbf.html#a4085ed4f049d976124d8edc3d3c56397',1,'xb::xbDbf']]],
- ['determinexbasememoversion_9',['DetermineXbaseMemoVersion',['../classxb_1_1xbFile.html#a5a740033664c9ad2611c90e2a6d0c2d3',1,'xb::xbFile']]],
- ['determinexbasetableversion_10',['DetermineXbaseTableVersion',['../classxb_1_1xbFile.html#ae2b6ac26018dc28f77afbb3f008c3f66',1,'xb::xbFile']]],
- ['devtester_11',['DevTester',['../xb__test__expression_8cpp.html#aee57237c5f5b9b4d80e84bf530eb42bc',1,'xb_test_expression.cpp']]],
- ['disablemsglogging_12',['DisableMsgLogging',['../classxb_1_1xbXBase.html#ae357fac4fdebdf49e46563cf611caf65',1,'xb::xbXBase']]],
- ['displayerror_13',['DisplayError',['../classxb_1_1xbSsv.html#a97dfa59ab9a8e9f17454da0faceb023d',1,'xb::xbSsv']]],
- ['displaytablelist_14',['DisplayTableList',['../classxb_1_1xbTblMgr.html#a5eebffb9e8cc64141e35c2622045cb50',1,'xb::xbTblMgr']]],
- ['dumpheader_15',['DumpHeader',['../classxb_1_1xbDbf.html#a309b5b1fb6a5c048c4bfb404d011ac55',1,'xb::xbDbf']]],
- ['dumprecord_16',['DumpRecord',['../classxb_1_1xbDbf.html#aba30399f15885a07f87f904c0d0656fa',1,'xb::xbDbf']]]
-];
diff --git a/docs/doxygen/html/search/all_4.js b/docs/doxygen/html/search/all_4.js
deleted file mode 100644
index 30781e1..0000000
--- a/docs/doxygen/html/search/all_4.js
+++ /dev/null
@@ -1,16 +0,0 @@
-var searchData=
-[
- ['egetdouble_0',['eGetDouble',['../classxb_1_1xbFile.html#ab14e4a11427f5efb81cba1dd32bd1aa1',1,'xb::xbFile']]],
- ['egetint16_1',['eGetInt16',['../classxb_1_1xbFile.html#ac40c991110ddc6fb30a72d90f4652762',1,'xb::xbFile']]],
- ['egetint32_2',['eGetInt32',['../classxb_1_1xbFile.html#a60b24a5afc984c586bf384c7e915ba0d',1,'xb::xbFile']]],
- ['egetuint16_3',['eGetUInt16',['../classxb_1_1xbFile.html#a936ade458e6d5e6d29f9b5031888d189',1,'xb::xbFile']]],
- ['egetuint32_4',['eGetUInt32',['../classxb_1_1xbFile.html#a78f052529d39a18deaface5a0d47d0b0',1,'xb::xbFile']]],
- ['enablemsglogging_5',['EnableMsgLogging',['../classxb_1_1xbXBase.html#a470e6eb0ed0be60338f9b40976d3ad48',1,'xb::xbXBase']]],
- ['eputdouble_6',['ePutDouble',['../classxb_1_1xbFile.html#a98b6ff533ae93f90c977a2ba23eeb105',1,'xb::xbFile']]],
- ['eputint16_7',['ePutInt16',['../classxb_1_1xbFile.html#a29130f12739ac8fa837f4eaedf1338b2',1,'xb::xbFile']]],
- ['eputint32_8',['ePutInt32',['../classxb_1_1xbFile.html#a19c37f76a2ccbb45019cb0fc373d3f46',1,'xb::xbFile']]],
- ['eputuint16_9',['ePutUInt16',['../classxb_1_1xbFile.html#a65e9839f92b96eac7b0d071fac3bbe40',1,'xb::xbFile']]],
- ['eputuint32_10',['ePutUInt32',['../classxb_1_1xbFile.html#aa3f6ceae4b96f24875d86848bf13a173',1,'xb::xbFile']]],
- ['errorcodetext_11',['ErrorCodeText',['../classxb_1_1xbSsv.html#a6219f1b5e24ea12fe158cd5aea56988e',1,'xb::xbSsv']]],
- ['extractelement_12',['ExtractElement',['../classxb_1_1xbString.html#a77195fc4957952625cb33bb503517a3e',1,'xb::xbString']]]
-];
diff --git a/docs/doxygen/html/search/all_6.js b/docs/doxygen/html/search/all_6.js
deleted file mode 100644
index 1cedf85..0000000
--- a/docs/doxygen/html/search/all_6.js
+++ /dev/null
@@ -1,69 +0,0 @@
-var searchData=
-[
- ['getautocommit_0',['GetAutoCommit',['../classxb_1_1xbDbf.html#ae0c00226fd2ea7a67f101e795467ed68',1,'xb::xbDbf::GetAutoCommit(xbInt16 iOption) const'],['../classxb_1_1xbDbf.html#abb9e20c5efacd4fea80f1515abbc6b55',1,'xb::xbDbf::GetAutoCommit() const']]],
- ['getblocksize_1',['GetBlockSize',['../classxb_1_1xbFile.html#a638e14262410a1627819f016a16cdce2',1,'xb::xbFile']]],
- ['getbof_2',['GetBof',['../classxb_1_1xbDbf.html#ad0827a43c025c1184ffebab74cc9e779',1,'xb::xbDbf']]],
- ['getcharacter_3',['GetCharacter',['../classxb_1_1xbString.html#a685187a5f8401b322fc61f3fbe56330d',1,'xb::xbString']]],
- ['getcmdlineopt_4',['GetCmdLineOpt',['../classxb_1_1xbXBase.html#aadecb3ac460d8e94b88b2e809e22f48e',1,'xb::xbXBase::GetCmdLineOpt(xbInt32 lArgc, char **argv, const char *sOptRqst, xbString &amp;sParmOut)'],['../classxb_1_1xbXBase.html#a8612e0c5334349fbceb9394b47817fd5',1,'xb::xbXBase::GetCmdLineOpt(xbInt32 lArgc, char **argv, xbString &amp;sOptRqst, xbString &amp;sParmOut)']]],
- ['getcurrecno_5',['GetCurRecNo',['../classxb_1_1xbDbf.html#a643a80a3792a52760c8e09ba18719503',1,'xb::xbDbf']]],
- ['getdatadirectory_6',['GetDataDirectory',['../classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9',1,'xb::xbSsv']]],
- ['getdatefield_7',['GetDateField',['../classxb_1_1xbDbf.html#af78ef1fba949463ff7f829d3cffc4555',1,'xb::xbDbf::GetDateField(xbInt16 iFieldNo, xbDate &amp;dt) const'],['../classxb_1_1xbDbf.html#ac624e06a97666bfd64b4f252b4548b36',1,'xb::xbDbf::GetDateField(const xbString &amp;sFieldName, xbDate &amp;dt) const']]],
- ['getdbfptr_8',['GetDbfPtr',['../classxb_1_1xbTblMgr.html#ad8a5d28a2ee6720a9aa74bcb45662cf5',1,'xb::xbTblMgr::GetDbfPtr(const xbString &amp;sTblAlias) const'],['../classxb_1_1xbTblMgr.html#a801dfecf7fc216954b4197b2c31b25d6',1,'xb::xbTblMgr::GetDbfPtr(xbInt16 sItemNo) const']]],
- ['getdbfstatus_9',['GetDbfStatus',['../classxb_1_1xbDbf.html#ac1110d867ba297a52c8b0e83e88f05e6',1,'xb::xbDbf']]],
- ['getdefaultautocommit_10',['GetDefaultAutoCommit',['../classxb_1_1xbSsv.html#a6982f973e81587b04916f4509746aaf5',1,'xb::xbSsv']]],
- ['getdefaultdateformat_11',['GetDefaultDateFormat',['../classxb_1_1xbSsv.html#a6fbb9c3a550ab0b3378f9586a57791d2',1,'xb::xbSsv']]],
- ['getdirectory_12',['GetDirectory',['../classxb_1_1xbFile.html#acd0fb2166b2bff7e8a1cf65a7bc8be1e',1,'xb::xbFile']]],
- ['getdoublefield_13',['GetDoubleField',['../classxb_1_1xbDbf.html#a4556041a7ff2f6b6f986729901c11f08',1,'xb::xbDbf::GetDoubleField(xbInt16 FieldNo, xbDouble &amp;dFieldValue) const'],['../classxb_1_1xbDbf.html#a2370b5e736931441a5968649291b9ef4',1,'xb::xbDbf::GetDoubleField(xbInt16 FieldNo, xbDouble &amp;dFieldValue, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#a6e6774df0f2d7733f4b25a9989596d95',1,'xb::xbDbf::GetDoubleField(const xbString &amp;sFieldName, xbDouble &amp;dFieldValue) const']]],
- ['getendiantype_14',['GetEndianType',['../classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243',1,'xb::xbSsv']]],
- ['geteof_15',['GetEof',['../classxb_1_1xbDbf.html#a256dc1f98626fa77da24e91a38ab5b4d',1,'xb::xbDbf']]],
- ['geterrormessage_16',['GetErrorMessage',['../classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4',1,'xb::xbSsv']]],
- ['getfield_17',['GetField',['../classxb_1_1xbDbf.html#a9a0fcf7e2040ab483e3807927833cb26',1,'xb::xbDbf::GetField(const xbString &amp;sFieldName, xbString &amp;sFieldValue) const'],['../classxb_1_1xbDbf.html#ad245a26eb8b79610c9ae7bab19e05513',1,'xb::xbDbf::GetField(xbInt16 iFieldNo, xbString &amp;sFieldValue, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#ac81f078f3c932f0da60ad1fbdd848d3e',1,'xb::xbDbf::GetField(xbInt16 iFieldNo, xbString &amp;sFieldValue) const']]],
- ['getfieldcnt_18',['GetFieldCnt',['../classxb_1_1xbDbf.html#add27d8ef555a13b336b8c804165dc15e',1,'xb::xbDbf']]],
- ['getfielddecimal_19',['GetFieldDecimal',['../classxb_1_1xbDbf.html#abcb4defad2e1b6e67f63cc60737ad840',1,'xb::xbDbf::GetFieldDecimal(xbInt16 iFieldNo, xbInt16 &amp;iFieldDecimal) const'],['../classxb_1_1xbDbf.html#a607f774fcd6dc0b9913d7a7801b60db2',1,'xb::xbDbf::GetFieldDecimal(const xbString &amp;sFieldName, xbInt16 &amp;iFieldDecimal) const']]],
- ['getfieldlen_20',['GetFieldLen',['../classxb_1_1xbDbf.html#adda4302b58cc6109b048f19d9b68bbd4',1,'xb::xbDbf::GetFieldLen(xbInt16 iFieldNo, xbInt16 &amp;iFieldLen) const'],['../classxb_1_1xbDbf.html#acf06dbccdba1a4bcd90fa0bea6cca59b',1,'xb::xbDbf::GetFieldLen(const xbString &amp;sFieldName, xbInt16 &amp;iFieldLen) const']]],
- ['getfieldname_21',['GetFieldName',['../classxb_1_1xbDbf.html#a5e3e4368bfba1724c016b8859023e34c',1,'xb::xbDbf']]],
- ['getfieldno_22',['GetFieldNo',['../classxb_1_1xbDbf.html#aed9113b5095c6df1b9c854cbd0d8047b',1,'xb::xbDbf::GetFieldNo(const xbString &amp;sFieldName, xbInt16 &amp;iFieldNo) const'],['../classxb_1_1xbDbf.html#aad9029e63909aeb77d8473256d88bea8',1,'xb::xbDbf::GetFieldNo(const xbString &amp;sFieldName) const']]],
- ['getfieldtype_23',['GetFieldType',['../classxb_1_1xbDbf.html#a5143973e4f165651152aa13c8fd45f84',1,'xb::xbDbf::GetFieldType(xbInt16 iFieldNo, char &amp;cFieldType) const'],['../classxb_1_1xbDbf.html#a181db879f1a75f93a34c03513a0b2fea',1,'xb::xbDbf::GetFieldType(const xbString &amp;sFieldName, char &amp;cFieldType) const']]],
- ['getfiledirpart_24',['GetFileDirPart',['../classxb_1_1xbFile.html#a60c53998e3d1b694134b20a87bc9bf5a',1,'xb::xbFile::GetFileDirPart(xbString &amp;sFileDirPartOut) const'],['../classxb_1_1xbFile.html#af5127c92892816e9bbc5c19653c4147a',1,'xb::xbFile::GetFileDirPart(const xbString &amp;sCompleteFileNameIn, xbString &amp;sFileDirPartOut) const']]],
- ['getfileextpart_25',['GetFileExtPart',['../classxb_1_1xbFile.html#a57a9222e5cbb51019d4eeb2c3ac89fa2',1,'xb::xbFile::GetFileExtPart(xbString &amp;sFileExtPartOut) const'],['../classxb_1_1xbFile.html#ab289b6ffe955321160c1f90220c22e25',1,'xb::xbFile::GetFileExtPart(const xbString &amp;sCompleteFileNameIn, xbString &amp;sFileExtPartOut) const']]],
- ['getfilemtime_26',['GetFileMtime',['../classxb_1_1xbFile.html#a02df78f4c90313243f508fc56b95aba8',1,'xb::xbFile']]],
- ['getfilename_27',['GetFileName',['../classxb_1_1xbFile.html#ac95cb882ccbcdedc9a233c6ad9fed07a',1,'xb::xbFile']]],
- ['getfilenamepart_28',['GetFileNamePart',['../classxb_1_1xbFile.html#a81422b3dd52763d2cc6c77237ec9af0a',1,'xb::xbFile::GetFileNamePart(xbString &amp;sFileNamePartOut) const'],['../classxb_1_1xbFile.html#a6110763c5ae996b72c7a62c15bdecc73',1,'xb::xbFile::GetFileNamePart(const xbString &amp;sCompleteFileNameIn, xbString &amp;sFileNamePartOut) const']]],
- ['getfilesize_29',['GetFileSize',['../classxb_1_1xbFile.html#a50b63c39e49d44e52078038027b24cc5',1,'xb::xbFile']]],
- ['getfiletype_30',['GetFileType',['../classxb_1_1xbFile.html#a5548236d38d43b89ae29b9a015b1f678',1,'xb::xbFile']]],
- ['getfirstrecord_31',['GetFirstRecord',['../classxb_1_1xbDbf.html#a6fc5b8a3e2f177d5ceaf9d975cbb5226',1,'xb::xbDbf::GetFirstRecord()'],['../classxb_1_1xbDbf.html#acb78991e8435edd36318c653cb977c1a',1,'xb::xbDbf::GetFirstRecord(xbInt16 iOption)']]],
- ['getfloatfield_32',['GetFloatField',['../classxb_1_1xbDbf.html#a81ef2f36f921d7ece066a592eb6393eb',1,'xb::xbDbf::GetFloatField(const xbString &amp;sFieldName, xbFloat &amp;fFieldValue) const'],['../classxb_1_1xbDbf.html#a3443f646038ced14425f067a59c0f2da',1,'xb::xbDbf::GetFloatField(xbInt16 iFieldNo, xbFloat &amp;fFieldValue) const']]],
- ['getfqfilename_33',['GetFqFileName',['../classxb_1_1xbFile.html#a31b4e641f93206ba23e2a5a27491dcd4',1,'xb::xbFile']]],
- ['getfunctioninfo_34',['GetFunctionInfo',['../classxb_1_1xbXBase.html#ae52e53340593b4253936c1372ec15ee1',1,'xb::xbXBase']]],
- ['getheaderlen_35',['GetHeaderLen',['../classxb_1_1xbDbf.html#ad56be2756b7a9f8318d9ba5cf215dafb',1,'xb::xbDbf']]],
- ['gethomedir_36',['GetHomeDir',['../classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9',1,'xb::xbSsv']]],
- ['getlastpos_37',['GetLastPos',['../classxb_1_1xbString.html#ac7698665f44413a5e99a5b5bc573c6df',1,'xb::xbString::GetLastPos(char c) const'],['../classxb_1_1xbString.html#a1c55587904fe7e534290559d0ecb8646',1,'xb::xbString::GetLastPos(const char *s) const']]],
- ['getlastrecord_38',['GetLastRecord',['../classxb_1_1xbDbf.html#a49e667f9c8ee55c36444702663fc5964',1,'xb::xbDbf::GetLastRecord()'],['../classxb_1_1xbDbf.html#a8ccfa2291417412b6894940d1b92f9a6',1,'xb::xbDbf::GetLastRecord(xbInt16 iOption)']]],
- ['getlogdirectory_39',['GetLogDirectory',['../classxb_1_1xbSsv.html#a4822315bded3969b59aeeb683c373051',1,'xb::xbSsv::GetLogDirectory()'],['../classxb_1_1xbXBase.html#a51d49b4d699740194b28c6ec0d0ee07b',1,'xb::xbXBase::GetLogDirectory()']]],
- ['getlogfilename_40',['GetLogFileName',['../classxb_1_1xbSsv.html#afaef09435be73b3111f5edbd7091d861',1,'xb::xbSsv::GetLogFileName()'],['../classxb_1_1xbXBase.html#ac0744edf9e4aa959d8cf2daa874376af',1,'xb::xbXBase::GetLogFileName() const']]],
- ['getlogfqfilename_41',['GetLogFqFileName',['../classxb_1_1xbXBase.html#ab5d63cd7d9137eba8a1d4d9c3df522b7',1,'xb::xbXBase']]],
- ['getlogicalfield_42',['GetLogicalField',['../classxb_1_1xbDbf.html#a3254f091fc4a1404abed3dd2bcdd6ce6',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbString &amp;sFieldData) const'],['../classxb_1_1xbDbf.html#a9cd6819bfd932ff8507e54d9cb9a624e',1,'xb::xbDbf::GetLogicalField(const xbString &amp;sFieldName, xbString &amp;sFieldData) const'],['../classxb_1_1xbDbf.html#aaf615ddcf08f8cd14efc713c2a8d7ae1',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbBool &amp;bFieldData) const'],['../classxb_1_1xbDbf.html#ab28feef20c988b0a6f1c1911a45377b0',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbBool &amp;bFieldData, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#a943cea7fde1b06c1a05184193eff8d2d',1,'xb::xbDbf::GetLogicalField(const xbString &amp;sFieldName, xbBool &amp;bFieldData) const']]],
- ['getlogstatus_43',['GetLogStatus',['../classxb_1_1xbXBase.html#ade34cd72c2a7e70fb55429a8a6f6c028',1,'xb::xbXBase']]],
- ['getlongfield_44',['GetLongField',['../classxb_1_1xbDbf.html#abe525c0820640e0a9e169d0b7913cfa1',1,'xb::xbDbf::GetLongField(xbInt16 iFieldNo, xbInt32 &amp;lFieldValue) const'],['../classxb_1_1xbDbf.html#a7b8ef75b17941beac17e50e969b2d3db',1,'xb::xbDbf::GetLongField(const xbString &amp;sFieldName, xbInt32 &amp;lFieldValue) const']]],
- ['getmultiuser_45',['GetMultiUser',['../classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5',1,'xb::xbSsv']]],
- ['getnextrecord_46',['GetNextRecord',['../classxb_1_1xbDbf.html#a18fdcb4ab15b36cd47fa6f6f7a540d1a',1,'xb::xbDbf::GetNextRecord(xbInt16 iOption, xbUInt32 ulStartRec)'],['../classxb_1_1xbDbf.html#a3191428a7a92d9107d8d42448884f2ac',1,'xb::xbDbf::GetNextRecord(xbInt16 iOption)'],['../classxb_1_1xbDbf.html#ab896fe3b734f556de578d30f92b18fe2',1,'xb::xbDbf::GetNextRecord()']]],
- ['getnextsqlcmd_47',['GetNextSqlCmd',['../xb__execsql_8cpp.html#af888ba5e7e94d92c2165362b87f1ea0e',1,'xb_execsql.cpp']]],
- ['getopenmode_48',['GetOpenMode',['../classxb_1_1xbFile.html#a3c500dc9dac22c49496e4b29386b2dd3',1,'xb::xbFile']]],
- ['getopentablecount_49',['GetOpenTableCount',['../classxb_1_1xbTblMgr.html#ad0d2d4adabc0dc0e761cfdee63c84069',1,'xb::xbTblMgr']]],
- ['getpathseparator_50',['GetPathSeparator',['../classxb_1_1xbString.html#af8b8b808cf43cd352321b43f500142db',1,'xb::xbString']]],
- ['getprevrecord_51',['GetPrevRecord',['../classxb_1_1xbDbf.html#ab3d248e5221b4f0809897cd43af17a1e',1,'xb::xbDbf::GetPrevRecord()'],['../classxb_1_1xbDbf.html#a7eadc7b08d73003802b90584f7b33387',1,'xb::xbDbf::GetPrevRecord(xbInt16 iOption)']]],
- ['getrawfield_52',['GetRawField',['../classxb_1_1xbDbf.html#aabd146c0e1054ab905ec96aedd84b02e',1,'xb::xbDbf']]],
- ['getrecord_53',['GetRecord',['../classxb_1_1xbDbf.html#a26fba086b07caeab95066bf1c8d25161',1,'xb::xbDbf']]],
- ['getrecordbuf_54',['GetRecordBuf',['../classxb_1_1xbDbf.html#aa3e38c4057d726a28a27d07a1610d124',1,'xb::xbDbf']]],
- ['getrecordcnt_55',['GetRecordCnt',['../classxb_1_1xbDbf.html#ac196ad55335e1f4789d698748434dc89',1,'xb::xbDbf']]],
- ['getrecordcount_56',['GetRecordCount',['../classxb_1_1xbDbf.html#a0aaa06d6028e75efc6b5131f7356ecce',1,'xb::xbDbf']]],
- ['getrecordlen_57',['GetRecordLen',['../classxb_1_1xbDbf.html#ab50d76c6e29e81e347a6feb04c2f62bb',1,'xb::xbDbf']]],
- ['getsharemode_58',['GetShareMode',['../classxb_1_1xbFile.html#a9b63e05b77f477ff6109ff7b9432c1b6',1,'xb::xbFile']]],
- ['getsize_59',['GetSize',['../classxb_1_1xbString.html#a6c33e73659f8e98819289d2661c7271c',1,'xb::xbString']]],
- ['gettblalias_60',['GetTblAlias',['../classxb_1_1xbDbf.html#a27758a325c097f204247908b65ba7fbd',1,'xb::xbDbf']]],
- ['gettbllistentry_61',['GetTblListEntry',['../classxb_1_1xbTblMgr.html#acbf148ddba4297021cfb980a161ebef9',1,'xb::xbTblMgr']]],
- ['getulongfield_62',['GetULongField',['../classxb_1_1xbDbf.html#a67e3a050f9090edf69eee75aef7f5d83',1,'xb::xbDbf::GetULongField(xbInt16 iFieldNo, xbUInt32 &amp;lFieldValue) const'],['../classxb_1_1xbDbf.html#a039eb02418ec4ca862adbc0f95b9cbec',1,'xb::xbDbf::GetULongField(const xbString &amp;sFieldName, xbUInt32 &amp;lFieldValue) const']]],
- ['getversion_63',['GetVersion',['../classxb_1_1xbDbf.html#a49212a9eb17f7fa9f303e08d5fc50fc6',1,'xb::xbDbf']]],
- ['getxbasefiletypebyte_64',['GetXbaseFileTypeByte',['../classxb_1_1xbFile.html#aaf2e697751a0beff41432a66bb83fb5e',1,'xb::xbFile::GetXbaseFileTypeByte(const xbString &amp;sFileName, xbInt16 &amp;iVersion)'],['../classxb_1_1xbFile.html#a7af337808919680b90710ad5e8a99232',1,'xb::xbFile::GetXbaseFileTypeByte(const xbString &amp;sFileName, unsigned char &amp;cFileTypeByte)'],['../classxb_1_1xbFile.html#a78aebdd21d3de46a450d5f835e3027f6',1,'xb::xbFile::GetXbaseFileTypeByte(const xbString &amp;sFileName, unsigned char &amp;cFileTypeByte, xbInt16 &amp;iVersion)']]],
- ['getxbaseptr_65',['GetXbasePtr',['../classxb_1_1xbDbf.html#ab21ec23c076b0c9affdc0f6672bd133f',1,'xb::xbDbf']]]
-];
diff --git a/docs/doxygen/html/search/all_8.js b/docs/doxygen/html/search/all_8.js
deleted file mode 100644
index b9794d9..0000000
--- a/docs/doxygen/html/search/all_8.js
+++ /dev/null
@@ -1,15 +0,0 @@
-var searchData=
-[
- ['iautocommit_0',['iAutoCommit',['../classxb_1_1xbDbf.html#ab506450954bc86e7bf1d7c4efe681f43',1,'xb::xbDbf']]],
- ['idbfstatus_1',['iDbfStatus',['../classxb_1_1xbDbf.html#a6d8e193da3ca414eef1e8866ec5ca81b',1,'xb::xbDbf']]],
- ['iendiantype_2',['iEndianType',['../classxb_1_1xbSsv.html#a5849e813f5e8e1cd180f0366637adbf3',1,'xb::xbSsv']]],
- ['ifieldlen_3',['iFieldLen',['../structxb_1_1xbSchema.html#a2da554af25ef628acf59bb52996056ac',1,'xb::xbSchema']]],
- ['ifileversion_4',['iFileVersion',['../classxb_1_1xbDbf.html#a15f495446f0d75bcf2fa89e3b699d388',1,'xb::xbDbf']]],
- ['inittime_5',['InitTime',['../tstfuncs_8cpp.html#ab1f17da15e67a8b2460d5a88b7a3db6e',1,'tstfuncs.cpp']]],
- ['initvars_6',['InitVars',['../classxb_1_1xbDbf.html#ad06fe0f7975fb81125d27d82504e6829',1,'xb::xbDbf']]],
- ['inoofdecs_7',['iNoOfDecs',['../structxb_1_1xbSchema.html#a55bab3bb69dee3508d168c93e182d4b9',1,'xb::xbSchema']]],
- ['inooffields_8',['iNoOfFields',['../classxb_1_1xbDbf.html#a5056757614c39f725cc775332494966a',1,'xb::xbDbf']]],
- ['isempty_9',['IsEmpty',['../classxb_1_1xbString.html#a4a255a30d683acd62ea09c1617b53cb3',1,'xb::xbString']]],
- ['isleapyear_10',['IsLeapYear',['../classxb_1_1xbDate.html#af2bd33a72448e2c5ee00d8b711dc5d95',1,'xb::xbDate::IsLeapYear(xbInt16 iYear) const'],['../classxb_1_1xbDate.html#a5f8051c31b29244265e8f26ac3547b9b',1,'xb::xbDate::IsLeapYear() const']]],
- ['isnull_11',['IsNull',['../classxb_1_1xbString.html#a3fa34fa31bcb7244ecb054ab628ad500',1,'xb::xbString']]]
-];
diff --git a/docs/doxygen/html/search/all_b.js b/docs/doxygen/html/search/all_b.js
deleted file mode 100644
index b877785..0000000
--- a/docs/doxygen/html/search/all_b.js
+++ /dev/null
@@ -1,9 +0,0 @@
-var searchData=
-[
- ['main_0',['main',['../xb__test__uda_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_uda.cpp'],['../xb__test__funcs_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_funcs.cpp'],['../xb__test__linklist_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_linklist.cpp'],['../xb__test__lock_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_lock.cpp'],['../xb__test__lock2_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_lock2.cpp'],['../xb__test__log_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_log.cpp'],['../xb__test__mdx_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_mdx.cpp'],['../xb__test__ndx_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_ndx.cpp'],['../xb__test__sql_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_sql.cpp'],['../xb__test__string_8cpp.html#aabf71bc9adb6daf457b2ea8879ae537f',1,'main(int argCnt, char **av=NULL):&#160;xb_test_string.cpp'],['../xb__test__tblmgr_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_tblmgr.cpp'],['../xb__test__filter_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_filter.cpp'],['../xb__test__xbase_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_xbase.cpp'],['../xb__cfg__check_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_cfg_check.cpp'],['../xb__copydbf_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_copydbf.cpp'],['../xb__dbfutil_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_dbfutil.cpp'],['../xb__deletall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_deletall.cpp'],['../xb__dumpdbt_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_dumpdbt.cpp'],['../xb__dumprecs_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_dumprecs.cpp'],['../xb__execsql_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_execsql.cpp'],['../xb__pack_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_pack.cpp'],['../xb__tblinfo_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_tblinfo.cpp'],['../xb__test__file_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_file.cpp'],['../xb__undelall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_undelall.cpp'],['../xb__ex__date_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_date.cpp'],['../xb__ex__expression_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_expression.cpp'],['../xb__ex__sql_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_ex_sql.cpp'],['../xb__ex__ssv_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_ex_ssv.cpp'],['../xb__ex__string_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_string.cpp'],['../xb__ex__v3__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_v3_create_dbf.cpp'],['../xb__ex__v3__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_v3_upd_dbf.cpp'],['../xb__ex__v4__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_v4_create_dbf.cpp'],['../xb__ex__v4__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_v4_upd_dbf.cpp'],['../xb__test__bcd_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_bcd.cpp'],['../xb__test__blockread_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_blockread.cpp'],['../xb__test__date_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_date.cpp'],['../xb__test__dbf__v3__memos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_dbf_v3_memos.cpp'],['../xb__test__dbf__v3__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_dbf_v3_nomemos.cpp'],['../xb__test__dbf__v4__memos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_dbf_v4_memos.cpp'],['../xb__test__dbf__v4__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_dbf_v4_nomemos.cpp'],['../xb__test__expnode_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_expnode.cpp'],['../xb__test__expression_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_expression.cpp']]],
- ['memofieldsexist_1',['MemoFieldsExist',['../classxb_1_1xbDbf.html#a013dc8c51fc1aa988de39cf3da6da950',1,'xb::xbDbf']]],
- ['mid_2',['Mid',['../classxb_1_1xbString.html#a0f9eefc836b24c4ee7c5a316c5d812b7',1,'xb::xbString']]],
- ['monthof_3',['MonthOf',['../classxb_1_1xbDate.html#a08bd84c67e1119d8c5c1748cd89d092e',1,'xb::xbDate']]],
- ['mydbfrec_4',['MyDbfRec',['../xb__test__blockread_8cpp.html#af68c3291a63fdf20ffa0e477460d148e',1,'xb_test_blockread.cpp']]],
- ['myv4record_5',['MyV4Record',['../xb__ex__expression_8cpp.html#a2122b9562802e2fd799b20454000dc99',1,'xb_ex_expression.cpp']]]
-];
diff --git a/docs/doxygen/html/search/all_c.js b/docs/doxygen/html/search/all_c.js
deleted file mode 100644
index 973aa37..0000000
--- a/docs/doxygen/html/search/all_c.js
+++ /dev/null
@@ -1,4 +0,0 @@
-var searchData=
-[
- ['namesuffixmissing_0',['NameSuffixMissing',['../classxb_1_1xbFile.html#a361e3cc318bbf1c4d10f069e0800a24e',1,'xb::xbFile']]]
-];
diff --git a/docs/doxygen/html/search/all_e.js b/docs/doxygen/html/search/all_e.js
deleted file mode 100644
index 6ef5a5b..0000000
--- a/docs/doxygen/html/search/all_e.js
+++ /dev/null
@@ -1,24 +0,0 @@
-var searchData=
-[
- ['pack_0',['Pack',['../classxb_1_1xbDbf.html#a93bb14ad0451355bfa3379128120988a',1,'xb::xbDbf::Pack(xbUInt32 &amp;ulDeletedRecCnt)'],['../classxb_1_1xbDbf.html#a8a52bf3ef2123c0d17e6b1f67bf0dc55',1,'xb::xbDbf::Pack()']]],
- ['padleft_1',['PadLeft',['../classxb_1_1xbString.html#a6a09cfed22066b0c72432f26960f9e7b',1,'xb::xbString']]],
- ['padright_2',['PadRight',['../classxb_1_1xbString.html#aba13f0c77eb6c4a22996039569fad284',1,'xb::xbString']]],
- ['pdbf_3',['pDbf',['../structxb_1_1xbTblList.html#a387d3f6bbf291a1fb96d276ed9bb96b6',1,'xb::xbTblList']]],
- ['pnext_4',['pNext',['../structxb_1_1xbTblList.html#a3fd169fcf0fd4df927544e5342db583c',1,'xb::xbTblList']]],
- ['pos_5',['Pos',['../classxb_1_1xbString.html#a8705d7277b72f5aa98021e84438914da',1,'xb::xbString::Pos(const char *s) const'],['../classxb_1_1xbString.html#a3baf59d15099589ff631995f129e582b',1,'xb::xbString::Pos(char c) const'],['../classxb_1_1xbString.html#a1b586890138da8bf0e23090bd8b34581',1,'xb::xbString::Pos(char c, xbUInt32 ulStartPos) const']]],
- ['printhelp_6',['PrintHelp',['../xb__copydbf_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_copydbf.cpp'],['../xb__dbfutil_8cpp.html#a9c55a055e1cd4249c7f47e19dc7ac564',1,'PrintHelp():&#160;xb_dbfutil.cpp'],['../xb__deletall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_deletall.cpp'],['../xb__dumpdbt_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_dumpdbt.cpp'],['../xb__dumprecs_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_dumprecs.cpp'],['../xb__pack_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_pack.cpp'],['../xb__tblinfo_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_tblinfo.cpp'],['../xb__undelall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_undelall.cpp']]],
- ['printresult_7',['PrintResult',['../xb__ex__expression_8cpp.html#a3234afc912211aec54c10d363d28cbda',1,'xb_ex_expression.cpp']]],
- ['printversion_8',['PrintVersion',['../xb__copydbf_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_copydbf.cpp'],['../xb__dbfutil_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_dbfutil.cpp'],['../xb__deletall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_deletall.cpp'],['../xb__dumpdbt_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_dumpdbt.cpp'],['../xb__dumprecs_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_dumprecs.cpp'],['../xb__pack_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_pack.cpp'],['../xb__tblinfo_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_tblinfo.cpp'],['../xb__undelall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_undelall.cpp']]],
- ['psfqtblname_9',['psFqTblName',['../structxb_1_1xbTblList.html#aceec65f6f6b585788cf98e8dabd2737d',1,'xb::xbTblList']]],
- ['pstblalias_10',['psTblAlias',['../structxb_1_1xbTblList.html#ac87742c8a6b1cf2e7e35218e96966a05',1,'xb::xbTblList']]],
- ['pstblname_11',['psTblName',['../structxb_1_1xbTblList.html#a02c3b0c47fd104ef9758b375ecdcfd0f',1,'xb::xbTblList']]],
- ['putat_12',['PutAt',['../classxb_1_1xbString.html#a1bae6fa8f608261f6e889616482f6e39',1,'xb::xbString']]],
- ['putdatefield_13',['PutDateField',['../classxb_1_1xbDbf.html#a873f04af528a9d81e6a367a59d998ec5',1,'xb::xbDbf::PutDateField(xbInt16 iFieldNo, const xbDate &amp;dt)'],['../classxb_1_1xbDbf.html#a571b36b3a940b1a16d5e834f329b33b9',1,'xb::xbDbf::PutDateField(const xbString &amp;sFieldName, const xbDate &amp;dt)']]],
- ['putdoublefield_14',['PutDoubleField',['../classxb_1_1xbDbf.html#a4f34842d7e8ff1f16992c2ece2fc38a5',1,'xb::xbDbf::PutDoubleField(xbInt16 FieldNo, xbDouble dFieldValue)'],['../classxb_1_1xbDbf.html#ae695bbc71c19abc71c0c5f2ff2e1f971',1,'xb::xbDbf::PutDoubleField(const xbString &amp;FieldName, xbDouble dFieldValue)']]],
- ['putfield_15',['PutField',['../classxb_1_1xbDbf.html#a7862215dd2f83a1c488e539cd1f9aec0',1,'xb::xbDbf::PutField(const xbString &amp;sFieldName, const xbString &amp;sFieldData)'],['../classxb_1_1xbDbf.html#a142b0c0dc904917f3c68c5572c1237b5',1,'xb::xbDbf::PutField(xbInt16 iFieldNo, const xbString &amp;sFieldData)']]],
- ['putfloatfield_16',['PutFloatField',['../classxb_1_1xbDbf.html#a64161eb50d72e424b11bf3732657ebd8',1,'xb::xbDbf::PutFloatField(xbInt16 iFieldNo, xbFloat fFieldValue)'],['../classxb_1_1xbDbf.html#a4ea3241bc710d57e5f755efda62288ad',1,'xb::xbDbf::PutFloatField(const xbString &amp;sFieldName, xbFloat fFieldValue)']]],
- ['putlogicalfield_17',['PutLogicalField',['../classxb_1_1xbDbf.html#ab39ac4269ac63bc7ea4f638733bb17f0',1,'xb::xbDbf::PutLogicalField(xbInt16 iFieldNo, const xbString &amp;sFieldData)'],['../classxb_1_1xbDbf.html#a507e400ca6526a9e0391cf06dd6a014e',1,'xb::xbDbf::PutLogicalField(const xbString &amp;sFieldName, const xbString &amp;sFieldData)'],['../classxb_1_1xbDbf.html#a423a0cb7bd252cedf956ace4954f275d',1,'xb::xbDbf::PutLogicalField(xbInt16 iFieldNo, xbBool bFieldData)'],['../classxb_1_1xbDbf.html#a623ca3ef5520c42308c1a16b518e7ff3',1,'xb::xbDbf::PutLogicalField(const xbString &amp;sFieldName, xbBool bFieldData)']]],
- ['putlongfield_18',['PutLongField',['../classxb_1_1xbDbf.html#ae7aad223119edb3d541e9f65e88c9f2f',1,'xb::xbDbf::PutLongField(const xbString &amp;sFieldNo, xbInt32 lFieldValue)'],['../classxb_1_1xbDbf.html#a56c8f924284bf88aabf90b7930b4eb47',1,'xb::xbDbf::PutLongField(xbInt16 iFieldNo, xbInt32 lFieldValue)']]],
- ['putrecord_19',['PutRecord',['../classxb_1_1xbDbf.html#aacbc7bac3ea0c502ee75b838f4f0fcbf',1,'xb::xbDbf::PutRecord(xbUInt32 ulRecNo)'],['../classxb_1_1xbDbf.html#a3c36a5ffbc7067a1abbcb526dd3b981d',1,'xb::xbDbf::PutRecord()']]],
- ['putulongfield_20',['PutULongField',['../classxb_1_1xbDbf.html#ac62cb97c4e678c83f41788b1ae4d0381',1,'xb::xbDbf::PutULongField(const xbString &amp;sFieldNo, xbUInt32 lFieldValue)'],['../classxb_1_1xbDbf.html#af5dec5c9ff903efffdb0490a44d296d2',1,'xb::xbDbf::PutULongField(xbInt16 iFieldNo, xbUInt32 lFieldValue)']]]
-];
diff --git a/docs/doxygen/html/search/defines_3.js b/docs/doxygen/html/search/defines_3.js
deleted file mode 100644
index da8097a..0000000
--- a/docs/doxygen/html/search/defines_3.js
+++ /dev/null
@@ -1,89 +0,0 @@
-var searchData=
-[
- ['xb_5factive_5frecs_0',['XB_ACTIVE_RECS',['../xbdbf_8h.html#a1c44bb25bf2e23a3a9d3d2312df0b592',1,'xbdbf.h']]],
- ['xb_5fall_5frecs_1',['XB_ALL_RECS',['../xbdbf_8h.html#a8bd17730da3ba5c55a6a07bc482dd0e4',1,'xbdbf.h']]],
- ['xb_5falready_5fopen_2',['XB_ALREADY_OPEN',['../xbretcod_8h.html#aa2ff8301503f446c6a5f6510090e520f',1,'xbretcod.h']]],
- ['xb_5fblockread_5fnot_5fenabled_3',['XB_BLOCKREAD_NOT_ENABLED',['../xbretcod_8h.html#aae9241d91cfb37f5d236128b3bce0a4a',1,'xbretcod.h']]],
- ['xb_5fbof_4',['XB_BOF',['../xbretcod_8h.html#ade5f3a7cf1467d12761e4e21b5e4200f',1,'xbretcod.h']]],
- ['xb_5fchar_5ffld_5',['XB_CHAR_FLD',['../xbdbf_8h.html#a20f739b9d9dc6a002a246a999e76aeaa',1,'xbdbf.h']]],
- ['xb_5fchareof_6',['XB_CHAREOF',['../xbdbf_8h.html#ada1115f596131888c04df61546b198c4',1,'xbdbf.h']]],
- ['xb_5fcharhdr_7',['XB_CHARHDR',['../xbdbf_8h.html#a35d56cac7959c1e5c761684ced3f1e17',1,'xbdbf.h']]],
- ['xb_5fclose_5ferror_8',['XB_CLOSE_ERROR',['../xbretcod_8h.html#a030684d5541cf6127a76d81b0684b235',1,'xbretcod.h']]],
- ['xb_5fclosed_9',['XB_CLOSED',['../xbdbf_8h.html#a843ca4569326dbd1d0647899b0eb512f',1,'xbdbf.h']]],
- ['xb_5fdate_5ffld_10',['XB_DATE_FLD',['../xbdbf_8h.html#a7f685e6f5fe804b2174725a27ce73adc',1,'xbdbf.h']]],
- ['xb_5fdbf_5ffile_5fnot_5fopen_11',['XB_DBF_FILE_NOT_OPEN',['../xbretcod_8h.html#a8104510b347c87998eadd0b27201e3c2',1,'xbretcod.h']]],
- ['xb_5fdelete_5ffailed_12',['XB_DELETE_FAILED',['../xbretcod_8h.html#ada15513935d5ede9216f07c0438f34d2',1,'xbretcod.h']]],
- ['xb_5fdeleted_5frecs_13',['XB_DELETED_RECS',['../xbdbf_8h.html#acc0a441854ed92b9d65d1181a97cad43',1,'xbdbf.h']]],
- ['xb_5fdirectory_5ferror_14',['XB_DIRECTORY_ERROR',['../xbretcod_8h.html#af532df74147ce2d872f61abfee49c53e',1,'xbretcod.h']]],
- ['xb_5fdontoverlay_15',['XB_DONTOVERLAY',['../xbdbf_8h.html#a7b797840abdb3291373d15978103a778',1,'xbdbf.h']]],
- ['xb_5fdup_5ftable_5for_5falias_16',['XB_DUP_TABLE_OR_ALIAS',['../xbretcod_8h.html#ac18036408d10e5eee1bf76cf92352b95',1,'xbretcod.h']]],
- ['xb_5fempty_17',['XB_EMPTY',['../xbretcod_8h.html#a18068d0cbe0c7a1b4dd3176220180c29',1,'xbretcod.h']]],
- ['xb_5feof_18',['XB_EOF',['../xbretcod_8h.html#a8b47031e90c3f86306c7058e4490d3b7',1,'xbretcod.h']]],
- ['xb_5ffile_5fexists_19',['XB_FILE_EXISTS',['../xbretcod_8h.html#a54303a9677dbd5342233f33dd08c64d0',1,'xbretcod.h']]],
- ['xb_5ffile_5fnot_5ffound_20',['XB_FILE_NOT_FOUND',['../xbretcod_8h.html#ad090af330c93111d12f6de35dbb065bc',1,'xbretcod.h']]],
- ['xb_5ffile_5ftype_5fnot_5fsupported_21',['XB_FILE_TYPE_NOT_SUPPORTED',['../xbretcod_8h.html#ab7b9130a5f1df9975cfeaf6241933596',1,'xbretcod.h']]],
- ['xb_5ffloat_5ffld_22',['XB_FLOAT_FLD',['../xbdbf_8h.html#a96ab4218d70ab603b4866354ce8c18cd',1,'xbdbf.h']]],
- ['xb_5ffmt_5fmonth_23',['XB_FMT_MONTH',['../xbdate_8h.html#aeacf2f7cc897ab5bd64781c0fb52b75d',1,'xbdate.h']]],
- ['xb_5ffmt_5fweek_24',['XB_FMT_WEEK',['../xbdate_8h.html#a8f22704d3fd93fa85dd93b6c699e8178',1,'xbdate.h']]],
- ['xb_5ffmt_5fyear_25',['XB_FMT_YEAR',['../xbdate_8h.html#aa29d78982a9e007874af1c4f4e4d1aa4',1,'xbdate.h']]],
- ['xb_5fincompatible_5foperands_26',['XB_INCOMPATIBLE_OPERANDS',['../xbretcod_8h.html#af141ec58b7ca7360e0be6c61d015ea74',1,'xbretcod.h']]],
- ['xb_5finconsistent_5fparm_5flens_27',['XB_INCONSISTENT_PARM_LENS',['../xbretcod_8h.html#adc4b24bfffa202f8df25409894e547b9',1,'xbretcod.h']]],
- ['xb_5finvalid_5fblock_5fno_28',['XB_INVALID_BLOCK_NO',['../xbretcod_8h.html#a4e13b529b486c43ca600ce7d8ddbf3c2',1,'xbretcod.h']]],
- ['xb_5finvalid_5fblock_5fsize_29',['XB_INVALID_BLOCK_SIZE',['../xbretcod_8h.html#a1bd22921612389c37f6b2eac438c62c5',1,'xbretcod.h']]],
- ['xb_5finvalid_5fdata_30',['XB_INVALID_DATA',['../xbretcod_8h.html#afb40bbed323ecb369dd430a2e1242f9a',1,'xbretcod.h']]],
- ['xb_5finvalid_5fdate_31',['XB_INVALID_DATE',['../xbretcod_8h.html#a702475500357a27b8a34463be3e11925',1,'xbretcod.h']]],
- ['xb_5finvalid_5fexpression_32',['XB_INVALID_EXPRESSION',['../xbretcod_8h.html#a54db562c3cae97581812b4fccd52b71a',1,'xbretcod.h']]],
- ['xb_5finvalid_5ffield_33',['XB_INVALID_FIELD',['../xbretcod_8h.html#a34180b2e2bd350ba2ebcdd1335e15d7e',1,'xbretcod.h']]],
- ['xb_5finvalid_5ffield_5flen_34',['XB_INVALID_FIELD_LEN',['../xbretcod_8h.html#a7bd322c0efbba17f68ccccd6cf624411',1,'xbretcod.h']]],
- ['xb_5finvalid_5ffield_5fname_35',['XB_INVALID_FIELD_NAME',['../xbretcod_8h.html#a59403978784130834cf39434cb73f96e',1,'xbretcod.h']]],
- ['xb_5finvalid_5ffield_5fno_36',['XB_INVALID_FIELD_NO',['../xbretcod_8h.html#a09d6c08a44316f551108a74003efd381',1,'xbretcod.h']]],
- ['xb_5finvalid_5ffield_5ftype_37',['XB_INVALID_FIELD_TYPE',['../xbretcod_8h.html#a79e2588f067d6e236c0e5a2c0728ba9f',1,'xbretcod.h']]],
- ['xb_5finvalid_5ffunction_38',['XB_INVALID_FUNCTION',['../xbretcod_8h.html#a2b7e5e440dbcf5e6dc885b24dbe28742',1,'xbretcod.h']]],
- ['xb_5finvalid_5findex_39',['XB_INVALID_INDEX',['../xbretcod_8h.html#acd175ef0541e2cad424791bd87619dd4',1,'xbretcod.h']]],
- ['xb_5finvalid_5fkeyno_40',['XB_INVALID_KEYNO',['../xbretcod_8h.html#aec2c0ac2bd62e0329ef130e4fbda39f8',1,'xbretcod.h']]],
- ['xb_5finvalid_5flock_5foption_41',['XB_INVALID_LOCK_OPTION',['../xbretcod_8h.html#ab45735e63c208eb7e6d6df31fd527aec',1,'xbretcod.h']]],
- ['xb_5finvalid_5fmemo_5ffield_42',['XB_INVALID_MEMO_FIELD',['../xbretcod_8h.html#a187c50745f51bfe4aa6f70a92f16c59f',1,'xbretcod.h']]],
- ['xb_5finvalid_5fnodelink_43',['XB_INVALID_NODELINK',['../xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb',1,'xbretcod.h']]],
- ['xb_5finvalid_5fobject_44',['XB_INVALID_OBJECT',['../xbretcod_8h.html#a418c047353bc683d0fd6ecbbdd5b7885',1,'xbretcod.h']]],
- ['xb_5finvalid_5foption_45',['XB_INVALID_OPTION',['../xbretcod_8h.html#af1cd0baf346cad686fa4dd11f700012a',1,'xbretcod.h']]],
- ['xb_5finvalid_5fpage_46',['XB_INVALID_PAGE',['../xbretcod_8h.html#ad0aba12b5ae2137f8d6abd28b47f95f0',1,'xbretcod.h']]],
- ['xb_5finvalid_5fparm_47',['XB_INVALID_PARM',['../xbretcod_8h.html#a4cedf96581c9cbc9c14d07494143702d',1,'xbretcod.h']]],
- ['xb_5finvalid_5frecord_48',['XB_INVALID_RECORD',['../xbretcod_8h.html#a0fd212f912b2e62700a66bae95bd73a1',1,'xbretcod.h']]],
- ['xb_5finvalid_5ftable_5fname_49',['XB_INVALID_TABLE_NAME',['../xbretcod_8h.html#a53891c95a78483704d2a8e14c4499f92',1,'xbretcod.h']]],
- ['xb_5finvalid_5ftag_50',['XB_INVALID_TAG',['../xbretcod_8h.html#a176d917912d3433f065483f905a4c50a',1,'xbretcod.h']]],
- ['xb_5fkey_5fnot_5funique_51',['XB_KEY_NOT_UNIQUE',['../xbretcod_8h.html#ad60dbb1862c0c1c2dc0464cfbfd93a34',1,'xbretcod.h']]],
- ['xb_5flimit_5freached_52',['XB_LIMIT_REACHED',['../xbretcod_8h.html#a59f1a8a6aca19595c2d1804349a24850',1,'xbretcod.h']]],
- ['xb_5flock_53',['XB_LOCK',['../xbdbf_8h.html#a395a2e101a793bacabf6bc079d178e29',1,'xbdbf.h']]],
- ['xb_5flock_5ffailed_54',['XB_LOCK_FAILED',['../xbretcod_8h.html#a001e24b39e0f155fb1e892f5b1b9cff1',1,'xbretcod.h']]],
- ['xb_5flogical_5ffld_55',['XB_LOGICAL_FLD',['../xbdbf_8h.html#a2f6d5073af761bc1a806a2c7b1c1d886',1,'xbdbf.h']]],
- ['xb_5fmax_5ferror_5fno_56',['XB_MAX_ERROR_NO',['../xbretcod_8h.html#a299419a9c80e000b74bf97a2d24d6a3d',1,'xbretcod.h']]],
- ['xb_5fmemcpy_5ferror_57',['XB_MEMCPY_ERROR',['../xbretcod_8h.html#aa2925f035e3b186d7efa14648ea0e86d',1,'xbretcod.h']]],
- ['xb_5fmemo_5ffld_58',['XB_MEMO_FLD',['../xbdbf_8h.html#a23fa19b19cb43bd6dcc59a5a3f6c30ad',1,'xbdbf.h']]],
- ['xb_5fmulti_5fuser_59',['XB_MULTI_USER',['../xbfile_8h.html#a05c0fc99ba71cf953d046d12f3f874bc',1,'xbfile.h']]],
- ['xb_5fno_5ferror_60',['XB_NO_ERROR',['../xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23',1,'xbretcod.h']]],
- ['xb_5fno_5fmemory_61',['XB_NO_MEMORY',['../xbretcod_8h.html#ae687fc7d872ba0475a8477e4447f9b54',1,'xbretcod.h']]],
- ['xb_5fnot_5ffound_62',['XB_NOT_FOUND',['../xbretcod_8h.html#ac2606659a54111334f5b02861e533700',1,'xbretcod.h']]],
- ['xb_5fnot_5fopen_63',['XB_NOT_OPEN',['../xbretcod_8h.html#a9474b400f647bdefbbb07e5177e8d7a1',1,'xbretcod.h']]],
- ['xb_5fnumeric_5ffld_64',['XB_NUMERIC_FLD',['../xbdbf_8h.html#ae9fb6d69cc5edc94d36ae403c22ec1c6',1,'xbdbf.h']]],
- ['xb_5fopen_65',['XB_OPEN',['../xbdbf_8h.html#a9a6dafbb07cac744eb14094efa739409',1,'xbdbf.h']]],
- ['xb_5fopen_5ferror_66',['XB_OPEN_ERROR',['../xbretcod_8h.html#aaab55236993a1d3acb29206252a904c8',1,'xbretcod.h']]],
- ['xb_5foverlay_67',['XB_OVERLAY',['../xbdbf_8h.html#a6fe10b307878b4612b04c2c876a4a592',1,'xbdbf.h']]],
- ['xb_5fparse_5ferror_68',['XB_PARSE_ERROR',['../xbretcod_8h.html#aec713cac2b03a0d536a2d16336ae7c0b',1,'xbretcod.h']]],
- ['xb_5fread_69',['XB_READ',['../xbfile_8h.html#ae58c73e0ba237fcf67ee20feea6c2743',1,'xbfile.h']]],
- ['xb_5fread_5ferror_70',['XB_READ_ERROR',['../xbretcod_8h.html#adbd40585db8bb748d191f94a33bac710',1,'xbretcod.h']]],
- ['xb_5fread_5fwrite_71',['XB_READ_WRITE',['../xbfile_8h.html#af991a288c327f6857e90156ea734a633',1,'xbfile.h']]],
- ['xb_5frename_5ferror_72',['XB_RENAME_ERROR',['../xbretcod_8h.html#a373f30b2efcbbab9f6d060fb3fe8cba3',1,'xbretcod.h']]],
- ['xb_5fseek_5ferror_73',['XB_SEEK_ERROR',['../xbretcod_8h.html#a0455ad8719e153b08ec68b10c81e9f41',1,'xbretcod.h']]],
- ['xb_5fsingle_5fuser_74',['XB_SINGLE_USER',['../xbfile_8h.html#a9ec4d60a008c667d9861e3b3814f0232',1,'xbfile.h']]],
- ['xb_5fsyntax_5ferror_75',['XB_SYNTAX_ERROR',['../xbretcod_8h.html#a5db3a90f215534143bdde81253729c7f',1,'xbretcod.h']]],
- ['xb_5ftable_5fnot_5flocked_76',['XB_TABLE_NOT_LOCKED',['../xbretcod_8h.html#af6aaf779fddecca521d785666f6dc56b',1,'xbretcod.h']]],
- ['xb_5funbalanced_5fparens_77',['XB_UNBALANCED_PARENS',['../xbretcod_8h.html#aff5646a6b0884ff81004de6961473ea6',1,'xbretcod.h']]],
- ['xb_5funbalanced_5fquotes_78',['XB_UNBALANCED_QUOTES',['../xbretcod_8h.html#aedfa20a6c4eb9ba3063ba56be8280eac',1,'xbretcod.h']]],
- ['xb_5funlock_79',['XB_UNLOCK',['../xbdbf_8h.html#a21389b73e7b4e7e185fa635b9e354c2e',1,'xbdbf.h']]],
- ['xb_5fupdated_80',['XB_UPDATED',['../xbdbf_8h.html#a26e7eeda69f32bc88b08a208ca9e7991',1,'xbdbf.h']]],
- ['xb_5fwrite_81',['XB_WRITE',['../xbfile_8h.html#abbf99e259c2f31572c886da6d85b1359',1,'xbfile.h']]],
- ['xb_5fwrite_5ferror_82',['XB_WRITE_ERROR',['../xbretcod_8h.html#aef34ebe6726057f805d6063130280549',1,'xbretcod.h']]],
- ['xbfalse_83',['xbFalse',['../xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc',1,'xbtypes.h']]],
- ['xbfileno_84',['xbFileNo',['../xbtypes_8h.html#a2c65f692ac861990861575e18f72f6eb',1,'xbtypes.h']]],
- ['xbtrue_85',['xbTrue',['../xbtypes_8h.html#ab0ae00665298fe7f5292691cb98ec2d9',1,'xbtypes.h']]]
-];
diff --git a/docs/doxygen/html/search/files_1.js b/docs/doxygen/html/search/files_1.js
deleted file mode 100644
index 3628f1d..0000000
--- a/docs/doxygen/html/search/files_1.js
+++ /dev/null
@@ -1,106 +0,0 @@
-var searchData=
-[
- ['xb_5fcfg_5fcheck_2ecpp_0',['xb_cfg_check.cpp',['../xb__cfg__check_8cpp.html',1,'']]],
- ['xb_5fcopydbf_2ecpp_1',['xb_copydbf.cpp',['../xb__copydbf_8cpp.html',1,'']]],
- ['xb_5fdbfutil_2ecpp_2',['xb_dbfutil.cpp',['../xb__dbfutil_8cpp.html',1,'']]],
- ['xb_5fdeletall_2ecpp_3',['xb_deletall.cpp',['../xb__deletall_8cpp.html',1,'']]],
- ['xb_5fdumpdbt_2ecpp_4',['xb_dumpdbt.cpp',['../xb__dumpdbt_8cpp.html',1,'']]],
- ['xb_5fdumprecs_2ecpp_5',['xb_dumprecs.cpp',['../xb__dumprecs_8cpp.html',1,'']]],
- ['xb_5fex_5fdate_2ecpp_6',['xb_ex_date.cpp',['../xb__ex__date_8cpp.html',1,'']]],
- ['xb_5fex_5fexpression_2ecpp_7',['xb_ex_expression.cpp',['../xb__ex__expression_8cpp.html',1,'']]],
- ['xb_5fex_5fsql_2ecpp_8',['xb_ex_sql.cpp',['../xb__ex__sql_8cpp.html',1,'']]],
- ['xb_5fex_5fssv_2ecpp_9',['xb_ex_ssv.cpp',['../xb__ex__ssv_8cpp.html',1,'']]],
- ['xb_5fex_5fstring_2ecpp_10',['xb_ex_string.cpp',['../xb__ex__string_8cpp.html',1,'']]],
- ['xb_5fex_5fv3_5fcreate_5fdbf_2ecpp_11',['xb_ex_v3_create_dbf.cpp',['../xb__ex__v3__create__dbf_8cpp.html',1,'']]],
- ['xb_5fex_5fv3_5fupd_5fdbf_2ecpp_12',['xb_ex_v3_upd_dbf.cpp',['../xb__ex__v3__upd__dbf_8cpp.html',1,'']]],
- ['xb_5fex_5fv4_5fcreate_5fdbf_2ecpp_13',['xb_ex_v4_create_dbf.cpp',['../xb__ex__v4__create__dbf_8cpp.html',1,'']]],
- ['xb_5fex_5fv4_5fupd_5fdbf_2ecpp_14',['xb_ex_v4_upd_dbf.cpp',['../xb__ex__v4__upd__dbf_8cpp.html',1,'']]],
- ['xb_5fexecsql_2ecpp_15',['xb_execsql.cpp',['../xb__execsql_8cpp.html',1,'']]],
- ['xb_5fpack_2ecpp_16',['xb_pack.cpp',['../xb__pack_8cpp.html',1,'']]],
- ['xb_5ftblinfo_2ecpp_17',['xb_tblinfo.cpp',['../xb__tblinfo_8cpp.html',1,'']]],
- ['xb_5ftest_5fbcd_2ecpp_18',['xb_test_bcd.cpp',['../xb__test__bcd_8cpp.html',1,'']]],
- ['xb_5ftest_5fblockread_2ecpp_19',['xb_test_blockread.cpp',['../xb__test__blockread_8cpp.html',1,'']]],
- ['xb_5ftest_5fdate_2ecpp_20',['xb_test_date.cpp',['../xb__test__date_8cpp.html',1,'']]],
- ['xb_5ftest_5fdbf_5fv3_5fmemos_2ecpp_21',['xb_test_dbf_v3_memos.cpp',['../xb__test__dbf__v3__memos_8cpp.html',1,'']]],
- ['xb_5ftest_5fdbf_5fv3_5fnomemos_2ecpp_22',['xb_test_dbf_v3_nomemos.cpp',['../xb__test__dbf__v3__nomemos_8cpp.html',1,'']]],
- ['xb_5ftest_5fdbf_5fv4_5fmemos_2ecpp_23',['xb_test_dbf_v4_memos.cpp',['../xb__test__dbf__v4__memos_8cpp.html',1,'']]],
- ['xb_5ftest_5fdbf_5fv4_5fnomemos_2ecpp_24',['xb_test_dbf_v4_nomemos.cpp',['../xb__test__dbf__v4__nomemos_8cpp.html',1,'']]],
- ['xb_5ftest_5fexpnode_2ecpp_25',['xb_test_expnode.cpp',['../xb__test__expnode_8cpp.html',1,'']]],
- ['xb_5ftest_5fexpression_2ecpp_26',['xb_test_expression.cpp',['../xb__test__expression_8cpp.html',1,'']]],
- ['xb_5ftest_5ffile_2ecpp_27',['xb_test_file.cpp',['../xb__test__file_8cpp.html',1,'']]],
- ['xb_5ftest_5ffilter_2ecpp_28',['xb_test_filter.cpp',['../xb__test__filter_8cpp.html',1,'']]],
- ['xb_5ftest_5ffuncs_2ecpp_29',['xb_test_funcs.cpp',['../xb__test__funcs_8cpp.html',1,'']]],
- ['xb_5ftest_5flinklist_2ecpp_30',['xb_test_linklist.cpp',['../xb__test__linklist_8cpp.html',1,'']]],
- ['xb_5ftest_5flock_2ecpp_31',['xb_test_lock.cpp',['../xb__test__lock_8cpp.html',1,'']]],
- ['xb_5ftest_5flock2_2ecpp_32',['xb_test_lock2.cpp',['../xb__test__lock2_8cpp.html',1,'']]],
- ['xb_5ftest_5flog_2ecpp_33',['xb_test_log.cpp',['../xb__test__log_8cpp.html',1,'']]],
- ['xb_5ftest_5fmdx_2ecpp_34',['xb_test_mdx.cpp',['../xb__test__mdx_8cpp.html',1,'']]],
- ['xb_5ftest_5fndx_2ecpp_35',['xb_test_ndx.cpp',['../xb__test__ndx_8cpp.html',1,'']]],
- ['xb_5ftest_5fsql_2ecpp_36',['xb_test_sql.cpp',['../xb__test__sql_8cpp.html',1,'']]],
- ['xb_5ftest_5fstring_2ecpp_37',['xb_test_string.cpp',['../xb__test__string_8cpp.html',1,'']]],
- ['xb_5ftest_5ftblmgr_2ecpp_38',['xb_test_tblmgr.cpp',['../xb__test__tblmgr_8cpp.html',1,'']]],
- ['xb_5ftest_5fuda_2ecpp_39',['xb_test_uda.cpp',['../xb__test__uda_8cpp.html',1,'']]],
- ['xb_5ftest_5fxbase_2ecpp_40',['xb_test_xbase.cpp',['../xb__test__xbase_8cpp.html',1,'']]],
- ['xb_5fundelall_2ecpp_41',['xb_undelall.cpp',['../xb__undelall_8cpp.html',1,'']]],
- ['xbalttbl_2ecpp_42',['xbalttbl.cpp',['../xbalttbl_8cpp.html',1,'']]],
- ['xbase_2eh_43',['xbase.h',['../xbase_8h.html',1,'']]],
- ['xbbcd_2ecpp_44',['xbbcd.cpp',['../xbbcd_8cpp.html',1,'']]],
- ['xbbcd_2eh_45',['xbbcd.h',['../xbbcd_8h.html',1,'']]],
- ['xbblkread_2eh_46',['xbblkread.h',['../xbblkread_8h.html',1,'']]],
- ['xbblockread_2ecpp_47',['xbblockread.cpp',['../xbblockread_8cpp.html',1,'']]],
- ['xbcrix_2ecpp_48',['xbcrix.cpp',['../xbcrix_8cpp.html',1,'']]],
- ['xbcrtbl_2ecpp_49',['xbcrtbl.cpp',['../xbcrtbl_8cpp.html',1,'']]],
- ['xbcrtbl_2esave_2ecpp_50',['xbcrtbl.save.cpp',['../xbcrtbl_8save_8cpp.html',1,'']]],
- ['xbdate_2ecpp_51',['xbdate.cpp',['../xbdate_8cpp.html',1,'']]],
- ['xbdate_2eh_52',['xbdate.h',['../xbdate_8h.html',1,'']]],
- ['xbdbf_2ecpp_53',['xbdbf.cpp',['../xbdbf_8cpp.html',1,'']]],
- ['xbdbf_2eh_54',['xbdbf.h',['../xbdbf_8h.html',1,'']]],
- ['xbdbf3_2ecpp_55',['xbdbf3.cpp',['../xbdbf3_8cpp.html',1,'']]],
- ['xbdbf4_2ecpp_56',['xbdbf4.cpp',['../xbdbf4_8cpp.html',1,'']]],
- ['xbdelete_2ecpp_57',['xbdelete.cpp',['../xbdelete_8cpp.html',1,'']]],
- ['xbdrpix_2ecpp_58',['xbdrpix.cpp',['../xbdrpix_8cpp.html',1,'']]],
- ['xbdrptbl_2ecpp_59',['xbdrptbl.cpp',['../xbdrptbl_8cpp.html',1,'']]],
- ['xbexp_2ecpp_60',['xbexp.cpp',['../xbexp_8cpp.html',1,'']]],
- ['xbexp_2eh_61',['xbexp.h',['../xbexp_8h.html',1,'']]],
- ['xbexpnode_2ecpp_62',['xbexpnode.cpp',['../xbexpnode_8cpp.html',1,'']]],
- ['xbexpnode_2eh_63',['xbexpnode.h',['../xbexpnode_8h.html',1,'']]],
- ['xbfields_2ecpp_64',['xbfields.cpp',['../xbfields_8cpp.html',1,'']]],
- ['xbfile_2ecpp_65',['xbfile.cpp',['../xbfile_8cpp.html',1,'']]],
- ['xbfile_2eh_66',['xbfile.h',['../xbfile_8h.html',1,'']]],
- ['xbfilter_2ecpp_67',['xbfilter.cpp',['../xbfilter_8cpp.html',1,'']]],
- ['xbfilter_2eh_68',['xbfilter.h',['../xbfilter_8h.html',1,'']]],
- ['xbfuncs_2ecpp_69',['xbfuncs.cpp',['../xbfuncs_8cpp.html',1,'']]],
- ['xbindex_2eh_70',['xbindex.h',['../xbindex_8h.html',1,'']]],
- ['xbinsert_2ecpp_71',['xbinsert.cpp',['../xbinsert_8cpp.html',1,'']]],
- ['xbixbase_2ecpp_72',['xbixbase.cpp',['../xbixbase_8cpp.html',1,'']]],
- ['xbixmdx_2ecpp_73',['xbixmdx.cpp',['../xbixmdx_8cpp.html',1,'']]],
- ['xbixndx_2ecpp_74',['xbixndx.cpp',['../xbixndx_8cpp.html',1,'']]],
- ['xblnklst_2eh_75',['xblnklst.h',['../xblnklst_8h.html',1,'']]],
- ['xblnklstord_2eh_76',['xblnklstord.h',['../xblnklstord_8h.html',1,'']]],
- ['xblnknod_2eh_77',['xblnknod.h',['../xblnknod_8h.html',1,'']]],
- ['xblog_2ecpp_78',['xblog.cpp',['../xblog_8cpp.html',1,'']]],
- ['xblog_2eh_79',['xblog.h',['../xblog_8h.html',1,'']]],
- ['xbmemo_2ecpp_80',['xbmemo.cpp',['../xbmemo_8cpp.html',1,'']]],
- ['xbmemo_2eh_81',['xbmemo.h',['../xbmemo_8h.html',1,'']]],
- ['xbmemo3_2ecpp_82',['xbmemo3.cpp',['../xbmemo3_8cpp.html',1,'']]],
- ['xbmemo4_2ecpp_83',['xbmemo4.cpp',['../xbmemo4_8cpp.html',1,'']]],
- ['xbretcod_2eh_84',['xbretcod.h',['../xbretcod_8h.html',1,'']]],
- ['xbselect_2ecpp_85',['xbselect.cpp',['../xbselect_8cpp.html',1,'']]],
- ['xbset_2ecpp_86',['xbset.cpp',['../xbset_8cpp.html',1,'']]],
- ['xbsql_2ecpp_87',['xbsql.cpp',['../xbsql_8cpp.html',1,'']]],
- ['xbsql_2eh_88',['xbsql.h',['../xbsql_8h.html',1,'']]],
- ['xbssv_2ecpp_89',['xbssv.cpp',['../xbssv_8cpp.html',1,'']]],
- ['xbssv_2eh_90',['xbssv.h',['../xbssv_8h.html',1,'']]],
- ['xbstmt_2ecpp_91',['xbstmt.cpp',['../xbstmt_8cpp.html',1,'']]],
- ['xbstring_2ecpp_92',['xbstring.cpp',['../xbstring_8cpp.html',1,'']]],
- ['xbstring_2eh_93',['xbstring.h',['../xbstring_8h.html',1,'']]],
- ['xbtag_2ecpp_94',['xbtag.cpp',['../xbtag_8cpp.html',1,'']]],
- ['xbtag_2eh_95',['xbtag.h',['../xbtag_8h.html',1,'']]],
- ['xbtblmgr_2ecpp_96',['xbtblmgr.cpp',['../xbtblmgr_8cpp.html',1,'']]],
- ['xbtblmgr_2eh_97',['xbtblmgr.h',['../xbtblmgr_8h.html',1,'']]],
- ['xbtypes_2eh_98',['xbtypes.h',['../xbtypes_8h.html',1,'']]],
- ['xbuda_2ecpp_99',['xbuda.cpp',['../xbuda_8cpp.html',1,'']]],
- ['xbuda_2eh_100',['xbuda.h',['../xbuda_8h.html',1,'']]],
- ['xbxbase_2ecpp_101',['xbxbase.cpp',['../xbxbase_8cpp.html',1,'']]],
- ['xbxbase_2eh_102',['xbxbase.h',['../xbxbase_8h.html',1,'']]]
-];
diff --git a/docs/doxygen/html/search/functions_0.js b/docs/doxygen/html/search/functions_0.js
deleted file mode 100644
index 1e4e72c..0000000
--- a/docs/doxygen/html/search/functions_0.js
+++ /dev/null
@@ -1,9 +0,0 @@
-var searchData=
-[
- ['abort_0',['Abort',['../classxb_1_1xbDbf.html#a4edcf31390fbdc8c3558004770fd9f2f',1,'xb::xbDbf']]],
- ['addbackslash_1',['AddBackSlash',['../classxb_1_1xbString.html#a6c4fdb689d27a9d19a0b5b4236e1ca62',1,'xb::xbString']]],
- ['addtbltotbllist_2',['AddTblToTblList',['../classxb_1_1xbTblMgr.html#af16832ff2bfaee09265652e0fc03709a',1,'xb::xbTblMgr::AddTblToTblList(xbDbf *d, const xbString &amp;sFqTblName)'],['../classxb_1_1xbTblMgr.html#a2033188e9b08778188a034a6fc90ca85',1,'xb::xbTblMgr::AddTblToTblList(xbDbf *d, const xbString &amp;sFqTblName, const xbString &amp;sTblAlias)']]],
- ['append_3',['Append',['../classxb_1_1xbString.html#a8f202e4798491f2ae9ce51ff58dd5815',1,'xb::xbString::Append(const xbString &amp;s)'],['../classxb_1_1xbString.html#a1922319303feb6da1f40b5994c5e8240',1,'xb::xbString::Append(const char *s)'],['../classxb_1_1xbString.html#a097453cb71fbf0b5511cf1259ddce4fb',1,'xb::xbString::Append(const char *s, xbUInt32 iByteCount)'],['../classxb_1_1xbString.html#a093c6ab5df375a2589755bb8f48fa5c7',1,'xb::xbString::Append(char c)']]],
- ['appendrecord_4',['AppendRecord',['../classxb_1_1xbDbf.html#a5b412dd796241673eb1aa2c93513d69b',1,'xb::xbDbf']]],
- ['assign_5',['Assign',['../classxb_1_1xbString.html#a85bef82dfa22122a1ab8dfe58a107d96',1,'xb::xbString::Assign(const char *srcStr, xbUInt32 lStartPos, xbUInt32 lCopyLen)'],['../classxb_1_1xbString.html#a08eb7ca6740423acab4e8bd7a6c8043d',1,'xb::xbString::Assign(const char *srcStr, xbUInt32 lStartPos)'],['../classxb_1_1xbString.html#ac6afd224dfbe439ce083c8dd1ad3246c',1,'xb::xbString::Assign(const xbString &amp;s, xbUInt32 pos, xbUInt32 lCopyLen)'],['../classxb_1_1xbString.html#a4f1d709d9f6c56959e8549157b4ee68c',1,'xb::xbString::Assign(const xbString &amp;s, xbUInt32 lCopyLen)']]]
-];
diff --git a/docs/doxygen/html/search/functions_10.js b/docs/doxygen/html/search/functions_10.js
deleted file mode 100644
index 475233e..0000000
--- a/docs/doxygen/html/search/functions_10.js
+++ /dev/null
@@ -1,25 +0,0 @@
-var searchData=
-[
- ['set_0',['Set',['../classxb_1_1xbString.html#ab85753d2c39882e946a8468cbb587700',1,'xb::xbString::Set(const char *s)'],['../classxb_1_1xbString.html#ac0d08bd688fd0e3707e32886d0dfeb09',1,'xb::xbString::Set(const xbString &amp;s)'],['../classxb_1_1xbString.html#a6eba6ccd0c805a22516de2c18a30f8a3',1,'xb::xbString::Set(const char *s, xbUInt32 ulSize)'],['../classxb_1_1xbDate.html#a4b0cde152b5de0f7d26608d1445110b6',1,'xb::xbDate::Set()']]],
- ['setautocommit_1',['SetAutoCommit',['../classxb_1_1xbDbf.html#a4cf7f0d423164f3cf074ae41f96f4e90',1,'xb::xbDbf']]],
- ['setblocksize_2',['SetBlockSize',['../classxb_1_1xbFile.html#a991c5676a6f38fa752435390989f413e',1,'xb::xbFile']]],
- ['setdatadirectory_3',['SetDataDirectory',['../classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c',1,'xb::xbSsv']]],
- ['setdefaultautocommit_4',['SetDefaultAutoCommit',['../classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd',1,'xb::xbSsv']]],
- ['setdefaultdateformat_5',['SetDefaultDateFormat',['../classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c',1,'xb::xbSsv']]],
- ['setdirectory_6',['SetDirectory',['../classxb_1_1xbFile.html#ae78a85255488bc78964c16946dbaead3',1,'xb::xbFile']]],
- ['setendiantype_7',['SetEndianType',['../classxb_1_1xbSsv.html#a904ec348fd029d4a76e72b8fde636108',1,'xb::xbSsv']]],
- ['setfilename_8',['SetFileName',['../classxb_1_1xbFile.html#a5419eb27e56822f828b2b88a9502a636',1,'xb::xbFile']]],
- ['setfqfilename_9',['SetFqFileName',['../classxb_1_1xbFile.html#aee832fa11db2077a532f49e1329bd05a',1,'xb::xbFile']]],
- ['sethomefolders_10',['SetHomeFolders',['../classxb_1_1xbFile.html#a060acbfaa8d528f86cb59301814b414a',1,'xb::xbFile']]],
- ['setlogdirectory_11',['SetLogDirectory',['../classxb_1_1xbSsv.html#a7b992ed97281bf25b5b66f5df686225e',1,'xb::xbSsv::SetLogDirectory()'],['../classxb_1_1xbXBase.html#a48d82dbe298c6f4cf68a63ac82dd8292',1,'xb::xbXBase::SetLogDirectory(const xbString &amp;sLogFileDirectory)']]],
- ['setlogfilename_12',['SetLogFileName',['../classxb_1_1xbXBase.html#a94010b88a309315ef980715eb581336c',1,'xb::xbXBase']]],
- ['setlogsize_13',['SetLogSize',['../classxb_1_1xbXBase.html#a666a0cb5b76ec7a9a3677d339e0c6b42',1,'xb::xbXBase']]],
- ['setmultiuser_14',['SetMultiUser',['../classxb_1_1xbSsv.html#aba6e59512f7172dd55dcf92059e5928c',1,'xb::xbSsv']]],
- ['setnum_15',['SetNum',['../classxb_1_1xbString.html#a3af5b1f111f94b0667551fcbd1d97abd',1,'xb::xbString']]],
- ['setversion_16',['SetVersion',['../classxb_1_1xbDbf.html#a7e63e852418f337eb7c44de5dcd50323',1,'xb::xbDbf']]],
- ['sprintf_17',['Sprintf',['../classxb_1_1xbString.html#a9e9bfa29d86377b915f1628aeb0e9195',1,'xb::xbString']]],
- ['str_18',['Str',['../classxb_1_1xbDate.html#ab43a5d8d929767c0ffdd722972bb8cc0',1,'xb::xbDate::Str()'],['../classxb_1_1xbString.html#a6715f4c0010f3ab487c9d787838a29b3',1,'xb::xbString::Str() const']]],
- ['strncpy_19',['strncpy',['../classxb_1_1xbString.html#a3bc9e856c34f0c240a6e36e5b6e3ea7b',1,'xb::xbString']]],
- ['swapchars_20',['SwapChars',['../classxb_1_1xbString.html#a054683872e1f05d11c2cf8683a63a6fe',1,'xb::xbString']]],
- ['sysdate_21',['Sysdate',['../classxb_1_1xbDate.html#a40ba54a58d64cf56266f020f91584192',1,'xb::xbDate']]]
-];
diff --git a/docs/doxygen/html/search/functions_15.js b/docs/doxygen/html/search/functions_15.js
deleted file mode 100644
index 190bfe1..0000000
--- a/docs/doxygen/html/search/functions_15.js
+++ /dev/null
@@ -1,30 +0,0 @@
-var searchData=
-[
- ['xbdate_0',['xbDate',['../classxb_1_1xbDate.html#ac8a4d9330221a3daee21b3c28c1d9719',1,'xb::xbDate::xbDate(const char *Date8)'],['../classxb_1_1xbDate.html#ab3150e7db0ab5db10a07d748b55465eb',1,'xb::xbDate::xbDate()'],['../classxb_1_1xbDate.html#a7ab727a7ec184a086ad36ef83b948170',1,'xb::xbDate::xbDate(xbInt32 lJulDate)'],['../classxb_1_1xbDate.html#acf4546f5681735ede18210f60bab68d4',1,'xb::xbDate::xbDate(const xbString &amp;Date8)']]],
- ['xbdbf_1',['xbDbf',['../classxb_1_1xbDbf.html#a84a75f80bc0e9b8a22b728767949c204',1,'xb::xbDbf']]],
- ['xbfclose_2',['xbFclose',['../classxb_1_1xbFile.html#a18830b5755d74818f60d9c7ce38ddf2d',1,'xb::xbFile']]],
- ['xbfeof_3',['xbFeof',['../classxb_1_1xbFile.html#af5b6356832d2a67212070a1aa605f170',1,'xb::xbFile']]],
- ['xbfflush_4',['xbFflush',['../classxb_1_1xbFile.html#ad205184d43409f04216540ae22f15009',1,'xb::xbFile']]],
- ['xbfgetc_5',['xbFgetc',['../classxb_1_1xbFile.html#afb1c584d2895ffb7834df80aea7eb1e4',1,'xb::xbFile::xbFgetc(xbInt32 &amp;c)'],['../classxb_1_1xbFile.html#a5ee229bda4d7d6695e122200e581e7a6',1,'xb::xbFile::xbFgetc(char &amp;c)']]],
- ['xbfgets_6',['xbFgets',['../classxb_1_1xbFile.html#ad245955ace26e5dde85fd4373b30d026',1,'xb::xbFile']]],
- ['xbfile_7',['xbFile',['../classxb_1_1xbFile.html#a869eedd74c6eddc308852eb546c87176',1,'xb::xbFile']]],
- ['xbfopen_8',['xbFopen',['../classxb_1_1xbFile.html#a7cdfef5ede9ac98d44a28a6b7a70972c',1,'xb::xbFile::xbFopen(xbInt16 iOpenMode)'],['../classxb_1_1xbFile.html#ab0fa19686ca8953ff4b556fb5b249135',1,'xb::xbFile::xbFopen(const xbString &amp;sMode, const xbString &amp;sFileName, xbInt16 iShareMode)'],['../classxb_1_1xbFile.html#aabd113333b49c36cad23244b392baab4',1,'xb::xbFile::xbFopen(xbInt16 iOpenMode, xbInt16 iShareMode)'],['../classxb_1_1xbFile.html#a0548cedf0f26b7d8ac221f75b0cd048c',1,'xb::xbFile::xbFopen(const xbString &amp;sOpenMode, xbInt16 iShareMode)']]],
- ['xbfputc_9',['xbFputc',['../classxb_1_1xbFile.html#af2e940c78956e5cb6824f9a1bc404896',1,'xb::xbFile::xbFputc(xbInt32 c)'],['../classxb_1_1xbFile.html#a863f74cf17df8186d88586b4d2a6441a',1,'xb::xbFile::xbFputc(xbInt32 c, xbInt32 iNoTimes)']]],
- ['xbfputs_10',['xbFputs',['../classxb_1_1xbFile.html#a698f3b40216778562e639e6ca1a47573',1,'xb::xbFile']]],
- ['xbfread_11',['xbFread',['../classxb_1_1xbFile.html#ab4f6afaa1f77539f27a4f05c26e54e2f',1,'xb::xbFile']]],
- ['xbfseek_12',['xbFseek',['../classxb_1_1xbFile.html#a5337ab8918df240910c0d19b4f298e3d',1,'xb::xbFile']]],
- ['xbftell_13',['xbFtell',['../classxb_1_1xbFile.html#a0e1c06aedfa7fbcb92e117f891edd13b',1,'xb::xbFile']]],
- ['xbfturnofffilebuffering_14',['xbFTurnOffFileBuffering',['../classxb_1_1xbFile.html#a9891b792f585a696f38a5cf959e30918',1,'xb::xbFile']]],
- ['xbfwrite_15',['xbFwrite',['../classxb_1_1xbFile.html#a6aadd871d1782944703fed773d44b85f',1,'xb::xbFile']]],
- ['xbmemcmp_16',['xbMemcmp',['../classxb_1_1xbXBase.html#a1b239c021358476382942522911b5c66',1,'xb::xbXBase']]],
- ['xbreaduntil_17',['xbReadUntil',['../classxb_1_1xbFile.html#a08463f506f425c2385acbe1a561506e9',1,'xb::xbFile']]],
- ['xbremove_18',['xbRemove',['../classxb_1_1xbFile.html#a6d919366c2ec95e529906bf8842cbf07',1,'xb::xbFile::xbRemove(const xbString &amp;sFileName, xbInt16 iOption)'],['../classxb_1_1xbFile.html#a58f6a6751fdf7e9549c273bb75d93eb5',1,'xb::xbFile::xbRemove(const xbString &amp;sFileName)'],['../classxb_1_1xbFile.html#ab3c668a8570433188382d31d7c60bd48',1,'xb::xbFile::xbRemove()']]],
- ['xbrename_19',['xbRename',['../classxb_1_1xbFile.html#afc8ce113aa72611a278233f9bb170012',1,'xb::xbFile']]],
- ['xbrewind_20',['xbRewind',['../classxb_1_1xbFile.html#a7996b6e084665c37c3892faea64b3505',1,'xb::xbFile']]],
- ['xbsleep_21',['xbSleep',['../classxb_1_1xbXBase.html#a0915aff7be4b2dd3e881f3c5d0da4baf',1,'xb::xbXBase']]],
- ['xbssv_22',['xbSsv',['../classxb_1_1xbSsv.html#a58f85692c3167af20b1a7c17c621523b',1,'xb::xbSsv']]],
- ['xbstring_23',['xbString',['../classxb_1_1xbString.html#a63f9313217e0ff3c9789ec59316216a1',1,'xb::xbString::xbString(xbUInt32 size)'],['../classxb_1_1xbString.html#a14bbaa293c8d40dd6c64332f2668a92e',1,'xb::xbString::xbString(char c)'],['../classxb_1_1xbString.html#a18f3598dcdf2ec5692274fc8ee769ad7',1,'xb::xbString::xbString(const char *s, xbUInt32 lMaxLen)'],['../classxb_1_1xbString.html#a0d81016b93fc36ebbbafacf35c677f07',1,'xb::xbString::xbString(const xbString &amp;s)'],['../classxb_1_1xbString.html#a25856311106c5fb15d39017b63f0ddc7',1,'xb::xbString::xbString(const char *=&quot;&quot;)'],['../classxb_1_1xbString.html#ad865b55e3b08dffd527afee8e7e8e3fe',1,'xb::xbString::xbString(xbDouble d)']]],
- ['xbtblmgr_24',['xbTblMgr',['../classxb_1_1xbTblMgr.html#aad83f5ecc184ca6cbdfc6f356b598d6c',1,'xb::xbTblMgr']]],
- ['xbtruncate_25',['xbTruncate',['../classxb_1_1xbFile.html#a518bfcbfa3699d883cf89affee383296',1,'xb::xbFile']]],
- ['xbxbase_26',['xbXBase',['../classxb_1_1xbXBase.html#a6c68588e33946fb5416af3f86fe83224',1,'xb::xbXBase']]]
-];
diff --git a/docs/doxygen/html/search/functions_2.js b/docs/doxygen/html/search/functions_2.js
deleted file mode 100644
index 4a1e70d..0000000
--- a/docs/doxygen/html/search/functions_2.js
+++ /dev/null
@@ -1,21 +0,0 @@
-var searchData=
-[
- ['calcrollingcenturyforyear_0',['CalcRollingCenturyForYear',['../classxb_1_1xbDate.html#a9df58caa54105c489c314785c457e8cb',1,'xb::xbDate']]],
- ['centuryof_1',['CenturyOf',['../classxb_1_1xbDate.html#a38b2c5285c69ed65e94ece6c22dafde0',1,'xb::xbDate']]],
- ['chardayof_2',['CharDayOf',['../classxb_1_1xbDate.html#a9fc29730b66cddfbb58c69992a99cc7c',1,'xb::xbDate']]],
- ['charmonthof_3',['CharMonthOf',['../classxb_1_1xbDate.html#afffc84f02bd421335ff8ebe9fb3db0ac',1,'xb::xbDate']]],
- ['chrontime_4',['ChronTime',['../tstfuncs_8cpp.html#af990eed1e43605771a5810196b4043f7',1,'tstfuncs.cpp']]],
- ['close_5',['Close',['../classxb_1_1xbDbf.html#ad68d73113e54e1b5f326e90f45e9989d',1,'xb::xbDbf']]],
- ['closealltables_6',['CloseAllTables',['../classxb_1_1xbXBase.html#afccb552ca0daff779c0500ff20d22c2b',1,'xb::xbXBase']]],
- ['commit_7',['Commit',['../classxb_1_1xbDbf.html#abd69532c885ab72bcf3fb5066b318f4f',1,'xb::xbDbf']]],
- ['copy_8',['Copy',['../classxb_1_1xbString.html#ac7a8466b03c04df838bd182ef244f792',1,'xb::xbString']]],
- ['copydbfstructure_9',['CopyDbfStructure',['../classxb_1_1xbDbf.html#a829c615a130a1fdf609d93438d8a6264',1,'xb::xbDbf']]],
- ['countchar_10',['CountChar',['../classxb_1_1xbString.html#a26bc14d92dc7ce1f2bf31cd74af0db0f',1,'xb::xbString::CountChar(char c) const'],['../classxb_1_1xbString.html#adc0204bcfd1c052b9aea9229b10acf72',1,'xb::xbString::CountChar(char c, xbInt16 iOpt) const']]],
- ['createtable_11',['CreateTable',['../classxb_1_1xbDbf.html#a73e41bfe679dd06ab16c436652df93f1',1,'xb::xbDbf']]],
- ['createuniquefilename_12',['CreateUniqueFileName',['../classxb_1_1xbFile.html#aae9a2ddb0adb8165b4ac2b6a28a932f7',1,'xb::xbFile::CreateUniqueFileName(const xbString &amp;sDirIn, const xbString &amp;sExtIn, xbString &amp;sFqnOut)'],['../classxb_1_1xbFile.html#ae5ffabde2c88ea58324f27e471f6bfc0',1,'xb::xbFile::CreateUniqueFileName(const xbString &amp;sDirIn, const xbString &amp;sExtIn, xbString &amp;sFqnOut, xbInt16 iOption)']]],
- ['ctod_13',['CTOD',['../classxb_1_1xbDate.html#abb1eb4b0394e4a67aadab15779b1b8c5',1,'xb::xbDate']]],
- ['cvthexchar_14',['CvtHexChar',['../classxb_1_1xbString.html#a0a737bd408a94903f214eb2879eb56de',1,'xb::xbString']]],
- ['cvthexstring_15',['CvtHexString',['../classxb_1_1xbString.html#ab5eb6918a0ae9ab6c0e961318f3d1eb0',1,'xb::xbString']]],
- ['cvtlonglong_16',['CvtLongLong',['../classxb_1_1xbString.html#ae3ab18365e132323f8ae4c99eb72181c',1,'xb::xbString']]],
- ['cvtulonglong_17',['CvtULongLong',['../classxb_1_1xbString.html#a1528b30b84a41c3564ef31d1f4496b15',1,'xb::xbString']]]
-];
diff --git a/docs/doxygen/html/search/functions_3.js b/docs/doxygen/html/search/functions_3.js
deleted file mode 100644
index e2fc7b3..0000000
--- a/docs/doxygen/html/search/functions_3.js
+++ /dev/null
@@ -1,20 +0,0 @@
-var searchData=
-[
- ['dateisvalid_0',['DateIsValid',['../classxb_1_1xbDate.html#a367f66ef0c03c1747c12a18784554ccb',1,'xb::xbDate']]],
- ['dayof_1',['DayOf',['../classxb_1_1xbDate.html#ad6417a900ce64a46f8909c0c7a2ddea2',1,'xb::xbDate']]],
- ['dblequals_2',['dblEquals',['../tstfuncs_8cpp.html#a8b8e417213c57f2ea0bcb61a7fb28860',1,'tstfuncs.cpp']]],
- ['dblmax_3',['dblMax',['../tstfuncs_8cpp.html#a69a6e718e066af7f8392e5f1fea40d1b',1,'tstfuncs.cpp']]],
- ['dblmin_4',['dblMin',['../tstfuncs_8cpp.html#a4d7b8f3f1ce52c6c0a281f25419f4c93',1,'tstfuncs.cpp']]],
- ['deleteall_5',['DeleteAll',['../classxb_1_1xbDbf.html#a01c26b67e312be1e674b3da710e031b9',1,'xb::xbDbf']]],
- ['deleteallrecords_6',['DeleteAllRecords',['../classxb_1_1xbDbf.html#a3067fdfa3a7a5c15651f6e89d1102176',1,'xb::xbDbf']]],
- ['deleterecord_7',['DeleteRecord',['../classxb_1_1xbDbf.html#acd8c10579229f3a2e2c5fdb7fcef90db',1,'xb::xbDbf']]],
- ['deletetable_8',['DeleteTable',['../classxb_1_1xbDbf.html#a4085ed4f049d976124d8edc3d3c56397',1,'xb::xbDbf']]],
- ['determinexbasememoversion_9',['DetermineXbaseMemoVersion',['../classxb_1_1xbFile.html#a5a740033664c9ad2611c90e2a6d0c2d3',1,'xb::xbFile']]],
- ['determinexbasetableversion_10',['DetermineXbaseTableVersion',['../classxb_1_1xbFile.html#ae2b6ac26018dc28f77afbb3f008c3f66',1,'xb::xbFile']]],
- ['devtester_11',['DevTester',['../xb__test__expression_8cpp.html#aee57237c5f5b9b4d80e84bf530eb42bc',1,'xb_test_expression.cpp']]],
- ['disablemsglogging_12',['DisableMsgLogging',['../classxb_1_1xbXBase.html#ae357fac4fdebdf49e46563cf611caf65',1,'xb::xbXBase']]],
- ['displayerror_13',['DisplayError',['../classxb_1_1xbSsv.html#a97dfa59ab9a8e9f17454da0faceb023d',1,'xb::xbSsv']]],
- ['displaytablelist_14',['DisplayTableList',['../classxb_1_1xbTblMgr.html#a5eebffb9e8cc64141e35c2622045cb50',1,'xb::xbTblMgr']]],
- ['dumpheader_15',['DumpHeader',['../classxb_1_1xbDbf.html#a309b5b1fb6a5c048c4bfb404d011ac55',1,'xb::xbDbf']]],
- ['dumprecord_16',['DumpRecord',['../classxb_1_1xbDbf.html#aba30399f15885a07f87f904c0d0656fa',1,'xb::xbDbf']]]
-];
diff --git a/docs/doxygen/html/search/functions_4.js b/docs/doxygen/html/search/functions_4.js
deleted file mode 100644
index a90081e..0000000
--- a/docs/doxygen/html/search/functions_4.js
+++ /dev/null
@@ -1,15 +0,0 @@
-var searchData=
-[
- ['egetdouble_0',['eGetDouble',['../classxb_1_1xbFile.html#ab14e4a11427f5efb81cba1dd32bd1aa1',1,'xb::xbFile']]],
- ['egetint16_1',['eGetInt16',['../classxb_1_1xbFile.html#ac40c991110ddc6fb30a72d90f4652762',1,'xb::xbFile']]],
- ['egetint32_2',['eGetInt32',['../classxb_1_1xbFile.html#a60b24a5afc984c586bf384c7e915ba0d',1,'xb::xbFile']]],
- ['egetuint16_3',['eGetUInt16',['../classxb_1_1xbFile.html#a936ade458e6d5e6d29f9b5031888d189',1,'xb::xbFile']]],
- ['egetuint32_4',['eGetUInt32',['../classxb_1_1xbFile.html#a78f052529d39a18deaface5a0d47d0b0',1,'xb::xbFile']]],
- ['enablemsglogging_5',['EnableMsgLogging',['../classxb_1_1xbXBase.html#a470e6eb0ed0be60338f9b40976d3ad48',1,'xb::xbXBase']]],
- ['eputdouble_6',['ePutDouble',['../classxb_1_1xbFile.html#a98b6ff533ae93f90c977a2ba23eeb105',1,'xb::xbFile']]],
- ['eputint16_7',['ePutInt16',['../classxb_1_1xbFile.html#a29130f12739ac8fa837f4eaedf1338b2',1,'xb::xbFile']]],
- ['eputint32_8',['ePutInt32',['../classxb_1_1xbFile.html#a19c37f76a2ccbb45019cb0fc373d3f46',1,'xb::xbFile']]],
- ['eputuint16_9',['ePutUInt16',['../classxb_1_1xbFile.html#a65e9839f92b96eac7b0d071fac3bbe40',1,'xb::xbFile']]],
- ['eputuint32_10',['ePutUInt32',['../classxb_1_1xbFile.html#aa3f6ceae4b96f24875d86848bf13a173',1,'xb::xbFile']]],
- ['extractelement_11',['ExtractElement',['../classxb_1_1xbString.html#a77195fc4957952625cb33bb503517a3e',1,'xb::xbString']]]
-];
diff --git a/docs/doxygen/html/search/functions_6.js b/docs/doxygen/html/search/functions_6.js
deleted file mode 100644
index 1cedf85..0000000
--- a/docs/doxygen/html/search/functions_6.js
+++ /dev/null
@@ -1,69 +0,0 @@
-var searchData=
-[
- ['getautocommit_0',['GetAutoCommit',['../classxb_1_1xbDbf.html#ae0c00226fd2ea7a67f101e795467ed68',1,'xb::xbDbf::GetAutoCommit(xbInt16 iOption) const'],['../classxb_1_1xbDbf.html#abb9e20c5efacd4fea80f1515abbc6b55',1,'xb::xbDbf::GetAutoCommit() const']]],
- ['getblocksize_1',['GetBlockSize',['../classxb_1_1xbFile.html#a638e14262410a1627819f016a16cdce2',1,'xb::xbFile']]],
- ['getbof_2',['GetBof',['../classxb_1_1xbDbf.html#ad0827a43c025c1184ffebab74cc9e779',1,'xb::xbDbf']]],
- ['getcharacter_3',['GetCharacter',['../classxb_1_1xbString.html#a685187a5f8401b322fc61f3fbe56330d',1,'xb::xbString']]],
- ['getcmdlineopt_4',['GetCmdLineOpt',['../classxb_1_1xbXBase.html#aadecb3ac460d8e94b88b2e809e22f48e',1,'xb::xbXBase::GetCmdLineOpt(xbInt32 lArgc, char **argv, const char *sOptRqst, xbString &amp;sParmOut)'],['../classxb_1_1xbXBase.html#a8612e0c5334349fbceb9394b47817fd5',1,'xb::xbXBase::GetCmdLineOpt(xbInt32 lArgc, char **argv, xbString &amp;sOptRqst, xbString &amp;sParmOut)']]],
- ['getcurrecno_5',['GetCurRecNo',['../classxb_1_1xbDbf.html#a643a80a3792a52760c8e09ba18719503',1,'xb::xbDbf']]],
- ['getdatadirectory_6',['GetDataDirectory',['../classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9',1,'xb::xbSsv']]],
- ['getdatefield_7',['GetDateField',['../classxb_1_1xbDbf.html#af78ef1fba949463ff7f829d3cffc4555',1,'xb::xbDbf::GetDateField(xbInt16 iFieldNo, xbDate &amp;dt) const'],['../classxb_1_1xbDbf.html#ac624e06a97666bfd64b4f252b4548b36',1,'xb::xbDbf::GetDateField(const xbString &amp;sFieldName, xbDate &amp;dt) const']]],
- ['getdbfptr_8',['GetDbfPtr',['../classxb_1_1xbTblMgr.html#ad8a5d28a2ee6720a9aa74bcb45662cf5',1,'xb::xbTblMgr::GetDbfPtr(const xbString &amp;sTblAlias) const'],['../classxb_1_1xbTblMgr.html#a801dfecf7fc216954b4197b2c31b25d6',1,'xb::xbTblMgr::GetDbfPtr(xbInt16 sItemNo) const']]],
- ['getdbfstatus_9',['GetDbfStatus',['../classxb_1_1xbDbf.html#ac1110d867ba297a52c8b0e83e88f05e6',1,'xb::xbDbf']]],
- ['getdefaultautocommit_10',['GetDefaultAutoCommit',['../classxb_1_1xbSsv.html#a6982f973e81587b04916f4509746aaf5',1,'xb::xbSsv']]],
- ['getdefaultdateformat_11',['GetDefaultDateFormat',['../classxb_1_1xbSsv.html#a6fbb9c3a550ab0b3378f9586a57791d2',1,'xb::xbSsv']]],
- ['getdirectory_12',['GetDirectory',['../classxb_1_1xbFile.html#acd0fb2166b2bff7e8a1cf65a7bc8be1e',1,'xb::xbFile']]],
- ['getdoublefield_13',['GetDoubleField',['../classxb_1_1xbDbf.html#a4556041a7ff2f6b6f986729901c11f08',1,'xb::xbDbf::GetDoubleField(xbInt16 FieldNo, xbDouble &amp;dFieldValue) const'],['../classxb_1_1xbDbf.html#a2370b5e736931441a5968649291b9ef4',1,'xb::xbDbf::GetDoubleField(xbInt16 FieldNo, xbDouble &amp;dFieldValue, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#a6e6774df0f2d7733f4b25a9989596d95',1,'xb::xbDbf::GetDoubleField(const xbString &amp;sFieldName, xbDouble &amp;dFieldValue) const']]],
- ['getendiantype_14',['GetEndianType',['../classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243',1,'xb::xbSsv']]],
- ['geteof_15',['GetEof',['../classxb_1_1xbDbf.html#a256dc1f98626fa77da24e91a38ab5b4d',1,'xb::xbDbf']]],
- ['geterrormessage_16',['GetErrorMessage',['../classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4',1,'xb::xbSsv']]],
- ['getfield_17',['GetField',['../classxb_1_1xbDbf.html#a9a0fcf7e2040ab483e3807927833cb26',1,'xb::xbDbf::GetField(const xbString &amp;sFieldName, xbString &amp;sFieldValue) const'],['../classxb_1_1xbDbf.html#ad245a26eb8b79610c9ae7bab19e05513',1,'xb::xbDbf::GetField(xbInt16 iFieldNo, xbString &amp;sFieldValue, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#ac81f078f3c932f0da60ad1fbdd848d3e',1,'xb::xbDbf::GetField(xbInt16 iFieldNo, xbString &amp;sFieldValue) const']]],
- ['getfieldcnt_18',['GetFieldCnt',['../classxb_1_1xbDbf.html#add27d8ef555a13b336b8c804165dc15e',1,'xb::xbDbf']]],
- ['getfielddecimal_19',['GetFieldDecimal',['../classxb_1_1xbDbf.html#abcb4defad2e1b6e67f63cc60737ad840',1,'xb::xbDbf::GetFieldDecimal(xbInt16 iFieldNo, xbInt16 &amp;iFieldDecimal) const'],['../classxb_1_1xbDbf.html#a607f774fcd6dc0b9913d7a7801b60db2',1,'xb::xbDbf::GetFieldDecimal(const xbString &amp;sFieldName, xbInt16 &amp;iFieldDecimal) const']]],
- ['getfieldlen_20',['GetFieldLen',['../classxb_1_1xbDbf.html#adda4302b58cc6109b048f19d9b68bbd4',1,'xb::xbDbf::GetFieldLen(xbInt16 iFieldNo, xbInt16 &amp;iFieldLen) const'],['../classxb_1_1xbDbf.html#acf06dbccdba1a4bcd90fa0bea6cca59b',1,'xb::xbDbf::GetFieldLen(const xbString &amp;sFieldName, xbInt16 &amp;iFieldLen) const']]],
- ['getfieldname_21',['GetFieldName',['../classxb_1_1xbDbf.html#a5e3e4368bfba1724c016b8859023e34c',1,'xb::xbDbf']]],
- ['getfieldno_22',['GetFieldNo',['../classxb_1_1xbDbf.html#aed9113b5095c6df1b9c854cbd0d8047b',1,'xb::xbDbf::GetFieldNo(const xbString &amp;sFieldName, xbInt16 &amp;iFieldNo) const'],['../classxb_1_1xbDbf.html#aad9029e63909aeb77d8473256d88bea8',1,'xb::xbDbf::GetFieldNo(const xbString &amp;sFieldName) const']]],
- ['getfieldtype_23',['GetFieldType',['../classxb_1_1xbDbf.html#a5143973e4f165651152aa13c8fd45f84',1,'xb::xbDbf::GetFieldType(xbInt16 iFieldNo, char &amp;cFieldType) const'],['../classxb_1_1xbDbf.html#a181db879f1a75f93a34c03513a0b2fea',1,'xb::xbDbf::GetFieldType(const xbString &amp;sFieldName, char &amp;cFieldType) const']]],
- ['getfiledirpart_24',['GetFileDirPart',['../classxb_1_1xbFile.html#a60c53998e3d1b694134b20a87bc9bf5a',1,'xb::xbFile::GetFileDirPart(xbString &amp;sFileDirPartOut) const'],['../classxb_1_1xbFile.html#af5127c92892816e9bbc5c19653c4147a',1,'xb::xbFile::GetFileDirPart(const xbString &amp;sCompleteFileNameIn, xbString &amp;sFileDirPartOut) const']]],
- ['getfileextpart_25',['GetFileExtPart',['../classxb_1_1xbFile.html#a57a9222e5cbb51019d4eeb2c3ac89fa2',1,'xb::xbFile::GetFileExtPart(xbString &amp;sFileExtPartOut) const'],['../classxb_1_1xbFile.html#ab289b6ffe955321160c1f90220c22e25',1,'xb::xbFile::GetFileExtPart(const xbString &amp;sCompleteFileNameIn, xbString &amp;sFileExtPartOut) const']]],
- ['getfilemtime_26',['GetFileMtime',['../classxb_1_1xbFile.html#a02df78f4c90313243f508fc56b95aba8',1,'xb::xbFile']]],
- ['getfilename_27',['GetFileName',['../classxb_1_1xbFile.html#ac95cb882ccbcdedc9a233c6ad9fed07a',1,'xb::xbFile']]],
- ['getfilenamepart_28',['GetFileNamePart',['../classxb_1_1xbFile.html#a81422b3dd52763d2cc6c77237ec9af0a',1,'xb::xbFile::GetFileNamePart(xbString &amp;sFileNamePartOut) const'],['../classxb_1_1xbFile.html#a6110763c5ae996b72c7a62c15bdecc73',1,'xb::xbFile::GetFileNamePart(const xbString &amp;sCompleteFileNameIn, xbString &amp;sFileNamePartOut) const']]],
- ['getfilesize_29',['GetFileSize',['../classxb_1_1xbFile.html#a50b63c39e49d44e52078038027b24cc5',1,'xb::xbFile']]],
- ['getfiletype_30',['GetFileType',['../classxb_1_1xbFile.html#a5548236d38d43b89ae29b9a015b1f678',1,'xb::xbFile']]],
- ['getfirstrecord_31',['GetFirstRecord',['../classxb_1_1xbDbf.html#a6fc5b8a3e2f177d5ceaf9d975cbb5226',1,'xb::xbDbf::GetFirstRecord()'],['../classxb_1_1xbDbf.html#acb78991e8435edd36318c653cb977c1a',1,'xb::xbDbf::GetFirstRecord(xbInt16 iOption)']]],
- ['getfloatfield_32',['GetFloatField',['../classxb_1_1xbDbf.html#a81ef2f36f921d7ece066a592eb6393eb',1,'xb::xbDbf::GetFloatField(const xbString &amp;sFieldName, xbFloat &amp;fFieldValue) const'],['../classxb_1_1xbDbf.html#a3443f646038ced14425f067a59c0f2da',1,'xb::xbDbf::GetFloatField(xbInt16 iFieldNo, xbFloat &amp;fFieldValue) const']]],
- ['getfqfilename_33',['GetFqFileName',['../classxb_1_1xbFile.html#a31b4e641f93206ba23e2a5a27491dcd4',1,'xb::xbFile']]],
- ['getfunctioninfo_34',['GetFunctionInfo',['../classxb_1_1xbXBase.html#ae52e53340593b4253936c1372ec15ee1',1,'xb::xbXBase']]],
- ['getheaderlen_35',['GetHeaderLen',['../classxb_1_1xbDbf.html#ad56be2756b7a9f8318d9ba5cf215dafb',1,'xb::xbDbf']]],
- ['gethomedir_36',['GetHomeDir',['../classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9',1,'xb::xbSsv']]],
- ['getlastpos_37',['GetLastPos',['../classxb_1_1xbString.html#ac7698665f44413a5e99a5b5bc573c6df',1,'xb::xbString::GetLastPos(char c) const'],['../classxb_1_1xbString.html#a1c55587904fe7e534290559d0ecb8646',1,'xb::xbString::GetLastPos(const char *s) const']]],
- ['getlastrecord_38',['GetLastRecord',['../classxb_1_1xbDbf.html#a49e667f9c8ee55c36444702663fc5964',1,'xb::xbDbf::GetLastRecord()'],['../classxb_1_1xbDbf.html#a8ccfa2291417412b6894940d1b92f9a6',1,'xb::xbDbf::GetLastRecord(xbInt16 iOption)']]],
- ['getlogdirectory_39',['GetLogDirectory',['../classxb_1_1xbSsv.html#a4822315bded3969b59aeeb683c373051',1,'xb::xbSsv::GetLogDirectory()'],['../classxb_1_1xbXBase.html#a51d49b4d699740194b28c6ec0d0ee07b',1,'xb::xbXBase::GetLogDirectory()']]],
- ['getlogfilename_40',['GetLogFileName',['../classxb_1_1xbSsv.html#afaef09435be73b3111f5edbd7091d861',1,'xb::xbSsv::GetLogFileName()'],['../classxb_1_1xbXBase.html#ac0744edf9e4aa959d8cf2daa874376af',1,'xb::xbXBase::GetLogFileName() const']]],
- ['getlogfqfilename_41',['GetLogFqFileName',['../classxb_1_1xbXBase.html#ab5d63cd7d9137eba8a1d4d9c3df522b7',1,'xb::xbXBase']]],
- ['getlogicalfield_42',['GetLogicalField',['../classxb_1_1xbDbf.html#a3254f091fc4a1404abed3dd2bcdd6ce6',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbString &amp;sFieldData) const'],['../classxb_1_1xbDbf.html#a9cd6819bfd932ff8507e54d9cb9a624e',1,'xb::xbDbf::GetLogicalField(const xbString &amp;sFieldName, xbString &amp;sFieldData) const'],['../classxb_1_1xbDbf.html#aaf615ddcf08f8cd14efc713c2a8d7ae1',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbBool &amp;bFieldData) const'],['../classxb_1_1xbDbf.html#ab28feef20c988b0a6f1c1911a45377b0',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbBool &amp;bFieldData, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#a943cea7fde1b06c1a05184193eff8d2d',1,'xb::xbDbf::GetLogicalField(const xbString &amp;sFieldName, xbBool &amp;bFieldData) const']]],
- ['getlogstatus_43',['GetLogStatus',['../classxb_1_1xbXBase.html#ade34cd72c2a7e70fb55429a8a6f6c028',1,'xb::xbXBase']]],
- ['getlongfield_44',['GetLongField',['../classxb_1_1xbDbf.html#abe525c0820640e0a9e169d0b7913cfa1',1,'xb::xbDbf::GetLongField(xbInt16 iFieldNo, xbInt32 &amp;lFieldValue) const'],['../classxb_1_1xbDbf.html#a7b8ef75b17941beac17e50e969b2d3db',1,'xb::xbDbf::GetLongField(const xbString &amp;sFieldName, xbInt32 &amp;lFieldValue) const']]],
- ['getmultiuser_45',['GetMultiUser',['../classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5',1,'xb::xbSsv']]],
- ['getnextrecord_46',['GetNextRecord',['../classxb_1_1xbDbf.html#a18fdcb4ab15b36cd47fa6f6f7a540d1a',1,'xb::xbDbf::GetNextRecord(xbInt16 iOption, xbUInt32 ulStartRec)'],['../classxb_1_1xbDbf.html#a3191428a7a92d9107d8d42448884f2ac',1,'xb::xbDbf::GetNextRecord(xbInt16 iOption)'],['../classxb_1_1xbDbf.html#ab896fe3b734f556de578d30f92b18fe2',1,'xb::xbDbf::GetNextRecord()']]],
- ['getnextsqlcmd_47',['GetNextSqlCmd',['../xb__execsql_8cpp.html#af888ba5e7e94d92c2165362b87f1ea0e',1,'xb_execsql.cpp']]],
- ['getopenmode_48',['GetOpenMode',['../classxb_1_1xbFile.html#a3c500dc9dac22c49496e4b29386b2dd3',1,'xb::xbFile']]],
- ['getopentablecount_49',['GetOpenTableCount',['../classxb_1_1xbTblMgr.html#ad0d2d4adabc0dc0e761cfdee63c84069',1,'xb::xbTblMgr']]],
- ['getpathseparator_50',['GetPathSeparator',['../classxb_1_1xbString.html#af8b8b808cf43cd352321b43f500142db',1,'xb::xbString']]],
- ['getprevrecord_51',['GetPrevRecord',['../classxb_1_1xbDbf.html#ab3d248e5221b4f0809897cd43af17a1e',1,'xb::xbDbf::GetPrevRecord()'],['../classxb_1_1xbDbf.html#a7eadc7b08d73003802b90584f7b33387',1,'xb::xbDbf::GetPrevRecord(xbInt16 iOption)']]],
- ['getrawfield_52',['GetRawField',['../classxb_1_1xbDbf.html#aabd146c0e1054ab905ec96aedd84b02e',1,'xb::xbDbf']]],
- ['getrecord_53',['GetRecord',['../classxb_1_1xbDbf.html#a26fba086b07caeab95066bf1c8d25161',1,'xb::xbDbf']]],
- ['getrecordbuf_54',['GetRecordBuf',['../classxb_1_1xbDbf.html#aa3e38c4057d726a28a27d07a1610d124',1,'xb::xbDbf']]],
- ['getrecordcnt_55',['GetRecordCnt',['../classxb_1_1xbDbf.html#ac196ad55335e1f4789d698748434dc89',1,'xb::xbDbf']]],
- ['getrecordcount_56',['GetRecordCount',['../classxb_1_1xbDbf.html#a0aaa06d6028e75efc6b5131f7356ecce',1,'xb::xbDbf']]],
- ['getrecordlen_57',['GetRecordLen',['../classxb_1_1xbDbf.html#ab50d76c6e29e81e347a6feb04c2f62bb',1,'xb::xbDbf']]],
- ['getsharemode_58',['GetShareMode',['../classxb_1_1xbFile.html#a9b63e05b77f477ff6109ff7b9432c1b6',1,'xb::xbFile']]],
- ['getsize_59',['GetSize',['../classxb_1_1xbString.html#a6c33e73659f8e98819289d2661c7271c',1,'xb::xbString']]],
- ['gettblalias_60',['GetTblAlias',['../classxb_1_1xbDbf.html#a27758a325c097f204247908b65ba7fbd',1,'xb::xbDbf']]],
- ['gettbllistentry_61',['GetTblListEntry',['../classxb_1_1xbTblMgr.html#acbf148ddba4297021cfb980a161ebef9',1,'xb::xbTblMgr']]],
- ['getulongfield_62',['GetULongField',['../classxb_1_1xbDbf.html#a67e3a050f9090edf69eee75aef7f5d83',1,'xb::xbDbf::GetULongField(xbInt16 iFieldNo, xbUInt32 &amp;lFieldValue) const'],['../classxb_1_1xbDbf.html#a039eb02418ec4ca862adbc0f95b9cbec',1,'xb::xbDbf::GetULongField(const xbString &amp;sFieldName, xbUInt32 &amp;lFieldValue) const']]],
- ['getversion_63',['GetVersion',['../classxb_1_1xbDbf.html#a49212a9eb17f7fa9f303e08d5fc50fc6',1,'xb::xbDbf']]],
- ['getxbasefiletypebyte_64',['GetXbaseFileTypeByte',['../classxb_1_1xbFile.html#aaf2e697751a0beff41432a66bb83fb5e',1,'xb::xbFile::GetXbaseFileTypeByte(const xbString &amp;sFileName, xbInt16 &amp;iVersion)'],['../classxb_1_1xbFile.html#a7af337808919680b90710ad5e8a99232',1,'xb::xbFile::GetXbaseFileTypeByte(const xbString &amp;sFileName, unsigned char &amp;cFileTypeByte)'],['../classxb_1_1xbFile.html#a78aebdd21d3de46a450d5f835e3027f6',1,'xb::xbFile::GetXbaseFileTypeByte(const xbString &amp;sFileName, unsigned char &amp;cFileTypeByte, xbInt16 &amp;iVersion)']]],
- ['getxbaseptr_65',['GetXbasePtr',['../classxb_1_1xbDbf.html#ab21ec23c076b0c9affdc0f6672bd133f',1,'xb::xbDbf']]]
-];
diff --git a/docs/doxygen/html/search/functions_8.js b/docs/doxygen/html/search/functions_8.js
deleted file mode 100644
index 6d8ba73..0000000
--- a/docs/doxygen/html/search/functions_8.js
+++ /dev/null
@@ -1,8 +0,0 @@
-var searchData=
-[
- ['inittime_0',['InitTime',['../tstfuncs_8cpp.html#ab1f17da15e67a8b2460d5a88b7a3db6e',1,'tstfuncs.cpp']]],
- ['initvars_1',['InitVars',['../classxb_1_1xbDbf.html#ad06fe0f7975fb81125d27d82504e6829',1,'xb::xbDbf']]],
- ['isempty_2',['IsEmpty',['../classxb_1_1xbString.html#a4a255a30d683acd62ea09c1617b53cb3',1,'xb::xbString']]],
- ['isleapyear_3',['IsLeapYear',['../classxb_1_1xbDate.html#af2bd33a72448e2c5ee00d8b711dc5d95',1,'xb::xbDate::IsLeapYear(xbInt16 iYear) const'],['../classxb_1_1xbDate.html#a5f8051c31b29244265e8f26ac3547b9b',1,'xb::xbDate::IsLeapYear() const']]],
- ['isnull_4',['IsNull',['../classxb_1_1xbString.html#a3fa34fa31bcb7244ecb054ab628ad500',1,'xb::xbString']]]
-];
diff --git a/docs/doxygen/html/search/functions_b.js b/docs/doxygen/html/search/functions_b.js
deleted file mode 100644
index 4debf05..0000000
--- a/docs/doxygen/html/search/functions_b.js
+++ /dev/null
@@ -1,7 +0,0 @@
-var searchData=
-[
- ['main_0',['main',['../xb__test__xbase_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_xbase.cpp'],['../xb__test__funcs_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_funcs.cpp'],['../xb__test__linklist_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_linklist.cpp'],['../xb__test__lock_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_lock.cpp'],['../xb__test__lock2_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_lock2.cpp'],['../xb__test__log_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_log.cpp'],['../xb__test__mdx_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_mdx.cpp'],['../xb__test__ndx_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_ndx.cpp'],['../xb__test__sql_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_sql.cpp'],['../xb__test__string_8cpp.html#aabf71bc9adb6daf457b2ea8879ae537f',1,'main(int argCnt, char **av=NULL):&#160;xb_test_string.cpp'],['../xb__test__tblmgr_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_tblmgr.cpp'],['../xb__test__uda_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_uda.cpp'],['../xb__test__filter_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_filter.cpp'],['../xb__cfg__check_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_cfg_check.cpp'],['../xb__copydbf_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_copydbf.cpp'],['../xb__dbfutil_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_dbfutil.cpp'],['../xb__deletall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_deletall.cpp'],['../xb__dumpdbt_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_dumpdbt.cpp'],['../xb__dumprecs_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_dumprecs.cpp'],['../xb__execsql_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_execsql.cpp'],['../xb__pack_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_pack.cpp'],['../xb__tblinfo_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_tblinfo.cpp'],['../xb__undelall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_undelall.cpp'],['../xb__test__file_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_file.cpp'],['../xb__ex__date_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_date.cpp'],['../xb__ex__expression_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_expression.cpp'],['../xb__ex__sql_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_ex_sql.cpp'],['../xb__ex__ssv_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_ex_ssv.cpp'],['../xb__ex__string_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_string.cpp'],['../xb__ex__v3__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_v3_create_dbf.cpp'],['../xb__ex__v3__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_v3_upd_dbf.cpp'],['../xb__ex__v4__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_v4_create_dbf.cpp'],['../xb__ex__v4__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_v4_upd_dbf.cpp'],['../xb__test__bcd_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_bcd.cpp'],['../xb__test__blockread_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_blockread.cpp'],['../xb__test__date_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_date.cpp'],['../xb__test__dbf__v3__memos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_dbf_v3_memos.cpp'],['../xb__test__dbf__v3__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_dbf_v3_nomemos.cpp'],['../xb__test__dbf__v4__memos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_dbf_v4_memos.cpp'],['../xb__test__dbf__v4__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_dbf_v4_nomemos.cpp'],['../xb__test__expnode_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_expnode.cpp'],['../xb__test__expression_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_expression.cpp']]],
- ['memofieldsexist_1',['MemoFieldsExist',['../classxb_1_1xbDbf.html#a013dc8c51fc1aa988de39cf3da6da950',1,'xb::xbDbf']]],
- ['mid_2',['Mid',['../classxb_1_1xbString.html#a0f9eefc836b24c4ee7c5a316c5d812b7',1,'xb::xbString']]],
- ['monthof_3',['MonthOf',['../classxb_1_1xbDate.html#a08bd84c67e1119d8c5c1748cd89d092e',1,'xb::xbDate']]]
-];
diff --git a/docs/doxygen/html/search/functions_e.js b/docs/doxygen/html/search/functions_e.js
deleted file mode 100644
index 1b907f5..0000000
--- a/docs/doxygen/html/search/functions_e.js
+++ /dev/null
@@ -1,19 +0,0 @@
-var searchData=
-[
- ['pack_0',['Pack',['../classxb_1_1xbDbf.html#a93bb14ad0451355bfa3379128120988a',1,'xb::xbDbf::Pack(xbUInt32 &amp;ulDeletedRecCnt)'],['../classxb_1_1xbDbf.html#a8a52bf3ef2123c0d17e6b1f67bf0dc55',1,'xb::xbDbf::Pack()']]],
- ['padleft_1',['PadLeft',['../classxb_1_1xbString.html#a6a09cfed22066b0c72432f26960f9e7b',1,'xb::xbString']]],
- ['padright_2',['PadRight',['../classxb_1_1xbString.html#aba13f0c77eb6c4a22996039569fad284',1,'xb::xbString']]],
- ['pos_3',['Pos',['../classxb_1_1xbString.html#a1b586890138da8bf0e23090bd8b34581',1,'xb::xbString::Pos(char c, xbUInt32 ulStartPos) const'],['../classxb_1_1xbString.html#a3baf59d15099589ff631995f129e582b',1,'xb::xbString::Pos(char c) const'],['../classxb_1_1xbString.html#a8705d7277b72f5aa98021e84438914da',1,'xb::xbString::Pos(const char *s) const']]],
- ['printhelp_4',['PrintHelp',['../xb__copydbf_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_copydbf.cpp'],['../xb__dbfutil_8cpp.html#a9c55a055e1cd4249c7f47e19dc7ac564',1,'PrintHelp():&#160;xb_dbfutil.cpp'],['../xb__deletall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_deletall.cpp'],['../xb__dumpdbt_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_dumpdbt.cpp'],['../xb__dumprecs_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_dumprecs.cpp'],['../xb__pack_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_pack.cpp'],['../xb__tblinfo_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_tblinfo.cpp'],['../xb__undelall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_undelall.cpp']]],
- ['printresult_5',['PrintResult',['../xb__ex__expression_8cpp.html#a3234afc912211aec54c10d363d28cbda',1,'xb_ex_expression.cpp']]],
- ['printversion_6',['PrintVersion',['../xb__copydbf_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_copydbf.cpp'],['../xb__dbfutil_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_dbfutil.cpp'],['../xb__deletall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_deletall.cpp'],['../xb__dumpdbt_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_dumpdbt.cpp'],['../xb__dumprecs_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_dumprecs.cpp'],['../xb__pack_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_pack.cpp'],['../xb__tblinfo_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_tblinfo.cpp'],['../xb__undelall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_undelall.cpp']]],
- ['putat_7',['PutAt',['../classxb_1_1xbString.html#a1bae6fa8f608261f6e889616482f6e39',1,'xb::xbString']]],
- ['putdatefield_8',['PutDateField',['../classxb_1_1xbDbf.html#a873f04af528a9d81e6a367a59d998ec5',1,'xb::xbDbf::PutDateField(xbInt16 iFieldNo, const xbDate &amp;dt)'],['../classxb_1_1xbDbf.html#a571b36b3a940b1a16d5e834f329b33b9',1,'xb::xbDbf::PutDateField(const xbString &amp;sFieldName, const xbDate &amp;dt)']]],
- ['putdoublefield_9',['PutDoubleField',['../classxb_1_1xbDbf.html#a4f34842d7e8ff1f16992c2ece2fc38a5',1,'xb::xbDbf::PutDoubleField(xbInt16 FieldNo, xbDouble dFieldValue)'],['../classxb_1_1xbDbf.html#ae695bbc71c19abc71c0c5f2ff2e1f971',1,'xb::xbDbf::PutDoubleField(const xbString &amp;FieldName, xbDouble dFieldValue)']]],
- ['putfield_10',['PutField',['../classxb_1_1xbDbf.html#a7862215dd2f83a1c488e539cd1f9aec0',1,'xb::xbDbf::PutField(const xbString &amp;sFieldName, const xbString &amp;sFieldData)'],['../classxb_1_1xbDbf.html#a142b0c0dc904917f3c68c5572c1237b5',1,'xb::xbDbf::PutField(xbInt16 iFieldNo, const xbString &amp;sFieldData)']]],
- ['putfloatfield_11',['PutFloatField',['../classxb_1_1xbDbf.html#a64161eb50d72e424b11bf3732657ebd8',1,'xb::xbDbf::PutFloatField(xbInt16 iFieldNo, xbFloat fFieldValue)'],['../classxb_1_1xbDbf.html#a4ea3241bc710d57e5f755efda62288ad',1,'xb::xbDbf::PutFloatField(const xbString &amp;sFieldName, xbFloat fFieldValue)']]],
- ['putlogicalfield_12',['PutLogicalField',['../classxb_1_1xbDbf.html#ab39ac4269ac63bc7ea4f638733bb17f0',1,'xb::xbDbf::PutLogicalField(xbInt16 iFieldNo, const xbString &amp;sFieldData)'],['../classxb_1_1xbDbf.html#a507e400ca6526a9e0391cf06dd6a014e',1,'xb::xbDbf::PutLogicalField(const xbString &amp;sFieldName, const xbString &amp;sFieldData)'],['../classxb_1_1xbDbf.html#a423a0cb7bd252cedf956ace4954f275d',1,'xb::xbDbf::PutLogicalField(xbInt16 iFieldNo, xbBool bFieldData)'],['../classxb_1_1xbDbf.html#a623ca3ef5520c42308c1a16b518e7ff3',1,'xb::xbDbf::PutLogicalField(const xbString &amp;sFieldName, xbBool bFieldData)']]],
- ['putlongfield_13',['PutLongField',['../classxb_1_1xbDbf.html#a56c8f924284bf88aabf90b7930b4eb47',1,'xb::xbDbf::PutLongField(xbInt16 iFieldNo, xbInt32 lFieldValue)'],['../classxb_1_1xbDbf.html#ae7aad223119edb3d541e9f65e88c9f2f',1,'xb::xbDbf::PutLongField(const xbString &amp;sFieldNo, xbInt32 lFieldValue)']]],
- ['putrecord_14',['PutRecord',['../classxb_1_1xbDbf.html#a3c36a5ffbc7067a1abbcb526dd3b981d',1,'xb::xbDbf::PutRecord()'],['../classxb_1_1xbDbf.html#aacbc7bac3ea0c502ee75b838f4f0fcbf',1,'xb::xbDbf::PutRecord(xbUInt32 ulRecNo)']]],
- ['putulongfield_15',['PutULongField',['../classxb_1_1xbDbf.html#af5dec5c9ff903efffdb0490a44d296d2',1,'xb::xbDbf::PutULongField(xbInt16 iFieldNo, xbUInt32 lFieldValue)'],['../classxb_1_1xbDbf.html#ac62cb97c4e678c83f41788b1ae4d0381',1,'xb::xbDbf::PutULongField(const xbString &amp;sFieldNo, xbUInt32 lFieldValue)']]]
-];
diff --git a/docs/doxygen/html/search/searchdata.js b/docs/doxygen/html/search/searchdata.js
deleted file mode 100644
index 0f7e3a8..0000000
--- a/docs/doxygen/html/search/searchdata.js
+++ /dev/null
@@ -1,39 +0,0 @@
-var indexSectionsWithContent =
-{
- 0: "abcdefghijlmnoprstuvwxyz~",
- 1: "x",
- 2: "x",
- 3: "tx",
- 4: "abcdefghijlmnoprstuvwxyz~",
- 5: "ceimprstux",
- 6: "x",
- 7: "ox",
- 8: "jlvx"
-};
-
-var indexSectionNames =
-{
- 0: "all",
- 1: "classes",
- 2: "namespaces",
- 3: "files",
- 4: "functions",
- 5: "variables",
- 6: "typedefs",
- 7: "related",
- 8: "defines"
-};
-
-var indexSectionLabels =
-{
- 0: "All",
- 1: "Data Structures",
- 2: "Namespaces",
- 3: "Files",
- 4: "Functions",
- 5: "Variables",
- 6: "Typedefs",
- 7: "Friends",
- 8: "Macros"
-};
-
diff --git a/docs/doxygen/html/search/variables_0.js b/docs/doxygen/html/search/variables_0.js
deleted file mode 100644
index c24d67c..0000000
--- a/docs/doxygen/html/search/variables_0.js
+++ /dev/null
@@ -1,13 +0,0 @@
-var searchData=
-[
- ['cencryptionflag_0',['cEncryptionFlag',['../classxb_1_1xbDbf.html#a8734e799707582f022fc341d515650f4',1,'xb::xbDbf']]],
- ['cfieldname_1',['cFieldName',['../structxb_1_1xbSchema.html#a514183856094123fd37df67885b4681e',1,'xb::xbSchema']]],
- ['cindexflag_2',['cIndexFlag',['../classxb_1_1xbDbf.html#ad59074633641e03647e54d2b66c9102b',1,'xb::xbDbf']]],
- ['clangdriver_3',['cLangDriver',['../classxb_1_1xbDbf.html#aea1dfe5cbd1f9cdbcfc8eb04b2c3d5f1',1,'xb::xbDbf']]],
- ['ctransactionflag_4',['cTransactionFlag',['../classxb_1_1xbDbf.html#ac3c89fc3bc6a6abf385478a8adbed970',1,'xb::xbDbf']]],
- ['ctype_5',['cType',['../structxb_1_1xbSchema.html#a1d612b2ed5dc0b0289c9e91b3cda3a25',1,'xb::xbSchema']]],
- ['cupdatedd_6',['cUpdateDD',['../classxb_1_1xbDbf.html#a6021789d314cd41488991e708fcd0df2',1,'xb::xbDbf']]],
- ['cupdatemm_7',['cUpdateMM',['../classxb_1_1xbDbf.html#a9340a5e8ee53eb0f3b6601eec2d71e1b',1,'xb::xbDbf']]],
- ['cupdateyy_8',['cUpdateYY',['../classxb_1_1xbDbf.html#a4fcd6a86ddd32d4a9d76a4074573440a',1,'xb::xbDbf']]],
- ['cversion_9',['cVersion',['../classxb_1_1xbDbf.html#a3a262abf658e5fa968b57ef457a69470',1,'xb::xbDbf']]]
-];
diff --git a/docs/doxygen/html/search/variables_2.js b/docs/doxygen/html/search/variables_2.js
deleted file mode 100644
index 97adab8..0000000
--- a/docs/doxygen/html/search/variables_2.js
+++ /dev/null
@@ -1,10 +0,0 @@
-var searchData=
-[
- ['iautocommit_0',['iAutoCommit',['../classxb_1_1xbDbf.html#ab506450954bc86e7bf1d7c4efe681f43',1,'xb::xbDbf']]],
- ['idbfstatus_1',['iDbfStatus',['../classxb_1_1xbDbf.html#a6d8e193da3ca414eef1e8866ec5ca81b',1,'xb::xbDbf']]],
- ['iendiantype_2',['iEndianType',['../classxb_1_1xbSsv.html#a5849e813f5e8e1cd180f0366637adbf3',1,'xb::xbSsv']]],
- ['ifieldlen_3',['iFieldLen',['../structxb_1_1xbSchema.html#a2da554af25ef628acf59bb52996056ac',1,'xb::xbSchema']]],
- ['ifileversion_4',['iFileVersion',['../classxb_1_1xbDbf.html#a15f495446f0d75bcf2fa89e3b699d388',1,'xb::xbDbf']]],
- ['inoofdecs_5',['iNoOfDecs',['../structxb_1_1xbSchema.html#a55bab3bb69dee3508d168c93e182d4b9',1,'xb::xbSchema']]],
- ['inooffields_6',['iNoOfFields',['../classxb_1_1xbDbf.html#a5056757614c39f725cc775332494966a',1,'xb::xbDbf']]]
-];
diff --git a/docs/doxygen/html/structxb_1_1xbSchema.html b/docs/doxygen/html/structxb_1_1xbSchema.html
deleted file mode 100644
index 4d314dd..0000000
--- a/docs/doxygen/html/structxb_1_1xbSchema.html
+++ /dev/null
@@ -1,179 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: xb::xbSchema Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="namespacexb.html">xb</a></li><li class="navelem"><a class="el" href="structxb_1_1xbSchema.html">xbSchema</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#pub-attribs">Data Fields</a> </div>
- <div class="headertitle"><div class="title">xb::xbSchema Struct Reference</div></div>
-</div><!--header-->
-<div class="contents">
-
-<p>Schema used for defining tables with CreateTable methods.
- <a href="structxb_1_1xbSchema.html#details">More...</a></p>
-
-<p><code>#include &lt;<a class="el" href="xbdbf_8h_source.html">xbdbf.h</a>&gt;</code></p>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a>
-Data Fields</h2></td></tr>
-<tr class="memitem:a514183856094123fd37df67885b4681e"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structxb_1_1xbSchema.html#a514183856094123fd37df67885b4681e">cFieldName</a> [11]</td></tr>
-<tr class="separator:a514183856094123fd37df67885b4681e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1d612b2ed5dc0b0289c9e91b3cda3a25"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structxb_1_1xbSchema.html#a1d612b2ed5dc0b0289c9e91b3cda3a25">cType</a></td></tr>
-<tr class="separator:a1d612b2ed5dc0b0289c9e91b3cda3a25"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2da554af25ef628acf59bb52996056ac"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structxb_1_1xbSchema.html#a2da554af25ef628acf59bb52996056ac">iFieldLen</a></td></tr>
-<tr class="separator:a2da554af25ef628acf59bb52996056ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a55bab3bb69dee3508d168c93e182d4b9"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structxb_1_1xbSchema.html#a55bab3bb69dee3508d168c93e182d4b9">iNoOfDecs</a></td></tr>
-<tr class="separator:a55bab3bb69dee3508d168c93e182d4b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p >Schema used for defining tables with CreateTable methods. </p>
-<p >See program <a class="el" href="xb__ex__v3__create__dbf_8cpp.html">xb_ex_v3_create_dbf.cpp</a> or <a class="el" href="xb__ex__v4__create__dbf_8cpp.html">xb_ex_v4_create_dbf.cpp</a> as examples on how to use.</p>
-<div class="fragment"><div class="line">xbSchema MyRecord[] = {</div>
-<div class="line"><span class="comment">// FieldName, Type, Len, Dec</span></div>
-<div class="line"> { <span class="stringliteral">&quot;FIRSTNAME&quot;</span>, <a class="code hl_define" href="xbdbf_8h.html#a20f739b9d9dc6a002a246a999e76aeaa">XB_CHAR_FLD</a>, 15, 0 },</div>
-<div class="line"> { <span class="stringliteral">&quot;LASTNAME&quot;</span>, <a class="code hl_define" href="xbdbf_8h.html#a20f739b9d9dc6a002a246a999e76aeaa">XB_CHAR_FLD</a>, 20, 0 },</div>
-<div class="line"> { <span class="stringliteral">&quot;BIRTHDATE&quot;</span>, <a class="code hl_define" href="xbdbf_8h.html#a7f685e6f5fe804b2174725a27ce73adc">XB_DATE_FLD</a>, 8, 0 },</div>
-<div class="line"> { <span class="stringliteral">&quot;AMOUNT&quot;</span>, <a class="code hl_define" href="xbdbf_8h.html#ae9fb6d69cc5edc94d36ae403c22ec1c6">XB_NUMERIC_FLD</a>, 9, 2 },</div>
-<div class="line"> { <span class="stringliteral">&quot;RETIRED?&quot;</span>, <a class="code hl_define" href="xbdbf_8h.html#a2f6d5073af761bc1a806a2c7b1c1d886">XB_LOGICAL_FLD</a>, 1, 0 },</div>
-<div class="line"> { <span class="stringliteral">&quot;ZIPCODE&quot;</span>, <a class="code hl_define" href="xbdbf_8h.html#ae9fb6d69cc5edc94d36ae403c22ec1c6">XB_NUMERIC_FLD</a>, 5, 0 },</div>
-<div class="line"> { <span class="stringliteral">&quot;NUMFLD1&quot;</span>, <a class="code hl_define" href="xbdbf_8h.html#a96ab4218d70ab603b4866354ce8c18cd">XB_FLOAT_FLD</a>, 12, 2 },</div>
-<div class="line"> { <span class="stringliteral">&quot;NUMFLD2&quot;</span>, <a class="code hl_define" href="xbdbf_8h.html#a96ab4218d70ab603b4866354ce8c18cd">XB_FLOAT_FLD</a>, 14, 2 },</div>
-<div class="line"> { <span class="stringliteral">&quot;MEMO1&quot;</span>, <a class="code hl_define" href="xbdbf_8h.html#a23fa19b19cb43bd6dcc59a5a3f6c30ad">XB_MEMO_FLD</a>, 10, 0 },</div>
-<div class="line"> { <span class="stringliteral">&quot;&quot;</span>,0,0,0 }};</div>
-<div class="ttc" id="axbdbf_8h_html_a20f739b9d9dc6a002a246a999e76aeaa"><div class="ttname"><a href="xbdbf_8h.html#a20f739b9d9dc6a002a246a999e76aeaa">XB_CHAR_FLD</a></div><div class="ttdeci">#define XB_CHAR_FLD</div><div class="ttdef"><b>Definition:</b> xbdbf.h:29</div></div>
-<div class="ttc" id="axbdbf_8h_html_a23fa19b19cb43bd6dcc59a5a3f6c30ad"><div class="ttname"><a href="xbdbf_8h.html#a23fa19b19cb43bd6dcc59a5a3f6c30ad">XB_MEMO_FLD</a></div><div class="ttdeci">#define XB_MEMO_FLD</div><div class="ttdef"><b>Definition:</b> xbdbf.h:33</div></div>
-<div class="ttc" id="axbdbf_8h_html_a2f6d5073af761bc1a806a2c7b1c1d886"><div class="ttname"><a href="xbdbf_8h.html#a2f6d5073af761bc1a806a2c7b1c1d886">XB_LOGICAL_FLD</a></div><div class="ttdeci">#define XB_LOGICAL_FLD</div><div class="ttdef"><b>Definition:</b> xbdbf.h:30</div></div>
-<div class="ttc" id="axbdbf_8h_html_a7f685e6f5fe804b2174725a27ce73adc"><div class="ttname"><a href="xbdbf_8h.html#a7f685e6f5fe804b2174725a27ce73adc">XB_DATE_FLD</a></div><div class="ttdeci">#define XB_DATE_FLD</div><div class="ttdef"><b>Definition:</b> xbdbf.h:32</div></div>
-<div class="ttc" id="axbdbf_8h_html_a96ab4218d70ab603b4866354ce8c18cd"><div class="ttname"><a href="xbdbf_8h.html#a96ab4218d70ab603b4866354ce8c18cd">XB_FLOAT_FLD</a></div><div class="ttdeci">#define XB_FLOAT_FLD</div><div class="ttdef"><b>Definition:</b> xbdbf.h:34</div></div>
-<div class="ttc" id="axbdbf_8h_html_ae9fb6d69cc5edc94d36ae403c22ec1c6"><div class="ttname"><a href="xbdbf_8h.html#ae9fb6d69cc5edc94d36ae403c22ec1c6">XB_NUMERIC_FLD</a></div><div class="ttdeci">#define XB_NUMERIC_FLD</div><div class="ttdef"><b>Definition:</b> xbdbf.h:31</div></div>
-</div><!-- fragment --> </div><h2 class="groupheader">Field Documentation</h2>
-<a id="a514183856094123fd37df67885b4681e" name="a514183856094123fd37df67885b4681e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a514183856094123fd37df67885b4681e">&#9670;&nbsp;</a></span>cFieldName</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">char xb::xbSchema::cFieldName[11]</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a1d612b2ed5dc0b0289c9e91b3cda3a25" name="a1d612b2ed5dc0b0289c9e91b3cda3a25"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1d612b2ed5dc0b0289c9e91b3cda3a25">&#9670;&nbsp;</a></span>cType</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">char xb::xbSchema::cType</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a2da554af25ef628acf59bb52996056ac" name="a2da554af25ef628acf59bb52996056ac"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a2da554af25ef628acf59bb52996056ac">&#9670;&nbsp;</a></span>iFieldLen</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbSchema::iFieldLen</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a55bab3bb69dee3508d168c93e182d4b9" name="a55bab3bb69dee3508d168c93e182d4b9"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a55bab3bb69dee3508d168c93e182d4b9">&#9670;&nbsp;</a></span>iNoOfDecs</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbSchema::iNoOfDecs</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<hr/>The documentation for this struct was generated from the following file:<ul>
-<li>/mnt/1Tdata/xbase/xbase64-4.1.0/src/include/<a class="el" href="xbdbf_8h_source.html">xbdbf.h</a></li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/structxb_1_1xbTblList.html b/docs/doxygen/html/structxb_1_1xbTblList.html
deleted file mode 100644
index 688538c..0000000
--- a/docs/doxygen/html/structxb_1_1xbTblList.html
+++ /dev/null
@@ -1,171 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: xb::xbTblList Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="namespacexb.html">xb</a></li><li class="navelem"><a class="el" href="structxb_1_1xbTblList.html">xbTblList</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#pub-attribs">Data Fields</a> </div>
- <div class="headertitle"><div class="title">xb::xbTblList Struct Reference</div></div>
-</div><!--header-->
-<div class="contents">
-
-<p><code>#include &lt;<a class="el" href="xbtblmgr_8h_source.html">xbtblmgr.h</a>&gt;</code></p>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a>
-Data Fields</h2></td></tr>
-<tr class="memitem:a3fd169fcf0fd4df927544e5342db583c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structxb_1_1xbTblList.html">xbTblList</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structxb_1_1xbTblList.html#a3fd169fcf0fd4df927544e5342db583c">pNext</a></td></tr>
-<tr class="separator:a3fd169fcf0fd4df927544e5342db583c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aceec65f6f6b585788cf98e8dabd2737d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structxb_1_1xbTblList.html#aceec65f6f6b585788cf98e8dabd2737d">psFqTblName</a></td></tr>
-<tr class="separator:aceec65f6f6b585788cf98e8dabd2737d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a02c3b0c47fd104ef9758b375ecdcfd0f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structxb_1_1xbTblList.html#a02c3b0c47fd104ef9758b375ecdcfd0f">psTblName</a></td></tr>
-<tr class="separator:a02c3b0c47fd104ef9758b375ecdcfd0f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac87742c8a6b1cf2e7e35218e96966a05"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structxb_1_1xbTblList.html#ac87742c8a6b1cf2e7e35218e96966a05">psTblAlias</a></td></tr>
-<tr class="separator:ac87742c8a6b1cf2e7e35218e96966a05"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a387d3f6bbf291a1fb96d276ed9bb96b6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structxb_1_1xbTblList.html#a387d3f6bbf291a1fb96d276ed9bb96b6">pDbf</a></td></tr>
-<tr class="separator:a387d3f6bbf291a1fb96d276ed9bb96b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Field Documentation</h2>
-<a id="a387d3f6bbf291a1fb96d276ed9bb96b6" name="a387d3f6bbf291a1fb96d276ed9bb96b6"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a387d3f6bbf291a1fb96d276ed9bb96b6">&#9670;&nbsp;</a></span>pDbf</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a>* xb::xbTblList::pDbf</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a3fd169fcf0fd4df927544e5342db583c" name="a3fd169fcf0fd4df927544e5342db583c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a3fd169fcf0fd4df927544e5342db583c">&#9670;&nbsp;</a></span>pNext</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="structxb_1_1xbTblList.html">xbTblList</a>* xb::xbTblList::pNext</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="aceec65f6f6b585788cf98e8dabd2737d" name="aceec65f6f6b585788cf98e8dabd2737d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aceec65f6f6b585788cf98e8dabd2737d">&#9670;&nbsp;</a></span>psFqTblName</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a>* xb::xbTblList::psFqTblName</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ac87742c8a6b1cf2e7e35218e96966a05" name="ac87742c8a6b1cf2e7e35218e96966a05"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac87742c8a6b1cf2e7e35218e96966a05">&#9670;&nbsp;</a></span>psTblAlias</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a>* xb::xbTblList::psTblAlias</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a02c3b0c47fd104ef9758b375ecdcfd0f" name="a02c3b0c47fd104ef9758b375ecdcfd0f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a02c3b0c47fd104ef9758b375ecdcfd0f">&#9670;&nbsp;</a></span>psTblName</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a>* xb::xbTblList::psTblName</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<hr/>The documentation for this struct was generated from the following file:<ul>
-<li>/mnt/1Tdata/xbase/xbase64-4.1.0/src/include/<a class="el" href="xbtblmgr_8h_source.html">xbtblmgr.h</a></li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/tstfuncs_8cpp.html b/docs/doxygen/html/tstfuncs_8cpp.html
deleted file mode 100644
index dbc72bf..0000000
--- a/docs/doxygen/html/tstfuncs_8cpp.html
+++ /dev/null
@@ -1,547 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/tstfuncs.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> &#124;
-<a href="#var-members">Variables</a> </div>
- <div class="headertitle"><div class="title">tstfuncs.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:af990eed1e43605771a5810196b4043f7"><td class="memItemLeft" align="right" valign="top">xbDouble&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tstfuncs_8cpp.html#af990eed1e43605771a5810196b4043f7">ChronTime</a> ()</td></tr>
-<tr class="separator:af990eed1e43605771a5810196b4043f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab1f17da15e67a8b2460d5a88b7a3db6e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tstfuncs_8cpp.html#ab1f17da15e67a8b2460d5a88b7a3db6e">InitTime</a> ()</td></tr>
-<tr class="separator:ab1f17da15e67a8b2460d5a88b7a3db6e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a8b8e417213c57f2ea0bcb61a7fb28860"><td class="memItemLeft" align="right" valign="top">xbBool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tstfuncs_8cpp.html#a8b8e417213c57f2ea0bcb61a7fb28860">dblEquals</a> (xbDouble a, xbDouble b, xbDouble epsilon)</td></tr>
-<tr class="separator:a8b8e417213c57f2ea0bcb61a7fb28860"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a265547b80a3aef5836952bede5288e2c"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tstfuncs_8cpp.html#a265547b80a3aef5836952bede5288e2c">TestMethod</a> (xbInt16 PrintOption, const char *title, const xbString &amp;result, const char *expectedResult, size_t expectedLen)</td></tr>
-<tr class="separator:a265547b80a3aef5836952bede5288e2c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9c27703ef863c9d29680844fc5124953"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tstfuncs_8cpp.html#a9c27703ef863c9d29680844fc5124953">TestMethod</a> (xbInt16 PrintOption, const char *title, char result, char expectedResult)</td></tr>
-<tr class="separator:a9c27703ef863c9d29680844fc5124953"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae6536e920580382389126d5f66655f90"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tstfuncs_8cpp.html#ae6536e920580382389126d5f66655f90">TestMethod</a> (xbInt16 PrintOption, const char *title, xbInt32 result, xbInt32 expectedResult)</td></tr>
-<tr class="separator:ae6536e920580382389126d5f66655f90"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a000fca67bc0fffea3d3da7a5317a06e4"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tstfuncs_8cpp.html#a000fca67bc0fffea3d3da7a5317a06e4">TestMethod</a> (xbInt16 PrintOption, const char *title, xbUInt64 result, xbUInt64 expectedResult)</td></tr>
-<tr class="separator:a000fca67bc0fffea3d3da7a5317a06e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a663f3dd7bd8574a35c1b1b9a22081c6d"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tstfuncs_8cpp.html#a663f3dd7bd8574a35c1b1b9a22081c6d">TestMethod</a> (xbInt16 PrintOption, const char *title, xbFloat result, xbFloat expectedResult)</td></tr>
-<tr class="separator:a663f3dd7bd8574a35c1b1b9a22081c6d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af1c78fb72bcd39eb86f11aa2887fe62c"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tstfuncs_8cpp.html#af1c78fb72bcd39eb86f11aa2887fe62c">TestMethod</a> (xbInt16 PrintOption, const char *title, xbDouble result, xbDouble expectedResult)</td></tr>
-<tr class="separator:af1c78fb72bcd39eb86f11aa2887fe62c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac64a0bed74ba10b638456709f128f893"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tstfuncs_8cpp.html#ac64a0bed74ba10b638456709f128f893">TestMethod</a> (xbInt16 PrintOption, const char *title, xbDouble result, xbDouble expectedResult, xbDouble dEpsilon)</td></tr>
-<tr class="separator:ac64a0bed74ba10b638456709f128f893"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a69a6e718e066af7f8392e5f1fea40d1b"><td class="memItemLeft" align="right" valign="top">xbDouble&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tstfuncs_8cpp.html#a69a6e718e066af7f8392e5f1fea40d1b">dblMax</a> (xbDouble a, xbDouble b)</td></tr>
-<tr class="separator:a69a6e718e066af7f8392e5f1fea40d1b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4d7b8f3f1ce52c6c0a281f25419f4c93"><td class="memItemLeft" align="right" valign="top">xbDouble&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tstfuncs_8cpp.html#a4d7b8f3f1ce52c6c0a281f25419f4c93">dblMin</a> (xbDouble a, xbDouble b)</td></tr>
-<tr class="separator:a4d7b8f3f1ce52c6c0a281f25419f4c93"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="var-members" name="var-members"></a>
-Variables</h2></td></tr>
-<tr class="memitem:ae2281da6157495d69406c35f69a61f9f"><td class="memItemLeft" align="right" valign="top">time_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tstfuncs_8cpp.html#ae2281da6157495d69406c35f69a61f9f">timer</a></td></tr>
-<tr class="separator:ae2281da6157495d69406c35f69a61f9f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="af990eed1e43605771a5810196b4043f7" name="af990eed1e43605771a5810196b4043f7"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af990eed1e43605771a5810196b4043f7">&#9670;&nbsp;</a></span>ChronTime()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbDouble ChronTime </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a8b8e417213c57f2ea0bcb61a7fb28860" name="a8b8e417213c57f2ea0bcb61a7fb28860"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a8b8e417213c57f2ea0bcb61a7fb28860">&#9670;&nbsp;</a></span>dblEquals()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbBool dblEquals </td>
- <td>(</td>
- <td class="paramtype">xbDouble&#160;</td>
- <td class="paramname"><em>a</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbDouble&#160;</td>
- <td class="paramname"><em>b</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbDouble&#160;</td>
- <td class="paramname"><em>epsilon</em> = <code>0.0001</code>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a69a6e718e066af7f8392e5f1fea40d1b" name="a69a6e718e066af7f8392e5f1fea40d1b"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a69a6e718e066af7f8392e5f1fea40d1b">&#9670;&nbsp;</a></span>dblMax()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbDouble dblMax </td>
- <td>(</td>
- <td class="paramtype">xbDouble&#160;</td>
- <td class="paramname"><em>a</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbDouble&#160;</td>
- <td class="paramname"><em>b</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a4d7b8f3f1ce52c6c0a281f25419f4c93" name="a4d7b8f3f1ce52c6c0a281f25419f4c93"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4d7b8f3f1ce52c6c0a281f25419f4c93">&#9670;&nbsp;</a></span>dblMin()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbDouble dblMin </td>
- <td>(</td>
- <td class="paramtype">xbDouble&#160;</td>
- <td class="paramname"><em>a</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbDouble&#160;</td>
- <td class="paramname"><em>b</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ab1f17da15e67a8b2460d5a88b7a3db6e" name="ab1f17da15e67a8b2460d5a88b7a3db6e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab1f17da15e67a8b2460d5a88b7a3db6e">&#9670;&nbsp;</a></span>InitTime()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void InitTime </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a9c27703ef863c9d29680844fc5124953" name="a9c27703ef863c9d29680844fc5124953"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a9c27703ef863c9d29680844fc5124953">&#9670;&nbsp;</a></span>TestMethod() <span class="overload">[1/7]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 TestMethod </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>PrintOption</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>title</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char&#160;</td>
- <td class="paramname"><em>result</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char&#160;</td>
- <td class="paramname"><em>expectedResult</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a265547b80a3aef5836952bede5288e2c" name="a265547b80a3aef5836952bede5288e2c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a265547b80a3aef5836952bede5288e2c">&#9670;&nbsp;</a></span>TestMethod() <span class="overload">[2/7]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 TestMethod </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>PrintOption</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>title</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const xbString &amp;&#160;</td>
- <td class="paramname"><em>result</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>expectedResult</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">size_t&#160;</td>
- <td class="paramname"><em>expectedLen</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="af1c78fb72bcd39eb86f11aa2887fe62c" name="af1c78fb72bcd39eb86f11aa2887fe62c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af1c78fb72bcd39eb86f11aa2887fe62c">&#9670;&nbsp;</a></span>TestMethod() <span class="overload">[3/7]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 TestMethod </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>PrintOption</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>title</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbDouble&#160;</td>
- <td class="paramname"><em>result</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbDouble&#160;</td>
- <td class="paramname"><em>expectedResult</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ac64a0bed74ba10b638456709f128f893" name="ac64a0bed74ba10b638456709f128f893"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac64a0bed74ba10b638456709f128f893">&#9670;&nbsp;</a></span>TestMethod() <span class="overload">[4/7]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 TestMethod </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>PrintOption</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>title</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbDouble&#160;</td>
- <td class="paramname"><em>result</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbDouble&#160;</td>
- <td class="paramname"><em>expectedResult</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbDouble&#160;</td>
- <td class="paramname"><em>dEpsilon</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a663f3dd7bd8574a35c1b1b9a22081c6d" name="a663f3dd7bd8574a35c1b1b9a22081c6d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a663f3dd7bd8574a35c1b1b9a22081c6d">&#9670;&nbsp;</a></span>TestMethod() <span class="overload">[5/7]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 TestMethod </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>PrintOption</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>title</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbFloat&#160;</td>
- <td class="paramname"><em>result</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbFloat&#160;</td>
- <td class="paramname"><em>expectedResult</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ae6536e920580382389126d5f66655f90" name="ae6536e920580382389126d5f66655f90"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae6536e920580382389126d5f66655f90">&#9670;&nbsp;</a></span>TestMethod() <span class="overload">[6/7]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 TestMethod </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>PrintOption</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>title</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt32&#160;</td>
- <td class="paramname"><em>result</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt32&#160;</td>
- <td class="paramname"><em>expectedResult</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a000fca67bc0fffea3d3da7a5317a06e4" name="a000fca67bc0fffea3d3da7a5317a06e4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a000fca67bc0fffea3d3da7a5317a06e4">&#9670;&nbsp;</a></span>TestMethod() <span class="overload">[7/7]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 TestMethod </td>
- <td>(</td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>PrintOption</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>title</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbUInt64&#160;</td>
- <td class="paramname"><em>result</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbUInt64&#160;</td>
- <td class="paramname"><em>expectedResult</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<h2 class="groupheader">Variable Documentation</h2>
-<a id="ae2281da6157495d69406c35f69a61f9f" name="ae2281da6157495d69406c35f69a61f9f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae2281da6157495d69406c35f69a61f9f">&#9670;&nbsp;</a></span>timer</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">time_t timer</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__cfg__check_8cpp.html b/docs/doxygen/html/xb__cfg__check_8cpp.html
deleted file mode 100644
index 124dfaf..0000000
--- a/docs/doxygen/html/xb__cfg__check_8cpp.html
+++ /dev/null
@@ -1,108 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/utils/xb_cfg_check.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_313caf1132e152dd9b58bea13a4052ca.html">utils</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_cfg_check.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &lt;stdio.h&gt;</code><br />
-<code>#include &lt;stdlib.h&gt;</code><br />
-<code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__cfg__check_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr>
-<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__copydbf_8cpp.html b/docs/doxygen/html/xb__copydbf_8cpp.html
deleted file mode 100644
index b79ed7a..0000000
--- a/docs/doxygen/html/xb__copydbf_8cpp.html
+++ /dev/null
@@ -1,155 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/utils/xb_copydbf.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_313caf1132e152dd9b58bea13a4052ca.html">utils</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_copydbf.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &lt;<a class="el" href="xbase_8h_source.html">xbase.h</a>&gt;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ae964ff8411b4fdcaf65cb5529aea4bef"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__copydbf_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">PrintHelp</a> ()</td></tr>
-<tr class="separator:ae964ff8411b4fdcaf65cb5529aea4bef"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1fae5968f70747445d63f63065fb7ef3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__copydbf_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">PrintVersion</a> ()</td></tr>
-<tr class="separator:a1fae5968f70747445d63f63065fb7ef3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__copydbf_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
-<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="a0ddf1224851353fc92bfbff6f499fa97" name="a0ddf1224851353fc92bfbff6f499fa97"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0ddf1224851353fc92bfbff6f499fa97">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramtype">int&#160;</td>
- <td class="paramname"><em>argc</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char *&#160;</td>
- <td class="paramname"><em>argv</em>[]&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ae964ff8411b4fdcaf65cb5529aea4bef" name="ae964ff8411b4fdcaf65cb5529aea4bef"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae964ff8411b4fdcaf65cb5529aea4bef">&#9670;&nbsp;</a></span>PrintHelp()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void PrintHelp </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a1fae5968f70747445d63f63065fb7ef3" name="a1fae5968f70747445d63f63065fb7ef3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1fae5968f70747445d63f63065fb7ef3">&#9670;&nbsp;</a></span>PrintVersion()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void PrintVersion </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__dbfutil_8cpp.html b/docs/doxygen/html/xb__dbfutil_8cpp.html
deleted file mode 100644
index 3adab86..0000000
--- a/docs/doxygen/html/xb__dbfutil_8cpp.html
+++ /dev/null
@@ -1,155 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/utils/xb_dbfutil.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_313caf1132e152dd9b58bea13a4052ca.html">utils</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_dbfutil.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:a9c55a055e1cd4249c7f47e19dc7ac564"><td class="memItemLeft" align="right" valign="top">DOXYOFF void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__dbfutil_8cpp.html#a9c55a055e1cd4249c7f47e19dc7ac564">PrintHelp</a> ()</td></tr>
-<tr class="separator:a9c55a055e1cd4249c7f47e19dc7ac564"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1fae5968f70747445d63f63065fb7ef3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__dbfutil_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">PrintVersion</a> ()</td></tr>
-<tr class="separator:a1fae5968f70747445d63f63065fb7ef3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__dbfutil_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
-<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="a0ddf1224851353fc92bfbff6f499fa97" name="a0ddf1224851353fc92bfbff6f499fa97"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0ddf1224851353fc92bfbff6f499fa97">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramtype">int&#160;</td>
- <td class="paramname"><em>argc</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char *&#160;</td>
- <td class="paramname"><em>argv</em>[]&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a9c55a055e1cd4249c7f47e19dc7ac564" name="a9c55a055e1cd4249c7f47e19dc7ac564"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a9c55a055e1cd4249c7f47e19dc7ac564">&#9670;&nbsp;</a></span>PrintHelp()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">DOXYOFF void PrintHelp </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a1fae5968f70747445d63f63065fb7ef3" name="a1fae5968f70747445d63f63065fb7ef3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1fae5968f70747445d63f63065fb7ef3">&#9670;&nbsp;</a></span>PrintVersion()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void PrintVersion </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__deletall_8cpp.html b/docs/doxygen/html/xb__deletall_8cpp.html
deleted file mode 100644
index d643d2e..0000000
--- a/docs/doxygen/html/xb__deletall_8cpp.html
+++ /dev/null
@@ -1,155 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/utils/xb_deletall.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_313caf1132e152dd9b58bea13a4052ca.html">utils</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_deletall.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &lt;<a class="el" href="xbase_8h_source.html">xbase.h</a>&gt;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ae964ff8411b4fdcaf65cb5529aea4bef"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__deletall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">PrintHelp</a> ()</td></tr>
-<tr class="separator:ae964ff8411b4fdcaf65cb5529aea4bef"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1fae5968f70747445d63f63065fb7ef3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__deletall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">PrintVersion</a> ()</td></tr>
-<tr class="separator:a1fae5968f70747445d63f63065fb7ef3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__deletall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
-<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="a0ddf1224851353fc92bfbff6f499fa97" name="a0ddf1224851353fc92bfbff6f499fa97"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0ddf1224851353fc92bfbff6f499fa97">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramtype">int&#160;</td>
- <td class="paramname"><em>argc</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char *&#160;</td>
- <td class="paramname"><em>argv</em>[]&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ae964ff8411b4fdcaf65cb5529aea4bef" name="ae964ff8411b4fdcaf65cb5529aea4bef"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae964ff8411b4fdcaf65cb5529aea4bef">&#9670;&nbsp;</a></span>PrintHelp()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void PrintHelp </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a1fae5968f70747445d63f63065fb7ef3" name="a1fae5968f70747445d63f63065fb7ef3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1fae5968f70747445d63f63065fb7ef3">&#9670;&nbsp;</a></span>PrintVersion()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void PrintVersion </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__dumpdbt_8cpp.html b/docs/doxygen/html/xb__dumpdbt_8cpp.html
deleted file mode 100644
index d664d5f..0000000
--- a/docs/doxygen/html/xb__dumpdbt_8cpp.html
+++ /dev/null
@@ -1,155 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/utils/xb_dumpdbt.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_313caf1132e152dd9b58bea13a4052ca.html">utils</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_dumpdbt.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &lt;<a class="el" href="xbase_8h_source.html">xbase.h</a>&gt;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ae964ff8411b4fdcaf65cb5529aea4bef"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__dumpdbt_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">PrintHelp</a> ()</td></tr>
-<tr class="separator:ae964ff8411b4fdcaf65cb5529aea4bef"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1fae5968f70747445d63f63065fb7ef3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__dumpdbt_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">PrintVersion</a> ()</td></tr>
-<tr class="separator:a1fae5968f70747445d63f63065fb7ef3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__dumpdbt_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
-<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="a0ddf1224851353fc92bfbff6f499fa97" name="a0ddf1224851353fc92bfbff6f499fa97"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0ddf1224851353fc92bfbff6f499fa97">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramtype">int&#160;</td>
- <td class="paramname"><em>argc</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char *&#160;</td>
- <td class="paramname"><em>argv</em>[]&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ae964ff8411b4fdcaf65cb5529aea4bef" name="ae964ff8411b4fdcaf65cb5529aea4bef"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae964ff8411b4fdcaf65cb5529aea4bef">&#9670;&nbsp;</a></span>PrintHelp()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void PrintHelp </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a1fae5968f70747445d63f63065fb7ef3" name="a1fae5968f70747445d63f63065fb7ef3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1fae5968f70747445d63f63065fb7ef3">&#9670;&nbsp;</a></span>PrintVersion()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void PrintVersion </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__dumprecs_8cpp.html b/docs/doxygen/html/xb__dumprecs_8cpp.html
deleted file mode 100644
index e68256e..0000000
--- a/docs/doxygen/html/xb__dumprecs_8cpp.html
+++ /dev/null
@@ -1,155 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/utils/xb_dumprecs.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_313caf1132e152dd9b58bea13a4052ca.html">utils</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_dumprecs.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &lt;<a class="el" href="xbase_8h_source.html">xbase.h</a>&gt;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ae964ff8411b4fdcaf65cb5529aea4bef"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__dumprecs_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">PrintHelp</a> ()</td></tr>
-<tr class="separator:ae964ff8411b4fdcaf65cb5529aea4bef"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1fae5968f70747445d63f63065fb7ef3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__dumprecs_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">PrintVersion</a> ()</td></tr>
-<tr class="separator:a1fae5968f70747445d63f63065fb7ef3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__dumprecs_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
-<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="a0ddf1224851353fc92bfbff6f499fa97" name="a0ddf1224851353fc92bfbff6f499fa97"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0ddf1224851353fc92bfbff6f499fa97">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramtype">int&#160;</td>
- <td class="paramname"><em>argc</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char *&#160;</td>
- <td class="paramname"><em>argv</em>[]&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ae964ff8411b4fdcaf65cb5529aea4bef" name="ae964ff8411b4fdcaf65cb5529aea4bef"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae964ff8411b4fdcaf65cb5529aea4bef">&#9670;&nbsp;</a></span>PrintHelp()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void PrintHelp </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a1fae5968f70747445d63f63065fb7ef3" name="a1fae5968f70747445d63f63065fb7ef3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1fae5968f70747445d63f63065fb7ef3">&#9670;&nbsp;</a></span>PrintVersion()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void PrintVersion </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__ex__date_8cpp.html b/docs/doxygen/html/xb__ex__date_8cpp.html
deleted file mode 100644
index 24429e7..0000000
--- a/docs/doxygen/html/xb__ex__date_8cpp.html
+++ /dev/null
@@ -1,106 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/examples/xb_ex_date.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e931c1a3f0014e624d0645a271726ad2.html">examples</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_ex_date.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__date_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr>
-<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__ex__expression_8cpp.html b/docs/doxygen/html/xb__ex__expression_8cpp.html
deleted file mode 100644
index 9ef36af..0000000
--- a/docs/doxygen/html/xb__ex__expression_8cpp.html
+++ /dev/null
@@ -1,168 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/examples/xb_ex_expression.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e931c1a3f0014e624d0645a271726ad2.html">examples</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> &#124;
-<a href="#var-members">Variables</a> </div>
- <div class="headertitle"><div class="title">xb_ex_expression.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &lt;<a class="el" href="xbase_8h_source.html">xbase.h</a>&gt;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:a3234afc912211aec54c10d363d28cbda"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__expression_8cpp.html#a3234afc912211aec54c10d363d28cbda">PrintResult</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> *sExpression, xbExp *exp)</td></tr>
-<tr class="separator:a3234afc912211aec54c10d363d28cbda"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__expression_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr>
-<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="var-members" name="var-members"></a>
-Variables</h2></td></tr>
-<tr class="memitem:a2122b9562802e2fd799b20454000dc99"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structxb_1_1xbSchema.html">xbSchema</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__expression_8cpp.html#a2122b9562802e2fd799b20454000dc99">MyV4Record</a> []</td></tr>
-<tr class="separator:a2122b9562802e2fd799b20454000dc99"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a3234afc912211aec54c10d363d28cbda" name="a3234afc912211aec54c10d363d28cbda"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a3234afc912211aec54c10d363d28cbda">&#9670;&nbsp;</a></span>PrintResult()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void PrintResult </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> *&#160;</td>
- <td class="paramname"><em>sExpression</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbExp *&#160;</td>
- <td class="paramname"><em>exp</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<h2 class="groupheader">Variable Documentation</h2>
-<a id="a2122b9562802e2fd799b20454000dc99" name="a2122b9562802e2fd799b20454000dc99"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a2122b9562802e2fd799b20454000dc99">&#9670;&nbsp;</a></span>MyV4Record</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="structxb_1_1xbSchema.html">xbSchema</a> MyV4Record[]</td>
- </tr>
- </table>
-</div><div class="memdoc">
-<b>Initial value:</b><div class="fragment"><div class="line">= </div>
-<div class="line"> {</div>
-<div class="line"> { <span class="stringliteral">&quot;CFLD1&quot;</span>, <a class="code hl_define" href="xbdbf_8h.html#a20f739b9d9dc6a002a246a999e76aeaa">XB_CHAR_FLD</a>, 20, 0 },</div>
-<div class="line"> { <span class="stringliteral">&quot;CFLD2&quot;</span>, <a class="code hl_define" href="xbdbf_8h.html#a20f739b9d9dc6a002a246a999e76aeaa">XB_CHAR_FLD</a>, 10, 0 },</div>
-<div class="line"> { <span class="stringliteral">&quot;NFLD1&quot;</span>, <a class="code hl_define" href="xbdbf_8h.html#ae9fb6d69cc5edc94d36ae403c22ec1c6">XB_NUMERIC_FLD</a>, 5, 0 },</div>
-<div class="line"> { <span class="stringliteral">&quot;DATE1&quot;</span>, <a class="code hl_define" href="xbdbf_8h.html#a7f685e6f5fe804b2174725a27ce73adc">XB_DATE_FLD</a>, 8, 0 },</div>
-<div class="line"> { <span class="stringliteral">&quot;&quot;</span>,0,0,0 }</div>
-<div class="line"> }</div>
-<div class="ttc" id="axbdbf_8h_html_a20f739b9d9dc6a002a246a999e76aeaa"><div class="ttname"><a href="xbdbf_8h.html#a20f739b9d9dc6a002a246a999e76aeaa">XB_CHAR_FLD</a></div><div class="ttdeci">#define XB_CHAR_FLD</div><div class="ttdef"><b>Definition:</b> xbdbf.h:29</div></div>
-<div class="ttc" id="axbdbf_8h_html_a7f685e6f5fe804b2174725a27ce73adc"><div class="ttname"><a href="xbdbf_8h.html#a7f685e6f5fe804b2174725a27ce73adc">XB_DATE_FLD</a></div><div class="ttdeci">#define XB_DATE_FLD</div><div class="ttdef"><b>Definition:</b> xbdbf.h:32</div></div>
-<div class="ttc" id="axbdbf_8h_html_ae9fb6d69cc5edc94d36ae403c22ec1c6"><div class="ttname"><a href="xbdbf_8h.html#ae9fb6d69cc5edc94d36ae403c22ec1c6">XB_NUMERIC_FLD</a></div><div class="ttdeci">#define XB_NUMERIC_FLD</div><div class="ttdef"><b>Definition:</b> xbdbf.h:31</div></div>
-</div><!-- fragment -->
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__ex__sql_8cpp.html b/docs/doxygen/html/xb__ex__sql_8cpp.html
deleted file mode 100644
index edb601b..0000000
--- a/docs/doxygen/html/xb__ex__sql_8cpp.html
+++ /dev/null
@@ -1,117 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/examples/xb_ex_sql.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e931c1a3f0014e624d0645a271726ad2.html">examples</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_ex_sql.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &lt;<a class="el" href="xbase_8h_source.html">xbase.h</a>&gt;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__sql_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
-<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramtype">int&#160;</td>
- <td class="paramname"><em>argCnt</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char **&#160;</td>
- <td class="paramname"><em>av</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__ex__ssv_8cpp.html b/docs/doxygen/html/xb__ex__ssv_8cpp.html
deleted file mode 100644
index dcf2628..0000000
--- a/docs/doxygen/html/xb__ex__ssv_8cpp.html
+++ /dev/null
@@ -1,117 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/examples/xb_ex_ssv.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e931c1a3f0014e624d0645a271726ad2.html">examples</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_ex_ssv.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:a0c99d968a34e803d378692bde2e3f18f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__ssv_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">main</a> (int ac, char **av)</td></tr>
-<tr class="separator:a0c99d968a34e803d378692bde2e3f18f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="a0c99d968a34e803d378692bde2e3f18f" name="a0c99d968a34e803d378692bde2e3f18f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0c99d968a34e803d378692bde2e3f18f">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramtype">int&#160;</td>
- <td class="paramname"><em>ac</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char **&#160;</td>
- <td class="paramname"><em>av</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__ex__string_8cpp.html b/docs/doxygen/html/xb__ex__string_8cpp.html
deleted file mode 100644
index 9daa57a..0000000
--- a/docs/doxygen/html/xb__ex__string_8cpp.html
+++ /dev/null
@@ -1,106 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/examples/xb_ex_string.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e931c1a3f0014e624d0645a271726ad2.html">examples</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_ex_string.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__string_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr>
-<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__ex__v3__create__dbf_8cpp.html b/docs/doxygen/html/xb__ex__v3__create__dbf_8cpp.html
deleted file mode 100644
index a32c39b..0000000
--- a/docs/doxygen/html/xb__ex__v3__create__dbf_8cpp.html
+++ /dev/null
@@ -1,106 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/examples/xb_ex_v3_create_dbf.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e931c1a3f0014e624d0645a271726ad2.html">examples</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_ex_v3_create_dbf.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &lt;<a class="el" href="xbase_8h_source.html">xbase.h</a>&gt;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__v3__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr>
-<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__ex__v3__upd__dbf_8cpp.html b/docs/doxygen/html/xb__ex__v3__upd__dbf_8cpp.html
deleted file mode 100644
index b16f9cc..0000000
--- a/docs/doxygen/html/xb__ex__v3__upd__dbf_8cpp.html
+++ /dev/null
@@ -1,106 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/examples/xb_ex_v3_upd_dbf.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e931c1a3f0014e624d0645a271726ad2.html">examples</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_ex_v3_upd_dbf.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &lt;<a class="el" href="xbase_8h_source.html">xbase.h</a>&gt;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__v3__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr>
-<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__ex__v4__create__dbf_8cpp.html b/docs/doxygen/html/xb__ex__v4__create__dbf_8cpp.html
deleted file mode 100644
index 243b739..0000000
--- a/docs/doxygen/html/xb__ex__v4__create__dbf_8cpp.html
+++ /dev/null
@@ -1,106 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/examples/xb_ex_v4_create_dbf.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e931c1a3f0014e624d0645a271726ad2.html">examples</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_ex_v4_create_dbf.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &lt;<a class="el" href="xbase_8h_source.html">xbase.h</a>&gt;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__v4__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr>
-<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__ex__v4__upd__dbf_8cpp.html b/docs/doxygen/html/xb__ex__v4__upd__dbf_8cpp.html
deleted file mode 100644
index ff4ca67..0000000
--- a/docs/doxygen/html/xb__ex__v4__upd__dbf_8cpp.html
+++ /dev/null
@@ -1,106 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/examples/xb_ex_v4_upd_dbf.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e931c1a3f0014e624d0645a271726ad2.html">examples</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_ex_v4_upd_dbf.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &lt;<a class="el" href="xbase_8h_source.html">xbase.h</a>&gt;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__v4__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr>
-<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__execsql_8cpp.html b/docs/doxygen/html/xb__execsql_8cpp.html
deleted file mode 100644
index b00df44..0000000
--- a/docs/doxygen/html/xb__execsql_8cpp.html
+++ /dev/null
@@ -1,147 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/utils/xb_execsql.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_313caf1132e152dd9b58bea13a4052ca.html">utils</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_execsql.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &lt;<a class="el" href="xbase_8h_source.html">xbase.h</a>&gt;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:af888ba5e7e94d92c2165362b87f1ea0e"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__execsql_8cpp.html#af888ba5e7e94d92c2165362b87f1ea0e">GetNextSqlCmd</a> (<a class="el" href="classxb_1_1xbFile.html">xbFile</a> &amp;f, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sCmd)</td></tr>
-<tr class="separator:af888ba5e7e94d92c2165362b87f1ea0e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0c99d968a34e803d378692bde2e3f18f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__execsql_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">main</a> (int ac, char **av)</td></tr>
-<tr class="separator:a0c99d968a34e803d378692bde2e3f18f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="af888ba5e7e94d92c2165362b87f1ea0e" name="af888ba5e7e94d92c2165362b87f1ea0e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af888ba5e7e94d92c2165362b87f1ea0e">&#9670;&nbsp;</a></span>GetNextSqlCmd()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 GetNextSqlCmd </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbFile.html">xbFile</a> &amp;&#160;</td>
- <td class="paramname"><em>f</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sCmd</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a0c99d968a34e803d378692bde2e3f18f" name="a0c99d968a34e803d378692bde2e3f18f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0c99d968a34e803d378692bde2e3f18f">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramtype">int&#160;</td>
- <td class="paramname"><em>ac</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char **&#160;</td>
- <td class="paramname"><em>av</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__pack_8cpp.html b/docs/doxygen/html/xb__pack_8cpp.html
deleted file mode 100644
index e007f38..0000000
--- a/docs/doxygen/html/xb__pack_8cpp.html
+++ /dev/null
@@ -1,155 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/utils/xb_pack.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_313caf1132e152dd9b58bea13a4052ca.html">utils</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_pack.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &lt;<a class="el" href="xbase_8h_source.html">xbase.h</a>&gt;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ae964ff8411b4fdcaf65cb5529aea4bef"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__pack_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">PrintHelp</a> ()</td></tr>
-<tr class="separator:ae964ff8411b4fdcaf65cb5529aea4bef"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1fae5968f70747445d63f63065fb7ef3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__pack_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">PrintVersion</a> ()</td></tr>
-<tr class="separator:a1fae5968f70747445d63f63065fb7ef3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__pack_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
-<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="a0ddf1224851353fc92bfbff6f499fa97" name="a0ddf1224851353fc92bfbff6f499fa97"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0ddf1224851353fc92bfbff6f499fa97">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramtype">int&#160;</td>
- <td class="paramname"><em>argc</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char *&#160;</td>
- <td class="paramname"><em>argv</em>[]&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ae964ff8411b4fdcaf65cb5529aea4bef" name="ae964ff8411b4fdcaf65cb5529aea4bef"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae964ff8411b4fdcaf65cb5529aea4bef">&#9670;&nbsp;</a></span>PrintHelp()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void PrintHelp </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a1fae5968f70747445d63f63065fb7ef3" name="a1fae5968f70747445d63f63065fb7ef3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1fae5968f70747445d63f63065fb7ef3">&#9670;&nbsp;</a></span>PrintVersion()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void PrintVersion </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__tblinfo_8cpp.html b/docs/doxygen/html/xb__tblinfo_8cpp.html
deleted file mode 100644
index e01295b..0000000
--- a/docs/doxygen/html/xb__tblinfo_8cpp.html
+++ /dev/null
@@ -1,155 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/utils/xb_tblinfo.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_313caf1132e152dd9b58bea13a4052ca.html">utils</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_tblinfo.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &lt;<a class="el" href="xbase_8h_source.html">xbase.h</a>&gt;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ae964ff8411b4fdcaf65cb5529aea4bef"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__tblinfo_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">PrintHelp</a> ()</td></tr>
-<tr class="separator:ae964ff8411b4fdcaf65cb5529aea4bef"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1fae5968f70747445d63f63065fb7ef3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__tblinfo_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">PrintVersion</a> ()</td></tr>
-<tr class="separator:a1fae5968f70747445d63f63065fb7ef3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__tblinfo_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
-<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="a0ddf1224851353fc92bfbff6f499fa97" name="a0ddf1224851353fc92bfbff6f499fa97"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0ddf1224851353fc92bfbff6f499fa97">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramtype">int&#160;</td>
- <td class="paramname"><em>argc</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char *&#160;</td>
- <td class="paramname"><em>argv</em>[]&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ae964ff8411b4fdcaf65cb5529aea4bef" name="ae964ff8411b4fdcaf65cb5529aea4bef"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae964ff8411b4fdcaf65cb5529aea4bef">&#9670;&nbsp;</a></span>PrintHelp()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void PrintHelp </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a1fae5968f70747445d63f63065fb7ef3" name="a1fae5968f70747445d63f63065fb7ef3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1fae5968f70747445d63f63065fb7ef3">&#9670;&nbsp;</a></span>PrintVersion()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void PrintVersion </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__test__bcd_8cpp.html b/docs/doxygen/html/xb__test__bcd_8cpp.html
deleted file mode 100644
index 0de8fc2..0000000
--- a/docs/doxygen/html/xb__test__bcd_8cpp.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_bcd.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_test_bcd.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__bcd_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
-<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramtype">int&#160;</td>
- <td class="paramname"><em>argCnt</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char **&#160;</td>
- <td class="paramname"><em>av</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__test__blockread_8cpp.html b/docs/doxygen/html/xb__test__blockread_8cpp.html
deleted file mode 100644
index 195746e..0000000
--- a/docs/doxygen/html/xb__test__blockread_8cpp.html
+++ /dev/null
@@ -1,147 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_blockread.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> &#124;
-<a href="#var-members">Variables</a> </div>
- <div class="headertitle"><div class="title">xb_test_blockread.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__blockread_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
-<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="var-members" name="var-members"></a>
-Variables</h2></td></tr>
-<tr class="memitem:af68c3291a63fdf20ffa0e477460d148e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structxb_1_1xbSchema.html">xbSchema</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__blockread_8cpp.html#af68c3291a63fdf20ffa0e477460d148e">MyDbfRec</a> []</td></tr>
-<tr class="separator:af68c3291a63fdf20ffa0e477460d148e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramtype">int&#160;</td>
- <td class="paramname"><em>argCnt</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char **&#160;</td>
- <td class="paramname"><em>av</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<h2 class="groupheader">Variable Documentation</h2>
-<a id="af68c3291a63fdf20ffa0e477460d148e" name="af68c3291a63fdf20ffa0e477460d148e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af68c3291a63fdf20ffa0e477460d148e">&#9670;&nbsp;</a></span>MyDbfRec</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="structxb_1_1xbSchema.html">xbSchema</a> MyDbfRec[]</td>
- </tr>
- </table>
-</div><div class="memdoc">
-<b>Initial value:</b><div class="fragment"><div class="line">= </div>
-<div class="line"> {</div>
-<div class="line"> { <span class="stringliteral">&quot;NFLD&quot;</span>, <a class="code hl_define" href="xbdbf_8h.html#ae9fb6d69cc5edc94d36ae403c22ec1c6">XB_NUMERIC_FLD</a>, 10, 0 },</div>
-<div class="line"> { <span class="stringliteral">&quot;CFLD&quot;</span>, <a class="code hl_define" href="xbdbf_8h.html#a20f739b9d9dc6a002a246a999e76aeaa">XB_CHAR_FLD</a>, 89, 0 },</div>
-<div class="line"> { <span class="stringliteral">&quot;&quot;</span>,0,0,0 }</div>
-<div class="line"> }</div>
-<div class="ttc" id="axbdbf_8h_html_a20f739b9d9dc6a002a246a999e76aeaa"><div class="ttname"><a href="xbdbf_8h.html#a20f739b9d9dc6a002a246a999e76aeaa">XB_CHAR_FLD</a></div><div class="ttdeci">#define XB_CHAR_FLD</div><div class="ttdef"><b>Definition:</b> xbdbf.h:29</div></div>
-<div class="ttc" id="axbdbf_8h_html_ae9fb6d69cc5edc94d36ae403c22ec1c6"><div class="ttname"><a href="xbdbf_8h.html#ae9fb6d69cc5edc94d36ae403c22ec1c6">XB_NUMERIC_FLD</a></div><div class="ttdeci">#define XB_NUMERIC_FLD</div><div class="ttdef"><b>Definition:</b> xbdbf.h:31</div></div>
-</div><!-- fragment -->
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__test__date_8cpp.html b/docs/doxygen/html/xb__test__date_8cpp.html
deleted file mode 100644
index a6b3d97..0000000
--- a/docs/doxygen/html/xb__test__date_8cpp.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_date.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_test_date.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__date_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
-<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramtype">int&#160;</td>
- <td class="paramname"><em>argCnt</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char **&#160;</td>
- <td class="paramname"><em>av</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__test__dbf__v3__memos_8cpp.html b/docs/doxygen/html/xb__test__dbf__v3__memos_8cpp.html
deleted file mode 100644
index 60eced6..0000000
--- a/docs/doxygen/html/xb__test__dbf__v3__memos_8cpp.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_dbf_v3_memos.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_test_dbf_v3_memos.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__dbf__v3__memos_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
-<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramtype">int&#160;</td>
- <td class="paramname"><em>argCnt</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char **&#160;</td>
- <td class="paramname"><em>av</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__test__dbf__v3__nomemos_8cpp.html b/docs/doxygen/html/xb__test__dbf__v3__nomemos_8cpp.html
deleted file mode 100644
index 59c23e1..0000000
--- a/docs/doxygen/html/xb__test__dbf__v3__nomemos_8cpp.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_dbf_v3_nomemos.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_test_dbf_v3_nomemos.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__dbf__v3__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
-<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramtype">int&#160;</td>
- <td class="paramname"><em>argCnt</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char **&#160;</td>
- <td class="paramname"><em>av</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__test__dbf__v4__memos_8cpp.html b/docs/doxygen/html/xb__test__dbf__v4__memos_8cpp.html
deleted file mode 100644
index 86e0b35..0000000
--- a/docs/doxygen/html/xb__test__dbf__v4__memos_8cpp.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_dbf_v4_memos.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_test_dbf_v4_memos.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__dbf__v4__memos_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
-<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramtype">int&#160;</td>
- <td class="paramname"><em>argCnt</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char **&#160;</td>
- <td class="paramname"><em>av</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__test__dbf__v4__nomemos_8cpp.html b/docs/doxygen/html/xb__test__dbf__v4__nomemos_8cpp.html
deleted file mode 100644
index e9b853a..0000000
--- a/docs/doxygen/html/xb__test__dbf__v4__nomemos_8cpp.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_dbf_v4_nomemos.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_test_dbf_v4_nomemos.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__dbf__v4__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
-<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramtype">int&#160;</td>
- <td class="paramname"><em>argCnt</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char **&#160;</td>
- <td class="paramname"><em>av</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__test__expnode_8cpp.html b/docs/doxygen/html/xb__test__expnode_8cpp.html
deleted file mode 100644
index 630ecdb..0000000
--- a/docs/doxygen/html/xb__test__expnode_8cpp.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_expnode.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_test_expnode.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__expnode_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
-<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramtype">int&#160;</td>
- <td class="paramname"><em>argCnt</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char **&#160;</td>
- <td class="paramname"><em>av</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__test__expression_8cpp.html b/docs/doxygen/html/xb__test__expression_8cpp.html
deleted file mode 100644
index 6be59f2..0000000
--- a/docs/doxygen/html/xb__test__expression_8cpp.html
+++ /dev/null
@@ -1,502 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_expression.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_test_expression.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:aee57237c5f5b9b4d80e84bf530eb42bc"><td class="memItemLeft" align="right" valign="top">DOXYOFF xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__expression_8cpp.html#aee57237c5f5b9b4d80e84bf530eb42bc">DevTester</a> (<a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *xb, <a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *dbf, const char *sExpIn)</td></tr>
-<tr class="separator:aee57237c5f5b9b4d80e84bf530eb42bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af56b6dbc38e0d23caaf6531526315379"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__expression_8cpp.html#af56b6dbc38e0d23caaf6531526315379">TestWeight</a> (<a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *xb, xbInt16 iPrintOption, const char *title, const char *sOperator, xbInt16 iExpectedWeight)</td></tr>
-<tr class="separator:af56b6dbc38e0d23caaf6531526315379"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a440d64b55abaa9e14e73ecc132d1084d"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__expression_8cpp.html#a440d64b55abaa9e14e73ecc132d1084d">TestTokenMethod</a> (<a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *xb, xbInt16 iPrintOption, const char *title, const char *sExpression, const char *sExpectedToken, const char *sExpectedRemainder, char cExpectedNodeType, char cExpectedReturnType, xbInt16 iErc, xbInt16 iTrc)</td></tr>
-<tr class="separator:a440d64b55abaa9e14e73ecc132d1084d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad52c27685018dda7c5c4b26fb445860e"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__expression_8cpp.html#ad52c27685018dda7c5c4b26fb445860e">TestMethod</a> (<a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *xb, <a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *d, xbInt16 PrintOption, const char *title, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sExpression, const char *sExpectedResult, xbInt16 iExpectedResultLen)</td></tr>
-<tr class="separator:ad52c27685018dda7c5c4b26fb445860e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7030149316fe8d8195ffbb18132e0cf9"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__expression_8cpp.html#a7030149316fe8d8195ffbb18132e0cf9">TestMethod</a> (<a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *xb, <a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *d, xbInt16 PrintOption, const char *title, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sExpression, <a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dExpectedResult)</td></tr>
-<tr class="separator:a7030149316fe8d8195ffbb18132e0cf9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a10e637a203841bd2b6a92e6217509e23"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__expression_8cpp.html#a10e637a203841bd2b6a92e6217509e23">TestMethod</a> (<a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *xb, <a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *d, xbInt16 PrintOption, const char *title, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sExpression, <a class="el" href="classxb_1_1xbDate.html">xbDate</a> dtExpectedResult)</td></tr>
-<tr class="separator:a10e637a203841bd2b6a92e6217509e23"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa385c5f9fa8b4cfd63763b4a28852b64"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__expression_8cpp.html#aa385c5f9fa8b4cfd63763b4a28852b64">TestMethod</a> (<a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *xb, <a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *d, xbInt16 PrintOption, const char *title, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sExpression, <a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bExpectedResult)</td></tr>
-<tr class="separator:aa385c5f9fa8b4cfd63763b4a28852b64"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__expression_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
-<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="aee57237c5f5b9b4d80e84bf530eb42bc" name="aee57237c5f5b9b4d80e84bf530eb42bc"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aee57237c5f5b9b4d80e84bf530eb42bc">&#9670;&nbsp;</a></span>DevTester()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">DOXYOFF xbInt16 DevTester </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *&#160;</td>
- <td class="paramname"><em>xb</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td>
- <td class="paramname"><em>dbf</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>sExpIn</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramtype">int&#160;</td>
- <td class="paramname"><em>argCnt</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char **&#160;</td>
- <td class="paramname"><em>av</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ad52c27685018dda7c5c4b26fb445860e" name="ad52c27685018dda7c5c4b26fb445860e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ad52c27685018dda7c5c4b26fb445860e">&#9670;&nbsp;</a></span>TestMethod() <span class="overload">[1/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 TestMethod </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *&#160;</td>
- <td class="paramname"><em>xb</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td>
- <td class="paramname"><em>d</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>PrintOption</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>title</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sExpression</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>sExpectedResult</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iExpectedResultLen</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="aa385c5f9fa8b4cfd63763b4a28852b64" name="aa385c5f9fa8b4cfd63763b4a28852b64"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aa385c5f9fa8b4cfd63763b4a28852b64">&#9670;&nbsp;</a></span>TestMethod() <span class="overload">[2/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 TestMethod </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *&#160;</td>
- <td class="paramname"><em>xb</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td>
- <td class="paramname"><em>d</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>PrintOption</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>title</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sExpression</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td>
- <td class="paramname"><em>bExpectedResult</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a10e637a203841bd2b6a92e6217509e23" name="a10e637a203841bd2b6a92e6217509e23"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a10e637a203841bd2b6a92e6217509e23">&#9670;&nbsp;</a></span>TestMethod() <span class="overload">[3/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 TestMethod </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *&#160;</td>
- <td class="paramname"><em>xb</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td>
- <td class="paramname"><em>d</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>PrintOption</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>title</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sExpression</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbDate.html">xbDate</a>&#160;</td>
- <td class="paramname"><em>dtExpectedResult</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a7030149316fe8d8195ffbb18132e0cf9" name="a7030149316fe8d8195ffbb18132e0cf9"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a7030149316fe8d8195ffbb18132e0cf9">&#9670;&nbsp;</a></span>TestMethod() <span class="overload">[4/4]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 TestMethod </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *&#160;</td>
- <td class="paramname"><em>xb</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td>
- <td class="paramname"><em>d</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>PrintOption</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>title</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sExpression</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a>&#160;</td>
- <td class="paramname"><em>dExpectedResult</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a440d64b55abaa9e14e73ecc132d1084d" name="a440d64b55abaa9e14e73ecc132d1084d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a440d64b55abaa9e14e73ecc132d1084d">&#9670;&nbsp;</a></span>TestTokenMethod()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 TestTokenMethod </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *&#160;</td>
- <td class="paramname"><em>xb</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iPrintOption</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>title</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>sExpression</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>sExpectedToken</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>sExpectedRemainder</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char&#160;</td>
- <td class="paramname"><em>cExpectedNodeType</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char&#160;</td>
- <td class="paramname"><em>cExpectedReturnType</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iErc</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iTrc</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="af56b6dbc38e0d23caaf6531526315379" name="af56b6dbc38e0d23caaf6531526315379"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af56b6dbc38e0d23caaf6531526315379">&#9670;&nbsp;</a></span>TestWeight()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 TestWeight </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> *&#160;</td>
- <td class="paramname"><em>xb</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iPrintOption</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>title</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const char *&#160;</td>
- <td class="paramname"><em>sOperator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iExpectedWeight</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__test__file_8cpp.html b/docs/doxygen/html/xb__test__file_8cpp.html
deleted file mode 100644
index 6a9b6b0..0000000
--- a/docs/doxygen/html/xb__test__file_8cpp.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_file.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_test_file.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__file_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
-<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramtype">int&#160;</td>
- <td class="paramname"><em>argCnt</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char **&#160;</td>
- <td class="paramname"><em>av</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__test__filter_8cpp.html b/docs/doxygen/html/xb__test__filter_8cpp.html
deleted file mode 100644
index 7176b10..0000000
--- a/docs/doxygen/html/xb__test__filter_8cpp.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_filter.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_test_filter.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__filter_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
-<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramtype">int&#160;</td>
- <td class="paramname"><em>argCnt</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char **&#160;</td>
- <td class="paramname"><em>av</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__test__funcs_8cpp.html b/docs/doxygen/html/xb__test__funcs_8cpp.html
deleted file mode 100644
index fc28aec..0000000
--- a/docs/doxygen/html/xb__test__funcs_8cpp.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_funcs.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_test_funcs.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__funcs_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
-<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramtype">int&#160;</td>
- <td class="paramname"><em>argCnt</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char **&#160;</td>
- <td class="paramname"><em>av</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__test__linklist_8cpp.html b/docs/doxygen/html/xb__test__linklist_8cpp.html
deleted file mode 100644
index 2d6be8e..0000000
--- a/docs/doxygen/html/xb__test__linklist_8cpp.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_linklist.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_test_linklist.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__linklist_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
-<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramtype">int&#160;</td>
- <td class="paramname"><em>argCnt</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char **&#160;</td>
- <td class="paramname"><em>av</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__test__lock2_8cpp.html b/docs/doxygen/html/xb__test__lock2_8cpp.html
deleted file mode 100644
index 54f9e90..0000000
--- a/docs/doxygen/html/xb__test__lock2_8cpp.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_lock2.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_test_lock2.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__lock2_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
-<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramtype">int&#160;</td>
- <td class="paramname"><em>argCnt</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char **&#160;</td>
- <td class="paramname"><em>av</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__test__lock_8cpp.html b/docs/doxygen/html/xb__test__lock_8cpp.html
deleted file mode 100644
index 5d83846..0000000
--- a/docs/doxygen/html/xb__test__lock_8cpp.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_lock.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_test_lock.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__lock_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
-<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramtype">int&#160;</td>
- <td class="paramname"><em>argCnt</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char **&#160;</td>
- <td class="paramname"><em>av</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__test__log_8cpp.html b/docs/doxygen/html/xb__test__log_8cpp.html
deleted file mode 100644
index b3115b6..0000000
--- a/docs/doxygen/html/xb__test__log_8cpp.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_log.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_test_log.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__log_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
-<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramtype">int&#160;</td>
- <td class="paramname"><em>argCnt</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char **&#160;</td>
- <td class="paramname"><em>av</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__test__mdx_8cpp.html b/docs/doxygen/html/xb__test__mdx_8cpp.html
deleted file mode 100644
index 1fb7381..0000000
--- a/docs/doxygen/html/xb__test__mdx_8cpp.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_mdx.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_test_mdx.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__mdx_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
-<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramtype">int&#160;</td>
- <td class="paramname"><em>argCnt</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char **&#160;</td>
- <td class="paramname"><em>av</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__test__ndx_8cpp.html b/docs/doxygen/html/xb__test__ndx_8cpp.html
deleted file mode 100644
index 78bcd99..0000000
--- a/docs/doxygen/html/xb__test__ndx_8cpp.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_ndx.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_test_ndx.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__ndx_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
-<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramtype">int&#160;</td>
- <td class="paramname"><em>argCnt</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char **&#160;</td>
- <td class="paramname"><em>av</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__test__sql_8cpp.html b/docs/doxygen/html/xb__test__sql_8cpp.html
deleted file mode 100644
index 759da86..0000000
--- a/docs/doxygen/html/xb__test__sql_8cpp.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_sql.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_test_sql.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__sql_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
-<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramtype">int&#160;</td>
- <td class="paramname"><em>argCnt</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char **&#160;</td>
- <td class="paramname"><em>av</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__test__string_8cpp.html b/docs/doxygen/html/xb__test__string_8cpp.html
deleted file mode 100644
index 2a28164..0000000
--- a/docs/doxygen/html/xb__test__string_8cpp.html
+++ /dev/null
@@ -1,139 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_string.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#define-members">Macros</a> &#124;
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_test_string.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a>
-Macros</h2></td></tr>
-<tr class="memitem:a42f8c497a1968074f38bf5055c650dca"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__string_8cpp.html#a42f8c497a1968074f38bf5055c650dca">VERBOSE</a></td></tr>
-<tr class="separator:a42f8c497a1968074f38bf5055c650dca"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:aabf71bc9adb6daf457b2ea8879ae537f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__string_8cpp.html#aabf71bc9adb6daf457b2ea8879ae537f">main</a> (int argCnt, char **av=NULL)</td></tr>
-<tr class="separator:aabf71bc9adb6daf457b2ea8879ae537f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Macro Definition Documentation</h2>
-<a id="a42f8c497a1968074f38bf5055c650dca" name="a42f8c497a1968074f38bf5055c650dca"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a42f8c497a1968074f38bf5055c650dca">&#9670;&nbsp;</a></span>VERBOSE</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define VERBOSE</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="aabf71bc9adb6daf457b2ea8879ae537f" name="aabf71bc9adb6daf457b2ea8879ae537f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aabf71bc9adb6daf457b2ea8879ae537f">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramtype">int&#160;</td>
- <td class="paramname"><em>argCnt</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char **&#160;</td>
- <td class="paramname"><em>av</em> = <code>NULL</code>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__test__tblmgr_8cpp.html b/docs/doxygen/html/xb__test__tblmgr_8cpp.html
deleted file mode 100644
index df12fec..0000000
--- a/docs/doxygen/html/xb__test__tblmgr_8cpp.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_tblmgr.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_test_tblmgr.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__tblmgr_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
-<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramtype">int&#160;</td>
- <td class="paramname"><em>argCnt</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char **&#160;</td>
- <td class="paramname"><em>av</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__test__uda_8cpp.html b/docs/doxygen/html/xb__test__uda_8cpp.html
deleted file mode 100644
index bc917d6..0000000
--- a/docs/doxygen/html/xb__test__uda_8cpp.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_uda.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_test_uda.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__uda_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
-<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramtype">int&#160;</td>
- <td class="paramname"><em>argCnt</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char **&#160;</td>
- <td class="paramname"><em>av</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__test__xbase_8cpp.html b/docs/doxygen/html/xb__test__xbase_8cpp.html
deleted file mode 100644
index ac33034..0000000
--- a/docs/doxygen/html/xb__test__xbase_8cpp.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_xbase.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_test_xbase.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__xbase_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
-<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramtype">int&#160;</td>
- <td class="paramname"><em>argCnt</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char **&#160;</td>
- <td class="paramname"><em>av</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xb__undelall_8cpp.html b/docs/doxygen/html/xb__undelall_8cpp.html
deleted file mode 100644
index 04da1a6..0000000
--- a/docs/doxygen/html/xb__undelall_8cpp.html
+++ /dev/null
@@ -1,155 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/utils/xb_undelall.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_313caf1132e152dd9b58bea13a4052ca.html">utils</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xb_undelall.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &lt;<a class="el" href="xbase_8h_source.html">xbase.h</a>&gt;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ae964ff8411b4fdcaf65cb5529aea4bef"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__undelall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">PrintHelp</a> ()</td></tr>
-<tr class="separator:ae964ff8411b4fdcaf65cb5529aea4bef"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1fae5968f70747445d63f63065fb7ef3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__undelall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">PrintVersion</a> ()</td></tr>
-<tr class="separator:a1fae5968f70747445d63f63065fb7ef3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__undelall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
-<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="a0ddf1224851353fc92bfbff6f499fa97" name="a0ddf1224851353fc92bfbff6f499fa97"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0ddf1224851353fc92bfbff6f499fa97">&#9670;&nbsp;</a></span>main()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int main </td>
- <td>(</td>
- <td class="paramtype">int&#160;</td>
- <td class="paramname"><em>argc</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char *&#160;</td>
- <td class="paramname"><em>argv</em>[]&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ae964ff8411b4fdcaf65cb5529aea4bef" name="ae964ff8411b4fdcaf65cb5529aea4bef"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae964ff8411b4fdcaf65cb5529aea4bef">&#9670;&nbsp;</a></span>PrintHelp()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void PrintHelp </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a1fae5968f70747445d63f63065fb7ef3" name="a1fae5968f70747445d63f63065fb7ef3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1fae5968f70747445d63f63065fb7ef3">&#9670;&nbsp;</a></span>PrintVersion()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void PrintVersion </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbalttbl_8cpp.html b/docs/doxygen/html/xbalttbl_8cpp.html
deleted file mode 100644
index 6fdf925..0000000
--- a/docs/doxygen/html/xbalttbl_8cpp.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/sql/xbalttbl.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_25b94c3afce00ed38231227d8141f932.html">sql</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbalttbl.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbase_8h.html b/docs/doxygen/html/xbase_8h.html
deleted file mode 100644
index e91ad08..0000000
--- a/docs/doxygen/html/xbase_8h.html
+++ /dev/null
@@ -1,110 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbase.h File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbase.h File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &lt;xbconfig.h&gt;</code><br />
-<code>#include &lt;stdio.h&gt;</code><br />
-<code>#include &lt;errno.h&gt;</code><br />
-<code>#include &lt;time.h&gt;</code><br />
-<code>#include &lt;math.h&gt;</code><br />
-<code>#include &lt;iomanip&gt;</code><br />
-<code>#include &lt;<a class="el" href="xbretcod_8h_source.html">xbretcod.h</a>&gt;</code><br />
-<code>#include &lt;<a class="el" href="xbtypes_8h_source.html">xbtypes.h</a>&gt;</code><br />
-<code>#include &lt;<a class="el" href="xbstring_8h_source.html">xbstring.h</a>&gt;</code><br />
-<code>#include &lt;<a class="el" href="xbssv_8h_source.html">xbssv.h</a>&gt;</code><br />
-<code>#include &lt;<a class="el" href="xbdate_8h_source.html">xbdate.h</a>&gt;</code><br />
-<code>#include &lt;<a class="el" href="xbtblmgr_8h_source.html">xbtblmgr.h</a>&gt;</code><br />
-<code>#include &lt;<a class="el" href="xbxbase_8h_source.html">xbxbase.h</a>&gt;</code><br />
-<code>#include &lt;<a class="el" href="xblnknod_8h_source.html">xblnknod.h</a>&gt;</code><br />
-<code>#include &lt;<a class="el" href="xblnklst_8h_source.html">xblnklst.h</a>&gt;</code><br />
-<code>#include &lt;<a class="el" href="xblnklstord_8h_source.html">xblnklstord.h</a>&gt;</code><br />
-<code>#include &lt;<a class="el" href="xbfile_8h_source.html">xbfile.h</a>&gt;</code><br />
-<code>#include &lt;<a class="el" href="xblog_8h_source.html">xblog.h</a>&gt;</code><br />
-<code>#include &lt;<a class="el" href="xbmemo_8h_source.html">xbmemo.h</a>&gt;</code><br />
-<code>#include &lt;<a class="el" href="xbbcd_8h_source.html">xbbcd.h</a>&gt;</code><br />
-<code>#include &lt;<a class="el" href="xbuda_8h_source.html">xbuda.h</a>&gt;</code><br />
-<code>#include &lt;<a class="el" href="xbexpnode_8h_source.html">xbexpnode.h</a>&gt;</code><br />
-<code>#include &lt;<a class="el" href="xbexp_8h_source.html">xbexp.h</a>&gt;</code><br />
-<code>#include &lt;<a class="el" href="xbtag_8h_source.html">xbtag.h</a>&gt;</code><br />
-<code>#include &lt;<a class="el" href="xbblkread_8h_source.html">xbblkread.h</a>&gt;</code><br />
-<code>#include &lt;<a class="el" href="xbdbf_8h_source.html">xbdbf.h</a>&gt;</code><br />
-<code>#include &lt;<a class="el" href="xbindex_8h_source.html">xbindex.h</a>&gt;</code><br />
-<code>#include &lt;<a class="el" href="xbfilter_8h_source.html">xbfilter.h</a>&gt;</code><br />
-<code>#include &lt;<a class="el" href="xbsql_8h_source.html">xbsql.h</a>&gt;</code><br />
-</div>
-<p><a href="xbase_8h_source.html">Go to the source code of this file.</a></p>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbase_8h_source.html b/docs/doxygen/html/xbase_8h_source.html
deleted file mode 100644
index fe74fac..0000000
--- a/docs/doxygen/html/xbase_8h_source.html
+++ /dev/null
@@ -1,202 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbase.h Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbase.h</div></div>
-</div><!--header-->
-<div class="contents">
-<a href="xbase_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbase.h</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"></span> </div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">Xbase64 Software Library</span></div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment"></span> </div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel</span></div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment"></span> </div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license</span></div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment"></span> </div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment">Email Contact:</span></div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"></span> </div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment"></span> </div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment">*/</span></div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#include &lt;xbconfig.h&gt;</span></div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#include &lt;stdio.h&gt;</span></div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#include &lt;errno.h&gt;</span></div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#include &lt;time.h&gt;</span></div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#include &lt;math.h&gt;</span></div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#ifdef HAVE_INTTYPES_H</span></div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#include &lt;inttypes.h&gt;</span></div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="preprocessor">#ifdef HAVE_STRING_H</span></div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="preprocessor">#include &lt;string.h&gt;</span></div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="preprocessor">#ifdef HAVE_STRINGS_H</span></div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="preprocessor">#include &lt;strings.h&gt;</span></div>
-<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> </div>
-<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="comment">// #ifdef STDC_HEADERS</span></div>
-<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="preprocessor">#ifdef HAVE_STDARGS_H</span></div>
-<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="preprocessor">#include &lt;stdargs.h&gt;</span></div>
-<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> </div>
-<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="preprocessor">#ifdef HAVE_CTYPE_H</span></div>
-<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="preprocessor">#include &lt;ctype.h&gt;</span></div>
-<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div>
-<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="preprocessor">#ifdef HAVE_PWD_H</span></div>
-<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="preprocessor">#include &lt;pwd.h&gt;</span></div>
-<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> </div>
-<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="preprocessor">#ifdef HAVE_STDARG_H</span></div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="preprocessor">#include &lt;stdarg.h&gt;</span></div>
-<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div>
-<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><span class="preprocessor">#ifdef HAVE_STAT_H</span></div>
-<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span><span class="preprocessor">#include &lt;sys/stat.h&gt;</span></div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> </div>
-<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span><span class="preprocessor">#ifdef HAVE_FCNTL_H</span></div>
-<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span><span class="preprocessor">#include &lt;fcntl.h&gt;</span></div>
-<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> </div>
-<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span><span class="preprocessor">#ifdef HAVE_UNISTD_H</span></div>
-<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span><span class="preprocessor">#include &lt;unistd.h&gt;</span></div>
-<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> </div>
-<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="preprocessor">#ifdef HAVE_VARARGS_H</span></div>
-<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><span class="preprocessor">#ifndef HAVE_STDARG_H</span></div>
-<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span><span class="preprocessor">#include &lt;varargs.h&gt;</span></div>
-<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> </div>
-<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span><span class="preprocessor">#ifdef HAVE_WINDOWS_H</span></div>
-<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span><span class="preprocessor">#include &lt;windows.h&gt;</span></div>
-<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span><span class="preprocessor">#include &lt;io.h&gt;</span></div>
-<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> </div>
-<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="preprocessor">#include &lt;iomanip&gt;</span></div>
-<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> </div>
-<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="preprocessor">#include &lt;<a class="code" href="xbretcod_8h.html">xbretcod.h</a>&gt;</span></div>
-<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span><span class="preprocessor">#include &lt;<a class="code" href="xbtypes_8h.html">xbtypes.h</a>&gt;</span></div>
-<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span><span class="preprocessor">#include &lt;<a class="code" href="xbstring_8h.html">xbstring.h</a>&gt;</span></div>
-<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span><span class="preprocessor">#include &lt;<a class="code" href="xbssv_8h.html">xbssv.h</a>&gt;</span></div>
-<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span><span class="preprocessor">#include &lt;<a class="code" href="xbdate_8h.html">xbdate.h</a>&gt;</span></div>
-<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span><span class="preprocessor">#include &lt;<a class="code" href="xbtblmgr_8h.html">xbtblmgr.h</a>&gt;</span></div>
-<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span><span class="preprocessor">#include &lt;<a class="code" href="xbxbase_8h.html">xbxbase.h</a>&gt;</span></div>
-<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span><span class="preprocessor">#include &lt;<a class="code" href="xblnknod_8h.html">xblnknod.h</a>&gt;</span></div>
-<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span><span class="preprocessor">#include &lt;<a class="code" href="xblnklst_8h.html">xblnklst.h</a>&gt;</span></div>
-<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span><span class="preprocessor">#include &lt;<a class="code" href="xblnklstord_8h.html">xblnklstord.h</a>&gt;</span></div>
-<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span><span class="preprocessor">#include &lt;<a class="code" href="xbfile_8h.html">xbfile.h</a>&gt;</span></div>
-<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span><span class="preprocessor">#include &lt;<a class="code" href="xblog_8h.html">xblog.h</a>&gt;</span></div>
-<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span><span class="preprocessor">#include &lt;<a class="code" href="xbmemo_8h.html">xbmemo.h</a>&gt;</span></div>
-<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span><span class="preprocessor">#include &lt;<a class="code" href="xbbcd_8h.html">xbbcd.h</a>&gt;</span></div>
-<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span><span class="preprocessor">#include &lt;<a class="code" href="xbuda_8h.html">xbuda.h</a>&gt;</span></div>
-<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span><span class="preprocessor">#include &lt;<a class="code" href="xbexpnode_8h.html">xbexpnode.h</a>&gt;</span></div>
-<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span><span class="preprocessor">#include &lt;<a class="code" href="xbexp_8h.html">xbexp.h</a>&gt;</span></div>
-<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> </div>
-<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span><span class="preprocessor">#include &lt;<a class="code" href="xbtag_8h.html">xbtag.h</a>&gt;</span></div>
-<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span><span class="preprocessor">#include &lt;<a class="code" href="xbblkread_8h.html">xbblkread.h</a>&gt;</span></div>
-<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span><span class="preprocessor">#include &lt;<a class="code" href="xbdbf_8h.html">xbdbf.h</a>&gt;</span> <span class="comment">/* dbf base class */</span></div>
-<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span><span class="preprocessor">#include &lt;<a class="code" href="xbindex_8h.html">xbindex.h</a>&gt;</span> <span class="comment">/* index base class */</span></div>
-<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span><span class="preprocessor">#include &lt;<a class="code" href="xbfilter_8h.html">xbfilter.h</a>&gt;</span></div>
-<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span><span class="preprocessor">#include &lt;<a class="code" href="xbsql_8h.html">xbsql.h</a>&gt;</span></div>
-<div class="ttc" id="axbbcd_8h_html"><div class="ttname"><a href="xbbcd_8h.html">xbbcd.h</a></div></div>
-<div class="ttc" id="axbblkread_8h_html"><div class="ttname"><a href="xbblkread_8h.html">xbblkread.h</a></div></div>
-<div class="ttc" id="axbdate_8h_html"><div class="ttname"><a href="xbdate_8h.html">xbdate.h</a></div></div>
-<div class="ttc" id="axbdbf_8h_html"><div class="ttname"><a href="xbdbf_8h.html">xbdbf.h</a></div></div>
-<div class="ttc" id="axbexp_8h_html"><div class="ttname"><a href="xbexp_8h.html">xbexp.h</a></div></div>
-<div class="ttc" id="axbexpnode_8h_html"><div class="ttname"><a href="xbexpnode_8h.html">xbexpnode.h</a></div></div>
-<div class="ttc" id="axbfile_8h_html"><div class="ttname"><a href="xbfile_8h.html">xbfile.h</a></div></div>
-<div class="ttc" id="axbfilter_8h_html"><div class="ttname"><a href="xbfilter_8h.html">xbfilter.h</a></div></div>
-<div class="ttc" id="axbindex_8h_html"><div class="ttname"><a href="xbindex_8h.html">xbindex.h</a></div></div>
-<div class="ttc" id="axblnklst_8h_html"><div class="ttname"><a href="xblnklst_8h.html">xblnklst.h</a></div></div>
-<div class="ttc" id="axblnklstord_8h_html"><div class="ttname"><a href="xblnklstord_8h.html">xblnklstord.h</a></div></div>
-<div class="ttc" id="axblnknod_8h_html"><div class="ttname"><a href="xblnknod_8h.html">xblnknod.h</a></div></div>
-<div class="ttc" id="axblog_8h_html"><div class="ttname"><a href="xblog_8h.html">xblog.h</a></div></div>
-<div class="ttc" id="axbmemo_8h_html"><div class="ttname"><a href="xbmemo_8h.html">xbmemo.h</a></div></div>
-<div class="ttc" id="axbretcod_8h_html"><div class="ttname"><a href="xbretcod_8h.html">xbretcod.h</a></div></div>
-<div class="ttc" id="axbsql_8h_html"><div class="ttname"><a href="xbsql_8h.html">xbsql.h</a></div></div>
-<div class="ttc" id="axbssv_8h_html"><div class="ttname"><a href="xbssv_8h.html">xbssv.h</a></div></div>
-<div class="ttc" id="axbstring_8h_html"><div class="ttname"><a href="xbstring_8h.html">xbstring.h</a></div></div>
-<div class="ttc" id="axbtag_8h_html"><div class="ttname"><a href="xbtag_8h.html">xbtag.h</a></div></div>
-<div class="ttc" id="axbtblmgr_8h_html"><div class="ttname"><a href="xbtblmgr_8h.html">xbtblmgr.h</a></div></div>
-<div class="ttc" id="axbtypes_8h_html"><div class="ttname"><a href="xbtypes_8h.html">xbtypes.h</a></div></div>
-<div class="ttc" id="axbuda_8h_html"><div class="ttname"><a href="xbuda_8h.html">xbuda.h</a></div></div>
-<div class="ttc" id="axbxbase_8h_html"><div class="ttname"><a href="xbxbase_8h.html">xbxbase.h</a></div></div>
-</div><!-- fragment --></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbbcd_8cpp.html b/docs/doxygen/html/xbbcd_8cpp.html
deleted file mode 100644
index 26f5cf0..0000000
--- a/docs/doxygen/html/xbbcd_8cpp.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbbcd.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbbcd.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbbcd_8h.html b/docs/doxygen/html/xbbcd_8h.html
deleted file mode 100644
index c8ad04d..0000000
--- a/docs/doxygen/html/xbbcd_8h.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbbcd.h File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbbcd.h File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-
-<p><a href="xbbcd_8h_source.html">Go to the source code of this file.</a></p>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbbcd_8h_source.html b/docs/doxygen/html/xbbcd_8h_source.html
deleted file mode 100644
index a76c0ce..0000000
--- a/docs/doxygen/html/xbbcd_8h_source.html
+++ /dev/null
@@ -1,172 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbbcd.h Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbbcd.h</div></div>
-</div><!--header-->
-<div class="contents">
-<a href="xbbcd_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbbcd.h</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014, 2018, 2019, 2022 Gary A Kunkel</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">*/</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#ifndef __XB_BCD_H__</span></div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#define __XB_BCD_H__</span></div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#ifdef XB_INDEX_SUPPORT</span></div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="comment">// structure for bcd value</span></div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="comment">// next structure superceeded. Different compilers allocate different</span></div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="comment">// sizes to structures with bit fields, can&#39;t count on the size</span></div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="comment">/*</span></div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="comment">struct XBDLLEXPORT xbBcdStrucOld {</span></div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="comment"> unsigned SigDigits : 8; // significant digit count</span></div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="comment"> unsigned Filler : 2; // always set to 1</span></div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="comment"> unsigned EncDigits : 5; // encoded digit count</span></div>
-<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="comment"> unsigned Sign : 1; // +/- sign</span></div>
-<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="comment"> unsigned char Data[10];</span></div>
-<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="comment">};</span></div>
-<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="comment">*/</span></div>
-<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> </div>
-<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="keyword">struct </span>XBDLLEXPORT xbBcdStruct {</div>
-<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> cSigDigits; <span class="comment">// significant digit count</span></div>
-<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> cEncDigits; <span class="comment">// encoded digit count</span></div>
-<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> cData[10]; <span class="comment">// data</span></div>
-<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span>};</div>
-<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div>
-<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="keyword">struct </span>XBDLLEXPORT xbByteSplit {</div>
-<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <span class="keywordtype">unsigned</span> c1 : 4;</div>
-<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <span class="keywordtype">unsigned</span> c2 : 4;</div>
-<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span>};</div>
-<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> </div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="keyword">class </span>XBDLLEXPORT xbBcd {</div>
-<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div>
-<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> xbBcd( <span class="keyword">const</span> xbString &amp;sIn );</div>
-<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> xbBcd( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn );</div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> xbBcd( <span class="keyword">const</span> <span class="keywordtype">void</span> *vBcd12In );</div>
-<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="keywordtype">void</span> Set( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn );</div>
-<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="keywordtype">void</span> Set( <span class="keyword">const</span> <span class="keywordtype">void</span> *cBcd12In );</div>
-<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <span class="keywordtype">void</span> Set( <span class="keyword">const</span> xbString &amp;sIn );</div>
-<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> </div>
-<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> </div>
-<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="keywordtype">void</span> ToString( xbString &amp;sOut );</div>
-<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <span class="keywordtype">void</span> ToDouble( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dOut );</div>
-<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <span class="keywordtype">void</span> ToBcd( xbBcdStruct &amp;bcdOut );</div>
-<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="keywordtype">void</span> ToChar( <span class="keywordtype">char</span> *cOut );</div>
-<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> </div>
-<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="comment">// const unsigned char * GetBcd() const;</span></div>
-<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="keywordtype">void</span> StringToBcd( <span class="keyword">const</span> xbString &amp;sStringIn );</div>
-<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> </div>
-<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> xbInt16 Compare( <span class="keyword">const</span> xbBcd &amp;bcdIn );</div>
-<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> xbInt16 Compare( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> d );</div>
-<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> </div>
-<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *GetData() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="keyword">const</span> <span class="keywordtype">void</span> * GetBcd() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> </div>
-<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> </div>
-<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keywordtype">void</span> ctor();</div>
-<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> GetEncDigitsNoSign() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keywordtype">unsigned</span> GetSign() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keywordtype">unsigned</span> GetSigDigits() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="keywordtype">unsigned</span> GetActualSigDigits() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> </div>
-<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> </div>
-<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span><span class="comment">// xbBcdStruc bcdOld;</span></div>
-<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> xbBcdStruct bcd;</div>
-<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span>};</div>
-<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> </div>
-<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span>} <span class="comment">/* namespace xb */</span></div>
-<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> </div>
-<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> </div>
-<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> </div>
-<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span><span class="preprocessor">#endif </span><span class="comment">/* XB_INDEX_SUPPORT */</span><span class="preprocessor"></span></div>
-<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_BCD_H__ */</span><span class="preprocessor"></span></div>
-<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
-<div class="ttc" id="anamespacexb_html_a25f47b226ce924a5c78f97989b0744a2"><div class="ttname"><a href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xb::xbDouble</a></div><div class="ttdeci">double xbDouble</div><div class="ttdef"><b>Definition:</b> xbtypes.h:23</div></div>
-</div><!-- fragment --></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbblkread_8h.html b/docs/doxygen/html/xbblkread_8h.html
deleted file mode 100644
index f79f691..0000000
--- a/docs/doxygen/html/xbblkread_8h.html
+++ /dev/null
@@ -1,89 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbblkread.h File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#namespaces">Namespaces</a> </div>
- <div class="headertitle"><div class="title">xbblkread.h File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-
-<p><a href="xbblkread_8h_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbblkread_8h_source.html b/docs/doxygen/html/xbblkread_8h_source.html
deleted file mode 100644
index 6da459b..0000000
--- a/docs/doxygen/html/xbblkread_8h_source.html
+++ /dev/null
@@ -1,145 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbblkread.h Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbblkread.h</div></div>
-</div><!--header-->
-<div class="contents">
-<a href="xbblkread_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbblkread.h</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022 Gary A Kunkel</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">*/</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#ifndef __XB_BLKREAD_H__</span></div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#define __XB_BLKREAD_H__</span></div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifdef XB_BLOCKREAD_SUPPORT</span></div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="keyword">class </span>XBDLLEXPORT xbBlockRead {</div>
-<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> </div>
-<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> xbBlockRead( <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> * d );</div>
-<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> ~xbBlockRead();</div>
-<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> </div>
-<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
-<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="keywordtype">void</span> DumpReadBlockInternals();</div>
-<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> </div>
-<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> xbInt16 Init( xbUInt32 ulBlkSize = 0 );</div>
-<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div>
-<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> xbUInt32 GetBlockFirstRecNo() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> xbUInt32 GetBlockRecCnt() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> xbUInt32 GetBlockSize() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> </div>
-<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> xbInt16 GetRecord( xbUInt32 ulRecNo ); <span class="comment">// retrieve a data record from a block to RecBuf</span></div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> xbInt16 SetBlockSize( xbUInt32 ulBlkSize );</div>
-<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> </div>
-<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div>
-<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> </div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> xbInt16 GetBlockForRecNo( xbUInt32 ulRecNo ); <span class="comment">// retrieve block from disk for a given record number</span></div>
-<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> </div>
-<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="keywordtype">char</span> *pBlock; <span class="comment">// block pointer</span></div>
-<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> xbUInt32 ulBlkSize; <span class="comment">// block size in bytes</span></div>
-<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> xbUInt32 ulFirstBlkRec; <span class="comment">// first recod number in the block</span></div>
-<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> xbUInt32 ulRecCnt; <span class="comment">// number of records in block</span></div>
-<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> xbUInt32 ulMaxRecs; <span class="comment">// max number of records block can handle</span></div>
-<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bEof; <span class="comment">// EOF flag</span></div>
-<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *dbf; <span class="comment">// reference to associated dbf file</span></div>
-<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span><span class="comment">// xbXBase *xbase; // reference to main xbXBase structure</span></div>
-<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> time_t tFmTime; <span class="comment">// file modify time at time of block read</span></div>
-<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> </div>
-<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span>};</div>
-<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> </div>
-<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span><span class="preprocessor">#endif </span><span class="comment">// XB_BLOCKREAD</span></div>
-<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span>} <span class="comment">/* namespace */</span></div>
-<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_BLOCKREAD_H__ */</span><span class="preprocessor"></span></div>
-<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
-<div class="ttc" id="anamespacexb_html_ab1a750481dd487f0d384aa1d200dff0f"><div class="ttname"><a href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xb::xbBool</a></div><div class="ttdeci">short int xbBool</div><div class="ttdef"><b>Definition:</b> xbtypes.h:24</div></div>
-<div class="ttc" id="anamespacexb_html_ab2eae4b4732466698a7fdd89d77ba53b"><div class="ttname"><a href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xb::xbDbf</a></div><div class="ttdeci">class XBDLLEXPORT xbDbf</div><div class="ttdef"><b>Definition:</b> xbtblmgr.h:28</div></div>
-</div><!-- fragment --></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbblockread_8cpp.html b/docs/doxygen/html/xbblockread_8cpp.html
deleted file mode 100644
index e75a40c..0000000
--- a/docs/doxygen/html/xbblockread_8cpp.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbblockread.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbblockread.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbcrix_8cpp.html b/docs/doxygen/html/xbcrix_8cpp.html
deleted file mode 100644
index a7fc095..0000000
--- a/docs/doxygen/html/xbcrix_8cpp.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/sql/xbcrix.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_25b94c3afce00ed38231227d8141f932.html">sql</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbcrix.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbcrtbl_8cpp.html b/docs/doxygen/html/xbcrtbl_8cpp.html
deleted file mode 100644
index 816b297..0000000
--- a/docs/doxygen/html/xbcrtbl_8cpp.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/sql/xbcrtbl.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_25b94c3afce00ed38231227d8141f932.html">sql</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbcrtbl.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbcrtbl_8save_8cpp.html b/docs/doxygen/html/xbcrtbl_8save_8cpp.html
deleted file mode 100644
index fce08f6..0000000
--- a/docs/doxygen/html/xbcrtbl_8save_8cpp.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/sql/xbcrtbl.save.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_25b94c3afce00ed38231227d8141f932.html">sql</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbcrtbl.save.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbdate_8cpp.html b/docs/doxygen/html/xbdate_8cpp.html
deleted file mode 100644
index 7db59c4..0000000
--- a/docs/doxygen/html/xbdate_8cpp.html
+++ /dev/null
@@ -1,89 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbdate.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#namespaces">Namespaces</a> </div>
- <div class="headertitle"><div class="title">xbdate.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-<code>#include &lt;time.h&gt;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbdate_8h.html b/docs/doxygen/html/xbdate_8h.html
deleted file mode 100644
index d910af4..0000000
--- a/docs/doxygen/html/xbdate_8h.html
+++ /dev/null
@@ -1,165 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbdate.h File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#nested-classes">Data Structures</a> &#124;
-<a href="#namespaces">Namespaces</a> &#124;
-<a href="#define-members">Macros</a> </div>
- <div class="headertitle"><div class="title">xbdate.h File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-
-<p><a href="xbdate_8h_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
-Data Structures</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html">xb::xbDate</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classxb_1_1xbDate.html" title="xbDate class.">xbDate</a> class. <a href="classxb_1_1xbDate.html#details">More...</a><br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a>
-Macros</h2></td></tr>
-<tr class="memitem:a8f22704d3fd93fa85dd93b6c699e8178"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdate_8h.html#a8f22704d3fd93fa85dd93b6c699e8178">XB_FMT_WEEK</a>&#160;&#160;&#160;1</td></tr>
-<tr class="separator:a8f22704d3fd93fa85dd93b6c699e8178"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aeacf2f7cc897ab5bd64781c0fb52b75d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdate_8h.html#aeacf2f7cc897ab5bd64781c0fb52b75d">XB_FMT_MONTH</a>&#160;&#160;&#160;2</td></tr>
-<tr class="separator:aeacf2f7cc897ab5bd64781c0fb52b75d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa29d78982a9e007874af1c4f4e4d1aa4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdate_8h.html#aa29d78982a9e007874af1c4f4e4d1aa4">XB_FMT_YEAR</a>&#160;&#160;&#160;3</td></tr>
-<tr class="separator:aa29d78982a9e007874af1c4f4e4d1aa4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a119f32fda399e2ebc2d734012a130e8f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdate_8h.html#a119f32fda399e2ebc2d734012a130e8f">JUL_OFFSET</a>&#160;&#160;&#160;1721425L</td></tr>
-<tr class="separator:a119f32fda399e2ebc2d734012a130e8f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Macro Definition Documentation</h2>
-<a id="a119f32fda399e2ebc2d734012a130e8f" name="a119f32fda399e2ebc2d734012a130e8f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a119f32fda399e2ebc2d734012a130e8f">&#9670;&nbsp;</a></span>JUL_OFFSET</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define JUL_OFFSET&#160;&#160;&#160;1721425L</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="aeacf2f7cc897ab5bd64781c0fb52b75d" name="aeacf2f7cc897ab5bd64781c0fb52b75d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aeacf2f7cc897ab5bd64781c0fb52b75d">&#9670;&nbsp;</a></span>XB_FMT_MONTH</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_FMT_MONTH&#160;&#160;&#160;2</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a8f22704d3fd93fa85dd93b6c699e8178" name="a8f22704d3fd93fa85dd93b6c699e8178"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a8f22704d3fd93fa85dd93b6c699e8178">&#9670;&nbsp;</a></span>XB_FMT_WEEK</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_FMT_WEEK&#160;&#160;&#160;1</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="aa29d78982a9e007874af1c4f4e4d1aa4" name="aa29d78982a9e007874af1c4f4e4d1aa4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aa29d78982a9e007874af1c4f4e4d1aa4">&#9670;&nbsp;</a></span>XB_FMT_YEAR</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_FMT_YEAR&#160;&#160;&#160;3</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbdate_8h_source.html b/docs/doxygen/html/xbdate_8h_source.html
deleted file mode 100644
index fbebea0..0000000
--- a/docs/doxygen/html/xbdate_8h_source.html
+++ /dev/null
@@ -1,181 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbdate.h Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbdate.h</div></div>
-</div><!--header-->
-<div class="contents">
-<a href="xbdate_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbdate.h</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022 Gary A Kunkel</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">*/</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#ifndef __XB_XBDATE_H__</span></div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#define __XB_XBDATE_H__</span></div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifdef CMAKE_COMPILER_IS_GNUCC</span></div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#pragma interface</span></div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"><a class="line" href="xbdate_8h.html#a8f22704d3fd93fa85dd93b6c699e8178"> 27</a></span><span class="preprocessor">#define XB_FMT_WEEK 1</span></div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"><a class="line" href="xbdate_8h.html#aeacf2f7cc897ab5bd64781c0fb52b75d"> 28</a></span><span class="preprocessor">#define XB_FMT_MONTH 2</span></div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="xbdate_8h.html#aa29d78982a9e007874af1c4f4e4d1aa4"> 29</a></span><span class="preprocessor">#define XB_FMT_YEAR 3</span></div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="comment">// next value is added to the date calculation to match dbase calculation</span></div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="comment">// first valid dbase date is 01/01/0001</span></div>
-<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"><a class="line" href="xbdate_8h.html#a119f32fda399e2ebc2d734012a130e8f"> 33</a></span><span class="preprocessor">#define JUL_OFFSET 1721425L</span></div>
-<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> </div>
-<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div>
-<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> </div>
-<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"><a class="line" href="classxb_1_1xbDate.html"> 62</a></span><span class="keyword">class </span>XBDLLEXPORT <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> : <span class="keyword">public</span> <a class="code hl_class" href="classxb_1_1xbSsv.html">xbSsv</a> {</div>
-<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> </div>
-<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a>();</div>
-<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a>( <span class="keyword">const</span> <span class="keywordtype">char</span> * Date8 );</div>
-<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a>( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Date8 );</div>
-<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a>( xbInt32 lJulDate );</div>
-<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <a class="code hl_class" href="classxb_1_1xbDate.html">~xbDate</a>();</div>
-<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> </div>
-<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;d );</div>
-<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="keywordtype">void</span> operator+=( xbInt32 i );</div>
-<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <span class="keywordtype">void</span> operator-=( xbInt32 i );</div>
-<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="keywordtype">void</span> operator++( xbInt32 i );</div>
-<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="keywordtype">void</span> operator--( xbInt32 i );</div>
-<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> </div>
-<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> xbInt32 operator-( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp; ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * operator-( xbInt32 i );</div>
-<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * operator+( xbInt32 i );</div>
-<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> </div>
-<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator==( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp; ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator!=( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp; ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator&lt; ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp; ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator&gt; ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp; ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator&lt;=( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp; ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator&gt;=( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp; ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> </div>
-<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> xbInt16 CalcRollingCenturyForYear( xbInt16 year ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> xbInt16 CenturyOf() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> xbInt16 CharDayOf( <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOutCharDay );</div>
-<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> xbInt16 CharMonthOf( <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOutCharMonth );</div>
-<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> DateIsValid ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sDate8 ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> xbInt16 DayOf( xbInt16 iFormat ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> xbInt16 CTOD( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sCtodInDate );</div>
-<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> xbInt16 FormatDate( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFmtIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFmtOut );</div>
-<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *Str() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsLeapYear( xbInt16 iYear ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsLeapYear() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> xbInt32 JulianDays() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> xbInt16 JulToDate8( xbInt32 lJulDate );</div>
-<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> xbInt16 LastDayOfMonth();</div>
-<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> xbInt16 MonthOf() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> xbInt16 Set( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Date8 );</div>
-<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> xbInt16 Sysdate();</div>
-<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> xbInt16 YearOf() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> </div>
-<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span><span class="preprocessor">#ifdef XB_DEBUG_SUPPORT</span></div>
-<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="keywordtype">void</span> Dump( <span class="keyword">const</span> <span class="keywordtype">char</span> * title );</div>
-<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <span class="keywordtype">void</span> DumpDateTables();</div>
-<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> </div>
-<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <span class="keywordtype">void</span> SetDateTables();</div>
-<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sDate8; <span class="comment">/* CCYYMMDD date format ie; 20140718 */</span></div>
-<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> </div>
-<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <span class="keyword">static</span> <span class="keywordtype">int</span> iAggregatedDaysInMonths[2][13];</div>
-<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="keyword">static</span> <span class="keywordtype">int</span> iDaysInMonths[2][13];</div>
-<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span>};</div>
-<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> </div>
-<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span>} <span class="comment">/* namespace */</span></div>
-<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span><span class="preprocessor">#endif </span><span class="comment">/*__XB_XBDATE_H__ */</span><span class="preprocessor"></span></div>
-<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> </div>
-<div class="ttc" id="aclassxb_1_1xbDate_html"><div class="ttname"><a href="classxb_1_1xbDate.html">xb::xbDate</a></div><div class="ttdoc">xbDate class.</div><div class="ttdef"><b>Definition:</b> xbdate.h:62</div></div>
-<div class="ttc" id="aclassxb_1_1xbSsv_html"><div class="ttname"><a href="classxb_1_1xbSsv.html">xb::xbSsv</a></div><div class="ttdoc">Class for handling shared system variables.</div><div class="ttdef"><b>Definition:</b> xbssv.h:59</div></div>
-<div class="ttc" id="aclassxb_1_1xbString_html"><div class="ttname"><a href="classxb_1_1xbString.html">xb::xbString</a></div><div class="ttdoc">Class for handling string data.</div><div class="ttdef"><b>Definition:</b> xbstring.h:50</div></div>
-<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
-<div class="ttc" id="anamespacexb_html_ab1a750481dd487f0d384aa1d200dff0f"><div class="ttname"><a href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xb::xbBool</a></div><div class="ttdeci">short int xbBool</div><div class="ttdef"><b>Definition:</b> xbtypes.h:24</div></div>
-</div><!-- fragment --></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbdbf3_8cpp.html b/docs/doxygen/html/xbdbf3_8cpp.html
deleted file mode 100644
index 84171c6..0000000
--- a/docs/doxygen/html/xbdbf3_8cpp.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbdbf3.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbdbf3.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbdbf4_8cpp.html b/docs/doxygen/html/xbdbf4_8cpp.html
deleted file mode 100644
index 7bf435f..0000000
--- a/docs/doxygen/html/xbdbf4_8cpp.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbdbf4.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbdbf4.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbdbf_8cpp.html b/docs/doxygen/html/xbdbf_8cpp.html
deleted file mode 100644
index 918936e..0000000
--- a/docs/doxygen/html/xbdbf_8cpp.html
+++ /dev/null
@@ -1,88 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbdbf.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#namespaces">Namespaces</a> </div>
- <div class="headertitle"><div class="title">xbdbf.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbdbf_8h.html b/docs/doxygen/html/xbdbf_8h.html
deleted file mode 100644
index 39b2a14..0000000
--- a/docs/doxygen/html/xbdbf_8h.html
+++ /dev/null
@@ -1,456 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbdbf.h File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#nested-classes">Data Structures</a> &#124;
-<a href="#namespaces">Namespaces</a> &#124;
-<a href="#define-members">Macros</a> </div>
- <div class="headertitle"><div class="title">xbdbf.h File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-
-<p><a href="xbdbf_8h_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
-Data Structures</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structxb_1_1xbSchema.html">xb::xbSchema</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Schema used for defining tables with CreateTable methods. <a href="structxb_1_1xbSchema.html#details">More...</a><br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html">xb::xbDbf</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Base class for handling dbf files/tables. <a href="classxb_1_1xbDbf.html#details">More...</a><br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a>
-Macros</h2></td></tr>
-<tr class="memitem:a20f739b9d9dc6a002a246a999e76aeaa"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#a20f739b9d9dc6a002a246a999e76aeaa">XB_CHAR_FLD</a>&#160;&#160;&#160;'C'</td></tr>
-<tr class="separator:a20f739b9d9dc6a002a246a999e76aeaa"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2f6d5073af761bc1a806a2c7b1c1d886"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#a2f6d5073af761bc1a806a2c7b1c1d886">XB_LOGICAL_FLD</a>&#160;&#160;&#160;'L'</td></tr>
-<tr class="separator:a2f6d5073af761bc1a806a2c7b1c1d886"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae9fb6d69cc5edc94d36ae403c22ec1c6"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#ae9fb6d69cc5edc94d36ae403c22ec1c6">XB_NUMERIC_FLD</a>&#160;&#160;&#160;'N'</td></tr>
-<tr class="separator:ae9fb6d69cc5edc94d36ae403c22ec1c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7f685e6f5fe804b2174725a27ce73adc"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#a7f685e6f5fe804b2174725a27ce73adc">XB_DATE_FLD</a>&#160;&#160;&#160;'D'</td></tr>
-<tr class="separator:a7f685e6f5fe804b2174725a27ce73adc"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a23fa19b19cb43bd6dcc59a5a3f6c30ad"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#a23fa19b19cb43bd6dcc59a5a3f6c30ad">XB_MEMO_FLD</a>&#160;&#160;&#160;'M'</td></tr>
-<tr class="separator:a23fa19b19cb43bd6dcc59a5a3f6c30ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a96ab4218d70ab603b4866354ce8c18cd"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#a96ab4218d70ab603b4866354ce8c18cd">XB_FLOAT_FLD</a>&#160;&#160;&#160;'F'</td></tr>
-<tr class="separator:a96ab4218d70ab603b4866354ce8c18cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a843ca4569326dbd1d0647899b0eb512f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#a843ca4569326dbd1d0647899b0eb512f">XB_CLOSED</a>&#160;&#160;&#160;0</td></tr>
-<tr class="separator:a843ca4569326dbd1d0647899b0eb512f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9a6dafbb07cac744eb14094efa739409"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#a9a6dafbb07cac744eb14094efa739409">XB_OPEN</a>&#160;&#160;&#160;1</td></tr>
-<tr class="separator:a9a6dafbb07cac744eb14094efa739409"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a26e7eeda69f32bc88b08a208ca9e7991"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#a26e7eeda69f32bc88b08a208ca9e7991">XB_UPDATED</a>&#160;&#160;&#160;2</td></tr>
-<tr class="separator:a26e7eeda69f32bc88b08a208ca9e7991"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a395a2e101a793bacabf6bc079d178e29"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#a395a2e101a793bacabf6bc079d178e29">XB_LOCK</a>&#160;&#160;&#160;0</td></tr>
-<tr class="separator:a395a2e101a793bacabf6bc079d178e29"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a21389b73e7b4e7e185fa635b9e354c2e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#a21389b73e7b4e7e185fa635b9e354c2e">XB_UNLOCK</a>&#160;&#160;&#160;1</td></tr>
-<tr class="separator:a21389b73e7b4e7e185fa635b9e354c2e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4c08d01bd69e295b001bd00a228d8106"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#a4c08d01bd69e295b001bd00a228d8106">LK_DBASE</a>&#160;&#160;&#160;1</td></tr>
-<tr class="separator:a4c08d01bd69e295b001bd00a228d8106"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a01d6d7910b0da2170eb904a97d864a41"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#a01d6d7910b0da2170eb904a97d864a41">LK_CLIPPER</a>&#160;&#160;&#160;2</td></tr>
-<tr class="separator:a01d6d7910b0da2170eb904a97d864a41"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a65e29186276222f460a7171803e07adf"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#a65e29186276222f460a7171803e07adf">LK_FOX</a>&#160;&#160;&#160;3</td></tr>
-<tr class="separator:a65e29186276222f460a7171803e07adf"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a42aea0ccd94f7422c8e0d7422dce85a4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#a42aea0ccd94f7422c8e0d7422dce85a4">LK_XBASE64</a>&#160;&#160;&#160;9</td></tr>
-<tr class="separator:a42aea0ccd94f7422c8e0d7422dce85a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a8bd17730da3ba5c55a6a07bc482dd0e4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#a8bd17730da3ba5c55a6a07bc482dd0e4">XB_ALL_RECS</a>&#160;&#160;&#160;0</td></tr>
-<tr class="separator:a8bd17730da3ba5c55a6a07bc482dd0e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1c44bb25bf2e23a3a9d3d2312df0b592"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#a1c44bb25bf2e23a3a9d3d2312df0b592">XB_ACTIVE_RECS</a>&#160;&#160;&#160;1</td></tr>
-<tr class="separator:a1c44bb25bf2e23a3a9d3d2312df0b592"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:acc0a441854ed92b9d65d1181a97cad43"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#acc0a441854ed92b9d65d1181a97cad43">XB_DELETED_RECS</a>&#160;&#160;&#160;2</td></tr>
-<tr class="separator:acc0a441854ed92b9d65d1181a97cad43"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6fe10b307878b4612b04c2c876a4a592"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#a6fe10b307878b4612b04c2c876a4a592">XB_OVERLAY</a>&#160;&#160;&#160;1</td></tr>
-<tr class="separator:a6fe10b307878b4612b04c2c876a4a592"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7b797840abdb3291373d15978103a778"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#a7b797840abdb3291373d15978103a778">XB_DONTOVERLAY</a>&#160;&#160;&#160;0</td></tr>
-<tr class="separator:a7b797840abdb3291373d15978103a778"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ada1115f596131888c04df61546b198c4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#ada1115f596131888c04df61546b198c4">XB_CHAREOF</a>&#160;&#160;&#160;'\x1A' /* end of DBF */</td></tr>
-<tr class="separator:ada1115f596131888c04df61546b198c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a35d56cac7959c1e5c761684ced3f1e17"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html#a35d56cac7959c1e5c761684ced3f1e17">XB_CHARHDR</a>&#160;&#160;&#160;'\x0D' /* header terminator */</td></tr>
-<tr class="separator:a35d56cac7959c1e5c761684ced3f1e17"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Macro Definition Documentation</h2>
-<a id="a01d6d7910b0da2170eb904a97d864a41" name="a01d6d7910b0da2170eb904a97d864a41"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a01d6d7910b0da2170eb904a97d864a41">&#9670;&nbsp;</a></span>LK_CLIPPER</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define LK_CLIPPER&#160;&#160;&#160;2</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a4c08d01bd69e295b001bd00a228d8106" name="a4c08d01bd69e295b001bd00a228d8106"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4c08d01bd69e295b001bd00a228d8106">&#9670;&nbsp;</a></span>LK_DBASE</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define LK_DBASE&#160;&#160;&#160;1</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a65e29186276222f460a7171803e07adf" name="a65e29186276222f460a7171803e07adf"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a65e29186276222f460a7171803e07adf">&#9670;&nbsp;</a></span>LK_FOX</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define LK_FOX&#160;&#160;&#160;3</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a42aea0ccd94f7422c8e0d7422dce85a4" name="a42aea0ccd94f7422c8e0d7422dce85a4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a42aea0ccd94f7422c8e0d7422dce85a4">&#9670;&nbsp;</a></span>LK_XBASE64</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define LK_XBASE64&#160;&#160;&#160;9</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a1c44bb25bf2e23a3a9d3d2312df0b592" name="a1c44bb25bf2e23a3a9d3d2312df0b592"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1c44bb25bf2e23a3a9d3d2312df0b592">&#9670;&nbsp;</a></span>XB_ACTIVE_RECS</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_ACTIVE_RECS&#160;&#160;&#160;1</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a8bd17730da3ba5c55a6a07bc482dd0e4" name="a8bd17730da3ba5c55a6a07bc482dd0e4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a8bd17730da3ba5c55a6a07bc482dd0e4">&#9670;&nbsp;</a></span>XB_ALL_RECS</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_ALL_RECS&#160;&#160;&#160;0</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a20f739b9d9dc6a002a246a999e76aeaa" name="a20f739b9d9dc6a002a246a999e76aeaa"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a20f739b9d9dc6a002a246a999e76aeaa">&#9670;&nbsp;</a></span>XB_CHAR_FLD</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_CHAR_FLD&#160;&#160;&#160;'C'</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ada1115f596131888c04df61546b198c4" name="ada1115f596131888c04df61546b198c4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ada1115f596131888c04df61546b198c4">&#9670;&nbsp;</a></span>XB_CHAREOF</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_CHAREOF&#160;&#160;&#160;'\x1A' /* end of DBF */</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a35d56cac7959c1e5c761684ced3f1e17" name="a35d56cac7959c1e5c761684ced3f1e17"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a35d56cac7959c1e5c761684ced3f1e17">&#9670;&nbsp;</a></span>XB_CHARHDR</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_CHARHDR&#160;&#160;&#160;'\x0D' /* header terminator */</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a843ca4569326dbd1d0647899b0eb512f" name="a843ca4569326dbd1d0647899b0eb512f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a843ca4569326dbd1d0647899b0eb512f">&#9670;&nbsp;</a></span>XB_CLOSED</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_CLOSED&#160;&#160;&#160;0</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a7f685e6f5fe804b2174725a27ce73adc" name="a7f685e6f5fe804b2174725a27ce73adc"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a7f685e6f5fe804b2174725a27ce73adc">&#9670;&nbsp;</a></span>XB_DATE_FLD</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_DATE_FLD&#160;&#160;&#160;'D'</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="acc0a441854ed92b9d65d1181a97cad43" name="acc0a441854ed92b9d65d1181a97cad43"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#acc0a441854ed92b9d65d1181a97cad43">&#9670;&nbsp;</a></span>XB_DELETED_RECS</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_DELETED_RECS&#160;&#160;&#160;2</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a7b797840abdb3291373d15978103a778" name="a7b797840abdb3291373d15978103a778"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a7b797840abdb3291373d15978103a778">&#9670;&nbsp;</a></span>XB_DONTOVERLAY</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_DONTOVERLAY&#160;&#160;&#160;0</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a96ab4218d70ab603b4866354ce8c18cd" name="a96ab4218d70ab603b4866354ce8c18cd"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a96ab4218d70ab603b4866354ce8c18cd">&#9670;&nbsp;</a></span>XB_FLOAT_FLD</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_FLOAT_FLD&#160;&#160;&#160;'F'</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a395a2e101a793bacabf6bc079d178e29" name="a395a2e101a793bacabf6bc079d178e29"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a395a2e101a793bacabf6bc079d178e29">&#9670;&nbsp;</a></span>XB_LOCK</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_LOCK&#160;&#160;&#160;0</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a2f6d5073af761bc1a806a2c7b1c1d886" name="a2f6d5073af761bc1a806a2c7b1c1d886"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a2f6d5073af761bc1a806a2c7b1c1d886">&#9670;&nbsp;</a></span>XB_LOGICAL_FLD</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_LOGICAL_FLD&#160;&#160;&#160;'L'</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a23fa19b19cb43bd6dcc59a5a3f6c30ad" name="a23fa19b19cb43bd6dcc59a5a3f6c30ad"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a23fa19b19cb43bd6dcc59a5a3f6c30ad">&#9670;&nbsp;</a></span>XB_MEMO_FLD</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_MEMO_FLD&#160;&#160;&#160;'M'</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ae9fb6d69cc5edc94d36ae403c22ec1c6" name="ae9fb6d69cc5edc94d36ae403c22ec1c6"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae9fb6d69cc5edc94d36ae403c22ec1c6">&#9670;&nbsp;</a></span>XB_NUMERIC_FLD</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_NUMERIC_FLD&#160;&#160;&#160;'N'</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a9a6dafbb07cac744eb14094efa739409" name="a9a6dafbb07cac744eb14094efa739409"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a9a6dafbb07cac744eb14094efa739409">&#9670;&nbsp;</a></span>XB_OPEN</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_OPEN&#160;&#160;&#160;1</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a6fe10b307878b4612b04c2c876a4a592" name="a6fe10b307878b4612b04c2c876a4a592"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6fe10b307878b4612b04c2c876a4a592">&#9670;&nbsp;</a></span>XB_OVERLAY</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_OVERLAY&#160;&#160;&#160;1</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a21389b73e7b4e7e185fa635b9e354c2e" name="a21389b73e7b4e7e185fa635b9e354c2e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a21389b73e7b4e7e185fa635b9e354c2e">&#9670;&nbsp;</a></span>XB_UNLOCK</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_UNLOCK&#160;&#160;&#160;1</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a26e7eeda69f32bc88b08a208ca9e7991" name="a26e7eeda69f32bc88b08a208ca9e7991"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a26e7eeda69f32bc88b08a208ca9e7991">&#9670;&nbsp;</a></span>XB_UPDATED</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_UPDATED&#160;&#160;&#160;2</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbdbf_8h_source.html b/docs/doxygen/html/xbdbf_8h_source.html
deleted file mode 100644
index c871653..0000000
--- a/docs/doxygen/html/xbdbf_8h_source.html
+++ /dev/null
@@ -1,604 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbdbf.h Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbdbf.h</div></div>
-</div><!--header-->
-<div class="contents">
-<a href="xbdbf_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbdbf.h</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">*/</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#ifndef __XB_XBDBF_H__</span></div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#define __XB_XBDBF_H__</span></div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="comment">//#ifdef CMAKE_COMPILER_IS_GNUCC</span></div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="comment">//#pragma interface</span></div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="comment">//#endif</span></div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="comment">/*****************************/</span></div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="comment">/* Field Types */</span></div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#a20f739b9d9dc6a002a246a999e76aeaa"> 29</a></span><span class="preprocessor">#define XB_CHAR_FLD &#39;C&#39;</span></div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#a2f6d5073af761bc1a806a2c7b1c1d886"> 30</a></span><span class="preprocessor">#define XB_LOGICAL_FLD &#39;L&#39;</span></div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#ae9fb6d69cc5edc94d36ae403c22ec1c6"> 31</a></span><span class="preprocessor">#define XB_NUMERIC_FLD &#39;N&#39;</span></div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#a7f685e6f5fe804b2174725a27ce73adc"> 32</a></span><span class="preprocessor">#define XB_DATE_FLD &#39;D&#39;</span></div>
-<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#a23fa19b19cb43bd6dcc59a5a3f6c30ad"> 33</a></span><span class="preprocessor">#define XB_MEMO_FLD &#39;M&#39;</span></div>
-<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#a96ab4218d70ab603b4866354ce8c18cd"> 34</a></span><span class="preprocessor">#define XB_FLOAT_FLD &#39;F&#39;</span></div>
-<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div>
-<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="comment">/*****************************/</span></div>
-<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="comment">/* File Status Codes */</span></div>
-<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div>
-<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#a843ca4569326dbd1d0647899b0eb512f"> 39</a></span><span class="preprocessor">#define XB_CLOSED 0</span></div>
-<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#a9a6dafbb07cac744eb14094efa739409"> 40</a></span><span class="preprocessor">#define XB_OPEN 1</span></div>
-<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#a26e7eeda69f32bc88b08a208ca9e7991"> 41</a></span><span class="preprocessor">#define XB_UPDATED 2</span></div>
-<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> </div>
-<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div>
-<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="comment">/*****************************/</span></div>
-<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="comment">/* File Access Modes */</span></div>
-<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="comment">// #define XB_SINGLE_USER 0 // file buffering on</span></div>
-<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="comment">// #define XB_MULTI_USER 1 // file buffering off</span></div>
-<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> </div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="comment">/*****************************/</span></div>
-<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="comment">/* File Lock Functions */</span></div>
-<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#a395a2e101a793bacabf6bc079d178e29"> 51</a></span><span class="preprocessor">#define XB_LOCK 0</span></div>
-<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#a21389b73e7b4e7e185fa635b9e354c2e"> 52</a></span><span class="preprocessor">#define XB_UNLOCK 1</span></div>
-<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> </div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#a4c08d01bd69e295b001bd00a228d8106"> 54</a></span><span class="preprocessor">#define LK_DBASE 1</span></div>
-<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#a01d6d7910b0da2170eb904a97d864a41"> 55</a></span><span class="preprocessor">#define LK_CLIPPER 2 </span><span class="comment">// future</span></div>
-<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#a65e29186276222f460a7171803e07adf"> 56</a></span><span class="preprocessor">#define LK_FOX 3 </span><span class="comment">// future</span></div>
-<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#a42aea0ccd94f7422c8e0d7422dce85a4"> 57</a></span><span class="preprocessor">#define LK_XBASE64 9 </span><span class="comment">// future</span></div>
-<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> </div>
-<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span><span class="comment">/*****************************/</span></div>
-<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span><span class="comment">/* Record retrieve options */</span></div>
-<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#a8bd17730da3ba5c55a6a07bc482dd0e4"> 61</a></span><span class="preprocessor">#define XB_ALL_RECS 0</span></div>
-<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#a1c44bb25bf2e23a3a9d3d2312df0b592"> 62</a></span><span class="preprocessor">#define XB_ACTIVE_RECS 1</span></div>
-<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#acc0a441854ed92b9d65d1181a97cad43"> 63</a></span><span class="preprocessor">#define XB_DELETED_RECS 2</span></div>
-<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> </div>
-<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> </div>
-<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span><span class="comment">/*****************************/</span></div>
-<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span><span class="comment">/* Other defines */</span></div>
-<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> </div>
-<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#a6fe10b307878b4612b04c2c876a4a592"> 69</a></span><span class="preprocessor">#define XB_OVERLAY 1</span></div>
-<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#a7b797840abdb3291373d15978103a778"> 70</a></span><span class="preprocessor">#define XB_DONTOVERLAY 0</span></div>
-<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#ada1115f596131888c04df61546b198c4"> 71</a></span><span class="preprocessor">#define XB_CHAREOF &#39;\x1A&#39; </span><span class="comment">/* end of DBF */</span><span class="preprocessor"></span></div>
-<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"><a class="line" href="xbdbf_8h.html#a35d56cac7959c1e5c761684ced3f1e17"> 72</a></span><span class="preprocessor">#define XB_CHARHDR &#39;\x0D&#39; </span><span class="comment">/* header terminator */</span><span class="preprocessor"></span></div>
-<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> </div>
-<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> </div>
-<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> </div>
-<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"><a class="line" href="structxb_1_1xbSchema.html"> 95</a></span><span class="keyword">struct </span>XBDLLEXPORT <a class="code hl_struct" href="structxb_1_1xbSchema.html">xbSchema</a> {</div>
-<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"><a class="line" href="structxb_1_1xbSchema.html#a514183856094123fd37df67885b4681e"> 96</a></span> <span class="keywordtype">char</span> cFieldName[11];</div>
-<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"><a class="line" href="structxb_1_1xbSchema.html#a1d612b2ed5dc0b0289c9e91b3cda3a25"> 97</a></span> <span class="keywordtype">char</span> <a class="code hl_variable" href="structxb_1_1xbSchema.html#a1d612b2ed5dc0b0289c9e91b3cda3a25">cType</a>;</div>
-<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"><a class="line" href="structxb_1_1xbSchema.html#a2da554af25ef628acf59bb52996056ac"> 98</a></span> xbInt16 <a class="code hl_variable" href="structxb_1_1xbSchema.html#a2da554af25ef628acf59bb52996056ac">iFieldLen</a>; <span class="comment">/* fields are stored as one byte on record*/</span></div>
-<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"><a class="line" href="structxb_1_1xbSchema.html#a55bab3bb69dee3508d168c93e182d4b9"> 99</a></span> xbInt16 <a class="code hl_variable" href="structxb_1_1xbSchema.html#a55bab3bb69dee3508d168c93e182d4b9">iNoOfDecs</a>;</div>
-<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span>};</div>
-<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> </div>
-<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span><span class="keyword">struct </span>XBDLLEXPORT xbSchemaRec {</div>
-<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="keywordtype">char</span> cFieldName[11]; <span class="comment">/* ASCIIZ field name */</span></div>
-<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="keywordtype">char</span> cType; <span class="comment">/* field type */</span></div>
-<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <span class="keywordtype">char</span> *pAddress; <span class="comment">/* pointer to field in record buffer 1 */</span></div>
-<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> cFieldLen; <span class="comment">/* fields are stored as one byte on record */</span></div>
-<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> cNoOfDecs;</div>
-<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <span class="keywordtype">char</span> *pAddress2; <span class="comment">/* pointer to field in record buffer 2 */</span></div>
-<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> xbInt16 iLongFieldLen; <span class="comment">/* to handle long field lengths */</span></div>
-<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> cIxFlag; <span class="comment">/* DBase IV Index field flag */</span></div>
-<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span>};</div>
-<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> </div>
-<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> </div>
-<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> </div>
-<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span><span class="preprocessor">#ifdef XB_INDEX_SUPPORT</span></div>
-<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span><span class="keyword">class </span>XBDLLEXPORT xbIx;</div>
-<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span><span class="comment">// structure for file list, each open DBF file can have one or more index files</span></div>
-<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span><span class="keyword">struct </span>XBDLLEXPORT xbIxList {</div>
-<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> xbIxList *next;</div>
-<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> xbIx *ix;</div>
-<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> xbString *sFmt;</div>
-<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span>};</div>
-<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span><span class="preprocessor">#endif </span><span class="comment">// XB_INDEX_SUPPORT</span></div>
-<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span><span class="comment"></span> </div>
-<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> </div>
-<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> </div>
-<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html"> 150</a></span><span class="keyword">class </span>XBDLLEXPORT <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> : <span class="keyword">public</span> <a class="code hl_class" href="classxb_1_1xbFile.html">xbFile</a> {</div>
-<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> </div>
-<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a>( <a class="code hl_class" href="classxb_1_1xbXBase.html">xbXBase</a> *x );</div>
-<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="keyword">virtual</span> <a class="code hl_class" href="classxb_1_1xbDbf.html">~xbDbf</a>();</div>
-<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> </div>
-<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="keyword">virtual</span> xbInt16 Abort();</div>
-<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> <span class="keyword">virtual</span> xbInt16 AppendRecord();</div>
-<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <span class="keyword">virtual</span> xbInt16 BlankRecord();</div>
-<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> <span class="keyword">virtual</span> xbInt16 Commit();</div>
-<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> <span class="keyword">virtual</span> xbInt16 Close();</div>
-<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> <span class="keyword">virtual</span> xbInt16 CopyDbfStructure( <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> *dNewTable, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTableAlias, xbInt16 iOverlay, xbInt16 iShareMode );</div>
-<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a73e41bfe679dd06ab16c436652df93f1"> 162</a></span> <span class="keyword">virtual</span> xbInt16 <a class="code hl_function" href="classxb_1_1xbDbf.html#a73e41bfe679dd06ab16c436652df93f1">CreateTable</a> ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sAlias, <a class="code hl_struct" href="structxb_1_1xbSchema.html">xbSchema</a> *pSchema, xbInt16 iOverlay, xbInt16 iShareMode ) = 0;</div>
-<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> <span class="keyword">virtual</span> xbInt16 DeleteTable ();</div>
-<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> <span class="keyword">virtual</span> xbInt16 DeleteAll ( xbInt16 iOption );</div>
-<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <span class="keyword">virtual</span> xbInt16 DeleteAllRecords ();</div>
-<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> <span class="keyword">virtual</span> xbInt16 DeleteRecord ();</div>
-<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> <span class="keyword">virtual</span> xbInt16 DumpHeader ( xbInt16 iOption ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <span class="keyword">virtual</span> xbInt16 DumpRecord ( xbUInt32 ulRecNo, xbInt16 iOutputDest = 0, xbInt16 iOutputFmt = 0 );</div>
-<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <span class="keyword">virtual</span> xbInt16 GetAutoCommit () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> <span class="keyword">virtual</span> xbInt16 GetAutoCommit ( xbInt16 iOption ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> <span class="keyword">virtual</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetBof ();</div>
-<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="keyword">virtual</span> xbUInt32 GetCurRecNo () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <span class="keyword">virtual</span> xbInt16 GetDbfStatus () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> <span class="keyword">virtual</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetEof ();</div>
-<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <span class="keyword">virtual</span> xbInt32 GetFieldCnt () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <span class="keyword">virtual</span> xbInt16 GetFirstRecord ();</div>
-<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> <span class="keyword">virtual</span> xbInt16 GetFirstRecord ( xbInt16 iOption );</div>
-<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#ad56be2756b7a9f8318d9ba5cf215dafb"> 178</a></span> <span class="keyword">virtual</span> xbUInt16 <a class="code hl_function" href="classxb_1_1xbDbf.html#ad56be2756b7a9f8318d9ba5cf215dafb">GetHeaderLen</a> () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> <span class="keyword">virtual</span> xbInt16 GetLastRecord ();</div>
-<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> <span class="keyword">virtual</span> xbInt16 GetLastRecord ( xbInt16 iOption );</div>
-<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> </div>
-<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> <span class="keyword">virtual</span> xbInt16 GetNextRecord ();</div>
-<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <span class="keyword">virtual</span> xbInt16 GetNextRecord ( xbInt16 iOption );</div>
-<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> <span class="keyword">virtual</span> xbInt16 GetNextRecord ( xbInt16 iOption, xbUInt32 ulStartRec );</div>
-<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <span class="keyword">virtual</span> xbInt16 GetPrevRecord ();</div>
-<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <span class="keyword">virtual</span> xbInt16 GetPrevRecord ( xbInt16 iOption );</div>
-<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <span class="keyword">virtual</span> xbInt16 GetRecord ( xbUInt32 ulRecNo );</div>
-<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> </div>
-<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> <span class="keyword">virtual</span> xbUInt32 GetRecordCount ();</div>
-<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> <span class="keyword">virtual</span> xbInt16 GetRecordCnt ( xbUInt32 &amp; ulRecCnt );</div>
-<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> </div>
-<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> <span class="keyword">virtual</span> <span class="keywordtype">char</span> * GetRecordBuf ( xbInt16 iOpt = 0 ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> <span class="keyword">virtual</span> xbUInt16 GetRecordLen () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> <span class="keyword">virtual</span> <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;GetTblAlias() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a49212a9eb17f7fa9f303e08d5fc50fc6"> 195</a></span> <span class="keyword">virtual</span> xbInt16 <a class="code hl_function" href="classxb_1_1xbDbf.html#a49212a9eb17f7fa9f303e08d5fc50fc6">GetVersion</a> () <span class="keyword">const</span> = 0; </div>
-<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> <span class="keyword">virtual</span> <a class="code hl_class" href="classxb_1_1xbXBase.html">xbXBase</a> *GetXbasePtr () <span class="keyword">const</span>; <span class="comment">// return xbase pointer</span></div>
-<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> </div>
-<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> </div>
-<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> <span class="keyword">virtual</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> MemoFieldsExist () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> </div>
-<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <span class="keyword">virtual</span> xbInt16 Open ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName );</div>
-<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> <span class="keyword">virtual</span> xbInt16 Open ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sAlias );</div>
-<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a4d018cbf44d8d8b2145c9acab02c8adf"> 203</a></span> <span class="keyword">virtual</span> xbInt16 <a class="code hl_function" href="classxb_1_1xbDbf.html#a4d018cbf44d8d8b2145c9acab02c8adf">Open</a> ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sAlias, xbInt16 iOpenMode, xbInt16 iShareMode ) = 0;</div>
-<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> <span class="keyword">virtual</span> xbInt16 Pack ();</div>
-<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> <span class="keyword">virtual</span> xbInt16 Pack ( xbUInt32 &amp;ulDeletedRecCnt );</div>
-<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> </div>
-<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> </div>
-<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> <span class="keyword">virtual</span> xbInt16 PutRecord (); <span class="comment">// Put record to current location</span></div>
-<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> <span class="keyword">virtual</span> xbInt16 PutRecord ( xbUInt32 ulRecNo );</div>
-<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> <span class="keyword">virtual</span> xbInt16 ReadHeader ( xbInt16 iFilePositionOption, xbInt16 iReadOption );</div>
-<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> <span class="keyword">virtual</span> xbInt16 RecordDeleted ( xbInt16 iOpt = 0 ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#aeeeb2eb5fabcd0f91d457df07b0e0708"> 212</a></span> <span class="keyword">virtual</span> xbInt16 <a class="code hl_function" href="classxb_1_1xbDbf.html#aeeeb2eb5fabcd0f91d457df07b0e0708">Rename</a> ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sNewName ) = 0;</div>
-<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> </div>
-<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> <span class="keyword">virtual</span> xbInt16 SetAutoCommit ( xbInt16 iAutoCommit );</div>
-<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> </div>
-<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> <span class="keyword">virtual</span> xbInt16 UndeleteAllRecords();</div>
-<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> <span class="keyword">virtual</span> xbInt16 UndeleteRecord ();</div>
-<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> <span class="keyword">virtual</span> xbInt16 Zap ();</div>
-<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> </div>
-<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> </div>
-<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> <span class="comment">/* field methods */</span></div>
-<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> <span class="comment">//virtual xbInt16 GetRawField( xbInt16 iFieldNo, char *Buf, xbUInt32 BufSize, xbInt16 iRecBufSw ) const;</span></div>
-<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> <span class="keyword">virtual</span> xbInt16 GetField(xbInt16 iFieldNo, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldValue, xbInt16 iRecBufSw ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> <span class="keyword">virtual</span> xbInt16 GetField(xbInt16 iFieldNo, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldValue) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <span class="keyword">virtual</span> xbInt16 GetField(<span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldValue) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> <span class="keyword">virtual</span> xbInt16 GetFieldDecimal( xbInt16 iFieldNo, xbInt16 &amp;iFieldDecimal ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> <span class="keyword">virtual</span> xbInt16 GetFieldDecimal( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, xbInt16 &amp;iFieldDecimal ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> <span class="keyword">virtual</span> xbInt16 GetFieldLen( xbInt16 iFieldNo, xbInt16 &amp;iFieldLen ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> <span class="keyword">virtual</span> xbInt16 GetFieldLen( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, xbInt16 &amp;iFieldLen ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> <span class="keyword">virtual</span> xbInt16 GetFieldName( xbInt16 iFieldNo, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> </div>
-<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> <span class="keyword">virtual</span> xbInt16 GetFieldNo( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, xbInt16 &amp;iFieldNo ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> <span class="keyword">virtual</span> xbInt16 GetFieldNo( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> </div>
-<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> <span class="keyword">virtual</span> xbInt16 GetFieldType( xbInt16 iFieldNo, <span class="keywordtype">char</span> &amp;cFieldType ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> <span class="keyword">virtual</span> xbInt16 GetFieldType( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <span class="keywordtype">char</span> &amp;cFieldType ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> <span class="keyword">virtual</span> xbInt16 PutField( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldData );</div>
-<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> <span class="keyword">virtual</span> xbInt16 PutField( xbInt16 iFieldNo, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldData );</div>
-<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> </div>
-<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> <span class="keyword">virtual</span> xbInt16 PutLogicalField( xbInt16 iFieldNo, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldData );</div>
-<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> <span class="keyword">virtual</span> xbInt16 PutLogicalField( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldData );</div>
-<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> <span class="keyword">virtual</span> xbInt16 GetLogicalField( xbInt16 iFieldNo, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldData ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> <span class="keyword">virtual</span> xbInt16 GetLogicalField( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldData) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> </div>
-<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> <span class="keyword">virtual</span> xbInt16 PutLogicalField( xbInt16 iFieldNo, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bFieldData );</div>
-<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> <span class="keyword">virtual</span> xbInt16 PutLogicalField( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bFieldData );</div>
-<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> <span class="keyword">virtual</span> xbInt16 GetLogicalField( xbInt16 iFieldNo, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bFieldData ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> <span class="keyword">virtual</span> xbInt16 GetLogicalField( xbInt16 iFieldNo, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bFieldData, xbInt16 iRecBufSw ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> <span class="keyword">virtual</span> xbInt16 GetLogicalField( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bFieldData) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> </div>
-<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> <span class="keyword">virtual</span> xbInt16 GetLongField( xbInt16 iFieldNo, xbInt32 &amp;lFieldValue ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> <span class="keyword">virtual</span> xbInt16 GetLongField( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, xbInt32 &amp;lFieldValue ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> <span class="keyword">virtual</span> xbInt16 PutLongField( xbInt16 iFieldNo, xbInt32 lFieldValue );</div>
-<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> <span class="keyword">virtual</span> xbInt16 PutLongField( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldNo, xbInt32 lFieldValue );</div>
-<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> </div>
-<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> <span class="keyword">virtual</span> xbInt16 GetULongField( xbInt16 iFieldNo, xbUInt32 &amp;lFieldValue ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> <span class="keyword">virtual</span> xbInt16 GetULongField( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, xbUInt32 &amp;lFieldValue ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> <span class="keyword">virtual</span> xbInt16 PutULongField( xbInt16 iFieldNo, xbUInt32 lFieldValue );</div>
-<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> <span class="keyword">virtual</span> xbInt16 PutULongField( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldNo, xbUInt32 lFieldValue );</div>
-<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> </div>
-<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> <span class="keyword">virtual</span> xbInt16 GetDoubleField( xbInt16 FieldNo, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dFieldValue ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> <span class="keyword">virtual</span> xbInt16 GetDoubleField( xbInt16 FieldNo, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dFieldValue, xbInt16 iRecBufSw ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> <span class="keyword">virtual</span> xbInt16 GetDoubleField( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dFieldValue ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> <span class="keyword">virtual</span> xbInt16 PutDoubleField( xbInt16 FieldNo, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dFieldValue );</div>
-<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> <span class="keyword">virtual</span> xbInt16 PutDoubleField( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;FieldName, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dFieldValue );</div>
-<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> </div>
-<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> <span class="keyword">virtual</span> xbInt16 GetFloatField( xbInt16 iFieldNo, <a class="code hl_typedef" href="namespacexb.html#a83aa6a550398db55973aa9fb4257e66e">xbFloat</a> &amp;fFieldValue ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> <span class="keyword">virtual</span> xbInt16 GetFloatField( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <a class="code hl_typedef" href="namespacexb.html#a83aa6a550398db55973aa9fb4257e66e">xbFloat</a> &amp;fFieldValue ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> <span class="keyword">virtual</span> xbInt16 PutFloatField( xbInt16 iFieldNo, <a class="code hl_typedef" href="namespacexb.html#a83aa6a550398db55973aa9fb4257e66e">xbFloat</a> fFieldValue );</div>
-<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> <span class="keyword">virtual</span> xbInt16 PutFloatField( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <a class="code hl_typedef" href="namespacexb.html#a83aa6a550398db55973aa9fb4257e66e">xbFloat</a> fFieldValue );</div>
-<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> </div>
-<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> <span class="keyword">virtual</span> xbInt16 GetDateField( xbInt16 iFieldNo, <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dt ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> <span class="keyword">virtual</span> xbInt16 GetDateField( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dt ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> <span class="keyword">virtual</span> xbInt16 PutDateField( xbInt16 iFieldNo, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dt );</div>
-<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> <span class="keyword">virtual</span> xbInt16 PutDateField( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dt );</div>
-<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> </div>
-<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> </div>
-<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> </div>
-<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span><span class="preprocessor"> #ifdef XB_MEMO_SUPPORT</span></div>
-<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> <span class="keyword">virtual</span> xbInt16 GetMemoFieldCnt () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> <span class="keyword">virtual</span> xbMemo *GetMemoPtr ();</div>
-<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> <span class="keyword">virtual</span> xbUInt32 GetCreateMemoBlockSize() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> <span class="keyword">virtual</span> xbInt16 GetMemoField ( xbInt16 iFldNo, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sMemoData );</div>
-<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> <span class="keyword">virtual</span> xbInt16 GetMemoField ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp; sFldName, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sMemoData );</div>
-<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> <span class="keyword">virtual</span> xbInt16 GetMemoFieldLen ( xbInt16 iFldNo, xbUInt32 &amp;ullMemoFieldLen );</div>
-<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> <span class="keyword">virtual</span> xbInt16 GetMemoFieldLen ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp; sFldName, xbUInt32 &amp;ulMemoFieldLen );</div>
-<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> <span class="keyword">virtual</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> MemoFieldExists ( xbInt16 iFieldNo ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> <span class="keyword">virtual</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> MemoFieldExists ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> <span class="keyword">virtual</span> xbInt16 SetCreateMemoBlockSize( xbUInt32 ulBlockSize ) = 0;</div>
-<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> <span class="keyword">virtual</span> xbInt16 UpdateMemoField ( xbInt16 iFldNo, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sMemoData );</div>
-<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> <span class="keyword">virtual</span> xbInt16 UpdateMemoField ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp; sFldName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sMemoData );</div>
-<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span><span class="preprocessor"> #endif </span><span class="comment">// XB_MEMO_SUPPORT</span></div>
-<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> </div>
-<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> </div>
-<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span><span class="preprocessor"> #ifdef XB_LOCKING_SUPPORT</span></div>
-<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> <span class="keyword">virtual</span> xbInt16 LockTable ( xbInt16 iLockFunction );</div>
-<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> <span class="keyword">virtual</span> xbInt16 LockRecord ( xbInt16 iLockFunction, xbUInt32 ulRecNo );</div>
-<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> <span class="keyword">virtual</span> xbInt16 LockAppend ( xbInt16 iLockFunction );</div>
-<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> <span class="keyword">virtual</span> xbInt16 LockHeader ( xbInt16 iLockFunction );</div>
-<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> </div>
-<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span><span class="preprocessor"> #ifdef XB_MEMO_SUPPORT</span></div>
-<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span> <span class="keyword">virtual</span> xbInt16 LockMemo ( xbInt16 iLockFunction );</div>
-<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> <span class="keyword">virtual</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetMemoLocked () <span class="keyword">const</span>; </div>
-<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span><span class="preprocessor"> #endif </span><span class="comment">// XB_MEMO_LOCK</span></div>
-<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> </div>
-<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span><span class="preprocessor"> #ifdef XB_INDEX_SUPPORT</span></div>
-<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> <span class="keyword">virtual</span> xbInt16 LockIndices ( xbInt16 iLockFunction );</div>
-<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INDEX_SUPPORT</span></div>
-<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> </div>
-<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> xbInt16 GetAutoLock () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> <span class="keywordtype">void</span> SetAutoLock ( xbInt16 iAutoLock );</div>
-<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> xbInt16 GetLockFlavor () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> <span class="keywordtype">void</span> SetLockFlavor ( xbInt16 iLockFlavor );</div>
-<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetTableLocked () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetHeaderLocked () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> xbUInt32 GetAppendLocked () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> xbLinkListNode&lt;xbUInt32&gt; * GetFirstRecLock () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> </div>
-<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
-<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> <span class="keywordtype">void</span> DumpTableLockStatus() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span><span class="preprocessor"> #endif </span><span class="comment">// XB_DEBUG_SUPPORT</span></div>
-<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span><span class="preprocessor"> #endif </span><span class="comment">// XB_LOCKING_SUPPORT</span></div>
-<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> </div>
-<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> </div>
-<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span><span class="preprocessor"> #ifdef XB_INDEX_SUPPORT</span></div>
-<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span> <span class="keyword">virtual</span> xbInt16 CheckTagIntegrity( xbInt16 iTagOpt, xbInt16 iOutputOpt );</div>
-<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> <span class="keyword">virtual</span> xbInt16 CloseIndexFile( xbIx *pIx );</div>
-<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> <span class="keyword">virtual</span> xbInt16 CreateTag( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIxType, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sKey, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFilter, </div>
-<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span> xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverLay, xbIx **xbIxOut, <span class="keywordtype">void</span> **vpTagOut );</div>
-<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span> <span class="keyword">virtual</span> xbInt16 DeleteTag( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIxType, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sName );</div>
-<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> <span class="keyword">virtual</span> xbInt16 DeleteAllIndexFiles();</div>
-<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span> <span class="keyword">virtual</span> xbInt16 Find( <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sKey );</div>
-<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> <span class="keyword">virtual</span> xbInt16 Find( <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dtKey );</div>
-<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span> <span class="keyword">virtual</span> xbInt16 Find( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dKey );</div>
-<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span> <span class="keyword">virtual</span> xbIx *GetCurIx() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> *GetCurTag() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> </div>
-<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> <span class="keyword">virtual</span> xbInt16 GetFirstKey();</div>
-<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> <span class="keyword">virtual</span> xbInt16 GetNextKey();</div>
-<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> <span class="keyword">virtual</span> xbInt16 GetPrevKey();</div>
-<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span> <span class="keyword">virtual</span> xbInt16 GetLastKey();</div>
-<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span> </div>
-<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> <span class="keyword">virtual</span> <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;GetCurIxType() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> <span class="keyword">virtual</span> <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;GetCurTagName() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> <span class="keyword">virtual</span> xbIxList *GetIxList() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> <span class="keyword">virtual</span> xbInt32 GetPhysicalIxCnt () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> xbLinkListNode&lt;xbTag *&gt; *GetTagList () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> </div>
-<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span> <span class="keyword">virtual</span> xbInt16 OpenIndex( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIxType, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIndexName );</div>
-<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span> <span class="keyword">virtual</span> xbInt16 Reindex( xbInt16 iTagOpt );</div>
-<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> <span class="keyword">virtual</span> xbInt16 SetCurTag( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTagName );</div>
-<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> SetCurTag( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIxType, xbIx *pIx, <span class="keywordtype">void</span> *vpTag );</div>
-<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> </div>
-<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INDEX_SUPPORT</span></div>
-<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> </div>
-<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span><span class="preprocessor"> #ifdef XB_INF_SUPPORT</span></div>
-<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span> <span class="keyword">virtual</span> xbInt16 AssociateIndex( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sType, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sName, xbInt16 iOption );</div>
-<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span> xbLinkListNode&lt;xbString&gt; *GetInfList() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INF_SUPPORT</span></div>
-<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span> </div>
-<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> <span class="comment">//#ifdef XB_MDX_SUPPORT</span></div>
-<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span> <span class="comment">//virtual xbInt16 GetCreateMdxBlockSize() const;</span></div>
-<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> <span class="comment">//virtual xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );</span></div>
-<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span> <span class="comment">//#endif</span></div>
-<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span> </div>
-<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span><span class="preprocessor"> #ifdef XB_BLOCKREAD_SUPPORT</span></div>
-<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> xbInt16 DisableBlockReadProcessing();</div>
-<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span> xbInt16 EnableBlockReadProcessing();</div>
-<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetBlockReadStatus() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span><span class="preprocessor"> #endif </span><span class="comment">// XB_BLOCKREAD_SUPPORT</span></div>
-<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span> </div>
-<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span> <span class="keyword">protected</span>:</div>
-<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span><span class="preprocessor"> #ifdef XB_INDEX_SUPPORT</span></div>
-<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"> 374</span> <span class="keyword">friend</span> <span class="keyword">class </span>xbIx;</div>
-<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span> <span class="keyword">friend</span> <span class="keyword">class </span>xbIxMdx;</div>
-<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span> </div>
-<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span> xbInt16 AddIndex( xbIx *ix, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFmt );</div>
-<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span> <span class="keywordtype">void</span> ClearTagList();</div>
-<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span> xbInt16 RemoveIndex( xbIx * ix );</div>
-<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span> <span class="keywordtype">void</span> UpdateSchemaIxFlag( xbInt16 iFldNo, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> cVal );</div>
-<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span> <span class="keyword">virtual</span> xbInt16 UpdateTagList ();</div>
-<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INDEX_SUPPORT</span></div>
-<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span> </div>
-<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span><span class="preprocessor"> #ifdef XB_INF_SUPPORT</span></div>
-<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"> 385</span> <span class="keyword">virtual</span> xbInt16 GetInfFileName( <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sNdxIdxFileName );</div>
-<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INF_SUPPORT</span></div>
-<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span> </div>
-<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span><span class="preprocessor"> #ifdef XB_BLOCKREAD_SUPPORT</span></div>
-<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span> <span class="keyword">friend</span> <span class="keyword">class </span>xbBlockRead;</div>
-<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span><span class="preprocessor"> #endif </span><span class="comment">// XB_BLOCKREAD_SUPPORT</span></div>
-<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span> </div>
-<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"> 392</span> </div>
-<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span><span class="preprocessor"> #ifdef XB_LOCKING_SUPPORT</span></div>
-<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span> <span class="keywordtype">void</span> SetHeaderLocked ( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bTableLocked );</div>
-<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span> <span class="keywordtype">void</span> SetTableLocked ( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bTableLocked );</div>
-<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span><span class="preprocessor"> #endif </span><span class="comment">// XB_LOCKING_SUPORT</span></div>
-<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span> </div>
-<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span><span class="preprocessor"> #ifdef XB_MEMO_SUPPORT</span></div>
-<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span> xbInt16 iMemoFieldCnt; <span class="comment">// Memo field cnt in the table</span></div>
-<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span> xbMemo *Memo; <span class="comment">// Pointer to memo class</span></div>
-<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span> xbUInt32 ulCreateMemoBlockSize; <span class="comment">// blocksize to use when creating dbt file</span></div>
-<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"> 403</span> </div>
-<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span><span class="preprocessor"> #ifdef XB_INF_SUPPORT</span></div>
-<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</span> <span class="keyword">virtual</span> xbInt16 DeleteInfData();</div>
-<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"> 406</span> <span class="keyword">virtual</span> xbInt16 LoadInfData();</div>
-<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"> 407</span> <span class="keyword">virtual</span> xbInt16 SaveInfData();</div>
-<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"> 408</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INF_SUPPORT</span></div>
-<div class="line"><a id="l00409" name="l00409"></a><span class="lineno"> 409</span> </div>
-<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span><span class="comment">/*</span></div>
-<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span><span class="comment"> #ifdef XB_MDX_SUPPORT</span></div>
-<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"> 412</span><span class="comment"> xbInt16 iCreateMdxBlockSize;</span></div>
-<div class="line"><a id="l00413" name="l00413"></a><span class="lineno"> 413</span><span class="comment"> #endif // XB_MDX_SUPPORT</span></div>
-<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span><span class="comment">*/</span></div>
-<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"> 415</span> </div>
-<div class="line"><a id="l00416" name="l00416"></a><span class="lineno"> 416</span> <span class="keyword">virtual</span> xbInt16 GetRawField( xbInt16 iFieldNo, <span class="keywordtype">char</span> *Buf, xbUInt32 BufSize, xbInt16 iRecBufSw ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a7e63e852418f337eb7c44de5dcd50323"> 417</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> InitVars(); </div>
-<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#aba5dcac3b4092261bc1669740cdd669d"> 418</a></span> <span class="keyword">virtual</span> xbInt16 SetVersion() = 0;</div>
-<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> <span class="keyword">virtual</span> xbInt16 ValidateSchema( <a class="code hl_struct" href="structxb_1_1xbSchema.html">xbSchema</a> * s ) = 0;</div>
-<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span> xbInt16 WriteHeader( xbInt16 iPositionOption, xbInt16 iWriteOption );</div>
-<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span> </div>
-<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#afcd99924606be0a9e1e25180bcd1abf8"> 422</a></span> </div>
-<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#ab506450954bc86e7bf1d7c4efe681f43"> 423</a></span> xbUInt32 ulCurRec; <span class="comment">// Current record or zero</span></div>
-<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span> xbInt16 iAutoCommit; <span class="comment">// Auto commit updates if not explicitly performed before moving off record?</span></div>
-<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span> <span class="comment">// -1 --&gt; Use DBMS default</span></div>
-<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"> 426</span> <span class="comment">// 0 --&gt; No auto update on this table, regardless of DBMS setting</span></div>
-<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"> 427</span> <span class="comment">// 1 --&gt; Auto update on this table, regardless of DBMS setting</span></div>
-<div class="line"><a id="l00428" name="l00428"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a15f495446f0d75bcf2fa89e3b699d388"> 428</a></span> </div>
-<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span> xbInt16 iFileVersion; <span class="comment">// xBase file version - which class is in play</span></div>
-<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"> 430</span> </div>
-<div class="line"><a id="l00431" name="l00431"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a73f9c792d0a769e2e604c1855245a276"> 431</a></span> </div>
-<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a5056757614c39f725cc775332494966a"> 432</a></span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sAlias; <span class="comment">// table alias</span></div>
-<div class="line"><a id="l00433" name="l00433"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a6d8e193da3ca414eef1e8866ec5ca81b"> 433</a></span> xbInt16 iNoOfFields;</div>
-<div class="line"><a id="l00434" name="l00434"></a><span class="lineno"> 434</span> xbInt16 iDbfStatus; <span class="comment">// 0 = closed</span></div>
-<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"> 435</span> <span class="comment">// 1 = open</span></div>
-<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"> 436</span> <span class="comment">// 2 = updates pending</span></div>
-<div class="line"><a id="l00437" name="l00437"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#ad8c8b5eb12063bb898da1b2cc02cfce7"> 437</a></span> </div>
-<div class="line"><a id="l00438" name="l00438"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a8a9b3bce0b741e73473d3ebbd6e6f1cd"> 438</a></span> xbSchemaRec *SchemaPtr; <span class="comment">// Pointer to field data</span></div>
-<div class="line"><a id="l00439" name="l00439"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a353ebfc8a2960ef827f429ec74025606"> 439</a></span> <span class="keywordtype">char</span> *RecBuf; <span class="comment">// Pointer to record buffer</span></div>
-<div class="line"><a id="l00440" name="l00440"></a><span class="lineno"> 440</span> <span class="keywordtype">char</span> *RecBuf2; <span class="comment">// Pointer to original rec buf allocation</span></div>
-<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"> 441</span> </div>
-<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"> 442</span> </div>
-<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a3a262abf658e5fa968b57ef457a69470"> 443</a></span><span class="comment">/* Next several variables are database header fields, up through dbase V */</span></div>
-<div class="line"><a id="l00444" name="l00444"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a4fcd6a86ddd32d4a9d76a4074573440a"> 444</a></span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> cVersion;</div>
-<div class="line"><a id="l00445" name="l00445"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a9340a5e8ee53eb0f3b6601eec2d71e1b"> 445</a></span> <span class="keywordtype">char</span> cUpdateYY;</div>
-<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a6021789d314cd41488991e708fcd0df2"> 446</a></span> <span class="keywordtype">char</span> cUpdateMM;</div>
-<div class="line"><a id="l00447" name="l00447"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#acb594ab61dd35b17bdf28394083f8e87"> 447</a></span> <span class="keywordtype">char</span> cUpdateDD;</div>
-<div class="line"><a id="l00448" name="l00448"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a62f5fa9149ae0f6dc75642823de66918"> 448</a></span> xbUInt32 ulNoOfRecs;</div>
-<div class="line"><a id="l00449" name="l00449"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a1760e222567e2c849f9c799b9d896e91"> 449</a></span> xbUInt16 uiHeaderLen;</div>
-<div class="line"><a id="l00450" name="l00450"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#ac3c89fc3bc6a6abf385478a8adbed970"> 450</a></span> xbUInt16 uiRecordLen;</div>
-<div class="line"><a id="l00451" name="l00451"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a8734e799707582f022fc341d515650f4"> 451</a></span> <span class="keywordtype">char</span> cTransactionFlag;</div>
-<div class="line"><a id="l00452" name="l00452"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#ad59074633641e03647e54d2b66c9102b"> 452</a></span> <span class="keywordtype">char</span> cEncryptionFlag;</div>
-<div class="line"><a id="l00453" name="l00453"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#aea1dfe5cbd1f9cdbcfc8eb04b2c3d5f1"> 453</a></span> <span class="keywordtype">char</span> cIndexFlag;</div>
-<div class="line"><a id="l00454" name="l00454"></a><span class="lineno"> 454</span> <span class="keywordtype">char</span> cLangDriver; <span class="comment">// dbase 7 sets to 1B</span></div>
-<div class="line"><a id="l00455" name="l00455"></a><span class="lineno"> 455</span> </div>
-<div class="line"><a id="l00456" name="l00456"></a><span class="lineno"> 456</span> </div>
-<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"> 457</span> </div>
-<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"> 458</span> <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"> 459</span> <span class="keywordtype">void</span> ResetNoOfRecords(); </div>
-<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"> 460</span> </div>
-<div class="line"><a id="l00461" name="l00461"></a><span class="lineno"> 461</span> </div>
-<div class="line"><a id="l00462" name="l00462"></a><span class="lineno"> 462</span><span class="preprocessor"> #ifdef XB_LOCKING_SUPPORT</span></div>
-<div class="line"><a id="l00463" name="l00463"></a><span class="lineno"> 463</span> xbInt16 iAutoLock; <span class="comment">// 0 - autolock off, 1 - autolock on</span></div>
-<div class="line"><a id="l00464" name="l00464"></a><span class="lineno"> 464</span> xbInt16 iLockFlavor;</div>
-<div class="line"><a id="l00465" name="l00465"></a><span class="lineno"> 465</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bTableLocked; <span class="comment">// is the table locked</span></div>
-<div class="line"><a id="l00466" name="l00466"></a><span class="lineno"> 466</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bHeaderLocked; <span class="comment">// is the header locked</span></div>
-<div class="line"><a id="l00467" name="l00467"></a><span class="lineno"> 467</span> xbUInt32 ulAppendLocked; <span class="comment">// record number of the new record for the append lock operation</span></div>
-<div class="line"><a id="l00468" name="l00468"></a><span class="lineno"> 468</span> xbLinkListOrd&lt;xbUInt32&gt; lloRecLocks; <span class="comment">// ordered link list of locked records</span></div>
-<div class="line"><a id="l00469" name="l00469"></a><span class="lineno"> 469</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00470" name="l00470"></a><span class="lineno"> 470</span> </div>
-<div class="line"><a id="l00471" name="l00471"></a><span class="lineno"> 471</span><span class="preprocessor"> #ifdef XB_INDEX_SUPPORT</span></div>
-<div class="line"><a id="l00472" name="l00472"></a><span class="lineno"> 472</span> xbIxList *ixList; <span class="comment">// pointer to a list of indices associated with the table</span></div>
-<div class="line"><a id="l00473" name="l00473"></a><span class="lineno"> 473</span> xbIx *pCurIx; <span class="comment">// Pointer to current index class</span></div>
-<div class="line"><a id="l00474" name="l00474"></a><span class="lineno"> 474</span> <span class="keywordtype">void</span> *vpCurIxTag; <span class="comment">// Pointer to current tag</span></div>
-<div class="line"><a id="l00475" name="l00475"></a><span class="lineno"> 475</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sCurIxType; <span class="comment">// Current index type</span></div>
-<div class="line"><a id="l00476" name="l00476"></a><span class="lineno"> 476</span> xbLinkList&lt;xbTag *&gt; llTags; <span class="comment">// linked list of open tags</span></div>
-<div class="line"><a id="l00477" name="l00477"></a><span class="lineno"> 477</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INDEX_SUPPORT</span></div>
-<div class="line"><a id="l00478" name="l00478"></a><span class="lineno"> 478</span> </div>
-<div class="line"><a id="l00479" name="l00479"></a><span class="lineno"> 479</span><span class="preprocessor"> #ifdef XB_INF_SUPPORT</span></div>
-<div class="line"><a id="l00480" name="l00480"></a><span class="lineno"> 480</span> xbLinkList&lt;xbString&gt; llInfData; <span class="comment">// linked list of strings containing ndx file entries</span></div>
-<div class="line"><a id="l00481" name="l00481"></a><span class="lineno"> 481</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INF_SUPPORT</span></div>
-<div class="line"><a id="l00482" name="l00482"></a><span class="lineno"> 482</span> </div>
-<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"> 483</span><span class="preprocessor"> #ifdef XB_BLOCKREAD_SUPPORT</span></div>
-<div class="line"><a id="l00484" name="l00484"></a><span class="lineno"> 484</span> xbBlockRead *pRb;</div>
-<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"> 485</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bBlockReadEnabled; <span class="comment">// if true, then block read mode is on</span></div>
-<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00487" name="l00487"></a><span class="lineno"> 487</span> </div>
-<div class="line"><a id="l00488" name="l00488"></a><span class="lineno"> 488</span> </div>
-<div class="line"><a id="l00489" name="l00489"></a><span class="lineno"> 489</span> </div>
-<div class="line"><a id="l00490" name="l00490"></a><span class="lineno"> 490</span>};</div>
-<div class="line"><a id="l00491" name="l00491"></a><span class="lineno"> 491</span> </div>
-<div class="line"><a id="l00492" name="l00492"></a><span class="lineno"> 492</span> </div>
-<div class="line"><a id="l00493" name="l00493"></a><span class="lineno"> 493</span><span class="preprocessor">#ifdef XB_DBF3_SUPPORT</span></div>
-<div class="line"><a id="l00495" name="l00495"></a><span class="lineno"> 495</span> </div>
-<div class="line"><a id="l00501" name="l00501"></a><span class="lineno"> 501</span><span class="keyword">class </span>XBDLLEXPORT xbDbf3 : <span class="keyword">public</span> <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> {</div>
-<div class="line"><a id="l00502" name="l00502"></a><span class="lineno"> 502</span> <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00503" name="l00503"></a><span class="lineno"> 503</span> xbDbf3(<a class="code hl_class" href="classxb_1_1xbXBase.html">xbXBase</a> *x);</div>
-<div class="line"><a id="l00504" name="l00504"></a><span class="lineno"> 504</span> ~xbDbf3();</div>
-<div class="line"><a id="l00505" name="l00505"></a><span class="lineno"> 505</span> <span class="keyword">virtual</span> xbInt16 CreateTable ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sAlias, <a class="code hl_struct" href="structxb_1_1xbSchema.html">xbSchema</a> *, xbInt16 iOverlay, xbInt16 iShareMode );</div>
-<div class="line"><a id="l00506" name="l00506"></a><span class="lineno"> 506</span> <span class="keyword">virtual</span> xbInt16 GetVersion () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00507" name="l00507"></a><span class="lineno"> 507</span> <span class="keyword">virtual</span> xbInt16 Open ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sAlias, xbInt16 iOpenMode, xbInt16 iShareMode );</div>
-<div class="line"><a id="l00508" name="l00508"></a><span class="lineno"> 508</span> <span class="keyword">virtual</span> xbInt16 Rename ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sNewName );</div>
-<div class="line"><a id="l00509" name="l00509"></a><span class="lineno"> 509</span> </div>
-<div class="line"><a id="l00510" name="l00510"></a><span class="lineno"> 510</span><span class="preprocessor"> #ifdef XB_MEMO_SUPPORT</span></div>
-<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"> 511</span> <span class="keyword">virtual</span> xbInt16 SetCreateMemoBlockSize( xbUInt32 iBlockSize );</div>
-<div class="line"><a id="l00512" name="l00512"></a><span class="lineno"> 512</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00513" name="l00513"></a><span class="lineno"> 513</span> </div>
-<div class="line"><a id="l00514" name="l00514"></a><span class="lineno"> 514</span> <span class="keyword">protected</span>:</div>
-<div class="line"><a id="l00515" name="l00515"></a><span class="lineno"> 515</span> xbInt16 SetVersion ();</div>
-<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"> 516</span> <span class="keyword">virtual</span> xbInt16 ValidateSchema( <a class="code hl_struct" href="structxb_1_1xbSchema.html">xbSchema</a> *s );</div>
-<div class="line"><a id="l00517" name="l00517"></a><span class="lineno"> 517</span> </div>
-<div class="line"><a id="l00518" name="l00518"></a><span class="lineno"> 518</span> <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00519" name="l00519"></a><span class="lineno"> 519</span> </div>
-<div class="line"><a id="l00520" name="l00520"></a><span class="lineno"> 520</span>};</div>
-<div class="line"><a id="l00521" name="l00521"></a><span class="lineno"> 521</span><span class="preprocessor">#endif </span><span class="comment">/* XB_DBF3_SUPPORT */</span><span class="preprocessor"></span></div>
-<div class="line"><a id="l00522" name="l00522"></a><span class="lineno"> 522</span> </div>
-<div class="line"><a id="l00523" name="l00523"></a><span class="lineno"> 523</span> </div>
-<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"> 524</span><span class="preprocessor">#ifdef XB_DBF4_SUPPORT</span></div>
-<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"> 526</span> </div>
-<div class="line"><a id="l00531" name="l00531"></a><span class="lineno"> 531</span><span class="keyword">class </span>XBDLLEXPORT xbDbf4 : <span class="keyword">public</span> <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> {</div>
-<div class="line"><a id="l00532" name="l00532"></a><span class="lineno"> 532</span> <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00533" name="l00533"></a><span class="lineno"> 533</span> xbDbf4( <a class="code hl_variable" href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xbXBase</a> *x );</div>
-<div class="line"><a id="l00534" name="l00534"></a><span class="lineno"> 534</span> </div>
-<div class="line"><a id="l00535" name="l00535"></a><span class="lineno"> 535</span> ~xbDbf4();</div>
-<div class="line"><a id="l00536" name="l00536"></a><span class="lineno"> 536</span> </div>
-<div class="line"><a id="l00537" name="l00537"></a><span class="lineno"> 537</span> <span class="keyword">virtual</span> xbInt16 CreateTable ( <span class="keyword">const</span> xbString &amp;sTableName, <span class="keyword">const</span> xbString &amp;sAlias, xbSchema *, xbInt16 iOverlay, xbInt16 iShareMode );</div>
-<div class="line"><a id="l00538" name="l00538"></a><span class="lineno"> 538</span> <span class="keyword">virtual</span> xbInt16 GetVersion () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00539" name="l00539"></a><span class="lineno"> 539</span> <span class="keyword">virtual</span> xbInt16 Open ( <span class="keyword">const</span> xbString &amp;sTableName, <span class="keyword">const</span> xbString &amp;sAlias, xbInt16 iOpenMode, xbInt16 iShareMode );</div>
-<div class="line"><a id="l00540" name="l00540"></a><span class="lineno"> 540</span> <span class="keyword">virtual</span> xbInt16 Rename ( <span class="keyword">const</span> xbString sNewName );</div>
-<div class="line"><a id="l00541" name="l00541"></a><span class="lineno"> 541</span> </div>
-<div class="line"><a id="l00542" name="l00542"></a><span class="lineno"> 542</span><span class="preprocessor"> #ifdef XB_MEMO_SUPPORT</span></div>
-<div class="line"><a id="l00543" name="l00543"></a><span class="lineno"> 543</span> <span class="keyword">virtual</span> xbInt16 SetCreateMemoBlockSize( xbUInt32 iBlockSize );</div>
-<div class="line"><a id="l00544" name="l00544"></a><span class="lineno"> 544</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00545" name="l00545"></a><span class="lineno"> 545</span> </div>
-<div class="line"><a id="l00546" name="l00546"></a><span class="lineno"> 546</span> <span class="keyword">protected</span>:</div>
-<div class="line"><a id="l00547" name="l00547"></a><span class="lineno"> 547</span> <span class="comment">// void InitVars ();</span></div>
-<div class="line"><a id="l00548" name="l00548"></a><span class="lineno"> 548</span> xbInt16 SetVersion();</div>
-<div class="line"><a id="l00549" name="l00549"></a><span class="lineno"> 549</span> <span class="keyword">virtual</span> xbInt16 ValidateSchema ( xbSchema *s );</div>
-<div class="line"><a id="l00550" name="l00550"></a><span class="lineno"> 550</span> </div>
-<div class="line"><a id="l00551" name="l00551"></a><span class="lineno"> 551</span> <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00552" name="l00552"></a><span class="lineno"> 552</span> </div>
-<div class="line"><a id="l00553" name="l00553"></a><span class="lineno"> 553</span>};</div>
-<div class="line"><a id="l00554" name="l00554"></a><span class="lineno"> 554</span> </div>
-<div class="line"><a id="l00555" name="l00555"></a><span class="lineno"> 555</span><span class="preprocessor">#endif </span><span class="comment">/* XB_DBF4_SUPPORT */</span><span class="preprocessor"></span></div>
-<div class="line"><a id="l00556" name="l00556"></a><span class="lineno"> 556</span> </div>
-<div class="line"><a id="l00557" name="l00557"></a><span class="lineno"> 557</span>} <span class="comment">/* namespace xb */</span></div>
-<div class="line"><a id="l00558" name="l00558"></a><span class="lineno"> 558</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_DBF_H__ */</span><span class="preprocessor"></span></div>
-<div class="ttc" id="aclassxb_1_1xbDate_html"><div class="ttname"><a href="classxb_1_1xbDate.html">xb::xbDate</a></div><div class="ttdoc">xbDate class.</div><div class="ttdef"><b>Definition:</b> xbdate.h:62</div></div>
-<div class="ttc" id="aclassxb_1_1xbDbf_html"><div class="ttname"><a href="classxb_1_1xbDbf.html">xb::xbDbf</a></div><div class="ttdoc">Base class for handling dbf files/tables.</div><div class="ttdef"><b>Definition:</b> xbdbf.h:150</div></div>
-<div class="ttc" id="aclassxb_1_1xbDbf_html_a49212a9eb17f7fa9f303e08d5fc50fc6"><div class="ttname"><a href="classxb_1_1xbDbf.html#a49212a9eb17f7fa9f303e08d5fc50fc6">xb::xbDbf::GetVersion</a></div><div class="ttdeci">virtual xbInt16 GetVersion() const =0</div></div>
-<div class="ttc" id="aclassxb_1_1xbDbf_html_a4d018cbf44d8d8b2145c9acab02c8adf"><div class="ttname"><a href="classxb_1_1xbDbf.html#a4d018cbf44d8d8b2145c9acab02c8adf">xb::xbDbf::Open</a></div><div class="ttdeci">virtual xbInt16 Open(const xbString &amp;sTableName, const xbString &amp;sAlias, xbInt16 iOpenMode, xbInt16 iShareMode)=0</div></div>
-<div class="ttc" id="aclassxb_1_1xbDbf_html_a73e41bfe679dd06ab16c436652df93f1"><div class="ttname"><a href="classxb_1_1xbDbf.html#a73e41bfe679dd06ab16c436652df93f1">xb::xbDbf::CreateTable</a></div><div class="ttdeci">virtual xbInt16 CreateTable(const xbString &amp;sTableName, const xbString &amp;sAlias, xbSchema *pSchema, xbInt16 iOverlay, xbInt16 iShareMode)=0</div></div>
-<div class="ttc" id="aclassxb_1_1xbDbf_html_ad56be2756b7a9f8318d9ba5cf215dafb"><div class="ttname"><a href="classxb_1_1xbDbf.html#ad56be2756b7a9f8318d9ba5cf215dafb">xb::xbDbf::GetHeaderLen</a></div><div class="ttdeci">virtual xbUInt16 GetHeaderLen() const</div></div>
-<div class="ttc" id="aclassxb_1_1xbDbf_html_aeeeb2eb5fabcd0f91d457df07b0e0708"><div class="ttname"><a href="classxb_1_1xbDbf.html#aeeeb2eb5fabcd0f91d457df07b0e0708">xb::xbDbf::Rename</a></div><div class="ttdeci">virtual xbInt16 Rename(const xbString sNewName)=0</div></div>
-<div class="ttc" id="aclassxb_1_1xbFile_html"><div class="ttname"><a href="classxb_1_1xbFile.html">xb::xbFile</a></div><div class="ttdoc">Class for handling low level file I/O.</div><div class="ttdef"><b>Definition:</b> xbfile.h:56</div></div>
-<div class="ttc" id="aclassxb_1_1xbString_html"><div class="ttname"><a href="classxb_1_1xbString.html">xb::xbString</a></div><div class="ttdoc">Class for handling string data.</div><div class="ttdef"><b>Definition:</b> xbstring.h:50</div></div>
-<div class="ttc" id="aclassxb_1_1xbXBase_html"><div class="ttname"><a href="classxb_1_1xbXBase.html">xb::xbXBase</a></div><div class="ttdoc">xbXbase class.</div><div class="ttdef"><b>Definition:</b> xbxbase.h:123</div></div>
-<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
-<div class="ttc" id="anamespacexb_html_a25f47b226ce924a5c78f97989b0744a2"><div class="ttname"><a href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xb::xbDouble</a></div><div class="ttdeci">double xbDouble</div><div class="ttdef"><b>Definition:</b> xbtypes.h:23</div></div>
-<div class="ttc" id="anamespacexb_html_a83aa6a550398db55973aa9fb4257e66e"><div class="ttname"><a href="namespacexb.html#a83aa6a550398db55973aa9fb4257e66e">xb::xbFloat</a></div><div class="ttdeci">float xbFloat</div><div class="ttdef"><b>Definition:</b> xbtypes.h:22</div></div>
-<div class="ttc" id="anamespacexb_html_a97858ddeb1c4b0100f3edc1a46d3a8b0"><div class="ttname"><a href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xb::xbXBase</a></div><div class="ttdeci">class XBDLLEXPORT xbXBase</div><div class="ttdef"><b>Definition:</b> xbssv.h:27</div></div>
-<div class="ttc" id="anamespacexb_html_ab1a750481dd487f0d384aa1d200dff0f"><div class="ttname"><a href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xb::xbBool</a></div><div class="ttdeci">short int xbBool</div><div class="ttdef"><b>Definition:</b> xbtypes.h:24</div></div>
-<div class="ttc" id="anamespacexb_html_ab2eae4b4732466698a7fdd89d77ba53b"><div class="ttname"><a href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xb::xbDbf</a></div><div class="ttdeci">class XBDLLEXPORT xbDbf</div><div class="ttdef"><b>Definition:</b> xbtblmgr.h:28</div></div>
-<div class="ttc" id="astructxb_1_1xbSchema_html"><div class="ttname"><a href="structxb_1_1xbSchema.html">xb::xbSchema</a></div><div class="ttdoc">Schema used for defining tables with CreateTable methods.</div><div class="ttdef"><b>Definition:</b> xbdbf.h:95</div></div>
-<div class="ttc" id="astructxb_1_1xbSchema_html_a1d612b2ed5dc0b0289c9e91b3cda3a25"><div class="ttname"><a href="structxb_1_1xbSchema.html#a1d612b2ed5dc0b0289c9e91b3cda3a25">xb::xbSchema::cType</a></div><div class="ttdeci">char cType</div><div class="ttdef"><b>Definition:</b> xbdbf.h:97</div></div>
-<div class="ttc" id="astructxb_1_1xbSchema_html_a2da554af25ef628acf59bb52996056ac"><div class="ttname"><a href="structxb_1_1xbSchema.html#a2da554af25ef628acf59bb52996056ac">xb::xbSchema::iFieldLen</a></div><div class="ttdeci">xbInt16 iFieldLen</div><div class="ttdef"><b>Definition:</b> xbdbf.h:98</div></div>
-<div class="ttc" id="astructxb_1_1xbSchema_html_a55bab3bb69dee3508d168c93e182d4b9"><div class="ttname"><a href="structxb_1_1xbSchema.html#a55bab3bb69dee3508d168c93e182d4b9">xb::xbSchema::iNoOfDecs</a></div><div class="ttdeci">xbInt16 iNoOfDecs</div><div class="ttdef"><b>Definition:</b> xbdbf.h:99</div></div>
-</div><!-- fragment --></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbdelete_8cpp.html b/docs/doxygen/html/xbdelete_8cpp.html
deleted file mode 100644
index 24c2f92..0000000
--- a/docs/doxygen/html/xbdelete_8cpp.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/sql/xbdelete.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_25b94c3afce00ed38231227d8141f932.html">sql</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbdelete.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbdrpix_8cpp.html b/docs/doxygen/html/xbdrpix_8cpp.html
deleted file mode 100644
index c156992..0000000
--- a/docs/doxygen/html/xbdrpix_8cpp.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/sql/xbdrpix.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_25b94c3afce00ed38231227d8141f932.html">sql</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbdrpix.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbdrptbl_8cpp.html b/docs/doxygen/html/xbdrptbl_8cpp.html
deleted file mode 100644
index dbb9d11..0000000
--- a/docs/doxygen/html/xbdrptbl_8cpp.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/sql/xbdrptbl.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_25b94c3afce00ed38231227d8141f932.html">sql</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbdrptbl.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbexp_8cpp.html b/docs/doxygen/html/xbexp_8cpp.html
deleted file mode 100644
index dbbc593..0000000
--- a/docs/doxygen/html/xbexp_8cpp.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbexp.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbexp.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbexp_8h.html b/docs/doxygen/html/xbexp_8h.html
deleted file mode 100644
index 15d6430..0000000
--- a/docs/doxygen/html/xbexp_8h.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbexp.h File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbexp.h File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-
-<p><a href="xbexp_8h_source.html">Go to the source code of this file.</a></p>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbexp_8h_source.html b/docs/doxygen/html/xbexp_8h_source.html
deleted file mode 100644
index a5195d7..0000000
--- a/docs/doxygen/html/xbexp_8h_source.html
+++ /dev/null
@@ -1,242 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbexp.h Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbexp.h</div></div>
-</div><!--header-->
-<div class="contents">
-<a href="xbexp_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbexp.h</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022 Gary A Kunkel</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">*/</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#ifndef __XB_EXP_H__</span></div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#define __XB_EXP_H__</span></div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="comment">// #ifdef CMAKE_COMPILER_IS_GNUCC</span></div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="comment">// #pragma interface</span></div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="comment">// #endif</span></div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="preprocessor">#ifdef XB_FUNCTION_SUPPORT</span></div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="preprocessor">#define XB_EXP_CHAR &#39;C&#39;</span></div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="preprocessor">#define XB_EXP_DATE &#39;D&#39;</span></div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="preprocessor">#define XB_EXP_LOGICAL &#39;L&#39;</span></div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="preprocessor">#define XB_EXP_NUMERIC &#39;N&#39;</span></div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="preprocessor">#define XB_EXP_UNKNOWN &#39;U&#39;</span></div>
-<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> </div>
-<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="preprocessor">#ifdef XB_EXPRESSION_SUPPORT</span></div>
-<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> </div>
-<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="preprocessor">#define XB_EXP_CONSTANT &#39;C&#39;</span></div>
-<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="preprocessor">#define XB_EXP_FUNCTION &#39;F&#39;</span></div>
-<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="preprocessor">#define XB_EXP_FIELD &#39;D&#39;</span></div>
-<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="preprocessor">#define XB_EXP_OPERATOR &#39;O&#39;</span></div>
-<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="preprocessor">#define XB_EXP_NOTROOT &#39;N&#39; </span><span class="comment">// not root node, needs further parsing</span></div>
-<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="preprocessor">#define XB_EXP_PRE_OPERATOR &#39;B&#39; </span><span class="comment">// (B)efore) pre increment, pre decrement</span></div>
-<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span><span class="preprocessor">#define XB_EXP_POST_OPERATOR &#39;A&#39; </span><span class="comment">// (A)fter) post increment, pre decrement</span></div>
-<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> </div>
-<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="preprocessor">#define XB_END_OF_EXPRESSION -100</span></div>
-<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> </div>
-<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="comment">// #define XB_UNBALANCED_PARENS -101</span></div>
-<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="comment">// #define XB_UNBALANCED_QUOTES -102</span></div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> </div>
-<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> </div>
-<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
-<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> </div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span><span class="keyword">struct </span>XBDLLEXPORT xbExpToken {</div>
-<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> xbString sExpression; <span class="comment">// in - expression to pull next token from</span></div>
-<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="comment">// out - remainder of the expression after token removed</span></div>
-<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> xbString sToken; <span class="comment">// next token pulled from the expression</span></div>
-<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <span class="keywordtype">char</span> cNodeType; <span class="comment">// one of XB_EXP_CONSTANT, XB_EXP_FUNCTION, XB_EXP_FIELD, XB_EXP_OPERATOR, XB_EXP_NOTROOT</span></div>
-<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <span class="keywordtype">char</span> cReturnType; <span class="comment">// one of XB_EXP_CHAR, XB_EXP_DATE, XB_EXP_LOGICAL, XB_EXP_NUMERIC, XB_EXP_UNKNOWN</span></div>
-<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> xbInt16 iSts; <span class="comment">// return status after retrieving or attempting next token from expression</span></div>
-<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <span class="comment">// 0 = no error</span></div>
-<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <span class="comment">// XB_END_OF_EXPRESSION</span></div>
-<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="comment">// XB_UNBALANCED_PARENS</span></div>
-<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="comment">// XB_UNBALANCED_QUOTES</span></div>
-<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="keywordtype">char</span> cPrevNodeType; <span class="comment">// previous node type</span></div>
-<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="keywordtype">char</span> cPrevReturnType; <span class="comment">// previous return type</span></div>
-<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> </div>
-<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <span class="comment">// constructor</span></div>
-<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> xbExpToken() { cNodeType = 0; cReturnType = 0; iSts = 0; cPrevNodeType = 0; cPrevReturnType = 0; }</div>
-<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span>};</div>
-<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> </div>
-<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> </div>
-<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span><span class="comment">/************************************************************************/</span></div>
-<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> </div>
-<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> </div>
-<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span><span class="keyword">class </span>XBDLLEXPORT xbExp{</div>
-<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> </div>
-<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> xbExp( <a class="code hl_variable" href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xbXBase</a> * );</div>
-<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> xbExp( <a class="code hl_variable" href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xbXBase</a> *, <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> * );</div>
-<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <span class="keyword">virtual</span> ~xbExp();</div>
-<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keywordtype">void</span> ClearTreeHandle();</div>
-<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> </div>
-<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> </div>
-<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
-<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="keywordtype">void</span> DumpTree( xbInt16 iOption );</div>
-<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <span class="keywordtype">void</span> DumpToken( xbExpToken &amp;t, xbInt16 iOption = 0 );</div>
-<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> </div>
-<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> xbInt16 GetResultLen() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="keywordtype">char</span> GetReturnType() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> xbInt16 GetBoolResult( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bResult );</div>
-<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> xbInt16 GetDateResult( xbDate &amp;dtResult );</div>
-<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> xbInt16 GetNumericResult( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dResult );</div>
-<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> xbInt16 GetStringResult( xbString &amp;sResult );</div>
-<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> xbInt16 GetStringResult( <span class="keywordtype">char</span> * vpResult, xbUInt32 ulLen );</div>
-<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> xbExpNode *GetTreeHandle();</div>
-<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> xbInt16 ParseExpression( <span class="keyword">const</span> xbString &amp;sExpression );</div>
-<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> xbInt16 ParseExpression( <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *dbf, <span class="keyword">const</span> xbString &amp;sExpression );</div>
-<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> xbInt16 ProcessExpression();</div>
-<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> xbInt16 ProcessExpression( xbInt16 iRecBufSw );</div>
-<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> </div>
-<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> </div>
-<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> <span class="keyword">protected</span>:</div>
-<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> xbInt16 GetNextToken( xbExpToken &amp;t );</div>
-<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> xbInt16 OperatorWeight( <span class="keyword">const</span> xbString &amp;sOperator );</div>
-<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> xbExpNode *GetNextNode( xbExpNode * n ) <span class="keyword">const</span>; <span class="comment">// traverses the tree from bottom left node, right, then up</span></div>
-<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> </div>
-<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <span class="keyword">private</span>: <span class="comment">// methods</span></div>
-<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> </div>
-<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> <span class="comment">// xbInt16 CalcExpressionResultLen();</span></div>
-<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> xbInt16 CalcFunctionResultLen( xbExpNode *n ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> xbInt16 CalcCharNodeLen( xbExpNode *n );</div>
-<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> xbInt16 CheckParensAndQuotes( <span class="keyword">const</span> xbString &amp;sExpression );</div>
-<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> xbInt16 GetExpressionResultLen() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> </div>
-<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> xbInt16 GetTokenCharConstant ( xbExpToken &amp;t );</div>
-<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> xbInt16 GetTokenDatabaseField ( xbExpToken &amp;t );</div>
-<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> xbInt16 GetTokenDateConstant ( xbExpToken &amp;t );</div>
-<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> xbInt16 GetTokenFunction ( xbExpToken &amp;t );</div>
-<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> xbInt16 GetTokenLogicalConstant( xbExpToken &amp;t );</div>
-<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> xbInt16 GetTokenNumericConstant( xbExpToken &amp;t );</div>
-<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> xbInt16 GetTokenOperator ( xbExpToken &amp;t );</div>
-<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> xbInt16 GetTokenParen ( xbExpToken &amp;t );</div>
-<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> </div>
-<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsFunction ( <span class="keyword">const</span> xbString &amp;sExp, <span class="keywordtype">char</span> &amp;cReturnType );</div>
-<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsLogicalConstant ( <span class="keyword">const</span> xbString &amp;sExp );</div>
-<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsNumericConstant ( <span class="keyword">const</span> xbString &amp;sExp, <span class="keywordtype">char</span> cPrevNodeType );</div>
-<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsOperator ( <span class="keyword">const</span> xbString &amp;sExp );</div>
-<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <span class="keywordtype">char</span> IsTokenSeparator ( <span class="keywordtype">char</span> c );</div>
-<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsWhiteSpace ( <span class="keywordtype">char</span> c );</div>
-<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> </div>
-<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> xbInt16 ParseExpression ( <span class="keyword">const</span> xbString &amp;sExpression, xbInt16 iWeight );</div>
-<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> xbInt16 ParseExpressionConstant( xbExpToken &amp;t, xbExpNode *n );</div>
-<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> xbInt16 ParseExpressionFunction( xbExpToken &amp;t, xbExpNode *n, xbInt16 iWeight );</div>
-<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> xbInt16 ParseExpressionFunctionParms( <span class="keyword">const</span> xbString &amp;sParms, xbLinkList&lt;xbString&gt; &amp;llParms );</div>
-<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> xbInt16 ParseExpressionField ( xbExpToken &amp;t, xbExpNode *n );</div>
-<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> xbInt16 ParseExpressionOperator( xbExpToken &amp;t, xbExpNode *n, xbInt16 iWeight );</div>
-<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> </div>
-<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> xbInt16 ProcessExpressionFunction( xbExpNode *n, xbInt16 iRecBufSw = 0 );</div>
-<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> xbInt16 ProcessExpressionOperator( xbExpNode *n );</div>
-<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> </div>
-<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> <span class="keyword">private</span>: <span class="comment">// fields</span></div>
-<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> <a class="code hl_variable" href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xbXBase</a> *xbase;</div>
-<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *dbf;</div>
-<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> xbExpNode *nTree; <span class="comment">// pointer to tree of expNodes</span></div>
-<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> <span class="comment">// xbInt16 iExpLen; // size of expression result</span></div>
-<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> </div>
-<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> </div>
-<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span>};</div>
-<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> </div>
-<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span><span class="comment">/* Expression handler */</span></div>
-<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> </div>
-<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> </div>
-<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span>};</div>
-<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span><span class="preprocessor">#endif </span><span class="comment">// XB_EXPRESSION_SUPPORT</span></div>
-<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span><span class="preprocessor">#endif </span><span class="comment">// __XB_EXP_H__</span></div>
-<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> </div>
-<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> </div>
-<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
-<div class="ttc" id="anamespacexb_html_a25f47b226ce924a5c78f97989b0744a2"><div class="ttname"><a href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xb::xbDouble</a></div><div class="ttdeci">double xbDouble</div><div class="ttdef"><b>Definition:</b> xbtypes.h:23</div></div>
-<div class="ttc" id="anamespacexb_html_a97858ddeb1c4b0100f3edc1a46d3a8b0"><div class="ttname"><a href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xb::xbXBase</a></div><div class="ttdeci">class XBDLLEXPORT xbXBase</div><div class="ttdef"><b>Definition:</b> xbssv.h:27</div></div>
-<div class="ttc" id="anamespacexb_html_ab1a750481dd487f0d384aa1d200dff0f"><div class="ttname"><a href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xb::xbBool</a></div><div class="ttdeci">short int xbBool</div><div class="ttdef"><b>Definition:</b> xbtypes.h:24</div></div>
-<div class="ttc" id="anamespacexb_html_ab2eae4b4732466698a7fdd89d77ba53b"><div class="ttname"><a href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xb::xbDbf</a></div><div class="ttdeci">class XBDLLEXPORT xbDbf</div><div class="ttdef"><b>Definition:</b> xbtblmgr.h:28</div></div>
-</div><!-- fragment --></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbexpnode_8cpp.html b/docs/doxygen/html/xbexpnode_8cpp.html
deleted file mode 100644
index d26df29..0000000
--- a/docs/doxygen/html/xbexpnode_8cpp.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbexpnode.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbexpnode.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbexpnode_8h.html b/docs/doxygen/html/xbexpnode_8h.html
deleted file mode 100644
index 079ab87..0000000
--- a/docs/doxygen/html/xbexpnode_8h.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbexpnode.h File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbexpnode.h File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-
-<p><a href="xbexpnode_8h_source.html">Go to the source code of this file.</a></p>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbexpnode_8h_source.html b/docs/doxygen/html/xbexpnode_8h_source.html
deleted file mode 100644
index 0043f29..0000000
--- a/docs/doxygen/html/xbexpnode_8h_source.html
+++ /dev/null
@@ -1,190 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbexpnode.h Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbexpnode.h</div></div>
-</div><!--header-->
-<div class="contents">
-<a href="xbexpnode_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbexpnode.h</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022 Gary A Kunkel</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">*/</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#ifndef __XB_EXPNODE_H__</span></div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#define __XB_EXPNODE_H__</span></div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="comment">// #ifdef CMAKE_COMPILER_IS_GNUCC</span></div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="comment">// #pragma interface</span></div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="comment">// #endif</span></div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#ifdef XB_EXPRESSION_SUPPORT</span></div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="comment">//class XBDLLEXPORT xbDbf;</span></div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="comment">/************************************************************************/</span></div>
-<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> </div>
-<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="keyword">class </span>XBDLLEXPORT xbExpNode {</div>
-<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> xbExpNode();</div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> xbExpNode( xbString &amp;sNodeText, <span class="keywordtype">char</span> cReturnType, <span class="keywordtype">char</span> cNodeType );</div>
-<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> xbExpNode( xbString &amp;sNodeText, <span class="keywordtype">char</span> cNodeType );</div>
-<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> xbExpNode( <span class="keywordtype">char</span> cNodeType );</div>
-<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> </div>
-<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <span class="keyword">virtual</span> ~xbExpNode();</div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> xbInt16 AddChild( xbExpNode *n );</div>
-<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> xbExpNode *GetChild( xbUInt32 ulChildNo ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> xbUInt32 GetChildCnt() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> xbUInt32 GetChildNo() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *GetDbf() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> xbInt16 GetFieldNo() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> xbExpNode *GetFirstNode();</div>
-<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> xbExpNode *GetNextNode() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <span class="keywordtype">void</span> GetNodeText( xbString &amp;sNodeText ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="keywordtype">char</span> GetNodeType() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> xbExpNode *GetParent() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> xbString &amp;GetStringResult();</div>
-<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetBoolResult() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> GetNumericResult() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> xbUInt32 GetResultLen() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> xbExpNode *GetRightSibling() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <span class="keywordtype">char</span> GetReturnType() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> xbInt16 GetWeight() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> HasRightSibling() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsOperator() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsUnaryOperator() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="keywordtype">void</span> RemoveLastChild();</div>
-<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keywordtype">void</span> SetResultLen( xbUInt32 ulResultLen );</div>
-<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keywordtype">void</span> SetDbfInfo( <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *dbf );</div>
-<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keywordtype">void</span> SetDbfInfo( <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *dbf, xbInt16 iFieldNo );</div>
-<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keywordtype">void</span> SetNodeText( xbString &amp;sNodeText );</div>
-<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="keywordtype">void</span> SetNodeType( <span class="keywordtype">char</span> cNodeType );</div>
-<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <span class="keywordtype">void</span> SetParent( xbExpNode *n );</div>
-<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <span class="keywordtype">void</span> SetResult( xbString &amp;sResult );</div>
-<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="keywordtype">void</span> SetResult( xbDate &amp;dtResult );</div>
-<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <span class="keywordtype">void</span> SetResult( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bResult );</div>
-<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="keywordtype">void</span> SetResult( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dResult );</div>
-<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <span class="keywordtype">void</span> SetReturnType( <span class="keywordtype">char</span> cReturnType );</div>
-<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <span class="keywordtype">void</span> SetWeight( xbInt16 iWeight );</div>
-<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> </div>
-<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
-<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="keywordtype">void</span> DumpNode( xbInt16 iOption ) <span class="keyword">const</span>; <span class="comment">// 0 = no children, 1 = and children</span></div>
-<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> </div>
-<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> xbString sNodeText; <span class="comment">// expression text</span></div>
-<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="keywordtype">char</span> cReturnType; <span class="comment">// one of: XB_EXP_CHAR, XB_EXP_DATE, XB_EXP_LOGICAL, XB_EXP_NUMERIC</span></div>
-<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="keywordtype">char</span> cNodeType; <span class="comment">// one of: XB_EXP_CONSTANT, XB_EXP_FUNCTION, XB_EXP_FIELD, XB_EXP_OPERATOR</span></div>
-<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> xbString sResult; <span class="comment">// char result, and operator</span></div>
-<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dResult; <span class="comment">// numeric and bool results</span></div>
-<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> xbExpNode * nParent; <span class="comment">// pointer to parent</span></div>
-<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> xbLinkList&lt;xbExpNode *&gt; llChildren; <span class="comment">// linked list of descendent nodes</span></div>
-<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *dbf; <span class="comment">// pointer to dbf, used for field, RECNO() and RECCOUNT()</span></div>
-<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> xbInt16 iFieldNo; <span class="comment">// field no if DBF field</span></div>
-<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> xbUInt32 ulResultLen; <span class="comment">// for string results, accumulated length of character operations</span></div>
-<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="comment">// includes the sum of all nodes under this + this</span></div>
-<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="comment">// date = 8, numeric = 4, logical = 1</span></div>
-<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> xbInt16 iWeight; <span class="comment">// used for buildign the tree of nodes, assigned to operators</span></div>
-<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="comment">// the higher the number, the lower it goes on the tree</span></div>
-<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> </div>
-<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span>};</div>
-<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> </div>
-<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span><span class="comment">/************************************************************************/</span></div>
-<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> </div>
-<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span><span class="comment">/* Expression handler */</span></div>
-<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> </div>
-<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> </div>
-<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span>};</div>
-<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span><span class="preprocessor">#endif </span><span class="comment">// XB_EXPRESSION_SUPPORT</span></div>
-<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span><span class="preprocessor">#endif </span><span class="comment">// __XB_EXP_H__</span></div>
-<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> </div>
-<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> </div>
-<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
-<div class="ttc" id="anamespacexb_html_a25f47b226ce924a5c78f97989b0744a2"><div class="ttname"><a href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xb::xbDouble</a></div><div class="ttdeci">double xbDouble</div><div class="ttdef"><b>Definition:</b> xbtypes.h:23</div></div>
-<div class="ttc" id="anamespacexb_html_ab1a750481dd487f0d384aa1d200dff0f"><div class="ttname"><a href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xb::xbBool</a></div><div class="ttdeci">short int xbBool</div><div class="ttdef"><b>Definition:</b> xbtypes.h:24</div></div>
-<div class="ttc" id="anamespacexb_html_ab2eae4b4732466698a7fdd89d77ba53b"><div class="ttname"><a href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xb::xbDbf</a></div><div class="ttdeci">class XBDLLEXPORT xbDbf</div><div class="ttdef"><b>Definition:</b> xbtblmgr.h:28</div></div>
-</div><!-- fragment --></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbfields_8cpp.html b/docs/doxygen/html/xbfields_8cpp.html
deleted file mode 100644
index f2cd472..0000000
--- a/docs/doxygen/html/xbfields_8cpp.html
+++ /dev/null
@@ -1,88 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbfields.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#namespaces">Namespaces</a> </div>
- <div class="headertitle"><div class="title">xbfields.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbfile_8cpp.html b/docs/doxygen/html/xbfile_8cpp.html
deleted file mode 100644
index 26e8b99..0000000
--- a/docs/doxygen/html/xbfile_8cpp.html
+++ /dev/null
@@ -1,88 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbfile.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#namespaces">Namespaces</a> </div>
- <div class="headertitle"><div class="title">xbfile.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbfile_8h.html b/docs/doxygen/html/xbfile_8h.html
deleted file mode 100644
index d778f87..0000000
--- a/docs/doxygen/html/xbfile_8h.html
+++ /dev/null
@@ -1,181 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbfile.h File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#nested-classes">Data Structures</a> &#124;
-<a href="#namespaces">Namespaces</a> &#124;
-<a href="#define-members">Macros</a> </div>
- <div class="headertitle"><div class="title">xbfile.h File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-
-<p><a href="xbfile_8h_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
-Data Structures</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html">xb::xbFile</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Class for handling low level file I/O. <a href="classxb_1_1xbFile.html#details">More...</a><br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a>
-Macros</h2></td></tr>
-<tr class="memitem:ae58c73e0ba237fcf67ee20feea6c2743"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbfile_8h.html#ae58c73e0ba237fcf67ee20feea6c2743">XB_READ</a>&#160;&#160;&#160;0</td></tr>
-<tr class="separator:ae58c73e0ba237fcf67ee20feea6c2743"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af991a288c327f6857e90156ea734a633"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbfile_8h.html#af991a288c327f6857e90156ea734a633">XB_READ_WRITE</a>&#160;&#160;&#160;1</td></tr>
-<tr class="separator:af991a288c327f6857e90156ea734a633"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abbf99e259c2f31572c886da6d85b1359"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbfile_8h.html#abbf99e259c2f31572c886da6d85b1359">XB_WRITE</a>&#160;&#160;&#160;2</td></tr>
-<tr class="separator:abbf99e259c2f31572c886da6d85b1359"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9ec4d60a008c667d9861e3b3814f0232"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbfile_8h.html#a9ec4d60a008c667d9861e3b3814f0232">XB_SINGLE_USER</a>&#160;&#160;&#160;0</td></tr>
-<tr class="separator:a9ec4d60a008c667d9861e3b3814f0232"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a05c0fc99ba71cf953d046d12f3f874bc"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbfile_8h.html#a05c0fc99ba71cf953d046d12f3f874bc">XB_MULTI_USER</a>&#160;&#160;&#160;1</td></tr>
-<tr class="separator:a05c0fc99ba71cf953d046d12f3f874bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Macro Definition Documentation</h2>
-<a id="a05c0fc99ba71cf953d046d12f3f874bc" name="a05c0fc99ba71cf953d046d12f3f874bc"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a05c0fc99ba71cf953d046d12f3f874bc">&#9670;&nbsp;</a></span>XB_MULTI_USER</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_MULTI_USER&#160;&#160;&#160;1</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ae58c73e0ba237fcf67ee20feea6c2743" name="ae58c73e0ba237fcf67ee20feea6c2743"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae58c73e0ba237fcf67ee20feea6c2743">&#9670;&nbsp;</a></span>XB_READ</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_READ&#160;&#160;&#160;0</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="af991a288c327f6857e90156ea734a633" name="af991a288c327f6857e90156ea734a633"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af991a288c327f6857e90156ea734a633">&#9670;&nbsp;</a></span>XB_READ_WRITE</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_READ_WRITE&#160;&#160;&#160;1</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a9ec4d60a008c667d9861e3b3814f0232" name="a9ec4d60a008c667d9861e3b3814f0232"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a9ec4d60a008c667d9861e3b3814f0232">&#9670;&nbsp;</a></span>XB_SINGLE_USER</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_SINGLE_USER&#160;&#160;&#160;0</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="abbf99e259c2f31572c886da6d85b1359" name="abbf99e259c2f31572c886da6d85b1359"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#abbf99e259c2f31572c886da6d85b1359">&#9670;&nbsp;</a></span>XB_WRITE</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_WRITE&#160;&#160;&#160;2</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbfile_8h_source.html b/docs/doxygen/html/xbfile_8h_source.html
deleted file mode 100644
index 11c4fcd..0000000
--- a/docs/doxygen/html/xbfile_8h_source.html
+++ /dev/null
@@ -1,265 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbfile.h Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbfile.h</div></div>
-</div><!--header-->
-<div class="contents">
-<a href="xbfile_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbfile.h</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022 Gary A Kunkel</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">*/</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#ifndef __XB_FILE_H__</span></div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#define __XB_FILE_H__</span></div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#ifdef CMAKE_COMPILER_IS_GNUCC</span></div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#pragma interface</span></div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="comment">/*****************************/</span></div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="comment">/* File Open Modes */</span></div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"><a class="line" href="xbfile_8h.html#ae58c73e0ba237fcf67ee20feea6c2743"> 25</a></span><span class="preprocessor">#define XB_READ 0</span></div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"><a class="line" href="xbfile_8h.html#af991a288c327f6857e90156ea734a633"> 26</a></span><span class="preprocessor">#define XB_READ_WRITE 1</span></div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"><a class="line" href="xbfile_8h.html#abbf99e259c2f31572c886da6d85b1359"> 27</a></span><span class="preprocessor">#define XB_WRITE 2</span></div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="comment">/*****************************/</span></div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="comment">/* File Access Modes */</span></div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="xbfile_8h.html#a9ec4d60a008c667d9861e3b3814f0232"> 31</a></span><span class="preprocessor">#define XB_SINGLE_USER 0 </span><span class="comment">// file buffering on</span></div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"><a class="line" href="xbfile_8h.html#a05c0fc99ba71cf953d046d12f3f874bc"> 32</a></span><span class="preprocessor">#define XB_MULTI_USER 1 </span><span class="comment">// file buffering off</span></div>
-<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> </div>
-<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
-<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div>
-<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"><a class="line" href="classxb_1_1xbFile.html"> 56</a></span><span class="keyword">class </span>XBDLLEXPORT <a class="code hl_class" href="classxb_1_1xbFile.html">xbFile</a> : <span class="keyword">public</span> <a class="code hl_class" href="classxb_1_1xbSsv.html">xbSsv</a> {</div>
-<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> </div>
-<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <span class="comment">// xbFile();</span></div>
-<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <a class="code hl_class" href="classxb_1_1xbFile.html">xbFile</a>( <a class="code hl_class" href="classxb_1_1xbXBase.html">xbXBase</a> * x );</div>
-<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> </div>
-<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <a class="code hl_class" href="classxb_1_1xbFile.html">~xbFile</a>();</div>
-<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> </div>
-<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> xbInt16 SetHomeFolders();</div>
-<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> </div>
-<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> xbInt16 CreateUniqueFileName( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sDirIn, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sExtIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFqnOut );</div>
-<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> xbInt16 CreateUniqueFileName( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sDirIn, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sExtIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFqnOut, xbInt16 iOption );</div>
-<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> </div>
-<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; GetDirectory() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; GetFileName() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; GetFqFileName() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> </div>
-<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <span class="keywordtype">void</span> SetDirectory ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sDirectory);</div>
-<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="keywordtype">void</span> SetFileName ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName );</div>
-<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="keywordtype">void</span> SetFqFileName( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFqName );</div>
-<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> </div>
-<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> xbUInt32 GetBlockSize () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> xbInt16 SetBlockSize ( xbUInt32 ulBlockSize );</div>
-<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> </div>
-<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> xbInt16 GetOpenMode () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> xbInt16 GetShareMode () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> </div>
-<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> xbInt16 GetFileDirPart ( <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileDirPartOut ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> xbInt16 GetFileDirPart ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sCompleteFileNameIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileDirPartOut ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> xbInt16 GetFileExtPart ( <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileExtPartOut ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> xbInt16 GetFileExtPart ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sCompleteFileNameIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileExtPartOut ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> xbInt16 GetFileNamePart( <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileNamePartOut ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> xbInt16 GetFileNamePart( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sCompleteFileNameIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileNamePartOut ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> xbInt16 GetFileType ( <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileType ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> </div>
-<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> xbInt16 GetXbaseFileTypeByte( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 &amp;iVersion );</div>
-<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> xbInt16 GetXbaseFileTypeByte( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> &amp;cFileTypeByte );</div>
-<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> xbInt16 GetXbaseFileTypeByte( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> &amp;cFileTypeByte, xbInt16 &amp;iVersion );</div>
-<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> xbInt16 DetermineXbaseTableVersion( <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> cFileTypeByte ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> xbInt16 DetermineXbaseMemoVersion( <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> cFileTypeByte ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> </div>
-<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> FileExists () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> FileExists ( xbInt16 iOption ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> FileExists ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> FileExists ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iOption ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> </div>
-<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> FileIsOpen () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> </div>
-<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> xbInt16 ReadBlock ( xbUInt32 ulBlockNo, <span class="keywordtype">size_t</span> readSize, <span class="keywordtype">void</span> *buf );</div>
-<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> xbInt16 ReadBlock ( xbUInt32 ulBlockNo, xbUInt32 ulBlockSize, <span class="keywordtype">size_t</span> readSize, <span class="keywordtype">void</span> *buf );</div>
-<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> xbInt16 WriteBlock( xbUInt32 ulBlockNo, <span class="keywordtype">size_t</span> writeSize, <span class="keywordtype">void</span> *buf );</div>
-<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> </div>
-<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> xbInt16 GetFileSize( xbUInt64 &amp;ullFileSize );</div>
-<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> xbInt16 GetFileMtime( time_t &amp;mtime );</div>
-<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> </div>
-<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> eGetDouble( <span class="keyword">const</span> <span class="keywordtype">char</span> *p ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> xbInt32 eGetInt32 ( <span class="keyword">const</span> <span class="keywordtype">char</span> *p ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> xbUInt32 eGetUInt32( <span class="keyword">const</span> <span class="keywordtype">char</span> *p ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> xbInt16 eGetInt16 ( <span class="keyword">const</span> <span class="keywordtype">char</span> *p ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> xbUInt16 eGetUInt16( <span class="keyword">const</span> <span class="keywordtype">char</span> *p ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <span class="keywordtype">void</span> ePutDouble( <span class="keywordtype">char</span> *p, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> d );</div>
-<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="keywordtype">void</span> ePutInt32 ( <span class="keywordtype">char</span> *p, xbInt32 l );</div>
-<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> <span class="keywordtype">void</span> ePutUInt32( <span class="keywordtype">char</span> *p, xbUInt32 ul );</div>
-<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <span class="keywordtype">void</span> ePutInt16 ( <span class="keywordtype">char</span> *p, xbInt16 s );</div>
-<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <span class="keywordtype">void</span> ePutUInt16( <span class="keywordtype">char</span> *p, xbUInt16 s );</div>
-<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> </div>
-<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> xbInt16 xbFclose ();</div>
-<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> xbInt16 xbFeof ();</div>
-<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> xbInt16 xbFflush ();</div>
-<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> xbInt16 xbFgetc ( xbInt32 &amp;c );</div>
-<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> xbInt16 xbFgetc ( <span class="keywordtype">char</span> &amp;c );</div>
-<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> </div>
-<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span><span class="preprocessor"> #ifdef XB_LOCKING_SUPPORT</span></div>
-<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> xbInt16 xbLock ( xbInt16 iFunction, xbInt64 llOffset, <span class="keywordtype">size_t</span> stLen );</div>
-<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> xbInt16 GetLockRetryCount() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <span class="keywordtype">void</span> SetLockRetryCount( xbInt16 iLockRetries );</div>
-<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> </div>
-<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"><a class="line" href="classxb_1_1xbFile.html#a7cdfef5ede9ac98d44a28a6b7a70972c"> 134</a></span> xbInt16 <a class="code hl_function" href="classxb_1_1xbFile.html#a7cdfef5ede9ac98d44a28a6b7a70972c">xbFopen</a> ( xbInt16 iOpenMode );</div>
-<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> xbInt16 xbFopen ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOpenMode, xbInt16 iShareMode );</div>
-<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> xbInt16 xbFopen ( xbInt16 iOpenMode, xbInt16 iShareMode );</div>
-<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> xbInt16 xbFopen ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sMode, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iShareMode );</div>
-<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> </div>
-<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> xbInt16 xbFputc ( xbInt32 c );</div>
-<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> xbInt16 xbFputc ( xbInt32 c, xbInt32 iNoTimes );</div>
-<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> xbInt16 xbFputs ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s );</div>
-<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> xbInt16 xbFread ( <span class="keywordtype">void</span> *ptr, <span class="keywordtype">size_t</span> size, <span class="keywordtype">size_t</span> nmemb );</div>
-<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> xbInt16 xbFgets ( <span class="keywordtype">size_t</span> lSize, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sLine );</div>
-<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> </div>
-<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="keywordtype">size_t</span> xbFtell ();</div>
-<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> xbInt16 xbFseek ( xbInt64 llOffset, xbInt32 whence );</div>
-<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> </div>
-<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="keywordtype">void</span> xbFTurnOffFileBuffering();</div>
-<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> xbInt16 xbFwrite ( <span class="keyword">const</span> <span class="keywordtype">void</span> *ptr, <span class="keywordtype">size_t</span> lSize, <span class="keywordtype">size_t</span> lNmemb );</div>
-<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> </div>
-<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> xbInt16 xbReadUntil ( <span class="keyword">const</span> <span class="keywordtype">char</span> cDelim, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
-<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> xbInt16 xbRemove ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iOption );</div>
-<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> xbInt16 xbRemove ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName );</div>
-<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> xbInt16 xbRemove ();</div>
-<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> </div>
-<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> xbInt16 xbRename ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOldName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sNewName );</div>
-<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> <span class="keywordtype">void</span> xbRewind ();</div>
-<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> </div>
-<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> xbInt16 xbTruncate ( xbInt64 llSize );</div>
-<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> xbInt16 NameSuffixMissing( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iOption ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> </div>
-<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
-<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> xbInt16 DumpBlockToDisk( xbUInt32 ulBlockNo, <span class="keywordtype">size_t</span> lBlockSize );</div>
-<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> xbInt16 DumpMemToDisk ( <span class="keywordtype">char</span> *p, <span class="keywordtype">size_t</span> lBlockSize );</div>
-<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> </div>
-<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> </div>
-<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <span class="keyword">protected</span>:</div>
-<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> </div>
-<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"><a class="line" href="classxb_1_1xbFile.html#ae39a67ea391b46055d4ca299cb222004"> 170</a></span> <a class="code hl_class" href="classxb_1_1xbXBase.html">xbXBase</a> *<a class="code hl_variable" href="classxb_1_1xbFile.html#ae39a67ea391b46055d4ca299cb222004">xbase</a>; <span class="comment">/* pointer to the main structures */</span></div>
-<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> </div>
-<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> FILE *fp;</div>
-<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sFqFileName; <span class="comment">/* fully qualified file name */</span></div>
-<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sFileName; <span class="comment">/* file name */</span></div>
-<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sDirectory; <span class="comment">/* directory, ends with / or \ */</span></div>
-<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bFileOpen; <span class="comment">/* true if file is open */</span></div>
-<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> xbUInt32 ulBlockSize; <span class="comment">/* used for memo and index files */</span></div>
-<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> </div>
-<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> xbInt16 iOpenMode; <span class="comment">/* XB_READ || XB_READ_WRITE || XB_WRITE */</span></div>
-<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> xbInt16 iShareMode; <span class="comment">/* XB_SINGLE_USER || XB_MULTI_USER - set file buffering */</span></div>
-<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> xbInt32 iFileNo; <span class="comment">/* Library File No */</span></div>
-<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> </div>
-<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span><span class="preprocessor"> #ifdef XB_LOCKING_SUPPORT</span></div>
-<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> xbInt16 iLockRetries; <span class="comment">/* file override number of lock attempts */</span></div>
-<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> </div>
-<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span><span class="preprocessor"> #ifdef HAVE_SETENDOFFILE_F</span></div>
-<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> HANDLE fHandle;</div>
-<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> </div>
-<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> </div>
-<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span>};</div>
-<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> </div>
-<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span>} <span class="comment">/* namespace */</span></div>
-<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span><span class="preprocessor">#endif </span><span class="comment">/* __XBFILE_H__ */</span><span class="preprocessor"></span></div>
-<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> </div>
-<div class="ttc" id="aclassxb_1_1xbFile_html"><div class="ttname"><a href="classxb_1_1xbFile.html">xb::xbFile</a></div><div class="ttdoc">Class for handling low level file I/O.</div><div class="ttdef"><b>Definition:</b> xbfile.h:56</div></div>
-<div class="ttc" id="aclassxb_1_1xbFile_html_a7cdfef5ede9ac98d44a28a6b7a70972c"><div class="ttname"><a href="classxb_1_1xbFile.html#a7cdfef5ede9ac98d44a28a6b7a70972c">xb::xbFile::xbFopen</a></div><div class="ttdeci">xbInt16 xbFopen(xbInt16 iOpenMode)</div></div>
-<div class="ttc" id="aclassxb_1_1xbFile_html_ae39a67ea391b46055d4ca299cb222004"><div class="ttname"><a href="classxb_1_1xbFile.html#ae39a67ea391b46055d4ca299cb222004">xb::xbFile::xbase</a></div><div class="ttdeci">xbXBase * xbase</div><div class="ttdef"><b>Definition:</b> xbfile.h:170</div></div>
-<div class="ttc" id="aclassxb_1_1xbSsv_html"><div class="ttname"><a href="classxb_1_1xbSsv.html">xb::xbSsv</a></div><div class="ttdoc">Class for handling shared system variables.</div><div class="ttdef"><b>Definition:</b> xbssv.h:59</div></div>
-<div class="ttc" id="aclassxb_1_1xbString_html"><div class="ttname"><a href="classxb_1_1xbString.html">xb::xbString</a></div><div class="ttdoc">Class for handling string data.</div><div class="ttdef"><b>Definition:</b> xbstring.h:50</div></div>
-<div class="ttc" id="aclassxb_1_1xbXBase_html"><div class="ttname"><a href="classxb_1_1xbXBase.html">xb::xbXBase</a></div><div class="ttdoc">xbXbase class.</div><div class="ttdef"><b>Definition:</b> xbxbase.h:123</div></div>
-<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
-<div class="ttc" id="anamespacexb_html_a25f47b226ce924a5c78f97989b0744a2"><div class="ttname"><a href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xb::xbDouble</a></div><div class="ttdeci">double xbDouble</div><div class="ttdef"><b>Definition:</b> xbtypes.h:23</div></div>
-<div class="ttc" id="anamespacexb_html_ab1a750481dd487f0d384aa1d200dff0f"><div class="ttname"><a href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xb::xbBool</a></div><div class="ttdeci">short int xbBool</div><div class="ttdef"><b>Definition:</b> xbtypes.h:24</div></div>
-</div><!-- fragment --></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbfilter_8cpp.html b/docs/doxygen/html/xbfilter_8cpp.html
deleted file mode 100644
index 5af181c..0000000
--- a/docs/doxygen/html/xbfilter_8cpp.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbfilter.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbfilter.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbfilter_8h.html b/docs/doxygen/html/xbfilter_8h.html
deleted file mode 100644
index 211aada..0000000
--- a/docs/doxygen/html/xbfilter_8h.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbfilter.h File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbfilter.h File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-
-<p><a href="xbfilter_8h_source.html">Go to the source code of this file.</a></p>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbfilter_8h_source.html b/docs/doxygen/html/xbfilter_8h_source.html
deleted file mode 100644
index 854676f..0000000
--- a/docs/doxygen/html/xbfilter_8h_source.html
+++ /dev/null
@@ -1,159 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbfilter.h Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbfilter.h</div></div>
-</div><!--header-->
-<div class="contents">
-<a href="xbfilter_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbfilter.h</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022 Gary A Kunkel</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">This class manages the user data area (UDA)</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"></span> </div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment">*/</span></div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> </div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#ifndef __XB_XBFILTER_H__</span></div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#define __XB_XBFILTER_H__</span></div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="preprocessor">#ifdef CMAKE_COMPILER_IS_GNUCC</span></div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#pragma interface</span></div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="preprocessor">#ifdef XB_FILTER_SUPPORT</span></div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> </div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="comment">//#ifdef XB_INDEX_SUPPORT</span></div>
-<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="comment">//class XBDLLEXPORT xbIx;</span></div>
-<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="comment">//#endif // XB_INDEX_SUPPORT</span></div>
-<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div>
-<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> </div>
-<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="keyword">class </span>XBDLLEXPORT xbFilter {</div>
-<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div>
-<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> xbFilter( <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *dbf );</div>
-<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> ~xbFilter();</div>
-<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> xbInt16 Set( xbString &amp;sFilterExpression );</div>
-<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> xbInt16 Set( <span class="keyword">const</span> <span class="keywordtype">char</span> *sFilterExpression );</div>
-<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> xbInt16 GetFirstRecord( xbInt16 iOpt = 1 );</div>
-<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> xbInt16 GetNextRecord ( xbInt16 iOpt = 1 );</div>
-<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> xbInt16 GetPrevRecord ( xbInt16 iOpt = 1 );</div>
-<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> xbInt16 GetLastRecord ( xbInt16 iOpt = 1 );</div>
-<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> <span class="keywordtype">void</span> SetLimit( xbInt32 ulLimit );</div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> xbInt32 GetLimit() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <span class="keywordtype">void</span> ResetQryCnt();</div>
-<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> xbInt32 GetQryCnt() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> </div>
-<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span><span class="preprocessor"> #ifdef XB_INDEX_SUPPORT</span></div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> xbInt16 GetFirstRecordIx( xbInt16 iOpt = 1 );</div>
-<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> xbInt16 GetNextRecordIx ( xbInt16 iOpt = 1 );</div>
-<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> xbInt16 GetPrevRecordIx ( xbInt16 iOpt = 1 );</div>
-<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> xbInt16 GetLastRecordIx ( xbInt16 iOpt = 1 );</div>
-<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INDEX_SUPPORT</span></div>
-<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> </div>
-<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> </div>
-<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="comment">// xbXBase *xbase;</span></div>
-<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *dbf;</div>
-<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> xbExp *exp;</div>
-<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> </div>
-<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> xbInt32 lLimit; <span class="comment">// max number rows returned</span></div>
-<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> xbInt32 lCurQryCnt; <span class="comment">// current count of rows returned, neg# is moving from bottom to top</span></div>
-<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <span class="comment">// pos# is moving from top to bottom</span></div>
-<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span><span class="preprocessor"> #ifdef XB_INDEX_SUPPORT</span></div>
-<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> xbIx *pIx; <span class="comment">// if index is set, the class uses the index tag, otherwise table</span></div>
-<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keywordtype">void</span> *vpTag;</div>
-<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INDEX_SUPPORT</span></div>
-<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> </div>
-<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> </div>
-<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span>};</div>
-<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span>} <span class="comment">/* namespace */</span></div>
-<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="preprocessor">#endif </span><span class="comment">/* XB_FILTER_SUPPORT */</span><span class="preprocessor"></span></div>
-<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span><span class="preprocessor">#endif </span><span class="comment">/* __XBFILTER_H__ */</span><span class="preprocessor"></span></div>
-<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
-<div class="ttc" id="anamespacexb_html_ab2eae4b4732466698a7fdd89d77ba53b"><div class="ttname"><a href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xb::xbDbf</a></div><div class="ttdeci">class XBDLLEXPORT xbDbf</div><div class="ttdef"><b>Definition:</b> xbtblmgr.h:28</div></div>
-</div><!-- fragment --></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbfuncs_8cpp.html b/docs/doxygen/html/xbfuncs_8cpp.html
deleted file mode 100644
index 6cc894f..0000000
--- a/docs/doxygen/html/xbfuncs_8cpp.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbfuncs.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbfuncs.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbindex_8h.html b/docs/doxygen/html/xbindex_8h.html
deleted file mode 100644
index 1181fa0..0000000
--- a/docs/doxygen/html/xbindex_8h.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbindex.h File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbindex.h File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-
-<p><a href="xbindex_8h_source.html">Go to the source code of this file.</a></p>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbindex_8h_source.html b/docs/doxygen/html/xbindex_8h_source.html
deleted file mode 100644
index 823e568..0000000
--- a/docs/doxygen/html/xbindex_8h_source.html
+++ /dev/null
@@ -1,592 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbindex.h Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbindex.h</div></div>
-</div><!--header-->
-<div class="contents">
-<a href="xbindex_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbindex.h</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014, 2018, 2022 Gary A Kunkel</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">*/</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#ifndef __XB_INDEX_H__</span></div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#define __XB_INDEX_H__</span></div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifdef XB_INDEX_SUPPORT</span></div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#define XB_ADD_KEY 1</span></div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#define XB_UPD_KEY 2</span></div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="preprocessor">#define XB_DEL_KEY 3</span></div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="comment">// structure for index nodes, each node contains information regarding one block</span></div>
-<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="keyword">struct </span>XBDLLEXPORT xbIxNode {</div>
-<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> xbIxNode *npPrev; <span class="comment">// pointer to previous node in chain</span></div>
-<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> xbIxNode *npNext; <span class="comment">// pointer to next node in chain</span></div>
-<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> xbUInt32 iCurKeyNo; <span class="comment">// current key number in the node, 0 offset</span></div>
-<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> xbUInt32 ulBlockNo; <span class="comment">// this block number</span></div>
-<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> xbUInt32 ulBufSize; <span class="comment">// size of cpBlockData</span></div>
-<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="keywordtype">char</span> *cpBlockData; <span class="comment">// pointer to memory version of block data stored in file</span></div>
-<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span>};</div>
-<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> </div>
-<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div>
-<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> </div>
-<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span><span class="keyword">class </span>XBDLLEXPORT xbIx : <span class="keyword">public</span> xbFile {</div>
-<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> xbIx( <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> * d );</div>
-<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <span class="keyword">virtual</span> ~xbIx();</div>
-<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> </div>
-<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="keyword">virtual</span> xbInt16 CheckTagIntegrity( <span class="keywordtype">void</span> *vpTag, xbInt16 iOpt ) = 0;</div>
-<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <span class="keyword">virtual</span> xbInt16 Close();</div>
-<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <span class="keyword">virtual</span> xbInt16 CreateTag( <span class="keyword">const</span> xbString &amp;sName, <span class="keyword">const</span> xbString &amp;sKey, <span class="keyword">const</span> xbString &amp;sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, <span class="keywordtype">void</span> **vpTag ) = 0;</div>
-<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <span class="keyword">virtual</span> xbInt16 FindKey( <span class="keywordtype">void</span> *vpTag, <span class="keyword">const</span> xbString &amp;sKey, xbInt16 iRetrieveSw );</div>
-<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="keyword">virtual</span> xbInt16 FindKey( <span class="keywordtype">void</span> *vpTag, <span class="keyword">const</span> <span class="keywordtype">char</span> * cKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw );</div>
-<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <span class="keyword">virtual</span> xbInt16 FindKey( <span class="keywordtype">void</span> *vpTag, <span class="keyword">const</span> xbBcd &amp;bcd, xbInt16 iRetrieveSw );</div>
-<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <span class="keyword">virtual</span> xbInt16 FindKey( <span class="keywordtype">void</span> *vpTag, <span class="keyword">const</span> xbDate &amp;dtKey, xbInt16 iRetrieveSw );</div>
-<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <span class="keyword">virtual</span> xbInt16 FindKey( <span class="keywordtype">void</span> *vpTag, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dKey, xbInt16 iRetrieveSw );</div>
-<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="keyword">virtual</span> xbInt16 FindKey( <span class="keywordtype">void</span> *vpTag, <span class="keyword">const</span> <span class="keywordtype">void</span> *vKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw ) = 0;</div>
-<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> *GetCurTag() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="keyword">virtual</span> <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *GetDbf() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> </div>
-<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <span class="keyword">virtual</span> xbString &amp;GetKeyExpression( <span class="keyword">const</span> <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span> = 0;</div>
-<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keyword">virtual</span> xbString &amp;GetKeyFilter( <span class="keyword">const</span> <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span> = 0;</div>
-<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keyword">virtual</span> <span class="keywordtype">char</span> GetKeyType( <span class="keyword">const</span> <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span> = 0;</div>
-<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <span class="keyword">virtual</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetLocked() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> </div>
-<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="keyword">virtual</span> xbInt16 GetFirstKey( <span class="keywordtype">void</span> *vpTag, xbInt16 iRetrieveSw ) = 0;</div>
-<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <span class="keyword">virtual</span> xbInt16 GetFirstKey( <span class="keywordtype">void</span> *vpTag );</div>
-<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> <span class="keyword">virtual</span> xbInt16 GetFirstKey();</div>
-<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> </div>
-<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <span class="keyword">virtual</span> xbInt16 GetLastKey( <span class="keywordtype">void</span> *vpTag, xbInt16 lRetrieveSw ) = 0;</div>
-<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="keyword">virtual</span> xbInt16 GetLastKey( <span class="keywordtype">void</span> *vpTag );</div>
-<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="keyword">virtual</span> xbInt16 GetLastKey();</div>
-<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> </div>
-<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> <span class="keyword">virtual</span> xbInt16 GetNextKey( <span class="keywordtype">void</span> *vpTag, xbInt16 iRetrieveSw ) = 0;</div>
-<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> <span class="keyword">virtual</span> xbInt16 GetNextKey( <span class="keywordtype">void</span> *vpTag );</div>
-<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="keyword">virtual</span> xbInt16 GetNextKey();</div>
-<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> </div>
-<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="keyword">virtual</span> xbInt16 GetPrevKey( <span class="keywordtype">void</span> *vpTag, xbInt16 iRetrieveSw ) = 0;</div>
-<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="keyword">virtual</span> xbInt16 GetPrevKey( <span class="keywordtype">void</span> *vpTag );</div>
-<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="keyword">virtual</span> xbInt16 GetPrevKey();</div>
-<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> </div>
-<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> *GetTag( xbInt16 iTagNo ) <span class="keyword">const</span> = 0;</div>
-<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> *GetTag( xbString &amp;sTagName ) <span class="keyword">const</span> = 0;</div>
-<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> <span class="keyword">virtual</span> xbInt16 GetTagCount() <span class="keyword">const</span> = 0;</div>
-<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> </div>
-<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <span class="keyword">virtual</span> xbString &amp;GetTagName( <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span> = 0;</div>
-<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * GetTagName( <span class="keywordtype">void</span> *vpTag, xbInt16 iOpt ) <span class="keyword">const</span> = 0;</div>
-<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> GetTagName( <span class="keywordtype">void</span> *vpTag, xbString &amp;sTagName ) {};</div>
-<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> </div>
-<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> <span class="keyword">virtual</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetUnique( <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span> = 0;</div>
-<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> <span class="keyword">virtual</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetSortOrder( <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span> = 0;</div>
-<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> </div>
-<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <span class="keyword">virtual</span> xbInt16 Open( <span class="keyword">const</span> xbString &amp;sFileName );</div>
-<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> <span class="keyword">virtual</span> xbInt16 Reindex( <span class="keywordtype">void</span> **vpTag ) = 0;</div>
-<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> <span class="keyword">virtual</span> xbInt16 SetCurTag( xbInt16 iTagNo ) = 0;</div>
-<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="keyword">virtual</span> xbInt16 SetCurTag( xbString &amp;sTagName ) = 0;</div>
-<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> SetCurTag( <span class="keywordtype">void</span> * vpCurTag );</div>
-<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> SetLocked( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bLocked );</div>
-<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> </div>
-<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> TestStub( <span class="keywordtype">char</span> *s, <span class="keywordtype">void</span> *vpTag ) {};</div>
-<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> </div>
-<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> </div>
-<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
-<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> <span class="keyword">virtual</span> xbInt16 DumpFreeBlocks( xbInt16 iOpt = 0 ) { <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a>; }</div>
-<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> <span class="keyword">virtual</span> xbInt16 DumpHeader( xbInt16 iDestOpt = 0, xbInt16 iFmtOpt = 0 ) = 0;</div>
-<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> <span class="keyword">virtual</span> xbInt16 DumpIxForTag( <span class="keywordtype">void</span> *vpTag, xbInt16 iOutputOpt ) = 0;</div>
-<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> DumpIxNodeChain( <span class="keywordtype">void</span> *vpTag, xbInt16 iOutputOpt ) <span class="keyword">const</span> = 0;</div>
-<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> <span class="keyword">virtual</span> xbInt16 DumpNode( <span class="keywordtype">void</span> * vpTag, xbIxNode * pNode, xbInt16 iOption ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <span class="keyword">virtual</span> xbInt16 DumpTagBlocks( xbInt16 iOpt = 1, <span class="keywordtype">void</span> *vpTag = NULL ) = 0;</div>
-<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> </div>
-<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> </div>
-<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> <span class="keyword">protected</span>:</div>
-<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a>;</div>
-<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> </div>
-<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> <span class="keyword">virtual</span> xbInt16 AddKey( <span class="keywordtype">void</span> *vpTag, xbUInt32 ulRecNo ) = 0;</div>
-<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> <span class="keyword">virtual</span> xbInt16 AddKeys( xbUInt32 ulRecNo );</div>
-<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> <span class="keyword">virtual</span> xbIxNode *AllocateIxNode( xbUInt32 ulBufSize = 0, xbInt16 iOption = 0 );</div>
-<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> <span class="keyword">virtual</span> xbInt16 BSearchBlock( <span class="keywordtype">char</span> cKeyType, xbIxNode *npNode, xbInt32 lKeyLen, <span class="keyword">const</span> <span class="keywordtype">void</span> *vpKey, xbInt32 lSearchKeyLen, xbInt16 &amp;iCompRc, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bDescending = <a class="code hl_define" href="xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc">xbFalse</a> ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> <span class="keyword">virtual</span> xbInt16 CheckForDupKeys();</div>
-<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> <span class="keyword">virtual</span> xbInt16 CheckForDupKey( <span class="keywordtype">void</span> *vpTag ) = 0;</div>
-<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> <span class="keyword">virtual</span> xbInt16 CompareKey( <span class="keywordtype">char</span> cKeyType, <span class="keyword">const</span> <span class="keywordtype">void</span> *v1, <span class="keyword">const</span> <span class="keywordtype">void</span> *v2, <span class="keywordtype">size_t</span> lKeyLen ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> <span class="keyword">virtual</span> xbInt16 CreateKeys( xbInt16 iOpt );</div>
-<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> <span class="keyword">virtual</span> xbInt16 CreateKey( <span class="keywordtype">void</span> * vpTag, xbInt16 iOpt ) = 0;</div>
-<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <span class="keyword">virtual</span> xbInt16 DeleteFromNode( <span class="keywordtype">void</span> *vpTag, xbIxNode * npNode, xbInt16 iSlotNo ) = 0;</div>
-<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span><span class="comment">// virtual xbInt16 DeleteKeys( xbUInt32 ulRecNo );</span></div>
-<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> <span class="keyword">virtual</span> xbInt16 DeleteKeys();</div>
-<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> <span class="keyword">virtual</span> xbInt16 DeleteKey( <span class="keywordtype">void</span> *vpTag ) = 0;</div>
-<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> </div>
-<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> <span class="keyword">virtual</span> xbInt16 DeleteTag( <span class="keywordtype">void</span> *vpTag ) = 0;</div>
-<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> </div>
-<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> </div>
-<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> <span class="keyword">virtual</span> xbInt16 FindKeyForCurRec( <span class="keywordtype">void</span> *vpTag ) = 0;</div>
-<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> <span class="keyword">virtual</span> xbIxNode *FreeNodeChain( xbIxNode *np );</div>
-<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> <span class="keyword">virtual</span> xbInt16 GetBlock( <span class="keywordtype">void</span> *vpTag, xbUInt32 ulBlockNo, xbInt16 iOpt, xbUInt32 ulAddlBuf = 0 );</div>
-<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span><span class="comment">// virtual xbBool GetIndexUpdated() const = 0;</span></div>
-<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> <span class="keyword">virtual</span> xbInt32 GetKeyCount( xbIxNode *npNode ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> <span class="keyword">virtual</span> <span class="keywordtype">char</span> *GetKeyData( xbIxNode *npNode, xbInt16 iKeyNo, xbInt16 iKeyItemLen ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> <span class="keyword">virtual</span> xbInt16 GetKeySts( <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span> = 0;</div>
-<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> <span class="keyword">virtual</span> xbInt16 GetLastKey( xbUInt32 ulNodeNo, <span class="keywordtype">void</span> *vpTag, xbInt16 lRetrieveSw ) = 0;</div>
-<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> <span class="keyword">virtual</span> xbInt16 InsertNodeL( <span class="keywordtype">void</span> *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, <span class="keywordtype">char</span> * cpKeyBuf, xbUInt32 uiPtr ) = 0;</div>
-<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> <span class="keyword">virtual</span> xbInt16 InsertNodeI( <span class="keywordtype">void</span> *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, xbUInt32 uiPtr ) = 0;</div>
-<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> <span class="keyword">virtual</span> xbInt16 KeyExists( <span class="keywordtype">void</span> * ) = 0;</div>
-<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span><span class="comment">// virtual xbInt16 KeyUpdated( void *vpTag ) const = 0;</span></div>
-<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> NodeFree( xbIxNode * ixNode );</div>
-<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> <span class="keyword">virtual</span> xbInt16 ReadHeadBlock( xbInt16 iOpt = 0 ) = 0;</div>
-<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> SetDbf( <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *dbf );</div>
-<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> <span class="keyword">virtual</span> xbInt16 SplitNodeL( <span class="keywordtype">void</span> *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, <span class="keywordtype">char</span> *cpKeyBuf, xbUInt32 uiPtr ) = 0;</div>
-<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <span class="keyword">virtual</span> xbInt16 SplitNodeI( <span class="keywordtype">void</span> *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 uiPtr ) = 0;</div>
-<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> <span class="keyword">virtual</span> xbInt16 UpdateTagKey( <span class="keywordtype">char</span> cAction, <span class="keywordtype">void</span> *vpTag, xbUInt32 ulRecNo = 0 ) = 0;</div>
-<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> <span class="keyword">virtual</span> xbInt16 WriteHeadBlock( xbInt16 iOption ) = 0;</div>
-<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> </div>
-<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *dbf;</div>
-<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> <span class="keywordtype">char</span> *cNodeBuf; <span class="comment">// pointer to memory for processing in a block of index data</span></div>
-<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> <span class="keywordtype">void</span> *vpCurTag; <span class="comment">// pointer to active tag. Single index files have only one tag</span></div>
-<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> </div>
-<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> AppendNodeChain( <span class="keywordtype">void</span> *vpTag, xbIxNode *npNode ) = 0;</div>
-<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> <span class="keyword">virtual</span> xbInt16 GetKeyPtr( <span class="keywordtype">void</span> *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 &amp;ulKeyPtr ) <span class="keyword">const</span> = 0;</div>
-<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> <span class="keyword">virtual</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsLeaf( <span class="keywordtype">void</span> *vpTag, xbIxNode *npNode ) <span class="keyword">const</span> = 0;</div>
-<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> <span class="comment">// virtual void SetCurNode( void *vpTag, xbIxNode *npNode ) = 0;</span></div>
-<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> </div>
-<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bLocked; <span class="comment">// index file locked?</span></div>
-<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span>};</div>
-<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> </div>
-<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span><span class="preprocessor">#ifdef XB_NDX_SUPPORT</span></div>
-<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> </div>
-<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span><span class="preprocessor">#define XB_NDX_BLOCK_SIZE 512</span></div>
-<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> </div>
-<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> </div>
-<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span><span class="keyword">struct </span>XBDLLEXPORT xbNdxTag {</div>
-<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> </div>
-<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> <span class="comment">// NDX File Header Fields</span></div>
-<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> xbUInt32 ulRootBlock; <span class="comment">// header node is 0</span></div>
-<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> xbUInt32 ulTotalBlocks; <span class="comment">// includes header node</span></div>
-<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> <span class="keywordtype">char</span> cKeyType; <span class="comment">// C = Char, F = Numeric, D = Date</span></div>
-<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> xbInt16 iKeyLen; <span class="comment">// length of key data</span></div>
-<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> xbInt16 iKeysPerBlock; <span class="comment">// max number keys per block &lt;=100</span></div>
-<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> xbInt16 iKeyType; <span class="comment">// 00 = Char, 01 = Numeric</span></div>
-<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> xbInt16 iKeyItemLen; <span class="comment">// KeyLen + 8 bytes</span></div>
-<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> <span class="keywordtype">char</span> cSerNo; <span class="comment">// rolling incrementing serial number +1 on each index update</span></div>
-<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> xbInt16 iUnique; <span class="comment">// True if unique</span></div>
-<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> xbString sKeyExpression; <span class="comment">// index expression</span></div>
-<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> <span class="comment">// end of NDX Header field</span></div>
-<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> </div>
-<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> xbExp *exp; <span class="comment">// pointer to expression for expression keys</span></div>
-<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> time_t tNodeChainTs; <span class="comment">// node chain time stamp</span></div>
-<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> xbIxNode *npNodeChain;</div>
-<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> xbIxNode *npCurNode;</div>
-<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> <span class="keywordtype">char</span> *cpKeyBuf; <span class="comment">// key buffer, for searches and adds</span></div>
-<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> <span class="keywordtype">char</span> *cpKeyBuf2; <span class="comment">// key buffer, for deletes</span></div>
-<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> xbString sTagName; <span class="comment">// tag name - is the file name without the extension</span></div>
-<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span><span class="comment">// xbInt16 iKeyUpdated; // key updated? set in method KeyUpdated, checked in AddKey and DeleteKey routines</span></div>
-<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bFoundSts; <span class="comment">// key found? used to determine if new key should be added in XB_EMULATE_DBASE mode in AddKey</span></div>
-<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> </div>
-<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> </div>
-<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> xbInt16 iKeySts; <span class="comment">// key updated? set in method CreateKey, checked in AddKey and DeleteKey routines</span></div>
-<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> <span class="comment">// old key filtered new key filtered iKeySts</span></div>
-<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> <span class="comment">// Y Y XB_UPD_KEY 2 - update key if changed (delete and add)</span></div>
-<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> <span class="comment">// Y N XB_DEL_KEY 3 - delete key</span></div>
-<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> <span class="comment">// N Y XB_ADD_KEY 1 - add key</span></div>
-<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> <span class="comment">// N N 0 - no update</span></div>
-<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> </div>
-<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span>};</div>
-<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> </div>
-<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> </div>
-<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span><span class="keyword">class </span>XBDLLEXPORT xbIxNdx : <span class="keyword">public</span> xbIx {</div>
-<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> xbIxNdx( <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> * d );</div>
-<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> ~xbIxNdx();</div>
-<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> xbInt16 CheckTagIntegrity( <span class="keywordtype">void</span> *vpTag, xbInt16 iOpt );</div>
-<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> xbInt16 CreateTag( <span class="keyword">const</span> xbString &amp;sName, <span class="keyword">const</span> xbString &amp;sKey, <span class="keyword">const</span> xbString &amp;sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, <span class="keywordtype">void</span> **vpTag );</div>
-<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span><span class="comment">// xbInt16 DeleteTag( void *vpTag );</span></div>
-<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> xbInt16 FindKey( <span class="keywordtype">void</span> *vpTag, <span class="keyword">const</span> <span class="keywordtype">void</span> *vpKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw );</div>
-<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> xbInt16 GetFirstKey( <span class="keywordtype">void</span> *vpTag, xbInt16 iRetrieveSw );</div>
-<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> </div>
-<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> xbInt16 GetLastKey( <span class="keywordtype">void</span> *vpTag, xbInt16 iRetrieveSw = 1 );</div>
-<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> xbInt16 GetNextKey( <span class="keywordtype">void</span> *vpTag, xbInt16 iRetrieveSw = 1 );</div>
-<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> xbInt16 GetPrevKey( <span class="keywordtype">void</span> *vpTag, xbInt16 iRetrieveSw = 1 );</div>
-<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> xbInt32 GetKeyLen ( <span class="keyword">const</span> <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> <span class="keywordtype">char</span> GetKeyType ( <span class="keyword">const</span> <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> xbString &amp;GetKeyExpression( <span class="keyword">const</span> <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> xbString &amp;GetKeyFilter( <span class="keyword">const</span> <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> <span class="keywordtype">void</span> *GetTag( xbInt16 iTagNo ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> <span class="keywordtype">void</span> *GetTag( xbString &amp;sTagName ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> xbString &amp;GetTagName( <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * GetTagName( <span class="keywordtype">void</span> *vpTag, xbInt16 iOpt ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> </div>
-<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span> xbInt16 GetTagCount() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetUnique( <span class="keywordtype">void</span> *vpTag = NULL ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetSortOrder( <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span> xbInt16 Reindex( <span class="keywordtype">void</span> **vpTag );</div>
-<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span> xbInt16 SetCurTag( xbInt16 iTagNo );</div>
-<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> xbInt16 SetCurTag( xbString &amp;sTagName );</div>
-<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span> </div>
-<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> </div>
-<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span> </div>
-<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
-<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> xbInt16 DumpTagBlocks( xbInt16 iOpt = 1, <span class="keywordtype">void</span> *vpTag = NULL );</div>
-<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> xbInt16 DumpHeader( xbInt16 iOpt = 0, xbInt16 iFmt = 0 );</div>
-<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> xbInt16 DumpIxForTag( <span class="keywordtype">void</span> *vpTag, xbInt16 iOutputOpt );</div>
-<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> <span class="keywordtype">void</span> DumpIxNodeChain( <span class="keywordtype">void</span> *vpTag, xbInt16 iOutputOpt ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> xbInt16 DumpNode( <span class="keywordtype">void</span> * vpTag, xbIxNode * pNode, xbInt16 iOption ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span> </div>
-<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> <span class="keyword">protected</span>:</div>
-<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a>;</div>
-<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> xbInt16 AddKey( <span class="keywordtype">void</span> *vpTag, xbUInt32 ulRecNo );</div>
-<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> xbIxNode *AllocateIxNode( xbUInt32 ulBufSize = 0, xbInt16 iOption = 0 );</div>
-<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> xbInt16 CheckForDupKey( <span class="keywordtype">void</span> *vpTag );</div>
-<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> xbIxNode *CreateIxNode( xbUInt32 ulBufSize );</div>
-<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span> xbInt16 CreateKey( <span class="keywordtype">void</span> * vpTag, xbInt16 iOpt );</div>
-<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span> xbInt16 DeleteFromNode( <span class="keywordtype">void</span> *vpTag, xbIxNode * npNode, xbInt16 iSlotNo );</div>
-<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> xbInt16 DeleteKey( <span class="keywordtype">void</span> *vpTag );</div>
-<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> </div>
-<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> xbInt16 DeleteTag( <span class="keywordtype">void</span> *vpTag );</div>
-<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span> </div>
-<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> xbInt16 FindKeyForCurRec( <span class="keywordtype">void</span> *vpTag );</div>
-<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span><span class="comment">// xbBool GetIndexUpdated() const;</span></div>
-<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span> xbInt16 GetKeyTypeN( <span class="keyword">const</span> <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span> xbInt16 GetKeySts( <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span> xbInt16 GetLastKey( xbUInt32 ulNodeNo, <span class="keywordtype">void</span> *vpTag, xbInt16 iRetrieveSw = 1 );</div>
-<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span> xbInt16 InsertNodeI( <span class="keywordtype">void</span> *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, xbUInt32 uiPtr );</div>
-<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> xbInt16 InsertNodeL( <span class="keywordtype">void</span> *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, <span class="keywordtype">char</span> * cpKeyBuf, xbUInt32 uiPtr );</div>
-<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span> xbInt16 KeyExists( <span class="keywordtype">void</span> *vpTag = NULL );</div>
-<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span><span class="comment">// xbBool KeyFiltered( void *vpTag ) const;</span></div>
-<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span><span class="comment">// xbInt16 KeyUpdated( void *vpTag ) const;</span></div>
-<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span> xbInt16 ReadHeadBlock(xbInt16 iOpt); <span class="comment">// read the header node of the disk NDX file</span></div>
-<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span> xbInt16 SplitNodeI( <span class="keywordtype">void</span> *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 uiPtr );</div>
-<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> xbInt16 SplitNodeL( <span class="keywordtype">void</span> *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, <span class="keywordtype">char</span> *cpKeyBuf, xbUInt32 uiPtr );</div>
-<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span> xbInt16 UpdateTagKey( <span class="keywordtype">char</span> cAction, <span class="keywordtype">void</span> *vpTag, xbUInt32 ulRecNo = 0 );</div>
-<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span> xbInt16 WriteHeadBlock( xbInt16 iOption );</div>
-<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span> </div>
-<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span> <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span> xbInt16 AddKeyNewRoot( xbNdxTag *npTag, xbIxNode *npLeft, xbIxNode *npRight );</div>
-<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span> <span class="keywordtype">void</span> AppendNodeChain( <span class="keywordtype">void</span> *vpTag, xbIxNode *npNode );</div>
-<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"> 374</span> xbInt16 GetDbfPtr( <span class="keywordtype">void</span> *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 &amp;ulDbfPtr ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span> xbInt16 GetKeyPtr( <span class="keywordtype">void</span> *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 &amp;ulKeyPtr ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span> xbInt16 GetLastKeyForBlockNo( <span class="keywordtype">void</span> *vpTag, xbUInt32 ulBlockNo, <span class="keywordtype">char</span> *cpKeyBuf );</div>
-<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsLeaf( <span class="keywordtype">void</span> *vpTag, xbIxNode *npNode ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span> xbInt16 KeySetPosAdd( xbNdxTag *npTag, xbUInt32 ulAddKeyRecNo );</div>
-<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span> xbInt16 KeySetPosDel( xbNdxTag *npTag );</div>
-<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span> <span class="comment">// void SetCurNode( void *vpTag, xbIxNode *np );</span></div>
-<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span> xbNdxTag *ndxTag;</div>
-<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span>};</div>
-<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span> </div>
-<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span><span class="preprocessor">#endif </span><span class="comment">/* XB_NDX_SUPPORT */</span><span class="preprocessor"></span></div>
-<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"> 385</span> </div>
-<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span> </div>
-<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span><span class="preprocessor">#ifdef XB_MDX_SUPPORT</span></div>
-<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span><span class="comment">//#define XB_MDX_BLOCK_SIZE 1024</span></div>
-<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span> </div>
-<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span><span class="keyword">struct </span>XBDLLEXPORT xbMdxTag {</div>
-<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span> </div>
-<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"> 392</span> <span class="comment">// next 7 fields comprise the tag table entry</span></div>
-<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span> xbUInt32 ulTagHdrPageNo; <span class="comment">// 512 byte page number, NOT block number</span></div>
-<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span> <span class="keywordtype">char</span> cTagName[11];</div>
-<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span> <span class="keywordtype">char</span> cKeyFmt; <span class="comment">// always 0x10 w/ DBase V7</span></div>
-<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span> <span class="keywordtype">char</span> cLeftChild; <span class="comment">// cFwdTagThread</span></div>
-<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span> <span class="keywordtype">char</span> cRightChild; <span class="comment">// cFwdTagThread2</span></div>
-<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span> <span class="keywordtype">char</span> cParent; <span class="comment">// cBwdTagThread</span></div>
-<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span> <span class="keywordtype">char</span> c2;</div>
-<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span> <span class="keywordtype">char</span> cKeyType; <span class="comment">// C,D,N</span></div>
-<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span> </div>
-<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span> xbUInt32 ulRootPage; <span class="comment">// 512 byte page number, NOT block number</span></div>
-<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"> 403</span> xbUInt32 ulTagSize; <span class="comment">// Number of 512 byte pages allocated to the tag. Tag size of two is a single 1024 block</span></div>
-<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span> </div>
-<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</span> <span class="keywordtype">char</span> cKeyFmt2; <span class="comment">// 0x10 - base</span></div>
-<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"> 406</span> <span class="comment">// 0x08 - descending</span></div>
-<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"> 407</span> <span class="comment">// 0x40 - unique</span></div>
-<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"> 408</span> <span class="keywordtype">char</span> cKeyType2;</div>
-<div class="line"><a id="l00409" name="l00409"></a><span class="lineno"> 409</span> <span class="comment">// one unused byte fits here</span></div>
-<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span> </div>
-<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span> <span class="keywordtype">char</span> cTag11; <span class="comment">// dbase sets to 0x1B</span></div>
-<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"> 412</span> </div>
-<div class="line"><a id="l00413" name="l00413"></a><span class="lineno"> 413</span> xbInt16 iKeyLen;</div>
-<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span> xbInt16 iKeysPerBlock;</div>
-<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"> 415</span> xbInt16 iSecKeyType;</div>
-<div class="line"><a id="l00416" name="l00416"></a><span class="lineno"> 416</span> xbInt16 iKeyItemLen; <span class="comment">// iKeyLen + 4</span></div>
-<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> </div>
-<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span> <span class="keywordtype">char</span> cSerialNo; <span class="comment">// Increments +1 for each tag update</span></div>
-<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> <span class="keywordtype">char</span> cUnique;</div>
-<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span> xbString *sKeyExp; <span class="comment">// Key expression</span></div>
-<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span> </div>
-<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"> 422</span> <span class="keywordtype">char</span> cHasFilter; <span class="comment">// 0x00 or 0x01</span></div>
-<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span> <span class="keywordtype">char</span> cHasKeys; <span class="comment">// 0x00 or 0x01</span></div>
-<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span> </div>
-<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span> xbUInt32 ulLeftChild; <span class="comment">// dbase 7 sets this to the root page on tag creation</span></div>
-<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"> 426</span> xbUInt32 ulRightChild; <span class="comment">// dbase 7 sets this to the root page on tag creation</span></div>
-<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"> 427</span> </div>
-<div class="line"><a id="l00428" name="l00428"></a><span class="lineno"> 428</span> <span class="keywordtype">char</span> cTagYY;</div>
-<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span> <span class="keywordtype">char</span> cTagMM;</div>
-<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"> 430</span> <span class="keywordtype">char</span> cTagDD;</div>
-<div class="line"><a id="l00431" name="l00431"></a><span class="lineno"> 431</span> </div>
-<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"> 432</span> <span class="keywordtype">char</span> cKeyFmt3; <span class="comment">// dbase 7 sets this 0x01 if discreet field or 0x00 if calculated or combination field key expression on tag creation</span></div>
-<div class="line"><a id="l00433" name="l00433"></a><span class="lineno"> 433</span> </div>
-<div class="line"><a id="l00434" name="l00434"></a><span class="lineno"> 434</span> xbString *sFiltExp; <span class="comment">// Filter expression</span></div>
-<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"> 435</span> </div>
-<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"> 436</span> time_t tNodeChainTs;</div>
-<div class="line"><a id="l00437" name="l00437"></a><span class="lineno"> 437</span> xbIxNode *npNodeChain;</div>
-<div class="line"><a id="l00438" name="l00438"></a><span class="lineno"> 438</span> xbIxNode *npCurNode;</div>
-<div class="line"><a id="l00439" name="l00439"></a><span class="lineno"> 439</span> xbExp *exp; <span class="comment">// pointer to expression for expression based tags</span></div>
-<div class="line"><a id="l00440" name="l00440"></a><span class="lineno"> 440</span> xbExp *filter; <span class="comment">// pointer to expression for index filter</span></div>
-<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"> 441</span> </div>
-<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"> 442</span> <span class="keywordtype">char</span> *cpKeyBuf; <span class="comment">// key buffer</span></div>
-<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"> 443</span> <span class="keywordtype">char</span> *cpKeyBuf2; <span class="comment">// key buffer</span></div>
-<div class="line"><a id="l00444" name="l00444"></a><span class="lineno"> 444</span><span class="comment">// xbBool iKeyUpdated; // key updated? set in method CreateKey, checked in AddKey and DeleteKey routines</span></div>
-<div class="line"><a id="l00445" name="l00445"></a><span class="lineno"> 445</span> <span class="comment">// 0 - no update</span></div>
-<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"> 446</span> <span class="comment">// 1 - Add</span></div>
-<div class="line"><a id="l00447" name="l00447"></a><span class="lineno"> 447</span> <span class="comment">// 2 - Update</span></div>
-<div class="line"><a id="l00448" name="l00448"></a><span class="lineno"> 448</span> <span class="comment">// 3 - Delete</span></div>
-<div class="line"><a id="l00449" name="l00449"></a><span class="lineno"> 449</span><span class="comment">// xbBool bKeyFiltered; // key filtered? True if included key, False if excluded key. Set in method CreateKey, checked in AddKey and DeleteKey routines</span></div>
-<div class="line"><a id="l00450" name="l00450"></a><span class="lineno"> 450</span> xbString *sTagName; <span class="comment">// string tag name</span></div>
-<div class="line"><a id="l00451" name="l00451"></a><span class="lineno"> 451</span> </div>
-<div class="line"><a id="l00452" name="l00452"></a><span class="lineno"> 452</span> </div>
-<div class="line"><a id="l00453" name="l00453"></a><span class="lineno"> 453</span> xbMdxTag *next;</div>
-<div class="line"><a id="l00454" name="l00454"></a><span class="lineno"> 454</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bFoundSts; <span class="comment">// key found? used to determine if new key should be added in XB_EMULATE_DBASE mode in AddKey</span></div>
-<div class="line"><a id="l00455" name="l00455"></a><span class="lineno"> 455</span> </div>
-<div class="line"><a id="l00456" name="l00456"></a><span class="lineno"> 456</span> </div>
-<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"> 457</span> xbInt16 iKeySts; <span class="comment">// key updated? set in method CreateKey, checked in AddKey and DeleteKey routines</span></div>
-<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"> 458</span> <span class="comment">// old key filtered new key filtered iKeySts</span></div>
-<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"> 459</span> <span class="comment">// Y Y XB_UPD_KEY 2 - update key if changed (delete and add)</span></div>
-<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"> 460</span> <span class="comment">// Y N XB_DEL_KEY 3 - delete key</span></div>
-<div class="line"><a id="l00461" name="l00461"></a><span class="lineno"> 461</span> <span class="comment">// N Y XB_ADD_KEY 1 - add key</span></div>
-<div class="line"><a id="l00462" name="l00462"></a><span class="lineno"> 462</span> <span class="comment">// N N 0 - no update</span></div>
-<div class="line"><a id="l00463" name="l00463"></a><span class="lineno"> 463</span> </div>
-<div class="line"><a id="l00464" name="l00464"></a><span class="lineno"> 464</span> </div>
-<div class="line"><a id="l00465" name="l00465"></a><span class="lineno"> 465</span>};</div>
-<div class="line"><a id="l00466" name="l00466"></a><span class="lineno"> 466</span> </div>
-<div class="line"><a id="l00467" name="l00467"></a><span class="lineno"> 467</span> </div>
-<div class="line"><a id="l00468" name="l00468"></a><span class="lineno"> 468</span><span class="keyword">class </span>XBDLLEXPORT xbIxMdx : <span class="keyword">public</span> xbIx {</div>
-<div class="line"><a id="l00469" name="l00469"></a><span class="lineno"> 469</span> <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00470" name="l00470"></a><span class="lineno"> 470</span> xbIxMdx( <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> * d );</div>
-<div class="line"><a id="l00471" name="l00471"></a><span class="lineno"> 471</span> ~xbIxMdx();</div>
-<div class="line"><a id="l00472" name="l00472"></a><span class="lineno"> 472</span> xbInt16 CheckTagIntegrity( <span class="keywordtype">void</span> *vpTag, xbInt16 iOpt );</div>
-<div class="line"><a id="l00473" name="l00473"></a><span class="lineno"> 473</span> xbInt16 CreateTag( <span class="keyword">const</span> xbString &amp;sName, <span class="keyword">const</span> xbString &amp;sKey, <span class="keyword">const</span> xbString &amp;sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, <span class="keywordtype">void</span> **vpTag );</div>
-<div class="line"><a id="l00474" name="l00474"></a><span class="lineno"> 474</span><span class="comment">// xbInt16 DeleteTag( void *vpTag );</span></div>
-<div class="line"><a id="l00475" name="l00475"></a><span class="lineno"> 475</span> xbInt16 FindKey( <span class="keywordtype">void</span> *vpTag, <span class="keyword">const</span> <span class="keywordtype">void</span> *vKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw );</div>
-<div class="line"><a id="l00476" name="l00476"></a><span class="lineno"> 476</span> xbInt16 FindKey( <span class="keywordtype">void</span> *vpTag, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dKey, xbInt16 iRetrieveSw );</div>
-<div class="line"><a id="l00477" name="l00477"></a><span class="lineno"> 477</span> xbInt16 GetFirstKey( <span class="keywordtype">void</span> *vpTag, xbInt16 lRetrieveSw );</div>
-<div class="line"><a id="l00478" name="l00478"></a><span class="lineno"> 478</span> xbString &amp;GetKeyExpression( <span class="keyword">const</span> <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00479" name="l00479"></a><span class="lineno"> 479</span> xbString &amp;GetKeyFilter( <span class="keyword">const</span> <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00480" name="l00480"></a><span class="lineno"> 480</span> <span class="keywordtype">char</span> GetKeyType( <span class="keyword">const</span> <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00481" name="l00481"></a><span class="lineno"> 481</span> xbInt16 GetLastKey( <span class="keywordtype">void</span> *vpTag, xbInt16 lRetrieveSw );</div>
-<div class="line"><a id="l00482" name="l00482"></a><span class="lineno"> 482</span> xbInt16 GetNextKey( <span class="keywordtype">void</span> *vpTag, xbInt16 lRetrieveSw );</div>
-<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"> 483</span> xbInt16 GetPrevKey( <span class="keywordtype">void</span> *vpTag, xbInt16 lRetrieveSw );</div>
-<div class="line"><a id="l00484" name="l00484"></a><span class="lineno"> 484</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetReuseEmptyNodesSw() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"> 485</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetSortOrder( <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</span> <span class="keywordtype">void</span> *GetTag( xbInt16 iTagNo ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00487" name="l00487"></a><span class="lineno"> 487</span> <span class="keywordtype">void</span> *GetTag( xbString &amp;sTagName ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00488" name="l00488"></a><span class="lineno"> 488</span> xbInt16 GetTagCount() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00489" name="l00489"></a><span class="lineno"> 489</span> </div>
-<div class="line"><a id="l00490" name="l00490"></a><span class="lineno"> 490</span> xbString &amp;GetTagName( <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00491" name="l00491"></a><span class="lineno"> 491</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * GetTagName( <span class="keywordtype">void</span> *vpTag, xbInt16 iOpt ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00492" name="l00492"></a><span class="lineno"> 492</span> <span class="keywordtype">void</span> GetTagName( <span class="keywordtype">void</span> *vpTag, xbString &amp;sTagName );</div>
-<div class="line"><a id="l00493" name="l00493"></a><span class="lineno"> 493</span> </div>
-<div class="line"><a id="l00494" name="l00494"></a><span class="lineno"> 494</span> xbInt16 GetUnique( <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00495" name="l00495"></a><span class="lineno"> 495</span> xbInt16 Reindex( <span class="keywordtype">void</span> **vpTag );</div>
-<div class="line"><a id="l00496" name="l00496"></a><span class="lineno"> 496</span> xbInt16 SetCurTag( xbInt16 iTagNo );</div>
-<div class="line"><a id="l00497" name="l00497"></a><span class="lineno"> 497</span> xbInt16 SetCurTag( xbString &amp;sTagName );</div>
-<div class="line"><a id="l00498" name="l00498"></a><span class="lineno"> 498</span> <span class="keywordtype">void</span> SetReuseEmptyNodesSw( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bReuse );</div>
-<div class="line"><a id="l00499" name="l00499"></a><span class="lineno"> 499</span> </div>
-<div class="line"><a id="l00500" name="l00500"></a><span class="lineno"> 500</span> <span class="keywordtype">void</span> TestStub( <span class="keywordtype">char</span> *s, <span class="keywordtype">void</span> *vpTag );</div>
-<div class="line"><a id="l00501" name="l00501"></a><span class="lineno"> 501</span> </div>
-<div class="line"><a id="l00502" name="l00502"></a><span class="lineno"> 502</span> <span class="keyword">protected</span>:</div>
-<div class="line"><a id="l00503" name="l00503"></a><span class="lineno"> 503</span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a>;</div>
-<div class="line"><a id="l00504" name="l00504"></a><span class="lineno"> 504</span> </div>
-<div class="line"><a id="l00505" name="l00505"></a><span class="lineno"> 505</span> xbInt16 AddKey( <span class="keywordtype">void</span> *vpTag, xbUInt32 ulRecNo );</div>
-<div class="line"><a id="l00506" name="l00506"></a><span class="lineno"> 506</span> xbIxNode *AllocateIxNode( xbMdxTag * mpTag, xbUInt32 ulBufSize, xbUInt32 ulBlock2 );</div>
-<div class="line"><a id="l00507" name="l00507"></a><span class="lineno"> 507</span> xbInt16 CheckForDupKey( <span class="keywordtype">void</span> *vpTag );</div>
-<div class="line"><a id="l00508" name="l00508"></a><span class="lineno"> 508</span> xbInt16 Close();</div>
-<div class="line"><a id="l00509" name="l00509"></a><span class="lineno"> 509</span> xbInt16 CreateKey( <span class="keywordtype">void</span> * vpTag, xbInt16 iOpt );</div>
-<div class="line"><a id="l00510" name="l00510"></a><span class="lineno"> 510</span> xbInt16 DeleteFromNode( <span class="keywordtype">void</span> *vpTag, xbIxNode * npNode, xbInt16 iSlotNo );</div>
-<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"> 511</span> xbInt16 DeleteKey( <span class="keywordtype">void</span> *vpTag );</div>
-<div class="line"><a id="l00512" name="l00512"></a><span class="lineno"> 512</span> </div>
-<div class="line"><a id="l00513" name="l00513"></a><span class="lineno"> 513</span> xbInt16 DeleteTag( <span class="keywordtype">void</span> *vpTag );</div>
-<div class="line"><a id="l00514" name="l00514"></a><span class="lineno"> 514</span> </div>
-<div class="line"><a id="l00515" name="l00515"></a><span class="lineno"> 515</span> xbInt16 FindKeyForCurRec( <span class="keywordtype">void</span> *vpTag );</div>
-<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"> 516</span> xbInt16 GetKeySts( <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00517" name="l00517"></a><span class="lineno"> 517</span> xbInt16 GetLastKey( xbUInt32 ulBlockNo, <span class="keywordtype">void</span> *vpTag, xbInt16 lRetrieveSw );</div>
-<div class="line"><a id="l00518" name="l00518"></a><span class="lineno"> 518</span> <span class="keywordtype">void</span> *GetTagTblPtr() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00519" name="l00519"></a><span class="lineno"> 519</span> <span class="keywordtype">void</span> Init( xbInt16 iOpt = 0 );</div>
-<div class="line"><a id="l00520" name="l00520"></a><span class="lineno"> 520</span> xbInt16 InsertNodeI( <span class="keywordtype">void</span> *vpTag, xbIxNode *npNode, xbInt16 iSlotNo, xbUInt32 uiPtr );</div>
-<div class="line"><a id="l00521" name="l00521"></a><span class="lineno"> 521</span> xbInt16 InsertNodeL( <span class="keywordtype">void</span> *vpTag, xbIxNode *npNode, xbInt16 iSlotNo, <span class="keywordtype">char</span> *cpKeyBuf, xbUInt32 uiPtr );</div>
-<div class="line"><a id="l00522" name="l00522"></a><span class="lineno"> 522</span> xbInt16 KeyExists( <span class="keywordtype">void</span> * );</div>
-<div class="line"><a id="l00523" name="l00523"></a><span class="lineno"> 523</span> xbInt16 LoadTagTable();</div>
-<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"> 524</span> xbInt16 ReadHeadBlock(xbInt16 iOpt); <span class="comment">// read the header node of the disk file</span></div>
-<div class="line"><a id="l00525" name="l00525"></a><span class="lineno"> 525</span> xbInt16 SplitNodeI( <span class="keywordtype">void</span> *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 uiPtr );</div>
-<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"> 526</span> xbInt16 SplitNodeL( <span class="keywordtype">void</span> *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, <span class="keywordtype">char</span> *cpKeyBuf, xbUInt32 uiPtr );</div>
-<div class="line"><a id="l00527" name="l00527"></a><span class="lineno"> 527</span> xbInt16 UpdateTagKey( <span class="keywordtype">char</span> cAction, <span class="keywordtype">void</span> *vpTag, xbUInt32 ulRecNo = 0 );</div>
-<div class="line"><a id="l00528" name="l00528"></a><span class="lineno"> 528</span> xbInt16 WriteHeadBlock( xbInt16 iOption );</div>
-<div class="line"><a id="l00529" name="l00529"></a><span class="lineno"> 529</span> </div>
-<div class="line"><a id="l00530" name="l00530"></a><span class="lineno"> 530</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
-<div class="line"><a id="l00531" name="l00531"></a><span class="lineno"> 531</span> xbInt16 DumpTagBlocks( xbInt16 iOpt = 1, <span class="keywordtype">void</span> *vpTag = NULL );</div>
-<div class="line"><a id="l00532" name="l00532"></a><span class="lineno"> 532</span> xbInt16 DumpFreeBlocks( xbInt16 iOpt = 0 );</div>
-<div class="line"><a id="l00533" name="l00533"></a><span class="lineno"> 533</span> xbInt16 DumpHeader( xbInt16 iOpt = 0, xbInt16 iFmtOpt = 0 );</div>
-<div class="line"><a id="l00534" name="l00534"></a><span class="lineno"> 534</span> xbInt16 DumpIxForTag( <span class="keywordtype">void</span> *vpTag, xbInt16 iOutputOpt );</div>
-<div class="line"><a id="l00535" name="l00535"></a><span class="lineno"> 535</span> <span class="keywordtype">void</span> DumpIxNodeChain( <span class="keywordtype">void</span> *vpTag, xbInt16 iOutputOpt ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00536" name="l00536"></a><span class="lineno"> 536</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00537" name="l00537"></a><span class="lineno"> 537</span> </div>
-<div class="line"><a id="l00538" name="l00538"></a><span class="lineno"> 538</span> <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00539" name="l00539"></a><span class="lineno"> 539</span> xbInt16 AddKeyNewRoot( xbMdxTag *npTag, xbIxNode *npLeft, xbIxNode *npRight );</div>
-<div class="line"><a id="l00540" name="l00540"></a><span class="lineno"> 540</span> <span class="keywordtype">void</span> AppendNodeChain( <span class="keywordtype">void</span> *vpTag, xbIxNode *npNode );</div>
-<div class="line"><a id="l00541" name="l00541"></a><span class="lineno"> 541</span> xbUInt32 BlockToPage( xbUInt32 ulBlockNo );</div>
-<div class="line"><a id="l00542" name="l00542"></a><span class="lineno"> 542</span> <span class="keywordtype">void</span> CalcBtreePointers();</div>
-<div class="line"><a id="l00543" name="l00543"></a><span class="lineno"> 543</span> <span class="keywordtype">char</span> CalcTagKeyFmt( xbExp &amp;exp );</div>
-<div class="line"><a id="l00544" name="l00544"></a><span class="lineno"> 544</span> <span class="keywordtype">char</span> CalcTagFwdThread1();</div>
-<div class="line"><a id="l00545" name="l00545"></a><span class="lineno"> 545</span> <span class="keywordtype">char</span> CalcTagFwdThread2();</div>
-<div class="line"><a id="l00546" name="l00546"></a><span class="lineno"> 546</span> xbMdxTag *ClearTagTable();</div>
-<div class="line"><a id="l00547" name="l00547"></a><span class="lineno"> 547</span> xbInt16 DumpBlock( xbInt16 iOpt, xbUInt32 ulBlockNo, xbMdxTag * mpTag );</div>
-<div class="line"><a id="l00548" name="l00548"></a><span class="lineno"> 548</span> xbInt16 GetDbfPtr( <span class="keywordtype">void</span> *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 &amp;ulDbfPtr ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00549" name="l00549"></a><span class="lineno"> 549</span> xbInt16 GetKeyPtr( <span class="keywordtype">void</span> *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 &amp;ulKeyPtr ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00550" name="l00550"></a><span class="lineno"> 550</span> xbInt16 GetLastKeyForBlockNo( <span class="keywordtype">void</span> *vpTag, xbUInt32 ulBlockNo, <span class="keywordtype">char</span> *cpKeyBuf );</div>
-<div class="line"><a id="l00551" name="l00551"></a><span class="lineno"> 551</span> xbInt16 HarvestEmptyNode( xbMdxTag *mpTag, xbIxNode *npNode, xbInt16 iOpt, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bHarvestRoot = <a class="code hl_define" href="xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc">xbFalse</a> );</div>
-<div class="line"><a id="l00552" name="l00552"></a><span class="lineno"> 552</span> xbInt16 HarvestTagNodes( xbMdxTag *mpTag, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bRecycleRoot = <a class="code hl_define" href="xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc">xbFalse</a> );</div>
-<div class="line"><a id="l00553" name="l00553"></a><span class="lineno"> 553</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsLeaf( <span class="keywordtype">void</span> *vpTag, xbIxNode *npNode ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00554" name="l00554"></a><span class="lineno"> 554</span> xbInt16 KeySetPosAdd( xbMdxTag *mpTag, xbUInt32 ulAddKeyRecNo );</div>
-<div class="line"><a id="l00555" name="l00555"></a><span class="lineno"> 555</span> xbInt16 KeySetPosDel( xbMdxTag *mpTag );</div>
-<div class="line"><a id="l00556" name="l00556"></a><span class="lineno"> 556</span> xbInt16 LoadTagDetail( xbInt16 iOption, xbMdxTag *tte );</div>
-<div class="line"><a id="l00557" name="l00557"></a><span class="lineno"> 557</span> xbUInt32 PageToBlock( xbUInt32 ulPageNo );</div>
-<div class="line"><a id="l00558" name="l00558"></a><span class="lineno"> 558</span> xbInt16 TagSerialNo( xbInt16 iOption, xbMdxTag *mpTag );</div>
-<div class="line"><a id="l00559" name="l00559"></a><span class="lineno"> 559</span> xbInt16 UpdateTagSize( xbMdxTag *mpTag, xbUInt32 ulTagSz );</div>
-<div class="line"><a id="l00560" name="l00560"></a><span class="lineno"> 560</span> </div>
-<div class="line"><a id="l00561" name="l00561"></a><span class="lineno"> 561</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
-<div class="line"><a id="l00562" name="l00562"></a><span class="lineno"> 562</span> xbInt16 PrintKey( <span class="keywordtype">void</span> *vpTag, xbIxNode *npNode, xbInt16 iKeyNo, xbInt16 iDepth, <span class="keywordtype">char</span> cType, xbInt16 iOutputOpt );</div>
-<div class="line"><a id="l00563" name="l00563"></a><span class="lineno"> 563</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00564" name="l00564"></a><span class="lineno"> 564</span> </div>
-<div class="line"><a id="l00565" name="l00565"></a><span class="lineno"> 565</span> <span class="comment">// MDX File Header Fields</span></div>
-<div class="line"><a id="l00566" name="l00566"></a><span class="lineno"> 566</span> <span class="keywordtype">char</span> cVersion;</div>
-<div class="line"><a id="l00567" name="l00567"></a><span class="lineno"> 567</span> <span class="keywordtype">char</span> cCreateYY;</div>
-<div class="line"><a id="l00568" name="l00568"></a><span class="lineno"> 568</span> <span class="keywordtype">char</span> cCreateMM;</div>
-<div class="line"><a id="l00569" name="l00569"></a><span class="lineno"> 569</span> <span class="keywordtype">char</span> cCreateDD;</div>
-<div class="line"><a id="l00570" name="l00570"></a><span class="lineno"> 570</span> xbString sFileName;</div>
-<div class="line"><a id="l00571" name="l00571"></a><span class="lineno"> 571</span> xbInt16 iBlockFactor; <span class="comment">// 1-32 #of 512 byte segments in a block</span></div>
-<div class="line"><a id="l00572" name="l00572"></a><span class="lineno"> 572</span> </div>
-<div class="line"><a id="l00573" name="l00573"></a><span class="lineno"> 573</span> <span class="comment">// use file version</span></div>
-<div class="line"><a id="l00574" name="l00574"></a><span class="lineno"> 574</span> <span class="comment">// xbInt16 iBlockSize; // Stored at the xbFile level</span></div>
-<div class="line"><a id="l00575" name="l00575"></a><span class="lineno"> 575</span> </div>
-<div class="line"><a id="l00576" name="l00576"></a><span class="lineno"> 576</span> <span class="keywordtype">char</span> cProdIxFlag;</div>
-<div class="line"><a id="l00577" name="l00577"></a><span class="lineno"> 577</span> <span class="keywordtype">char</span> cTagEntryCnt;</div>
-<div class="line"><a id="l00578" name="l00578"></a><span class="lineno"> 578</span> xbInt16 iTagLen;</div>
-<div class="line"><a id="l00579" name="l00579"></a><span class="lineno"> 579</span> xbInt16 iTagUseCnt;</div>
-<div class="line"><a id="l00580" name="l00580"></a><span class="lineno"> 580</span> <span class="keywordtype">char</span> cNextTag; <span class="comment">// byte 28 +1</span></div>
-<div class="line"><a id="l00581" name="l00581"></a><span class="lineno"> 581</span> <span class="keywordtype">char</span> c1B; <span class="comment">// always 0x1B</span></div>
-<div class="line"><a id="l00582" name="l00582"></a><span class="lineno"> 582</span> xbUInt32 ulPageCnt; <span class="comment">// number of 512 byte pages in the mdx file</span></div>
-<div class="line"><a id="l00583" name="l00583"></a><span class="lineno"> 583</span> xbUInt32 ulFirstFreePage; <span class="comment">// page number corresponding to the next free block</span></div>
-<div class="line"><a id="l00584" name="l00584"></a><span class="lineno"> 584</span> xbUInt32 ulNoOfBlockAvail; <span class="comment">// might be improperly named?? not sure how it is used</span></div>
-<div class="line"><a id="l00585" name="l00585"></a><span class="lineno"> 585</span> <span class="keywordtype">char</span> cUpdateYY;</div>
-<div class="line"><a id="l00586" name="l00586"></a><span class="lineno"> 586</span> <span class="keywordtype">char</span> cUpdateMM;</div>
-<div class="line"><a id="l00587" name="l00587"></a><span class="lineno"> 587</span> <span class="keywordtype">char</span> cUpdateDD;</div>
-<div class="line"><a id="l00588" name="l00588"></a><span class="lineno"> 588</span> <span class="comment">// end of MDX Header fields</span></div>
-<div class="line"><a id="l00589" name="l00589"></a><span class="lineno"> 589</span> </div>
-<div class="line"><a id="l00590" name="l00590"></a><span class="lineno"> 590</span> </div>
-<div class="line"><a id="l00591" name="l00591"></a><span class="lineno"> 591</span> </div>
-<div class="line"><a id="l00592" name="l00592"></a><span class="lineno"> 592</span> xbMdxTag *mdxTagTbl;</div>
-<div class="line"><a id="l00593" name="l00593"></a><span class="lineno"> 593</span> </div>
-<div class="line"><a id="l00594" name="l00594"></a><span class="lineno"> 594</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bReuseEmptyNodes; <span class="comment">// Reuese empty MDX nodes when all keys deleted?</span></div>
-<div class="line"><a id="l00595" name="l00595"></a><span class="lineno"> 595</span> <span class="comment">// DBase 7.x and MS ODBC drivers do not reuse empty nodes, leaves them stranded in the file</span></div>
-<div class="line"><a id="l00596" name="l00596"></a><span class="lineno"> 596</span> <span class="comment">// Codebase 6.x reuses empty nodes.</span></div>
-<div class="line"><a id="l00597" name="l00597"></a><span class="lineno"> 597</span> <span class="comment">// Setting this to True will reuse empty nodes in the same manner Codebase 6.x reuses them.</span></div>
-<div class="line"><a id="l00598" name="l00598"></a><span class="lineno"> 598</span> </div>
-<div class="line"><a id="l00599" name="l00599"></a><span class="lineno"> 599</span>};</div>
-<div class="line"><a id="l00600" name="l00600"></a><span class="lineno"> 600</span><span class="preprocessor">#endif </span><span class="comment">/* XB_MDX_SUPPORT */</span><span class="preprocessor"></span></div>
-<div class="line"><a id="l00601" name="l00601"></a><span class="lineno"> 601</span> </div>
-<div class="line"><a id="l00602" name="l00602"></a><span class="lineno"> 602</span> </div>
-<div class="line"><a id="l00603" name="l00603"></a><span class="lineno"> 603</span>} <span class="comment">/* namespace xb */</span></div>
-<div class="line"><a id="l00604" name="l00604"></a><span class="lineno"> 604</span><span class="preprocessor">#endif </span><span class="comment">/* XB_INDEX_SUPPORT */</span><span class="preprocessor"></span></div>
-<div class="line"><a id="l00605" name="l00605"></a><span class="lineno"> 605</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_INDEX_H__ */</span><span class="preprocessor"></span></div>
-<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
-<div class="ttc" id="anamespacexb_html_a25f47b226ce924a5c78f97989b0744a2"><div class="ttname"><a href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xb::xbDouble</a></div><div class="ttdeci">double xbDouble</div><div class="ttdef"><b>Definition:</b> xbtypes.h:23</div></div>
-<div class="ttc" id="anamespacexb_html_ab1a750481dd487f0d384aa1d200dff0f"><div class="ttname"><a href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xb::xbBool</a></div><div class="ttdeci">short int xbBool</div><div class="ttdef"><b>Definition:</b> xbtypes.h:24</div></div>
-<div class="ttc" id="anamespacexb_html_ab2eae4b4732466698a7fdd89d77ba53b"><div class="ttname"><a href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xb::xbDbf</a></div><div class="ttdeci">class XBDLLEXPORT xbDbf</div><div class="ttdef"><b>Definition:</b> xbtblmgr.h:28</div></div>
-<div class="ttc" id="axbretcod_8h_html_ac720d5b4ec45bfd606f5865d40816e23"><div class="ttname"><a href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a></div><div class="ttdeci">#define XB_NO_ERROR</div><div class="ttdef"><b>Definition:</b> xbretcod.h:24</div></div>
-<div class="ttc" id="axbtypes_8h_html_adc4b6ca5ad299f63675136d9e03938cc"><div class="ttname"><a href="xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc">xbFalse</a></div><div class="ttdeci">#define xbFalse</div><div class="ttdef"><b>Definition:</b> xbtypes.h:29</div></div>
-</div><!-- fragment --></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbinsert_8cpp.html b/docs/doxygen/html/xbinsert_8cpp.html
deleted file mode 100644
index 3dfc6a6..0000000
--- a/docs/doxygen/html/xbinsert_8cpp.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/sql/xbinsert.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_25b94c3afce00ed38231227d8141f932.html">sql</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbinsert.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbixbase_8cpp.html b/docs/doxygen/html/xbixbase_8cpp.html
deleted file mode 100644
index 71f1dc6..0000000
--- a/docs/doxygen/html/xbixbase_8cpp.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbixbase.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbixbase.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbixmdx_8cpp.html b/docs/doxygen/html/xbixmdx_8cpp.html
deleted file mode 100644
index 7d15f64..0000000
--- a/docs/doxygen/html/xbixmdx_8cpp.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbixmdx.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbixmdx.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbixndx_8cpp.html b/docs/doxygen/html/xbixndx_8cpp.html
deleted file mode 100644
index 26fc15e..0000000
--- a/docs/doxygen/html/xbixndx_8cpp.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbixndx.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbixndx.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xblnklst_8h.html b/docs/doxygen/html/xblnklst_8h.html
deleted file mode 100644
index 7d4be72..0000000
--- a/docs/doxygen/html/xblnklst_8h.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xblnklst.h File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xblnklst.h File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-
-<p><a href="xblnklst_8h_source.html">Go to the source code of this file.</a></p>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xblnklst_8h_source.html b/docs/doxygen/html/xblnklst_8h_source.html
deleted file mode 100644
index c8ed015..0000000
--- a/docs/doxygen/html/xblnklst_8h_source.html
+++ /dev/null
@@ -1,341 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xblnklst.h Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xblnklst.h</div></div>
-</div><!--header-->
-<div class="contents">
-<a href="xblnklst_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xblnklst.h</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022 Gary A Kunkel</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">*/</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#ifndef __XB_XBLNKLST_H__</span></div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#define __XB_XBLNKLST_H__</span></div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifdef XB_LINKLIST_SUPPORT</span></div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="keyword">class </span>XBDLLEXPORT xbLinkList {</div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> xbLinkList();</div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> ~xbLinkList();</div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> xbLinkListNode&lt;xbNodeType&gt; *GetHeadNode() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> xbLinkListNode&lt;xbNodeType&gt; *GetEndNode() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> xbLinkListNode&lt;xbNodeType&gt; *GetNodeForNo( xbUInt32 ulNodeNo ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> </div>
-<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> <span class="keywordtype">void</span> Clear();</div>
-<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> xbUInt32 GetNodeCnt () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> xbInt16 InsertAtEnd ( <span class="keyword">const</span> xbNodeType &amp;xbLLN );</div>
-<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> xbInt16 InsertAtFront ( <span class="keyword">const</span> xbNodeType &amp;xbLLN );</div>
-<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> xbInt16 RemoveByVal ( <span class="keyword">const</span> xbNodeType &amp;xbLLN );</div>
-<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> xbInt16 RemoveFromEnd ();</div>
-<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> xbInt16 RemoveFromEnd ( xbNodeType &amp;xbLLN );</div>
-<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> xbInt16 RemoveFromFront( xbNodeType &amp;xbLLN );</div>
-<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> xbInt16 SearchFor ( <span class="keyword">const</span> xbNodeType &amp;xbLLN );</div>
-<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> </div>
-<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> xbUInt32 ulNodeCnt;</div>
-<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> xbLinkListNode&lt;xbNodeType&gt; *llStartPtr;</div>
-<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> xbLinkListNode&lt;xbNodeType&gt; *llEndPtr;</div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span>};</div>
-<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> </div>
-<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span>xbLinkList&lt;xbNodeType&gt;::xbLinkList(){</div>
-<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> ulNodeCnt = 0;</div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> llStartPtr = NULL;</div>
-<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> llEndPtr = NULL;</div>
-<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span>}</div>
-<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> </div>
-<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span>xbLinkList&lt;xbNodeType&gt;::~xbLinkList(){</div>
-<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> Clear();</div>
-<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span>}</div>
-<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> </div>
-<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="keywordtype">void</span> xbLinkList&lt;xbNodeType&gt;::Clear(){</div>
-<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> xbLinkListNode&lt;xbNodeType&gt; *cPtr = llStartPtr, *tPtr;</div>
-<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="keywordflow">for</span>( xbUInt32 i = 0; i &lt; ulNodeCnt; i++ ){</div>
-<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> tPtr = cPtr;</div>
-<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> cPtr = cPtr-&gt;GetNextNode();</div>
-<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <span class="keyword">delete</span> tPtr;</div>
-<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> }</div>
-<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> ulNodeCnt = 0;</div>
-<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> llStartPtr = NULL;</div>
-<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> llEndPtr = NULL;</div>
-<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span>}</div>
-<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> </div>
-<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> </div>
-<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span>xbLinkListNode&lt;xbNodeType&gt; *xbLinkList&lt;xbNodeType&gt;::GetHeadNode()<span class="keyword"> const</span>{</div>
-<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">return</span> llStartPtr;</div>
-<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span>}</div>
-<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> </div>
-<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span>xbLinkListNode&lt;xbNodeType&gt; *xbLinkList&lt;xbNodeType&gt;::GetEndNode()<span class="keyword"> const</span>{</div>
-<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <span class="keywordflow">return</span> llEndPtr;</div>
-<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span>}</div>
-<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> </div>
-<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> </div>
-<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span>xbLinkListNode&lt;xbNodeType&gt; *xbLinkList&lt;xbNodeType&gt;::GetNodeForNo( xbUInt32 ulNo )<span class="keyword"> const</span>{</div>
-<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> </div>
-<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> xbLinkListNode&lt;xbNodeType&gt; *cPtr = llStartPtr;</div>
-<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> xbUInt32 i;</div>
-<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <span class="keywordflow">for</span>( i = 0; i &lt; ulNo &amp;&amp; i &lt; ulNodeCnt; i++ )</div>
-<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> cPtr = cPtr-&gt;GetNextNode();</div>
-<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> </div>
-<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="keywordflow">if</span>( i == ulNo )</div>
-<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <span class="keywordflow">return</span> cPtr;</div>
-<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">else</span> </div>
-<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <span class="keywordflow">return</span> 0;</div>
-<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span>}</div>
-<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> </div>
-<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> </div>
-<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> </div>
-<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span>xbUInt32 xbLinkList&lt;xbNodeType&gt;::GetNodeCnt()<span class="keyword"> const</span>{</div>
-<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <span class="keywordflow">return</span> ulNodeCnt;</div>
-<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span>}</div>
-<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> </div>
-<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span>xbInt16 xbLinkList&lt;xbNodeType&gt;::InsertAtFront( <span class="keyword">const</span> xbNodeType &amp; ntKey ){</div>
-<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> </div>
-<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> xbLinkListNode&lt;xbNodeType&gt; *p = <span class="keyword">new</span> xbLinkListNode&lt;xbNodeType&gt;( ntKey );</div>
-<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <span class="keywordflow">if</span>( p == 0 )</div>
-<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ae687fc7d872ba0475a8477e4447f9b54">XB_NO_MEMORY</a>;</div>
-<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> </div>
-<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">if</span>( ulNodeCnt &gt; 0 ){</div>
-<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> llStartPtr-&gt;SetPrevNode( p );</div>
-<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> p-&gt;SetNextNode( llStartPtr );</div>
-<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> } <span class="keywordflow">else</span> {</div>
-<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> llEndPtr = p;</div>
-<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> }</div>
-<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> </div>
-<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> llStartPtr = p;</div>
-<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> ulNodeCnt++;</div>
-<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a>;</div>
-<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span>}</div>
-<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> </div>
-<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span>xbInt16 xbLinkList&lt;xbNodeType&gt;::InsertAtEnd( <span class="keyword">const</span> xbNodeType &amp; ntKey ){</div>
-<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> </div>
-<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> xbLinkListNode&lt;xbNodeType&gt; *p = <span class="keyword">new</span> xbLinkListNode&lt;xbNodeType&gt;( ntKey );</div>
-<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <span class="keywordflow">if</span>( p == 0 )</div>
-<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ae687fc7d872ba0475a8477e4447f9b54">XB_NO_MEMORY</a>;</div>
-<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> </div>
-<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">if</span>( ulNodeCnt &gt; 0 ){</div>
-<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> llEndPtr-&gt;SetNextNode( p );</div>
-<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> p-&gt;SetPrevNode( llEndPtr );</div>
-<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> llEndPtr = p;</div>
-<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> } <span class="keywordflow">else</span> {</div>
-<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> llStartPtr = p;</div>
-<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> }</div>
-<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> </div>
-<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> llEndPtr = p;</div>
-<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> ulNodeCnt++;</div>
-<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a>;</div>
-<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span>}</div>
-<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> </div>
-<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> </div>
-<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> </div>
-<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span>xbInt16 xbLinkList&lt;xbNodeType&gt;::RemoveByVal( <span class="keyword">const</span> xbNodeType &amp; ntKey ){</div>
-<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="comment">// Remove the first instance of ntKey from the node chain</span></div>
-<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> xbLinkListNode&lt;xbNodeType&gt; *currPtr = llStartPtr;</div>
-<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> xbLinkListNode&lt;xbNodeType&gt; *prevPtr = NULL;</div>
-<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> </div>
-<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="keywordflow">for</span>( xbUInt32 i = 0; i &lt; ulNodeCnt; i++ ){</div>
-<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">if</span>( currPtr-&gt;GetKey() == ntKey ){</div>
-<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <span class="keywordflow">if</span>( prevPtr == NULL ){ <span class="comment">//then this is the first node</span></div>
-<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> llStartPtr = currPtr-&gt;GetNextNode();</div>
-<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> <span class="keywordflow">if</span>( llStartPtr ) <span class="comment">// if more than one link in the linked list</span></div>
-<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> llStartPtr-&gt;SetPrevNode( NULL );</div>
-<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <span class="keyword">delete</span> currPtr;</div>
-<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> ulNodeCnt--;</div>
-<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> <span class="keywordflow">return</span> i + 1;</div>
-<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> }</div>
-<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> <span class="keywordflow">else</span> {</div>
-<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> prevPtr-&gt;SetNextNode( currPtr-&gt;GetNextNode());</div>
-<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <span class="keywordflow">if</span>( currPtr-&gt;GetNextNode())</div>
-<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> currPtr-&gt;GetNextNode()-&gt;SetPrevNode( prevPtr );</div>
-<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> <span class="keyword">delete</span> currPtr;</div>
-<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> ulNodeCnt--;</div>
-<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="keywordflow">return</span> i + 1;</div>
-<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> }</div>
-<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> }</div>
-<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> prevPtr = currPtr;</div>
-<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> currPtr = currPtr-&gt;GetNextNode();</div>
-<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> }</div>
-<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac2606659a54111334f5b02861e533700">XB_NOT_FOUND</a>;</div>
-<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span>}</div>
-<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> </div>
-<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> </div>
-<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span>xbInt16 xbLinkList&lt;xbNodeType&gt;::RemoveFromFront( xbNodeType &amp; ntKey ){</div>
-<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> </div>
-<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <span class="keywordflow">if</span>( ulNodeCnt &lt;= 0 )</div>
-<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb">XB_INVALID_NODELINK</a>;</div>
-<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> xbLinkListNode&lt;xbNodeType&gt; *p = llStartPtr;</div>
-<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> llStartPtr = p-&gt;GetNextNode();</div>
-<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> <span class="keywordflow">if</span>( llStartPtr )</div>
-<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> llStartPtr-&gt;SetPrevNode( NULL );</div>
-<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> ntKey = p-&gt;GetKey();</div>
-<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> <span class="keyword">delete</span> p;</div>
-<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> ulNodeCnt--;</div>
-<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a>;</div>
-<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span>}</div>
-<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> </div>
-<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> </div>
-<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span>xbInt16 xbLinkList&lt;xbNodeType&gt;::RemoveFromEnd( xbNodeType &amp; ntKey ){</div>
-<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> </div>
-<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">if</span>( ulNodeCnt &lt;= 0 )</div>
-<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb">XB_INVALID_NODELINK</a>;</div>
-<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> xbLinkListNode&lt;xbNodeType&gt; *p = llEndPtr;</div>
-<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> <span class="keywordflow">if</span>( p-&gt;GetPrevNode()){</div>
-<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> llEndPtr = p-&gt;GetPrevNode();</div>
-<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> llEndPtr-&gt;SetNextNode( NULL );</div>
-<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> } <span class="keywordflow">else</span> {</div>
-<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> <span class="comment">// there are no more nodes</span></div>
-<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> llStartPtr = NULL;</div>
-<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> llEndPtr = NULL;</div>
-<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> }</div>
-<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> ntKey = p-&gt;GetKey();</div>
-<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> <span class="keyword">delete</span> p;</div>
-<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> ulNodeCnt--;</div>
-<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a>;</div>
-<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span>}</div>
-<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> </div>
-<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> </div>
-<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span>xbInt16 xbLinkList&lt;xbNodeType&gt;::RemoveFromEnd(){</div>
-<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> </div>
-<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> <span class="keywordflow">if</span>( ulNodeCnt &lt;= 0 )</div>
-<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb">XB_INVALID_NODELINK</a>;</div>
-<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> xbLinkListNode&lt;xbNodeType&gt; *p = llEndPtr;</div>
-<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <span class="keywordflow">if</span>( p-&gt;GetPrevNode()){</div>
-<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> llEndPtr = p-&gt;GetPrevNode();</div>
-<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> llEndPtr-&gt;SetNextNode( NULL );</div>
-<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> } <span class="keywordflow">else</span> {</div>
-<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> <span class="comment">// there are no more nodes</span></div>
-<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> llStartPtr = NULL;</div>
-<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> llEndPtr = NULL;</div>
-<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> }</div>
-<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> <span class="keyword">delete</span> p-&gt;GetKey();</div>
-<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> <span class="keyword">delete</span> p;</div>
-<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> ulNodeCnt--;</div>
-<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a>;</div>
-<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span>}</div>
-<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> </div>
-<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> </div>
-<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span>xbInt16 xbLinkList&lt;xbNodeType&gt;::SearchFor( <span class="keyword">const</span> xbNodeType &amp; ntKey ){</div>
-<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> </div>
-<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> xbLinkListNode&lt;xbNodeType&gt; *cPtr = llStartPtr;</div>
-<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> <span class="keywordflow">for</span>( xbUInt32 i = 0; i &lt; ulNodeCnt; i++ ){</div>
-<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> <span class="keywordflow">if</span>( cPtr-&gt;GetKey() == ntKey )</div>
-<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> <span class="keywordflow">return</span> i+1;</div>
-<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> cPtr = cPtr-&gt;GetNextNode();</div>
-<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> }</div>
-<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a>;</div>
-<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> </div>
-<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span>}</div>
-<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span>} <span class="comment">// namespace</span></div>
-<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> </div>
-<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span><span class="preprocessor">#endif </span><span class="comment">// XB_LINKLIST_SUPPORT</span></div>
-<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span><span class="preprocessor">#endif </span><span class="comment">// XB_XBLNKLST_H__</span></div>
-<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> </div>
-<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> </div>
-<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
-<div class="ttc" id="axbretcod_8h_html_a13e6876470bd34c8c4e5533f115e04eb"><div class="ttname"><a href="xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb">XB_INVALID_NODELINK</a></div><div class="ttdeci">#define XB_INVALID_NODELINK</div><div class="ttdef"><b>Definition:</b> xbretcod.h:28</div></div>
-<div class="ttc" id="axbretcod_8h_html_ac2606659a54111334f5b02861e533700"><div class="ttname"><a href="xbretcod_8h.html#ac2606659a54111334f5b02861e533700">XB_NOT_FOUND</a></div><div class="ttdeci">#define XB_NOT_FOUND</div><div class="ttdef"><b>Definition:</b> xbretcod.h:40</div></div>
-<div class="ttc" id="axbretcod_8h_html_ac720d5b4ec45bfd606f5865d40816e23"><div class="ttname"><a href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a></div><div class="ttdeci">#define XB_NO_ERROR</div><div class="ttdef"><b>Definition:</b> xbretcod.h:24</div></div>
-<div class="ttc" id="axbretcod_8h_html_ae687fc7d872ba0475a8477e4447f9b54"><div class="ttname"><a href="xbretcod_8h.html#ae687fc7d872ba0475a8477e4447f9b54">XB_NO_MEMORY</a></div><div class="ttdeci">#define XB_NO_MEMORY</div><div class="ttdef"><b>Definition:</b> xbretcod.h:25</div></div>
-</div><!-- fragment --></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xblnklstord_8h.html b/docs/doxygen/html/xblnklstord_8h.html
deleted file mode 100644
index 44e4332..0000000
--- a/docs/doxygen/html/xblnklstord_8h.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xblnklstord.h File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xblnklstord.h File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-
-<p><a href="xblnklstord_8h_source.html">Go to the source code of this file.</a></p>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xblnklstord_8h_source.html b/docs/doxygen/html/xblnklstord_8h_source.html
deleted file mode 100644
index 51c83ec..0000000
--- a/docs/doxygen/html/xblnklstord_8h_source.html
+++ /dev/null
@@ -1,455 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xblnklstord.h Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xblnklstord.h</div></div>
-</div><!--header-->
-<div class="contents">
-<a href="xblnklstord_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xblnklstord.h</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2019,2022 Gary A Kunkel</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">*/</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment">// Ordered link list</span></div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#ifndef __XB_XBLNKLSTORD_H__</span></div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="preprocessor">#define __XB_XBLNKLSTORD_H__</span></div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#ifdef XB_LINKLIST_SUPPORT</span></div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="keyword">class </span>XBDLLEXPORT xbLinkListOrd {</div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> xbLinkListOrd();</div>
-<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> ~xbLinkListOrd();</div>
-<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div>
-<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <span class="keywordtype">void</span> Clear();</div>
-<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> xbLinkListNode&lt;xbNodeType&gt; *GetHeadNode() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> xbLinkListNode&lt;xbNodeType&gt; *GetEndNode() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> xbLinkListNode&lt;xbNodeType&gt; *GetNodeForKey( <span class="keyword">const</span> xbString &amp;sKey ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> </div>
-<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> xbInt16 GetDataForKey ( <span class="keyword">const</span> xbNodeType &amp;ntKey, xbString &amp;sData );</div>
-<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> </div>
-<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetDupKeys ();</div>
-<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> </div>
-<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> xbUInt32 GetNodeCnt () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> xbUInt32 GetNodeCnt ( <span class="keyword">const</span> xbString &amp;sNodeKey ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> xbInt16 InsertKey ( <span class="keyword">const</span> xbNodeType &amp;ntKey );</div>
-<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> xbInt16 InsertKey ( <span class="keyword">const</span> xbNodeType &amp;ntKey, <span class="keyword">const</span> xbString &amp;sData );</div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> xbInt16 InsertKey ( <span class="keyword">const</span> xbNodeType &amp;ntKey, xbUInt32 ulData );</div>
-<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> </div>
-<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> KeyExists ( <span class="keyword">const</span> xbNodeType &amp;ntKey ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> xbInt16 RemoveKey ( <span class="keyword">const</span> xbNodeType &amp;ntKey );</div>
-<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> xbInt16 RemoveFromEnd ( xbNodeType &amp;ntKey );</div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> xbInt16 RemoveFromFront( xbNodeType &amp;ntKey );</div>
-<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> xbInt16 RemoveFromFront();</div>
-<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="keywordtype">void</span> SetDupKeys ( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bAllowDupKeys );</div>
-<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> xbInt16 UpdateForKey ( <span class="keyword">const</span> xbNodeType &amp;ntKey, <span class="keyword">const</span> xbString &amp;sData );</div>
-<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> </div>
-<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> </div>
-<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> xbUInt32 ulNodeCnt;</div>
-<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bAllowDupKeys;</div>
-<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> xbLinkListNode&lt;xbNodeType&gt; *llStartPtr;</div>
-<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> xbLinkListNode&lt;xbNodeType&gt; *llEndPtr;</div>
-<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> </div>
-<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span>};</div>
-<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> </div>
-<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> </div>
-<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span>xbLinkListOrd&lt;xbNodeType&gt;::xbLinkListOrd(){</div>
-<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> bAllowDupKeys = <a class="code hl_define" href="xbtypes_8h.html#ab0ae00665298fe7f5292691cb98ec2d9">xbTrue</a>; <span class="comment">// default setting - allow duplicate keys</span></div>
-<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> ulNodeCnt = 0;</div>
-<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> llStartPtr = NULL;</div>
-<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> llEndPtr = NULL;</div>
-<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span>}</div>
-<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> </div>
-<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span>xbLinkListOrd&lt;xbNodeType&gt;::~xbLinkListOrd(){</div>
-<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> Clear();</div>
-<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span>}</div>
-<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> </div>
-<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span><span class="keywordtype">void</span> xbLinkListOrd&lt;xbNodeType&gt;::Clear(){</div>
-<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> xbLinkListNode&lt;xbNodeType&gt; *cPtr = llStartPtr, *tPtr;</div>
-<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">for</span>( xbUInt32 i = 0; i &lt; ulNodeCnt; i++ ){</div>
-<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> tPtr = cPtr;</div>
-<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> cPtr = cPtr-&gt;GetNextNode();</div>
-<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> </div>
-<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <span class="comment">// next line might cause seg faults</span></div>
-<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="comment">// delete tPtr-&gt;GetData();</span></div>
-<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> </div>
-<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> <span class="keyword">delete</span> tPtr;</div>
-<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> }</div>
-<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> ulNodeCnt = 0;</div>
-<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> llStartPtr = NULL;</div>
-<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> llEndPtr = NULL;</div>
-<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span>}</div>
-<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> </div>
-<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span>xbLinkListNode&lt;xbNodeType&gt; * xbLinkListOrd&lt;xbNodeType&gt;::GetHeadNode()<span class="keyword"> const</span>{</div>
-<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <span class="keywordflow">return</span> llStartPtr;</div>
-<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span>}</div>
-<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> </div>
-<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span>xbLinkListNode&lt;xbNodeType&gt; * xbLinkListOrd&lt;xbNodeType&gt;::GetEndNode()<span class="keyword"> const</span>{</div>
-<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <span class="keywordflow">return</span> llEndPtr;</div>
-<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span>}</div>
-<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> </div>
-<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span>xbUInt32 xbLinkListOrd&lt;xbNodeType&gt;::GetNodeCnt()<span class="keyword"> const</span>{</div>
-<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="keywordflow">return</span> ulNodeCnt;</div>
-<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span>}</div>
-<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> </div>
-<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span>xbUInt32 xbLinkListOrd&lt;xbNodeType&gt;::GetNodeCnt( <span class="keyword">const</span> xbString &amp;sNodeKey )<span class="keyword"> const</span>{</div>
-<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> </div>
-<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="comment">// won&#39;t work if nodekey is not a string</span></div>
-<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> xbLinkListNode&lt;xbNodeType&gt; *currPtr = llStartPtr;</div>
-<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <span class="comment">// skip to sNodeKey</span></div>
-<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <span class="keywordflow">while</span>( currPtr &amp;&amp; ( sNodeKey &gt; currPtr-&gt;GetKey())) {</div>
-<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> currPtr = currPtr-&gt;GetNextNode();</div>
-<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> }</div>
-<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <span class="comment">// count entries for sNodeKey</span></div>
-<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> xbInt16 iKeyCnt = 0;</div>
-<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">while</span>( currPtr &amp;&amp; ( sNodeKey == currPtr-&gt;GetKey())) {</div>
-<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> iKeyCnt++;</div>
-<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> currPtr = currPtr-&gt;GetNextNode();</div>
-<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> }</div>
-<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="keywordflow">return</span> iKeyCnt;</div>
-<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span>}</div>
-<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> </div>
-<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> </div>
-<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span>xbInt16 xbLinkListOrd&lt;xbNodeType&gt;::InsertKey( <span class="keyword">const</span> xbNodeType &amp;ntKey ){</div>
-<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> xbString s;</div>
-<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">return</span> InsertKey( ntKey, s );</div>
-<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span>}</div>
-<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> </div>
-<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> </div>
-<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> </div>
-<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> </div>
-<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span>xbInt16 xbLinkListOrd&lt;xbNodeType&gt;::InsertKey( <span class="keyword">const</span> xbNodeType &amp;ntKey, xbUInt32 ul ){</div>
-<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> </div>
-<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> xbString s;</div>
-<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> s.Sprintf( <span class="stringliteral">&quot;%ld&quot;</span>, ul );</div>
-<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="keywordflow">return</span> InsertKey( ntKey, s );</div>
-<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span>}</div>
-<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> </div>
-<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> </div>
-<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span>xbInt16 xbLinkListOrd&lt;xbNodeType&gt;::InsertKey( <span class="keyword">const</span> xbNodeType &amp;ntKey, <span class="keyword">const</span> xbString &amp;sData ){</div>
-<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> </div>
-<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> xbLinkListNode&lt;xbNodeType&gt; *p = <span class="keyword">new</span> xbLinkListNode&lt;xbNodeType&gt;( ntKey, sData );</div>
-<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="keywordflow">if</span>( p == 0 )</div>
-<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ae687fc7d872ba0475a8477e4447f9b54">XB_NO_MEMORY</a>;</div>
-<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> </div>
-<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <span class="keywordflow">if</span>( ulNodeCnt &gt; 0 ){</div>
-<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> xbLinkListNode&lt;xbNodeType&gt; *currPtr = llStartPtr;</div>
-<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> xbLinkListNode&lt;xbNodeType&gt; *prevPtr = NULL;</div>
-<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> </div>
-<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <span class="comment">// find location in the chain</span></div>
-<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> <span class="keywordflow">while</span>( currPtr &amp;&amp; ntKey &gt; currPtr-&gt;GetKey() ){</div>
-<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> prevPtr = currPtr;</div>
-<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> currPtr = currPtr-&gt;GetNextNode();</div>
-<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> }</div>
-<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> <span class="keywordflow">if</span>( currPtr &amp;&amp; ntKey == currPtr-&gt;GetKey() &amp;&amp; bAllowDupKeys == 0 ){</div>
-<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <span class="keyword">delete</span> p;</div>
-<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ad60dbb1862c0c1c2dc0464cfbfd93a34">XB_KEY_NOT_UNIQUE</a>;</div>
-<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> }</div>
-<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> </div>
-<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="keywordflow">if</span>( currPtr == NULL ){</div>
-<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <span class="comment">// std::cout &lt;&lt; &quot;at the end of the chain\n&quot;;</span></div>
-<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> llEndPtr = p;</div>
-<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> prevPtr-&gt;SetNextNode( p );</div>
-<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> p-&gt;SetPrevNode( prevPtr );</div>
-<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> </div>
-<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span>( currPtr-&gt;GetPrevNode() == NULL ){</div>
-<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> <span class="comment">// std::cout &lt;&lt; &quot;at the beginning of the chain\n&quot;;</span></div>
-<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> p-&gt;SetNextNode( llStartPtr );</div>
-<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> llStartPtr-&gt;SetPrevNode( p );</div>
-<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> llStartPtr = p;</div>
-<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> </div>
-<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> } <span class="keywordflow">else</span> {</div>
-<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <span class="comment">// std::cout &lt;&lt; &quot;in the middle of the chain\n&quot;;</span></div>
-<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> p-&gt;SetNextNode( currPtr ); </div>
-<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> p-&gt;SetPrevNode( currPtr-&gt;GetPrevNode());</div>
-<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> currPtr-&gt;SetPrevNode( p );</div>
-<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> prevPtr-&gt;SetNextNode( p );</div>
-<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> }</div>
-<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> } <span class="keywordflow">else</span> {</div>
-<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> <span class="comment">// std::cout &lt;&lt; &quot;first addition to the chain\n&quot;;</span></div>
-<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> llStartPtr = p;</div>
-<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> llEndPtr = p;</div>
-<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> }</div>
-<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> ulNodeCnt++;</div>
-<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a>;</div>
-<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span>}</div>
-<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> </div>
-<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span>xbInt16 xbLinkListOrd&lt;xbNodeType&gt;::RemoveKey( <span class="keyword">const</span> xbNodeType &amp;ntKey ){</div>
-<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> <span class="comment">// Remove the first instance of ntKey from the node chain</span></div>
-<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> xbLinkListNode&lt;xbNodeType&gt; *currPtr = llStartPtr;</div>
-<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> xbLinkListNode&lt;xbNodeType&gt; *prevPtr = NULL;</div>
-<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> </div>
-<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> <span class="keywordflow">while</span>( currPtr &amp;&amp; ntKey &gt; currPtr-&gt;GetKey() ){</div>
-<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> prevPtr = currPtr;</div>
-<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> currPtr = currPtr-&gt;GetNextNode();</div>
-<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> }</div>
-<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> </div>
-<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> <span class="keywordflow">if</span>( currPtr &amp;&amp; ntKey == currPtr-&gt;GetKey()){</div>
-<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span><span class="comment">// ntKey = currPtr-&gt;GetKey();</span></div>
-<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> <span class="keywordflow">if</span>( prevPtr == NULL ){ <span class="comment">// this is the first node</span></div>
-<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> llStartPtr = currPtr-&gt;GetNextNode();</div>
-<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> <span class="comment">// next line fails</span></div>
-<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> <span class="keywordflow">if</span>( llStartPtr ){</div>
-<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> llStartPtr-&gt;SetPrevNode( NULL );</div>
-<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> }</div>
-<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> <span class="keyword">delete</span> currPtr;</div>
-<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> ulNodeCnt--;</div>
-<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a>;</div>
-<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span>( currPtr-&gt;GetNextNode() == NULL ){ <span class="comment">// this is the last node</span></div>
-<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> llEndPtr = prevPtr;</div>
-<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> prevPtr-&gt;SetNextNode( NULL );</div>
-<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <span class="keyword">delete</span> currPtr;</div>
-<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> ulNodeCnt--;</div>
-<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a>;</div>
-<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> } <span class="keywordflow">else</span> {</div>
-<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> </div>
-<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> prevPtr-&gt;SetNextNode( currPtr-&gt;GetNextNode());</div>
-<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> currPtr-&gt;GetNextNode()-&gt;SetPrevNode( prevPtr );</div>
-<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> <span class="keyword">delete</span> currPtr;</div>
-<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> ulNodeCnt--;</div>
-<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a>;</div>
-<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> }</div>
-<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> } <span class="keywordflow">else</span> {</div>
-<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac2606659a54111334f5b02861e533700">XB_NOT_FOUND</a>;</div>
-<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> }</div>
-<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span>}</div>
-<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> </div>
-<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span>xbInt16 xbLinkListOrd&lt;xbNodeType&gt;::RemoveFromFront( xbNodeType &amp;ntKey ){</div>
-<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> </div>
-<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> <span class="keywordflow">if</span>( ulNodeCnt &lt;= 0 )</div>
-<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb">XB_INVALID_NODELINK</a>;</div>
-<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> xbLinkListNode&lt;xbNodeType&gt; *p = llStartPtr;</div>
-<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> llStartPtr = p-&gt;GetNextNode();</div>
-<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> <span class="keywordflow">if</span>( llStartPtr )</div>
-<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> llStartPtr-&gt;SetPrevNode( NULL );</div>
-<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> ntKey = p-&gt;GetKey();</div>
-<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> <span class="keyword">delete</span> p;</div>
-<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> ulNodeCnt--;</div>
-<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a>;</div>
-<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span>}</div>
-<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> </div>
-<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span>xbInt16 xbLinkListOrd&lt;xbNodeType&gt;::RemoveFromFront(){</div>
-<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> </div>
-<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> <span class="keywordflow">if</span>( ulNodeCnt &lt;= 0 )</div>
-<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb">XB_INVALID_NODELINK</a>;</div>
-<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> xbLinkListNode&lt;xbNodeType&gt; *p = llStartPtr;</div>
-<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> llStartPtr = p-&gt;GetNextNode();</div>
-<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> <span class="keywordflow">if</span>( llStartPtr )</div>
-<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> llStartPtr-&gt;SetPrevNode( NULL );</div>
-<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> </div>
-<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> <span class="keywordflow">if</span>( p-&gt;GetKey())</div>
-<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> <span class="keyword">delete</span> p-&gt;GetKey();</div>
-<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> </div>
-<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> <span class="keyword">delete</span> p;</div>
-<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> ulNodeCnt--;</div>
-<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> </div>
-<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a>;</div>
-<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span>}</div>
-<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> </div>
-<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> </div>
-<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span>xbInt16 xbLinkListOrd&lt;xbNodeType&gt;::RemoveFromEnd( xbNodeType &amp;ntKey ){</div>
-<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> </div>
-<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> <span class="keywordflow">if</span>( ulNodeCnt &lt;= 0 )</div>
-<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb">XB_INVALID_NODELINK</a>;</div>
-<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> xbLinkListNode&lt;xbNodeType&gt; *p = llEndPtr;</div>
-<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> llEndPtr = p-&gt;GetPrevNode();</div>
-<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> llEndPtr-&gt;SetNextNode( NULL );</div>
-<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> ntKey = p-&gt;GetKey();</div>
-<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> <span class="keyword">delete</span> p;</div>
-<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> ulNodeCnt--;</div>
-<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a>;</div>
-<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span>}</div>
-<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> </div>
-<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span><a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xbLinkListOrd&lt;xbNodeType&gt;::GetDupKeys(){</div>
-<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> <span class="keywordflow">return</span> bAllowDupKeys;</div>
-<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span>}</div>
-<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> </div>
-<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span><span class="keywordtype">void</span> xbLinkListOrd&lt;xbNodeType&gt;::SetDupKeys( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bAllowDupKeys ){</div>
-<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> this-&gt;bAllowDupKeys = bAllowDupKeys;</div>
-<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span>}</div>
-<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> </div>
-<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> </div>
-<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span><a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xbLinkListOrd&lt;xbNodeType&gt;::KeyExists( <span class="keyword">const</span> xbNodeType &amp;ntKey )<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> </div>
-<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> xbLinkListNode&lt;xbNodeType&gt; *currPtr = llStartPtr;</div>
-<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> <span class="keywordflow">while</span>( currPtr &amp;&amp; ntKey &gt; currPtr-&gt;GetKey() ){</div>
-<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> currPtr = currPtr-&gt;GetNextNode();</div>
-<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> }</div>
-<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> <span class="keywordflow">if</span>( currPtr &amp;&amp; ntKey == currPtr-&gt;GetKey()){</div>
-<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbtypes_8h.html#ab0ae00665298fe7f5292691cb98ec2d9">xbTrue</a>;</div>
-<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> } <span class="keywordflow">else</span> {</div>
-<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc">xbFalse</a>;</div>
-<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> }</div>
-<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span>}</div>
-<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> </div>
-<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> </div>
-<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span>xbInt16 xbLinkListOrd&lt;xbNodeType&gt;::GetDataForKey( <span class="keyword">const</span> xbNodeType &amp;ntKey, xbString &amp;sData ){</div>
-<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> </div>
-<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> xbLinkListNode&lt;xbNodeType&gt; *currPtr = llStartPtr;</div>
-<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> <span class="keywordflow">while</span>( currPtr &amp;&amp; ntKey &gt; currPtr-&gt;GetKey() ){</div>
-<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> currPtr = currPtr-&gt;GetNextNode();</div>
-<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> }</div>
-<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> </div>
-<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> <span class="keywordflow">if</span>( currPtr &amp;&amp; ntKey == currPtr-&gt;GetKey()){</div>
-<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> sData = currPtr-&gt;GetData();</div>
-<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a>;</div>
-<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> } <span class="keywordflow">else</span> {</div>
-<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac2606659a54111334f5b02861e533700">XB_NOT_FOUND</a>;</div>
-<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span> }</div>
-<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span>}</div>
-<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> </div>
-<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span> </div>
-<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span>xbInt16 xbLinkListOrd&lt;xbNodeType&gt;::UpdateForKey( <span class="keyword">const</span> xbNodeType &amp;ntKey, <span class="keyword">const</span> xbString &amp;sData ){</div>
-<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span> </div>
-<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> <span class="keywordflow">if</span>( ulNodeCnt == 0 )</div>
-<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> <span class="keywordflow">return</span> InsertKey( ntKey, sData );</div>
-<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> xbLinkListNode&lt;xbNodeType&gt; * currPtr = llStartPtr;</div>
-<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> xbLinkListNode&lt;xbNodeType&gt; * prevPtr = NULL;</div>
-<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> <span class="keywordflow">while</span>( currPtr &amp;&amp; ntKey &gt; currPtr-&gt;GetKey() ) {</div>
-<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span> prevPtr = currPtr;</div>
-<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span> currPtr = currPtr-&gt;GetNextNode();</div>
-<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> }</div>
-<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> </div>
-<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> <span class="keywordflow">if</span>( currPtr &amp;&amp; ntKey == currPtr-&gt;GetKey() ) {</div>
-<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> xbLinkListNode&lt;xbNodeType&gt; *p = <span class="keyword">new</span> xbLinkListNode&lt;xbNodeType&gt;( ntKey, sData );</div>
-<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> <span class="keywordflow">if</span>( prevPtr )</div>
-<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> prevPtr-&gt;SetNextNode( p );</div>
-<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span> <span class="keywordflow">else</span></div>
-<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span> llStartPtr = p;</div>
-<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> p-&gt;SetNextNode( currPtr-&gt;GetNextNode() );</div>
-<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> p-&gt;SetPrevNode( currPtr-&gt;GetPrevNode() );</div>
-<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> <span class="keyword">delete</span> currPtr;</div>
-<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span> <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a>;</div>
-<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> }</div>
-<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> </div>
-<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span> <span class="keywordflow">return</span> InsertKey( ntKey, sData );</div>
-<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span> </div>
-<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span><span class="comment">// return 0;</span></div>
-<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span>}</div>
-<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> </div>
-<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span>} <span class="comment">// namespace</span></div>
-<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> </div>
-<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span><span class="preprocessor">#endif </span><span class="comment">// XB_LINKLIST_SUPPORT</span></div>
-<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span><span class="preprocessor">#endif </span><span class="comment">// XB_XBLNKLSTORD_H__</span></div>
-<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span> </div>
-<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> </div>
-<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
-<div class="ttc" id="anamespacexb_html_ab1a750481dd487f0d384aa1d200dff0f"><div class="ttname"><a href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xb::xbBool</a></div><div class="ttdeci">short int xbBool</div><div class="ttdef"><b>Definition:</b> xbtypes.h:24</div></div>
-<div class="ttc" id="axbretcod_8h_html_a13e6876470bd34c8c4e5533f115e04eb"><div class="ttname"><a href="xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb">XB_INVALID_NODELINK</a></div><div class="ttdeci">#define XB_INVALID_NODELINK</div><div class="ttdef"><b>Definition:</b> xbretcod.h:28</div></div>
-<div class="ttc" id="axbretcod_8h_html_ac2606659a54111334f5b02861e533700"><div class="ttname"><a href="xbretcod_8h.html#ac2606659a54111334f5b02861e533700">XB_NOT_FOUND</a></div><div class="ttdeci">#define XB_NOT_FOUND</div><div class="ttdef"><b>Definition:</b> xbretcod.h:40</div></div>
-<div class="ttc" id="axbretcod_8h_html_ac720d5b4ec45bfd606f5865d40816e23"><div class="ttname"><a href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a></div><div class="ttdeci">#define XB_NO_ERROR</div><div class="ttdef"><b>Definition:</b> xbretcod.h:24</div></div>
-<div class="ttc" id="axbretcod_8h_html_ad60dbb1862c0c1c2dc0464cfbfd93a34"><div class="ttname"><a href="xbretcod_8h.html#ad60dbb1862c0c1c2dc0464cfbfd93a34">XB_KEY_NOT_UNIQUE</a></div><div class="ttdeci">#define XB_KEY_NOT_UNIQUE</div><div class="ttdef"><b>Definition:</b> xbretcod.h:29</div></div>
-<div class="ttc" id="axbretcod_8h_html_ae687fc7d872ba0475a8477e4447f9b54"><div class="ttname"><a href="xbretcod_8h.html#ae687fc7d872ba0475a8477e4447f9b54">XB_NO_MEMORY</a></div><div class="ttdeci">#define XB_NO_MEMORY</div><div class="ttdef"><b>Definition:</b> xbretcod.h:25</div></div>
-<div class="ttc" id="axbtypes_8h_html_ab0ae00665298fe7f5292691cb98ec2d9"><div class="ttname"><a href="xbtypes_8h.html#ab0ae00665298fe7f5292691cb98ec2d9">xbTrue</a></div><div class="ttdeci">#define xbTrue</div><div class="ttdef"><b>Definition:</b> xbtypes.h:28</div></div>
-<div class="ttc" id="axbtypes_8h_html_adc4b6ca5ad299f63675136d9e03938cc"><div class="ttname"><a href="xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc">xbFalse</a></div><div class="ttdeci">#define xbFalse</div><div class="ttdef"><b>Definition:</b> xbtypes.h:29</div></div>
-</div><!-- fragment --></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xblnknod_8h.html b/docs/doxygen/html/xblnknod_8h.html
deleted file mode 100644
index 381c054..0000000
--- a/docs/doxygen/html/xblnknod_8h.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xblnknod.h File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xblnknod.h File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-
-<p><a href="xblnknod_8h_source.html">Go to the source code of this file.</a></p>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xblnknod_8h_source.html b/docs/doxygen/html/xblnknod_8h_source.html
deleted file mode 100644
index db7f8d3..0000000
--- a/docs/doxygen/html/xblnknod_8h_source.html
+++ /dev/null
@@ -1,174 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xblnknod.h Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xblnknod.h</div></div>
-</div><!--header-->
-<div class="contents">
-<a href="xblnknod_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xblnknod.h</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022 Gary A Kunkel</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">*/</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#ifndef __XB_XBLNKNOD_H__</span></div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#define __XB_XBLNKNOD_H__</span></div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="preprocessor">#ifdef XB_LINKLIST_SUPPORT</span></div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="keyword">class </span>XBDLLEXPORT xbLinkListNode {</div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> xbLinkListNode( <span class="keyword">const</span> xbNodeType &amp; );</div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> xbLinkListNode( <span class="keyword">const</span> xbNodeType &amp;, <span class="keyword">const</span> xbString &amp; );</div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> xbNodeType GetKey() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> xbString &amp;GetData();</div>
-<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> xbLinkListNode&lt;xbNodeType&gt; *GetNextNode() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> xbLinkListNode&lt;xbNodeType&gt; *GetPrevNode() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> <span class="keywordtype">void</span> SetNextNode( xbLinkListNode&lt;xbNodeType&gt; *llNext );</div>
-<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <span class="keywordtype">void</span> SetPrevNode( xbLinkListNode&lt;xbNodeType&gt; *llPrev );</div>
-<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> </div>
-<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> xbNodeType ntKey;</div>
-<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> xbString sData;</div>
-<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> xbLinkListNode *llNext;</div>
-<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> xbLinkListNode *llPrev;</div>
-<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span>};</div>
-<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> </div>
-<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> xbLinkListNode&lt;xbNodeType&gt;::xbLinkListNode( <span class="keyword">const</span> xbNodeType &amp;key ){</div>
-<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> ntKey = key;</div>
-<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> llNext = NULL;</div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> llPrev = NULL;</div>
-<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> }</div>
-<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div>
-<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> xbLinkListNode&lt;xbNodeType&gt;::xbLinkListNode( <span class="keyword">const</span> xbNodeType &amp;key, <span class="keyword">const</span> xbString &amp;s ){</div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> ntKey = key;</div>
-<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> sData = s;</div>
-<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> llNext = NULL;</div>
-<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> llPrev = NULL;</div>
-<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> }</div>
-<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> </div>
-<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> xbNodeType xbLinkListNode&lt;xbNodeType&gt;::GetKey()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <span class="keywordflow">return</span> ntKey;</div>
-<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> }</div>
-<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> </div>
-<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> xbString &amp;xbLinkListNode&lt;xbNodeType&gt;::GetData(){</div>
-<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="keywordflow">return</span> sData;</div>
-<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> }</div>
-<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> </div>
-<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> xbLinkListNode&lt;xbNodeType&gt; *xbLinkListNode&lt;xbNodeType&gt;::GetNextNode()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="keywordflow">return</span> llNext;</div>
-<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> }</div>
-<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> </div>
-<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> xbLinkListNode&lt;xbNodeType&gt; *xbLinkListNode&lt;xbNodeType&gt;::GetPrevNode()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">return</span> llPrev;</div>
-<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> }</div>
-<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> </div>
-<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <span class="keywordtype">void</span> xbLinkListNode&lt;xbNodeType&gt;::SetNextNode( xbLinkListNode&lt;xbNodeType&gt; *lln ){</div>
-<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> llNext = lln;</div>
-<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> }</div>
-<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> </div>
-<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="keyword">template</span>&lt;<span class="keyword">class</span> xbNodeType&gt;</div>
-<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <span class="keywordtype">void</span> xbLinkListNode&lt;xbNodeType&gt;::SetPrevNode( xbLinkListNode&lt;xbNodeType&gt; *llp ){</div>
-<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> llPrev = llp;</div>
-<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> }</div>
-<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> </div>
-<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span>} <span class="comment">// namespace</span></div>
-<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span><span class="preprocessor">#endif </span><span class="comment">// XB_LINKLIST_SUPPORT</span></div>
-<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span><span class="preprocessor">#endif </span><span class="comment">// XB_XBLNKNOD_H__</span></div>
-<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> </div>
-<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> </div>
-<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
-</div><!-- fragment --></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xblog_8cpp.html b/docs/doxygen/html/xblog_8cpp.html
deleted file mode 100644
index 5114929..0000000
--- a/docs/doxygen/html/xblog_8cpp.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xblog.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xblog.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xblog_8h.html b/docs/doxygen/html/xblog_8h.html
deleted file mode 100644
index b53711a..0000000
--- a/docs/doxygen/html/xblog_8h.html
+++ /dev/null
@@ -1,89 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xblog.h File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#namespaces">Namespaces</a> </div>
- <div class="headertitle"><div class="title">xblog.h File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-
-<p><a href="xblog_8h_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xblog_8h_source.html b/docs/doxygen/html/xblog_8h_source.html
deleted file mode 100644
index ef5ef49..0000000
--- a/docs/doxygen/html/xblog_8h_source.html
+++ /dev/null
@@ -1,135 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xblog.h Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xblog.h</div></div>
-</div><!--header-->
-<div class="contents">
-<a href="xblog_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xblog.h</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022 Gary A Kunkel</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">*/</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#ifndef __XB_XBLOG_H__</span></div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#define __XB_XBLOG_H__</span></div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#ifdef CMAKE_COMPILER_IS_GNUCC</span></div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#pragma interface</span></div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="preprocessor">#ifdef XB_LOGGING_SUPPORT</span></div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
-<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="keyword">class </span>XBDLLEXPORT <a class="code hl_variable" href="namespacexb.html#a4a31fbe9110c9e55495ce71e642d785c">xbLog</a> : <span class="keyword">public</span> xbFile {</div>
-<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> <a class="code hl_variable" href="namespacexb.html#a4a31fbe9110c9e55495ce71e642d785c">xbLog</a>();</div>
-<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <a class="code hl_variable" href="namespacexb.html#a4a31fbe9110c9e55495ce71e642d785c">xbLog</a>( <span class="keyword">const</span> xbString &amp;sLogFileName );</div>
-<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> ~xbLog();</div>
-<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> </div>
-<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> xbInt16 LogClose ();</div>
-<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> xbInt16 LogGetStatus ();</div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> xbInt16 LogOpen ();</div>
-<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <span class="keywordtype">void</span> LogSetStatus ( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bLogStatus );</div>
-<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keywordtype">void</span> LogSetLogSize( <span class="keywordtype">size_t</span> lSize ); <span class="comment">// { LogSize = size; }</span></div>
-<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> xbInt16 LogWrite ( <span class="keyword">const</span> xbString &amp;LogEntry, xbInt16 iOutputOption = 0 );</div>
-<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> xbInt16 LogWriteBytes( xbUInt32 lByteCnt, <span class="keyword">const</span> <span class="keywordtype">char</span> *p );</div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> </div>
-<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bLoggingStatus; <span class="comment">// false = logging off</span></div>
-<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <span class="comment">// true = logging on</span></div>
-<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <span class="keywordtype">size_t</span> lLogSize;</div>
-<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> xbInt16 iShareMode;</div>
-<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span>};</div>
-<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> </div>
-<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="preprocessor">#endif </span><span class="comment">// XB_LOGGING_SUPPORT</span></div>
-<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span>} <span class="comment">// namespace</span></div>
-<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="preprocessor">#endif </span><span class="comment">// XB_XBLOG_H__</span></div>
-<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> </div>
-<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> </div>
-<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
-<div class="ttc" id="anamespacexb_html_a4a31fbe9110c9e55495ce71e642d785c"><div class="ttname"><a href="namespacexb.html#a4a31fbe9110c9e55495ce71e642d785c">xb::xbLog</a></div><div class="ttdeci">class XBDLLEXPORT xbLog</div><div class="ttdef"><b>Definition:</b> xbxbase.h:26</div></div>
-<div class="ttc" id="anamespacexb_html_ab1a750481dd487f0d384aa1d200dff0f"><div class="ttname"><a href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xb::xbBool</a></div><div class="ttdeci">short int xbBool</div><div class="ttdef"><b>Definition:</b> xbtypes.h:24</div></div>
-</div><!-- fragment --></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbmemo3_8cpp.html b/docs/doxygen/html/xbmemo3_8cpp.html
deleted file mode 100644
index e1bdf62..0000000
--- a/docs/doxygen/html/xbmemo3_8cpp.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbmemo3.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbmemo3.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbmemo4_8cpp.html b/docs/doxygen/html/xbmemo4_8cpp.html
deleted file mode 100644
index 99b2580..0000000
--- a/docs/doxygen/html/xbmemo4_8cpp.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbmemo4.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbmemo4.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbmemo_8cpp.html b/docs/doxygen/html/xbmemo_8cpp.html
deleted file mode 100644
index 706b54a..0000000
--- a/docs/doxygen/html/xbmemo_8cpp.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbmemo.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbmemo.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbmemo_8h.html b/docs/doxygen/html/xbmemo_8h.html
deleted file mode 100644
index 409d3ce..0000000
--- a/docs/doxygen/html/xbmemo_8h.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbmemo.h File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbmemo.h File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-
-<p><a href="xbmemo_8h_source.html">Go to the source code of this file.</a></p>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbmemo_8h_source.html b/docs/doxygen/html/xbmemo_8h_source.html
deleted file mode 100644
index da8fab4..0000000
--- a/docs/doxygen/html/xbmemo_8h_source.html
+++ /dev/null
@@ -1,263 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbmemo.h Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbmemo.h</div></div>
-</div><!--header-->
-<div class="contents">
-<a href="xbmemo_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbmemo.h</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022 Gary A Kunkel</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">*/</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#ifndef __XB_XBMEMO_H__</span></div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#define __XB_XBMEMO_H__</span></div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="comment">// dont use &quot;#pragma interface&quot; with abstract classes</span></div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="comment">// #ifdef CMAKE_COMPILER_IS_GNUCC</span></div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="comment">// #pragma interface</span></div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="comment">// #endif</span></div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor">#ifdef XB_MEMO_SUPPORT</span></div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> </div>
-<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> </div>
-<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="keyword">class </span>XBDLLEXPORT xbMemo : <span class="keyword">public</span> xbFile {</div>
-<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> </div>
-<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> xbMemo( <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *dbf, xbString <span class="keyword">const</span> &amp;sFileName );</div>
-<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> </div>
-<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="comment">/* virtual methods */</span></div>
-<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <span class="keyword">virtual</span> ~xbMemo();</div>
-<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <span class="keyword">virtual</span> xbInt16 Abort () = 0;</div>
-<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="keyword">virtual</span> xbInt16 CloseMemoFile ();</div>
-<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="keyword">virtual</span> xbInt16 Commit () = 0;</div>
-<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="keyword">virtual</span> xbInt16 CreateMemoFile () = 0;</div>
-<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> </div>
-<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="keyword">virtual</span> xbInt16 DumpMemoHeader () = 0;</div>
-<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> </div>
-<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> </div>
-<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <span class="keyword">virtual</span> xbInt16 GetMemoField ( xbInt16 iFieldNo, xbString &amp;sMemoData ) = 0;</div>
-<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keyword">virtual</span> xbInt16 GetMemoFieldLen ( xbInt16 iFieldNo, xbUInt32 &amp;ulMemoFieldLen ) = 0;</div>
-<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="keyword">virtual</span> xbInt16 OpenMemoFile () = 0;</div>
-<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <span class="keyword">virtual</span> xbInt16 GetMemoFileType ();</div>
-<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="keyword">virtual</span> xbInt16 PackMemo ( <span class="keywordtype">void</span> (*memoStatusFunc)(xbUInt32 ulItemNum, xbUInt32 ulNumItems)) = 0;</div>
-<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="keyword">virtual</span> xbInt16 UpdateMemoField ( xbInt16 iFieldNo, <span class="keyword">const</span> xbString &amp;sMemoData ) = 0;</div>
-<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> </div>
-<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
-<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keyword">virtual</span> xbInt16 DumpMemoFreeChain() = 0;</div>
-<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> </div>
-<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span><span class="preprocessor"> #ifdef XB_LOCKING_SUPPORT</span></div>
-<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <span class="keyword">virtual</span> xbInt16 LockMemo ( xbInt16 iLockFunction );</div>
-<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="keyword">virtual</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetMemoLocked () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> </div>
-<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> </div>
-<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> </div>
-<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> <span class="comment">// *********** FIXME *************</span></div>
-<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <span class="comment">// next two methods should be protected but are called in the xb_test_xxxx programs testing routines</span></div>
-<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="comment">// so for now, they are kept as public</span></div>
-<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <span class="keyword">virtual</span> xbInt16 CalcLastDataBlock ( xbUInt32 &amp;lLastDataBlock );</div>
-<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> <span class="keyword">virtual</span> xbInt16 GetHdrNextBlock ( xbUInt32 &amp;ulBlockNo );</div>
-<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> </div>
-<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> <span class="keyword">protected</span>:</div>
-<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a>;</div>
-<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> </div>
-<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <span class="keyword">virtual</span> xbInt16 ReadDbtHeader ( xbInt16 iOption ) = 0;</div>
-<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keyword">virtual</span> xbInt16 UpdateHeaderName () = 0;</div>
-<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <span class="keyword">virtual</span> xbInt16 UpdateHeadNextNode();</div>
-<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="keyword">virtual</span> xbInt16 Zap () = 0;</div>
-<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> </div>
-<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *dbf; <span class="comment">/* pointer to related dbf instance */</span></div>
-<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> <span class="keywordtype">char</span> cVersion; <span class="comment">/* byte 16 off the header block, 0x03 for V3, version IV - ? */</span></div>
-<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> xbInt16 iMemoFileType; <span class="comment">/* 3 = version III, 4 = version IV */</span></div>
-<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> xbUInt32 ulHdrNextBlock; <span class="comment">/* next available block , bytes 0-3 of the memo header */</span></div>
-<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <span class="keywordtype">void</span> * mbb; <span class="comment">/* memo block buffer */</span></div>
-<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> </div>
-<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> </div>
-<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> </div>
-<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span><span class="preprocessor"> #ifdef XB_LOCKING_SUPPORT</span></div>
-<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bFileLocked; <span class="comment">/* memo file locked */</span></div>
-<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> </div>
-<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span>};</div>
-<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> </div>
-<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> </div>
-<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> </div>
-<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span><span class="preprocessor">#ifdef XB_DBF3_SUPPORT</span></div>
-<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> </div>
-<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span><span class="keyword">class </span>XBDLLEXPORT xbMemoDbt3 : <span class="keyword">public</span> xbMemo {</div>
-<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> xbMemoDbt3( <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *dbf, xbString <span class="keyword">const</span> &amp;sFileName );</div>
-<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> ~xbMemoDbt3();</div>
-<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <span class="keyword">virtual</span> xbInt16 Abort ();</div>
-<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keyword">virtual</span> xbInt16 Commit ();</div>
-<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keyword">virtual</span> xbInt16 CreateMemoFile ();</div>
-<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <span class="keyword">virtual</span> xbInt16 DumpMemoHeader ();</div>
-<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="keyword">virtual</span> xbInt16 GetMemoField ( xbInt16 iFieldNo, xbString &amp;sMemoData );</div>
-<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="keyword">virtual</span> xbInt16 GetMemoFieldLen( xbInt16 iFieldNo, xbUInt32 &amp;ulMemoFieldLen );</div>
-<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <span class="keyword">virtual</span> xbInt16 OpenMemoFile ();</div>
-<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> <span class="keyword">virtual</span> xbInt16 PackMemo ( <span class="keywordtype">void</span> (*memoStatusFunc) (xbUInt32 ulItemNum, xbUInt32 ulNumItems));</div>
-<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="keyword">virtual</span> xbInt16 UpdateMemoField( xbInt16 iFieldNo, <span class="keyword">const</span> xbString &amp;sMemoData );</div>
-<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> </div>
-<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
-<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="keyword">virtual</span> xbInt16 DumpMemoFreeChain();</div>
-<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> </div>
-<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> <span class="keyword">protected</span>:</div>
-<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="keyword">virtual</span> xbInt16 ReadDbtHeader( xbInt16 iOption );</div>
-<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <span class="keyword">virtual</span> xbInt16 UpdateHeaderName();</div>
-<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="keyword">virtual</span> xbInt16 Zap();</div>
-<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> </div>
-<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span>};</div>
-<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> </div>
-<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> </div>
-<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span><span class="preprocessor">#ifdef XB_DBF4_SUPPORT</span></div>
-<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> </div>
-<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> </div>
-<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span><span class="keyword">class </span>XBDLLEXPORT xbMemoDbt4 : <span class="keyword">public</span> xbMemo {</div>
-<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> xbMemoDbt4( <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *dbf, xbString <span class="keyword">const</span> &amp;sFileName );</div>
-<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> ~xbMemoDbt4();</div>
-<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> <span class="keyword">virtual</span> xbInt16 Abort ();</div>
-<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> <span class="keyword">virtual</span> xbInt16 Commit ();</div>
-<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> <span class="keyword">virtual</span> xbInt16 CreateMemoFile ();</div>
-<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> <span class="keyword">virtual</span> xbInt16 DumpMemoHeader ();</div>
-<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> <span class="keyword">virtual</span> xbInt16 GetMemoField ( xbInt16 iFieldNo, xbString &amp;sMemoData );</div>
-<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <span class="keyword">virtual</span> xbInt16 GetMemoFieldLen ( xbInt16 iFieldNo, xbUInt32 &amp;ulMemoFieldLen );</div>
-<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> <span class="keyword">virtual</span> xbInt16 GetMemoFieldLen ( xbInt16 iFieldNo, xbUInt32 &amp;ulMemoFieldLen, xbUInt32 &amp;lBlockNo );</div>
-<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <span class="keyword">virtual</span> xbInt16 OpenMemoFile ();</div>
-<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <span class="keyword">virtual</span> xbInt16 PackMemo ( <span class="keywordtype">void</span> (*memoStatusFunc) (xbUInt32 ulItemNum, xbUInt32 ulNumItems));</div>
-<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <span class="keyword">virtual</span> xbInt16 UpdateMemoField ( xbInt16 iFieldNo, <span class="keyword">const</span> xbString &amp;sMemoData );</div>
-<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> </div>
-<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
-<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> <span class="keyword">virtual</span> xbInt16 DumpMemoFreeChain ();</div>
-<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> <span class="keyword">virtual</span> xbInt16 DumpMemoInternals ();</div>
-<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> <span class="keyword">virtual</span> xbInt16 ReadFreeBlockHeader( xbUInt32 ulBlockNo, xbUInt32 &amp;ulNextBlock, xbUInt32 &amp;ulFreeBlockCnt );</div>
-<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> </div>
-<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> <span class="keyword">protected</span>:</div>
-<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> <span class="keyword">virtual</span> xbInt16 FindBlockSetInChain( xbUInt32 ulBlocksNeeded, xbUInt32 &amp;ulLastDataBlock, xbUInt32 &amp;ulLocation, xbUInt32 &amp;ulPrevNode, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bFound );</div>
-<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> <span class="keyword">virtual</span> xbInt16 FreeMemoBlockChain( xbUInt32 ulBlockNo );</div>
-<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> <span class="keyword">virtual</span> xbInt16 FreeMemoBlockChain( xbUInt32 ulBlockNo, xbUInt32 &amp;ulLastDataBlock );</div>
-<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> <span class="keyword">virtual</span> xbInt16 GetBlockSetFromChain( xbUInt32 ulBlocksNeeded, xbUInt32 ulLocation, xbUInt32 ulPrevNode );</div>
-<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> <span class="keyword">virtual</span> xbInt16 ReadDbtHeader( xbInt16 iOption );</div>
-<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <span class="keyword">virtual</span> xbInt16 ReadBlockHeader( xbUInt32 ulBlockNo, xbInt16 iOption );</div>
-<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> <span class="keyword">virtual</span> xbInt16 UpdateHeaderName ();</div>
-<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> <span class="keyword">virtual</span> xbInt16 WriteBlockHeader( xbUInt32 ulBlockNo, xbInt16 iOption );</div>
-<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> <span class="keyword">virtual</span> xbInt16 Zap();</div>
-<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> </div>
-<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> xbString sDbfFileNameWoExt;</div>
-<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> xbUInt32 ulNextFreeBlock;</div>
-<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> xbUInt32 ulFreeBlockCnt;</div>
-<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> xbInt16 iField1;</div>
-<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> xbInt16 iStartPos;</div>
-<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> xbUInt32 ulFieldLen;</div>
-<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> </div>
-<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> xbLinkList&lt;xbUInt32&gt; llOldBlocks; <span class="comment">// list of previously used memo blocks for field, used by Commit() / Abort()</span></div>
-<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> xbLinkList&lt;xbUInt32&gt; llNewBlocks; <span class="comment">// list of newly updated memo blocks for field, used by Commit() / Abort()</span></div>
-<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> </div>
-<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span>};</div>
-<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> </div>
-<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> </div>
-<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span>} <span class="comment">/* namespace xb */</span></div>
-<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span><span class="preprocessor">#endif </span><span class="comment">/* XB_MEMO_SUPPORT */</span><span class="preprocessor"></span></div>
-<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_MEMO_H__ */</span><span class="preprocessor"></span></div>
-<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> </div>
-<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
-<div class="ttc" id="anamespacexb_html_ab1a750481dd487f0d384aa1d200dff0f"><div class="ttname"><a href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xb::xbBool</a></div><div class="ttdeci">short int xbBool</div><div class="ttdef"><b>Definition:</b> xbtypes.h:24</div></div>
-<div class="ttc" id="anamespacexb_html_ab2eae4b4732466698a7fdd89d77ba53b"><div class="ttname"><a href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xb::xbDbf</a></div><div class="ttdeci">class XBDLLEXPORT xbDbf</div><div class="ttdef"><b>Definition:</b> xbtblmgr.h:28</div></div>
-</div><!-- fragment --></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbretcod_8h.html b/docs/doxygen/html/xbretcod_8h.html
deleted file mode 100644
index d5ac672..0000000
--- a/docs/doxygen/html/xbretcod_8h.html
+++ /dev/null
@@ -1,1006 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbretcod.h File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#namespaces">Namespaces</a> &#124;
-<a href="#define-members">Macros</a> </div>
- <div class="headertitle"><div class="title">xbretcod.h File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-
-<p><a href="xbretcod_8h_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a>
-Macros</h2></td></tr>
-<tr class="memitem:ac720d5b4ec45bfd606f5865d40816e23"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a>&#160;&#160;&#160;0</td></tr>
-<tr class="separator:ac720d5b4ec45bfd606f5865d40816e23"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae687fc7d872ba0475a8477e4447f9b54"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#ae687fc7d872ba0475a8477e4447f9b54">XB_NO_MEMORY</a>&#160;&#160;&#160;-100</td></tr>
-<tr class="separator:ae687fc7d872ba0475a8477e4447f9b54"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af1cd0baf346cad686fa4dd11f700012a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#af1cd0baf346cad686fa4dd11f700012a">XB_INVALID_OPTION</a>&#160;&#160;&#160;-101</td></tr>
-<tr class="separator:af1cd0baf346cad686fa4dd11f700012a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac18036408d10e5eee1bf76cf92352b95"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#ac18036408d10e5eee1bf76cf92352b95">XB_DUP_TABLE_OR_ALIAS</a>&#160;&#160;&#160;-110</td></tr>
-<tr class="separator:ac18036408d10e5eee1bf76cf92352b95"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a13e6876470bd34c8c4e5533f115e04eb"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb">XB_INVALID_NODELINK</a>&#160;&#160;&#160;-120</td></tr>
-<tr class="separator:a13e6876470bd34c8c4e5533f115e04eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad60dbb1862c0c1c2dc0464cfbfd93a34"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#ad60dbb1862c0c1c2dc0464cfbfd93a34">XB_KEY_NOT_UNIQUE</a>&#160;&#160;&#160;-121</td></tr>
-<tr class="separator:ad60dbb1862c0c1c2dc0464cfbfd93a34"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa2925f035e3b186d7efa14648ea0e86d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#aa2925f035e3b186d7efa14648ea0e86d">XB_MEMCPY_ERROR</a>&#160;&#160;&#160;-122</td></tr>
-<tr class="separator:aa2925f035e3b186d7efa14648ea0e86d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a54303a9677dbd5342233f33dd08c64d0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a54303a9677dbd5342233f33dd08c64d0">XB_FILE_EXISTS</a>&#160;&#160;&#160;-200</td></tr>
-<tr class="separator:a54303a9677dbd5342233f33dd08c64d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa2ff8301503f446c6a5f6510090e520f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#aa2ff8301503f446c6a5f6510090e520f">XB_ALREADY_OPEN</a>&#160;&#160;&#160;-201</td></tr>
-<tr class="separator:aa2ff8301503f446c6a5f6510090e520f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a8104510b347c87998eadd0b27201e3c2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a8104510b347c87998eadd0b27201e3c2">XB_DBF_FILE_NOT_OPEN</a>&#160;&#160;&#160;-202</td></tr>
-<tr class="separator:a8104510b347c87998eadd0b27201e3c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad090af330c93111d12f6de35dbb065bc"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#ad090af330c93111d12f6de35dbb065bc">XB_FILE_NOT_FOUND</a>&#160;&#160;&#160;-203</td></tr>
-<tr class="separator:ad090af330c93111d12f6de35dbb065bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab7b9130a5f1df9975cfeaf6241933596"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#ab7b9130a5f1df9975cfeaf6241933596">XB_FILE_TYPE_NOT_SUPPORTED</a>&#160;&#160;&#160;-204</td></tr>
-<tr class="separator:ab7b9130a5f1df9975cfeaf6241933596"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a373f30b2efcbbab9f6d060fb3fe8cba3"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a373f30b2efcbbab9f6d060fb3fe8cba3">XB_RENAME_ERROR</a>&#160;&#160;&#160;-205</td></tr>
-<tr class="separator:a373f30b2efcbbab9f6d060fb3fe8cba3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a418c047353bc683d0fd6ecbbdd5b7885"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a418c047353bc683d0fd6ecbbdd5b7885">XB_INVALID_OBJECT</a>&#160;&#160;&#160;-206</td></tr>
-<tr class="separator:a418c047353bc683d0fd6ecbbdd5b7885"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9474b400f647bdefbbb07e5177e8d7a1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a9474b400f647bdefbbb07e5177e8d7a1">XB_NOT_OPEN</a>&#160;&#160;&#160;-207</td></tr>
-<tr class="separator:a9474b400f647bdefbbb07e5177e8d7a1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac2606659a54111334f5b02861e533700"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#ac2606659a54111334f5b02861e533700">XB_NOT_FOUND</a>&#160;&#160;&#160;-208</td></tr>
-<tr class="separator:ac2606659a54111334f5b02861e533700"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aaab55236993a1d3acb29206252a904c8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#aaab55236993a1d3acb29206252a904c8">XB_OPEN_ERROR</a>&#160;&#160;&#160;-209</td></tr>
-<tr class="separator:aaab55236993a1d3acb29206252a904c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a030684d5541cf6127a76d81b0684b235"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a030684d5541cf6127a76d81b0684b235">XB_CLOSE_ERROR</a>&#160;&#160;&#160;-210</td></tr>
-<tr class="separator:a030684d5541cf6127a76d81b0684b235"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0455ad8719e153b08ec68b10c81e9f41"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a0455ad8719e153b08ec68b10c81e9f41">XB_SEEK_ERROR</a>&#160;&#160;&#160;-211</td></tr>
-<tr class="separator:a0455ad8719e153b08ec68b10c81e9f41"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:adbd40585db8bb748d191f94a33bac710"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#adbd40585db8bb748d191f94a33bac710">XB_READ_ERROR</a>&#160;&#160;&#160;-212</td></tr>
-<tr class="separator:adbd40585db8bb748d191f94a33bac710"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aef34ebe6726057f805d6063130280549"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#aef34ebe6726057f805d6063130280549">XB_WRITE_ERROR</a>&#160;&#160;&#160;-213</td></tr>
-<tr class="separator:aef34ebe6726057f805d6063130280549"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a8b47031e90c3f86306c7058e4490d3b7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a8b47031e90c3f86306c7058e4490d3b7">XB_EOF</a>&#160;&#160;&#160;-214</td></tr>
-<tr class="separator:a8b47031e90c3f86306c7058e4490d3b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ade5f3a7cf1467d12761e4e21b5e4200f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#ade5f3a7cf1467d12761e4e21b5e4200f">XB_BOF</a>&#160;&#160;&#160;-215</td></tr>
-<tr class="separator:ade5f3a7cf1467d12761e4e21b5e4200f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1bd22921612389c37f6b2eac438c62c5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a1bd22921612389c37f6b2eac438c62c5">XB_INVALID_BLOCK_SIZE</a>&#160;&#160;&#160;-216</td></tr>
-<tr class="separator:a1bd22921612389c37f6b2eac438c62c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4e13b529b486c43ca600ce7d8ddbf3c2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a4e13b529b486c43ca600ce7d8ddbf3c2">XB_INVALID_BLOCK_NO</a>&#160;&#160;&#160;-217</td></tr>
-<tr class="separator:a4e13b529b486c43ca600ce7d8ddbf3c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0fd212f912b2e62700a66bae95bd73a1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a0fd212f912b2e62700a66bae95bd73a1">XB_INVALID_RECORD</a>&#160;&#160;&#160;-218</td></tr>
-<tr class="separator:a0fd212f912b2e62700a66bae95bd73a1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ada15513935d5ede9216f07c0438f34d2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#ada15513935d5ede9216f07c0438f34d2">XB_DELETE_FAILED</a>&#160;&#160;&#160;-219</td></tr>
-<tr class="separator:ada15513935d5ede9216f07c0438f34d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a53891c95a78483704d2a8e14c4499f92"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a53891c95a78483704d2a8e14c4499f92">XB_INVALID_TABLE_NAME</a>&#160;&#160;&#160;-220</td></tr>
-<tr class="separator:a53891c95a78483704d2a8e14c4499f92"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a18068d0cbe0c7a1b4dd3176220180c29"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a18068d0cbe0c7a1b4dd3176220180c29">XB_EMPTY</a>&#160;&#160;&#160;-221</td></tr>
-<tr class="separator:a18068d0cbe0c7a1b4dd3176220180c29"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a59f1a8a6aca19595c2d1804349a24850"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a59f1a8a6aca19595c2d1804349a24850">XB_LIMIT_REACHED</a>&#160;&#160;&#160;-222</td></tr>
-<tr class="separator:a59f1a8a6aca19595c2d1804349a24850"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aae9241d91cfb37f5d236128b3bce0a4a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#aae9241d91cfb37f5d236128b3bce0a4a">XB_BLOCKREAD_NOT_ENABLED</a>&#160;&#160;&#160;-223</td></tr>
-<tr class="separator:aae9241d91cfb37f5d236128b3bce0a4a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af532df74147ce2d872f61abfee49c53e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#af532df74147ce2d872f61abfee49c53e">XB_DIRECTORY_ERROR</a>&#160;&#160;&#160;-224</td></tr>
-<tr class="separator:af532df74147ce2d872f61abfee49c53e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a79e2588f067d6e236c0e5a2c0728ba9f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a79e2588f067d6e236c0e5a2c0728ba9f">XB_INVALID_FIELD_TYPE</a>&#160;&#160;&#160;-300</td></tr>
-<tr class="separator:a79e2588f067d6e236c0e5a2c0728ba9f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a09d6c08a44316f551108a74003efd381"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a09d6c08a44316f551108a74003efd381">XB_INVALID_FIELD_NO</a>&#160;&#160;&#160;-301</td></tr>
-<tr class="separator:a09d6c08a44316f551108a74003efd381"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:afb40bbed323ecb369dd430a2e1242f9a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#afb40bbed323ecb369dd430a2e1242f9a">XB_INVALID_DATA</a>&#160;&#160;&#160;-302</td></tr>
-<tr class="separator:afb40bbed323ecb369dd430a2e1242f9a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a59403978784130834cf39434cb73f96e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a59403978784130834cf39434cb73f96e">XB_INVALID_FIELD_NAME</a>&#160;&#160;&#160;-303</td></tr>
-<tr class="separator:a59403978784130834cf39434cb73f96e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a187c50745f51bfe4aa6f70a92f16c59f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a187c50745f51bfe4aa6f70a92f16c59f">XB_INVALID_MEMO_FIELD</a>&#160;&#160;&#160;-304</td></tr>
-<tr class="separator:a187c50745f51bfe4aa6f70a92f16c59f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a34180b2e2bd350ba2ebcdd1335e15d7e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a34180b2e2bd350ba2ebcdd1335e15d7e">XB_INVALID_FIELD</a>&#160;&#160;&#160;-305</td></tr>
-<tr class="separator:a34180b2e2bd350ba2ebcdd1335e15d7e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7bd322c0efbba17f68ccccd6cf624411"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a7bd322c0efbba17f68ccccd6cf624411">XB_INVALID_FIELD_LEN</a>&#160;&#160;&#160;-306</td></tr>
-<tr class="separator:a7bd322c0efbba17f68ccccd6cf624411"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a702475500357a27b8a34463be3e11925"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a702475500357a27b8a34463be3e11925">XB_INVALID_DATE</a>&#160;&#160;&#160;-307</td></tr>
-<tr class="separator:a702475500357a27b8a34463be3e11925"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab45735e63c208eb7e6d6df31fd527aec"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#ab45735e63c208eb7e6d6df31fd527aec">XB_INVALID_LOCK_OPTION</a>&#160;&#160;&#160;-400</td></tr>
-<tr class="separator:ab45735e63c208eb7e6d6df31fd527aec"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a001e24b39e0f155fb1e892f5b1b9cff1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a001e24b39e0f155fb1e892f5b1b9cff1">XB_LOCK_FAILED</a>&#160;&#160;&#160;-401</td></tr>
-<tr class="separator:a001e24b39e0f155fb1e892f5b1b9cff1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af6aaf779fddecca521d785666f6dc56b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#af6aaf779fddecca521d785666f6dc56b">XB_TABLE_NOT_LOCKED</a>&#160;&#160;&#160;-402</td></tr>
-<tr class="separator:af6aaf779fddecca521d785666f6dc56b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aec713cac2b03a0d536a2d16336ae7c0b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#aec713cac2b03a0d536a2d16336ae7c0b">XB_PARSE_ERROR</a>&#160;&#160;&#160;-500</td></tr>
-<tr class="separator:aec713cac2b03a0d536a2d16336ae7c0b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2b7e5e440dbcf5e6dc885b24dbe28742"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a2b7e5e440dbcf5e6dc885b24dbe28742">XB_INVALID_FUNCTION</a>&#160;&#160;&#160;-501</td></tr>
-<tr class="separator:a2b7e5e440dbcf5e6dc885b24dbe28742"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4cedf96581c9cbc9c14d07494143702d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a4cedf96581c9cbc9c14d07494143702d">XB_INVALID_PARM</a>&#160;&#160;&#160;-502</td></tr>
-<tr class="separator:a4cedf96581c9cbc9c14d07494143702d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:adc4b24bfffa202f8df25409894e547b9"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#adc4b24bfffa202f8df25409894e547b9">XB_INCONSISTENT_PARM_LENS</a>&#160;&#160;&#160;-503</td></tr>
-<tr class="separator:adc4b24bfffa202f8df25409894e547b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af141ec58b7ca7360e0be6c61d015ea74"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#af141ec58b7ca7360e0be6c61d015ea74">XB_INCOMPATIBLE_OPERANDS</a>&#160;&#160;&#160;-504</td></tr>
-<tr class="separator:af141ec58b7ca7360e0be6c61d015ea74"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aff5646a6b0884ff81004de6961473ea6"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#aff5646a6b0884ff81004de6961473ea6">XB_UNBALANCED_PARENS</a>&#160;&#160;&#160;-505</td></tr>
-<tr class="separator:aff5646a6b0884ff81004de6961473ea6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aedfa20a6c4eb9ba3063ba56be8280eac"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#aedfa20a6c4eb9ba3063ba56be8280eac">XB_UNBALANCED_QUOTES</a>&#160;&#160;&#160;-506</td></tr>
-<tr class="separator:aedfa20a6c4eb9ba3063ba56be8280eac"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a54db562c3cae97581812b4fccd52b71a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a54db562c3cae97581812b4fccd52b71a">XB_INVALID_EXPRESSION</a>&#160;&#160;&#160;-507</td></tr>
-<tr class="separator:a54db562c3cae97581812b4fccd52b71a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aec2c0ac2bd62e0329ef130e4fbda39f8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#aec2c0ac2bd62e0329ef130e4fbda39f8">XB_INVALID_KEYNO</a>&#160;&#160;&#160;-600</td></tr>
-<tr class="separator:aec2c0ac2bd62e0329ef130e4fbda39f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:acd175ef0541e2cad424791bd87619dd4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#acd175ef0541e2cad424791bd87619dd4">XB_INVALID_INDEX</a>&#160;&#160;&#160;-601</td></tr>
-<tr class="separator:acd175ef0541e2cad424791bd87619dd4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a176d917912d3433f065483f905a4c50a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a176d917912d3433f065483f905a4c50a">XB_INVALID_TAG</a>&#160;&#160;&#160;-602</td></tr>
-<tr class="separator:a176d917912d3433f065483f905a4c50a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad0aba12b5ae2137f8d6abd28b47f95f0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#ad0aba12b5ae2137f8d6abd28b47f95f0">XB_INVALID_PAGE</a>&#160;&#160;&#160;-603</td></tr>
-<tr class="separator:ad0aba12b5ae2137f8d6abd28b47f95f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5db3a90f215534143bdde81253729c7f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a5db3a90f215534143bdde81253729c7f">XB_SYNTAX_ERROR</a>&#160;&#160;&#160;-700</td></tr>
-<tr class="separator:a5db3a90f215534143bdde81253729c7f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a299419a9c80e000b74bf97a2d24d6a3d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a299419a9c80e000b74bf97a2d24d6a3d">XB_MAX_ERROR_NO</a>&#160;&#160;&#160;-999</td></tr>
-<tr class="separator:a299419a9c80e000b74bf97a2d24d6a3d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Macro Definition Documentation</h2>
-<a id="aa2ff8301503f446c6a5f6510090e520f" name="aa2ff8301503f446c6a5f6510090e520f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aa2ff8301503f446c6a5f6510090e520f">&#9670;&nbsp;</a></span>XB_ALREADY_OPEN</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_ALREADY_OPEN&#160;&#160;&#160;-201</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="aae9241d91cfb37f5d236128b3bce0a4a" name="aae9241d91cfb37f5d236128b3bce0a4a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aae9241d91cfb37f5d236128b3bce0a4a">&#9670;&nbsp;</a></span>XB_BLOCKREAD_NOT_ENABLED</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_BLOCKREAD_NOT_ENABLED&#160;&#160;&#160;-223</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ade5f3a7cf1467d12761e4e21b5e4200f" name="ade5f3a7cf1467d12761e4e21b5e4200f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ade5f3a7cf1467d12761e4e21b5e4200f">&#9670;&nbsp;</a></span>XB_BOF</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_BOF&#160;&#160;&#160;-215</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a030684d5541cf6127a76d81b0684b235" name="a030684d5541cf6127a76d81b0684b235"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a030684d5541cf6127a76d81b0684b235">&#9670;&nbsp;</a></span>XB_CLOSE_ERROR</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_CLOSE_ERROR&#160;&#160;&#160;-210</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a8104510b347c87998eadd0b27201e3c2" name="a8104510b347c87998eadd0b27201e3c2"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a8104510b347c87998eadd0b27201e3c2">&#9670;&nbsp;</a></span>XB_DBF_FILE_NOT_OPEN</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_DBF_FILE_NOT_OPEN&#160;&#160;&#160;-202</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ada15513935d5ede9216f07c0438f34d2" name="ada15513935d5ede9216f07c0438f34d2"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ada15513935d5ede9216f07c0438f34d2">&#9670;&nbsp;</a></span>XB_DELETE_FAILED</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_DELETE_FAILED&#160;&#160;&#160;-219</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="af532df74147ce2d872f61abfee49c53e" name="af532df74147ce2d872f61abfee49c53e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af532df74147ce2d872f61abfee49c53e">&#9670;&nbsp;</a></span>XB_DIRECTORY_ERROR</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_DIRECTORY_ERROR&#160;&#160;&#160;-224</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ac18036408d10e5eee1bf76cf92352b95" name="ac18036408d10e5eee1bf76cf92352b95"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac18036408d10e5eee1bf76cf92352b95">&#9670;&nbsp;</a></span>XB_DUP_TABLE_OR_ALIAS</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_DUP_TABLE_OR_ALIAS&#160;&#160;&#160;-110</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a18068d0cbe0c7a1b4dd3176220180c29" name="a18068d0cbe0c7a1b4dd3176220180c29"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a18068d0cbe0c7a1b4dd3176220180c29">&#9670;&nbsp;</a></span>XB_EMPTY</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_EMPTY&#160;&#160;&#160;-221</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a8b47031e90c3f86306c7058e4490d3b7" name="a8b47031e90c3f86306c7058e4490d3b7"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a8b47031e90c3f86306c7058e4490d3b7">&#9670;&nbsp;</a></span>XB_EOF</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_EOF&#160;&#160;&#160;-214</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a54303a9677dbd5342233f33dd08c64d0" name="a54303a9677dbd5342233f33dd08c64d0"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a54303a9677dbd5342233f33dd08c64d0">&#9670;&nbsp;</a></span>XB_FILE_EXISTS</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_FILE_EXISTS&#160;&#160;&#160;-200</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ad090af330c93111d12f6de35dbb065bc" name="ad090af330c93111d12f6de35dbb065bc"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ad090af330c93111d12f6de35dbb065bc">&#9670;&nbsp;</a></span>XB_FILE_NOT_FOUND</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_FILE_NOT_FOUND&#160;&#160;&#160;-203</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ab7b9130a5f1df9975cfeaf6241933596" name="ab7b9130a5f1df9975cfeaf6241933596"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab7b9130a5f1df9975cfeaf6241933596">&#9670;&nbsp;</a></span>XB_FILE_TYPE_NOT_SUPPORTED</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_FILE_TYPE_NOT_SUPPORTED&#160;&#160;&#160;-204</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="af141ec58b7ca7360e0be6c61d015ea74" name="af141ec58b7ca7360e0be6c61d015ea74"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af141ec58b7ca7360e0be6c61d015ea74">&#9670;&nbsp;</a></span>XB_INCOMPATIBLE_OPERANDS</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_INCOMPATIBLE_OPERANDS&#160;&#160;&#160;-504</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="adc4b24bfffa202f8df25409894e547b9" name="adc4b24bfffa202f8df25409894e547b9"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#adc4b24bfffa202f8df25409894e547b9">&#9670;&nbsp;</a></span>XB_INCONSISTENT_PARM_LENS</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_INCONSISTENT_PARM_LENS&#160;&#160;&#160;-503</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a4e13b529b486c43ca600ce7d8ddbf3c2" name="a4e13b529b486c43ca600ce7d8ddbf3c2"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4e13b529b486c43ca600ce7d8ddbf3c2">&#9670;&nbsp;</a></span>XB_INVALID_BLOCK_NO</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_INVALID_BLOCK_NO&#160;&#160;&#160;-217</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a1bd22921612389c37f6b2eac438c62c5" name="a1bd22921612389c37f6b2eac438c62c5"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1bd22921612389c37f6b2eac438c62c5">&#9670;&nbsp;</a></span>XB_INVALID_BLOCK_SIZE</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_INVALID_BLOCK_SIZE&#160;&#160;&#160;-216</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="afb40bbed323ecb369dd430a2e1242f9a" name="afb40bbed323ecb369dd430a2e1242f9a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#afb40bbed323ecb369dd430a2e1242f9a">&#9670;&nbsp;</a></span>XB_INVALID_DATA</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_INVALID_DATA&#160;&#160;&#160;-302</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a702475500357a27b8a34463be3e11925" name="a702475500357a27b8a34463be3e11925"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a702475500357a27b8a34463be3e11925">&#9670;&nbsp;</a></span>XB_INVALID_DATE</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_INVALID_DATE&#160;&#160;&#160;-307</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a54db562c3cae97581812b4fccd52b71a" name="a54db562c3cae97581812b4fccd52b71a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a54db562c3cae97581812b4fccd52b71a">&#9670;&nbsp;</a></span>XB_INVALID_EXPRESSION</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_INVALID_EXPRESSION&#160;&#160;&#160;-507</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a34180b2e2bd350ba2ebcdd1335e15d7e" name="a34180b2e2bd350ba2ebcdd1335e15d7e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a34180b2e2bd350ba2ebcdd1335e15d7e">&#9670;&nbsp;</a></span>XB_INVALID_FIELD</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_INVALID_FIELD&#160;&#160;&#160;-305</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a7bd322c0efbba17f68ccccd6cf624411" name="a7bd322c0efbba17f68ccccd6cf624411"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a7bd322c0efbba17f68ccccd6cf624411">&#9670;&nbsp;</a></span>XB_INVALID_FIELD_LEN</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_INVALID_FIELD_LEN&#160;&#160;&#160;-306</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a59403978784130834cf39434cb73f96e" name="a59403978784130834cf39434cb73f96e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a59403978784130834cf39434cb73f96e">&#9670;&nbsp;</a></span>XB_INVALID_FIELD_NAME</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_INVALID_FIELD_NAME&#160;&#160;&#160;-303</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a09d6c08a44316f551108a74003efd381" name="a09d6c08a44316f551108a74003efd381"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a09d6c08a44316f551108a74003efd381">&#9670;&nbsp;</a></span>XB_INVALID_FIELD_NO</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_INVALID_FIELD_NO&#160;&#160;&#160;-301</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a79e2588f067d6e236c0e5a2c0728ba9f" name="a79e2588f067d6e236c0e5a2c0728ba9f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a79e2588f067d6e236c0e5a2c0728ba9f">&#9670;&nbsp;</a></span>XB_INVALID_FIELD_TYPE</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_INVALID_FIELD_TYPE&#160;&#160;&#160;-300</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a2b7e5e440dbcf5e6dc885b24dbe28742" name="a2b7e5e440dbcf5e6dc885b24dbe28742"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a2b7e5e440dbcf5e6dc885b24dbe28742">&#9670;&nbsp;</a></span>XB_INVALID_FUNCTION</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_INVALID_FUNCTION&#160;&#160;&#160;-501</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="acd175ef0541e2cad424791bd87619dd4" name="acd175ef0541e2cad424791bd87619dd4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#acd175ef0541e2cad424791bd87619dd4">&#9670;&nbsp;</a></span>XB_INVALID_INDEX</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_INVALID_INDEX&#160;&#160;&#160;-601</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="aec2c0ac2bd62e0329ef130e4fbda39f8" name="aec2c0ac2bd62e0329ef130e4fbda39f8"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aec2c0ac2bd62e0329ef130e4fbda39f8">&#9670;&nbsp;</a></span>XB_INVALID_KEYNO</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_INVALID_KEYNO&#160;&#160;&#160;-600</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ab45735e63c208eb7e6d6df31fd527aec" name="ab45735e63c208eb7e6d6df31fd527aec"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab45735e63c208eb7e6d6df31fd527aec">&#9670;&nbsp;</a></span>XB_INVALID_LOCK_OPTION</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_INVALID_LOCK_OPTION&#160;&#160;&#160;-400</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a187c50745f51bfe4aa6f70a92f16c59f" name="a187c50745f51bfe4aa6f70a92f16c59f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a187c50745f51bfe4aa6f70a92f16c59f">&#9670;&nbsp;</a></span>XB_INVALID_MEMO_FIELD</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_INVALID_MEMO_FIELD&#160;&#160;&#160;-304</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a13e6876470bd34c8c4e5533f115e04eb" name="a13e6876470bd34c8c4e5533f115e04eb"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a13e6876470bd34c8c4e5533f115e04eb">&#9670;&nbsp;</a></span>XB_INVALID_NODELINK</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_INVALID_NODELINK&#160;&#160;&#160;-120</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a418c047353bc683d0fd6ecbbdd5b7885" name="a418c047353bc683d0fd6ecbbdd5b7885"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a418c047353bc683d0fd6ecbbdd5b7885">&#9670;&nbsp;</a></span>XB_INVALID_OBJECT</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_INVALID_OBJECT&#160;&#160;&#160;-206</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="af1cd0baf346cad686fa4dd11f700012a" name="af1cd0baf346cad686fa4dd11f700012a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af1cd0baf346cad686fa4dd11f700012a">&#9670;&nbsp;</a></span>XB_INVALID_OPTION</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_INVALID_OPTION&#160;&#160;&#160;-101</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ad0aba12b5ae2137f8d6abd28b47f95f0" name="ad0aba12b5ae2137f8d6abd28b47f95f0"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ad0aba12b5ae2137f8d6abd28b47f95f0">&#9670;&nbsp;</a></span>XB_INVALID_PAGE</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_INVALID_PAGE&#160;&#160;&#160;-603</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a4cedf96581c9cbc9c14d07494143702d" name="a4cedf96581c9cbc9c14d07494143702d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4cedf96581c9cbc9c14d07494143702d">&#9670;&nbsp;</a></span>XB_INVALID_PARM</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_INVALID_PARM&#160;&#160;&#160;-502</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a0fd212f912b2e62700a66bae95bd73a1" name="a0fd212f912b2e62700a66bae95bd73a1"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0fd212f912b2e62700a66bae95bd73a1">&#9670;&nbsp;</a></span>XB_INVALID_RECORD</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_INVALID_RECORD&#160;&#160;&#160;-218</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a53891c95a78483704d2a8e14c4499f92" name="a53891c95a78483704d2a8e14c4499f92"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a53891c95a78483704d2a8e14c4499f92">&#9670;&nbsp;</a></span>XB_INVALID_TABLE_NAME</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_INVALID_TABLE_NAME&#160;&#160;&#160;-220</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a176d917912d3433f065483f905a4c50a" name="a176d917912d3433f065483f905a4c50a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a176d917912d3433f065483f905a4c50a">&#9670;&nbsp;</a></span>XB_INVALID_TAG</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_INVALID_TAG&#160;&#160;&#160;-602</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ad60dbb1862c0c1c2dc0464cfbfd93a34" name="ad60dbb1862c0c1c2dc0464cfbfd93a34"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ad60dbb1862c0c1c2dc0464cfbfd93a34">&#9670;&nbsp;</a></span>XB_KEY_NOT_UNIQUE</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_KEY_NOT_UNIQUE&#160;&#160;&#160;-121</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a59f1a8a6aca19595c2d1804349a24850" name="a59f1a8a6aca19595c2d1804349a24850"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a59f1a8a6aca19595c2d1804349a24850">&#9670;&nbsp;</a></span>XB_LIMIT_REACHED</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_LIMIT_REACHED&#160;&#160;&#160;-222</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a001e24b39e0f155fb1e892f5b1b9cff1" name="a001e24b39e0f155fb1e892f5b1b9cff1"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a001e24b39e0f155fb1e892f5b1b9cff1">&#9670;&nbsp;</a></span>XB_LOCK_FAILED</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_LOCK_FAILED&#160;&#160;&#160;-401</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a299419a9c80e000b74bf97a2d24d6a3d" name="a299419a9c80e000b74bf97a2d24d6a3d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a299419a9c80e000b74bf97a2d24d6a3d">&#9670;&nbsp;</a></span>XB_MAX_ERROR_NO</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_MAX_ERROR_NO&#160;&#160;&#160;-999</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="aa2925f035e3b186d7efa14648ea0e86d" name="aa2925f035e3b186d7efa14648ea0e86d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aa2925f035e3b186d7efa14648ea0e86d">&#9670;&nbsp;</a></span>XB_MEMCPY_ERROR</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_MEMCPY_ERROR&#160;&#160;&#160;-122</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ac720d5b4ec45bfd606f5865d40816e23" name="ac720d5b4ec45bfd606f5865d40816e23"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac720d5b4ec45bfd606f5865d40816e23">&#9670;&nbsp;</a></span>XB_NO_ERROR</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_NO_ERROR&#160;&#160;&#160;0</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ae687fc7d872ba0475a8477e4447f9b54" name="ae687fc7d872ba0475a8477e4447f9b54"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae687fc7d872ba0475a8477e4447f9b54">&#9670;&nbsp;</a></span>XB_NO_MEMORY</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_NO_MEMORY&#160;&#160;&#160;-100</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ac2606659a54111334f5b02861e533700" name="ac2606659a54111334f5b02861e533700"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac2606659a54111334f5b02861e533700">&#9670;&nbsp;</a></span>XB_NOT_FOUND</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_NOT_FOUND&#160;&#160;&#160;-208</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a9474b400f647bdefbbb07e5177e8d7a1" name="a9474b400f647bdefbbb07e5177e8d7a1"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a9474b400f647bdefbbb07e5177e8d7a1">&#9670;&nbsp;</a></span>XB_NOT_OPEN</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_NOT_OPEN&#160;&#160;&#160;-207</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="aaab55236993a1d3acb29206252a904c8" name="aaab55236993a1d3acb29206252a904c8"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aaab55236993a1d3acb29206252a904c8">&#9670;&nbsp;</a></span>XB_OPEN_ERROR</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_OPEN_ERROR&#160;&#160;&#160;-209</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="aec713cac2b03a0d536a2d16336ae7c0b" name="aec713cac2b03a0d536a2d16336ae7c0b"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aec713cac2b03a0d536a2d16336ae7c0b">&#9670;&nbsp;</a></span>XB_PARSE_ERROR</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_PARSE_ERROR&#160;&#160;&#160;-500</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="adbd40585db8bb748d191f94a33bac710" name="adbd40585db8bb748d191f94a33bac710"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#adbd40585db8bb748d191f94a33bac710">&#9670;&nbsp;</a></span>XB_READ_ERROR</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_READ_ERROR&#160;&#160;&#160;-212</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a373f30b2efcbbab9f6d060fb3fe8cba3" name="a373f30b2efcbbab9f6d060fb3fe8cba3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a373f30b2efcbbab9f6d060fb3fe8cba3">&#9670;&nbsp;</a></span>XB_RENAME_ERROR</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_RENAME_ERROR&#160;&#160;&#160;-205</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a0455ad8719e153b08ec68b10c81e9f41" name="a0455ad8719e153b08ec68b10c81e9f41"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0455ad8719e153b08ec68b10c81e9f41">&#9670;&nbsp;</a></span>XB_SEEK_ERROR</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_SEEK_ERROR&#160;&#160;&#160;-211</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a5db3a90f215534143bdde81253729c7f" name="a5db3a90f215534143bdde81253729c7f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5db3a90f215534143bdde81253729c7f">&#9670;&nbsp;</a></span>XB_SYNTAX_ERROR</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_SYNTAX_ERROR&#160;&#160;&#160;-700</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="af6aaf779fddecca521d785666f6dc56b" name="af6aaf779fddecca521d785666f6dc56b"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af6aaf779fddecca521d785666f6dc56b">&#9670;&nbsp;</a></span>XB_TABLE_NOT_LOCKED</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_TABLE_NOT_LOCKED&#160;&#160;&#160;-402</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="aff5646a6b0884ff81004de6961473ea6" name="aff5646a6b0884ff81004de6961473ea6"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aff5646a6b0884ff81004de6961473ea6">&#9670;&nbsp;</a></span>XB_UNBALANCED_PARENS</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_UNBALANCED_PARENS&#160;&#160;&#160;-505</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="aedfa20a6c4eb9ba3063ba56be8280eac" name="aedfa20a6c4eb9ba3063ba56be8280eac"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aedfa20a6c4eb9ba3063ba56be8280eac">&#9670;&nbsp;</a></span>XB_UNBALANCED_QUOTES</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_UNBALANCED_QUOTES&#160;&#160;&#160;-506</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="aef34ebe6726057f805d6063130280549" name="aef34ebe6726057f805d6063130280549"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aef34ebe6726057f805d6063130280549">&#9670;&nbsp;</a></span>XB_WRITE_ERROR</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define XB_WRITE_ERROR&#160;&#160;&#160;-213</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbretcod_8h_source.html b/docs/doxygen/html/xbretcod_8h_source.html
deleted file mode 100644
index 95cf8c5..0000000
--- a/docs/doxygen/html/xbretcod_8h_source.html
+++ /dev/null
@@ -1,177 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbretcod.h Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbretcod.h</div></div>
-</div><!--header-->
-<div class="contents">
-<a href="xbretcod_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbretcod.h</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">*/</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#ifndef __XB_RETCODES_H__</span></div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#define __XB_RETCODES_H__</span></div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="comment">/***********************************************/</span></div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="comment">/* Return Codes and Error Messages */</span></div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23"> 24</a></span><span class="preprocessor"> #define XB_NO_ERROR 0 </span><span class="comment">// general</span></div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ae687fc7d872ba0475a8477e4447f9b54"> 25</a></span><span class="preprocessor"> #define XB_NO_MEMORY -100 </span><span class="comment">// general</span></div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#af1cd0baf346cad686fa4dd11f700012a"> 26</a></span><span class="preprocessor"> #define XB_INVALID_OPTION -101 </span><span class="comment">// general</span></div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ac18036408d10e5eee1bf76cf92352b95"> 27</a></span><span class="preprocessor"> #define XB_DUP_TABLE_OR_ALIAS -110 </span><span class="comment">// table manager</span></div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb"> 28</a></span><span class="preprocessor"> #define XB_INVALID_NODELINK -120 </span><span class="comment">// linklist</span></div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ad60dbb1862c0c1c2dc0464cfbfd93a34"> 29</a></span><span class="preprocessor"> #define XB_KEY_NOT_UNIQUE -121 </span><span class="comment">// linklist</span></div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#aa2925f035e3b186d7efa14648ea0e86d"> 30</a></span><span class="preprocessor"> #define XB_MEMCPY_ERROR -122 </span><span class="comment">// memcpy failure</span></div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> </div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a54303a9677dbd5342233f33dd08c64d0"> 32</a></span><span class="preprocessor"> #define XB_FILE_EXISTS -200 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#aa2ff8301503f446c6a5f6510090e520f"> 33</a></span><span class="preprocessor"> #define XB_ALREADY_OPEN -201 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a8104510b347c87998eadd0b27201e3c2"> 34</a></span><span class="preprocessor"> #define XB_DBF_FILE_NOT_OPEN -202 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ad090af330c93111d12f6de35dbb065bc"> 35</a></span><span class="preprocessor"> #define XB_FILE_NOT_FOUND -203 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ab7b9130a5f1df9975cfeaf6241933596"> 36</a></span><span class="preprocessor"> #define XB_FILE_TYPE_NOT_SUPPORTED -204 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a373f30b2efcbbab9f6d060fb3fe8cba3"> 37</a></span><span class="preprocessor"> #define XB_RENAME_ERROR -205 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a418c047353bc683d0fd6ecbbdd5b7885"> 38</a></span><span class="preprocessor"> #define XB_INVALID_OBJECT -206 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a9474b400f647bdefbbb07e5177e8d7a1"> 39</a></span><span class="preprocessor"> #define XB_NOT_OPEN -207 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ac2606659a54111334f5b02861e533700"> 40</a></span><span class="preprocessor"> #define XB_NOT_FOUND -208 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#aaab55236993a1d3acb29206252a904c8"> 41</a></span><span class="preprocessor"> #define XB_OPEN_ERROR -209 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a030684d5541cf6127a76d81b0684b235"> 42</a></span><span class="preprocessor"> #define XB_CLOSE_ERROR -210 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a0455ad8719e153b08ec68b10c81e9f41"> 43</a></span><span class="preprocessor"> #define XB_SEEK_ERROR -211 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#adbd40585db8bb748d191f94a33bac710"> 44</a></span><span class="preprocessor"> #define XB_READ_ERROR -212 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#aef34ebe6726057f805d6063130280549"> 45</a></span><span class="preprocessor"> #define XB_WRITE_ERROR -213 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a8b47031e90c3f86306c7058e4490d3b7"> 46</a></span><span class="preprocessor"> #define XB_EOF -214 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ade5f3a7cf1467d12761e4e21b5e4200f"> 47</a></span><span class="preprocessor"> #define XB_BOF -215 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a1bd22921612389c37f6b2eac438c62c5"> 48</a></span><span class="preprocessor"> #define XB_INVALID_BLOCK_SIZE -216 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a4e13b529b486c43ca600ce7d8ddbf3c2"> 49</a></span><span class="preprocessor"> #define XB_INVALID_BLOCK_NO -217 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a0fd212f912b2e62700a66bae95bd73a1"> 50</a></span><span class="preprocessor"> #define XB_INVALID_RECORD -218 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ada15513935d5ede9216f07c0438f34d2"> 51</a></span><span class="preprocessor"> #define XB_DELETE_FAILED -219 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a53891c95a78483704d2a8e14c4499f92"> 52</a></span><span class="preprocessor"> #define XB_INVALID_TABLE_NAME -220 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a18068d0cbe0c7a1b4dd3176220180c29"> 53</a></span><span class="preprocessor"> #define XB_EMPTY -221 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a59f1a8a6aca19595c2d1804349a24850"> 54</a></span><span class="preprocessor"> #define XB_LIMIT_REACHED -222 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#aae9241d91cfb37f5d236128b3bce0a4a"> 55</a></span><span class="preprocessor"> #define XB_BLOCKREAD_NOT_ENABLED -223 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#af532df74147ce2d872f61abfee49c53e"> 56</a></span><span class="preprocessor"> #define XB_DIRECTORY_ERROR -224 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> </div>
-<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a79e2588f067d6e236c0e5a2c0728ba9f"> 58</a></span><span class="preprocessor"> #define XB_INVALID_FIELD_TYPE -300 </span><span class="comment">// field</span></div>
-<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a09d6c08a44316f551108a74003efd381"> 59</a></span><span class="preprocessor"> #define XB_INVALID_FIELD_NO -301 </span><span class="comment">// field</span></div>
-<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#afb40bbed323ecb369dd430a2e1242f9a"> 60</a></span><span class="preprocessor"> #define XB_INVALID_DATA -302 </span><span class="comment">// field</span></div>
-<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a59403978784130834cf39434cb73f96e"> 61</a></span><span class="preprocessor"> #define XB_INVALID_FIELD_NAME -303 </span><span class="comment">// field</span></div>
-<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a187c50745f51bfe4aa6f70a92f16c59f"> 62</a></span><span class="preprocessor"> #define XB_INVALID_MEMO_FIELD -304 </span><span class="comment">// field</span></div>
-<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a34180b2e2bd350ba2ebcdd1335e15d7e"> 63</a></span><span class="preprocessor"> #define XB_INVALID_FIELD -305 </span><span class="comment">// field</span></div>
-<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a7bd322c0efbba17f68ccccd6cf624411"> 64</a></span><span class="preprocessor"> #define XB_INVALID_FIELD_LEN -306 </span><span class="comment">// field</span></div>
-<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a702475500357a27b8a34463be3e11925"> 65</a></span><span class="preprocessor"> #define XB_INVALID_DATE -307 </span><span class="comment">// date field</span></div>
-<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> </div>
-<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ab45735e63c208eb7e6d6df31fd527aec"> 67</a></span><span class="preprocessor"> #define XB_INVALID_LOCK_OPTION -400 </span><span class="comment">// lock</span></div>
-<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a001e24b39e0f155fb1e892f5b1b9cff1"> 68</a></span><span class="preprocessor"> #define XB_LOCK_FAILED -401 </span><span class="comment">// lock</span></div>
-<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#af6aaf779fddecca521d785666f6dc56b"> 69</a></span><span class="preprocessor"> #define XB_TABLE_NOT_LOCKED -402 </span><span class="comment">// lock - need table locked for operation</span></div>
-<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> </div>
-<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#aec713cac2b03a0d536a2d16336ae7c0b"> 71</a></span><span class="preprocessor"> #define XB_PARSE_ERROR -500 </span><span class="comment">// expression</span></div>
-<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a2b7e5e440dbcf5e6dc885b24dbe28742"> 72</a></span><span class="preprocessor"> #define XB_INVALID_FUNCTION -501 </span><span class="comment">// expression</span></div>
-<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a4cedf96581c9cbc9c14d07494143702d"> 73</a></span><span class="preprocessor"> #define XB_INVALID_PARM -502 </span><span class="comment">// expression</span></div>
-<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#adc4b24bfffa202f8df25409894e547b9"> 74</a></span><span class="preprocessor"> #define XB_INCONSISTENT_PARM_LENS -503 </span><span class="comment">// expression</span></div>
-<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#af141ec58b7ca7360e0be6c61d015ea74"> 75</a></span><span class="preprocessor"> #define XB_INCOMPATIBLE_OPERANDS -504 </span><span class="comment">// expression</span></div>
-<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#aff5646a6b0884ff81004de6961473ea6"> 76</a></span><span class="preprocessor"> #define XB_UNBALANCED_PARENS -505 </span><span class="comment">// expression</span></div>
-<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#aedfa20a6c4eb9ba3063ba56be8280eac"> 77</a></span><span class="preprocessor"> #define XB_UNBALANCED_QUOTES -506 </span><span class="comment">// expression</span></div>
-<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a54db562c3cae97581812b4fccd52b71a"> 78</a></span><span class="preprocessor"> #define XB_INVALID_EXPRESSION -507 </span><span class="comment">// expression</span></div>
-<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> </div>
-<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#aec2c0ac2bd62e0329ef130e4fbda39f8"> 80</a></span><span class="preprocessor"> #define XB_INVALID_KEYNO -600 </span><span class="comment">// index</span></div>
-<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#acd175ef0541e2cad424791bd87619dd4"> 81</a></span><span class="preprocessor"> #define XB_INVALID_INDEX -601 </span><span class="comment">// index file error</span></div>
-<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a176d917912d3433f065483f905a4c50a"> 82</a></span><span class="preprocessor"> #define XB_INVALID_TAG -602 </span><span class="comment">// invalid index tag name, must be &lt;= 10 bytes</span></div>
-<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ad0aba12b5ae2137f8d6abd28b47f95f0"> 83</a></span><span class="preprocessor"> #define XB_INVALID_PAGE -603 </span><span class="comment">// invalid index page</span></div>
-<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> </div>
-<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> </div>
-<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a5db3a90f215534143bdde81253729c7f"> 86</a></span><span class="preprocessor"> #define XB_SYNTAX_ERROR -700 </span><span class="comment">// sql syntax error</span></div>
-<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> </div>
-<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> </div>
-<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a299419a9c80e000b74bf97a2d24d6a3d"> 89</a></span><span class="preprocessor"> #define XB_MAX_ERROR_NO -999</span></div>
-<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> </div>
-<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> </div>
-<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span><span class="comment">/* when updating this table, also need to update messages in xbssv.cpp */</span></div>
-<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> </div>
-<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> </div>
-<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span>} <span class="comment">/* namespace */</span></div>
-<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_RETCODES_H__ */</span><span class="preprocessor"></span></div>
-<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> </div>
-<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
-</div><!-- fragment --></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbselect_8cpp.html b/docs/doxygen/html/xbselect_8cpp.html
deleted file mode 100644
index e21f0d9..0000000
--- a/docs/doxygen/html/xbselect_8cpp.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/sql/xbselect.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_25b94c3afce00ed38231227d8141f932.html">sql</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbselect.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbset_8cpp.html b/docs/doxygen/html/xbset_8cpp.html
deleted file mode 100644
index 7b8c360..0000000
--- a/docs/doxygen/html/xbset_8cpp.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/sql/xbset.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_25b94c3afce00ed38231227d8141f932.html">sql</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbset.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbsql_8cpp.html b/docs/doxygen/html/xbsql_8cpp.html
deleted file mode 100644
index 334b5f0..0000000
--- a/docs/doxygen/html/xbsql_8cpp.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/sql/xbsql.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_25b94c3afce00ed38231227d8141f932.html">sql</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbsql.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbsql_8h.html b/docs/doxygen/html/xbsql_8h.html
deleted file mode 100644
index bae3261..0000000
--- a/docs/doxygen/html/xbsql_8h.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbsql.h File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbsql.h File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-
-<p><a href="xbsql_8h_source.html">Go to the source code of this file.</a></p>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbsql_8h_source.html b/docs/doxygen/html/xbsql_8h_source.html
deleted file mode 100644
index d36d1b7..0000000
--- a/docs/doxygen/html/xbsql_8h_source.html
+++ /dev/null
@@ -1,243 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbsql.h Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbsql.h</div></div>
-</div><!--header-->
-<div class="contents">
-<a href="xbsql_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbsql.h</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022 Gary A Kunkel</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">This class manages a list of open tables, open indices are connected to the open tables</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"></span> </div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment">*/</span></div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> </div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#ifndef __XB_XBSQL_H__</span></div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#define __XB_XBSQL_H__</span></div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="preprocessor">#ifdef CMAKE_COMPILER_IS_GNUCC</span></div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#pragma interface</span></div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="preprocessor">#ifdef XB_SQL_SUPPORT</span></div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> </div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="keyword">struct </span>XBDLLEXPORT xbSqlFld{</div>
-<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <span class="keywordtype">char</span> cType; <span class="comment">// F - Database field</span></div>
-<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> <span class="comment">// L - Literal</span></div>
-<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> <span class="comment">// E - Expression</span></div>
-<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> xbInt16 iFldNo; <span class="comment">// Field number if db field</span></div>
-<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> xbExp * pExp; <span class="comment">// If cType=E, pointer to parsed expression</span></div>
-<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> xbString sFldAlias; <span class="comment">// Alias name for query display</span></div>
-<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> xbSqlFld * Next; <span class="comment">// Next field in list</span></div>
-<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span>};</div>
-<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> </div>
-<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="keyword">class </span>xbStmt;</div>
-<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div>
-<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> </div>
-<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="keyword">struct </span>XBDLLEXPORT xbTblJoin { <span class="comment">// structure for defining joined tables in the query</span></div>
-<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> </div>
-<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> xbString sTableName;</div>
-<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> xbString sAlias;</div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> xbString sJoinExp; <span class="comment">// table join expression</span></div>
-<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *pDbf; <span class="comment">// pointer the the dbf structure for this table</span></div>
-<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> xbTag *pTag; <span class="comment">// pointer to relevant tag for this table, null for record order</span></div>
-<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> xbExp *pLinkExp; <span class="comment">// pointer to parsed linkage expression</span></div>
-<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <span class="keywordtype">char</span> cJoinType; <span class="comment">// M - Master</span></div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> <span class="comment">// L - Left or Full Left</span></div>
-<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="comment">// R - Right or Full Right</span></div>
-<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="comment">// I - Inner</span></div>
-<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <span class="comment">// O - Outer or Full Outer Outer</span></div>
-<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> </div>
-<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> xbTblJoin *pMaster; <span class="comment">// pointer to master table, null if this is the primary master</span></div>
-<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> xbLinkList&lt;xbTblJoin *&gt; llSubList; <span class="comment">// linked list of subordinate tables</span></div>
-<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span><span class="comment">// xbStmt *pSubQuery; // pointer to sub query</span></div>
-<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> xbTblJoin *next; <span class="comment">// next tbl</span></div>
-<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span>};</div>
-<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> </div>
-<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> </div>
-<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span><span class="keyword">class </span>XBDLLEXPORT xbStmt : <span class="keyword">public</span> xbSsv{</div>
-<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> </div>
-<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> xbStmt( <a class="code hl_variable" href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xbXBase</a> *x );</div>
-<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> ~xbStmt();</div>
-<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> </div>
-<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
-<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> xbInt16 DumpStmtInternals();</div>
-<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> xbInt16 Test();</div>
-<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> </div>
-<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> xbInt16 ExecuteQuery( <span class="keyword">const</span> xbString &amp;sCmdLine ); </div>
-<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> </div>
-<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span><span class="comment">// xbInt16 FetchFirst();</span></div>
-<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span><span class="comment">// xbInt16 FetchNext();</span></div>
-<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span><span class="comment">// xbInt16 FetchPrev();</span></div>
-<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span><span class="comment">// xbInt16 FetchLast();</span></div>
-<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span><span class="comment">// xbString &amp;GetField( const xbString sFldName );</span></div>
-<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> </div>
-<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="keyword">protected</span>:</div>
-<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> </div>
-<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> </div>
-<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> xbInt16 AddQryTbl( <span class="keyword">const</span> xbString &amp;sTable, <span class="keyword">const</span> xbString &amp;sAlias, <span class="keyword">const</span> xbString &amp;sExpression, <span class="keyword">const</span> <span class="keywordtype">char</span> cJoinType );</div>
-<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> xbInt16 CvtSqlExp2DbaseExp( <span class="keyword">const</span> xbString &amp;sExpIn, xbString &amp;sExpOut );</div>
-<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> xbInt16 GetNextFromSeg( <span class="keyword">const</span> xbString &amp;sLineIn, xbString &amp;sFromSegOut );</div>
-<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> xbUInt32 GetNextToken( <span class="keyword">const</span> xbString &amp;sCmdLineIn, xbString &amp;sTokenOut, xbUInt32 ulStartPos );</div>
-<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> xbInt16 GetParenCnt( <span class="keyword">const</span> xbString &amp;sToken );</div>
-<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> xbInt16 ParseFromStmt( <span class="keyword">const</span> xbString &amp;sFromLine );</div>
-<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> xbInt16 ParseStmt( <span class="keyword">const</span> xbString &amp;sCmdLine );</div>
-<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> xbInt16 ProcessFromSeg( <span class="keyword">const</span> xbString &amp;sFromStmtSeg );</div>
-<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> xbInt16 UpdateJoinList( <span class="keywordtype">char</span> cType, <span class="keyword">const</span> xbString &amp;sTableName, <span class="keyword">const</span> xbString &amp;sAlias, <span class="keyword">const</span> xbString &amp;sExp, <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *d, xbExp *e ); <span class="comment">//, xbTag *t);</span></div>
-<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> </div>
-<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <a class="code hl_variable" href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xbXBase</a> *xbase; <span class="comment">// pointer to xbase structure</span></div>
-<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> </div>
-<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> </div>
-<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> xbTblJoin * pTblList;</div>
-<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> xbSqlFld *fl; <span class="comment">// field list in sql select statement</span></div>
-<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> xbString sStmt; <span class="comment">// complete query statment</span></div>
-<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> xbString sFields; <span class="comment">// list of fields</span></div>
-<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> xbString sFrom; <span class="comment">// from statment</span></div>
-<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> xbString sWhere; <span class="comment">// where clause</span></div>
-<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> xbString sOrderBy; <span class="comment">// sort order</span></div>
-<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> xbString sGroupBy; <span class="comment">// group by</span></div>
-<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> xbString sHaving; <span class="comment">// having</span></div>
-<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> xbUInt32 ulFromPos;</div>
-<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> xbUInt32 ulWherePos;</div>
-<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> xbUInt32 ulOrderByPos;</div>
-<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> xbUInt32 ulGroupByPos;</div>
-<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> xbUInt32 ulHavingPos;</div>
-<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> </div>
-<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> </div>
-<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span>};</div>
-<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> </div>
-<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> </div>
-<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span><span class="keyword">class </span>XBDLLEXPORT xbSql : <span class="keyword">public</span> xbSsv {</div>
-<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <span class="comment">// xbSql();</span></div>
-<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> xbSql( <a class="code hl_variable" href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xbXBase</a> *x );</div>
-<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> ~xbSql();</div>
-<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> </div>
-<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> xbInt16 ExecuteNonQuery( <span class="keyword">const</span> xbString &amp;sCmdLine );</div>
-<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <a class="code hl_variable" href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xbXBase</a> *GetXbasePtr() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> </div>
-<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <span class="keyword">protected</span>:</div>
-<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> </div>
-<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> </div>
-<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> xbInt16 SqlAlterTable( <span class="keyword">const</span> xbString &amp;sCmdLine );</div>
-<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> xbInt16 SqlCreateTable( <span class="keyword">const</span> xbString &amp;sCmdLine );</div>
-<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> xbInt16 SqlDelete( <span class="keyword">const</span> xbString &amp;sCmdLine );</div>
-<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> xbInt16 SqlDropTable( <span class="keyword">const</span> xbString &amp;sCmdLine );</div>
-<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> </div>
-<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span><span class="preprocessor"> #ifdef XB_INDEX_SUPPORT</span></div>
-<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> xbInt16 SqlCreateIndex( <span class="keyword">const</span> xbString &amp;sCmdLine );</div>
-<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> xbInt16 SqlDropIndex( <span class="keyword">const</span> xbString &amp;sCmdLine );</div>
-<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INDEX_SUPPORT</span></div>
-<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> </div>
-<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span><span class="comment">// xbInt16 SqlCreateView( const xbString &amp;sCmdLine );</span></div>
-<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span><span class="comment">// xbInt16 SqlDropView( const xbString &amp;sCmdLine );</span></div>
-<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span><span class="comment">// xbInt16 SqlUpdate( const xbString &amp;sCmdLine );</span></div>
-<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span><span class="comment">// xbInt16 SqlSelect( const xbString &amp;sCmdLine );</span></div>
-<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> </div>
-<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="keywordtype">void</span> SqlHelp() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> xbInt16 SqlInsert( <span class="keyword">const</span> xbString &amp;sCmLine );</div>
-<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> xbInt16 SqlSet( <span class="keyword">const</span> xbString &amp;sCmdLine );</div>
-<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> xbInt16 SqlUse( <span class="keyword">const</span> xbString &amp;sCmdLine );</div>
-<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> </div>
-<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <a class="code hl_variable" href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xbXBase</a> *xbase;</div>
-<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> xbUda uda;</div>
-<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> </div>
-<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span>};</div>
-<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> </div>
-<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span>} <span class="comment">/* namespace xb */</span></div>
-<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span><span class="preprocessor">#endif </span><span class="comment">/* XB_SQL_SUPPORT */</span><span class="preprocessor"></span></div>
-<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_XBSQL_H__ */</span><span class="preprocessor"></span></div>
-<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
-<div class="ttc" id="anamespacexb_html_a97858ddeb1c4b0100f3edc1a46d3a8b0"><div class="ttname"><a href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xb::xbXBase</a></div><div class="ttdeci">class XBDLLEXPORT xbXBase</div><div class="ttdef"><b>Definition:</b> xbssv.h:27</div></div>
-<div class="ttc" id="anamespacexb_html_ab2eae4b4732466698a7fdd89d77ba53b"><div class="ttname"><a href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xb::xbDbf</a></div><div class="ttdeci">class XBDLLEXPORT xbDbf</div><div class="ttdef"><b>Definition:</b> xbtblmgr.h:28</div></div>
-</div><!-- fragment --></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbssv_8cpp.html b/docs/doxygen/html/xbssv_8cpp.html
deleted file mode 100644
index ada7749..0000000
--- a/docs/doxygen/html/xbssv_8cpp.html
+++ /dev/null
@@ -1,94 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbssv.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#namespaces">Namespaces</a> &#124;
-<a href="#var-members">Variables</a> </div>
- <div class="headertitle"><div class="title">xbssv.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="var-members" name="var-members"></a>
-Variables</h2></td></tr>
-<tr class="memitem:a04be228a037d220dd5564f5ef618adcc"><td class="memItemLeft" align="right" valign="top">const xbErrorMessage&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html#a04be228a037d220dd5564f5ef618adcc">xb::xbErrorMessages</a> []</td></tr>
-<tr class="separator:a04be228a037d220dd5564f5ef618adcc"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbssv_8h.html b/docs/doxygen/html/xbssv_8h.html
deleted file mode 100644
index 56dcc9a..0000000
--- a/docs/doxygen/html/xbssv_8h.html
+++ /dev/null
@@ -1,102 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbssv.h File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#nested-classes">Data Structures</a> &#124;
-<a href="#namespaces">Namespaces</a> &#124;
-<a href="#var-members">Variables</a> </div>
- <div class="headertitle"><div class="title">xbssv.h File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-
-<p><a href="xbssv_8h_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
-Data Structures</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html">xb::xbSsv</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Class for handling shared system variables. <a href="classxb_1_1xbSsv.html#details">More...</a><br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="var-members" name="var-members"></a>
-Variables</h2></td></tr>
-<tr class="memitem:a97858ddeb1c4b0100f3edc1a46d3a8b0"><td class="memItemLeft" align="right" valign="top">class XBDLLEXPORT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xb::xbXBase</a></td></tr>
-<tr class="separator:a97858ddeb1c4b0100f3edc1a46d3a8b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbssv_8h_source.html b/docs/doxygen/html/xbssv_8h_source.html
deleted file mode 100644
index 6a4fc59..0000000
--- a/docs/doxygen/html/xbssv_8h_source.html
+++ /dev/null
@@ -1,258 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbssv.h Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbssv.h</div></div>
-</div><!--header-->
-<div class="contents">
-<a href="xbssv_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbssv.h</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">*/</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#ifndef __XB_XBSSV_H__</span></div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#define __XB_XBSSV_H__</span></div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifdef CMAKE_COMPILER_IS_GNUCC</span></div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#pragma interface</span></div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"><a class="line" href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0"> 27</a></span><span class="keyword">class </span>XBDLLEXPORT <a class="code hl_class" href="classxb_1_1xbXBase.html">xbXBase</a>;</div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="keyword">struct </span>XBDLLEXPORT xbErrorMessage{</div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> xbInt16 iErrorNo;</div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *sErrorText;</div>
-<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span>};</div>
-<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div>
-<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> </div>
-<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="comment">// By design, DBase allows mutliple records in a table all having the same key, but only one entry in a unique index</span></div>
-<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="comment">// XB_HALT_ON_DUP_KEY tells the library to not allow appending records which generate duplicate keys in a unique index</span></div>
-<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span><span class="comment">//</span></div>
-<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><span class="preprocessor">#if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)</span></div>
-<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span><span class="preprocessor">#define XB_HALT_ON_DUPKEY 0</span></div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span><span class="preprocessor">#define XB_EMULATE_DBASE 1</span></div>
-<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> </div>
-<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> </div>
-<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> </div>
-<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"><a class="line" href="classxb_1_1xbSsv.html"> 59</a></span><span class="keyword">class </span>XBDLLEXPORT <a class="code hl_class" href="classxb_1_1xbSsv.html">xbSsv</a>{</div>
-<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <a class="code hl_class" href="classxb_1_1xbSsv.html">xbSsv</a>();</div>
-<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"><a class="line" href="classxb_1_1xbSsv.html#a6219f1b5e24ea12fe158cd5aea56988e"> 62</a></span> <span class="keyword">const</span> <span class="keyword">static</span> <span class="keywordtype">char</span> *ErrorCodeText[];</div>
-<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> </div>
-<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="keywordtype">void</span> DisplayError ( xbInt16 ErrorCode ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; GetDefaultDateFormat () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; GetDataDirectory () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> xbInt16 GetEndianType () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> </div>
-<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *GetErrorMessage ( xbInt16 ErrorCode ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <span class="keywordtype">void</span> SetDataDirectory ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sDataDirectory );</div>
-<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keywordtype">void</span> SetDefaultDateFormat ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sDefaultDateFormat );</div>
-<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> </div>
-<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> BitSet ( <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c, xbInt16 iBitNo ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="keywordtype">void</span> BitDump ( <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="keywordtype">void</span> BitDump ( <span class="keywordtype">char</span> c ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> </div>
-<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetDefaultAutoCommit () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keywordtype">void</span> SetDefaultAutoCommit ( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bDefaultAutoCommit );</div>
-<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> </div>
-<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="keywordtype">void</span> GetHomeDir ( <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sHomeDirOut );</div>
-<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> </div>
-<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; GetLogDirectory () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; GetLogFileName () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <span class="keywordtype">void</span> SetLogDirectory ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sLogDirectory );</div>
-<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> </div>
-<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetMultiUser () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <span class="keywordtype">void</span> SetMultiUser ( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bMultiUser );</div>
-<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> </div>
-<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span><span class="preprocessor"> #if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)</span></div>
-<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> xbInt16 GetUniqueKeyOpt () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> xbInt16 SetUniqueKeyOpt ( xbInt16 iUniqueKeyOpt );</div>
-<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span><span class="preprocessor"> #endif </span><span class="comment">// (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)</span></div>
-<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> </div>
-<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span><span class="preprocessor"> #ifdef XB_LOCKING_SUPPORT</span></div>
-<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> xbInt16 GetDefaultLockRetries () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="keywordtype">void</span> SetDefaultLockRetries ( xbInt16 iRetryCount );</div>
-<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> xbInt32 GetDefaultLockWait () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keywordtype">void</span> SetDefaultLockWait ( xbInt32 lRetryWait );</div>
-<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> xbInt16 GetDefaultLockFlavor () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="keywordtype">void</span> SetDefaultLockFlavor ( xbInt16 iLockFlavor );</div>
-<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetDefaultAutoLock () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <span class="keywordtype">void</span> SetDefaultAutoLock ( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bAutoLock );</div>
-<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> <span class="keywordtype">void</span> EnableDefaultAutoLock ();</div>
-<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="keywordtype">void</span> DisableDefaultAutoLock ();</div>
-<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span><span class="preprocessor"> #endif </span><span class="comment">// XB_LOCKING_SUPPORT</span></div>
-<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> </div>
-<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span><span class="preprocessor"> #ifdef XB_MDX_SUPPORT</span></div>
-<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> xbInt16 GetCreateMdxBlockSize() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );</div>
-<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span><span class="preprocessor"> #endif </span><span class="comment">// XB_MDX_SUPPORT</span></div>
-<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> </div>
-<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span><span class="preprocessor"> #ifdef XB_BLOCKREAD_SUPPORT</span></div>
-<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> xbUInt32 GetDefaultBlockReadSize() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="keywordtype">void</span> SetDefaultBlockReadSize( xbUInt32 ulDfltBlockReadSize );</div>
-<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span><span class="preprocessor"> #endif </span><span class="comment">// XB_BLOCKREAD_SUPPORT</span></div>
-<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> </div>
-<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> </div>
-<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> <span class="keyword">protected</span>:</div>
-<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> </div>
-<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <span class="keywordtype">void</span> SetEndianType ();</div>
-<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> </div>
-<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"><a class="line" href="classxb_1_1xbSsv.html#a5849e813f5e8e1cd180f0366637adbf3"> 122</a></span> <span class="keyword">static</span> xbInt16 <a class="code hl_variable" href="classxb_1_1xbSsv.html#a5849e813f5e8e1cd180f0366637adbf3">iEndianType</a>; <span class="comment">// B=Big Endian L=Little Endian</span></div>
-<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"><a class="line" href="classxb_1_1xbSsv.html#a9dec3164c3b264882df634915ecf21da"> 123</a></span> <span class="keyword">static</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> <a class="code hl_variable" href="classxb_1_1xbSsv.html#a9dec3164c3b264882df634915ecf21da">sNullString</a>; <span class="comment">// Null String</span></div>
-<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> </div>
-<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> </div>
-<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> </div>
-<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <span class="keyword">static</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sDefaultDateFormat;</div>
-<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="keyword">static</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sDataDirectory; <span class="comment">//Data file directory</span></div>
-<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> </div>
-<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span><span class="preprocessor"> #ifdef XB_LOGGING_SUPPORT</span></div>
-<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <span class="keyword">static</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sLogDirectory; <span class="comment">//Default location to store log files</span></div>
-<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="keyword">static</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sLogFileName; <span class="comment">//Default LogFileName</span></div>
-<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> </div>
-<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="keyword">static</span> xbInt16 iDefaultFileVersion; <span class="comment">// 3 = DBase 3</span></div>
-<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <span class="comment">// 4 = DBase 4</span></div>
-<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="comment">// default version used in CreateTable command</span></div>
-<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="comment">// can be over ridden at the Xbase level, or table level</span></div>
-<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <span class="comment">// Different versions can be open simultaneously</span></div>
-<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> </div>
-<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="keyword">static</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bDefaultAutoCommit; <span class="comment">// Default dbf auto commit switch</span></div>
-<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> </div>
-<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> <span class="keyword">static</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bMultiUser; <span class="comment">// True if multi user mode is turned on</span></div>
-<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="comment">// Turn this off for better performance in single user mode</span></div>
-<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <span class="comment">// This needs to be turned on or off before any data tables are opened</span></div>
-<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="comment">// turning this on after tables are opened, can result in out of date</span></div>
-<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="comment">// file buffers if multiple users are sharing the files</span></div>
-<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> </div>
-<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span><span class="preprocessor">#ifdef XB_LOCKING_SUPPORT</span></div>
-<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> <span class="keyword">static</span> xbInt32 lDefaultLockWait; <span class="comment">// Number of milliseconds between lock retries</span></div>
-<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="keyword">static</span> xbInt16 iDefaultLockRetries; <span class="comment">// Number of times to retry a lock before conceding</span></div>
-<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <span class="keyword">static</span> xbInt16 bDefaultAutoLock; <span class="comment">// Autolocking enabled?</span></div>
-<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="keyword">static</span> xbInt16 iDefaultLockFlavor; <span class="comment">// 1 = DBase</span></div>
-<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="comment">// 2 = Clipper - not developed yet</span></div>
-<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="comment">// 3 = FoxPro - not developed yet</span></div>
-<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> <span class="comment">// 9 = Xbase64 - not developed yet</span></div>
-<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> </div>
-<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> </div>
-<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span><span class="preprocessor">#if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)</span></div>
-<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> </div>
-<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> <span class="keyword">static</span> xbInt16 iUniqueKeyOpt;</div>
-<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> </div>
-<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <span class="comment">// is one of:</span></div>
-<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> <span class="comment">// XB_HALT_ON_DUPKEY</span></div>
-<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> <span class="comment">// XB_EMULATE_DBASE</span></div>
-<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> </div>
-<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> </div>
-<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> </div>
-<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span><span class="preprocessor">#ifdef XB_MDX_SUPPORT</span></div>
-<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <span class="keyword">static</span> xbInt16 iCreateMdxBlockSize; <span class="comment">// System level Mdx Block Size</span></div>
-<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span><span class="preprocessor">#endif </span><span class="comment">// XB_MDX_SUPPORT</span></div>
-<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> </div>
-<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> </div>
-<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span><span class="preprocessor">#ifdef XB_BLOCKREAD_SUPPORT</span></div>
-<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> <span class="keyword">static</span> xbUInt32 ulDefaultBlockReadSize;</div>
-<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span><span class="preprocessor">#endif </span><span class="comment">// XB_BLOCKREAD_SUPPORT</span></div>
-<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> </div>
-<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> </div>
-<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span>};</div>
-<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> </div>
-<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span>} <span class="comment">/* namespace xb */</span></div>
-<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_XBSSV_H__ */</span><span class="preprocessor"></span></div>
-<div class="ttc" id="aclassxb_1_1xbSsv_html"><div class="ttname"><a href="classxb_1_1xbSsv.html">xb::xbSsv</a></div><div class="ttdoc">Class for handling shared system variables.</div><div class="ttdef"><b>Definition:</b> xbssv.h:59</div></div>
-<div class="ttc" id="aclassxb_1_1xbSsv_html_a5849e813f5e8e1cd180f0366637adbf3"><div class="ttname"><a href="classxb_1_1xbSsv.html#a5849e813f5e8e1cd180f0366637adbf3">xb::xbSsv::iEndianType</a></div><div class="ttdeci">static xbInt16 iEndianType</div><div class="ttdef"><b>Definition:</b> xbssv.h:122</div></div>
-<div class="ttc" id="aclassxb_1_1xbSsv_html_a9dec3164c3b264882df634915ecf21da"><div class="ttname"><a href="classxb_1_1xbSsv.html#a9dec3164c3b264882df634915ecf21da">xb::xbSsv::sNullString</a></div><div class="ttdeci">static xbString sNullString</div><div class="ttdef"><b>Definition:</b> xbssv.h:123</div></div>
-<div class="ttc" id="aclassxb_1_1xbString_html"><div class="ttname"><a href="classxb_1_1xbString.html">xb::xbString</a></div><div class="ttdoc">Class for handling string data.</div><div class="ttdef"><b>Definition:</b> xbstring.h:50</div></div>
-<div class="ttc" id="aclassxb_1_1xbXBase_html"><div class="ttname"><a href="classxb_1_1xbXBase.html">xb::xbXBase</a></div><div class="ttdoc">xbXbase class.</div><div class="ttdef"><b>Definition:</b> xbxbase.h:123</div></div>
-<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
-<div class="ttc" id="anamespacexb_html_ab1a750481dd487f0d384aa1d200dff0f"><div class="ttname"><a href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xb::xbBool</a></div><div class="ttdeci">short int xbBool</div><div class="ttdef"><b>Definition:</b> xbtypes.h:24</div></div>
-</div><!-- fragment --></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbstmt_8cpp.html b/docs/doxygen/html/xbstmt_8cpp.html
deleted file mode 100644
index 508269f..0000000
--- a/docs/doxygen/html/xbstmt_8cpp.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/sql/xbstmt.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_25b94c3afce00ed38231227d8141f932.html">sql</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbstmt.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbstring_8cpp.html b/docs/doxygen/html/xbstring_8cpp.html
deleted file mode 100644
index 4683451..0000000
--- a/docs/doxygen/html/xbstring_8cpp.html
+++ /dev/null
@@ -1,95 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbstring.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#namespaces">Namespaces</a> &#124;
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle"><div class="title">xbstring.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ad27f348219e895c44f74addba8e1889a"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html#ad27f348219e895c44f74addba8e1889a">xb::operator&lt;&lt;</a> (std::ostream &amp;os, const xbString &amp;s)</td></tr>
-<tr class="memdesc:ad27f348219e895c44f74addba8e1889a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stream insertion operator &lt;&lt;. <a href="namespacexb.html#ad27f348219e895c44f74addba8e1889a">More...</a><br /></td></tr>
-<tr class="separator:ad27f348219e895c44f74addba8e1889a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbstring_8h.html b/docs/doxygen/html/xbstring_8h.html
deleted file mode 100644
index d1679d8..0000000
--- a/docs/doxygen/html/xbstring_8h.html
+++ /dev/null
@@ -1,98 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbstring.h File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#nested-classes">Data Structures</a> &#124;
-<a href="#namespaces">Namespaces</a> </div>
- <div class="headertitle"><div class="title">xbstring.h File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &lt;stdlib.h&gt;</code><br />
-<code>#include &lt;iostream&gt;</code><br />
-</div>
-<p><a href="xbstring_8h_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
-Data Structures</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html">xb::xbString</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Class for handling string data. <a href="classxb_1_1xbString.html#details">More...</a><br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbstring_8h_source.html b/docs/doxygen/html/xbstring_8h_source.html
deleted file mode 100644
index 1e20637..0000000
--- a/docs/doxygen/html/xbstring_8h_source.html
+++ /dev/null
@@ -1,250 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbstring.h Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbstring.h</div></div>
-</div><!--header-->
-<div class="contents">
-<a href="xbstring_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbstring.h</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022 Gary A Kunkel</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">*/</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#ifndef __XBSTRING_H__</span></div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#define __XBSTRING_H__</span></div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#ifdef CMAKE_COMPILER_IS_GNUCC</span></div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#pragma interface</span></div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#include &lt;stdlib.h&gt;</span></div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#include &lt;iostream&gt;</span></div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div>
-<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"><a class="line" href="classxb_1_1xbString.html"> 50</a></span><span class="keyword">class </span>XBDLLEXPORT <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> {</div>
-<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div>
-<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <span class="comment">//Various constructors</span></div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>(xbUInt32 size);</div>
-<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>(<span class="keywordtype">char</span> c);</div>
-<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *s, xbUInt32 lMaxLen);</div>
-<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>(<span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s);</div>
-<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> * = <span class="stringliteral">&quot;&quot;</span>);</div>
-<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> d );</div>
-<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <a class="code hl_class" href="classxb_1_1xbString.html">~xbString</a>();</div>
-<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> </div>
-<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <span class="comment">//operators</span></div>
-<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;operator= (<span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s);</div>
-<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;operator= (<span class="keyword">const</span> <span class="keywordtype">char</span> *s);</div>
-<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="keyword">operator</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="keywordtype">char</span> &amp;operator[](xbUInt32 n) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="keywordtype">char</span> &amp;operator[](xbInt32 n) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> </div>
-<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;operator+=(<span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s);</div>
-<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;operator+=(<span class="keyword">const</span> <span class="keywordtype">char</span> *s);</div>
-<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;operator+=(<span class="keywordtype">char</span> c);</div>
-<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;operator-=(<span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s);</div>
-<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;operator-=(<span class="keyword">const</span> <span class="keywordtype">char</span> *s);</div>
-<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;operator-=(<span class="keywordtype">char</span> c);</div>
-<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> </div>
-<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator == ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator == ( <span class="keyword">const</span> <span class="keywordtype">char</span> * ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator != ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator != ( <span class="keyword">const</span> <span class="keywordtype">char</span> * ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> </div>
-<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator &lt; ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator &gt; ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator &lt;= ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator &gt;= ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> </div>
-<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> operator-( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s );</div>
-<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> operator+( <span class="keyword">const</span> <span class="keywordtype">char</span> *s );</div>
-<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> operator+( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s );</div>
-<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> operator+( <span class="keyword">const</span> <span class="keywordtype">char</span> c );</div>
-<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> </div>
-<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;AddBackSlash( <span class="keywordtype">char</span> c );</div>
-<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Append(<span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s);</div>
-<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Append(<span class="keyword">const</span> <span class="keywordtype">char</span> *s);</div>
-<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Append(<span class="keyword">const</span> <span class="keywordtype">char</span> *s, xbUInt32 iByteCount );</div>
-<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Append(<span class="keywordtype">char</span> c);</div>
-<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Assign(<span class="keyword">const</span> <span class="keywordtype">char</span> *srcStr, xbUInt32 lStartPos, xbUInt32 lCopyLen );</div>
-<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Assign(<span class="keyword">const</span> <span class="keywordtype">char</span> *srcStr, xbUInt32 lStartPos );</div>
-<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Assign(<span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s, xbUInt32 pos, xbUInt32 lCopyLen );</div>
-<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Assign(<span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s, xbUInt32 lCopyLen );</div>
-<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> </div>
-<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> Copy() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> xbUInt32 CountChar( <span class="keywordtype">char</span> c ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> xbUInt32 CountChar( <span class="keywordtype">char</span> c, xbInt16 iOpt ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> xbInt16 CvtHexChar( <span class="keywordtype">char</span> &amp;cOut );</div>
-<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> xbInt16 CvtHexString( <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
-<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> xbInt16 CvtULongLong( xbUInt64 &amp;ullOut );</div>
-<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> xbInt16 CvtLongLong( xbInt64 &amp;llOut );</div>
-<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> </div>
-<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
-<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="keywordtype">void</span> Dump( <span class="keyword">const</span> <span class="keywordtype">char</span> *title ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="keywordtype">void</span> Dump( <span class="keyword">const</span> <span class="keywordtype">char</span> *title, xbInt16 iOption ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> <span class="keywordtype">void</span> DumpHex( <span class="keyword">const</span> <span class="keywordtype">char</span> *title ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> </div>
-<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;ExtractElement(<span class="keyword">const</span> <span class="keywordtype">char</span> *src, <span class="keywordtype">char</span> delim, xbUInt32 iCnt, xbInt16 iOpt = 0 );</div>
-<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <span class="keywordtype">char</span> GetCharacter( xbUInt32 lPos ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> xbUInt32 GetLastPos(<span class="keywordtype">char</span> c) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> xbUInt32 GetLastPos(<span class="keyword">const</span> <span class="keywordtype">char</span> *s) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <span class="keywordtype">char</span> GetPathSeparator() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> xbUInt32 GetSize() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> </div>
-<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> HasAlphaChars() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsEmpty() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsNull() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> </div>
-<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Left( xbUInt32 ulLen );</div>
-<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> xbUInt32 Len() <span class="keyword">const</span>; <span class="comment">// returns the length of the string</span></div>
-<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Ltrim();</div>
-<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Ltrunc( xbUInt32 ulCnt );</div>
-<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> </div>
-<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Mid(xbUInt32 ulPos, xbUInt32 lLen );</div>
-<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;PadLeft( <span class="keywordtype">char</span> c, xbUInt32 ulLen );</div>
-<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;PadRight( <span class="keywordtype">char</span> c, xbUInt32 ulLen );</div>
-<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> </div>
-<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> xbUInt32 Pos(<span class="keywordtype">char</span> c, xbUInt32 ulStartPos ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> xbUInt32 Pos(<span class="keywordtype">char</span> c) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> xbUInt32 Pos(<span class="keyword">const</span> <span class="keywordtype">char</span> *s) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;PutAt(xbUInt32 ulPos, <span class="keywordtype">char</span> c);</div>
-<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> </div>
-<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Remove( xbUInt32 ulPos, xbUInt32 ulN );</div>
-<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Replace( <span class="keyword">const</span> <span class="keywordtype">char</span> *sReplace, <span class="keyword">const</span> <span class="keywordtype">char</span> *sReplaceWith, xbInt16 iOpt = 0 );</div>
-<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Resize( xbUInt32 lSize );</div>
-<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Rtrim();</div>
-<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> </div>
-<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Set( <span class="keyword">const</span> <span class="keywordtype">char</span> *s );</div>
-<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Set( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s );</div>
-<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Set( <span class="keyword">const</span> <span class="keywordtype">char</span> *s, xbUInt32 ulSize );</div>
-<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;SetNum( xbInt32 lNum );</div>
-<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Sprintf(<span class="keyword">const</span> <span class="keywordtype">char</span> *format, ...);</div>
-<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> </div>
-<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *Str() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="keywordtype">char</span> *strncpy( <span class="keywordtype">char</span> * cDest, xbUInt32 n ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;SwapChars( <span class="keywordtype">char</span> from, <span class="keywordtype">char</span> to );</div>
-<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> </div>
-<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;ToLowerCase();</div>
-<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;ToUpperCase();</div>
-<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Trim();</div>
-<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> </div>
-<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> ValidLogicalValue() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> ValidNumericValue() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;ZapChar( <span class="keywordtype">char</span> c );</div>
-<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;ZapLeadingChar( <span class="keywordtype">char</span> c );</div>
-<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;ZapTrailingChar( <span class="keywordtype">char</span> c );</div>
-<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> </div>
-<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <span class="keyword">friend</span> std::ostream&amp; <a class="code hl_function" href="namespacexb.html#ad27f348219e895c44f74addba8e1889a">operator&lt;&lt; </a>( std::ostream&amp; os, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; s );</div>
-<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> </div>
-<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> </div>
-<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * NullString;</div>
-<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> <span class="keyword">static</span> <span class="keywordtype">char</span> cJunkBuf;</div>
-<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> </div>
-<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="keywordtype">char</span> *data; <span class="comment">// pointer to actual string data</span></div>
-<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> xbUInt32 size; <span class="comment">// size of string plus null terminating byte</span></div>
-<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> </div>
-<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <span class="keywordtype">void</span> ctor(<span class="keyword">const</span> <span class="keywordtype">char</span> *s);</div>
-<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span><span class="comment">// xbUInt32 CalcSprintfBufSize(const char *format, ...);</span></div>
-<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> </div>
-<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span><span class="comment">// char * xb_realloc( char *pIn, xbUInt32 iLen );</span></div>
-<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> </div>
-<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> <span class="comment">// next routine could result in buffer over runs if used with improperly sized buffers</span></div>
-<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> <span class="keywordtype">char</span> * xb_strcpy ( <span class="keywordtype">char</span> *target, <span class="keyword">const</span> <span class="keywordtype">char</span> *source);</div>
-<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> </div>
-<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span>};</div>
-<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> </div>
-<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span>} <span class="comment">/* namespace */</span></div>
-<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span><span class="preprocessor">#endif </span><span class="comment">/* __XBSTRING_H__ */</span><span class="preprocessor"></span></div>
-<div class="ttc" id="aclassxb_1_1xbString_html"><div class="ttname"><a href="classxb_1_1xbString.html">xb::xbString</a></div><div class="ttdoc">Class for handling string data.</div><div class="ttdef"><b>Definition:</b> xbstring.h:50</div></div>
-<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
-<div class="ttc" id="anamespacexb_html_a25f47b226ce924a5c78f97989b0744a2"><div class="ttname"><a href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xb::xbDouble</a></div><div class="ttdeci">double xbDouble</div><div class="ttdef"><b>Definition:</b> xbtypes.h:23</div></div>
-<div class="ttc" id="anamespacexb_html_ab1a750481dd487f0d384aa1d200dff0f"><div class="ttname"><a href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xb::xbBool</a></div><div class="ttdeci">short int xbBool</div><div class="ttdef"><b>Definition:</b> xbtypes.h:24</div></div>
-<div class="ttc" id="anamespacexb_html_ad27f348219e895c44f74addba8e1889a"><div class="ttname"><a href="namespacexb.html#ad27f348219e895c44f74addba8e1889a">xb::operator&lt;&lt;</a></div><div class="ttdeci">std::ostream &amp; operator&lt;&lt;(std::ostream &amp;os, const xbString &amp;s)</div><div class="ttdoc">Stream insertion operator &lt;&lt;.</div><div class="ttdef"><b>Definition:</b> xbstring.cpp:148</div></div>
-</div><!-- fragment --></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbtag_8cpp.html b/docs/doxygen/html/xbtag_8cpp.html
deleted file mode 100644
index e38be6b..0000000
--- a/docs/doxygen/html/xbtag_8cpp.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbtag.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbtag.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbtag_8h.html b/docs/doxygen/html/xbtag_8h.html
deleted file mode 100644
index 0814418..0000000
--- a/docs/doxygen/html/xbtag_8h.html
+++ /dev/null
@@ -1,89 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbtag.h File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#namespaces">Namespaces</a> </div>
- <div class="headertitle"><div class="title">xbtag.h File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-
-<p><a href="xbtag_8h_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbtag_8h_source.html b/docs/doxygen/html/xbtag_8h_source.html
deleted file mode 100644
index 486b26f..0000000
--- a/docs/doxygen/html/xbtag_8h_source.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbtag.h Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbtag.h</div></div>
-</div><!--header-->
-<div class="contents">
-<a href="xbtag_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbtag.h</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022 Gary A Kunkel</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">*/</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#ifndef __XB_XBTAG_H__</span></div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#define __XB_XBTAG_H__</span></div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="comment">//#ifdef CMAKE_COMPILER_IS_GNUCC</span></div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="comment">//#pragma interface</span></div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="comment">//#endif</span></div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="preprocessor">#ifdef XB_INDEX_SUPPORT</span></div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="keyword">class </span>XBDLLEXPORT xbIx;</div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> </div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> </div>
-<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> </div>
-<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="keyword">class </span>XBDLLEXPORT xbTag {</div>
-<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> </div>
-<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> xbTag( xbIx *pIx, <span class="keywordtype">void</span> *vpTag, xbString &amp;sType, xbString &amp;sTagName, xbString &amp;sExpression, xbString &amp;sFilter, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bUnique, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bSort );</div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> </div>
-<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> xbIx *GetIx() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keywordtype">void</span> *GetVpTag() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keyword">const</span> xbString &amp;GetType() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <span class="keyword">const</span> xbString &amp;GetTagName() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> <span class="keyword">const</span> xbString &amp;GetExpression() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="keyword">const</span> xbString &amp;GetFilter() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetUnique() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetSort() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> </div>
-<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> xbIx *pIx;</div>
-<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <span class="keywordtype">void</span> *vpTag;</div>
-<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> xbString sType;</div>
-<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> xbString sTagName;</div>
-<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> xbString sExpression;</div>
-<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> xbString sFilter;</div>
-<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bUnique;</div>
-<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bSort; <span class="comment">// 0 = Ascending, 1 = Descending</span></div>
-<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span>};</div>
-<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> </div>
-<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span><span class="preprocessor">#endif </span><span class="comment">// XB_INDEX_SUPPORT</span></div>
-<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> </div>
-<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> </div>
-<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span>} <span class="comment">/* namespace xb */</span></div>
-<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_TAG_H__ */</span><span class="preprocessor"></span></div>
-<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
-<div class="ttc" id="anamespacexb_html_ab1a750481dd487f0d384aa1d200dff0f"><div class="ttname"><a href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xb::xbBool</a></div><div class="ttdeci">short int xbBool</div><div class="ttdef"><b>Definition:</b> xbtypes.h:24</div></div>
-</div><!-- fragment --></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbtblmgr_8cpp.html b/docs/doxygen/html/xbtblmgr_8cpp.html
deleted file mode 100644
index 599a2af..0000000
--- a/docs/doxygen/html/xbtblmgr_8cpp.html
+++ /dev/null
@@ -1,88 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbtblmgr.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#namespaces">Namespaces</a> </div>
- <div class="headertitle"><div class="title">xbtblmgr.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbtblmgr_8h.html b/docs/doxygen/html/xbtblmgr_8h.html
deleted file mode 100644
index 89b58b1..0000000
--- a/docs/doxygen/html/xbtblmgr_8h.html
+++ /dev/null
@@ -1,103 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbtblmgr.h File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#nested-classes">Data Structures</a> &#124;
-<a href="#namespaces">Namespaces</a> &#124;
-<a href="#var-members">Variables</a> </div>
- <div class="headertitle"><div class="title">xbtblmgr.h File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-
-<p><a href="xbtblmgr_8h_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
-Data Structures</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structxb_1_1xbTblList.html">xb::xbTblList</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbTblMgr.html">xb::xbTblMgr</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="var-members" name="var-members"></a>
-Variables</h2></td></tr>
-<tr class="memitem:ab2eae4b4732466698a7fdd89d77ba53b"><td class="memItemLeft" align="right" valign="top">class XBDLLEXPORT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xb::xbDbf</a></td></tr>
-<tr class="separator:ab2eae4b4732466698a7fdd89d77ba53b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbtblmgr_8h_source.html b/docs/doxygen/html/xbtblmgr_8h_source.html
deleted file mode 100644
index faf8923..0000000
--- a/docs/doxygen/html/xbtblmgr_8h_source.html
+++ /dev/null
@@ -1,153 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbtblmgr.h Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbtblmgr.h</div></div>
-</div><!--header-->
-<div class="contents">
-<a href="xbtblmgr_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbtblmgr.h</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022 Gary A Kunkel</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">This class manages a list of open tables, open indices are connected to the open tables</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"></span> </div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment">*/</span></div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> </div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#ifndef __XB_XBMGR_H__</span></div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#define __XB_XBMGR_H__</span></div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="preprocessor">#ifdef CMAKE_COMPILER_IS_GNUCC</span></div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#pragma interface</span></div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"><a class="line" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b"> 28</a></span><span class="keyword">class </span>XBDLLEXPORT <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a>;</div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="comment">/* this structure is a linked list of open tables */</span></div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="structxb_1_1xbTblList.html"> 31</a></span><span class="keyword">struct </span>XBDLLEXPORT <a class="code hl_struct" href="structxb_1_1xbTblList.html">xbTblList</a>{</div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"><a class="line" href="structxb_1_1xbTblList.html#a3fd169fcf0fd4df927544e5342db583c"> 32</a></span> <a class="code hl_struct" href="structxb_1_1xbTblList.html">xbTblList</a> *<a class="code hl_variable" href="structxb_1_1xbTblList.html#a3fd169fcf0fd4df927544e5342db583c">pNext</a>;</div>
-<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"><a class="line" href="structxb_1_1xbTblList.html#aceec65f6f6b585788cf98e8dabd2737d"> 33</a></span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> *<a class="code hl_variable" href="structxb_1_1xbTblList.html#aceec65f6f6b585788cf98e8dabd2737d">psFqTblName</a>; <span class="comment">// Fully qualified name of table - same table can be opened multiple times, but must have unique alias</span></div>
-<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"><a class="line" href="structxb_1_1xbTblList.html#a02c3b0c47fd104ef9758b375ecdcfd0f"> 34</a></span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> *<a class="code hl_variable" href="structxb_1_1xbTblList.html#a02c3b0c47fd104ef9758b375ecdcfd0f">psTblName</a>; <span class="comment">// Table name without path, without extension</span></div>
-<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"><a class="line" href="structxb_1_1xbTblList.html#ac87742c8a6b1cf2e7e35218e96966a05"> 35</a></span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> *<a class="code hl_variable" href="structxb_1_1xbTblList.html#ac87742c8a6b1cf2e7e35218e96966a05">psTblAlias</a>; <span class="comment">// TblAliasName must be unique, same as TblNAme if Alias not provided</span></div>
-<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"><a class="line" href="structxb_1_1xbTblList.html#a387d3f6bbf291a1fb96d276ed9bb96b6"> 36</a></span> <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> *<a class="code hl_variable" href="structxb_1_1xbTblList.html#a387d3f6bbf291a1fb96d276ed9bb96b6">pDbf</a>;</div>
-<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span>};</div>
-<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div>
-<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"><a class="line" href="classxb_1_1xbTblMgr.html"> 39</a></span><span class="keyword">class </span>XBDLLEXPORT <a class="code hl_class" href="classxb_1_1xbTblMgr.html">xbTblMgr</a> : <span class="keyword">public</span> <a class="code hl_class" href="classxb_1_1xbSsv.html">xbSsv</a> {</div>
-<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <a class="code hl_class" href="classxb_1_1xbTblMgr.html">xbTblMgr</a>();</div>
-<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <a class="code hl_class" href="classxb_1_1xbTblMgr.html">~xbTblMgr</a>();</div>
-<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> xbInt16 AddTblToTblList ( <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> *d, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFqTblName );</div>
-<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> xbInt16 AddTblToTblList ( <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> *d, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFqTblName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTblAlias );</div>
-<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> xbInt16 DisplayTableList () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> * GetDbfPtr ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTblAlias ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> * GetDbfPtr ( xbInt16 sItemNo ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> <a class="code hl_struct" href="structxb_1_1xbTblList.html">xbTblList</a> * GetTblListEntry ( <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> *d );</div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> xbInt16 GetOpenTableCount () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> xbInt16 RemoveTblFromTblList ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTblAlias );</div>
-<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> xbInt16 RemoveTblFromTblList ( <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> *d );</div>
-<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> </div>
-<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <span class="keyword">protected</span>:</div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> </div>
-<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <a class="code hl_struct" href="structxb_1_1xbTblList.html">xbTblList</a> * TblList; <span class="comment">// List of open database tables</span></div>
-<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> xbInt16 iOpenTableCount; <span class="comment">// Number of open tables</span></div>
-<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> </div>
-<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span>};</div>
-<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> </div>
-<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span>} <span class="comment">/* namespace xb */</span></div>
-<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> </div>
-<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_XBMGR_H__ */</span><span class="preprocessor"></span></div>
-<div class="ttc" id="aclassxb_1_1xbDbf_html"><div class="ttname"><a href="classxb_1_1xbDbf.html">xb::xbDbf</a></div><div class="ttdoc">Base class for handling dbf files/tables.</div><div class="ttdef"><b>Definition:</b> xbdbf.h:150</div></div>
-<div class="ttc" id="aclassxb_1_1xbSsv_html"><div class="ttname"><a href="classxb_1_1xbSsv.html">xb::xbSsv</a></div><div class="ttdoc">Class for handling shared system variables.</div><div class="ttdef"><b>Definition:</b> xbssv.h:59</div></div>
-<div class="ttc" id="aclassxb_1_1xbString_html"><div class="ttname"><a href="classxb_1_1xbString.html">xb::xbString</a></div><div class="ttdoc">Class for handling string data.</div><div class="ttdef"><b>Definition:</b> xbstring.h:50</div></div>
-<div class="ttc" id="aclassxb_1_1xbTblMgr_html"><div class="ttname"><a href="classxb_1_1xbTblMgr.html">xb::xbTblMgr</a></div><div class="ttdef"><b>Definition:</b> xbtblmgr.h:39</div></div>
-<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
-<div class="ttc" id="astructxb_1_1xbTblList_html"><div class="ttname"><a href="structxb_1_1xbTblList.html">xb::xbTblList</a></div><div class="ttdef"><b>Definition:</b> xbtblmgr.h:31</div></div>
-<div class="ttc" id="astructxb_1_1xbTblList_html_a02c3b0c47fd104ef9758b375ecdcfd0f"><div class="ttname"><a href="structxb_1_1xbTblList.html#a02c3b0c47fd104ef9758b375ecdcfd0f">xb::xbTblList::psTblName</a></div><div class="ttdeci">xbString * psTblName</div><div class="ttdef"><b>Definition:</b> xbtblmgr.h:34</div></div>
-<div class="ttc" id="astructxb_1_1xbTblList_html_a387d3f6bbf291a1fb96d276ed9bb96b6"><div class="ttname"><a href="structxb_1_1xbTblList.html#a387d3f6bbf291a1fb96d276ed9bb96b6">xb::xbTblList::pDbf</a></div><div class="ttdeci">xbDbf * pDbf</div><div class="ttdef"><b>Definition:</b> xbtblmgr.h:36</div></div>
-<div class="ttc" id="astructxb_1_1xbTblList_html_a3fd169fcf0fd4df927544e5342db583c"><div class="ttname"><a href="structxb_1_1xbTblList.html#a3fd169fcf0fd4df927544e5342db583c">xb::xbTblList::pNext</a></div><div class="ttdeci">xbTblList * pNext</div><div class="ttdef"><b>Definition:</b> xbtblmgr.h:32</div></div>
-<div class="ttc" id="astructxb_1_1xbTblList_html_ac87742c8a6b1cf2e7e35218e96966a05"><div class="ttname"><a href="structxb_1_1xbTblList.html#ac87742c8a6b1cf2e7e35218e96966a05">xb::xbTblList::psTblAlias</a></div><div class="ttdeci">xbString * psTblAlias</div><div class="ttdef"><b>Definition:</b> xbtblmgr.h:35</div></div>
-<div class="ttc" id="astructxb_1_1xbTblList_html_aceec65f6f6b585788cf98e8dabd2737d"><div class="ttname"><a href="structxb_1_1xbTblList.html#aceec65f6f6b585788cf98e8dabd2737d">xb::xbTblList::psFqTblName</a></div><div class="ttdeci">xbString * psFqTblName</div><div class="ttdef"><b>Definition:</b> xbtblmgr.h:33</div></div>
-</div><!-- fragment --></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbtypes_8h.html b/docs/doxygen/html/xbtypes_8h.html
deleted file mode 100644
index 258fa58..0000000
--- a/docs/doxygen/html/xbtypes_8h.html
+++ /dev/null
@@ -1,154 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbtypes.h File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#namespaces">Namespaces</a> &#124;
-<a href="#define-members">Macros</a> &#124;
-<a href="#typedef-members">Typedefs</a> </div>
- <div class="headertitle"><div class="title">xbtypes.h File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-
-<p><a href="xbtypes_8h_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a>
-Macros</h2></td></tr>
-<tr class="memitem:ab0ae00665298fe7f5292691cb98ec2d9"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbtypes_8h.html#ab0ae00665298fe7f5292691cb98ec2d9">xbTrue</a>&#160;&#160;&#160;1</td></tr>
-<tr class="separator:ab0ae00665298fe7f5292691cb98ec2d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:adc4b6ca5ad299f63675136d9e03938cc"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc">xbFalse</a>&#160;&#160;&#160;0</td></tr>
-<tr class="separator:adc4b6ca5ad299f63675136d9e03938cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2c65f692ac861990861575e18f72f6eb"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbtypes_8h.html#a2c65f692ac861990861575e18f72f6eb">xbFileNo</a>&#160;&#160;&#160;fileno</td></tr>
-<tr class="separator:a2c65f692ac861990861575e18f72f6eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="typedef-members" name="typedef-members"></a>
-Typedefs</h2></td></tr>
-<tr class="memitem:a83aa6a550398db55973aa9fb4257e66e"><td class="memItemLeft" align="right" valign="top">typedef float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html#a83aa6a550398db55973aa9fb4257e66e">xb::xbFloat</a></td></tr>
-<tr class="separator:a83aa6a550398db55973aa9fb4257e66e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a25f47b226ce924a5c78f97989b0744a2"><td class="memItemLeft" align="right" valign="top">typedef double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xb::xbDouble</a></td></tr>
-<tr class="separator:a25f47b226ce924a5c78f97989b0744a2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab1a750481dd487f0d384aa1d200dff0f"><td class="memItemLeft" align="right" valign="top">typedef short int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xb::xbBool</a></td></tr>
-<tr class="separator:ab1a750481dd487f0d384aa1d200dff0f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac963d9fde6debb416303cfbed35fb793"><td class="memItemLeft" align="right" valign="top">typedef xbUInt64&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html#ac963d9fde6debb416303cfbed35fb793">xb::xbOffT</a></td></tr>
-<tr class="separator:ac963d9fde6debb416303cfbed35fb793"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<h2 class="groupheader">Macro Definition Documentation</h2>
-<a id="adc4b6ca5ad299f63675136d9e03938cc" name="adc4b6ca5ad299f63675136d9e03938cc"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#adc4b6ca5ad299f63675136d9e03938cc">&#9670;&nbsp;</a></span>xbFalse</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define xbFalse&#160;&#160;&#160;0</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a2c65f692ac861990861575e18f72f6eb" name="a2c65f692ac861990861575e18f72f6eb"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a2c65f692ac861990861575e18f72f6eb">&#9670;&nbsp;</a></span>xbFileNo</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define xbFileNo&#160;&#160;&#160;fileno</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ab0ae00665298fe7f5292691cb98ec2d9" name="ab0ae00665298fe7f5292691cb98ec2d9"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab0ae00665298fe7f5292691cb98ec2d9">&#9670;&nbsp;</a></span>xbTrue</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define xbTrue&#160;&#160;&#160;1</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbtypes_8h_source.html b/docs/doxygen/html/xbtypes_8h_source.html
deleted file mode 100644
index af33ce4..0000000
--- a/docs/doxygen/html/xbtypes_8h_source.html
+++ /dev/null
@@ -1,139 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbtypes.h Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbtypes.h</div></div>
-</div><!--header-->
-<div class="contents">
-<a href="xbtypes_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbtypes.h</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022 Gary A Kunkel</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">*/</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#ifndef __XB_XTYPES_H__</span></div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#define __XB_XTYPES_H__</span></div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"><a class="line" href="namespacexb.html#a83aa6a550398db55973aa9fb4257e66e"> 22</a></span><span class="keyword">typedef</span> <span class="keywordtype">float</span> <a class="code hl_typedef" href="namespacexb.html#a83aa6a550398db55973aa9fb4257e66e">xbFloat</a>;</div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"><a class="line" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2"> 23</a></span><span class="keyword">typedef</span> <span class="keywordtype">double</span> <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a>;</div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"><a class="line" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f"> 24</a></span><span class="keyword">typedef</span> <span class="keywordtype">short</span> <span class="keywordtype">int</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>;</div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"><a class="line" href="namespacexb.html#ac963d9fde6debb416303cfbed35fb793"> 25</a></span><span class="keyword">typedef</span> xbUInt64 <a class="code hl_typedef" href="namespacexb.html#ac963d9fde6debb416303cfbed35fb793">xbOffT</a>;</div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"><a class="line" href="xbtypes_8h.html#ab0ae00665298fe7f5292691cb98ec2d9"> 28</a></span><span class="preprocessor">#define xbTrue 1</span></div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc"> 29</a></span><span class="preprocessor">#define xbFalse 0</span></div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> </div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="preprocessor">#ifdef HAVE__FILENO_F</span></div>
-<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="preprocessor"> #define xbFileNo _fileno</span></div>
-<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="preprocessor">#else</span></div>
-<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"><a class="line" href="xbtypes_8h.html#a2c65f692ac861990861575e18f72f6eb"> 35</a></span><span class="preprocessor"> #define xbFileNo fileno</span></div>
-<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> </div>
-<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="preprocessor">#ifdef XB_LOCKING_SUPPORT</span></div>
-<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="preprocessor"> #if defined( HAVE_LONG_LONG )</span></div>
-<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="preprocessor"> #define LK4026531839 4026531839LL</span></div>
-<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="preprocessor"> #define LK4026531838 4026531838LL</span></div>
-<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="preprocessor"> #define LK3026531838 3026531838LL</span></div>
-<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span><span class="preprocessor"> #define LK1000000000 1000000000LL</span></div>
-<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="preprocessor"> #else</span></div>
-<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="preprocessor"> #define LK4026531839 4026531839L</span></div>
-<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="preprocessor"> #define LK4026531838 4026531838L</span></div>
-<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="preprocessor"> #define LK3026531838 3026531838L</span></div>
-<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="preprocessor"> #define LK1000000000 1000000000L</span></div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div>
-<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> </div>
-<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> </div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span>} <span class="comment">/* namespace */</span></div>
-<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_XTYPES_H__ */</span><span class="preprocessor"></span></div>
-<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
-<div class="ttc" id="anamespacexb_html_a25f47b226ce924a5c78f97989b0744a2"><div class="ttname"><a href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xb::xbDouble</a></div><div class="ttdeci">double xbDouble</div><div class="ttdef"><b>Definition:</b> xbtypes.h:23</div></div>
-<div class="ttc" id="anamespacexb_html_a83aa6a550398db55973aa9fb4257e66e"><div class="ttname"><a href="namespacexb.html#a83aa6a550398db55973aa9fb4257e66e">xb::xbFloat</a></div><div class="ttdeci">float xbFloat</div><div class="ttdef"><b>Definition:</b> xbtypes.h:22</div></div>
-<div class="ttc" id="anamespacexb_html_ab1a750481dd487f0d384aa1d200dff0f"><div class="ttname"><a href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xb::xbBool</a></div><div class="ttdeci">short int xbBool</div><div class="ttdef"><b>Definition:</b> xbtypes.h:24</div></div>
-<div class="ttc" id="anamespacexb_html_ac963d9fde6debb416303cfbed35fb793"><div class="ttname"><a href="namespacexb.html#ac963d9fde6debb416303cfbed35fb793">xb::xbOffT</a></div><div class="ttdeci">xbUInt64 xbOffT</div><div class="ttdef"><b>Definition:</b> xbtypes.h:25</div></div>
-</div><!-- fragment --></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbuda_8cpp.html b/docs/doxygen/html/xbuda_8cpp.html
deleted file mode 100644
index e4b26ab..0000000
--- a/docs/doxygen/html/xbuda_8cpp.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbuda.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbuda.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbuda_8h.html b/docs/doxygen/html/xbuda_8h.html
deleted file mode 100644
index 9d3ef21..0000000
--- a/docs/doxygen/html/xbuda_8h.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbuda.h File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbuda.h File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-
-<p><a href="xbuda_8h_source.html">Go to the source code of this file.</a></p>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbuda_8h_source.html b/docs/doxygen/html/xbuda_8h_source.html
deleted file mode 100644
index 00954f1..0000000
--- a/docs/doxygen/html/xbuda_8h_source.html
+++ /dev/null
@@ -1,132 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbuda.h Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbuda.h</div></div>
-</div><!--header-->
-<div class="contents">
-<a href="xbuda_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbuda.h</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">This class manages the user data area (UDA)</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"></span> </div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment">*/</span></div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> </div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#ifndef __XB_XBUDA_H__</span></div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#define __XB_XBUDA_H__</span></div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="preprocessor">#ifdef CMAKE_COMPILER_IS_GNUCC</span></div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#pragma interface</span></div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="preprocessor">#ifdef XB_EXPRESSION_SUPPORT</span></div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> </div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="keyword">class </span>XBDLLEXPORT xbUda {</div>
-<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> </div>
-<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> xbUda();</div>
-<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> ~xbUda();</div>
-<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> </div>
-<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> xbInt16 AddTokenForKey( <span class="keyword">const</span> xbString &amp;sKey, <span class="keyword">const</span> xbString &amp;sToken );</div>
-<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="keywordtype">void</span> Clear();</div>
-<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> xbInt16 DelTokenForKey( <span class="keyword">const</span> xbString &amp;sKey );</div>
-<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> xbInt16 GetTokenCnt() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> xbInt16 GetTokenForKey( <span class="keyword">const</span> xbString &amp;sKey, xbString &amp;sData );</div>
-<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> xbInt16 UpdTokenForKey( <span class="keyword">const</span> xbString &amp;sKey, <span class="keyword">const</span> xbString &amp;sToken );</div>
-<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <span class="keywordtype">void</span> DumpUda() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> </div>
-<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> xbLinkListOrd&lt;xbString&gt; llOrd;</div>
-<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> </div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span>};</div>
-<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span>} <span class="comment">/* namespace */</span></div>
-<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span><span class="preprocessor">#endif </span><span class="comment">/* XB_EXPRESSION_SUPPORT */</span><span class="preprocessor"></span></div>
-<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><span class="preprocessor">#endif </span><span class="comment">/* __XBUDA_H__ */</span><span class="preprocessor"></span></div>
-<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
-</div><!-- fragment --></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbxbase_8cpp.html b/docs/doxygen/html/xbxbase_8cpp.html
deleted file mode 100644
index 7bce391..0000000
--- a/docs/doxygen/html/xbxbase_8cpp.html
+++ /dev/null
@@ -1,88 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbxbase.cpp File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#namespaces">Namespaces</a> </div>
- <div class="headertitle"><div class="title">xbxbase.cpp File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbxbase_8h.html b/docs/doxygen/html/xbxbase_8h.html
deleted file mode 100644
index ecfc853..0000000
--- a/docs/doxygen/html/xbxbase_8h.html
+++ /dev/null
@@ -1,102 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbxbase.h File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="summary">
-<a href="#nested-classes">Data Structures</a> &#124;
-<a href="#namespaces">Namespaces</a> &#124;
-<a href="#var-members">Variables</a> </div>
- <div class="headertitle"><div class="title">xbxbase.h File Reference</div></div>
-</div><!--header-->
-<div class="contents">
-
-<p><a href="xbxbase_8h_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
-Data Structures</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html">xb::xbXBase</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">xbXbase class. <a href="classxb_1_1xbXBase.html#details">More...</a><br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr class="memitem:namespacexb"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html">xb</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="var-members" name="var-members"></a>
-Variables</h2></td></tr>
-<tr class="memitem:a4a31fbe9110c9e55495ce71e642d785c"><td class="memItemLeft" align="right" valign="top">class XBDLLEXPORT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacexb.html#a4a31fbe9110c9e55495ce71e642d785c">xb::xbLog</a></td></tr>
-<tr class="separator:a4a31fbe9110c9e55495ce71e642d785c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/html/xbxbase_8h_source.html b/docs/doxygen/html/xbxbase_8h_source.html
deleted file mode 100644
index 7f8563b..0000000
--- a/docs/doxygen/html/xbxbase_8h_source.html
+++ /dev/null
@@ -1,317 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.3"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbxbase.h Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr id="projectrow">
- <td id="projectalign">
- <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
- </div>
- <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.3 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search",'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
-});
-/* @license-end */
-</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0"
- name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
- <ul>
-<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
-</div>
-</div><!-- top -->
-<div class="header">
- <div class="headertitle"><div class="title">xbxbase.h</div></div>
-</div><!--header-->
-<div class="contents">
-<a href="xbxbase_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/* xbxbase.h</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"></span> </div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">XBase64 Software Library</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"></span> </div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"></span> </div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">Email Contact:</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> XDB-devel@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> XDB-users@lists.sourceforge.net</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"></span> </div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">*/</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#ifndef __XB_XBDBLIST_H__</span></div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#define __XB_XBDBLIST_H__</span></div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifdef CMAKE_COMPILER_IS_GNUCC</span></div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#pragma interface</span></div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"><a class="line" href="namespacexb.html#a4a31fbe9110c9e55495ce71e642d785c"> 26</a></span><span class="keyword">class </span>XBDLLEXPORT <a class="code hl_variable" href="namespacexb.html#a4a31fbe9110c9e55495ce71e642d785c">xbLog</a>;</div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="comment">/************************************************************************/</span></div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="comment">/* </span></div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="comment"> Xbase functions</span></div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="comment"></span> </div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="comment"> Min Parm Count is the minimum number of input parms needed by the function</span></div>
-<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="comment"></span> </div>
-<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="comment"> Return Type</span></div>
-<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="comment"> C Char or string</span></div>
-<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="comment"> D Date</span></div>
-<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="comment"> L Logical</span></div>
-<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="comment"> N Numeric</span></div>
-<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="comment"> 1 Varies - pull return type from first sibling</span></div>
-<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="comment"> 2 Varies - pull return type from second sibling</span></div>
-<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="comment">*/</span></div>
-<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> </div>
-<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span><span class="preprocessor">#ifdef XB_FUNCTION_SUPPORT</span></div>
-<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> </div>
-<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="comment">/*</span></div>
-<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="comment">struct XBDLLEXPORT xbFunctionInfo {</span></div>
-<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="comment"> const char * FuncName; // function name</span></div>
-<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="comment"> char ReturnType; // return type of function</span></div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="comment"> xbInt16 iReturnLenCalc; // used to calculate the function return value is</span></div>
-<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="comment"> // 1 = use value specified in iReturnLenVal</span></div>
-<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span><span class="comment"> // 2 = use length of operand specified in col 4</span></div>
-<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><span class="comment"> // 3 = use valued of numeric operand specified in col 4</span></div>
-<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span><span class="comment"> // 4 = length of parm 1 * numeric value parm</span></div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span><span class="comment"> // 5 = larger length of parm 2 or length of parm 3</span></div>
-<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="comment"> // 6 = if two or more parms, use numeric value from second parm,</span></div>
-<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span><span class="comment"> // otherwise use col4 value</span></div>
-<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span><span class="comment"> xbInt16 iReturnLenVal; // Used in combination with iReturnLenCalc</span></div>
-<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><span class="comment"></span> </div>
-<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span><span class="comment">};</span></div>
-<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span><span class="comment">*/</span></div>
-<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span><span class="comment">/*</span></div>
-<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="comment">static xbFunctionInfo FunctionList[] =</span></div>
-<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span><span class="comment">// Func Return -Rtrn Len-</span></div>
-<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="comment">// Name Type -Calc Val-</span></div>
-<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><span class="comment">{</span></div>
-<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span><span class="comment"> { &quot;ABS&quot;, &#39;N&#39;, 1, 4 },</span></div>
-<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span><span class="comment"> { &quot;ALLTRIM&quot;, &#39;C&#39;, 2, 1 },</span></div>
-<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span><span class="comment"> { &quot;ASC&quot;, &#39;N&#39;, 1, 4 },</span></div>
-<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span><span class="comment"> { &quot;AT&quot;, &#39;N&#39;, 1, 4 },</span></div>
-<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span><span class="comment"> { &quot;CDOW&quot;, &#39;C&#39;, 1, 9 },</span></div>
-<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span><span class="comment"> { &quot;CHR&quot;, &#39;C&#39;, 1, 1 },</span></div>
-<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span><span class="comment"> { &quot;CMONTH&quot;, &#39;C&#39;, 1, 9 },</span></div>
-<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span><span class="comment"> { &quot;CTOD&quot;, &#39;D&#39;, 1, 8 },</span></div>
-<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span><span class="comment"> { &quot;DATE&quot;, &#39;D&#39;, 1, 8 },</span></div>
-<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="comment"> { &quot;DAY&quot;, &#39;N&#39;, 1, 4 },</span></div>
-<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span><span class="comment"> { &quot;DEL&quot;, &#39;C&#39;, 1, 1 },</span></div>
-<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="comment"> { &quot;DELETED&quot;, &#39;L&#39;, 1, 1 },</span></div>
-<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span><span class="comment"> { &quot;DESCEND&quot;, &#39;1&#39;, 2, 1 },</span></div>
-<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span><span class="comment"> { &quot;DOW&quot;, &#39;N&#39;, 1, 4 },</span></div>
-<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span><span class="comment"> { &quot;DTOC&quot;, &#39;C&#39;, 1, 8 },</span></div>
-<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span><span class="comment"> { &quot;DTOS&quot;, &#39;C&#39;, 1, 8 },</span></div>
-<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span><span class="comment"> { &quot;EXP&quot;, &#39;N&#39;, 1, 4 },</span></div>
-<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span><span class="comment"> { &quot;IIF&quot;, &#39;C&#39;, 5, 0 },</span></div>
-<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span><span class="comment"> { &quot;INT&quot;, &#39;N&#39;, 1, 4 },</span></div>
-<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span><span class="comment"> { &quot;ISALPHA&quot;, &#39;L&#39;, 1, 1 },</span></div>
-<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span><span class="comment"> { &quot;ISLOWER&quot;, &#39;L&#39;, 1, 1 },</span></div>
-<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span><span class="comment"> { &quot;ISUPPER&quot;, &#39;L&#39;, 1, 1 },</span></div>
-<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span><span class="comment"> { &quot;LEFT&quot;, &#39;C&#39;, 3, 2 },</span></div>
-<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span><span class="comment"> { &quot;LEN&quot;, &#39;N&#39;, 1, 4 },</span></div>
-<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span><span class="comment"> { &quot;LOG&quot;, &#39;N&#39;, 1, 4 },</span></div>
-<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span><span class="comment"> { &quot;LOWER&quot;, &#39;C&#39;, 2, 1 },</span></div>
-<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span><span class="comment"> { &quot;LTRIM&quot;, &#39;C&#39;, 2, 1 },</span></div>
-<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span><span class="comment"> { &quot;MAX&quot;, &#39;N&#39;, 1, 4 },</span></div>
-<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span><span class="comment"> { &quot;MIN&quot;, &#39;N&#39;, 1, 4 },</span></div>
-<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span><span class="comment"> { &quot;MONTH&quot;, &#39;N&#39;, 1, 4 },</span></div>
-<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span><span class="comment"> { &quot;RECNO&quot;, &#39;N&#39;, 1, 4 },</span></div>
-<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span><span class="comment"> { &quot;RECCOUNT&quot;, &#39;N&#39;, 1, 4 },</span></div>
-<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span><span class="comment"> { &quot;REPLICATE&quot;, &#39;C&#39;, 4, 0 },</span></div>
-<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span><span class="comment"> { &quot;RIGHT&quot;, &#39;C&#39;, 3, 2 },</span></div>
-<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span><span class="comment"> { &quot;RTRIM&quot;, &#39;C&#39;, 2, 1 },</span></div>
-<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span><span class="comment"> { &quot;SPACE&quot;, &#39;C&#39;, 3, 1 },</span></div>
-<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span><span class="comment"> { &quot;SQRT&quot;, &#39;N&#39;, 1, 4 },</span></div>
-<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span><span class="comment"> { &quot;STOD&quot;, &#39;D&#39;, 1, 8 },</span></div>
-<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span><span class="comment"> { &quot;STR&quot;, &#39;C&#39;, 6, 10 },</span></div>
-<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span><span class="comment"> { &quot;STRZERO&quot;, &#39;C&#39;, 3, 2 },</span></div>
-<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span><span class="comment"> { &quot;SUBSTR&quot;, &#39;C&#39;, 3, 3 },</span></div>
-<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span><span class="comment"> { &quot;TRIM&quot;, &#39;C&#39;, 2, 1 },</span></div>
-<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span><span class="comment"> { &quot;UPPER&quot;, &#39;C&#39;, 2, 1 },</span></div>
-<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span><span class="comment"> { &quot;VAL&quot;, &#39;N&#39;, 1, 4 },</span></div>
-<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span><span class="comment"> { &quot;YEAR&quot;, &#39;N&#39;, 1, 4 },</span></div>
-<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span><span class="comment"> { 0, 0, 0, 0 },</span></div>
-<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span><span class="comment">};</span></div>
-<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span><span class="comment">*/</span></div>
-<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> </div>
-<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> </div>
-<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> </div>
-<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> </div>
-<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"><a class="line" href="classxb_1_1xbXBase.html"> 123</a></span><span class="keyword">class </span>XBDLLEXPORT <a class="code hl_class" href="classxb_1_1xbXBase.html">xbXBase</a> : <span class="keyword">public</span> <a class="code hl_class" href="classxb_1_1xbTblMgr.html">xbTblMgr</a>{</div>
-<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <a class="code hl_variable" href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xbXBase</a>();</div>
-<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <a class="code hl_class" href="classxb_1_1xbXBase.html">~xbXBase</a>();</div>
-<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> </div>
-<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> xbInt16 CloseAllTables();</div>
-<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="keywordtype">void</span> DisableMsgLogging();</div>
-<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <span class="keywordtype">void</span> EnableMsgLogging ();</div>
-<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> xbInt16 FlushLog();</div>
-<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> </div>
-<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;GetLogDirectory () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;GetLogFileName () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;GetLogFqFileName() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetLogStatus () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> </div>
-<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"><a class="line" href="classxb_1_1xbXBase.html#aa957eb502ecd076e5df89e7415cb094b"> 138</a></span> xbInt16 <a class="code hl_function" href="classxb_1_1xbXBase.html#aa957eb502ecd076e5df89e7415cb094b">OpenHighestVersion</a>( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sAlias, <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> &amp;dbf, <span class="keywordtype">int</span> dummy );</div>
-<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> xbInt16 OpenHighestVersion( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sAlias, <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> **dbf );</div>
-<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> </div>
-<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> * Open( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, xbInt16 &amp;iRc );</div>
-<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> * Open( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sAlias, xbInt16 iOpenMode, xbInt16 iShareMode, xbInt16 iVersion, xbInt16 &amp;iRc );</div>
-<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <span class="keywordtype">void</span> SetLogDirectory( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sLogFileDirectory );</div>
-<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> <span class="keywordtype">void</span> SetLogFileName ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sLogFileName );</div>
-<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="keywordtype">void</span> SetLogSize ( <span class="keywordtype">size_t</span> lSize );</div>
-<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> xbInt16 WriteLogMessage( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sLogMessage, xbInt16 iOutputOpt = 0 );</div>
-<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> xbInt16 WriteLogBytes ( xbUInt32 lCnt, <span class="keyword">const</span> <span class="keywordtype">char</span> *p );</div>
-<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> </div>
-<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="keywordtype">void</span> xbSleep ( xbInt32 lMillisecs );</div>
-<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> </div>
-<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> xbInt16 GetCmdLineOpt ( xbInt32 lArgc, <span class="keywordtype">char</span> **argv, <span class="keyword">const</span> <span class="keywordtype">char</span> *sOptRqst, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sParmOut );</div>
-<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> xbInt16 GetCmdLineOpt ( xbInt32 lArgc, <span class="keywordtype">char</span> **argv, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOptRqst, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sParmOut );</div>
-<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> </div>
-<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> </div>
-<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="comment">/* xbase functions */</span></div>
-<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span><span class="preprocessor"> #ifdef XB_FUNCTION_SUPPORT</span></div>
-<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> xbInt16 ABS( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dOut );</div>
-<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> xbInt16 ALLTRIM( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
-<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> xbInt16 ASC( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dAscOut );</div>
-<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> xbInt16 AT( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sSrchFor, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sBase, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dPos );</div>
-<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> xbInt16 CDOW( <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dInDate, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOutDow );</div>
-<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> xbInt16 CHR( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dAsciCd, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
-<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> xbInt16 CMONTH( <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dInDate, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOutMonth );</div>
-<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> xbInt16 CTOD( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sInDate, <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dOutDate );</div>
-<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> xbInt16 DATE( <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dOutDate );</div>
-<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> xbInt16 DAY( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dInDate, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dOutDay );</div>
-<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> xbInt16 DEL( <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> * d, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut, xbInt16 iRecBufSw = 0 );</div>
-<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> xbInt16 DELETED( <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> * d, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bOut, xbInt16 iRecBufSw = 0 );</div>
-<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> xbInt16 DESCEND( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
-<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> xbInt16 DESCEND( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dInDate, <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dOutDate );</div>
-<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> xbInt16 DESCEND( <span class="keyword">const</span> <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dsOut );</div>
-<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> xbInt16 DOW( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;sInDate, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dDowOut );</div>
-<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> xbInt16 DTOC( <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dInDate, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOutFmtDate );</div>
-<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> xbInt16 DTOS( <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dInDate, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOutFmtDate );</div>
-<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> xbInt16 EXP( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dOut );</div>
-<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> xbInt16 IIF( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bResult, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTrueResult, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFalseResult, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sResult );</div>
-<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> xbInt16 INT( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dOut );</div>
-<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> xbInt16 ISALPHA( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bResult );</div>
-<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> xbInt16 ISLOWER( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bResult );</div>
-<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> xbInt16 ISUPPER( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bResult );</div>
-<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> xbInt16 LEFT( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, xbUInt32 lCharCnt, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
-<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> xbInt16 LEN( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dLen );</div>
-<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> xbInt16 LOG( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dOut );</div>
-<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> xbInt16 LOWER( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
-<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> xbInt16 LTRIM( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp; sOut );</div>
-<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> xbInt16 MAX( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn1, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn2, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dOut );</div>
-<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> xbInt16 MIN( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn1, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn2, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dOut );</div>
-<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> xbInt16 MONTH( <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dInDate, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dMonthOut );</div>
-<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> xbInt16 RECCOUNT( <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> * d, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dRecOut );</div>
-<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> xbInt16 RECNO( <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> * d, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dRecOut );</div>
-<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> xbInt16 REPLICATE( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, xbUInt32 ulRepCnt, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
-<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> xbInt16 RIGHT( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, xbUInt32 iCharCnt, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
-<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> xbInt16 RTRIM( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
-<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> xbInt16 SPACE( xbInt32 lCnt, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
-<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> xbInt16 SQRT( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dBase, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dSqrRt );</div>
-<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> xbInt16 STOD( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;sDateOut );</div>
-<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> xbInt16 STR( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
-<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> xbInt16 STR( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, xbUInt32 ulLen, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
-<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> xbInt16 STR( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, xbUInt32 ulLen, xbUInt32 ulDec, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
-<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> xbInt16 STR( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, xbUInt32 ulLen, xbUInt32 ulDec, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sPadChar, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
-<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> xbInt16 STRZERO( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, xbUInt32 ulLen, xbUInt32 ulDec, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
-<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> xbInt16 SUBSTR( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, xbUInt32 ulStartPos, xbUInt32 ulLen, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
-<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> xbInt16 TRIM( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
-<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> xbInt16 UPPER( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
-<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> xbInt16 VAL( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dOut );</div>
-<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> xbInt16 YEAR( <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dInDate, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dOutYear );</div>
-<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> </div>
-<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> <span class="keyword">protected</span>:</div>
-<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"><a class="line" href="classxb_1_1xbXBase.html#a86a53ce3efbf910996df0f853f1c0add"> 210</a></span> <span class="keyword">friend</span> <span class="keyword">class </span>xbBcd;</div>
-<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"><a class="line" href="classxb_1_1xbXBase.html#a3c3e5617be811d732472fe2cc8fb18cc"> 211</a></span> <span class="keyword">friend</span> <span class="keyword">class </span>xbExp;</div>
-<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> </div>
-<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span><span class="preprocessor"> #ifdef XB_BLOCKREAD_SUPPORT</span></div>
-<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> <span class="keyword">friend</span> <span class="keyword">class </span>xbBlockRead;</div>
-<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span><span class="preprocessor"> #endif </span><span class="comment">// XB_BLOCKREAD_SUPPORT</span></div>
-<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> </div>
-<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> </div>
-<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"><a class="line" href="classxb_1_1xbXBase.html#ae52e53340593b4253936c1372ec15ee1"> 218</a></span> xbInt16 <a class="code hl_function" href="classxb_1_1xbXBase.html#ae52e53340593b4253936c1372ec15ee1">GetFunctionInfo</a>( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sExpLine, <span class="keywordtype">char</span> &amp;cReturnType, xbInt16 &amp;iReturnLenCalc, xbInt32 &amp;lReturnLenVal ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> <span class="keyword">static</span> xbInt16 xbMemcmp( <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *s1, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *s2, <span class="keywordtype">size_t</span> n );</div>
-<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> </div>
-<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> </div>
-<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span><span class="preprocessor">#ifdef XB_LOGGING_SUPPORT</span></div>
-<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> <a class="code hl_variable" href="namespacexb.html#a4a31fbe9110c9e55495ce71e642d785c">xbLog</a> *xLog;</div>
-<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> </div>
-<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span>};</div>
-<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> </div>
-<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span>} <span class="comment">/* namespace xb */</span></div>
-<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_DBLIST_H__ */</span><span class="preprocessor"></span></div>
-<div class="ttc" id="aclassxb_1_1xbDate_html"><div class="ttname"><a href="classxb_1_1xbDate.html">xb::xbDate</a></div><div class="ttdoc">xbDate class.</div><div class="ttdef"><b>Definition:</b> xbdate.h:62</div></div>
-<div class="ttc" id="aclassxb_1_1xbDbf_html"><div class="ttname"><a href="classxb_1_1xbDbf.html">xb::xbDbf</a></div><div class="ttdoc">Base class for handling dbf files/tables.</div><div class="ttdef"><b>Definition:</b> xbdbf.h:150</div></div>
-<div class="ttc" id="aclassxb_1_1xbString_html"><div class="ttname"><a href="classxb_1_1xbString.html">xb::xbString</a></div><div class="ttdoc">Class for handling string data.</div><div class="ttdef"><b>Definition:</b> xbstring.h:50</div></div>
-<div class="ttc" id="aclassxb_1_1xbTblMgr_html"><div class="ttname"><a href="classxb_1_1xbTblMgr.html">xb::xbTblMgr</a></div><div class="ttdef"><b>Definition:</b> xbtblmgr.h:39</div></div>
-<div class="ttc" id="aclassxb_1_1xbXBase_html"><div class="ttname"><a href="classxb_1_1xbXBase.html">xb::xbXBase</a></div><div class="ttdoc">xbXbase class.</div><div class="ttdef"><b>Definition:</b> xbxbase.h:123</div></div>
-<div class="ttc" id="aclassxb_1_1xbXBase_html_aa957eb502ecd076e5df89e7415cb094b"><div class="ttname"><a href="classxb_1_1xbXBase.html#aa957eb502ecd076e5df89e7415cb094b">xb::xbXBase::OpenHighestVersion</a></div><div class="ttdeci">xbInt16 OpenHighestVersion(const xbString &amp;sTableName, const xbString &amp;sAlias, xbDbf &amp;dbf, int dummy)</div></div>
-<div class="ttc" id="aclassxb_1_1xbXBase_html_ae52e53340593b4253936c1372ec15ee1"><div class="ttname"><a href="classxb_1_1xbXBase.html#ae52e53340593b4253936c1372ec15ee1">xb::xbXBase::GetFunctionInfo</a></div><div class="ttdeci">xbInt16 GetFunctionInfo(const xbString &amp;sExpLine, char &amp;cReturnType, xbInt16 &amp;iReturnLenCalc, xbInt32 &amp;lReturnLenVal) const</div></div>
-<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
-<div class="ttc" id="anamespacexb_html_a25f47b226ce924a5c78f97989b0744a2"><div class="ttname"><a href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xb::xbDouble</a></div><div class="ttdeci">double xbDouble</div><div class="ttdef"><b>Definition:</b> xbtypes.h:23</div></div>
-<div class="ttc" id="anamespacexb_html_a4a31fbe9110c9e55495ce71e642d785c"><div class="ttname"><a href="namespacexb.html#a4a31fbe9110c9e55495ce71e642d785c">xb::xbLog</a></div><div class="ttdeci">class XBDLLEXPORT xbLog</div><div class="ttdef"><b>Definition:</b> xbxbase.h:26</div></div>
-<div class="ttc" id="anamespacexb_html_a97858ddeb1c4b0100f3edc1a46d3a8b0"><div class="ttname"><a href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xb::xbXBase</a></div><div class="ttdeci">class XBDLLEXPORT xbXBase</div><div class="ttdef"><b>Definition:</b> xbssv.h:27</div></div>
-<div class="ttc" id="anamespacexb_html_ab1a750481dd487f0d384aa1d200dff0f"><div class="ttname"><a href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xb::xbBool</a></div><div class="ttdeci">short int xbBool</div><div class="ttdef"><b>Definition:</b> xbtypes.h:24</div></div>
-</div><!-- fragment --></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
-</small></address>
-</body>
-</html>
diff --git a/docs/doxygen/latex/annotated.tex b/docs/doxygen/latex/annotated.tex
deleted file mode 100644
index 4ee4578..0000000
--- a/docs/doxygen/latex/annotated.tex
+++ /dev/null
@@ -1,12 +0,0 @@
-\doxysection{Data Structures}
-Here are the data structures with brief descriptions\+:\begin{DoxyCompactList}
-\item\contentsline{section}{\mbox{\hyperlink{classxb_1_1xbDate}{xb\+::xb\+Date}} \\*Xb\+Date class }{\pageref{classxb_1_1xbDate}}{}
-\item\contentsline{section}{\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+::xb\+Dbf}} \\*Base class for handling dbf files/tables }{\pageref{classxb_1_1xbDbf}}{}
-\item\contentsline{section}{\mbox{\hyperlink{classxb_1_1xbFile}{xb\+::xb\+File}} \\*Class for handling low level file I/O }{\pageref{classxb_1_1xbFile}}{}
-\item\contentsline{section}{\mbox{\hyperlink{structxb_1_1xbSchema}{xb\+::xb\+Schema}} \\*Schema used for defining tables with Create\+Table methods }{\pageref{structxb_1_1xbSchema}}{}
-\item\contentsline{section}{\mbox{\hyperlink{classxb_1_1xbSsv}{xb\+::xb\+Ssv}} \\*Class for handling shared system variables }{\pageref{classxb_1_1xbSsv}}{}
-\item\contentsline{section}{\mbox{\hyperlink{classxb_1_1xbString}{xb\+::xb\+String}} \\*Class for handling string data }{\pageref{classxb_1_1xbString}}{}
-\item\contentsline{section}{\mbox{\hyperlink{structxb_1_1xbTblList}{xb\+::xb\+Tbl\+List}} }{\pageref{structxb_1_1xbTblList}}{}
-\item\contentsline{section}{\mbox{\hyperlink{classxb_1_1xbTblMgr}{xb\+::xb\+Tbl\+Mgr}} }{\pageref{classxb_1_1xbTblMgr}}{}
-\item\contentsline{section}{\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+::xb\+XBase}} \\*Xb\+Xbase class }{\pageref{classxb_1_1xbXBase}}{}
-\end{DoxyCompactList}
diff --git a/docs/doxygen/latex/classxb_1_1xbDate.pdf b/docs/doxygen/latex/classxb_1_1xbDate.pdf
deleted file mode 100644
index c0c2d67..0000000
--- a/docs/doxygen/latex/classxb_1_1xbDate.pdf
+++ /dev/null
Binary files differ
diff --git a/docs/doxygen/latex/classxb_1_1xbDate.tex b/docs/doxygen/latex/classxb_1_1xbDate.tex
deleted file mode 100644
index d1505d4..0000000
--- a/docs/doxygen/latex/classxb_1_1xbDate.tex
+++ /dev/null
@@ -1,1065 +0,0 @@
-\hypertarget{classxb_1_1xbDate}{}\doxysection{xb\+::xb\+Date Class Reference}
-\label{classxb_1_1xbDate}\index{xb::xbDate@{xb::xbDate}}
-
-
-\mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} class.
-
-
-
-
-{\ttfamily \#include $<$xbdate.\+h$>$}
-
-Inheritance diagram for xb\+::xb\+Date\+:\begin{figure}[H]
-\begin{center}
-\leavevmode
-\includegraphics[height=2.000000cm]{classxb_1_1xbDate}
-\end{center}
-\end{figure}
-\doxysubsection*{Public Member Functions}
-\begin{DoxyCompactItemize}
-\item
-\mbox{\hyperlink{classxb_1_1xbDate_ab3150e7db0ab5db10a07d748b55465eb}{xb\+Date}} ()
-\begin{DoxyCompactList}\small\item\em Constructor. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbDate_ac8a4d9330221a3daee21b3c28c1d9719}{xb\+Date}} (const char $\ast$Date8)
-\begin{DoxyCompactList}\small\item\em Constructor. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbDate_acf4546f5681735ede18210f60bab68d4}{xb\+Date}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&Date8)
-\begin{DoxyCompactList}\small\item\em Constructor. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbDate_a7ab727a7ec184a086ad36ef83b948170}{xb\+Date}} (xb\+Int32 l\+Jul\+Date)
-\begin{DoxyCompactList}\small\item\em Constructor. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbDate_a05c9680c6eb9fe07ecf13a189b596c37}{$\sim$xb\+Date}} ()
-\begin{DoxyCompactList}\small\item\em Destructor. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbDate_a2e33ad9415c32e820e08fd8084198690}{operator=}} (const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&d)
-\begin{DoxyCompactList}\small\item\em Set operator=. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbDate_a947ba156d04fe063aaa4c9964ae5d163}{operator+=}} (xb\+Int32 i)
-\begin{DoxyCompactList}\small\item\em operator += \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbDate_a4a8f207d759540114373f5e9d6d375f7}{operator-\/=}} (xb\+Int32 i)
-\begin{DoxyCompactList}\small\item\em operator -\/= \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbDate_a1c7d9e3718c43df18b21646072c8605e}{operator++}} (xb\+Int32 i)
-\begin{DoxyCompactList}\small\item\em operator ++ \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbDate_ae2b33dfee60d324916d833b2098b5a6b}{operator-\/-\/}} (xb\+Int32 i)
-\begin{DoxyCompactList}\small\item\em operator -- \end{DoxyCompactList}\item
-xb\+Int32 \mbox{\hyperlink{classxb_1_1xbDate_a3f3a8802c96098c85aa8d0e19717a979}{operator-\/}} (const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&) const
-\begin{DoxyCompactList}\small\item\em operator -\/ \end{DoxyCompactList}\item
-const char $\ast$ \mbox{\hyperlink{classxb_1_1xbDate_a73ff5c037046ac0a0bb7d73f74e25cbb}{operator-\/}} (xb\+Int32 i)
-\begin{DoxyCompactList}\small\item\em operator -\/ \end{DoxyCompactList}\item
-const char $\ast$ \mbox{\hyperlink{classxb_1_1xbDate_ad09609bf78cf038886a4f9cd19423f9c}{operator+}} (xb\+Int32 i)
-\begin{DoxyCompactList}\small\item\em operator + \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbDate_aaaf98c1a672066021895f0953b6e94d0}{operator==}} (const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&) const
-\begin{DoxyCompactList}\small\item\em operator == \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbDate_ac3aaf8997fc0c36676085e7741f33a8a}{operator!=}} (const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&) const
-\begin{DoxyCompactList}\small\item\em operator != \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbDate_a11f09d97ed527e7ef00ba6f17b9fb02c}{operator$<$}} (const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&) const
-\begin{DoxyCompactList}\small\item\em operator \texorpdfstring{$<$}{<} \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbDate_a744031c4031d6ec4595d34acbd1c5860}{operator$>$}} (const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&) const
-\begin{DoxyCompactList}\small\item\em \texorpdfstring{$>$}{>} \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbDate_a6d8fa4df4664f3fd8d4cc15e77f6d046}{operator$<$=}} (const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&) const
-\begin{DoxyCompactList}\small\item\em operator \texorpdfstring{$<$}{<}= \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbDate_a1d81959ea55440588068ea7f82617c99}{operator$>$=}} (const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&) const
-\begin{DoxyCompactList}\small\item\em operator \texorpdfstring{$>$}{>}= \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDate_a9df58caa54105c489c314785c457e8cb}{Calc\+Rolling\+Century\+For\+Year}} (xb\+Int16 year) const
-\begin{DoxyCompactList}\small\item\em Calculate century for a given year. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDate_a38b2c5285c69ed65e94ece6c22dafde0}{Century\+Of}} () const
-\begin{DoxyCompactList}\small\item\em Get century for date. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDate_a9fc29730b66cddfbb58c69992a99cc7c}{Char\+Day\+Of}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Out\+Char\+Day)
-\begin{DoxyCompactList}\small\item\em Get the day of the week. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDate_afffc84f02bd421335ff8ebe9fb3db0ac}{Char\+Month\+Of}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Out\+Char\+Month)
-\begin{DoxyCompactList}\small\item\em Get the month from the date. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbDate_a367f66ef0c03c1747c12a18784554ccb}{Date\+Is\+Valid}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Date8) const
-\begin{DoxyCompactList}\small\item\em Check a date for valid data. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDate_ad6417a900ce64a46f8909c0c7a2ddea2}{Day\+Of}} (xb\+Int16 i\+Format) const
-\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDate_abb1eb4b0394e4a67aadab15779b1b8c5}{CTOD}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Ctod\+In\+Date)
-\begin{DoxyCompactList}\small\item\em Format MM/\+DD/\+YY date. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDate_a01de44dc869f7db99f33046fc91f2c6a}{Format\+Date}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Fmt\+In, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Fmt\+Out)
-\item
-const char $\ast$ \mbox{\hyperlink{classxb_1_1xbDate_ab43a5d8d929767c0ffdd722972bb8cc0}{Str}} () const
-\begin{DoxyCompactList}\small\item\em Return the date value. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbDate_af2bd33a72448e2c5ee00d8b711dc5d95}{Is\+Leap\+Year}} (xb\+Int16 i\+Year) const
-\begin{DoxyCompactList}\small\item\em Determine if date is a leap year. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbDate_a5f8051c31b29244265e8f26ac3547b9b}{Is\+Leap\+Year}} () const
-\begin{DoxyCompactList}\small\item\em Determine if date is a leap year. \end{DoxyCompactList}\item
-xb\+Int32 \mbox{\hyperlink{classxb_1_1xbDate_a1ee3377d4ead9d31099eee539d9b13a7}{Julian\+Days}} () const
-\begin{DoxyCompactList}\small\item\em Calculate julian days for a given date. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDate_a9d28b2a46d8aaa284b92f44eeb96b2ff}{Jul\+To\+Date8}} (xb\+Int32 l\+Jul\+Date)
-\begin{DoxyCompactList}\small\item\em Convert the number of julian days to gregorian date. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDate_a15847866bb7642aa42bc254e0cf2038a}{Last\+Day\+Of\+Month}} ()
-\begin{DoxyCompactList}\small\item\em Set the date to the last day of month for a given date. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDate_a08bd84c67e1119d8c5c1748cd89d092e}{Month\+Of}} () const
-\begin{DoxyCompactList}\small\item\em Return the month for the date. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDate_a4b0cde152b5de0f7d26608d1445110b6}{Set}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&Date8)
-\begin{DoxyCompactList}\small\item\em Set the date. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDate_a40ba54a58d64cf56266f020f91584192}{Sysdate}} ()
-\begin{DoxyCompactList}\small\item\em Set the date equal to the system date. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDate_a31057dfaa36389a16e40e3db82c46262}{Year\+Of}} () const
-\begin{DoxyCompactList}\small\item\em Returns the year of the date. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}{Display\+Error}} (xb\+Int16 Error\+Code) const
-\begin{DoxyCompactList}\small\item\em Display error message on console for a given error number. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a6fbb9c3a550ab0b3378f9586a57791d2}{Get\+Default\+Date\+Format}} () const
-\begin{DoxyCompactList}\small\item\em Get the default date format. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}{Get\+Data\+Directory}} () const
-\begin{DoxyCompactList}\small\item\em Get the current data directory. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}{Get\+Endian\+Type}} () const
-\begin{DoxyCompactList}\small\item\em Get the Endian type. \end{DoxyCompactList}\item
-const char $\ast$ \mbox{\hyperlink{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}{Get\+Error\+Message}} (xb\+Int16 Error\+Code) const
-\begin{DoxyCompactList}\small\item\em Get an error message. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}{Set\+Data\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Data\+Directory)
-\begin{DoxyCompactList}\small\item\em Set the data directory. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}{Set\+Default\+Date\+Format}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Default\+Date\+Format)
-\begin{DoxyCompactList}\small\item\em Set the default date format. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}{Bit\+Set}} (unsigned char c, xb\+Int16 i\+Bit\+No) const
-\begin{DoxyCompactList}\small\item\em Check a bit in a one byte field and see if it is set. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}{Bit\+Dump}} (unsigned char c) const
-\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}{Bit\+Dump}} (char c) const
-\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}{Get\+Default\+Auto\+Commit}} () const
-\begin{DoxyCompactList}\small\item\em Get the default auto commit setting. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}{Set\+Default\+Auto\+Commit}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Default\+Auto\+Commit)
-\begin{DoxyCompactList}\small\item\em Set the default auto commit. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}{Get\+Home\+Dir}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Home\+Dir\+Out)
-\begin{DoxyCompactList}\small\item\em Get home directory. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}{Get\+Log\+Directory}} () const
-\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}{Get\+Log\+File\+Name}} () const
-\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}{Set\+Log\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Log\+Directory)
-\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}{Get\+Multi\+User}} () const
-\begin{DoxyCompactList}\small\item\em Get the multi user setting. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}{Set\+Multi\+User}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Multi\+User)
-\begin{DoxyCompactList}\small\item\em Get the multi user setting. \end{DoxyCompactList}\end{DoxyCompactItemize}
-\doxysubsection*{Static Public Attributes}
-\begin{DoxyCompactItemize}
-\item
-static const char $\ast$ \mbox{\hyperlink{classxb_1_1xbSsv_a6219f1b5e24ea12fe158cd5aea56988e}{Error\+Code\+Text}} \mbox{[}$\,$\mbox{]}
-\end{DoxyCompactItemize}
-\doxysubsection*{Protected Member Functions}
-\begin{DoxyCompactItemize}
-\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a904ec348fd029d4a76e72b8fde636108}{Set\+Endian\+Type}} ()
-\begin{DoxyCompactList}\small\item\em Set the endian type. \end{DoxyCompactList}\end{DoxyCompactItemize}
-\doxysubsection*{Static Protected Attributes}
-\begin{DoxyCompactItemize}
-\item
-static xb\+Int16 \mbox{\hyperlink{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}{i\+Endian\+Type}} = 0
-\item
-static \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \mbox{\hyperlink{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}{s\+Null\+String}} = \char`\"{}\char`\"{}
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Detailed Description}
-\mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} class.
-
-This \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} class handles two type of date values\+:~\newline
-
-
-1) Gregorian dates with a format of CCYYMMDD. This is how dates are stored in dbf files.~\newline
- 2) Julian dates calculated as the number of days since 1901-\/01-\/01 + 1721425.~\newline
-
-
-Leap Years\+: The routines in the class support both leap years (one every four years) and leap centuries (one every four hundred years.)
-
-A leap year is a year having 366 days, which can be evenly divisible by 4 and not by 100.~\newline
- Leap centuries are years which are evenly divisible by 400.~\newline
-
-
-From a programming perspective, Julian dates are useful for date arithmetic, determining the difference between two dates or calculating a future or past date.~\newline
-
-
-To determine the difference between two dates, convert both dates to a Julian date and subtract one from the other.~\newline
-
-
-To calculate a future or past date, convert the base date to a Julian date, add (or subtract) the number of days necessary to (from) it and convert the julian date back to a Gregorian date.
-
-\doxysubsection{Constructor \& Destructor Documentation}
-\mbox{\Hypertarget{classxb_1_1xbDate_ab3150e7db0ab5db10a07d748b55465eb}\label{classxb_1_1xbDate_ab3150e7db0ab5db10a07d748b55465eb}}
-\index{xb::xbDate@{xb::xbDate}!xbDate@{xbDate}}
-\index{xbDate@{xbDate}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{xbDate()}{xbDate()}\hspace{0.1cm}{\footnotesize\ttfamily [1/4]}}
-{\footnotesize\ttfamily xb\+::xb\+Date\+::xb\+Date (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
-
-
-Constructor.
-
-\mbox{\Hypertarget{classxb_1_1xbDate_ac8a4d9330221a3daee21b3c28c1d9719}\label{classxb_1_1xbDate_ac8a4d9330221a3daee21b3c28c1d9719}}
-\index{xb::xbDate@{xb::xbDate}!xbDate@{xbDate}}
-\index{xbDate@{xbDate}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{xbDate()}{xbDate()}\hspace{0.1cm}{\footnotesize\ttfamily [2/4]}}
-{\footnotesize\ttfamily xb\+::xb\+Date\+::xb\+Date (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s\+Date8\+In }\end{DoxyParamCaption})}
-
-
-
-Constructor.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Date8\+In} & -\/ Input date. \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbDate_acf4546f5681735ede18210f60bab68d4}\label{classxb_1_1xbDate_acf4546f5681735ede18210f60bab68d4}}
-\index{xb::xbDate@{xb::xbDate}!xbDate@{xbDate}}
-\index{xbDate@{xbDate}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{xbDate()}{xbDate()}\hspace{0.1cm}{\footnotesize\ttfamily [3/4]}}
-{\footnotesize\ttfamily xb\+::xb\+Date\+::xb\+Date (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Date8\+In }\end{DoxyParamCaption})}
-
-
-
-Constructor.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Date8\+In} & -\/ Input date. \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbDate_a7ab727a7ec184a086ad36ef83b948170}\label{classxb_1_1xbDate_a7ab727a7ec184a086ad36ef83b948170}}
-\index{xb::xbDate@{xb::xbDate}!xbDate@{xbDate}}
-\index{xbDate@{xbDate}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{xbDate()}{xbDate()}\hspace{0.1cm}{\footnotesize\ttfamily [4/4]}}
-{\footnotesize\ttfamily xb\+::xb\+Date\+::xb\+Date (\begin{DoxyParamCaption}\item[{xb\+Int32}]{l\+Jul\+Date }\end{DoxyParamCaption})}
-
-
-
-Constructor.
-
-
-\begin{DoxyParams}{Parameters}
-{\em l\+Jul\+Date} & -\/ Input julian date. \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbDate_a05c9680c6eb9fe07ecf13a189b596c37}\label{classxb_1_1xbDate_a05c9680c6eb9fe07ecf13a189b596c37}}
-\index{xb::xbDate@{xb::xbDate}!````~xbDate@{$\sim$xbDate}}
-\index{````~xbDate@{$\sim$xbDate}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{$\sim$xbDate()}{~xbDate()}}
-{\footnotesize\ttfamily xb\+::xb\+Date\+::$\sim$xb\+Date (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
-
-
-Destructor.
-
-
-
-\doxysubsection{Member Function Documentation}
-\mbox{\Hypertarget{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}\label{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}}
-\index{xb::xbDate@{xb::xbDate}!BitDump@{BitDump}}
-\index{BitDump@{BitDump}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{BitDump()}{BitDump()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Bit\+Dump (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}\label{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}}
-\index{xb::xbDate@{xb::xbDate}!BitDump@{BitDump}}
-\index{BitDump@{BitDump}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{BitDump()}{BitDump()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Bit\+Dump (\begin{DoxyParamCaption}\item[{unsigned char}]{c }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}\label{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}}
-\index{xb::xbDate@{xb::xbDate}!BitSet@{BitSet}}
-\index{BitSet@{BitSet}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{BitSet()}{BitSet()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Ssv\+::\+Bit\+Set (\begin{DoxyParamCaption}\item[{unsigned char}]{c, }\item[{xb\+Int16}]{i\+Bit\+No }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Check a bit in a one byte field and see if it is set.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c} & One byte char field to examine. \\
-\hline
-{\em i\+Bit\+No} & which bit to examine. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-xb\+True Bit is set~\newline
- xb\+False Bit is not set
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDate_a9df58caa54105c489c314785c457e8cb}\label{classxb_1_1xbDate_a9df58caa54105c489c314785c457e8cb}}
-\index{xb::xbDate@{xb::xbDate}!CalcRollingCenturyForYear@{CalcRollingCenturyForYear}}
-\index{CalcRollingCenturyForYear@{CalcRollingCenturyForYear}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{CalcRollingCenturyForYear()}{CalcRollingCenturyForYear()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Date\+::\+Calc\+Rolling\+Century\+For\+Year (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Calc\+Year }\end{DoxyParamCaption}) const}
-
-
-
-Calculate century for a given year.
-
-This routine calculates a century for a given year. It uses an 80/20 rolling date window to calculate the century.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Calc\+Year} & -\/ Two digit year to calculate a century for. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Century calculated for the two digit year.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDate_a38b2c5285c69ed65e94ece6c22dafde0}\label{classxb_1_1xbDate_a38b2c5285c69ed65e94ece6c22dafde0}}
-\index{xb::xbDate@{xb::xbDate}!CenturyOf@{CenturyOf}}
-\index{CenturyOf@{CenturyOf}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{CenturyOf()}{CenturyOf()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Date\+::\+Century\+Of (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
-
-
-
-Get century for date.
-
-\begin{DoxyReturn}{Returns}
-This routine returns the century from the date.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDate_a9fc29730b66cddfbb58c69992a99cc7c}\label{classxb_1_1xbDate_a9fc29730b66cddfbb58c69992a99cc7c}}
-\index{xb::xbDate@{xb::xbDate}!CharDayOf@{CharDayOf}}
-\index{CharDayOf@{CharDayOf}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{CharDayOf()}{CharDayOf()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Date\+::\+Char\+Day\+Of (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Out\+Char\+Day }\end{DoxyParamCaption})}
-
-
-
-Get the day of the week.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Out\+Char\+Day} & -\/ Output character day of week (Sun-\/\+Sat). \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-XB\+\_\+\+INVALID\+\_\+\+DATE~\newline
-XB\+\_\+\+NO\+\_\+\+ERROR
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDate_afffc84f02bd421335ff8ebe9fb3db0ac}\label{classxb_1_1xbDate_afffc84f02bd421335ff8ebe9fb3db0ac}}
-\index{xb::xbDate@{xb::xbDate}!CharMonthOf@{CharMonthOf}}
-\index{CharMonthOf@{CharMonthOf}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{CharMonthOf()}{CharMonthOf()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Date\+::\+Char\+Month\+Of (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Out\+Char\+Month }\end{DoxyParamCaption})}
-
-
-
-Get the month from the date.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Out\+Char\+Month} & -\/ Output character month. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-XB\+\_\+\+INVALID\+\_\+\+DATE~\newline
-XB\+\_\+\+NO\+\_\+\+ERROR
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDate_abb1eb4b0394e4a67aadab15779b1b8c5}\label{classxb_1_1xbDate_abb1eb4b0394e4a67aadab15779b1b8c5}}
-\index{xb::xbDate@{xb::xbDate}!CTOD@{CTOD}}
-\index{CTOD@{CTOD}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{CTOD()}{CTOD()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Date\+::\+CTOD (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Ctod\+In\+Date }\end{DoxyParamCaption})}
-
-
-
-Format MM/\+DD/\+YY date.
-
-This routine takes an MM/\+DD/\+YY format date as input and populates a date class with the appropriate YYYYMMDD data.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Ctod\+In\+Date} & -\/ MM/\+DD/\+YY formatted date as input. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-XB\+\_\+\+INVALID\+\_\+\+OPTION~\newline
-XB\+\_\+\+NO\+\_\+\+ERROR
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDate_a367f66ef0c03c1747c12a18784554ccb}\label{classxb_1_1xbDate_a367f66ef0c03c1747c12a18784554ccb}}
-\index{xb::xbDate@{xb::xbDate}!DateIsValid@{DateIsValid}}
-\index{DateIsValid@{DateIsValid}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{DateIsValid()}{DateIsValid()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Date\+::\+Date\+Is\+Valid (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Date\+In }\end{DoxyParamCaption}) const}
-
-
-
-Check a date for valid data.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Date\+In} & -\/ Date to check for valid formaat of CCYYMMDD. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-xb\+True -\/ Valid date.~\newline
-xb\+False -\/ Not a valid date.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDate_ad6417a900ce64a46f8909c0c7a2ddea2}\label{classxb_1_1xbDate_ad6417a900ce64a46f8909c0c7a2ddea2}}
-\index{xb::xbDate@{xb::xbDate}!DayOf@{DayOf}}
-\index{DayOf@{DayOf}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{DayOf()}{DayOf()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Date\+::\+Day\+Of (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Format }\end{DoxyParamCaption}) const}
-
-This routine returns the numeric day.
-\begin{DoxyParams}{Parameters}
-{\em i\+Format} & XB\+\_\+\+FMT\+\_\+\+WEEK Number of day in WEEK 0-\/6 ( Sat -\/ Fri )~\newline
- XB\+\_\+\+FMT\+\_\+\+MONTH Number of day in MONTH 1-\/31~\newline
- XB\+\_\+\+FMT\+\_\+\+YEAR Number of day in YEAR 1-\/366 \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-XB\+\_\+\+INVALID\+\_\+\+OPTION~\newline
-XB\+\_\+\+NO\+\_\+\+ERROR
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}\label{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}}
-\index{xb::xbDate@{xb::xbDate}!DisplayError@{DisplayError}}
-\index{DisplayError@{DisplayError}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{DisplayError()}{DisplayError()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Display\+Error (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Error\+Code }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Display error message on console for a given error number.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Error\+Code} & Error number to reference \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbDate_a01de44dc869f7db99f33046fc91f2c6a}\label{classxb_1_1xbDate_a01de44dc869f7db99f33046fc91f2c6a}}
-\index{xb::xbDate@{xb::xbDate}!FormatDate@{FormatDate}}
-\index{FormatDate@{FormatDate}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{FormatDate()}{FormatDate()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Date\+::\+Format\+Date (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Fmt\+In, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Out\+Fmt\+Date }\end{DoxyParamCaption})}
-
-This routine will reformat a date based on the format specifiers entered in s\+Fmt\+In. If no input format is specified, the routine will use the system default date format.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Fmt\+In} & -\/ A format specifier with the following paramaters\+:~\newline
- \begin{DoxyVerb} 1) YYDDD - A julian date format
- 2) YY or YYYY will print a 2 or 4 digit year
- 3) M,MM,MMM or MMMM
- M - one digit month if no leading zero
- MM - two digit month, contains leading zero
- MMM - Jan through Dec
- MMMM - January through December
- 4) D,DD,DDD or DDDD
- D - one digit dayif no leading zero
- DD - two digit day, contains leading zero
- DDD - Sun through Sat (or julian if YYDDD)
- DDDD - Sunday through Saturday
-\end{DoxyVerb}
- \\
-\hline
-{\em s\+Out\+Fmt\+Date} & -\/ Reformatted output date. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-XB\+\_\+\+NO\+\_\+\+ERROR ~\newline
-~\newline
- Format Examples\+:~\newline
- MM/\+DD/\+YY~\newline
- YYYY-\/\+MM-\/\+DD~\newline
- DDDDDDDDDDD MMMMMMMMMMM DD,YYYY
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}\label{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}}
-\index{xb::xbDate@{xb::xbDate}!GetDataDirectory@{GetDataDirectory}}
-\index{GetDataDirectory@{GetDataDirectory}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{GetDataDirectory()}{GetDataDirectory()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Data\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the current data directory.
-
-\begin{DoxyReturn}{Returns}
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing the current data directory where the database files are stored.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}\label{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}}
-\index{xb::xbDate@{xb::xbDate}!GetDefaultAutoCommit@{GetDefaultAutoCommit}}
-\index{GetDefaultAutoCommit@{GetDefaultAutoCommit}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{GetDefaultAutoCommit()}{GetDefaultAutoCommit()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Ssv\+::\+Get\+Default\+Auto\+Commit (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the default auto commit setting.
-
-When auto commit is enabled, the library will automatically post any updates when moving off an updated record or closing files. If auto commit is disabled, the application program will need to explicitly update the tables using using dbf-\/\texorpdfstring{$>$}{>}Put() and dbf-\/\texorpdfstring{$>$}{>}Append\+Record().
-
-\begin{DoxyReturn}{Returns}
-xb\+True if auto commit is turned on~\newline
- xb\+False is auto commit is turned off
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a6fbb9c3a550ab0b3378f9586a57791d2}\label{classxb_1_1xbSsv_a6fbb9c3a550ab0b3378f9586a57791d2}}
-\index{xb::xbDate@{xb::xbDate}!GetDefaultDateFormat@{GetDefaultDateFormat}}
-\index{GetDefaultDateFormat@{GetDefaultDateFormat}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{GetDefaultDateFormat()}{GetDefaultDateFormat()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Default\+Date\+Format (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the default date format.
-
-\begin{DoxyReturn}{Returns}
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing the default date format.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}\label{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}}
-\index{xb::xbDate@{xb::xbDate}!GetEndianType@{GetEndianType}}
-\index{GetEndianType@{GetEndianType}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{GetEndianType()}{GetEndianType()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Ssv\+::\+Get\+Endian\+Type (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the Endian type.
-
-\begin{DoxyReturn}{Returns}
-B -\/ Big endian~\newline
- L -\/ Little endian~\newline
-
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}\label{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}}
-\index{xb::xbDate@{xb::xbDate}!GetErrorMessage@{GetErrorMessage}}
-\index{GetErrorMessage@{GetErrorMessage}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{GetErrorMessage()}{GetErrorMessage()}}
-{\footnotesize\ttfamily const char $\ast$ xb\+::xb\+Ssv\+::\+Get\+Error\+Message (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Error\+Code }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get an error message.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Error\+Code} & Error\+Code is the error number of description to be returned. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Returns a pointer to a string containing a text description for the error code.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}\label{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}}
-\index{xb::xbDate@{xb::xbDate}!GetHomeDir@{GetHomeDir}}
-\index{GetHomeDir@{GetHomeDir}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{GetHomeDir()}{GetHomeDir()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Get\+Home\+Dir (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Home\+Dir\+Out }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get home directory.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Home\+Dir\+Out} & -\/ Output home directory for current user. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-void
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}\label{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}}
-\index{xb::xbDate@{xb::xbDate}!GetLogDirectory@{GetLogDirectory}}
-\index{GetLogDirectory@{GetLogDirectory}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{GetLogDirectory()}{GetLogDirectory()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Log\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}\label{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}}
-\index{xb::xbDate@{xb::xbDate}!GetLogFileName@{GetLogFileName}}
-\index{GetLogFileName@{GetLogFileName}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{GetLogFileName()}{GetLogFileName()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Log\+File\+Name (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}\label{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}}
-\index{xb::xbDate@{xb::xbDate}!GetMultiUser@{GetMultiUser}}
-\index{GetMultiUser@{GetMultiUser}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{GetMultiUser()}{GetMultiUser()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Ssv\+::\+Get\+Multi\+User (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the multi user setting.
-
-\begin{DoxyReturn}{Returns}
-xb\+True -\/ Multi user mode turned on.~\newline
- xb\+False -\/ Multi user mode turned off.~\newline
-
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDate_a5f8051c31b29244265e8f26ac3547b9b}\label{classxb_1_1xbDate_a5f8051c31b29244265e8f26ac3547b9b}}
-\index{xb::xbDate@{xb::xbDate}!IsLeapYear@{IsLeapYear}}
-\index{IsLeapYear@{IsLeapYear}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{IsLeapYear()}{IsLeapYear()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Date\+::\+Is\+Leap\+Year (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
-
-
-
-Determine if date is a leap year.
-
-\begin{DoxyReturn}{Returns}
-xb\+True -\/ Is leapyear.~\newline
- xb\+False -\/ Not a leap year.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDate_af2bd33a72448e2c5ee00d8b711dc5d95}\label{classxb_1_1xbDate_af2bd33a72448e2c5ee00d8b711dc5d95}}
-\index{xb::xbDate@{xb::xbDate}!IsLeapYear@{IsLeapYear}}
-\index{IsLeapYear@{IsLeapYear}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{IsLeapYear()}{IsLeapYear()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Date\+::\+Is\+Leap\+Year (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Year }\end{DoxyParamCaption}) const}
-
-
-
-Determine if date is a leap year.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Year} & -\/ Year to check for leap year status. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-xb\+True -\/ Is leapyear.~\newline
- xb\+False -\/ Not a leap year.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDate_a1ee3377d4ead9d31099eee539d9b13a7}\label{classxb_1_1xbDate_a1ee3377d4ead9d31099eee539d9b13a7}}
-\index{xb::xbDate@{xb::xbDate}!JulianDays@{JulianDays}}
-\index{JulianDays@{JulianDays}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{JulianDays()}{JulianDays()}}
-{\footnotesize\ttfamily xb\+Int32 xb\+::xb\+Date\+::\+Julian\+Days (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
-
-
-
-Calculate julian days for a given date.
-
-\begin{DoxyReturn}{Returns}
-The number of days since 01/01/0001 + JUL\+\_\+\+OFFSET.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDate_a9d28b2a46d8aaa284b92f44eeb96b2ff}\label{classxb_1_1xbDate_a9d28b2a46d8aaa284b92f44eeb96b2ff}}
-\index{xb::xbDate@{xb::xbDate}!JulToDate8@{JulToDate8}}
-\index{JulToDate8@{JulToDate8}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{JulToDate8()}{JulToDate8()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Date\+::\+Jul\+To\+Date8 (\begin{DoxyParamCaption}\item[{xb\+Int32}]{l\+Jul\+Days }\end{DoxyParamCaption})}
-
-
-
-Convert the number of julian days to gregorian date.
-
-
-\begin{DoxyParams}{Parameters}
-{\em l\+Jul\+Days} & -\/ Julian days. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-XB\+\_\+\+NO\+\_\+\+ERROR
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDate_a15847866bb7642aa42bc254e0cf2038a}\label{classxb_1_1xbDate_a15847866bb7642aa42bc254e0cf2038a}}
-\index{xb::xbDate@{xb::xbDate}!LastDayOfMonth@{LastDayOfMonth}}
-\index{LastDayOfMonth@{LastDayOfMonth}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{LastDayOfMonth()}{LastDayOfMonth()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Date\+::\+Last\+Day\+Of\+Month (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
-
-
-Set the date to the last day of month for a given date.
-
-This routine sets the last date of the month. \begin{DoxyReturn}{Returns}
-XB\+\_\+\+NO\+\_\+\+ERROR
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDate_a08bd84c67e1119d8c5c1748cd89d092e}\label{classxb_1_1xbDate_a08bd84c67e1119d8c5c1748cd89d092e}}
-\index{xb::xbDate@{xb::xbDate}!MonthOf@{MonthOf}}
-\index{MonthOf@{MonthOf}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{MonthOf()}{MonthOf()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Date\+::\+Month\+Of (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
-
-
-
-Return the month for the date.
-
-\begin{DoxyReturn}{Returns}
-The month of the date.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDate_ac3aaf8997fc0c36676085e7741f33a8a}\label{classxb_1_1xbDate_ac3aaf8997fc0c36676085e7741f33a8a}}
-\index{xb::xbDate@{xb::xbDate}!operator"!=@{operator"!=}}
-\index{operator"!=@{operator"!=}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{operator"!=()}{operator!=()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Date\+::operator!= (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&}]{dt }\end{DoxyParamCaption}) const}
-
-
-
-operator !=
-
-This routine compares two dates for inequality.
-\begin{DoxyParams}{Parameters}
-{\em dt} & -\/ Date to compare. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-xb\+True -\/ Dates don\textquotesingle{}t match.~\newline
-xb\+False -\/ Dates match.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDate_ad09609bf78cf038886a4f9cd19423f9c}\label{classxb_1_1xbDate_ad09609bf78cf038886a4f9cd19423f9c}}
-\index{xb::xbDate@{xb::xbDate}!operator+@{operator+}}
-\index{operator+@{operator+}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{operator+()}{operator+()}}
-{\footnotesize\ttfamily const char $\ast$ xb\+::xb\+Date\+::operator+ (\begin{DoxyParamCaption}\item[{xb\+Int32}]{l\+Count }\end{DoxyParamCaption})}
-
-
-
-operator +
-
-This routine adds additional days to a date field.
-\begin{DoxyParams}{Parameters}
-{\em l\+Count} & -\/ Number of days to add. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-New date in CCYYMMDD format.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDate_a1c7d9e3718c43df18b21646072c8605e}\label{classxb_1_1xbDate_a1c7d9e3718c43df18b21646072c8605e}}
-\index{xb::xbDate@{xb::xbDate}!operator++@{operator++}}
-\index{operator++@{operator++}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{operator++()}{operator++()}}
-{\footnotesize\ttfamily void xb\+::xb\+Date\+::operator++ (\begin{DoxyParamCaption}\item[{xb\+Int32}]{i }\end{DoxyParamCaption})}
-
-
-
-operator ++
-
-This routine adds one day to the date field. \mbox{\Hypertarget{classxb_1_1xbDate_a947ba156d04fe063aaa4c9964ae5d163}\label{classxb_1_1xbDate_a947ba156d04fe063aaa4c9964ae5d163}}
-\index{xb::xbDate@{xb::xbDate}!operator+=@{operator+=}}
-\index{operator+=@{operator+=}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{operator+=()}{operator+=()}}
-{\footnotesize\ttfamily void xb\+::xb\+Date\+::operator+= (\begin{DoxyParamCaption}\item[{xb\+Int32}]{l\+Days }\end{DoxyParamCaption})}
-
-
-
-operator +=
-
-This routine adds l\+Days to the date
-\begin{DoxyParams}{Parameters}
-{\em l\+Days} & -\/ Number of days to add to the date. \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbDate_a3f3a8802c96098c85aa8d0e19717a979}\label{classxb_1_1xbDate_a3f3a8802c96098c85aa8d0e19717a979}}
-\index{xb::xbDate@{xb::xbDate}!operator-\/@{operator-\/}}
-\index{operator-\/@{operator-\/}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{operator-\/()}{operator-()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int32 xb\+::xb\+Date\+::operator-\/ (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&}]{dt }\end{DoxyParamCaption}) const}
-
-
-
-operator -\/
-
-This routine subtracts one date from another date returning the difference.
-\begin{DoxyParams}{Parameters}
-{\em dt} & -\/ Date to subtract. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Number of days
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDate_a73ff5c037046ac0a0bb7d73f74e25cbb}\label{classxb_1_1xbDate_a73ff5c037046ac0a0bb7d73f74e25cbb}}
-\index{xb::xbDate@{xb::xbDate}!operator-\/@{operator-\/}}
-\index{operator-\/@{operator-\/}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{operator-\/()}{operator-()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily const char $\ast$ xb\+::xb\+Date\+::operator-\/ (\begin{DoxyParamCaption}\item[{xb\+Int32}]{l\+Count }\end{DoxyParamCaption})}
-
-
-
-operator -\/
-
-This routine subtracts days from a date field.
-\begin{DoxyParams}{Parameters}
-{\em l\+Count} & -\/ Number of days to subtract. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-New date in CCYYMMDD format.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDate_ae2b33dfee60d324916d833b2098b5a6b}\label{classxb_1_1xbDate_ae2b33dfee60d324916d833b2098b5a6b}}
-\index{xb::xbDate@{xb::xbDate}!operator-\/-\/@{operator-\/-\/}}
-\index{operator-\/-\/@{operator-\/-\/}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{operator-\/-\/()}{operator--()}}
-{\footnotesize\ttfamily void xb\+::xb\+Date\+::operator-\/-\/ (\begin{DoxyParamCaption}\item[{xb\+Int32}]{i }\end{DoxyParamCaption})}
-
-
-
-operator --
-
-This routine subtracts one day from the date field. \mbox{\Hypertarget{classxb_1_1xbDate_a4a8f207d759540114373f5e9d6d375f7}\label{classxb_1_1xbDate_a4a8f207d759540114373f5e9d6d375f7}}
-\index{xb::xbDate@{xb::xbDate}!operator-\/=@{operator-\/=}}
-\index{operator-\/=@{operator-\/=}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{operator-\/=()}{operator-=()}}
-{\footnotesize\ttfamily void xb\+::xb\+Date\+::operator-\/= (\begin{DoxyParamCaption}\item[{xb\+Int32}]{l\+Days }\end{DoxyParamCaption})}
-
-
-
-operator -\/=
-
-This routine subtracts l\+Days from the date.
-\begin{DoxyParams}{Parameters}
-{\em l\+Days} & -\/ Number of days to subtract from the date. \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbDate_a11f09d97ed527e7ef00ba6f17b9fb02c}\label{classxb_1_1xbDate_a11f09d97ed527e7ef00ba6f17b9fb02c}}
-\index{xb::xbDate@{xb::xbDate}!operator$<$@{operator$<$}}
-\index{operator$<$@{operator$<$}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{operator$<$()}{operator<()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Date\+::operator$<$ (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&}]{dt }\end{DoxyParamCaption}) const}
-
-
-
-operator \texorpdfstring{$<$}{<}
-
-This routine compares two dates
-\begin{DoxyParams}{Parameters}
-{\em dt} & -\/ Date to compare. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-xb\+True -\/ Left date is less than right date.~\newline
- xb\+False -\/ Left date is not less than right date.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDate_a6d8fa4df4664f3fd8d4cc15e77f6d046}\label{classxb_1_1xbDate_a6d8fa4df4664f3fd8d4cc15e77f6d046}}
-\index{xb::xbDate@{xb::xbDate}!operator$<$=@{operator$<$=}}
-\index{operator$<$=@{operator$<$=}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{operator$<$=()}{operator<=()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Date\+::operator$<$= (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&}]{dt }\end{DoxyParamCaption}) const}
-
-
-
-operator \texorpdfstring{$<$}{<}=
-
-This routine compares two dates
-\begin{DoxyParams}{Parameters}
-{\em dt} & -\/ Date to compare. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-xb\+True -\/ Left date is less than or equal to right date.~\newline
- xb\+False -\/ Left date is not less than or equal to right date.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDate_a2e33ad9415c32e820e08fd8084198690}\label{classxb_1_1xbDate_a2e33ad9415c32e820e08fd8084198690}}
-\index{xb::xbDate@{xb::xbDate}!operator=@{operator=}}
-\index{operator=@{operator=}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{operator=()}{operator=()}}
-{\footnotesize\ttfamily void xb\+::xb\+Date\+::operator= (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&}]{dt }\end{DoxyParamCaption})}
-
-
-
-Set operator=.
-
-
-\begin{DoxyParams}{Parameters}
-{\em dt} & -\/ Date value for set operation. \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbDate_aaaf98c1a672066021895f0953b6e94d0}\label{classxb_1_1xbDate_aaaf98c1a672066021895f0953b6e94d0}}
-\index{xb::xbDate@{xb::xbDate}!operator==@{operator==}}
-\index{operator==@{operator==}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{operator==()}{operator==()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Date\+::operator== (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&}]{dt }\end{DoxyParamCaption}) const}
-
-
-
-operator ==
-
-This routine compares two dates for equality.
-\begin{DoxyParams}{Parameters}
-{\em dt} & -\/ Date to compare. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-xb\+True -\/ Dates match.~\newline
-xb\+False -\/ Dates don\textquotesingle{}t match.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDate_a744031c4031d6ec4595d34acbd1c5860}\label{classxb_1_1xbDate_a744031c4031d6ec4595d34acbd1c5860}}
-\index{xb::xbDate@{xb::xbDate}!operator$>$@{operator$>$}}
-\index{operator$>$@{operator$>$}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{operator$>$()}{operator>()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Date\+::operator$>$ (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&}]{dt }\end{DoxyParamCaption}) const}
-
-
-
-\texorpdfstring{$>$}{>}
-
-This routine compares two dates
-\begin{DoxyParams}{Parameters}
-{\em dt} & -\/ Date to compare. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-xb\+True -\/ Left date is greater than right date.~\newline
- xb\+False -\/ Left date is not greater than right date.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDate_a1d81959ea55440588068ea7f82617c99}\label{classxb_1_1xbDate_a1d81959ea55440588068ea7f82617c99}}
-\index{xb::xbDate@{xb::xbDate}!operator$>$=@{operator$>$=}}
-\index{operator$>$=@{operator$>$=}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{operator$>$=()}{operator>=()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Date\+::operator$>$= (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&}]{dt }\end{DoxyParamCaption}) const}
-
-
-
-operator \texorpdfstring{$>$}{>}=
-
-This routine compares two dates
-\begin{DoxyParams}{Parameters}
-{\em dt} & -\/ Date to compare. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-xb\+True -\/ Left date is greater than or equal to right date.~\newline
- xb\+False -\/ Left date is not greater than or equal to right date.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDate_a4b0cde152b5de0f7d26608d1445110b6}\label{classxb_1_1xbDate_a4b0cde152b5de0f7d26608d1445110b6}}
-\index{xb::xbDate@{xb::xbDate}!Set@{Set}}
-\index{Set@{Set}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{Set()}{Set()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Date\+::\+Set (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Date\+In }\end{DoxyParamCaption})}
-
-
-
-Set the date.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Date\+In} & -\/ Input date. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATE
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}\label{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}}
-\index{xb::xbDate@{xb::xbDate}!SetDataDirectory@{SetDataDirectory}}
-\index{SetDataDirectory@{SetDataDirectory}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{SetDataDirectory()}{SetDataDirectory()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Data\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Data\+Directory }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Set the data directory.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Data\+Directory} & Set the data direcroty. \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}\label{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}}
-\index{xb::xbDate@{xb::xbDate}!SetDefaultAutoCommit@{SetDefaultAutoCommit}}
-\index{SetDefaultAutoCommit@{SetDefaultAutoCommit}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{SetDefaultAutoCommit()}{SetDefaultAutoCommit()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Default\+Auto\+Commit (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}}}]{b\+Default\+Auto\+Commit }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Set the default auto commit.
-
-Disabling auto commit requires the application execute explicit updates using dbf-\/\texorpdfstring{$>$}{>}Put() and dbf-\/\texorpdfstring{$>$}{>}Append\+Record(). With auto commit on, the library posts updates automatically when moving off the current record or closing a file.
-
-
-\begin{DoxyParams}{Parameters}
-{\em b\+Default\+Auto\+Commit} & xb\+True -\/ Enable default auto commit.~\newline
- xb\+False -\/ Disable default auto commit.~\newline
- \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}\label{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}}
-\index{xb::xbDate@{xb::xbDate}!SetDefaultDateFormat@{SetDefaultDateFormat}}
-\index{SetDefaultDateFormat@{SetDefaultDateFormat}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{SetDefaultDateFormat()}{SetDefaultDateFormat()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Default\+Date\+Format (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Default\+Date\+Format }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Set the default date format.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Default\+Date\+Format} & Set the default date format. \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a904ec348fd029d4a76e72b8fde636108}\label{classxb_1_1xbSsv_a904ec348fd029d4a76e72b8fde636108}}
-\index{xb::xbDate@{xb::xbDate}!SetEndianType@{SetEndianType}}
-\index{SetEndianType@{SetEndianType}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{SetEndianType()}{SetEndianType()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Endian\+Type (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [protected]}, {\ttfamily [inherited]}}
-
-
-
-Set the endian type.
-
-This routine determines the Endian-\/ness at run time instead of compile time as some processers (ie; Sparc,ARM) can be switched either way. This routine is called automatically by the library at startup and does not need to be called in an application program. \mbox{\Hypertarget{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}\label{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}}
-\index{xb::xbDate@{xb::xbDate}!SetLogDirectory@{SetLogDirectory}}
-\index{SetLogDirectory@{SetLogDirectory}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{SetLogDirectory()}{SetLogDirectory()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Log\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Log\+Directory }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}\label{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}}
-\index{xb::xbDate@{xb::xbDate}!SetMultiUser@{SetMultiUser}}
-\index{SetMultiUser@{SetMultiUser}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{SetMultiUser()}{SetMultiUser()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Multi\+User (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}}}]{b\+Multi\+User }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the multi user setting.
-
-
-\begin{DoxyParams}{Parameters}
-{\em b\+Multi\+User} & xb\+True -\/ Turn on Multi user mode.~\newline
- xb\+False -\/ Turn off Multi user mode.~\newline
- \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbDate_ab43a5d8d929767c0ffdd722972bb8cc0}\label{classxb_1_1xbDate_ab43a5d8d929767c0ffdd722972bb8cc0}}
-\index{xb::xbDate@{xb::xbDate}!Str@{Str}}
-\index{Str@{Str}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{Str()}{Str()}}
-{\footnotesize\ttfamily const char $\ast$ xb\+::xb\+Date\+::\+Str (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
-
-
-
-Return the date value.
-
-\begin{DoxyReturn}{Returns}
-char ptr to date value.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDate_a40ba54a58d64cf56266f020f91584192}\label{classxb_1_1xbDate_a40ba54a58d64cf56266f020f91584192}}
-\index{xb::xbDate@{xb::xbDate}!Sysdate@{Sysdate}}
-\index{Sysdate@{Sysdate}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{Sysdate()}{Sysdate()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Date\+::\+Sysdate (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
-
-
-Set the date equal to the system date.
-
-\begin{DoxyReturn}{Returns}
-XB\+\_\+\+NO\+\_\+\+ERROR
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDate_a31057dfaa36389a16e40e3db82c46262}\label{classxb_1_1xbDate_a31057dfaa36389a16e40e3db82c46262}}
-\index{xb::xbDate@{xb::xbDate}!YearOf@{YearOf}}
-\index{YearOf@{YearOf}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{YearOf()}{YearOf()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Date\+::\+Year\+Of (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
-
-
-
-Returns the year of the date.
-
-\begin{DoxyReturn}{Returns}
-The year of the date.
-\end{DoxyReturn}
-
-
-\doxysubsection{Field Documentation}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a6219f1b5e24ea12fe158cd5aea56988e}\label{classxb_1_1xbSsv_a6219f1b5e24ea12fe158cd5aea56988e}}
-\index{xb::xbDate@{xb::xbDate}!ErrorCodeText@{ErrorCodeText}}
-\index{ErrorCodeText@{ErrorCodeText}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{ErrorCodeText}{ErrorCodeText}}
-{\footnotesize\ttfamily const char$\ast$ xb\+::xb\+Ssv\+::\+Error\+Code\+Text\mbox{[}$\,$\mbox{]}\hspace{0.3cm}{\ttfamily [static]}, {\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}\label{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}}
-\index{xb::xbDate@{xb::xbDate}!iEndianType@{iEndianType}}
-\index{iEndianType@{iEndianType}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{iEndianType}{iEndianType}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Ssv\+::i\+Endian\+Type = 0\hspace{0.3cm}{\ttfamily [static]}, {\ttfamily [protected]}, {\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}\label{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}}
-\index{xb::xbDate@{xb::xbDate}!sNullString@{sNullString}}
-\index{sNullString@{sNullString}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{sNullString}{sNullString}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} xb\+::xb\+Ssv\+::s\+Null\+String = \char`\"{}\char`\"{}\hspace{0.3cm}{\ttfamily [static]}, {\ttfamily [protected]}, {\ttfamily [inherited]}}
-
-
-
-The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
-\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbdate_8h}{xbdate.\+h}}\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbdate_8cpp}{xbdate.\+cpp}}\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/classxb_1_1xbDbf.pdf b/docs/doxygen/latex/classxb_1_1xbDbf.pdf
deleted file mode 100644
index 589c18c..0000000
--- a/docs/doxygen/latex/classxb_1_1xbDbf.pdf
+++ /dev/null
Binary files differ
diff --git a/docs/doxygen/latex/classxb_1_1xbDbf.tex b/docs/doxygen/latex/classxb_1_1xbDbf.tex
deleted file mode 100644
index 0d95c95..0000000
--- a/docs/doxygen/latex/classxb_1_1xbDbf.tex
+++ /dev/null
@@ -1,4404 +0,0 @@
-\hypertarget{classxb_1_1xbDbf}{}\doxysection{xb\+::xb\+Dbf Class Reference}
-\label{classxb_1_1xbDbf}\index{xb::xbDbf@{xb::xbDbf}}
-
-
-Base class for handling dbf files/tables.
-
-
-
-
-{\ttfamily \#include $<$xbdbf.\+h$>$}
-
-Inheritance diagram for xb\+::xb\+Dbf\+:\begin{figure}[H]
-\begin{center}
-\leavevmode
-\includegraphics[height=3.000000cm]{classxb_1_1xbDbf}
-\end{center}
-\end{figure}
-\doxysubsection*{Public Member Functions}
-\begin{DoxyCompactItemize}
-\item
-\mbox{\hyperlink{classxb_1_1xbDbf_a84a75f80bc0e9b8a22b728767949c204}{xb\+Dbf}} (\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$x)
-\begin{DoxyCompactList}\small\item\em Constructor. \end{DoxyCompactList}\item
-virtual \mbox{\hyperlink{classxb_1_1xbDbf_a7eb87521fba8a939c613056d9918d880}{$\sim$xb\+Dbf}} ()
-\begin{DoxyCompactList}\small\item\em Destructor. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a4edcf31390fbdc8c3558004770fd9f2f}{Abort}} ()
-\begin{DoxyCompactList}\small\item\em Abort any uncommited changes for the current record buffer. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a5b412dd796241673eb1aa2c93513d69b}{Append\+Record}} ()
-\begin{DoxyCompactList}\small\item\em Append the current record to the data file. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a78da5a3d2011a3f2e7618cbdd3ba02d6}{Blank\+Record}} ()
-\begin{DoxyCompactList}\small\item\em Blank the record buffer. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_abd69532c885ab72bcf3fb5066b318f4f}{Commit}} ()
-\begin{DoxyCompactList}\small\item\em Commit updates to disk. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ad68d73113e54e1b5f326e90f45e9989d}{Close}} ()
-\begin{DoxyCompactList}\small\item\em Close DBF file/table. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a829c615a130a1fdf609d93438d8a6264}{Copy\+Dbf\+Structure}} (\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$d\+New\+Table, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Table\+Name, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Table\+Alias, xb\+Int16 i\+Overlay, xb\+Int16 i\+Share\+Mode)
-\begin{DoxyCompactList}\small\item\em Copy table (dbf) file structure. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a73e41bfe679dd06ab16c436652df93f1}{Create\+Table}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Table\+Name, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&\mbox{\hyperlink{classxb_1_1xbDbf_a73f9c792d0a769e2e604c1855245a276}{s\+Alias}}, \mbox{\hyperlink{structxb_1_1xbSchema}{xb\+Schema}} $\ast$p\+Schema, xb\+Int16 i\+Overlay, xb\+Int16 i\+Share\+Mode)=0
-\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a4085ed4f049d976124d8edc3d3c56397}{Delete\+Table}} ()
-\begin{DoxyCompactList}\small\item\em Delete a table. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a01c26b67e312be1e674b3da710e031b9}{Delete\+All}} (xb\+Int16 i\+Option)
-\begin{DoxyCompactList}\small\item\em Delete or undelete all records in a dbf file (table). \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a3067fdfa3a7a5c15651f6e89d1102176}{Delete\+All\+Records}} ()
-\begin{DoxyCompactList}\small\item\em Delete all records. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_acd8c10579229f3a2e2c5fdb7fcef90db}{Delete\+Record}} ()
-\begin{DoxyCompactList}\small\item\em Delete the current record. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a309b5b1fb6a5c048c4bfb404d011ac55}{Dump\+Header}} (xb\+Int16 i\+Option) const
-\begin{DoxyCompactList}\small\item\em Dump dbf file header. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_aba30399f15885a07f87f904c0d0656fa}{Dump\+Record}} (xb\+UInt32 ul\+Rec\+No, xb\+Int16 i\+Output\+Dest=0, xb\+Int16 i\+Output\+Fmt=0)
-\begin{DoxyCompactList}\small\item\em Dump record. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_abb9e20c5efacd4fea80f1515abbc6b55}{Get\+Auto\+Commit}} () const
-\begin{DoxyCompactList}\small\item\em Get auto commit setting. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ae0c00226fd2ea7a67f101e795467ed68}{Get\+Auto\+Commit}} (xb\+Int16 i\+Option) const
-\begin{DoxyCompactList}\small\item\em Get auto commit setting. \end{DoxyCompactList}\item
-virtual \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbDbf_ad0827a43c025c1184ffebab74cc9e779}{Get\+Bof}} ()
-\begin{DoxyCompactList}\small\item\em Get a pointer to the current index object. \end{DoxyCompactList}\item
-virtual xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbDbf_a643a80a3792a52760c8e09ba18719503}{Get\+Cur\+Rec\+No}} () const
-\begin{DoxyCompactList}\small\item\em Return the current record number. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ac1110d867ba297a52c8b0e83e88f05e6}{Get\+Dbf\+Status}} () const
-\begin{DoxyCompactList}\small\item\em Return the current dbf status. \end{DoxyCompactList}\item
-virtual \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbDbf_a256dc1f98626fa77da24e91a38ab5b4d}{Get\+Eof}} ()
-\begin{DoxyCompactList}\small\item\em Return true if dbf file empty or positioned to the last record. \end{DoxyCompactList}\item
-virtual xb\+Int32 \mbox{\hyperlink{classxb_1_1xbDbf_add27d8ef555a13b336b8c804165dc15e}{Get\+Field\+Cnt}} () const
-\begin{DoxyCompactList}\small\item\em Return the number of fields in the table. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a6fc5b8a3e2f177d5ceaf9d975cbb5226}{Get\+First\+Record}} ()
-\begin{DoxyCompactList}\small\item\em Get the first record. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_acb78991e8435edd36318c653cb977c1a}{Get\+First\+Record}} (xb\+Int16 i\+Option)
-\begin{DoxyCompactList}\small\item\em Get the first record. \end{DoxyCompactList}\item
-virtual xb\+UInt16 \mbox{\hyperlink{classxb_1_1xbDbf_ad56be2756b7a9f8318d9ba5cf215dafb}{Get\+Header\+Len}} () const
-\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a49e667f9c8ee55c36444702663fc5964}{Get\+Last\+Record}} ()
-\begin{DoxyCompactList}\small\item\em Get the last record. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a8ccfa2291417412b6894940d1b92f9a6}{Get\+Last\+Record}} (xb\+Int16 i\+Option)
-\begin{DoxyCompactList}\small\item\em Get the last record. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ab896fe3b734f556de578d30f92b18fe2}{Get\+Next\+Record}} ()
-\begin{DoxyCompactList}\small\item\em Get the next record. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a3191428a7a92d9107d8d42448884f2ac}{Get\+Next\+Record}} (xb\+Int16 i\+Option)
-\begin{DoxyCompactList}\small\item\em Get the next record. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a18fdcb4ab15b36cd47fa6f6f7a540d1a}{Get\+Next\+Record}} (xb\+Int16 i\+Option, xb\+UInt32 ul\+Start\+Rec)
-\begin{DoxyCompactList}\small\item\em Get the next record. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ab3d248e5221b4f0809897cd43af17a1e}{Get\+Prev\+Record}} ()
-\begin{DoxyCompactList}\small\item\em Get the previous record. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a7eadc7b08d73003802b90584f7b33387}{Get\+Prev\+Record}} (xb\+Int16 i\+Option)
-\begin{DoxyCompactList}\small\item\em Get the previous record. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a26fba086b07caeab95066bf1c8d25161}{Get\+Record}} (xb\+UInt32 ul\+Rec\+No)
-\begin{DoxyCompactList}\small\item\em Get record for specified record number. \end{DoxyCompactList}\item
-virtual xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbDbf_a0aaa06d6028e75efc6b5131f7356ecce}{Get\+Record\+Count}} ()
-\begin{DoxyCompactList}\small\item\em Get the current number of records in the dbf data file. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ac196ad55335e1f4789d698748434dc89}{Get\+Record\+Cnt}} (xb\+UInt32 \&ul\+Rec\+Cnt)
-\begin{DoxyCompactList}\small\item\em Get the current number of records in the dbf data file. \end{DoxyCompactList}\item
-virtual char $\ast$ \mbox{\hyperlink{classxb_1_1xbDbf_aa3e38c4057d726a28a27d07a1610d124}{Get\+Record\+Buf}} (xb\+Int16 i\+Opt=0) const
-\begin{DoxyCompactList}\small\item\em Get pointer to record buffer. \end{DoxyCompactList}\item
-virtual xb\+UInt16 \mbox{\hyperlink{classxb_1_1xbDbf_ab50d76c6e29e81e347a6feb04c2f62bb}{Get\+Record\+Len}} () const
-\begin{DoxyCompactList}\small\item\em Get the dbf record length. \end{DoxyCompactList}\item
-virtual const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbDbf_a27758a325c097f204247908b65ba7fbd}{Get\+Tbl\+Alias}} () const
-\begin{DoxyCompactList}\small\item\em Get the table alias. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a49212a9eb17f7fa9f303e08d5fc50fc6}{Get\+Version}} () const =0
-\item
-virtual \mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$ \mbox{\hyperlink{classxb_1_1xbDbf_ab21ec23c076b0c9affdc0f6672bd133f}{Get\+Xbase\+Ptr}} () const
-\begin{DoxyCompactList}\small\item\em Get the pointer to the xb\+Xbase structure,. \end{DoxyCompactList}\item
-virtual \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbDbf_a013dc8c51fc1aa988de39cf3da6da950}{Memo\+Fields\+Exist}} () const
-\begin{DoxyCompactList}\small\item\em Check for existence of any memo fields. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a69824d7bafc3f5a15bf7d09f2f511768}{Open}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Table\+Name)
-\begin{DoxyCompactList}\small\item\em Open a table/dbf file. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ae388c5e02adc86e6e9988e697e061610}{Open}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Table\+Name, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&\mbox{\hyperlink{classxb_1_1xbDbf_a73f9c792d0a769e2e604c1855245a276}{s\+Alias}})
-\begin{DoxyCompactList}\small\item\em Open a table/dbf file. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a4d018cbf44d8d8b2145c9acab02c8adf}{Open}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Table\+Name, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&\mbox{\hyperlink{classxb_1_1xbDbf_a73f9c792d0a769e2e604c1855245a276}{s\+Alias}}, xb\+Int16 i\+Open\+Mode, xb\+Int16 i\+Share\+Mode)=0
-\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a8a52bf3ef2123c0d17e6b1f67bf0dc55}{Pack}} ()
-\begin{DoxyCompactList}\small\item\em Pack dbf file. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a93bb14ad0451355bfa3379128120988a}{Pack}} (xb\+UInt32 \&ul\+Deleted\+Rec\+Cnt)
-\begin{DoxyCompactList}\small\item\em Pack dbf file. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a3c36a5ffbc7067a1abbcb526dd3b981d}{Put\+Record}} ()
-\begin{DoxyCompactList}\small\item\em Write the current record to disk. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_aacbc7bac3ea0c502ee75b838f4f0fcbf}{Put\+Record}} (xb\+UInt32 ul\+Rec\+No)
-\begin{DoxyCompactList}\small\item\em Write record to disk. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a060541addb5bb1f0fe12959ed6f66fb9}{Read\+Header}} (xb\+Int16 i\+File\+Position\+Option, xb\+Int16 i\+Read\+Option)
-\begin{DoxyCompactList}\small\item\em Read dbf file header information. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a94d7d626ba691fd4b740c034673e6fc6}{Record\+Deleted}} (xb\+Int16 i\+Opt=0) const
-\begin{DoxyCompactList}\small\item\em Return record deletion status. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_aeeeb2eb5fabcd0f91d457df07b0e0708}{Rename}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} s\+New\+Name)=0
-\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a4cf7f0d423164f3cf074ae41f96f4e90}{Set\+Auto\+Commit}} (xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ab506450954bc86e7bf1d7c4efe681f43}{i\+Auto\+Commit}})
-\begin{DoxyCompactList}\small\item\em Set auto commit. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ae94cb1bf9f75184f39d9e1a80ab49d4a}{Undelete\+All\+Records}} ()
-\begin{DoxyCompactList}\small\item\em Set auto lock. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a255681976a04fc722538bb630507b3a0}{Undelete\+Record}} ()
-\begin{DoxyCompactList}\small\item\em Undelete one record. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a8ed0693b10b95aaa4e46037758d160ed}{Zap}} ()
-\begin{DoxyCompactList}\small\item\em Zap (remove) everything from the file,. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ad245a26eb8b79610c9ae7bab19e05513}{Get\+Field}} (xb\+Int16 i\+Field\+No, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Value, xb\+Int16 i\+Rec\+Buf\+Sw) const
-\begin{DoxyCompactList}\small\item\em Get field data for field number. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ac81f078f3c932f0da60ad1fbdd848d3e}{Get\+Field}} (xb\+Int16 i\+Field\+No, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Value) const
-\begin{DoxyCompactList}\small\item\em Get field data for field number. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a9a0fcf7e2040ab483e3807927833cb26}{Get\+Field}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Value) const
-\begin{DoxyCompactList}\small\item\em Get \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} field for field name. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_abcb4defad2e1b6e67f63cc60737ad840}{Get\+Field\+Decimal}} (xb\+Int16 i\+Field\+No, xb\+Int16 \&i\+Field\+Decimal) const
-\begin{DoxyCompactList}\small\item\em Get decimal for field number. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a607f774fcd6dc0b9913d7a7801b60db2}{Get\+Field\+Decimal}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name, xb\+Int16 \&i\+Field\+Decimal) const
-\begin{DoxyCompactList}\small\item\em Get decimal for field name. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_adda4302b58cc6109b048f19d9b68bbd4}{Get\+Field\+Len}} (xb\+Int16 i\+Field\+No, xb\+Int16 \&i\+Field\+Len) const
-\begin{DoxyCompactList}\small\item\em Get field length for field number. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_acf06dbccdba1a4bcd90fa0bea6cca59b}{Get\+Field\+Len}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name, xb\+Int16 \&i\+Field\+Len) const
-\begin{DoxyCompactList}\small\item\em Get field length for field name. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a5e3e4368bfba1724c016b8859023e34c}{Get\+Field\+Name}} (xb\+Int16 i\+Field\+No, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name) const
-\begin{DoxyCompactList}\small\item\em Returns the name of the specified field. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_aed9113b5095c6df1b9c854cbd0d8047b}{Get\+Field\+No}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name, xb\+Int16 \&i\+Field\+No) const
-\begin{DoxyCompactList}\small\item\em Get the field number for name. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_aad9029e63909aeb77d8473256d88bea8}{Get\+Field\+No}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name) const
-\begin{DoxyCompactList}\small\item\em Get field ID number for a given field name. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a5143973e4f165651152aa13c8fd45f84}{Get\+Field\+Type}} (xb\+Int16 i\+Field\+No, char \&c\+Field\+Type) const
-\begin{DoxyCompactList}\small\item\em Get field type for field number. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a181db879f1a75f93a34c03513a0b2fea}{Get\+Field\+Type}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name, char \&c\+Field\+Type) const
-\begin{DoxyCompactList}\small\item\em Get field type for field name. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a7862215dd2f83a1c488e539cd1f9aec0}{Put\+Field}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Data)
-\begin{DoxyCompactList}\small\item\em Put field for field name. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a142b0c0dc904917f3c68c5572c1237b5}{Put\+Field}} (xb\+Int16 i\+Field\+No, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Data)
-\begin{DoxyCompactList}\small\item\em Put field for field number. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ab39ac4269ac63bc7ea4f638733bb17f0}{Put\+Logical\+Field}} (xb\+Int16 i\+Field\+No, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Data)
-\begin{DoxyCompactList}\small\item\em Put logical field for field number. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a507e400ca6526a9e0391cf06dd6a014e}{Put\+Logical\+Field}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Data)
-\begin{DoxyCompactList}\small\item\em Put logical field for field name. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a3254f091fc4a1404abed3dd2bcdd6ce6}{Get\+Logical\+Field}} (xb\+Int16 i\+Field\+No, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Data) const
-\begin{DoxyCompactList}\small\item\em Get logical field for field number. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a9cd6819bfd932ff8507e54d9cb9a624e}{Get\+Logical\+Field}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Data) const
-\begin{DoxyCompactList}\small\item\em Get logical field for field name. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a423a0cb7bd252cedf956ace4954f275d}{Put\+Logical\+Field}} (xb\+Int16 i\+Field\+No, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Field\+Data)
-\begin{DoxyCompactList}\small\item\em Put logical field for field number. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a623ca3ef5520c42308c1a16b518e7ff3}{Put\+Logical\+Field}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Field\+Data)
-\begin{DoxyCompactList}\small\item\em Put logical field for field name. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_aaf615ddcf08f8cd14efc713c2a8d7ae1}{Get\+Logical\+Field}} (xb\+Int16 i\+Field\+No, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \&b\+Field\+Data) const
-\begin{DoxyCompactList}\small\item\em Get logical field for field number. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ab28feef20c988b0a6f1c1911a45377b0}{Get\+Logical\+Field}} (xb\+Int16 i\+Field\+No, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \&b\+Field\+Data, xb\+Int16 i\+Rec\+Buf\+Sw) const
-\begin{DoxyCompactList}\small\item\em Get logical field for field number. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a943cea7fde1b06c1a05184193eff8d2d}{Get\+Logical\+Field}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \&b\+Field\+Data) const
-\begin{DoxyCompactList}\small\item\em Get logical field for field name. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_abe525c0820640e0a9e169d0b7913cfa1}{Get\+Long\+Field}} (xb\+Int16 i\+Field\+No, xb\+Int32 \&l\+Field\+Value) const
-\begin{DoxyCompactList}\small\item\em Get long field for field number. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a7b8ef75b17941beac17e50e969b2d3db}{Get\+Long\+Field}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name, xb\+Int32 \&l\+Field\+Value) const
-\begin{DoxyCompactList}\small\item\em Get long field for field name. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a56c8f924284bf88aabf90b7930b4eb47}{Put\+Long\+Field}} (xb\+Int16 i\+Field\+No, xb\+Int32 l\+Field\+Value)
-\begin{DoxyCompactList}\small\item\em Put long field for field number. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ae7aad223119edb3d541e9f65e88c9f2f}{Put\+Long\+Field}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+No, xb\+Int32 l\+Field\+Value)
-\begin{DoxyCompactList}\small\item\em Put long field for field name. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a67e3a050f9090edf69eee75aef7f5d83}{Get\+ULong\+Field}} (xb\+Int16 i\+Field\+No, xb\+UInt32 \&l\+Field\+Value) const
-\begin{DoxyCompactList}\small\item\em Get unsigned long field for field number. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a039eb02418ec4ca862adbc0f95b9cbec}{Get\+ULong\+Field}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name, xb\+UInt32 \&l\+Field\+Value) const
-\begin{DoxyCompactList}\small\item\em Get unsigned long field for field name. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_af5dec5c9ff903efffdb0490a44d296d2}{Put\+ULong\+Field}} (xb\+Int16 i\+Field\+No, xb\+UInt32 l\+Field\+Value)
-\begin{DoxyCompactList}\small\item\em Put unsigned long field for field number. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ac62cb97c4e678c83f41788b1ae4d0381}{Put\+ULong\+Field}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+No, xb\+UInt32 l\+Field\+Value)
-\begin{DoxyCompactList}\small\item\em Put unsigned long field for field name. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a4556041a7ff2f6b6f986729901c11f08}{Get\+Double\+Field}} (xb\+Int16 Field\+No, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} \&d\+Field\+Value) const
-\begin{DoxyCompactList}\small\item\em Get xb\+Double field for field number. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a2370b5e736931441a5968649291b9ef4}{Get\+Double\+Field}} (xb\+Int16 Field\+No, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} \&d\+Field\+Value, xb\+Int16 i\+Rec\+Buf\+Sw) const
-\begin{DoxyCompactList}\small\item\em Get xb\+Double field for field number. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a6e6774df0f2d7733f4b25a9989596d95}{Get\+Double\+Field}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} \&d\+Field\+Value) const
-\begin{DoxyCompactList}\small\item\em Get xb\+Double field for field name. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a4f34842d7e8ff1f16992c2ece2fc38a5}{Put\+Double\+Field}} (xb\+Int16 Field\+No, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} d\+Field\+Value)
-\begin{DoxyCompactList}\small\item\em Put double field for field number. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ae695bbc71c19abc71c0c5f2ff2e1f971}{Put\+Double\+Field}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&Field\+Name, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} d\+Field\+Value)
-\begin{DoxyCompactList}\small\item\em Put double field for field name. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a3443f646038ced14425f067a59c0f2da}{Get\+Float\+Field}} (xb\+Int16 i\+Field\+No, \mbox{\hyperlink{namespacexb_a83aa6a550398db55973aa9fb4257e66e}{xb\+Float}} \&f\+Field\+Value) const
-\begin{DoxyCompactList}\small\item\em Get xb\+Float field for field number. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a81ef2f36f921d7ece066a592eb6393eb}{Get\+Float\+Field}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name, \mbox{\hyperlink{namespacexb_a83aa6a550398db55973aa9fb4257e66e}{xb\+Float}} \&f\+Field\+Value) const
-\begin{DoxyCompactList}\small\item\em Get xb\+Float field for field name. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a64161eb50d72e424b11bf3732657ebd8}{Put\+Float\+Field}} (xb\+Int16 i\+Field\+No, \mbox{\hyperlink{namespacexb_a83aa6a550398db55973aa9fb4257e66e}{xb\+Float}} f\+Field\+Value)
-\begin{DoxyCompactList}\small\item\em Put float field for field number. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a4ea3241bc710d57e5f755efda62288ad}{Put\+Float\+Field}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name, \mbox{\hyperlink{namespacexb_a83aa6a550398db55973aa9fb4257e66e}{xb\+Float}} f\+Field\+Value)
-\begin{DoxyCompactList}\small\item\em Put float field for field name. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_af78ef1fba949463ff7f829d3cffc4555}{Get\+Date\+Field}} (xb\+Int16 i\+Field\+No, \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&dt) const
-\begin{DoxyCompactList}\small\item\em Get \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} field for field number. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ac624e06a97666bfd64b4f252b4548b36}{Get\+Date\+Field}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name, \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&dt) const
-\begin{DoxyCompactList}\small\item\em Get \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} field for field name. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a873f04af528a9d81e6a367a59d998ec5}{Put\+Date\+Field}} (xb\+Int16 i\+Field\+No, const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&dt)
-\begin{DoxyCompactList}\small\item\em Put date field for field number. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a571b36b3a940b1a16d5e834f329b33b9}{Put\+Date\+Field}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name, const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&dt)
-\begin{DoxyCompactList}\small\item\em Put date field for field name. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a060acbfaa8d528f86cb59301814b414a}{Set\+Home\+Folders}} ()
-\begin{DoxyCompactList}\small\item\em Create Home Folders. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_aae9a2ddb0adb8165b4ac2b6a28a932f7}{Create\+Unique\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Dir\+In, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Ext\+In, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Fqn\+Out)
-\begin{DoxyCompactList}\small\item\em Create a unique file name. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ae5ffabde2c88ea58324f27e471f6bfc0}{Create\+Unique\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Dir\+In, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Ext\+In, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Fqn\+Out, xb\+Int16 i\+Option)
-\begin{DoxyCompactList}\small\item\em Create a unique file name. \end{DoxyCompactList}\item
-const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbFile_acd0fb2166b2bff7e8a1cf65a7bc8be1e}{Get\+Directory}} () const
-\begin{DoxyCompactList}\small\item\em Get the directory name. \end{DoxyCompactList}\item
-const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbFile_ac95cb882ccbcdedc9a233c6ad9fed07a}{Get\+File\+Name}} () const
-\begin{DoxyCompactList}\small\item\em Get the file name. \end{DoxyCompactList}\item
-const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbFile_a31b4e641f93206ba23e2a5a27491dcd4}{Get\+Fq\+File\+Name}} () const
-\begin{DoxyCompactList}\small\item\em Get the fully qualified file name. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbFile_ae78a85255488bc78964c16946dbaead3}{Set\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Directory)
-\begin{DoxyCompactList}\small\item\em Set the directory. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbFile_a5419eb27e56822f828b2b88a9502a636}{Set\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name)
-\begin{DoxyCompactList}\small\item\em Set the filename. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbFile_aee832fa11db2077a532f49e1329bd05a}{Set\+Fq\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Fq\+Name)
-\begin{DoxyCompactList}\small\item\em Set the fully qualifed filename. \end{DoxyCompactList}\item
-xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbFile_a638e14262410a1627819f016a16cdce2}{Get\+Block\+Size}} () const
-\begin{DoxyCompactList}\small\item\em Get the block size. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a991c5676a6f38fa752435390989f413e}{Set\+Block\+Size}} (xb\+UInt32 ul\+Block\+Size)
-\begin{DoxyCompactList}\small\item\em Set the block size. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a3c500dc9dac22c49496e4b29386b2dd3}{Get\+Open\+Mode}} () const
-\begin{DoxyCompactList}\small\item\em Get the open mode of the file. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a9b63e05b77f477ff6109ff7b9432c1b6}{Get\+Share\+Mode}} () const
-\begin{DoxyCompactList}\small\item\em Get the share mode of the file. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a60c53998e3d1b694134b20a87bc9bf5a}{Get\+File\+Dir\+Part}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Dir\+Part\+Out) const
-\begin{DoxyCompactList}\small\item\em Get the directory part of the file name. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_af5127c92892816e9bbc5c19653c4147a}{Get\+File\+Dir\+Part}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Complete\+File\+Name\+In, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Dir\+Part\+Out) const
-\begin{DoxyCompactList}\small\item\em Get the directory part of the file name. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a57a9222e5cbb51019d4eeb2c3ac89fa2}{Get\+File\+Ext\+Part}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Ext\+Part\+Out) const
-\begin{DoxyCompactList}\small\item\em Get the extension part of the file name. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ab289b6ffe955321160c1f90220c22e25}{Get\+File\+Ext\+Part}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Complete\+File\+Name\+In, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Ext\+Part\+Out) const
-\begin{DoxyCompactList}\small\item\em Get the extension part of the file name. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a81422b3dd52763d2cc6c77237ec9af0a}{Get\+File\+Name\+Part}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name\+Part\+Out) const
-\begin{DoxyCompactList}\small\item\em Get the name part of the file name. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a6110763c5ae996b72c7a62c15bdecc73}{Get\+File\+Name\+Part}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Complete\+File\+Name\+In, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name\+Part\+Out) const
-\begin{DoxyCompactList}\small\item\em Get the name part of the file name. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a5548236d38d43b89ae29b9a015b1f678}{Get\+File\+Type}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Type) const
-\begin{DoxyCompactList}\small\item\em Get the file type aka Capitalized file extension. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_aaf2e697751a0beff41432a66bb83fb5e}{Get\+Xbase\+File\+Type\+Byte}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, xb\+Int16 \&i\+Version)
-\begin{DoxyCompactList}\small\item\em Get the file type byte and version of the dbf file. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a7af337808919680b90710ad5e8a99232}{Get\+Xbase\+File\+Type\+Byte}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, unsigned char \&c\+File\+Type\+Byte)
-\begin{DoxyCompactList}\small\item\em Get the file type byte and version of the dbf file. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a78aebdd21d3de46a450d5f835e3027f6}{Get\+Xbase\+File\+Type\+Byte}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, unsigned char \&c\+File\+Type\+Byte, xb\+Int16 \&i\+Version)
-\begin{DoxyCompactList}\small\item\em Get the file type byte and version of the dbf file. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ae2b6ac26018dc28f77afbb3f008c3f66}{Determine\+Xbase\+Table\+Version}} (unsigned char c\+File\+Type\+Byte) const
-\begin{DoxyCompactList}\small\item\em Determine xbase dbf version. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a5a740033664c9ad2611c90e2a6d0c2d3}{Determine\+Xbase\+Memo\+Version}} (unsigned char c\+File\+Type\+Byte) const
-\begin{DoxyCompactList}\small\item\em Determine which version the memo (dbt) file is. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a78bd8a11dce102647095baf3aff2b006}{File\+Exists}} () const
-\begin{DoxyCompactList}\small\item\em Determines if a file exists. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a174d8a6aabc9cfcd32fedbd1e5b13ddd}{File\+Exists}} (xb\+Int16 i\+Option) const
-\begin{DoxyCompactList}\small\item\em Determines if a file exists. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a61130b4fbf4cf9d5972dcb4993de2f94}{File\+Exists}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name) const
-\begin{DoxyCompactList}\small\item\em Determines if a file exists. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a0592168f39a10f2a401a88ef781f6148}{File\+Exists}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, xb\+Int16 i\+Option) const
-\begin{DoxyCompactList}\small\item\em Determines if a file exists. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a7fa837938a32dc9ca3fbc81cbaf50f59}{File\+Is\+Open}} () const
-\begin{DoxyCompactList}\small\item\em Determines if file is open. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_aa1bb80340abc7a5c22f87f878e9dc825}{Read\+Block}} (xb\+UInt32 ul\+Block\+No, size\+\_\+t read\+Size, void $\ast$buf)
-\begin{DoxyCompactList}\small\item\em Read a block of data from file. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_aef696b1c4c0ef5338e818599f695d485}{Read\+Block}} (xb\+UInt32 ul\+Block\+No, xb\+UInt32 ul\+Block\+Size, size\+\_\+t read\+Size, void $\ast$buf)
-\begin{DoxyCompactList}\small\item\em Read a block of data from file. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a5d871dcfecc2b4338f7a13722aab766c}{Write\+Block}} (xb\+UInt32 ul\+Block\+No, size\+\_\+t write\+Size, void $\ast$buf)
-\begin{DoxyCompactList}\small\item\em Write a block of data to file. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a50b63c39e49d44e52078038027b24cc5}{Get\+File\+Size}} (xb\+UInt64 \&ull\+File\+Size)
-\begin{DoxyCompactList}\small\item\em Get the size of the file as reported by the OS. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a02df78f4c90313243f508fc56b95aba8}{Get\+File\+Mtime}} (time\+\_\+t \&mtime)
-\begin{DoxyCompactList}\small\item\em Get the time of last file modification timestamp as reported by the OS. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} \mbox{\hyperlink{classxb_1_1xbFile_ab14e4a11427f5efb81cba1dd32bd1aa1}{e\+Get\+Double}} (const char $\ast$p) const
-\begin{DoxyCompactList}\small\item\em Get a portable double value. \end{DoxyCompactList}\item
-xb\+Int32 \mbox{\hyperlink{classxb_1_1xbFile_a60b24a5afc984c586bf384c7e915ba0d}{e\+Get\+Int32}} (const char $\ast$p) const
-\begin{DoxyCompactList}\small\item\em Get a portable long value. \end{DoxyCompactList}\item
-xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbFile_a78f052529d39a18deaface5a0d47d0b0}{e\+Get\+UInt32}} (const char $\ast$p) const
-\begin{DoxyCompactList}\small\item\em Get a portable unsigned long value. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ac40c991110ddc6fb30a72d90f4652762}{e\+Get\+Int16}} (const char $\ast$p) const
-\begin{DoxyCompactList}\small\item\em Get a portable short value. \end{DoxyCompactList}\item
-xb\+UInt16 \mbox{\hyperlink{classxb_1_1xbFile_a936ade458e6d5e6d29f9b5031888d189}{e\+Get\+UInt16}} (const char $\ast$p) const
-\begin{DoxyCompactList}\small\item\em Get a portable unsigned short value. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbFile_a98b6ff533ae93f90c977a2ba23eeb105}{e\+Put\+Double}} (char $\ast$p, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} d)
-\begin{DoxyCompactList}\small\item\em Write a portable double value to memory location. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbFile_a19c37f76a2ccbb45019cb0fc373d3f46}{e\+Put\+Int32}} (char $\ast$p, xb\+Int32 l)
-\begin{DoxyCompactList}\small\item\em Write a portable long value to memory location. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbFile_aa3f6ceae4b96f24875d86848bf13a173}{e\+Put\+UInt32}} (char $\ast$p, xb\+UInt32 ul)
-\begin{DoxyCompactList}\small\item\em Write a portable unsigned long value to memory location. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbFile_a29130f12739ac8fa837f4eaedf1338b2}{e\+Put\+Int16}} (char $\ast$p, xb\+Int16 s)
-\begin{DoxyCompactList}\small\item\em Write a portable short value to memory location. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbFile_a65e9839f92b96eac7b0d071fac3bbe40}{e\+Put\+UInt16}} (char $\ast$p, xb\+UInt16 s)
-\begin{DoxyCompactList}\small\item\em Write a portable unsigned short value to memory location. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a18830b5755d74818f60d9c7ce38ddf2d}{xb\+Fclose}} ()
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fclose. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_af5b6356832d2a67212070a1aa605f170}{xb\+Feof}} ()
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary feof. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ad205184d43409f04216540ae22f15009}{xb\+Fflush}} ()
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fflush. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_afb1c584d2895ffb7834df80aea7eb1e4}{xb\+Fgetc}} (xb\+Int32 \&c)
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fgetc. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a5ee229bda4d7d6695e122200e581e7a6}{xb\+Fgetc}} (char \&c)
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fgetc. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a7cdfef5ede9ac98d44a28a6b7a70972c}{xb\+Fopen}} (xb\+Int16 i\+Open\+Mode)
-\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a0548cedf0f26b7d8ac221f75b0cd048c}{xb\+Fopen}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Open\+Mode, xb\+Int16 i\+Share\+Mode)
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fopen. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_aabd113333b49c36cad23244b392baab4}{xb\+Fopen}} (xb\+Int16 i\+Open\+Mode, xb\+Int16 i\+Share\+Mode)
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fopen. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ab0fa19686ca8953ff4b556fb5b249135}{xb\+Fopen}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Mode, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, xb\+Int16 i\+Share\+Mode)
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fopen. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_af2e940c78956e5cb6824f9a1bc404896}{xb\+Fputc}} (xb\+Int32 c)
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fputc. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a863f74cf17df8186d88586b4d2a6441a}{xb\+Fputc}} (xb\+Int32 c, xb\+Int32 i\+No\+Times)
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fputc. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a698f3b40216778562e639e6ca1a47573}{xb\+Fputs}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s)
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fputs. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ab4f6afaa1f77539f27a4f05c26e54e2f}{xb\+Fread}} (void $\ast$ptr, size\+\_\+t size, size\+\_\+t nmemb)
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fread. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ad245955ace26e5dde85fd4373b30d026}{xb\+Fgets}} (size\+\_\+t l\+Size, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Line)
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fgets. \end{DoxyCompactList}\item
-size\+\_\+t \mbox{\hyperlink{classxb_1_1xbFile_a0e1c06aedfa7fbcb92e117f891edd13b}{xb\+Ftell}} ()
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary ftell. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a5337ab8918df240910c0d19b4f298e3d}{xb\+Fseek}} (xb\+Int64 ll\+Offset, xb\+Int32 whence)
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fseek. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbFile_a9891b792f585a696f38a5cf959e30918}{xb\+FTurn\+Off\+File\+Buffering}} ()
-\begin{DoxyCompactList}\small\item\em Turn off file buffering. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a6aadd871d1782944703fed773d44b85f}{xb\+Fwrite}} (const void $\ast$ptr, size\+\_\+t l\+Size, size\+\_\+t l\+Nmemb)
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fwrite. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a08463f506f425c2385acbe1a561506e9}{xb\+Read\+Until}} (const char c\+Delim, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Out)
-\begin{DoxyCompactList}\small\item\em Read file until a particular character is encountered on input stream. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a6d919366c2ec95e529906bf8842cbf07}{xb\+Remove}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, xb\+Int16 i\+Option)
-\begin{DoxyCompactList}\small\item\em Delete file. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a58f6a6751fdf7e9549c273bb75d93eb5}{xb\+Remove}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name)
-\begin{DoxyCompactList}\small\item\em Delete file. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ab3c668a8570433188382d31d7c60bd48}{xb\+Remove}} ()
-\begin{DoxyCompactList}\small\item\em Delete file. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_afc8ce113aa72611a278233f9bb170012}{xb\+Rename}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Old\+Name, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+New\+Name)
-\begin{DoxyCompactList}\small\item\em Rename file. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbFile_a7996b6e084665c37c3892faea64b3505}{xb\+Rewind}} ()
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for rewind. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a518bfcbfa3699d883cf89affee383296}{xb\+Truncate}} (xb\+Int64 ll\+Size)
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for ftruncate. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a361e3cc318bbf1c4d10f069e0800a24e}{Name\+Suffix\+Missing}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, xb\+Int16 i\+Option) const
-\begin{DoxyCompactList}\small\item\em Determines status of file extension. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}{Display\+Error}} (xb\+Int16 Error\+Code) const
-\begin{DoxyCompactList}\small\item\em Display error message on console for a given error number. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a6fbb9c3a550ab0b3378f9586a57791d2}{Get\+Default\+Date\+Format}} () const
-\begin{DoxyCompactList}\small\item\em Get the default date format. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}{Get\+Data\+Directory}} () const
-\begin{DoxyCompactList}\small\item\em Get the current data directory. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}{Get\+Endian\+Type}} () const
-\begin{DoxyCompactList}\small\item\em Get the Endian type. \end{DoxyCompactList}\item
-const char $\ast$ \mbox{\hyperlink{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}{Get\+Error\+Message}} (xb\+Int16 Error\+Code) const
-\begin{DoxyCompactList}\small\item\em Get an error message. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}{Set\+Data\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Data\+Directory)
-\begin{DoxyCompactList}\small\item\em Set the data directory. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}{Set\+Default\+Date\+Format}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Default\+Date\+Format)
-\begin{DoxyCompactList}\small\item\em Set the default date format. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}{Bit\+Set}} (unsigned char c, xb\+Int16 i\+Bit\+No) const
-\begin{DoxyCompactList}\small\item\em Check a bit in a one byte field and see if it is set. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}{Bit\+Dump}} (unsigned char c) const
-\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}{Bit\+Dump}} (char c) const
-\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}{Get\+Default\+Auto\+Commit}} () const
-\begin{DoxyCompactList}\small\item\em Get the default auto commit setting. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}{Set\+Default\+Auto\+Commit}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Default\+Auto\+Commit)
-\begin{DoxyCompactList}\small\item\em Set the default auto commit. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}{Get\+Home\+Dir}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Home\+Dir\+Out)
-\begin{DoxyCompactList}\small\item\em Get home directory. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}{Get\+Log\+Directory}} () const
-\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}{Get\+Log\+File\+Name}} () const
-\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}{Set\+Log\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Log\+Directory)
-\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}{Get\+Multi\+User}} () const
-\begin{DoxyCompactList}\small\item\em Get the multi user setting. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}{Set\+Multi\+User}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Multi\+User)
-\begin{DoxyCompactList}\small\item\em Get the multi user setting. \end{DoxyCompactList}\end{DoxyCompactItemize}
-\doxysubsection*{Static Public Attributes}
-\begin{DoxyCompactItemize}
-\item
-static const char $\ast$ \mbox{\hyperlink{classxb_1_1xbSsv_a6219f1b5e24ea12fe158cd5aea56988e}{Error\+Code\+Text}} \mbox{[}$\,$\mbox{]}
-\end{DoxyCompactItemize}
-\doxysubsection*{Protected Member Functions}
-\begin{DoxyCompactItemize}
-\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_aabd146c0e1054ab905ec96aedd84b02e}{Get\+Raw\+Field}} (xb\+Int16 i\+Field\+No, char $\ast$Buf, xb\+UInt32 Buf\+Size, xb\+Int16 i\+Rec\+Buf\+Sw) const
-\begin{DoxyCompactList}\small\item\em Get raw field data for field number. \end{DoxyCompactList}\item
-virtual void \mbox{\hyperlink{classxb_1_1xbDbf_ad06fe0f7975fb81125d27d82504e6829}{Init\+Vars}} ()
-\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a7e63e852418f337eb7c44de5dcd50323}{Set\+Version}} ()=0
-\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_aba5dcac3b4092261bc1669740cdd669d}{Validate\+Schema}} (\mbox{\hyperlink{structxb_1_1xbSchema}{xb\+Schema}} $\ast$s)=0
-\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a44e1410109ef7b3d11a6af4b704b62b2}{Write\+Header}} (xb\+Int16 i\+Position\+Option, xb\+Int16 i\+Write\+Option)
-\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a904ec348fd029d4a76e72b8fde636108}{Set\+Endian\+Type}} ()
-\begin{DoxyCompactList}\small\item\em Set the endian type. \end{DoxyCompactList}\end{DoxyCompactItemize}
-\doxysubsection*{Protected Attributes}
-\begin{DoxyCompactItemize}
-\item
-xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbDbf_afcd99924606be0a9e1e25180bcd1abf8}{ul\+Cur\+Rec}}
-\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ab506450954bc86e7bf1d7c4efe681f43}{i\+Auto\+Commit}}
-\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a15f495446f0d75bcf2fa89e3b699d388}{i\+File\+Version}}
-\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \mbox{\hyperlink{classxb_1_1xbDbf_a73f9c792d0a769e2e604c1855245a276}{s\+Alias}}
-\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a5056757614c39f725cc775332494966a}{i\+No\+Of\+Fields}}
-\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a6d8e193da3ca414eef1e8866ec5ca81b}{i\+Dbf\+Status}}
-\item
-xb\+Schema\+Rec $\ast$ \mbox{\hyperlink{classxb_1_1xbDbf_ad8c8b5eb12063bb898da1b2cc02cfce7}{Schema\+Ptr}}
-\item
-char $\ast$ \mbox{\hyperlink{classxb_1_1xbDbf_a8a9b3bce0b741e73473d3ebbd6e6f1cd}{Rec\+Buf}}
-\item
-char $\ast$ \mbox{\hyperlink{classxb_1_1xbDbf_a353ebfc8a2960ef827f429ec74025606}{Rec\+Buf2}}
-\item
-unsigned char \mbox{\hyperlink{classxb_1_1xbDbf_a3a262abf658e5fa968b57ef457a69470}{c\+Version}}
-\item
-char \mbox{\hyperlink{classxb_1_1xbDbf_a4fcd6a86ddd32d4a9d76a4074573440a}{c\+Update\+YY}}
-\item
-char \mbox{\hyperlink{classxb_1_1xbDbf_a9340a5e8ee53eb0f3b6601eec2d71e1b}{c\+Update\+MM}}
-\item
-char \mbox{\hyperlink{classxb_1_1xbDbf_a6021789d314cd41488991e708fcd0df2}{c\+Update\+DD}}
-\item
-xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbDbf_acb594ab61dd35b17bdf28394083f8e87}{ul\+No\+Of\+Recs}}
-\item
-xb\+UInt16 \mbox{\hyperlink{classxb_1_1xbDbf_a62f5fa9149ae0f6dc75642823de66918}{ui\+Header\+Len}}
-\item
-xb\+UInt16 \mbox{\hyperlink{classxb_1_1xbDbf_a1760e222567e2c849f9c799b9d896e91}{ui\+Record\+Len}}
-\item
-char \mbox{\hyperlink{classxb_1_1xbDbf_ac3c89fc3bc6a6abf385478a8adbed970}{c\+Transaction\+Flag}}
-\item
-char \mbox{\hyperlink{classxb_1_1xbDbf_a8734e799707582f022fc341d515650f4}{c\+Encryption\+Flag}}
-\item
-char \mbox{\hyperlink{classxb_1_1xbDbf_ad59074633641e03647e54d2b66c9102b}{c\+Index\+Flag}}
-\item
-char \mbox{\hyperlink{classxb_1_1xbDbf_aea1dfe5cbd1f9cdbcfc8eb04b2c3d5f1}{c\+Lang\+Driver}}
-\item
-\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$ \mbox{\hyperlink{classxb_1_1xbFile_ae39a67ea391b46055d4ca299cb222004}{xbase}}
-\end{DoxyCompactItemize}
-\doxysubsection*{Static Protected Attributes}
-\begin{DoxyCompactItemize}
-\item
-static xb\+Int16 \mbox{\hyperlink{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}{i\+Endian\+Type}} = 0
-\item
-static \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \mbox{\hyperlink{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}{s\+Null\+String}} = \char`\"{}\char`\"{}
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Detailed Description}
-Base class for handling dbf files/tables.
-
-The \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} class is used as a base class for accessing dbf files. ~\newline
- In line with relational theory, a each dbf file can be considered as a table. The documentation uses the terms dbf and table interchangeably.~\newline
-
-
-This module handles methods for accessing and updating dbf files.
-
-~\newline
- The class is designed to support additional file layouts with a minimal amount of effort. If you are wanting to update the library to support a new dbf file type not currently supported by the library, create a derived class using \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} as a base class and modify methods needed to support the new dbf file version.~\newline
- See the following for examples on how to start on this\+:~\newline
- xb\+Dbf3 is a derived class from \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} and supports the original Dbase III+ file version.~\newline
- xb\+Dbf4 is a derived class from \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} and supports the original Dbase IV file version.~\newline
-
-
-\doxysubsection{Constructor \& Destructor Documentation}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a84a75f80bc0e9b8a22b728767949c204}\label{classxb_1_1xbDbf_a84a75f80bc0e9b8a22b728767949c204}}
-\index{xb::xbDbf@{xb::xbDbf}!xbDbf@{xbDbf}}
-\index{xbDbf@{xbDbf}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{xbDbf()}{xbDbf()}}
-{\footnotesize\ttfamily xb\+::xb\+Dbf\+::xb\+Dbf (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$}]{x }\end{DoxyParamCaption})}
-
-
-
-Constructor.
-
-
-\begin{DoxyParams}{Parameters}
-{\em x} & Pointer to xb\+Xbase \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a7eb87521fba8a939c613056d9918d880}\label{classxb_1_1xbDbf_a7eb87521fba8a939c613056d9918d880}}
-\index{xb::xbDbf@{xb::xbDbf}!````~xbDbf@{$\sim$xbDbf}}
-\index{````~xbDbf@{$\sim$xbDbf}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{$\sim$xbDbf()}{~xbDbf()}}
-{\footnotesize\ttfamily xb\+::xb\+Dbf\+::$\sim$xb\+Dbf (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Destructor.
-
-
-
-\doxysubsection{Member Function Documentation}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a4edcf31390fbdc8c3558004770fd9f2f}\label{classxb_1_1xbDbf_a4edcf31390fbdc8c3558004770fd9f2f}}
-\index{xb::xbDbf@{xb::xbDbf}!Abort@{Abort}}
-\index{Abort@{Abort}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{Abort()}{Abort()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Abort (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Abort any uncommited changes for the current record buffer.
-
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a5b412dd796241673eb1aa2c93513d69b}\label{classxb_1_1xbDbf_a5b412dd796241673eb1aa2c93513d69b}}
-\index{xb::xbDbf@{xb::xbDbf}!AppendRecord@{AppendRecord}}
-\index{AppendRecord@{AppendRecord}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{AppendRecord()}{AppendRecord()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Append\+Record (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Append the current record to the data file.
-
-This method attempts to append the contents of the current record buffer to the end of the DBF file, updates the file date, number of records in the file and updates any open indices associated with this data file.~\newline
-
-
-To add a record, an application would typically blank the record buffer, update various fields in the record buffer, then append the record.~\newline
-
-
-The append method performs the following tasks\+:~\newline
- 1) Create new index key values~\newline
- 2) Lock the table~\newline
- 3) Lock append bytes~\newline
- 4) Lock indices~\newline
- 5) Read the dbf header~\newline
- 6) Check for dup keys~\newline
- 7) Calc last update date, no of recs~\newline
- 8) Add keys~\newline
- 9) Unlock indices~\newline
- 10) Update file header~\newline
- 11) Unlock file header~\newline
- 12) Append record~\newline
- 13) Unlock append bytes~\newline
-
-
-Note\+: Locking memo files is not needed as the memo file updates are handled outside of the append method.~\newline
-
-
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}\label{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}}
-\index{xb::xbDbf@{xb::xbDbf}!BitDump@{BitDump}}
-\index{BitDump@{BitDump}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{BitDump()}{BitDump()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Bit\+Dump (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}\label{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}}
-\index{xb::xbDbf@{xb::xbDbf}!BitDump@{BitDump}}
-\index{BitDump@{BitDump}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{BitDump()}{BitDump()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Bit\+Dump (\begin{DoxyParamCaption}\item[{unsigned char}]{c }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}\label{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}}
-\index{xb::xbDbf@{xb::xbDbf}!BitSet@{BitSet}}
-\index{BitSet@{BitSet}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{BitSet()}{BitSet()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Ssv\+::\+Bit\+Set (\begin{DoxyParamCaption}\item[{unsigned char}]{c, }\item[{xb\+Int16}]{i\+Bit\+No }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Check a bit in a one byte field and see if it is set.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c} & One byte char field to examine. \\
-\hline
-{\em i\+Bit\+No} & which bit to examine. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-xb\+True Bit is set~\newline
- xb\+False Bit is not set
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a78da5a3d2011a3f2e7618cbdd3ba02d6}\label{classxb_1_1xbDbf_a78da5a3d2011a3f2e7618cbdd3ba02d6}}
-\index{xb::xbDbf@{xb::xbDbf}!BlankRecord@{BlankRecord}}
-\index{BlankRecord@{BlankRecord}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{BlankRecord()}{BlankRecord()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Blank\+Record (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Blank the record buffer.
-
-This method would typically be called to initialize the record buffer before updates are applied to append a new record.
-
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_ad68d73113e54e1b5f326e90f45e9989d}\label{classxb_1_1xbDbf_ad68d73113e54e1b5f326e90f45e9989d}}
-\index{xb::xbDbf@{xb::xbDbf}!Close@{Close}}
-\index{Close@{Close}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{Close()}{Close()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Close (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Close DBF file/table.
-
-This routine flushes any remaining updates to disk, closes the DBF file and any associated memo and index files.
-
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_abd69532c885ab72bcf3fb5066b318f4f}\label{classxb_1_1xbDbf_abd69532c885ab72bcf3fb5066b318f4f}}
-\index{xb::xbDbf@{xb::xbDbf}!Commit@{Commit}}
-\index{Commit@{Commit}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{Commit()}{Commit()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Commit (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Commit updates to disk.
-
-This routine commits any pending updates to disk.
-
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a829c615a130a1fdf609d93438d8a6264}\label{classxb_1_1xbDbf_a829c615a130a1fdf609d93438d8a6264}}
-\index{xb::xbDbf@{xb::xbDbf}!CopyDbfStructure@{CopyDbfStructure}}
-\index{CopyDbfStructure@{CopyDbfStructure}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{CopyDbfStructure()}{CopyDbfStructure()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Copy\+Dbf\+Structure (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$}]{d\+New\+Table, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+New\+Table\+Name, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+New\+Table\+Alias, }\item[{xb\+Int16}]{i\+Overlay, }\item[{xb\+Int16}]{i\+Share\+Mode }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Copy table (dbf) file structure.
-
-This routine will copy the structure of a dbf file and if successful return a pointer to the new table in an open state.
-
-
-\begin{DoxyParams}{Parameters}
-{\em d\+New\+Table} & Reference to new table object. \\
-\hline
-{\em s\+New\+Table\+Name} & New table (dbf) name. \\
-\hline
-{\em s\+New\+Table\+Alias} & Alias name of new table. \\
-\hline
-{\em i\+Overlay} & xb\+True -\/ Overlay existing file.~\newline
- xb\+False -\/ Don\textquotesingle{}t overlay existing file. \\
-\hline
-{\em i\+Share\+Mode} & XB\+\_\+\+SINGLE\+\_\+\+USER~\newline
- XB\+\_\+\+MULTI\+\_\+\+USER \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}} Copy DBF structure
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a73e41bfe679dd06ab16c436652df93f1}\label{classxb_1_1xbDbf_a73e41bfe679dd06ab16c436652df93f1}}
-\index{xb::xbDbf@{xb::xbDbf}!CreateTable@{CreateTable}}
-\index{CreateTable@{CreateTable}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{CreateTable()}{CreateTable()}}
-{\footnotesize\ttfamily virtual xb\+Int16 xb\+::xb\+Dbf\+::\+Create\+Table (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Table\+Name, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Alias, }\item[{\mbox{\hyperlink{structxb_1_1xbSchema}{xb\+Schema}} $\ast$}]{p\+Schema, }\item[{xb\+Int16}]{i\+Overlay, }\item[{xb\+Int16}]{i\+Share\+Mode }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}
-
-\mbox{\Hypertarget{classxb_1_1xbFile_aae9a2ddb0adb8165b4ac2b6a28a932f7}\label{classxb_1_1xbFile_aae9a2ddb0adb8165b4ac2b6a28a932f7}}
-\index{xb::xbDbf@{xb::xbDbf}!CreateUniqueFileName@{CreateUniqueFileName}}
-\index{CreateUniqueFileName@{CreateUniqueFileName}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{CreateUniqueFileName()}{CreateUniqueFileName()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Create\+Unique\+File\+Name (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Dir\+In, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Ext\+In, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Fqn\+Out }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Create a unique file name.
-
-Given a directory and file extension as inputs, create a unique file name.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Dir\+In} & Directory \\
-\hline
-{\em s\+Ext\+In} & File Extension \\
-\hline
-{\em s\+Fqn\+Out} & A fully qualifed unique file name as output \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_ae5ffabde2c88ea58324f27e471f6bfc0}\label{classxb_1_1xbFile_ae5ffabde2c88ea58324f27e471f6bfc0}}
-\index{xb::xbDbf@{xb::xbDbf}!CreateUniqueFileName@{CreateUniqueFileName}}
-\index{CreateUniqueFileName@{CreateUniqueFileName}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{CreateUniqueFileName()}{CreateUniqueFileName()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Create\+Unique\+File\+Name (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Dir\+In, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Ext\+In, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Fqn\+Out, }\item[{xb\+Int16}]{i\+Option }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Create a unique file name.
-
-Given a directory and file extension as inputs, create a unique file name.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Dir\+In} & Directory \\
-\hline
-{\em s\+Ext\+In} & File Extension \\
-\hline
-{\em i\+Option} & 0 -\/ look only for one file for a given directory and extension~\newline
- 1 -\/ if file name extension is \char`\"{}dbf\char`\"{} or \char`\"{}\+DBF\char`\"{}, verify unique dbt or DBT (memo) file is also available~\newline
- \\
-\hline
-{\em s\+Fqn\+Out} & A fully qualifed unique file name as output \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a01c26b67e312be1e674b3da710e031b9}\label{classxb_1_1xbDbf_a01c26b67e312be1e674b3da710e031b9}}
-\index{xb::xbDbf@{xb::xbDbf}!DeleteAll@{DeleteAll}}
-\index{DeleteAll@{DeleteAll}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{DeleteAll()}{DeleteAll()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Delete\+All (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Option }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Delete or undelete all records in a dbf file (table).
-
-This routine deletes or un-\/deletes all records. The xbase file format contains a leading one byte character used for flagging a record as deleted. When a record is deleted, it\textquotesingle{}s not physically removed from the file, the first byte is flagged as deleted.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Option} & 0 -\/ Delete all records.~\newline
- 1 -\/ Un-\/delete all deleted records. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a3067fdfa3a7a5c15651f6e89d1102176}\label{classxb_1_1xbDbf_a3067fdfa3a7a5c15651f6e89d1102176}}
-\index{xb::xbDbf@{xb::xbDbf}!DeleteAllRecords@{DeleteAllRecords}}
-\index{DeleteAllRecords@{DeleteAllRecords}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{DeleteAllRecords()}{DeleteAllRecords()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Delete\+All\+Records (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Delete all records.
-
-This routine deletes all the records in a table / dbf file.
-
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_acd8c10579229f3a2e2c5fdb7fcef90db}\label{classxb_1_1xbDbf_acd8c10579229f3a2e2c5fdb7fcef90db}}
-\index{xb::xbDbf@{xb::xbDbf}!DeleteRecord@{DeleteRecord}}
-\index{DeleteRecord@{DeleteRecord}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{DeleteRecord()}{DeleteRecord()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Delete\+Record (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Delete the current record.
-
-This routine flags the current record for deletion if it\textquotesingle{}s not already flagged.
-
-\begin{DoxyReturn}{Returns}
-XB\+\_\+\+NO\+\_\+\+ERROR~\newline
- XB\+\_\+\+INVALID\+\_\+\+RECORD
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a4085ed4f049d976124d8edc3d3c56397}\label{classxb_1_1xbDbf_a4085ed4f049d976124d8edc3d3c56397}}
-\index{xb::xbDbf@{xb::xbDbf}!DeleteTable@{DeleteTable}}
-\index{DeleteTable@{DeleteTable}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{DeleteTable()}{DeleteTable()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Delete\+Table (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Delete a table.
-
-This routine deletes a given table, associated index files if any, the memo file if any and the .INF file if any. \begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a5a740033664c9ad2611c90e2a6d0c2d3}\label{classxb_1_1xbFile_a5a740033664c9ad2611c90e2a6d0c2d3}}
-\index{xb::xbDbf@{xb::xbDbf}!DetermineXbaseMemoVersion@{DetermineXbaseMemoVersion}}
-\index{DetermineXbaseMemoVersion@{DetermineXbaseMemoVersion}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{DetermineXbaseMemoVersion()}{DetermineXbaseMemoVersion()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Determine\+Xbase\+Memo\+Version (\begin{DoxyParamCaption}\item[{unsigned char}]{c\+File\+Type\+Byte }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Determine which version the memo (dbt) file is.
-
-This routine uses the first byte in the dbf file to determine which memo file version is in use. The main difference between version 3 and 4 is that version 4 will reuse blocks if they become available. Version 3 does not.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c\+File\+Type\+Byte} & is an output field and is one of\+:~\newline
- ~\newline
- 0 -\/ none~\newline
- 3 -\/ Dbase III+~\newline
- 4 -\/ Dbase IV~\newline
-\\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_ae2b6ac26018dc28f77afbb3f008c3f66}\label{classxb_1_1xbFile_ae2b6ac26018dc28f77afbb3f008c3f66}}
-\index{xb::xbDbf@{xb::xbDbf}!DetermineXbaseTableVersion@{DetermineXbaseTableVersion}}
-\index{DetermineXbaseTableVersion@{DetermineXbaseTableVersion}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{DetermineXbaseTableVersion()}{DetermineXbaseTableVersion()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Determine\+Xbase\+Table\+Version (\begin{DoxyParamCaption}\item[{unsigned char}]{c\+File\+Type\+Byte }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Determine xbase dbf version.
-
-This routine is used to determine which version of the Xbase classes can be used for a given DBF file.~\newline
-
-
-It attempts to use the highest version compiled into the library.~\newline
-
-
-References\+:~\newline
- This routine uses the first byte from the dbf file.~\newline
- Per DBase documentation\+:~\newline
- Valid d\+BASE for Windows table file, bits 0-\/2 indicate version number\+: 3 for d\+BASE Level 5, 4 for d\+BASE Level 7.~\newline
- Bit 3 and bit 7 indicate presence of a d\+BASE IV or d\+BASE for Windows memo file;~\newline
- Bits 4-\/6 indicate the presence of a d\+BASE IV SQL table;~\newline
- Bit 7 indicates the presence of any .DBT memo file (either a d\+BASE III PLUS type or a d\+BASE IV or d\+BASE for Windows memo file).~\newline
- ~\newline
- Bachmann spec (used extensively in library build), page 7 -\/ does not match DBase documentation~\newline
- ~\newline
- returns~\newline
- 0 -\/ unknown~\newline
- 3 -\/ Dbase level 3~\newline
- 4 -\/ Dbase level 4~\newline
- 5 -\/ Dbase Level 5 (future)~\newline
- 7 -\/ Dbase Level 7 (future)~\newline
- ~\newline
- 1x -\/ Clipper files (future)~\newline
- 2x -\/ Foxbase files (future)~\newline
- ~\newline
- \mbox{\Hypertarget{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}\label{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}}
-\index{xb::xbDbf@{xb::xbDbf}!DisplayError@{DisplayError}}
-\index{DisplayError@{DisplayError}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{DisplayError()}{DisplayError()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Display\+Error (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Error\+Code }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Display error message on console for a given error number.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Error\+Code} & Error number to reference \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a309b5b1fb6a5c048c4bfb404d011ac55}\label{classxb_1_1xbDbf_a309b5b1fb6a5c048c4bfb404d011ac55}}
-\index{xb::xbDbf@{xb::xbDbf}!DumpHeader@{DumpHeader}}
-\index{DumpHeader@{DumpHeader}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{DumpHeader()}{DumpHeader()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Dump\+Header (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Option }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Dump dbf file header.
-
-This routine dumps dbf header information to the console.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Option} & 1 = Print header only~\newline
- 2 = Field data only~\newline
- 3 = Header and Field data~\newline
- 4 = Header, Field and Memo header data if applicable \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_aba30399f15885a07f87f904c0d0656fa}\label{classxb_1_1xbDbf_aba30399f15885a07f87f904c0d0656fa}}
-\index{xb::xbDbf@{xb::xbDbf}!DumpRecord@{DumpRecord}}
-\index{DumpRecord@{DumpRecord}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{DumpRecord()}{DumpRecord()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Dump\+Record (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{ul\+Rec\+No, }\item[{xb\+Int16}]{i\+Output\+Dest = {\ttfamily 0}, }\item[{xb\+Int16}]{i\+Output\+Fmt = {\ttfamily 0} }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Dump record.
-
-Dump the contents of the specified record
-
-
-\begin{DoxyParams}{Parameters}
-{\em ul\+Rec\+No} & Record number of record to be dumped. \\
-\hline
-{\em i\+Output\+Dest} & 0 = stdout~\newline
- 1 = Syslog~\newline
- 2 = Both~\newline
-\\
-\hline
-{\em i\+Output\+Fmt} & 0 = with field names~\newline
- 1 = 1 line per rec, no field names~\newline
- 2 = 1 line per rec, first line is a list of field names. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_ab14e4a11427f5efb81cba1dd32bd1aa1}\label{classxb_1_1xbFile_ab14e4a11427f5efb81cba1dd32bd1aa1}}
-\index{xb::xbDbf@{xb::xbDbf}!eGetDouble@{eGetDouble}}
-\index{eGetDouble@{eGetDouble}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{eGetDouble()}{eGetDouble()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} xb\+::xb\+File\+::e\+Get\+Double (\begin{DoxyParamCaption}\item[{const char $\ast$}]{p }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get a portable double value.
-
-This routine returns a double value from an 8 byte character stream, accounting for endian type.
-
-Converts a double (64 bit floating point) value stored at p from a portable format to the machine format.
-
-
-\begin{DoxyParams}{Parameters}
-{\em p} & pointer to memory containing the portable double value\\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-the double value.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_ac40c991110ddc6fb30a72d90f4652762}\label{classxb_1_1xbFile_ac40c991110ddc6fb30a72d90f4652762}}
-\index{xb::xbDbf@{xb::xbDbf}!eGetInt16@{eGetInt16}}
-\index{eGetInt16@{eGetInt16}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{eGetInt16()}{eGetInt16()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::e\+Get\+Int16 (\begin{DoxyParamCaption}\item[{const char $\ast$}]{p }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get a portable short value.
-
-This routine returns a short int value from a 2 byte character stream, accounting for endian type.
-
-
-\begin{DoxyParams}{Parameters}
-{\em p} & pointer to memory containing the portable long value\\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-the short value.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a60b24a5afc984c586bf384c7e915ba0d}\label{classxb_1_1xbFile_a60b24a5afc984c586bf384c7e915ba0d}}
-\index{xb::xbDbf@{xb::xbDbf}!eGetInt32@{eGetInt32}}
-\index{eGetInt32@{eGetInt32}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{eGetInt32()}{eGetInt32()}}
-{\footnotesize\ttfamily xb\+Int32 xb\+::xb\+File\+::e\+Get\+Int32 (\begin{DoxyParamCaption}\item[{const char $\ast$}]{p }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get a portable long value.
-
-This routine returns a long int value from a 4 byte character stream, accounting for endian type.
-
-
-\begin{DoxyParams}{Parameters}
-{\em p} & pointer to memory containing the portable long value\\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-the long value.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a936ade458e6d5e6d29f9b5031888d189}\label{classxb_1_1xbFile_a936ade458e6d5e6d29f9b5031888d189}}
-\index{xb::xbDbf@{xb::xbDbf}!eGetUInt16@{eGetUInt16}}
-\index{eGetUInt16@{eGetUInt16}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{eGetUInt16()}{eGetUInt16()}}
-{\footnotesize\ttfamily xb\+UInt16 xb\+::xb\+File\+::e\+Get\+UInt16 (\begin{DoxyParamCaption}\item[{const char $\ast$}]{p }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get a portable unsigned short value.
-
-This routine returns a short unsigned int value from a 2 byte character stream, accounting for endian type.
-
-
-\begin{DoxyParams}{Parameters}
-{\em p} & pointer to memory containing the portable long value\\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-the short value.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a78f052529d39a18deaface5a0d47d0b0}\label{classxb_1_1xbFile_a78f052529d39a18deaface5a0d47d0b0}}
-\index{xb::xbDbf@{xb::xbDbf}!eGetUInt32@{eGetUInt32}}
-\index{eGetUInt32@{eGetUInt32}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{eGetUInt32()}{eGetUInt32()}}
-{\footnotesize\ttfamily xb\+UInt32 xb\+::xb\+File\+::e\+Get\+UInt32 (\begin{DoxyParamCaption}\item[{const char $\ast$}]{p }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get a portable unsigned long value.
-
-This routine returns an unsigned long int value from a 4 byte character stream, accounting for endian type.
-
-
-\begin{DoxyParams}{Parameters}
-{\em p} & pointer to memory containing the portable long value\\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-the unsigned long value.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a98b6ff533ae93f90c977a2ba23eeb105}\label{classxb_1_1xbFile_a98b6ff533ae93f90c977a2ba23eeb105}}
-\index{xb::xbDbf@{xb::xbDbf}!ePutDouble@{ePutDouble}}
-\index{ePutDouble@{ePutDouble}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{ePutDouble()}{ePutDouble()}}
-{\footnotesize\ttfamily void xb\+::xb\+File\+::e\+Put\+Double (\begin{DoxyParamCaption}\item[{char $\ast$}]{c, }\item[{\mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}}}]{d }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Write a portable double value to memory location.
-
-Converts a double (64 bit floating point) value from machine format to a portable format and stores the converted value in the memory referenced by c.
-
-This routine puts a double value to an 8 byte character stream
-
-
-\begin{DoxyParams}{Parameters}
-{\em c} & Pointer to memory to hold converted value \\
-\hline
-{\em d} & Input value to be converted \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbFile_a29130f12739ac8fa837f4eaedf1338b2}\label{classxb_1_1xbFile_a29130f12739ac8fa837f4eaedf1338b2}}
-\index{xb::xbDbf@{xb::xbDbf}!ePutInt16@{ePutInt16}}
-\index{ePutInt16@{ePutInt16}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{ePutInt16()}{ePutInt16()}}
-{\footnotesize\ttfamily void xb\+::xb\+File\+::e\+Put\+Int16 (\begin{DoxyParamCaption}\item[{char $\ast$}]{c, }\item[{xb\+Int16}]{s }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Write a portable short value to memory location.
-
-Converts a short (16 bit integer) value from machine format to a portable format and stores the converted value in the memory referenced by c.
-
-This routine puts a short value to a 2 byte character stream
-
-
-\begin{DoxyParams}{Parameters}
-{\em c} & Pointer to memory to hold converted value \\
-\hline
-{\em s} & Input value to be converted \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbFile_a19c37f76a2ccbb45019cb0fc373d3f46}\label{classxb_1_1xbFile_a19c37f76a2ccbb45019cb0fc373d3f46}}
-\index{xb::xbDbf@{xb::xbDbf}!ePutInt32@{ePutInt32}}
-\index{ePutInt32@{ePutInt32}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{ePutInt32()}{ePutInt32()}}
-{\footnotesize\ttfamily void xb\+::xb\+File\+::e\+Put\+Int32 (\begin{DoxyParamCaption}\item[{char $\ast$}]{c, }\item[{xb\+Int32}]{l }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Write a portable long value to memory location.
-
-Converts a long (32 bit integer) value from machine format to a portable format and stores the converted value in the memory referenced by c.
-
-This routine puts a long value to a 4 byte character stream.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c} & Pointer to memory to hold converted value \\
-\hline
-{\em l} & Input value to be converted \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbFile_a65e9839f92b96eac7b0d071fac3bbe40}\label{classxb_1_1xbFile_a65e9839f92b96eac7b0d071fac3bbe40}}
-\index{xb::xbDbf@{xb::xbDbf}!ePutUInt16@{ePutUInt16}}
-\index{ePutUInt16@{ePutUInt16}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{ePutUInt16()}{ePutUInt16()}}
-{\footnotesize\ttfamily void xb\+::xb\+File\+::e\+Put\+UInt16 (\begin{DoxyParamCaption}\item[{char $\ast$}]{c, }\item[{xb\+UInt16}]{s }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Write a portable unsigned short value to memory location.
-
-Converts an unsigned short (16 bit integer) value from machine format to a portable format and stores the converted value in the memory referenced by c.
-
-This routine puts an unsigned short value to a 2 byte character stream
-
-
-\begin{DoxyParams}{Parameters}
-{\em c} & Pointer to memory to hold converted value \\
-\hline
-{\em s} & Input value to be converted \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbFile_aa3f6ceae4b96f24875d86848bf13a173}\label{classxb_1_1xbFile_aa3f6ceae4b96f24875d86848bf13a173}}
-\index{xb::xbDbf@{xb::xbDbf}!ePutUInt32@{ePutUInt32}}
-\index{ePutUInt32@{ePutUInt32}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{ePutUInt32()}{ePutUInt32()}}
-{\footnotesize\ttfamily void xb\+::xb\+File\+::e\+Put\+UInt32 (\begin{DoxyParamCaption}\item[{char $\ast$}]{c, }\item[{xb\+UInt32}]{ul }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Write a portable unsigned long value to memory location.
-
-Converts an unsigned long (32 bit integer) value from machine format to a portable format and stores the converted value in the memory referenced by c.
-
-This routine puts an unsigned long value to a 4 byte character stream.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c} & Pointer to memory to hold converted value \\
-\hline
-{\em ul} & Input value to be converted \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbFile_a78bd8a11dce102647095baf3aff2b006}\label{classxb_1_1xbFile_a78bd8a11dce102647095baf3aff2b006}}
-\index{xb::xbDbf@{xb::xbDbf}!FileExists@{FileExists}}
-\index{FileExists@{FileExists}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{FileExists()}{FileExists()}\hspace{0.1cm}{\footnotesize\ttfamily [1/4]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+File\+::\+File\+Exists (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Determines if a file exists.
-
-\begin{DoxyReturn}{Returns}
-xb\+True if file exists~\newline
- xb\+False if file does not exist
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a61130b4fbf4cf9d5972dcb4993de2f94}\label{classxb_1_1xbFile_a61130b4fbf4cf9d5972dcb4993de2f94}}
-\index{xb::xbDbf@{xb::xbDbf}!FileExists@{FileExists}}
-\index{FileExists@{FileExists}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{FileExists()}{FileExists()}\hspace{0.1cm}{\footnotesize\ttfamily [2/4]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+File\+::\+File\+Exists (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Determines if a file exists.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+File\+Name} & -\/ file name to check for\\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-xb\+True if file exists~\newline
- xb\+False if file does not exist
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a0592168f39a10f2a401a88ef781f6148}\label{classxb_1_1xbFile_a0592168f39a10f2a401a88ef781f6148}}
-\index{xb::xbDbf@{xb::xbDbf}!FileExists@{FileExists}}
-\index{FileExists@{FileExists}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{FileExists()}{FileExists()}\hspace{0.1cm}{\footnotesize\ttfamily [3/4]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+File\+::\+File\+Exists (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name, }\item[{xb\+Int16}]{i\+Option }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Determines if a file exists.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+File\+Name} & -\/ file name to check for \\
-\hline
-{\em i\+Option} & if 1, assume this is a request for a dbf file and check for the a dbt memo file also, returns true if both files are found\\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-xb\+True if both dbf and dbt files exist~\newline
- xb\+False if file does not exist
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a174d8a6aabc9cfcd32fedbd1e5b13ddd}\label{classxb_1_1xbFile_a174d8a6aabc9cfcd32fedbd1e5b13ddd}}
-\index{xb::xbDbf@{xb::xbDbf}!FileExists@{FileExists}}
-\index{FileExists@{FileExists}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{FileExists()}{FileExists()}\hspace{0.1cm}{\footnotesize\ttfamily [4/4]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+File\+::\+File\+Exists (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Option }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Determines if a file exists.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Option} & if 1, assume this is a request for a dbf file and check for the a dbt memo file also, returns true if both files are found\\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-xb\+True if both files exist~\newline
- xb\+False if file does not exist
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a7fa837938a32dc9ca3fbc81cbaf50f59}\label{classxb_1_1xbFile_a7fa837938a32dc9ca3fbc81cbaf50f59}}
-\index{xb::xbDbf@{xb::xbDbf}!FileIsOpen@{FileIsOpen}}
-\index{FileIsOpen@{FileIsOpen}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{FileIsOpen()}{FileIsOpen()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+File\+::\+File\+Is\+Open (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Determines if file is open.
-
-\begin{DoxyReturn}{Returns}
-xb\+True if file is open~\newline
- xb\+False if file is not open
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_abb9e20c5efacd4fea80f1515abbc6b55}\label{classxb_1_1xbDbf_abb9e20c5efacd4fea80f1515abbc6b55}}
-\index{xb::xbDbf@{xb::xbDbf}!GetAutoCommit@{GetAutoCommit}}
-\index{GetAutoCommit@{GetAutoCommit}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetAutoCommit()}{GetAutoCommit()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Auto\+Commit (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get auto commit setting.
-
-This routine returns the table setting if set, otherwise returns the system level setting.
-
-\begin{DoxyReturn}{Returns}
-Not 0 -\/ Auto commit on for this table.~\newline
- 0 -\/ Auto commit off for this table.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_ae0c00226fd2ea7a67f101e795467ed68}\label{classxb_1_1xbDbf_ae0c00226fd2ea7a67f101e795467ed68}}
-\index{xb::xbDbf@{xb::xbDbf}!GetAutoCommit@{GetAutoCommit}}
-\index{GetAutoCommit@{GetAutoCommit}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetAutoCommit()}{GetAutoCommit()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Auto\+Commit (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Option }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get auto commit setting.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Option} & 0 -\/ Specific setting for this table~\newline
- 1 -\/ If this table should be auto updated (takes DBMS setting into account) \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Not 0 -\/ Auto commit on for this table.~\newline
- 0 -\/ Auto commit off for this table.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a638e14262410a1627819f016a16cdce2}\label{classxb_1_1xbFile_a638e14262410a1627819f016a16cdce2}}
-\index{xb::xbDbf@{xb::xbDbf}!GetBlockSize@{GetBlockSize}}
-\index{GetBlockSize@{GetBlockSize}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetBlockSize()}{GetBlockSize()}}
-{\footnotesize\ttfamily xb\+UInt32 xb\+::xb\+File\+::\+Get\+Block\+Size (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the block size.
-
-\begin{DoxyReturn}{Returns}
-Block Size
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_ad0827a43c025c1184ffebab74cc9e779}\label{classxb_1_1xbDbf_ad0827a43c025c1184ffebab74cc9e779}}
-\index{xb::xbDbf@{xb::xbDbf}!GetBof@{GetBof}}
-\index{GetBof@{GetBof}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetBof()}{GetBof()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Dbf\+::\+Get\+Bof (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get a pointer to the current index object.
-
-\begin{DoxyReturn}{Returns}
-Pointer to current index.
-\end{DoxyReturn}
-Return true if dbf file empty or positioned to the first record
-
-\begin{DoxyReturn}{Returns}
-Returns true if dbf file is empty or positioned on the first record.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a643a80a3792a52760c8e09ba18719503}\label{classxb_1_1xbDbf_a643a80a3792a52760c8e09ba18719503}}
-\index{xb::xbDbf@{xb::xbDbf}!GetCurRecNo@{GetCurRecNo}}
-\index{GetCurRecNo@{GetCurRecNo}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetCurRecNo()}{GetCurRecNo()}}
-{\footnotesize\ttfamily xb\+UInt32 xb\+::xb\+Dbf\+::\+Get\+Cur\+Rec\+No (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Return the current record number.
-
-\begin{DoxyReturn}{Returns}
-Returns the current record number.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}\label{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}}
-\index{xb::xbDbf@{xb::xbDbf}!GetDataDirectory@{GetDataDirectory}}
-\index{GetDataDirectory@{GetDataDirectory}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetDataDirectory()}{GetDataDirectory()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Data\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the current data directory.
-
-\begin{DoxyReturn}{Returns}
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing the current data directory where the database files are stored.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_ac624e06a97666bfd64b4f252b4548b36}\label{classxb_1_1xbDbf_ac624e06a97666bfd64b4f252b4548b36}}
-\index{xb::xbDbf@{xb::xbDbf}!GetDateField@{GetDateField}}
-\index{GetDateField@{GetDateField}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetDateField()}{GetDateField()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Date\+Field (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{\mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&}]{dt\+Field\+Value }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} field for field name.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Field\+Name} & Name of field to retrieve. \\
-\hline
-{\em dt\+Field\+Value} & Output field value. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_af78ef1fba949463ff7f829d3cffc4555}\label{classxb_1_1xbDbf_af78ef1fba949463ff7f829d3cffc4555}}
-\index{xb::xbDbf@{xb::xbDbf}!GetDateField@{GetDateField}}
-\index{GetDateField@{GetDateField}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetDateField()}{GetDateField()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Date\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{\mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&}]{dt\+Field\+Value }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} field for field number.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Field\+No} & Number of field to retrieve. \\
-\hline
-{\em dt\+Field\+Value} & Output field value. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_ac1110d867ba297a52c8b0e83e88f05e6}\label{classxb_1_1xbDbf_ac1110d867ba297a52c8b0e83e88f05e6}}
-\index{xb::xbDbf@{xb::xbDbf}!GetDbfStatus@{GetDbfStatus}}
-\index{GetDbfStatus@{GetDbfStatus}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetDbfStatus()}{GetDbfStatus()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Dbf\+Status (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Return the current dbf status.
-
-\begin{DoxyReturn}{Returns}
-0 = closed~\newline
- 1 = open~\newline
- 2 = updates pending~\newline
-
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}\label{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}}
-\index{xb::xbDbf@{xb::xbDbf}!GetDefaultAutoCommit@{GetDefaultAutoCommit}}
-\index{GetDefaultAutoCommit@{GetDefaultAutoCommit}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetDefaultAutoCommit()}{GetDefaultAutoCommit()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Ssv\+::\+Get\+Default\+Auto\+Commit (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the default auto commit setting.
-
-When auto commit is enabled, the library will automatically post any updates when moving off an updated record or closing files. If auto commit is disabled, the application program will need to explicitly update the tables using using dbf-\/\texorpdfstring{$>$}{>}Put() and dbf-\/\texorpdfstring{$>$}{>}\mbox{\hyperlink{classxb_1_1xbDbf_a5b412dd796241673eb1aa2c93513d69b}{Append\+Record()}}.
-
-\begin{DoxyReturn}{Returns}
-xb\+True if auto commit is turned on~\newline
- xb\+False is auto commit is turned off
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a6fbb9c3a550ab0b3378f9586a57791d2}\label{classxb_1_1xbSsv_a6fbb9c3a550ab0b3378f9586a57791d2}}
-\index{xb::xbDbf@{xb::xbDbf}!GetDefaultDateFormat@{GetDefaultDateFormat}}
-\index{GetDefaultDateFormat@{GetDefaultDateFormat}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetDefaultDateFormat()}{GetDefaultDateFormat()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Default\+Date\+Format (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the default date format.
-
-\begin{DoxyReturn}{Returns}
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing the default date format.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_acd0fb2166b2bff7e8a1cf65a7bc8be1e}\label{classxb_1_1xbFile_acd0fb2166b2bff7e8a1cf65a7bc8be1e}}
-\index{xb::xbDbf@{xb::xbDbf}!GetDirectory@{GetDirectory}}
-\index{GetDirectory@{GetDirectory}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetDirectory()}{GetDirectory()}}
-{\footnotesize\ttfamily const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+File\+::\+Get\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the directory name.
-
-\begin{DoxyReturn}{Returns}
-the directory name of the file
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a6e6774df0f2d7733f4b25a9989596d95}\label{classxb_1_1xbDbf_a6e6774df0f2d7733f4b25a9989596d95}}
-\index{xb::xbDbf@{xb::xbDbf}!GetDoubleField@{GetDoubleField}}
-\index{GetDoubleField@{GetDoubleField}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetDoubleField()}{GetDoubleField()}\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Double\+Field (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{\mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} \&}]{d\+Field\+Value }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get xb\+Double field for field name.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Field\+Name} & Name of field to retrieve. \\
-\hline
-{\em d\+Field\+Value} & Output field value. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a4556041a7ff2f6b6f986729901c11f08}\label{classxb_1_1xbDbf_a4556041a7ff2f6b6f986729901c11f08}}
-\index{xb::xbDbf@{xb::xbDbf}!GetDoubleField@{GetDoubleField}}
-\index{GetDoubleField@{GetDoubleField}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetDoubleField()}{GetDoubleField()}\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Double\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{\mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} \&}]{d\+Field\+Value }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get xb\+Double field for field number.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Field\+No} & Number of field to retrieve. \\
-\hline
-{\em d\+Field\+Value} & Output field value. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a2370b5e736931441a5968649291b9ef4}\label{classxb_1_1xbDbf_a2370b5e736931441a5968649291b9ef4}}
-\index{xb::xbDbf@{xb::xbDbf}!GetDoubleField@{GetDoubleField}}
-\index{GetDoubleField@{GetDoubleField}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetDoubleField()}{GetDoubleField()}\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Double\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{\mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} \&}]{d\+Field\+Value, }\item[{xb\+Int16}]{i\+Rec\+Buf\+Sw }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get xb\+Double field for field number.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Field\+No} & Number of field to retrieve. \\
-\hline
-{\em d\+Field\+Value} & Output field value. \\
-\hline
-{\em i\+Rec\+Buf\+Sw} & 0 -\/ Record buffer with any updates.~\newline
-1 -\/ Record buffer with original data. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}\label{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}}
-\index{xb::xbDbf@{xb::xbDbf}!GetEndianType@{GetEndianType}}
-\index{GetEndianType@{GetEndianType}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetEndianType()}{GetEndianType()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Ssv\+::\+Get\+Endian\+Type (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the Endian type.
-
-\begin{DoxyReturn}{Returns}
-B -\/ Big endian~\newline
- L -\/ Little endian~\newline
-
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a256dc1f98626fa77da24e91a38ab5b4d}\label{classxb_1_1xbDbf_a256dc1f98626fa77da24e91a38ab5b4d}}
-\index{xb::xbDbf@{xb::xbDbf}!GetEof@{GetEof}}
-\index{GetEof@{GetEof}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetEof()}{GetEof()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Dbf\+::\+Get\+Eof (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Return true if dbf file empty or positioned to the last record.
-
-\begin{DoxyReturn}{Returns}
-Returns true if dbf file is empty or positioned on the last record.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}\label{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}}
-\index{xb::xbDbf@{xb::xbDbf}!GetErrorMessage@{GetErrorMessage}}
-\index{GetErrorMessage@{GetErrorMessage}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetErrorMessage()}{GetErrorMessage()}}
-{\footnotesize\ttfamily const char $\ast$ xb\+::xb\+Ssv\+::\+Get\+Error\+Message (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Error\+Code }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get an error message.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Error\+Code} & Error\+Code is the error number of description to be returned. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Returns a pointer to a string containing a text description for the error code.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a9a0fcf7e2040ab483e3807927833cb26}\label{classxb_1_1xbDbf_a9a0fcf7e2040ab483e3807927833cb26}}
-\index{xb::xbDbf@{xb::xbDbf}!GetField@{GetField}}
-\index{GetField@{GetField}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetField()}{GetField()}\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Field (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Value }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} field for field name.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Field\+Name} & Name of field to retrieve \\
-\hline
-{\em s\+Field\+Value} & Output field value. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_ac81f078f3c932f0da60ad1fbdd848d3e}\label{classxb_1_1xbDbf_ac81f078f3c932f0da60ad1fbdd848d3e}}
-\index{xb::xbDbf@{xb::xbDbf}!GetField@{GetField}}
-\index{GetField@{GetField}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetField()}{GetField()}\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Value }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get field data for field number.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Field\+No} & Number of field to retrieve. \\
-\hline
-{\em s\+Field\+Value} & Output field value. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_ad245a26eb8b79610c9ae7bab19e05513}\label{classxb_1_1xbDbf_ad245a26eb8b79610c9ae7bab19e05513}}
-\index{xb::xbDbf@{xb::xbDbf}!GetField@{GetField}}
-\index{GetField@{GetField}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetField()}{GetField()}\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Value, }\item[{xb\+Int16}]{i\+Rec\+Buf\+Sw }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get field data for field number.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Field\+No} & Number of field to retrieve. \\
-\hline
-{\em s\+Field\+Value} & Output field value. \\
-\hline
-{\em i\+Rec\+Buf\+Sw} & 0 -\/ Record buffer with any updates.~\newline
-1 -\/ Record buffer with original data. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_add27d8ef555a13b336b8c804165dc15e}\label{classxb_1_1xbDbf_add27d8ef555a13b336b8c804165dc15e}}
-\index{xb::xbDbf@{xb::xbDbf}!GetFieldCnt@{GetFieldCnt}}
-\index{GetFieldCnt@{GetFieldCnt}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetFieldCnt()}{GetFieldCnt()}}
-{\footnotesize\ttfamily xb\+Int32 xb\+::xb\+Dbf\+::\+Get\+Field\+Cnt (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Return the number of fields in the table.
-
-\begin{DoxyReturn}{Returns}
-The number of fields in the table.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a607f774fcd6dc0b9913d7a7801b60db2}\label{classxb_1_1xbDbf_a607f774fcd6dc0b9913d7a7801b60db2}}
-\index{xb::xbDbf@{xb::xbDbf}!GetFieldDecimal@{GetFieldDecimal}}
-\index{GetFieldDecimal@{GetFieldDecimal}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetFieldDecimal()}{GetFieldDecimal()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Field\+Decimal (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{xb\+Int16 \&}]{i\+Field\+Decimal }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get decimal for field name.
-
-This routine retreives a field\textquotesingle{}s decimal length.
-\begin{DoxyParams}{Parameters}
-{\em s\+Field\+Name} & Name of field to retrieve \\
-\hline
-{\em i\+Field\+Decimal} & Output field value. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_abcb4defad2e1b6e67f63cc60737ad840}\label{classxb_1_1xbDbf_abcb4defad2e1b6e67f63cc60737ad840}}
-\index{xb::xbDbf@{xb::xbDbf}!GetFieldDecimal@{GetFieldDecimal}}
-\index{GetFieldDecimal@{GetFieldDecimal}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetFieldDecimal()}{GetFieldDecimal()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Field\+Decimal (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{xb\+Int16 \&}]{i\+Field\+Decimal }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get decimal for field number.
-
-This routine retreives a field\textquotesingle{}s decimal length.
-\begin{DoxyParams}{Parameters}
-{\em i\+Field\+No} & Number of field to retrieve \\
-\hline
-{\em i\+Field\+Decimal} & Output field value. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_acf06dbccdba1a4bcd90fa0bea6cca59b}\label{classxb_1_1xbDbf_acf06dbccdba1a4bcd90fa0bea6cca59b}}
-\index{xb::xbDbf@{xb::xbDbf}!GetFieldLen@{GetFieldLen}}
-\index{GetFieldLen@{GetFieldLen}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetFieldLen()}{GetFieldLen()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Field\+Len (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{xb\+Int16 \&}]{i\+Field\+Len }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get field length for field name.
-
-This function retrieves a field\textquotesingle{}s length.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Field\+Name} & Name of field to retrieve \\
-\hline
-{\em i\+Field\+Len} & Output field length value. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_adda4302b58cc6109b048f19d9b68bbd4}\label{classxb_1_1xbDbf_adda4302b58cc6109b048f19d9b68bbd4}}
-\index{xb::xbDbf@{xb::xbDbf}!GetFieldLen@{GetFieldLen}}
-\index{GetFieldLen@{GetFieldLen}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetFieldLen()}{GetFieldLen()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Field\+Len (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{xb\+Int16 \&}]{i\+Field\+Len }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get field length for field number.
-
-This function retrieves a field\textquotesingle{}s length.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Field\+No} & Name of field to retrieve \\
-\hline
-{\em i\+Field\+Len} & Output field length value. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a5e3e4368bfba1724c016b8859023e34c}\label{classxb_1_1xbDbf_a5e3e4368bfba1724c016b8859023e34c}}
-\index{xb::xbDbf@{xb::xbDbf}!GetFieldName@{GetFieldName}}
-\index{GetFieldName@{GetFieldName}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetFieldName()}{GetFieldName()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Field\+Name (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Returns the name of the specified field.
-
-Returns a pointer to the name for the field specified by i\+Field\+No.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Field\+No} & Number of field. \\
-\hline
-{\em s\+Field\+Name} & Output variable containing the field name. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_aad9029e63909aeb77d8473256d88bea8}\label{classxb_1_1xbDbf_aad9029e63909aeb77d8473256d88bea8}}
-\index{xb::xbDbf@{xb::xbDbf}!GetFieldNo@{GetFieldNo}}
-\index{GetFieldNo@{GetFieldNo}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetFieldNo()}{GetFieldNo()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Field\+No (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get field ID number for a given field name.
-
-Returns the field number for the named field.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Field\+Name} & Name of field. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Number of field or XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_aed9113b5095c6df1b9c854cbd0d8047b}\label{classxb_1_1xbDbf_aed9113b5095c6df1b9c854cbd0d8047b}}
-\index{xb::xbDbf@{xb::xbDbf}!GetFieldNo@{GetFieldNo}}
-\index{GetFieldNo@{GetFieldNo}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetFieldNo()}{GetFieldNo()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Field\+No (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{xb\+Int16 \&}]{i\+Field\+No }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get the field number for name.
-
-Returns the field number for the named field.
-
-All field get/put methods require either a field number or field name as one of the parameters. Using the methods that take the field numbers will yield slightly better performance because the methods that take a name, have to look up the number.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Field\+Name} & Name of field. \\
-\hline
-{\em i\+Field\+No} & Output field number for the given name. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Number of field named fld\+Name.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a181db879f1a75f93a34c03513a0b2fea}\label{classxb_1_1xbDbf_a181db879f1a75f93a34c03513a0b2fea}}
-\index{xb::xbDbf@{xb::xbDbf}!GetFieldType@{GetFieldType}}
-\index{GetFieldType@{GetFieldType}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetFieldType()}{GetFieldType()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Field\+Type (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{char \&}]{c\+Field\+Type }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get field type for field name.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Field\+Name} & Field name. \\
-\hline
-{\em c\+Field\+Type} & Output field type. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a5143973e4f165651152aa13c8fd45f84}\label{classxb_1_1xbDbf_a5143973e4f165651152aa13c8fd45f84}}
-\index{xb::xbDbf@{xb::xbDbf}!GetFieldType@{GetFieldType}}
-\index{GetFieldType@{GetFieldType}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetFieldType()}{GetFieldType()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Field\+Type (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{char \&}]{c\+Field\+Type }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get field type for field number.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Field\+No} & Field number. \\
-\hline
-{\em c\+Field\+Type} & Output field type. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_af5127c92892816e9bbc5c19653c4147a}\label{classxb_1_1xbFile_af5127c92892816e9bbc5c19653c4147a}}
-\index{xb::xbDbf@{xb::xbDbf}!GetFileDirPart@{GetFileDirPart}}
-\index{GetFileDirPart@{GetFileDirPart}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetFileDirPart()}{GetFileDirPart()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+File\+Dir\+Part (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Complete\+File\+Name\+In, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Dir\+Part\+Out }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the directory part of the file name.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Complete\+File\+Name\+In} & -\/ a fully qualfied input file name \\
-\hline
-{\em s\+File\+Dir\+Part\+Out} & -\/ the returned directory name part out of s\+Complete\+File\+Name\+In \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a60c53998e3d1b694134b20a87bc9bf5a}\label{classxb_1_1xbFile_a60c53998e3d1b694134b20a87bc9bf5a}}
-\index{xb::xbDbf@{xb::xbDbf}!GetFileDirPart@{GetFileDirPart}}
-\index{GetFileDirPart@{GetFileDirPart}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetFileDirPart()}{GetFileDirPart()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+File\+Dir\+Part (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Dir\+Part\+Out }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the directory part of the file name.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+File\+Dir\+Part\+Out} & -\/ the returned directory name \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_ab289b6ffe955321160c1f90220c22e25}\label{classxb_1_1xbFile_ab289b6ffe955321160c1f90220c22e25}}
-\index{xb::xbDbf@{xb::xbDbf}!GetFileExtPart@{GetFileExtPart}}
-\index{GetFileExtPart@{GetFileExtPart}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetFileExtPart()}{GetFileExtPart()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+File\+Ext\+Part (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Complete\+File\+Name\+In, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Ext\+Part\+Out }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the extension part of the file name.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Complete\+File\+Name\+In} & -\/ a fully qualfied input file name\\
-\hline
-{\em s\+File\+Ext\+Part\+Out} & -\/ the returned directory name part out of s\+Complete\+File\+Name\+In \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a57a9222e5cbb51019d4eeb2c3ac89fa2}\label{classxb_1_1xbFile_a57a9222e5cbb51019d4eeb2c3ac89fa2}}
-\index{xb::xbDbf@{xb::xbDbf}!GetFileExtPart@{GetFileExtPart}}
-\index{GetFileExtPart@{GetFileExtPart}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetFileExtPart()}{GetFileExtPart()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+File\+Ext\+Part (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name\+Ext\+Out }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the extension part of the file name.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+File\+Name\+Ext\+Out} & -\/ the returned extension part out of s\+Complete\+File\+Name\+In \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a02df78f4c90313243f508fc56b95aba8}\label{classxb_1_1xbFile_a02df78f4c90313243f508fc56b95aba8}}
-\index{xb::xbDbf@{xb::xbDbf}!GetFileMtime@{GetFileMtime}}
-\index{GetFileMtime@{GetFileMtime}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetFileMtime()}{GetFileMtime()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+File\+Mtime (\begin{DoxyParamCaption}\item[{time\+\_\+t \&}]{mtime }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the time of last file modification timestamp as reported by the OS.
-
-
-\begin{DoxyParams}{Parameters}
-{\em mtime} & -\/ returned time of last file modification \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_ac95cb882ccbcdedc9a233c6ad9fed07a}\label{classxb_1_1xbFile_ac95cb882ccbcdedc9a233c6ad9fed07a}}
-\index{xb::xbDbf@{xb::xbDbf}!GetFileName@{GetFileName}}
-\index{GetFileName@{GetFileName}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetFileName()}{GetFileName()}}
-{\footnotesize\ttfamily const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+File\+::\+Get\+File\+Name (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the file name.
-
-\begin{DoxyReturn}{Returns}
-the file name portion of the file
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a6110763c5ae996b72c7a62c15bdecc73}\label{classxb_1_1xbFile_a6110763c5ae996b72c7a62c15bdecc73}}
-\index{xb::xbDbf@{xb::xbDbf}!GetFileNamePart@{GetFileNamePart}}
-\index{GetFileNamePart@{GetFileNamePart}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetFileNamePart()}{GetFileNamePart()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+File\+Name\+Part (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Complete\+File\+Name\+In, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name\+Part\+Out }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the name part of the file name.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Complete\+File\+Name\+In} & -\/ a fully qualified input file name \\
-\hline
-{\em s\+File\+Name\+Part\+Out} & -\/ the returned file name part out of s\+Complete\+File\+Name\+In \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a81422b3dd52763d2cc6c77237ec9af0a}\label{classxb_1_1xbFile_a81422b3dd52763d2cc6c77237ec9af0a}}
-\index{xb::xbDbf@{xb::xbDbf}!GetFileNamePart@{GetFileNamePart}}
-\index{GetFileNamePart@{GetFileNamePart}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetFileNamePart()}{GetFileNamePart()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+File\+Name\+Part (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name\+Part\+Out }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the name part of the file name.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+File\+Name\+Part\+Out} & -\/ the returned file name part out of s\+Complete\+File\+Name\+In \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a50b63c39e49d44e52078038027b24cc5}\label{classxb_1_1xbFile_a50b63c39e49d44e52078038027b24cc5}}
-\index{xb::xbDbf@{xb::xbDbf}!GetFileSize@{GetFileSize}}
-\index{GetFileSize@{GetFileSize}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetFileSize()}{GetFileSize()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+File\+Size (\begin{DoxyParamCaption}\item[{xb\+UInt64 \&}]{ull\+File\+Size }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the size of the file as reported by the OS.
-
-
-\begin{DoxyParams}{Parameters}
-{\em ull\+File\+Size} & -\/ unsigned long long field as output \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a5548236d38d43b89ae29b9a015b1f678}\label{classxb_1_1xbFile_a5548236d38d43b89ae29b9a015b1f678}}
-\index{xb::xbDbf@{xb::xbDbf}!GetFileType@{GetFileType}}
-\index{GetFileType@{GetFileType}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetFileType()}{GetFileType()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+File\+Type (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Type\+Out }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the file type aka Capitalized file extension.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+File\+Type\+Out} & -\/ the returned extension part out of s\+Complete\+File\+Name\+In \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a6fc5b8a3e2f177d5ceaf9d975cbb5226}\label{classxb_1_1xbDbf_a6fc5b8a3e2f177d5ceaf9d975cbb5226}}
-\index{xb::xbDbf@{xb::xbDbf}!GetFirstRecord@{GetFirstRecord}}
-\index{GetFirstRecord@{GetFirstRecord}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetFirstRecord()}{GetFirstRecord()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+First\+Record (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get the first record.
-
-Get the first not deleted record. This routines skips over any deleted records. \begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_acb78991e8435edd36318c653cb977c1a}\label{classxb_1_1xbDbf_acb78991e8435edd36318c653cb977c1a}}
-\index{xb::xbDbf@{xb::xbDbf}!GetFirstRecord@{GetFirstRecord}}
-\index{GetFirstRecord@{GetFirstRecord}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetFirstRecord()}{GetFirstRecord()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+First\+Record (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Option }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get the first record.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Option} & XB\+\_\+\+ALL\+\_\+\+RECS -\/ Get the first record, deleted or not.~\newline
- XB\+\_\+\+ACTIVE\+\_\+\+RECS -\/ Get the first active record.~\newline
- XB\+\_\+\+DELETED\+\_\+\+RECS -\/ Get the first deleted record.~\newline
- \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a81ef2f36f921d7ece066a592eb6393eb}\label{classxb_1_1xbDbf_a81ef2f36f921d7ece066a592eb6393eb}}
-\index{xb::xbDbf@{xb::xbDbf}!GetFloatField@{GetFloatField}}
-\index{GetFloatField@{GetFloatField}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetFloatField()}{GetFloatField()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Float\+Field (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{\mbox{\hyperlink{namespacexb_a83aa6a550398db55973aa9fb4257e66e}{xb\+Float}} \&}]{f\+Field\+Value }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get xb\+Float field for field name.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Field\+Name} & Number of field to retrieve. \\
-\hline
-{\em f\+Field\+Value} & Output field value. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a3443f646038ced14425f067a59c0f2da}\label{classxb_1_1xbDbf_a3443f646038ced14425f067a59c0f2da}}
-\index{xb::xbDbf@{xb::xbDbf}!GetFloatField@{GetFloatField}}
-\index{GetFloatField@{GetFloatField}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetFloatField()}{GetFloatField()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Float\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{\mbox{\hyperlink{namespacexb_a83aa6a550398db55973aa9fb4257e66e}{xb\+Float}} \&}]{f\+Field\+Value }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get xb\+Float field for field number.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Field\+No} & Number of field to retrieve. \\
-\hline
-{\em f\+Field\+Value} & Output field value. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a31b4e641f93206ba23e2a5a27491dcd4}\label{classxb_1_1xbFile_a31b4e641f93206ba23e2a5a27491dcd4}}
-\index{xb::xbDbf@{xb::xbDbf}!GetFqFileName@{GetFqFileName}}
-\index{GetFqFileName@{GetFqFileName}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetFqFileName()}{GetFqFileName()}}
-{\footnotesize\ttfamily const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+File\+::\+Get\+Fq\+File\+Name (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the fully qualified file name.
-
-\begin{DoxyReturn}{Returns}
-the fully qualfied name of the file
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_ad56be2756b7a9f8318d9ba5cf215dafb}\label{classxb_1_1xbDbf_ad56be2756b7a9f8318d9ba5cf215dafb}}
-\index{xb::xbDbf@{xb::xbDbf}!GetHeaderLen@{GetHeaderLen}}
-\index{GetHeaderLen@{GetHeaderLen}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetHeaderLen()}{GetHeaderLen()}}
-{\footnotesize\ttfamily virtual xb\+UInt16 xb\+::xb\+Dbf\+::\+Get\+Header\+Len (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}\label{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}}
-\index{xb::xbDbf@{xb::xbDbf}!GetHomeDir@{GetHomeDir}}
-\index{GetHomeDir@{GetHomeDir}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetHomeDir()}{GetHomeDir()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Get\+Home\+Dir (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Home\+Dir\+Out }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get home directory.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Home\+Dir\+Out} & -\/ Output home directory for current user. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-void
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a49e667f9c8ee55c36444702663fc5964}\label{classxb_1_1xbDbf_a49e667f9c8ee55c36444702663fc5964}}
-\index{xb::xbDbf@{xb::xbDbf}!GetLastRecord@{GetLastRecord}}
-\index{GetLastRecord@{GetLastRecord}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetLastRecord()}{GetLastRecord()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Last\+Record (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get the last record.
-
-Get the last not deleted record. This routines skips over any deleted records. \begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a8ccfa2291417412b6894940d1b92f9a6}\label{classxb_1_1xbDbf_a8ccfa2291417412b6894940d1b92f9a6}}
-\index{xb::xbDbf@{xb::xbDbf}!GetLastRecord@{GetLastRecord}}
-\index{GetLastRecord@{GetLastRecord}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetLastRecord()}{GetLastRecord()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Last\+Record (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Option }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get the last record.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Option} & XB\+\_\+\+ALL\+\_\+\+RECS -\/ Get the last record, deleted or not.~\newline
- XB\+\_\+\+ACTIVE\+\_\+\+RECS -\/ Get the last active record.~\newline
- XB\+\_\+\+DELETED\+\_\+\+RECS -\/ Get the last deleted record.~\newline
- \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}\label{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}}
-\index{xb::xbDbf@{xb::xbDbf}!GetLogDirectory@{GetLogDirectory}}
-\index{GetLogDirectory@{GetLogDirectory}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetLogDirectory()}{GetLogDirectory()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Log\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}\label{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}}
-\index{xb::xbDbf@{xb::xbDbf}!GetLogFileName@{GetLogFileName}}
-\index{GetLogFileName@{GetLogFileName}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetLogFileName()}{GetLogFileName()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Log\+File\+Name (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbDbf_a943cea7fde1b06c1a05184193eff8d2d}\label{classxb_1_1xbDbf_a943cea7fde1b06c1a05184193eff8d2d}}
-\index{xb::xbDbf@{xb::xbDbf}!GetLogicalField@{GetLogicalField}}
-\index{GetLogicalField@{GetLogicalField}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetLogicalField()}{GetLogicalField()}\hspace{0.1cm}{\footnotesize\ttfamily [1/5]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Logical\+Field (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \&}]{b\+Field\+Value }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get logical field for field name.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Field\+Name} & Name of field to retrieve. \\
-\hline
-{\em b\+Field\+Value} & Output field value. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a9cd6819bfd932ff8507e54d9cb9a624e}\label{classxb_1_1xbDbf_a9cd6819bfd932ff8507e54d9cb9a624e}}
-\index{xb::xbDbf@{xb::xbDbf}!GetLogicalField@{GetLogicalField}}
-\index{GetLogicalField@{GetLogicalField}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetLogicalField()}{GetLogicalField()}\hspace{0.1cm}{\footnotesize\ttfamily [2/5]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Logical\+Field (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Value }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get logical field for field name.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Field\+Name} & Name of field to retrieve. \\
-\hline
-{\em s\+Field\+Value} & Output field value. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_aaf615ddcf08f8cd14efc713c2a8d7ae1}\label{classxb_1_1xbDbf_aaf615ddcf08f8cd14efc713c2a8d7ae1}}
-\index{xb::xbDbf@{xb::xbDbf}!GetLogicalField@{GetLogicalField}}
-\index{GetLogicalField@{GetLogicalField}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetLogicalField()}{GetLogicalField()}\hspace{0.1cm}{\footnotesize\ttfamily [3/5]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Logical\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \&}]{b\+Field\+Value }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get logical field for field number.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Field\+No} & Number of field to retrieve. \\
-\hline
-{\em b\+Field\+Value} & Output field value. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_ab28feef20c988b0a6f1c1911a45377b0}\label{classxb_1_1xbDbf_ab28feef20c988b0a6f1c1911a45377b0}}
-\index{xb::xbDbf@{xb::xbDbf}!GetLogicalField@{GetLogicalField}}
-\index{GetLogicalField@{GetLogicalField}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetLogicalField()}{GetLogicalField()}\hspace{0.1cm}{\footnotesize\ttfamily [4/5]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Logical\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \&}]{b\+Field\+Value, }\item[{xb\+Int16}]{i\+Rec\+Buf\+Sw }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get logical field for field number.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Field\+No} & Number of field to retrieve. \\
-\hline
-{\em b\+Field\+Value} & Output field value. \\
-\hline
-{\em i\+Rec\+Buf\+Sw} & 0 -\/ Record buffer with any updates.~\newline
-1 -\/ Record buffer with original data. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a3254f091fc4a1404abed3dd2bcdd6ce6}\label{classxb_1_1xbDbf_a3254f091fc4a1404abed3dd2bcdd6ce6}}
-\index{xb::xbDbf@{xb::xbDbf}!GetLogicalField@{GetLogicalField}}
-\index{GetLogicalField@{GetLogicalField}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetLogicalField()}{GetLogicalField()}\hspace{0.1cm}{\footnotesize\ttfamily [5/5]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Logical\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Value }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get logical field for field number.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Field\+No} & Number of field to retrieve. \\
-\hline
-{\em s\+Field\+Value} & Output field value. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a7b8ef75b17941beac17e50e969b2d3db}\label{classxb_1_1xbDbf_a7b8ef75b17941beac17e50e969b2d3db}}
-\index{xb::xbDbf@{xb::xbDbf}!GetLongField@{GetLongField}}
-\index{GetLongField@{GetLongField}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetLongField()}{GetLongField()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Long\+Field (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{xb\+Int32 \&}]{l\+Field\+Value }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get long field for field name.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Field\+Name} & Number of field to retrieve. \\
-\hline
-{\em l\+Field\+Value} & Output field value. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_abe525c0820640e0a9e169d0b7913cfa1}\label{classxb_1_1xbDbf_abe525c0820640e0a9e169d0b7913cfa1}}
-\index{xb::xbDbf@{xb::xbDbf}!GetLongField@{GetLongField}}
-\index{GetLongField@{GetLongField}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetLongField()}{GetLongField()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Long\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{xb\+Int32 \&}]{l\+Field\+Value }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get long field for field number.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Field\+No} & Number of field to retrieve. \\
-\hline
-{\em l\+Field\+Value} & Output field value. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}\label{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}}
-\index{xb::xbDbf@{xb::xbDbf}!GetMultiUser@{GetMultiUser}}
-\index{GetMultiUser@{GetMultiUser}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetMultiUser()}{GetMultiUser()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Ssv\+::\+Get\+Multi\+User (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the multi user setting.
-
-\begin{DoxyReturn}{Returns}
-xb\+True -\/ Multi user mode turned on.~\newline
- xb\+False -\/ Multi user mode turned off.~\newline
-
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_ab896fe3b734f556de578d30f92b18fe2}\label{classxb_1_1xbDbf_ab896fe3b734f556de578d30f92b18fe2}}
-\index{xb::xbDbf@{xb::xbDbf}!GetNextRecord@{GetNextRecord}}
-\index{GetNextRecord@{GetNextRecord}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetNextRecord()}{GetNextRecord()}\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Next\+Record (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get the next record.
-
-Get the next not deleted record. This routines skips over any deleted records. \begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a3191428a7a92d9107d8d42448884f2ac}\label{classxb_1_1xbDbf_a3191428a7a92d9107d8d42448884f2ac}}
-\index{xb::xbDbf@{xb::xbDbf}!GetNextRecord@{GetNextRecord}}
-\index{GetNextRecord@{GetNextRecord}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetNextRecord()}{GetNextRecord()}\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Next\+Record (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Option }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get the next record.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Option} & XB\+\_\+\+ALL\+\_\+\+RECS -\/ Get the next record, deleted or not.~\newline
- XB\+\_\+\+ACTIVE\+\_\+\+RECS -\/ Get the next active record.~\newline
- XB\+\_\+\+DELETED\+\_\+\+RECS -\/ Get the next deleted record.~\newline
- \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a18fdcb4ab15b36cd47fa6f6f7a540d1a}\label{classxb_1_1xbDbf_a18fdcb4ab15b36cd47fa6f6f7a540d1a}}
-\index{xb::xbDbf@{xb::xbDbf}!GetNextRecord@{GetNextRecord}}
-\index{GetNextRecord@{GetNextRecord}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetNextRecord()}{GetNextRecord()}\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Next\+Record (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Option, }\item[{xb\+UInt32}]{ul\+Start\+Rec }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get the next record.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Option} & XB\+\_\+\+ALL\+\_\+\+RECS -\/ Get the next record, deleted or not.~\newline
- XB\+\_\+\+ACTIVE\+\_\+\+RECS -\/ Get the next active record.~\newline
- XB\+\_\+\+DELETED\+\_\+\+RECS -\/ Get the next deleted record.~\newline
- \\
-\hline
-{\em ul\+Start\+Rec} & Get next record, starting from ul\+Start\+Rec. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a3c500dc9dac22c49496e4b29386b2dd3}\label{classxb_1_1xbFile_a3c500dc9dac22c49496e4b29386b2dd3}}
-\index{xb::xbDbf@{xb::xbDbf}!GetOpenMode@{GetOpenMode}}
-\index{GetOpenMode@{GetOpenMode}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetOpenMode()}{GetOpenMode()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+Open\+Mode (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the open mode of the file.
-
-\begin{DoxyReturn}{Returns}
-XB\+\_\+\+READ~\newline
- XB\+\_\+\+READ\+\_\+\+WRITE~\newline
- XB\+\_\+\+WRITE~\newline
-
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_ab3d248e5221b4f0809897cd43af17a1e}\label{classxb_1_1xbDbf_ab3d248e5221b4f0809897cd43af17a1e}}
-\index{xb::xbDbf@{xb::xbDbf}!GetPrevRecord@{GetPrevRecord}}
-\index{GetPrevRecord@{GetPrevRecord}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetPrevRecord()}{GetPrevRecord()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Prev\+Record (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get the previous record.
-
-Get the previous not deleted record. This routine skips over any deleted records. \begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a7eadc7b08d73003802b90584f7b33387}\label{classxb_1_1xbDbf_a7eadc7b08d73003802b90584f7b33387}}
-\index{xb::xbDbf@{xb::xbDbf}!GetPrevRecord@{GetPrevRecord}}
-\index{GetPrevRecord@{GetPrevRecord}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetPrevRecord()}{GetPrevRecord()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Prev\+Record (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Option }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get the previous record.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Option} & XB\+\_\+\+ALL\+\_\+\+RECS -\/ Get the previous record, deleted or not.~\newline
- XB\+\_\+\+ACTIVE\+\_\+\+RECS -\/ Get the previous active record.~\newline
- XB\+\_\+\+DELETED\+\_\+\+RECS -\/ Get the previous deleted record.~\newline
- \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_aabd146c0e1054ab905ec96aedd84b02e}\label{classxb_1_1xbDbf_aabd146c0e1054ab905ec96aedd84b02e}}
-\index{xb::xbDbf@{xb::xbDbf}!GetRawField@{GetRawField}}
-\index{GetRawField@{GetRawField}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetRawField()}{GetRawField()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Raw\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{char $\ast$}]{c\+Buf, }\item[{xb\+UInt32}]{ul\+Buf\+Size, }\item[{xb\+Int16}]{i\+Rec\+Buf\+Sw }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [protected]}, {\ttfamily [virtual]}}
-
-
-
-Get raw field data for field number.
-
-This is a protected method, used by other methods. This method would be subject to buffer overflows if made public.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Field\+No} & Number of field to retrieve. \\
-\hline
-{\em c\+Buf} & Pointer to buffer area provided by calling application program. \\
-\hline
-{\em ul\+Buf\+Size} & Size of data to copy \\
-\hline
-{\em i\+Rec\+Buf\+Sw} & 0 -\/ Record buffer with any updates.~\newline
-1 -\/ Record buffer with original data. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a26fba086b07caeab95066bf1c8d25161}\label{classxb_1_1xbDbf_a26fba086b07caeab95066bf1c8d25161}}
-\index{xb::xbDbf@{xb::xbDbf}!GetRecord@{GetRecord}}
-\index{GetRecord@{GetRecord}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetRecord()}{GetRecord()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Record (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{ul\+Rec\+No }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get record for specified record number.
-
-Retrieve a record from disk and load it into the record buffer. If auto commit is enabled and there are pending updates, this routine will flush the updates to disk before proceeding to ul\+Rec\+No.
-
-
-\begin{DoxyParams}{Parameters}
-{\em ul\+Rec\+No} & -\/ Record number to retrieve. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_aa3e38c4057d726a28a27d07a1610d124}\label{classxb_1_1xbDbf_aa3e38c4057d726a28a27d07a1610d124}}
-\index{xb::xbDbf@{xb::xbDbf}!GetRecordBuf@{GetRecordBuf}}
-\index{GetRecordBuf@{GetRecordBuf}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetRecordBuf()}{GetRecordBuf()}}
-{\footnotesize\ttfamily char $\ast$ xb\+::xb\+Dbf\+::\+Get\+Record\+Buf (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Opt = {\ttfamily 0} }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get pointer to record buffer.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Opt} & 0 for Rec\+Buf (current) or 1 for Rec\+Buf2 (original contents)\\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Pointer to record buffer.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_ac196ad55335e1f4789d698748434dc89}\label{classxb_1_1xbDbf_ac196ad55335e1f4789d698748434dc89}}
-\index{xb::xbDbf@{xb::xbDbf}!GetRecordCnt@{GetRecordCnt}}
-\index{GetRecordCnt@{GetRecordCnt}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetRecordCnt()}{GetRecordCnt()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Record\+Cnt (\begin{DoxyParamCaption}\item[{xb\+UInt32 \&}]{ul\+Rec\+Cnt }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get the current number of records in the dbf data file.
-
-
-\begin{DoxyParams}{Parameters}
-{\em ul\+Rec\+Cnt} & Output number of records in file. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a0aaa06d6028e75efc6b5131f7356ecce}\label{classxb_1_1xbDbf_a0aaa06d6028e75efc6b5131f7356ecce}}
-\index{xb::xbDbf@{xb::xbDbf}!GetRecordCount@{GetRecordCount}}
-\index{GetRecordCount@{GetRecordCount}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetRecordCount()}{GetRecordCount()}}
-{\footnotesize\ttfamily xb\+UInt32 xb\+::xb\+Dbf\+::\+Get\+Record\+Count (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get the current number of records in the dbf data file.
-
-\begin{DoxyReturn}{Returns}
-Record count or \href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_ab50d76c6e29e81e347a6feb04c2f62bb}\label{classxb_1_1xbDbf_ab50d76c6e29e81e347a6feb04c2f62bb}}
-\index{xb::xbDbf@{xb::xbDbf}!GetRecordLen@{GetRecordLen}}
-\index{GetRecordLen@{GetRecordLen}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetRecordLen()}{GetRecordLen()}}
-{\footnotesize\ttfamily xb\+UInt16 xb\+::xb\+Dbf\+::\+Get\+Record\+Len (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get the dbf record length.
-
-\begin{DoxyReturn}{Returns}
-Record length.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a9b63e05b77f477ff6109ff7b9432c1b6}\label{classxb_1_1xbFile_a9b63e05b77f477ff6109ff7b9432c1b6}}
-\index{xb::xbDbf@{xb::xbDbf}!GetShareMode@{GetShareMode}}
-\index{GetShareMode@{GetShareMode}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetShareMode()}{GetShareMode()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+Share\+Mode (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the share mode of the file.
-
-\begin{DoxyReturn}{Returns}
-XB\+\_\+\+SINGLE\+\_\+\+USER -\/ (file buffering on\texorpdfstring{$>$}{>}~\newline
- XB\+\_\+\+MULTI\+\_\+\+USER -\/ (file buffering off)~\newline
-
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a27758a325c097f204247908b65ba7fbd}\label{classxb_1_1xbDbf_a27758a325c097f204247908b65ba7fbd}}
-\index{xb::xbDbf@{xb::xbDbf}!GetTblAlias@{GetTblAlias}}
-\index{GetTblAlias@{GetTblAlias}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetTblAlias()}{GetTblAlias()}}
-{\footnotesize\ttfamily const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Dbf\+::\+Get\+Tbl\+Alias (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get the table alias.
-
-This routine returns the table alias. \begin{DoxyReturn}{Returns}
-Table alias
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a039eb02418ec4ca862adbc0f95b9cbec}\label{classxb_1_1xbDbf_a039eb02418ec4ca862adbc0f95b9cbec}}
-\index{xb::xbDbf@{xb::xbDbf}!GetULongField@{GetULongField}}
-\index{GetULongField@{GetULongField}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetULongField()}{GetULongField()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+ULong\+Field (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{xb\+UInt32 \&}]{ul\+Field\+Value }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get unsigned long field for field name.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Field\+Name} & Number of field to retrieve. \\
-\hline
-{\em ul\+Field\+Value} & Output field value. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a67e3a050f9090edf69eee75aef7f5d83}\label{classxb_1_1xbDbf_a67e3a050f9090edf69eee75aef7f5d83}}
-\index{xb::xbDbf@{xb::xbDbf}!GetULongField@{GetULongField}}
-\index{GetULongField@{GetULongField}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetULongField()}{GetULongField()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+ULong\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{xb\+UInt32 \&}]{ul\+Field\+Value }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get unsigned long field for field number.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Field\+No} & Number of field to retrieve. \\
-\hline
-{\em ul\+Field\+Value} & Output field value. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a49212a9eb17f7fa9f303e08d5fc50fc6}\label{classxb_1_1xbDbf_a49212a9eb17f7fa9f303e08d5fc50fc6}}
-\index{xb::xbDbf@{xb::xbDbf}!GetVersion@{GetVersion}}
-\index{GetVersion@{GetVersion}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetVersion()}{GetVersion()}}
-{\footnotesize\ttfamily virtual xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Version (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [pure virtual]}}
-
-\mbox{\Hypertarget{classxb_1_1xbFile_a7af337808919680b90710ad5e8a99232}\label{classxb_1_1xbFile_a7af337808919680b90710ad5e8a99232}}
-\index{xb::xbDbf@{xb::xbDbf}!GetXbaseFileTypeByte@{GetXbaseFileTypeByte}}
-\index{GetXbaseFileTypeByte@{GetXbaseFileTypeByte}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetXbaseFileTypeByte()}{GetXbaseFileTypeByte()}\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+Xbase\+File\+Type\+Byte (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name, }\item[{unsigned char \&}]{c\+File\+Type\+Byte }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the file type byte and version of the dbf file.
-
-Pull the first bye off the DBF file for further inspection. First byte has various bits set to determine what the file format is.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+File\+Name} & -\/ Name of file to examine \\
-\hline
-{\em c\+File\+Type\+Byte} & -\/ Retruned first byte of dbf file \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a78aebdd21d3de46a450d5f835e3027f6}\label{classxb_1_1xbFile_a78aebdd21d3de46a450d5f835e3027f6}}
-\index{xb::xbDbf@{xb::xbDbf}!GetXbaseFileTypeByte@{GetXbaseFileTypeByte}}
-\index{GetXbaseFileTypeByte@{GetXbaseFileTypeByte}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetXbaseFileTypeByte()}{GetXbaseFileTypeByte()}\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+Xbase\+File\+Type\+Byte (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name, }\item[{unsigned char \&}]{c\+File\+Type\+Byte, }\item[{xb\+Int16 \&}]{i\+Version }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the file type byte and version of the dbf file.
-
-Pull the first bye off the DBF file for further inspection. First byte has various bits set to determine what the file format is.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+File\+Name} & -\/ Name of file to examine \\
-\hline
-{\em c\+File\+Type\+Byte} & -\/ Returned first byte of dbf file \\
-\hline
-{\em i\+Version} & -\/ Returned file version \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_aaf2e697751a0beff41432a66bb83fb5e}\label{classxb_1_1xbFile_aaf2e697751a0beff41432a66bb83fb5e}}
-\index{xb::xbDbf@{xb::xbDbf}!GetXbaseFileTypeByte@{GetXbaseFileTypeByte}}
-\index{GetXbaseFileTypeByte@{GetXbaseFileTypeByte}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetXbaseFileTypeByte()}{GetXbaseFileTypeByte()}\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+Xbase\+File\+Type\+Byte (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name, }\item[{xb\+Int16 \&}]{i\+Version }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the file type byte and version of the dbf file.
-
-Pull the first bye off the DBF file for further inspection. First byte has various bits set to determine what the file format is.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+File\+Name} & -\/ Name of file to examine \\
-\hline
-{\em i\+Version} & -\/ Returned file version \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_ab21ec23c076b0c9affdc0f6672bd133f}\label{classxb_1_1xbDbf_ab21ec23c076b0c9affdc0f6672bd133f}}
-\index{xb::xbDbf@{xb::xbDbf}!GetXbasePtr@{GetXbasePtr}}
-\index{GetXbasePtr@{GetXbasePtr}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetXbasePtr()}{GetXbasePtr()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$ xb\+::xb\+Dbf\+::\+Get\+Xbase\+Ptr (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Get the pointer to the xb\+Xbase structure,.
-
-\begin{DoxyReturn}{Returns}
-Pointer to xb\+Xbase structure.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_ad06fe0f7975fb81125d27d82504e6829}\label{classxb_1_1xbDbf_ad06fe0f7975fb81125d27d82504e6829}}
-\index{xb::xbDbf@{xb::xbDbf}!InitVars@{InitVars}}
-\index{InitVars@{InitVars}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{InitVars()}{InitVars()}}
-{\footnotesize\ttfamily void xb\+::xb\+Dbf\+::\+Init\+Vars (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [protected]}, {\ttfamily [virtual]}}
-
-\mbox{\Hypertarget{classxb_1_1xbDbf_a013dc8c51fc1aa988de39cf3da6da950}\label{classxb_1_1xbDbf_a013dc8c51fc1aa988de39cf3da6da950}}
-\index{xb::xbDbf@{xb::xbDbf}!MemoFieldsExist@{MemoFieldsExist}}
-\index{MemoFieldsExist@{MemoFieldsExist}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{MemoFieldsExist()}{MemoFieldsExist()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Dbf\+::\+Memo\+Fields\+Exist (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Check for existence of any memo fields.
-
-\begin{DoxyReturn}{Returns}
-xb\+True -\/ Memo fields exist.~\newline
-xb\+False -\/ Memo fields don\textquotesingle{}t exist.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a361e3cc318bbf1c4d10f069e0800a24e}\label{classxb_1_1xbFile_a361e3cc318bbf1c4d10f069e0800a24e}}
-\index{xb::xbDbf@{xb::xbDbf}!NameSuffixMissing@{NameSuffixMissing}}
-\index{NameSuffixMissing@{NameSuffixMissing}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{NameSuffixMissing()}{NameSuffixMissing()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Name\+Suffix\+Missing (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name, }\item[{xb\+Int16}]{i\+Option }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Determines status of file extension.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+File\+Name} & -\/ Name of file to examine \\
-\hline
-{\em i\+Option} & -\/ Inspection type~\newline
- 1 check for DBF~\newline
- 2 check for NDX~\newline
- 3 check for MDX~\newline
- 4 check for NTX~\newline
-\\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-0 if suffix found~\newline
- 1 if suffix not found, lower case~\newline
- 2 is suffix not found, upper case~\newline
-
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a69824d7bafc3f5a15bf7d09f2f511768}\label{classxb_1_1xbDbf_a69824d7bafc3f5a15bf7d09f2f511768}}
-\index{xb::xbDbf@{xb::xbDbf}!Open@{Open}}
-\index{Open@{Open}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{Open()}{Open()}\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Open (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Table\+Name }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Open a table/dbf file.
-
-This routine sets the alias name to the same as the table name.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Table\+Name} & Table name to open, Include the .dbf or .DBF extension. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_ae388c5e02adc86e6e9988e697e061610}\label{classxb_1_1xbDbf_ae388c5e02adc86e6e9988e697e061610}}
-\index{xb::xbDbf@{xb::xbDbf}!Open@{Open}}
-\index{Open@{Open}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{Open()}{Open()}\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Open (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Table\+Name, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Alias }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Open a table/dbf file.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Table\+Name} & Table name to open, Include the .dbf or .DBF extension. \\
-\hline
-{\em s\+Alias} & Alias name to assign to this entry. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a4d018cbf44d8d8b2145c9acab02c8adf}\label{classxb_1_1xbDbf_a4d018cbf44d8d8b2145c9acab02c8adf}}
-\index{xb::xbDbf@{xb::xbDbf}!Open@{Open}}
-\index{Open@{Open}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{Open()}{Open()}\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}}
-{\footnotesize\ttfamily virtual xb\+Int16 xb\+::xb\+Dbf\+::\+Open (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Table\+Name, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Alias, }\item[{xb\+Int16}]{i\+Open\+Mode, }\item[{xb\+Int16}]{i\+Share\+Mode }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}
-
-\mbox{\Hypertarget{classxb_1_1xbDbf_a8a52bf3ef2123c0d17e6b1f67bf0dc55}\label{classxb_1_1xbDbf_a8a52bf3ef2123c0d17e6b1f67bf0dc55}}
-\index{xb::xbDbf@{xb::xbDbf}!Pack@{Pack}}
-\index{Pack@{Pack}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{Pack()}{Pack()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Pack (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Pack dbf file.
-
-This routine eliminates all deleted records from the file. \begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a93bb14ad0451355bfa3379128120988a}\label{classxb_1_1xbDbf_a93bb14ad0451355bfa3379128120988a}}
-\index{xb::xbDbf@{xb::xbDbf}!Pack@{Pack}}
-\index{Pack@{Pack}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{Pack()}{Pack()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Pack (\begin{DoxyParamCaption}\item[{xb\+UInt32 \&}]{ul\+Deleted\+Rec\+Cnt }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Pack dbf file.
-
-This routine eliminates all deleted records from the file and clears out any unused blocks in the memo file if one exists.
-\begin{DoxyParams}{Parameters}
-{\em ul\+Deleted\+Rec\+Cnt} & -\/ Output -\/ number of recrods removed from the file. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a571b36b3a940b1a16d5e834f329b33b9}\label{classxb_1_1xbDbf_a571b36b3a940b1a16d5e834f329b33b9}}
-\index{xb::xbDbf@{xb::xbDbf}!PutDateField@{PutDateField}}
-\index{PutDateField@{PutDateField}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{PutDateField()}{PutDateField()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Put\+Date\+Field (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&}]{dt\+Field\+Value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Put date field for field name.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Field\+Name} & Name of field to update. \\
-\hline
-{\em dt\+Field\+Value} & Field value. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a873f04af528a9d81e6a367a59d998ec5}\label{classxb_1_1xbDbf_a873f04af528a9d81e6a367a59d998ec5}}
-\index{xb::xbDbf@{xb::xbDbf}!PutDateField@{PutDateField}}
-\index{PutDateField@{PutDateField}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{PutDateField()}{PutDateField()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Put\+Date\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&}]{dt\+Field\+Value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Put date field for field number.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Field\+No} & Number of field to update. \\
-\hline
-{\em dt\+Field\+Value} & Field value. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_ae695bbc71c19abc71c0c5f2ff2e1f971}\label{classxb_1_1xbDbf_ae695bbc71c19abc71c0c5f2ff2e1f971}}
-\index{xb::xbDbf@{xb::xbDbf}!PutDoubleField@{PutDoubleField}}
-\index{PutDoubleField@{PutDoubleField}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{PutDoubleField()}{PutDoubleField()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Put\+Double\+Field (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{\mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}}}]{d\+Field\+Value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Put double field for field name.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Field\+Name} & Name of field to update. \\
-\hline
-{\em d\+Field\+Value} & Field value. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a4f34842d7e8ff1f16992c2ece2fc38a5}\label{classxb_1_1xbDbf_a4f34842d7e8ff1f16992c2ece2fc38a5}}
-\index{xb::xbDbf@{xb::xbDbf}!PutDoubleField@{PutDoubleField}}
-\index{PutDoubleField@{PutDoubleField}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{PutDoubleField()}{PutDoubleField()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Put\+Double\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{\mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}}}]{d\+Field\+Value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Put double field for field number.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Field\+No} & Number of field to update. \\
-\hline
-{\em d\+Field\+Value} & Field value. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a7862215dd2f83a1c488e539cd1f9aec0}\label{classxb_1_1xbDbf_a7862215dd2f83a1c488e539cd1f9aec0}}
-\index{xb::xbDbf@{xb::xbDbf}!PutField@{PutField}}
-\index{PutField@{PutField}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{PutField()}{PutField()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Put\+Field (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Put field for field name.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Field\+Name} & Name of field to update. \\
-\hline
-{\em s\+Field\+Value} & Field value. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a142b0c0dc904917f3c68c5572c1237b5}\label{classxb_1_1xbDbf_a142b0c0dc904917f3c68c5572c1237b5}}
-\index{xb::xbDbf@{xb::xbDbf}!PutField@{PutField}}
-\index{PutField@{PutField}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{PutField()}{PutField()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Put\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Put field for field number.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Field\+No} & Number of field to update. \\
-\hline
-{\em s\+Field\+Value} & Field value. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a4ea3241bc710d57e5f755efda62288ad}\label{classxb_1_1xbDbf_a4ea3241bc710d57e5f755efda62288ad}}
-\index{xb::xbDbf@{xb::xbDbf}!PutFloatField@{PutFloatField}}
-\index{PutFloatField@{PutFloatField}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{PutFloatField()}{PutFloatField()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Put\+Float\+Field (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{\mbox{\hyperlink{namespacexb_a83aa6a550398db55973aa9fb4257e66e}{xb\+Float}}}]{f\+Field\+Value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Put float field for field name.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Field\+Name} & Name of field to update. \\
-\hline
-{\em f\+Field\+Value} & Field value. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a64161eb50d72e424b11bf3732657ebd8}\label{classxb_1_1xbDbf_a64161eb50d72e424b11bf3732657ebd8}}
-\index{xb::xbDbf@{xb::xbDbf}!PutFloatField@{PutFloatField}}
-\index{PutFloatField@{PutFloatField}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{PutFloatField()}{PutFloatField()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Put\+Float\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{\mbox{\hyperlink{namespacexb_a83aa6a550398db55973aa9fb4257e66e}{xb\+Float}}}]{f\+Field\+Value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Put float field for field number.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Field\+No} & Number of field to update. \\
-\hline
-{\em f\+Field\+Value} & Field value. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a507e400ca6526a9e0391cf06dd6a014e}\label{classxb_1_1xbDbf_a507e400ca6526a9e0391cf06dd6a014e}}
-\index{xb::xbDbf@{xb::xbDbf}!PutLogicalField@{PutLogicalField}}
-\index{PutLogicalField@{PutLogicalField}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{PutLogicalField()}{PutLogicalField()}\hspace{0.1cm}{\footnotesize\ttfamily [1/4]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Put\+Logical\+Field (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Put logical field for field name.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Field\+Name} & Name of field to update. \\
-\hline
-{\em s\+Field\+Value} & Field value. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a623ca3ef5520c42308c1a16b518e7ff3}\label{classxb_1_1xbDbf_a623ca3ef5520c42308c1a16b518e7ff3}}
-\index{xb::xbDbf@{xb::xbDbf}!PutLogicalField@{PutLogicalField}}
-\index{PutLogicalField@{PutLogicalField}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{PutLogicalField()}{PutLogicalField()}\hspace{0.1cm}{\footnotesize\ttfamily [2/4]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Put\+Logical\+Field (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}}}]{b\+Field\+Value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Put logical field for field name.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Field\+Name} & Name of field to update. \\
-\hline
-{\em b\+Field\+Value} & Field value. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_ab39ac4269ac63bc7ea4f638733bb17f0}\label{classxb_1_1xbDbf_ab39ac4269ac63bc7ea4f638733bb17f0}}
-\index{xb::xbDbf@{xb::xbDbf}!PutLogicalField@{PutLogicalField}}
-\index{PutLogicalField@{PutLogicalField}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{PutLogicalField()}{PutLogicalField()}\hspace{0.1cm}{\footnotesize\ttfamily [3/4]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Put\+Logical\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Put logical field for field number.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Field\+No} & Number of field to update. \\
-\hline
-{\em s\+Field\+Value} & Field value. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a423a0cb7bd252cedf956ace4954f275d}\label{classxb_1_1xbDbf_a423a0cb7bd252cedf956ace4954f275d}}
-\index{xb::xbDbf@{xb::xbDbf}!PutLogicalField@{PutLogicalField}}
-\index{PutLogicalField@{PutLogicalField}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{PutLogicalField()}{PutLogicalField()}\hspace{0.1cm}{\footnotesize\ttfamily [4/4]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Put\+Logical\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}}}]{b\+Field\+Value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Put logical field for field number.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Field\+No} & Number of field to update. \\
-\hline
-{\em b\+Field\+Value} & Field value. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_ae7aad223119edb3d541e9f65e88c9f2f}\label{classxb_1_1xbDbf_ae7aad223119edb3d541e9f65e88c9f2f}}
-\index{xb::xbDbf@{xb::xbDbf}!PutLongField@{PutLongField}}
-\index{PutLongField@{PutLongField}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{PutLongField()}{PutLongField()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Put\+Long\+Field (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{xb\+Int32}]{l\+Field\+Value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Put long field for field name.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Field\+Name} & Name of field to update. \\
-\hline
-{\em l\+Field\+Value} & Field value. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a56c8f924284bf88aabf90b7930b4eb47}\label{classxb_1_1xbDbf_a56c8f924284bf88aabf90b7930b4eb47}}
-\index{xb::xbDbf@{xb::xbDbf}!PutLongField@{PutLongField}}
-\index{PutLongField@{PutLongField}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{PutLongField()}{PutLongField()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Put\+Long\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{xb\+Int32}]{l\+Field\+Value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Put long field for field number.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Field\+No} & Number of field to update. \\
-\hline
-{\em l\+Field\+Value} & Field value. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a3c36a5ffbc7067a1abbcb526dd3b981d}\label{classxb_1_1xbDbf_a3c36a5ffbc7067a1abbcb526dd3b981d}}
-\index{xb::xbDbf@{xb::xbDbf}!PutRecord@{PutRecord}}
-\index{PutRecord@{PutRecord}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{PutRecord()}{PutRecord()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Put\+Record (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Write the current record to disk.
-
-This routine is used to write any updates to the current record buffer to disk.
-
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_aacbc7bac3ea0c502ee75b838f4f0fcbf}\label{classxb_1_1xbDbf_aacbc7bac3ea0c502ee75b838f4f0fcbf}}
-\index{xb::xbDbf@{xb::xbDbf}!PutRecord@{PutRecord}}
-\index{PutRecord@{PutRecord}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{PutRecord()}{PutRecord()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Put\+Record (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{ul\+Rec\+No }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Write record to disk.
-
-This routine is used to write a copy of the current record buffer to disk for a given record number.
-
-
-\begin{DoxyParams}{Parameters}
-{\em ul\+Rec\+No} & Record number to update. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_ac62cb97c4e678c83f41788b1ae4d0381}\label{classxb_1_1xbDbf_ac62cb97c4e678c83f41788b1ae4d0381}}
-\index{xb::xbDbf@{xb::xbDbf}!PutULongField@{PutULongField}}
-\index{PutULongField@{PutULongField}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{PutULongField()}{PutULongField()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Put\+ULong\+Field (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{xb\+UInt32}]{ul\+Field\+Value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Put unsigned long field for field name.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Field\+Name} & Name of field to update. \\
-\hline
-{\em ul\+Field\+Value} & Field value. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_af5dec5c9ff903efffdb0490a44d296d2}\label{classxb_1_1xbDbf_af5dec5c9ff903efffdb0490a44d296d2}}
-\index{xb::xbDbf@{xb::xbDbf}!PutULongField@{PutULongField}}
-\index{PutULongField@{PutULongField}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{PutULongField()}{PutULongField()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Put\+ULong\+Field (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{xb\+UInt32}]{ul\+Field\+Value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Put unsigned long field for field number.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Field\+No} & Number of field to update. \\
-\hline
-{\em ul\+Field\+Value} & Field value. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The field routines return one of\+:~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
-XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
- XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATA
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_aa1bb80340abc7a5c22f87f878e9dc825}\label{classxb_1_1xbFile_aa1bb80340abc7a5c22f87f878e9dc825}}
-\index{xb::xbDbf@{xb::xbDbf}!ReadBlock@{ReadBlock}}
-\index{ReadBlock@{ReadBlock}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{ReadBlock()}{ReadBlock()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Read\+Block (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{ul\+Block\+No, }\item[{size\+\_\+t}]{l\+Read\+Size, }\item[{void $\ast$}]{buf }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Read a block of data from file.
-
-
-\begin{DoxyParams}{Parameters}
-{\em ul\+Block\+No} & -\/ block number to read \\
-\hline
-{\em l\+Read\+Size} & -\/ size of data to read at block location, set to 0 to read blocksize \\
-\hline
-{\em $\ast$buf} & -\/ pointer to buffer to write output data, assumed to be previosuly allocated and large enough to contain data \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_aef696b1c4c0ef5338e818599f695d485}\label{classxb_1_1xbFile_aef696b1c4c0ef5338e818599f695d485}}
-\index{xb::xbDbf@{xb::xbDbf}!ReadBlock@{ReadBlock}}
-\index{ReadBlock@{ReadBlock}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{ReadBlock()}{ReadBlock()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Read\+Block (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{ul\+Block\+No, }\item[{xb\+UInt32}]{ul\+Block\+Size, }\item[{size\+\_\+t}]{l\+Read\+Size, }\item[{void $\ast$}]{buf }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Read a block of data from file.
-
-
-\begin{DoxyParams}{Parameters}
-{\em ul\+Block\+No} & -\/ block number to read \\
-\hline
-{\em ul\+Block\+Size} & -\/ block size \\
-\hline
-{\em l\+Read\+Size} & -\/ size of data to read at block location, set to 0 to read blocksize \\
-\hline
-{\em buf} & -\/ pointer to buffer to write output data, assumed to be previosuly allocated and large enough to contain data \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a060541addb5bb1f0fe12959ed6f66fb9}\label{classxb_1_1xbDbf_a060541addb5bb1f0fe12959ed6f66fb9}}
-\index{xb::xbDbf@{xb::xbDbf}!ReadHeader@{ReadHeader}}
-\index{ReadHeader@{ReadHeader}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{ReadHeader()}{ReadHeader()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Read\+Header (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Position\+Option, }\item[{xb\+Int16}]{i\+Read\+Option }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Read dbf file header information.
-
-This method assumes the header has been locked appropriately in a multi user environment
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Position\+Option} & 0 -\/ Don\textquotesingle{}t fseek to beginning of file before read.~\newline
- 1 -\/ Start from beginning of file.\\
-\hline
-{\em i\+Read\+Option} & 0 -\/ Read entire 32 byte header~\newline
- 1 -\/ Read first eight bytes which includes the last update date and number of records.\\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a94d7d626ba691fd4b740c034673e6fc6}\label{classxb_1_1xbDbf_a94d7d626ba691fd4b740c034673e6fc6}}
-\index{xb::xbDbf@{xb::xbDbf}!RecordDeleted@{RecordDeleted}}
-\index{RecordDeleted@{RecordDeleted}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{RecordDeleted()}{RecordDeleted()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Record\+Deleted (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Opt = {\ttfamily 0} }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Return record deletion status.
-
-This routine returns the record deletion status.
-\begin{DoxyParams}{Parameters}
-{\em i\+Opt} & 0 = Current record buffer, 1 = Original record buffer \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-xb\+True -\/ Record deleted.~\newline
-xb\+False -\/ Record not deleted.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_aeeeb2eb5fabcd0f91d457df07b0e0708}\label{classxb_1_1xbDbf_aeeeb2eb5fabcd0f91d457df07b0e0708}}
-\index{xb::xbDbf@{xb::xbDbf}!Rename@{Rename}}
-\index{Rename@{Rename}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{Rename()}{Rename()}}
-{\footnotesize\ttfamily virtual xb\+Int16 xb\+::xb\+Dbf\+::\+Rename (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}}}]{s\+New\+Name }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}
-
-\mbox{\Hypertarget{classxb_1_1xbDbf_a4cf7f0d423164f3cf074ae41f96f4e90}\label{classxb_1_1xbDbf_a4cf7f0d423164f3cf074ae41f96f4e90}}
-\index{xb::xbDbf@{xb::xbDbf}!SetAutoCommit@{SetAutoCommit}}
-\index{SetAutoCommit@{SetAutoCommit}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{SetAutoCommit()}{SetAutoCommit()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Set\+Auto\+Commit (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Auto\+Commit }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Set auto commit.
-
-This routine sets the auto commit setting for this table. \begin{DoxyReturn}{Returns}
-XB\+\_\+\+NO\+\_\+\+ERROR;
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a991c5676a6f38fa752435390989f413e}\label{classxb_1_1xbFile_a991c5676a6f38fa752435390989f413e}}
-\index{xb::xbDbf@{xb::xbDbf}!SetBlockSize@{SetBlockSize}}
-\index{SetBlockSize@{SetBlockSize}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{SetBlockSize()}{SetBlockSize()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Set\+Block\+Size (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{ul\+Block\+Size }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Set the block size.
-
-
-\begin{DoxyParams}{Parameters}
-{\em ul\+Block\+Size} & -\/ unsigned long block size, divisible by 512 \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}\label{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}}
-\index{xb::xbDbf@{xb::xbDbf}!SetDataDirectory@{SetDataDirectory}}
-\index{SetDataDirectory@{SetDataDirectory}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{SetDataDirectory()}{SetDataDirectory()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Data\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Data\+Directory }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Set the data directory.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Data\+Directory} & Set the data direcroty. \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}\label{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}}
-\index{xb::xbDbf@{xb::xbDbf}!SetDefaultAutoCommit@{SetDefaultAutoCommit}}
-\index{SetDefaultAutoCommit@{SetDefaultAutoCommit}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{SetDefaultAutoCommit()}{SetDefaultAutoCommit()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Default\+Auto\+Commit (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}}}]{b\+Default\+Auto\+Commit }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Set the default auto commit.
-
-Disabling auto commit requires the application execute explicit updates using dbf-\/\texorpdfstring{$>$}{>}Put() and dbf-\/\texorpdfstring{$>$}{>}\mbox{\hyperlink{classxb_1_1xbDbf_a5b412dd796241673eb1aa2c93513d69b}{Append\+Record()}}. With auto commit on, the library posts updates automatically when moving off the current record or closing a file.
-
-
-\begin{DoxyParams}{Parameters}
-{\em b\+Default\+Auto\+Commit} & xb\+True -\/ Enable default auto commit.~\newline
- xb\+False -\/ Disable default auto commit.~\newline
- \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}\label{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}}
-\index{xb::xbDbf@{xb::xbDbf}!SetDefaultDateFormat@{SetDefaultDateFormat}}
-\index{SetDefaultDateFormat@{SetDefaultDateFormat}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{SetDefaultDateFormat()}{SetDefaultDateFormat()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Default\+Date\+Format (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Default\+Date\+Format }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Set the default date format.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Default\+Date\+Format} & Set the default date format. \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbFile_ae78a85255488bc78964c16946dbaead3}\label{classxb_1_1xbFile_ae78a85255488bc78964c16946dbaead3}}
-\index{xb::xbDbf@{xb::xbDbf}!SetDirectory@{SetDirectory}}
-\index{SetDirectory@{SetDirectory}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{SetDirectory()}{SetDirectory()}}
-{\footnotesize\ttfamily void xb\+::xb\+File\+::\+Set\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Directory }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Set the directory.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Directory} & -\/ Valid directory name \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a904ec348fd029d4a76e72b8fde636108}\label{classxb_1_1xbSsv_a904ec348fd029d4a76e72b8fde636108}}
-\index{xb::xbDbf@{xb::xbDbf}!SetEndianType@{SetEndianType}}
-\index{SetEndianType@{SetEndianType}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{SetEndianType()}{SetEndianType()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Endian\+Type (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [protected]}, {\ttfamily [inherited]}}
-
-
-
-Set the endian type.
-
-This routine determines the Endian-\/ness at run time instead of compile time as some processers (ie; Sparc,ARM) can be switched either way. This routine is called automatically by the library at startup and does not need to be called in an application program. \mbox{\Hypertarget{classxb_1_1xbFile_a5419eb27e56822f828b2b88a9502a636}\label{classxb_1_1xbFile_a5419eb27e56822f828b2b88a9502a636}}
-\index{xb::xbDbf@{xb::xbDbf}!SetFileName@{SetFileName}}
-\index{SetFileName@{SetFileName}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{SetFileName()}{SetFileName()}}
-{\footnotesize\ttfamily void xb\+::xb\+File\+::\+Set\+File\+Name (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Set the filename.
-
-This routine builds out two internal variables from the input file name~\newline
- s\+File\+Name -\/ the file name part~\newline
- s\+Fq\+File\+Name -\/ the fully qualified file name~\newline
-
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+File\+Name} & -\/ Input file name \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbFile_aee832fa11db2077a532f49e1329bd05a}\label{classxb_1_1xbFile_aee832fa11db2077a532f49e1329bd05a}}
-\index{xb::xbDbf@{xb::xbDbf}!SetFqFileName@{SetFqFileName}}
-\index{SetFqFileName@{SetFqFileName}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{SetFqFileName()}{SetFqFileName()}}
-{\footnotesize\ttfamily void xb\+::xb\+File\+::\+Set\+Fq\+File\+Name (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Fq\+File\+Name }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Set the fully qualifed filename.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Fq\+File\+Name} & -\/ Fully qualifed input file name \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbFile_a060acbfaa8d528f86cb59301814b414a}\label{classxb_1_1xbFile_a060acbfaa8d528f86cb59301814b414a}}
-\index{xb::xbDbf@{xb::xbDbf}!SetHomeFolders@{SetHomeFolders}}
-\index{SetHomeFolders@{SetHomeFolders}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{SetHomeFolders()}{SetHomeFolders()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Set\+Home\+Folders (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Create Home Folders.
-
-Create xbase64 log and data folders in the home directory for current usre.
-
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}\label{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}}
-\index{xb::xbDbf@{xb::xbDbf}!SetLogDirectory@{SetLogDirectory}}
-\index{SetLogDirectory@{SetLogDirectory}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{SetLogDirectory()}{SetLogDirectory()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Log\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Log\+Directory }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}\label{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}}
-\index{xb::xbDbf@{xb::xbDbf}!SetMultiUser@{SetMultiUser}}
-\index{SetMultiUser@{SetMultiUser}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{SetMultiUser()}{SetMultiUser()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Multi\+User (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}}}]{b\+Multi\+User }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the multi user setting.
-
-
-\begin{DoxyParams}{Parameters}
-{\em b\+Multi\+User} & xb\+True -\/ Turn on Multi user mode.~\newline
- xb\+False -\/ Turn off Multi user mode.~\newline
- \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a7e63e852418f337eb7c44de5dcd50323}\label{classxb_1_1xbDbf_a7e63e852418f337eb7c44de5dcd50323}}
-\index{xb::xbDbf@{xb::xbDbf}!SetVersion@{SetVersion}}
-\index{SetVersion@{SetVersion}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{SetVersion()}{SetVersion()}}
-{\footnotesize\ttfamily virtual xb\+Int16 xb\+::xb\+Dbf\+::\+Set\+Version (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [protected]}, {\ttfamily [pure virtual]}}
-
-\mbox{\Hypertarget{classxb_1_1xbDbf_ae94cb1bf9f75184f39d9e1a80ab49d4a}\label{classxb_1_1xbDbf_ae94cb1bf9f75184f39d9e1a80ab49d4a}}
-\index{xb::xbDbf@{xb::xbDbf}!UndeleteAllRecords@{UndeleteAllRecords}}
-\index{UndeleteAllRecords@{UndeleteAllRecords}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{UndeleteAllRecords()}{UndeleteAllRecords()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Undelete\+All\+Records (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Set auto lock.
-
-This routine sets the auto lock setting for this table. There is an overall system level auto lock default setting and each table can have it\textquotesingle{}s own autolock setting. This method controls the table level auto lock setting.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Auto\+Lock} & 1 -\/ Use auto lock for this table.~\newline
- 0 -\/ Don\textquotesingle{}t use auto lock for this table.~\newline
- -\/1 -\/ (minus one) Use system default.~\newline
- \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-Set the header locked status.
-
-
-\begin{DoxyParams}{Parameters}
-{\em b\+Header\+Locked} & xb\+True -\/ Locked~\newline
-xb\+False -\/ Not locked. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-void
-\end{DoxyReturn}
-Set lock flavor.
-
-This routine is for future expansion.
-\begin{DoxyParams}{Parameters}
-{\em i\+Lock\+Flavor} & 1 -\/ Use Dbase (tm) style locking. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-void
-\end{DoxyReturn}
-Set table locked status.
-
-
-\begin{DoxyParams}{Parameters}
-{\em b\+Table\+Locked} & -\/ xb\+True Table locked.~\newline
-xb\+False Table unlocked. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-void
-\end{DoxyReturn}
-Undelete all records.
-
-This routine will remove the deletion flag on any deleted records in the table. \begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a255681976a04fc722538bb630507b3a0}\label{classxb_1_1xbDbf_a255681976a04fc722538bb630507b3a0}}
-\index{xb::xbDbf@{xb::xbDbf}!UndeleteRecord@{UndeleteRecord}}
-\index{UndeleteRecord@{UndeleteRecord}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{UndeleteRecord()}{UndeleteRecord()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Undelete\+Record (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Undelete one record.
-
-This routine will undelete the current record, if it is deleted. \begin{DoxyReturn}{Returns}
-XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+RECORD
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_aba5dcac3b4092261bc1669740cdd669d}\label{classxb_1_1xbDbf_aba5dcac3b4092261bc1669740cdd669d}}
-\index{xb::xbDbf@{xb::xbDbf}!ValidateSchema@{ValidateSchema}}
-\index{ValidateSchema@{ValidateSchema}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{ValidateSchema()}{ValidateSchema()}}
-{\footnotesize\ttfamily virtual xb\+Int16 xb\+::xb\+Dbf\+::\+Validate\+Schema (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{structxb_1_1xbSchema}{xb\+Schema}} $\ast$}]{s }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [protected]}, {\ttfamily [pure virtual]}}
-
-\mbox{\Hypertarget{classxb_1_1xbFile_a5d871dcfecc2b4338f7a13722aab766c}\label{classxb_1_1xbFile_a5d871dcfecc2b4338f7a13722aab766c}}
-\index{xb::xbDbf@{xb::xbDbf}!WriteBlock@{WriteBlock}}
-\index{WriteBlock@{WriteBlock}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{WriteBlock()}{WriteBlock()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Write\+Block (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{ul\+Block\+No, }\item[{size\+\_\+t}]{l\+Write\+Size, }\item[{void $\ast$}]{buf }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Write a block of data to file.
-
-
-\begin{DoxyParams}{Parameters}
-{\em ul\+Block\+No} & -\/ block number to write \\
-\hline
-{\em l\+Write\+Size} & -\/ size of data to write, set to 0 to write blocksize \\
-\hline
-{\em $\ast$buf} & -\/ pointer to buffer of data to be written \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a44e1410109ef7b3d11a6af4b704b62b2}\label{classxb_1_1xbDbf_a44e1410109ef7b3d11a6af4b704b62b2}}
-\index{xb::xbDbf@{xb::xbDbf}!WriteHeader@{WriteHeader}}
-\index{WriteHeader@{WriteHeader}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{WriteHeader()}{WriteHeader()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Write\+Header (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Position\+Option, }\item[{xb\+Int16}]{i\+Write\+Option }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [protected]}}
-
-\mbox{\Hypertarget{classxb_1_1xbFile_a18830b5755d74818f60d9c7ce38ddf2d}\label{classxb_1_1xbFile_a18830b5755d74818f60d9c7ce38ddf2d}}
-\index{xb::xbDbf@{xb::xbDbf}!xbFclose@{xbFclose}}
-\index{xbFclose@{xbFclose}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{xbFclose()}{xbFclose()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fclose (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Xbase wrapper for standard libary fclose.
-
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_af5b6356832d2a67212070a1aa605f170}\label{classxb_1_1xbFile_af5b6356832d2a67212070a1aa605f170}}
-\index{xb::xbDbf@{xb::xbDbf}!xbFeof@{xbFeof}}
-\index{xbFeof@{xbFeof}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{xbFeof()}{xbFeof()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Feof (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Xbase wrapper for standard libary feof.
-
-\begin{DoxyReturn}{Returns}
-non zero if end-\/of-\/file is set for the stream.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_ad205184d43409f04216540ae22f15009}\label{classxb_1_1xbFile_ad205184d43409f04216540ae22f15009}}
-\index{xb::xbDbf@{xb::xbDbf}!xbFflush@{xbFflush}}
-\index{xbFflush@{xbFflush}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{xbFflush()}{xbFflush()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fflush (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Xbase wrapper for standard libary fflush.
-
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a5ee229bda4d7d6695e122200e581e7a6}\label{classxb_1_1xbFile_a5ee229bda4d7d6695e122200e581e7a6}}
-\index{xb::xbDbf@{xb::xbDbf}!xbFgetc@{xbFgetc}}
-\index{xbFgetc@{xbFgetc}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{xbFgetc()}{xbFgetc()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fgetc (\begin{DoxyParamCaption}\item[{char \&}]{c }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Xbase wrapper for standard libary fgetc.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c} & -\/ output character returned by fgetc \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_afb1c584d2895ffb7834df80aea7eb1e4}\label{classxb_1_1xbFile_afb1c584d2895ffb7834df80aea7eb1e4}}
-\index{xb::xbDbf@{xb::xbDbf}!xbFgetc@{xbFgetc}}
-\index{xbFgetc@{xbFgetc}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{xbFgetc()}{xbFgetc()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fgetc (\begin{DoxyParamCaption}\item[{xb\+Int32 \&}]{c }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Xbase wrapper for standard libary fgetc.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c} & -\/ output integer returned by fgetc \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_ad245955ace26e5dde85fd4373b30d026}\label{classxb_1_1xbFile_ad245955ace26e5dde85fd4373b30d026}}
-\index{xb::xbDbf@{xb::xbDbf}!xbFgets@{xbFgets}}
-\index{xbFgets@{xbFgets}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{xbFgets()}{xbFgets()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fgets (\begin{DoxyParamCaption}\item[{size\+\_\+t}]{l\+Size, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Xbase wrapper for standard libary fgets.
-
-
-\begin{DoxyParams}{Parameters}
-{\em l\+Size} & -\/ reads in at most, one character less than l\+Size \\
-\hline
-{\em s} & -\/ an \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing data returned by fseek \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_ab0fa19686ca8953ff4b556fb5b249135}\label{classxb_1_1xbFile_ab0fa19686ca8953ff4b556fb5b249135}}
-\index{xb::xbDbf@{xb::xbDbf}!xbFopen@{xbFopen}}
-\index{xbFopen@{xbFopen}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{xbFopen()}{xbFopen()}\hspace{0.1cm}{\footnotesize\ttfamily [1/4]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fopen (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Open\+Mode, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name, }\item[{xb\+Int16}]{i\+Share\+Mode }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Xbase wrapper for standard libary fopen.
-
-This routine supports all the standard C library open modes. The Xbase routines only use \char`\"{}r\char`\"{} and \char`\"{}r+b\char`\"{}.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Open\+Mode} & {\begin{tabularx}{\linewidth}{|*{2}{>{\raggedright\arraybackslash}X|}}\hline
-\cellcolor{\tableheadbgcolor}\textbf{ Open\+Mode}&\cellcolor{\tableheadbgcolor}\textbf{ Description }\\\cline{1-2}
-r&Reading \\\cline{1-2}
-r+&Reading and Writing \\\cline{1-2}
-w&Open for writing. Truncate to zero bytes if it exists \\\cline{1-2}
-w+&Open for reading and writing, truncate to zero bytes if it exists \\\cline{1-2}
-a&Open for append \\\cline{1-2}
-a+&Open for reading and writing (at end). \\\cline{1-2}
-\end{tabularx}}
-The mode can also include the letter \char`\"{}b\char`\"{} for binary ie; \char`\"{}r+b\char`\"{}. The \char`\"{}b\char`\"{} is ignored on POSIX compliant systems, but is included for cross platform compatibility. \\
-\hline
-{\em s\+File\+Name} & File name to open \\
-\hline
-{\em i\+Share\+Mode} & XB\+\_\+\+SINGLE\+\_\+\+USER~\newline
- XB\+\_\+\+MULTI\+\_\+\+USER~\newline
- \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a0548cedf0f26b7d8ac221f75b0cd048c}\label{classxb_1_1xbFile_a0548cedf0f26b7d8ac221f75b0cd048c}}
-\index{xb::xbDbf@{xb::xbDbf}!xbFopen@{xbFopen}}
-\index{xbFopen@{xbFopen}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{xbFopen()}{xbFopen()}\hspace{0.1cm}{\footnotesize\ttfamily [2/4]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fopen (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Open\+Mode, }\item[{xb\+Int16}]{i\+Share\+Mode }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Xbase wrapper for standard libary fopen.
-
-This routine supports all the standard C library open modes. The Xbase routines only use \char`\"{}r\char`\"{} and \char`\"{}r+\char`\"{}.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Open\+Mode} & {\begin{tabularx}{\linewidth}{|*{2}{>{\raggedright\arraybackslash}X|}}\hline
-\cellcolor{\tableheadbgcolor}\textbf{ Open\+Mode}&\cellcolor{\tableheadbgcolor}\textbf{ Description }\\\cline{1-2}
-r&Reading \\\cline{1-2}
-r+&Reading and Writing \\\cline{1-2}
-w&Open for writing. Truncate to zero bytes if it exists \\\cline{1-2}
-w+&Open for reading and writing, truncate to zero bytes if it exists \\\cline{1-2}
-a&Open for append \\\cline{1-2}
-a+&Open for reading and writing (at end). \\\cline{1-2}
-\end{tabularx}}
-The mode can also include the letter \char`\"{}b\char`\"{} for binary ie; \char`\"{}r+b\char`\"{}. The \char`\"{}b\char`\"{} is ignored on POSIX compliant systems, but is included for cross platform compatibility. \\
-\hline
-{\em i\+Share\+Mode} & XB\+\_\+\+SINGLE\+\_\+\+USER~\newline
- XB\+\_\+\+MULTI\+\_\+\+USER~\newline
- \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a7cdfef5ede9ac98d44a28a6b7a70972c}\label{classxb_1_1xbFile_a7cdfef5ede9ac98d44a28a6b7a70972c}}
-\index{xb::xbDbf@{xb::xbDbf}!xbFopen@{xbFopen}}
-\index{xbFopen@{xbFopen}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{xbFopen()}{xbFopen()}\hspace{0.1cm}{\footnotesize\ttfamily [3/4]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fopen (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Open\+Mode }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbFile_aabd113333b49c36cad23244b392baab4}\label{classxb_1_1xbFile_aabd113333b49c36cad23244b392baab4}}
-\index{xb::xbDbf@{xb::xbDbf}!xbFopen@{xbFopen}}
-\index{xbFopen@{xbFopen}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{xbFopen()}{xbFopen()}\hspace{0.1cm}{\footnotesize\ttfamily [4/4]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fopen (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Open\+Mode, }\item[{xb\+Int16}]{i\+Share\+Mode }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Xbase wrapper for standard libary fopen.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Open\+Mode} & XB\+\_\+\+READ~\newline
- XB\+\_\+\+READ\+\_\+\+WRITE~\newline
- \\
-\hline
-{\em i\+Share\+Mode} & XB\+\_\+\+SINGLE\+\_\+\+USER~\newline
- XB\+\_\+\+MULTI\+\_\+\+USER~\newline
- \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_af2e940c78956e5cb6824f9a1bc404896}\label{classxb_1_1xbFile_af2e940c78956e5cb6824f9a1bc404896}}
-\index{xb::xbDbf@{xb::xbDbf}!xbFputc@{xbFputc}}
-\index{xbFputc@{xbFputc}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{xbFputc()}{xbFputc()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fputc (\begin{DoxyParamCaption}\item[{xb\+Int32}]{c }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Xbase wrapper for standard libary fputc.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c} & Character to write \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a863f74cf17df8186d88586b4d2a6441a}\label{classxb_1_1xbFile_a863f74cf17df8186d88586b4d2a6441a}}
-\index{xb::xbDbf@{xb::xbDbf}!xbFputc@{xbFputc}}
-\index{xbFputc@{xbFputc}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{xbFputc()}{xbFputc()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fputc (\begin{DoxyParamCaption}\item[{xb\+Int32}]{c, }\item[{xb\+Int32}]{i\+No\+Of\+Times }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Xbase wrapper for standard libary fputc.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c} & Character to write \\
-\hline
-{\em i\+No\+Of\+Times} & Number of times to write the character \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a698f3b40216778562e639e6ca1a47573}\label{classxb_1_1xbFile_a698f3b40216778562e639e6ca1a47573}}
-\index{xb::xbDbf@{xb::xbDbf}!xbFputs@{xbFputs}}
-\index{xbFputs@{xbFputs}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{xbFputs()}{xbFputs()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fputs (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Xbase wrapper for standard libary fputs.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s} & \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} to write to file \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_ab4f6afaa1f77539f27a4f05c26e54e2f}\label{classxb_1_1xbFile_ab4f6afaa1f77539f27a4f05c26e54e2f}}
-\index{xb::xbDbf@{xb::xbDbf}!xbFread@{xbFread}}
-\index{xbFread@{xbFread}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{xbFread()}{xbFread()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fread (\begin{DoxyParamCaption}\item[{void $\ast$}]{p, }\item[{size\+\_\+t}]{size, }\item[{size\+\_\+t}]{nmemb }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Xbase wrapper for standard libary fread.
-
-
-\begin{DoxyParams}{Parameters}
-{\em p} & Pointer to data to write \\
-\hline
-{\em size} & size of write \\
-\hline
-{\em nmemb} & Number of times to read it \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a5337ab8918df240910c0d19b4f298e3d}\label{classxb_1_1xbFile_a5337ab8918df240910c0d19b4f298e3d}}
-\index{xb::xbDbf@{xb::xbDbf}!xbFseek@{xbFseek}}
-\index{xbFseek@{xbFseek}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{xbFseek()}{xbFseek()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fseek (\begin{DoxyParamCaption}\item[{xb\+Int64}]{l\+Offset, }\item[{xb\+Int32}]{i\+Whence }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Xbase wrapper for standard libary fseek.
-
-
-\begin{DoxyParams}{Parameters}
-{\em l\+Offset} & Position in file to seek to \\
-\hline
-{\em i\+Whence} & SEEK\+\_\+\+SET -\/ from beginning of file~\newline
- SEEK\+\_\+\+CUR -\/ from current position~\newline
- SEEK\+\_\+\+END -\/ from end of file~\newline
- \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a0e1c06aedfa7fbcb92e117f891edd13b}\label{classxb_1_1xbFile_a0e1c06aedfa7fbcb92e117f891edd13b}}
-\index{xb::xbDbf@{xb::xbDbf}!xbFtell@{xbFtell}}
-\index{xbFtell@{xbFtell}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{xbFtell()}{xbFtell()}}
-{\footnotesize\ttfamily size\+\_\+t xb\+::xb\+File\+::xb\+Ftell (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Xbase wrapper for standard libary ftell.
-
-Returns the current file position. \begin{DoxyReturn}{Returns}
-Current file position.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a9891b792f585a696f38a5cf959e30918}\label{classxb_1_1xbFile_a9891b792f585a696f38a5cf959e30918}}
-\index{xb::xbDbf@{xb::xbDbf}!xbFTurnOffFileBuffering@{xbFTurnOffFileBuffering}}
-\index{xbFTurnOffFileBuffering@{xbFTurnOffFileBuffering}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{xbFTurnOffFileBuffering()}{xbFTurnOffFileBuffering()}}
-{\footnotesize\ttfamily void xb\+::xb\+File\+::xb\+FTurn\+Off\+File\+Buffering (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Turn off file buffering.
-
-Turns off file buffering. File buffering can\textquotesingle{}t be used while in multi user mode. \mbox{\Hypertarget{classxb_1_1xbFile_a6aadd871d1782944703fed773d44b85f}\label{classxb_1_1xbFile_a6aadd871d1782944703fed773d44b85f}}
-\index{xb::xbDbf@{xb::xbDbf}!xbFwrite@{xbFwrite}}
-\index{xbFwrite@{xbFwrite}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{xbFwrite()}{xbFwrite()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fwrite (\begin{DoxyParamCaption}\item[{const void $\ast$}]{p, }\item[{size\+\_\+t}]{size, }\item[{size\+\_\+t}]{nmemb }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Xbase wrapper for standard libary fwrite.
-
-
-\begin{DoxyParams}{Parameters}
-{\em p} & Pointer to data buffer to write \\
-\hline
-{\em size} & Size of data to write \\
-\hline
-{\em nmemb} & Number of times to write data buffer \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a08463f506f425c2385acbe1a561506e9}\label{classxb_1_1xbFile_a08463f506f425c2385acbe1a561506e9}}
-\index{xb::xbDbf@{xb::xbDbf}!xbReadUntil@{xbReadUntil}}
-\index{xbReadUntil@{xbReadUntil}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{xbReadUntil()}{xbReadUntil()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Read\+Until (\begin{DoxyParamCaption}\item[{const char}]{c\+Delim, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Out }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Read file until a particular character is encountered on input stream.
-
-This routine will read until c\+Delim is encountered or eof, which ever occurs first.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c\+Delim} & Delimiter to stop writing at. \\
-\hline
-{\em s\+Out} & Output \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing data read \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_ab3c668a8570433188382d31d7c60bd48}\label{classxb_1_1xbFile_ab3c668a8570433188382d31d7c60bd48}}
-\index{xb::xbDbf@{xb::xbDbf}!xbRemove@{xbRemove}}
-\index{xbRemove@{xbRemove}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{xbRemove()}{xbRemove()}\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Remove (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Delete file.
-
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a58f6a6751fdf7e9549c273bb75d93eb5}\label{classxb_1_1xbFile_a58f6a6751fdf7e9549c273bb75d93eb5}}
-\index{xb::xbDbf@{xb::xbDbf}!xbRemove@{xbRemove}}
-\index{xbRemove@{xbRemove}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{xbRemove()}{xbRemove()}\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Remove (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name\+In }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Delete file.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+File\+Name\+In} & Name of file to delete \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a6d919366c2ec95e529906bf8842cbf07}\label{classxb_1_1xbFile_a6d919366c2ec95e529906bf8842cbf07}}
-\index{xb::xbDbf@{xb::xbDbf}!xbRemove@{xbRemove}}
-\index{xbRemove@{xbRemove}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{xbRemove()}{xbRemove()}\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Remove (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name\+In, }\item[{xb\+Int16}]{i\+Option }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Delete file.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+File\+Name\+In} & Name of file to delete \\
-\hline
-{\em i\+Option} & If Set to 1, assume this is a delete request for a dbf file, and should rename the dbt file also \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_afc8ce113aa72611a278233f9bb170012}\label{classxb_1_1xbFile_afc8ce113aa72611a278233f9bb170012}}
-\index{xb::xbDbf@{xb::xbDbf}!xbRename@{xbRename}}
-\index{xbRename@{xbRename}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{xbRename()}{xbRename()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Rename (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Old\+Name, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+New\+Name }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Rename file.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Old\+Name} & Original file name \\
-\hline
-{\em s\+New\+Name} & New file name \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a7996b6e084665c37c3892faea64b3505}\label{classxb_1_1xbFile_a7996b6e084665c37c3892faea64b3505}}
-\index{xb::xbDbf@{xb::xbDbf}!xbRewind@{xbRewind}}
-\index{xbRewind@{xbRewind}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{xbRewind()}{xbRewind()}}
-{\footnotesize\ttfamily void xb\+::xb\+File\+::xb\+Rewind (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Xbase wrapper for rewind.
-
-Set file pointer at beginning of file. \mbox{\Hypertarget{classxb_1_1xbFile_a518bfcbfa3699d883cf89affee383296}\label{classxb_1_1xbFile_a518bfcbfa3699d883cf89affee383296}}
-\index{xb::xbDbf@{xb::xbDbf}!xbTruncate@{xbTruncate}}
-\index{xbTruncate@{xbTruncate}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{xbTruncate()}{xbTruncate()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Truncate (\begin{DoxyParamCaption}\item[{xb\+Int64}]{ll\+Size }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Xbase wrapper for ftruncate.
-
-Set file size to ll\+Size
-\begin{DoxyParams}{Parameters}
-{\em ll\+Size} & New file size. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a8ed0693b10b95aaa4e46037758d160ed}\label{classxb_1_1xbDbf_a8ed0693b10b95aaa4e46037758d160ed}}
-\index{xb::xbDbf@{xb::xbDbf}!Zap@{Zap}}
-\index{Zap@{Zap}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{Zap()}{Zap()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Zap (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
-
-
-
-Zap (remove) everything from the file,.
-
-This routine eliminates everything from the dbf file and dbt memo file. \begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-
-
-\doxysubsection{Field Documentation}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a8734e799707582f022fc341d515650f4}\label{classxb_1_1xbDbf_a8734e799707582f022fc341d515650f4}}
-\index{xb::xbDbf@{xb::xbDbf}!cEncryptionFlag@{cEncryptionFlag}}
-\index{cEncryptionFlag@{cEncryptionFlag}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{cEncryptionFlag}{cEncryptionFlag}}
-{\footnotesize\ttfamily char xb\+::xb\+Dbf\+::c\+Encryption\+Flag\hspace{0.3cm}{\ttfamily [protected]}}
-
-\mbox{\Hypertarget{classxb_1_1xbDbf_ad59074633641e03647e54d2b66c9102b}\label{classxb_1_1xbDbf_ad59074633641e03647e54d2b66c9102b}}
-\index{xb::xbDbf@{xb::xbDbf}!cIndexFlag@{cIndexFlag}}
-\index{cIndexFlag@{cIndexFlag}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{cIndexFlag}{cIndexFlag}}
-{\footnotesize\ttfamily char xb\+::xb\+Dbf\+::c\+Index\+Flag\hspace{0.3cm}{\ttfamily [protected]}}
-
-\mbox{\Hypertarget{classxb_1_1xbDbf_aea1dfe5cbd1f9cdbcfc8eb04b2c3d5f1}\label{classxb_1_1xbDbf_aea1dfe5cbd1f9cdbcfc8eb04b2c3d5f1}}
-\index{xb::xbDbf@{xb::xbDbf}!cLangDriver@{cLangDriver}}
-\index{cLangDriver@{cLangDriver}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{cLangDriver}{cLangDriver}}
-{\footnotesize\ttfamily char xb\+::xb\+Dbf\+::c\+Lang\+Driver\hspace{0.3cm}{\ttfamily [protected]}}
-
-\mbox{\Hypertarget{classxb_1_1xbDbf_ac3c89fc3bc6a6abf385478a8adbed970}\label{classxb_1_1xbDbf_ac3c89fc3bc6a6abf385478a8adbed970}}
-\index{xb::xbDbf@{xb::xbDbf}!cTransactionFlag@{cTransactionFlag}}
-\index{cTransactionFlag@{cTransactionFlag}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{cTransactionFlag}{cTransactionFlag}}
-{\footnotesize\ttfamily char xb\+::xb\+Dbf\+::c\+Transaction\+Flag\hspace{0.3cm}{\ttfamily [protected]}}
-
-\mbox{\Hypertarget{classxb_1_1xbDbf_a6021789d314cd41488991e708fcd0df2}\label{classxb_1_1xbDbf_a6021789d314cd41488991e708fcd0df2}}
-\index{xb::xbDbf@{xb::xbDbf}!cUpdateDD@{cUpdateDD}}
-\index{cUpdateDD@{cUpdateDD}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{cUpdateDD}{cUpdateDD}}
-{\footnotesize\ttfamily char xb\+::xb\+Dbf\+::c\+Update\+DD\hspace{0.3cm}{\ttfamily [protected]}}
-
-\mbox{\Hypertarget{classxb_1_1xbDbf_a9340a5e8ee53eb0f3b6601eec2d71e1b}\label{classxb_1_1xbDbf_a9340a5e8ee53eb0f3b6601eec2d71e1b}}
-\index{xb::xbDbf@{xb::xbDbf}!cUpdateMM@{cUpdateMM}}
-\index{cUpdateMM@{cUpdateMM}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{cUpdateMM}{cUpdateMM}}
-{\footnotesize\ttfamily char xb\+::xb\+Dbf\+::c\+Update\+MM\hspace{0.3cm}{\ttfamily [protected]}}
-
-\mbox{\Hypertarget{classxb_1_1xbDbf_a4fcd6a86ddd32d4a9d76a4074573440a}\label{classxb_1_1xbDbf_a4fcd6a86ddd32d4a9d76a4074573440a}}
-\index{xb::xbDbf@{xb::xbDbf}!cUpdateYY@{cUpdateYY}}
-\index{cUpdateYY@{cUpdateYY}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{cUpdateYY}{cUpdateYY}}
-{\footnotesize\ttfamily char xb\+::xb\+Dbf\+::c\+Update\+YY\hspace{0.3cm}{\ttfamily [protected]}}
-
-\mbox{\Hypertarget{classxb_1_1xbDbf_a3a262abf658e5fa968b57ef457a69470}\label{classxb_1_1xbDbf_a3a262abf658e5fa968b57ef457a69470}}
-\index{xb::xbDbf@{xb::xbDbf}!cVersion@{cVersion}}
-\index{cVersion@{cVersion}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{cVersion}{cVersion}}
-{\footnotesize\ttfamily unsigned char xb\+::xb\+Dbf\+::c\+Version\hspace{0.3cm}{\ttfamily [protected]}}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_a6219f1b5e24ea12fe158cd5aea56988e}\label{classxb_1_1xbSsv_a6219f1b5e24ea12fe158cd5aea56988e}}
-\index{xb::xbDbf@{xb::xbDbf}!ErrorCodeText@{ErrorCodeText}}
-\index{ErrorCodeText@{ErrorCodeText}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{ErrorCodeText}{ErrorCodeText}}
-{\footnotesize\ttfamily const char$\ast$ xb\+::xb\+Ssv\+::\+Error\+Code\+Text\mbox{[}$\,$\mbox{]}\hspace{0.3cm}{\ttfamily [static]}, {\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbDbf_ab506450954bc86e7bf1d7c4efe681f43}\label{classxb_1_1xbDbf_ab506450954bc86e7bf1d7c4efe681f43}}
-\index{xb::xbDbf@{xb::xbDbf}!iAutoCommit@{iAutoCommit}}
-\index{iAutoCommit@{iAutoCommit}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{iAutoCommit}{iAutoCommit}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::i\+Auto\+Commit\hspace{0.3cm}{\ttfamily [protected]}}
-
-\mbox{\Hypertarget{classxb_1_1xbDbf_a6d8e193da3ca414eef1e8866ec5ca81b}\label{classxb_1_1xbDbf_a6d8e193da3ca414eef1e8866ec5ca81b}}
-\index{xb::xbDbf@{xb::xbDbf}!iDbfStatus@{iDbfStatus}}
-\index{iDbfStatus@{iDbfStatus}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{iDbfStatus}{iDbfStatus}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::i\+Dbf\+Status\hspace{0.3cm}{\ttfamily [protected]}}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}\label{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}}
-\index{xb::xbDbf@{xb::xbDbf}!iEndianType@{iEndianType}}
-\index{iEndianType@{iEndianType}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{iEndianType}{iEndianType}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Ssv\+::i\+Endian\+Type = 0\hspace{0.3cm}{\ttfamily [static]}, {\ttfamily [protected]}, {\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbDbf_a15f495446f0d75bcf2fa89e3b699d388}\label{classxb_1_1xbDbf_a15f495446f0d75bcf2fa89e3b699d388}}
-\index{xb::xbDbf@{xb::xbDbf}!iFileVersion@{iFileVersion}}
-\index{iFileVersion@{iFileVersion}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{iFileVersion}{iFileVersion}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::i\+File\+Version\hspace{0.3cm}{\ttfamily [protected]}}
-
-\mbox{\Hypertarget{classxb_1_1xbDbf_a5056757614c39f725cc775332494966a}\label{classxb_1_1xbDbf_a5056757614c39f725cc775332494966a}}
-\index{xb::xbDbf@{xb::xbDbf}!iNoOfFields@{iNoOfFields}}
-\index{iNoOfFields@{iNoOfFields}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{iNoOfFields}{iNoOfFields}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::i\+No\+Of\+Fields\hspace{0.3cm}{\ttfamily [protected]}}
-
-\mbox{\Hypertarget{classxb_1_1xbDbf_a8a9b3bce0b741e73473d3ebbd6e6f1cd}\label{classxb_1_1xbDbf_a8a9b3bce0b741e73473d3ebbd6e6f1cd}}
-\index{xb::xbDbf@{xb::xbDbf}!RecBuf@{RecBuf}}
-\index{RecBuf@{RecBuf}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{RecBuf}{RecBuf}}
-{\footnotesize\ttfamily char$\ast$ xb\+::xb\+Dbf\+::\+Rec\+Buf\hspace{0.3cm}{\ttfamily [protected]}}
-
-\mbox{\Hypertarget{classxb_1_1xbDbf_a353ebfc8a2960ef827f429ec74025606}\label{classxb_1_1xbDbf_a353ebfc8a2960ef827f429ec74025606}}
-\index{xb::xbDbf@{xb::xbDbf}!RecBuf2@{RecBuf2}}
-\index{RecBuf2@{RecBuf2}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{RecBuf2}{RecBuf2}}
-{\footnotesize\ttfamily char$\ast$ xb\+::xb\+Dbf\+::\+Rec\+Buf2\hspace{0.3cm}{\ttfamily [protected]}}
-
-\mbox{\Hypertarget{classxb_1_1xbDbf_a73f9c792d0a769e2e604c1855245a276}\label{classxb_1_1xbDbf_a73f9c792d0a769e2e604c1855245a276}}
-\index{xb::xbDbf@{xb::xbDbf}!sAlias@{sAlias}}
-\index{sAlias@{sAlias}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{sAlias}{sAlias}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} xb\+::xb\+Dbf\+::s\+Alias\hspace{0.3cm}{\ttfamily [protected]}}
-
-\mbox{\Hypertarget{classxb_1_1xbDbf_ad8c8b5eb12063bb898da1b2cc02cfce7}\label{classxb_1_1xbDbf_ad8c8b5eb12063bb898da1b2cc02cfce7}}
-\index{xb::xbDbf@{xb::xbDbf}!SchemaPtr@{SchemaPtr}}
-\index{SchemaPtr@{SchemaPtr}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{SchemaPtr}{SchemaPtr}}
-{\footnotesize\ttfamily xb\+Schema\+Rec$\ast$ xb\+::xb\+Dbf\+::\+Schema\+Ptr\hspace{0.3cm}{\ttfamily [protected]}}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}\label{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}}
-\index{xb::xbDbf@{xb::xbDbf}!sNullString@{sNullString}}
-\index{sNullString@{sNullString}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{sNullString}{sNullString}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} xb\+::xb\+Ssv\+::s\+Null\+String = \char`\"{}\char`\"{}\hspace{0.3cm}{\ttfamily [static]}, {\ttfamily [protected]}, {\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbDbf_a62f5fa9149ae0f6dc75642823de66918}\label{classxb_1_1xbDbf_a62f5fa9149ae0f6dc75642823de66918}}
-\index{xb::xbDbf@{xb::xbDbf}!uiHeaderLen@{uiHeaderLen}}
-\index{uiHeaderLen@{uiHeaderLen}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{uiHeaderLen}{uiHeaderLen}}
-{\footnotesize\ttfamily xb\+UInt16 xb\+::xb\+Dbf\+::ui\+Header\+Len\hspace{0.3cm}{\ttfamily [protected]}}
-
-\mbox{\Hypertarget{classxb_1_1xbDbf_a1760e222567e2c849f9c799b9d896e91}\label{classxb_1_1xbDbf_a1760e222567e2c849f9c799b9d896e91}}
-\index{xb::xbDbf@{xb::xbDbf}!uiRecordLen@{uiRecordLen}}
-\index{uiRecordLen@{uiRecordLen}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{uiRecordLen}{uiRecordLen}}
-{\footnotesize\ttfamily xb\+UInt16 xb\+::xb\+Dbf\+::ui\+Record\+Len\hspace{0.3cm}{\ttfamily [protected]}}
-
-\mbox{\Hypertarget{classxb_1_1xbDbf_afcd99924606be0a9e1e25180bcd1abf8}\label{classxb_1_1xbDbf_afcd99924606be0a9e1e25180bcd1abf8}}
-\index{xb::xbDbf@{xb::xbDbf}!ulCurRec@{ulCurRec}}
-\index{ulCurRec@{ulCurRec}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{ulCurRec}{ulCurRec}}
-{\footnotesize\ttfamily xb\+UInt32 xb\+::xb\+Dbf\+::ul\+Cur\+Rec\hspace{0.3cm}{\ttfamily [protected]}}
-
-\mbox{\Hypertarget{classxb_1_1xbDbf_acb594ab61dd35b17bdf28394083f8e87}\label{classxb_1_1xbDbf_acb594ab61dd35b17bdf28394083f8e87}}
-\index{xb::xbDbf@{xb::xbDbf}!ulNoOfRecs@{ulNoOfRecs}}
-\index{ulNoOfRecs@{ulNoOfRecs}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{ulNoOfRecs}{ulNoOfRecs}}
-{\footnotesize\ttfamily xb\+UInt32 xb\+::xb\+Dbf\+::ul\+No\+Of\+Recs\hspace{0.3cm}{\ttfamily [protected]}}
-
-\mbox{\Hypertarget{classxb_1_1xbFile_ae39a67ea391b46055d4ca299cb222004}\label{classxb_1_1xbFile_ae39a67ea391b46055d4ca299cb222004}}
-\index{xb::xbDbf@{xb::xbDbf}!xbase@{xbase}}
-\index{xbase@{xbase}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{xbase}{xbase}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}}$\ast$ xb\+::xb\+File\+::xbase\hspace{0.3cm}{\ttfamily [protected]}, {\ttfamily [inherited]}}
-
-
-
-The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
-\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbdbf_8h}{xbdbf.\+h}}\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbdbf_8cpp}{xbdbf.\+cpp}}\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbfields_8cpp}{xbfields.\+cpp}}\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/classxb_1_1xbFile.pdf b/docs/doxygen/latex/classxb_1_1xbFile.pdf
deleted file mode 100644
index 491c726..0000000
--- a/docs/doxygen/latex/classxb_1_1xbFile.pdf
+++ /dev/null
Binary files differ
diff --git a/docs/doxygen/latex/classxb_1_1xbFile.tex b/docs/doxygen/latex/classxb_1_1xbFile.tex
deleted file mode 100644
index b342cad..0000000
--- a/docs/doxygen/latex/classxb_1_1xbFile.tex
+++ /dev/null
@@ -1,1911 +0,0 @@
-\hypertarget{classxb_1_1xbFile}{}\doxysection{xb\+::xb\+File Class Reference}
-\label{classxb_1_1xbFile}\index{xb::xbFile@{xb::xbFile}}
-
-
-Class for handling low level file I/O.
-
-
-
-
-{\ttfamily \#include $<$xbfile.\+h$>$}
-
-Inheritance diagram for xb\+::xb\+File\+:\begin{figure}[H]
-\begin{center}
-\leavevmode
-\includegraphics[height=3.000000cm]{classxb_1_1xbFile}
-\end{center}
-\end{figure}
-\doxysubsection*{Public Member Functions}
-\begin{DoxyCompactItemize}
-\item
-\mbox{\hyperlink{classxb_1_1xbFile_a869eedd74c6eddc308852eb546c87176}{xb\+File}} (\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$x)
-\begin{DoxyCompactList}\small\item\em Class Constructor. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbFile_a491f6c48076e89da2e791a42b2727a90}{$\sim$xb\+File}} ()
-\begin{DoxyCompactList}\small\item\em Class Destructor. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a060acbfaa8d528f86cb59301814b414a}{Set\+Home\+Folders}} ()
-\begin{DoxyCompactList}\small\item\em Create Home Folders. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_aae9a2ddb0adb8165b4ac2b6a28a932f7}{Create\+Unique\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Dir\+In, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Ext\+In, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Fqn\+Out)
-\begin{DoxyCompactList}\small\item\em Create a unique file name. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ae5ffabde2c88ea58324f27e471f6bfc0}{Create\+Unique\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Dir\+In, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Ext\+In, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Fqn\+Out, xb\+Int16 i\+Option)
-\begin{DoxyCompactList}\small\item\em Create a unique file name. \end{DoxyCompactList}\item
-const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbFile_acd0fb2166b2bff7e8a1cf65a7bc8be1e}{Get\+Directory}} () const
-\begin{DoxyCompactList}\small\item\em Get the directory name. \end{DoxyCompactList}\item
-const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbFile_ac95cb882ccbcdedc9a233c6ad9fed07a}{Get\+File\+Name}} () const
-\begin{DoxyCompactList}\small\item\em Get the file name. \end{DoxyCompactList}\item
-const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbFile_a31b4e641f93206ba23e2a5a27491dcd4}{Get\+Fq\+File\+Name}} () const
-\begin{DoxyCompactList}\small\item\em Get the fully qualified file name. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbFile_ae78a85255488bc78964c16946dbaead3}{Set\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Directory)
-\begin{DoxyCompactList}\small\item\em Set the directory. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbFile_a5419eb27e56822f828b2b88a9502a636}{Set\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name)
-\begin{DoxyCompactList}\small\item\em Set the filename. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbFile_aee832fa11db2077a532f49e1329bd05a}{Set\+Fq\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Fq\+Name)
-\begin{DoxyCompactList}\small\item\em Set the fully qualifed filename. \end{DoxyCompactList}\item
-xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbFile_a638e14262410a1627819f016a16cdce2}{Get\+Block\+Size}} () const
-\begin{DoxyCompactList}\small\item\em Get the block size. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a991c5676a6f38fa752435390989f413e}{Set\+Block\+Size}} (xb\+UInt32 ul\+Block\+Size)
-\begin{DoxyCompactList}\small\item\em Set the block size. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a3c500dc9dac22c49496e4b29386b2dd3}{Get\+Open\+Mode}} () const
-\begin{DoxyCompactList}\small\item\em Get the open mode of the file. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a9b63e05b77f477ff6109ff7b9432c1b6}{Get\+Share\+Mode}} () const
-\begin{DoxyCompactList}\small\item\em Get the share mode of the file. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a60c53998e3d1b694134b20a87bc9bf5a}{Get\+File\+Dir\+Part}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Dir\+Part\+Out) const
-\begin{DoxyCompactList}\small\item\em Get the directory part of the file name. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_af5127c92892816e9bbc5c19653c4147a}{Get\+File\+Dir\+Part}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Complete\+File\+Name\+In, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Dir\+Part\+Out) const
-\begin{DoxyCompactList}\small\item\em Get the directory part of the file name. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a57a9222e5cbb51019d4eeb2c3ac89fa2}{Get\+File\+Ext\+Part}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Ext\+Part\+Out) const
-\begin{DoxyCompactList}\small\item\em Get the extension part of the file name. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ab289b6ffe955321160c1f90220c22e25}{Get\+File\+Ext\+Part}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Complete\+File\+Name\+In, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Ext\+Part\+Out) const
-\begin{DoxyCompactList}\small\item\em Get the extension part of the file name. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a81422b3dd52763d2cc6c77237ec9af0a}{Get\+File\+Name\+Part}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name\+Part\+Out) const
-\begin{DoxyCompactList}\small\item\em Get the name part of the file name. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a6110763c5ae996b72c7a62c15bdecc73}{Get\+File\+Name\+Part}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Complete\+File\+Name\+In, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name\+Part\+Out) const
-\begin{DoxyCompactList}\small\item\em Get the name part of the file name. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a5548236d38d43b89ae29b9a015b1f678}{Get\+File\+Type}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Type) const
-\begin{DoxyCompactList}\small\item\em Get the file type aka Capitalized file extension. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_aaf2e697751a0beff41432a66bb83fb5e}{Get\+Xbase\+File\+Type\+Byte}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, xb\+Int16 \&i\+Version)
-\begin{DoxyCompactList}\small\item\em Get the file type byte and version of the dbf file. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a7af337808919680b90710ad5e8a99232}{Get\+Xbase\+File\+Type\+Byte}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, unsigned char \&c\+File\+Type\+Byte)
-\begin{DoxyCompactList}\small\item\em Get the file type byte and version of the dbf file. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a78aebdd21d3de46a450d5f835e3027f6}{Get\+Xbase\+File\+Type\+Byte}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, unsigned char \&c\+File\+Type\+Byte, xb\+Int16 \&i\+Version)
-\begin{DoxyCompactList}\small\item\em Get the file type byte and version of the dbf file. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ae2b6ac26018dc28f77afbb3f008c3f66}{Determine\+Xbase\+Table\+Version}} (unsigned char c\+File\+Type\+Byte) const
-\begin{DoxyCompactList}\small\item\em Determine xbase dbf version. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a5a740033664c9ad2611c90e2a6d0c2d3}{Determine\+Xbase\+Memo\+Version}} (unsigned char c\+File\+Type\+Byte) const
-\begin{DoxyCompactList}\small\item\em Determine which version the memo (dbt) file is. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a78bd8a11dce102647095baf3aff2b006}{File\+Exists}} () const
-\begin{DoxyCompactList}\small\item\em Determines if a file exists. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a174d8a6aabc9cfcd32fedbd1e5b13ddd}{File\+Exists}} (xb\+Int16 i\+Option) const
-\begin{DoxyCompactList}\small\item\em Determines if a file exists. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a61130b4fbf4cf9d5972dcb4993de2f94}{File\+Exists}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name) const
-\begin{DoxyCompactList}\small\item\em Determines if a file exists. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a0592168f39a10f2a401a88ef781f6148}{File\+Exists}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, xb\+Int16 i\+Option) const
-\begin{DoxyCompactList}\small\item\em Determines if a file exists. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a7fa837938a32dc9ca3fbc81cbaf50f59}{File\+Is\+Open}} () const
-\begin{DoxyCompactList}\small\item\em Determines if file is open. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_aa1bb80340abc7a5c22f87f878e9dc825}{Read\+Block}} (xb\+UInt32 ul\+Block\+No, size\+\_\+t read\+Size, void $\ast$buf)
-\begin{DoxyCompactList}\small\item\em Read a block of data from file. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_aef696b1c4c0ef5338e818599f695d485}{Read\+Block}} (xb\+UInt32 ul\+Block\+No, xb\+UInt32 ul\+Block\+Size, size\+\_\+t read\+Size, void $\ast$buf)
-\begin{DoxyCompactList}\small\item\em Read a block of data from file. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a5d871dcfecc2b4338f7a13722aab766c}{Write\+Block}} (xb\+UInt32 ul\+Block\+No, size\+\_\+t write\+Size, void $\ast$buf)
-\begin{DoxyCompactList}\small\item\em Write a block of data to file. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a50b63c39e49d44e52078038027b24cc5}{Get\+File\+Size}} (xb\+UInt64 \&ull\+File\+Size)
-\begin{DoxyCompactList}\small\item\em Get the size of the file as reported by the OS. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a02df78f4c90313243f508fc56b95aba8}{Get\+File\+Mtime}} (time\+\_\+t \&mtime)
-\begin{DoxyCompactList}\small\item\em Get the time of last file modification timestamp as reported by the OS. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} \mbox{\hyperlink{classxb_1_1xbFile_ab14e4a11427f5efb81cba1dd32bd1aa1}{e\+Get\+Double}} (const char $\ast$p) const
-\begin{DoxyCompactList}\small\item\em Get a portable double value. \end{DoxyCompactList}\item
-xb\+Int32 \mbox{\hyperlink{classxb_1_1xbFile_a60b24a5afc984c586bf384c7e915ba0d}{e\+Get\+Int32}} (const char $\ast$p) const
-\begin{DoxyCompactList}\small\item\em Get a portable long value. \end{DoxyCompactList}\item
-xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbFile_a78f052529d39a18deaface5a0d47d0b0}{e\+Get\+UInt32}} (const char $\ast$p) const
-\begin{DoxyCompactList}\small\item\em Get a portable unsigned long value. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ac40c991110ddc6fb30a72d90f4652762}{e\+Get\+Int16}} (const char $\ast$p) const
-\begin{DoxyCompactList}\small\item\em Get a portable short value. \end{DoxyCompactList}\item
-xb\+UInt16 \mbox{\hyperlink{classxb_1_1xbFile_a936ade458e6d5e6d29f9b5031888d189}{e\+Get\+UInt16}} (const char $\ast$p) const
-\begin{DoxyCompactList}\small\item\em Get a portable unsigned short value. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbFile_a98b6ff533ae93f90c977a2ba23eeb105}{e\+Put\+Double}} (char $\ast$p, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} d)
-\begin{DoxyCompactList}\small\item\em Write a portable double value to memory location. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbFile_a19c37f76a2ccbb45019cb0fc373d3f46}{e\+Put\+Int32}} (char $\ast$p, xb\+Int32 l)
-\begin{DoxyCompactList}\small\item\em Write a portable long value to memory location. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbFile_aa3f6ceae4b96f24875d86848bf13a173}{e\+Put\+UInt32}} (char $\ast$p, xb\+UInt32 ul)
-\begin{DoxyCompactList}\small\item\em Write a portable unsigned long value to memory location. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbFile_a29130f12739ac8fa837f4eaedf1338b2}{e\+Put\+Int16}} (char $\ast$p, xb\+Int16 s)
-\begin{DoxyCompactList}\small\item\em Write a portable short value to memory location. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbFile_a65e9839f92b96eac7b0d071fac3bbe40}{e\+Put\+UInt16}} (char $\ast$p, xb\+UInt16 s)
-\begin{DoxyCompactList}\small\item\em Write a portable unsigned short value to memory location. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a18830b5755d74818f60d9c7ce38ddf2d}{xb\+Fclose}} ()
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fclose. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_af5b6356832d2a67212070a1aa605f170}{xb\+Feof}} ()
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary feof. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ad205184d43409f04216540ae22f15009}{xb\+Fflush}} ()
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fflush. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_afb1c584d2895ffb7834df80aea7eb1e4}{xb\+Fgetc}} (xb\+Int32 \&c)
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fgetc. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a5ee229bda4d7d6695e122200e581e7a6}{xb\+Fgetc}} (char \&c)
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fgetc. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a7cdfef5ede9ac98d44a28a6b7a70972c}{xb\+Fopen}} (xb\+Int16 i\+Open\+Mode)
-\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a0548cedf0f26b7d8ac221f75b0cd048c}{xb\+Fopen}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Open\+Mode, xb\+Int16 i\+Share\+Mode)
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fopen. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_aabd113333b49c36cad23244b392baab4}{xb\+Fopen}} (xb\+Int16 i\+Open\+Mode, xb\+Int16 i\+Share\+Mode)
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fopen. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ab0fa19686ca8953ff4b556fb5b249135}{xb\+Fopen}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Mode, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, xb\+Int16 i\+Share\+Mode)
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fopen. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_af2e940c78956e5cb6824f9a1bc404896}{xb\+Fputc}} (xb\+Int32 c)
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fputc. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a863f74cf17df8186d88586b4d2a6441a}{xb\+Fputc}} (xb\+Int32 c, xb\+Int32 i\+No\+Times)
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fputc. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a698f3b40216778562e639e6ca1a47573}{xb\+Fputs}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s)
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fputs. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ab4f6afaa1f77539f27a4f05c26e54e2f}{xb\+Fread}} (void $\ast$ptr, size\+\_\+t size, size\+\_\+t nmemb)
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fread. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ad245955ace26e5dde85fd4373b30d026}{xb\+Fgets}} (size\+\_\+t l\+Size, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Line)
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fgets. \end{DoxyCompactList}\item
-size\+\_\+t \mbox{\hyperlink{classxb_1_1xbFile_a0e1c06aedfa7fbcb92e117f891edd13b}{xb\+Ftell}} ()
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary ftell. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a5337ab8918df240910c0d19b4f298e3d}{xb\+Fseek}} (xb\+Int64 ll\+Offset, xb\+Int32 whence)
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fseek. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbFile_a9891b792f585a696f38a5cf959e30918}{xb\+FTurn\+Off\+File\+Buffering}} ()
-\begin{DoxyCompactList}\small\item\em Turn off file buffering. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a6aadd871d1782944703fed773d44b85f}{xb\+Fwrite}} (const void $\ast$ptr, size\+\_\+t l\+Size, size\+\_\+t l\+Nmemb)
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fwrite. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a08463f506f425c2385acbe1a561506e9}{xb\+Read\+Until}} (const char c\+Delim, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Out)
-\begin{DoxyCompactList}\small\item\em Read file until a particular character is encountered on input stream. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a6d919366c2ec95e529906bf8842cbf07}{xb\+Remove}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, xb\+Int16 i\+Option)
-\begin{DoxyCompactList}\small\item\em Delete file. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a58f6a6751fdf7e9549c273bb75d93eb5}{xb\+Remove}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name)
-\begin{DoxyCompactList}\small\item\em Delete file. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ab3c668a8570433188382d31d7c60bd48}{xb\+Remove}} ()
-\begin{DoxyCompactList}\small\item\em Delete file. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_afc8ce113aa72611a278233f9bb170012}{xb\+Rename}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Old\+Name, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+New\+Name)
-\begin{DoxyCompactList}\small\item\em Rename file. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbFile_a7996b6e084665c37c3892faea64b3505}{xb\+Rewind}} ()
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for rewind. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a518bfcbfa3699d883cf89affee383296}{xb\+Truncate}} (xb\+Int64 ll\+Size)
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for ftruncate. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a361e3cc318bbf1c4d10f069e0800a24e}{Name\+Suffix\+Missing}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, xb\+Int16 i\+Option) const
-\begin{DoxyCompactList}\small\item\em Determines status of file extension. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}{Display\+Error}} (xb\+Int16 Error\+Code) const
-\begin{DoxyCompactList}\small\item\em Display error message on console for a given error number. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a6fbb9c3a550ab0b3378f9586a57791d2}{Get\+Default\+Date\+Format}} () const
-\begin{DoxyCompactList}\small\item\em Get the default date format. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}{Get\+Data\+Directory}} () const
-\begin{DoxyCompactList}\small\item\em Get the current data directory. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}{Get\+Endian\+Type}} () const
-\begin{DoxyCompactList}\small\item\em Get the Endian type. \end{DoxyCompactList}\item
-const char $\ast$ \mbox{\hyperlink{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}{Get\+Error\+Message}} (xb\+Int16 Error\+Code) const
-\begin{DoxyCompactList}\small\item\em Get an error message. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}{Set\+Data\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Data\+Directory)
-\begin{DoxyCompactList}\small\item\em Set the data directory. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}{Set\+Default\+Date\+Format}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Default\+Date\+Format)
-\begin{DoxyCompactList}\small\item\em Set the default date format. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}{Bit\+Set}} (unsigned char c, xb\+Int16 i\+Bit\+No) const
-\begin{DoxyCompactList}\small\item\em Check a bit in a one byte field and see if it is set. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}{Bit\+Dump}} (unsigned char c) const
-\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}{Bit\+Dump}} (char c) const
-\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}{Get\+Default\+Auto\+Commit}} () const
-\begin{DoxyCompactList}\small\item\em Get the default auto commit setting. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}{Set\+Default\+Auto\+Commit}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Default\+Auto\+Commit)
-\begin{DoxyCompactList}\small\item\em Set the default auto commit. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}{Get\+Home\+Dir}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Home\+Dir\+Out)
-\begin{DoxyCompactList}\small\item\em Get home directory. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}{Get\+Log\+Directory}} () const
-\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}{Get\+Log\+File\+Name}} () const
-\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}{Set\+Log\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Log\+Directory)
-\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}{Get\+Multi\+User}} () const
-\begin{DoxyCompactList}\small\item\em Get the multi user setting. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}{Set\+Multi\+User}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Multi\+User)
-\begin{DoxyCompactList}\small\item\em Get the multi user setting. \end{DoxyCompactList}\end{DoxyCompactItemize}
-\doxysubsection*{Static Public Attributes}
-\begin{DoxyCompactItemize}
-\item
-static const char $\ast$ \mbox{\hyperlink{classxb_1_1xbSsv_a6219f1b5e24ea12fe158cd5aea56988e}{Error\+Code\+Text}} \mbox{[}$\,$\mbox{]}
-\end{DoxyCompactItemize}
-\doxysubsection*{Protected Member Functions}
-\begin{DoxyCompactItemize}
-\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a904ec348fd029d4a76e72b8fde636108}{Set\+Endian\+Type}} ()
-\begin{DoxyCompactList}\small\item\em Set the endian type. \end{DoxyCompactList}\end{DoxyCompactItemize}
-\doxysubsection*{Protected Attributes}
-\begin{DoxyCompactItemize}
-\item
-\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$ \mbox{\hyperlink{classxb_1_1xbFile_ae39a67ea391b46055d4ca299cb222004}{xbase}}
-\end{DoxyCompactItemize}
-\doxysubsection*{Static Protected Attributes}
-\begin{DoxyCompactItemize}
-\item
-static xb\+Int16 \mbox{\hyperlink{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}{i\+Endian\+Type}} = 0
-\item
-static \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \mbox{\hyperlink{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}{s\+Null\+String}} = \char`\"{}\char`\"{}
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Detailed Description}
-Class for handling low level file I/O.
-
-The \mbox{\hyperlink{classxb_1_1xbFile}{xb\+File}} class is used as an abstraction layer to isolate the library from the nuances of different operating systems and machine architectures.
-
-This module handles low level file I/O and is a base class for the (dbf) table, (dbt) memo and (ndx,mdx) index classes. Files are opened and manipulated via methods in the \mbox{\hyperlink{classxb_1_1xbFile}{xb\+File}} class.~\newline
- This class handles\+:~\newline
- 1) Big and little endian reads/writes~\newline
- 2) 32 or 64 bit system calls, depending on OS~\newline
- 3) Various different c/c++ calls to open/close/read/write based on OS and compiler version~\newline
- ~\newline
- If you are wanting to port this library to a new platform, start with this class. This class could be used if you want to write a platform independent program that needs R/W file access.
-
-\doxysubsection{Constructor \& Destructor Documentation}
-\mbox{\Hypertarget{classxb_1_1xbFile_a869eedd74c6eddc308852eb546c87176}\label{classxb_1_1xbFile_a869eedd74c6eddc308852eb546c87176}}
-\index{xb::xbFile@{xb::xbFile}!xbFile@{xbFile}}
-\index{xbFile@{xbFile}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{xbFile()}{xbFile()}}
-{\footnotesize\ttfamily xb\+::xb\+File\+::xb\+File (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$}]{x }\end{DoxyParamCaption})}
-
-
-
-Class Constructor.
-
-\mbox{\Hypertarget{classxb_1_1xbFile_a491f6c48076e89da2e791a42b2727a90}\label{classxb_1_1xbFile_a491f6c48076e89da2e791a42b2727a90}}
-\index{xb::xbFile@{xb::xbFile}!````~xbFile@{$\sim$xbFile}}
-\index{````~xbFile@{$\sim$xbFile}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{$\sim$xbFile()}{~xbFile()}}
-{\footnotesize\ttfamily xb\+::xb\+File\+::$\sim$xb\+File (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
-
-
-Class Destructor.
-
-
-
-\doxysubsection{Member Function Documentation}
-\mbox{\Hypertarget{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}\label{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}}
-\index{xb::xbFile@{xb::xbFile}!BitDump@{BitDump}}
-\index{BitDump@{BitDump}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{BitDump()}{BitDump()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Bit\+Dump (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}\label{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}}
-\index{xb::xbFile@{xb::xbFile}!BitDump@{BitDump}}
-\index{BitDump@{BitDump}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{BitDump()}{BitDump()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Bit\+Dump (\begin{DoxyParamCaption}\item[{unsigned char}]{c }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}\label{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}}
-\index{xb::xbFile@{xb::xbFile}!BitSet@{BitSet}}
-\index{BitSet@{BitSet}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{BitSet()}{BitSet()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Ssv\+::\+Bit\+Set (\begin{DoxyParamCaption}\item[{unsigned char}]{c, }\item[{xb\+Int16}]{i\+Bit\+No }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Check a bit in a one byte field and see if it is set.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c} & One byte char field to examine. \\
-\hline
-{\em i\+Bit\+No} & which bit to examine. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-xb\+True Bit is set~\newline
- xb\+False Bit is not set
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_aae9a2ddb0adb8165b4ac2b6a28a932f7}\label{classxb_1_1xbFile_aae9a2ddb0adb8165b4ac2b6a28a932f7}}
-\index{xb::xbFile@{xb::xbFile}!CreateUniqueFileName@{CreateUniqueFileName}}
-\index{CreateUniqueFileName@{CreateUniqueFileName}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{CreateUniqueFileName()}{CreateUniqueFileName()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Create\+Unique\+File\+Name (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Dir\+In, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Ext\+In, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Fqn\+Out }\end{DoxyParamCaption})}
-
-
-
-Create a unique file name.
-
-Given a directory and file extension as inputs, create a unique file name.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Dir\+In} & Directory \\
-\hline
-{\em s\+Ext\+In} & File Extension \\
-\hline
-{\em s\+Fqn\+Out} & A fully qualifed unique file name as output \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_ae5ffabde2c88ea58324f27e471f6bfc0}\label{classxb_1_1xbFile_ae5ffabde2c88ea58324f27e471f6bfc0}}
-\index{xb::xbFile@{xb::xbFile}!CreateUniqueFileName@{CreateUniqueFileName}}
-\index{CreateUniqueFileName@{CreateUniqueFileName}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{CreateUniqueFileName()}{CreateUniqueFileName()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Create\+Unique\+File\+Name (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Dir\+In, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Ext\+In, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Fqn\+Out, }\item[{xb\+Int16}]{i\+Option }\end{DoxyParamCaption})}
-
-
-
-Create a unique file name.
-
-Given a directory and file extension as inputs, create a unique file name.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Dir\+In} & Directory \\
-\hline
-{\em s\+Ext\+In} & File Extension \\
-\hline
-{\em i\+Option} & 0 -\/ look only for one file for a given directory and extension~\newline
- 1 -\/ if file name extension is \char`\"{}dbf\char`\"{} or \char`\"{}\+DBF\char`\"{}, verify unique dbt or DBT (memo) file is also available~\newline
- \\
-\hline
-{\em s\+Fqn\+Out} & A fully qualifed unique file name as output \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a5a740033664c9ad2611c90e2a6d0c2d3}\label{classxb_1_1xbFile_a5a740033664c9ad2611c90e2a6d0c2d3}}
-\index{xb::xbFile@{xb::xbFile}!DetermineXbaseMemoVersion@{DetermineXbaseMemoVersion}}
-\index{DetermineXbaseMemoVersion@{DetermineXbaseMemoVersion}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{DetermineXbaseMemoVersion()}{DetermineXbaseMemoVersion()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Determine\+Xbase\+Memo\+Version (\begin{DoxyParamCaption}\item[{unsigned char}]{c\+File\+Type\+Byte }\end{DoxyParamCaption}) const}
-
-
-
-Determine which version the memo (dbt) file is.
-
-This routine uses the first byte in the dbf file to determine which memo file version is in use. The main difference between version 3 and 4 is that version 4 will reuse blocks if they become available. Version 3 does not.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c\+File\+Type\+Byte} & is an output field and is one of\+:~\newline
- ~\newline
- 0 -\/ none~\newline
- 3 -\/ Dbase III+~\newline
- 4 -\/ Dbase IV~\newline
-\\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_ae2b6ac26018dc28f77afbb3f008c3f66}\label{classxb_1_1xbFile_ae2b6ac26018dc28f77afbb3f008c3f66}}
-\index{xb::xbFile@{xb::xbFile}!DetermineXbaseTableVersion@{DetermineXbaseTableVersion}}
-\index{DetermineXbaseTableVersion@{DetermineXbaseTableVersion}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{DetermineXbaseTableVersion()}{DetermineXbaseTableVersion()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Determine\+Xbase\+Table\+Version (\begin{DoxyParamCaption}\item[{unsigned char}]{c\+File\+Type\+Byte }\end{DoxyParamCaption}) const}
-
-
-
-Determine xbase dbf version.
-
-This routine is used to determine which version of the Xbase classes can be used for a given DBF file.~\newline
-
-
-It attempts to use the highest version compiled into the library.~\newline
-
-
-References\+:~\newline
- This routine uses the first byte from the dbf file.~\newline
- Per DBase documentation\+:~\newline
- Valid d\+BASE for Windows table file, bits 0-\/2 indicate version number\+: 3 for d\+BASE Level 5, 4 for d\+BASE Level 7.~\newline
- Bit 3 and bit 7 indicate presence of a d\+BASE IV or d\+BASE for Windows memo file;~\newline
- Bits 4-\/6 indicate the presence of a d\+BASE IV SQL table;~\newline
- Bit 7 indicates the presence of any .DBT memo file (either a d\+BASE III PLUS type or a d\+BASE IV or d\+BASE for Windows memo file).~\newline
- ~\newline
- Bachmann spec (used extensively in library build), page 7 -\/ does not match DBase documentation~\newline
- ~\newline
- returns~\newline
- 0 -\/ unknown~\newline
- 3 -\/ Dbase level 3~\newline
- 4 -\/ Dbase level 4~\newline
- 5 -\/ Dbase Level 5 (future)~\newline
- 7 -\/ Dbase Level 7 (future)~\newline
- ~\newline
- 1x -\/ Clipper files (future)~\newline
- 2x -\/ Foxbase files (future)~\newline
- ~\newline
- \mbox{\Hypertarget{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}\label{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}}
-\index{xb::xbFile@{xb::xbFile}!DisplayError@{DisplayError}}
-\index{DisplayError@{DisplayError}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{DisplayError()}{DisplayError()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Display\+Error (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Error\+Code }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Display error message on console for a given error number.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Error\+Code} & Error number to reference \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbFile_ab14e4a11427f5efb81cba1dd32bd1aa1}\label{classxb_1_1xbFile_ab14e4a11427f5efb81cba1dd32bd1aa1}}
-\index{xb::xbFile@{xb::xbFile}!eGetDouble@{eGetDouble}}
-\index{eGetDouble@{eGetDouble}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{eGetDouble()}{eGetDouble()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} xb\+::xb\+File\+::e\+Get\+Double (\begin{DoxyParamCaption}\item[{const char $\ast$}]{p }\end{DoxyParamCaption}) const}
-
-
-
-Get a portable double value.
-
-This routine returns a double value from an 8 byte character stream, accounting for endian type.
-
-Converts a double (64 bit floating point) value stored at p from a portable format to the machine format.
-
-
-\begin{DoxyParams}{Parameters}
-{\em p} & pointer to memory containing the portable double value\\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-the double value.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_ac40c991110ddc6fb30a72d90f4652762}\label{classxb_1_1xbFile_ac40c991110ddc6fb30a72d90f4652762}}
-\index{xb::xbFile@{xb::xbFile}!eGetInt16@{eGetInt16}}
-\index{eGetInt16@{eGetInt16}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{eGetInt16()}{eGetInt16()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::e\+Get\+Int16 (\begin{DoxyParamCaption}\item[{const char $\ast$}]{p }\end{DoxyParamCaption}) const}
-
-
-
-Get a portable short value.
-
-This routine returns a short int value from a 2 byte character stream, accounting for endian type.
-
-
-\begin{DoxyParams}{Parameters}
-{\em p} & pointer to memory containing the portable long value\\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-the short value.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a60b24a5afc984c586bf384c7e915ba0d}\label{classxb_1_1xbFile_a60b24a5afc984c586bf384c7e915ba0d}}
-\index{xb::xbFile@{xb::xbFile}!eGetInt32@{eGetInt32}}
-\index{eGetInt32@{eGetInt32}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{eGetInt32()}{eGetInt32()}}
-{\footnotesize\ttfamily xb\+Int32 xb\+::xb\+File\+::e\+Get\+Int32 (\begin{DoxyParamCaption}\item[{const char $\ast$}]{p }\end{DoxyParamCaption}) const}
-
-
-
-Get a portable long value.
-
-This routine returns a long int value from a 4 byte character stream, accounting for endian type.
-
-
-\begin{DoxyParams}{Parameters}
-{\em p} & pointer to memory containing the portable long value\\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-the long value.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a936ade458e6d5e6d29f9b5031888d189}\label{classxb_1_1xbFile_a936ade458e6d5e6d29f9b5031888d189}}
-\index{xb::xbFile@{xb::xbFile}!eGetUInt16@{eGetUInt16}}
-\index{eGetUInt16@{eGetUInt16}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{eGetUInt16()}{eGetUInt16()}}
-{\footnotesize\ttfamily xb\+UInt16 xb\+::xb\+File\+::e\+Get\+UInt16 (\begin{DoxyParamCaption}\item[{const char $\ast$}]{p }\end{DoxyParamCaption}) const}
-
-
-
-Get a portable unsigned short value.
-
-This routine returns a short unsigned int value from a 2 byte character stream, accounting for endian type.
-
-
-\begin{DoxyParams}{Parameters}
-{\em p} & pointer to memory containing the portable long value\\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-the short value.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a78f052529d39a18deaface5a0d47d0b0}\label{classxb_1_1xbFile_a78f052529d39a18deaface5a0d47d0b0}}
-\index{xb::xbFile@{xb::xbFile}!eGetUInt32@{eGetUInt32}}
-\index{eGetUInt32@{eGetUInt32}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{eGetUInt32()}{eGetUInt32()}}
-{\footnotesize\ttfamily xb\+UInt32 xb\+::xb\+File\+::e\+Get\+UInt32 (\begin{DoxyParamCaption}\item[{const char $\ast$}]{p }\end{DoxyParamCaption}) const}
-
-
-
-Get a portable unsigned long value.
-
-This routine returns an unsigned long int value from a 4 byte character stream, accounting for endian type.
-
-
-\begin{DoxyParams}{Parameters}
-{\em p} & pointer to memory containing the portable long value\\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-the unsigned long value.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a98b6ff533ae93f90c977a2ba23eeb105}\label{classxb_1_1xbFile_a98b6ff533ae93f90c977a2ba23eeb105}}
-\index{xb::xbFile@{xb::xbFile}!ePutDouble@{ePutDouble}}
-\index{ePutDouble@{ePutDouble}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{ePutDouble()}{ePutDouble()}}
-{\footnotesize\ttfamily void xb\+::xb\+File\+::e\+Put\+Double (\begin{DoxyParamCaption}\item[{char $\ast$}]{c, }\item[{\mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}}}]{d }\end{DoxyParamCaption})}
-
-
-
-Write a portable double value to memory location.
-
-Converts a double (64 bit floating point) value from machine format to a portable format and stores the converted value in the memory referenced by c.
-
-This routine puts a double value to an 8 byte character stream
-
-
-\begin{DoxyParams}{Parameters}
-{\em c} & Pointer to memory to hold converted value \\
-\hline
-{\em d} & Input value to be converted \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbFile_a29130f12739ac8fa837f4eaedf1338b2}\label{classxb_1_1xbFile_a29130f12739ac8fa837f4eaedf1338b2}}
-\index{xb::xbFile@{xb::xbFile}!ePutInt16@{ePutInt16}}
-\index{ePutInt16@{ePutInt16}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{ePutInt16()}{ePutInt16()}}
-{\footnotesize\ttfamily void xb\+::xb\+File\+::e\+Put\+Int16 (\begin{DoxyParamCaption}\item[{char $\ast$}]{c, }\item[{xb\+Int16}]{s }\end{DoxyParamCaption})}
-
-
-
-Write a portable short value to memory location.
-
-Converts a short (16 bit integer) value from machine format to a portable format and stores the converted value in the memory referenced by c.
-
-This routine puts a short value to a 2 byte character stream
-
-
-\begin{DoxyParams}{Parameters}
-{\em c} & Pointer to memory to hold converted value \\
-\hline
-{\em s} & Input value to be converted \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbFile_a19c37f76a2ccbb45019cb0fc373d3f46}\label{classxb_1_1xbFile_a19c37f76a2ccbb45019cb0fc373d3f46}}
-\index{xb::xbFile@{xb::xbFile}!ePutInt32@{ePutInt32}}
-\index{ePutInt32@{ePutInt32}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{ePutInt32()}{ePutInt32()}}
-{\footnotesize\ttfamily void xb\+::xb\+File\+::e\+Put\+Int32 (\begin{DoxyParamCaption}\item[{char $\ast$}]{c, }\item[{xb\+Int32}]{l }\end{DoxyParamCaption})}
-
-
-
-Write a portable long value to memory location.
-
-Converts a long (32 bit integer) value from machine format to a portable format and stores the converted value in the memory referenced by c.
-
-This routine puts a long value to a 4 byte character stream.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c} & Pointer to memory to hold converted value \\
-\hline
-{\em l} & Input value to be converted \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbFile_a65e9839f92b96eac7b0d071fac3bbe40}\label{classxb_1_1xbFile_a65e9839f92b96eac7b0d071fac3bbe40}}
-\index{xb::xbFile@{xb::xbFile}!ePutUInt16@{ePutUInt16}}
-\index{ePutUInt16@{ePutUInt16}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{ePutUInt16()}{ePutUInt16()}}
-{\footnotesize\ttfamily void xb\+::xb\+File\+::e\+Put\+UInt16 (\begin{DoxyParamCaption}\item[{char $\ast$}]{c, }\item[{xb\+UInt16}]{s }\end{DoxyParamCaption})}
-
-
-
-Write a portable unsigned short value to memory location.
-
-Converts an unsigned short (16 bit integer) value from machine format to a portable format and stores the converted value in the memory referenced by c.
-
-This routine puts an unsigned short value to a 2 byte character stream
-
-
-\begin{DoxyParams}{Parameters}
-{\em c} & Pointer to memory to hold converted value \\
-\hline
-{\em s} & Input value to be converted \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbFile_aa3f6ceae4b96f24875d86848bf13a173}\label{classxb_1_1xbFile_aa3f6ceae4b96f24875d86848bf13a173}}
-\index{xb::xbFile@{xb::xbFile}!ePutUInt32@{ePutUInt32}}
-\index{ePutUInt32@{ePutUInt32}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{ePutUInt32()}{ePutUInt32()}}
-{\footnotesize\ttfamily void xb\+::xb\+File\+::e\+Put\+UInt32 (\begin{DoxyParamCaption}\item[{char $\ast$}]{c, }\item[{xb\+UInt32}]{ul }\end{DoxyParamCaption})}
-
-
-
-Write a portable unsigned long value to memory location.
-
-Converts an unsigned long (32 bit integer) value from machine format to a portable format and stores the converted value in the memory referenced by c.
-
-This routine puts an unsigned long value to a 4 byte character stream.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c} & Pointer to memory to hold converted value \\
-\hline
-{\em ul} & Input value to be converted \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbFile_a78bd8a11dce102647095baf3aff2b006}\label{classxb_1_1xbFile_a78bd8a11dce102647095baf3aff2b006}}
-\index{xb::xbFile@{xb::xbFile}!FileExists@{FileExists}}
-\index{FileExists@{FileExists}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{FileExists()}{FileExists()}\hspace{0.1cm}{\footnotesize\ttfamily [1/4]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+File\+::\+File\+Exists (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
-
-
-
-Determines if a file exists.
-
-\begin{DoxyReturn}{Returns}
-xb\+True if file exists~\newline
- xb\+False if file does not exist
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a61130b4fbf4cf9d5972dcb4993de2f94}\label{classxb_1_1xbFile_a61130b4fbf4cf9d5972dcb4993de2f94}}
-\index{xb::xbFile@{xb::xbFile}!FileExists@{FileExists}}
-\index{FileExists@{FileExists}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{FileExists()}{FileExists()}\hspace{0.1cm}{\footnotesize\ttfamily [2/4]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+File\+::\+File\+Exists (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name }\end{DoxyParamCaption}) const}
-
-
-
-Determines if a file exists.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+File\+Name} & -\/ file name to check for\\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-xb\+True if file exists~\newline
- xb\+False if file does not exist
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a0592168f39a10f2a401a88ef781f6148}\label{classxb_1_1xbFile_a0592168f39a10f2a401a88ef781f6148}}
-\index{xb::xbFile@{xb::xbFile}!FileExists@{FileExists}}
-\index{FileExists@{FileExists}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{FileExists()}{FileExists()}\hspace{0.1cm}{\footnotesize\ttfamily [3/4]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+File\+::\+File\+Exists (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name, }\item[{xb\+Int16}]{i\+Option }\end{DoxyParamCaption}) const}
-
-
-
-Determines if a file exists.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+File\+Name} & -\/ file name to check for \\
-\hline
-{\em i\+Option} & if 1, assume this is a request for a dbf file and check for the a dbt memo file also, returns true if both files are found\\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-xb\+True if both dbf and dbt files exist~\newline
- xb\+False if file does not exist
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a174d8a6aabc9cfcd32fedbd1e5b13ddd}\label{classxb_1_1xbFile_a174d8a6aabc9cfcd32fedbd1e5b13ddd}}
-\index{xb::xbFile@{xb::xbFile}!FileExists@{FileExists}}
-\index{FileExists@{FileExists}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{FileExists()}{FileExists()}\hspace{0.1cm}{\footnotesize\ttfamily [4/4]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+File\+::\+File\+Exists (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Option }\end{DoxyParamCaption}) const}
-
-
-
-Determines if a file exists.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Option} & if 1, assume this is a request for a dbf file and check for the a dbt memo file also, returns true if both files are found\\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-xb\+True if both files exist~\newline
- xb\+False if file does not exist
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a7fa837938a32dc9ca3fbc81cbaf50f59}\label{classxb_1_1xbFile_a7fa837938a32dc9ca3fbc81cbaf50f59}}
-\index{xb::xbFile@{xb::xbFile}!FileIsOpen@{FileIsOpen}}
-\index{FileIsOpen@{FileIsOpen}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{FileIsOpen()}{FileIsOpen()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+File\+::\+File\+Is\+Open (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
-
-
-
-Determines if file is open.
-
-\begin{DoxyReturn}{Returns}
-xb\+True if file is open~\newline
- xb\+False if file is not open
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a638e14262410a1627819f016a16cdce2}\label{classxb_1_1xbFile_a638e14262410a1627819f016a16cdce2}}
-\index{xb::xbFile@{xb::xbFile}!GetBlockSize@{GetBlockSize}}
-\index{GetBlockSize@{GetBlockSize}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{GetBlockSize()}{GetBlockSize()}}
-{\footnotesize\ttfamily xb\+UInt32 xb\+::xb\+File\+::\+Get\+Block\+Size (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
-
-
-
-Get the block size.
-
-\begin{DoxyReturn}{Returns}
-Block Size
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}\label{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}}
-\index{xb::xbFile@{xb::xbFile}!GetDataDirectory@{GetDataDirectory}}
-\index{GetDataDirectory@{GetDataDirectory}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{GetDataDirectory()}{GetDataDirectory()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Data\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the current data directory.
-
-\begin{DoxyReturn}{Returns}
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing the current data directory where the database files are stored.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}\label{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}}
-\index{xb::xbFile@{xb::xbFile}!GetDefaultAutoCommit@{GetDefaultAutoCommit}}
-\index{GetDefaultAutoCommit@{GetDefaultAutoCommit}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{GetDefaultAutoCommit()}{GetDefaultAutoCommit()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Ssv\+::\+Get\+Default\+Auto\+Commit (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the default auto commit setting.
-
-When auto commit is enabled, the library will automatically post any updates when moving off an updated record or closing files. If auto commit is disabled, the application program will need to explicitly update the tables using using dbf-\/\texorpdfstring{$>$}{>}Put() and dbf-\/\texorpdfstring{$>$}{>}Append\+Record().
-
-\begin{DoxyReturn}{Returns}
-xb\+True if auto commit is turned on~\newline
- xb\+False is auto commit is turned off
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a6fbb9c3a550ab0b3378f9586a57791d2}\label{classxb_1_1xbSsv_a6fbb9c3a550ab0b3378f9586a57791d2}}
-\index{xb::xbFile@{xb::xbFile}!GetDefaultDateFormat@{GetDefaultDateFormat}}
-\index{GetDefaultDateFormat@{GetDefaultDateFormat}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{GetDefaultDateFormat()}{GetDefaultDateFormat()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Default\+Date\+Format (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the default date format.
-
-\begin{DoxyReturn}{Returns}
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing the default date format.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_acd0fb2166b2bff7e8a1cf65a7bc8be1e}\label{classxb_1_1xbFile_acd0fb2166b2bff7e8a1cf65a7bc8be1e}}
-\index{xb::xbFile@{xb::xbFile}!GetDirectory@{GetDirectory}}
-\index{GetDirectory@{GetDirectory}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{GetDirectory()}{GetDirectory()}}
-{\footnotesize\ttfamily const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+File\+::\+Get\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
-
-
-
-Get the directory name.
-
-\begin{DoxyReturn}{Returns}
-the directory name of the file
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}\label{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}}
-\index{xb::xbFile@{xb::xbFile}!GetEndianType@{GetEndianType}}
-\index{GetEndianType@{GetEndianType}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{GetEndianType()}{GetEndianType()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Ssv\+::\+Get\+Endian\+Type (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the Endian type.
-
-\begin{DoxyReturn}{Returns}
-B -\/ Big endian~\newline
- L -\/ Little endian~\newline
-
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}\label{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}}
-\index{xb::xbFile@{xb::xbFile}!GetErrorMessage@{GetErrorMessage}}
-\index{GetErrorMessage@{GetErrorMessage}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{GetErrorMessage()}{GetErrorMessage()}}
-{\footnotesize\ttfamily const char $\ast$ xb\+::xb\+Ssv\+::\+Get\+Error\+Message (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Error\+Code }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get an error message.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Error\+Code} & Error\+Code is the error number of description to be returned. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Returns a pointer to a string containing a text description for the error code.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_af5127c92892816e9bbc5c19653c4147a}\label{classxb_1_1xbFile_af5127c92892816e9bbc5c19653c4147a}}
-\index{xb::xbFile@{xb::xbFile}!GetFileDirPart@{GetFileDirPart}}
-\index{GetFileDirPart@{GetFileDirPart}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{GetFileDirPart()}{GetFileDirPart()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+File\+Dir\+Part (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Complete\+File\+Name\+In, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Dir\+Part\+Out }\end{DoxyParamCaption}) const}
-
-
-
-Get the directory part of the file name.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Complete\+File\+Name\+In} & -\/ a fully qualfied input file name \\
-\hline
-{\em s\+File\+Dir\+Part\+Out} & -\/ the returned directory name part out of s\+Complete\+File\+Name\+In \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a60c53998e3d1b694134b20a87bc9bf5a}\label{classxb_1_1xbFile_a60c53998e3d1b694134b20a87bc9bf5a}}
-\index{xb::xbFile@{xb::xbFile}!GetFileDirPart@{GetFileDirPart}}
-\index{GetFileDirPart@{GetFileDirPart}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{GetFileDirPart()}{GetFileDirPart()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+File\+Dir\+Part (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Dir\+Part\+Out }\end{DoxyParamCaption}) const}
-
-
-
-Get the directory part of the file name.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+File\+Dir\+Part\+Out} & -\/ the returned directory name \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_ab289b6ffe955321160c1f90220c22e25}\label{classxb_1_1xbFile_ab289b6ffe955321160c1f90220c22e25}}
-\index{xb::xbFile@{xb::xbFile}!GetFileExtPart@{GetFileExtPart}}
-\index{GetFileExtPart@{GetFileExtPart}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{GetFileExtPart()}{GetFileExtPart()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+File\+Ext\+Part (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Complete\+File\+Name\+In, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Ext\+Part\+Out }\end{DoxyParamCaption}) const}
-
-
-
-Get the extension part of the file name.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Complete\+File\+Name\+In} & -\/ a fully qualfied input file name\\
-\hline
-{\em s\+File\+Ext\+Part\+Out} & -\/ the returned directory name part out of s\+Complete\+File\+Name\+In \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a57a9222e5cbb51019d4eeb2c3ac89fa2}\label{classxb_1_1xbFile_a57a9222e5cbb51019d4eeb2c3ac89fa2}}
-\index{xb::xbFile@{xb::xbFile}!GetFileExtPart@{GetFileExtPart}}
-\index{GetFileExtPart@{GetFileExtPart}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{GetFileExtPart()}{GetFileExtPart()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+File\+Ext\+Part (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name\+Ext\+Out }\end{DoxyParamCaption}) const}
-
-
-
-Get the extension part of the file name.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+File\+Name\+Ext\+Out} & -\/ the returned extension part out of s\+Complete\+File\+Name\+In \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a02df78f4c90313243f508fc56b95aba8}\label{classxb_1_1xbFile_a02df78f4c90313243f508fc56b95aba8}}
-\index{xb::xbFile@{xb::xbFile}!GetFileMtime@{GetFileMtime}}
-\index{GetFileMtime@{GetFileMtime}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{GetFileMtime()}{GetFileMtime()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+File\+Mtime (\begin{DoxyParamCaption}\item[{time\+\_\+t \&}]{mtime }\end{DoxyParamCaption})}
-
-
-
-Get the time of last file modification timestamp as reported by the OS.
-
-
-\begin{DoxyParams}{Parameters}
-{\em mtime} & -\/ returned time of last file modification \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_ac95cb882ccbcdedc9a233c6ad9fed07a}\label{classxb_1_1xbFile_ac95cb882ccbcdedc9a233c6ad9fed07a}}
-\index{xb::xbFile@{xb::xbFile}!GetFileName@{GetFileName}}
-\index{GetFileName@{GetFileName}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{GetFileName()}{GetFileName()}}
-{\footnotesize\ttfamily const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+File\+::\+Get\+File\+Name (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
-
-
-
-Get the file name.
-
-\begin{DoxyReturn}{Returns}
-the file name portion of the file
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a6110763c5ae996b72c7a62c15bdecc73}\label{classxb_1_1xbFile_a6110763c5ae996b72c7a62c15bdecc73}}
-\index{xb::xbFile@{xb::xbFile}!GetFileNamePart@{GetFileNamePart}}
-\index{GetFileNamePart@{GetFileNamePart}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{GetFileNamePart()}{GetFileNamePart()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+File\+Name\+Part (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Complete\+File\+Name\+In, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name\+Part\+Out }\end{DoxyParamCaption}) const}
-
-
-
-Get the name part of the file name.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Complete\+File\+Name\+In} & -\/ a fully qualified input file name \\
-\hline
-{\em s\+File\+Name\+Part\+Out} & -\/ the returned file name part out of s\+Complete\+File\+Name\+In \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a81422b3dd52763d2cc6c77237ec9af0a}\label{classxb_1_1xbFile_a81422b3dd52763d2cc6c77237ec9af0a}}
-\index{xb::xbFile@{xb::xbFile}!GetFileNamePart@{GetFileNamePart}}
-\index{GetFileNamePart@{GetFileNamePart}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{GetFileNamePart()}{GetFileNamePart()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+File\+Name\+Part (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name\+Part\+Out }\end{DoxyParamCaption}) const}
-
-
-
-Get the name part of the file name.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+File\+Name\+Part\+Out} & -\/ the returned file name part out of s\+Complete\+File\+Name\+In \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a50b63c39e49d44e52078038027b24cc5}\label{classxb_1_1xbFile_a50b63c39e49d44e52078038027b24cc5}}
-\index{xb::xbFile@{xb::xbFile}!GetFileSize@{GetFileSize}}
-\index{GetFileSize@{GetFileSize}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{GetFileSize()}{GetFileSize()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+File\+Size (\begin{DoxyParamCaption}\item[{xb\+UInt64 \&}]{ull\+File\+Size }\end{DoxyParamCaption})}
-
-
-
-Get the size of the file as reported by the OS.
-
-
-\begin{DoxyParams}{Parameters}
-{\em ull\+File\+Size} & -\/ unsigned long long field as output \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a5548236d38d43b89ae29b9a015b1f678}\label{classxb_1_1xbFile_a5548236d38d43b89ae29b9a015b1f678}}
-\index{xb::xbFile@{xb::xbFile}!GetFileType@{GetFileType}}
-\index{GetFileType@{GetFileType}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{GetFileType()}{GetFileType()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+File\+Type (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Type\+Out }\end{DoxyParamCaption}) const}
-
-
-
-Get the file type aka Capitalized file extension.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+File\+Type\+Out} & -\/ the returned extension part out of s\+Complete\+File\+Name\+In \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a31b4e641f93206ba23e2a5a27491dcd4}\label{classxb_1_1xbFile_a31b4e641f93206ba23e2a5a27491dcd4}}
-\index{xb::xbFile@{xb::xbFile}!GetFqFileName@{GetFqFileName}}
-\index{GetFqFileName@{GetFqFileName}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{GetFqFileName()}{GetFqFileName()}}
-{\footnotesize\ttfamily const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+File\+::\+Get\+Fq\+File\+Name (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
-
-
-
-Get the fully qualified file name.
-
-\begin{DoxyReturn}{Returns}
-the fully qualfied name of the file
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}\label{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}}
-\index{xb::xbFile@{xb::xbFile}!GetHomeDir@{GetHomeDir}}
-\index{GetHomeDir@{GetHomeDir}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{GetHomeDir()}{GetHomeDir()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Get\+Home\+Dir (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Home\+Dir\+Out }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get home directory.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Home\+Dir\+Out} & -\/ Output home directory for current user. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-void
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}\label{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}}
-\index{xb::xbFile@{xb::xbFile}!GetLogDirectory@{GetLogDirectory}}
-\index{GetLogDirectory@{GetLogDirectory}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{GetLogDirectory()}{GetLogDirectory()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Log\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}\label{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}}
-\index{xb::xbFile@{xb::xbFile}!GetLogFileName@{GetLogFileName}}
-\index{GetLogFileName@{GetLogFileName}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{GetLogFileName()}{GetLogFileName()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Log\+File\+Name (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}\label{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}}
-\index{xb::xbFile@{xb::xbFile}!GetMultiUser@{GetMultiUser}}
-\index{GetMultiUser@{GetMultiUser}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{GetMultiUser()}{GetMultiUser()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Ssv\+::\+Get\+Multi\+User (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the multi user setting.
-
-\begin{DoxyReturn}{Returns}
-xb\+True -\/ Multi user mode turned on.~\newline
- xb\+False -\/ Multi user mode turned off.~\newline
-
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a3c500dc9dac22c49496e4b29386b2dd3}\label{classxb_1_1xbFile_a3c500dc9dac22c49496e4b29386b2dd3}}
-\index{xb::xbFile@{xb::xbFile}!GetOpenMode@{GetOpenMode}}
-\index{GetOpenMode@{GetOpenMode}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{GetOpenMode()}{GetOpenMode()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+Open\+Mode (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
-
-
-
-Get the open mode of the file.
-
-\begin{DoxyReturn}{Returns}
-XB\+\_\+\+READ~\newline
- XB\+\_\+\+READ\+\_\+\+WRITE~\newline
- XB\+\_\+\+WRITE~\newline
-
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a9b63e05b77f477ff6109ff7b9432c1b6}\label{classxb_1_1xbFile_a9b63e05b77f477ff6109ff7b9432c1b6}}
-\index{xb::xbFile@{xb::xbFile}!GetShareMode@{GetShareMode}}
-\index{GetShareMode@{GetShareMode}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{GetShareMode()}{GetShareMode()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+Share\+Mode (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
-
-
-
-Get the share mode of the file.
-
-\begin{DoxyReturn}{Returns}
-XB\+\_\+\+SINGLE\+\_\+\+USER -\/ (file buffering on\texorpdfstring{$>$}{>}~\newline
- XB\+\_\+\+MULTI\+\_\+\+USER -\/ (file buffering off)~\newline
-
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a7af337808919680b90710ad5e8a99232}\label{classxb_1_1xbFile_a7af337808919680b90710ad5e8a99232}}
-\index{xb::xbFile@{xb::xbFile}!GetXbaseFileTypeByte@{GetXbaseFileTypeByte}}
-\index{GetXbaseFileTypeByte@{GetXbaseFileTypeByte}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{GetXbaseFileTypeByte()}{GetXbaseFileTypeByte()}\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+Xbase\+File\+Type\+Byte (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name, }\item[{unsigned char \&}]{c\+File\+Type\+Byte }\end{DoxyParamCaption})}
-
-
-
-Get the file type byte and version of the dbf file.
-
-Pull the first bye off the DBF file for further inspection. First byte has various bits set to determine what the file format is.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+File\+Name} & -\/ Name of file to examine \\
-\hline
-{\em c\+File\+Type\+Byte} & -\/ Retruned first byte of dbf file \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a78aebdd21d3de46a450d5f835e3027f6}\label{classxb_1_1xbFile_a78aebdd21d3de46a450d5f835e3027f6}}
-\index{xb::xbFile@{xb::xbFile}!GetXbaseFileTypeByte@{GetXbaseFileTypeByte}}
-\index{GetXbaseFileTypeByte@{GetXbaseFileTypeByte}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{GetXbaseFileTypeByte()}{GetXbaseFileTypeByte()}\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+Xbase\+File\+Type\+Byte (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name, }\item[{unsigned char \&}]{c\+File\+Type\+Byte, }\item[{xb\+Int16 \&}]{i\+Version }\end{DoxyParamCaption})}
-
-
-
-Get the file type byte and version of the dbf file.
-
-Pull the first bye off the DBF file for further inspection. First byte has various bits set to determine what the file format is.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+File\+Name} & -\/ Name of file to examine \\
-\hline
-{\em c\+File\+Type\+Byte} & -\/ Returned first byte of dbf file \\
-\hline
-{\em i\+Version} & -\/ Returned file version \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_aaf2e697751a0beff41432a66bb83fb5e}\label{classxb_1_1xbFile_aaf2e697751a0beff41432a66bb83fb5e}}
-\index{xb::xbFile@{xb::xbFile}!GetXbaseFileTypeByte@{GetXbaseFileTypeByte}}
-\index{GetXbaseFileTypeByte@{GetXbaseFileTypeByte}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{GetXbaseFileTypeByte()}{GetXbaseFileTypeByte()}\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Get\+Xbase\+File\+Type\+Byte (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name, }\item[{xb\+Int16 \&}]{i\+Version }\end{DoxyParamCaption})}
-
-
-
-Get the file type byte and version of the dbf file.
-
-Pull the first bye off the DBF file for further inspection. First byte has various bits set to determine what the file format is.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+File\+Name} & -\/ Name of file to examine \\
-\hline
-{\em i\+Version} & -\/ Returned file version \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a361e3cc318bbf1c4d10f069e0800a24e}\label{classxb_1_1xbFile_a361e3cc318bbf1c4d10f069e0800a24e}}
-\index{xb::xbFile@{xb::xbFile}!NameSuffixMissing@{NameSuffixMissing}}
-\index{NameSuffixMissing@{NameSuffixMissing}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{NameSuffixMissing()}{NameSuffixMissing()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Name\+Suffix\+Missing (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name, }\item[{xb\+Int16}]{i\+Option }\end{DoxyParamCaption}) const}
-
-
-
-Determines status of file extension.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+File\+Name} & -\/ Name of file to examine \\
-\hline
-{\em i\+Option} & -\/ Inspection type~\newline
- 1 check for DBF~\newline
- 2 check for NDX~\newline
- 3 check for MDX~\newline
- 4 check for NTX~\newline
-\\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-0 if suffix found~\newline
- 1 if suffix not found, lower case~\newline
- 2 is suffix not found, upper case~\newline
-
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_aa1bb80340abc7a5c22f87f878e9dc825}\label{classxb_1_1xbFile_aa1bb80340abc7a5c22f87f878e9dc825}}
-\index{xb::xbFile@{xb::xbFile}!ReadBlock@{ReadBlock}}
-\index{ReadBlock@{ReadBlock}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{ReadBlock()}{ReadBlock()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Read\+Block (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{ul\+Block\+No, }\item[{size\+\_\+t}]{l\+Read\+Size, }\item[{void $\ast$}]{buf }\end{DoxyParamCaption})}
-
-
-
-Read a block of data from file.
-
-
-\begin{DoxyParams}{Parameters}
-{\em ul\+Block\+No} & -\/ block number to read \\
-\hline
-{\em l\+Read\+Size} & -\/ size of data to read at block location, set to 0 to read blocksize \\
-\hline
-{\em $\ast$buf} & -\/ pointer to buffer to write output data, assumed to be previosuly allocated and large enough to contain data \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_aef696b1c4c0ef5338e818599f695d485}\label{classxb_1_1xbFile_aef696b1c4c0ef5338e818599f695d485}}
-\index{xb::xbFile@{xb::xbFile}!ReadBlock@{ReadBlock}}
-\index{ReadBlock@{ReadBlock}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{ReadBlock()}{ReadBlock()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Read\+Block (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{ul\+Block\+No, }\item[{xb\+UInt32}]{ul\+Block\+Size, }\item[{size\+\_\+t}]{l\+Read\+Size, }\item[{void $\ast$}]{buf }\end{DoxyParamCaption})}
-
-
-
-Read a block of data from file.
-
-
-\begin{DoxyParams}{Parameters}
-{\em ul\+Block\+No} & -\/ block number to read \\
-\hline
-{\em ul\+Block\+Size} & -\/ block size \\
-\hline
-{\em l\+Read\+Size} & -\/ size of data to read at block location, set to 0 to read blocksize \\
-\hline
-{\em buf} & -\/ pointer to buffer to write output data, assumed to be previosuly allocated and large enough to contain data \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a991c5676a6f38fa752435390989f413e}\label{classxb_1_1xbFile_a991c5676a6f38fa752435390989f413e}}
-\index{xb::xbFile@{xb::xbFile}!SetBlockSize@{SetBlockSize}}
-\index{SetBlockSize@{SetBlockSize}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{SetBlockSize()}{SetBlockSize()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Set\+Block\+Size (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{ul\+Block\+Size }\end{DoxyParamCaption})}
-
-
-
-Set the block size.
-
-
-\begin{DoxyParams}{Parameters}
-{\em ul\+Block\+Size} & -\/ unsigned long block size, divisible by 512 \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}\label{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}}
-\index{xb::xbFile@{xb::xbFile}!SetDataDirectory@{SetDataDirectory}}
-\index{SetDataDirectory@{SetDataDirectory}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{SetDataDirectory()}{SetDataDirectory()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Data\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Data\+Directory }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Set the data directory.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Data\+Directory} & Set the data direcroty. \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}\label{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}}
-\index{xb::xbFile@{xb::xbFile}!SetDefaultAutoCommit@{SetDefaultAutoCommit}}
-\index{SetDefaultAutoCommit@{SetDefaultAutoCommit}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{SetDefaultAutoCommit()}{SetDefaultAutoCommit()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Default\+Auto\+Commit (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}}}]{b\+Default\+Auto\+Commit }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Set the default auto commit.
-
-Disabling auto commit requires the application execute explicit updates using dbf-\/\texorpdfstring{$>$}{>}Put() and dbf-\/\texorpdfstring{$>$}{>}Append\+Record(). With auto commit on, the library posts updates automatically when moving off the current record or closing a file.
-
-
-\begin{DoxyParams}{Parameters}
-{\em b\+Default\+Auto\+Commit} & xb\+True -\/ Enable default auto commit.~\newline
- xb\+False -\/ Disable default auto commit.~\newline
- \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}\label{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}}
-\index{xb::xbFile@{xb::xbFile}!SetDefaultDateFormat@{SetDefaultDateFormat}}
-\index{SetDefaultDateFormat@{SetDefaultDateFormat}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{SetDefaultDateFormat()}{SetDefaultDateFormat()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Default\+Date\+Format (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Default\+Date\+Format }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Set the default date format.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Default\+Date\+Format} & Set the default date format. \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbFile_ae78a85255488bc78964c16946dbaead3}\label{classxb_1_1xbFile_ae78a85255488bc78964c16946dbaead3}}
-\index{xb::xbFile@{xb::xbFile}!SetDirectory@{SetDirectory}}
-\index{SetDirectory@{SetDirectory}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{SetDirectory()}{SetDirectory()}}
-{\footnotesize\ttfamily void xb\+::xb\+File\+::\+Set\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Directory }\end{DoxyParamCaption})}
-
-
-
-Set the directory.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Directory} & -\/ Valid directory name \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a904ec348fd029d4a76e72b8fde636108}\label{classxb_1_1xbSsv_a904ec348fd029d4a76e72b8fde636108}}
-\index{xb::xbFile@{xb::xbFile}!SetEndianType@{SetEndianType}}
-\index{SetEndianType@{SetEndianType}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{SetEndianType()}{SetEndianType()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Endian\+Type (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [protected]}, {\ttfamily [inherited]}}
-
-
-
-Set the endian type.
-
-This routine determines the Endian-\/ness at run time instead of compile time as some processers (ie; Sparc,ARM) can be switched either way. This routine is called automatically by the library at startup and does not need to be called in an application program. \mbox{\Hypertarget{classxb_1_1xbFile_a5419eb27e56822f828b2b88a9502a636}\label{classxb_1_1xbFile_a5419eb27e56822f828b2b88a9502a636}}
-\index{xb::xbFile@{xb::xbFile}!SetFileName@{SetFileName}}
-\index{SetFileName@{SetFileName}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{SetFileName()}{SetFileName()}}
-{\footnotesize\ttfamily void xb\+::xb\+File\+::\+Set\+File\+Name (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name }\end{DoxyParamCaption})}
-
-
-
-Set the filename.
-
-This routine builds out two internal variables from the input file name~\newline
- s\+File\+Name -\/ the file name part~\newline
- s\+Fq\+File\+Name -\/ the fully qualified file name~\newline
-
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+File\+Name} & -\/ Input file name \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbFile_aee832fa11db2077a532f49e1329bd05a}\label{classxb_1_1xbFile_aee832fa11db2077a532f49e1329bd05a}}
-\index{xb::xbFile@{xb::xbFile}!SetFqFileName@{SetFqFileName}}
-\index{SetFqFileName@{SetFqFileName}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{SetFqFileName()}{SetFqFileName()}}
-{\footnotesize\ttfamily void xb\+::xb\+File\+::\+Set\+Fq\+File\+Name (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Fq\+File\+Name }\end{DoxyParamCaption})}
-
-
-
-Set the fully qualifed filename.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Fq\+File\+Name} & -\/ Fully qualifed input file name \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbFile_a060acbfaa8d528f86cb59301814b414a}\label{classxb_1_1xbFile_a060acbfaa8d528f86cb59301814b414a}}
-\index{xb::xbFile@{xb::xbFile}!SetHomeFolders@{SetHomeFolders}}
-\index{SetHomeFolders@{SetHomeFolders}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{SetHomeFolders()}{SetHomeFolders()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Set\+Home\+Folders (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
-
-
-Create Home Folders.
-
-Create xbase64 log and data folders in the home directory for current usre.
-
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}\label{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}}
-\index{xb::xbFile@{xb::xbFile}!SetLogDirectory@{SetLogDirectory}}
-\index{SetLogDirectory@{SetLogDirectory}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{SetLogDirectory()}{SetLogDirectory()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Log\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Log\+Directory }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}\label{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}}
-\index{xb::xbFile@{xb::xbFile}!SetMultiUser@{SetMultiUser}}
-\index{SetMultiUser@{SetMultiUser}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{SetMultiUser()}{SetMultiUser()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Multi\+User (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}}}]{b\+Multi\+User }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the multi user setting.
-
-
-\begin{DoxyParams}{Parameters}
-{\em b\+Multi\+User} & xb\+True -\/ Turn on Multi user mode.~\newline
- xb\+False -\/ Turn off Multi user mode.~\newline
- \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbFile_a5d871dcfecc2b4338f7a13722aab766c}\label{classxb_1_1xbFile_a5d871dcfecc2b4338f7a13722aab766c}}
-\index{xb::xbFile@{xb::xbFile}!WriteBlock@{WriteBlock}}
-\index{WriteBlock@{WriteBlock}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{WriteBlock()}{WriteBlock()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Write\+Block (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{ul\+Block\+No, }\item[{size\+\_\+t}]{l\+Write\+Size, }\item[{void $\ast$}]{buf }\end{DoxyParamCaption})}
-
-
-
-Write a block of data to file.
-
-
-\begin{DoxyParams}{Parameters}
-{\em ul\+Block\+No} & -\/ block number to write \\
-\hline
-{\em l\+Write\+Size} & -\/ size of data to write, set to 0 to write blocksize \\
-\hline
-{\em $\ast$buf} & -\/ pointer to buffer of data to be written \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a18830b5755d74818f60d9c7ce38ddf2d}\label{classxb_1_1xbFile_a18830b5755d74818f60d9c7ce38ddf2d}}
-\index{xb::xbFile@{xb::xbFile}!xbFclose@{xbFclose}}
-\index{xbFclose@{xbFclose}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{xbFclose()}{xbFclose()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fclose (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
-
-
-Xbase wrapper for standard libary fclose.
-
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_af5b6356832d2a67212070a1aa605f170}\label{classxb_1_1xbFile_af5b6356832d2a67212070a1aa605f170}}
-\index{xb::xbFile@{xb::xbFile}!xbFeof@{xbFeof}}
-\index{xbFeof@{xbFeof}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{xbFeof()}{xbFeof()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Feof (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
-
-
-Xbase wrapper for standard libary feof.
-
-\begin{DoxyReturn}{Returns}
-non zero if end-\/of-\/file is set for the stream.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_ad205184d43409f04216540ae22f15009}\label{classxb_1_1xbFile_ad205184d43409f04216540ae22f15009}}
-\index{xb::xbFile@{xb::xbFile}!xbFflush@{xbFflush}}
-\index{xbFflush@{xbFflush}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{xbFflush()}{xbFflush()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fflush (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
-
-
-Xbase wrapper for standard libary fflush.
-
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a5ee229bda4d7d6695e122200e581e7a6}\label{classxb_1_1xbFile_a5ee229bda4d7d6695e122200e581e7a6}}
-\index{xb::xbFile@{xb::xbFile}!xbFgetc@{xbFgetc}}
-\index{xbFgetc@{xbFgetc}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{xbFgetc()}{xbFgetc()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fgetc (\begin{DoxyParamCaption}\item[{char \&}]{c }\end{DoxyParamCaption})}
-
-
-
-Xbase wrapper for standard libary fgetc.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c} & -\/ output character returned by fgetc \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_afb1c584d2895ffb7834df80aea7eb1e4}\label{classxb_1_1xbFile_afb1c584d2895ffb7834df80aea7eb1e4}}
-\index{xb::xbFile@{xb::xbFile}!xbFgetc@{xbFgetc}}
-\index{xbFgetc@{xbFgetc}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{xbFgetc()}{xbFgetc()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fgetc (\begin{DoxyParamCaption}\item[{xb\+Int32 \&}]{c }\end{DoxyParamCaption})}
-
-
-
-Xbase wrapper for standard libary fgetc.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c} & -\/ output integer returned by fgetc \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_ad245955ace26e5dde85fd4373b30d026}\label{classxb_1_1xbFile_ad245955ace26e5dde85fd4373b30d026}}
-\index{xb::xbFile@{xb::xbFile}!xbFgets@{xbFgets}}
-\index{xbFgets@{xbFgets}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{xbFgets()}{xbFgets()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fgets (\begin{DoxyParamCaption}\item[{size\+\_\+t}]{l\+Size, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s }\end{DoxyParamCaption})}
-
-
-
-Xbase wrapper for standard libary fgets.
-
-
-\begin{DoxyParams}{Parameters}
-{\em l\+Size} & -\/ reads in at most, one character less than l\+Size \\
-\hline
-{\em s} & -\/ an \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing data returned by fseek \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_ab0fa19686ca8953ff4b556fb5b249135}\label{classxb_1_1xbFile_ab0fa19686ca8953ff4b556fb5b249135}}
-\index{xb::xbFile@{xb::xbFile}!xbFopen@{xbFopen}}
-\index{xbFopen@{xbFopen}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{xbFopen()}{xbFopen()}\hspace{0.1cm}{\footnotesize\ttfamily [1/4]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fopen (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Open\+Mode, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name, }\item[{xb\+Int16}]{i\+Share\+Mode }\end{DoxyParamCaption})}
-
-
-
-Xbase wrapper for standard libary fopen.
-
-This routine supports all the standard C library open modes. The Xbase routines only use \char`\"{}r\char`\"{} and \char`\"{}r+b\char`\"{}.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Open\+Mode} & {\begin{tabularx}{\linewidth}{|*{2}{>{\raggedright\arraybackslash}X|}}\hline
-\cellcolor{\tableheadbgcolor}\textbf{ Open\+Mode}&\cellcolor{\tableheadbgcolor}\textbf{ Description }\\\cline{1-2}
-r&Reading \\\cline{1-2}
-r+&Reading and Writing \\\cline{1-2}
-w&Open for writing. Truncate to zero bytes if it exists \\\cline{1-2}
-w+&Open for reading and writing, truncate to zero bytes if it exists \\\cline{1-2}
-a&Open for append \\\cline{1-2}
-a+&Open for reading and writing (at end). \\\cline{1-2}
-\end{tabularx}}
-The mode can also include the letter \char`\"{}b\char`\"{} for binary ie; \char`\"{}r+b\char`\"{}. The \char`\"{}b\char`\"{} is ignored on POSIX compliant systems, but is included for cross platform compatibility. \\
-\hline
-{\em s\+File\+Name} & File name to open \\
-\hline
-{\em i\+Share\+Mode} & XB\+\_\+\+SINGLE\+\_\+\+USER~\newline
- XB\+\_\+\+MULTI\+\_\+\+USER~\newline
- \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a0548cedf0f26b7d8ac221f75b0cd048c}\label{classxb_1_1xbFile_a0548cedf0f26b7d8ac221f75b0cd048c}}
-\index{xb::xbFile@{xb::xbFile}!xbFopen@{xbFopen}}
-\index{xbFopen@{xbFopen}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{xbFopen()}{xbFopen()}\hspace{0.1cm}{\footnotesize\ttfamily [2/4]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fopen (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Open\+Mode, }\item[{xb\+Int16}]{i\+Share\+Mode }\end{DoxyParamCaption})}
-
-
-
-Xbase wrapper for standard libary fopen.
-
-This routine supports all the standard C library open modes. The Xbase routines only use \char`\"{}r\char`\"{} and \char`\"{}r+\char`\"{}.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Open\+Mode} & {\begin{tabularx}{\linewidth}{|*{2}{>{\raggedright\arraybackslash}X|}}\hline
-\cellcolor{\tableheadbgcolor}\textbf{ Open\+Mode}&\cellcolor{\tableheadbgcolor}\textbf{ Description }\\\cline{1-2}
-r&Reading \\\cline{1-2}
-r+&Reading and Writing \\\cline{1-2}
-w&Open for writing. Truncate to zero bytes if it exists \\\cline{1-2}
-w+&Open for reading and writing, truncate to zero bytes if it exists \\\cline{1-2}
-a&Open for append \\\cline{1-2}
-a+&Open for reading and writing (at end). \\\cline{1-2}
-\end{tabularx}}
-The mode can also include the letter \char`\"{}b\char`\"{} for binary ie; \char`\"{}r+b\char`\"{}. The \char`\"{}b\char`\"{} is ignored on POSIX compliant systems, but is included for cross platform compatibility. \\
-\hline
-{\em i\+Share\+Mode} & XB\+\_\+\+SINGLE\+\_\+\+USER~\newline
- XB\+\_\+\+MULTI\+\_\+\+USER~\newline
- \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a7cdfef5ede9ac98d44a28a6b7a70972c}\label{classxb_1_1xbFile_a7cdfef5ede9ac98d44a28a6b7a70972c}}
-\index{xb::xbFile@{xb::xbFile}!xbFopen@{xbFopen}}
-\index{xbFopen@{xbFopen}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{xbFopen()}{xbFopen()}\hspace{0.1cm}{\footnotesize\ttfamily [3/4]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fopen (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Open\+Mode }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{classxb_1_1xbFile_aabd113333b49c36cad23244b392baab4}\label{classxb_1_1xbFile_aabd113333b49c36cad23244b392baab4}}
-\index{xb::xbFile@{xb::xbFile}!xbFopen@{xbFopen}}
-\index{xbFopen@{xbFopen}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{xbFopen()}{xbFopen()}\hspace{0.1cm}{\footnotesize\ttfamily [4/4]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fopen (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Open\+Mode, }\item[{xb\+Int16}]{i\+Share\+Mode }\end{DoxyParamCaption})}
-
-
-
-Xbase wrapper for standard libary fopen.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Open\+Mode} & XB\+\_\+\+READ~\newline
- XB\+\_\+\+READ\+\_\+\+WRITE~\newline
- \\
-\hline
-{\em i\+Share\+Mode} & XB\+\_\+\+SINGLE\+\_\+\+USER~\newline
- XB\+\_\+\+MULTI\+\_\+\+USER~\newline
- \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_af2e940c78956e5cb6824f9a1bc404896}\label{classxb_1_1xbFile_af2e940c78956e5cb6824f9a1bc404896}}
-\index{xb::xbFile@{xb::xbFile}!xbFputc@{xbFputc}}
-\index{xbFputc@{xbFputc}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{xbFputc()}{xbFputc()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fputc (\begin{DoxyParamCaption}\item[{xb\+Int32}]{c }\end{DoxyParamCaption})}
-
-
-
-Xbase wrapper for standard libary fputc.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c} & Character to write \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a863f74cf17df8186d88586b4d2a6441a}\label{classxb_1_1xbFile_a863f74cf17df8186d88586b4d2a6441a}}
-\index{xb::xbFile@{xb::xbFile}!xbFputc@{xbFputc}}
-\index{xbFputc@{xbFputc}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{xbFputc()}{xbFputc()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fputc (\begin{DoxyParamCaption}\item[{xb\+Int32}]{c, }\item[{xb\+Int32}]{i\+No\+Of\+Times }\end{DoxyParamCaption})}
-
-
-
-Xbase wrapper for standard libary fputc.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c} & Character to write \\
-\hline
-{\em i\+No\+Of\+Times} & Number of times to write the character \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a698f3b40216778562e639e6ca1a47573}\label{classxb_1_1xbFile_a698f3b40216778562e639e6ca1a47573}}
-\index{xb::xbFile@{xb::xbFile}!xbFputs@{xbFputs}}
-\index{xbFputs@{xbFputs}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{xbFputs()}{xbFputs()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fputs (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s }\end{DoxyParamCaption})}
-
-
-
-Xbase wrapper for standard libary fputs.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s} & \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} to write to file \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_ab4f6afaa1f77539f27a4f05c26e54e2f}\label{classxb_1_1xbFile_ab4f6afaa1f77539f27a4f05c26e54e2f}}
-\index{xb::xbFile@{xb::xbFile}!xbFread@{xbFread}}
-\index{xbFread@{xbFread}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{xbFread()}{xbFread()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fread (\begin{DoxyParamCaption}\item[{void $\ast$}]{p, }\item[{size\+\_\+t}]{size, }\item[{size\+\_\+t}]{nmemb }\end{DoxyParamCaption})}
-
-
-
-Xbase wrapper for standard libary fread.
-
-
-\begin{DoxyParams}{Parameters}
-{\em p} & Pointer to data to write \\
-\hline
-{\em size} & size of write \\
-\hline
-{\em nmemb} & Number of times to read it \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a5337ab8918df240910c0d19b4f298e3d}\label{classxb_1_1xbFile_a5337ab8918df240910c0d19b4f298e3d}}
-\index{xb::xbFile@{xb::xbFile}!xbFseek@{xbFseek}}
-\index{xbFseek@{xbFseek}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{xbFseek()}{xbFseek()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fseek (\begin{DoxyParamCaption}\item[{xb\+Int64}]{l\+Offset, }\item[{xb\+Int32}]{i\+Whence }\end{DoxyParamCaption})}
-
-
-
-Xbase wrapper for standard libary fseek.
-
-
-\begin{DoxyParams}{Parameters}
-{\em l\+Offset} & Position in file to seek to \\
-\hline
-{\em i\+Whence} & SEEK\+\_\+\+SET -\/ from beginning of file~\newline
- SEEK\+\_\+\+CUR -\/ from current position~\newline
- SEEK\+\_\+\+END -\/ from end of file~\newline
- \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a0e1c06aedfa7fbcb92e117f891edd13b}\label{classxb_1_1xbFile_a0e1c06aedfa7fbcb92e117f891edd13b}}
-\index{xb::xbFile@{xb::xbFile}!xbFtell@{xbFtell}}
-\index{xbFtell@{xbFtell}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{xbFtell()}{xbFtell()}}
-{\footnotesize\ttfamily size\+\_\+t xb\+::xb\+File\+::xb\+Ftell (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
-
-
-Xbase wrapper for standard libary ftell.
-
-Returns the current file position. \begin{DoxyReturn}{Returns}
-Current file position.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a9891b792f585a696f38a5cf959e30918}\label{classxb_1_1xbFile_a9891b792f585a696f38a5cf959e30918}}
-\index{xb::xbFile@{xb::xbFile}!xbFTurnOffFileBuffering@{xbFTurnOffFileBuffering}}
-\index{xbFTurnOffFileBuffering@{xbFTurnOffFileBuffering}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{xbFTurnOffFileBuffering()}{xbFTurnOffFileBuffering()}}
-{\footnotesize\ttfamily void xb\+::xb\+File\+::xb\+FTurn\+Off\+File\+Buffering (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
-
-
-Turn off file buffering.
-
-Turns off file buffering. File buffering can\textquotesingle{}t be used while in multi user mode. \mbox{\Hypertarget{classxb_1_1xbFile_a6aadd871d1782944703fed773d44b85f}\label{classxb_1_1xbFile_a6aadd871d1782944703fed773d44b85f}}
-\index{xb::xbFile@{xb::xbFile}!xbFwrite@{xbFwrite}}
-\index{xbFwrite@{xbFwrite}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{xbFwrite()}{xbFwrite()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Fwrite (\begin{DoxyParamCaption}\item[{const void $\ast$}]{p, }\item[{size\+\_\+t}]{size, }\item[{size\+\_\+t}]{nmemb }\end{DoxyParamCaption})}
-
-
-
-Xbase wrapper for standard libary fwrite.
-
-
-\begin{DoxyParams}{Parameters}
-{\em p} & Pointer to data buffer to write \\
-\hline
-{\em size} & Size of data to write \\
-\hline
-{\em nmemb} & Number of times to write data buffer \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a08463f506f425c2385acbe1a561506e9}\label{classxb_1_1xbFile_a08463f506f425c2385acbe1a561506e9}}
-\index{xb::xbFile@{xb::xbFile}!xbReadUntil@{xbReadUntil}}
-\index{xbReadUntil@{xbReadUntil}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{xbReadUntil()}{xbReadUntil()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Read\+Until (\begin{DoxyParamCaption}\item[{const char}]{c\+Delim, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Out }\end{DoxyParamCaption})}
-
-
-
-Read file until a particular character is encountered on input stream.
-
-This routine will read until c\+Delim is encountered or eof, which ever occurs first.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c\+Delim} & Delimiter to stop writing at. \\
-\hline
-{\em s\+Out} & Output \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing data read \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_ab3c668a8570433188382d31d7c60bd48}\label{classxb_1_1xbFile_ab3c668a8570433188382d31d7c60bd48}}
-\index{xb::xbFile@{xb::xbFile}!xbRemove@{xbRemove}}
-\index{xbRemove@{xbRemove}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{xbRemove()}{xbRemove()}\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Remove (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
-
-
-Delete file.
-
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a58f6a6751fdf7e9549c273bb75d93eb5}\label{classxb_1_1xbFile_a58f6a6751fdf7e9549c273bb75d93eb5}}
-\index{xb::xbFile@{xb::xbFile}!xbRemove@{xbRemove}}
-\index{xbRemove@{xbRemove}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{xbRemove()}{xbRemove()}\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Remove (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name\+In }\end{DoxyParamCaption})}
-
-
-
-Delete file.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+File\+Name\+In} & Name of file to delete \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a6d919366c2ec95e529906bf8842cbf07}\label{classxb_1_1xbFile_a6d919366c2ec95e529906bf8842cbf07}}
-\index{xb::xbFile@{xb::xbFile}!xbRemove@{xbRemove}}
-\index{xbRemove@{xbRemove}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{xbRemove()}{xbRemove()}\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Remove (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+File\+Name\+In, }\item[{xb\+Int16}]{i\+Option }\end{DoxyParamCaption})}
-
-
-
-Delete file.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+File\+Name\+In} & Name of file to delete \\
-\hline
-{\em i\+Option} & If Set to 1, assume this is a delete request for a dbf file, and should rename the dbt file also \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_afc8ce113aa72611a278233f9bb170012}\label{classxb_1_1xbFile_afc8ce113aa72611a278233f9bb170012}}
-\index{xb::xbFile@{xb::xbFile}!xbRename@{xbRename}}
-\index{xbRename@{xbRename}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{xbRename()}{xbRename()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Rename (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Old\+Name, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+New\+Name }\end{DoxyParamCaption})}
-
-
-
-Rename file.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Old\+Name} & Original file name \\
-\hline
-{\em s\+New\+Name} & New file name \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_a7996b6e084665c37c3892faea64b3505}\label{classxb_1_1xbFile_a7996b6e084665c37c3892faea64b3505}}
-\index{xb::xbFile@{xb::xbFile}!xbRewind@{xbRewind}}
-\index{xbRewind@{xbRewind}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{xbRewind()}{xbRewind()}}
-{\footnotesize\ttfamily void xb\+::xb\+File\+::xb\+Rewind (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
-
-
-Xbase wrapper for rewind.
-
-Set file pointer at beginning of file. \mbox{\Hypertarget{classxb_1_1xbFile_a518bfcbfa3699d883cf89affee383296}\label{classxb_1_1xbFile_a518bfcbfa3699d883cf89affee383296}}
-\index{xb::xbFile@{xb::xbFile}!xbTruncate@{xbTruncate}}
-\index{xbTruncate@{xbTruncate}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{xbTruncate()}{xbTruncate()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::xb\+Truncate (\begin{DoxyParamCaption}\item[{xb\+Int64}]{ll\+Size }\end{DoxyParamCaption})}
-
-
-
-Xbase wrapper for ftruncate.
-
-Set file size to ll\+Size
-\begin{DoxyParams}{Parameters}
-{\em ll\+Size} & New file size. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-
-
-\doxysubsection{Field Documentation}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a6219f1b5e24ea12fe158cd5aea56988e}\label{classxb_1_1xbSsv_a6219f1b5e24ea12fe158cd5aea56988e}}
-\index{xb::xbFile@{xb::xbFile}!ErrorCodeText@{ErrorCodeText}}
-\index{ErrorCodeText@{ErrorCodeText}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{ErrorCodeText}{ErrorCodeText}}
-{\footnotesize\ttfamily const char$\ast$ xb\+::xb\+Ssv\+::\+Error\+Code\+Text\mbox{[}$\,$\mbox{]}\hspace{0.3cm}{\ttfamily [static]}, {\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}\label{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}}
-\index{xb::xbFile@{xb::xbFile}!iEndianType@{iEndianType}}
-\index{iEndianType@{iEndianType}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{iEndianType}{iEndianType}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Ssv\+::i\+Endian\+Type = 0\hspace{0.3cm}{\ttfamily [static]}, {\ttfamily [protected]}, {\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}\label{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}}
-\index{xb::xbFile@{xb::xbFile}!sNullString@{sNullString}}
-\index{sNullString@{sNullString}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{sNullString}{sNullString}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} xb\+::xb\+Ssv\+::s\+Null\+String = \char`\"{}\char`\"{}\hspace{0.3cm}{\ttfamily [static]}, {\ttfamily [protected]}, {\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbFile_ae39a67ea391b46055d4ca299cb222004}\label{classxb_1_1xbFile_ae39a67ea391b46055d4ca299cb222004}}
-\index{xb::xbFile@{xb::xbFile}!xbase@{xbase}}
-\index{xbase@{xbase}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{xbase}{xbase}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}}$\ast$ xb\+::xb\+File\+::xbase\hspace{0.3cm}{\ttfamily [protected]}}
-
-
-
-The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
-\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbfile_8h}{xbfile.\+h}}\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbfile_8cpp}{xbfile.\+cpp}}\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/classxb_1_1xbSsv.pdf b/docs/doxygen/latex/classxb_1_1xbSsv.pdf
deleted file mode 100644
index 4677f70..0000000
--- a/docs/doxygen/latex/classxb_1_1xbSsv.pdf
+++ /dev/null
Binary files differ
diff --git a/docs/doxygen/latex/classxb_1_1xbSsv.tex b/docs/doxygen/latex/classxb_1_1xbSsv.tex
deleted file mode 100644
index 8abcbcb..0000000
--- a/docs/doxygen/latex/classxb_1_1xbSsv.tex
+++ /dev/null
@@ -1,375 +0,0 @@
-\hypertarget{classxb_1_1xbSsv}{}\doxysection{xb\+::xb\+Ssv Class Reference}
-\label{classxb_1_1xbSsv}\index{xb::xbSsv@{xb::xbSsv}}
-
-
-Class for handling shared system variables.
-
-
-
-
-{\ttfamily \#include $<$xbssv.\+h$>$}
-
-Inheritance diagram for xb\+::xb\+Ssv\+:\begin{figure}[H]
-\begin{center}
-\leavevmode
-\includegraphics[height=3.000000cm]{classxb_1_1xbSsv}
-\end{center}
-\end{figure}
-\doxysubsection*{Public Member Functions}
-\begin{DoxyCompactItemize}
-\item
-\mbox{\hyperlink{classxb_1_1xbSsv_a58f85692c3167af20b1a7c17c621523b}{xb\+Ssv}} ()
-\begin{DoxyCompactList}\small\item\em Class Constructor. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}{Display\+Error}} (xb\+Int16 Error\+Code) const
-\begin{DoxyCompactList}\small\item\em Display error message on console for a given error number. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a6fbb9c3a550ab0b3378f9586a57791d2}{Get\+Default\+Date\+Format}} () const
-\begin{DoxyCompactList}\small\item\em Get the default date format. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}{Get\+Data\+Directory}} () const
-\begin{DoxyCompactList}\small\item\em Get the current data directory. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}{Get\+Endian\+Type}} () const
-\begin{DoxyCompactList}\small\item\em Get the Endian type. \end{DoxyCompactList}\item
-const char $\ast$ \mbox{\hyperlink{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}{Get\+Error\+Message}} (xb\+Int16 Error\+Code) const
-\begin{DoxyCompactList}\small\item\em Get an error message. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}{Set\+Data\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Data\+Directory)
-\begin{DoxyCompactList}\small\item\em Set the data directory. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}{Set\+Default\+Date\+Format}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Default\+Date\+Format)
-\begin{DoxyCompactList}\small\item\em Set the default date format. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}{Bit\+Set}} (unsigned char c, xb\+Int16 i\+Bit\+No) const
-\begin{DoxyCompactList}\small\item\em Check a bit in a one byte field and see if it is set. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}{Bit\+Dump}} (unsigned char c) const
-\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}{Bit\+Dump}} (char c) const
-\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}{Get\+Default\+Auto\+Commit}} () const
-\begin{DoxyCompactList}\small\item\em Get the default auto commit setting. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}{Set\+Default\+Auto\+Commit}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Default\+Auto\+Commit)
-\begin{DoxyCompactList}\small\item\em Set the default auto commit. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}{Get\+Home\+Dir}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Home\+Dir\+Out)
-\begin{DoxyCompactList}\small\item\em Get home directory. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}{Get\+Log\+Directory}} () const
-\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}{Get\+Log\+File\+Name}} () const
-\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}{Set\+Log\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Log\+Directory)
-\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}{Get\+Multi\+User}} () const
-\begin{DoxyCompactList}\small\item\em Get the multi user setting. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}{Set\+Multi\+User}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Multi\+User)
-\begin{DoxyCompactList}\small\item\em Get the multi user setting. \end{DoxyCompactList}\end{DoxyCompactItemize}
-\doxysubsection*{Static Public Attributes}
-\begin{DoxyCompactItemize}
-\item
-static const char $\ast$ \mbox{\hyperlink{classxb_1_1xbSsv_a6219f1b5e24ea12fe158cd5aea56988e}{Error\+Code\+Text}} \mbox{[}$\,$\mbox{]}
-\end{DoxyCompactItemize}
-\doxysubsection*{Protected Member Functions}
-\begin{DoxyCompactItemize}
-\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a904ec348fd029d4a76e72b8fde636108}{Set\+Endian\+Type}} ()
-\begin{DoxyCompactList}\small\item\em Set the endian type. \end{DoxyCompactList}\end{DoxyCompactItemize}
-\doxysubsection*{Static Protected Attributes}
-\begin{DoxyCompactItemize}
-\item
-static xb\+Int16 \mbox{\hyperlink{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}{i\+Endian\+Type}} = 0
-\item
-static \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \mbox{\hyperlink{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}{s\+Null\+String}} = \char`\"{}\char`\"{}
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Detailed Description}
-Class for handling shared system variables.
-
-This class defines static variables which are referenced across class instances.
-
-This class is designed to have the variables set when the \mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} class constructor is called (\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} is a derived class). The xb\+Xbase class is designed to be called first in an application programs, and it is only called once. The static values in this class are typically initialized at program startup and don\textquotesingle{}t require additional updates.
-
-\doxysubsection{Constructor \& Destructor Documentation}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a58f85692c3167af20b1a7c17c621523b}\label{classxb_1_1xbSsv_a58f85692c3167af20b1a7c17c621523b}}
-\index{xb::xbSsv@{xb::xbSsv}!xbSsv@{xbSsv}}
-\index{xbSsv@{xbSsv}!xb::xbSsv@{xb::xbSsv}}
-\doxysubsubsection{\texorpdfstring{xbSsv()}{xbSsv()}}
-{\footnotesize\ttfamily xb\+::xb\+Ssv\+::xb\+Ssv (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
-
-
-Class Constructor.
-
-
-
-\doxysubsection{Member Function Documentation}
-\mbox{\Hypertarget{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}\label{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}}
-\index{xb::xbSsv@{xb::xbSsv}!BitDump@{BitDump}}
-\index{BitDump@{BitDump}!xb::xbSsv@{xb::xbSsv}}
-\doxysubsubsection{\texorpdfstring{BitDump()}{BitDump()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Bit\+Dump (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption}) const}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}\label{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}}
-\index{xb::xbSsv@{xb::xbSsv}!BitDump@{BitDump}}
-\index{BitDump@{BitDump}!xb::xbSsv@{xb::xbSsv}}
-\doxysubsubsection{\texorpdfstring{BitDump()}{BitDump()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Bit\+Dump (\begin{DoxyParamCaption}\item[{unsigned char}]{c }\end{DoxyParamCaption}) const}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}\label{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}}
-\index{xb::xbSsv@{xb::xbSsv}!BitSet@{BitSet}}
-\index{BitSet@{BitSet}!xb::xbSsv@{xb::xbSsv}}
-\doxysubsubsection{\texorpdfstring{BitSet()}{BitSet()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Ssv\+::\+Bit\+Set (\begin{DoxyParamCaption}\item[{unsigned char}]{c, }\item[{xb\+Int16}]{i\+Bit\+No }\end{DoxyParamCaption}) const}
-
-
-
-Check a bit in a one byte field and see if it is set.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c} & One byte char field to examine. \\
-\hline
-{\em i\+Bit\+No} & which bit to examine. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-xb\+True Bit is set~\newline
- xb\+False Bit is not set
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}\label{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}}
-\index{xb::xbSsv@{xb::xbSsv}!DisplayError@{DisplayError}}
-\index{DisplayError@{DisplayError}!xb::xbSsv@{xb::xbSsv}}
-\doxysubsubsection{\texorpdfstring{DisplayError()}{DisplayError()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Display\+Error (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Error\+Code }\end{DoxyParamCaption}) const}
-
-
-
-Display error message on console for a given error number.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Error\+Code} & Error number to reference \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}\label{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}}
-\index{xb::xbSsv@{xb::xbSsv}!GetDataDirectory@{GetDataDirectory}}
-\index{GetDataDirectory@{GetDataDirectory}!xb::xbSsv@{xb::xbSsv}}
-\doxysubsubsection{\texorpdfstring{GetDataDirectory()}{GetDataDirectory()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Data\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
-
-
-
-Get the current data directory.
-
-\begin{DoxyReturn}{Returns}
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing the current data directory where the database files are stored.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}\label{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}}
-\index{xb::xbSsv@{xb::xbSsv}!GetDefaultAutoCommit@{GetDefaultAutoCommit}}
-\index{GetDefaultAutoCommit@{GetDefaultAutoCommit}!xb::xbSsv@{xb::xbSsv}}
-\doxysubsubsection{\texorpdfstring{GetDefaultAutoCommit()}{GetDefaultAutoCommit()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Ssv\+::\+Get\+Default\+Auto\+Commit (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
-
-
-
-Get the default auto commit setting.
-
-When auto commit is enabled, the library will automatically post any updates when moving off an updated record or closing files. If auto commit is disabled, the application program will need to explicitly update the tables using using dbf-\/\texorpdfstring{$>$}{>}Put() and dbf-\/\texorpdfstring{$>$}{>}Append\+Record().
-
-\begin{DoxyReturn}{Returns}
-xb\+True if auto commit is turned on~\newline
- xb\+False is auto commit is turned off
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a6fbb9c3a550ab0b3378f9586a57791d2}\label{classxb_1_1xbSsv_a6fbb9c3a550ab0b3378f9586a57791d2}}
-\index{xb::xbSsv@{xb::xbSsv}!GetDefaultDateFormat@{GetDefaultDateFormat}}
-\index{GetDefaultDateFormat@{GetDefaultDateFormat}!xb::xbSsv@{xb::xbSsv}}
-\doxysubsubsection{\texorpdfstring{GetDefaultDateFormat()}{GetDefaultDateFormat()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Default\+Date\+Format (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
-
-
-
-Get the default date format.
-
-\begin{DoxyReturn}{Returns}
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing the default date format.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}\label{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}}
-\index{xb::xbSsv@{xb::xbSsv}!GetEndianType@{GetEndianType}}
-\index{GetEndianType@{GetEndianType}!xb::xbSsv@{xb::xbSsv}}
-\doxysubsubsection{\texorpdfstring{GetEndianType()}{GetEndianType()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Ssv\+::\+Get\+Endian\+Type (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
-
-
-
-Get the Endian type.
-
-\begin{DoxyReturn}{Returns}
-B -\/ Big endian~\newline
- L -\/ Little endian~\newline
-
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}\label{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}}
-\index{xb::xbSsv@{xb::xbSsv}!GetErrorMessage@{GetErrorMessage}}
-\index{GetErrorMessage@{GetErrorMessage}!xb::xbSsv@{xb::xbSsv}}
-\doxysubsubsection{\texorpdfstring{GetErrorMessage()}{GetErrorMessage()}}
-{\footnotesize\ttfamily const char $\ast$ xb\+::xb\+Ssv\+::\+Get\+Error\+Message (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Error\+Code }\end{DoxyParamCaption}) const}
-
-
-
-Get an error message.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Error\+Code} & Error\+Code is the error number of description to be returned. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Returns a pointer to a string containing a text description for the error code.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}\label{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}}
-\index{xb::xbSsv@{xb::xbSsv}!GetHomeDir@{GetHomeDir}}
-\index{GetHomeDir@{GetHomeDir}!xb::xbSsv@{xb::xbSsv}}
-\doxysubsubsection{\texorpdfstring{GetHomeDir()}{GetHomeDir()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Get\+Home\+Dir (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Home\+Dir\+Out }\end{DoxyParamCaption})}
-
-
-
-Get home directory.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Home\+Dir\+Out} & -\/ Output home directory for current user. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-void
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}\label{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}}
-\index{xb::xbSsv@{xb::xbSsv}!GetLogDirectory@{GetLogDirectory}}
-\index{GetLogDirectory@{GetLogDirectory}!xb::xbSsv@{xb::xbSsv}}
-\doxysubsubsection{\texorpdfstring{GetLogDirectory()}{GetLogDirectory()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Log\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}\label{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}}
-\index{xb::xbSsv@{xb::xbSsv}!GetLogFileName@{GetLogFileName}}
-\index{GetLogFileName@{GetLogFileName}!xb::xbSsv@{xb::xbSsv}}
-\doxysubsubsection{\texorpdfstring{GetLogFileName()}{GetLogFileName()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Log\+File\+Name (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}\label{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}}
-\index{xb::xbSsv@{xb::xbSsv}!GetMultiUser@{GetMultiUser}}
-\index{GetMultiUser@{GetMultiUser}!xb::xbSsv@{xb::xbSsv}}
-\doxysubsubsection{\texorpdfstring{GetMultiUser()}{GetMultiUser()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Ssv\+::\+Get\+Multi\+User (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
-
-
-
-Get the multi user setting.
-
-\begin{DoxyReturn}{Returns}
-xb\+True -\/ Multi user mode turned on.~\newline
- xb\+False -\/ Multi user mode turned off.~\newline
-
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}\label{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}}
-\index{xb::xbSsv@{xb::xbSsv}!SetDataDirectory@{SetDataDirectory}}
-\index{SetDataDirectory@{SetDataDirectory}!xb::xbSsv@{xb::xbSsv}}
-\doxysubsubsection{\texorpdfstring{SetDataDirectory()}{SetDataDirectory()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Data\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Data\+Directory }\end{DoxyParamCaption})}
-
-
-
-Set the data directory.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Data\+Directory} & Set the data direcroty. \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}\label{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}}
-\index{xb::xbSsv@{xb::xbSsv}!SetDefaultAutoCommit@{SetDefaultAutoCommit}}
-\index{SetDefaultAutoCommit@{SetDefaultAutoCommit}!xb::xbSsv@{xb::xbSsv}}
-\doxysubsubsection{\texorpdfstring{SetDefaultAutoCommit()}{SetDefaultAutoCommit()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Default\+Auto\+Commit (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}}}]{b\+Default\+Auto\+Commit }\end{DoxyParamCaption})}
-
-
-
-Set the default auto commit.
-
-Disabling auto commit requires the application execute explicit updates using dbf-\/\texorpdfstring{$>$}{>}Put() and dbf-\/\texorpdfstring{$>$}{>}Append\+Record(). With auto commit on, the library posts updates automatically when moving off the current record or closing a file.
-
-
-\begin{DoxyParams}{Parameters}
-{\em b\+Default\+Auto\+Commit} & xb\+True -\/ Enable default auto commit.~\newline
- xb\+False -\/ Disable default auto commit.~\newline
- \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}\label{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}}
-\index{xb::xbSsv@{xb::xbSsv}!SetDefaultDateFormat@{SetDefaultDateFormat}}
-\index{SetDefaultDateFormat@{SetDefaultDateFormat}!xb::xbSsv@{xb::xbSsv}}
-\doxysubsubsection{\texorpdfstring{SetDefaultDateFormat()}{SetDefaultDateFormat()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Default\+Date\+Format (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Default\+Date\+Format }\end{DoxyParamCaption})}
-
-
-
-Set the default date format.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Default\+Date\+Format} & Set the default date format. \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a904ec348fd029d4a76e72b8fde636108}\label{classxb_1_1xbSsv_a904ec348fd029d4a76e72b8fde636108}}
-\index{xb::xbSsv@{xb::xbSsv}!SetEndianType@{SetEndianType}}
-\index{SetEndianType@{SetEndianType}!xb::xbSsv@{xb::xbSsv}}
-\doxysubsubsection{\texorpdfstring{SetEndianType()}{SetEndianType()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Endian\+Type (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [protected]}}
-
-
-
-Set the endian type.
-
-This routine determines the Endian-\/ness at run time instead of compile time as some processers (ie; Sparc,ARM) can be switched either way. This routine is called automatically by the library at startup and does not need to be called in an application program. \mbox{\Hypertarget{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}\label{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}}
-\index{xb::xbSsv@{xb::xbSsv}!SetLogDirectory@{SetLogDirectory}}
-\index{SetLogDirectory@{SetLogDirectory}!xb::xbSsv@{xb::xbSsv}}
-\doxysubsubsection{\texorpdfstring{SetLogDirectory()}{SetLogDirectory()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Log\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Log\+Directory }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}\label{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}}
-\index{xb::xbSsv@{xb::xbSsv}!SetMultiUser@{SetMultiUser}}
-\index{SetMultiUser@{SetMultiUser}!xb::xbSsv@{xb::xbSsv}}
-\doxysubsubsection{\texorpdfstring{SetMultiUser()}{SetMultiUser()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Multi\+User (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}}}]{b\+Multi\+User }\end{DoxyParamCaption})}
-
-
-
-Get the multi user setting.
-
-
-\begin{DoxyParams}{Parameters}
-{\em b\+Multi\+User} & xb\+True -\/ Turn on Multi user mode.~\newline
- xb\+False -\/ Turn off Multi user mode.~\newline
- \\
-\hline
-\end{DoxyParams}
-
-
-\doxysubsection{Field Documentation}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a6219f1b5e24ea12fe158cd5aea56988e}\label{classxb_1_1xbSsv_a6219f1b5e24ea12fe158cd5aea56988e}}
-\index{xb::xbSsv@{xb::xbSsv}!ErrorCodeText@{ErrorCodeText}}
-\index{ErrorCodeText@{ErrorCodeText}!xb::xbSsv@{xb::xbSsv}}
-\doxysubsubsection{\texorpdfstring{ErrorCodeText}{ErrorCodeText}}
-{\footnotesize\ttfamily const char$\ast$ xb\+::xb\+Ssv\+::\+Error\+Code\+Text\mbox{[}$\,$\mbox{]}\hspace{0.3cm}{\ttfamily [static]}}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}\label{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}}
-\index{xb::xbSsv@{xb::xbSsv}!iEndianType@{iEndianType}}
-\index{iEndianType@{iEndianType}!xb::xbSsv@{xb::xbSsv}}
-\doxysubsubsection{\texorpdfstring{iEndianType}{iEndianType}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Ssv\+::i\+Endian\+Type = 0\hspace{0.3cm}{\ttfamily [static]}, {\ttfamily [protected]}}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}\label{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}}
-\index{xb::xbSsv@{xb::xbSsv}!sNullString@{sNullString}}
-\index{sNullString@{sNullString}!xb::xbSsv@{xb::xbSsv}}
-\doxysubsubsection{\texorpdfstring{sNullString}{sNullString}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} xb\+::xb\+Ssv\+::s\+Null\+String = \char`\"{}\char`\"{}\hspace{0.3cm}{\ttfamily [static]}, {\ttfamily [protected]}}
-
-
-
-The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
-\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbssv_8h}{xbssv.\+h}}\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbssv_8cpp}{xbssv.\+cpp}}\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/classxb_1_1xbString.tex b/docs/doxygen/latex/classxb_1_1xbString.tex
deleted file mode 100644
index 9cec303..0000000
--- a/docs/doxygen/latex/classxb_1_1xbString.tex
+++ /dev/null
@@ -1,1748 +0,0 @@
-\hypertarget{classxb_1_1xbString}{}\doxysection{xb\+::xb\+String Class Reference}
-\label{classxb_1_1xbString}\index{xb::xbString@{xb::xbString}}
-
-
-Class for handling string data.
-
-
-
-
-{\ttfamily \#include $<$xbstring.\+h$>$}
-
-\doxysubsection*{Public Member Functions}
-\begin{DoxyCompactItemize}
-\item
-\mbox{\hyperlink{classxb_1_1xbString_a63f9313217e0ff3c9789ec59316216a1}{xb\+String}} (xb\+UInt32 size)
-\begin{DoxyCompactList}\small\item\em Constructor. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString_a14bbaa293c8d40dd6c64332f2668a92e}{xb\+String}} (char c)
-\begin{DoxyCompactList}\small\item\em Constructor. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString_a18f3598dcdf2ec5692274fc8ee769ad7}{xb\+String}} (const char $\ast$s, xb\+UInt32 l\+Max\+Len)
-\begin{DoxyCompactList}\small\item\em Constructor. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString_a0d81016b93fc36ebbbafacf35c677f07}{xb\+String}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s)
-\begin{DoxyCompactList}\small\item\em Constructor. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString_a25856311106c5fb15d39017b63f0ddc7}{xb\+String}} (const char $\ast$=\char`\"{}\char`\"{})
-\begin{DoxyCompactList}\small\item\em Constructor. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString_ad865b55e3b08dffd527afee8e7e8e3fe}{xb\+String}} (\mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} d)
-\begin{DoxyCompactList}\small\item\em Constructor. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString_a10a6549efab02bc76ab33b15916b1eb1}{$\sim$xb\+String}} ()
-\begin{DoxyCompactList}\small\item\em Destructor. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a4f69d11cbd43edf71725a606d0ca8f40}{operator=}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s)
-\begin{DoxyCompactList}\small\item\em Set operator =. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a84ae7d16c5d73c5aa2270aa9895a7f7c}{operator=}} (const char $\ast$s)
-\begin{DoxyCompactList}\small\item\em Set operator =. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString_a545df0ae9590f0ea5844a165e38a6388}{operator const char $\ast$}} () const
-\begin{DoxyCompactList}\small\item\em Operator const char $\ast$. \end{DoxyCompactList}\item
-char \& \mbox{\hyperlink{classxb_1_1xbString_abe45e463226ac8e18550ced18c5a9df3}{operator\mbox{[}$\,$\mbox{]}}} (xb\+UInt32 n) const
-\begin{DoxyCompactList}\small\item\em operator \mbox{[}\mbox{]} \end{DoxyCompactList}\item
-char \& \mbox{\hyperlink{classxb_1_1xbString_a4deaa68d9571753349c29baacb5613e8}{operator\mbox{[}$\,$\mbox{]}}} (xb\+Int32 n) const
-\begin{DoxyCompactList}\small\item\em operator \mbox{[}\mbox{]} \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a76a47af239797a266ada6141c150001c}{operator+=}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s)
-\begin{DoxyCompactList}\small\item\em Append operator +=. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_ab319120dbad9107e1e7090139c956100}{operator+=}} (const char $\ast$s)
-\begin{DoxyCompactList}\small\item\em Append operator +=. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_ae12f45b8be84e438e032c0b860f985c6}{operator+=}} (char c)
-\begin{DoxyCompactList}\small\item\em Append operator +=. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_aa7f4db1b4eae9dfad46346db6e17ea15}{operator-\/=}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s)
-\begin{DoxyCompactList}\small\item\em Append operator -\/=. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_aaae97e6eda3d18c9f463993ade985bf4}{operator-\/=}} (const char $\ast$s)
-\begin{DoxyCompactList}\small\item\em Append operator -\/=. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_adcafd019df23bb5724c46e34f3f31194}{operator-\/=}} (char c)
-\begin{DoxyCompactList}\small\item\em Append operator -\/=. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbString_a2df3ed2fc9456214f5fd2fcf77b69bc1}{operator==}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&) const
-\begin{DoxyCompactList}\small\item\em operator == \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbString_a94031269af3c433393d4cf0ff9b4be38}{operator==}} (const char $\ast$) const
-\begin{DoxyCompactList}\small\item\em operator == \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbString_acf89691607050b0505dc6af28d059c38}{operator!=}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&) const
-\begin{DoxyCompactList}\small\item\em operator != \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbString_a822448f2a0ce653473d4c1de5763a3a6}{operator!=}} (const char $\ast$) const
-\begin{DoxyCompactList}\small\item\em operator != \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbString_a71c7aafa0d523c72cbe58c474be2270a}{operator$<$}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&) const
-\begin{DoxyCompactList}\small\item\em operator \texorpdfstring{$<$}{<} \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbString_ae46f6a45da5686b607a4edf2786a2fff}{operator$>$}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&) const
-\begin{DoxyCompactList}\small\item\em operator \texorpdfstring{$>$}{>} \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbString_a461f245e60cddfdf5f78a972a46e5880}{operator$<$=}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&) const
-\begin{DoxyCompactList}\small\item\em operator \texorpdfstring{$<$}{<}= \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbString_a8f16643cb7ba3ee9cf685422c9ea0e67}{operator$>$=}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&) const
-\begin{DoxyCompactList}\small\item\em operator \texorpdfstring{$>$}{>}= \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \mbox{\hyperlink{classxb_1_1xbString_a06abec236b95f6933ba17bf67089f7cf}{operator-\/}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s)
-\begin{DoxyCompactList}\small\item\em Concatonate operator -\/. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \mbox{\hyperlink{classxb_1_1xbString_aab556e8c3cb478dd95643327d72a48bd}{operator+}} (const char $\ast$s)
-\begin{DoxyCompactList}\small\item\em Concatonate operator +. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \mbox{\hyperlink{classxb_1_1xbString_a1f289d577ba90c500bc1be3ec7bb0206}{operator+}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s)
-\begin{DoxyCompactList}\small\item\em Concatonate operator +. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \mbox{\hyperlink{classxb_1_1xbString_af559654baba81c3c0c19823c0b7a69d3}{operator+}} (const char c)
-\begin{DoxyCompactList}\small\item\em Concatonate operator +. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a6c4fdb689d27a9d19a0b5b4236e1ca62}{Add\+Back\+Slash}} (char c)
-\begin{DoxyCompactList}\small\item\em Add a prefixing back slash to specified characters in the string. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a8f202e4798491f2ae9ce51ff58dd5815}{Append}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s)
-\begin{DoxyCompactList}\small\item\em Append data to string. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a1922319303feb6da1f40b5994c5e8240}{Append}} (const char $\ast$s)
-\begin{DoxyCompactList}\small\item\em Append data to string. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a097453cb71fbf0b5511cf1259ddce4fb}{Append}} (const char $\ast$s, xb\+UInt32 i\+Byte\+Count)
-\begin{DoxyCompactList}\small\item\em Append data to string. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a093c6ab5df375a2589755bb8f48fa5c7}{Append}} (char c)
-\begin{DoxyCompactList}\small\item\em Append data to string. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a85bef82dfa22122a1ab8dfe58a107d96}{Assign}} (const char $\ast$src\+Str, xb\+UInt32 l\+Start\+Pos, xb\+UInt32 l\+Copy\+Len)
-\begin{DoxyCompactList}\small\item\em Assign portion of string. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a08eb7ca6740423acab4e8bd7a6c8043d}{Assign}} (const char $\ast$src\+Str, xb\+UInt32 l\+Start\+Pos)
-\begin{DoxyCompactList}\small\item\em Assign portion of string. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_ac6afd224dfbe439ce083c8dd1ad3246c}{Assign}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s, xb\+UInt32 pos, xb\+UInt32 l\+Copy\+Len)
-\begin{DoxyCompactList}\small\item\em Assign portion of string. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a4f1d709d9f6c56959e8549157b4ee68c}{Assign}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s, xb\+UInt32 l\+Copy\+Len)
-\begin{DoxyCompactList}\small\item\em Assign portion of string. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \mbox{\hyperlink{classxb_1_1xbString_ac7a8466b03c04df838bd182ef244f792}{Copy}} () const
-\begin{DoxyCompactList}\small\item\em Copy a string. \end{DoxyCompactList}\item
-xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbString_a26bc14d92dc7ce1f2bf31cd74af0db0f}{Count\+Char}} (char c) const
-\begin{DoxyCompactList}\small\item\em Count the number of characters in the string. \end{DoxyCompactList}\item
-xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbString_adc0204bcfd1c052b9aea9229b10acf72}{Count\+Char}} (char c, xb\+Int16 i\+Opt) const
-\begin{DoxyCompactList}\small\item\em Count the number of characters in the string. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbString_a0a737bd408a94903f214eb2879eb56de}{Cvt\+Hex\+Char}} (char \&c\+Out)
-\begin{DoxyCompactList}\small\item\em Convert hex character to string. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbString_ab5eb6918a0ae9ab6c0e961318f3d1eb0}{Cvt\+Hex\+String}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Out)
-\begin{DoxyCompactList}\small\item\em Convert string of hex characters to string. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbString_a1528b30b84a41c3564ef31d1f4496b15}{Cvt\+ULong\+Long}} (xb\+UInt64 \&ull\+Out)
-\begin{DoxyCompactList}\small\item\em Convert string to xb\+UInt64 number. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbString_ae3ab18365e132323f8ae4c99eb72181c}{Cvt\+Long\+Long}} (xb\+Int64 \&ll\+Out)
-\begin{DoxyCompactList}\small\item\em Convert string to xb\+Int64 number. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a77195fc4957952625cb33bb503517a3e}{Extract\+Element}} (const char $\ast$src, char delim, xb\+UInt32 i\+Cnt, xb\+Int16 i\+Opt=0)
-\begin{DoxyCompactList}\small\item\em Extract an element out of a delimited string. \end{DoxyCompactList}\item
-char \mbox{\hyperlink{classxb_1_1xbString_a685187a5f8401b322fc61f3fbe56330d}{Get\+Character}} (xb\+UInt32 l\+Pos) const
-\begin{DoxyCompactList}\small\item\em Get a character by position. \end{DoxyCompactList}\item
-xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbString_ac7698665f44413a5e99a5b5bc573c6df}{Get\+Last\+Pos}} (char c) const
-\begin{DoxyCompactList}\small\item\em Get the position of the last occurrence of a given character. \end{DoxyCompactList}\item
-xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbString_a1c55587904fe7e534290559d0ecb8646}{Get\+Last\+Pos}} (const char $\ast$s) const
-\begin{DoxyCompactList}\small\item\em Get the position of the last occurrence of a given string. \end{DoxyCompactList}\item
-char \mbox{\hyperlink{classxb_1_1xbString_af8b8b808cf43cd352321b43f500142db}{Get\+Path\+Separator}} () const
-\begin{DoxyCompactList}\small\item\em Get the path separator out of the string. \end{DoxyCompactList}\item
-xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbString_a6c33e73659f8e98819289d2661c7271c}{Get\+Size}} () const
-\begin{DoxyCompactList}\small\item\em Retrieve the size of the string buffer. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbString_aa13f6b72e5a529eab04545892bbc98b4}{Has\+Alpha\+Chars}} () const
-\begin{DoxyCompactList}\small\item\em Determine if the string has any alpha characters. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbString_a4a255a30d683acd62ea09c1617b53cb3}{Is\+Empty}} () const
-\begin{DoxyCompactList}\small\item\em Determine if string is empty. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbString_a3fa34fa31bcb7244ecb054ab628ad500}{Is\+Null}} () const
-\begin{DoxyCompactList}\small\item\em Determine if string is NULL. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_acdc3a6d6955b99f0a6b1d181fb3098b9}{Left}} (xb\+UInt32 ul\+Len)
-\begin{DoxyCompactList}\small\item\em Retain left part of string, drop rightmost characters. \end{DoxyCompactList}\item
-xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbString_a998b240eedac311aea5843047f55649b}{Len}} () const
-\begin{DoxyCompactList}\small\item\em Retrieve length of current string. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a90e0d0be4fd0d82dd2ebbe689adf18ee}{Ltrim}} ()
-\begin{DoxyCompactList}\small\item\em Left trim white space from string. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a656f5854f74064b7257ff96d96dfb68b}{Ltrunc}} (xb\+UInt32 ul\+Cnt)
-\begin{DoxyCompactList}\small\item\em Left truncate string. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a0f9eefc836b24c4ee7c5a316c5d812b7}{Mid}} (xb\+UInt32 ul\+Pos, xb\+UInt32 l\+Len)
-\begin{DoxyCompactList}\small\item\em Extract portion of data from string. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a6a09cfed22066b0c72432f26960f9e7b}{Pad\+Left}} (char c, xb\+UInt32 ul\+Len)
-\begin{DoxyCompactList}\small\item\em Left pad string. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_aba13f0c77eb6c4a22996039569fad284}{Pad\+Right}} (char c, xb\+UInt32 ul\+Len)
-\begin{DoxyCompactList}\small\item\em Right pad string. \end{DoxyCompactList}\item
-xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbString_a1b586890138da8bf0e23090bd8b34581}{Pos}} (char c, xb\+UInt32 ul\+Start\+Pos) const
-\begin{DoxyCompactList}\small\item\em Determine position of a given character. \end{DoxyCompactList}\item
-xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbString_a3baf59d15099589ff631995f129e582b}{Pos}} (char c) const
-\begin{DoxyCompactList}\small\item\em Determine position of a given character. \end{DoxyCompactList}\item
-xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbString_a8705d7277b72f5aa98021e84438914da}{Pos}} (const char $\ast$s) const
-\begin{DoxyCompactList}\small\item\em Determine position of a given substring. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a1bae6fa8f608261f6e889616482f6e39}{Put\+At}} (xb\+UInt32 ul\+Pos, char c)
-\begin{DoxyCompactList}\small\item\em Insert character into string. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_afaac65eaa6d9ef1596d6a0e7b91ed0f2}{Remove}} (xb\+UInt32 ul\+Pos, xb\+UInt32 ulN)
-\begin{DoxyCompactList}\small\item\em Remove portion of string. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_ac721d643c60b5c5acf60c2bce99596fa}{Replace}} (const char $\ast$s\+Replace, const char $\ast$s\+Replace\+With, xb\+Int16 i\+Opt=0)
-\begin{DoxyCompactList}\small\item\em Replace a value within a string with another value. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_aa6d346ab04e5bb8852f0bb996163a35e}{Resize}} (xb\+UInt32 l\+Size)
-\begin{DoxyCompactList}\small\item\em Resize a string. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_aaf330188d67c347ecae0d16f65b22077}{Rtrim}} ()
-\begin{DoxyCompactList}\small\item\em Right trim the string. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_ab85753d2c39882e946a8468cbb587700}{Set}} (const char $\ast$s)
-\begin{DoxyCompactList}\small\item\em Set the value of the string. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_ac0d08bd688fd0e3707e32886d0dfeb09}{Set}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s)
-\begin{DoxyCompactList}\small\item\em Set the value of the string. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a6eba6ccd0c805a22516de2c18a30f8a3}{Set}} (const char $\ast$s, xb\+UInt32 ul\+Size)
-\begin{DoxyCompactList}\small\item\em Set the value of the string. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a3af5b1f111f94b0667551fcbd1d97abd}{Set\+Num}} (xb\+Int32 l\+Num)
-\begin{DoxyCompactList}\small\item\em Set the string to long integer numeric value. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a9e9bfa29d86377b915f1628aeb0e9195}{Sprintf}} (const char $\ast$format,...)
-\begin{DoxyCompactList}\small\item\em Printf routine for formatting a string. \end{DoxyCompactList}\item
-const char $\ast$ \mbox{\hyperlink{classxb_1_1xbString_a6715f4c0010f3ab487c9d787838a29b3}{Str}} () const
-\begin{DoxyCompactList}\small\item\em Return string data. \end{DoxyCompactList}\item
-char $\ast$ \mbox{\hyperlink{classxb_1_1xbString_a3bc9e856c34f0c240a6e36e5b6e3ea7b}{strncpy}} (char $\ast$c\+Dest, xb\+UInt32 n) const
-\begin{DoxyCompactList}\small\item\em Copy all or part of string to character array. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a054683872e1f05d11c2cf8683a63a6fe}{Swap\+Chars}} (char from, char to)
-\begin{DoxyCompactList}\small\item\em Swap characters. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a602cac1a6ef3f6b52f587ac4c0ef4fb2}{To\+Lower\+Case}} ()
-\begin{DoxyCompactList}\small\item\em Replace all upper case charaters with lower case characters. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a68001d0a44e6b4fe61e29a4e41ded9d4}{To\+Upper\+Case}} ()
-\begin{DoxyCompactList}\small\item\em Replace all lower case charaters with lower case characters. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_abc9bd33687d4e03ca52d77885721d626}{Trim}} ()
-\begin{DoxyCompactList}\small\item\em Trim all leading and trailing white space from string. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbString_a72b16c15fd8822efaa5f158c34df7b1e}{Valid\+Logical\+Value}} () const
-\begin{DoxyCompactList}\small\item\em Check for valid logical field data. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbString_aeed920d2a25111f776ddde2d530eb81b}{Valid\+Numeric\+Value}} () const
-\begin{DoxyCompactList}\small\item\em This function returns true if the data is valid numeric data. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a2fd30956a26a260d1ef6fdbe73dd93f9}{Zap\+Char}} (char c)
-\begin{DoxyCompactList}\small\item\em Remove every instance of a character from a string. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_addc3a470f6cd85d4c21bf9da38cf5ac9}{Zap\+Leading\+Char}} (char c)
-\begin{DoxyCompactList}\small\item\em Remove leading character from a string. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_afe3415bfa2e1089b792aeda0462fb99e}{Zap\+Trailing\+Char}} (char c)
-\begin{DoxyCompactList}\small\item\em Remove trailing character from a string. \end{DoxyCompactList}\end{DoxyCompactItemize}
-\doxysubsection*{Friends}
-\begin{DoxyCompactItemize}
-\item
-std\+::ostream \& \mbox{\hyperlink{classxb_1_1xbString_a3fa915061156521e9dd772a8d7e5f8fb}{operator$<$$<$}} (std\+::ostream \&os, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s)
-\begin{DoxyCompactList}\small\item\em Stream insertion operator \texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<}. \end{DoxyCompactList}\end{DoxyCompactItemize}
-
-
-\doxysubsection{Detailed Description}
-Class for handling string data.
-
-This class defines a basic string class with all the functions one would expect in a string class.
-
-For purposes of the \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} class, a string is defined as a variable sized array of one byte characters terminated with a null (0x00 or \textbackslash{}0) byte.~\newline
-~\newline
-
-
-This version of the \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} class does not support wide (wchar\+\_\+t) characters. Perhaps you would be interested in creating a class for supporting wide characters.~\newline
-~\newline
-
-
-This string class handle strings in a 1-\/based (not 0 based) fashion. Any string routines taking an offset use a 1-\/based value. That is, the first position of the string is position 1, not 0.~\newline
-~\newline
- ~\newline
-
-
-Position 1 (not 0) is considered the first position in a string. ~\newline
- A return of 0 would indicate a not found condition. A return of 1, would be the first byte.
-
-\doxysubsection{Constructor \& Destructor Documentation}
-\mbox{\Hypertarget{classxb_1_1xbString_a63f9313217e0ff3c9789ec59316216a1}\label{classxb_1_1xbString_a63f9313217e0ff3c9789ec59316216a1}}
-\index{xb::xbString@{xb::xbString}!xbString@{xbString}}
-\index{xbString@{xbString}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{xbString()}{xbString()}\hspace{0.1cm}{\footnotesize\ttfamily [1/6]}}
-{\footnotesize\ttfamily xb\+::xb\+String\+::xb\+String (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{ul\+Size }\end{DoxyParamCaption})}
-
-
-
-Constructor.
-
-
-\begin{DoxyParams}{Parameters}
-{\em ul\+Size} & -\/ Allocation size. The allocation size is normally handled internally by the class, but it can be set in this constructor. \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbString_a14bbaa293c8d40dd6c64332f2668a92e}\label{classxb_1_1xbString_a14bbaa293c8d40dd6c64332f2668a92e}}
-\index{xb::xbString@{xb::xbString}!xbString@{xbString}}
-\index{xbString@{xbString}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{xbString()}{xbString()}\hspace{0.1cm}{\footnotesize\ttfamily [2/6]}}
-{\footnotesize\ttfamily xb\+::xb\+String\+::xb\+String (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption})}
-
-
-
-Constructor.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c} & -\/ Initialize string to c. \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbString_a18f3598dcdf2ec5692274fc8ee769ad7}\label{classxb_1_1xbString_a18f3598dcdf2ec5692274fc8ee769ad7}}
-\index{xb::xbString@{xb::xbString}!xbString@{xbString}}
-\index{xbString@{xbString}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{xbString()}{xbString()}\hspace{0.1cm}{\footnotesize\ttfamily [3/6]}}
-{\footnotesize\ttfamily xb\+::xb\+String\+::xb\+String (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s, }\item[{xb\+UInt32}]{ul\+Max\+Len }\end{DoxyParamCaption})}
-
-
-
-Constructor.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s} & Initialize string to s. \\
-\hline
-{\em ul\+Max\+Len} & Maximum length of string. Truncate any characters greater than ul\+Max\+Len. \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbString_a0d81016b93fc36ebbbafacf35c677f07}\label{classxb_1_1xbString_a0d81016b93fc36ebbbafacf35c677f07}}
-\index{xb::xbString@{xb::xbString}!xbString@{xbString}}
-\index{xbString@{xbString}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{xbString()}{xbString()}\hspace{0.1cm}{\footnotesize\ttfamily [4/6]}}
-{\footnotesize\ttfamily xb\+::xb\+String\+::xb\+String (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s }\end{DoxyParamCaption})}
-
-
-
-Constructor.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s} & Initialize string to s. \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbString_a25856311106c5fb15d39017b63f0ddc7}\label{classxb_1_1xbString_a25856311106c5fb15d39017b63f0ddc7}}
-\index{xb::xbString@{xb::xbString}!xbString@{xbString}}
-\index{xbString@{xbString}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{xbString()}{xbString()}\hspace{0.1cm}{\footnotesize\ttfamily [5/6]}}
-{\footnotesize\ttfamily xb\+::xb\+String\+::xb\+String (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s = {\ttfamily \char`\"{}\char`\"{}} }\end{DoxyParamCaption})}
-
-
-
-Constructor.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s} & -\/ Initialize string to s. \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbString_ad865b55e3b08dffd527afee8e7e8e3fe}\label{classxb_1_1xbString_ad865b55e3b08dffd527afee8e7e8e3fe}}
-\index{xb::xbString@{xb::xbString}!xbString@{xbString}}
-\index{xbString@{xbString}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{xbString()}{xbString()}\hspace{0.1cm}{\footnotesize\ttfamily [6/6]}}
-{\footnotesize\ttfamily xb\+::xb\+String\+::xb\+String (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}}}]{d }\end{DoxyParamCaption})}
-
-
-
-Constructor.
-
-
-\begin{DoxyParams}{Parameters}
-{\em d} & -\/ Initiailize string to d. \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbString_a10a6549efab02bc76ab33b15916b1eb1}\label{classxb_1_1xbString_a10a6549efab02bc76ab33b15916b1eb1}}
-\index{xb::xbString@{xb::xbString}!````~xbString@{$\sim$xbString}}
-\index{````~xbString@{$\sim$xbString}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{$\sim$xbString()}{~xbString()}}
-{\footnotesize\ttfamily xb\+::xb\+String\+::$\sim$xb\+String (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
-
-
-Destructor.
-
-
-
-\doxysubsection{Member Function Documentation}
-\mbox{\Hypertarget{classxb_1_1xbString_a6c4fdb689d27a9d19a0b5b4236e1ca62}\label{classxb_1_1xbString_a6c4fdb689d27a9d19a0b5b4236e1ca62}}
-\index{xb::xbString@{xb::xbString}!AddBackSlash@{AddBackSlash}}
-\index{AddBackSlash@{AddBackSlash}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{AddBackSlash()}{AddBackSlash()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Add\+Back\+Slash (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption})}
-
-
-
-Add a prefixing back slash to specified characters in the string.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c} & Character to prefix with a backslash. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Reference to this string.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a093c6ab5df375a2589755bb8f48fa5c7}\label{classxb_1_1xbString_a093c6ab5df375a2589755bb8f48fa5c7}}
-\index{xb::xbString@{xb::xbString}!Append@{Append}}
-\index{Append@{Append}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{Append()}{Append()}\hspace{0.1cm}{\footnotesize\ttfamily [1/4]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Append (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption})}
-
-
-
-Append data to string.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c} & String data to append. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Reference to this string.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a1922319303feb6da1f40b5994c5e8240}\label{classxb_1_1xbString_a1922319303feb6da1f40b5994c5e8240}}
-\index{xb::xbString@{xb::xbString}!Append@{Append}}
-\index{Append@{Append}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{Append()}{Append()}\hspace{0.1cm}{\footnotesize\ttfamily [2/4]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Append (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s }\end{DoxyParamCaption})}
-
-
-
-Append data to string.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s} & String data to append. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Reference to this string.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a097453cb71fbf0b5511cf1259ddce4fb}\label{classxb_1_1xbString_a097453cb71fbf0b5511cf1259ddce4fb}}
-\index{xb::xbString@{xb::xbString}!Append@{Append}}
-\index{Append@{Append}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{Append()}{Append()}\hspace{0.1cm}{\footnotesize\ttfamily [3/4]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Append (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s, }\item[{xb\+UInt32}]{ul\+Byte\+Count }\end{DoxyParamCaption})}
-
-
-
-Append data to string.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s} & String data to append. \\
-\hline
-{\em ul\+Byte\+Count} & Maximum number of bytes to append. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Reference to this string.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a8f202e4798491f2ae9ce51ff58dd5815}\label{classxb_1_1xbString_a8f202e4798491f2ae9ce51ff58dd5815}}
-\index{xb::xbString@{xb::xbString}!Append@{Append}}
-\index{Append@{Append}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{Append()}{Append()}\hspace{0.1cm}{\footnotesize\ttfamily [4/4]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Append (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s }\end{DoxyParamCaption})}
-
-
-
-Append data to string.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s} & String data to append. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Reference to this string.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a08eb7ca6740423acab4e8bd7a6c8043d}\label{classxb_1_1xbString_a08eb7ca6740423acab4e8bd7a6c8043d}}
-\index{xb::xbString@{xb::xbString}!Assign@{Assign}}
-\index{Assign@{Assign}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{Assign()}{Assign()}\hspace{0.1cm}{\footnotesize\ttfamily [1/4]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Assign (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s\+Str, }\item[{xb\+UInt32}]{ul\+Start\+Pos }\end{DoxyParamCaption})}
-
-
-
-Assign portion of string.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Str} & -\/ Source string for copy operation. s\+Str needs to be a Null terminated string. \\
-\hline
-{\em ul\+Start\+Pos} & -\/ Starting position within source string. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Reference to this string.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a85bef82dfa22122a1ab8dfe58a107d96}\label{classxb_1_1xbString_a85bef82dfa22122a1ab8dfe58a107d96}}
-\index{xb::xbString@{xb::xbString}!Assign@{Assign}}
-\index{Assign@{Assign}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{Assign()}{Assign()}\hspace{0.1cm}{\footnotesize\ttfamily [2/4]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Assign (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s\+Str, }\item[{xb\+UInt32}]{ul\+Start\+Pos, }\item[{xb\+UInt32}]{ul\+Copy\+Len }\end{DoxyParamCaption})}
-
-
-
-Assign portion of string.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Str} & -\/ Source string for copy operation. s\+Str needs to be a Null terminated string. \\
-\hline
-{\em ul\+Start\+Pos} & -\/ Starting position within source string. \\
-\hline
-{\em ul\+Copy\+Len} & -\/ Length of data to copy. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Reference to this string.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a4f1d709d9f6c56959e8549157b4ee68c}\label{classxb_1_1xbString_a4f1d709d9f6c56959e8549157b4ee68c}}
-\index{xb::xbString@{xb::xbString}!Assign@{Assign}}
-\index{Assign@{Assign}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{Assign()}{Assign()}\hspace{0.1cm}{\footnotesize\ttfamily [3/4]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Assign (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Str, }\item[{xb\+UInt32}]{ul\+Start\+Pos }\end{DoxyParamCaption})}
-
-
-
-Assign portion of string.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Str} & -\/ Source string for copy operation. s\+Str needs to be a Null terminated string. \\
-\hline
-{\em ul\+Start\+Pos} & -\/ Starting position within source string. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Reference to this string.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_ac6afd224dfbe439ce083c8dd1ad3246c}\label{classxb_1_1xbString_ac6afd224dfbe439ce083c8dd1ad3246c}}
-\index{xb::xbString@{xb::xbString}!Assign@{Assign}}
-\index{Assign@{Assign}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{Assign()}{Assign()}\hspace{0.1cm}{\footnotesize\ttfamily [4/4]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Assign (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Str, }\item[{xb\+UInt32}]{ul\+Start\+Pos, }\item[{xb\+UInt32}]{ul\+Copy\+Len }\end{DoxyParamCaption})}
-
-
-
-Assign portion of string.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Str} & -\/ Source string for copy operation. s\+Str needs to be a Null terminated string. \\
-\hline
-{\em ul\+Start\+Pos} & -\/ Starting position within source string. \\
-\hline
-{\em ul\+Copy\+Len} & -\/ Length of data to copy. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Reference to this string.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_ac7a8466b03c04df838bd182ef244f792}\label{classxb_1_1xbString_ac7a8466b03c04df838bd182ef244f792}}
-\index{xb::xbString@{xb::xbString}!Copy@{Copy}}
-\index{Copy@{Copy}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{Copy()}{Copy()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} xb\+::xb\+String\+::\+Copy (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
-
-
-
-Copy a string.
-
-\begin{DoxyReturn}{Returns}
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}}.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a26bc14d92dc7ce1f2bf31cd74af0db0f}\label{classxb_1_1xbString_a26bc14d92dc7ce1f2bf31cd74af0db0f}}
-\index{xb::xbString@{xb::xbString}!CountChar@{CountChar}}
-\index{CountChar@{CountChar}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{CountChar()}{CountChar()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+UInt32 xb\+::xb\+String\+::\+Count\+Char (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption}) const}
-
-
-
-Count the number of characters in the string.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c} & Character to count. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The number of characters.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_adc0204bcfd1c052b9aea9229b10acf72}\label{classxb_1_1xbString_adc0204bcfd1c052b9aea9229b10acf72}}
-\index{xb::xbString@{xb::xbString}!CountChar@{CountChar}}
-\index{CountChar@{CountChar}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{CountChar()}{CountChar()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+UInt32 xb\+::xb\+String\+::\+Count\+Char (\begin{DoxyParamCaption}\item[{char}]{c, }\item[{xb\+Int16}]{i\+Opt }\end{DoxyParamCaption}) const}
-
-
-
-Count the number of characters in the string.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c} & Character to count. \\
-\hline
-{\em i\+Opt} & 0 -\/ Count the number of characters.~\newline
- 1 -\/ Count the number of characters not between single or double quotes. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-The number of characters.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a0a737bd408a94903f214eb2879eb56de}\label{classxb_1_1xbString_a0a737bd408a94903f214eb2879eb56de}}
-\index{xb::xbString@{xb::xbString}!CvtHexChar@{CvtHexChar}}
-\index{CvtHexChar@{CvtHexChar}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{CvtHexChar()}{CvtHexChar()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+String\+::\+Cvt\+Hex\+Char (\begin{DoxyParamCaption}\item[{char \&}]{c\+Out }\end{DoxyParamCaption})}
-
-
-
-Convert hex character to string.
-
-This routine converts a four byte string in the format of 0x00 to a one byte char value. The first four bytes of the string must be in the format 0x00. Anything past the first four bytes is disregarded.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c\+Out} & Output character. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-XB\+\_\+\+INVALID\+\_\+\+PARM on error~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR on success.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_ab5eb6918a0ae9ab6c0e961318f3d1eb0}\label{classxb_1_1xbString_ab5eb6918a0ae9ab6c0e961318f3d1eb0}}
-\index{xb::xbString@{xb::xbString}!CvtHexString@{CvtHexString}}
-\index{CvtHexString@{CvtHexString}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{CvtHexString()}{CvtHexString()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+String\+::\+Cvt\+Hex\+String (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Out }\end{DoxyParamCaption})}
-
-
-
-Convert string of hex characters to string.
-
-This routine converts a string of four byte format of 0x00 to a string of one byte chars.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Out} & Output string of converted characters. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-XB\+\_\+\+INVALID\+\_\+\+PARM on error~\newline
- XB\+\_\+\+NO\+\_\+\+ERROR on success.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_ae3ab18365e132323f8ae4c99eb72181c}\label{classxb_1_1xbString_ae3ab18365e132323f8ae4c99eb72181c}}
-\index{xb::xbString@{xb::xbString}!CvtLongLong@{CvtLongLong}}
-\index{CvtLongLong@{CvtLongLong}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{CvtLongLong()}{CvtLongLong()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+String\+::\+Cvt\+Long\+Long (\begin{DoxyParamCaption}\item[{xb\+Int64 \&}]{ll\+Out }\end{DoxyParamCaption})}
-
-
-
-Convert string to xb\+Int64 number.
-
-
-\begin{DoxyParams}{Parameters}
-{\em ll\+Out} & -\/ output long long. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-XB\+\_\+\+NO\+\_\+\+ERROR
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a1528b30b84a41c3564ef31d1f4496b15}\label{classxb_1_1xbString_a1528b30b84a41c3564ef31d1f4496b15}}
-\index{xb::xbString@{xb::xbString}!CvtULongLong@{CvtULongLong}}
-\index{CvtULongLong@{CvtULongLong}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{CvtULongLong()}{CvtULongLong()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+String\+::\+Cvt\+ULong\+Long (\begin{DoxyParamCaption}\item[{xb\+UInt64 \&}]{ull\+Out }\end{DoxyParamCaption})}
-
-
-
-Convert string to xb\+UInt64 number.
-
-
-\begin{DoxyParams}{Parameters}
-{\em ull\+Out} & -\/ output unsigned long long. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-XB\+\_\+\+NO\+\_\+\+ERROR
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a77195fc4957952625cb33bb503517a3e}\label{classxb_1_1xbString_a77195fc4957952625cb33bb503517a3e}}
-\index{xb::xbString@{xb::xbString}!ExtractElement@{ExtractElement}}
-\index{ExtractElement@{ExtractElement}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{ExtractElement()}{ExtractElement()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Extract\+Element (\begin{DoxyParamCaption}\item[{const char $\ast$}]{p\+Src, }\item[{char}]{c\+Delim, }\item[{xb\+UInt32}]{l\+Skip\+Cnt, }\item[{xb\+Int16}]{i\+Opt = {\ttfamily 0} }\end{DoxyParamCaption})}
-
-
-
-Extract an element out of a delimited string.
-
-
-\begin{DoxyParams}{Parameters}
-{\em p\+Src} & Source string. \\
-\hline
-{\em c\+Delim} & Delimiter. \\
-\hline
-{\em l\+Skip\+Cnt} & Number of delimiters to skip. \\
-\hline
-{\em i\+Opt} & 0 -\/ ignore single and double quotes.~\newline
- 1 -\/ ignore delimiters between single or double quotes. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Reference to string extracted from element.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a685187a5f8401b322fc61f3fbe56330d}\label{classxb_1_1xbString_a685187a5f8401b322fc61f3fbe56330d}}
-\index{xb::xbString@{xb::xbString}!GetCharacter@{GetCharacter}}
-\index{GetCharacter@{GetCharacter}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{GetCharacter()}{GetCharacter()}}
-{\footnotesize\ttfamily char xb\+::xb\+String\+::\+Get\+Character (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{n }\end{DoxyParamCaption}) const}
-
-
-
-Get a character by position.
-
-
-\begin{DoxyParams}{Parameters}
-{\em n} & -\/ Position in string to extract. First position is 1 (not 0). \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Character from position n, or null.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_ac7698665f44413a5e99a5b5bc573c6df}\label{classxb_1_1xbString_ac7698665f44413a5e99a5b5bc573c6df}}
-\index{xb::xbString@{xb::xbString}!GetLastPos@{GetLastPos}}
-\index{GetLastPos@{GetLastPos}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{GetLastPos()}{GetLastPos()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+UInt32 xb\+::xb\+String\+::\+Get\+Last\+Pos (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption}) const}
-
-
-
-Get the position of the last occurrence of a given character.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c} & -\/ Character to search for. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Last position of character in the string.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a1c55587904fe7e534290559d0ecb8646}\label{classxb_1_1xbString_a1c55587904fe7e534290559d0ecb8646}}
-\index{xb::xbString@{xb::xbString}!GetLastPos@{GetLastPos}}
-\index{GetLastPos@{GetLastPos}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{GetLastPos()}{GetLastPos()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+UInt32 xb\+::xb\+String\+::\+Get\+Last\+Pos (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s }\end{DoxyParamCaption}) const}
-
-
-
-Get the position of the last occurrence of a given string.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s} & -\/ String to search for. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Last position of character in the string.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_af8b8b808cf43cd352321b43f500142db}\label{classxb_1_1xbString_af8b8b808cf43cd352321b43f500142db}}
-\index{xb::xbString@{xb::xbString}!GetPathSeparator@{GetPathSeparator}}
-\index{GetPathSeparator@{GetPathSeparator}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{GetPathSeparator()}{GetPathSeparator()}}
-{\footnotesize\ttfamily char xb\+::xb\+String\+::\+Get\+Path\+Separator (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
-
-
-
-Get the path separator out of the string.
-
-\begin{DoxyReturn}{Returns}
-Char value containing either / or \textbackslash{} depending on OS.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a6c33e73659f8e98819289d2661c7271c}\label{classxb_1_1xbString_a6c33e73659f8e98819289d2661c7271c}}
-\index{xb::xbString@{xb::xbString}!GetSize@{GetSize}}
-\index{GetSize@{GetSize}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{GetSize()}{GetSize()}}
-{\footnotesize\ttfamily xb\+UInt32 xb\+::xb\+String\+::\+Get\+Size (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
-
-
-
-Retrieve the size of the string buffer.
-
-\begin{DoxyReturn}{Returns}
-Size of string buffer including the null terminating byte.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_aa13f6b72e5a529eab04545892bbc98b4}\label{classxb_1_1xbString_aa13f6b72e5a529eab04545892bbc98b4}}
-\index{xb::xbString@{xb::xbString}!HasAlphaChars@{HasAlphaChars}}
-\index{HasAlphaChars@{HasAlphaChars}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{HasAlphaChars()}{HasAlphaChars()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+String\+::\+Has\+Alpha\+Chars (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
-
-
-
-Determine if the string has any alpha characters.
-
-\begin{DoxyReturn}{Returns}
-xb\+True -\/ String contains one or more aloha characters.~\newline
- xb\+False -\/ String contains no alpha characters.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a4a255a30d683acd62ea09c1617b53cb3}\label{classxb_1_1xbString_a4a255a30d683acd62ea09c1617b53cb3}}
-\index{xb::xbString@{xb::xbString}!IsEmpty@{IsEmpty}}
-\index{IsEmpty@{IsEmpty}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{IsEmpty()}{IsEmpty()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+String\+::\+Is\+Empty (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
-
-
-
-Determine if string is empty.
-
-\begin{DoxyReturn}{Returns}
-xb\+True if string is empty.~\newline
- xb\+False if string is not empty.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a3fa34fa31bcb7244ecb054ab628ad500}\label{classxb_1_1xbString_a3fa34fa31bcb7244ecb054ab628ad500}}
-\index{xb::xbString@{xb::xbString}!IsNull@{IsNull}}
-\index{IsNull@{IsNull}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{IsNull()}{IsNull()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+String\+::\+Is\+Null (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
-
-
-
-Determine if string is NULL.
-
-\begin{DoxyReturn}{Returns}
-xb\+True if string is NULL.~\newline
- xb\+False if string is not NULL.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_acdc3a6d6955b99f0a6b1d181fb3098b9}\label{classxb_1_1xbString_acdc3a6d6955b99f0a6b1d181fb3098b9}}
-\index{xb::xbString@{xb::xbString}!Left@{Left}}
-\index{Left@{Left}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{Left()}{Left()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Left (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{ul\+Len }\end{DoxyParamCaption})}
-
-
-
-Retain left part of string, drop rightmost characters.
-
-
-\begin{DoxyParams}{Parameters}
-{\em ul\+Len} & New string length, truncate rightmost excess. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Reference to string.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a998b240eedac311aea5843047f55649b}\label{classxb_1_1xbString_a998b240eedac311aea5843047f55649b}}
-\index{xb::xbString@{xb::xbString}!Len@{Len}}
-\index{Len@{Len}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{Len()}{Len()}}
-{\footnotesize\ttfamily xb\+UInt32 xb\+::xb\+String\+::\+Len (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
-
-
-
-Retrieve length of current string.
-
-\begin{DoxyReturn}{Returns}
-String length, excluding the terminating null byte.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a90e0d0be4fd0d82dd2ebbe689adf18ee}\label{classxb_1_1xbString_a90e0d0be4fd0d82dd2ebbe689adf18ee}}
-\index{xb::xbString@{xb::xbString}!Ltrim@{Ltrim}}
-\index{Ltrim@{Ltrim}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{Ltrim()}{Ltrim()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Ltrim (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
-
-
-Left trim white space from string.
-
-\begin{DoxyReturn}{Returns}
-Reference to this string.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a656f5854f74064b7257ff96d96dfb68b}\label{classxb_1_1xbString_a656f5854f74064b7257ff96d96dfb68b}}
-\index{xb::xbString@{xb::xbString}!Ltrunc@{Ltrunc}}
-\index{Ltrunc@{Ltrunc}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{Ltrunc()}{Ltrunc()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Ltrunc (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{ul\+Cnt }\end{DoxyParamCaption})}
-
-
-
-Left truncate string.
-
-
-\begin{DoxyParams}{Parameters}
-{\em ul\+Cnt} & Number of bytes to remove from the left. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Reference to this string.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a0f9eefc836b24c4ee7c5a316c5d812b7}\label{classxb_1_1xbString_a0f9eefc836b24c4ee7c5a316c5d812b7}}
-\index{xb::xbString@{xb::xbString}!Mid@{Mid}}
-\index{Mid@{Mid}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{Mid()}{Mid()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Mid (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{ul\+Start\+Pos, }\item[{xb\+UInt32}]{ul\+Targ\+Len }\end{DoxyParamCaption})}
-
-
-
-Extract portion of data from string.
-
-
-\begin{DoxyParams}{Parameters}
-{\em ul\+Start\+Pos} & Starting position \\
-\hline
-{\em ul\+Targ\+Len} & Length \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Reference to string
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a545df0ae9590f0ea5844a165e38a6388}\label{classxb_1_1xbString_a545df0ae9590f0ea5844a165e38a6388}}
-\index{xb::xbString@{xb::xbString}!operator const char $\ast$@{operator const char $\ast$}}
-\index{operator const char $\ast$@{operator const char $\ast$}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{operator const char $\ast$()}{operator const char *()}}
-{\footnotesize\ttfamily xb\+::xb\+String\+::operator const char $\ast$ (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
-
-
-
-Operator const char $\ast$.
-
-\begin{DoxyReturn}{Returns}
-Pointer to string data.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a822448f2a0ce653473d4c1de5763a3a6}\label{classxb_1_1xbString_a822448f2a0ce653473d4c1de5763a3a6}}
-\index{xb::xbString@{xb::xbString}!operator"!=@{operator"!=}}
-\index{operator"!=@{operator"!=}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{operator"!=()}{operator!=()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+String\+::operator!= (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s }\end{DoxyParamCaption}) const}
-
-
-
-operator !=
-
-
-\begin{DoxyParams}{Parameters}
-{\em s} & String to compare \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-xb\+True -\/ Strings don\textquotesingle{}t match.~\newline
- zb\+False -\/ Strings match.~\newline
-
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_acf89691607050b0505dc6af28d059c38}\label{classxb_1_1xbString_acf89691607050b0505dc6af28d059c38}}
-\index{xb::xbString@{xb::xbString}!operator"!=@{operator"!=}}
-\index{operator"!=@{operator"!=}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{operator"!=()}{operator!=()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+String\+::operator!= (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s }\end{DoxyParamCaption}) const}
-
-
-
-operator !=
-
-
-\begin{DoxyParams}{Parameters}
-{\em s} & String to compare \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-xb\+True -\/ Strings don\textquotesingle{}t match.~\newline
- xb\+False -\/ Strings match.~\newline
-
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_aab556e8c3cb478dd95643327d72a48bd}\label{classxb_1_1xbString_aab556e8c3cb478dd95643327d72a48bd}}
-\index{xb::xbString@{xb::xbString}!operator+@{operator+}}
-\index{operator+@{operator+}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{operator+()}{operator+()}\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} xb\+::xb\+String\+::operator+ (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s1 }\end{DoxyParamCaption})}
-
-
-
-Concatonate operator +.
-
-Concatonate left string with right string returning reference to new string.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s1} & Right string operator. \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbString_af559654baba81c3c0c19823c0b7a69d3}\label{classxb_1_1xbString_af559654baba81c3c0c19823c0b7a69d3}}
-\index{xb::xbString@{xb::xbString}!operator+@{operator+}}
-\index{operator+@{operator+}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{operator+()}{operator+()}\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} xb\+::xb\+String\+::operator+ (\begin{DoxyParamCaption}\item[{const char}]{c }\end{DoxyParamCaption})}
-
-
-
-Concatonate operator +.
-
-Concatonate left string with right string returning reference to new string.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c} & Right string operator. \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbString_a1f289d577ba90c500bc1be3ec7bb0206}\label{classxb_1_1xbString_a1f289d577ba90c500bc1be3ec7bb0206}}
-\index{xb::xbString@{xb::xbString}!operator+@{operator+}}
-\index{operator+@{operator+}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{operator+()}{operator+()}\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} xb\+::xb\+String\+::operator+ (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s1 }\end{DoxyParamCaption})}
-
-
-
-Concatonate operator +.
-
-Concatonate left string with right string returning reference to new string.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s1} & Right string operator. \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbString_ae12f45b8be84e438e032c0b860f985c6}\label{classxb_1_1xbString_ae12f45b8be84e438e032c0b860f985c6}}
-\index{xb::xbString@{xb::xbString}!operator+=@{operator+=}}
-\index{operator+=@{operator+=}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{operator+=()}{operator+=()}\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::operator+= (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption})}
-
-
-
-Append operator +=.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c} & -\/ Append c to the string. \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbString_ab319120dbad9107e1e7090139c956100}\label{classxb_1_1xbString_ab319120dbad9107e1e7090139c956100}}
-\index{xb::xbString@{xb::xbString}!operator+=@{operator+=}}
-\index{operator+=@{operator+=}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{operator+=()}{operator+=()}\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::operator+= (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s }\end{DoxyParamCaption})}
-
-
-
-Append operator +=.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s} & -\/ Append s to the string. \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbString_a76a47af239797a266ada6141c150001c}\label{classxb_1_1xbString_a76a47af239797a266ada6141c150001c}}
-\index{xb::xbString@{xb::xbString}!operator+=@{operator+=}}
-\index{operator+=@{operator+=}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{operator+=()}{operator+=()}\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::operator+= (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s }\end{DoxyParamCaption})}
-
-
-
-Append operator +=.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s} & -\/ Append s to the string. \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbString_a06abec236b95f6933ba17bf67089f7cf}\label{classxb_1_1xbString_a06abec236b95f6933ba17bf67089f7cf}}
-\index{xb::xbString@{xb::xbString}!operator-\/@{operator-\/}}
-\index{operator-\/@{operator-\/}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{operator-\/()}{operator-()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} xb\+::xb\+String\+::operator-\/ (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s1 }\end{DoxyParamCaption})}
-
-
-
-Concatonate operator -\/.
-
-Concatonate left string with right string returning reference to new string. Both strings are trimmed.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s1} & Right string operator. \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbString_adcafd019df23bb5724c46e34f3f31194}\label{classxb_1_1xbString_adcafd019df23bb5724c46e34f3f31194}}
-\index{xb::xbString@{xb::xbString}!operator-\/=@{operator-\/=}}
-\index{operator-\/=@{operator-\/=}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{operator-\/=()}{operator-=()}\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::operator-\/= (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption})}
-
-
-
-Append operator -\/=.
-
-Append c to the right of this string, trimming right space on this string first.
-\begin{DoxyParams}{Parameters}
-{\em c} & -\/ Append s to the right of the string value. \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbString_aaae97e6eda3d18c9f463993ade985bf4}\label{classxb_1_1xbString_aaae97e6eda3d18c9f463993ade985bf4}}
-\index{xb::xbString@{xb::xbString}!operator-\/=@{operator-\/=}}
-\index{operator-\/=@{operator-\/=}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{operator-\/=()}{operator-=()}\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::operator-\/= (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s }\end{DoxyParamCaption})}
-
-
-
-Append operator -\/=.
-
-Append s to the right of this string, right trimming both strings.
-\begin{DoxyParams}{Parameters}
-{\em s} & -\/ Append s to the right of the string value. \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbString_aa7f4db1b4eae9dfad46346db6e17ea15}\label{classxb_1_1xbString_aa7f4db1b4eae9dfad46346db6e17ea15}}
-\index{xb::xbString@{xb::xbString}!operator-\/=@{operator-\/=}}
-\index{operator-\/=@{operator-\/=}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{operator-\/=()}{operator-=()}\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::operator-\/= (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s }\end{DoxyParamCaption})}
-
-
-
-Append operator -\/=.
-
-Append s to the right of this string, right trimming both strings.
-\begin{DoxyParams}{Parameters}
-{\em s} & -\/ Append s to the right of the string value. \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbString_a71c7aafa0d523c72cbe58c474be2270a}\label{classxb_1_1xbString_a71c7aafa0d523c72cbe58c474be2270a}}
-\index{xb::xbString@{xb::xbString}!operator$<$@{operator$<$}}
-\index{operator$<$@{operator$<$}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{operator$<$()}{operator<()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+String\+::operator$<$ (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s }\end{DoxyParamCaption}) const}
-
-
-
-operator \texorpdfstring{$<$}{<}
-
-
-\begin{DoxyParams}{Parameters}
-{\em s} & String to compare \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-xb\+True -\/ Left string is less than the right string.~\newline
- zb\+False -\/ Left string is not less than the right string.~\newline
-
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a461f245e60cddfdf5f78a972a46e5880}\label{classxb_1_1xbString_a461f245e60cddfdf5f78a972a46e5880}}
-\index{xb::xbString@{xb::xbString}!operator$<$=@{operator$<$=}}
-\index{operator$<$=@{operator$<$=}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{operator$<$=()}{operator<=()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+String\+::operator$<$= (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s }\end{DoxyParamCaption}) const}
-
-
-
-operator \texorpdfstring{$<$}{<}=
-
-
-\begin{DoxyParams}{Parameters}
-{\em s} & String to compare \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-xb\+True -\/ Left string is less than or equal to the right string.~\newline
- zb\+False -\/ Left string is not less than or equal to the right string.~\newline
-
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a84ae7d16c5d73c5aa2270aa9895a7f7c}\label{classxb_1_1xbString_a84ae7d16c5d73c5aa2270aa9895a7f7c}}
-\index{xb::xbString@{xb::xbString}!operator=@{operator=}}
-\index{operator=@{operator=}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{operator=()}{operator=()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::operator= (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s }\end{DoxyParamCaption})}
-
-
-
-Set operator =.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s} & -\/ Set the string to the string on the right of the equal sign. \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbString_a4f69d11cbd43edf71725a606d0ca8f40}\label{classxb_1_1xbString_a4f69d11cbd43edf71725a606d0ca8f40}}
-\index{xb::xbString@{xb::xbString}!operator=@{operator=}}
-\index{operator=@{operator=}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{operator=()}{operator=()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::operator= (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s }\end{DoxyParamCaption})}
-
-
-
-Set operator =.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s} & -\/ Set the string to the string on the right of the equal sign. \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbString_a94031269af3c433393d4cf0ff9b4be38}\label{classxb_1_1xbString_a94031269af3c433393d4cf0ff9b4be38}}
-\index{xb::xbString@{xb::xbString}!operator==@{operator==}}
-\index{operator==@{operator==}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{operator==()}{operator==()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+String\+::operator== (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s }\end{DoxyParamCaption}) const}
-
-
-
-operator ==
-
-
-\begin{DoxyParams}{Parameters}
-{\em s} & String to compare \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-xb\+True -\/ Strings match.~\newline
- zb\+False -\/ Strings don\textquotesingle{}t match.~\newline
-
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a2df3ed2fc9456214f5fd2fcf77b69bc1}\label{classxb_1_1xbString_a2df3ed2fc9456214f5fd2fcf77b69bc1}}
-\index{xb::xbString@{xb::xbString}!operator==@{operator==}}
-\index{operator==@{operator==}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{operator==()}{operator==()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+String\+::operator== (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s }\end{DoxyParamCaption}) const}
-
-
-
-operator ==
-
-
-\begin{DoxyParams}{Parameters}
-{\em s} & String to compare \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-xb\+True -\/ Strings match.~\newline
- zb\+False -\/ Strings don\textquotesingle{}t match.~\newline
-
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_ae46f6a45da5686b607a4edf2786a2fff}\label{classxb_1_1xbString_ae46f6a45da5686b607a4edf2786a2fff}}
-\index{xb::xbString@{xb::xbString}!operator$>$@{operator$>$}}
-\index{operator$>$@{operator$>$}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{operator$>$()}{operator>()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+String\+::operator$>$ (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s }\end{DoxyParamCaption}) const}
-
-
-
-operator \texorpdfstring{$>$}{>}
-
-
-\begin{DoxyParams}{Parameters}
-{\em s} & String to compare \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-xb\+True -\/ Left string is greater than the right string.~\newline
- zb\+False -\/ Left string is not greater than the right string.~\newline
-
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a8f16643cb7ba3ee9cf685422c9ea0e67}\label{classxb_1_1xbString_a8f16643cb7ba3ee9cf685422c9ea0e67}}
-\index{xb::xbString@{xb::xbString}!operator$>$=@{operator$>$=}}
-\index{operator$>$=@{operator$>$=}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{operator$>$=()}{operator>=()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+String\+::operator$>$= (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s }\end{DoxyParamCaption}) const}
-
-
-
-operator \texorpdfstring{$>$}{>}=
-
-
-\begin{DoxyParams}{Parameters}
-{\em s} & String to compare \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-xb\+True -\/ Left string is greater than or equal to the right string.~\newline
- zb\+False -\/ Left string is not greater than or equal to the right string.~\newline
-
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a4deaa68d9571753349c29baacb5613e8}\label{classxb_1_1xbString_a4deaa68d9571753349c29baacb5613e8}}
-\index{xb::xbString@{xb::xbString}!operator\mbox{[}\mbox{]}@{operator[]}}
-\index{operator\mbox{[}\mbox{]}@{operator[]}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{operator[]()}{operator[]()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily char \& xb\+::xb\+String\+::operator\mbox{[}$\,$\mbox{]} (\begin{DoxyParamCaption}\item[{xb\+Int32}]{n }\end{DoxyParamCaption}) const}
-
-
-
-operator \mbox{[}\mbox{]}
-
-
-\begin{DoxyParams}{Parameters}
-{\em n} & -\/ Offset into the string of the byte to retrieve. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-c -\/ The character to return from the offset within the \mbox{[}\mbox{]} brackets.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_abe45e463226ac8e18550ced18c5a9df3}\label{classxb_1_1xbString_abe45e463226ac8e18550ced18c5a9df3}}
-\index{xb::xbString@{xb::xbString}!operator\mbox{[}\mbox{]}@{operator[]}}
-\index{operator\mbox{[}\mbox{]}@{operator[]}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{operator[]()}{operator[]()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily char \& xb\+::xb\+String\+::operator\mbox{[}$\,$\mbox{]} (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{n }\end{DoxyParamCaption}) const}
-
-
-
-operator \mbox{[}\mbox{]}
-
-
-\begin{DoxyParams}{Parameters}
-{\em n} & -\/ Offset into the string of the byte to retrieve. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-c -\/ The character to return from the offset within the \mbox{[}\mbox{]} brackets.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a6a09cfed22066b0c72432f26960f9e7b}\label{classxb_1_1xbString_a6a09cfed22066b0c72432f26960f9e7b}}
-\index{xb::xbString@{xb::xbString}!PadLeft@{PadLeft}}
-\index{PadLeft@{PadLeft}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{PadLeft()}{PadLeft()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Pad\+Left (\begin{DoxyParamCaption}\item[{char}]{c, }\item[{xb\+UInt32}]{ul\+New\+Len }\end{DoxyParamCaption})}
-
-
-
-Left pad string.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c} & Padding character. \\
-\hline
-{\em ul\+New\+Len} & New string length. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Reference to this string.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_aba13f0c77eb6c4a22996039569fad284}\label{classxb_1_1xbString_aba13f0c77eb6c4a22996039569fad284}}
-\index{xb::xbString@{xb::xbString}!PadRight@{PadRight}}
-\index{PadRight@{PadRight}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{PadRight()}{PadRight()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Pad\+Right (\begin{DoxyParamCaption}\item[{char}]{c, }\item[{xb\+UInt32}]{ul\+New\+Len }\end{DoxyParamCaption})}
-
-
-
-Right pad string.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c} & Padding character. \\
-\hline
-{\em ul\+New\+Len} & New string length. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Reference to this string.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a3baf59d15099589ff631995f129e582b}\label{classxb_1_1xbString_a3baf59d15099589ff631995f129e582b}}
-\index{xb::xbString@{xb::xbString}!Pos@{Pos}}
-\index{Pos@{Pos}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{Pos()}{Pos()}\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}}
-{\footnotesize\ttfamily xb\+UInt32 xb\+::xb\+String\+::\+Pos (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption}) const}
-
-
-
-Determine position of a given character.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c} & Seek character \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Position within string. Returns 0 if not found.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a1b586890138da8bf0e23090bd8b34581}\label{classxb_1_1xbString_a1b586890138da8bf0e23090bd8b34581}}
-\index{xb::xbString@{xb::xbString}!Pos@{Pos}}
-\index{Pos@{Pos}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{Pos()}{Pos()}\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}}
-{\footnotesize\ttfamily xb\+UInt32 xb\+::xb\+String\+::\+Pos (\begin{DoxyParamCaption}\item[{char}]{c, }\item[{xb\+UInt32}]{ul\+Start\+Pos }\end{DoxyParamCaption}) const}
-
-
-
-Determine position of a given character.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c} & Seek character \\
-\hline
-{\em ul\+Start\+Pos} & starting position for search, first position is 1 \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Position within string. Returns 0 if not found.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a8705d7277b72f5aa98021e84438914da}\label{classxb_1_1xbString_a8705d7277b72f5aa98021e84438914da}}
-\index{xb::xbString@{xb::xbString}!Pos@{Pos}}
-\index{Pos@{Pos}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{Pos()}{Pos()}\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}}
-{\footnotesize\ttfamily xb\+UInt32 xb\+::xb\+String\+::\+Pos (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s }\end{DoxyParamCaption}) const}
-
-
-
-Determine position of a given substring.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s} & Substring \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Position within string. Returns 0 if not found.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a1bae6fa8f608261f6e889616482f6e39}\label{classxb_1_1xbString_a1bae6fa8f608261f6e889616482f6e39}}
-\index{xb::xbString@{xb::xbString}!PutAt@{PutAt}}
-\index{PutAt@{PutAt}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{PutAt()}{PutAt()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Put\+At (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{ul\+Pos, }\item[{char}]{c }\end{DoxyParamCaption})}
-
-
-
-Insert character into string.
-
-
-\begin{DoxyParams}{Parameters}
-{\em ul\+Pos} & Insertion position. \\
-\hline
-{\em c} & Character to insert. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Reference to this string.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_afaac65eaa6d9ef1596d6a0e7b91ed0f2}\label{classxb_1_1xbString_afaac65eaa6d9ef1596d6a0e7b91ed0f2}}
-\index{xb::xbString@{xb::xbString}!Remove@{Remove}}
-\index{Remove@{Remove}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{Remove()}{Remove()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Remove (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{ul\+Start\+Pos, }\item[{xb\+UInt32}]{ul\+Del\+Size }\end{DoxyParamCaption})}
-
-
-
-Remove portion of string.
-
-
-\begin{DoxyParams}{Parameters}
-{\em ul\+Start\+Pos} & Starting position for removal operation. \\
-\hline
-{\em ul\+Del\+Size} & Size of deletion. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Reference to string.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_ac721d643c60b5c5acf60c2bce99596fa}\label{classxb_1_1xbString_ac721d643c60b5c5acf60c2bce99596fa}}
-\index{xb::xbString@{xb::xbString}!Replace@{Replace}}
-\index{Replace@{Replace}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{Replace()}{Replace()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Replace (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s\+Replace, }\item[{const char $\ast$}]{s\+Replace\+With, }\item[{xb\+Int16}]{i\+Option = {\ttfamily 0} }\end{DoxyParamCaption})}
-
-
-
-Replace a value within a string with another value.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Replace} & -\/ Character string to replace. \\
-\hline
-{\em s\+Replace\+With} & -\/ Character string to replace with \\
-\hline
-{\em i\+Option} & -\/ 0 = All occurrences, 1 = first occurrence \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Reference to this string.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_aa6d346ab04e5bb8852f0bb996163a35e}\label{classxb_1_1xbString_aa6d346ab04e5bb8852f0bb996163a35e}}
-\index{xb::xbString@{xb::xbString}!Resize@{Resize}}
-\index{Resize@{Resize}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{Resize()}{Resize()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Resize (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{ul\+Size }\end{DoxyParamCaption})}
-
-
-
-Resize a string.
-
-
-\begin{DoxyParams}{Parameters}
-{\em ul\+Size} & -\/ New string size, including null termination byte. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Reference to this string.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_aaf330188d67c347ecae0d16f65b22077}\label{classxb_1_1xbString_aaf330188d67c347ecae0d16f65b22077}}
-\index{xb::xbString@{xb::xbString}!Rtrim@{Rtrim}}
-\index{Rtrim@{Rtrim}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{Rtrim()}{Rtrim()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Rtrim (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
-
-
-Right trim the string.
-
-This routine removes any trailing white space on the string.
-
-\begin{DoxyReturn}{Returns}
-Reference to string.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_ab85753d2c39882e946a8468cbb587700}\label{classxb_1_1xbString_ab85753d2c39882e946a8468cbb587700}}
-\index{xb::xbString@{xb::xbString}!Set@{Set}}
-\index{Set@{Set}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{Set()}{Set()}\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Set (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s }\end{DoxyParamCaption})}
-
-
-
-Set the value of the string.
-
-Note\+: This routine fails if you try to set the string to itself or some part of itself.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s} & Value to set the string. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Reference to string.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a6eba6ccd0c805a22516de2c18a30f8a3}\label{classxb_1_1xbString_a6eba6ccd0c805a22516de2c18a30f8a3}}
-\index{xb::xbString@{xb::xbString}!Set@{Set}}
-\index{Set@{Set}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{Set()}{Set()}\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Set (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s, }\item[{xb\+UInt32}]{ul\+Size }\end{DoxyParamCaption})}
-
-
-
-Set the value of the string.
-
-Note\+: This routine fails if you try to set the string to itself or some part of itself.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s} & Value to set the string. \\
-\hline
-{\em ul\+Size} & Maximum size of resultant string. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Reference to string.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_ac0d08bd688fd0e3707e32886d0dfeb09}\label{classxb_1_1xbString_ac0d08bd688fd0e3707e32886d0dfeb09}}
-\index{xb::xbString@{xb::xbString}!Set@{Set}}
-\index{Set@{Set}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{Set()}{Set()}\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Set (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s }\end{DoxyParamCaption})}
-
-
-
-Set the value of the string.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s} & Value to set the string. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Reference to string.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a3af5b1f111f94b0667551fcbd1d97abd}\label{classxb_1_1xbString_a3af5b1f111f94b0667551fcbd1d97abd}}
-\index{xb::xbString@{xb::xbString}!SetNum@{SetNum}}
-\index{SetNum@{SetNum}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{SetNum()}{SetNum()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Set\+Num (\begin{DoxyParamCaption}\item[{xb\+Int32}]{l\+Num }\end{DoxyParamCaption})}
-
-
-
-Set the string to long integer numeric value.
-
-
-\begin{DoxyParams}{Parameters}
-{\em l\+Num} & Value to set the string \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Reference to this string.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a9e9bfa29d86377b915f1628aeb0e9195}\label{classxb_1_1xbString_a9e9bfa29d86377b915f1628aeb0e9195}}
-\index{xb::xbString@{xb::xbString}!Sprintf@{Sprintf}}
-\index{Sprintf@{Sprintf}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{Sprintf()}{Sprintf()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Sprintf (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s\+Format, }\item[{}]{... }\end{DoxyParamCaption})}
-
-
-
-Printf routine for formatting a string.
-
-See documentation on the standard C printf function for how to use this.
-
-My\+String.\+Sprintf( \char`\"{}a number \%d some text \%s\char`\"{}, 100, \char`\"{}test text data\char`\"{} );
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Format} & A format specifier \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Reference to a formatted string
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a6715f4c0010f3ab487c9d787838a29b3}\label{classxb_1_1xbString_a6715f4c0010f3ab487c9d787838a29b3}}
-\index{xb::xbString@{xb::xbString}!Str@{Str}}
-\index{Str@{Str}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{Str()}{Str()}}
-{\footnotesize\ttfamily const char $\ast$ xb\+::xb\+String\+::\+Str (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
-
-
-
-Return string data.
-
-\begin{DoxyReturn}{Returns}
-char $\ast$ to string data or NULL if string is empty
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a3bc9e856c34f0c240a6e36e5b6e3ea7b}\label{classxb_1_1xbString_a3bc9e856c34f0c240a6e36e5b6e3ea7b}}
-\index{xb::xbString@{xb::xbString}!strncpy@{strncpy}}
-\index{strncpy@{strncpy}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{strncpy()}{strncpy()}}
-{\footnotesize\ttfamily char $\ast$ xb\+::xb\+String\+::strncpy (\begin{DoxyParamCaption}\item[{char $\ast$}]{c\+Dest, }\item[{xb\+UInt32}]{n }\end{DoxyParamCaption}) const}
-
-
-
-Copy all or part of string to character array.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c\+Dest} & pointer to destination buffer. \\
-\hline
-{\em n} & Number of bytest to copy. It is the responsibility of the application to verify the buffer is large enough to hold the string contents. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-char $\ast$ to result
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a054683872e1f05d11c2cf8683a63a6fe}\label{classxb_1_1xbString_a054683872e1f05d11c2cf8683a63a6fe}}
-\index{xb::xbString@{xb::xbString}!SwapChars@{SwapChars}}
-\index{SwapChars@{SwapChars}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{SwapChars()}{SwapChars()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Swap\+Chars (\begin{DoxyParamCaption}\item[{char}]{c\+From, }\item[{char}]{c\+To }\end{DoxyParamCaption})}
-
-
-
-Swap characters.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c\+From} & character to replace. \\
-\hline
-{\em c\+To} & character to replace with. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Reference to this string.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a602cac1a6ef3f6b52f587ac4c0ef4fb2}\label{classxb_1_1xbString_a602cac1a6ef3f6b52f587ac4c0ef4fb2}}
-\index{xb::xbString@{xb::xbString}!ToLowerCase@{ToLowerCase}}
-\index{ToLowerCase@{ToLowerCase}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{ToLowerCase()}{ToLowerCase()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+To\+Lower\+Case (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
-
-
-Replace all upper case charaters with lower case characters.
-
-\begin{DoxyReturn}{Returns}
-Reference to this string.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a68001d0a44e6b4fe61e29a4e41ded9d4}\label{classxb_1_1xbString_a68001d0a44e6b4fe61e29a4e41ded9d4}}
-\index{xb::xbString@{xb::xbString}!ToUpperCase@{ToUpperCase}}
-\index{ToUpperCase@{ToUpperCase}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{ToUpperCase()}{ToUpperCase()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+To\+Upper\+Case (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
-
-
-Replace all lower case charaters with lower case characters.
-
-\begin{DoxyReturn}{Returns}
-Reference to this string.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_abc9bd33687d4e03ca52d77885721d626}\label{classxb_1_1xbString_abc9bd33687d4e03ca52d77885721d626}}
-\index{xb::xbString@{xb::xbString}!Trim@{Trim}}
-\index{Trim@{Trim}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{Trim()}{Trim()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Trim (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
-
-
-Trim all leading and trailing white space from string.
-
-\begin{DoxyReturn}{Returns}
-Reference to string.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a72b16c15fd8822efaa5f158c34df7b1e}\label{classxb_1_1xbString_a72b16c15fd8822efaa5f158c34df7b1e}}
-\index{xb::xbString@{xb::xbString}!ValidLogicalValue@{ValidLogicalValue}}
-\index{ValidLogicalValue@{ValidLogicalValue}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{ValidLogicalValue()}{ValidLogicalValue()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+String\+::\+Valid\+Logical\+Value (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
-
-
-
-Check for valid logical field data.
-
-Valid logical data is one \textquotesingle{}T\textquotesingle{}, \textquotesingle{}F\textquotesingle{}, \textquotesingle{}N\textquotesingle{} or \textquotesingle{}Y\textquotesingle{}.~\newline
-
-
-\begin{DoxyReturn}{Returns}
-xb\+True if the data is valid logical data.~\newline
- xb\+False if not valid logical data.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_aeed920d2a25111f776ddde2d530eb81b}\label{classxb_1_1xbString_aeed920d2a25111f776ddde2d530eb81b}}
-\index{xb::xbString@{xb::xbString}!ValidNumericValue@{ValidNumericValue}}
-\index{ValidNumericValue@{ValidNumericValue}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{ValidNumericValue()}{ValidNumericValue()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+String\+::\+Valid\+Numeric\+Value (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
-
-
-
-This function returns true if the data is valid numeric data.
-
-\begin{DoxyReturn}{Returns}
-xb\+True if valid numeric data.~\newline
- xb\+False if not valid numeric daata.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a2fd30956a26a260d1ef6fdbe73dd93f9}\label{classxb_1_1xbString_a2fd30956a26a260d1ef6fdbe73dd93f9}}
-\index{xb::xbString@{xb::xbString}!ZapChar@{ZapChar}}
-\index{ZapChar@{ZapChar}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{ZapChar()}{ZapChar()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Zap\+Char (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption})}
-
-
-
-Remove every instance of a character from a string.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c} & character to remove from string. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Reference to this stirng.\+void
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_addc3a470f6cd85d4c21bf9da38cf5ac9}\label{classxb_1_1xbString_addc3a470f6cd85d4c21bf9da38cf5ac9}}
-\index{xb::xbString@{xb::xbString}!ZapLeadingChar@{ZapLeadingChar}}
-\index{ZapLeadingChar@{ZapLeadingChar}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{ZapLeadingChar()}{ZapLeadingChar()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Zap\+Leading\+Char (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption})}
-
-
-
-Remove leading character from a string.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c} & character to remove from beginning of string. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Reference to this string.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_afe3415bfa2e1089b792aeda0462fb99e}\label{classxb_1_1xbString_afe3415bfa2e1089b792aeda0462fb99e}}
-\index{xb::xbString@{xb::xbString}!ZapTrailingChar@{ZapTrailingChar}}
-\index{ZapTrailingChar@{ZapTrailingChar}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{ZapTrailingChar()}{ZapTrailingChar()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Zap\+Trailing\+Char (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption})}
-
-
-
-Remove trailing character from a string.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c} & character to remove from ending of string. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Reference to this string.
-\end{DoxyReturn}
-
-
-\doxysubsection{Friends And Related Function Documentation}
-\mbox{\Hypertarget{classxb_1_1xbString_a3fa915061156521e9dd772a8d7e5f8fb}\label{classxb_1_1xbString_a3fa915061156521e9dd772a8d7e5f8fb}}
-\index{xb::xbString@{xb::xbString}!operator$<$$<$@{operator$<$$<$}}
-\index{operator$<$$<$@{operator$<$$<$}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{operator$<$$<$}{operator<<}}
-{\footnotesize\ttfamily std\+::ostream \& operator$<$$<$ (\begin{DoxyParamCaption}\item[{std\+::ostream \&}]{os, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [friend]}}
-
-
-
-Stream insertion operator \texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<}.
-
-std\+::cout \texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<} My\+String \texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<} std\+::endl;
-
-
-\begin{DoxyParams}{Parameters}
-{\em os} & Output stream \\
-\hline
-{\em s} & String to send to output stream \\
-\hline
-\end{DoxyParams}
-
-
-The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
-\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbstring_8h}{xbstring.\+h}}\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbstring_8cpp}{xbstring.\+cpp}}\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/classxb_1_1xbTblMgr.pdf b/docs/doxygen/latex/classxb_1_1xbTblMgr.pdf
deleted file mode 100644
index 96c128e..0000000
--- a/docs/doxygen/latex/classxb_1_1xbTblMgr.pdf
+++ /dev/null
Binary files differ
diff --git a/docs/doxygen/latex/classxb_1_1xbTblMgr.tex b/docs/doxygen/latex/classxb_1_1xbTblMgr.tex
deleted file mode 100644
index 72d1d08..0000000
--- a/docs/doxygen/latex/classxb_1_1xbTblMgr.tex
+++ /dev/null
@@ -1,439 +0,0 @@
-\hypertarget{classxb_1_1xbTblMgr}{}\doxysection{xb\+::xb\+Tbl\+Mgr Class Reference}
-\label{classxb_1_1xbTblMgr}\index{xb::xbTblMgr@{xb::xbTblMgr}}
-
-
-{\ttfamily \#include $<$xbtblmgr.\+h$>$}
-
-Inheritance diagram for xb\+::xb\+Tbl\+Mgr\+:\begin{figure}[H]
-\begin{center}
-\leavevmode
-\includegraphics[height=3.000000cm]{classxb_1_1xbTblMgr}
-\end{center}
-\end{figure}
-\doxysubsection*{Public Member Functions}
-\begin{DoxyCompactItemize}
-\item
-\mbox{\hyperlink{classxb_1_1xbTblMgr_aad83f5ecc184ca6cbdfc6f356b598d6c}{xb\+Tbl\+Mgr}} ()
-\item
-\mbox{\hyperlink{classxb_1_1xbTblMgr_aad6be32d7b3378c71d47fa27ebfe6cbf}{$\sim$xb\+Tbl\+Mgr}} ()
-\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbTblMgr_af16832ff2bfaee09265652e0fc03709a}{Add\+Tbl\+To\+Tbl\+List}} (\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$d, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Fq\+Tbl\+Name)
-\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbTblMgr_a2033188e9b08778188a034a6fc90ca85}{Add\+Tbl\+To\+Tbl\+List}} (\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$d, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Fq\+Tbl\+Name, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Tbl\+Alias)
-\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbTblMgr_a5eebffb9e8cc64141e35c2622045cb50}{Display\+Table\+List}} () const
-\item
-\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$ \mbox{\hyperlink{classxb_1_1xbTblMgr_ad8a5d28a2ee6720a9aa74bcb45662cf5}{Get\+Dbf\+Ptr}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Tbl\+Alias) const
-\item
-\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$ \mbox{\hyperlink{classxb_1_1xbTblMgr_a801dfecf7fc216954b4197b2c31b25d6}{Get\+Dbf\+Ptr}} (xb\+Int16 s\+Item\+No) const
-\item
-\mbox{\hyperlink{structxb_1_1xbTblList}{xb\+Tbl\+List}} $\ast$ \mbox{\hyperlink{classxb_1_1xbTblMgr_acbf148ddba4297021cfb980a161ebef9}{Get\+Tbl\+List\+Entry}} (\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$d)
-\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbTblMgr_ad0d2d4adabc0dc0e761cfdee63c84069}{Get\+Open\+Table\+Count}} () const
-\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbTblMgr_ac8eaef41acf08911b90f900aac8e70af}{Remove\+Tbl\+From\+Tbl\+List}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Tbl\+Alias)
-\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbTblMgr_a3d82b6e73d5c0bc8cac22b9a260389c1}{Remove\+Tbl\+From\+Tbl\+List}} (\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$d)
-\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}{Display\+Error}} (xb\+Int16 Error\+Code) const
-\begin{DoxyCompactList}\small\item\em Display error message on console for a given error number. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a6fbb9c3a550ab0b3378f9586a57791d2}{Get\+Default\+Date\+Format}} () const
-\begin{DoxyCompactList}\small\item\em Get the default date format. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}{Get\+Data\+Directory}} () const
-\begin{DoxyCompactList}\small\item\em Get the current data directory. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}{Get\+Endian\+Type}} () const
-\begin{DoxyCompactList}\small\item\em Get the Endian type. \end{DoxyCompactList}\item
-const char $\ast$ \mbox{\hyperlink{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}{Get\+Error\+Message}} (xb\+Int16 Error\+Code) const
-\begin{DoxyCompactList}\small\item\em Get an error message. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}{Set\+Data\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Data\+Directory)
-\begin{DoxyCompactList}\small\item\em Set the data directory. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}{Set\+Default\+Date\+Format}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Default\+Date\+Format)
-\begin{DoxyCompactList}\small\item\em Set the default date format. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}{Bit\+Set}} (unsigned char c, xb\+Int16 i\+Bit\+No) const
-\begin{DoxyCompactList}\small\item\em Check a bit in a one byte field and see if it is set. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}{Bit\+Dump}} (unsigned char c) const
-\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}{Bit\+Dump}} (char c) const
-\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}{Get\+Default\+Auto\+Commit}} () const
-\begin{DoxyCompactList}\small\item\em Get the default auto commit setting. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}{Set\+Default\+Auto\+Commit}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Default\+Auto\+Commit)
-\begin{DoxyCompactList}\small\item\em Set the default auto commit. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}{Get\+Home\+Dir}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Home\+Dir\+Out)
-\begin{DoxyCompactList}\small\item\em Get home directory. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}{Get\+Log\+Directory}} () const
-\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}{Get\+Log\+File\+Name}} () const
-\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}{Set\+Log\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Log\+Directory)
-\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}{Get\+Multi\+User}} () const
-\begin{DoxyCompactList}\small\item\em Get the multi user setting. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}{Set\+Multi\+User}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Multi\+User)
-\begin{DoxyCompactList}\small\item\em Get the multi user setting. \end{DoxyCompactList}\end{DoxyCompactItemize}
-\doxysubsection*{Static Public Attributes}
-\begin{DoxyCompactItemize}
-\item
-static const char $\ast$ \mbox{\hyperlink{classxb_1_1xbSsv_a6219f1b5e24ea12fe158cd5aea56988e}{Error\+Code\+Text}} \mbox{[}$\,$\mbox{]}
-\end{DoxyCompactItemize}
-\doxysubsection*{Protected Member Functions}
-\begin{DoxyCompactItemize}
-\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a904ec348fd029d4a76e72b8fde636108}{Set\+Endian\+Type}} ()
-\begin{DoxyCompactList}\small\item\em Set the endian type. \end{DoxyCompactList}\end{DoxyCompactItemize}
-\doxysubsection*{Static Protected Attributes}
-\begin{DoxyCompactItemize}
-\item
-static xb\+Int16 \mbox{\hyperlink{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}{i\+Endian\+Type}} = 0
-\item
-static \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \mbox{\hyperlink{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}{s\+Null\+String}} = \char`\"{}\char`\"{}
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Constructor \& Destructor Documentation}
-\mbox{\Hypertarget{classxb_1_1xbTblMgr_aad83f5ecc184ca6cbdfc6f356b598d6c}\label{classxb_1_1xbTblMgr_aad83f5ecc184ca6cbdfc6f356b598d6c}}
-\index{xb::xbTblMgr@{xb::xbTblMgr}!xbTblMgr@{xbTblMgr}}
-\index{xbTblMgr@{xbTblMgr}!xb::xbTblMgr@{xb::xbTblMgr}}
-\doxysubsubsection{\texorpdfstring{xbTblMgr()}{xbTblMgr()}}
-{\footnotesize\ttfamily xb\+::xb\+Tbl\+Mgr\+::xb\+Tbl\+Mgr (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{classxb_1_1xbTblMgr_aad6be32d7b3378c71d47fa27ebfe6cbf}\label{classxb_1_1xbTblMgr_aad6be32d7b3378c71d47fa27ebfe6cbf}}
-\index{xb::xbTblMgr@{xb::xbTblMgr}!````~xbTblMgr@{$\sim$xbTblMgr}}
-\index{````~xbTblMgr@{$\sim$xbTblMgr}!xb::xbTblMgr@{xb::xbTblMgr}}
-\doxysubsubsection{\texorpdfstring{$\sim$xbTblMgr()}{~xbTblMgr()}}
-{\footnotesize\ttfamily xb\+::xb\+Tbl\+Mgr\+::$\sim$xb\+Tbl\+Mgr (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
-
-
-\doxysubsection{Member Function Documentation}
-\mbox{\Hypertarget{classxb_1_1xbTblMgr_af16832ff2bfaee09265652e0fc03709a}\label{classxb_1_1xbTblMgr_af16832ff2bfaee09265652e0fc03709a}}
-\index{xb::xbTblMgr@{xb::xbTblMgr}!AddTblToTblList@{AddTblToTblList}}
-\index{AddTblToTblList@{AddTblToTblList}!xb::xbTblMgr@{xb::xbTblMgr}}
-\doxysubsubsection{\texorpdfstring{AddTblToTblList()}{AddTblToTblList()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Tbl\+Mgr\+::\+Add\+Tbl\+To\+Tbl\+List (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$}]{d, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Fq\+Tbl\+Name }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{classxb_1_1xbTblMgr_a2033188e9b08778188a034a6fc90ca85}\label{classxb_1_1xbTblMgr_a2033188e9b08778188a034a6fc90ca85}}
-\index{xb::xbTblMgr@{xb::xbTblMgr}!AddTblToTblList@{AddTblToTblList}}
-\index{AddTblToTblList@{AddTblToTblList}!xb::xbTblMgr@{xb::xbTblMgr}}
-\doxysubsubsection{\texorpdfstring{AddTblToTblList()}{AddTblToTblList()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Tbl\+Mgr\+::\+Add\+Tbl\+To\+Tbl\+List (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$}]{d, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Fq\+Tbl\+Name, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Tbl\+Alias }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}\label{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}}
-\index{xb::xbTblMgr@{xb::xbTblMgr}!BitDump@{BitDump}}
-\index{BitDump@{BitDump}!xb::xbTblMgr@{xb::xbTblMgr}}
-\doxysubsubsection{\texorpdfstring{BitDump()}{BitDump()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Bit\+Dump (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}\label{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}}
-\index{xb::xbTblMgr@{xb::xbTblMgr}!BitDump@{BitDump}}
-\index{BitDump@{BitDump}!xb::xbTblMgr@{xb::xbTblMgr}}
-\doxysubsubsection{\texorpdfstring{BitDump()}{BitDump()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Bit\+Dump (\begin{DoxyParamCaption}\item[{unsigned char}]{c }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}\label{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}}
-\index{xb::xbTblMgr@{xb::xbTblMgr}!BitSet@{BitSet}}
-\index{BitSet@{BitSet}!xb::xbTblMgr@{xb::xbTblMgr}}
-\doxysubsubsection{\texorpdfstring{BitSet()}{BitSet()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Ssv\+::\+Bit\+Set (\begin{DoxyParamCaption}\item[{unsigned char}]{c, }\item[{xb\+Int16}]{i\+Bit\+No }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Check a bit in a one byte field and see if it is set.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c} & One byte char field to examine. \\
-\hline
-{\em i\+Bit\+No} & which bit to examine. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-xb\+True Bit is set~\newline
- xb\+False Bit is not set
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}\label{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}}
-\index{xb::xbTblMgr@{xb::xbTblMgr}!DisplayError@{DisplayError}}
-\index{DisplayError@{DisplayError}!xb::xbTblMgr@{xb::xbTblMgr}}
-\doxysubsubsection{\texorpdfstring{DisplayError()}{DisplayError()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Display\+Error (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Error\+Code }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Display error message on console for a given error number.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Error\+Code} & Error number to reference \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbTblMgr_a5eebffb9e8cc64141e35c2622045cb50}\label{classxb_1_1xbTblMgr_a5eebffb9e8cc64141e35c2622045cb50}}
-\index{xb::xbTblMgr@{xb::xbTblMgr}!DisplayTableList@{DisplayTableList}}
-\index{DisplayTableList@{DisplayTableList}!xb::xbTblMgr@{xb::xbTblMgr}}
-\doxysubsubsection{\texorpdfstring{DisplayTableList()}{DisplayTableList()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Tbl\+Mgr\+::\+Display\+Table\+List (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}\label{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}}
-\index{xb::xbTblMgr@{xb::xbTblMgr}!GetDataDirectory@{GetDataDirectory}}
-\index{GetDataDirectory@{GetDataDirectory}!xb::xbTblMgr@{xb::xbTblMgr}}
-\doxysubsubsection{\texorpdfstring{GetDataDirectory()}{GetDataDirectory()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Data\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the current data directory.
-
-\begin{DoxyReturn}{Returns}
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing the current data directory where the database files are stored.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbTblMgr_ad8a5d28a2ee6720a9aa74bcb45662cf5}\label{classxb_1_1xbTblMgr_ad8a5d28a2ee6720a9aa74bcb45662cf5}}
-\index{xb::xbTblMgr@{xb::xbTblMgr}!GetDbfPtr@{GetDbfPtr}}
-\index{GetDbfPtr@{GetDbfPtr}!xb::xbTblMgr@{xb::xbTblMgr}}
-\doxysubsubsection{\texorpdfstring{GetDbfPtr()}{GetDbfPtr()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$ xb\+::xb\+Tbl\+Mgr\+::\+Get\+Dbf\+Ptr (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Tbl\+Alias }\end{DoxyParamCaption}) const}
-
-\mbox{\Hypertarget{classxb_1_1xbTblMgr_a801dfecf7fc216954b4197b2c31b25d6}\label{classxb_1_1xbTblMgr_a801dfecf7fc216954b4197b2c31b25d6}}
-\index{xb::xbTblMgr@{xb::xbTblMgr}!GetDbfPtr@{GetDbfPtr}}
-\index{GetDbfPtr@{GetDbfPtr}!xb::xbTblMgr@{xb::xbTblMgr}}
-\doxysubsubsection{\texorpdfstring{GetDbfPtr()}{GetDbfPtr()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$ xb\+::xb\+Tbl\+Mgr\+::\+Get\+Dbf\+Ptr (\begin{DoxyParamCaption}\item[{xb\+Int16}]{s\+Item\+No }\end{DoxyParamCaption}) const}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}\label{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}}
-\index{xb::xbTblMgr@{xb::xbTblMgr}!GetDefaultAutoCommit@{GetDefaultAutoCommit}}
-\index{GetDefaultAutoCommit@{GetDefaultAutoCommit}!xb::xbTblMgr@{xb::xbTblMgr}}
-\doxysubsubsection{\texorpdfstring{GetDefaultAutoCommit()}{GetDefaultAutoCommit()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Ssv\+::\+Get\+Default\+Auto\+Commit (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the default auto commit setting.
-
-When auto commit is enabled, the library will automatically post any updates when moving off an updated record or closing files. If auto commit is disabled, the application program will need to explicitly update the tables using using dbf-\/\texorpdfstring{$>$}{>}Put() and dbf-\/\texorpdfstring{$>$}{>}Append\+Record().
-
-\begin{DoxyReturn}{Returns}
-xb\+True if auto commit is turned on~\newline
- xb\+False is auto commit is turned off
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a6fbb9c3a550ab0b3378f9586a57791d2}\label{classxb_1_1xbSsv_a6fbb9c3a550ab0b3378f9586a57791d2}}
-\index{xb::xbTblMgr@{xb::xbTblMgr}!GetDefaultDateFormat@{GetDefaultDateFormat}}
-\index{GetDefaultDateFormat@{GetDefaultDateFormat}!xb::xbTblMgr@{xb::xbTblMgr}}
-\doxysubsubsection{\texorpdfstring{GetDefaultDateFormat()}{GetDefaultDateFormat()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Default\+Date\+Format (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the default date format.
-
-\begin{DoxyReturn}{Returns}
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing the default date format.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}\label{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}}
-\index{xb::xbTblMgr@{xb::xbTblMgr}!GetEndianType@{GetEndianType}}
-\index{GetEndianType@{GetEndianType}!xb::xbTblMgr@{xb::xbTblMgr}}
-\doxysubsubsection{\texorpdfstring{GetEndianType()}{GetEndianType()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Ssv\+::\+Get\+Endian\+Type (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the Endian type.
-
-\begin{DoxyReturn}{Returns}
-B -\/ Big endian~\newline
- L -\/ Little endian~\newline
-
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}\label{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}}
-\index{xb::xbTblMgr@{xb::xbTblMgr}!GetErrorMessage@{GetErrorMessage}}
-\index{GetErrorMessage@{GetErrorMessage}!xb::xbTblMgr@{xb::xbTblMgr}}
-\doxysubsubsection{\texorpdfstring{GetErrorMessage()}{GetErrorMessage()}}
-{\footnotesize\ttfamily const char $\ast$ xb\+::xb\+Ssv\+::\+Get\+Error\+Message (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Error\+Code }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get an error message.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Error\+Code} & Error\+Code is the error number of description to be returned. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Returns a pointer to a string containing a text description for the error code.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}\label{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}}
-\index{xb::xbTblMgr@{xb::xbTblMgr}!GetHomeDir@{GetHomeDir}}
-\index{GetHomeDir@{GetHomeDir}!xb::xbTblMgr@{xb::xbTblMgr}}
-\doxysubsubsection{\texorpdfstring{GetHomeDir()}{GetHomeDir()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Get\+Home\+Dir (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Home\+Dir\+Out }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get home directory.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Home\+Dir\+Out} & -\/ Output home directory for current user. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-void
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}\label{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}}
-\index{xb::xbTblMgr@{xb::xbTblMgr}!GetLogDirectory@{GetLogDirectory}}
-\index{GetLogDirectory@{GetLogDirectory}!xb::xbTblMgr@{xb::xbTblMgr}}
-\doxysubsubsection{\texorpdfstring{GetLogDirectory()}{GetLogDirectory()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Log\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}\label{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}}
-\index{xb::xbTblMgr@{xb::xbTblMgr}!GetLogFileName@{GetLogFileName}}
-\index{GetLogFileName@{GetLogFileName}!xb::xbTblMgr@{xb::xbTblMgr}}
-\doxysubsubsection{\texorpdfstring{GetLogFileName()}{GetLogFileName()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Log\+File\+Name (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}\label{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}}
-\index{xb::xbTblMgr@{xb::xbTblMgr}!GetMultiUser@{GetMultiUser}}
-\index{GetMultiUser@{GetMultiUser}!xb::xbTblMgr@{xb::xbTblMgr}}
-\doxysubsubsection{\texorpdfstring{GetMultiUser()}{GetMultiUser()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Ssv\+::\+Get\+Multi\+User (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the multi user setting.
-
-\begin{DoxyReturn}{Returns}
-xb\+True -\/ Multi user mode turned on.~\newline
- xb\+False -\/ Multi user mode turned off.~\newline
-
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbTblMgr_ad0d2d4adabc0dc0e761cfdee63c84069}\label{classxb_1_1xbTblMgr_ad0d2d4adabc0dc0e761cfdee63c84069}}
-\index{xb::xbTblMgr@{xb::xbTblMgr}!GetOpenTableCount@{GetOpenTableCount}}
-\index{GetOpenTableCount@{GetOpenTableCount}!xb::xbTblMgr@{xb::xbTblMgr}}
-\doxysubsubsection{\texorpdfstring{GetOpenTableCount()}{GetOpenTableCount()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Tbl\+Mgr\+::\+Get\+Open\+Table\+Count (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
-
-\mbox{\Hypertarget{classxb_1_1xbTblMgr_acbf148ddba4297021cfb980a161ebef9}\label{classxb_1_1xbTblMgr_acbf148ddba4297021cfb980a161ebef9}}
-\index{xb::xbTblMgr@{xb::xbTblMgr}!GetTblListEntry@{GetTblListEntry}}
-\index{GetTblListEntry@{GetTblListEntry}!xb::xbTblMgr@{xb::xbTblMgr}}
-\doxysubsubsection{\texorpdfstring{GetTblListEntry()}{GetTblListEntry()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{structxb_1_1xbTblList}{xb\+Tbl\+List}} $\ast$ xb\+::xb\+Tbl\+Mgr\+::\+Get\+Tbl\+List\+Entry (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$}]{d }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{classxb_1_1xbTblMgr_ac8eaef41acf08911b90f900aac8e70af}\label{classxb_1_1xbTblMgr_ac8eaef41acf08911b90f900aac8e70af}}
-\index{xb::xbTblMgr@{xb::xbTblMgr}!RemoveTblFromTblList@{RemoveTblFromTblList}}
-\index{RemoveTblFromTblList@{RemoveTblFromTblList}!xb::xbTblMgr@{xb::xbTblMgr}}
-\doxysubsubsection{\texorpdfstring{RemoveTblFromTblList()}{RemoveTblFromTblList()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Tbl\+Mgr\+::\+Remove\+Tbl\+From\+Tbl\+List (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Tbl\+Alias }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{classxb_1_1xbTblMgr_a3d82b6e73d5c0bc8cac22b9a260389c1}\label{classxb_1_1xbTblMgr_a3d82b6e73d5c0bc8cac22b9a260389c1}}
-\index{xb::xbTblMgr@{xb::xbTblMgr}!RemoveTblFromTblList@{RemoveTblFromTblList}}
-\index{RemoveTblFromTblList@{RemoveTblFromTblList}!xb::xbTblMgr@{xb::xbTblMgr}}
-\doxysubsubsection{\texorpdfstring{RemoveTblFromTblList()}{RemoveTblFromTblList()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Tbl\+Mgr\+::\+Remove\+Tbl\+From\+Tbl\+List (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$}]{d }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}\label{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}}
-\index{xb::xbTblMgr@{xb::xbTblMgr}!SetDataDirectory@{SetDataDirectory}}
-\index{SetDataDirectory@{SetDataDirectory}!xb::xbTblMgr@{xb::xbTblMgr}}
-\doxysubsubsection{\texorpdfstring{SetDataDirectory()}{SetDataDirectory()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Data\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Data\+Directory }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Set the data directory.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Data\+Directory} & Set the data direcroty. \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}\label{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}}
-\index{xb::xbTblMgr@{xb::xbTblMgr}!SetDefaultAutoCommit@{SetDefaultAutoCommit}}
-\index{SetDefaultAutoCommit@{SetDefaultAutoCommit}!xb::xbTblMgr@{xb::xbTblMgr}}
-\doxysubsubsection{\texorpdfstring{SetDefaultAutoCommit()}{SetDefaultAutoCommit()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Default\+Auto\+Commit (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}}}]{b\+Default\+Auto\+Commit }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Set the default auto commit.
-
-Disabling auto commit requires the application execute explicit updates using dbf-\/\texorpdfstring{$>$}{>}Put() and dbf-\/\texorpdfstring{$>$}{>}Append\+Record(). With auto commit on, the library posts updates automatically when moving off the current record or closing a file.
-
-
-\begin{DoxyParams}{Parameters}
-{\em b\+Default\+Auto\+Commit} & xb\+True -\/ Enable default auto commit.~\newline
- xb\+False -\/ Disable default auto commit.~\newline
- \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}\label{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}}
-\index{xb::xbTblMgr@{xb::xbTblMgr}!SetDefaultDateFormat@{SetDefaultDateFormat}}
-\index{SetDefaultDateFormat@{SetDefaultDateFormat}!xb::xbTblMgr@{xb::xbTblMgr}}
-\doxysubsubsection{\texorpdfstring{SetDefaultDateFormat()}{SetDefaultDateFormat()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Default\+Date\+Format (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Default\+Date\+Format }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Set the default date format.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Default\+Date\+Format} & Set the default date format. \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a904ec348fd029d4a76e72b8fde636108}\label{classxb_1_1xbSsv_a904ec348fd029d4a76e72b8fde636108}}
-\index{xb::xbTblMgr@{xb::xbTblMgr}!SetEndianType@{SetEndianType}}
-\index{SetEndianType@{SetEndianType}!xb::xbTblMgr@{xb::xbTblMgr}}
-\doxysubsubsection{\texorpdfstring{SetEndianType()}{SetEndianType()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Endian\+Type (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [protected]}, {\ttfamily [inherited]}}
-
-
-
-Set the endian type.
-
-This routine determines the Endian-\/ness at run time instead of compile time as some processers (ie; Sparc,ARM) can be switched either way. This routine is called automatically by the library at startup and does not need to be called in an application program. \mbox{\Hypertarget{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}\label{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}}
-\index{xb::xbTblMgr@{xb::xbTblMgr}!SetLogDirectory@{SetLogDirectory}}
-\index{SetLogDirectory@{SetLogDirectory}!xb::xbTblMgr@{xb::xbTblMgr}}
-\doxysubsubsection{\texorpdfstring{SetLogDirectory()}{SetLogDirectory()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Log\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Log\+Directory }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}\label{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}}
-\index{xb::xbTblMgr@{xb::xbTblMgr}!SetMultiUser@{SetMultiUser}}
-\index{SetMultiUser@{SetMultiUser}!xb::xbTblMgr@{xb::xbTblMgr}}
-\doxysubsubsection{\texorpdfstring{SetMultiUser()}{SetMultiUser()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Multi\+User (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}}}]{b\+Multi\+User }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the multi user setting.
-
-
-\begin{DoxyParams}{Parameters}
-{\em b\+Multi\+User} & xb\+True -\/ Turn on Multi user mode.~\newline
- xb\+False -\/ Turn off Multi user mode.~\newline
- \\
-\hline
-\end{DoxyParams}
-
-
-\doxysubsection{Field Documentation}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a6219f1b5e24ea12fe158cd5aea56988e}\label{classxb_1_1xbSsv_a6219f1b5e24ea12fe158cd5aea56988e}}
-\index{xb::xbTblMgr@{xb::xbTblMgr}!ErrorCodeText@{ErrorCodeText}}
-\index{ErrorCodeText@{ErrorCodeText}!xb::xbTblMgr@{xb::xbTblMgr}}
-\doxysubsubsection{\texorpdfstring{ErrorCodeText}{ErrorCodeText}}
-{\footnotesize\ttfamily const char$\ast$ xb\+::xb\+Ssv\+::\+Error\+Code\+Text\mbox{[}$\,$\mbox{]}\hspace{0.3cm}{\ttfamily [static]}, {\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}\label{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}}
-\index{xb::xbTblMgr@{xb::xbTblMgr}!iEndianType@{iEndianType}}
-\index{iEndianType@{iEndianType}!xb::xbTblMgr@{xb::xbTblMgr}}
-\doxysubsubsection{\texorpdfstring{iEndianType}{iEndianType}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Ssv\+::i\+Endian\+Type = 0\hspace{0.3cm}{\ttfamily [static]}, {\ttfamily [protected]}, {\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}\label{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}}
-\index{xb::xbTblMgr@{xb::xbTblMgr}!sNullString@{sNullString}}
-\index{sNullString@{sNullString}!xb::xbTblMgr@{xb::xbTblMgr}}
-\doxysubsubsection{\texorpdfstring{sNullString}{sNullString}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} xb\+::xb\+Ssv\+::s\+Null\+String = \char`\"{}\char`\"{}\hspace{0.3cm}{\ttfamily [static]}, {\ttfamily [protected]}, {\ttfamily [inherited]}}
-
-
-
-The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
-\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbtblmgr_8h}{xbtblmgr.\+h}}\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbtblmgr_8cpp}{xbtblmgr.\+cpp}}\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/classxb_1_1xbXBase.pdf b/docs/doxygen/latex/classxb_1_1xbXBase.pdf
deleted file mode 100644
index 1e5d6fd..0000000
--- a/docs/doxygen/latex/classxb_1_1xbXBase.pdf
+++ /dev/null
Binary files differ
diff --git a/docs/doxygen/latex/classxb_1_1xbXBase.tex b/docs/doxygen/latex/classxb_1_1xbXBase.tex
deleted file mode 100644
index 7159134..0000000
--- a/docs/doxygen/latex/classxb_1_1xbXBase.tex
+++ /dev/null
@@ -1,737 +0,0 @@
-\hypertarget{classxb_1_1xbXBase}{}\doxysection{xb\+::xb\+XBase Class Reference}
-\label{classxb_1_1xbXBase}\index{xb::xbXBase@{xb::xbXBase}}
-
-
-xb\+Xbase class.
-
-
-
-
-{\ttfamily \#include $<$xbxbase.\+h$>$}
-
-Inheritance diagram for xb\+::xb\+XBase\+:\begin{figure}[H]
-\begin{center}
-\leavevmode
-\includegraphics[height=3.000000cm]{classxb_1_1xbXBase}
-\end{center}
-\end{figure}
-\doxysubsection*{Public Member Functions}
-\begin{DoxyCompactItemize}
-\item
-\mbox{\hyperlink{classxb_1_1xbXBase_a6c68588e33946fb5416af3f86fe83224}{xb\+XBase}} ()
-\begin{DoxyCompactList}\small\item\em Class Constructor. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbXBase_a204f8634894ac2066d3209117803306d}{$\sim$xb\+XBase}} ()
-\begin{DoxyCompactList}\small\item\em Class Deconstructor. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbXBase_afccb552ca0daff779c0500ff20d22c2b}{Close\+All\+Tables}} ()
-\begin{DoxyCompactList}\small\item\em Close all tables / files. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbXBase_ae357fac4fdebdf49e46563cf611caf65}{Disable\+Msg\+Logging}} ()
-\item
-void \mbox{\hyperlink{classxb_1_1xbXBase_a470e6eb0ed0be60338f9b40976d3ad48}{Enable\+Msg\+Logging}} ()
-\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbXBase_a5a5ecaed9777978344902446c9ae3b8e}{Flush\+Log}} ()
-\item
-const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbXBase_a51d49b4d699740194b28c6ec0d0ee07b}{Get\+Log\+Directory}} () const
-\item
-const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbXBase_ac0744edf9e4aa959d8cf2daa874376af}{Get\+Log\+File\+Name}} () const
-\item
-const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbXBase_ab5d63cd7d9137eba8a1d4d9c3df522b7}{Get\+Log\+Fq\+File\+Name}} () const
-\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbXBase_ade34cd72c2a7e70fb55429a8a6f6c028}{Get\+Log\+Status}} () const
-\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbXBase_aa957eb502ecd076e5df89e7415cb094b}{Open\+Highest\+Version}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Table\+Name, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Alias, \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} \&dbf, int dummy)
-\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbXBase_afa7bbac08a4601f49cd53b457196ee0e}{Open\+Highest\+Version}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Table\+Name, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Alias, \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$$\ast$dbf)
-\item
-\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$ \mbox{\hyperlink{classxb_1_1xbXBase_aafb1abd6b6124cddf635adaf9f615a4a}{Open}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Table\+Name, xb\+Int16 \&i\+Rc)
-\begin{DoxyCompactList}\small\item\em Open highest qualified class available for dbf file. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$ \mbox{\hyperlink{classxb_1_1xbXBase_ab35cec5ac8f0fa95f10653ca7ac817f6}{Open}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Table\+Name, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Alias, xb\+Int16 i\+Open\+Mode, xb\+Int16 i\+Share\+Mode, xb\+Int16 i\+Version, xb\+Int16 \&i\+Rc)
-\begin{DoxyCompactList}\small\item\em Open highest qualified class available for dbf file. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbXBase_a48d82dbe298c6f4cf68a63ac82dd8292}{Set\+Log\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Log\+File\+Directory)
-\item
-void \mbox{\hyperlink{classxb_1_1xbXBase_a94010b88a309315ef980715eb581336c}{Set\+Log\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Log\+File\+Name)
-\item
-void \mbox{\hyperlink{classxb_1_1xbXBase_a666a0cb5b76ec7a9a3677d339e0c6b42}{Set\+Log\+Size}} (size\+\_\+t l\+Size)
-\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbXBase_a9ca5be73abffd0fdd18bdc799877272a}{Write\+Log\+Message}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Log\+Message, xb\+Int16 i\+Output\+Opt=0)
-\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbXBase_a0dff00b9ee3c288841e137ca01168116}{Write\+Log\+Bytes}} (xb\+UInt32 l\+Cnt, const char $\ast$p)
-\item
-void \mbox{\hyperlink{classxb_1_1xbXBase_a0915aff7be4b2dd3e881f3c5d0da4baf}{xb\+Sleep}} (xb\+Int32 l\+Millisecs)
-\begin{DoxyCompactList}\small\item\em Cross platform sleep function. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbXBase_aadecb3ac460d8e94b88b2e809e22f48e}{Get\+Cmd\+Line\+Opt}} (xb\+Int32 l\+Argc, char $\ast$$\ast$argv, const char $\ast$s\+Opt\+Rqst, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Parm\+Out)
-\begin{DoxyCompactList}\small\item\em Parse commmand line options for a given parm request. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbXBase_a8612e0c5334349fbceb9394b47817fd5}{Get\+Cmd\+Line\+Opt}} (xb\+Int32 l\+Argc, char $\ast$$\ast$argv, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Opt\+Rqst, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Parm\+Out)
-\begin{DoxyCompactList}\small\item\em Parse commmand line options for a given parm request. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbTblMgr_af16832ff2bfaee09265652e0fc03709a}{Add\+Tbl\+To\+Tbl\+List}} (\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$d, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Fq\+Tbl\+Name)
-\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbTblMgr_a2033188e9b08778188a034a6fc90ca85}{Add\+Tbl\+To\+Tbl\+List}} (\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$d, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Fq\+Tbl\+Name, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Tbl\+Alias)
-\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbTblMgr_a5eebffb9e8cc64141e35c2622045cb50}{Display\+Table\+List}} () const
-\item
-\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$ \mbox{\hyperlink{classxb_1_1xbTblMgr_ad8a5d28a2ee6720a9aa74bcb45662cf5}{Get\+Dbf\+Ptr}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Tbl\+Alias) const
-\item
-\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$ \mbox{\hyperlink{classxb_1_1xbTblMgr_a801dfecf7fc216954b4197b2c31b25d6}{Get\+Dbf\+Ptr}} (xb\+Int16 s\+Item\+No) const
-\item
-\mbox{\hyperlink{structxb_1_1xbTblList}{xb\+Tbl\+List}} $\ast$ \mbox{\hyperlink{classxb_1_1xbTblMgr_acbf148ddba4297021cfb980a161ebef9}{Get\+Tbl\+List\+Entry}} (\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$d)
-\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbTblMgr_ad0d2d4adabc0dc0e761cfdee63c84069}{Get\+Open\+Table\+Count}} () const
-\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbTblMgr_ac8eaef41acf08911b90f900aac8e70af}{Remove\+Tbl\+From\+Tbl\+List}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Tbl\+Alias)
-\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbTblMgr_a3d82b6e73d5c0bc8cac22b9a260389c1}{Remove\+Tbl\+From\+Tbl\+List}} (\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$d)
-\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}{Display\+Error}} (xb\+Int16 Error\+Code) const
-\begin{DoxyCompactList}\small\item\em Display error message on console for a given error number. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a6fbb9c3a550ab0b3378f9586a57791d2}{Get\+Default\+Date\+Format}} () const
-\begin{DoxyCompactList}\small\item\em Get the default date format. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}{Get\+Data\+Directory}} () const
-\begin{DoxyCompactList}\small\item\em Get the current data directory. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}{Get\+Endian\+Type}} () const
-\begin{DoxyCompactList}\small\item\em Get the Endian type. \end{DoxyCompactList}\item
-const char $\ast$ \mbox{\hyperlink{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}{Get\+Error\+Message}} (xb\+Int16 Error\+Code) const
-\begin{DoxyCompactList}\small\item\em Get an error message. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}{Set\+Data\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Data\+Directory)
-\begin{DoxyCompactList}\small\item\em Set the data directory. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}{Set\+Default\+Date\+Format}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Default\+Date\+Format)
-\begin{DoxyCompactList}\small\item\em Set the default date format. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}{Bit\+Set}} (unsigned char c, xb\+Int16 i\+Bit\+No) const
-\begin{DoxyCompactList}\small\item\em Check a bit in a one byte field and see if it is set. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}{Bit\+Dump}} (unsigned char c) const
-\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}{Bit\+Dump}} (char c) const
-\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}{Get\+Default\+Auto\+Commit}} () const
-\begin{DoxyCompactList}\small\item\em Get the default auto commit setting. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}{Set\+Default\+Auto\+Commit}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Default\+Auto\+Commit)
-\begin{DoxyCompactList}\small\item\em Set the default auto commit. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}{Get\+Home\+Dir}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Home\+Dir\+Out)
-\begin{DoxyCompactList}\small\item\em Get home directory. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}{Get\+Multi\+User}} () const
-\begin{DoxyCompactList}\small\item\em Get the multi user setting. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}{Set\+Multi\+User}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Multi\+User)
-\begin{DoxyCompactList}\small\item\em Get the multi user setting. \end{DoxyCompactList}\end{DoxyCompactItemize}
-\doxysubsection*{Static Public Attributes}
-\begin{DoxyCompactItemize}
-\item
-static const char $\ast$ \mbox{\hyperlink{classxb_1_1xbSsv_a6219f1b5e24ea12fe158cd5aea56988e}{Error\+Code\+Text}} \mbox{[}$\,$\mbox{]}
-\end{DoxyCompactItemize}
-\doxysubsection*{Protected Member Functions}
-\begin{DoxyCompactItemize}
-\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbXBase_ae52e53340593b4253936c1372ec15ee1}{Get\+Function\+Info}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Exp\+Line, char \&c\+Return\+Type, xb\+Int16 \&i\+Return\+Len\+Calc, xb\+Int32 \&l\+Return\+Len\+Val) const
-\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_a904ec348fd029d4a76e72b8fde636108}{Set\+Endian\+Type}} ()
-\begin{DoxyCompactList}\small\item\em Set the endian type. \end{DoxyCompactList}\end{DoxyCompactItemize}
-\doxysubsection*{Static Protected Member Functions}
-\begin{DoxyCompactItemize}
-\item
-static xb\+Int16 \mbox{\hyperlink{classxb_1_1xbXBase_a1b239c021358476382942522911b5c66}{xb\+Memcmp}} (const unsigned char $\ast$s1, const unsigned char $\ast$s2, size\+\_\+t n)
-\begin{DoxyCompactList}\small\item\em Cross memcmp function. \end{DoxyCompactList}\end{DoxyCompactItemize}
-\doxysubsection*{Static Protected Attributes}
-\begin{DoxyCompactItemize}
-\item
-static xb\+Int16 \mbox{\hyperlink{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}{i\+Endian\+Type}} = 0
-\item
-static \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \mbox{\hyperlink{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}{s\+Null\+String}} = \char`\"{}\char`\"{}
-\end{DoxyCompactItemize}
-\doxysubsection*{Friends}
-\begin{DoxyCompactItemize}
-\item
-class \mbox{\hyperlink{classxb_1_1xbXBase_a86a53ce3efbf910996df0f853f1c0add}{xb\+Bcd}}
-\item
-class \mbox{\hyperlink{classxb_1_1xbXBase_a3c3e5617be811d732472fe2cc8fb18cc}{xb\+Exp}}
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Detailed Description}
-xb\+Xbase class.
-
-The \mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} class is the core class that needs to be in every application program.
-
-\doxysubsection{Constructor \& Destructor Documentation}
-\mbox{\Hypertarget{classxb_1_1xbXBase_a6c68588e33946fb5416af3f86fe83224}\label{classxb_1_1xbXBase_a6c68588e33946fb5416af3f86fe83224}}
-\index{xb::xbXBase@{xb::xbXBase}!xbXBase@{xbXBase}}
-\index{xbXBase@{xbXBase}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{xbXBase()}{xbXBase()}}
-{\footnotesize\ttfamily xb\+::xb\+XBase\+::xb\+XBase (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
-
-
-Class Constructor.
-
-\mbox{\Hypertarget{classxb_1_1xbXBase_a204f8634894ac2066d3209117803306d}\label{classxb_1_1xbXBase_a204f8634894ac2066d3209117803306d}}
-\index{xb::xbXBase@{xb::xbXBase}!````~xbXBase@{$\sim$xbXBase}}
-\index{````~xbXBase@{$\sim$xbXBase}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{$\sim$xbXBase()}{~xbXBase()}}
-{\footnotesize\ttfamily xb\+::xb\+XBase\+::$\sim$xb\+XBase (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
-
-
-Class Deconstructor.
-
-
-
-\doxysubsection{Member Function Documentation}
-\mbox{\Hypertarget{classxb_1_1xbTblMgr_af16832ff2bfaee09265652e0fc03709a}\label{classxb_1_1xbTblMgr_af16832ff2bfaee09265652e0fc03709a}}
-\index{xb::xbXBase@{xb::xbXBase}!AddTblToTblList@{AddTblToTblList}}
-\index{AddTblToTblList@{AddTblToTblList}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{AddTblToTblList()}{AddTblToTblList()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Tbl\+Mgr\+::\+Add\+Tbl\+To\+Tbl\+List (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$}]{d, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Fq\+Tbl\+Name }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbTblMgr_a2033188e9b08778188a034a6fc90ca85}\label{classxb_1_1xbTblMgr_a2033188e9b08778188a034a6fc90ca85}}
-\index{xb::xbXBase@{xb::xbXBase}!AddTblToTblList@{AddTblToTblList}}
-\index{AddTblToTblList@{AddTblToTblList}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{AddTblToTblList()}{AddTblToTblList()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Tbl\+Mgr\+::\+Add\+Tbl\+To\+Tbl\+List (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$}]{d, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Fq\+Tbl\+Name, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Tbl\+Alias }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}\label{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}}
-\index{xb::xbXBase@{xb::xbXBase}!BitDump@{BitDump}}
-\index{BitDump@{BitDump}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{BitDump()}{BitDump()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Bit\+Dump (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}\label{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}}
-\index{xb::xbXBase@{xb::xbXBase}!BitDump@{BitDump}}
-\index{BitDump@{BitDump}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{BitDump()}{BitDump()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Bit\+Dump (\begin{DoxyParamCaption}\item[{unsigned char}]{c }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}\label{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}}
-\index{xb::xbXBase@{xb::xbXBase}!BitSet@{BitSet}}
-\index{BitSet@{BitSet}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{BitSet()}{BitSet()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Ssv\+::\+Bit\+Set (\begin{DoxyParamCaption}\item[{unsigned char}]{c, }\item[{xb\+Int16}]{i\+Bit\+No }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Check a bit in a one byte field and see if it is set.
-
-
-\begin{DoxyParams}{Parameters}
-{\em c} & One byte char field to examine. \\
-\hline
-{\em i\+Bit\+No} & which bit to examine. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-xb\+True Bit is set~\newline
- xb\+False Bit is not set
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbXBase_afccb552ca0daff779c0500ff20d22c2b}\label{classxb_1_1xbXBase_afccb552ca0daff779c0500ff20d22c2b}}
-\index{xb::xbXBase@{xb::xbXBase}!CloseAllTables@{CloseAllTables}}
-\index{CloseAllTables@{CloseAllTables}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{CloseAllTables()}{CloseAllTables()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+XBase\+::\+Close\+All\+Tables (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
-
-
-Close all tables / files.
-
-This closes everything. \begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbXBase_ae357fac4fdebdf49e46563cf611caf65}\label{classxb_1_1xbXBase_ae357fac4fdebdf49e46563cf611caf65}}
-\index{xb::xbXBase@{xb::xbXBase}!DisableMsgLogging@{DisableMsgLogging}}
-\index{DisableMsgLogging@{DisableMsgLogging}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{DisableMsgLogging()}{DisableMsgLogging()}}
-{\footnotesize\ttfamily void xb\+::xb\+XBase\+::\+Disable\+Msg\+Logging (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}\label{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}}
-\index{xb::xbXBase@{xb::xbXBase}!DisplayError@{DisplayError}}
-\index{DisplayError@{DisplayError}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{DisplayError()}{DisplayError()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Display\+Error (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Error\+Code }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Display error message on console for a given error number.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Error\+Code} & Error number to reference \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbTblMgr_a5eebffb9e8cc64141e35c2622045cb50}\label{classxb_1_1xbTblMgr_a5eebffb9e8cc64141e35c2622045cb50}}
-\index{xb::xbXBase@{xb::xbXBase}!DisplayTableList@{DisplayTableList}}
-\index{DisplayTableList@{DisplayTableList}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{DisplayTableList()}{DisplayTableList()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Tbl\+Mgr\+::\+Display\+Table\+List (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbXBase_a470e6eb0ed0be60338f9b40976d3ad48}\label{classxb_1_1xbXBase_a470e6eb0ed0be60338f9b40976d3ad48}}
-\index{xb::xbXBase@{xb::xbXBase}!EnableMsgLogging@{EnableMsgLogging}}
-\index{EnableMsgLogging@{EnableMsgLogging}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{EnableMsgLogging()}{EnableMsgLogging()}}
-{\footnotesize\ttfamily void xb\+::xb\+XBase\+::\+Enable\+Msg\+Logging (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{classxb_1_1xbXBase_a5a5ecaed9777978344902446c9ae3b8e}\label{classxb_1_1xbXBase_a5a5ecaed9777978344902446c9ae3b8e}}
-\index{xb::xbXBase@{xb::xbXBase}!FlushLog@{FlushLog}}
-\index{FlushLog@{FlushLog}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{FlushLog()}{FlushLog()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+XBase\+::\+Flush\+Log (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{classxb_1_1xbXBase_aadecb3ac460d8e94b88b2e809e22f48e}\label{classxb_1_1xbXBase_aadecb3ac460d8e94b88b2e809e22f48e}}
-\index{xb::xbXBase@{xb::xbXBase}!GetCmdLineOpt@{GetCmdLineOpt}}
-\index{GetCmdLineOpt@{GetCmdLineOpt}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{GetCmdLineOpt()}{GetCmdLineOpt()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+XBase\+::\+Get\+Cmd\+Line\+Opt (\begin{DoxyParamCaption}\item[{xb\+Int32}]{l\+Argc, }\item[{char $\ast$$\ast$}]{s\+Argv, }\item[{const char $\ast$}]{s\+Opt\+Rqst, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Parm\+Out }\end{DoxyParamCaption})}
-
-
-
-Parse commmand line options for a given parm request.
-
-
-\begin{DoxyParams}{Parameters}
-{\em l\+Argc} & Value passed from main( argc, argv\mbox{[}$\,$\mbox{]} ) \\
-\hline
-{\em s\+Argv} & Valued passed from main \\
-\hline
-{\em s\+Opt\+Rqst} & Option to search for in the arguments list \\
-\hline
-{\em s\+Parm\+Out} & String token immediately to the right of the the option request, if found \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-0 -\/ paramater request not found~\newline
- 1 -\/ Parameter found
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbXBase_a8612e0c5334349fbceb9394b47817fd5}\label{classxb_1_1xbXBase_a8612e0c5334349fbceb9394b47817fd5}}
-\index{xb::xbXBase@{xb::xbXBase}!GetCmdLineOpt@{GetCmdLineOpt}}
-\index{GetCmdLineOpt@{GetCmdLineOpt}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{GetCmdLineOpt()}{GetCmdLineOpt()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+XBase\+::\+Get\+Cmd\+Line\+Opt (\begin{DoxyParamCaption}\item[{xb\+Int32}]{l\+Argc, }\item[{char $\ast$$\ast$}]{s\+Argv, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Opt\+Rqst, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Parm\+Out }\end{DoxyParamCaption})}
-
-
-
-Parse commmand line options for a given parm request.
-
-
-\begin{DoxyParams}{Parameters}
-{\em l\+Argc} & Value passed from main( argc, argv\mbox{[}$\,$\mbox{]} ) \\
-\hline
-{\em s\+Argv} & Valued passed from main \\
-\hline
-{\em s\+Opt\+Rqst} & Option to search for in the arguments list \\
-\hline
-{\em s\+Parm\+Out} & String token immediately to the right of the the option request, if found \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-0 -\/ paramater request not found~\newline
- 1 -\/ Parameter found
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}\label{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}}
-\index{xb::xbXBase@{xb::xbXBase}!GetDataDirectory@{GetDataDirectory}}
-\index{GetDataDirectory@{GetDataDirectory}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{GetDataDirectory()}{GetDataDirectory()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Data\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the current data directory.
-
-\begin{DoxyReturn}{Returns}
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing the current data directory where the database files are stored.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbTblMgr_ad8a5d28a2ee6720a9aa74bcb45662cf5}\label{classxb_1_1xbTblMgr_ad8a5d28a2ee6720a9aa74bcb45662cf5}}
-\index{xb::xbXBase@{xb::xbXBase}!GetDbfPtr@{GetDbfPtr}}
-\index{GetDbfPtr@{GetDbfPtr}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{GetDbfPtr()}{GetDbfPtr()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$ xb\+::xb\+Tbl\+Mgr\+::\+Get\+Dbf\+Ptr (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Tbl\+Alias }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbTblMgr_a801dfecf7fc216954b4197b2c31b25d6}\label{classxb_1_1xbTblMgr_a801dfecf7fc216954b4197b2c31b25d6}}
-\index{xb::xbXBase@{xb::xbXBase}!GetDbfPtr@{GetDbfPtr}}
-\index{GetDbfPtr@{GetDbfPtr}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{GetDbfPtr()}{GetDbfPtr()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$ xb\+::xb\+Tbl\+Mgr\+::\+Get\+Dbf\+Ptr (\begin{DoxyParamCaption}\item[{xb\+Int16}]{s\+Item\+No }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}\label{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}}
-\index{xb::xbXBase@{xb::xbXBase}!GetDefaultAutoCommit@{GetDefaultAutoCommit}}
-\index{GetDefaultAutoCommit@{GetDefaultAutoCommit}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{GetDefaultAutoCommit()}{GetDefaultAutoCommit()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Ssv\+::\+Get\+Default\+Auto\+Commit (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the default auto commit setting.
-
-When auto commit is enabled, the library will automatically post any updates when moving off an updated record or closing files. If auto commit is disabled, the application program will need to explicitly update the tables using using dbf-\/\texorpdfstring{$>$}{>}Put() and dbf-\/\texorpdfstring{$>$}{>}Append\+Record().
-
-\begin{DoxyReturn}{Returns}
-xb\+True if auto commit is turned on~\newline
- xb\+False is auto commit is turned off
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a6fbb9c3a550ab0b3378f9586a57791d2}\label{classxb_1_1xbSsv_a6fbb9c3a550ab0b3378f9586a57791d2}}
-\index{xb::xbXBase@{xb::xbXBase}!GetDefaultDateFormat@{GetDefaultDateFormat}}
-\index{GetDefaultDateFormat@{GetDefaultDateFormat}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{GetDefaultDateFormat()}{GetDefaultDateFormat()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Default\+Date\+Format (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the default date format.
-
-\begin{DoxyReturn}{Returns}
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing the default date format.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}\label{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}}
-\index{xb::xbXBase@{xb::xbXBase}!GetEndianType@{GetEndianType}}
-\index{GetEndianType@{GetEndianType}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{GetEndianType()}{GetEndianType()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Ssv\+::\+Get\+Endian\+Type (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the Endian type.
-
-\begin{DoxyReturn}{Returns}
-B -\/ Big endian~\newline
- L -\/ Little endian~\newline
-
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}\label{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}}
-\index{xb::xbXBase@{xb::xbXBase}!GetErrorMessage@{GetErrorMessage}}
-\index{GetErrorMessage@{GetErrorMessage}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{GetErrorMessage()}{GetErrorMessage()}}
-{\footnotesize\ttfamily const char $\ast$ xb\+::xb\+Ssv\+::\+Get\+Error\+Message (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Error\+Code }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get an error message.
-
-
-\begin{DoxyParams}{Parameters}
-{\em i\+Error\+Code} & Error\+Code is the error number of description to be returned. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-Returns a pointer to a string containing a text description for the error code.
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbXBase_ae52e53340593b4253936c1372ec15ee1}\label{classxb_1_1xbXBase_ae52e53340593b4253936c1372ec15ee1}}
-\index{xb::xbXBase@{xb::xbXBase}!GetFunctionInfo@{GetFunctionInfo}}
-\index{GetFunctionInfo@{GetFunctionInfo}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{GetFunctionInfo()}{GetFunctionInfo()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+XBase\+::\+Get\+Function\+Info (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Exp\+Line, }\item[{char \&}]{c\+Return\+Type, }\item[{xb\+Int16 \&}]{i\+Return\+Len\+Calc, }\item[{xb\+Int32 \&}]{l\+Return\+Len\+Val }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [protected]}}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}\label{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}}
-\index{xb::xbXBase@{xb::xbXBase}!GetHomeDir@{GetHomeDir}}
-\index{GetHomeDir@{GetHomeDir}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{GetHomeDir()}{GetHomeDir()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Get\+Home\+Dir (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Home\+Dir\+Out }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get home directory.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Home\+Dir\+Out} & -\/ Output home directory for current user. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-void
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbXBase_a51d49b4d699740194b28c6ec0d0ee07b}\label{classxb_1_1xbXBase_a51d49b4d699740194b28c6ec0d0ee07b}}
-\index{xb::xbXBase@{xb::xbXBase}!GetLogDirectory@{GetLogDirectory}}
-\index{GetLogDirectory@{GetLogDirectory}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{GetLogDirectory()}{GetLogDirectory()}}
-{\footnotesize\ttfamily const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+XBase\+::\+Get\+Log\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
-
-\mbox{\Hypertarget{classxb_1_1xbXBase_ac0744edf9e4aa959d8cf2daa874376af}\label{classxb_1_1xbXBase_ac0744edf9e4aa959d8cf2daa874376af}}
-\index{xb::xbXBase@{xb::xbXBase}!GetLogFileName@{GetLogFileName}}
-\index{GetLogFileName@{GetLogFileName}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{GetLogFileName()}{GetLogFileName()}}
-{\footnotesize\ttfamily const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+XBase\+::\+Get\+Log\+File\+Name (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
-
-\mbox{\Hypertarget{classxb_1_1xbXBase_ab5d63cd7d9137eba8a1d4d9c3df522b7}\label{classxb_1_1xbXBase_ab5d63cd7d9137eba8a1d4d9c3df522b7}}
-\index{xb::xbXBase@{xb::xbXBase}!GetLogFqFileName@{GetLogFqFileName}}
-\index{GetLogFqFileName@{GetLogFqFileName}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{GetLogFqFileName()}{GetLogFqFileName()}}
-{\footnotesize\ttfamily const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+XBase\+::\+Get\+Log\+Fq\+File\+Name (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
-
-\mbox{\Hypertarget{classxb_1_1xbXBase_ade34cd72c2a7e70fb55429a8a6f6c028}\label{classxb_1_1xbXBase_ade34cd72c2a7e70fb55429a8a6f6c028}}
-\index{xb::xbXBase@{xb::xbXBase}!GetLogStatus@{GetLogStatus}}
-\index{GetLogStatus@{GetLogStatus}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{GetLogStatus()}{GetLogStatus()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+XBase\+::\+Get\+Log\+Status (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}\label{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}}
-\index{xb::xbXBase@{xb::xbXBase}!GetMultiUser@{GetMultiUser}}
-\index{GetMultiUser@{GetMultiUser}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{GetMultiUser()}{GetMultiUser()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Ssv\+::\+Get\+Multi\+User (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the multi user setting.
-
-\begin{DoxyReturn}{Returns}
-xb\+True -\/ Multi user mode turned on.~\newline
- xb\+False -\/ Multi user mode turned off.~\newline
-
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbTblMgr_ad0d2d4adabc0dc0e761cfdee63c84069}\label{classxb_1_1xbTblMgr_ad0d2d4adabc0dc0e761cfdee63c84069}}
-\index{xb::xbXBase@{xb::xbXBase}!GetOpenTableCount@{GetOpenTableCount}}
-\index{GetOpenTableCount@{GetOpenTableCount}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{GetOpenTableCount()}{GetOpenTableCount()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Tbl\+Mgr\+::\+Get\+Open\+Table\+Count (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbTblMgr_acbf148ddba4297021cfb980a161ebef9}\label{classxb_1_1xbTblMgr_acbf148ddba4297021cfb980a161ebef9}}
-\index{xb::xbXBase@{xb::xbXBase}!GetTblListEntry@{GetTblListEntry}}
-\index{GetTblListEntry@{GetTblListEntry}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{GetTblListEntry()}{GetTblListEntry()}}
-{\footnotesize\ttfamily \mbox{\hyperlink{structxb_1_1xbTblList}{xb\+Tbl\+List}} $\ast$ xb\+::xb\+Tbl\+Mgr\+::\+Get\+Tbl\+List\+Entry (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$}]{d }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbXBase_ab35cec5ac8f0fa95f10653ca7ac817f6}\label{classxb_1_1xbXBase_ab35cec5ac8f0fa95f10653ca7ac817f6}}
-\index{xb::xbXBase@{xb::xbXBase}!Open@{Open}}
-\index{Open@{Open}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{Open()}{Open()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$ xb\+::xb\+XBase\+::\+Open (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Table\+Name, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Alias, }\item[{xb\+Int16}]{i\+Open\+Mode, }\item[{xb\+Int16}]{i\+Share\+Mode, }\item[{xb\+Int16}]{i\+Request\+Version, }\item[{xb\+Int16 \&}]{i\+Rc }\end{DoxyParamCaption})}
-
-
-
-Open highest qualified class available for dbf file.
-
-This routine can open various versions of the dbf file dependent on the i\+Version field
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Table\+Name} & -\/ Table name to open. \\
-\hline
-{\em s\+Alias} & -\/ Optional alias name. \\
-\hline
-{\em i\+Open\+Mode} & -\/ XB\+\_\+\+READ\+\_\+\+WRITE or XB\+\_\+\+READ \\
-\hline
-{\em i\+Share\+Mode} & -\/ XB\+\_\+\+SINGLE\+\_\+\+USER or XB\+\_\+\+MULTI\+\_\+\+USER \\
-\hline
-{\em i\+Request\+Version} & 0 -\/ Highest available 4 -\/ Version four dbf 3 -\/ Version three dbf \\
-\hline
-{\em i\+Rc} & -\/ Return code from open request \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-param dbf -\/ Output pointer to dbf file opened or null if error
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbXBase_aafb1abd6b6124cddf635adaf9f615a4a}\label{classxb_1_1xbXBase_aafb1abd6b6124cddf635adaf9f615a4a}}
-\index{xb::xbXBase@{xb::xbXBase}!Open@{Open}}
-\index{Open@{Open}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{Open()}{Open()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$ xb\+::xb\+XBase\+::\+Open (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Table\+Name, }\item[{xb\+Int16 \&}]{i\+Rc }\end{DoxyParamCaption})}
-
-
-
-Open highest qualified class available for dbf file.
-
-This routine opens the highest available version of the dbf file. Defaults to XB\+\_\+\+READ\+\_\+\+WRITE and XB\+\_\+\+MULTI\+\_\+\+USER mode. \begin{DoxyReturn}{Returns}
-param dbf -\/ Output pointer to dbf file opened or null if error
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbXBase_aa957eb502ecd076e5df89e7415cb094b}\label{classxb_1_1xbXBase_aa957eb502ecd076e5df89e7415cb094b}}
-\index{xb::xbXBase@{xb::xbXBase}!OpenHighestVersion@{OpenHighestVersion}}
-\index{OpenHighestVersion@{OpenHighestVersion}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{OpenHighestVersion()}{OpenHighestVersion()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+XBase\+::\+Open\+Highest\+Version (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Table\+Name, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Alias, }\item[{\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} \&}]{dbf, }\item[{int}]{dummy }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{classxb_1_1xbXBase_afa7bbac08a4601f49cd53b457196ee0e}\label{classxb_1_1xbXBase_afa7bbac08a4601f49cd53b457196ee0e}}
-\index{xb::xbXBase@{xb::xbXBase}!OpenHighestVersion@{OpenHighestVersion}}
-\index{OpenHighestVersion@{OpenHighestVersion}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{OpenHighestVersion()}{OpenHighestVersion()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+XBase\+::\+Open\+Highest\+Version (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Table\+Name, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Alias, }\item[{\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$$\ast$}]{dbf }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{classxb_1_1xbTblMgr_ac8eaef41acf08911b90f900aac8e70af}\label{classxb_1_1xbTblMgr_ac8eaef41acf08911b90f900aac8e70af}}
-\index{xb::xbXBase@{xb::xbXBase}!RemoveTblFromTblList@{RemoveTblFromTblList}}
-\index{RemoveTblFromTblList@{RemoveTblFromTblList}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{RemoveTblFromTblList()}{RemoveTblFromTblList()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Tbl\+Mgr\+::\+Remove\+Tbl\+From\+Tbl\+List (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Tbl\+Alias }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbTblMgr_a3d82b6e73d5c0bc8cac22b9a260389c1}\label{classxb_1_1xbTblMgr_a3d82b6e73d5c0bc8cac22b9a260389c1}}
-\index{xb::xbXBase@{xb::xbXBase}!RemoveTblFromTblList@{RemoveTblFromTblList}}
-\index{RemoveTblFromTblList@{RemoveTblFromTblList}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{RemoveTblFromTblList()}{RemoveTblFromTblList()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Tbl\+Mgr\+::\+Remove\+Tbl\+From\+Tbl\+List (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$}]{d }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}\label{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}}
-\index{xb::xbXBase@{xb::xbXBase}!SetDataDirectory@{SetDataDirectory}}
-\index{SetDataDirectory@{SetDataDirectory}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{SetDataDirectory()}{SetDataDirectory()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Data\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Data\+Directory }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Set the data directory.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Data\+Directory} & Set the data direcroty. \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}\label{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}}
-\index{xb::xbXBase@{xb::xbXBase}!SetDefaultAutoCommit@{SetDefaultAutoCommit}}
-\index{SetDefaultAutoCommit@{SetDefaultAutoCommit}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{SetDefaultAutoCommit()}{SetDefaultAutoCommit()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Default\+Auto\+Commit (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}}}]{b\+Default\+Auto\+Commit }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Set the default auto commit.
-
-Disabling auto commit requires the application execute explicit updates using dbf-\/\texorpdfstring{$>$}{>}Put() and dbf-\/\texorpdfstring{$>$}{>}Append\+Record(). With auto commit on, the library posts updates automatically when moving off the current record or closing a file.
-
-
-\begin{DoxyParams}{Parameters}
-{\em b\+Default\+Auto\+Commit} & xb\+True -\/ Enable default auto commit.~\newline
- xb\+False -\/ Disable default auto commit.~\newline
- \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}\label{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}}
-\index{xb::xbXBase@{xb::xbXBase}!SetDefaultDateFormat@{SetDefaultDateFormat}}
-\index{SetDefaultDateFormat@{SetDefaultDateFormat}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{SetDefaultDateFormat()}{SetDefaultDateFormat()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Default\+Date\+Format (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Default\+Date\+Format }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Set the default date format.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Default\+Date\+Format} & Set the default date format. \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a904ec348fd029d4a76e72b8fde636108}\label{classxb_1_1xbSsv_a904ec348fd029d4a76e72b8fde636108}}
-\index{xb::xbXBase@{xb::xbXBase}!SetEndianType@{SetEndianType}}
-\index{SetEndianType@{SetEndianType}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{SetEndianType()}{SetEndianType()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Endian\+Type (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [protected]}, {\ttfamily [inherited]}}
-
-
-
-Set the endian type.
-
-This routine determines the Endian-\/ness at run time instead of compile time as some processers (ie; Sparc,ARM) can be switched either way. This routine is called automatically by the library at startup and does not need to be called in an application program. \mbox{\Hypertarget{classxb_1_1xbXBase_a48d82dbe298c6f4cf68a63ac82dd8292}\label{classxb_1_1xbXBase_a48d82dbe298c6f4cf68a63ac82dd8292}}
-\index{xb::xbXBase@{xb::xbXBase}!SetLogDirectory@{SetLogDirectory}}
-\index{SetLogDirectory@{SetLogDirectory}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{SetLogDirectory()}{SetLogDirectory()}}
-{\footnotesize\ttfamily void xb\+::xb\+XBase\+::\+Set\+Log\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Log\+File\+Directory }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{classxb_1_1xbXBase_a94010b88a309315ef980715eb581336c}\label{classxb_1_1xbXBase_a94010b88a309315ef980715eb581336c}}
-\index{xb::xbXBase@{xb::xbXBase}!SetLogFileName@{SetLogFileName}}
-\index{SetLogFileName@{SetLogFileName}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{SetLogFileName()}{SetLogFileName()}}
-{\footnotesize\ttfamily void xb\+::xb\+XBase\+::\+Set\+Log\+File\+Name (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Log\+File\+Name }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{classxb_1_1xbXBase_a666a0cb5b76ec7a9a3677d339e0c6b42}\label{classxb_1_1xbXBase_a666a0cb5b76ec7a9a3677d339e0c6b42}}
-\index{xb::xbXBase@{xb::xbXBase}!SetLogSize@{SetLogSize}}
-\index{SetLogSize@{SetLogSize}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{SetLogSize()}{SetLogSize()}}
-{\footnotesize\ttfamily void xb\+::xb\+XBase\+::\+Set\+Log\+Size (\begin{DoxyParamCaption}\item[{size\+\_\+t}]{l\+Size }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}\label{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}}
-\index{xb::xbXBase@{xb::xbXBase}!SetMultiUser@{SetMultiUser}}
-\index{SetMultiUser@{SetMultiUser}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{SetMultiUser()}{SetMultiUser()}}
-{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Multi\+User (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}}}]{b\+Multi\+User }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Get the multi user setting.
-
-
-\begin{DoxyParams}{Parameters}
-{\em b\+Multi\+User} & xb\+True -\/ Turn on Multi user mode.~\newline
- xb\+False -\/ Turn off Multi user mode.~\newline
- \\
-\hline
-\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbXBase_a0dff00b9ee3c288841e137ca01168116}\label{classxb_1_1xbXBase_a0dff00b9ee3c288841e137ca01168116}}
-\index{xb::xbXBase@{xb::xbXBase}!WriteLogBytes@{WriteLogBytes}}
-\index{WriteLogBytes@{WriteLogBytes}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{WriteLogBytes()}{WriteLogBytes()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+XBase\+::\+Write\+Log\+Bytes (\begin{DoxyParamCaption}\item[{xb\+UInt32}]{l\+Cnt, }\item[{const char $\ast$}]{p }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{classxb_1_1xbXBase_a9ca5be73abffd0fdd18bdc799877272a}\label{classxb_1_1xbXBase_a9ca5be73abffd0fdd18bdc799877272a}}
-\index{xb::xbXBase@{xb::xbXBase}!WriteLogMessage@{WriteLogMessage}}
-\index{WriteLogMessage@{WriteLogMessage}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{WriteLogMessage()}{WriteLogMessage()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+XBase\+::\+Write\+Log\+Message (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Log\+Message, }\item[{xb\+Int16}]{i\+Output\+Opt = {\ttfamily 0} }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{classxb_1_1xbXBase_a1b239c021358476382942522911b5c66}\label{classxb_1_1xbXBase_a1b239c021358476382942522911b5c66}}
-\index{xb::xbXBase@{xb::xbXBase}!xbMemcmp@{xbMemcmp}}
-\index{xbMemcmp@{xbMemcmp}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{xbMemcmp()}{xbMemcmp()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+XBase\+::xb\+Memcmp (\begin{DoxyParamCaption}\item[{const unsigned char $\ast$}]{s1, }\item[{const unsigned char $\ast$}]{s2, }\item[{size\+\_\+t}]{n }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}, {\ttfamily [protected]}}
-
-
-
-Cross memcmp function.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s1} & Left operand to compare. \\
-\hline
-{\em s2} & Right operand to compare. \\
-\hline
-{\em n} & Number of bytes to compare. \\
-\hline
-\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-1 s1 \texorpdfstring{$>$}{>} s2~\newline
- 0 s1 == s2~\newline
- -\/1 s1 \texorpdfstring{$<$}{<} s2
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbXBase_a0915aff7be4b2dd3e881f3c5d0da4baf}\label{classxb_1_1xbXBase_a0915aff7be4b2dd3e881f3c5d0da4baf}}
-\index{xb::xbXBase@{xb::xbXBase}!xbSleep@{xbSleep}}
-\index{xbSleep@{xbSleep}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{xbSleep()}{xbSleep()}}
-{\footnotesize\ttfamily void xb\+::xb\+XBase\+::xb\+Sleep (\begin{DoxyParamCaption}\item[{xb\+Int32}]{l\+Millisecs }\end{DoxyParamCaption})}
-
-
-
-Cross platform sleep function.
-
-
-\begin{DoxyParams}{Parameters}
-{\em l\+Millisecs} & Milliseconds to sleep. \\
-\hline
-\end{DoxyParams}
-
-
-\doxysubsection{Friends And Related Function Documentation}
-\mbox{\Hypertarget{classxb_1_1xbXBase_a86a53ce3efbf910996df0f853f1c0add}\label{classxb_1_1xbXBase_a86a53ce3efbf910996df0f853f1c0add}}
-\index{xb::xbXBase@{xb::xbXBase}!xbBcd@{xbBcd}}
-\index{xbBcd@{xbBcd}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{xbBcd}{xbBcd}}
-{\footnotesize\ttfamily friend class xb\+Bcd\hspace{0.3cm}{\ttfamily [friend]}}
-
-\mbox{\Hypertarget{classxb_1_1xbXBase_a3c3e5617be811d732472fe2cc8fb18cc}\label{classxb_1_1xbXBase_a3c3e5617be811d732472fe2cc8fb18cc}}
-\index{xb::xbXBase@{xb::xbXBase}!xbExp@{xbExp}}
-\index{xbExp@{xbExp}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{xbExp}{xbExp}}
-{\footnotesize\ttfamily friend class xb\+Exp\hspace{0.3cm}{\ttfamily [friend]}}
-
-
-
-\doxysubsection{Field Documentation}
-\mbox{\Hypertarget{classxb_1_1xbSsv_a6219f1b5e24ea12fe158cd5aea56988e}\label{classxb_1_1xbSsv_a6219f1b5e24ea12fe158cd5aea56988e}}
-\index{xb::xbXBase@{xb::xbXBase}!ErrorCodeText@{ErrorCodeText}}
-\index{ErrorCodeText@{ErrorCodeText}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{ErrorCodeText}{ErrorCodeText}}
-{\footnotesize\ttfamily const char$\ast$ xb\+::xb\+Ssv\+::\+Error\+Code\+Text\mbox{[}$\,$\mbox{]}\hspace{0.3cm}{\ttfamily [static]}, {\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}\label{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}}
-\index{xb::xbXBase@{xb::xbXBase}!iEndianType@{iEndianType}}
-\index{iEndianType@{iEndianType}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{iEndianType}{iEndianType}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Ssv\+::i\+Endian\+Type = 0\hspace{0.3cm}{\ttfamily [static]}, {\ttfamily [protected]}, {\ttfamily [inherited]}}
-
-\mbox{\Hypertarget{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}\label{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}}
-\index{xb::xbXBase@{xb::xbXBase}!sNullString@{sNullString}}
-\index{sNullString@{sNullString}!xb::xbXBase@{xb::xbXBase}}
-\doxysubsubsection{\texorpdfstring{sNullString}{sNullString}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} xb\+::xb\+Ssv\+::s\+Null\+String = \char`\"{}\char`\"{}\hspace{0.3cm}{\ttfamily [static]}, {\ttfamily [protected]}, {\ttfamily [inherited]}}
-
-
-
-The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
-\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbxbase_8h}{xbxbase.\+h}}\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbxbase_8cpp}{xbxbase.\+cpp}}\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/dir_25b94c3afce00ed38231227d8141f932.tex b/docs/doxygen/latex/dir_25b94c3afce00ed38231227d8141f932.tex
deleted file mode 100644
index 94a598e..0000000
--- a/docs/doxygen/latex/dir_25b94c3afce00ed38231227d8141f932.tex
+++ /dev/null
@@ -1,29 +0,0 @@
-\hypertarget{dir_25b94c3afce00ed38231227d8141f932}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/sql Directory Reference}
-\label{dir_25b94c3afce00ed38231227d8141f932}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql Directory Reference}}
-\doxysubsection*{Files}
-\begin{DoxyCompactItemize}
-\item
-file \mbox{\hyperlink{xbalttbl_8cpp}{xbalttbl.\+cpp}}
-\item
-file \mbox{\hyperlink{xbcrix_8cpp}{xbcrix.\+cpp}}
-\item
-file \mbox{\hyperlink{xbcrtbl_8cpp}{xbcrtbl.\+cpp}}
-\item
-file \mbox{\hyperlink{xbcrtbl_8save_8cpp}{xbcrtbl.\+save.\+cpp}}
-\item
-file \mbox{\hyperlink{xbdelete_8cpp}{xbdelete.\+cpp}}
-\item
-file \mbox{\hyperlink{xbdrpix_8cpp}{xbdrpix.\+cpp}}
-\item
-file \mbox{\hyperlink{xbdrptbl_8cpp}{xbdrptbl.\+cpp}}
-\item
-file \mbox{\hyperlink{xbinsert_8cpp}{xbinsert.\+cpp}}
-\item
-file \mbox{\hyperlink{xbselect_8cpp}{xbselect.\+cpp}}
-\item
-file \mbox{\hyperlink{xbset_8cpp}{xbset.\+cpp}}
-\item
-file \mbox{\hyperlink{xbsql_8cpp}{xbsql.\+cpp}}
-\item
-file \mbox{\hyperlink{xbstmt_8cpp}{xbstmt.\+cpp}}
-\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/dir_313caf1132e152dd9b58bea13a4052ca.tex b/docs/doxygen/latex/dir_313caf1132e152dd9b58bea13a4052ca.tex
deleted file mode 100644
index 4668464..0000000
--- a/docs/doxygen/latex/dir_313caf1132e152dd9b58bea13a4052ca.tex
+++ /dev/null
@@ -1,25 +0,0 @@
-\hypertarget{dir_313caf1132e152dd9b58bea13a4052ca}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/utils Directory Reference}
-\label{dir_313caf1132e152dd9b58bea13a4052ca}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils Directory Reference}}
-\doxysubsection*{Files}
-\begin{DoxyCompactItemize}
-\item
-file \mbox{\hyperlink{xb__cfg__check_8cpp}{xb\+\_\+cfg\+\_\+check.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__copydbf_8cpp}{xb\+\_\+copydbf.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__dbfutil_8cpp}{xb\+\_\+dbfutil.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__deletall_8cpp}{xb\+\_\+deletall.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__dumpdbt_8cpp}{xb\+\_\+dumpdbt.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__dumprecs_8cpp}{xb\+\_\+dumprecs.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__execsql_8cpp}{xb\+\_\+execsql.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__pack_8cpp}{xb\+\_\+pack.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__tblinfo_8cpp}{xb\+\_\+tblinfo.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__undelall_8cpp}{xb\+\_\+undelall.\+cpp}}
-\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/dir_68267d1309a1af8e8297ef4c3efbcdba.tex b/docs/doxygen/latex/dir_68267d1309a1af8e8297ef4c3efbcdba.tex
deleted file mode 100644
index 935234e..0000000
--- a/docs/doxygen/latex/dir_68267d1309a1af8e8297ef4c3efbcdba.tex
+++ /dev/null
@@ -1,17 +0,0 @@
-\hypertarget{dir_68267d1309a1af8e8297ef4c3efbcdba}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src Directory Reference}
-\label{dir_68267d1309a1af8e8297ef4c3efbcdba}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src Directory Reference}}
-\doxysubsection*{Directories}
-\begin{DoxyCompactItemize}
-\item
-directory \mbox{\hyperlink{dir_aebb8dcc11953d78e620bbef0b9e2183}{core}}
-\item
-directory \mbox{\hyperlink{dir_e931c1a3f0014e624d0645a271726ad2}{examples}}
-\item
-directory \mbox{\hyperlink{dir_b0856f6b0d80ccb263b2f415c91f9e17}{include}}
-\item
-directory \mbox{\hyperlink{dir_25b94c3afce00ed38231227d8141f932}{sql}}
-\item
-directory \mbox{\hyperlink{dir_d93a1d4020dea85bb71b237545b5e722}{tests}}
-\item
-directory \mbox{\hyperlink{dir_313caf1132e152dd9b58bea13a4052ca}{utils}}
-\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/dir_aebb8dcc11953d78e620bbef0b9e2183.tex b/docs/doxygen/latex/dir_aebb8dcc11953d78e620bbef0b9e2183.tex
deleted file mode 100644
index 85ce0c9..0000000
--- a/docs/doxygen/latex/dir_aebb8dcc11953d78e620bbef0b9e2183.tex
+++ /dev/null
@@ -1,55 +0,0 @@
-\hypertarget{dir_aebb8dcc11953d78e620bbef0b9e2183}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/core Directory Reference}
-\label{dir_aebb8dcc11953d78e620bbef0b9e2183}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core Directory Reference}}
-\doxysubsection*{Files}
-\begin{DoxyCompactItemize}
-\item
-file \mbox{\hyperlink{xbbcd_8cpp}{xbbcd.\+cpp}}
-\item
-file \mbox{\hyperlink{xbblockread_8cpp}{xbblockread.\+cpp}}
-\item
-file \mbox{\hyperlink{xbdate_8cpp}{xbdate.\+cpp}}
-\item
-file \mbox{\hyperlink{xbdbf_8cpp}{xbdbf.\+cpp}}
-\item
-file \mbox{\hyperlink{xbdbf3_8cpp}{xbdbf3.\+cpp}}
-\item
-file \mbox{\hyperlink{xbdbf4_8cpp}{xbdbf4.\+cpp}}
-\item
-file \mbox{\hyperlink{xbexp_8cpp}{xbexp.\+cpp}}
-\item
-file \mbox{\hyperlink{xbexpnode_8cpp}{xbexpnode.\+cpp}}
-\item
-file \mbox{\hyperlink{xbfields_8cpp}{xbfields.\+cpp}}
-\item
-file \mbox{\hyperlink{xbfile_8cpp}{xbfile.\+cpp}}
-\item
-file \mbox{\hyperlink{xbfilter_8cpp}{xbfilter.\+cpp}}
-\item
-file \mbox{\hyperlink{xbfuncs_8cpp}{xbfuncs.\+cpp}}
-\item
-file \mbox{\hyperlink{xbixbase_8cpp}{xbixbase.\+cpp}}
-\item
-file \mbox{\hyperlink{xbixmdx_8cpp}{xbixmdx.\+cpp}}
-\item
-file \mbox{\hyperlink{xbixndx_8cpp}{xbixndx.\+cpp}}
-\item
-file \mbox{\hyperlink{xblog_8cpp}{xblog.\+cpp}}
-\item
-file \mbox{\hyperlink{xbmemo_8cpp}{xbmemo.\+cpp}}
-\item
-file \mbox{\hyperlink{xbmemo3_8cpp}{xbmemo3.\+cpp}}
-\item
-file \mbox{\hyperlink{xbmemo4_8cpp}{xbmemo4.\+cpp}}
-\item
-file \mbox{\hyperlink{xbssv_8cpp}{xbssv.\+cpp}}
-\item
-file \mbox{\hyperlink{xbstring_8cpp}{xbstring.\+cpp}}
-\item
-file \mbox{\hyperlink{xbtag_8cpp}{xbtag.\+cpp}}
-\item
-file \mbox{\hyperlink{xbtblmgr_8cpp}{xbtblmgr.\+cpp}}
-\item
-file \mbox{\hyperlink{xbuda_8cpp}{xbuda.\+cpp}}
-\item
-file \mbox{\hyperlink{xbxbase_8cpp}{xbxbase.\+cpp}}
-\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/dir_b0856f6b0d80ccb263b2f415c91f9e17.tex b/docs/doxygen/latex/dir_b0856f6b0d80ccb263b2f415c91f9e17.tex
deleted file mode 100644
index 539439f..0000000
--- a/docs/doxygen/latex/dir_b0856f6b0d80ccb263b2f415c91f9e17.tex
+++ /dev/null
@@ -1,53 +0,0 @@
-\hypertarget{dir_b0856f6b0d80ccb263b2f415c91f9e17}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/include Directory Reference}
-\label{dir_b0856f6b0d80ccb263b2f415c91f9e17}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include Directory Reference}}
-\doxysubsection*{Files}
-\begin{DoxyCompactItemize}
-\item
-file \mbox{\hyperlink{xbase_8h}{xbase.\+h}}
-\item
-file \mbox{\hyperlink{xbbcd_8h}{xbbcd.\+h}}
-\item
-file \mbox{\hyperlink{xbblkread_8h}{xbblkread.\+h}}
-\item
-file \mbox{\hyperlink{xbdate_8h}{xbdate.\+h}}
-\item
-file \mbox{\hyperlink{xbdbf_8h}{xbdbf.\+h}}
-\item
-file \mbox{\hyperlink{xbexp_8h}{xbexp.\+h}}
-\item
-file \mbox{\hyperlink{xbexpnode_8h}{xbexpnode.\+h}}
-\item
-file \mbox{\hyperlink{xbfile_8h}{xbfile.\+h}}
-\item
-file \mbox{\hyperlink{xbfilter_8h}{xbfilter.\+h}}
-\item
-file \mbox{\hyperlink{xbindex_8h}{xbindex.\+h}}
-\item
-file \mbox{\hyperlink{xblnklst_8h}{xblnklst.\+h}}
-\item
-file \mbox{\hyperlink{xblnklstord_8h}{xblnklstord.\+h}}
-\item
-file \mbox{\hyperlink{xblnknod_8h}{xblnknod.\+h}}
-\item
-file \mbox{\hyperlink{xblog_8h}{xblog.\+h}}
-\item
-file \mbox{\hyperlink{xbmemo_8h}{xbmemo.\+h}}
-\item
-file \mbox{\hyperlink{xbretcod_8h}{xbretcod.\+h}}
-\item
-file \mbox{\hyperlink{xbsql_8h}{xbsql.\+h}}
-\item
-file \mbox{\hyperlink{xbssv_8h}{xbssv.\+h}}
-\item
-file \mbox{\hyperlink{xbstring_8h}{xbstring.\+h}}
-\item
-file \mbox{\hyperlink{xbtag_8h}{xbtag.\+h}}
-\item
-file \mbox{\hyperlink{xbtblmgr_8h}{xbtblmgr.\+h}}
-\item
-file \mbox{\hyperlink{xbtypes_8h}{xbtypes.\+h}}
-\item
-file \mbox{\hyperlink{xbuda_8h}{xbuda.\+h}}
-\item
-file \mbox{\hyperlink{xbxbase_8h}{xbxbase.\+h}}
-\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/dir_d93a1d4020dea85bb71b237545b5e722.tex b/docs/doxygen/latex/dir_d93a1d4020dea85bb71b237545b5e722.tex
deleted file mode 100644
index 1fceb7c..0000000
--- a/docs/doxygen/latex/dir_d93a1d4020dea85bb71b237545b5e722.tex
+++ /dev/null
@@ -1,53 +0,0 @@
-\hypertarget{dir_d93a1d4020dea85bb71b237545b5e722}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/tests Directory Reference}
-\label{dir_d93a1d4020dea85bb71b237545b5e722}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests Directory Reference}}
-\doxysubsection*{Files}
-\begin{DoxyCompactItemize}
-\item
-file \mbox{\hyperlink{tstfuncs_8cpp}{tstfuncs.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__test__bcd_8cpp}{xb\+\_\+test\+\_\+bcd.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__test__blockread_8cpp}{xb\+\_\+test\+\_\+blockread.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__test__date_8cpp}{xb\+\_\+test\+\_\+date.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__test__dbf__v3__memos_8cpp}{xb\+\_\+test\+\_\+dbf\+\_\+v3\+\_\+memos.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__test__dbf__v3__nomemos_8cpp}{xb\+\_\+test\+\_\+dbf\+\_\+v3\+\_\+nomemos.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__test__dbf__v4__memos_8cpp}{xb\+\_\+test\+\_\+dbf\+\_\+v4\+\_\+memos.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__test__dbf__v4__nomemos_8cpp}{xb\+\_\+test\+\_\+dbf\+\_\+v4\+\_\+nomemos.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__test__expnode_8cpp}{xb\+\_\+test\+\_\+expnode.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__test__expression_8cpp}{xb\+\_\+test\+\_\+expression.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__test__file_8cpp}{xb\+\_\+test\+\_\+file.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__test__filter_8cpp}{xb\+\_\+test\+\_\+filter.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__test__funcs_8cpp}{xb\+\_\+test\+\_\+funcs.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__test__linklist_8cpp}{xb\+\_\+test\+\_\+linklist.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__test__lock_8cpp}{xb\+\_\+test\+\_\+lock.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__test__lock2_8cpp}{xb\+\_\+test\+\_\+lock2.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__test__log_8cpp}{xb\+\_\+test\+\_\+log.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__test__mdx_8cpp}{xb\+\_\+test\+\_\+mdx.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__test__ndx_8cpp}{xb\+\_\+test\+\_\+ndx.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__test__sql_8cpp}{xb\+\_\+test\+\_\+sql.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__test__string_8cpp}{xb\+\_\+test\+\_\+string.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__test__tblmgr_8cpp}{xb\+\_\+test\+\_\+tblmgr.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__test__uda_8cpp}{xb\+\_\+test\+\_\+uda.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__test__xbase_8cpp}{xb\+\_\+test\+\_\+xbase.\+cpp}}
-\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/dir_e931c1a3f0014e624d0645a271726ad2.tex b/docs/doxygen/latex/dir_e931c1a3f0014e624d0645a271726ad2.tex
deleted file mode 100644
index 6d87543..0000000
--- a/docs/doxygen/latex/dir_e931c1a3f0014e624d0645a271726ad2.tex
+++ /dev/null
@@ -1,23 +0,0 @@
-\hypertarget{dir_e931c1a3f0014e624d0645a271726ad2}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/examples Directory Reference}
-\label{dir_e931c1a3f0014e624d0645a271726ad2}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples Directory Reference}}
-\doxysubsection*{Files}
-\begin{DoxyCompactItemize}
-\item
-file \mbox{\hyperlink{xb__ex__date_8cpp}{xb\+\_\+ex\+\_\+date.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__ex__expression_8cpp}{xb\+\_\+ex\+\_\+expression.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__ex__sql_8cpp}{xb\+\_\+ex\+\_\+sql.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__ex__ssv_8cpp}{xb\+\_\+ex\+\_\+ssv.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__ex__string_8cpp}{xb\+\_\+ex\+\_\+string.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__ex__v3__create__dbf_8cpp}{xb\+\_\+ex\+\_\+v3\+\_\+create\+\_\+dbf.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__ex__v3__upd__dbf_8cpp}{xb\+\_\+ex\+\_\+v3\+\_\+upd\+\_\+dbf.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__ex__v4__create__dbf_8cpp}{xb\+\_\+ex\+\_\+v4\+\_\+create\+\_\+dbf.\+cpp}}
-\item
-file \mbox{\hyperlink{xb__ex__v4__upd__dbf_8cpp}{xb\+\_\+ex\+\_\+v4\+\_\+upd\+\_\+dbf.\+cpp}}
-\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/files.tex b/docs/doxygen/latex/files.tex
deleted file mode 100644
index aae1da4..0000000
--- a/docs/doxygen/latex/files.tex
+++ /dev/null
@@ -1,107 +0,0 @@
-\doxysection{File List}
-Here is a list of all files with brief descriptions\+:\begin{DoxyCompactList}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbbcd_8cpp}{xbbcd.\+cpp}} }{\pageref{xbbcd_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbblockread_8cpp}{xbblockread.\+cpp}} }{\pageref{xbblockread_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbdate_8cpp}{xbdate.\+cpp}} }{\pageref{xbdate_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbdbf_8cpp}{xbdbf.\+cpp}} }{\pageref{xbdbf_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbdbf3_8cpp}{xbdbf3.\+cpp}} }{\pageref{xbdbf3_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbdbf4_8cpp}{xbdbf4.\+cpp}} }{\pageref{xbdbf4_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbexp_8cpp}{xbexp.\+cpp}} }{\pageref{xbexp_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbexpnode_8cpp}{xbexpnode.\+cpp}} }{\pageref{xbexpnode_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbfields_8cpp}{xbfields.\+cpp}} }{\pageref{xbfields_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbfile_8cpp}{xbfile.\+cpp}} }{\pageref{xbfile_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbfilter_8cpp}{xbfilter.\+cpp}} }{\pageref{xbfilter_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbfuncs_8cpp}{xbfuncs.\+cpp}} }{\pageref{xbfuncs_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbixbase_8cpp}{xbixbase.\+cpp}} }{\pageref{xbixbase_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbixmdx_8cpp}{xbixmdx.\+cpp}} }{\pageref{xbixmdx_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbixndx_8cpp}{xbixndx.\+cpp}} }{\pageref{xbixndx_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xblog_8cpp}{xblog.\+cpp}} }{\pageref{xblog_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbmemo_8cpp}{xbmemo.\+cpp}} }{\pageref{xbmemo_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbmemo3_8cpp}{xbmemo3.\+cpp}} }{\pageref{xbmemo3_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbmemo4_8cpp}{xbmemo4.\+cpp}} }{\pageref{xbmemo4_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbssv_8cpp}{xbssv.\+cpp}} }{\pageref{xbssv_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbstring_8cpp}{xbstring.\+cpp}} }{\pageref{xbstring_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbtag_8cpp}{xbtag.\+cpp}} }{\pageref{xbtag_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbtblmgr_8cpp}{xbtblmgr.\+cpp}} }{\pageref{xbtblmgr_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbuda_8cpp}{xbuda.\+cpp}} }{\pageref{xbuda_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbxbase_8cpp}{xbxbase.\+cpp}} }{\pageref{xbxbase_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/examples/\mbox{\hyperlink{xb__ex__date_8cpp}{xb\+\_\+ex\+\_\+date.\+cpp}} }{\pageref{xb__ex__date_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/examples/\mbox{\hyperlink{xb__ex__expression_8cpp}{xb\+\_\+ex\+\_\+expression.\+cpp}} }{\pageref{xb__ex__expression_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/examples/\mbox{\hyperlink{xb__ex__sql_8cpp}{xb\+\_\+ex\+\_\+sql.\+cpp}} }{\pageref{xb__ex__sql_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/examples/\mbox{\hyperlink{xb__ex__ssv_8cpp}{xb\+\_\+ex\+\_\+ssv.\+cpp}} }{\pageref{xb__ex__ssv_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/examples/\mbox{\hyperlink{xb__ex__string_8cpp}{xb\+\_\+ex\+\_\+string.\+cpp}} }{\pageref{xb__ex__string_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/examples/\mbox{\hyperlink{xb__ex__v3__create__dbf_8cpp}{xb\+\_\+ex\+\_\+v3\+\_\+create\+\_\+dbf.\+cpp}} }{\pageref{xb__ex__v3__create__dbf_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/examples/\mbox{\hyperlink{xb__ex__v3__upd__dbf_8cpp}{xb\+\_\+ex\+\_\+v3\+\_\+upd\+\_\+dbf.\+cpp}} }{\pageref{xb__ex__v3__upd__dbf_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/examples/\mbox{\hyperlink{xb__ex__v4__create__dbf_8cpp}{xb\+\_\+ex\+\_\+v4\+\_\+create\+\_\+dbf.\+cpp}} }{\pageref{xb__ex__v4__create__dbf_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/examples/\mbox{\hyperlink{xb__ex__v4__upd__dbf_8cpp}{xb\+\_\+ex\+\_\+v4\+\_\+upd\+\_\+dbf.\+cpp}} }{\pageref{xb__ex__v4__upd__dbf_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbase_8h}{xbase.\+h}} }{\pageref{xbase_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbbcd_8h}{xbbcd.\+h}} }{\pageref{xbbcd_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbblkread_8h}{xbblkread.\+h}} }{\pageref{xbblkread_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbdate_8h}{xbdate.\+h}} }{\pageref{xbdate_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbdbf_8h}{xbdbf.\+h}} }{\pageref{xbdbf_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbexp_8h}{xbexp.\+h}} }{\pageref{xbexp_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbexpnode_8h}{xbexpnode.\+h}} }{\pageref{xbexpnode_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbfile_8h}{xbfile.\+h}} }{\pageref{xbfile_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbfilter_8h}{xbfilter.\+h}} }{\pageref{xbfilter_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbindex_8h}{xbindex.\+h}} }{\pageref{xbindex_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xblnklst_8h}{xblnklst.\+h}} }{\pageref{xblnklst_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xblnklstord_8h}{xblnklstord.\+h}} }{\pageref{xblnklstord_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xblnknod_8h}{xblnknod.\+h}} }{\pageref{xblnknod_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xblog_8h}{xblog.\+h}} }{\pageref{xblog_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbmemo_8h}{xbmemo.\+h}} }{\pageref{xbmemo_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbretcod_8h}{xbretcod.\+h}} }{\pageref{xbretcod_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbsql_8h}{xbsql.\+h}} }{\pageref{xbsql_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbssv_8h}{xbssv.\+h}} }{\pageref{xbssv_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbstring_8h}{xbstring.\+h}} }{\pageref{xbstring_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbtag_8h}{xbtag.\+h}} }{\pageref{xbtag_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbtblmgr_8h}{xbtblmgr.\+h}} }{\pageref{xbtblmgr_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbtypes_8h}{xbtypes.\+h}} }{\pageref{xbtypes_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbuda_8h}{xbuda.\+h}} }{\pageref{xbuda_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbxbase_8h}{xbxbase.\+h}} }{\pageref{xbxbase_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/sql/\mbox{\hyperlink{xbalttbl_8cpp}{xbalttbl.\+cpp}} }{\pageref{xbalttbl_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/sql/\mbox{\hyperlink{xbcrix_8cpp}{xbcrix.\+cpp}} }{\pageref{xbcrix_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/sql/\mbox{\hyperlink{xbcrtbl_8cpp}{xbcrtbl.\+cpp}} }{\pageref{xbcrtbl_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/sql/\mbox{\hyperlink{xbcrtbl_8save_8cpp}{xbcrtbl.\+save.\+cpp}} }{\pageref{xbcrtbl_8save_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/sql/\mbox{\hyperlink{xbdelete_8cpp}{xbdelete.\+cpp}} }{\pageref{xbdelete_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/sql/\mbox{\hyperlink{xbdrpix_8cpp}{xbdrpix.\+cpp}} }{\pageref{xbdrpix_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/sql/\mbox{\hyperlink{xbdrptbl_8cpp}{xbdrptbl.\+cpp}} }{\pageref{xbdrptbl_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/sql/\mbox{\hyperlink{xbinsert_8cpp}{xbinsert.\+cpp}} }{\pageref{xbinsert_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/sql/\mbox{\hyperlink{xbselect_8cpp}{xbselect.\+cpp}} }{\pageref{xbselect_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/sql/\mbox{\hyperlink{xbset_8cpp}{xbset.\+cpp}} }{\pageref{xbset_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/sql/\mbox{\hyperlink{xbsql_8cpp}{xbsql.\+cpp}} }{\pageref{xbsql_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/sql/\mbox{\hyperlink{xbstmt_8cpp}{xbstmt.\+cpp}} }{\pageref{xbstmt_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{tstfuncs_8cpp}{tstfuncs.\+cpp}} }{\pageref{tstfuncs_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__bcd_8cpp}{xb\+\_\+test\+\_\+bcd.\+cpp}} }{\pageref{xb__test__bcd_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__blockread_8cpp}{xb\+\_\+test\+\_\+blockread.\+cpp}} }{\pageref{xb__test__blockread_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__date_8cpp}{xb\+\_\+test\+\_\+date.\+cpp}} }{\pageref{xb__test__date_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__dbf__v3__memos_8cpp}{xb\+\_\+test\+\_\+dbf\+\_\+v3\+\_\+memos.\+cpp}} }{\pageref{xb__test__dbf__v3__memos_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__dbf__v3__nomemos_8cpp}{xb\+\_\+test\+\_\+dbf\+\_\+v3\+\_\+nomemos.\+cpp}} }{\pageref{xb__test__dbf__v3__nomemos_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__dbf__v4__memos_8cpp}{xb\+\_\+test\+\_\+dbf\+\_\+v4\+\_\+memos.\+cpp}} }{\pageref{xb__test__dbf__v4__memos_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__dbf__v4__nomemos_8cpp}{xb\+\_\+test\+\_\+dbf\+\_\+v4\+\_\+nomemos.\+cpp}} }{\pageref{xb__test__dbf__v4__nomemos_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__expnode_8cpp}{xb\+\_\+test\+\_\+expnode.\+cpp}} }{\pageref{xb__test__expnode_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__expression_8cpp}{xb\+\_\+test\+\_\+expression.\+cpp}} }{\pageref{xb__test__expression_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__file_8cpp}{xb\+\_\+test\+\_\+file.\+cpp}} }{\pageref{xb__test__file_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__filter_8cpp}{xb\+\_\+test\+\_\+filter.\+cpp}} }{\pageref{xb__test__filter_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__funcs_8cpp}{xb\+\_\+test\+\_\+funcs.\+cpp}} }{\pageref{xb__test__funcs_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__linklist_8cpp}{xb\+\_\+test\+\_\+linklist.\+cpp}} }{\pageref{xb__test__linklist_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__lock_8cpp}{xb\+\_\+test\+\_\+lock.\+cpp}} }{\pageref{xb__test__lock_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__lock2_8cpp}{xb\+\_\+test\+\_\+lock2.\+cpp}} }{\pageref{xb__test__lock2_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__log_8cpp}{xb\+\_\+test\+\_\+log.\+cpp}} }{\pageref{xb__test__log_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__mdx_8cpp}{xb\+\_\+test\+\_\+mdx.\+cpp}} }{\pageref{xb__test__mdx_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__ndx_8cpp}{xb\+\_\+test\+\_\+ndx.\+cpp}} }{\pageref{xb__test__ndx_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__sql_8cpp}{xb\+\_\+test\+\_\+sql.\+cpp}} }{\pageref{xb__test__sql_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__string_8cpp}{xb\+\_\+test\+\_\+string.\+cpp}} }{\pageref{xb__test__string_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__tblmgr_8cpp}{xb\+\_\+test\+\_\+tblmgr.\+cpp}} }{\pageref{xb__test__tblmgr_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__uda_8cpp}{xb\+\_\+test\+\_\+uda.\+cpp}} }{\pageref{xb__test__uda_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__xbase_8cpp}{xb\+\_\+test\+\_\+xbase.\+cpp}} }{\pageref{xb__test__xbase_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/utils/\mbox{\hyperlink{xb__cfg__check_8cpp}{xb\+\_\+cfg\+\_\+check.\+cpp}} }{\pageref{xb__cfg__check_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/utils/\mbox{\hyperlink{xb__copydbf_8cpp}{xb\+\_\+copydbf.\+cpp}} }{\pageref{xb__copydbf_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/utils/\mbox{\hyperlink{xb__dbfutil_8cpp}{xb\+\_\+dbfutil.\+cpp}} }{\pageref{xb__dbfutil_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/utils/\mbox{\hyperlink{xb__deletall_8cpp}{xb\+\_\+deletall.\+cpp}} }{\pageref{xb__deletall_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/utils/\mbox{\hyperlink{xb__dumpdbt_8cpp}{xb\+\_\+dumpdbt.\+cpp}} }{\pageref{xb__dumpdbt_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/utils/\mbox{\hyperlink{xb__dumprecs_8cpp}{xb\+\_\+dumprecs.\+cpp}} }{\pageref{xb__dumprecs_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/utils/\mbox{\hyperlink{xb__execsql_8cpp}{xb\+\_\+execsql.\+cpp}} }{\pageref{xb__execsql_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/utils/\mbox{\hyperlink{xb__pack_8cpp}{xb\+\_\+pack.\+cpp}} }{\pageref{xb__pack_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/utils/\mbox{\hyperlink{xb__tblinfo_8cpp}{xb\+\_\+tblinfo.\+cpp}} }{\pageref{xb__tblinfo_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/utils/\mbox{\hyperlink{xb__undelall_8cpp}{xb\+\_\+undelall.\+cpp}} }{\pageref{xb__undelall_8cpp}}{}
-\end{DoxyCompactList}
diff --git a/docs/doxygen/latex/hierarchy.tex b/docs/doxygen/latex/hierarchy.tex
deleted file mode 100644
index 01c2aa7..0000000
--- a/docs/doxygen/latex/hierarchy.tex
+++ /dev/null
@@ -1,18 +0,0 @@
-\doxysection{Class Hierarchy}
-This inheritance list is sorted roughly, but not completely, alphabetically\+:\begin{DoxyCompactList}
-\item \contentsline{section}{xb\+::xb\+Schema}{\pageref{structxb_1_1xbSchema}}{}
-\item \contentsline{section}{xb\+::xb\+Ssv}{\pageref{classxb_1_1xbSsv}}{}
-\begin{DoxyCompactList}
-\item \contentsline{section}{xb\+::xb\+Date}{\pageref{classxb_1_1xbDate}}{}
-\item \contentsline{section}{xb\+::xb\+File}{\pageref{classxb_1_1xbFile}}{}
-\begin{DoxyCompactList}
-\item \contentsline{section}{xb\+::xb\+Dbf}{\pageref{classxb_1_1xbDbf}}{}
-\end{DoxyCompactList}
-\item \contentsline{section}{xb\+::xb\+Tbl\+Mgr}{\pageref{classxb_1_1xbTblMgr}}{}
-\begin{DoxyCompactList}
-\item \contentsline{section}{xb\+::xb\+XBase}{\pageref{classxb_1_1xbXBase}}{}
-\end{DoxyCompactList}
-\end{DoxyCompactList}
-\item \contentsline{section}{xb\+::xb\+String}{\pageref{classxb_1_1xbString}}{}
-\item \contentsline{section}{xb\+::xb\+Tbl\+List}{\pageref{structxb_1_1xbTblList}}{}
-\end{DoxyCompactList}
diff --git a/docs/doxygen/latex/refman.tex b/docs/doxygen/latex/refman.tex
deleted file mode 100644
index 541e8e0..0000000
--- a/docs/doxygen/latex/refman.tex
+++ /dev/null
@@ -1,336 +0,0 @@
- % Handle batch mode
- % to overcome problems with too many open files
- \let\mypdfximage\pdfximage\def\pdfximage{\immediate\mypdfximage}
- % Set document class depending on configuration
- \documentclass[twoside]{book}
- %% moved from doxygen.sty due to workaround for LaTex 2019 version and unmaintained tabu package
- \usepackage{ifthen}
- \ifx\requestedLaTeXdate\undefined
- \usepackage{array}
- \else
- \usepackage{array}[=2016-10-06]
- \fi
- %%
- % Packages required by doxygen
- \usepackage{fixltx2e} % for \textsubscript
- \usepackage{doxygen}
- \usepackage{graphicx}
- \usepackage[utf8]{inputenc}
- \usepackage{makeidx}
- \PassOptionsToPackage{warn}{textcomp}
- \usepackage{textcomp}
- \usepackage[nointegrals]{wasysym}
- \usepackage{ifxetex}
- % NLS support packages
- % Define default fonts
- % Font selection
- \usepackage[T1]{fontenc}
- % set main and monospaced font
- \usepackage[scaled=.90]{helvet}
-\usepackage{courier}
-\renewcommand{\familydefault}{\sfdefault}
- \usepackage{sectsty}
- \allsectionsfont{%
- \fontseries{bc}\selectfont%
- \color{darkgray}%
- }
- \renewcommand{\DoxyLabelFont}{%
- \fontseries{bc}\selectfont%
- \color{darkgray}%
- }
- \newcommand{\+}{\discretionary{\mbox{\scriptsize$\hookleftarrow$}}{}{}}
- % Arguments of doxygenemoji:
- % 1) ':<text>:' form of the emoji, already LaTeX-escaped
- % 2) file with the name of the emoji without the .png extension
- % in case image exist use this otherwise use the ':<text>:' form
- \newcommand{\doxygenemoji}[2]{%
- \IfFileExists{./#2.png}{\raisebox{-0.1em}{\includegraphics[height=0.9em]{./#2.png}}}{#1}%
- }
- % Page & text layout
- \usepackage{geometry}
- \geometry{%
- a4paper,%
- top=2.5cm,%
- bottom=2.5cm,%
- left=2.5cm,%
- right=2.5cm%
- }
- % Allow a bit of overflow to go unnoticed by other means
- \tolerance=750
- \hfuzz=15pt
- \hbadness=750
- \setlength{\emergencystretch}{15pt}
- \setlength{\parindent}{0cm}
- \newcommand{\doxynormalparskip}{\setlength{\parskip}{3ex plus 2ex minus 2ex}}
- \newcommand{\doxytocparskip}{\setlength{\parskip}{1ex plus 0ex minus 0ex}}
- \doxynormalparskip
- % Redefine paragraph/subparagraph environments, using sectsty fonts
- \makeatletter
- \renewcommand{\paragraph}{%
- \@startsection{paragraph}{4}{0ex}{-1.0ex}{1.0ex}{%
- \normalfont\normalsize\bfseries\SS@parafont%
- }%
- }
- \renewcommand{\subparagraph}{%
- \@startsection{subparagraph}{5}{0ex}{-1.0ex}{1.0ex}{%
- \normalfont\normalsize\bfseries\SS@subparafont%
- }%
- }
- \makeatother
- \makeatletter
- \newcommand\hrulefilll{\leavevmode\leaders\hrule\hskip 0pt plus 1filll\kern\z@}
- \makeatother
- % Headers & footers
- \usepackage{fancyhdr}
- \pagestyle{fancyplain}
- \renewcommand{\footrulewidth}{0.4pt}
- \fancypagestyle{fancyplain}{
- \fancyhf{}
- \fancyhead[LE, RO]{\bfseries\thepage}
- \fancyhead[LO]{\bfseries\rightmark}
- \fancyhead[RE]{\bfseries\leftmark}
- \fancyfoot[LO, RE]{\bfseries\scriptsize Generated by Doxygen }
- }
- \fancypagestyle{plain}{
- \fancyhf{}
- \fancyfoot[LO, RE]{\bfseries\scriptsize Generated by Doxygen }
- \renewcommand{\headrulewidth}{0pt}
- }
- \pagestyle{fancyplain}
- \renewcommand{\chaptermark}[1]{%
- \markboth{#1}{}%
- }
- \renewcommand{\sectionmark}[1]{%
- \markright{\thesection\ #1}%
- }
- % ToC, LoF, LoT, bibliography, and index
- % Indices & bibliography
- \usepackage{natbib}
- \usepackage[titles]{tocloft}
- \setcounter{tocdepth}{3}
- \setcounter{secnumdepth}{5}
- % creating indexes
- \makeindex
- \usepackage{newunicodechar}
- \newunicodechar{⁻}{${}^{-}$}% Superscript minus
- \newunicodechar{²}{${}^{2}$}% Superscript two
- \newunicodechar{³}{${}^{3}$}% Superscript three
- % Hyperlinks
- % Hyperlinks (required, but should be loaded last)
- \ifpdf
- \usepackage[pdftex,pagebackref=true]{hyperref}
- \else
- \ifxetex
- \usepackage[pagebackref=true]{hyperref}
- \else
- \usepackage[ps2pdf,pagebackref=true]{hyperref}
- \fi
- \fi
- \hypersetup{%
- colorlinks=true,%
- linkcolor=blue,%
- citecolor=blue,%
- unicode,%
- pdftitle=Xbase64,%
- pdfsubject=C++ Library for handling Xbase (\+DBF) format type files%
- }
- % Custom commands used by the header
- % Custom commands
- \newcommand{\clearemptydoublepage}{%
- \newpage{\pagestyle{empty}\cleardoublepage}%
- }
- % caption style definition
- \usepackage{caption}
- \captionsetup{labelsep=space,justification=centering,font={bf},singlelinecheck=off,skip=4pt,position=top}
- % in page table of contents
- \usepackage{etoc}
- \etocsettocstyle{\doxytocparskip}{\doxynormalparskip}
- % prevent numbers overlap the titles in toc
- \renewcommand{\numberline}[1]{#1~}
-% End of preamble, now comes the document contents
-%===== C O N T E N T S =====
-\begin{document}
- \raggedbottom
- % Titlepage & ToC
- % To avoid duplicate page anchors due to reuse of same numbers for
- % the index (be it as roman numbers)
- \hypersetup{pageanchor=false,
- bookmarksnumbered=true,
- pdfencoding=unicode
- }
- \pagenumbering{alph}
- \begin{titlepage}
- \vspace*{7cm}
- \begin{center}%
- {\Large Xbase64}\\
- \vspace*{1cm}
- {\large Generated by Doxygen 1.9.3}\\
- \end{center}
- \end{titlepage}
- \clearemptydoublepage
- \pagenumbering{roman}
- \tableofcontents
- \clearemptydoublepage
- \pagenumbering{arabic}
- % re-enable anchors again
- \hypersetup{pageanchor=true}
-%--- Begin generated contents ---
-\chapter{Namespace Index}
-\input{namespaces}
-\chapter{Hierarchical Index}
-\input{hierarchy}
-\chapter{Data Structure Index}
-\input{annotated}
-\chapter{File Index}
-\input{files}
-\chapter{Namespace Documentation}
-\input{namespacexb}
-\chapter{Data Structure Documentation}
-\input{classxb_1_1xbDate}
-\input{classxb_1_1xbDbf}
-\input{classxb_1_1xbFile}
-\input{structxb_1_1xbSchema}
-\input{classxb_1_1xbSsv}
-\input{classxb_1_1xbString}
-\input{structxb_1_1xbTblList}
-\input{classxb_1_1xbTblMgr}
-\input{classxb_1_1xbXBase}
-\chapter{File Documentation}
-\input{xbbcd_8cpp}
-\input{xbblockread_8cpp}
-\input{xbdate_8cpp}
-\input{xbdbf_8cpp}
-\input{xbdbf3_8cpp}
-\input{xbdbf4_8cpp}
-\input{xbexp_8cpp}
-\input{xbexpnode_8cpp}
-\input{xbfields_8cpp}
-\input{xbfile_8cpp}
-\input{xbfilter_8cpp}
-\input{xbfuncs_8cpp}
-\input{xbixbase_8cpp}
-\input{xbixmdx_8cpp}
-\input{xbixndx_8cpp}
-\input{xblog_8cpp}
-\input{xbmemo_8cpp}
-\input{xbmemo3_8cpp}
-\input{xbmemo4_8cpp}
-\input{xbssv_8cpp}
-\input{xbstring_8cpp}
-\input{xbtag_8cpp}
-\input{xbtblmgr_8cpp}
-\input{xbuda_8cpp}
-\input{xbxbase_8cpp}
-\input{xb__ex__date_8cpp}
-\input{xb__ex__expression_8cpp}
-\input{xb__ex__sql_8cpp}
-\input{xb__ex__ssv_8cpp}
-\input{xb__ex__string_8cpp}
-\input{xb__ex__v3__create__dbf_8cpp}
-\input{xb__ex__v3__upd__dbf_8cpp}
-\input{xb__ex__v4__create__dbf_8cpp}
-\input{xb__ex__v4__upd__dbf_8cpp}
-\input{xbase_8h}
-\input{xbase_8h_source}
-\input{xbbcd_8h}
-\input{xbbcd_8h_source}
-\input{xbblkread_8h}
-\input{xbblkread_8h_source}
-\input{xbdate_8h}
-\input{xbdate_8h_source}
-\input{xbdbf_8h}
-\input{xbdbf_8h_source}
-\input{xbexp_8h}
-\input{xbexp_8h_source}
-\input{xbexpnode_8h}
-\input{xbexpnode_8h_source}
-\input{xbfile_8h}
-\input{xbfile_8h_source}
-\input{xbfilter_8h}
-\input{xbfilter_8h_source}
-\input{xbindex_8h}
-\input{xbindex_8h_source}
-\input{xblnklst_8h}
-\input{xblnklst_8h_source}
-\input{xblnklstord_8h}
-\input{xblnklstord_8h_source}
-\input{xblnknod_8h}
-\input{xblnknod_8h_source}
-\input{xblog_8h}
-\input{xblog_8h_source}
-\input{xbmemo_8h}
-\input{xbmemo_8h_source}
-\input{xbretcod_8h}
-\input{xbretcod_8h_source}
-\input{xbsql_8h}
-\input{xbsql_8h_source}
-\input{xbssv_8h}
-\input{xbssv_8h_source}
-\input{xbstring_8h}
-\input{xbstring_8h_source}
-\input{xbtag_8h}
-\input{xbtag_8h_source}
-\input{xbtblmgr_8h}
-\input{xbtblmgr_8h_source}
-\input{xbtypes_8h}
-\input{xbtypes_8h_source}
-\input{xbuda_8h}
-\input{xbuda_8h_source}
-\input{xbxbase_8h}
-\input{xbxbase_8h_source}
-\input{xbalttbl_8cpp}
-\input{xbcrix_8cpp}
-\input{xbcrtbl_8cpp}
-\input{xbcrtbl_8save_8cpp}
-\input{xbdelete_8cpp}
-\input{xbdrpix_8cpp}
-\input{xbdrptbl_8cpp}
-\input{xbinsert_8cpp}
-\input{xbselect_8cpp}
-\input{xbset_8cpp}
-\input{xbsql_8cpp}
-\input{xbstmt_8cpp}
-\input{tstfuncs_8cpp}
-\input{xb__test__bcd_8cpp}
-\input{xb__test__blockread_8cpp}
-\input{xb__test__date_8cpp}
-\input{xb__test__dbf__v3__memos_8cpp}
-\input{xb__test__dbf__v3__nomemos_8cpp}
-\input{xb__test__dbf__v4__memos_8cpp}
-\input{xb__test__dbf__v4__nomemos_8cpp}
-\input{xb__test__expnode_8cpp}
-\input{xb__test__expression_8cpp}
-\input{xb__test__file_8cpp}
-\input{xb__test__filter_8cpp}
-\input{xb__test__funcs_8cpp}
-\input{xb__test__linklist_8cpp}
-\input{xb__test__lock_8cpp}
-\input{xb__test__lock2_8cpp}
-\input{xb__test__log_8cpp}
-\input{xb__test__mdx_8cpp}
-\input{xb__test__ndx_8cpp}
-\input{xb__test__sql_8cpp}
-\input{xb__test__string_8cpp}
-\input{xb__test__tblmgr_8cpp}
-\input{xb__test__uda_8cpp}
-\input{xb__test__xbase_8cpp}
-\input{xb__cfg__check_8cpp}
-\input{xb__copydbf_8cpp}
-\input{xb__dbfutil_8cpp}
-\input{xb__deletall_8cpp}
-\input{xb__dumpdbt_8cpp}
-\input{xb__dumprecs_8cpp}
-\input{xb__execsql_8cpp}
-\input{xb__pack_8cpp}
-\input{xb__tblinfo_8cpp}
-\input{xb__undelall_8cpp}
-%--- End generated contents ---
-% Index
- \backmatter
- \newpage
- \phantomsection
- \clearemptydoublepage
- \addcontentsline{toc}{chapter}{\indexname}
- \printindex
-% Required for some languages (in combination with latexdocumentpre from the header)
-\end{document}
diff --git a/docs/doxygen/latex/structxb_1_1xbSchema.tex b/docs/doxygen/latex/structxb_1_1xbSchema.tex
deleted file mode 100644
index dd920fc..0000000
--- a/docs/doxygen/latex/structxb_1_1xbSchema.tex
+++ /dev/null
@@ -1,77 +0,0 @@
-\hypertarget{structxb_1_1xbSchema}{}\doxysection{xb\+::xb\+Schema Struct Reference}
-\label{structxb_1_1xbSchema}\index{xb::xbSchema@{xb::xbSchema}}
-
-
-Schema used for defining tables with Create\+Table methods.
-
-
-
-
-{\ttfamily \#include $<$xbdbf.\+h$>$}
-
-\doxysubsection*{Data Fields}
-\begin{DoxyCompactItemize}
-\item
-char \mbox{\hyperlink{structxb_1_1xbSchema_a514183856094123fd37df67885b4681e}{c\+Field\+Name}} \mbox{[}11\mbox{]}
-\item
-char \mbox{\hyperlink{structxb_1_1xbSchema_a1d612b2ed5dc0b0289c9e91b3cda3a25}{c\+Type}}
-\item
-xb\+Int16 \mbox{\hyperlink{structxb_1_1xbSchema_a2da554af25ef628acf59bb52996056ac}{i\+Field\+Len}}
-\item
-xb\+Int16 \mbox{\hyperlink{structxb_1_1xbSchema_a55bab3bb69dee3508d168c93e182d4b9}{i\+No\+Of\+Decs}}
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Detailed Description}
-Schema used for defining tables with Create\+Table methods.
-
-See program \mbox{\hyperlink{xb__ex__v3__create__dbf_8cpp}{xb\+\_\+ex\+\_\+v3\+\_\+create\+\_\+dbf.\+cpp}} or \mbox{\hyperlink{xb__ex__v4__create__dbf_8cpp}{xb\+\_\+ex\+\_\+v4\+\_\+create\+\_\+dbf.\+cpp}} as examples on how to use.
-
-
-\begin{DoxyCode}{0}
-\DoxyCodeLine{xbSchema MyRecord[] = \{}
-\DoxyCodeLine{\textcolor{comment}{// FieldName, Type, Len, Dec}}
-\DoxyCodeLine{ \{ \textcolor{stringliteral}{"{}FIRSTNAME"{}}, \mbox{\hyperlink{xbdbf_8h_a20f739b9d9dc6a002a246a999e76aeaa}{XB\_CHAR\_FLD}}, 15, 0 \},}
-\DoxyCodeLine{ \{ \textcolor{stringliteral}{"{}LASTNAME"{}}, \mbox{\hyperlink{xbdbf_8h_a20f739b9d9dc6a002a246a999e76aeaa}{XB\_CHAR\_FLD}}, 20, 0 \},}
-\DoxyCodeLine{ \{ \textcolor{stringliteral}{"{}BIRTHDATE"{}}, \mbox{\hyperlink{xbdbf_8h_a7f685e6f5fe804b2174725a27ce73adc}{XB\_DATE\_FLD}}, 8, 0 \},}
-\DoxyCodeLine{ \{ \textcolor{stringliteral}{"{}AMOUNT"{}}, \mbox{\hyperlink{xbdbf_8h_ae9fb6d69cc5edc94d36ae403c22ec1c6}{XB\_NUMERIC\_FLD}}, 9, 2 \},}
-\DoxyCodeLine{ \{ \textcolor{stringliteral}{"{}RETIRED?"{}}, \mbox{\hyperlink{xbdbf_8h_a2f6d5073af761bc1a806a2c7b1c1d886}{XB\_LOGICAL\_FLD}}, 1, 0 \},}
-\DoxyCodeLine{ \{ \textcolor{stringliteral}{"{}ZIPCODE"{}}, \mbox{\hyperlink{xbdbf_8h_ae9fb6d69cc5edc94d36ae403c22ec1c6}{XB\_NUMERIC\_FLD}}, 5, 0 \},}
-\DoxyCodeLine{ \{ \textcolor{stringliteral}{"{}NUMFLD1"{}}, \mbox{\hyperlink{xbdbf_8h_a96ab4218d70ab603b4866354ce8c18cd}{XB\_FLOAT\_FLD}}, 12, 2 \},}
-\DoxyCodeLine{ \{ \textcolor{stringliteral}{"{}NUMFLD2"{}}, \mbox{\hyperlink{xbdbf_8h_a96ab4218d70ab603b4866354ce8c18cd}{XB\_FLOAT\_FLD}}, 14, 2 \},}
-\DoxyCodeLine{ \{ \textcolor{stringliteral}{"{}MEMO1"{}}, \mbox{\hyperlink{xbdbf_8h_a23fa19b19cb43bd6dcc59a5a3f6c30ad}{XB\_MEMO\_FLD}}, 10, 0 \},}
-\DoxyCodeLine{ \{ \textcolor{stringliteral}{"{}"{}},0,0,0 \}\};}
-
-\end{DoxyCode}
-
-
-\doxysubsection{Field Documentation}
-\mbox{\Hypertarget{structxb_1_1xbSchema_a514183856094123fd37df67885b4681e}\label{structxb_1_1xbSchema_a514183856094123fd37df67885b4681e}}
-\index{xb::xbSchema@{xb::xbSchema}!cFieldName@{cFieldName}}
-\index{cFieldName@{cFieldName}!xb::xbSchema@{xb::xbSchema}}
-\doxysubsubsection{\texorpdfstring{cFieldName}{cFieldName}}
-{\footnotesize\ttfamily char xb\+::xb\+Schema\+::c\+Field\+Name\mbox{[}11\mbox{]}}
-
-\mbox{\Hypertarget{structxb_1_1xbSchema_a1d612b2ed5dc0b0289c9e91b3cda3a25}\label{structxb_1_1xbSchema_a1d612b2ed5dc0b0289c9e91b3cda3a25}}
-\index{xb::xbSchema@{xb::xbSchema}!cType@{cType}}
-\index{cType@{cType}!xb::xbSchema@{xb::xbSchema}}
-\doxysubsubsection{\texorpdfstring{cType}{cType}}
-{\footnotesize\ttfamily char xb\+::xb\+Schema\+::c\+Type}
-
-\mbox{\Hypertarget{structxb_1_1xbSchema_a2da554af25ef628acf59bb52996056ac}\label{structxb_1_1xbSchema_a2da554af25ef628acf59bb52996056ac}}
-\index{xb::xbSchema@{xb::xbSchema}!iFieldLen@{iFieldLen}}
-\index{iFieldLen@{iFieldLen}!xb::xbSchema@{xb::xbSchema}}
-\doxysubsubsection{\texorpdfstring{iFieldLen}{iFieldLen}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Schema\+::i\+Field\+Len}
-
-\mbox{\Hypertarget{structxb_1_1xbSchema_a55bab3bb69dee3508d168c93e182d4b9}\label{structxb_1_1xbSchema_a55bab3bb69dee3508d168c93e182d4b9}}
-\index{xb::xbSchema@{xb::xbSchema}!iNoOfDecs@{iNoOfDecs}}
-\index{iNoOfDecs@{iNoOfDecs}!xb::xbSchema@{xb::xbSchema}}
-\doxysubsubsection{\texorpdfstring{iNoOfDecs}{iNoOfDecs}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Schema\+::i\+No\+Of\+Decs}
-
-
-
-The documentation for this struct was generated from the following file\+:\begin{DoxyCompactItemize}
-\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbdbf_8h}{xbdbf.\+h}}\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/structxb_1_1xbTblList.tex b/docs/doxygen/latex/structxb_1_1xbTblList.tex
deleted file mode 100644
index 795d36e..0000000
--- a/docs/doxygen/latex/structxb_1_1xbTblList.tex
+++ /dev/null
@@ -1,57 +0,0 @@
-\hypertarget{structxb_1_1xbTblList}{}\doxysection{xb\+::xb\+Tbl\+List Struct Reference}
-\label{structxb_1_1xbTblList}\index{xb::xbTblList@{xb::xbTblList}}
-
-
-{\ttfamily \#include $<$xbtblmgr.\+h$>$}
-
-\doxysubsection*{Data Fields}
-\begin{DoxyCompactItemize}
-\item
-\mbox{\hyperlink{structxb_1_1xbTblList}{xb\+Tbl\+List}} $\ast$ \mbox{\hyperlink{structxb_1_1xbTblList_a3fd169fcf0fd4df927544e5342db583c}{p\+Next}}
-\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} $\ast$ \mbox{\hyperlink{structxb_1_1xbTblList_aceec65f6f6b585788cf98e8dabd2737d}{ps\+Fq\+Tbl\+Name}}
-\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} $\ast$ \mbox{\hyperlink{structxb_1_1xbTblList_a02c3b0c47fd104ef9758b375ecdcfd0f}{ps\+Tbl\+Name}}
-\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} $\ast$ \mbox{\hyperlink{structxb_1_1xbTblList_ac87742c8a6b1cf2e7e35218e96966a05}{ps\+Tbl\+Alias}}
-\item
-\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$ \mbox{\hyperlink{structxb_1_1xbTblList_a387d3f6bbf291a1fb96d276ed9bb96b6}{p\+Dbf}}
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Field Documentation}
-\mbox{\Hypertarget{structxb_1_1xbTblList_a387d3f6bbf291a1fb96d276ed9bb96b6}\label{structxb_1_1xbTblList_a387d3f6bbf291a1fb96d276ed9bb96b6}}
-\index{xb::xbTblList@{xb::xbTblList}!pDbf@{pDbf}}
-\index{pDbf@{pDbf}!xb::xbTblList@{xb::xbTblList}}
-\doxysubsubsection{\texorpdfstring{pDbf}{pDbf}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}}$\ast$ xb\+::xb\+Tbl\+List\+::p\+Dbf}
-
-\mbox{\Hypertarget{structxb_1_1xbTblList_a3fd169fcf0fd4df927544e5342db583c}\label{structxb_1_1xbTblList_a3fd169fcf0fd4df927544e5342db583c}}
-\index{xb::xbTblList@{xb::xbTblList}!pNext@{pNext}}
-\index{pNext@{pNext}!xb::xbTblList@{xb::xbTblList}}
-\doxysubsubsection{\texorpdfstring{pNext}{pNext}}
-{\footnotesize\ttfamily \mbox{\hyperlink{structxb_1_1xbTblList}{xb\+Tbl\+List}}$\ast$ xb\+::xb\+Tbl\+List\+::p\+Next}
-
-\mbox{\Hypertarget{structxb_1_1xbTblList_aceec65f6f6b585788cf98e8dabd2737d}\label{structxb_1_1xbTblList_aceec65f6f6b585788cf98e8dabd2737d}}
-\index{xb::xbTblList@{xb::xbTblList}!psFqTblName@{psFqTblName}}
-\index{psFqTblName@{psFqTblName}!xb::xbTblList@{xb::xbTblList}}
-\doxysubsubsection{\texorpdfstring{psFqTblName}{psFqTblName}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}}$\ast$ xb\+::xb\+Tbl\+List\+::ps\+Fq\+Tbl\+Name}
-
-\mbox{\Hypertarget{structxb_1_1xbTblList_ac87742c8a6b1cf2e7e35218e96966a05}\label{structxb_1_1xbTblList_ac87742c8a6b1cf2e7e35218e96966a05}}
-\index{xb::xbTblList@{xb::xbTblList}!psTblAlias@{psTblAlias}}
-\index{psTblAlias@{psTblAlias}!xb::xbTblList@{xb::xbTblList}}
-\doxysubsubsection{\texorpdfstring{psTblAlias}{psTblAlias}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}}$\ast$ xb\+::xb\+Tbl\+List\+::ps\+Tbl\+Alias}
-
-\mbox{\Hypertarget{structxb_1_1xbTblList_a02c3b0c47fd104ef9758b375ecdcfd0f}\label{structxb_1_1xbTblList_a02c3b0c47fd104ef9758b375ecdcfd0f}}
-\index{xb::xbTblList@{xb::xbTblList}!psTblName@{psTblName}}
-\index{psTblName@{psTblName}!xb::xbTblList@{xb::xbTblList}}
-\doxysubsubsection{\texorpdfstring{psTblName}{psTblName}}
-{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}}$\ast$ xb\+::xb\+Tbl\+List\+::ps\+Tbl\+Name}
-
-
-
-The documentation for this struct was generated from the following file\+:\begin{DoxyCompactItemize}
-\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbtblmgr_8h}{xbtblmgr.\+h}}\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/tstfuncs_8cpp.tex b/docs/doxygen/latex/tstfuncs_8cpp.tex
deleted file mode 100644
index 276c1fe..0000000
--- a/docs/doxygen/latex/tstfuncs_8cpp.tex
+++ /dev/null
@@ -1,118 +0,0 @@
-\hypertarget{tstfuncs_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/tests/tstfuncs.cpp File Reference}
-\label{tstfuncs_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/tstfuncs.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/tstfuncs.cpp}}
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-xb\+Double \mbox{\hyperlink{tstfuncs_8cpp_af990eed1e43605771a5810196b4043f7}{Chron\+Time}} ()
-\item
-void \mbox{\hyperlink{tstfuncs_8cpp_ab1f17da15e67a8b2460d5a88b7a3db6e}{Init\+Time}} ()
-\item
-xb\+Bool \mbox{\hyperlink{tstfuncs_8cpp_a8b8e417213c57f2ea0bcb61a7fb28860}{dbl\+Equals}} (xb\+Double a, xb\+Double b, xb\+Double epsilon)
-\item
-xb\+Int16 \mbox{\hyperlink{tstfuncs_8cpp_a265547b80a3aef5836952bede5288e2c}{Test\+Method}} (xb\+Int16 Print\+Option, const char $\ast$title, const xb\+String \&result, const char $\ast$expected\+Result, size\+\_\+t expected\+Len)
-\item
-xb\+Int16 \mbox{\hyperlink{tstfuncs_8cpp_a9c27703ef863c9d29680844fc5124953}{Test\+Method}} (xb\+Int16 Print\+Option, const char $\ast$title, char result, char expected\+Result)
-\item
-xb\+Int16 \mbox{\hyperlink{tstfuncs_8cpp_ae6536e920580382389126d5f66655f90}{Test\+Method}} (xb\+Int16 Print\+Option, const char $\ast$title, xb\+Int32 result, xb\+Int32 expected\+Result)
-\item
-xb\+Int16 \mbox{\hyperlink{tstfuncs_8cpp_a000fca67bc0fffea3d3da7a5317a06e4}{Test\+Method}} (xb\+Int16 Print\+Option, const char $\ast$title, xb\+UInt64 result, xb\+UInt64 expected\+Result)
-\item
-xb\+Int16 \mbox{\hyperlink{tstfuncs_8cpp_a663f3dd7bd8574a35c1b1b9a22081c6d}{Test\+Method}} (xb\+Int16 Print\+Option, const char $\ast$title, xb\+Float result, xb\+Float expected\+Result)
-\item
-xb\+Int16 \mbox{\hyperlink{tstfuncs_8cpp_af1c78fb72bcd39eb86f11aa2887fe62c}{Test\+Method}} (xb\+Int16 Print\+Option, const char $\ast$title, xb\+Double result, xb\+Double expected\+Result)
-\item
-xb\+Int16 \mbox{\hyperlink{tstfuncs_8cpp_ac64a0bed74ba10b638456709f128f893}{Test\+Method}} (xb\+Int16 Print\+Option, const char $\ast$title, xb\+Double result, xb\+Double expected\+Result, xb\+Double d\+Epsilon)
-\item
-xb\+Double \mbox{\hyperlink{tstfuncs_8cpp_a69a6e718e066af7f8392e5f1fea40d1b}{dbl\+Max}} (xb\+Double a, xb\+Double b)
-\item
-xb\+Double \mbox{\hyperlink{tstfuncs_8cpp_a4d7b8f3f1ce52c6c0a281f25419f4c93}{dbl\+Min}} (xb\+Double a, xb\+Double b)
-\end{DoxyCompactItemize}
-\doxysubsection*{Variables}
-\begin{DoxyCompactItemize}
-\item
-time\+\_\+t \mbox{\hyperlink{tstfuncs_8cpp_ae2281da6157495d69406c35f69a61f9f}{timer}}
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{tstfuncs_8cpp_af990eed1e43605771a5810196b4043f7}\label{tstfuncs_8cpp_af990eed1e43605771a5810196b4043f7}}
-\index{tstfuncs.cpp@{tstfuncs.cpp}!ChronTime@{ChronTime}}
-\index{ChronTime@{ChronTime}!tstfuncs.cpp@{tstfuncs.cpp}}
-\doxysubsubsection{\texorpdfstring{ChronTime()}{ChronTime()}}
-{\footnotesize\ttfamily xb\+Double Chron\+Time (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{tstfuncs_8cpp_a8b8e417213c57f2ea0bcb61a7fb28860}\label{tstfuncs_8cpp_a8b8e417213c57f2ea0bcb61a7fb28860}}
-\index{tstfuncs.cpp@{tstfuncs.cpp}!dblEquals@{dblEquals}}
-\index{dblEquals@{dblEquals}!tstfuncs.cpp@{tstfuncs.cpp}}
-\doxysubsubsection{\texorpdfstring{dblEquals()}{dblEquals()}}
-{\footnotesize\ttfamily xb\+Bool dbl\+Equals (\begin{DoxyParamCaption}\item[{xb\+Double}]{a, }\item[{xb\+Double}]{b, }\item[{xb\+Double}]{epsilon = {\ttfamily 0.0001} }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{tstfuncs_8cpp_a69a6e718e066af7f8392e5f1fea40d1b}\label{tstfuncs_8cpp_a69a6e718e066af7f8392e5f1fea40d1b}}
-\index{tstfuncs.cpp@{tstfuncs.cpp}!dblMax@{dblMax}}
-\index{dblMax@{dblMax}!tstfuncs.cpp@{tstfuncs.cpp}}
-\doxysubsubsection{\texorpdfstring{dblMax()}{dblMax()}}
-{\footnotesize\ttfamily xb\+Double dbl\+Max (\begin{DoxyParamCaption}\item[{xb\+Double}]{a, }\item[{xb\+Double}]{b }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{tstfuncs_8cpp_a4d7b8f3f1ce52c6c0a281f25419f4c93}\label{tstfuncs_8cpp_a4d7b8f3f1ce52c6c0a281f25419f4c93}}
-\index{tstfuncs.cpp@{tstfuncs.cpp}!dblMin@{dblMin}}
-\index{dblMin@{dblMin}!tstfuncs.cpp@{tstfuncs.cpp}}
-\doxysubsubsection{\texorpdfstring{dblMin()}{dblMin()}}
-{\footnotesize\ttfamily xb\+Double dbl\+Min (\begin{DoxyParamCaption}\item[{xb\+Double}]{a, }\item[{xb\+Double}]{b }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{tstfuncs_8cpp_ab1f17da15e67a8b2460d5a88b7a3db6e}\label{tstfuncs_8cpp_ab1f17da15e67a8b2460d5a88b7a3db6e}}
-\index{tstfuncs.cpp@{tstfuncs.cpp}!InitTime@{InitTime}}
-\index{InitTime@{InitTime}!tstfuncs.cpp@{tstfuncs.cpp}}
-\doxysubsubsection{\texorpdfstring{InitTime()}{InitTime()}}
-{\footnotesize\ttfamily void Init\+Time (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{tstfuncs_8cpp_a9c27703ef863c9d29680844fc5124953}\label{tstfuncs_8cpp_a9c27703ef863c9d29680844fc5124953}}
-\index{tstfuncs.cpp@{tstfuncs.cpp}!TestMethod@{TestMethod}}
-\index{TestMethod@{TestMethod}!tstfuncs.cpp@{tstfuncs.cpp}}
-\doxysubsubsection{\texorpdfstring{TestMethod()}{TestMethod()}\hspace{0.1cm}{\footnotesize\ttfamily [1/7]}}
-{\footnotesize\ttfamily xb\+Int16 Test\+Method (\begin{DoxyParamCaption}\item[{xb\+Int16}]{Print\+Option, }\item[{const char $\ast$}]{title, }\item[{char}]{result, }\item[{char}]{expected\+Result }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{tstfuncs_8cpp_a265547b80a3aef5836952bede5288e2c}\label{tstfuncs_8cpp_a265547b80a3aef5836952bede5288e2c}}
-\index{tstfuncs.cpp@{tstfuncs.cpp}!TestMethod@{TestMethod}}
-\index{TestMethod@{TestMethod}!tstfuncs.cpp@{tstfuncs.cpp}}
-\doxysubsubsection{\texorpdfstring{TestMethod()}{TestMethod()}\hspace{0.1cm}{\footnotesize\ttfamily [2/7]}}
-{\footnotesize\ttfamily xb\+Int16 Test\+Method (\begin{DoxyParamCaption}\item[{xb\+Int16}]{Print\+Option, }\item[{const char $\ast$}]{title, }\item[{const xb\+String \&}]{result, }\item[{const char $\ast$}]{expected\+Result, }\item[{size\+\_\+t}]{expected\+Len }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{tstfuncs_8cpp_af1c78fb72bcd39eb86f11aa2887fe62c}\label{tstfuncs_8cpp_af1c78fb72bcd39eb86f11aa2887fe62c}}
-\index{tstfuncs.cpp@{tstfuncs.cpp}!TestMethod@{TestMethod}}
-\index{TestMethod@{TestMethod}!tstfuncs.cpp@{tstfuncs.cpp}}
-\doxysubsubsection{\texorpdfstring{TestMethod()}{TestMethod()}\hspace{0.1cm}{\footnotesize\ttfamily [3/7]}}
-{\footnotesize\ttfamily xb\+Int16 Test\+Method (\begin{DoxyParamCaption}\item[{xb\+Int16}]{Print\+Option, }\item[{const char $\ast$}]{title, }\item[{xb\+Double}]{result, }\item[{xb\+Double}]{expected\+Result }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{tstfuncs_8cpp_ac64a0bed74ba10b638456709f128f893}\label{tstfuncs_8cpp_ac64a0bed74ba10b638456709f128f893}}
-\index{tstfuncs.cpp@{tstfuncs.cpp}!TestMethod@{TestMethod}}
-\index{TestMethod@{TestMethod}!tstfuncs.cpp@{tstfuncs.cpp}}
-\doxysubsubsection{\texorpdfstring{TestMethod()}{TestMethod()}\hspace{0.1cm}{\footnotesize\ttfamily [4/7]}}
-{\footnotesize\ttfamily xb\+Int16 Test\+Method (\begin{DoxyParamCaption}\item[{xb\+Int16}]{Print\+Option, }\item[{const char $\ast$}]{title, }\item[{xb\+Double}]{result, }\item[{xb\+Double}]{expected\+Result, }\item[{xb\+Double}]{d\+Epsilon }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{tstfuncs_8cpp_a663f3dd7bd8574a35c1b1b9a22081c6d}\label{tstfuncs_8cpp_a663f3dd7bd8574a35c1b1b9a22081c6d}}
-\index{tstfuncs.cpp@{tstfuncs.cpp}!TestMethod@{TestMethod}}
-\index{TestMethod@{TestMethod}!tstfuncs.cpp@{tstfuncs.cpp}}
-\doxysubsubsection{\texorpdfstring{TestMethod()}{TestMethod()}\hspace{0.1cm}{\footnotesize\ttfamily [5/7]}}
-{\footnotesize\ttfamily xb\+Int16 Test\+Method (\begin{DoxyParamCaption}\item[{xb\+Int16}]{Print\+Option, }\item[{const char $\ast$}]{title, }\item[{xb\+Float}]{result, }\item[{xb\+Float}]{expected\+Result }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{tstfuncs_8cpp_ae6536e920580382389126d5f66655f90}\label{tstfuncs_8cpp_ae6536e920580382389126d5f66655f90}}
-\index{tstfuncs.cpp@{tstfuncs.cpp}!TestMethod@{TestMethod}}
-\index{TestMethod@{TestMethod}!tstfuncs.cpp@{tstfuncs.cpp}}
-\doxysubsubsection{\texorpdfstring{TestMethod()}{TestMethod()}\hspace{0.1cm}{\footnotesize\ttfamily [6/7]}}
-{\footnotesize\ttfamily xb\+Int16 Test\+Method (\begin{DoxyParamCaption}\item[{xb\+Int16}]{Print\+Option, }\item[{const char $\ast$}]{title, }\item[{xb\+Int32}]{result, }\item[{xb\+Int32}]{expected\+Result }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{tstfuncs_8cpp_a000fca67bc0fffea3d3da7a5317a06e4}\label{tstfuncs_8cpp_a000fca67bc0fffea3d3da7a5317a06e4}}
-\index{tstfuncs.cpp@{tstfuncs.cpp}!TestMethod@{TestMethod}}
-\index{TestMethod@{TestMethod}!tstfuncs.cpp@{tstfuncs.cpp}}
-\doxysubsubsection{\texorpdfstring{TestMethod()}{TestMethod()}\hspace{0.1cm}{\footnotesize\ttfamily [7/7]}}
-{\footnotesize\ttfamily xb\+Int16 Test\+Method (\begin{DoxyParamCaption}\item[{xb\+Int16}]{Print\+Option, }\item[{const char $\ast$}]{title, }\item[{xb\+UInt64}]{result, }\item[{xb\+UInt64}]{expected\+Result }\end{DoxyParamCaption})}
-
-
-
-\doxysubsection{Variable Documentation}
-\mbox{\Hypertarget{tstfuncs_8cpp_ae2281da6157495d69406c35f69a61f9f}\label{tstfuncs_8cpp_ae2281da6157495d69406c35f69a61f9f}}
-\index{tstfuncs.cpp@{tstfuncs.cpp}!timer@{timer}}
-\index{timer@{timer}!tstfuncs.cpp@{tstfuncs.cpp}}
-\doxysubsubsection{\texorpdfstring{timer}{timer}}
-{\footnotesize\ttfamily time\+\_\+t timer}
-
diff --git a/docs/doxygen/latex/xb__cfg__check_8cpp.tex b/docs/doxygen/latex/xb__cfg__check_8cpp.tex
deleted file mode 100644
index edcc405..0000000
--- a/docs/doxygen/latex/xb__cfg__check_8cpp.tex
+++ /dev/null
@@ -1,19 +0,0 @@
-\hypertarget{xb__cfg__check_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\+\_\+cfg\+\_\+check.cpp File Reference}
-\label{xb__cfg__check_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_cfg\_check.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_cfg\_check.cpp}}
-{\ttfamily \#include $<$stdio.\+h$>$}\newline
-{\ttfamily \#include $<$stdlib.\+h$>$}\newline
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-int \mbox{\hyperlink{xb__cfg__check_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}{main}} ()
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__cfg__check_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}\label{xb__cfg__check_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}}
-\index{xb\_cfg\_check.cpp@{xb\_cfg\_check.cpp}!main@{main}}
-\index{main@{main}!xb\_cfg\_check.cpp@{xb\_cfg\_check.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xb__copydbf_8cpp.tex b/docs/doxygen/latex/xb__copydbf_8cpp.tex
deleted file mode 100644
index da6fb80..0000000
--- a/docs/doxygen/latex/xb__copydbf_8cpp.tex
+++ /dev/null
@@ -1,33 +0,0 @@
-\hypertarget{xb__copydbf_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\+\_\+copydbf.cpp File Reference}
-\label{xb__copydbf_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_copydbf.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_copydbf.cpp}}
-{\ttfamily \#include $<$xbase.\+h$>$}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-void \mbox{\hyperlink{xb__copydbf_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}{Print\+Help}} ()
-\item
-void \mbox{\hyperlink{xb__copydbf_8cpp_a1fae5968f70747445d63f63065fb7ef3}{Print\+Version}} ()
-\item
-int \mbox{\hyperlink{xb__copydbf_8cpp_a0ddf1224851353fc92bfbff6f499fa97}{main}} (int argc, char $\ast$argv\mbox{[}$\,$\mbox{]})
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__copydbf_8cpp_a0ddf1224851353fc92bfbff6f499fa97}\label{xb__copydbf_8cpp_a0ddf1224851353fc92bfbff6f499fa97}}
-\index{xb\_copydbf.cpp@{xb\_copydbf.cpp}!main@{main}}
-\index{main@{main}!xb\_copydbf.cpp@{xb\_copydbf.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{argc, }\item[{char $\ast$}]{argv\mbox{[}$\,$\mbox{]} }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{xb__copydbf_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}\label{xb__copydbf_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}}
-\index{xb\_copydbf.cpp@{xb\_copydbf.cpp}!PrintHelp@{PrintHelp}}
-\index{PrintHelp@{PrintHelp}!xb\_copydbf.cpp@{xb\_copydbf.cpp}}
-\doxysubsubsection{\texorpdfstring{PrintHelp()}{PrintHelp()}}
-{\footnotesize\ttfamily void Print\+Help (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{xb__copydbf_8cpp_a1fae5968f70747445d63f63065fb7ef3}\label{xb__copydbf_8cpp_a1fae5968f70747445d63f63065fb7ef3}}
-\index{xb\_copydbf.cpp@{xb\_copydbf.cpp}!PrintVersion@{PrintVersion}}
-\index{PrintVersion@{PrintVersion}!xb\_copydbf.cpp@{xb\_copydbf.cpp}}
-\doxysubsubsection{\texorpdfstring{PrintVersion()}{PrintVersion()}}
-{\footnotesize\ttfamily void Print\+Version (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xb__dbfutil_8cpp.tex b/docs/doxygen/latex/xb__dbfutil_8cpp.tex
deleted file mode 100644
index a7f0538..0000000
--- a/docs/doxygen/latex/xb__dbfutil_8cpp.tex
+++ /dev/null
@@ -1,33 +0,0 @@
-\hypertarget{xb__dbfutil_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\+\_\+dbfutil.cpp File Reference}
-\label{xb__dbfutil_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_dbfutil.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_dbfutil.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-DOXYOFF void \mbox{\hyperlink{xb__dbfutil_8cpp_a9c55a055e1cd4249c7f47e19dc7ac564}{Print\+Help}} ()
-\item
-void \mbox{\hyperlink{xb__dbfutil_8cpp_a1fae5968f70747445d63f63065fb7ef3}{Print\+Version}} ()
-\item
-int \mbox{\hyperlink{xb__dbfutil_8cpp_a0ddf1224851353fc92bfbff6f499fa97}{main}} (int argc, char $\ast$argv\mbox{[}$\,$\mbox{]})
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__dbfutil_8cpp_a0ddf1224851353fc92bfbff6f499fa97}\label{xb__dbfutil_8cpp_a0ddf1224851353fc92bfbff6f499fa97}}
-\index{xb\_dbfutil.cpp@{xb\_dbfutil.cpp}!main@{main}}
-\index{main@{main}!xb\_dbfutil.cpp@{xb\_dbfutil.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{argc, }\item[{char $\ast$}]{argv\mbox{[}$\,$\mbox{]} }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{xb__dbfutil_8cpp_a9c55a055e1cd4249c7f47e19dc7ac564}\label{xb__dbfutil_8cpp_a9c55a055e1cd4249c7f47e19dc7ac564}}
-\index{xb\_dbfutil.cpp@{xb\_dbfutil.cpp}!PrintHelp@{PrintHelp}}
-\index{PrintHelp@{PrintHelp}!xb\_dbfutil.cpp@{xb\_dbfutil.cpp}}
-\doxysubsubsection{\texorpdfstring{PrintHelp()}{PrintHelp()}}
-{\footnotesize\ttfamily DOXYOFF void Print\+Help (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{xb__dbfutil_8cpp_a1fae5968f70747445d63f63065fb7ef3}\label{xb__dbfutil_8cpp_a1fae5968f70747445d63f63065fb7ef3}}
-\index{xb\_dbfutil.cpp@{xb\_dbfutil.cpp}!PrintVersion@{PrintVersion}}
-\index{PrintVersion@{PrintVersion}!xb\_dbfutil.cpp@{xb\_dbfutil.cpp}}
-\doxysubsubsection{\texorpdfstring{PrintVersion()}{PrintVersion()}}
-{\footnotesize\ttfamily void Print\+Version (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xb__deletall_8cpp.tex b/docs/doxygen/latex/xb__deletall_8cpp.tex
deleted file mode 100644
index fce1850..0000000
--- a/docs/doxygen/latex/xb__deletall_8cpp.tex
+++ /dev/null
@@ -1,33 +0,0 @@
-\hypertarget{xb__deletall_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\+\_\+deletall.cpp File Reference}
-\label{xb__deletall_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_deletall.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_deletall.cpp}}
-{\ttfamily \#include $<$xbase.\+h$>$}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-void \mbox{\hyperlink{xb__deletall_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}{Print\+Help}} ()
-\item
-void \mbox{\hyperlink{xb__deletall_8cpp_a1fae5968f70747445d63f63065fb7ef3}{Print\+Version}} ()
-\item
-int \mbox{\hyperlink{xb__deletall_8cpp_a0ddf1224851353fc92bfbff6f499fa97}{main}} (int argc, char $\ast$argv\mbox{[}$\,$\mbox{]})
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__deletall_8cpp_a0ddf1224851353fc92bfbff6f499fa97}\label{xb__deletall_8cpp_a0ddf1224851353fc92bfbff6f499fa97}}
-\index{xb\_deletall.cpp@{xb\_deletall.cpp}!main@{main}}
-\index{main@{main}!xb\_deletall.cpp@{xb\_deletall.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{argc, }\item[{char $\ast$}]{argv\mbox{[}$\,$\mbox{]} }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{xb__deletall_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}\label{xb__deletall_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}}
-\index{xb\_deletall.cpp@{xb\_deletall.cpp}!PrintHelp@{PrintHelp}}
-\index{PrintHelp@{PrintHelp}!xb\_deletall.cpp@{xb\_deletall.cpp}}
-\doxysubsubsection{\texorpdfstring{PrintHelp()}{PrintHelp()}}
-{\footnotesize\ttfamily void Print\+Help (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{xb__deletall_8cpp_a1fae5968f70747445d63f63065fb7ef3}\label{xb__deletall_8cpp_a1fae5968f70747445d63f63065fb7ef3}}
-\index{xb\_deletall.cpp@{xb\_deletall.cpp}!PrintVersion@{PrintVersion}}
-\index{PrintVersion@{PrintVersion}!xb\_deletall.cpp@{xb\_deletall.cpp}}
-\doxysubsubsection{\texorpdfstring{PrintVersion()}{PrintVersion()}}
-{\footnotesize\ttfamily void Print\+Version (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xb__dumpdbt_8cpp.tex b/docs/doxygen/latex/xb__dumpdbt_8cpp.tex
deleted file mode 100644
index 4d46b1d..0000000
--- a/docs/doxygen/latex/xb__dumpdbt_8cpp.tex
+++ /dev/null
@@ -1,33 +0,0 @@
-\hypertarget{xb__dumpdbt_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\+\_\+dumpdbt.cpp File Reference}
-\label{xb__dumpdbt_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_dumpdbt.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_dumpdbt.cpp}}
-{\ttfamily \#include $<$xbase.\+h$>$}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-void \mbox{\hyperlink{xb__dumpdbt_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}{Print\+Help}} ()
-\item
-void \mbox{\hyperlink{xb__dumpdbt_8cpp_a1fae5968f70747445d63f63065fb7ef3}{Print\+Version}} ()
-\item
-int \mbox{\hyperlink{xb__dumpdbt_8cpp_a0ddf1224851353fc92bfbff6f499fa97}{main}} (int argc, char $\ast$argv\mbox{[}$\,$\mbox{]})
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__dumpdbt_8cpp_a0ddf1224851353fc92bfbff6f499fa97}\label{xb__dumpdbt_8cpp_a0ddf1224851353fc92bfbff6f499fa97}}
-\index{xb\_dumpdbt.cpp@{xb\_dumpdbt.cpp}!main@{main}}
-\index{main@{main}!xb\_dumpdbt.cpp@{xb\_dumpdbt.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{argc, }\item[{char $\ast$}]{argv\mbox{[}$\,$\mbox{]} }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{xb__dumpdbt_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}\label{xb__dumpdbt_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}}
-\index{xb\_dumpdbt.cpp@{xb\_dumpdbt.cpp}!PrintHelp@{PrintHelp}}
-\index{PrintHelp@{PrintHelp}!xb\_dumpdbt.cpp@{xb\_dumpdbt.cpp}}
-\doxysubsubsection{\texorpdfstring{PrintHelp()}{PrintHelp()}}
-{\footnotesize\ttfamily void Print\+Help (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{xb__dumpdbt_8cpp_a1fae5968f70747445d63f63065fb7ef3}\label{xb__dumpdbt_8cpp_a1fae5968f70747445d63f63065fb7ef3}}
-\index{xb\_dumpdbt.cpp@{xb\_dumpdbt.cpp}!PrintVersion@{PrintVersion}}
-\index{PrintVersion@{PrintVersion}!xb\_dumpdbt.cpp@{xb\_dumpdbt.cpp}}
-\doxysubsubsection{\texorpdfstring{PrintVersion()}{PrintVersion()}}
-{\footnotesize\ttfamily void Print\+Version (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xb__dumprecs_8cpp.tex b/docs/doxygen/latex/xb__dumprecs_8cpp.tex
deleted file mode 100644
index a0ef3d8..0000000
--- a/docs/doxygen/latex/xb__dumprecs_8cpp.tex
+++ /dev/null
@@ -1,33 +0,0 @@
-\hypertarget{xb__dumprecs_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\+\_\+dumprecs.cpp File Reference}
-\label{xb__dumprecs_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_dumprecs.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_dumprecs.cpp}}
-{\ttfamily \#include $<$xbase.\+h$>$}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-void \mbox{\hyperlink{xb__dumprecs_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}{Print\+Help}} ()
-\item
-void \mbox{\hyperlink{xb__dumprecs_8cpp_a1fae5968f70747445d63f63065fb7ef3}{Print\+Version}} ()
-\item
-int \mbox{\hyperlink{xb__dumprecs_8cpp_a0ddf1224851353fc92bfbff6f499fa97}{main}} (int argc, char $\ast$argv\mbox{[}$\,$\mbox{]})
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__dumprecs_8cpp_a0ddf1224851353fc92bfbff6f499fa97}\label{xb__dumprecs_8cpp_a0ddf1224851353fc92bfbff6f499fa97}}
-\index{xb\_dumprecs.cpp@{xb\_dumprecs.cpp}!main@{main}}
-\index{main@{main}!xb\_dumprecs.cpp@{xb\_dumprecs.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{argc, }\item[{char $\ast$}]{argv\mbox{[}$\,$\mbox{]} }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{xb__dumprecs_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}\label{xb__dumprecs_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}}
-\index{xb\_dumprecs.cpp@{xb\_dumprecs.cpp}!PrintHelp@{PrintHelp}}
-\index{PrintHelp@{PrintHelp}!xb\_dumprecs.cpp@{xb\_dumprecs.cpp}}
-\doxysubsubsection{\texorpdfstring{PrintHelp()}{PrintHelp()}}
-{\footnotesize\ttfamily void Print\+Help (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{xb__dumprecs_8cpp_a1fae5968f70747445d63f63065fb7ef3}\label{xb__dumprecs_8cpp_a1fae5968f70747445d63f63065fb7ef3}}
-\index{xb\_dumprecs.cpp@{xb\_dumprecs.cpp}!PrintVersion@{PrintVersion}}
-\index{PrintVersion@{PrintVersion}!xb\_dumprecs.cpp@{xb\_dumprecs.cpp}}
-\doxysubsubsection{\texorpdfstring{PrintVersion()}{PrintVersion()}}
-{\footnotesize\ttfamily void Print\+Version (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xb__ex__date_8cpp.tex b/docs/doxygen/latex/xb__ex__date_8cpp.tex
deleted file mode 100644
index ed93914..0000000
--- a/docs/doxygen/latex/xb__ex__date_8cpp.tex
+++ /dev/null
@@ -1,17 +0,0 @@
-\hypertarget{xb__ex__date_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\+\_\+ex\+\_\+date.cpp File Reference}
-\label{xb__ex__date_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\_ex\_date.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\_ex\_date.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-int \mbox{\hyperlink{xb__ex__date_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}{main}} ()
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__ex__date_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}\label{xb__ex__date_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}}
-\index{xb\_ex\_date.cpp@{xb\_ex\_date.cpp}!main@{main}}
-\index{main@{main}!xb\_ex\_date.cpp@{xb\_ex\_date.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xb__ex__expression_8cpp.tex b/docs/doxygen/latex/xb__ex__expression_8cpp.tex
deleted file mode 100644
index 3b0cb70..0000000
--- a/docs/doxygen/latex/xb__ex__expression_8cpp.tex
+++ /dev/null
@@ -1,51 +0,0 @@
-\hypertarget{xb__ex__expression_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\+\_\+ex\+\_\+expression.cpp File Reference}
-\label{xb__ex__expression_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\_ex\_expression.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\_ex\_expression.cpp}}
-{\ttfamily \#include $<$xbase.\+h$>$}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-void \mbox{\hyperlink{xb__ex__expression_8cpp_a3234afc912211aec54c10d363d28cbda}{Print\+Result}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} $\ast$s\+Expression, xb\+Exp $\ast$exp)
-\item
-int \mbox{\hyperlink{xb__ex__expression_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}{main}} ()
-\end{DoxyCompactItemize}
-\doxysubsection*{Variables}
-\begin{DoxyCompactItemize}
-\item
-\mbox{\hyperlink{structxb_1_1xbSchema}{xb\+Schema}} \mbox{\hyperlink{xb__ex__expression_8cpp_a2122b9562802e2fd799b20454000dc99}{My\+V4\+Record}} \mbox{[}$\,$\mbox{]}
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__ex__expression_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}\label{xb__ex__expression_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}}
-\index{xb\_ex\_expression.cpp@{xb\_ex\_expression.cpp}!main@{main}}
-\index{main@{main}!xb\_ex\_expression.cpp@{xb\_ex\_expression.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{xb__ex__expression_8cpp_a3234afc912211aec54c10d363d28cbda}\label{xb__ex__expression_8cpp_a3234afc912211aec54c10d363d28cbda}}
-\index{xb\_ex\_expression.cpp@{xb\_ex\_expression.cpp}!PrintResult@{PrintResult}}
-\index{PrintResult@{PrintResult}!xb\_ex\_expression.cpp@{xb\_ex\_expression.cpp}}
-\doxysubsubsection{\texorpdfstring{PrintResult()}{PrintResult()}}
-{\footnotesize\ttfamily void Print\+Result (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} $\ast$}]{s\+Expression, }\item[{xb\+Exp $\ast$}]{exp }\end{DoxyParamCaption})}
-
-
-
-\doxysubsection{Variable Documentation}
-\mbox{\Hypertarget{xb__ex__expression_8cpp_a2122b9562802e2fd799b20454000dc99}\label{xb__ex__expression_8cpp_a2122b9562802e2fd799b20454000dc99}}
-\index{xb\_ex\_expression.cpp@{xb\_ex\_expression.cpp}!MyV4Record@{MyV4Record}}
-\index{MyV4Record@{MyV4Record}!xb\_ex\_expression.cpp@{xb\_ex\_expression.cpp}}
-\doxysubsubsection{\texorpdfstring{MyV4Record}{MyV4Record}}
-{\footnotesize\ttfamily \mbox{\hyperlink{structxb_1_1xbSchema}{xb\+Schema}} My\+V4\+Record\mbox{[}$\,$\mbox{]}}
-
-{\bfseries Initial value\+:}
-\begin{DoxyCode}{0}
-\DoxyCodeLine{= }
-\DoxyCodeLine{ \{}
-\DoxyCodeLine{ \{ \textcolor{stringliteral}{"{}CFLD1"{}}, \mbox{\hyperlink{xbdbf_8h_a20f739b9d9dc6a002a246a999e76aeaa}{XB\_CHAR\_FLD}}, 20, 0 \},}
-\DoxyCodeLine{ \{ \textcolor{stringliteral}{"{}CFLD2"{}}, \mbox{\hyperlink{xbdbf_8h_a20f739b9d9dc6a002a246a999e76aeaa}{XB\_CHAR\_FLD}}, 10, 0 \},}
-\DoxyCodeLine{ \{ \textcolor{stringliteral}{"{}NFLD1"{}}, \mbox{\hyperlink{xbdbf_8h_ae9fb6d69cc5edc94d36ae403c22ec1c6}{XB\_NUMERIC\_FLD}}, 5, 0 \},}
-\DoxyCodeLine{ \{ \textcolor{stringliteral}{"{}DATE1"{}}, \mbox{\hyperlink{xbdbf_8h_a7f685e6f5fe804b2174725a27ce73adc}{XB\_DATE\_FLD}}, 8, 0 \},}
-\DoxyCodeLine{ \{ \textcolor{stringliteral}{"{}"{}},0,0,0 \}}
-\DoxyCodeLine{ \}}
-
-\end{DoxyCode}
diff --git a/docs/doxygen/latex/xb__ex__sql_8cpp.tex b/docs/doxygen/latex/xb__ex__sql_8cpp.tex
deleted file mode 100644
index 256aedc..0000000
--- a/docs/doxygen/latex/xb__ex__sql_8cpp.tex
+++ /dev/null
@@ -1,17 +0,0 @@
-\hypertarget{xb__ex__sql_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\+\_\+ex\+\_\+sql.cpp File Reference}
-\label{xb__ex__sql_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\_ex\_sql.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\_ex\_sql.cpp}}
-{\ttfamily \#include $<$xbase.\+h$>$}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-int \mbox{\hyperlink{xb__ex__sql_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__ex__sql_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__ex__sql_8cpp_a1470527971db41f828c26074cde7e15a}}
-\index{xb\_ex\_sql.cpp@{xb\_ex\_sql.cpp}!main@{main}}
-\index{main@{main}!xb\_ex\_sql.cpp@{xb\_ex\_sql.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xb__ex__ssv_8cpp.tex b/docs/doxygen/latex/xb__ex__ssv_8cpp.tex
deleted file mode 100644
index badcd47..0000000
--- a/docs/doxygen/latex/xb__ex__ssv_8cpp.tex
+++ /dev/null
@@ -1,17 +0,0 @@
-\hypertarget{xb__ex__ssv_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\+\_\+ex\+\_\+ssv.cpp File Reference}
-\label{xb__ex__ssv_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\_ex\_ssv.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\_ex\_ssv.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-int \mbox{\hyperlink{xb__ex__ssv_8cpp_a0c99d968a34e803d378692bde2e3f18f}{main}} (int ac, char $\ast$$\ast$av)
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__ex__ssv_8cpp_a0c99d968a34e803d378692bde2e3f18f}\label{xb__ex__ssv_8cpp_a0c99d968a34e803d378692bde2e3f18f}}
-\index{xb\_ex\_ssv.cpp@{xb\_ex\_ssv.cpp}!main@{main}}
-\index{main@{main}!xb\_ex\_ssv.cpp@{xb\_ex\_ssv.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{ac, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xb__ex__string_8cpp.tex b/docs/doxygen/latex/xb__ex__string_8cpp.tex
deleted file mode 100644
index d6d7d33..0000000
--- a/docs/doxygen/latex/xb__ex__string_8cpp.tex
+++ /dev/null
@@ -1,17 +0,0 @@
-\hypertarget{xb__ex__string_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\+\_\+ex\+\_\+string.cpp File Reference}
-\label{xb__ex__string_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\_ex\_string.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\_ex\_string.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-int \mbox{\hyperlink{xb__ex__string_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}{main}} ()
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__ex__string_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}\label{xb__ex__string_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}}
-\index{xb\_ex\_string.cpp@{xb\_ex\_string.cpp}!main@{main}}
-\index{main@{main}!xb\_ex\_string.cpp@{xb\_ex\_string.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xb__ex__v3__create__dbf_8cpp.tex b/docs/doxygen/latex/xb__ex__v3__create__dbf_8cpp.tex
deleted file mode 100644
index 0993233..0000000
--- a/docs/doxygen/latex/xb__ex__v3__create__dbf_8cpp.tex
+++ /dev/null
@@ -1,17 +0,0 @@
-\hypertarget{xb__ex__v3__create__dbf_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\+\_\+ex\+\_\+v3\+\_\+create\+\_\+dbf.cpp File Reference}
-\label{xb__ex__v3__create__dbf_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\_ex\_v3\_create\_dbf.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\_ex\_v3\_create\_dbf.cpp}}
-{\ttfamily \#include $<$xbase.\+h$>$}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-int \mbox{\hyperlink{xb__ex__v3__create__dbf_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}{main}} ()
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__ex__v3__create__dbf_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}\label{xb__ex__v3__create__dbf_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}}
-\index{xb\_ex\_v3\_create\_dbf.cpp@{xb\_ex\_v3\_create\_dbf.cpp}!main@{main}}
-\index{main@{main}!xb\_ex\_v3\_create\_dbf.cpp@{xb\_ex\_v3\_create\_dbf.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xb__ex__v3__upd__dbf_8cpp.tex b/docs/doxygen/latex/xb__ex__v3__upd__dbf_8cpp.tex
deleted file mode 100644
index 0018c35..0000000
--- a/docs/doxygen/latex/xb__ex__v3__upd__dbf_8cpp.tex
+++ /dev/null
@@ -1,17 +0,0 @@
-\hypertarget{xb__ex__v3__upd__dbf_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\+\_\+ex\+\_\+v3\+\_\+upd\+\_\+dbf.cpp File Reference}
-\label{xb__ex__v3__upd__dbf_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\_ex\_v3\_upd\_dbf.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\_ex\_v3\_upd\_dbf.cpp}}
-{\ttfamily \#include $<$xbase.\+h$>$}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-int \mbox{\hyperlink{xb__ex__v3__upd__dbf_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}{main}} ()
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__ex__v3__upd__dbf_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}\label{xb__ex__v3__upd__dbf_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}}
-\index{xb\_ex\_v3\_upd\_dbf.cpp@{xb\_ex\_v3\_upd\_dbf.cpp}!main@{main}}
-\index{main@{main}!xb\_ex\_v3\_upd\_dbf.cpp@{xb\_ex\_v3\_upd\_dbf.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xb__ex__v4__create__dbf_8cpp.tex b/docs/doxygen/latex/xb__ex__v4__create__dbf_8cpp.tex
deleted file mode 100644
index 7597cf4..0000000
--- a/docs/doxygen/latex/xb__ex__v4__create__dbf_8cpp.tex
+++ /dev/null
@@ -1,17 +0,0 @@
-\hypertarget{xb__ex__v4__create__dbf_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\+\_\+ex\+\_\+v4\+\_\+create\+\_\+dbf.cpp File Reference}
-\label{xb__ex__v4__create__dbf_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\_ex\_v4\_create\_dbf.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\_ex\_v4\_create\_dbf.cpp}}
-{\ttfamily \#include $<$xbase.\+h$>$}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-int \mbox{\hyperlink{xb__ex__v4__create__dbf_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}{main}} ()
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__ex__v4__create__dbf_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}\label{xb__ex__v4__create__dbf_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}}
-\index{xb\_ex\_v4\_create\_dbf.cpp@{xb\_ex\_v4\_create\_dbf.cpp}!main@{main}}
-\index{main@{main}!xb\_ex\_v4\_create\_dbf.cpp@{xb\_ex\_v4\_create\_dbf.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xb__ex__v4__upd__dbf_8cpp.tex b/docs/doxygen/latex/xb__ex__v4__upd__dbf_8cpp.tex
deleted file mode 100644
index 49c36ab..0000000
--- a/docs/doxygen/latex/xb__ex__v4__upd__dbf_8cpp.tex
+++ /dev/null
@@ -1,17 +0,0 @@
-\hypertarget{xb__ex__v4__upd__dbf_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\+\_\+ex\+\_\+v4\+\_\+upd\+\_\+dbf.cpp File Reference}
-\label{xb__ex__v4__upd__dbf_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\_ex\_v4\_upd\_dbf.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\_ex\_v4\_upd\_dbf.cpp}}
-{\ttfamily \#include $<$xbase.\+h$>$}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-int \mbox{\hyperlink{xb__ex__v4__upd__dbf_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}{main}} ()
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__ex__v4__upd__dbf_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}\label{xb__ex__v4__upd__dbf_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}}
-\index{xb\_ex\_v4\_upd\_dbf.cpp@{xb\_ex\_v4\_upd\_dbf.cpp}!main@{main}}
-\index{main@{main}!xb\_ex\_v4\_upd\_dbf.cpp@{xb\_ex\_v4\_upd\_dbf.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xb__execsql_8cpp.tex b/docs/doxygen/latex/xb__execsql_8cpp.tex
deleted file mode 100644
index 370198d..0000000
--- a/docs/doxygen/latex/xb__execsql_8cpp.tex
+++ /dev/null
@@ -1,25 +0,0 @@
-\hypertarget{xb__execsql_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\+\_\+execsql.cpp File Reference}
-\label{xb__execsql_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_execsql.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_execsql.cpp}}
-{\ttfamily \#include $<$xbase.\+h$>$}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-xb\+Int16 \mbox{\hyperlink{xb__execsql_8cpp_af888ba5e7e94d92c2165362b87f1ea0e}{Get\+Next\+Sql\+Cmd}} (\mbox{\hyperlink{classxb_1_1xbFile}{xb\+File}} \&f, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Cmd)
-\item
-int \mbox{\hyperlink{xb__execsql_8cpp_a0c99d968a34e803d378692bde2e3f18f}{main}} (int ac, char $\ast$$\ast$av)
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__execsql_8cpp_af888ba5e7e94d92c2165362b87f1ea0e}\label{xb__execsql_8cpp_af888ba5e7e94d92c2165362b87f1ea0e}}
-\index{xb\_execsql.cpp@{xb\_execsql.cpp}!GetNextSqlCmd@{GetNextSqlCmd}}
-\index{GetNextSqlCmd@{GetNextSqlCmd}!xb\_execsql.cpp@{xb\_execsql.cpp}}
-\doxysubsubsection{\texorpdfstring{GetNextSqlCmd()}{GetNextSqlCmd()}}
-{\footnotesize\ttfamily xb\+Int16 Get\+Next\+Sql\+Cmd (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbFile}{xb\+File}} \&}]{f, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Cmd }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{xb__execsql_8cpp_a0c99d968a34e803d378692bde2e3f18f}\label{xb__execsql_8cpp_a0c99d968a34e803d378692bde2e3f18f}}
-\index{xb\_execsql.cpp@{xb\_execsql.cpp}!main@{main}}
-\index{main@{main}!xb\_execsql.cpp@{xb\_execsql.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{ac, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xb__pack_8cpp.tex b/docs/doxygen/latex/xb__pack_8cpp.tex
deleted file mode 100644
index a227ef4..0000000
--- a/docs/doxygen/latex/xb__pack_8cpp.tex
+++ /dev/null
@@ -1,33 +0,0 @@
-\hypertarget{xb__pack_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\+\_\+pack.cpp File Reference}
-\label{xb__pack_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_pack.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_pack.cpp}}
-{\ttfamily \#include $<$xbase.\+h$>$}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-void \mbox{\hyperlink{xb__pack_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}{Print\+Help}} ()
-\item
-void \mbox{\hyperlink{xb__pack_8cpp_a1fae5968f70747445d63f63065fb7ef3}{Print\+Version}} ()
-\item
-int \mbox{\hyperlink{xb__pack_8cpp_a0ddf1224851353fc92bfbff6f499fa97}{main}} (int argc, char $\ast$argv\mbox{[}$\,$\mbox{]})
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__pack_8cpp_a0ddf1224851353fc92bfbff6f499fa97}\label{xb__pack_8cpp_a0ddf1224851353fc92bfbff6f499fa97}}
-\index{xb\_pack.cpp@{xb\_pack.cpp}!main@{main}}
-\index{main@{main}!xb\_pack.cpp@{xb\_pack.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{argc, }\item[{char $\ast$}]{argv\mbox{[}$\,$\mbox{]} }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{xb__pack_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}\label{xb__pack_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}}
-\index{xb\_pack.cpp@{xb\_pack.cpp}!PrintHelp@{PrintHelp}}
-\index{PrintHelp@{PrintHelp}!xb\_pack.cpp@{xb\_pack.cpp}}
-\doxysubsubsection{\texorpdfstring{PrintHelp()}{PrintHelp()}}
-{\footnotesize\ttfamily void Print\+Help (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{xb__pack_8cpp_a1fae5968f70747445d63f63065fb7ef3}\label{xb__pack_8cpp_a1fae5968f70747445d63f63065fb7ef3}}
-\index{xb\_pack.cpp@{xb\_pack.cpp}!PrintVersion@{PrintVersion}}
-\index{PrintVersion@{PrintVersion}!xb\_pack.cpp@{xb\_pack.cpp}}
-\doxysubsubsection{\texorpdfstring{PrintVersion()}{PrintVersion()}}
-{\footnotesize\ttfamily void Print\+Version (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xb__tblinfo_8cpp.tex b/docs/doxygen/latex/xb__tblinfo_8cpp.tex
deleted file mode 100644
index 2bcdfdc..0000000
--- a/docs/doxygen/latex/xb__tblinfo_8cpp.tex
+++ /dev/null
@@ -1,33 +0,0 @@
-\hypertarget{xb__tblinfo_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\+\_\+tblinfo.cpp File Reference}
-\label{xb__tblinfo_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_tblinfo.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_tblinfo.cpp}}
-{\ttfamily \#include $<$xbase.\+h$>$}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-void \mbox{\hyperlink{xb__tblinfo_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}{Print\+Help}} ()
-\item
-void \mbox{\hyperlink{xb__tblinfo_8cpp_a1fae5968f70747445d63f63065fb7ef3}{Print\+Version}} ()
-\item
-int \mbox{\hyperlink{xb__tblinfo_8cpp_a0ddf1224851353fc92bfbff6f499fa97}{main}} (int argc, char $\ast$argv\mbox{[}$\,$\mbox{]})
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__tblinfo_8cpp_a0ddf1224851353fc92bfbff6f499fa97}\label{xb__tblinfo_8cpp_a0ddf1224851353fc92bfbff6f499fa97}}
-\index{xb\_tblinfo.cpp@{xb\_tblinfo.cpp}!main@{main}}
-\index{main@{main}!xb\_tblinfo.cpp@{xb\_tblinfo.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{argc, }\item[{char $\ast$}]{argv\mbox{[}$\,$\mbox{]} }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{xb__tblinfo_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}\label{xb__tblinfo_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}}
-\index{xb\_tblinfo.cpp@{xb\_tblinfo.cpp}!PrintHelp@{PrintHelp}}
-\index{PrintHelp@{PrintHelp}!xb\_tblinfo.cpp@{xb\_tblinfo.cpp}}
-\doxysubsubsection{\texorpdfstring{PrintHelp()}{PrintHelp()}}
-{\footnotesize\ttfamily void Print\+Help (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{xb__tblinfo_8cpp_a1fae5968f70747445d63f63065fb7ef3}\label{xb__tblinfo_8cpp_a1fae5968f70747445d63f63065fb7ef3}}
-\index{xb\_tblinfo.cpp@{xb\_tblinfo.cpp}!PrintVersion@{PrintVersion}}
-\index{PrintVersion@{PrintVersion}!xb\_tblinfo.cpp@{xb\_tblinfo.cpp}}
-\doxysubsubsection{\texorpdfstring{PrintVersion()}{PrintVersion()}}
-{\footnotesize\ttfamily void Print\+Version (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xb__test__bcd_8cpp.tex b/docs/doxygen/latex/xb__test__bcd_8cpp.tex
deleted file mode 100644
index fd14f5d..0000000
--- a/docs/doxygen/latex/xb__test__bcd_8cpp.tex
+++ /dev/null
@@ -1,18 +0,0 @@
-\hypertarget{xb__test__bcd_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\+\_\+test\+\_\+bcd.cpp File Reference}
-\label{xb__test__bcd_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_bcd.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_bcd.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
-{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-int \mbox{\hyperlink{xb__test__bcd_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__test__bcd_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__bcd_8cpp_a1470527971db41f828c26074cde7e15a}}
-\index{xb\_test\_bcd.cpp@{xb\_test\_bcd.cpp}!main@{main}}
-\index{main@{main}!xb\_test\_bcd.cpp@{xb\_test\_bcd.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xb__test__blockread_8cpp.tex b/docs/doxygen/latex/xb__test__blockread_8cpp.tex
deleted file mode 100644
index 77e2ca0..0000000
--- a/docs/doxygen/latex/xb__test__blockread_8cpp.tex
+++ /dev/null
@@ -1,42 +0,0 @@
-\hypertarget{xb__test__blockread_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\+\_\+test\+\_\+blockread.cpp File Reference}
-\label{xb__test__blockread_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_blockread.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_blockread.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
-{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-int \mbox{\hyperlink{xb__test__blockread_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
-\end{DoxyCompactItemize}
-\doxysubsection*{Variables}
-\begin{DoxyCompactItemize}
-\item
-\mbox{\hyperlink{structxb_1_1xbSchema}{xb\+Schema}} \mbox{\hyperlink{xb__test__blockread_8cpp_af68c3291a63fdf20ffa0e477460d148e}{My\+Dbf\+Rec}} \mbox{[}$\,$\mbox{]}
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__test__blockread_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__blockread_8cpp_a1470527971db41f828c26074cde7e15a}}
-\index{xb\_test\_blockread.cpp@{xb\_test\_blockread.cpp}!main@{main}}
-\index{main@{main}!xb\_test\_blockread.cpp@{xb\_test\_blockread.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
-
-
-
-\doxysubsection{Variable Documentation}
-\mbox{\Hypertarget{xb__test__blockread_8cpp_af68c3291a63fdf20ffa0e477460d148e}\label{xb__test__blockread_8cpp_af68c3291a63fdf20ffa0e477460d148e}}
-\index{xb\_test\_blockread.cpp@{xb\_test\_blockread.cpp}!MyDbfRec@{MyDbfRec}}
-\index{MyDbfRec@{MyDbfRec}!xb\_test\_blockread.cpp@{xb\_test\_blockread.cpp}}
-\doxysubsubsection{\texorpdfstring{MyDbfRec}{MyDbfRec}}
-{\footnotesize\ttfamily \mbox{\hyperlink{structxb_1_1xbSchema}{xb\+Schema}} My\+Dbf\+Rec\mbox{[}$\,$\mbox{]}}
-
-{\bfseries Initial value\+:}
-\begin{DoxyCode}{0}
-\DoxyCodeLine{= }
-\DoxyCodeLine{ \{}
-\DoxyCodeLine{ \{ \textcolor{stringliteral}{"{}NFLD"{}}, \mbox{\hyperlink{xbdbf_8h_ae9fb6d69cc5edc94d36ae403c22ec1c6}{XB\_NUMERIC\_FLD}}, 10, 0 \},}
-\DoxyCodeLine{ \{ \textcolor{stringliteral}{"{}CFLD"{}}, \mbox{\hyperlink{xbdbf_8h_a20f739b9d9dc6a002a246a999e76aeaa}{XB\_CHAR\_FLD}}, 89, 0 \},}
-\DoxyCodeLine{ \{ \textcolor{stringliteral}{"{}"{}},0,0,0 \}}
-\DoxyCodeLine{ \}}
-
-\end{DoxyCode}
diff --git a/docs/doxygen/latex/xb__test__date_8cpp.tex b/docs/doxygen/latex/xb__test__date_8cpp.tex
deleted file mode 100644
index cb48e54..0000000
--- a/docs/doxygen/latex/xb__test__date_8cpp.tex
+++ /dev/null
@@ -1,18 +0,0 @@
-\hypertarget{xb__test__date_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\+\_\+test\+\_\+date.cpp File Reference}
-\label{xb__test__date_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_date.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_date.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
-{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-int \mbox{\hyperlink{xb__test__date_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__test__date_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__date_8cpp_a1470527971db41f828c26074cde7e15a}}
-\index{xb\_test\_date.cpp@{xb\_test\_date.cpp}!main@{main}}
-\index{main@{main}!xb\_test\_date.cpp@{xb\_test\_date.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xb__test__dbf__v3__memos_8cpp.tex b/docs/doxygen/latex/xb__test__dbf__v3__memos_8cpp.tex
deleted file mode 100644
index bf7fc6c..0000000
--- a/docs/doxygen/latex/xb__test__dbf__v3__memos_8cpp.tex
+++ /dev/null
@@ -1,18 +0,0 @@
-\hypertarget{xb__test__dbf__v3__memos_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\+\_\+test\+\_\+dbf\+\_\+v3\+\_\+memos.cpp File Reference}
-\label{xb__test__dbf__v3__memos_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_dbf\_v3\_memos.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_dbf\_v3\_memos.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
-{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-int \mbox{\hyperlink{xb__test__dbf__v3__memos_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__test__dbf__v3__memos_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__dbf__v3__memos_8cpp_a1470527971db41f828c26074cde7e15a}}
-\index{xb\_test\_dbf\_v3\_memos.cpp@{xb\_test\_dbf\_v3\_memos.cpp}!main@{main}}
-\index{main@{main}!xb\_test\_dbf\_v3\_memos.cpp@{xb\_test\_dbf\_v3\_memos.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xb__test__dbf__v3__nomemos_8cpp.tex b/docs/doxygen/latex/xb__test__dbf__v3__nomemos_8cpp.tex
deleted file mode 100644
index a79890b..0000000
--- a/docs/doxygen/latex/xb__test__dbf__v3__nomemos_8cpp.tex
+++ /dev/null
@@ -1,18 +0,0 @@
-\hypertarget{xb__test__dbf__v3__nomemos_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\+\_\+test\+\_\+dbf\+\_\+v3\+\_\+nomemos.cpp File Reference}
-\label{xb__test__dbf__v3__nomemos_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_dbf\_v3\_nomemos.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_dbf\_v3\_nomemos.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
-{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-int \mbox{\hyperlink{xb__test__dbf__v3__nomemos_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__test__dbf__v3__nomemos_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__dbf__v3__nomemos_8cpp_a1470527971db41f828c26074cde7e15a}}
-\index{xb\_test\_dbf\_v3\_nomemos.cpp@{xb\_test\_dbf\_v3\_nomemos.cpp}!main@{main}}
-\index{main@{main}!xb\_test\_dbf\_v3\_nomemos.cpp@{xb\_test\_dbf\_v3\_nomemos.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xb__test__dbf__v4__memos_8cpp.tex b/docs/doxygen/latex/xb__test__dbf__v4__memos_8cpp.tex
deleted file mode 100644
index 7812871..0000000
--- a/docs/doxygen/latex/xb__test__dbf__v4__memos_8cpp.tex
+++ /dev/null
@@ -1,18 +0,0 @@
-\hypertarget{xb__test__dbf__v4__memos_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\+\_\+test\+\_\+dbf\+\_\+v4\+\_\+memos.cpp File Reference}
-\label{xb__test__dbf__v4__memos_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_dbf\_v4\_memos.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_dbf\_v4\_memos.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
-{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-int \mbox{\hyperlink{xb__test__dbf__v4__memos_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__test__dbf__v4__memos_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__dbf__v4__memos_8cpp_a1470527971db41f828c26074cde7e15a}}
-\index{xb\_test\_dbf\_v4\_memos.cpp@{xb\_test\_dbf\_v4\_memos.cpp}!main@{main}}
-\index{main@{main}!xb\_test\_dbf\_v4\_memos.cpp@{xb\_test\_dbf\_v4\_memos.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xb__test__dbf__v4__nomemos_8cpp.tex b/docs/doxygen/latex/xb__test__dbf__v4__nomemos_8cpp.tex
deleted file mode 100644
index a6c65b1..0000000
--- a/docs/doxygen/latex/xb__test__dbf__v4__nomemos_8cpp.tex
+++ /dev/null
@@ -1,18 +0,0 @@
-\hypertarget{xb__test__dbf__v4__nomemos_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\+\_\+test\+\_\+dbf\+\_\+v4\+\_\+nomemos.cpp File Reference}
-\label{xb__test__dbf__v4__nomemos_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_dbf\_v4\_nomemos.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_dbf\_v4\_nomemos.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
-{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-int \mbox{\hyperlink{xb__test__dbf__v4__nomemos_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__test__dbf__v4__nomemos_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__dbf__v4__nomemos_8cpp_a1470527971db41f828c26074cde7e15a}}
-\index{xb\_test\_dbf\_v4\_nomemos.cpp@{xb\_test\_dbf\_v4\_nomemos.cpp}!main@{main}}
-\index{main@{main}!xb\_test\_dbf\_v4\_nomemos.cpp@{xb\_test\_dbf\_v4\_nomemos.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xb__test__expnode_8cpp.tex b/docs/doxygen/latex/xb__test__expnode_8cpp.tex
deleted file mode 100644
index 6c6a884..0000000
--- a/docs/doxygen/latex/xb__test__expnode_8cpp.tex
+++ /dev/null
@@ -1,18 +0,0 @@
-\hypertarget{xb__test__expnode_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\+\_\+test\+\_\+expnode.cpp File Reference}
-\label{xb__test__expnode_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_expnode.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_expnode.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
-{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-int \mbox{\hyperlink{xb__test__expnode_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__test__expnode_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__expnode_8cpp_a1470527971db41f828c26074cde7e15a}}
-\index{xb\_test\_expnode.cpp@{xb\_test\_expnode.cpp}!main@{main}}
-\index{main@{main}!xb\_test\_expnode.cpp@{xb\_test\_expnode.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xb__test__expression_8cpp.tex b/docs/doxygen/latex/xb__test__expression_8cpp.tex
deleted file mode 100644
index 7921c70..0000000
--- a/docs/doxygen/latex/xb__test__expression_8cpp.tex
+++ /dev/null
@@ -1,74 +0,0 @@
-\hypertarget{xb__test__expression_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\+\_\+test\+\_\+expression.cpp File Reference}
-\label{xb__test__expression_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_expression.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_expression.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
-{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-DOXYOFF xb\+Int16 \mbox{\hyperlink{xb__test__expression_8cpp_aee57237c5f5b9b4d80e84bf530eb42bc}{Dev\+Tester}} (\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$xb, \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$dbf, const char $\ast$s\+Exp\+In)
-\item
-xb\+Int16 \mbox{\hyperlink{xb__test__expression_8cpp_af56b6dbc38e0d23caaf6531526315379}{Test\+Weight}} (\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$xb, xb\+Int16 i\+Print\+Option, const char $\ast$title, const char $\ast$s\+Operator, xb\+Int16 i\+Expected\+Weight)
-\item
-xb\+Int16 \mbox{\hyperlink{xb__test__expression_8cpp_a440d64b55abaa9e14e73ecc132d1084d}{Test\+Token\+Method}} (\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$xb, xb\+Int16 i\+Print\+Option, const char $\ast$title, const char $\ast$s\+Expression, const char $\ast$s\+Expected\+Token, const char $\ast$s\+Expected\+Remainder, char c\+Expected\+Node\+Type, char c\+Expected\+Return\+Type, xb\+Int16 i\+Erc, xb\+Int16 i\+Trc)
-\item
-xb\+Int16 \mbox{\hyperlink{xb__test__expression_8cpp_ad52c27685018dda7c5c4b26fb445860e}{Test\+Method}} (\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$xb, \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$d, xb\+Int16 Print\+Option, const char $\ast$title, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Expression, const char $\ast$s\+Expected\+Result, xb\+Int16 i\+Expected\+Result\+Len)
-\item
-xb\+Int16 \mbox{\hyperlink{xb__test__expression_8cpp_a7030149316fe8d8195ffbb18132e0cf9}{Test\+Method}} (\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$xb, \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$d, xb\+Int16 Print\+Option, const char $\ast$title, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Expression, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} d\+Expected\+Result)
-\item
-xb\+Int16 \mbox{\hyperlink{xb__test__expression_8cpp_a10e637a203841bd2b6a92e6217509e23}{Test\+Method}} (\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$xb, \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$d, xb\+Int16 Print\+Option, const char $\ast$title, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Expression, \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} dt\+Expected\+Result)
-\item
-xb\+Int16 \mbox{\hyperlink{xb__test__expression_8cpp_aa385c5f9fa8b4cfd63763b4a28852b64}{Test\+Method}} (\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$xb, \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$d, xb\+Int16 Print\+Option, const char $\ast$title, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Expression, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Expected\+Result)
-\item
-int \mbox{\hyperlink{xb__test__expression_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__test__expression_8cpp_aee57237c5f5b9b4d80e84bf530eb42bc}\label{xb__test__expression_8cpp_aee57237c5f5b9b4d80e84bf530eb42bc}}
-\index{xb\_test\_expression.cpp@{xb\_test\_expression.cpp}!DevTester@{DevTester}}
-\index{DevTester@{DevTester}!xb\_test\_expression.cpp@{xb\_test\_expression.cpp}}
-\doxysubsubsection{\texorpdfstring{DevTester()}{DevTester()}}
-{\footnotesize\ttfamily DOXYOFF xb\+Int16 Dev\+Tester (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$}]{xb, }\item[{\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$}]{dbf, }\item[{const char $\ast$}]{s\+Exp\+In }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{xb__test__expression_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__expression_8cpp_a1470527971db41f828c26074cde7e15a}}
-\index{xb\_test\_expression.cpp@{xb\_test\_expression.cpp}!main@{main}}
-\index{main@{main}!xb\_test\_expression.cpp@{xb\_test\_expression.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{xb__test__expression_8cpp_ad52c27685018dda7c5c4b26fb445860e}\label{xb__test__expression_8cpp_ad52c27685018dda7c5c4b26fb445860e}}
-\index{xb\_test\_expression.cpp@{xb\_test\_expression.cpp}!TestMethod@{TestMethod}}
-\index{TestMethod@{TestMethod}!xb\_test\_expression.cpp@{xb\_test\_expression.cpp}}
-\doxysubsubsection{\texorpdfstring{TestMethod()}{TestMethod()}\hspace{0.1cm}{\footnotesize\ttfamily [1/4]}}
-{\footnotesize\ttfamily xb\+Int16 Test\+Method (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$}]{xb, }\item[{\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$}]{d, }\item[{xb\+Int16}]{Print\+Option, }\item[{const char $\ast$}]{title, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Expression, }\item[{const char $\ast$}]{s\+Expected\+Result, }\item[{xb\+Int16}]{i\+Expected\+Result\+Len }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{xb__test__expression_8cpp_aa385c5f9fa8b4cfd63763b4a28852b64}\label{xb__test__expression_8cpp_aa385c5f9fa8b4cfd63763b4a28852b64}}
-\index{xb\_test\_expression.cpp@{xb\_test\_expression.cpp}!TestMethod@{TestMethod}}
-\index{TestMethod@{TestMethod}!xb\_test\_expression.cpp@{xb\_test\_expression.cpp}}
-\doxysubsubsection{\texorpdfstring{TestMethod()}{TestMethod()}\hspace{0.1cm}{\footnotesize\ttfamily [2/4]}}
-{\footnotesize\ttfamily xb\+Int16 Test\+Method (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$}]{xb, }\item[{\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$}]{d, }\item[{xb\+Int16}]{Print\+Option, }\item[{const char $\ast$}]{title, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Expression, }\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}}}]{b\+Expected\+Result }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{xb__test__expression_8cpp_a10e637a203841bd2b6a92e6217509e23}\label{xb__test__expression_8cpp_a10e637a203841bd2b6a92e6217509e23}}
-\index{xb\_test\_expression.cpp@{xb\_test\_expression.cpp}!TestMethod@{TestMethod}}
-\index{TestMethod@{TestMethod}!xb\_test\_expression.cpp@{xb\_test\_expression.cpp}}
-\doxysubsubsection{\texorpdfstring{TestMethod()}{TestMethod()}\hspace{0.1cm}{\footnotesize\ttfamily [3/4]}}
-{\footnotesize\ttfamily xb\+Int16 Test\+Method (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$}]{xb, }\item[{\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$}]{d, }\item[{xb\+Int16}]{Print\+Option, }\item[{const char $\ast$}]{title, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Expression, }\item[{\mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}}}]{dt\+Expected\+Result }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{xb__test__expression_8cpp_a7030149316fe8d8195ffbb18132e0cf9}\label{xb__test__expression_8cpp_a7030149316fe8d8195ffbb18132e0cf9}}
-\index{xb\_test\_expression.cpp@{xb\_test\_expression.cpp}!TestMethod@{TestMethod}}
-\index{TestMethod@{TestMethod}!xb\_test\_expression.cpp@{xb\_test\_expression.cpp}}
-\doxysubsubsection{\texorpdfstring{TestMethod()}{TestMethod()}\hspace{0.1cm}{\footnotesize\ttfamily [4/4]}}
-{\footnotesize\ttfamily xb\+Int16 Test\+Method (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$}]{xb, }\item[{\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$}]{d, }\item[{xb\+Int16}]{Print\+Option, }\item[{const char $\ast$}]{title, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Expression, }\item[{\mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}}}]{d\+Expected\+Result }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{xb__test__expression_8cpp_a440d64b55abaa9e14e73ecc132d1084d}\label{xb__test__expression_8cpp_a440d64b55abaa9e14e73ecc132d1084d}}
-\index{xb\_test\_expression.cpp@{xb\_test\_expression.cpp}!TestTokenMethod@{TestTokenMethod}}
-\index{TestTokenMethod@{TestTokenMethod}!xb\_test\_expression.cpp@{xb\_test\_expression.cpp}}
-\doxysubsubsection{\texorpdfstring{TestTokenMethod()}{TestTokenMethod()}}
-{\footnotesize\ttfamily xb\+Int16 Test\+Token\+Method (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$}]{xb, }\item[{xb\+Int16}]{i\+Print\+Option, }\item[{const char $\ast$}]{title, }\item[{const char $\ast$}]{s\+Expression, }\item[{const char $\ast$}]{s\+Expected\+Token, }\item[{const char $\ast$}]{s\+Expected\+Remainder, }\item[{char}]{c\+Expected\+Node\+Type, }\item[{char}]{c\+Expected\+Return\+Type, }\item[{xb\+Int16}]{i\+Erc, }\item[{xb\+Int16}]{i\+Trc }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{xb__test__expression_8cpp_af56b6dbc38e0d23caaf6531526315379}\label{xb__test__expression_8cpp_af56b6dbc38e0d23caaf6531526315379}}
-\index{xb\_test\_expression.cpp@{xb\_test\_expression.cpp}!TestWeight@{TestWeight}}
-\index{TestWeight@{TestWeight}!xb\_test\_expression.cpp@{xb\_test\_expression.cpp}}
-\doxysubsubsection{\texorpdfstring{TestWeight()}{TestWeight()}}
-{\footnotesize\ttfamily xb\+Int16 Test\+Weight (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}} $\ast$}]{xb, }\item[{xb\+Int16}]{i\+Print\+Option, }\item[{const char $\ast$}]{title, }\item[{const char $\ast$}]{s\+Operator, }\item[{xb\+Int16}]{i\+Expected\+Weight }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xb__test__file_8cpp.tex b/docs/doxygen/latex/xb__test__file_8cpp.tex
deleted file mode 100644
index 504a6b6..0000000
--- a/docs/doxygen/latex/xb__test__file_8cpp.tex
+++ /dev/null
@@ -1,18 +0,0 @@
-\hypertarget{xb__test__file_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\+\_\+test\+\_\+file.cpp File Reference}
-\label{xb__test__file_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_file.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_file.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
-{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-int \mbox{\hyperlink{xb__test__file_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__test__file_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__file_8cpp_a1470527971db41f828c26074cde7e15a}}
-\index{xb\_test\_file.cpp@{xb\_test\_file.cpp}!main@{main}}
-\index{main@{main}!xb\_test\_file.cpp@{xb\_test\_file.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xb__test__filter_8cpp.tex b/docs/doxygen/latex/xb__test__filter_8cpp.tex
deleted file mode 100644
index 3c229cb..0000000
--- a/docs/doxygen/latex/xb__test__filter_8cpp.tex
+++ /dev/null
@@ -1,18 +0,0 @@
-\hypertarget{xb__test__filter_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\+\_\+test\+\_\+filter.cpp File Reference}
-\label{xb__test__filter_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_filter.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_filter.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
-{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-int \mbox{\hyperlink{xb__test__filter_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__test__filter_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__filter_8cpp_a1470527971db41f828c26074cde7e15a}}
-\index{xb\_test\_filter.cpp@{xb\_test\_filter.cpp}!main@{main}}
-\index{main@{main}!xb\_test\_filter.cpp@{xb\_test\_filter.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xb__test__funcs_8cpp.tex b/docs/doxygen/latex/xb__test__funcs_8cpp.tex
deleted file mode 100644
index 5ea715f..0000000
--- a/docs/doxygen/latex/xb__test__funcs_8cpp.tex
+++ /dev/null
@@ -1,18 +0,0 @@
-\hypertarget{xb__test__funcs_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\+\_\+test\+\_\+funcs.cpp File Reference}
-\label{xb__test__funcs_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_funcs.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_funcs.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
-{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-int \mbox{\hyperlink{xb__test__funcs_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__test__funcs_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__funcs_8cpp_a1470527971db41f828c26074cde7e15a}}
-\index{xb\_test\_funcs.cpp@{xb\_test\_funcs.cpp}!main@{main}}
-\index{main@{main}!xb\_test\_funcs.cpp@{xb\_test\_funcs.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xb__test__linklist_8cpp.tex b/docs/doxygen/latex/xb__test__linklist_8cpp.tex
deleted file mode 100644
index 434f405..0000000
--- a/docs/doxygen/latex/xb__test__linklist_8cpp.tex
+++ /dev/null
@@ -1,18 +0,0 @@
-\hypertarget{xb__test__linklist_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\+\_\+test\+\_\+linklist.cpp File Reference}
-\label{xb__test__linklist_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_linklist.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_linklist.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
-{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-int \mbox{\hyperlink{xb__test__linklist_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__test__linklist_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__linklist_8cpp_a1470527971db41f828c26074cde7e15a}}
-\index{xb\_test\_linklist.cpp@{xb\_test\_linklist.cpp}!main@{main}}
-\index{main@{main}!xb\_test\_linklist.cpp@{xb\_test\_linklist.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xb__test__lock2_8cpp.tex b/docs/doxygen/latex/xb__test__lock2_8cpp.tex
deleted file mode 100644
index 03ddf28..0000000
--- a/docs/doxygen/latex/xb__test__lock2_8cpp.tex
+++ /dev/null
@@ -1,18 +0,0 @@
-\hypertarget{xb__test__lock2_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\+\_\+test\+\_\+lock2.cpp File Reference}
-\label{xb__test__lock2_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_lock2.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_lock2.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
-{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-int \mbox{\hyperlink{xb__test__lock2_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__test__lock2_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__lock2_8cpp_a1470527971db41f828c26074cde7e15a}}
-\index{xb\_test\_lock2.cpp@{xb\_test\_lock2.cpp}!main@{main}}
-\index{main@{main}!xb\_test\_lock2.cpp@{xb\_test\_lock2.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xb__test__lock_8cpp.tex b/docs/doxygen/latex/xb__test__lock_8cpp.tex
deleted file mode 100644
index 4507a0f..0000000
--- a/docs/doxygen/latex/xb__test__lock_8cpp.tex
+++ /dev/null
@@ -1,18 +0,0 @@
-\hypertarget{xb__test__lock_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\+\_\+test\+\_\+lock.cpp File Reference}
-\label{xb__test__lock_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_lock.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_lock.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
-{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-int \mbox{\hyperlink{xb__test__lock_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__test__lock_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__lock_8cpp_a1470527971db41f828c26074cde7e15a}}
-\index{xb\_test\_lock.cpp@{xb\_test\_lock.cpp}!main@{main}}
-\index{main@{main}!xb\_test\_lock.cpp@{xb\_test\_lock.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xb__test__log_8cpp.tex b/docs/doxygen/latex/xb__test__log_8cpp.tex
deleted file mode 100644
index 7bde740..0000000
--- a/docs/doxygen/latex/xb__test__log_8cpp.tex
+++ /dev/null
@@ -1,18 +0,0 @@
-\hypertarget{xb__test__log_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\+\_\+test\+\_\+log.cpp File Reference}
-\label{xb__test__log_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_log.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_log.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
-{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-int \mbox{\hyperlink{xb__test__log_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__test__log_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__log_8cpp_a1470527971db41f828c26074cde7e15a}}
-\index{xb\_test\_log.cpp@{xb\_test\_log.cpp}!main@{main}}
-\index{main@{main}!xb\_test\_log.cpp@{xb\_test\_log.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xb__test__mdx_8cpp.tex b/docs/doxygen/latex/xb__test__mdx_8cpp.tex
deleted file mode 100644
index 63e6d5b..0000000
--- a/docs/doxygen/latex/xb__test__mdx_8cpp.tex
+++ /dev/null
@@ -1,18 +0,0 @@
-\hypertarget{xb__test__mdx_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\+\_\+test\+\_\+mdx.cpp File Reference}
-\label{xb__test__mdx_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_mdx.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_mdx.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
-{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-int \mbox{\hyperlink{xb__test__mdx_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__test__mdx_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__mdx_8cpp_a1470527971db41f828c26074cde7e15a}}
-\index{xb\_test\_mdx.cpp@{xb\_test\_mdx.cpp}!main@{main}}
-\index{main@{main}!xb\_test\_mdx.cpp@{xb\_test\_mdx.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xb__test__ndx_8cpp.tex b/docs/doxygen/latex/xb__test__ndx_8cpp.tex
deleted file mode 100644
index 7ad9cab..0000000
--- a/docs/doxygen/latex/xb__test__ndx_8cpp.tex
+++ /dev/null
@@ -1,18 +0,0 @@
-\hypertarget{xb__test__ndx_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\+\_\+test\+\_\+ndx.cpp File Reference}
-\label{xb__test__ndx_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_ndx.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_ndx.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
-{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-int \mbox{\hyperlink{xb__test__ndx_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__test__ndx_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__ndx_8cpp_a1470527971db41f828c26074cde7e15a}}
-\index{xb\_test\_ndx.cpp@{xb\_test\_ndx.cpp}!main@{main}}
-\index{main@{main}!xb\_test\_ndx.cpp@{xb\_test\_ndx.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xb__test__sql_8cpp.tex b/docs/doxygen/latex/xb__test__sql_8cpp.tex
deleted file mode 100644
index 7c641e5..0000000
--- a/docs/doxygen/latex/xb__test__sql_8cpp.tex
+++ /dev/null
@@ -1,18 +0,0 @@
-\hypertarget{xb__test__sql_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\+\_\+test\+\_\+sql.cpp File Reference}
-\label{xb__test__sql_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_sql.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_sql.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
-{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-int \mbox{\hyperlink{xb__test__sql_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__test__sql_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__sql_8cpp_a1470527971db41f828c26074cde7e15a}}
-\index{xb\_test\_sql.cpp@{xb\_test\_sql.cpp}!main@{main}}
-\index{main@{main}!xb\_test\_sql.cpp@{xb\_test\_sql.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xb__test__string_8cpp.tex b/docs/doxygen/latex/xb__test__string_8cpp.tex
deleted file mode 100644
index fb5ecd2..0000000
--- a/docs/doxygen/latex/xb__test__string_8cpp.tex
+++ /dev/null
@@ -1,32 +0,0 @@
-\hypertarget{xb__test__string_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\+\_\+test\+\_\+string.cpp File Reference}
-\label{xb__test__string_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_string.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_string.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
-{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
-\doxysubsection*{Macros}
-\begin{DoxyCompactItemize}
-\item
-\#define \mbox{\hyperlink{xb__test__string_8cpp_a42f8c497a1968074f38bf5055c650dca}{VERBOSE}}
-\end{DoxyCompactItemize}
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-int \mbox{\hyperlink{xb__test__string_8cpp_aabf71bc9adb6daf457b2ea8879ae537f}{main}} (int arg\+Cnt, char $\ast$$\ast$av=NULL)
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Macro Definition Documentation}
-\mbox{\Hypertarget{xb__test__string_8cpp_a42f8c497a1968074f38bf5055c650dca}\label{xb__test__string_8cpp_a42f8c497a1968074f38bf5055c650dca}}
-\index{xb\_test\_string.cpp@{xb\_test\_string.cpp}!VERBOSE@{VERBOSE}}
-\index{VERBOSE@{VERBOSE}!xb\_test\_string.cpp@{xb\_test\_string.cpp}}
-\doxysubsubsection{\texorpdfstring{VERBOSE}{VERBOSE}}
-{\footnotesize\ttfamily \#define VERBOSE}
-
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__test__string_8cpp_aabf71bc9adb6daf457b2ea8879ae537f}\label{xb__test__string_8cpp_aabf71bc9adb6daf457b2ea8879ae537f}}
-\index{xb\_test\_string.cpp@{xb\_test\_string.cpp}!main@{main}}
-\index{main@{main}!xb\_test\_string.cpp@{xb\_test\_string.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av = {\ttfamily NULL} }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xb__test__tblmgr_8cpp.tex b/docs/doxygen/latex/xb__test__tblmgr_8cpp.tex
deleted file mode 100644
index cd9df27..0000000
--- a/docs/doxygen/latex/xb__test__tblmgr_8cpp.tex
+++ /dev/null
@@ -1,18 +0,0 @@
-\hypertarget{xb__test__tblmgr_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\+\_\+test\+\_\+tblmgr.cpp File Reference}
-\label{xb__test__tblmgr_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_tblmgr.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_tblmgr.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
-{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-int \mbox{\hyperlink{xb__test__tblmgr_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__test__tblmgr_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__tblmgr_8cpp_a1470527971db41f828c26074cde7e15a}}
-\index{xb\_test\_tblmgr.cpp@{xb\_test\_tblmgr.cpp}!main@{main}}
-\index{main@{main}!xb\_test\_tblmgr.cpp@{xb\_test\_tblmgr.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xb__test__uda_8cpp.tex b/docs/doxygen/latex/xb__test__uda_8cpp.tex
deleted file mode 100644
index bb0bc3e..0000000
--- a/docs/doxygen/latex/xb__test__uda_8cpp.tex
+++ /dev/null
@@ -1,18 +0,0 @@
-\hypertarget{xb__test__uda_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\+\_\+test\+\_\+uda.cpp File Reference}
-\label{xb__test__uda_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_uda.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_uda.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
-{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-int \mbox{\hyperlink{xb__test__uda_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__test__uda_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__uda_8cpp_a1470527971db41f828c26074cde7e15a}}
-\index{xb\_test\_uda.cpp@{xb\_test\_uda.cpp}!main@{main}}
-\index{main@{main}!xb\_test\_uda.cpp@{xb\_test\_uda.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xb__test__xbase_8cpp.tex b/docs/doxygen/latex/xb__test__xbase_8cpp.tex
deleted file mode 100644
index c436f00..0000000
--- a/docs/doxygen/latex/xb__test__xbase_8cpp.tex
+++ /dev/null
@@ -1,18 +0,0 @@
-\hypertarget{xb__test__xbase_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\+\_\+test\+\_\+xbase.cpp File Reference}
-\label{xb__test__xbase_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_xbase.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_xbase.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
-{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-int \mbox{\hyperlink{xb__test__xbase_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__test__xbase_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__xbase_8cpp_a1470527971db41f828c26074cde7e15a}}
-\index{xb\_test\_xbase.cpp@{xb\_test\_xbase.cpp}!main@{main}}
-\index{main@{main}!xb\_test\_xbase.cpp@{xb\_test\_xbase.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xb__undelall_8cpp.tex b/docs/doxygen/latex/xb__undelall_8cpp.tex
deleted file mode 100644
index d7b2682..0000000
--- a/docs/doxygen/latex/xb__undelall_8cpp.tex
+++ /dev/null
@@ -1,33 +0,0 @@
-\hypertarget{xb__undelall_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\+\_\+undelall.cpp File Reference}
-\label{xb__undelall_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_undelall.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_undelall.cpp}}
-{\ttfamily \#include $<$xbase.\+h$>$}\newline
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-void \mbox{\hyperlink{xb__undelall_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}{Print\+Help}} ()
-\item
-void \mbox{\hyperlink{xb__undelall_8cpp_a1fae5968f70747445d63f63065fb7ef3}{Print\+Version}} ()
-\item
-int \mbox{\hyperlink{xb__undelall_8cpp_a0ddf1224851353fc92bfbff6f499fa97}{main}} (int argc, char $\ast$argv\mbox{[}$\,$\mbox{]})
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__undelall_8cpp_a0ddf1224851353fc92bfbff6f499fa97}\label{xb__undelall_8cpp_a0ddf1224851353fc92bfbff6f499fa97}}
-\index{xb\_undelall.cpp@{xb\_undelall.cpp}!main@{main}}
-\index{main@{main}!xb\_undelall.cpp@{xb\_undelall.cpp}}
-\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{argc, }\item[{char $\ast$}]{argv\mbox{[}$\,$\mbox{]} }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{xb__undelall_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}\label{xb__undelall_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}}
-\index{xb\_undelall.cpp@{xb\_undelall.cpp}!PrintHelp@{PrintHelp}}
-\index{PrintHelp@{PrintHelp}!xb\_undelall.cpp@{xb\_undelall.cpp}}
-\doxysubsubsection{\texorpdfstring{PrintHelp()}{PrintHelp()}}
-{\footnotesize\ttfamily void Print\+Help (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
-\mbox{\Hypertarget{xb__undelall_8cpp_a1fae5968f70747445d63f63065fb7ef3}\label{xb__undelall_8cpp_a1fae5968f70747445d63f63065fb7ef3}}
-\index{xb\_undelall.cpp@{xb\_undelall.cpp}!PrintVersion@{PrintVersion}}
-\index{PrintVersion@{PrintVersion}!xb\_undelall.cpp@{xb\_undelall.cpp}}
-\doxysubsubsection{\texorpdfstring{PrintVersion()}{PrintVersion()}}
-{\footnotesize\ttfamily void Print\+Version (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
-
diff --git a/docs/doxygen/latex/xbalttbl_8cpp.tex b/docs/doxygen/latex/xbalttbl_8cpp.tex
deleted file mode 100644
index 8643874..0000000
--- a/docs/doxygen/latex/xbalttbl_8cpp.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-\hypertarget{xbalttbl_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/sql/xbalttbl.cpp File Reference}
-\label{xbalttbl_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbalttbl.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbalttbl.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbase_8h.tex b/docs/doxygen/latex/xbase_8h.tex
deleted file mode 100644
index e1b3c3b..0000000
--- a/docs/doxygen/latex/xbase_8h.tex
+++ /dev/null
@@ -1,31 +0,0 @@
-\hypertarget{xbase_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/include/xbase.h File Reference}
-\label{xbase_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbase.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbase.h}}
-{\ttfamily \#include $<$xbconfig.\+h$>$}\newline
-{\ttfamily \#include $<$stdio.\+h$>$}\newline
-{\ttfamily \#include $<$errno.\+h$>$}\newline
-{\ttfamily \#include $<$time.\+h$>$}\newline
-{\ttfamily \#include $<$math.\+h$>$}\newline
-{\ttfamily \#include $<$iomanip$>$}\newline
-{\ttfamily \#include $<$xbretcod.\+h$>$}\newline
-{\ttfamily \#include $<$xbtypes.\+h$>$}\newline
-{\ttfamily \#include $<$xbstring.\+h$>$}\newline
-{\ttfamily \#include $<$xbssv.\+h$>$}\newline
-{\ttfamily \#include $<$xbdate.\+h$>$}\newline
-{\ttfamily \#include $<$xbtblmgr.\+h$>$}\newline
-{\ttfamily \#include $<$xbxbase.\+h$>$}\newline
-{\ttfamily \#include $<$xblnknod.\+h$>$}\newline
-{\ttfamily \#include $<$xblnklst.\+h$>$}\newline
-{\ttfamily \#include $<$xblnklstord.\+h$>$}\newline
-{\ttfamily \#include $<$xbfile.\+h$>$}\newline
-{\ttfamily \#include $<$xblog.\+h$>$}\newline
-{\ttfamily \#include $<$xbmemo.\+h$>$}\newline
-{\ttfamily \#include $<$xbbcd.\+h$>$}\newline
-{\ttfamily \#include $<$xbuda.\+h$>$}\newline
-{\ttfamily \#include $<$xbexpnode.\+h$>$}\newline
-{\ttfamily \#include $<$xbexp.\+h$>$}\newline
-{\ttfamily \#include $<$xbtag.\+h$>$}\newline
-{\ttfamily \#include $<$xbblkread.\+h$>$}\newline
-{\ttfamily \#include $<$xbdbf.\+h$>$}\newline
-{\ttfamily \#include $<$xbindex.\+h$>$}\newline
-{\ttfamily \#include $<$xbfilter.\+h$>$}\newline
-{\ttfamily \#include $<$xbsql.\+h$>$}\newline
diff --git a/docs/doxygen/latex/xbase_8h_source.tex b/docs/doxygen/latex/xbase_8h_source.tex
deleted file mode 100644
index 2d90229..0000000
--- a/docs/doxygen/latex/xbase_8h_source.tex
+++ /dev/null
@@ -1,106 +0,0 @@
-\hypertarget{xbase_8h_source}{}\doxysection{xbase.\+h}
-\label{xbase_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbase.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbase.h}}
-\mbox{\hyperlink{xbase_8h}{Go to the documentation of this file.}}
-\begin{DoxyCode}{0}
-\DoxyCodeLine{1 \textcolor{comment}{/* xbase.h}}
-\DoxyCodeLine{2 \textcolor{comment}{}}
-\DoxyCodeLine{3 \textcolor{comment}{}}
-\DoxyCodeLine{4 \textcolor{comment}{Xbase64 Software Library}}
-\DoxyCodeLine{5 \textcolor{comment}{}}
-\DoxyCodeLine{6 \textcolor{comment}{Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel}}
-\DoxyCodeLine{7 \textcolor{comment}{}}
-\DoxyCodeLine{8 \textcolor{comment}{The xb64 software library is covered under the terms of the GPL Version 3, 2007 license}}
-\DoxyCodeLine{9 \textcolor{comment}{}}
-\DoxyCodeLine{10 \textcolor{comment}{Email Contact:}}
-\DoxyCodeLine{11 \textcolor{comment}{}}
-\DoxyCodeLine{12 \textcolor{comment}{ XDB-\/devel@lists.sourceforge.net}}
-\DoxyCodeLine{13 \textcolor{comment}{ XDB-\/users@lists.sourceforge.net}}
-\DoxyCodeLine{14 \textcolor{comment}{}}
-\DoxyCodeLine{15 \textcolor{comment}{*/}}
-\DoxyCodeLine{16 }
-\DoxyCodeLine{17 \textcolor{preprocessor}{\#include <xbconfig.h>}}
-\DoxyCodeLine{18 \textcolor{preprocessor}{\#include <stdio.h>}}
-\DoxyCodeLine{19 \textcolor{preprocessor}{\#include <errno.h>}}
-\DoxyCodeLine{20 \textcolor{preprocessor}{\#include <time.h>}}
-\DoxyCodeLine{21 \textcolor{preprocessor}{\#include <math.h>}}
-\DoxyCodeLine{22 }
-\DoxyCodeLine{23 \textcolor{preprocessor}{\#ifdef HAVE\_INTTYPES\_H}}
-\DoxyCodeLine{24 \textcolor{preprocessor}{\#include <inttypes.h>}}
-\DoxyCodeLine{25 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{26 }
-\DoxyCodeLine{27 \textcolor{preprocessor}{\#ifdef HAVE\_STRING\_H}}
-\DoxyCodeLine{28 \textcolor{preprocessor}{\#include <string.h>}}
-\DoxyCodeLine{29 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{30 }
-\DoxyCodeLine{31 \textcolor{preprocessor}{\#ifdef HAVE\_STRINGS\_H}}
-\DoxyCodeLine{32 \textcolor{preprocessor}{\#include <strings.h>}}
-\DoxyCodeLine{33 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{34 }
-\DoxyCodeLine{35 \textcolor{comment}{// \#ifdef STDC\_HEADERS}}
-\DoxyCodeLine{36 \textcolor{preprocessor}{\#ifdef HAVE\_STDARGS\_H}}
-\DoxyCodeLine{37 \textcolor{preprocessor}{\#include <stdargs.h>}}
-\DoxyCodeLine{38 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{39 }
-\DoxyCodeLine{40 \textcolor{preprocessor}{\#ifdef HAVE\_CTYPE\_H}}
-\DoxyCodeLine{41 \textcolor{preprocessor}{\#include <ctype.h>}}
-\DoxyCodeLine{42 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{43 }
-\DoxyCodeLine{44 \textcolor{preprocessor}{\#ifdef HAVE\_PWD\_H}}
-\DoxyCodeLine{45 \textcolor{preprocessor}{\#include <pwd.h>}}
-\DoxyCodeLine{46 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{47 }
-\DoxyCodeLine{48 \textcolor{preprocessor}{\#ifdef HAVE\_STDARG\_H}}
-\DoxyCodeLine{49 \textcolor{preprocessor}{\#include <stdarg.h>}}
-\DoxyCodeLine{50 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{51 }
-\DoxyCodeLine{52 \textcolor{preprocessor}{\#ifdef HAVE\_STAT\_H}}
-\DoxyCodeLine{53 \textcolor{preprocessor}{\#include <sys/stat.h>}}
-\DoxyCodeLine{54 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{55 }
-\DoxyCodeLine{56 \textcolor{preprocessor}{\#ifdef HAVE\_FCNTL\_H}}
-\DoxyCodeLine{57 \textcolor{preprocessor}{\#include <fcntl.h>}}
-\DoxyCodeLine{58 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{59 }
-\DoxyCodeLine{60 \textcolor{preprocessor}{\#ifdef HAVE\_UNISTD\_H}}
-\DoxyCodeLine{61 \textcolor{preprocessor}{\#include <unistd.h>}}
-\DoxyCodeLine{62 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{63 }
-\DoxyCodeLine{64 \textcolor{preprocessor}{\#ifdef HAVE\_VARARGS\_H}}
-\DoxyCodeLine{65 \textcolor{preprocessor}{\#ifndef HAVE\_STDARG\_H}}
-\DoxyCodeLine{66 \textcolor{preprocessor}{\#include <varargs.h>}}
-\DoxyCodeLine{67 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{68 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{69 }
-\DoxyCodeLine{70 \textcolor{preprocessor}{\#ifdef HAVE\_WINDOWS\_H}}
-\DoxyCodeLine{71 \textcolor{preprocessor}{\#include <windows.h>}}
-\DoxyCodeLine{72 \textcolor{preprocessor}{\#include <io.h>}}
-\DoxyCodeLine{73 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{74 }
-\DoxyCodeLine{75 \textcolor{preprocessor}{\#include <iomanip>}}
-\DoxyCodeLine{76 }
-\DoxyCodeLine{77 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbretcod_8h}{xbretcod.h}}>}}
-\DoxyCodeLine{78 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbtypes_8h}{xbtypes.h}}>}}
-\DoxyCodeLine{79 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbstring_8h}{xbstring.h}}>}}
-\DoxyCodeLine{80 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbssv_8h}{xbssv.h}}>}}
-\DoxyCodeLine{81 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbdate_8h}{xbdate.h}}>}}
-\DoxyCodeLine{82 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbtblmgr_8h}{xbtblmgr.h}}>}}
-\DoxyCodeLine{83 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbxbase_8h}{xbxbase.h}}>}}
-\DoxyCodeLine{84 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xblnknod_8h}{xblnknod.h}}>}}
-\DoxyCodeLine{85 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xblnklst_8h}{xblnklst.h}}>}}
-\DoxyCodeLine{86 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xblnklstord_8h}{xblnklstord.h}}>}}
-\DoxyCodeLine{87 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbfile_8h}{xbfile.h}}>}}
-\DoxyCodeLine{88 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xblog_8h}{xblog.h}}>}}
-\DoxyCodeLine{89 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbmemo_8h}{xbmemo.h}}>}}
-\DoxyCodeLine{90 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbbcd_8h}{xbbcd.h}}>}}
-\DoxyCodeLine{91 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbuda_8h}{xbuda.h}}>}}
-\DoxyCodeLine{92 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbexpnode_8h}{xbexpnode.h}}>}}
-\DoxyCodeLine{93 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbexp_8h}{xbexp.h}}>}}
-\DoxyCodeLine{94 }
-\DoxyCodeLine{95 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbtag_8h}{xbtag.h}}>}}
-\DoxyCodeLine{96 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbblkread_8h}{xbblkread.h}}>}}
-\DoxyCodeLine{97 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbdbf_8h}{xbdbf.h}}>} \textcolor{comment}{/* dbf base class */}}
-\DoxyCodeLine{98 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbindex_8h}{xbindex.h}}>} \textcolor{comment}{/* index base class */}}
-\DoxyCodeLine{99 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbfilter_8h}{xbfilter.h}}>}}
-\DoxyCodeLine{100 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbsql_8h}{xbsql.h}}>}}
-
-\end{DoxyCode}
diff --git a/docs/doxygen/latex/xbbcd_8cpp.tex b/docs/doxygen/latex/xbbcd_8cpp.tex
deleted file mode 100644
index 5236b17..0000000
--- a/docs/doxygen/latex/xbbcd_8cpp.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-\hypertarget{xbbcd_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/core/xbbcd.cpp File Reference}
-\label{xbbcd_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbbcd.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbbcd.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbbcd_8h.tex b/docs/doxygen/latex/xbbcd_8h.tex
deleted file mode 100644
index a914997..0000000
--- a/docs/doxygen/latex/xbbcd_8h.tex
+++ /dev/null
@@ -1,2 +0,0 @@
-\hypertarget{xbbcd_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/include/xbbcd.h File Reference}
-\label{xbbcd_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbbcd.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbbcd.h}}
diff --git a/docs/doxygen/latex/xbbcd_8h_source.tex b/docs/doxygen/latex/xbbcd_8h_source.tex
deleted file mode 100644
index 8084dcd..0000000
--- a/docs/doxygen/latex/xbbcd_8h_source.tex
+++ /dev/null
@@ -1,97 +0,0 @@
-\hypertarget{xbbcd_8h_source}{}\doxysection{xbbcd.\+h}
-\label{xbbcd_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbbcd.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbbcd.h}}
-\mbox{\hyperlink{xbbcd_8h}{Go to the documentation of this file.}}
-\begin{DoxyCode}{0}
-\DoxyCodeLine{1 \textcolor{comment}{/* xbbcd.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, 2018, 2019, 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 \textcolor{preprocessor}{\#ifndef \_\_XB\_BCD\_H\_\_}}
-\DoxyCodeLine{17 \textcolor{preprocessor}{\#define \_\_XB\_BCD\_H\_\_}}
-\DoxyCodeLine{18 \textcolor{preprocessor}{\#ifdef XB\_INDEX\_SUPPORT}}
-\DoxyCodeLine{19 }
-\DoxyCodeLine{21 }
-\DoxyCodeLine{22 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
-\DoxyCodeLine{23 }
-\DoxyCodeLine{24 \textcolor{comment}{// structure for bcd value}}
-\DoxyCodeLine{25 \textcolor{comment}{// next structure superceeded. Different compilers allocate different}}
-\DoxyCodeLine{26 \textcolor{comment}{// sizes to structures with bit fields, can't count on the size}}
-\DoxyCodeLine{27 }
-\DoxyCodeLine{28 \textcolor{comment}{/*}}
-\DoxyCodeLine{29 \textcolor{comment}{struct XBDLLEXPORT xbBcdStrucOld \{}}
-\DoxyCodeLine{30 \textcolor{comment}{ unsigned SigDigits : 8; // significant digit count}}
-\DoxyCodeLine{31 \textcolor{comment}{ unsigned Filler : 2; // always set to 1}}
-\DoxyCodeLine{32 \textcolor{comment}{ unsigned EncDigits : 5; // encoded digit count}}
-\DoxyCodeLine{33 \textcolor{comment}{ unsigned Sign : 1; // +/-\/ sign}}
-\DoxyCodeLine{34 \textcolor{comment}{ unsigned char Data[10];}}
-\DoxyCodeLine{35 \textcolor{comment}{\};}}
-\DoxyCodeLine{36 \textcolor{comment}{*/}}
-\DoxyCodeLine{37 }
-\DoxyCodeLine{38 \textcolor{keyword}{struct }XBDLLEXPORT xbBcdStruct \{}
-\DoxyCodeLine{39 \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} cSigDigits; \textcolor{comment}{// significant digit count}}
-\DoxyCodeLine{40 \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} cEncDigits; \textcolor{comment}{// encoded digit count}}
-\DoxyCodeLine{41 \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} cData[10]; \textcolor{comment}{// data}}
-\DoxyCodeLine{42 \};}
-\DoxyCodeLine{43 }
-\DoxyCodeLine{44 \textcolor{keyword}{struct }XBDLLEXPORT xbByteSplit \{}
-\DoxyCodeLine{45 \textcolor{keywordtype}{unsigned} c1 : 4;}
-\DoxyCodeLine{46 \textcolor{keywordtype}{unsigned} c2 : 4;}
-\DoxyCodeLine{47 \};}
-\DoxyCodeLine{48 }
-\DoxyCodeLine{49 \textcolor{keyword}{class }XBDLLEXPORT xbBcd \{}
-\DoxyCodeLine{50 \textcolor{keyword}{public}:}
-\DoxyCodeLine{51 }
-\DoxyCodeLine{52 xbBcd( \textcolor{keyword}{const} xbString \&sIn );}
-\DoxyCodeLine{53 xbBcd( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn );}
-\DoxyCodeLine{54 xbBcd( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vBcd12In );}
-\DoxyCodeLine{55 \textcolor{keywordtype}{void} Set( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn );}
-\DoxyCodeLine{56 \textcolor{keywordtype}{void} Set( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *cBcd12In );}
-\DoxyCodeLine{57 \textcolor{keywordtype}{void} Set( \textcolor{keyword}{const} xbString \&sIn );}
-\DoxyCodeLine{58 }
-\DoxyCodeLine{59 }
-\DoxyCodeLine{60 \textcolor{keywordtype}{void} ToString( xbString \&sOut );}
-\DoxyCodeLine{61 \textcolor{keywordtype}{void} ToDouble( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dOut );}
-\DoxyCodeLine{62 \textcolor{keywordtype}{void} ToBcd( xbBcdStruct \&bcdOut );}
-\DoxyCodeLine{63 \textcolor{keywordtype}{void} ToChar( \textcolor{keywordtype}{char} *cOut );}
-\DoxyCodeLine{64 }
-\DoxyCodeLine{65 \textcolor{comment}{// const unsigned char * GetBcd() const;}}
-\DoxyCodeLine{66 \textcolor{keywordtype}{void} StringToBcd( \textcolor{keyword}{const} xbString \&sStringIn );}
-\DoxyCodeLine{67 }
-\DoxyCodeLine{68 xbInt16 Compare( \textcolor{keyword}{const} xbBcd \&bcdIn );}
-\DoxyCodeLine{69 xbInt16 Compare( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} d );}
-\DoxyCodeLine{70 }
-\DoxyCodeLine{71 \textcolor{keyword}{const} \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} *GetData() \textcolor{keyword}{const};}
-\DoxyCodeLine{72 \textcolor{keyword}{const} \textcolor{keywordtype}{void} * GetBcd() \textcolor{keyword}{const};}
-\DoxyCodeLine{73 }
-\DoxyCodeLine{74 }
-\DoxyCodeLine{75 \textcolor{keyword}{private}:}
-\DoxyCodeLine{76 \textcolor{keywordtype}{void} ctor();}
-\DoxyCodeLine{77 \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} GetEncDigitsNoSign() \textcolor{keyword}{const};}
-\DoxyCodeLine{78 \textcolor{keywordtype}{unsigned} GetSign() \textcolor{keyword}{const};}
-\DoxyCodeLine{79 \textcolor{keywordtype}{unsigned} GetSigDigits() \textcolor{keyword}{const};}
-\DoxyCodeLine{80 \textcolor{keywordtype}{unsigned} GetActualSigDigits() \textcolor{keyword}{const};}
-\DoxyCodeLine{81 }
-\DoxyCodeLine{82 }
-\DoxyCodeLine{83 \textcolor{comment}{// xbBcdStruc bcdOld;}}
-\DoxyCodeLine{84 xbBcdStruct bcd;}
-\DoxyCodeLine{85 \};}
-\DoxyCodeLine{86 }
-\DoxyCodeLine{87 \} \textcolor{comment}{/* namespace xb */}}
-\DoxyCodeLine{88 }
-\DoxyCodeLine{89 }
-\DoxyCodeLine{91 }
-\DoxyCodeLine{92 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* XB\_INDEX\_SUPPORT */}\textcolor{preprocessor}{}}
-\DoxyCodeLine{93 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_BCD\_H\_\_ */}\textcolor{preprocessor}{}}
-
-\end{DoxyCode}
diff --git a/docs/doxygen/latex/xbblkread_8h.tex b/docs/doxygen/latex/xbblkread_8h.tex
deleted file mode 100644
index e92d03e..0000000
--- a/docs/doxygen/latex/xbblkread_8h.tex
+++ /dev/null
@@ -1,7 +0,0 @@
-\hypertarget{xbblkread_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/include/xbblkread.h File Reference}
-\label{xbblkread_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbblkread.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbblkread.h}}
-\doxysubsection*{Namespaces}
-\begin{DoxyCompactItemize}
-\item
-namespace \mbox{\hyperlink{namespacexb}{xb}}
-\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xbblkread_8h_source.tex b/docs/doxygen/latex/xbblkread_8h_source.tex
deleted file mode 100644
index 75dd9c4..0000000
--- a/docs/doxygen/latex/xbblkread_8h_source.tex
+++ /dev/null
@@ -1,69 +0,0 @@
-\hypertarget{xbblkread_8h_source}{}\doxysection{xbblkread.\+h}
-\label{xbblkread_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbblkread.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbblkread.h}}
-\mbox{\hyperlink{xbblkread_8h}{Go to the documentation of this file.}}
-\begin{DoxyCode}{0}
-\DoxyCodeLine{1 \textcolor{comment}{/* xbblkread.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 \textcolor{preprocessor}{\#ifndef \_\_XB\_BLKREAD\_H\_\_}}
-\DoxyCodeLine{17 \textcolor{preprocessor}{\#define \_\_XB\_BLKREAD\_H\_\_}}
-\DoxyCodeLine{18 }
-\DoxyCodeLine{19 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
-\DoxyCodeLine{20 \textcolor{preprocessor}{\#ifdef XB\_BLOCKREAD\_SUPPORT}}
-\DoxyCodeLine{21 }
-\DoxyCodeLine{22 }
-\DoxyCodeLine{23 }
-\DoxyCodeLine{25 }
-\DoxyCodeLine{32 \textcolor{keyword}{class }XBDLLEXPORT xbBlockRead \{}
-\DoxyCodeLine{33 }
-\DoxyCodeLine{34 \textcolor{keyword}{public}:}
-\DoxyCodeLine{35 xbBlockRead( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} * d );}
-\DoxyCodeLine{36 \string~xbBlockRead();}
-\DoxyCodeLine{37 }
-\DoxyCodeLine{38 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
-\DoxyCodeLine{39 \textcolor{keywordtype}{void} DumpReadBlockInternals();}
-\DoxyCodeLine{40 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{41 }
-\DoxyCodeLine{42 xbInt16 Init( xbUInt32 ulBlkSize = 0 );}
-\DoxyCodeLine{43 }
-\DoxyCodeLine{44 xbUInt32 GetBlockFirstRecNo() \textcolor{keyword}{const};}
-\DoxyCodeLine{45 xbUInt32 GetBlockRecCnt() \textcolor{keyword}{const};}
-\DoxyCodeLine{46 xbUInt32 GetBlockSize() \textcolor{keyword}{const};}
-\DoxyCodeLine{47 }
-\DoxyCodeLine{48 xbInt16 GetRecord( xbUInt32 ulRecNo ); \textcolor{comment}{// retrieve a data record from a block to RecBuf}}
-\DoxyCodeLine{49 xbInt16 SetBlockSize( xbUInt32 ulBlkSize );}
-\DoxyCodeLine{50 }
-\DoxyCodeLine{51 }
-\DoxyCodeLine{52 \textcolor{keyword}{private}:}
-\DoxyCodeLine{53 }
-\DoxyCodeLine{54 xbInt16 GetBlockForRecNo( xbUInt32 ulRecNo ); \textcolor{comment}{// retrieve block from disk for a given record number}}
-\DoxyCodeLine{55 }
-\DoxyCodeLine{56 \textcolor{keywordtype}{char} *pBlock; \textcolor{comment}{// block pointer}}
-\DoxyCodeLine{57 xbUInt32 ulBlkSize; \textcolor{comment}{// block size in bytes}}
-\DoxyCodeLine{58 xbUInt32 ulFirstBlkRec; \textcolor{comment}{// first recod number in the block}}
-\DoxyCodeLine{59 xbUInt32 ulRecCnt; \textcolor{comment}{// number of records in block}}
-\DoxyCodeLine{60 xbUInt32 ulMaxRecs; \textcolor{comment}{// max number of records block can handle}}
-\DoxyCodeLine{61 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bEof; \textcolor{comment}{// EOF flag}}
-\DoxyCodeLine{62 \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf; \textcolor{comment}{// reference to associated dbf file}}
-\DoxyCodeLine{63 \textcolor{comment}{// xbXBase *xbase; // reference to main xbXBase structure}}
-\DoxyCodeLine{64 time\_t tFmTime; \textcolor{comment}{// file modify time at time of block read}}
-\DoxyCodeLine{65 }
-\DoxyCodeLine{66 \};}
-\DoxyCodeLine{67 }
-\DoxyCodeLine{68 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_BLOCKREAD}}
-\DoxyCodeLine{69 \} \textcolor{comment}{/* namespace */}}
-\DoxyCodeLine{70 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_BLOCKREAD\_H\_\_ */}\textcolor{preprocessor}{}}
-
-\end{DoxyCode}
diff --git a/docs/doxygen/latex/xbblockread_8cpp.tex b/docs/doxygen/latex/xbblockread_8cpp.tex
deleted file mode 100644
index 81bae84..0000000
--- a/docs/doxygen/latex/xbblockread_8cpp.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-\hypertarget{xbblockread_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/core/xbblockread.cpp File Reference}
-\label{xbblockread_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbblockread.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbblockread.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbcrix_8cpp.tex b/docs/doxygen/latex/xbcrix_8cpp.tex
deleted file mode 100644
index 93a2bf2..0000000
--- a/docs/doxygen/latex/xbcrix_8cpp.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-\hypertarget{xbcrix_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/sql/xbcrix.cpp File Reference}
-\label{xbcrix_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbcrix.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbcrix.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbcrtbl_8cpp.tex b/docs/doxygen/latex/xbcrtbl_8cpp.tex
deleted file mode 100644
index 51f8351..0000000
--- a/docs/doxygen/latex/xbcrtbl_8cpp.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-\hypertarget{xbcrtbl_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/sql/xbcrtbl.cpp File Reference}
-\label{xbcrtbl_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbcrtbl.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbcrtbl.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbcrtbl_8save_8cpp.tex b/docs/doxygen/latex/xbcrtbl_8save_8cpp.tex
deleted file mode 100644
index 5964451..0000000
--- a/docs/doxygen/latex/xbcrtbl_8save_8cpp.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-\hypertarget{xbcrtbl_8save_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/sql/xbcrtbl.save.\+cpp File Reference}
-\label{xbcrtbl_8save_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbcrtbl.save.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbcrtbl.save.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbdate_8cpp.tex b/docs/doxygen/latex/xbdate_8cpp.tex
deleted file mode 100644
index c0808b1..0000000
--- a/docs/doxygen/latex/xbdate_8cpp.tex
+++ /dev/null
@@ -1,9 +0,0 @@
-\hypertarget{xbdate_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/core/xbdate.cpp File Reference}
-\label{xbdate_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbdate.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbdate.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
-{\ttfamily \#include $<$time.\+h$>$}\newline
-\doxysubsection*{Namespaces}
-\begin{DoxyCompactItemize}
-\item
-namespace \mbox{\hyperlink{namespacexb}{xb}}
-\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xbdate_8h.tex b/docs/doxygen/latex/xbdate_8h.tex
deleted file mode 100644
index ad386cd..0000000
--- a/docs/doxygen/latex/xbdate_8h.tex
+++ /dev/null
@@ -1,50 +0,0 @@
-\hypertarget{xbdate_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/include/xbdate.h File Reference}
-\label{xbdate_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbdate.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbdate.h}}
-\doxysubsection*{Data Structures}
-\begin{DoxyCompactItemize}
-\item
-class \mbox{\hyperlink{classxb_1_1xbDate}{xb\+::xb\+Date}}
-\begin{DoxyCompactList}\small\item\em \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} class. \end{DoxyCompactList}\end{DoxyCompactItemize}
-\doxysubsection*{Namespaces}
-\begin{DoxyCompactItemize}
-\item
-namespace \mbox{\hyperlink{namespacexb}{xb}}
-\end{DoxyCompactItemize}
-\doxysubsection*{Macros}
-\begin{DoxyCompactItemize}
-\item
-\#define \mbox{\hyperlink{xbdate_8h_a8f22704d3fd93fa85dd93b6c699e8178}{XB\+\_\+\+FMT\+\_\+\+WEEK}}~1
-\item
-\#define \mbox{\hyperlink{xbdate_8h_aeacf2f7cc897ab5bd64781c0fb52b75d}{XB\+\_\+\+FMT\+\_\+\+MONTH}}~2
-\item
-\#define \mbox{\hyperlink{xbdate_8h_aa29d78982a9e007874af1c4f4e4d1aa4}{XB\+\_\+\+FMT\+\_\+\+YEAR}}~3
-\item
-\#define \mbox{\hyperlink{xbdate_8h_a119f32fda399e2ebc2d734012a130e8f}{JUL\+\_\+\+OFFSET}}~1721425L
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Macro Definition Documentation}
-\mbox{\Hypertarget{xbdate_8h_a119f32fda399e2ebc2d734012a130e8f}\label{xbdate_8h_a119f32fda399e2ebc2d734012a130e8f}}
-\index{xbdate.h@{xbdate.h}!JUL\_OFFSET@{JUL\_OFFSET}}
-\index{JUL\_OFFSET@{JUL\_OFFSET}!xbdate.h@{xbdate.h}}
-\doxysubsubsection{\texorpdfstring{JUL\_OFFSET}{JUL\_OFFSET}}
-{\footnotesize\ttfamily \#define JUL\+\_\+\+OFFSET~1721425L}
-
-\mbox{\Hypertarget{xbdate_8h_aeacf2f7cc897ab5bd64781c0fb52b75d}\label{xbdate_8h_aeacf2f7cc897ab5bd64781c0fb52b75d}}
-\index{xbdate.h@{xbdate.h}!XB\_FMT\_MONTH@{XB\_FMT\_MONTH}}
-\index{XB\_FMT\_MONTH@{XB\_FMT\_MONTH}!xbdate.h@{xbdate.h}}
-\doxysubsubsection{\texorpdfstring{XB\_FMT\_MONTH}{XB\_FMT\_MONTH}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+FMT\+\_\+\+MONTH~2}
-
-\mbox{\Hypertarget{xbdate_8h_a8f22704d3fd93fa85dd93b6c699e8178}\label{xbdate_8h_a8f22704d3fd93fa85dd93b6c699e8178}}
-\index{xbdate.h@{xbdate.h}!XB\_FMT\_WEEK@{XB\_FMT\_WEEK}}
-\index{XB\_FMT\_WEEK@{XB\_FMT\_WEEK}!xbdate.h@{xbdate.h}}
-\doxysubsubsection{\texorpdfstring{XB\_FMT\_WEEK}{XB\_FMT\_WEEK}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+FMT\+\_\+\+WEEK~1}
-
-\mbox{\Hypertarget{xbdate_8h_aa29d78982a9e007874af1c4f4e4d1aa4}\label{xbdate_8h_aa29d78982a9e007874af1c4f4e4d1aa4}}
-\index{xbdate.h@{xbdate.h}!XB\_FMT\_YEAR@{XB\_FMT\_YEAR}}
-\index{XB\_FMT\_YEAR@{XB\_FMT\_YEAR}!xbdate.h@{xbdate.h}}
-\doxysubsubsection{\texorpdfstring{XB\_FMT\_YEAR}{XB\_FMT\_YEAR}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+FMT\+\_\+\+YEAR~3}
-
diff --git a/docs/doxygen/latex/xbdate_8h_source.tex b/docs/doxygen/latex/xbdate_8h_source.tex
deleted file mode 100644
index fbfa1fb..0000000
--- a/docs/doxygen/latex/xbdate_8h_source.tex
+++ /dev/null
@@ -1,103 +0,0 @@
-\hypertarget{xbdate_8h_source}{}\doxysection{xbdate.\+h}
-\label{xbdate_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbdate.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbdate.h}}
-\mbox{\hyperlink{xbdate_8h}{Go to the documentation of this file.}}
-\begin{DoxyCode}{0}
-\DoxyCodeLine{1 \textcolor{comment}{/* xbdate.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\_XBDATE\_H\_\_}}
-\DoxyCodeLine{18 \textcolor{preprocessor}{\#define \_\_XB\_XBDATE\_H\_\_}}
-\DoxyCodeLine{19 }
-\DoxyCodeLine{20 \textcolor{preprocessor}{\#ifdef CMAKE\_COMPILER\_IS\_GNUCC}}
-\DoxyCodeLine{21 \textcolor{preprocessor}{\#pragma interface}}
-\DoxyCodeLine{22 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{23 }
-\DoxyCodeLine{24 }
-\DoxyCodeLine{25 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
-\DoxyCodeLine{26 }
-\DoxyCodeLine{27 \textcolor{preprocessor}{\#define XB\_FMT\_WEEK 1}}
-\DoxyCodeLine{28 \textcolor{preprocessor}{\#define XB\_FMT\_MONTH 2}}
-\DoxyCodeLine{29 \textcolor{preprocessor}{\#define XB\_FMT\_YEAR 3}}
-\DoxyCodeLine{30 }
-\DoxyCodeLine{31 \textcolor{comment}{// next value is added to the date calculation to match dbase calculation}}
-\DoxyCodeLine{32 \textcolor{comment}{// first valid dbase date is 01/01/0001}}
-\DoxyCodeLine{33 \textcolor{preprocessor}{\#define JUL\_OFFSET 1721425L}}
-\DoxyCodeLine{34 }
-\DoxyCodeLine{35 }
-\DoxyCodeLine{37 }
-\DoxyCodeLine{62 \textcolor{keyword}{class }XBDLLEXPORT \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} : \textcolor{keyword}{public} \mbox{\hyperlink{classxb_1_1xbSsv}{xbSsv}} \{}
-\DoxyCodeLine{63 \textcolor{keyword}{public}:}
-\DoxyCodeLine{64 }
-\DoxyCodeLine{65 \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}}();}
-\DoxyCodeLine{66 \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}}( \textcolor{keyword}{const} \textcolor{keywordtype}{char} * Date8 );}
-\DoxyCodeLine{67 \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}}( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Date8 );}
-\DoxyCodeLine{68 \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}}( xbInt32 lJulDate );}
-\DoxyCodeLine{69 \mbox{\hyperlink{classxb_1_1xbDate}{\string~xbDate}}();}
-\DoxyCodeLine{70 }
-\DoxyCodeLine{71 \textcolor{keywordtype}{void} operator=( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&d );}
-\DoxyCodeLine{72 \textcolor{keywordtype}{void} operator+=( xbInt32 i );}
-\DoxyCodeLine{73 \textcolor{keywordtype}{void} operator-\/=( xbInt32 i );}
-\DoxyCodeLine{74 \textcolor{keywordtype}{void} operator++( xbInt32 i );}
-\DoxyCodeLine{75 \textcolor{keywordtype}{void} operator-\/-\/( xbInt32 i );}
-\DoxyCodeLine{76 }
-\DoxyCodeLine{77 xbInt32 operator-\/( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \& ) \textcolor{keyword}{const};}
-\DoxyCodeLine{78 \textcolor{keyword}{const} \textcolor{keywordtype}{char} * operator-\/( xbInt32 i );}
-\DoxyCodeLine{79 \textcolor{keyword}{const} \textcolor{keywordtype}{char} * operator+( xbInt32 i );}
-\DoxyCodeLine{80 }
-\DoxyCodeLine{81 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator==( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \& ) \textcolor{keyword}{const};}
-\DoxyCodeLine{82 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator!=( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \& ) \textcolor{keyword}{const};}
-\DoxyCodeLine{83 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator< ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \& ) \textcolor{keyword}{const};}
-\DoxyCodeLine{84 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator> ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \& ) \textcolor{keyword}{const};}
-\DoxyCodeLine{85 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator<=( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \& ) \textcolor{keyword}{const};}
-\DoxyCodeLine{86 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator>=( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \& ) \textcolor{keyword}{const};}
-\DoxyCodeLine{87 }
-\DoxyCodeLine{88 xbInt16 CalcRollingCenturyForYear( xbInt16 year ) \textcolor{keyword}{const};}
-\DoxyCodeLine{89 xbInt16 CenturyOf() \textcolor{keyword}{const};}
-\DoxyCodeLine{90 xbInt16 CharDayOf( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOutCharDay );}
-\DoxyCodeLine{91 xbInt16 CharMonthOf( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOutCharMonth );}
-\DoxyCodeLine{92 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} DateIsValid ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sDate8 ) \textcolor{keyword}{const};}
-\DoxyCodeLine{93 xbInt16 DayOf( xbInt16 iFormat ) \textcolor{keyword}{const};}
-\DoxyCodeLine{94 xbInt16 CTOD( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sCtodInDate );}
-\DoxyCodeLine{95 xbInt16 FormatDate( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFmtIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFmtOut );}
-\DoxyCodeLine{96 \textcolor{keyword}{const} \textcolor{keywordtype}{char} *Str() \textcolor{keyword}{const};}
-\DoxyCodeLine{97 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsLeapYear( xbInt16 iYear ) \textcolor{keyword}{const};}
-\DoxyCodeLine{98 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsLeapYear() \textcolor{keyword}{const};}
-\DoxyCodeLine{99 xbInt32 JulianDays() \textcolor{keyword}{const};}
-\DoxyCodeLine{100 xbInt16 JulToDate8( xbInt32 lJulDate );}
-\DoxyCodeLine{101 xbInt16 LastDayOfMonth();}
-\DoxyCodeLine{102 xbInt16 MonthOf() \textcolor{keyword}{const};}
-\DoxyCodeLine{103 xbInt16 Set( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Date8 );}
-\DoxyCodeLine{104 xbInt16 Sysdate();}
-\DoxyCodeLine{105 xbInt16 YearOf() \textcolor{keyword}{const};}
-\DoxyCodeLine{106 }
-\DoxyCodeLine{107 \textcolor{preprocessor}{\#ifdef XB\_DEBUG\_SUPPORT}}
-\DoxyCodeLine{108 \textcolor{keywordtype}{void} Dump( \textcolor{keyword}{const} \textcolor{keywordtype}{char} * title );}
-\DoxyCodeLine{109 \textcolor{keywordtype}{void} DumpDateTables();}
-\DoxyCodeLine{110 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{111 }
-\DoxyCodeLine{112 \textcolor{keyword}{private}:}
-\DoxyCodeLine{113 \textcolor{keywordtype}{void} SetDateTables();}
-\DoxyCodeLine{114 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sDate8; \textcolor{comment}{/* CCYYMMDD date format ie; 20140718 */}}
-\DoxyCodeLine{115 }
-\DoxyCodeLine{116 \textcolor{keyword}{static} \textcolor{keywordtype}{int} iAggregatedDaysInMonths[2][13];}
-\DoxyCodeLine{117 \textcolor{keyword}{static} \textcolor{keywordtype}{int} iDaysInMonths[2][13];}
-\DoxyCodeLine{118 \};}
-\DoxyCodeLine{119 }
-\DoxyCodeLine{120 \} \textcolor{comment}{/* namespace */}}
-\DoxyCodeLine{121 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/*\_\_XB\_XBDATE\_H\_\_ */}\textcolor{preprocessor}{}}
-\DoxyCodeLine{122 }
-
-\end{DoxyCode}
diff --git a/docs/doxygen/latex/xbdbf3_8cpp.tex b/docs/doxygen/latex/xbdbf3_8cpp.tex
deleted file mode 100644
index 158b426..0000000
--- a/docs/doxygen/latex/xbdbf3_8cpp.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-\hypertarget{xbdbf3_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/core/xbdbf3.cpp File Reference}
-\label{xbdbf3_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbdbf3.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbdbf3.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbdbf4_8cpp.tex b/docs/doxygen/latex/xbdbf4_8cpp.tex
deleted file mode 100644
index 5b06efb..0000000
--- a/docs/doxygen/latex/xbdbf4_8cpp.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-\hypertarget{xbdbf4_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/core/xbdbf4.cpp File Reference}
-\label{xbdbf4_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbdbf4.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbdbf4.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbdbf_8cpp.tex b/docs/doxygen/latex/xbdbf_8cpp.tex
deleted file mode 100644
index 42f926d..0000000
--- a/docs/doxygen/latex/xbdbf_8cpp.tex
+++ /dev/null
@@ -1,8 +0,0 @@
-\hypertarget{xbdbf_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/core/xbdbf.cpp File Reference}
-\label{xbdbf_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbdbf.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbdbf.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
-\doxysubsection*{Namespaces}
-\begin{DoxyCompactItemize}
-\item
-namespace \mbox{\hyperlink{namespacexb}{xb}}
-\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xbdbf_8h.tex b/docs/doxygen/latex/xbdbf_8h.tex
deleted file mode 100644
index 59ea13f..0000000
--- a/docs/doxygen/latex/xbdbf_8h.tex
+++ /dev/null
@@ -1,196 +0,0 @@
-\hypertarget{xbdbf_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/include/xbdbf.h File Reference}
-\label{xbdbf_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbdbf.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbdbf.h}}
-\doxysubsection*{Data Structures}
-\begin{DoxyCompactItemize}
-\item
-struct \mbox{\hyperlink{structxb_1_1xbSchema}{xb\+::xb\+Schema}}
-\begin{DoxyCompactList}\small\item\em Schema used for defining tables with Create\+Table methods. \end{DoxyCompactList}\item
-class \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+::xb\+Dbf}}
-\begin{DoxyCompactList}\small\item\em Base class for handling dbf files/tables. \end{DoxyCompactList}\end{DoxyCompactItemize}
-\doxysubsection*{Namespaces}
-\begin{DoxyCompactItemize}
-\item
-namespace \mbox{\hyperlink{namespacexb}{xb}}
-\end{DoxyCompactItemize}
-\doxysubsection*{Macros}
-\begin{DoxyCompactItemize}
-\item
-\#define \mbox{\hyperlink{xbdbf_8h_a20f739b9d9dc6a002a246a999e76aeaa}{XB\+\_\+\+CHAR\+\_\+\+FLD}}~\textquotesingle{}C\textquotesingle{}
-\item
-\#define \mbox{\hyperlink{xbdbf_8h_a2f6d5073af761bc1a806a2c7b1c1d886}{XB\+\_\+\+LOGICAL\+\_\+\+FLD}}~\textquotesingle{}L\textquotesingle{}
-\item
-\#define \mbox{\hyperlink{xbdbf_8h_ae9fb6d69cc5edc94d36ae403c22ec1c6}{XB\+\_\+\+NUMERIC\+\_\+\+FLD}}~\textquotesingle{}N\textquotesingle{}
-\item
-\#define \mbox{\hyperlink{xbdbf_8h_a7f685e6f5fe804b2174725a27ce73adc}{XB\+\_\+\+DATE\+\_\+\+FLD}}~\textquotesingle{}D\textquotesingle{}
-\item
-\#define \mbox{\hyperlink{xbdbf_8h_a23fa19b19cb43bd6dcc59a5a3f6c30ad}{XB\+\_\+\+MEMO\+\_\+\+FLD}}~\textquotesingle{}M\textquotesingle{}
-\item
-\#define \mbox{\hyperlink{xbdbf_8h_a96ab4218d70ab603b4866354ce8c18cd}{XB\+\_\+\+FLOAT\+\_\+\+FLD}}~\textquotesingle{}F\textquotesingle{}
-\item
-\#define \mbox{\hyperlink{xbdbf_8h_a843ca4569326dbd1d0647899b0eb512f}{XB\+\_\+\+CLOSED}}~0
-\item
-\#define \mbox{\hyperlink{xbdbf_8h_a9a6dafbb07cac744eb14094efa739409}{XB\+\_\+\+OPEN}}~1
-\item
-\#define \mbox{\hyperlink{xbdbf_8h_a26e7eeda69f32bc88b08a208ca9e7991}{XB\+\_\+\+UPDATED}}~2
-\item
-\#define \mbox{\hyperlink{xbdbf_8h_a395a2e101a793bacabf6bc079d178e29}{XB\+\_\+\+LOCK}}~0
-\item
-\#define \mbox{\hyperlink{xbdbf_8h_a21389b73e7b4e7e185fa635b9e354c2e}{XB\+\_\+\+UNLOCK}}~1
-\item
-\#define \mbox{\hyperlink{xbdbf_8h_a4c08d01bd69e295b001bd00a228d8106}{LK\+\_\+\+DBASE}}~1
-\item
-\#define \mbox{\hyperlink{xbdbf_8h_a01d6d7910b0da2170eb904a97d864a41}{LK\+\_\+\+CLIPPER}}~2
-\item
-\#define \mbox{\hyperlink{xbdbf_8h_a65e29186276222f460a7171803e07adf}{LK\+\_\+\+FOX}}~3
-\item
-\#define \mbox{\hyperlink{xbdbf_8h_a42aea0ccd94f7422c8e0d7422dce85a4}{LK\+\_\+\+XBASE64}}~9
-\item
-\#define \mbox{\hyperlink{xbdbf_8h_a8bd17730da3ba5c55a6a07bc482dd0e4}{XB\+\_\+\+ALL\+\_\+\+RECS}}~0
-\item
-\#define \mbox{\hyperlink{xbdbf_8h_a1c44bb25bf2e23a3a9d3d2312df0b592}{XB\+\_\+\+ACTIVE\+\_\+\+RECS}}~1
-\item
-\#define \mbox{\hyperlink{xbdbf_8h_acc0a441854ed92b9d65d1181a97cad43}{XB\+\_\+\+DELETED\+\_\+\+RECS}}~2
-\item
-\#define \mbox{\hyperlink{xbdbf_8h_a6fe10b307878b4612b04c2c876a4a592}{XB\+\_\+\+OVERLAY}}~1
-\item
-\#define \mbox{\hyperlink{xbdbf_8h_a7b797840abdb3291373d15978103a778}{XB\+\_\+\+DONTOVERLAY}}~0
-\item
-\#define \mbox{\hyperlink{xbdbf_8h_ada1115f596131888c04df61546b198c4}{XB\+\_\+\+CHAREOF}}~\textquotesingle{}\textbackslash{}x1A\textquotesingle{} /$\ast$ end of DBF $\ast$/
-\item
-\#define \mbox{\hyperlink{xbdbf_8h_a35d56cac7959c1e5c761684ced3f1e17}{XB\+\_\+\+CHARHDR}}~\textquotesingle{}\textbackslash{}x0D\textquotesingle{} /$\ast$ header terminator $\ast$/
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Macro Definition Documentation}
-\mbox{\Hypertarget{xbdbf_8h_a01d6d7910b0da2170eb904a97d864a41}\label{xbdbf_8h_a01d6d7910b0da2170eb904a97d864a41}}
-\index{xbdbf.h@{xbdbf.h}!LK\_CLIPPER@{LK\_CLIPPER}}
-\index{LK\_CLIPPER@{LK\_CLIPPER}!xbdbf.h@{xbdbf.h}}
-\doxysubsubsection{\texorpdfstring{LK\_CLIPPER}{LK\_CLIPPER}}
-{\footnotesize\ttfamily \#define LK\+\_\+\+CLIPPER~2}
-
-\mbox{\Hypertarget{xbdbf_8h_a4c08d01bd69e295b001bd00a228d8106}\label{xbdbf_8h_a4c08d01bd69e295b001bd00a228d8106}}
-\index{xbdbf.h@{xbdbf.h}!LK\_DBASE@{LK\_DBASE}}
-\index{LK\_DBASE@{LK\_DBASE}!xbdbf.h@{xbdbf.h}}
-\doxysubsubsection{\texorpdfstring{LK\_DBASE}{LK\_DBASE}}
-{\footnotesize\ttfamily \#define LK\+\_\+\+DBASE~1}
-
-\mbox{\Hypertarget{xbdbf_8h_a65e29186276222f460a7171803e07adf}\label{xbdbf_8h_a65e29186276222f460a7171803e07adf}}
-\index{xbdbf.h@{xbdbf.h}!LK\_FOX@{LK\_FOX}}
-\index{LK\_FOX@{LK\_FOX}!xbdbf.h@{xbdbf.h}}
-\doxysubsubsection{\texorpdfstring{LK\_FOX}{LK\_FOX}}
-{\footnotesize\ttfamily \#define LK\+\_\+\+FOX~3}
-
-\mbox{\Hypertarget{xbdbf_8h_a42aea0ccd94f7422c8e0d7422dce85a4}\label{xbdbf_8h_a42aea0ccd94f7422c8e0d7422dce85a4}}
-\index{xbdbf.h@{xbdbf.h}!LK\_XBASE64@{LK\_XBASE64}}
-\index{LK\_XBASE64@{LK\_XBASE64}!xbdbf.h@{xbdbf.h}}
-\doxysubsubsection{\texorpdfstring{LK\_XBASE64}{LK\_XBASE64}}
-{\footnotesize\ttfamily \#define LK\+\_\+\+XBASE64~9}
-
-\mbox{\Hypertarget{xbdbf_8h_a1c44bb25bf2e23a3a9d3d2312df0b592}\label{xbdbf_8h_a1c44bb25bf2e23a3a9d3d2312df0b592}}
-\index{xbdbf.h@{xbdbf.h}!XB\_ACTIVE\_RECS@{XB\_ACTIVE\_RECS}}
-\index{XB\_ACTIVE\_RECS@{XB\_ACTIVE\_RECS}!xbdbf.h@{xbdbf.h}}
-\doxysubsubsection{\texorpdfstring{XB\_ACTIVE\_RECS}{XB\_ACTIVE\_RECS}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+ACTIVE\+\_\+\+RECS~1}
-
-\mbox{\Hypertarget{xbdbf_8h_a8bd17730da3ba5c55a6a07bc482dd0e4}\label{xbdbf_8h_a8bd17730da3ba5c55a6a07bc482dd0e4}}
-\index{xbdbf.h@{xbdbf.h}!XB\_ALL\_RECS@{XB\_ALL\_RECS}}
-\index{XB\_ALL\_RECS@{XB\_ALL\_RECS}!xbdbf.h@{xbdbf.h}}
-\doxysubsubsection{\texorpdfstring{XB\_ALL\_RECS}{XB\_ALL\_RECS}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+ALL\+\_\+\+RECS~0}
-
-\mbox{\Hypertarget{xbdbf_8h_a20f739b9d9dc6a002a246a999e76aeaa}\label{xbdbf_8h_a20f739b9d9dc6a002a246a999e76aeaa}}
-\index{xbdbf.h@{xbdbf.h}!XB\_CHAR\_FLD@{XB\_CHAR\_FLD}}
-\index{XB\_CHAR\_FLD@{XB\_CHAR\_FLD}!xbdbf.h@{xbdbf.h}}
-\doxysubsubsection{\texorpdfstring{XB\_CHAR\_FLD}{XB\_CHAR\_FLD}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+CHAR\+\_\+\+FLD~\textquotesingle{}C\textquotesingle{}}
-
-\mbox{\Hypertarget{xbdbf_8h_ada1115f596131888c04df61546b198c4}\label{xbdbf_8h_ada1115f596131888c04df61546b198c4}}
-\index{xbdbf.h@{xbdbf.h}!XB\_CHAREOF@{XB\_CHAREOF}}
-\index{XB\_CHAREOF@{XB\_CHAREOF}!xbdbf.h@{xbdbf.h}}
-\doxysubsubsection{\texorpdfstring{XB\_CHAREOF}{XB\_CHAREOF}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+CHAREOF~\textquotesingle{}\textbackslash{}x1A\textquotesingle{} /$\ast$ end of DBF $\ast$/}
-
-\mbox{\Hypertarget{xbdbf_8h_a35d56cac7959c1e5c761684ced3f1e17}\label{xbdbf_8h_a35d56cac7959c1e5c761684ced3f1e17}}
-\index{xbdbf.h@{xbdbf.h}!XB\_CHARHDR@{XB\_CHARHDR}}
-\index{XB\_CHARHDR@{XB\_CHARHDR}!xbdbf.h@{xbdbf.h}}
-\doxysubsubsection{\texorpdfstring{XB\_CHARHDR}{XB\_CHARHDR}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+CHARHDR~\textquotesingle{}\textbackslash{}x0D\textquotesingle{} /$\ast$ header terminator $\ast$/}
-
-\mbox{\Hypertarget{xbdbf_8h_a843ca4569326dbd1d0647899b0eb512f}\label{xbdbf_8h_a843ca4569326dbd1d0647899b0eb512f}}
-\index{xbdbf.h@{xbdbf.h}!XB\_CLOSED@{XB\_CLOSED}}
-\index{XB\_CLOSED@{XB\_CLOSED}!xbdbf.h@{xbdbf.h}}
-\doxysubsubsection{\texorpdfstring{XB\_CLOSED}{XB\_CLOSED}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+CLOSED~0}
-
-\mbox{\Hypertarget{xbdbf_8h_a7f685e6f5fe804b2174725a27ce73adc}\label{xbdbf_8h_a7f685e6f5fe804b2174725a27ce73adc}}
-\index{xbdbf.h@{xbdbf.h}!XB\_DATE\_FLD@{XB\_DATE\_FLD}}
-\index{XB\_DATE\_FLD@{XB\_DATE\_FLD}!xbdbf.h@{xbdbf.h}}
-\doxysubsubsection{\texorpdfstring{XB\_DATE\_FLD}{XB\_DATE\_FLD}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+DATE\+\_\+\+FLD~\textquotesingle{}D\textquotesingle{}}
-
-\mbox{\Hypertarget{xbdbf_8h_acc0a441854ed92b9d65d1181a97cad43}\label{xbdbf_8h_acc0a441854ed92b9d65d1181a97cad43}}
-\index{xbdbf.h@{xbdbf.h}!XB\_DELETED\_RECS@{XB\_DELETED\_RECS}}
-\index{XB\_DELETED\_RECS@{XB\_DELETED\_RECS}!xbdbf.h@{xbdbf.h}}
-\doxysubsubsection{\texorpdfstring{XB\_DELETED\_RECS}{XB\_DELETED\_RECS}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+DELETED\+\_\+\+RECS~2}
-
-\mbox{\Hypertarget{xbdbf_8h_a7b797840abdb3291373d15978103a778}\label{xbdbf_8h_a7b797840abdb3291373d15978103a778}}
-\index{xbdbf.h@{xbdbf.h}!XB\_DONTOVERLAY@{XB\_DONTOVERLAY}}
-\index{XB\_DONTOVERLAY@{XB\_DONTOVERLAY}!xbdbf.h@{xbdbf.h}}
-\doxysubsubsection{\texorpdfstring{XB\_DONTOVERLAY}{XB\_DONTOVERLAY}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+DONTOVERLAY~0}
-
-\mbox{\Hypertarget{xbdbf_8h_a96ab4218d70ab603b4866354ce8c18cd}\label{xbdbf_8h_a96ab4218d70ab603b4866354ce8c18cd}}
-\index{xbdbf.h@{xbdbf.h}!XB\_FLOAT\_FLD@{XB\_FLOAT\_FLD}}
-\index{XB\_FLOAT\_FLD@{XB\_FLOAT\_FLD}!xbdbf.h@{xbdbf.h}}
-\doxysubsubsection{\texorpdfstring{XB\_FLOAT\_FLD}{XB\_FLOAT\_FLD}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+FLOAT\+\_\+\+FLD~\textquotesingle{}F\textquotesingle{}}
-
-\mbox{\Hypertarget{xbdbf_8h_a395a2e101a793bacabf6bc079d178e29}\label{xbdbf_8h_a395a2e101a793bacabf6bc079d178e29}}
-\index{xbdbf.h@{xbdbf.h}!XB\_LOCK@{XB\_LOCK}}
-\index{XB\_LOCK@{XB\_LOCK}!xbdbf.h@{xbdbf.h}}
-\doxysubsubsection{\texorpdfstring{XB\_LOCK}{XB\_LOCK}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+LOCK~0}
-
-\mbox{\Hypertarget{xbdbf_8h_a2f6d5073af761bc1a806a2c7b1c1d886}\label{xbdbf_8h_a2f6d5073af761bc1a806a2c7b1c1d886}}
-\index{xbdbf.h@{xbdbf.h}!XB\_LOGICAL\_FLD@{XB\_LOGICAL\_FLD}}
-\index{XB\_LOGICAL\_FLD@{XB\_LOGICAL\_FLD}!xbdbf.h@{xbdbf.h}}
-\doxysubsubsection{\texorpdfstring{XB\_LOGICAL\_FLD}{XB\_LOGICAL\_FLD}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+LOGICAL\+\_\+\+FLD~\textquotesingle{}L\textquotesingle{}}
-
-\mbox{\Hypertarget{xbdbf_8h_a23fa19b19cb43bd6dcc59a5a3f6c30ad}\label{xbdbf_8h_a23fa19b19cb43bd6dcc59a5a3f6c30ad}}
-\index{xbdbf.h@{xbdbf.h}!XB\_MEMO\_FLD@{XB\_MEMO\_FLD}}
-\index{XB\_MEMO\_FLD@{XB\_MEMO\_FLD}!xbdbf.h@{xbdbf.h}}
-\doxysubsubsection{\texorpdfstring{XB\_MEMO\_FLD}{XB\_MEMO\_FLD}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+MEMO\+\_\+\+FLD~\textquotesingle{}M\textquotesingle{}}
-
-\mbox{\Hypertarget{xbdbf_8h_ae9fb6d69cc5edc94d36ae403c22ec1c6}\label{xbdbf_8h_ae9fb6d69cc5edc94d36ae403c22ec1c6}}
-\index{xbdbf.h@{xbdbf.h}!XB\_NUMERIC\_FLD@{XB\_NUMERIC\_FLD}}
-\index{XB\_NUMERIC\_FLD@{XB\_NUMERIC\_FLD}!xbdbf.h@{xbdbf.h}}
-\doxysubsubsection{\texorpdfstring{XB\_NUMERIC\_FLD}{XB\_NUMERIC\_FLD}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+NUMERIC\+\_\+\+FLD~\textquotesingle{}N\textquotesingle{}}
-
-\mbox{\Hypertarget{xbdbf_8h_a9a6dafbb07cac744eb14094efa739409}\label{xbdbf_8h_a9a6dafbb07cac744eb14094efa739409}}
-\index{xbdbf.h@{xbdbf.h}!XB\_OPEN@{XB\_OPEN}}
-\index{XB\_OPEN@{XB\_OPEN}!xbdbf.h@{xbdbf.h}}
-\doxysubsubsection{\texorpdfstring{XB\_OPEN}{XB\_OPEN}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+OPEN~1}
-
-\mbox{\Hypertarget{xbdbf_8h_a6fe10b307878b4612b04c2c876a4a592}\label{xbdbf_8h_a6fe10b307878b4612b04c2c876a4a592}}
-\index{xbdbf.h@{xbdbf.h}!XB\_OVERLAY@{XB\_OVERLAY}}
-\index{XB\_OVERLAY@{XB\_OVERLAY}!xbdbf.h@{xbdbf.h}}
-\doxysubsubsection{\texorpdfstring{XB\_OVERLAY}{XB\_OVERLAY}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+OVERLAY~1}
-
-\mbox{\Hypertarget{xbdbf_8h_a21389b73e7b4e7e185fa635b9e354c2e}\label{xbdbf_8h_a21389b73e7b4e7e185fa635b9e354c2e}}
-\index{xbdbf.h@{xbdbf.h}!XB\_UNLOCK@{XB\_UNLOCK}}
-\index{XB\_UNLOCK@{XB\_UNLOCK}!xbdbf.h@{xbdbf.h}}
-\doxysubsubsection{\texorpdfstring{XB\_UNLOCK}{XB\_UNLOCK}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+UNLOCK~1}
-
-\mbox{\Hypertarget{xbdbf_8h_a26e7eeda69f32bc88b08a208ca9e7991}\label{xbdbf_8h_a26e7eeda69f32bc88b08a208ca9e7991}}
-\index{xbdbf.h@{xbdbf.h}!XB\_UPDATED@{XB\_UPDATED}}
-\index{XB\_UPDATED@{XB\_UPDATED}!xbdbf.h@{xbdbf.h}}
-\doxysubsubsection{\texorpdfstring{XB\_UPDATED}{XB\_UPDATED}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+UPDATED~2}
-
diff --git a/docs/doxygen/latex/xbdbf_8h_source.tex b/docs/doxygen/latex/xbdbf_8h_source.tex
deleted file mode 100644
index 0bf6c91..0000000
--- a/docs/doxygen/latex/xbdbf_8h_source.tex
+++ /dev/null
@@ -1,511 +0,0 @@
-\hypertarget{xbdbf_8h_source}{}\doxysection{xbdbf.\+h}
-\label{xbdbf_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbdbf.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbdbf.h}}
-\mbox{\hyperlink{xbdbf_8h}{Go to the documentation of this file.}}
-\begin{DoxyCode}{0}
-\DoxyCodeLine{1 \textcolor{comment}{/* xbdbf.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,2023 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\_XBDBF\_H\_\_}}
-\DoxyCodeLine{18 \textcolor{preprocessor}{\#define \_\_XB\_XBDBF\_H\_\_}}
-\DoxyCodeLine{19 }
-\DoxyCodeLine{20 \textcolor{comment}{//\#ifdef CMAKE\_COMPILER\_IS\_GNUCC}}
-\DoxyCodeLine{21 \textcolor{comment}{//\#pragma interface}}
-\DoxyCodeLine{22 \textcolor{comment}{//\#endif}}
-\DoxyCodeLine{23 }
-\DoxyCodeLine{24 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
-\DoxyCodeLine{25 }
-\DoxyCodeLine{26 \textcolor{comment}{/*****************************/}}
-\DoxyCodeLine{27 \textcolor{comment}{/* Field Types */}}
-\DoxyCodeLine{28 }
-\DoxyCodeLine{29 \textcolor{preprocessor}{\#define XB\_CHAR\_FLD 'C'}}
-\DoxyCodeLine{30 \textcolor{preprocessor}{\#define XB\_LOGICAL\_FLD 'L'}}
-\DoxyCodeLine{31 \textcolor{preprocessor}{\#define XB\_NUMERIC\_FLD 'N'}}
-\DoxyCodeLine{32 \textcolor{preprocessor}{\#define XB\_DATE\_FLD 'D'}}
-\DoxyCodeLine{33 \textcolor{preprocessor}{\#define XB\_MEMO\_FLD 'M'}}
-\DoxyCodeLine{34 \textcolor{preprocessor}{\#define XB\_FLOAT\_FLD 'F'}}
-\DoxyCodeLine{35 }
-\DoxyCodeLine{36 \textcolor{comment}{/*****************************/}}
-\DoxyCodeLine{37 \textcolor{comment}{/* File Status Codes */}}
-\DoxyCodeLine{38 }
-\DoxyCodeLine{39 \textcolor{preprocessor}{\#define XB\_CLOSED 0}}
-\DoxyCodeLine{40 \textcolor{preprocessor}{\#define XB\_OPEN 1}}
-\DoxyCodeLine{41 \textcolor{preprocessor}{\#define XB\_UPDATED 2}}
-\DoxyCodeLine{42 }
-\DoxyCodeLine{43 }
-\DoxyCodeLine{44 \textcolor{comment}{/*****************************/}}
-\DoxyCodeLine{45 \textcolor{comment}{/* File Access Modes */}}
-\DoxyCodeLine{46 \textcolor{comment}{// \#define XB\_SINGLE\_USER 0 // file buffering on}}
-\DoxyCodeLine{47 \textcolor{comment}{// \#define XB\_MULTI\_USER 1 // file buffering off}}
-\DoxyCodeLine{48 }
-\DoxyCodeLine{49 \textcolor{comment}{/*****************************/}}
-\DoxyCodeLine{50 \textcolor{comment}{/* File Lock Functions */}}
-\DoxyCodeLine{51 \textcolor{preprocessor}{\#define XB\_LOCK 0}}
-\DoxyCodeLine{52 \textcolor{preprocessor}{\#define XB\_UNLOCK 1}}
-\DoxyCodeLine{53 }
-\DoxyCodeLine{54 \textcolor{preprocessor}{\#define LK\_DBASE 1}}
-\DoxyCodeLine{55 \textcolor{preprocessor}{\#define LK\_CLIPPER 2 }\textcolor{comment}{// future}}
-\DoxyCodeLine{56 \textcolor{preprocessor}{\#define LK\_FOX 3 }\textcolor{comment}{// future}}
-\DoxyCodeLine{57 \textcolor{preprocessor}{\#define LK\_XBASE64 9 }\textcolor{comment}{// future}}
-\DoxyCodeLine{58 }
-\DoxyCodeLine{59 \textcolor{comment}{/*****************************/}}
-\DoxyCodeLine{60 \textcolor{comment}{/* Record retrieve options */}}
-\DoxyCodeLine{61 \textcolor{preprocessor}{\#define XB\_ALL\_RECS 0}}
-\DoxyCodeLine{62 \textcolor{preprocessor}{\#define XB\_ACTIVE\_RECS 1}}
-\DoxyCodeLine{63 \textcolor{preprocessor}{\#define XB\_DELETED\_RECS 2}}
-\DoxyCodeLine{64 }
-\DoxyCodeLine{65 }
-\DoxyCodeLine{66 \textcolor{comment}{/*****************************/}}
-\DoxyCodeLine{67 \textcolor{comment}{/* Other defines */}}
-\DoxyCodeLine{68 }
-\DoxyCodeLine{69 \textcolor{preprocessor}{\#define XB\_OVERLAY 1}}
-\DoxyCodeLine{70 \textcolor{preprocessor}{\#define XB\_DONTOVERLAY 0}}
-\DoxyCodeLine{71 \textcolor{preprocessor}{\#define XB\_CHAREOF '\(\backslash\)x1A' }\textcolor{comment}{/* end of DBF */}\textcolor{preprocessor}{}}
-\DoxyCodeLine{72 \textcolor{preprocessor}{\#define XB\_CHARHDR '\(\backslash\)x0D' }\textcolor{comment}{/* header terminator */}\textcolor{preprocessor}{}}
-\DoxyCodeLine{73 }
-\DoxyCodeLine{74 }
-\DoxyCodeLine{76 }
-\DoxyCodeLine{95 \textcolor{keyword}{struct }XBDLLEXPORT \mbox{\hyperlink{structxb_1_1xbSchema}{xbSchema}} \{}
-\DoxyCodeLine{96 \textcolor{keywordtype}{char} cFieldName[11];}
-\DoxyCodeLine{97 \textcolor{keywordtype}{char} \mbox{\hyperlink{structxb_1_1xbSchema_a1d612b2ed5dc0b0289c9e91b3cda3a25}{cType}};}
-\DoxyCodeLine{98 xbInt16 \mbox{\hyperlink{structxb_1_1xbSchema_a2da554af25ef628acf59bb52996056ac}{iFieldLen}}; \textcolor{comment}{/* fields are stored as one byte on record*/}}
-\DoxyCodeLine{99 xbInt16 \mbox{\hyperlink{structxb_1_1xbSchema_a55bab3bb69dee3508d168c93e182d4b9}{iNoOfDecs}};}
-\DoxyCodeLine{100 \};}
-\DoxyCodeLine{101 }
-\DoxyCodeLine{103 \textcolor{keyword}{struct }XBDLLEXPORT xbSchemaRec \{}
-\DoxyCodeLine{104 \textcolor{keywordtype}{char} cFieldName[11]; \textcolor{comment}{/* ASCIIZ field name */}}
-\DoxyCodeLine{105 \textcolor{keywordtype}{char} cType; \textcolor{comment}{/* field type */}}
-\DoxyCodeLine{106 \textcolor{keywordtype}{char} *pAddress; \textcolor{comment}{/* pointer to field in record buffer 1 */}}
-\DoxyCodeLine{107 \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} cFieldLen; \textcolor{comment}{/* fields are stored as one byte on record */}}
-\DoxyCodeLine{108 \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} cNoOfDecs;}
-\DoxyCodeLine{109 \textcolor{keywordtype}{char} *pAddress2; \textcolor{comment}{/* pointer to field in record buffer 2 */}}
-\DoxyCodeLine{110 xbInt16 iLongFieldLen; \textcolor{comment}{/* to handle long field lengths */}}
-\DoxyCodeLine{111 \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} cIxFlag; \textcolor{comment}{/* DBase IV Index field flag */}}
-\DoxyCodeLine{112 \};}
-\DoxyCodeLine{114 }
-\DoxyCodeLine{115 }
-\DoxyCodeLine{116 }
-\DoxyCodeLine{118 \textcolor{preprocessor}{\#ifdef XB\_INDEX\_SUPPORT}}
-\DoxyCodeLine{119 \textcolor{keyword}{class }XBDLLEXPORT xbIx;}
-\DoxyCodeLine{120 \textcolor{comment}{// structure for file list, each open DBF file can have one or more index files}}
-\DoxyCodeLine{121 \textcolor{keyword}{struct }XBDLLEXPORT xbIxList \{}
-\DoxyCodeLine{122 xbIxList *next;}
-\DoxyCodeLine{123 xbIx *ix;}
-\DoxyCodeLine{124 xbString *sFmt;}
-\DoxyCodeLine{125 \};}
-\DoxyCodeLine{126 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_INDEX\_SUPPORT}}
-\DoxyCodeLine{128 \textcolor{comment}{}}
-\DoxyCodeLine{129 }
-\DoxyCodeLine{131 }
-\DoxyCodeLine{150 \textcolor{keyword}{class }XBDLLEXPORT \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} : \textcolor{keyword}{public} \mbox{\hyperlink{classxb_1_1xbFile}{xbFile}} \{}
-\DoxyCodeLine{151 }
-\DoxyCodeLine{152 \textcolor{keyword}{public}:}
-\DoxyCodeLine{153 \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}}( \mbox{\hyperlink{classxb_1_1xbXBase}{xbXBase}} *x );}
-\DoxyCodeLine{154 \textcolor{keyword}{virtual} \mbox{\hyperlink{classxb_1_1xbDbf}{\string~xbDbf}}();}
-\DoxyCodeLine{155 }
-\DoxyCodeLine{156 \textcolor{keyword}{virtual} xbInt16 Abort();}
-\DoxyCodeLine{157 \textcolor{keyword}{virtual} xbInt16 AppendRecord();}
-\DoxyCodeLine{158 \textcolor{keyword}{virtual} xbInt16 BlankRecord();}
-\DoxyCodeLine{159 \textcolor{keyword}{virtual} xbInt16 Commit();}
-\DoxyCodeLine{160 \textcolor{keyword}{virtual} xbInt16 Close();}
-\DoxyCodeLine{161 \textcolor{keyword}{virtual} xbInt16 CopyDbfStructure( \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} *dNewTable, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTableName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTableAlias, xbInt16 iOverlay, xbInt16 iShareMode );}
-\DoxyCodeLine{162 \textcolor{keyword}{virtual} xbInt16 \mbox{\hyperlink{classxb_1_1xbDbf_a73e41bfe679dd06ab16c436652df93f1}{CreateTable}} ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTableName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sAlias, \mbox{\hyperlink{structxb_1_1xbSchema}{xbSchema}} *pSchema, xbInt16 iOverlay, xbInt16 iShareMode ) = 0;}
-\DoxyCodeLine{163 \textcolor{keyword}{virtual} xbInt16 DeleteTable ();}
-\DoxyCodeLine{164 \textcolor{keyword}{virtual} xbInt16 DeleteAll ( xbInt16 iOption );}
-\DoxyCodeLine{165 \textcolor{keyword}{virtual} xbInt16 DeleteAllRecords ();}
-\DoxyCodeLine{166 \textcolor{keyword}{virtual} xbInt16 DeleteRecord ();}
-\DoxyCodeLine{167 \textcolor{keyword}{virtual} xbInt16 DumpHeader ( xbInt16 iOption ) \textcolor{keyword}{const};}
-\DoxyCodeLine{168 \textcolor{keyword}{virtual} xbInt16 DumpRecord ( xbUInt32 ulRecNo, xbInt16 iOutputDest = 0, xbInt16 iOutputFmt = 0 );}
-\DoxyCodeLine{169 \textcolor{keyword}{virtual} xbInt16 GetAutoCommit () \textcolor{keyword}{const};}
-\DoxyCodeLine{170 \textcolor{keyword}{virtual} xbInt16 GetAutoCommit ( xbInt16 iOption ) \textcolor{keyword}{const};}
-\DoxyCodeLine{171 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetBof ();}
-\DoxyCodeLine{172 \textcolor{keyword}{virtual} xbUInt32 GetCurRecNo () \textcolor{keyword}{const};}
-\DoxyCodeLine{173 \textcolor{keyword}{virtual} xbInt16 GetDbfStatus () \textcolor{keyword}{const};}
-\DoxyCodeLine{174 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetEof ();}
-\DoxyCodeLine{175 \textcolor{keyword}{virtual} xbInt32 GetFieldCnt () \textcolor{keyword}{const};}
-\DoxyCodeLine{176 \textcolor{keyword}{virtual} xbInt16 GetFirstRecord ();}
-\DoxyCodeLine{177 \textcolor{keyword}{virtual} xbInt16 GetFirstRecord ( xbInt16 iOption );}
-\DoxyCodeLine{178 \textcolor{keyword}{virtual} xbUInt16 \mbox{\hyperlink{classxb_1_1xbDbf_ad56be2756b7a9f8318d9ba5cf215dafb}{GetHeaderLen}} () \textcolor{keyword}{const};}
-\DoxyCodeLine{179 \textcolor{keyword}{virtual} xbInt16 GetLastRecord ();}
-\DoxyCodeLine{180 \textcolor{keyword}{virtual} xbInt16 GetLastRecord ( xbInt16 iOption );}
-\DoxyCodeLine{181 }
-\DoxyCodeLine{182 \textcolor{keyword}{virtual} xbInt16 GetNextRecord ();}
-\DoxyCodeLine{183 \textcolor{keyword}{virtual} xbInt16 GetNextRecord ( xbInt16 iOption );}
-\DoxyCodeLine{184 \textcolor{keyword}{virtual} xbInt16 GetNextRecord ( xbInt16 iOption, xbUInt32 ulStartRec );}
-\DoxyCodeLine{185 \textcolor{keyword}{virtual} xbInt16 GetPrevRecord ();}
-\DoxyCodeLine{186 \textcolor{keyword}{virtual} xbInt16 GetPrevRecord ( xbInt16 iOption );}
-\DoxyCodeLine{187 \textcolor{keyword}{virtual} xbInt16 GetRecord ( xbUInt32 ulRecNo );}
-\DoxyCodeLine{188 }
-\DoxyCodeLine{189 \textcolor{keyword}{virtual} xbUInt32 GetRecordCount ();}
-\DoxyCodeLine{190 \textcolor{keyword}{virtual} xbInt16 GetRecordCnt ( xbUInt32 \& ulRecCnt );}
-\DoxyCodeLine{191 }
-\DoxyCodeLine{192 \textcolor{keyword}{virtual} \textcolor{keywordtype}{char} * GetRecordBuf ( xbInt16 iOpt = 0 ) \textcolor{keyword}{const};}
-\DoxyCodeLine{193 \textcolor{keyword}{virtual} xbUInt16 GetRecordLen () \textcolor{keyword}{const};}
-\DoxyCodeLine{194 \textcolor{keyword}{virtual} \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&GetTblAlias() \textcolor{keyword}{const};}
-\DoxyCodeLine{195 \textcolor{keyword}{virtual} xbInt16 \mbox{\hyperlink{classxb_1_1xbDbf_a49212a9eb17f7fa9f303e08d5fc50fc6}{GetVersion}} () \textcolor{keyword}{const} = 0; }
-\DoxyCodeLine{196 \textcolor{keyword}{virtual} \mbox{\hyperlink{classxb_1_1xbXBase}{xbXBase}} *GetXbasePtr () \textcolor{keyword}{const}; \textcolor{comment}{// return xbase pointer}}
-\DoxyCodeLine{197 }
-\DoxyCodeLine{198 }
-\DoxyCodeLine{199 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} MemoFieldsExist () \textcolor{keyword}{const};}
-\DoxyCodeLine{200 }
-\DoxyCodeLine{201 \textcolor{keyword}{virtual} xbInt16 Open ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTableName );}
-\DoxyCodeLine{202 \textcolor{keyword}{virtual} xbInt16 Open ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTableName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sAlias );}
-\DoxyCodeLine{203 \textcolor{keyword}{virtual} xbInt16 \mbox{\hyperlink{classxb_1_1xbDbf_a4d018cbf44d8d8b2145c9acab02c8adf}{Open}} ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTableName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sAlias, xbInt16 iOpenMode, xbInt16 iShareMode ) = 0;}
-\DoxyCodeLine{204 \textcolor{keyword}{virtual} xbInt16 Pack ();}
-\DoxyCodeLine{205 \textcolor{keyword}{virtual} xbInt16 Pack ( xbUInt32 \&ulDeletedRecCnt );}
-\DoxyCodeLine{206 }
-\DoxyCodeLine{207 }
-\DoxyCodeLine{208 \textcolor{keyword}{virtual} xbInt16 PutRecord (); \textcolor{comment}{// Put record to current location}}
-\DoxyCodeLine{209 \textcolor{keyword}{virtual} xbInt16 PutRecord ( xbUInt32 ulRecNo );}
-\DoxyCodeLine{210 \textcolor{keyword}{virtual} xbInt16 ReadHeader ( xbInt16 iFilePositionOption, xbInt16 iReadOption );}
-\DoxyCodeLine{211 \textcolor{keyword}{virtual} xbInt16 RecordDeleted ( xbInt16 iOpt = 0 ) \textcolor{keyword}{const};}
-\DoxyCodeLine{212 \textcolor{keyword}{virtual} xbInt16 \mbox{\hyperlink{classxb_1_1xbDbf_aeeeb2eb5fabcd0f91d457df07b0e0708}{Rename}} ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sNewName ) = 0;}
-\DoxyCodeLine{213 }
-\DoxyCodeLine{214 \textcolor{keyword}{virtual} xbInt16 SetAutoCommit ( xbInt16 iAutoCommit );}
-\DoxyCodeLine{215 }
-\DoxyCodeLine{216 \textcolor{keyword}{virtual} xbInt16 UndeleteAllRecords();}
-\DoxyCodeLine{217 \textcolor{keyword}{virtual} xbInt16 UndeleteRecord ();}
-\DoxyCodeLine{218 \textcolor{keyword}{virtual} xbInt16 Zap ();}
-\DoxyCodeLine{219 }
-\DoxyCodeLine{220 }
-\DoxyCodeLine{221 \textcolor{comment}{/* field methods */}}
-\DoxyCodeLine{222 \textcolor{comment}{//virtual xbInt16 GetRawField( xbInt16 iFieldNo, char *Buf, xbUInt32 BufSize, xbInt16 iRecBufSw ) const;}}
-\DoxyCodeLine{223 \textcolor{keyword}{virtual} xbInt16 GetField(xbInt16 iFieldNo, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldValue, xbInt16 iRecBufSw ) \textcolor{keyword}{const};}
-\DoxyCodeLine{224 \textcolor{keyword}{virtual} xbInt16 GetField(xbInt16 iFieldNo, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldValue) \textcolor{keyword}{const};}
-\DoxyCodeLine{225 \textcolor{keyword}{virtual} xbInt16 GetField(\textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldValue) \textcolor{keyword}{const};}
-\DoxyCodeLine{226 \textcolor{keyword}{virtual} xbInt16 GetFieldDecimal( xbInt16 iFieldNo, xbInt16 \&iFieldDecimal ) \textcolor{keyword}{const};}
-\DoxyCodeLine{227 \textcolor{keyword}{virtual} xbInt16 GetFieldDecimal( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, xbInt16 \&iFieldDecimal ) \textcolor{keyword}{const};}
-\DoxyCodeLine{228 \textcolor{keyword}{virtual} xbInt16 GetFieldLen( xbInt16 iFieldNo, xbInt16 \&iFieldLen ) \textcolor{keyword}{const};}
-\DoxyCodeLine{229 \textcolor{keyword}{virtual} xbInt16 GetFieldLen( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, xbInt16 \&iFieldLen ) \textcolor{keyword}{const};}
-\DoxyCodeLine{230 \textcolor{keyword}{virtual} xbInt16 GetFieldName( xbInt16 iFieldNo, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName ) \textcolor{keyword}{const};}
-\DoxyCodeLine{231 }
-\DoxyCodeLine{232 \textcolor{keyword}{virtual} xbInt16 GetFieldNo( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, xbInt16 \&iFieldNo ) \textcolor{keyword}{const};}
-\DoxyCodeLine{233 \textcolor{keyword}{virtual} xbInt16 GetFieldNo( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName ) \textcolor{keyword}{const};}
-\DoxyCodeLine{234 }
-\DoxyCodeLine{235 \textcolor{keyword}{virtual} xbInt16 GetFieldType( xbInt16 iFieldNo, \textcolor{keywordtype}{char} \&cFieldType ) \textcolor{keyword}{const};}
-\DoxyCodeLine{236 \textcolor{keyword}{virtual} xbInt16 GetFieldType( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, \textcolor{keywordtype}{char} \&cFieldType ) \textcolor{keyword}{const};}
-\DoxyCodeLine{237 \textcolor{keyword}{virtual} xbInt16 PutField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldData );}
-\DoxyCodeLine{238 \textcolor{keyword}{virtual} xbInt16 PutField( xbInt16 iFieldNo, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldData );}
-\DoxyCodeLine{239 }
-\DoxyCodeLine{240 \textcolor{keyword}{virtual} xbInt16 PutLogicalField( xbInt16 iFieldNo, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldData );}
-\DoxyCodeLine{241 \textcolor{keyword}{virtual} xbInt16 PutLogicalField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldData );}
-\DoxyCodeLine{242 \textcolor{keyword}{virtual} xbInt16 GetLogicalField( xbInt16 iFieldNo, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldData ) \textcolor{keyword}{const};}
-\DoxyCodeLine{243 \textcolor{keyword}{virtual} xbInt16 GetLogicalField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldData) \textcolor{keyword}{const};}
-\DoxyCodeLine{244 }
-\DoxyCodeLine{245 \textcolor{keyword}{virtual} xbInt16 PutLogicalField( xbInt16 iFieldNo, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bFieldData );}
-\DoxyCodeLine{246 \textcolor{keyword}{virtual} xbInt16 PutLogicalField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bFieldData );}
-\DoxyCodeLine{247 \textcolor{keyword}{virtual} xbInt16 GetLogicalField( xbInt16 iFieldNo, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bFieldData ) \textcolor{keyword}{const};}
-\DoxyCodeLine{248 \textcolor{keyword}{virtual} xbInt16 GetLogicalField( xbInt16 iFieldNo, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bFieldData, xbInt16 iRecBufSw ) \textcolor{keyword}{const};}
-\DoxyCodeLine{249 \textcolor{keyword}{virtual} xbInt16 GetLogicalField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bFieldData) \textcolor{keyword}{const};}
-\DoxyCodeLine{250 }
-\DoxyCodeLine{251 \textcolor{keyword}{virtual} xbInt16 GetLongField( xbInt16 iFieldNo, xbInt32 \&lFieldValue ) \textcolor{keyword}{const};}
-\DoxyCodeLine{252 \textcolor{keyword}{virtual} xbInt16 GetLongField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, xbInt32 \&lFieldValue ) \textcolor{keyword}{const};}
-\DoxyCodeLine{253 \textcolor{keyword}{virtual} xbInt16 PutLongField( xbInt16 iFieldNo, xbInt32 lFieldValue );}
-\DoxyCodeLine{254 \textcolor{keyword}{virtual} xbInt16 PutLongField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldNo, xbInt32 lFieldValue );}
-\DoxyCodeLine{255 }
-\DoxyCodeLine{256 \textcolor{keyword}{virtual} xbInt16 GetULongField( xbInt16 iFieldNo, xbUInt32 \&lFieldValue ) \textcolor{keyword}{const};}
-\DoxyCodeLine{257 \textcolor{keyword}{virtual} xbInt16 GetULongField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, xbUInt32 \&lFieldValue ) \textcolor{keyword}{const};}
-\DoxyCodeLine{258 \textcolor{keyword}{virtual} xbInt16 PutULongField( xbInt16 iFieldNo, xbUInt32 lFieldValue );}
-\DoxyCodeLine{259 \textcolor{keyword}{virtual} xbInt16 PutULongField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldNo, xbUInt32 lFieldValue );}
-\DoxyCodeLine{260 }
-\DoxyCodeLine{261 \textcolor{keyword}{virtual} xbInt16 GetDoubleField( xbInt16 FieldNo, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dFieldValue ) \textcolor{keyword}{const};}
-\DoxyCodeLine{262 \textcolor{keyword}{virtual} xbInt16 GetDoubleField( xbInt16 FieldNo, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dFieldValue, xbInt16 iRecBufSw ) \textcolor{keyword}{const};}
-\DoxyCodeLine{263 \textcolor{keyword}{virtual} xbInt16 GetDoubleField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dFieldValue ) \textcolor{keyword}{const};}
-\DoxyCodeLine{264 \textcolor{keyword}{virtual} xbInt16 PutDoubleField( xbInt16 FieldNo, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dFieldValue );}
-\DoxyCodeLine{265 \textcolor{keyword}{virtual} xbInt16 PutDoubleField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&FieldName, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dFieldValue );}
-\DoxyCodeLine{266 }
-\DoxyCodeLine{267 \textcolor{keyword}{virtual} xbInt16 GetFloatField( xbInt16 iFieldNo, \mbox{\hyperlink{namespacexb_a83aa6a550398db55973aa9fb4257e66e}{xbFloat}} \&fFieldValue ) \textcolor{keyword}{const};}
-\DoxyCodeLine{268 \textcolor{keyword}{virtual} xbInt16 GetFloatField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, \mbox{\hyperlink{namespacexb_a83aa6a550398db55973aa9fb4257e66e}{xbFloat}} \&fFieldValue ) \textcolor{keyword}{const};}
-\DoxyCodeLine{269 \textcolor{keyword}{virtual} xbInt16 PutFloatField( xbInt16 iFieldNo, \mbox{\hyperlink{namespacexb_a83aa6a550398db55973aa9fb4257e66e}{xbFloat}} fFieldValue );}
-\DoxyCodeLine{270 \textcolor{keyword}{virtual} xbInt16 PutFloatField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, \mbox{\hyperlink{namespacexb_a83aa6a550398db55973aa9fb4257e66e}{xbFloat}} fFieldValue );}
-\DoxyCodeLine{271 }
-\DoxyCodeLine{272 \textcolor{keyword}{virtual} xbInt16 GetDateField( xbInt16 iFieldNo, \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dt ) \textcolor{keyword}{const};}
-\DoxyCodeLine{273 \textcolor{keyword}{virtual} xbInt16 GetDateField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dt ) \textcolor{keyword}{const};}
-\DoxyCodeLine{274 \textcolor{keyword}{virtual} xbInt16 PutDateField( xbInt16 iFieldNo, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dt );}
-\DoxyCodeLine{275 \textcolor{keyword}{virtual} xbInt16 PutDateField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dt );}
-\DoxyCodeLine{276 }
-\DoxyCodeLine{277 }
-\DoxyCodeLine{278 }
-\DoxyCodeLine{279 \textcolor{preprocessor}{ \#ifdef XB\_MEMO\_SUPPORT}}
-\DoxyCodeLine{280 \textcolor{keyword}{virtual} xbInt16 GetMemoFieldCnt () \textcolor{keyword}{const};}
-\DoxyCodeLine{281 \textcolor{keyword}{virtual} xbMemo *GetMemoPtr ();}
-\DoxyCodeLine{282 \textcolor{keyword}{virtual} xbUInt32 GetCreateMemoBlockSize() \textcolor{keyword}{const};}
-\DoxyCodeLine{283 \textcolor{keyword}{virtual} xbInt16 GetMemoField ( xbInt16 iFldNo, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sMemoData );}
-\DoxyCodeLine{284 \textcolor{keyword}{virtual} xbInt16 GetMemoField ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \& sFldName, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sMemoData );}
-\DoxyCodeLine{285 \textcolor{keyword}{virtual} xbInt16 GetMemoFieldLen ( xbInt16 iFldNo, xbUInt32 \&ullMemoFieldLen );}
-\DoxyCodeLine{286 \textcolor{keyword}{virtual} xbInt16 GetMemoFieldLen ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \& sFldName, xbUInt32 \&ulMemoFieldLen );}
-\DoxyCodeLine{287 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} MemoFieldExists ( xbInt16 iFieldNo ) \textcolor{keyword}{const};}
-\DoxyCodeLine{288 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} MemoFieldExists ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName ) \textcolor{keyword}{const};}
-\DoxyCodeLine{289 \textcolor{keyword}{virtual} xbInt16 SetCreateMemoBlockSize( xbUInt32 ulBlockSize ) = 0;}
-\DoxyCodeLine{290 \textcolor{keyword}{virtual} xbInt16 UpdateMemoField ( xbInt16 iFldNo, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sMemoData );}
-\DoxyCodeLine{291 \textcolor{keyword}{virtual} xbInt16 UpdateMemoField ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \& sFldName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sMemoData );}
-\DoxyCodeLine{292 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_MEMO\_SUPPORT}}
-\DoxyCodeLine{293 }
-\DoxyCodeLine{294 }
-\DoxyCodeLine{295 \textcolor{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
-\DoxyCodeLine{296 \textcolor{keyword}{virtual} xbInt16 LockTable ( xbInt16 iLockFunction );}
-\DoxyCodeLine{297 \textcolor{keyword}{virtual} xbInt16 LockRecord ( xbInt16 iLockFunction, xbUInt32 ulRecNo );}
-\DoxyCodeLine{298 \textcolor{keyword}{virtual} xbInt16 LockAppend ( xbInt16 iLockFunction );}
-\DoxyCodeLine{299 \textcolor{keyword}{virtual} xbInt16 LockHeader ( xbInt16 iLockFunction );}
-\DoxyCodeLine{300 }
-\DoxyCodeLine{301 \textcolor{preprocessor}{ \#ifdef XB\_MEMO\_SUPPORT}}
-\DoxyCodeLine{302 \textcolor{keyword}{virtual} xbInt16 LockMemo ( xbInt16 iLockFunction );}
-\DoxyCodeLine{303 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetMemoLocked () \textcolor{keyword}{const}; }
-\DoxyCodeLine{304 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_MEMO\_LOCK}}
-\DoxyCodeLine{305 }
-\DoxyCodeLine{306 \textcolor{preprocessor}{ \#ifdef XB\_INDEX\_SUPPORT}}
-\DoxyCodeLine{307 \textcolor{keyword}{virtual} xbInt16 LockIndices ( xbInt16 iLockFunction );}
-\DoxyCodeLine{308 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INDEX\_SUPPORT}}
-\DoxyCodeLine{309 }
-\DoxyCodeLine{310 xbInt16 GetAutoLock () \textcolor{keyword}{const};}
-\DoxyCodeLine{311 \textcolor{keywordtype}{void} SetAutoLock ( xbInt16 iAutoLock );}
-\DoxyCodeLine{312 xbInt16 GetLockFlavor () \textcolor{keyword}{const};}
-\DoxyCodeLine{313 \textcolor{keywordtype}{void} SetLockFlavor ( xbInt16 iLockFlavor );}
-\DoxyCodeLine{314 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetTableLocked () \textcolor{keyword}{const};}
-\DoxyCodeLine{315 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetHeaderLocked () \textcolor{keyword}{const};}
-\DoxyCodeLine{316 xbUInt32 GetAppendLocked () \textcolor{keyword}{const};}
-\DoxyCodeLine{317 xbLinkListNode<xbUInt32> * GetFirstRecLock () \textcolor{keyword}{const};}
-\DoxyCodeLine{318 }
-\DoxyCodeLine{319 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
-\DoxyCodeLine{320 \textcolor{keywordtype}{void} DumpTableLockStatus() \textcolor{keyword}{const};}
-\DoxyCodeLine{321 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_DEBUG\_SUPPORT}}
-\DoxyCodeLine{322 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_LOCKING\_SUPPORT}}
-\DoxyCodeLine{323 }
-\DoxyCodeLine{324 }
-\DoxyCodeLine{325 \textcolor{preprocessor}{ \#ifdef XB\_INDEX\_SUPPORT}}
-\DoxyCodeLine{326 \textcolor{keyword}{virtual} xbInt16 CheckTagIntegrity( xbInt16 iTagOpt, xbInt16 iOutputOpt );}
-\DoxyCodeLine{327 \textcolor{keyword}{virtual} xbInt16 CloseIndexFile( xbIx *pIx );}
-\DoxyCodeLine{328 \textcolor{keyword}{virtual} xbInt16 CreateTag( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIxType, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sKey, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFilter, }
-\DoxyCodeLine{329 xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverLay, xbIx **xbIxOut, \textcolor{keywordtype}{void} **vpTagOut );}
-\DoxyCodeLine{330 \textcolor{keyword}{virtual} xbInt16 DeleteTag( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIxType, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sName );}
-\DoxyCodeLine{331 \textcolor{keyword}{virtual} xbInt16 DeleteAllIndexFiles();}
-\DoxyCodeLine{332 \textcolor{keyword}{virtual} xbInt16 Find( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sKey );}
-\DoxyCodeLine{333 \textcolor{keyword}{virtual} xbInt16 Find( \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dtKey );}
-\DoxyCodeLine{334 \textcolor{keyword}{virtual} xbInt16 Find( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dKey );}
-\DoxyCodeLine{335 \textcolor{keyword}{virtual} xbIx *GetCurIx() \textcolor{keyword}{const};}
-\DoxyCodeLine{336 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} *GetCurTag() \textcolor{keyword}{const};}
-\DoxyCodeLine{337 }
-\DoxyCodeLine{338 \textcolor{keyword}{virtual} xbInt16 GetFirstKey();}
-\DoxyCodeLine{339 \textcolor{keyword}{virtual} xbInt16 GetNextKey();}
-\DoxyCodeLine{340 \textcolor{keyword}{virtual} xbInt16 GetPrevKey();}
-\DoxyCodeLine{341 \textcolor{keyword}{virtual} xbInt16 GetLastKey();}
-\DoxyCodeLine{342 }
-\DoxyCodeLine{343 \textcolor{keyword}{virtual} \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&GetCurIxType() \textcolor{keyword}{const};}
-\DoxyCodeLine{344 \textcolor{keyword}{virtual} \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&GetCurTagName() \textcolor{keyword}{const};}
-\DoxyCodeLine{345 \textcolor{keyword}{virtual} xbIxList *GetIxList() \textcolor{keyword}{const};}
-\DoxyCodeLine{346 \textcolor{keyword}{virtual} xbInt32 GetPhysicalIxCnt () \textcolor{keyword}{const};}
-\DoxyCodeLine{347 xbLinkListNode<xbTag *> *GetTagList () \textcolor{keyword}{const};}
-\DoxyCodeLine{348 }
-\DoxyCodeLine{349 \textcolor{keyword}{virtual} xbInt16 OpenIndex( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIxType, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIndexName );}
-\DoxyCodeLine{350 \textcolor{keyword}{virtual} xbInt16 Reindex( xbInt16 iTagOpt );}
-\DoxyCodeLine{351 \textcolor{keyword}{virtual} xbInt16 SetCurTag( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTagName );}
-\DoxyCodeLine{352 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} SetCurTag( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIxType, xbIx *pIx, \textcolor{keywordtype}{void} *vpTag );}
-\DoxyCodeLine{353 }
-\DoxyCodeLine{354 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INDEX\_SUPPORT}}
-\DoxyCodeLine{355 }
-\DoxyCodeLine{356 \textcolor{preprocessor}{ \#ifdef XB\_INF\_SUPPORT}}
-\DoxyCodeLine{357 \textcolor{keyword}{virtual} xbInt16 AssociateIndex( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sType, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sName, xbInt16 iOption );}
-\DoxyCodeLine{358 xbLinkListNode<xbString> *GetInfList() \textcolor{keyword}{const};}
-\DoxyCodeLine{359 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INF\_SUPPORT}}
-\DoxyCodeLine{360 }
-\DoxyCodeLine{361 \textcolor{comment}{//\#ifdef XB\_MDX\_SUPPORT}}
-\DoxyCodeLine{362 \textcolor{comment}{//virtual xbInt16 GetCreateMdxBlockSize() const;}}
-\DoxyCodeLine{363 \textcolor{comment}{//virtual xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );}}
-\DoxyCodeLine{364 \textcolor{comment}{//\#endif}}
-\DoxyCodeLine{365 }
-\DoxyCodeLine{366 \textcolor{preprocessor}{ \#ifdef XB\_BLOCKREAD\_SUPPORT}}
-\DoxyCodeLine{367 xbInt16 DisableBlockReadProcessing();}
-\DoxyCodeLine{368 xbInt16 EnableBlockReadProcessing();}
-\DoxyCodeLine{369 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetBlockReadStatus() \textcolor{keyword}{const};}
-\DoxyCodeLine{370 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_BLOCKREAD\_SUPPORT}}
-\DoxyCodeLine{371 }
-\DoxyCodeLine{372 \textcolor{keyword}{protected}:}
-\DoxyCodeLine{373 \textcolor{preprocessor}{ \#ifdef XB\_INDEX\_SUPPORT}}
-\DoxyCodeLine{374 \textcolor{keyword}{friend} \textcolor{keyword}{class }xbIx;}
-\DoxyCodeLine{375 \textcolor{keyword}{friend} \textcolor{keyword}{class }xbIxMdx;}
-\DoxyCodeLine{376 }
-\DoxyCodeLine{377 xbInt16 AddIndex( xbIx *ix, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFmt );}
-\DoxyCodeLine{378 \textcolor{keywordtype}{void} ClearTagList();}
-\DoxyCodeLine{379 xbInt16 RemoveIndex( xbIx * ix );}
-\DoxyCodeLine{380 \textcolor{keywordtype}{void} UpdateSchemaIxFlag( xbInt16 iFldNo, \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} cVal );}
-\DoxyCodeLine{381 \textcolor{keyword}{virtual} xbInt16 UpdateTagList ();}
-\DoxyCodeLine{382 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INDEX\_SUPPORT}}
-\DoxyCodeLine{383 }
-\DoxyCodeLine{384 \textcolor{preprocessor}{ \#ifdef XB\_INF\_SUPPORT}}
-\DoxyCodeLine{385 \textcolor{keyword}{virtual} xbInt16 GetInfFileName( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sNdxIdxFileName );}
-\DoxyCodeLine{386 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INF\_SUPPORT}}
-\DoxyCodeLine{387 }
-\DoxyCodeLine{388 \textcolor{preprocessor}{ \#ifdef XB\_BLOCKREAD\_SUPPORT}}
-\DoxyCodeLine{389 \textcolor{keyword}{friend} \textcolor{keyword}{class }xbBlockRead;}
-\DoxyCodeLine{390 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_BLOCKREAD\_SUPPORT}}
-\DoxyCodeLine{391 }
-\DoxyCodeLine{392 }
-\DoxyCodeLine{393 \textcolor{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
-\DoxyCodeLine{394 \textcolor{keywordtype}{void} SetHeaderLocked ( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bTableLocked );}
-\DoxyCodeLine{395 \textcolor{keywordtype}{void} SetTableLocked ( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bTableLocked );}
-\DoxyCodeLine{396 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_LOCKING\_SUPORT}}
-\DoxyCodeLine{397 }
-\DoxyCodeLine{398 \textcolor{preprocessor}{ \#ifdef XB\_MEMO\_SUPPORT}}
-\DoxyCodeLine{399 xbInt16 iMemoFieldCnt; \textcolor{comment}{// Memo field cnt in the table}}
-\DoxyCodeLine{400 xbMemo *Memo; \textcolor{comment}{// Pointer to memo class}}
-\DoxyCodeLine{401 xbUInt32 ulCreateMemoBlockSize; \textcolor{comment}{// blocksize to use when creating dbt file}}
-\DoxyCodeLine{402 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{403 }
-\DoxyCodeLine{404 \textcolor{preprocessor}{ \#ifdef XB\_INF\_SUPPORT}}
-\DoxyCodeLine{405 \textcolor{keyword}{virtual} xbInt16 DeleteInfData();}
-\DoxyCodeLine{406 \textcolor{keyword}{virtual} xbInt16 LoadInfData();}
-\DoxyCodeLine{407 \textcolor{keyword}{virtual} xbInt16 SaveInfData();}
-\DoxyCodeLine{408 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INF\_SUPPORT}}
-\DoxyCodeLine{409 }
-\DoxyCodeLine{410 \textcolor{comment}{/*}}
-\DoxyCodeLine{411 \textcolor{comment}{ \#ifdef XB\_MDX\_SUPPORT}}
-\DoxyCodeLine{412 \textcolor{comment}{ xbInt16 iCreateMdxBlockSize;}}
-\DoxyCodeLine{413 \textcolor{comment}{ \#endif // XB\_MDX\_SUPPORT}}
-\DoxyCodeLine{414 \textcolor{comment}{*/}}
-\DoxyCodeLine{415 }
-\DoxyCodeLine{416 \textcolor{keyword}{virtual} xbInt16 GetRawField( xbInt16 iFieldNo, \textcolor{keywordtype}{char} *Buf, xbUInt32 BufSize, xbInt16 iRecBufSw ) \textcolor{keyword}{const};}
-\DoxyCodeLine{417 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} InitVars(); }
-\DoxyCodeLine{418 \textcolor{keyword}{virtual} xbInt16 SetVersion() = 0;}
-\DoxyCodeLine{419 \textcolor{keyword}{virtual} xbInt16 ValidateSchema( \mbox{\hyperlink{structxb_1_1xbSchema}{xbSchema}} * s ) = 0;}
-\DoxyCodeLine{420 xbInt16 WriteHeader( xbInt16 iPositionOption, xbInt16 iWriteOption );}
-\DoxyCodeLine{421 }
-\DoxyCodeLine{422 }
-\DoxyCodeLine{423 xbUInt32 ulCurRec; \textcolor{comment}{// Current record or zero}}
-\DoxyCodeLine{424 xbInt16 iAutoCommit; \textcolor{comment}{// Auto commit updates if not explicitly performed before moving off record?}}
-\DoxyCodeLine{425 \textcolor{comment}{// -\/1 -\/-\/> Use DBMS default}}
-\DoxyCodeLine{426 \textcolor{comment}{// 0 -\/-\/> No auto update on this table, regardless of DBMS setting}}
-\DoxyCodeLine{427 \textcolor{comment}{// 1 -\/-\/> Auto update on this table, regardless of DBMS setting}}
-\DoxyCodeLine{428 }
-\DoxyCodeLine{429 xbInt16 iFileVersion; \textcolor{comment}{// xBase file version -\/ which class is in play}}
-\DoxyCodeLine{430 }
-\DoxyCodeLine{431 }
-\DoxyCodeLine{432 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sAlias; \textcolor{comment}{// table alias}}
-\DoxyCodeLine{433 xbInt16 iNoOfFields;}
-\DoxyCodeLine{434 xbInt16 iDbfStatus; \textcolor{comment}{// 0 = closed}}
-\DoxyCodeLine{435 \textcolor{comment}{// 1 = open}}
-\DoxyCodeLine{436 \textcolor{comment}{// 2 = updates pending}}
-\DoxyCodeLine{437 }
-\DoxyCodeLine{438 xbSchemaRec *SchemaPtr; \textcolor{comment}{// Pointer to field data}}
-\DoxyCodeLine{439 \textcolor{keywordtype}{char} *RecBuf; \textcolor{comment}{// Pointer to record buffer}}
-\DoxyCodeLine{440 \textcolor{keywordtype}{char} *RecBuf2; \textcolor{comment}{// Pointer to original rec buf allocation}}
-\DoxyCodeLine{441 }
-\DoxyCodeLine{442 }
-\DoxyCodeLine{443 \textcolor{comment}{/* Next several variables are database header fields, up through dbase V */}}
-\DoxyCodeLine{444 \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} cVersion;}
-\DoxyCodeLine{445 \textcolor{keywordtype}{char} cUpdateYY;}
-\DoxyCodeLine{446 \textcolor{keywordtype}{char} cUpdateMM;}
-\DoxyCodeLine{447 \textcolor{keywordtype}{char} cUpdateDD;}
-\DoxyCodeLine{448 xbUInt32 ulNoOfRecs;}
-\DoxyCodeLine{449 xbUInt16 uiHeaderLen;}
-\DoxyCodeLine{450 xbUInt16 uiRecordLen;}
-\DoxyCodeLine{451 \textcolor{keywordtype}{char} cTransactionFlag;}
-\DoxyCodeLine{452 \textcolor{keywordtype}{char} cEncryptionFlag;}
-\DoxyCodeLine{453 \textcolor{keywordtype}{char} cIndexFlag;}
-\DoxyCodeLine{454 \textcolor{keywordtype}{char} cLangDriver; \textcolor{comment}{// dbase 7 sets to 1B}}
-\DoxyCodeLine{455 }
-\DoxyCodeLine{456 }
-\DoxyCodeLine{457 }
-\DoxyCodeLine{458 \textcolor{keyword}{private}:}
-\DoxyCodeLine{459 \textcolor{keywordtype}{void} ResetNoOfRecords(); }
-\DoxyCodeLine{460 }
-\DoxyCodeLine{461 }
-\DoxyCodeLine{462 \textcolor{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
-\DoxyCodeLine{463 xbInt16 iAutoLock; \textcolor{comment}{// 0 -\/ autolock off, 1 -\/ autolock on}}
-\DoxyCodeLine{464 xbInt16 iLockFlavor;}
-\DoxyCodeLine{465 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bTableLocked; \textcolor{comment}{// is the table locked}}
-\DoxyCodeLine{466 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bHeaderLocked; \textcolor{comment}{// is the header locked}}
-\DoxyCodeLine{467 xbUInt32 ulAppendLocked; \textcolor{comment}{// record number of the new record for the append lock operation}}
-\DoxyCodeLine{468 xbLinkListOrd<xbUInt32> lloRecLocks; \textcolor{comment}{// ordered link list of locked records}}
-\DoxyCodeLine{469 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{470 }
-\DoxyCodeLine{471 \textcolor{preprocessor}{ \#ifdef XB\_INDEX\_SUPPORT}}
-\DoxyCodeLine{472 xbIxList *ixList; \textcolor{comment}{// pointer to a list of indices associated with the table}}
-\DoxyCodeLine{473 xbIx *pCurIx; \textcolor{comment}{// Pointer to current index class}}
-\DoxyCodeLine{474 \textcolor{keywordtype}{void} *vpCurIxTag; \textcolor{comment}{// Pointer to current tag}}
-\DoxyCodeLine{475 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sCurIxType; \textcolor{comment}{// Current index type}}
-\DoxyCodeLine{476 xbLinkList<xbTag *> llTags; \textcolor{comment}{// linked list of open tags}}
-\DoxyCodeLine{477 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INDEX\_SUPPORT}}
-\DoxyCodeLine{478 }
-\DoxyCodeLine{479 \textcolor{preprocessor}{ \#ifdef XB\_INF\_SUPPORT}}
-\DoxyCodeLine{480 xbLinkList<xbString> llInfData; \textcolor{comment}{// linked list of strings containing ndx file entries}}
-\DoxyCodeLine{481 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INF\_SUPPORT}}
-\DoxyCodeLine{482 }
-\DoxyCodeLine{483 \textcolor{preprocessor}{ \#ifdef XB\_BLOCKREAD\_SUPPORT}}
-\DoxyCodeLine{484 xbBlockRead *pRb;}
-\DoxyCodeLine{485 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bBlockReadEnabled; \textcolor{comment}{// if true, then block read mode is on}}
-\DoxyCodeLine{486 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{487 }
-\DoxyCodeLine{488 }
-\DoxyCodeLine{489 }
-\DoxyCodeLine{490 \};}
-\DoxyCodeLine{491 }
-\DoxyCodeLine{492 }
-\DoxyCodeLine{493 \textcolor{preprocessor}{\#ifdef XB\_DBF3\_SUPPORT}}
-\DoxyCodeLine{495 }
-\DoxyCodeLine{501 \textcolor{keyword}{class }XBDLLEXPORT xbDbf3 : \textcolor{keyword}{public} \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} \{}
-\DoxyCodeLine{502 \textcolor{keyword}{public}:}
-\DoxyCodeLine{503 xbDbf3(\mbox{\hyperlink{classxb_1_1xbXBase}{xbXBase}} *x);}
-\DoxyCodeLine{504 \string~xbDbf3();}
-\DoxyCodeLine{505 \textcolor{keyword}{virtual} xbInt16 CreateTable ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTableName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sAlias, \mbox{\hyperlink{structxb_1_1xbSchema}{xbSchema}} *, xbInt16 iOverlay, xbInt16 iShareMode );}
-\DoxyCodeLine{506 \textcolor{keyword}{virtual} xbInt16 GetVersion () \textcolor{keyword}{const};}
-\DoxyCodeLine{507 \textcolor{keyword}{virtual} xbInt16 Open ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTableName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sAlias, xbInt16 iOpenMode, xbInt16 iShareMode );}
-\DoxyCodeLine{508 \textcolor{keyword}{virtual} xbInt16 Rename ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sNewName );}
-\DoxyCodeLine{509 }
-\DoxyCodeLine{510 \textcolor{preprocessor}{ \#ifdef XB\_MEMO\_SUPPORT}}
-\DoxyCodeLine{511 \textcolor{keyword}{virtual} xbInt16 SetCreateMemoBlockSize( xbUInt32 iBlockSize );}
-\DoxyCodeLine{512 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{513 }
-\DoxyCodeLine{514 \textcolor{keyword}{protected}:}
-\DoxyCodeLine{515 xbInt16 SetVersion ();}
-\DoxyCodeLine{516 \textcolor{keyword}{virtual} xbInt16 ValidateSchema( \mbox{\hyperlink{structxb_1_1xbSchema}{xbSchema}} *s );}
-\DoxyCodeLine{517 }
-\DoxyCodeLine{518 \textcolor{keyword}{private}:}
-\DoxyCodeLine{519 }
-\DoxyCodeLine{520 \};}
-\DoxyCodeLine{521 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* XB\_DBF3\_SUPPORT */}\textcolor{preprocessor}{}}
-\DoxyCodeLine{522 }
-\DoxyCodeLine{523 }
-\DoxyCodeLine{524 \textcolor{preprocessor}{\#ifdef XB\_DBF4\_SUPPORT}}
-\DoxyCodeLine{526 }
-\DoxyCodeLine{531 \textcolor{keyword}{class }XBDLLEXPORT xbDbf4 : \textcolor{keyword}{public} \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} \{}
-\DoxyCodeLine{532 \textcolor{keyword}{public}:}
-\DoxyCodeLine{533 xbDbf4( \mbox{\hyperlink{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}{xbXBase}} *x );}
-\DoxyCodeLine{534 }
-\DoxyCodeLine{535 \string~xbDbf4();}
-\DoxyCodeLine{536 }
-\DoxyCodeLine{537 \textcolor{keyword}{virtual} xbInt16 CreateTable ( \textcolor{keyword}{const} xbString \&sTableName, \textcolor{keyword}{const} xbString \&sAlias, xbSchema *, xbInt16 iOverlay, xbInt16 iShareMode );}
-\DoxyCodeLine{538 \textcolor{keyword}{virtual} xbInt16 GetVersion () \textcolor{keyword}{const};}
-\DoxyCodeLine{539 \textcolor{keyword}{virtual} xbInt16 Open ( \textcolor{keyword}{const} xbString \&sTableName, \textcolor{keyword}{const} xbString \&sAlias, xbInt16 iOpenMode, xbInt16 iShareMode );}
-\DoxyCodeLine{540 \textcolor{keyword}{virtual} xbInt16 Rename ( \textcolor{keyword}{const} xbString sNewName );}
-\DoxyCodeLine{541 }
-\DoxyCodeLine{542 \textcolor{preprocessor}{ \#ifdef XB\_MEMO\_SUPPORT}}
-\DoxyCodeLine{543 \textcolor{keyword}{virtual} xbInt16 SetCreateMemoBlockSize( xbUInt32 iBlockSize );}
-\DoxyCodeLine{544 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{545 }
-\DoxyCodeLine{546 \textcolor{keyword}{protected}:}
-\DoxyCodeLine{547 \textcolor{comment}{// void InitVars ();}}
-\DoxyCodeLine{548 xbInt16 SetVersion();}
-\DoxyCodeLine{549 \textcolor{keyword}{virtual} xbInt16 ValidateSchema ( xbSchema *s );}
-\DoxyCodeLine{550 }
-\DoxyCodeLine{551 \textcolor{keyword}{private}:}
-\DoxyCodeLine{552 }
-\DoxyCodeLine{553 \};}
-\DoxyCodeLine{554 }
-\DoxyCodeLine{555 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* XB\_DBF4\_SUPPORT */}\textcolor{preprocessor}{}}
-\DoxyCodeLine{556 }
-\DoxyCodeLine{557 \} \textcolor{comment}{/* namespace xb */}}
-\DoxyCodeLine{558 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_DBF\_H\_\_ */}\textcolor{preprocessor}{}}
-
-\end{DoxyCode}
diff --git a/docs/doxygen/latex/xbdelete_8cpp.tex b/docs/doxygen/latex/xbdelete_8cpp.tex
deleted file mode 100644
index f24ada6..0000000
--- a/docs/doxygen/latex/xbdelete_8cpp.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-\hypertarget{xbdelete_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/sql/xbdelete.cpp File Reference}
-\label{xbdelete_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbdelete.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbdelete.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbdrpix_8cpp.tex b/docs/doxygen/latex/xbdrpix_8cpp.tex
deleted file mode 100644
index 39be17f..0000000
--- a/docs/doxygen/latex/xbdrpix_8cpp.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-\hypertarget{xbdrpix_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/sql/xbdrpix.cpp File Reference}
-\label{xbdrpix_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbdrpix.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbdrpix.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbdrptbl_8cpp.tex b/docs/doxygen/latex/xbdrptbl_8cpp.tex
deleted file mode 100644
index c31d938..0000000
--- a/docs/doxygen/latex/xbdrptbl_8cpp.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-\hypertarget{xbdrptbl_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/sql/xbdrptbl.cpp File Reference}
-\label{xbdrptbl_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbdrptbl.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbdrptbl.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbexp_8cpp.tex b/docs/doxygen/latex/xbexp_8cpp.tex
deleted file mode 100644
index 554b4cd..0000000
--- a/docs/doxygen/latex/xbexp_8cpp.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-\hypertarget{xbexp_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/core/xbexp.cpp File Reference}
-\label{xbexp_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbexp.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbexp.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbexp_8h.tex b/docs/doxygen/latex/xbexp_8h.tex
deleted file mode 100644
index 4b3e7a7..0000000
--- a/docs/doxygen/latex/xbexp_8h.tex
+++ /dev/null
@@ -1,2 +0,0 @@
-\hypertarget{xbexp_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/include/xbexp.h File Reference}
-\label{xbexp_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbexp.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbexp.h}}
diff --git a/docs/doxygen/latex/xbexp_8h_source.tex b/docs/doxygen/latex/xbexp_8h_source.tex
deleted file mode 100644
index 26b5f1a..0000000
--- a/docs/doxygen/latex/xbexp_8h_source.tex
+++ /dev/null
@@ -1,164 +0,0 @@
-\hypertarget{xbexp_8h_source}{}\doxysection{xbexp.\+h}
-\label{xbexp_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbexp.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbexp.h}}
-\mbox{\hyperlink{xbexp_8h}{Go to the documentation of this file.}}
-\begin{DoxyCode}{0}
-\DoxyCodeLine{1 \textcolor{comment}{/* xbexp.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\_EXP\_H\_\_}}
-\DoxyCodeLine{18 \textcolor{preprocessor}{\#define \_\_XB\_EXP\_H\_\_}}
-\DoxyCodeLine{19 }
-\DoxyCodeLine{20 }
-\DoxyCodeLine{21 \textcolor{comment}{// \#ifdef CMAKE\_COMPILER\_IS\_GNUCC}}
-\DoxyCodeLine{22 \textcolor{comment}{// \#pragma interface}}
-\DoxyCodeLine{23 \textcolor{comment}{// \#endif}}
-\DoxyCodeLine{24 }
-\DoxyCodeLine{25 }
-\DoxyCodeLine{26 }
-\DoxyCodeLine{27 \textcolor{preprocessor}{\#ifdef XB\_FUNCTION\_SUPPORT}}
-\DoxyCodeLine{28 \textcolor{preprocessor}{\#define XB\_EXP\_CHAR 'C'}}
-\DoxyCodeLine{29 \textcolor{preprocessor}{\#define XB\_EXP\_DATE 'D'}}
-\DoxyCodeLine{30 \textcolor{preprocessor}{\#define XB\_EXP\_LOGICAL 'L'}}
-\DoxyCodeLine{31 \textcolor{preprocessor}{\#define XB\_EXP\_NUMERIC 'N'}}
-\DoxyCodeLine{32 \textcolor{preprocessor}{\#define XB\_EXP\_UNKNOWN 'U'}}
-\DoxyCodeLine{33 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{34 }
-\DoxyCodeLine{35 \textcolor{preprocessor}{\#ifdef XB\_EXPRESSION\_SUPPORT}}
-\DoxyCodeLine{36 }
-\DoxyCodeLine{37 \textcolor{preprocessor}{\#define XB\_EXP\_CONSTANT 'C'}}
-\DoxyCodeLine{38 \textcolor{preprocessor}{\#define XB\_EXP\_FUNCTION 'F'}}
-\DoxyCodeLine{39 \textcolor{preprocessor}{\#define XB\_EXP\_FIELD 'D'}}
-\DoxyCodeLine{40 \textcolor{preprocessor}{\#define XB\_EXP\_OPERATOR 'O'}}
-\DoxyCodeLine{41 \textcolor{preprocessor}{\#define XB\_EXP\_NOTROOT 'N' }\textcolor{comment}{// not root node, needs further parsing}}
-\DoxyCodeLine{42 \textcolor{preprocessor}{\#define XB\_EXP\_PRE\_OPERATOR 'B' }\textcolor{comment}{// (B)efore) pre increment, pre decrement}}
-\DoxyCodeLine{43 \textcolor{preprocessor}{\#define XB\_EXP\_POST\_OPERATOR 'A' }\textcolor{comment}{// (A)fter) post increment, pre decrement}}
-\DoxyCodeLine{44 }
-\DoxyCodeLine{45 \textcolor{preprocessor}{\#define XB\_END\_OF\_EXPRESSION -\/100}}
-\DoxyCodeLine{46 }
-\DoxyCodeLine{47 \textcolor{comment}{// \#define XB\_UNBALANCED\_PARENS -\/101}}
-\DoxyCodeLine{48 \textcolor{comment}{// \#define XB\_UNBALANCED\_QUOTES -\/102}}
-\DoxyCodeLine{49 }
-\DoxyCodeLine{50 }
-\DoxyCodeLine{51 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
-\DoxyCodeLine{52 }
-\DoxyCodeLine{54 \textcolor{keyword}{struct }XBDLLEXPORT xbExpToken \{}
-\DoxyCodeLine{55 xbString sExpression; \textcolor{comment}{// in -\/ expression to pull next token from}}
-\DoxyCodeLine{56 \textcolor{comment}{// out -\/ remainder of the expression after token removed}}
-\DoxyCodeLine{57 xbString sToken; \textcolor{comment}{// next token pulled from the expression}}
-\DoxyCodeLine{58 \textcolor{keywordtype}{char} cNodeType; \textcolor{comment}{// one of XB\_EXP\_CONSTANT, XB\_EXP\_FUNCTION, XB\_EXP\_FIELD, XB\_EXP\_OPERATOR, XB\_EXP\_NOTROOT}}
-\DoxyCodeLine{59 \textcolor{keywordtype}{char} cReturnType; \textcolor{comment}{// one of XB\_EXP\_CHAR, XB\_EXP\_DATE, XB\_EXP\_LOGICAL, XB\_EXP\_NUMERIC, XB\_EXP\_UNKNOWN}}
-\DoxyCodeLine{60 xbInt16 iSts; \textcolor{comment}{// return status after retrieving or attempting next token from expression}}
-\DoxyCodeLine{61 \textcolor{comment}{// 0 = no error}}
-\DoxyCodeLine{62 \textcolor{comment}{// XB\_END\_OF\_EXPRESSION}}
-\DoxyCodeLine{63 \textcolor{comment}{// XB\_UNBALANCED\_PARENS}}
-\DoxyCodeLine{64 \textcolor{comment}{// XB\_UNBALANCED\_QUOTES}}
-\DoxyCodeLine{65 \textcolor{keywordtype}{char} cPrevNodeType; \textcolor{comment}{// previous node type}}
-\DoxyCodeLine{66 \textcolor{keywordtype}{char} cPrevReturnType; \textcolor{comment}{// previous return type}}
-\DoxyCodeLine{67 }
-\DoxyCodeLine{68 \textcolor{comment}{// constructor}}
-\DoxyCodeLine{69 xbExpToken() \{ cNodeType = 0; cReturnType = 0; iSts = 0; cPrevNodeType = 0; cPrevReturnType = 0; \}}
-\DoxyCodeLine{70 \};}
-\DoxyCodeLine{72 }
-\DoxyCodeLine{73 }
-\DoxyCodeLine{74 \textcolor{comment}{/************************************************************************/}}
-\DoxyCodeLine{75 }
-\DoxyCodeLine{77 }
-\DoxyCodeLine{132 \textcolor{keyword}{class }XBDLLEXPORT xbExp\{}
-\DoxyCodeLine{133 }
-\DoxyCodeLine{134 \textcolor{keyword}{public}:}
-\DoxyCodeLine{135 xbExp( \mbox{\hyperlink{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}{xbXBase}} * );}
-\DoxyCodeLine{136 xbExp( \mbox{\hyperlink{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}{xbXBase}} *, \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} * );}
-\DoxyCodeLine{137 \textcolor{keyword}{virtual} \string~xbExp();}
-\DoxyCodeLine{138 \textcolor{keywordtype}{void} ClearTreeHandle();}
-\DoxyCodeLine{139 }
-\DoxyCodeLine{140 }
-\DoxyCodeLine{141 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
-\DoxyCodeLine{142 \textcolor{keywordtype}{void} DumpTree( xbInt16 iOption );}
-\DoxyCodeLine{143 \textcolor{keywordtype}{void} DumpToken( xbExpToken \&t, xbInt16 iOption = 0 );}
-\DoxyCodeLine{144 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{145 }
-\DoxyCodeLine{146 xbInt16 GetResultLen() \textcolor{keyword}{const};}
-\DoxyCodeLine{147 \textcolor{keywordtype}{char} GetReturnType() \textcolor{keyword}{const};}
-\DoxyCodeLine{148 xbInt16 GetBoolResult( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bResult );}
-\DoxyCodeLine{149 xbInt16 GetDateResult( xbDate \&dtResult );}
-\DoxyCodeLine{150 xbInt16 GetNumericResult( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dResult );}
-\DoxyCodeLine{151 xbInt16 GetStringResult( xbString \&sResult );}
-\DoxyCodeLine{152 xbInt16 GetStringResult( \textcolor{keywordtype}{char} * vpResult, xbUInt32 ulLen );}
-\DoxyCodeLine{153 xbExpNode *GetTreeHandle();}
-\DoxyCodeLine{154 xbInt16 ParseExpression( \textcolor{keyword}{const} xbString \&sExpression );}
-\DoxyCodeLine{155 xbInt16 ParseExpression( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf, \textcolor{keyword}{const} xbString \&sExpression );}
-\DoxyCodeLine{156 xbInt16 ProcessExpression();}
-\DoxyCodeLine{157 xbInt16 ProcessExpression( xbInt16 iRecBufSw );}
-\DoxyCodeLine{158 }
-\DoxyCodeLine{159 }
-\DoxyCodeLine{160 \textcolor{keyword}{protected}:}
-\DoxyCodeLine{161 xbInt16 GetNextToken( xbExpToken \&t );}
-\DoxyCodeLine{162 xbInt16 OperatorWeight( \textcolor{keyword}{const} xbString \&sOperator );}
-\DoxyCodeLine{163 xbExpNode *GetNextNode( xbExpNode * n ) \textcolor{keyword}{const}; \textcolor{comment}{// traverses the tree from bottom left node, right, then up}}
-\DoxyCodeLine{164 }
-\DoxyCodeLine{165 \textcolor{keyword}{private}: \textcolor{comment}{// methods}}
-\DoxyCodeLine{166 }
-\DoxyCodeLine{167 \textcolor{comment}{// xbInt16 CalcExpressionResultLen();}}
-\DoxyCodeLine{168 xbInt16 CalcFunctionResultLen( xbExpNode *n ) \textcolor{keyword}{const};}
-\DoxyCodeLine{169 xbInt16 CalcCharNodeLen( xbExpNode *n );}
-\DoxyCodeLine{170 xbInt16 CheckParensAndQuotes( \textcolor{keyword}{const} xbString \&sExpression );}
-\DoxyCodeLine{171 xbInt16 GetExpressionResultLen() \textcolor{keyword}{const};}
-\DoxyCodeLine{172 }
-\DoxyCodeLine{173 xbInt16 GetTokenCharConstant ( xbExpToken \&t );}
-\DoxyCodeLine{174 xbInt16 GetTokenDatabaseField ( xbExpToken \&t );}
-\DoxyCodeLine{175 xbInt16 GetTokenDateConstant ( xbExpToken \&t );}
-\DoxyCodeLine{176 xbInt16 GetTokenFunction ( xbExpToken \&t );}
-\DoxyCodeLine{177 xbInt16 GetTokenLogicalConstant( xbExpToken \&t );}
-\DoxyCodeLine{178 xbInt16 GetTokenNumericConstant( xbExpToken \&t );}
-\DoxyCodeLine{179 xbInt16 GetTokenOperator ( xbExpToken \&t );}
-\DoxyCodeLine{180 xbInt16 GetTokenParen ( xbExpToken \&t );}
-\DoxyCodeLine{181 }
-\DoxyCodeLine{182 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsFunction ( \textcolor{keyword}{const} xbString \&sExp, \textcolor{keywordtype}{char} \&cReturnType );}
-\DoxyCodeLine{183 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsLogicalConstant ( \textcolor{keyword}{const} xbString \&sExp );}
-\DoxyCodeLine{184 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsNumericConstant ( \textcolor{keyword}{const} xbString \&sExp, \textcolor{keywordtype}{char} cPrevNodeType );}
-\DoxyCodeLine{185 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsOperator ( \textcolor{keyword}{const} xbString \&sExp );}
-\DoxyCodeLine{186 \textcolor{keywordtype}{char} IsTokenSeparator ( \textcolor{keywordtype}{char} c );}
-\DoxyCodeLine{187 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsWhiteSpace ( \textcolor{keywordtype}{char} c );}
-\DoxyCodeLine{188 }
-\DoxyCodeLine{189 xbInt16 ParseExpression ( \textcolor{keyword}{const} xbString \&sExpression, xbInt16 iWeight );}
-\DoxyCodeLine{190 xbInt16 ParseExpressionConstant( xbExpToken \&t, xbExpNode *n );}
-\DoxyCodeLine{191 xbInt16 ParseExpressionFunction( xbExpToken \&t, xbExpNode *n, xbInt16 iWeight );}
-\DoxyCodeLine{192 xbInt16 ParseExpressionFunctionParms( \textcolor{keyword}{const} xbString \&sParms, xbLinkList<xbString> \&llParms );}
-\DoxyCodeLine{193 xbInt16 ParseExpressionField ( xbExpToken \&t, xbExpNode *n );}
-\DoxyCodeLine{194 xbInt16 ParseExpressionOperator( xbExpToken \&t, xbExpNode *n, xbInt16 iWeight );}
-\DoxyCodeLine{195 }
-\DoxyCodeLine{196 xbInt16 ProcessExpressionFunction( xbExpNode *n, xbInt16 iRecBufSw = 0 );}
-\DoxyCodeLine{197 xbInt16 ProcessExpressionOperator( xbExpNode *n );}
-\DoxyCodeLine{198 }
-\DoxyCodeLine{199 \textcolor{keyword}{private}: \textcolor{comment}{// fields}}
-\DoxyCodeLine{200 \mbox{\hyperlink{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}{xbXBase}} *xbase;}
-\DoxyCodeLine{201 \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf;}
-\DoxyCodeLine{202 xbExpNode *nTree; \textcolor{comment}{// pointer to tree of expNodes}}
-\DoxyCodeLine{203 \textcolor{comment}{// xbInt16 iExpLen; // size of expression result}}
-\DoxyCodeLine{204 }
-\DoxyCodeLine{205 }
-\DoxyCodeLine{206 \};}
-\DoxyCodeLine{207 }
-\DoxyCodeLine{208 \textcolor{comment}{/* Expression handler */}}
-\DoxyCodeLine{209 }
-\DoxyCodeLine{210 }
-\DoxyCodeLine{211 \};}
-\DoxyCodeLine{212 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_EXPRESSION\_SUPPORT}}
-\DoxyCodeLine{213 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// \_\_XB\_EXP\_H\_\_}}
-\DoxyCodeLine{214 }
-\DoxyCodeLine{215 }
-
-\end{DoxyCode}
diff --git a/docs/doxygen/latex/xbexpnode_8cpp.tex b/docs/doxygen/latex/xbexpnode_8cpp.tex
deleted file mode 100644
index 3ebbca7..0000000
--- a/docs/doxygen/latex/xbexpnode_8cpp.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-\hypertarget{xbexpnode_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/core/xbexpnode.cpp File Reference}
-\label{xbexpnode_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbexpnode.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbexpnode.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbexpnode_8h.tex b/docs/doxygen/latex/xbexpnode_8h.tex
deleted file mode 100644
index bfc9f0d..0000000
--- a/docs/doxygen/latex/xbexpnode_8h.tex
+++ /dev/null
@@ -1,2 +0,0 @@
-\hypertarget{xbexpnode_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/include/xbexpnode.h File Reference}
-\label{xbexpnode_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbexpnode.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbexpnode.h}}
diff --git a/docs/doxygen/latex/xbexpnode_8h_source.tex b/docs/doxygen/latex/xbexpnode_8h_source.tex
deleted file mode 100644
index ddd8ed1..0000000
--- a/docs/doxygen/latex/xbexpnode_8h_source.tex
+++ /dev/null
@@ -1,113 +0,0 @@
-\hypertarget{xbexpnode_8h_source}{}\doxysection{xbexpnode.\+h}
-\label{xbexpnode_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbexpnode.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbexpnode.h}}
-\mbox{\hyperlink{xbexpnode_8h}{Go to the documentation of this file.}}
-\begin{DoxyCode}{0}
-\DoxyCodeLine{1 \textcolor{comment}{/* xbexpnode.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\_EXPNODE\_H\_\_}}
-\DoxyCodeLine{18 \textcolor{preprocessor}{\#define \_\_XB\_EXPNODE\_H\_\_}}
-\DoxyCodeLine{19 }
-\DoxyCodeLine{20 \textcolor{comment}{// \#ifdef CMAKE\_COMPILER\_IS\_GNUCC}}
-\DoxyCodeLine{21 \textcolor{comment}{// \#pragma interface}}
-\DoxyCodeLine{22 \textcolor{comment}{// \#endif}}
-\DoxyCodeLine{23 }
-\DoxyCodeLine{24 \textcolor{preprocessor}{\#ifdef XB\_EXPRESSION\_SUPPORT}}
-\DoxyCodeLine{25 }
-\DoxyCodeLine{26 }
-\DoxyCodeLine{27 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
-\DoxyCodeLine{28 }
-\DoxyCodeLine{29 \textcolor{comment}{//class XBDLLEXPORT xbDbf;}}
-\DoxyCodeLine{30 }
-\DoxyCodeLine{31 \textcolor{comment}{/************************************************************************/}}
-\DoxyCodeLine{33 }
-\DoxyCodeLine{46 \textcolor{keyword}{class }XBDLLEXPORT xbExpNode \{}
-\DoxyCodeLine{47 \textcolor{keyword}{public}:}
-\DoxyCodeLine{48 xbExpNode();}
-\DoxyCodeLine{49 xbExpNode( xbString \&sNodeText, \textcolor{keywordtype}{char} cReturnType, \textcolor{keywordtype}{char} cNodeType );}
-\DoxyCodeLine{50 xbExpNode( xbString \&sNodeText, \textcolor{keywordtype}{char} cNodeType );}
-\DoxyCodeLine{51 xbExpNode( \textcolor{keywordtype}{char} cNodeType );}
-\DoxyCodeLine{52 }
-\DoxyCodeLine{53 \textcolor{keyword}{virtual} \string~xbExpNode();}
-\DoxyCodeLine{54 xbInt16 AddChild( xbExpNode *n );}
-\DoxyCodeLine{55 xbExpNode *GetChild( xbUInt32 ulChildNo ) \textcolor{keyword}{const};}
-\DoxyCodeLine{56 xbUInt32 GetChildCnt() \textcolor{keyword}{const};}
-\DoxyCodeLine{57 xbUInt32 GetChildNo() \textcolor{keyword}{const};}
-\DoxyCodeLine{58 \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *GetDbf() \textcolor{keyword}{const};}
-\DoxyCodeLine{59 xbInt16 GetFieldNo() \textcolor{keyword}{const};}
-\DoxyCodeLine{60 xbExpNode *GetFirstNode();}
-\DoxyCodeLine{61 xbExpNode *GetNextNode() \textcolor{keyword}{const};}
-\DoxyCodeLine{62 \textcolor{keywordtype}{void} GetNodeText( xbString \&sNodeText ) \textcolor{keyword}{const};}
-\DoxyCodeLine{63 \textcolor{keywordtype}{char} GetNodeType() \textcolor{keyword}{const};}
-\DoxyCodeLine{64 xbExpNode *GetParent() \textcolor{keyword}{const};}
-\DoxyCodeLine{65 xbString \&GetStringResult();}
-\DoxyCodeLine{66 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetBoolResult() \textcolor{keyword}{const};}
-\DoxyCodeLine{67 \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} GetNumericResult() \textcolor{keyword}{const};}
-\DoxyCodeLine{68 xbUInt32 GetResultLen() \textcolor{keyword}{const};}
-\DoxyCodeLine{69 xbExpNode *GetRightSibling() \textcolor{keyword}{const};}
-\DoxyCodeLine{70 \textcolor{keywordtype}{char} GetReturnType() \textcolor{keyword}{const};}
-\DoxyCodeLine{71 xbInt16 GetWeight() \textcolor{keyword}{const};}
-\DoxyCodeLine{72 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} HasRightSibling() \textcolor{keyword}{const};}
-\DoxyCodeLine{73 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsOperator() \textcolor{keyword}{const};}
-\DoxyCodeLine{74 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsUnaryOperator() \textcolor{keyword}{const};}
-\DoxyCodeLine{75 \textcolor{keywordtype}{void} RemoveLastChild();}
-\DoxyCodeLine{76 \textcolor{keywordtype}{void} SetResultLen( xbUInt32 ulResultLen );}
-\DoxyCodeLine{77 \textcolor{keywordtype}{void} SetDbfInfo( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf );}
-\DoxyCodeLine{78 \textcolor{keywordtype}{void} SetDbfInfo( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf, xbInt16 iFieldNo );}
-\DoxyCodeLine{79 \textcolor{keywordtype}{void} SetNodeText( xbString \&sNodeText );}
-\DoxyCodeLine{80 \textcolor{keywordtype}{void} SetNodeType( \textcolor{keywordtype}{char} cNodeType );}
-\DoxyCodeLine{81 \textcolor{keywordtype}{void} SetParent( xbExpNode *n );}
-\DoxyCodeLine{82 \textcolor{keywordtype}{void} SetResult( xbString \&sResult );}
-\DoxyCodeLine{83 \textcolor{keywordtype}{void} SetResult( xbDate \&dtResult );}
-\DoxyCodeLine{84 \textcolor{keywordtype}{void} SetResult( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bResult );}
-\DoxyCodeLine{85 \textcolor{keywordtype}{void} SetResult( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dResult );}
-\DoxyCodeLine{86 \textcolor{keywordtype}{void} SetReturnType( \textcolor{keywordtype}{char} cReturnType );}
-\DoxyCodeLine{87 \textcolor{keywordtype}{void} SetWeight( xbInt16 iWeight );}
-\DoxyCodeLine{88 }
-\DoxyCodeLine{89 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
-\DoxyCodeLine{90 \textcolor{keywordtype}{void} DumpNode( xbInt16 iOption ) \textcolor{keyword}{const}; \textcolor{comment}{// 0 = no children, 1 = and children}}
-\DoxyCodeLine{91 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{92 }
-\DoxyCodeLine{93 \textcolor{keyword}{private}:}
-\DoxyCodeLine{94 xbString sNodeText; \textcolor{comment}{// expression text}}
-\DoxyCodeLine{95 \textcolor{keywordtype}{char} cReturnType; \textcolor{comment}{// one of: XB\_EXP\_CHAR, XB\_EXP\_DATE, XB\_EXP\_LOGICAL, XB\_EXP\_NUMERIC}}
-\DoxyCodeLine{96 \textcolor{keywordtype}{char} cNodeType; \textcolor{comment}{// one of: XB\_EXP\_CONSTANT, XB\_EXP\_FUNCTION, XB\_EXP\_FIELD, XB\_EXP\_OPERATOR}}
-\DoxyCodeLine{97 xbString sResult; \textcolor{comment}{// char result, and operator}}
-\DoxyCodeLine{98 \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dResult; \textcolor{comment}{// numeric and bool results}}
-\DoxyCodeLine{99 xbExpNode * nParent; \textcolor{comment}{// pointer to parent}}
-\DoxyCodeLine{100 xbLinkList<xbExpNode *> llChildren; \textcolor{comment}{// linked list of descendent nodes}}
-\DoxyCodeLine{101 \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf; \textcolor{comment}{// pointer to dbf, used for field, RECNO() and RECCOUNT()}}
-\DoxyCodeLine{102 xbInt16 iFieldNo; \textcolor{comment}{// field no if DBF field}}
-\DoxyCodeLine{103 xbUInt32 ulResultLen; \textcolor{comment}{// for string results, accumulated length of character operations}}
-\DoxyCodeLine{104 \textcolor{comment}{// includes the sum of all nodes under this + this}}
-\DoxyCodeLine{105 \textcolor{comment}{// date = 8, numeric = 4, logical = 1}}
-\DoxyCodeLine{106 xbInt16 iWeight; \textcolor{comment}{// used for buildign the tree of nodes, assigned to operators}}
-\DoxyCodeLine{107 \textcolor{comment}{// the higher the number, the lower it goes on the tree}}
-\DoxyCodeLine{108 }
-\DoxyCodeLine{109 \};}
-\DoxyCodeLine{110 }
-\DoxyCodeLine{111 \textcolor{comment}{/************************************************************************/}}
-\DoxyCodeLine{112 }
-\DoxyCodeLine{113 \textcolor{comment}{/* Expression handler */}}
-\DoxyCodeLine{114 }
-\DoxyCodeLine{115 }
-\DoxyCodeLine{116 \};}
-\DoxyCodeLine{117 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_EXPRESSION\_SUPPORT}}
-\DoxyCodeLine{118 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// \_\_XB\_EXP\_H\_\_}}
-\DoxyCodeLine{119 }
-\DoxyCodeLine{120 }
-
-\end{DoxyCode}
diff --git a/docs/doxygen/latex/xbfields_8cpp.tex b/docs/doxygen/latex/xbfields_8cpp.tex
deleted file mode 100644
index 723435f..0000000
--- a/docs/doxygen/latex/xbfields_8cpp.tex
+++ /dev/null
@@ -1,8 +0,0 @@
-\hypertarget{xbfields_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/core/xbfields.cpp File Reference}
-\label{xbfields_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbfields.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbfields.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
-\doxysubsection*{Namespaces}
-\begin{DoxyCompactItemize}
-\item
-namespace \mbox{\hyperlink{namespacexb}{xb}}
-\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xbfile_8cpp.tex b/docs/doxygen/latex/xbfile_8cpp.tex
deleted file mode 100644
index 247d030..0000000
--- a/docs/doxygen/latex/xbfile_8cpp.tex
+++ /dev/null
@@ -1,8 +0,0 @@
-\hypertarget{xbfile_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/core/xbfile.cpp File Reference}
-\label{xbfile_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbfile.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbfile.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
-\doxysubsection*{Namespaces}
-\begin{DoxyCompactItemize}
-\item
-namespace \mbox{\hyperlink{namespacexb}{xb}}
-\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xbfile_8h.tex b/docs/doxygen/latex/xbfile_8h.tex
deleted file mode 100644
index a3c4964..0000000
--- a/docs/doxygen/latex/xbfile_8h.tex
+++ /dev/null
@@ -1,58 +0,0 @@
-\hypertarget{xbfile_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/include/xbfile.h File Reference}
-\label{xbfile_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbfile.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbfile.h}}
-\doxysubsection*{Data Structures}
-\begin{DoxyCompactItemize}
-\item
-class \mbox{\hyperlink{classxb_1_1xbFile}{xb\+::xb\+File}}
-\begin{DoxyCompactList}\small\item\em Class for handling low level file I/O. \end{DoxyCompactList}\end{DoxyCompactItemize}
-\doxysubsection*{Namespaces}
-\begin{DoxyCompactItemize}
-\item
-namespace \mbox{\hyperlink{namespacexb}{xb}}
-\end{DoxyCompactItemize}
-\doxysubsection*{Macros}
-\begin{DoxyCompactItemize}
-\item
-\#define \mbox{\hyperlink{xbfile_8h_ae58c73e0ba237fcf67ee20feea6c2743}{XB\+\_\+\+READ}}~0
-\item
-\#define \mbox{\hyperlink{xbfile_8h_af991a288c327f6857e90156ea734a633}{XB\+\_\+\+READ\+\_\+\+WRITE}}~1
-\item
-\#define \mbox{\hyperlink{xbfile_8h_abbf99e259c2f31572c886da6d85b1359}{XB\+\_\+\+WRITE}}~2
-\item
-\#define \mbox{\hyperlink{xbfile_8h_a9ec4d60a008c667d9861e3b3814f0232}{XB\+\_\+\+SINGLE\+\_\+\+USER}}~0
-\item
-\#define \mbox{\hyperlink{xbfile_8h_a05c0fc99ba71cf953d046d12f3f874bc}{XB\+\_\+\+MULTI\+\_\+\+USER}}~1
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Macro Definition Documentation}
-\mbox{\Hypertarget{xbfile_8h_a05c0fc99ba71cf953d046d12f3f874bc}\label{xbfile_8h_a05c0fc99ba71cf953d046d12f3f874bc}}
-\index{xbfile.h@{xbfile.h}!XB\_MULTI\_USER@{XB\_MULTI\_USER}}
-\index{XB\_MULTI\_USER@{XB\_MULTI\_USER}!xbfile.h@{xbfile.h}}
-\doxysubsubsection{\texorpdfstring{XB\_MULTI\_USER}{XB\_MULTI\_USER}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+MULTI\+\_\+\+USER~1}
-
-\mbox{\Hypertarget{xbfile_8h_ae58c73e0ba237fcf67ee20feea6c2743}\label{xbfile_8h_ae58c73e0ba237fcf67ee20feea6c2743}}
-\index{xbfile.h@{xbfile.h}!XB\_READ@{XB\_READ}}
-\index{XB\_READ@{XB\_READ}!xbfile.h@{xbfile.h}}
-\doxysubsubsection{\texorpdfstring{XB\_READ}{XB\_READ}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+READ~0}
-
-\mbox{\Hypertarget{xbfile_8h_af991a288c327f6857e90156ea734a633}\label{xbfile_8h_af991a288c327f6857e90156ea734a633}}
-\index{xbfile.h@{xbfile.h}!XB\_READ\_WRITE@{XB\_READ\_WRITE}}
-\index{XB\_READ\_WRITE@{XB\_READ\_WRITE}!xbfile.h@{xbfile.h}}
-\doxysubsubsection{\texorpdfstring{XB\_READ\_WRITE}{XB\_READ\_WRITE}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+READ\+\_\+\+WRITE~1}
-
-\mbox{\Hypertarget{xbfile_8h_a9ec4d60a008c667d9861e3b3814f0232}\label{xbfile_8h_a9ec4d60a008c667d9861e3b3814f0232}}
-\index{xbfile.h@{xbfile.h}!XB\_SINGLE\_USER@{XB\_SINGLE\_USER}}
-\index{XB\_SINGLE\_USER@{XB\_SINGLE\_USER}!xbfile.h@{xbfile.h}}
-\doxysubsubsection{\texorpdfstring{XB\_SINGLE\_USER}{XB\_SINGLE\_USER}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+SINGLE\+\_\+\+USER~0}
-
-\mbox{\Hypertarget{xbfile_8h_abbf99e259c2f31572c886da6d85b1359}\label{xbfile_8h_abbf99e259c2f31572c886da6d85b1359}}
-\index{xbfile.h@{xbfile.h}!XB\_WRITE@{XB\_WRITE}}
-\index{XB\_WRITE@{XB\_WRITE}!xbfile.h@{xbfile.h}}
-\doxysubsubsection{\texorpdfstring{XB\_WRITE}{XB\_WRITE}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+WRITE~2}
-
diff --git a/docs/doxygen/latex/xbfile_8h_source.tex b/docs/doxygen/latex/xbfile_8h_source.tex
deleted file mode 100644
index 34e78f5..0000000
--- a/docs/doxygen/latex/xbfile_8h_source.tex
+++ /dev/null
@@ -1,183 +0,0 @@
-\hypertarget{xbfile_8h_source}{}\doxysection{xbfile.\+h}
-\label{xbfile_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbfile.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbfile.h}}
-\mbox{\hyperlink{xbfile_8h}{Go to the documentation of this file.}}
-\begin{DoxyCode}{0}
-\DoxyCodeLine{1 \textcolor{comment}{/* xbfile.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 \textcolor{preprocessor}{\#ifndef \_\_XB\_FILE\_H\_\_}}
-\DoxyCodeLine{17 \textcolor{preprocessor}{\#define \_\_XB\_FILE\_H\_\_}}
-\DoxyCodeLine{18 }
-\DoxyCodeLine{19 \textcolor{preprocessor}{\#ifdef CMAKE\_COMPILER\_IS\_GNUCC}}
-\DoxyCodeLine{20 \textcolor{preprocessor}{\#pragma interface}}
-\DoxyCodeLine{21 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{22 }
-\DoxyCodeLine{23 \textcolor{comment}{/*****************************/}}
-\DoxyCodeLine{24 \textcolor{comment}{/* File Open Modes */}}
-\DoxyCodeLine{25 \textcolor{preprocessor}{\#define XB\_READ 0}}
-\DoxyCodeLine{26 \textcolor{preprocessor}{\#define XB\_READ\_WRITE 1}}
-\DoxyCodeLine{27 \textcolor{preprocessor}{\#define XB\_WRITE 2}}
-\DoxyCodeLine{28 }
-\DoxyCodeLine{29 \textcolor{comment}{/*****************************/}}
-\DoxyCodeLine{30 \textcolor{comment}{/* File Access Modes */}}
-\DoxyCodeLine{31 \textcolor{preprocessor}{\#define XB\_SINGLE\_USER 0 }\textcolor{comment}{// file buffering on}}
-\DoxyCodeLine{32 \textcolor{preprocessor}{\#define XB\_MULTI\_USER 1 }\textcolor{comment}{// file buffering off}}
-\DoxyCodeLine{33 }
-\DoxyCodeLine{34 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
-\DoxyCodeLine{35 }
-\DoxyCodeLine{56 \textcolor{keyword}{class }XBDLLEXPORT \mbox{\hyperlink{classxb_1_1xbFile}{xbFile}} : \textcolor{keyword}{public} \mbox{\hyperlink{classxb_1_1xbSsv}{xbSsv}} \{}
-\DoxyCodeLine{57 }
-\DoxyCodeLine{58 \textcolor{keyword}{public}:}
-\DoxyCodeLine{59 \textcolor{comment}{// xbFile();}}
-\DoxyCodeLine{60 \mbox{\hyperlink{classxb_1_1xbFile}{xbFile}}( \mbox{\hyperlink{classxb_1_1xbXBase}{xbXBase}} * x );}
-\DoxyCodeLine{61 }
-\DoxyCodeLine{62 \mbox{\hyperlink{classxb_1_1xbFile}{\string~xbFile}}();}
-\DoxyCodeLine{63 }
-\DoxyCodeLine{64 xbInt16 SetHomeFolders();}
-\DoxyCodeLine{65 }
-\DoxyCodeLine{66 xbInt16 CreateUniqueFileName( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sDirIn, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sExtIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFqnOut );}
-\DoxyCodeLine{67 xbInt16 CreateUniqueFileName( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sDirIn, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sExtIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFqnOut, xbInt16 iOption );}
-\DoxyCodeLine{68 }
-\DoxyCodeLine{69 \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& GetDirectory() \textcolor{keyword}{const};}
-\DoxyCodeLine{70 \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& GetFileName() \textcolor{keyword}{const};}
-\DoxyCodeLine{71 \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& GetFqFileName() \textcolor{keyword}{const};}
-\DoxyCodeLine{72 }
-\DoxyCodeLine{73 \textcolor{keywordtype}{void} SetDirectory ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sDirectory);}
-\DoxyCodeLine{74 \textcolor{keywordtype}{void} SetFileName ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName );}
-\DoxyCodeLine{75 \textcolor{keywordtype}{void} SetFqFileName( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFqName );}
-\DoxyCodeLine{76 }
-\DoxyCodeLine{77 xbUInt32 GetBlockSize () \textcolor{keyword}{const};}
-\DoxyCodeLine{78 xbInt16 SetBlockSize ( xbUInt32 ulBlockSize );}
-\DoxyCodeLine{79 }
-\DoxyCodeLine{80 xbInt16 GetOpenMode () \textcolor{keyword}{const};}
-\DoxyCodeLine{81 xbInt16 GetShareMode () \textcolor{keyword}{const};}
-\DoxyCodeLine{82 }
-\DoxyCodeLine{83 xbInt16 GetFileDirPart ( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileDirPartOut ) \textcolor{keyword}{const};}
-\DoxyCodeLine{84 xbInt16 GetFileDirPart ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sCompleteFileNameIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileDirPartOut ) \textcolor{keyword}{const};}
-\DoxyCodeLine{85 xbInt16 GetFileExtPart ( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileExtPartOut ) \textcolor{keyword}{const};}
-\DoxyCodeLine{86 xbInt16 GetFileExtPart ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sCompleteFileNameIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileExtPartOut ) \textcolor{keyword}{const};}
-\DoxyCodeLine{87 xbInt16 GetFileNamePart( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileNamePartOut ) \textcolor{keyword}{const};}
-\DoxyCodeLine{88 xbInt16 GetFileNamePart( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sCompleteFileNameIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileNamePartOut ) \textcolor{keyword}{const};}
-\DoxyCodeLine{89 xbInt16 GetFileType ( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileType ) \textcolor{keyword}{const};}
-\DoxyCodeLine{90 }
-\DoxyCodeLine{91 xbInt16 GetXbaseFileTypeByte( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName, xbInt16 \&iVersion );}
-\DoxyCodeLine{92 xbInt16 GetXbaseFileTypeByte( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName, \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} \&cFileTypeByte );}
-\DoxyCodeLine{93 xbInt16 GetXbaseFileTypeByte( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName, \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} \&cFileTypeByte, xbInt16 \&iVersion );}
-\DoxyCodeLine{94 xbInt16 DetermineXbaseTableVersion( \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} cFileTypeByte ) \textcolor{keyword}{const};}
-\DoxyCodeLine{95 xbInt16 DetermineXbaseMemoVersion( \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} cFileTypeByte ) \textcolor{keyword}{const};}
-\DoxyCodeLine{96 }
-\DoxyCodeLine{97 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} FileExists () \textcolor{keyword}{const};}
-\DoxyCodeLine{98 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} FileExists ( xbInt16 iOption ) \textcolor{keyword}{const};}
-\DoxyCodeLine{99 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} FileExists ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName ) \textcolor{keyword}{const};}
-\DoxyCodeLine{100 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} FileExists ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName, xbInt16 iOption ) \textcolor{keyword}{const};}
-\DoxyCodeLine{101 }
-\DoxyCodeLine{102 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} FileIsOpen () \textcolor{keyword}{const};}
-\DoxyCodeLine{103 }
-\DoxyCodeLine{104 xbInt16 ReadBlock ( xbUInt32 ulBlockNo, \textcolor{keywordtype}{size\_t} readSize, \textcolor{keywordtype}{void} *buf );}
-\DoxyCodeLine{105 xbInt16 ReadBlock ( xbUInt32 ulBlockNo, xbUInt32 ulBlockSize, \textcolor{keywordtype}{size\_t} readSize, \textcolor{keywordtype}{void} *buf );}
-\DoxyCodeLine{106 xbInt16 WriteBlock( xbUInt32 ulBlockNo, \textcolor{keywordtype}{size\_t} writeSize, \textcolor{keywordtype}{void} *buf );}
-\DoxyCodeLine{107 }
-\DoxyCodeLine{108 xbInt16 GetFileSize( xbUInt64 \&ullFileSize );}
-\DoxyCodeLine{109 xbInt16 GetFileMtime( time\_t \&mtime );}
-\DoxyCodeLine{110 }
-\DoxyCodeLine{111 \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} eGetDouble( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *p ) \textcolor{keyword}{const};}
-\DoxyCodeLine{112 xbInt32 eGetInt32 ( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *p ) \textcolor{keyword}{const};}
-\DoxyCodeLine{113 xbUInt32 eGetUInt32( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *p ) \textcolor{keyword}{const};}
-\DoxyCodeLine{114 xbInt16 eGetInt16 ( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *p ) \textcolor{keyword}{const};}
-\DoxyCodeLine{115 xbUInt16 eGetUInt16( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *p ) \textcolor{keyword}{const};}
-\DoxyCodeLine{116 \textcolor{keywordtype}{void} ePutDouble( \textcolor{keywordtype}{char} *p, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} d );}
-\DoxyCodeLine{117 \textcolor{keywordtype}{void} ePutInt32 ( \textcolor{keywordtype}{char} *p, xbInt32 l );}
-\DoxyCodeLine{118 \textcolor{keywordtype}{void} ePutUInt32( \textcolor{keywordtype}{char} *p, xbUInt32 ul );}
-\DoxyCodeLine{119 \textcolor{keywordtype}{void} ePutInt16 ( \textcolor{keywordtype}{char} *p, xbInt16 s );}
-\DoxyCodeLine{120 \textcolor{keywordtype}{void} ePutUInt16( \textcolor{keywordtype}{char} *p, xbUInt16 s );}
-\DoxyCodeLine{121 }
-\DoxyCodeLine{122 xbInt16 xbFclose ();}
-\DoxyCodeLine{123 xbInt16 xbFeof ();}
-\DoxyCodeLine{124 xbInt16 xbFflush ();}
-\DoxyCodeLine{125 xbInt16 xbFgetc ( xbInt32 \&c );}
-\DoxyCodeLine{126 xbInt16 xbFgetc ( \textcolor{keywordtype}{char} \&c );}
-\DoxyCodeLine{127 }
-\DoxyCodeLine{128 \textcolor{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
-\DoxyCodeLine{129 xbInt16 xbLock ( xbInt16 iFunction, xbInt64 llOffset, \textcolor{keywordtype}{size\_t} stLen );}
-\DoxyCodeLine{130 xbInt16 GetLockRetryCount() \textcolor{keyword}{const};}
-\DoxyCodeLine{131 \textcolor{keywordtype}{void} SetLockRetryCount( xbInt16 iLockRetries );}
-\DoxyCodeLine{132 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{133 }
-\DoxyCodeLine{134 xbInt16 \mbox{\hyperlink{classxb_1_1xbFile_a7cdfef5ede9ac98d44a28a6b7a70972c}{xbFopen}} ( xbInt16 iOpenMode );}
-\DoxyCodeLine{135 xbInt16 xbFopen ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOpenMode, xbInt16 iShareMode );}
-\DoxyCodeLine{136 xbInt16 xbFopen ( xbInt16 iOpenMode, xbInt16 iShareMode );}
-\DoxyCodeLine{137 xbInt16 xbFopen ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sMode, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName, xbInt16 iShareMode );}
-\DoxyCodeLine{138 }
-\DoxyCodeLine{139 xbInt16 xbFputc ( xbInt32 c );}
-\DoxyCodeLine{140 xbInt16 xbFputc ( xbInt32 c, xbInt32 iNoTimes );}
-\DoxyCodeLine{141 xbInt16 xbFputs ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s );}
-\DoxyCodeLine{142 xbInt16 xbFread ( \textcolor{keywordtype}{void} *ptr, \textcolor{keywordtype}{size\_t} size, \textcolor{keywordtype}{size\_t} nmemb );}
-\DoxyCodeLine{143 xbInt16 xbFgets ( \textcolor{keywordtype}{size\_t} lSize, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sLine );}
-\DoxyCodeLine{144 }
-\DoxyCodeLine{145 \textcolor{keywordtype}{size\_t} xbFtell ();}
-\DoxyCodeLine{146 xbInt16 xbFseek ( xbInt64 llOffset, xbInt32 whence );}
-\DoxyCodeLine{147 }
-\DoxyCodeLine{148 \textcolor{keywordtype}{void} xbFTurnOffFileBuffering();}
-\DoxyCodeLine{149 xbInt16 xbFwrite ( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *ptr, \textcolor{keywordtype}{size\_t} lSize, \textcolor{keywordtype}{size\_t} lNmemb );}
-\DoxyCodeLine{150 }
-\DoxyCodeLine{151 xbInt16 xbReadUntil ( \textcolor{keyword}{const} \textcolor{keywordtype}{char} cDelim, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
-\DoxyCodeLine{152 xbInt16 xbRemove ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName, xbInt16 iOption );}
-\DoxyCodeLine{153 xbInt16 xbRemove ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName );}
-\DoxyCodeLine{154 xbInt16 xbRemove ();}
-\DoxyCodeLine{155 }
-\DoxyCodeLine{156 xbInt16 xbRename ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOldName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sNewName );}
-\DoxyCodeLine{157 \textcolor{keywordtype}{void} xbRewind ();}
-\DoxyCodeLine{158 }
-\DoxyCodeLine{159 xbInt16 xbTruncate ( xbInt64 llSize );}
-\DoxyCodeLine{160 xbInt16 NameSuffixMissing( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName, xbInt16 iOption ) \textcolor{keyword}{const};}
-\DoxyCodeLine{161 }
-\DoxyCodeLine{162 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
-\DoxyCodeLine{163 xbInt16 DumpBlockToDisk( xbUInt32 ulBlockNo, \textcolor{keywordtype}{size\_t} lBlockSize );}
-\DoxyCodeLine{164 xbInt16 DumpMemToDisk ( \textcolor{keywordtype}{char} *p, \textcolor{keywordtype}{size\_t} lBlockSize );}
-\DoxyCodeLine{165 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{166 }
-\DoxyCodeLine{167 }
-\DoxyCodeLine{168 \textcolor{keyword}{protected}:}
-\DoxyCodeLine{169 }
-\DoxyCodeLine{170 \mbox{\hyperlink{classxb_1_1xbXBase}{xbXBase}} *\mbox{\hyperlink{classxb_1_1xbFile_ae39a67ea391b46055d4ca299cb222004}{xbase}}; \textcolor{comment}{/* pointer to the main structures */}}
-\DoxyCodeLine{171 }
-\DoxyCodeLine{172 \textcolor{keyword}{private}:}
-\DoxyCodeLine{173 FILE *fp;}
-\DoxyCodeLine{174 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sFqFileName; \textcolor{comment}{/* fully qualified file name */}}
-\DoxyCodeLine{175 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sFileName; \textcolor{comment}{/* file name */}}
-\DoxyCodeLine{176 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sDirectory; \textcolor{comment}{/* directory, ends with / or \(\backslash\) */}}
-\DoxyCodeLine{177 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bFileOpen; \textcolor{comment}{/* true if file is open */}}
-\DoxyCodeLine{178 xbUInt32 ulBlockSize; \textcolor{comment}{/* used for memo and index files */}}
-\DoxyCodeLine{179 }
-\DoxyCodeLine{180 xbInt16 iOpenMode; \textcolor{comment}{/* XB\_READ || XB\_READ\_WRITE || XB\_WRITE */}}
-\DoxyCodeLine{181 xbInt16 iShareMode; \textcolor{comment}{/* XB\_SINGLE\_USER || XB\_MULTI\_USER -\/ set file buffering */}}
-\DoxyCodeLine{182 xbInt32 iFileNo; \textcolor{comment}{/* Library File No */}}
-\DoxyCodeLine{183 }
-\DoxyCodeLine{184 \textcolor{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
-\DoxyCodeLine{185 xbInt16 iLockRetries; \textcolor{comment}{/* file override number of lock attempts */}}
-\DoxyCodeLine{186 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{187 }
-\DoxyCodeLine{188 \textcolor{preprocessor}{ \#ifdef HAVE\_SETENDOFFILE\_F}}
-\DoxyCodeLine{189 HANDLE fHandle;}
-\DoxyCodeLine{190 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{191 }
-\DoxyCodeLine{192 }
-\DoxyCodeLine{193 \};}
-\DoxyCodeLine{194 }
-\DoxyCodeLine{195 \} \textcolor{comment}{/* namespace */}}
-\DoxyCodeLine{196 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XBFILE\_H\_\_ */}\textcolor{preprocessor}{}}
-\DoxyCodeLine{197 }
-
-\end{DoxyCode}
diff --git a/docs/doxygen/latex/xbfilter_8cpp.tex b/docs/doxygen/latex/xbfilter_8cpp.tex
deleted file mode 100644
index 93db5f7..0000000
--- a/docs/doxygen/latex/xbfilter_8cpp.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-\hypertarget{xbfilter_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/core/xbfilter.cpp File Reference}
-\label{xbfilter_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbfilter.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbfilter.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbfilter_8h.tex b/docs/doxygen/latex/xbfilter_8h.tex
deleted file mode 100644
index f8801e0..0000000
--- a/docs/doxygen/latex/xbfilter_8h.tex
+++ /dev/null
@@ -1,2 +0,0 @@
-\hypertarget{xbfilter_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/include/xbfilter.h File Reference}
-\label{xbfilter_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbfilter.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbfilter.h}}
diff --git a/docs/doxygen/latex/xbfilter_8h_source.tex b/docs/doxygen/latex/xbfilter_8h_source.tex
deleted file mode 100644
index 861045b..0000000
--- a/docs/doxygen/latex/xbfilter_8h_source.tex
+++ /dev/null
@@ -1,84 +0,0 @@
-\hypertarget{xbfilter_8h_source}{}\doxysection{xbfilter.\+h}
-\label{xbfilter_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbfilter.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbfilter.h}}
-\mbox{\hyperlink{xbfilter_8h}{Go to the documentation of this file.}}
-\begin{DoxyCode}{0}
-\DoxyCodeLine{1 \textcolor{comment}{/* xbfilter.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}{This class manages the user data area (UDA)}}
-\DoxyCodeLine{15 \textcolor{comment}{}}
-\DoxyCodeLine{16 \textcolor{comment}{*/}}
-\DoxyCodeLine{17 }
-\DoxyCodeLine{18 }
-\DoxyCodeLine{19 \textcolor{preprocessor}{\#ifndef \_\_XB\_XBFILTER\_H\_\_}}
-\DoxyCodeLine{20 \textcolor{preprocessor}{\#define \_\_XB\_XBFILTER\_H\_\_}}
-\DoxyCodeLine{21 }
-\DoxyCodeLine{22 \textcolor{preprocessor}{\#ifdef CMAKE\_COMPILER\_IS\_GNUCC}}
-\DoxyCodeLine{23 \textcolor{preprocessor}{\#pragma interface}}
-\DoxyCodeLine{24 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{25 }
-\DoxyCodeLine{26 }
-\DoxyCodeLine{27 \textcolor{preprocessor}{\#ifdef XB\_FILTER\_SUPPORT}}
-\DoxyCodeLine{28 }
-\DoxyCodeLine{29 }
-\DoxyCodeLine{30 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
-\DoxyCodeLine{31 }
-\DoxyCodeLine{32 \textcolor{comment}{//\#ifdef XB\_INDEX\_SUPPORT}}
-\DoxyCodeLine{33 \textcolor{comment}{//class XBDLLEXPORT xbIx;}}
-\DoxyCodeLine{34 \textcolor{comment}{//\#endif // XB\_INDEX\_SUPPORT}}
-\DoxyCodeLine{35 }
-\DoxyCodeLine{36 }
-\DoxyCodeLine{37 \textcolor{keyword}{class }XBDLLEXPORT xbFilter \{}
-\DoxyCodeLine{38 }
-\DoxyCodeLine{39 \textcolor{keyword}{public}:}
-\DoxyCodeLine{40 xbFilter( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf );}
-\DoxyCodeLine{41 \string~xbFilter();}
-\DoxyCodeLine{42 xbInt16 Set( xbString \&sFilterExpression );}
-\DoxyCodeLine{43 xbInt16 Set( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *sFilterExpression );}
-\DoxyCodeLine{44 xbInt16 GetFirstRecord( xbInt16 iOpt = 1 );}
-\DoxyCodeLine{45 xbInt16 GetNextRecord ( xbInt16 iOpt = 1 );}
-\DoxyCodeLine{46 xbInt16 GetPrevRecord ( xbInt16 iOpt = 1 );}
-\DoxyCodeLine{47 xbInt16 GetLastRecord ( xbInt16 iOpt = 1 );}
-\DoxyCodeLine{48 \textcolor{keywordtype}{void} SetLimit( xbInt32 ulLimit );}
-\DoxyCodeLine{49 xbInt32 GetLimit() \textcolor{keyword}{const};}
-\DoxyCodeLine{50 \textcolor{keywordtype}{void} ResetQryCnt();}
-\DoxyCodeLine{51 xbInt32 GetQryCnt() \textcolor{keyword}{const};}
-\DoxyCodeLine{52 }
-\DoxyCodeLine{53 \textcolor{preprocessor}{ \#ifdef XB\_INDEX\_SUPPORT}}
-\DoxyCodeLine{54 xbInt16 GetFirstRecordIx( xbInt16 iOpt = 1 );}
-\DoxyCodeLine{55 xbInt16 GetNextRecordIx ( xbInt16 iOpt = 1 );}
-\DoxyCodeLine{56 xbInt16 GetPrevRecordIx ( xbInt16 iOpt = 1 );}
-\DoxyCodeLine{57 xbInt16 GetLastRecordIx ( xbInt16 iOpt = 1 );}
-\DoxyCodeLine{58 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INDEX\_SUPPORT}}
-\DoxyCodeLine{59 }
-\DoxyCodeLine{60 }
-\DoxyCodeLine{61 \textcolor{keyword}{private}:}
-\DoxyCodeLine{62 \textcolor{comment}{// xbXBase *xbase;}}
-\DoxyCodeLine{63 \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf;}
-\DoxyCodeLine{64 xbExp *exp;}
-\DoxyCodeLine{65 }
-\DoxyCodeLine{66 xbInt32 lLimit; \textcolor{comment}{// max number rows returned}}
-\DoxyCodeLine{67 xbInt32 lCurQryCnt; \textcolor{comment}{// current count of rows returned, neg\# is moving from bottom to top}}
-\DoxyCodeLine{68 \textcolor{comment}{// pos\# is moving from top to bottom}}
-\DoxyCodeLine{69 \textcolor{preprocessor}{ \#ifdef XB\_INDEX\_SUPPORT}}
-\DoxyCodeLine{70 xbIx *pIx; \textcolor{comment}{// if index is set, the class uses the index tag, otherwise table}}
-\DoxyCodeLine{71 \textcolor{keywordtype}{void} *vpTag;}
-\DoxyCodeLine{72 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INDEX\_SUPPORT}}
-\DoxyCodeLine{73 }
-\DoxyCodeLine{74 }
-\DoxyCodeLine{75 \};}
-\DoxyCodeLine{76 \} \textcolor{comment}{/* namespace */}}
-\DoxyCodeLine{77 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* XB\_FILTER\_SUPPORT */}\textcolor{preprocessor}{}}
-\DoxyCodeLine{78 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XBFILTER\_H\_\_ */}\textcolor{preprocessor}{}}
-
-\end{DoxyCode}
diff --git a/docs/doxygen/latex/xbfuncs_8cpp.tex b/docs/doxygen/latex/xbfuncs_8cpp.tex
deleted file mode 100644
index aa4a914..0000000
--- a/docs/doxygen/latex/xbfuncs_8cpp.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-\hypertarget{xbfuncs_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/core/xbfuncs.cpp File Reference}
-\label{xbfuncs_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbfuncs.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbfuncs.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbindex_8h.tex b/docs/doxygen/latex/xbindex_8h.tex
deleted file mode 100644
index 3a731e4..0000000
--- a/docs/doxygen/latex/xbindex_8h.tex
+++ /dev/null
@@ -1,2 +0,0 @@
-\hypertarget{xbindex_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/include/xbindex.h File Reference}
-\label{xbindex_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbindex.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbindex.h}}
diff --git a/docs/doxygen/latex/xbindex_8h_source.tex b/docs/doxygen/latex/xbindex_8h_source.tex
deleted file mode 100644
index bc9fde0..0000000
--- a/docs/doxygen/latex/xbindex_8h_source.tex
+++ /dev/null
@@ -1,513 +0,0 @@
-\hypertarget{xbindex_8h_source}{}\doxysection{xbindex.\+h}
-\label{xbindex_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbindex.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbindex.h}}
-\mbox{\hyperlink{xbindex_8h}{Go to the documentation of this file.}}
-\begin{DoxyCode}{0}
-\DoxyCodeLine{1 \textcolor{comment}{/* xbindex.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, 2018, 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\_INDEX\_H\_\_}}
-\DoxyCodeLine{18 \textcolor{preprocessor}{\#define \_\_XB\_INDEX\_H\_\_}}
-\DoxyCodeLine{19 }
-\DoxyCodeLine{20 \textcolor{preprocessor}{\#ifdef XB\_INDEX\_SUPPORT}}
-\DoxyCodeLine{21 }
-\DoxyCodeLine{22 }
-\DoxyCodeLine{23 \textcolor{preprocessor}{\#define XB\_ADD\_KEY 1}}
-\DoxyCodeLine{24 \textcolor{preprocessor}{\#define XB\_UPD\_KEY 2}}
-\DoxyCodeLine{25 \textcolor{preprocessor}{\#define XB\_DEL\_KEY 3}}
-\DoxyCodeLine{26 }
-\DoxyCodeLine{27 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
-\DoxyCodeLine{28 }
-\DoxyCodeLine{29 }
-\DoxyCodeLine{30 }
-\DoxyCodeLine{32 \textcolor{comment}{// structure for index nodes, each node contains information regarding one block}}
-\DoxyCodeLine{33 \textcolor{keyword}{struct }XBDLLEXPORT xbIxNode \{}
-\DoxyCodeLine{34 xbIxNode *npPrev; \textcolor{comment}{// pointer to previous node in chain}}
-\DoxyCodeLine{35 xbIxNode *npNext; \textcolor{comment}{// pointer to next node in chain}}
-\DoxyCodeLine{36 xbUInt32 iCurKeyNo; \textcolor{comment}{// current key number in the node, 0 offset}}
-\DoxyCodeLine{37 xbUInt32 ulBlockNo; \textcolor{comment}{// this block number}}
-\DoxyCodeLine{38 xbUInt32 ulBufSize; \textcolor{comment}{// size of cpBlockData}}
-\DoxyCodeLine{39 \textcolor{keywordtype}{char} *cpBlockData; \textcolor{comment}{// pointer to memory version of block data stored in file}}
-\DoxyCodeLine{40 \};}
-\DoxyCodeLine{42 }
-\DoxyCodeLine{43 }
-\DoxyCodeLine{45 }
-\DoxyCodeLine{120 \textcolor{keyword}{class }XBDLLEXPORT xbIx : \textcolor{keyword}{public} xbFile \{}
-\DoxyCodeLine{121 \textcolor{keyword}{public}:}
-\DoxyCodeLine{122 xbIx( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} * d );}
-\DoxyCodeLine{123 \textcolor{keyword}{virtual} \string~xbIx();}
-\DoxyCodeLine{124 }
-\DoxyCodeLine{125 \textcolor{keyword}{virtual} xbInt16 CheckTagIntegrity( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOpt ) = 0;}
-\DoxyCodeLine{126 \textcolor{keyword}{virtual} xbInt16 Close();}
-\DoxyCodeLine{127 \textcolor{keyword}{virtual} xbInt16 CreateTag( \textcolor{keyword}{const} xbString \&sName, \textcolor{keyword}{const} xbString \&sKey, \textcolor{keyword}{const} xbString \&sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, \textcolor{keywordtype}{void} **vpTag ) = 0;}
-\DoxyCodeLine{128 \textcolor{keyword}{virtual} xbInt16 FindKey( \textcolor{keywordtype}{void} *vpTag, \textcolor{keyword}{const} xbString \&sKey, xbInt16 iRetrieveSw );}
-\DoxyCodeLine{129 \textcolor{keyword}{virtual} xbInt16 FindKey( \textcolor{keywordtype}{void} *vpTag, \textcolor{keyword}{const} \textcolor{keywordtype}{char} * cKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw );}
-\DoxyCodeLine{130 \textcolor{keyword}{virtual} xbInt16 FindKey( \textcolor{keywordtype}{void} *vpTag, \textcolor{keyword}{const} xbBcd \&bcd, xbInt16 iRetrieveSw );}
-\DoxyCodeLine{131 \textcolor{keyword}{virtual} xbInt16 FindKey( \textcolor{keywordtype}{void} *vpTag, \textcolor{keyword}{const} xbDate \&dtKey, xbInt16 iRetrieveSw );}
-\DoxyCodeLine{132 \textcolor{keyword}{virtual} xbInt16 FindKey( \textcolor{keywordtype}{void} *vpTag, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dKey, xbInt16 iRetrieveSw );}
-\DoxyCodeLine{133 \textcolor{keyword}{virtual} xbInt16 FindKey( \textcolor{keywordtype}{void} *vpTag, \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw ) = 0;}
-\DoxyCodeLine{134 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} *GetCurTag() \textcolor{keyword}{const};}
-\DoxyCodeLine{135 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *GetDbf() \textcolor{keyword}{const};}
-\DoxyCodeLine{136 }
-\DoxyCodeLine{137 \textcolor{keyword}{virtual} xbString \&GetKeyExpression( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const} = 0;}
-\DoxyCodeLine{138 \textcolor{keyword}{virtual} xbString \&GetKeyFilter( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const} = 0;}
-\DoxyCodeLine{139 \textcolor{keyword}{virtual} \textcolor{keywordtype}{char} GetKeyType( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const} = 0;}
-\DoxyCodeLine{140 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetLocked() \textcolor{keyword}{const};}
-\DoxyCodeLine{141 }
-\DoxyCodeLine{142 \textcolor{keyword}{virtual} xbInt16 GetFirstKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 iRetrieveSw ) = 0;}
-\DoxyCodeLine{143 \textcolor{keyword}{virtual} xbInt16 GetFirstKey( \textcolor{keywordtype}{void} *vpTag );}
-\DoxyCodeLine{144 \textcolor{keyword}{virtual} xbInt16 GetFirstKey();}
-\DoxyCodeLine{145 }
-\DoxyCodeLine{146 \textcolor{keyword}{virtual} xbInt16 GetLastKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 lRetrieveSw ) = 0;}
-\DoxyCodeLine{147 \textcolor{keyword}{virtual} xbInt16 GetLastKey( \textcolor{keywordtype}{void} *vpTag );}
-\DoxyCodeLine{148 \textcolor{keyword}{virtual} xbInt16 GetLastKey();}
-\DoxyCodeLine{149 }
-\DoxyCodeLine{150 \textcolor{keyword}{virtual} xbInt16 GetNextKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 iRetrieveSw ) = 0;}
-\DoxyCodeLine{151 \textcolor{keyword}{virtual} xbInt16 GetNextKey( \textcolor{keywordtype}{void} *vpTag );}
-\DoxyCodeLine{152 \textcolor{keyword}{virtual} xbInt16 GetNextKey();}
-\DoxyCodeLine{153 }
-\DoxyCodeLine{154 \textcolor{keyword}{virtual} xbInt16 GetPrevKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 iRetrieveSw ) = 0;}
-\DoxyCodeLine{155 \textcolor{keyword}{virtual} xbInt16 GetPrevKey( \textcolor{keywordtype}{void} *vpTag );}
-\DoxyCodeLine{156 \textcolor{keyword}{virtual} xbInt16 GetPrevKey();}
-\DoxyCodeLine{157 }
-\DoxyCodeLine{158 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} *GetTag( xbInt16 iTagNo ) \textcolor{keyword}{const} = 0;}
-\DoxyCodeLine{159 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} *GetTag( xbString \&sTagName ) \textcolor{keyword}{const} = 0;}
-\DoxyCodeLine{160 \textcolor{keyword}{virtual} xbInt16 GetTagCount() \textcolor{keyword}{const} = 0;}
-\DoxyCodeLine{161 }
-\DoxyCodeLine{162 \textcolor{keyword}{virtual} xbString \&GetTagName( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const} = 0;}
-\DoxyCodeLine{163 \textcolor{keyword}{virtual} \textcolor{keyword}{const} \textcolor{keywordtype}{char} * GetTagName( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOpt ) \textcolor{keyword}{const} = 0;}
-\DoxyCodeLine{164 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} GetTagName( \textcolor{keywordtype}{void} *vpTag, xbString \&sTagName ) \{\};}
-\DoxyCodeLine{165 }
-\DoxyCodeLine{166 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetUnique( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const} = 0;}
-\DoxyCodeLine{167 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetSortOrder( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const} = 0;}
-\DoxyCodeLine{168 }
-\DoxyCodeLine{169 \textcolor{keyword}{virtual} xbInt16 Open( \textcolor{keyword}{const} xbString \&sFileName );}
-\DoxyCodeLine{170 \textcolor{keyword}{virtual} xbInt16 Reindex( \textcolor{keywordtype}{void} **vpTag ) = 0;}
-\DoxyCodeLine{171 \textcolor{keyword}{virtual} xbInt16 SetCurTag( xbInt16 iTagNo ) = 0;}
-\DoxyCodeLine{172 \textcolor{keyword}{virtual} xbInt16 SetCurTag( xbString \&sTagName ) = 0;}
-\DoxyCodeLine{173 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} SetCurTag( \textcolor{keywordtype}{void} * vpCurTag );}
-\DoxyCodeLine{174 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} SetLocked( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bLocked );}
-\DoxyCodeLine{175 }
-\DoxyCodeLine{176 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} TestStub( \textcolor{keywordtype}{char} *s, \textcolor{keywordtype}{void} *vpTag ) \{\};}
-\DoxyCodeLine{177 }
-\DoxyCodeLine{178 }
-\DoxyCodeLine{179 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
-\DoxyCodeLine{180 \textcolor{keyword}{virtual} xbInt16 DumpFreeBlocks( xbInt16 iOpt = 0 ) \{ \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}{XB\_NO\_ERROR}}; \}}
-\DoxyCodeLine{181 \textcolor{keyword}{virtual} xbInt16 DumpHeader( xbInt16 iDestOpt = 0, xbInt16 iFmtOpt = 0 ) = 0;}
-\DoxyCodeLine{182 \textcolor{keyword}{virtual} xbInt16 DumpIxForTag( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOutputOpt ) = 0;}
-\DoxyCodeLine{183 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} DumpIxNodeChain( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOutputOpt ) \textcolor{keyword}{const} = 0;}
-\DoxyCodeLine{184 \textcolor{keyword}{virtual} xbInt16 DumpNode( \textcolor{keywordtype}{void} * vpTag, xbIxNode * pNode, xbInt16 iOption ) \textcolor{keyword}{const};}
-\DoxyCodeLine{185 \textcolor{keyword}{virtual} xbInt16 DumpTagBlocks( xbInt16 iOpt = 1, \textcolor{keywordtype}{void} *vpTag = NULL ) = 0;}
-\DoxyCodeLine{186 }
-\DoxyCodeLine{187 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{188 }
-\DoxyCodeLine{189 \textcolor{keyword}{protected}:}
-\DoxyCodeLine{190 \textcolor{keyword}{friend} \textcolor{keyword}{class }\mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}};}
-\DoxyCodeLine{191 }
-\DoxyCodeLine{192 \textcolor{keyword}{virtual} xbInt16 AddKey( \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulRecNo ) = 0;}
-\DoxyCodeLine{193 \textcolor{keyword}{virtual} xbInt16 AddKeys( xbUInt32 ulRecNo );}
-\DoxyCodeLine{194 \textcolor{keyword}{virtual} xbIxNode *AllocateIxNode( xbUInt32 ulBufSize = 0, xbInt16 iOption = 0 );}
-\DoxyCodeLine{195 \textcolor{keyword}{virtual} xbInt16 BSearchBlock( \textcolor{keywordtype}{char} cKeyType, xbIxNode *npNode, xbInt32 lKeyLen, \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpKey, xbInt32 lSearchKeyLen, xbInt16 \&iCompRc, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bDescending = \mbox{\hyperlink{xbtypes_8h_adc4b6ca5ad299f63675136d9e03938cc}{xbFalse}} ) \textcolor{keyword}{const};}
-\DoxyCodeLine{196 \textcolor{keyword}{virtual} xbInt16 CheckForDupKeys();}
-\DoxyCodeLine{197 \textcolor{keyword}{virtual} xbInt16 CheckForDupKey( \textcolor{keywordtype}{void} *vpTag ) = 0;}
-\DoxyCodeLine{198 \textcolor{keyword}{virtual} xbInt16 CompareKey( \textcolor{keywordtype}{char} cKeyType, \textcolor{keyword}{const} \textcolor{keywordtype}{void} *v1, \textcolor{keyword}{const} \textcolor{keywordtype}{void} *v2, \textcolor{keywordtype}{size\_t} lKeyLen ) \textcolor{keyword}{const};}
-\DoxyCodeLine{199 \textcolor{keyword}{virtual} xbInt16 CreateKeys( xbInt16 iOpt );}
-\DoxyCodeLine{200 \textcolor{keyword}{virtual} xbInt16 CreateKey( \textcolor{keywordtype}{void} * vpTag, xbInt16 iOpt ) = 0;}
-\DoxyCodeLine{201 \textcolor{keyword}{virtual} xbInt16 DeleteFromNode( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npNode, xbInt16 iSlotNo ) = 0;}
-\DoxyCodeLine{202 \textcolor{comment}{// virtual xbInt16 DeleteKeys( xbUInt32 ulRecNo );}}
-\DoxyCodeLine{203 \textcolor{keyword}{virtual} xbInt16 DeleteKeys();}
-\DoxyCodeLine{204 \textcolor{keyword}{virtual} xbInt16 DeleteKey( \textcolor{keywordtype}{void} *vpTag ) = 0;}
-\DoxyCodeLine{205 }
-\DoxyCodeLine{206 \textcolor{keyword}{virtual} xbInt16 DeleteTag( \textcolor{keywordtype}{void} *vpTag ) = 0;}
-\DoxyCodeLine{207 }
-\DoxyCodeLine{208 }
-\DoxyCodeLine{209 \textcolor{keyword}{virtual} xbInt16 FindKeyForCurRec( \textcolor{keywordtype}{void} *vpTag ) = 0;}
-\DoxyCodeLine{210 \textcolor{keyword}{virtual} xbIxNode *FreeNodeChain( xbIxNode *np );}
-\DoxyCodeLine{211 \textcolor{keyword}{virtual} xbInt16 GetBlock( \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulBlockNo, xbInt16 iOpt, xbUInt32 ulAddlBuf = 0 );}
-\DoxyCodeLine{212 \textcolor{comment}{// virtual xbBool GetIndexUpdated() const = 0;}}
-\DoxyCodeLine{213 \textcolor{keyword}{virtual} xbInt32 GetKeyCount( xbIxNode *npNode ) \textcolor{keyword}{const};}
-\DoxyCodeLine{214 \textcolor{keyword}{virtual} \textcolor{keywordtype}{char} *GetKeyData( xbIxNode *npNode, xbInt16 iKeyNo, xbInt16 iKeyItemLen ) \textcolor{keyword}{const};}
-\DoxyCodeLine{215 \textcolor{keyword}{virtual} xbInt16 GetKeySts( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const} = 0;}
-\DoxyCodeLine{216 \textcolor{keyword}{virtual} xbInt16 GetLastKey( xbUInt32 ulNodeNo, \textcolor{keywordtype}{void} *vpTag, xbInt16 lRetrieveSw ) = 0;}
-\DoxyCodeLine{217 \textcolor{keyword}{virtual} xbInt16 InsertNodeL( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, \textcolor{keywordtype}{char} * cpKeyBuf, xbUInt32 uiPtr ) = 0;}
-\DoxyCodeLine{218 \textcolor{keyword}{virtual} xbInt16 InsertNodeI( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, xbUInt32 uiPtr ) = 0;}
-\DoxyCodeLine{219 \textcolor{keyword}{virtual} xbInt16 KeyExists( \textcolor{keywordtype}{void} * ) = 0;}
-\DoxyCodeLine{220 \textcolor{comment}{// virtual xbInt16 KeyUpdated( void *vpTag ) const = 0;}}
-\DoxyCodeLine{221 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} NodeFree( xbIxNode * ixNode );}
-\DoxyCodeLine{222 \textcolor{keyword}{virtual} xbInt16 ReadHeadBlock( xbInt16 iOpt = 0 ) = 0;}
-\DoxyCodeLine{223 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} SetDbf( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf );}
-\DoxyCodeLine{224 \textcolor{keyword}{virtual} xbInt16 SplitNodeL( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, \textcolor{keywordtype}{char} *cpKeyBuf, xbUInt32 uiPtr ) = 0;}
-\DoxyCodeLine{225 \textcolor{keyword}{virtual} xbInt16 SplitNodeI( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 uiPtr ) = 0;}
-\DoxyCodeLine{226 \textcolor{keyword}{virtual} xbInt16 UpdateTagKey( \textcolor{keywordtype}{char} cAction, \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulRecNo = 0 ) = 0;}
-\DoxyCodeLine{227 \textcolor{keyword}{virtual} xbInt16 WriteHeadBlock( xbInt16 iOption ) = 0;}
-\DoxyCodeLine{228 }
-\DoxyCodeLine{229 \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf;}
-\DoxyCodeLine{230 \textcolor{keywordtype}{char} *cNodeBuf; \textcolor{comment}{// pointer to memory for processing in a block of index data}}
-\DoxyCodeLine{231 \textcolor{keywordtype}{void} *vpCurTag; \textcolor{comment}{// pointer to active tag. Single index files have only one tag}}
-\DoxyCodeLine{232 }
-\DoxyCodeLine{233 \textcolor{keyword}{private}:}
-\DoxyCodeLine{234 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} AppendNodeChain( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode ) = 0;}
-\DoxyCodeLine{235 \textcolor{keyword}{virtual} xbInt16 GetKeyPtr( \textcolor{keywordtype}{void} *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 \&ulKeyPtr ) \textcolor{keyword}{const} = 0;}
-\DoxyCodeLine{236 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsLeaf( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode ) \textcolor{keyword}{const} = 0;}
-\DoxyCodeLine{237 \textcolor{comment}{// virtual void SetCurNode( void *vpTag, xbIxNode *npNode ) = 0;}}
-\DoxyCodeLine{238 }
-\DoxyCodeLine{239 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bLocked; \textcolor{comment}{// index file locked?}}
-\DoxyCodeLine{240 \};}
-\DoxyCodeLine{241 }
-\DoxyCodeLine{242 \textcolor{preprocessor}{\#ifdef XB\_NDX\_SUPPORT}}
-\DoxyCodeLine{243 }
-\DoxyCodeLine{244 \textcolor{preprocessor}{\#define XB\_NDX\_BLOCK\_SIZE 512}}
-\DoxyCodeLine{245 }
-\DoxyCodeLine{246 }
-\DoxyCodeLine{248 \textcolor{keyword}{struct }XBDLLEXPORT xbNdxTag \{}
-\DoxyCodeLine{249 }
-\DoxyCodeLine{250 \textcolor{comment}{// NDX File Header Fields}}
-\DoxyCodeLine{251 xbUInt32 ulRootBlock; \textcolor{comment}{// header node is 0}}
-\DoxyCodeLine{252 xbUInt32 ulTotalBlocks; \textcolor{comment}{// includes header node}}
-\DoxyCodeLine{253 \textcolor{keywordtype}{char} cKeyType; \textcolor{comment}{// C = Char, F = Numeric, D = Date}}
-\DoxyCodeLine{254 xbInt16 iKeyLen; \textcolor{comment}{// length of key data}}
-\DoxyCodeLine{255 xbInt16 iKeysPerBlock; \textcolor{comment}{// max number keys per block <=100}}
-\DoxyCodeLine{256 xbInt16 iKeyType; \textcolor{comment}{// 00 = Char, 01 = Numeric}}
-\DoxyCodeLine{257 xbInt16 iKeyItemLen; \textcolor{comment}{// KeyLen + 8 bytes}}
-\DoxyCodeLine{258 \textcolor{keywordtype}{char} cSerNo; \textcolor{comment}{// rolling incrementing serial number +1 on each index update}}
-\DoxyCodeLine{259 xbInt16 iUnique; \textcolor{comment}{// True if unique}}
-\DoxyCodeLine{260 xbString sKeyExpression; \textcolor{comment}{// index expression}}
-\DoxyCodeLine{261 \textcolor{comment}{// end of NDX Header field}}
-\DoxyCodeLine{262 }
-\DoxyCodeLine{263 xbExp *exp; \textcolor{comment}{// pointer to expression for expression keys}}
-\DoxyCodeLine{264 time\_t tNodeChainTs; \textcolor{comment}{// node chain time stamp}}
-\DoxyCodeLine{265 xbIxNode *npNodeChain;}
-\DoxyCodeLine{266 xbIxNode *npCurNode;}
-\DoxyCodeLine{267 \textcolor{keywordtype}{char} *cpKeyBuf; \textcolor{comment}{// key buffer, for searches and adds}}
-\DoxyCodeLine{268 \textcolor{keywordtype}{char} *cpKeyBuf2; \textcolor{comment}{// key buffer, for deletes}}
-\DoxyCodeLine{269 xbString sTagName; \textcolor{comment}{// tag name -\/ is the file name without the extension}}
-\DoxyCodeLine{270 \textcolor{comment}{// xbInt16 iKeyUpdated; // key updated? set in method KeyUpdated, checked in AddKey and DeleteKey routines}}
-\DoxyCodeLine{271 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bFoundSts; \textcolor{comment}{// key found? used to determine if new key should be added in XB\_EMULATE\_DBASE mode in AddKey}}
-\DoxyCodeLine{272 }
-\DoxyCodeLine{273 }
-\DoxyCodeLine{274 xbInt16 iKeySts; \textcolor{comment}{// key updated? set in method CreateKey, checked in AddKey and DeleteKey routines}}
-\DoxyCodeLine{275 \textcolor{comment}{// old key filtered new key filtered iKeySts}}
-\DoxyCodeLine{276 \textcolor{comment}{// Y Y XB\_UPD\_KEY 2 -\/ update key if changed (delete and add)}}
-\DoxyCodeLine{277 \textcolor{comment}{// Y N XB\_DEL\_KEY 3 -\/ delete key}}
-\DoxyCodeLine{278 \textcolor{comment}{// N Y XB\_ADD\_KEY 1 -\/ add key}}
-\DoxyCodeLine{279 \textcolor{comment}{// N N 0 -\/ no update}}
-\DoxyCodeLine{280 }
-\DoxyCodeLine{281 \};}
-\DoxyCodeLine{283 }
-\DoxyCodeLine{285 }
-\DoxyCodeLine{304 \textcolor{keyword}{class }XBDLLEXPORT xbIxNdx : \textcolor{keyword}{public} xbIx \{}
-\DoxyCodeLine{305 \textcolor{keyword}{public}:}
-\DoxyCodeLine{306 xbIxNdx( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} * d );}
-\DoxyCodeLine{307 \string~xbIxNdx();}
-\DoxyCodeLine{308 xbInt16 CheckTagIntegrity( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOpt );}
-\DoxyCodeLine{309 xbInt16 CreateTag( \textcolor{keyword}{const} xbString \&sName, \textcolor{keyword}{const} xbString \&sKey, \textcolor{keyword}{const} xbString \&sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, \textcolor{keywordtype}{void} **vpTag );}
-\DoxyCodeLine{310 \textcolor{comment}{// xbInt16 DeleteTag( void *vpTag );}}
-\DoxyCodeLine{311 xbInt16 FindKey( \textcolor{keywordtype}{void} *vpTag, \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw );}
-\DoxyCodeLine{312 xbInt16 GetFirstKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 iRetrieveSw );}
-\DoxyCodeLine{313 }
-\DoxyCodeLine{314 xbInt16 GetLastKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 iRetrieveSw = 1 );}
-\DoxyCodeLine{315 xbInt16 GetNextKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 iRetrieveSw = 1 );}
-\DoxyCodeLine{316 xbInt16 GetPrevKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 iRetrieveSw = 1 );}
-\DoxyCodeLine{317 xbInt32 GetKeyLen ( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
-\DoxyCodeLine{318 \textcolor{keywordtype}{char} GetKeyType ( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
-\DoxyCodeLine{319 xbString \&GetKeyExpression( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
-\DoxyCodeLine{320 xbString \&GetKeyFilter( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
-\DoxyCodeLine{321 \textcolor{keywordtype}{void} *GetTag( xbInt16 iTagNo ) \textcolor{keyword}{const};}
-\DoxyCodeLine{322 \textcolor{keywordtype}{void} *GetTag( xbString \&sTagName ) \textcolor{keyword}{const};}
-\DoxyCodeLine{323 xbString \&GetTagName( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
-\DoxyCodeLine{324 \textcolor{keyword}{const} \textcolor{keywordtype}{char} * GetTagName( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOpt ) \textcolor{keyword}{const};}
-\DoxyCodeLine{325 }
-\DoxyCodeLine{326 xbInt16 GetTagCount() \textcolor{keyword}{const};}
-\DoxyCodeLine{327 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetUnique( \textcolor{keywordtype}{void} *vpTag = NULL ) \textcolor{keyword}{const};}
-\DoxyCodeLine{328 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetSortOrder( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
-\DoxyCodeLine{329 xbInt16 Reindex( \textcolor{keywordtype}{void} **vpTag );}
-\DoxyCodeLine{330 xbInt16 SetCurTag( xbInt16 iTagNo );}
-\DoxyCodeLine{331 xbInt16 SetCurTag( xbString \&sTagName );}
-\DoxyCodeLine{332 }
-\DoxyCodeLine{333 }
-\DoxyCodeLine{334 }
-\DoxyCodeLine{335 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
-\DoxyCodeLine{336 xbInt16 DumpTagBlocks( xbInt16 iOpt = 1, \textcolor{keywordtype}{void} *vpTag = NULL );}
-\DoxyCodeLine{337 xbInt16 DumpHeader( xbInt16 iOpt = 0, xbInt16 iFmt = 0 );}
-\DoxyCodeLine{338 xbInt16 DumpIxForTag( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOutputOpt );}
-\DoxyCodeLine{339 \textcolor{keywordtype}{void} DumpIxNodeChain( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOutputOpt ) \textcolor{keyword}{const};}
-\DoxyCodeLine{340 xbInt16 DumpNode( \textcolor{keywordtype}{void} * vpTag, xbIxNode * pNode, xbInt16 iOption ) \textcolor{keyword}{const};}
-\DoxyCodeLine{341 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{342 }
-\DoxyCodeLine{343 \textcolor{keyword}{protected}:}
-\DoxyCodeLine{344 \textcolor{keyword}{friend} \textcolor{keyword}{class }\mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}};}
-\DoxyCodeLine{345 xbInt16 AddKey( \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulRecNo );}
-\DoxyCodeLine{346 xbIxNode *AllocateIxNode( xbUInt32 ulBufSize = 0, xbInt16 iOption = 0 );}
-\DoxyCodeLine{347 xbInt16 CheckForDupKey( \textcolor{keywordtype}{void} *vpTag );}
-\DoxyCodeLine{348 xbIxNode *CreateIxNode( xbUInt32 ulBufSize );}
-\DoxyCodeLine{349 xbInt16 CreateKey( \textcolor{keywordtype}{void} * vpTag, xbInt16 iOpt );}
-\DoxyCodeLine{350 xbInt16 DeleteFromNode( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npNode, xbInt16 iSlotNo );}
-\DoxyCodeLine{351 xbInt16 DeleteKey( \textcolor{keywordtype}{void} *vpTag );}
-\DoxyCodeLine{352 }
-\DoxyCodeLine{353 xbInt16 DeleteTag( \textcolor{keywordtype}{void} *vpTag );}
-\DoxyCodeLine{354 }
-\DoxyCodeLine{355 xbInt16 FindKeyForCurRec( \textcolor{keywordtype}{void} *vpTag );}
-\DoxyCodeLine{356 \textcolor{comment}{// xbBool GetIndexUpdated() const;}}
-\DoxyCodeLine{357 xbInt16 GetKeyTypeN( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
-\DoxyCodeLine{358 xbInt16 GetKeySts( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
-\DoxyCodeLine{359 xbInt16 GetLastKey( xbUInt32 ulNodeNo, \textcolor{keywordtype}{void} *vpTag, xbInt16 iRetrieveSw = 1 );}
-\DoxyCodeLine{360 xbInt16 InsertNodeI( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, xbUInt32 uiPtr );}
-\DoxyCodeLine{361 xbInt16 InsertNodeL( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, \textcolor{keywordtype}{char} * cpKeyBuf, xbUInt32 uiPtr );}
-\DoxyCodeLine{362 xbInt16 KeyExists( \textcolor{keywordtype}{void} *vpTag = NULL );}
-\DoxyCodeLine{363 \textcolor{comment}{// xbBool KeyFiltered( void *vpTag ) const;}}
-\DoxyCodeLine{364 \textcolor{comment}{// xbInt16 KeyUpdated( void *vpTag ) const;}}
-\DoxyCodeLine{365 xbInt16 ReadHeadBlock(xbInt16 iOpt); \textcolor{comment}{// read the header node of the disk NDX file}}
-\DoxyCodeLine{366 xbInt16 SplitNodeI( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 uiPtr );}
-\DoxyCodeLine{367 xbInt16 SplitNodeL( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, \textcolor{keywordtype}{char} *cpKeyBuf, xbUInt32 uiPtr );}
-\DoxyCodeLine{368 xbInt16 UpdateTagKey( \textcolor{keywordtype}{char} cAction, \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulRecNo = 0 );}
-\DoxyCodeLine{369 xbInt16 WriteHeadBlock( xbInt16 iOption );}
-\DoxyCodeLine{370 }
-\DoxyCodeLine{371 \textcolor{keyword}{private}:}
-\DoxyCodeLine{372 xbInt16 AddKeyNewRoot( xbNdxTag *npTag, xbIxNode *npLeft, xbIxNode *npRight );}
-\DoxyCodeLine{373 \textcolor{keywordtype}{void} AppendNodeChain( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode );}
-\DoxyCodeLine{374 xbInt16 GetDbfPtr( \textcolor{keywordtype}{void} *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 \&ulDbfPtr ) \textcolor{keyword}{const};}
-\DoxyCodeLine{375 xbInt16 GetKeyPtr( \textcolor{keywordtype}{void} *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 \&ulKeyPtr ) \textcolor{keyword}{const};}
-\DoxyCodeLine{376 xbInt16 GetLastKeyForBlockNo( \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulBlockNo, \textcolor{keywordtype}{char} *cpKeyBuf );}
-\DoxyCodeLine{377 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsLeaf( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode ) \textcolor{keyword}{const};}
-\DoxyCodeLine{378 xbInt16 KeySetPosAdd( xbNdxTag *npTag, xbUInt32 ulAddKeyRecNo );}
-\DoxyCodeLine{379 xbInt16 KeySetPosDel( xbNdxTag *npTag );}
-\DoxyCodeLine{380 \textcolor{comment}{// void SetCurNode( void *vpTag, xbIxNode *np );}}
-\DoxyCodeLine{381 xbNdxTag *ndxTag;}
-\DoxyCodeLine{382 \};}
-\DoxyCodeLine{383 }
-\DoxyCodeLine{384 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* XB\_NDX\_SUPPORT */}\textcolor{preprocessor}{}}
-\DoxyCodeLine{385 }
-\DoxyCodeLine{386 }
-\DoxyCodeLine{387 \textcolor{preprocessor}{\#ifdef XB\_MDX\_SUPPORT}}
-\DoxyCodeLine{388 \textcolor{comment}{//\#define XB\_MDX\_BLOCK\_SIZE 1024}}
-\DoxyCodeLine{389 }
-\DoxyCodeLine{390 \textcolor{keyword}{struct }XBDLLEXPORT xbMdxTag \{}
-\DoxyCodeLine{391 }
-\DoxyCodeLine{392 \textcolor{comment}{// next 7 fields comprise the tag table entry}}
-\DoxyCodeLine{393 xbUInt32 ulTagHdrPageNo; \textcolor{comment}{// 512 byte page number, NOT block number}}
-\DoxyCodeLine{394 \textcolor{keywordtype}{char} cTagName[11];}
-\DoxyCodeLine{395 \textcolor{keywordtype}{char} cKeyFmt; \textcolor{comment}{// always 0x10 w/ DBase V7}}
-\DoxyCodeLine{396 \textcolor{keywordtype}{char} cLeftChild; \textcolor{comment}{// cFwdTagThread}}
-\DoxyCodeLine{397 \textcolor{keywordtype}{char} cRightChild; \textcolor{comment}{// cFwdTagThread2}}
-\DoxyCodeLine{398 \textcolor{keywordtype}{char} cParent; \textcolor{comment}{// cBwdTagThread}}
-\DoxyCodeLine{399 \textcolor{keywordtype}{char} c2;}
-\DoxyCodeLine{400 \textcolor{keywordtype}{char} cKeyType; \textcolor{comment}{// C,D,N}}
-\DoxyCodeLine{401 }
-\DoxyCodeLine{402 xbUInt32 ulRootPage; \textcolor{comment}{// 512 byte page number, NOT block number}}
-\DoxyCodeLine{403 xbUInt32 ulTagSize; \textcolor{comment}{// Number of 512 byte pages allocated to the tag. Tag size of two is a single 1024 block}}
-\DoxyCodeLine{404 }
-\DoxyCodeLine{405 \textcolor{keywordtype}{char} cKeyFmt2; \textcolor{comment}{// 0x10 -\/ base}}
-\DoxyCodeLine{406 \textcolor{comment}{// 0x08 -\/ descending}}
-\DoxyCodeLine{407 \textcolor{comment}{// 0x40 -\/ unique}}
-\DoxyCodeLine{408 \textcolor{keywordtype}{char} cKeyType2;}
-\DoxyCodeLine{409 \textcolor{comment}{// one unused byte fits here}}
-\DoxyCodeLine{410 }
-\DoxyCodeLine{411 \textcolor{keywordtype}{char} cTag11; \textcolor{comment}{// dbase sets to 0x1B}}
-\DoxyCodeLine{412 }
-\DoxyCodeLine{413 xbInt16 iKeyLen;}
-\DoxyCodeLine{414 xbInt16 iKeysPerBlock;}
-\DoxyCodeLine{415 xbInt16 iSecKeyType;}
-\DoxyCodeLine{416 xbInt16 iKeyItemLen; \textcolor{comment}{// iKeyLen + 4}}
-\DoxyCodeLine{417 }
-\DoxyCodeLine{418 \textcolor{keywordtype}{char} cSerialNo; \textcolor{comment}{// Increments +1 for each tag update}}
-\DoxyCodeLine{419 \textcolor{keywordtype}{char} cUnique;}
-\DoxyCodeLine{420 xbString *sKeyExp; \textcolor{comment}{// Key expression}}
-\DoxyCodeLine{421 }
-\DoxyCodeLine{422 \textcolor{keywordtype}{char} cHasFilter; \textcolor{comment}{// 0x00 or 0x01}}
-\DoxyCodeLine{423 \textcolor{keywordtype}{char} cHasKeys; \textcolor{comment}{// 0x00 or 0x01}}
-\DoxyCodeLine{424 }
-\DoxyCodeLine{425 xbUInt32 ulLeftChild; \textcolor{comment}{// dbase 7 sets this to the root page on tag creation}}
-\DoxyCodeLine{426 xbUInt32 ulRightChild; \textcolor{comment}{// dbase 7 sets this to the root page on tag creation}}
-\DoxyCodeLine{427 }
-\DoxyCodeLine{428 \textcolor{keywordtype}{char} cTagYY;}
-\DoxyCodeLine{429 \textcolor{keywordtype}{char} cTagMM;}
-\DoxyCodeLine{430 \textcolor{keywordtype}{char} cTagDD;}
-\DoxyCodeLine{431 }
-\DoxyCodeLine{432 \textcolor{keywordtype}{char} cKeyFmt3; \textcolor{comment}{// dbase 7 sets this 0x01 if discreet field or 0x00 if calculated or combination field key expression on tag creation}}
-\DoxyCodeLine{433 }
-\DoxyCodeLine{434 xbString *sFiltExp; \textcolor{comment}{// Filter expression}}
-\DoxyCodeLine{435 }
-\DoxyCodeLine{436 time\_t tNodeChainTs;}
-\DoxyCodeLine{437 xbIxNode *npNodeChain;}
-\DoxyCodeLine{438 xbIxNode *npCurNode;}
-\DoxyCodeLine{439 xbExp *exp; \textcolor{comment}{// pointer to expression for expression based tags}}
-\DoxyCodeLine{440 xbExp *filter; \textcolor{comment}{// pointer to expression for index filter}}
-\DoxyCodeLine{441 }
-\DoxyCodeLine{442 \textcolor{keywordtype}{char} *cpKeyBuf; \textcolor{comment}{// key buffer}}
-\DoxyCodeLine{443 \textcolor{keywordtype}{char} *cpKeyBuf2; \textcolor{comment}{// key buffer}}
-\DoxyCodeLine{444 \textcolor{comment}{// xbBool iKeyUpdated; // key updated? set in method CreateKey, checked in AddKey and DeleteKey routines}}
-\DoxyCodeLine{445 \textcolor{comment}{// 0 -\/ no update}}
-\DoxyCodeLine{446 \textcolor{comment}{// 1 -\/ Add}}
-\DoxyCodeLine{447 \textcolor{comment}{// 2 -\/ Update}}
-\DoxyCodeLine{448 \textcolor{comment}{// 3 -\/ Delete}}
-\DoxyCodeLine{449 \textcolor{comment}{// xbBool bKeyFiltered; // key filtered? True if included key, False if excluded key. Set in method CreateKey, checked in AddKey and DeleteKey routines}}
-\DoxyCodeLine{450 xbString *sTagName; \textcolor{comment}{// string tag name}}
-\DoxyCodeLine{451 }
-\DoxyCodeLine{452 }
-\DoxyCodeLine{453 xbMdxTag *next;}
-\DoxyCodeLine{454 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bFoundSts; \textcolor{comment}{// key found? used to determine if new key should be added in XB\_EMULATE\_DBASE mode in AddKey}}
-\DoxyCodeLine{455 }
-\DoxyCodeLine{456 }
-\DoxyCodeLine{457 xbInt16 iKeySts; \textcolor{comment}{// key updated? set in method CreateKey, checked in AddKey and DeleteKey routines}}
-\DoxyCodeLine{458 \textcolor{comment}{// old key filtered new key filtered iKeySts}}
-\DoxyCodeLine{459 \textcolor{comment}{// Y Y XB\_UPD\_KEY 2 -\/ update key if changed (delete and add)}}
-\DoxyCodeLine{460 \textcolor{comment}{// Y N XB\_DEL\_KEY 3 -\/ delete key}}
-\DoxyCodeLine{461 \textcolor{comment}{// N Y XB\_ADD\_KEY 1 -\/ add key}}
-\DoxyCodeLine{462 \textcolor{comment}{// N N 0 -\/ no update}}
-\DoxyCodeLine{463 }
-\DoxyCodeLine{464 }
-\DoxyCodeLine{465 \};}
-\DoxyCodeLine{466 }
-\DoxyCodeLine{467 }
-\DoxyCodeLine{468 \textcolor{keyword}{class }XBDLLEXPORT xbIxMdx : \textcolor{keyword}{public} xbIx \{}
-\DoxyCodeLine{469 \textcolor{keyword}{public}:}
-\DoxyCodeLine{470 xbIxMdx( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} * d );}
-\DoxyCodeLine{471 \string~xbIxMdx();}
-\DoxyCodeLine{472 xbInt16 CheckTagIntegrity( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOpt );}
-\DoxyCodeLine{473 xbInt16 CreateTag( \textcolor{keyword}{const} xbString \&sName, \textcolor{keyword}{const} xbString \&sKey, \textcolor{keyword}{const} xbString \&sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, \textcolor{keywordtype}{void} **vpTag );}
-\DoxyCodeLine{474 \textcolor{comment}{// xbInt16 DeleteTag( void *vpTag );}}
-\DoxyCodeLine{475 xbInt16 FindKey( \textcolor{keywordtype}{void} *vpTag, \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw );}
-\DoxyCodeLine{476 xbInt16 FindKey( \textcolor{keywordtype}{void} *vpTag, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dKey, xbInt16 iRetrieveSw );}
-\DoxyCodeLine{477 xbInt16 GetFirstKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 lRetrieveSw );}
-\DoxyCodeLine{478 xbString \&GetKeyExpression( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
-\DoxyCodeLine{479 xbString \&GetKeyFilter( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
-\DoxyCodeLine{480 \textcolor{keywordtype}{char} GetKeyType( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
-\DoxyCodeLine{481 xbInt16 GetLastKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 lRetrieveSw );}
-\DoxyCodeLine{482 xbInt16 GetNextKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 lRetrieveSw );}
-\DoxyCodeLine{483 xbInt16 GetPrevKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 lRetrieveSw );}
-\DoxyCodeLine{484 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetReuseEmptyNodesSw() \textcolor{keyword}{const};}
-\DoxyCodeLine{485 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetSortOrder( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
-\DoxyCodeLine{486 \textcolor{keywordtype}{void} *GetTag( xbInt16 iTagNo ) \textcolor{keyword}{const};}
-\DoxyCodeLine{487 \textcolor{keywordtype}{void} *GetTag( xbString \&sTagName ) \textcolor{keyword}{const};}
-\DoxyCodeLine{488 xbInt16 GetTagCount() \textcolor{keyword}{const};}
-\DoxyCodeLine{489 }
-\DoxyCodeLine{490 xbString \&GetTagName( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
-\DoxyCodeLine{491 \textcolor{keyword}{const} \textcolor{keywordtype}{char} * GetTagName( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOpt ) \textcolor{keyword}{const};}
-\DoxyCodeLine{492 \textcolor{keywordtype}{void} GetTagName( \textcolor{keywordtype}{void} *vpTag, xbString \&sTagName );}
-\DoxyCodeLine{493 }
-\DoxyCodeLine{494 xbInt16 GetUnique( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
-\DoxyCodeLine{495 xbInt16 Reindex( \textcolor{keywordtype}{void} **vpTag );}
-\DoxyCodeLine{496 xbInt16 SetCurTag( xbInt16 iTagNo );}
-\DoxyCodeLine{497 xbInt16 SetCurTag( xbString \&sTagName );}
-\DoxyCodeLine{498 \textcolor{keywordtype}{void} SetReuseEmptyNodesSw( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bReuse );}
-\DoxyCodeLine{499 }
-\DoxyCodeLine{500 \textcolor{keywordtype}{void} TestStub( \textcolor{keywordtype}{char} *s, \textcolor{keywordtype}{void} *vpTag );}
-\DoxyCodeLine{501 }
-\DoxyCodeLine{502 \textcolor{keyword}{protected}:}
-\DoxyCodeLine{503 \textcolor{keyword}{friend} \textcolor{keyword}{class }\mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}};}
-\DoxyCodeLine{504 }
-\DoxyCodeLine{505 xbInt16 AddKey( \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulRecNo );}
-\DoxyCodeLine{506 xbIxNode *AllocateIxNode( xbMdxTag * mpTag, xbUInt32 ulBufSize, xbUInt32 ulBlock2 );}
-\DoxyCodeLine{507 xbInt16 CheckForDupKey( \textcolor{keywordtype}{void} *vpTag );}
-\DoxyCodeLine{508 xbInt16 Close();}
-\DoxyCodeLine{509 xbInt16 CreateKey( \textcolor{keywordtype}{void} * vpTag, xbInt16 iOpt );}
-\DoxyCodeLine{510 xbInt16 DeleteFromNode( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npNode, xbInt16 iSlotNo );}
-\DoxyCodeLine{511 xbInt16 DeleteKey( \textcolor{keywordtype}{void} *vpTag );}
-\DoxyCodeLine{512 }
-\DoxyCodeLine{513 xbInt16 DeleteTag( \textcolor{keywordtype}{void} *vpTag );}
-\DoxyCodeLine{514 }
-\DoxyCodeLine{515 xbInt16 FindKeyForCurRec( \textcolor{keywordtype}{void} *vpTag );}
-\DoxyCodeLine{516 xbInt16 GetKeySts( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
-\DoxyCodeLine{517 xbInt16 GetLastKey( xbUInt32 ulBlockNo, \textcolor{keywordtype}{void} *vpTag, xbInt16 lRetrieveSw );}
-\DoxyCodeLine{518 \textcolor{keywordtype}{void} *GetTagTblPtr() \textcolor{keyword}{const};}
-\DoxyCodeLine{519 \textcolor{keywordtype}{void} Init( xbInt16 iOpt = 0 );}
-\DoxyCodeLine{520 xbInt16 InsertNodeI( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode, xbInt16 iSlotNo, xbUInt32 uiPtr );}
-\DoxyCodeLine{521 xbInt16 InsertNodeL( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode, xbInt16 iSlotNo, \textcolor{keywordtype}{char} *cpKeyBuf, xbUInt32 uiPtr );}
-\DoxyCodeLine{522 xbInt16 KeyExists( \textcolor{keywordtype}{void} * );}
-\DoxyCodeLine{523 xbInt16 LoadTagTable();}
-\DoxyCodeLine{524 xbInt16 ReadHeadBlock(xbInt16 iOpt); \textcolor{comment}{// read the header node of the disk file}}
-\DoxyCodeLine{525 xbInt16 SplitNodeI( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 uiPtr );}
-\DoxyCodeLine{526 xbInt16 SplitNodeL( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, \textcolor{keywordtype}{char} *cpKeyBuf, xbUInt32 uiPtr );}
-\DoxyCodeLine{527 xbInt16 UpdateTagKey( \textcolor{keywordtype}{char} cAction, \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulRecNo = 0 );}
-\DoxyCodeLine{528 xbInt16 WriteHeadBlock( xbInt16 iOption );}
-\DoxyCodeLine{529 }
-\DoxyCodeLine{530 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
-\DoxyCodeLine{531 xbInt16 DumpTagBlocks( xbInt16 iOpt = 1, \textcolor{keywordtype}{void} *vpTag = NULL );}
-\DoxyCodeLine{532 xbInt16 DumpFreeBlocks( xbInt16 iOpt = 0 );}
-\DoxyCodeLine{533 xbInt16 DumpHeader( xbInt16 iOpt = 0, xbInt16 iFmtOpt = 0 );}
-\DoxyCodeLine{534 xbInt16 DumpIxForTag( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOutputOpt );}
-\DoxyCodeLine{535 \textcolor{keywordtype}{void} DumpIxNodeChain( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOutputOpt ) \textcolor{keyword}{const};}
-\DoxyCodeLine{536 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{537 }
-\DoxyCodeLine{538 \textcolor{keyword}{private}:}
-\DoxyCodeLine{539 xbInt16 AddKeyNewRoot( xbMdxTag *npTag, xbIxNode *npLeft, xbIxNode *npRight );}
-\DoxyCodeLine{540 \textcolor{keywordtype}{void} AppendNodeChain( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode );}
-\DoxyCodeLine{541 xbUInt32 BlockToPage( xbUInt32 ulBlockNo );}
-\DoxyCodeLine{542 \textcolor{keywordtype}{void} CalcBtreePointers();}
-\DoxyCodeLine{543 \textcolor{keywordtype}{char} CalcTagKeyFmt( xbExp \&exp );}
-\DoxyCodeLine{544 \textcolor{keywordtype}{char} CalcTagFwdThread1();}
-\DoxyCodeLine{545 \textcolor{keywordtype}{char} CalcTagFwdThread2();}
-\DoxyCodeLine{546 xbMdxTag *ClearTagTable();}
-\DoxyCodeLine{547 xbInt16 DumpBlock( xbInt16 iOpt, xbUInt32 ulBlockNo, xbMdxTag * mpTag );}
-\DoxyCodeLine{548 xbInt16 GetDbfPtr( \textcolor{keywordtype}{void} *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 \&ulDbfPtr ) \textcolor{keyword}{const};}
-\DoxyCodeLine{549 xbInt16 GetKeyPtr( \textcolor{keywordtype}{void} *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 \&ulKeyPtr ) \textcolor{keyword}{const};}
-\DoxyCodeLine{550 xbInt16 GetLastKeyForBlockNo( \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulBlockNo, \textcolor{keywordtype}{char} *cpKeyBuf );}
-\DoxyCodeLine{551 xbInt16 HarvestEmptyNode( xbMdxTag *mpTag, xbIxNode *npNode, xbInt16 iOpt, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bHarvestRoot = \mbox{\hyperlink{xbtypes_8h_adc4b6ca5ad299f63675136d9e03938cc}{xbFalse}} );}
-\DoxyCodeLine{552 xbInt16 HarvestTagNodes( xbMdxTag *mpTag, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bRecycleRoot = \mbox{\hyperlink{xbtypes_8h_adc4b6ca5ad299f63675136d9e03938cc}{xbFalse}} );}
-\DoxyCodeLine{553 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsLeaf( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode ) \textcolor{keyword}{const};}
-\DoxyCodeLine{554 xbInt16 KeySetPosAdd( xbMdxTag *mpTag, xbUInt32 ulAddKeyRecNo );}
-\DoxyCodeLine{555 xbInt16 KeySetPosDel( xbMdxTag *mpTag );}
-\DoxyCodeLine{556 xbInt16 LoadTagDetail( xbInt16 iOption, xbMdxTag *tte );}
-\DoxyCodeLine{557 xbUInt32 PageToBlock( xbUInt32 ulPageNo );}
-\DoxyCodeLine{558 xbInt16 TagSerialNo( xbInt16 iOption, xbMdxTag *mpTag );}
-\DoxyCodeLine{559 xbInt16 UpdateTagSize( xbMdxTag *mpTag, xbUInt32 ulTagSz );}
-\DoxyCodeLine{560 }
-\DoxyCodeLine{561 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
-\DoxyCodeLine{562 xbInt16 PrintKey( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode, xbInt16 iKeyNo, xbInt16 iDepth, \textcolor{keywordtype}{char} cType, xbInt16 iOutputOpt );}
-\DoxyCodeLine{563 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{564 }
-\DoxyCodeLine{565 \textcolor{comment}{// MDX File Header Fields}}
-\DoxyCodeLine{566 \textcolor{keywordtype}{char} cVersion;}
-\DoxyCodeLine{567 \textcolor{keywordtype}{char} cCreateYY;}
-\DoxyCodeLine{568 \textcolor{keywordtype}{char} cCreateMM;}
-\DoxyCodeLine{569 \textcolor{keywordtype}{char} cCreateDD;}
-\DoxyCodeLine{570 xbString sFileName;}
-\DoxyCodeLine{571 xbInt16 iBlockFactor; \textcolor{comment}{// 1-\/32 \#of 512 byte segments in a block}}
-\DoxyCodeLine{572 }
-\DoxyCodeLine{573 \textcolor{comment}{// use file version}}
-\DoxyCodeLine{574 \textcolor{comment}{// xbInt16 iBlockSize; // Stored at the xbFile level}}
-\DoxyCodeLine{575 }
-\DoxyCodeLine{576 \textcolor{keywordtype}{char} cProdIxFlag;}
-\DoxyCodeLine{577 \textcolor{keywordtype}{char} cTagEntryCnt;}
-\DoxyCodeLine{578 xbInt16 iTagLen;}
-\DoxyCodeLine{579 xbInt16 iTagUseCnt;}
-\DoxyCodeLine{580 \textcolor{keywordtype}{char} cNextTag; \textcolor{comment}{// byte 28 +1}}
-\DoxyCodeLine{581 \textcolor{keywordtype}{char} c1B; \textcolor{comment}{// always 0x1B}}
-\DoxyCodeLine{582 xbUInt32 ulPageCnt; \textcolor{comment}{// number of 512 byte pages in the mdx file}}
-\DoxyCodeLine{583 xbUInt32 ulFirstFreePage; \textcolor{comment}{// page number corresponding to the next free block}}
-\DoxyCodeLine{584 xbUInt32 ulNoOfBlockAvail; \textcolor{comment}{// might be improperly named?? not sure how it is used}}
-\DoxyCodeLine{585 \textcolor{keywordtype}{char} cUpdateYY;}
-\DoxyCodeLine{586 \textcolor{keywordtype}{char} cUpdateMM;}
-\DoxyCodeLine{587 \textcolor{keywordtype}{char} cUpdateDD;}
-\DoxyCodeLine{588 \textcolor{comment}{// end of MDX Header fields}}
-\DoxyCodeLine{589 }
-\DoxyCodeLine{590 }
-\DoxyCodeLine{591 }
-\DoxyCodeLine{592 xbMdxTag *mdxTagTbl;}
-\DoxyCodeLine{593 }
-\DoxyCodeLine{594 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bReuseEmptyNodes; \textcolor{comment}{// Reuese empty MDX nodes when all keys deleted?}}
-\DoxyCodeLine{595 \textcolor{comment}{// DBase 7.x and MS ODBC drivers do not reuse empty nodes, leaves them stranded in the file}}
-\DoxyCodeLine{596 \textcolor{comment}{// Codebase 6.x reuses empty nodes.}}
-\DoxyCodeLine{597 \textcolor{comment}{// Setting this to True will reuse empty nodes in the same manner Codebase 6.x reuses them.}}
-\DoxyCodeLine{598 }
-\DoxyCodeLine{599 \};}
-\DoxyCodeLine{600 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* XB\_MDX\_SUPPORT */}\textcolor{preprocessor}{}}
-\DoxyCodeLine{601 }
-\DoxyCodeLine{602 }
-\DoxyCodeLine{603 \} \textcolor{comment}{/* namespace xb */}}
-\DoxyCodeLine{604 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* XB\_INDEX\_SUPPORT */}\textcolor{preprocessor}{}}
-\DoxyCodeLine{605 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_INDEX\_H\_\_ */}\textcolor{preprocessor}{}}
-
-\end{DoxyCode}
diff --git a/docs/doxygen/latex/xbinsert_8cpp.tex b/docs/doxygen/latex/xbinsert_8cpp.tex
deleted file mode 100644
index 9f7c740..0000000
--- a/docs/doxygen/latex/xbinsert_8cpp.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-\hypertarget{xbinsert_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/sql/xbinsert.cpp File Reference}
-\label{xbinsert_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbinsert.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbinsert.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbixbase_8cpp.tex b/docs/doxygen/latex/xbixbase_8cpp.tex
deleted file mode 100644
index da7e909..0000000
--- a/docs/doxygen/latex/xbixbase_8cpp.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-\hypertarget{xbixbase_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/core/xbixbase.cpp File Reference}
-\label{xbixbase_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbixbase.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbixbase.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbixmdx_8cpp.tex b/docs/doxygen/latex/xbixmdx_8cpp.tex
deleted file mode 100644
index ecab55f..0000000
--- a/docs/doxygen/latex/xbixmdx_8cpp.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-\hypertarget{xbixmdx_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/core/xbixmdx.cpp File Reference}
-\label{xbixmdx_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbixmdx.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbixmdx.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbixndx_8cpp.tex b/docs/doxygen/latex/xbixndx_8cpp.tex
deleted file mode 100644
index c25c6b6..0000000
--- a/docs/doxygen/latex/xbixndx_8cpp.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-\hypertarget{xbixndx_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/core/xbixndx.cpp File Reference}
-\label{xbixndx_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbixndx.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbixndx.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xblnklst_8h.tex b/docs/doxygen/latex/xblnklst_8h.tex
deleted file mode 100644
index 6ae38d4..0000000
--- a/docs/doxygen/latex/xblnklst_8h.tex
+++ /dev/null
@@ -1,2 +0,0 @@
-\hypertarget{xblnklst_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/include/xblnklst.h File Reference}
-\label{xblnklst_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xblnklst.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xblnklst.h}}
diff --git a/docs/doxygen/latex/xblnklst_8h_source.tex b/docs/doxygen/latex/xblnklst_8h_source.tex
deleted file mode 100644
index 536e0ab..0000000
--- a/docs/doxygen/latex/xblnklst_8h_source.tex
+++ /dev/null
@@ -1,263 +0,0 @@
-\hypertarget{xblnklst_8h_source}{}\doxysection{xblnklst.\+h}
-\label{xblnklst_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xblnklst.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xblnklst.h}}
-\mbox{\hyperlink{xblnklst_8h}{Go to the documentation of this file.}}
-\begin{DoxyCode}{0}
-\DoxyCodeLine{1 \textcolor{comment}{/* xblnklst.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\_XBLNKLST\_H\_\_}}
-\DoxyCodeLine{18 \textcolor{preprocessor}{\#define \_\_XB\_XBLNKLST\_H\_\_}}
-\DoxyCodeLine{19 }
-\DoxyCodeLine{20 \textcolor{preprocessor}{\#ifdef XB\_LINKLIST\_SUPPORT}}
-\DoxyCodeLine{21 }
-\DoxyCodeLine{22 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
-\DoxyCodeLine{23 }
-\DoxyCodeLine{24 }
-\DoxyCodeLine{25 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{26 \textcolor{keyword}{class }XBDLLEXPORT xbLinkList \{}
-\DoxyCodeLine{27 \textcolor{keyword}{public}:}
-\DoxyCodeLine{28 xbLinkList();}
-\DoxyCodeLine{29 \string~xbLinkList();}
-\DoxyCodeLine{30 }
-\DoxyCodeLine{31 xbLinkListNode<xbNodeType> *GetHeadNode() \textcolor{keyword}{const};}
-\DoxyCodeLine{32 xbLinkListNode<xbNodeType> *GetEndNode() \textcolor{keyword}{const};}
-\DoxyCodeLine{33 xbLinkListNode<xbNodeType> *GetNodeForNo( xbUInt32 ulNodeNo ) \textcolor{keyword}{const};}
-\DoxyCodeLine{34 }
-\DoxyCodeLine{35 \textcolor{keywordtype}{void} Clear();}
-\DoxyCodeLine{36 xbUInt32 GetNodeCnt () \textcolor{keyword}{const};}
-\DoxyCodeLine{37 xbInt16 InsertAtEnd ( \textcolor{keyword}{const} xbNodeType \&xbLLN );}
-\DoxyCodeLine{38 xbInt16 InsertAtFront ( \textcolor{keyword}{const} xbNodeType \&xbLLN );}
-\DoxyCodeLine{39 xbInt16 RemoveByVal ( \textcolor{keyword}{const} xbNodeType \&xbLLN );}
-\DoxyCodeLine{40 xbInt16 RemoveFromEnd ();}
-\DoxyCodeLine{41 xbInt16 RemoveFromEnd ( xbNodeType \&xbLLN );}
-\DoxyCodeLine{42 xbInt16 RemoveFromFront( xbNodeType \&xbLLN );}
-\DoxyCodeLine{43 xbInt16 SearchFor ( \textcolor{keyword}{const} xbNodeType \&xbLLN );}
-\DoxyCodeLine{44 }
-\DoxyCodeLine{45 \textcolor{keyword}{private}:}
-\DoxyCodeLine{46 xbUInt32 ulNodeCnt;}
-\DoxyCodeLine{47 xbLinkListNode<xbNodeType> *llStartPtr;}
-\DoxyCodeLine{48 xbLinkListNode<xbNodeType> *llEndPtr;}
-\DoxyCodeLine{49 \};}
-\DoxyCodeLine{50 }
-\DoxyCodeLine{51 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{52 xbLinkList<xbNodeType>::xbLinkList()\{}
-\DoxyCodeLine{53 ulNodeCnt = 0;}
-\DoxyCodeLine{54 llStartPtr = NULL;}
-\DoxyCodeLine{55 llEndPtr = NULL;}
-\DoxyCodeLine{56 \}}
-\DoxyCodeLine{57 }
-\DoxyCodeLine{58 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{59 xbLinkList<xbNodeType>::\string~xbLinkList()\{}
-\DoxyCodeLine{60 Clear();}
-\DoxyCodeLine{61 \}}
-\DoxyCodeLine{62 }
-\DoxyCodeLine{63 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{64 \textcolor{keywordtype}{void} xbLinkList<xbNodeType>::Clear()\{}
-\DoxyCodeLine{65 xbLinkListNode<xbNodeType> *cPtr = llStartPtr, *tPtr;}
-\DoxyCodeLine{66 \textcolor{keywordflow}{for}( xbUInt32 i = 0; i < ulNodeCnt; i++ )\{}
-\DoxyCodeLine{67 tPtr = cPtr;}
-\DoxyCodeLine{68 cPtr = cPtr-\/>GetNextNode();}
-\DoxyCodeLine{69 \textcolor{keyword}{delete} tPtr;}
-\DoxyCodeLine{70 \}}
-\DoxyCodeLine{71 ulNodeCnt = 0;}
-\DoxyCodeLine{72 llStartPtr = NULL;}
-\DoxyCodeLine{73 llEndPtr = NULL;}
-\DoxyCodeLine{74 \}}
-\DoxyCodeLine{75 }
-\DoxyCodeLine{76 }
-\DoxyCodeLine{77 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{78 xbLinkListNode<xbNodeType> *xbLinkList<xbNodeType>::GetHeadNode()\textcolor{keyword}{ const}\{}
-\DoxyCodeLine{79 \textcolor{keywordflow}{return} llStartPtr;}
-\DoxyCodeLine{80 \}}
-\DoxyCodeLine{81 }
-\DoxyCodeLine{82 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{83 xbLinkListNode<xbNodeType> *xbLinkList<xbNodeType>::GetEndNode()\textcolor{keyword}{ const}\{}
-\DoxyCodeLine{84 \textcolor{keywordflow}{return} llEndPtr;}
-\DoxyCodeLine{85 \}}
-\DoxyCodeLine{86 }
-\DoxyCodeLine{87 }
-\DoxyCodeLine{88 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{89 xbLinkListNode<xbNodeType> *xbLinkList<xbNodeType>::GetNodeForNo( xbUInt32 ulNo )\textcolor{keyword}{ const}\{}
-\DoxyCodeLine{90 }
-\DoxyCodeLine{91 xbLinkListNode<xbNodeType> *cPtr = llStartPtr;}
-\DoxyCodeLine{92 xbUInt32 i;}
-\DoxyCodeLine{93 \textcolor{keywordflow}{for}( i = 0; i < ulNo \&\& i < ulNodeCnt; i++ )}
-\DoxyCodeLine{94 cPtr = cPtr-\/>GetNextNode();}
-\DoxyCodeLine{95 }
-\DoxyCodeLine{96 \textcolor{keywordflow}{if}( i == ulNo )}
-\DoxyCodeLine{97 \textcolor{keywordflow}{return} cPtr;}
-\DoxyCodeLine{98 \textcolor{keywordflow}{else} }
-\DoxyCodeLine{99 \textcolor{keywordflow}{return} 0;}
-\DoxyCodeLine{100 \}}
-\DoxyCodeLine{101 }
-\DoxyCodeLine{102 }
-\DoxyCodeLine{103 }
-\DoxyCodeLine{104 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{105 xbUInt32 xbLinkList<xbNodeType>::GetNodeCnt()\textcolor{keyword}{ const}\{}
-\DoxyCodeLine{106 \textcolor{keywordflow}{return} ulNodeCnt;}
-\DoxyCodeLine{107 \}}
-\DoxyCodeLine{108 }
-\DoxyCodeLine{109 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{110 xbInt16 xbLinkList<xbNodeType>::InsertAtFront( \textcolor{keyword}{const} xbNodeType \& ntKey )\{}
-\DoxyCodeLine{111 }
-\DoxyCodeLine{112 xbLinkListNode<xbNodeType> *p = \textcolor{keyword}{new} xbLinkListNode<xbNodeType>( ntKey );}
-\DoxyCodeLine{113 \textcolor{keywordflow}{if}( p == 0 )}
-\DoxyCodeLine{114 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ae687fc7d872ba0475a8477e4447f9b54}{XB\_NO\_MEMORY}};}
-\DoxyCodeLine{115 }
-\DoxyCodeLine{116 \textcolor{keywordflow}{if}( ulNodeCnt > 0 )\{}
-\DoxyCodeLine{117 llStartPtr-\/>SetPrevNode( p );}
-\DoxyCodeLine{118 p-\/>SetNextNode( llStartPtr );}
-\DoxyCodeLine{119 \} \textcolor{keywordflow}{else} \{}
-\DoxyCodeLine{120 llEndPtr = p;}
-\DoxyCodeLine{121 \}}
-\DoxyCodeLine{122 }
-\DoxyCodeLine{123 llStartPtr = p;}
-\DoxyCodeLine{124 ulNodeCnt++;}
-\DoxyCodeLine{125 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}{XB\_NO\_ERROR}};}
-\DoxyCodeLine{126 \}}
-\DoxyCodeLine{127 }
-\DoxyCodeLine{128 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{129 xbInt16 xbLinkList<xbNodeType>::InsertAtEnd( \textcolor{keyword}{const} xbNodeType \& ntKey )\{}
-\DoxyCodeLine{130 }
-\DoxyCodeLine{131 xbLinkListNode<xbNodeType> *p = \textcolor{keyword}{new} xbLinkListNode<xbNodeType>( ntKey );}
-\DoxyCodeLine{132 \textcolor{keywordflow}{if}( p == 0 )}
-\DoxyCodeLine{133 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ae687fc7d872ba0475a8477e4447f9b54}{XB\_NO\_MEMORY}};}
-\DoxyCodeLine{134 }
-\DoxyCodeLine{135 \textcolor{keywordflow}{if}( ulNodeCnt > 0 )\{}
-\DoxyCodeLine{136 llEndPtr-\/>SetNextNode( p );}
-\DoxyCodeLine{137 p-\/>SetPrevNode( llEndPtr );}
-\DoxyCodeLine{138 llEndPtr = p;}
-\DoxyCodeLine{139 \} \textcolor{keywordflow}{else} \{}
-\DoxyCodeLine{140 llStartPtr = p;}
-\DoxyCodeLine{141 \}}
-\DoxyCodeLine{142 }
-\DoxyCodeLine{143 llEndPtr = p;}
-\DoxyCodeLine{144 ulNodeCnt++;}
-\DoxyCodeLine{145 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}{XB\_NO\_ERROR}};}
-\DoxyCodeLine{146 \}}
-\DoxyCodeLine{147 }
-\DoxyCodeLine{148 }
-\DoxyCodeLine{149 }
-\DoxyCodeLine{150 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{151 xbInt16 xbLinkList<xbNodeType>::RemoveByVal( \textcolor{keyword}{const} xbNodeType \& ntKey )\{}
-\DoxyCodeLine{152 \textcolor{comment}{// Remove the first instance of ntKey from the node chain}}
-\DoxyCodeLine{153 xbLinkListNode<xbNodeType> *currPtr = llStartPtr;}
-\DoxyCodeLine{154 xbLinkListNode<xbNodeType> *prevPtr = NULL;}
-\DoxyCodeLine{155 }
-\DoxyCodeLine{156 \textcolor{keywordflow}{for}( xbUInt32 i = 0; i < ulNodeCnt; i++ )\{}
-\DoxyCodeLine{157 \textcolor{keywordflow}{if}( currPtr-\/>GetKey() == ntKey )\{}
-\DoxyCodeLine{158 \textcolor{keywordflow}{if}( prevPtr == NULL )\{ \textcolor{comment}{//then this is the first node}}
-\DoxyCodeLine{159 llStartPtr = currPtr-\/>GetNextNode();}
-\DoxyCodeLine{160 \textcolor{keywordflow}{if}( llStartPtr ) \textcolor{comment}{// if more than one link in the linked list}}
-\DoxyCodeLine{161 llStartPtr-\/>SetPrevNode( NULL );}
-\DoxyCodeLine{162 \textcolor{keyword}{delete} currPtr;}
-\DoxyCodeLine{163 ulNodeCnt-\/-\/;}
-\DoxyCodeLine{164 \textcolor{keywordflow}{return} i + 1;}
-\DoxyCodeLine{165 \}}
-\DoxyCodeLine{166 \textcolor{keywordflow}{else} \{}
-\DoxyCodeLine{167 prevPtr-\/>SetNextNode( currPtr-\/>GetNextNode());}
-\DoxyCodeLine{168 \textcolor{keywordflow}{if}( currPtr-\/>GetNextNode())}
-\DoxyCodeLine{169 currPtr-\/>GetNextNode()-\/>SetPrevNode( prevPtr );}
-\DoxyCodeLine{170 \textcolor{keyword}{delete} currPtr;}
-\DoxyCodeLine{171 ulNodeCnt-\/-\/;}
-\DoxyCodeLine{172 \textcolor{keywordflow}{return} i + 1;}
-\DoxyCodeLine{173 \}}
-\DoxyCodeLine{174 \}}
-\DoxyCodeLine{175 prevPtr = currPtr;}
-\DoxyCodeLine{176 currPtr = currPtr-\/>GetNextNode();}
-\DoxyCodeLine{177 \}}
-\DoxyCodeLine{178 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac2606659a54111334f5b02861e533700}{XB\_NOT\_FOUND}};}
-\DoxyCodeLine{179 \}}
-\DoxyCodeLine{180 }
-\DoxyCodeLine{181 }
-\DoxyCodeLine{182 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{183 xbInt16 xbLinkList<xbNodeType>::RemoveFromFront( xbNodeType \& ntKey )\{}
-\DoxyCodeLine{184 }
-\DoxyCodeLine{185 \textcolor{keywordflow}{if}( ulNodeCnt <= 0 )}
-\DoxyCodeLine{186 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_a13e6876470bd34c8c4e5533f115e04eb}{XB\_INVALID\_NODELINK}};}
-\DoxyCodeLine{187 xbLinkListNode<xbNodeType> *p = llStartPtr;}
-\DoxyCodeLine{188 llStartPtr = p-\/>GetNextNode();}
-\DoxyCodeLine{189 \textcolor{keywordflow}{if}( llStartPtr )}
-\DoxyCodeLine{190 llStartPtr-\/>SetPrevNode( NULL );}
-\DoxyCodeLine{191 ntKey = p-\/>GetKey();}
-\DoxyCodeLine{192 \textcolor{keyword}{delete} p;}
-\DoxyCodeLine{193 ulNodeCnt-\/-\/;}
-\DoxyCodeLine{194 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}{XB\_NO\_ERROR}};}
-\DoxyCodeLine{195 \}}
-\DoxyCodeLine{196 }
-\DoxyCodeLine{197 }
-\DoxyCodeLine{198 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{199 xbInt16 xbLinkList<xbNodeType>::RemoveFromEnd( xbNodeType \& ntKey )\{}
-\DoxyCodeLine{200 }
-\DoxyCodeLine{201 \textcolor{keywordflow}{if}( ulNodeCnt <= 0 )}
-\DoxyCodeLine{202 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_a13e6876470bd34c8c4e5533f115e04eb}{XB\_INVALID\_NODELINK}};}
-\DoxyCodeLine{203 xbLinkListNode<xbNodeType> *p = llEndPtr;}
-\DoxyCodeLine{204 \textcolor{keywordflow}{if}( p-\/>GetPrevNode())\{}
-\DoxyCodeLine{205 llEndPtr = p-\/>GetPrevNode();}
-\DoxyCodeLine{206 llEndPtr-\/>SetNextNode( NULL );}
-\DoxyCodeLine{207 \} \textcolor{keywordflow}{else} \{}
-\DoxyCodeLine{208 \textcolor{comment}{// there are no more nodes}}
-\DoxyCodeLine{209 llStartPtr = NULL;}
-\DoxyCodeLine{210 llEndPtr = NULL;}
-\DoxyCodeLine{211 \}}
-\DoxyCodeLine{212 ntKey = p-\/>GetKey();}
-\DoxyCodeLine{213 \textcolor{keyword}{delete} p;}
-\DoxyCodeLine{214 ulNodeCnt-\/-\/;}
-\DoxyCodeLine{215 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}{XB\_NO\_ERROR}};}
-\DoxyCodeLine{216 \}}
-\DoxyCodeLine{217 }
-\DoxyCodeLine{218 }
-\DoxyCodeLine{219 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{220 xbInt16 xbLinkList<xbNodeType>::RemoveFromEnd()\{}
-\DoxyCodeLine{221 }
-\DoxyCodeLine{222 \textcolor{keywordflow}{if}( ulNodeCnt <= 0 )}
-\DoxyCodeLine{223 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_a13e6876470bd34c8c4e5533f115e04eb}{XB\_INVALID\_NODELINK}};}
-\DoxyCodeLine{224 xbLinkListNode<xbNodeType> *p = llEndPtr;}
-\DoxyCodeLine{225 \textcolor{keywordflow}{if}( p-\/>GetPrevNode())\{}
-\DoxyCodeLine{226 llEndPtr = p-\/>GetPrevNode();}
-\DoxyCodeLine{227 llEndPtr-\/>SetNextNode( NULL );}
-\DoxyCodeLine{228 \} \textcolor{keywordflow}{else} \{}
-\DoxyCodeLine{229 \textcolor{comment}{// there are no more nodes}}
-\DoxyCodeLine{230 llStartPtr = NULL;}
-\DoxyCodeLine{231 llEndPtr = NULL;}
-\DoxyCodeLine{232 \}}
-\DoxyCodeLine{233 \textcolor{keyword}{delete} p-\/>GetKey();}
-\DoxyCodeLine{234 \textcolor{keyword}{delete} p;}
-\DoxyCodeLine{235 ulNodeCnt-\/-\/;}
-\DoxyCodeLine{236 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}{XB\_NO\_ERROR}};}
-\DoxyCodeLine{237 \}}
-\DoxyCodeLine{238 }
-\DoxyCodeLine{239 }
-\DoxyCodeLine{240 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{241 xbInt16 xbLinkList<xbNodeType>::SearchFor( \textcolor{keyword}{const} xbNodeType \& ntKey )\{}
-\DoxyCodeLine{242 }
-\DoxyCodeLine{243 xbLinkListNode<xbNodeType> *cPtr = llStartPtr;}
-\DoxyCodeLine{244 \textcolor{keywordflow}{for}( xbUInt32 i = 0; i < ulNodeCnt; i++ )\{}
-\DoxyCodeLine{245 \textcolor{keywordflow}{if}( cPtr-\/>GetKey() == ntKey )}
-\DoxyCodeLine{246 \textcolor{keywordflow}{return} i+1;}
-\DoxyCodeLine{247 cPtr = cPtr-\/>GetNextNode();}
-\DoxyCodeLine{248 \}}
-\DoxyCodeLine{249 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}{XB\_NO\_ERROR}};}
-\DoxyCodeLine{250 }
-\DoxyCodeLine{251 \}}
-\DoxyCodeLine{252 \} \textcolor{comment}{// namespace}}
-\DoxyCodeLine{253 }
-\DoxyCodeLine{254 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_LINKLIST\_SUPPORT}}
-\DoxyCodeLine{255 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_XBLNKLST\_H\_\_}}
-\DoxyCodeLine{256 }
-\DoxyCodeLine{257 }
-
-\end{DoxyCode}
diff --git a/docs/doxygen/latex/xblnklstord_8h.tex b/docs/doxygen/latex/xblnklstord_8h.tex
deleted file mode 100644
index 6facabb..0000000
--- a/docs/doxygen/latex/xblnklstord_8h.tex
+++ /dev/null
@@ -1,2 +0,0 @@
-\hypertarget{xblnklstord_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/include/xblnklstord.h File Reference}
-\label{xblnklstord_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xblnklstord.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xblnklstord.h}}
diff --git a/docs/doxygen/latex/xblnklstord_8h_source.tex b/docs/doxygen/latex/xblnklstord_8h_source.tex
deleted file mode 100644
index a94bd82..0000000
--- a/docs/doxygen/latex/xblnklstord_8h_source.tex
+++ /dev/null
@@ -1,373 +0,0 @@
-\hypertarget{xblnklstord_8h_source}{}\doxysection{xblnklstord.\+h}
-\label{xblnklstord_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xblnklstord.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xblnklstord.h}}
-\mbox{\hyperlink{xblnklstord_8h}{Go to the documentation of this file.}}
-\begin{DoxyCode}{0}
-\DoxyCodeLine{1 \textcolor{comment}{/* xblnklstord.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,2019,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{comment}{// Ordered link list}}
-\DoxyCodeLine{18 }
-\DoxyCodeLine{19 }
-\DoxyCodeLine{20 }
-\DoxyCodeLine{21 \textcolor{preprocessor}{\#ifndef \_\_XB\_XBLNKLSTORD\_H\_\_}}
-\DoxyCodeLine{22 \textcolor{preprocessor}{\#define \_\_XB\_XBLNKLSTORD\_H\_\_}}
-\DoxyCodeLine{23 }
-\DoxyCodeLine{24 \textcolor{preprocessor}{\#ifdef XB\_LINKLIST\_SUPPORT}}
-\DoxyCodeLine{25 }
-\DoxyCodeLine{26 }
-\DoxyCodeLine{27 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
-\DoxyCodeLine{28 }
-\DoxyCodeLine{29 }
-\DoxyCodeLine{30 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{31 \textcolor{keyword}{class }XBDLLEXPORT xbLinkListOrd \{}
-\DoxyCodeLine{32 \textcolor{keyword}{public}:}
-\DoxyCodeLine{33 xbLinkListOrd();}
-\DoxyCodeLine{34 \string~xbLinkListOrd();}
-\DoxyCodeLine{35 }
-\DoxyCodeLine{36 \textcolor{keywordtype}{void} Clear();}
-\DoxyCodeLine{37 xbLinkListNode<xbNodeType> *GetHeadNode() \textcolor{keyword}{const};}
-\DoxyCodeLine{38 xbLinkListNode<xbNodeType> *GetEndNode() \textcolor{keyword}{const};}
-\DoxyCodeLine{39 xbLinkListNode<xbNodeType> *GetNodeForKey( \textcolor{keyword}{const} xbString \&sKey ) \textcolor{keyword}{const};}
-\DoxyCodeLine{40 }
-\DoxyCodeLine{41 xbInt16 GetDataForKey ( \textcolor{keyword}{const} xbNodeType \&ntKey, xbString \&sData );}
-\DoxyCodeLine{42 }
-\DoxyCodeLine{43 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetDupKeys ();}
-\DoxyCodeLine{44 }
-\DoxyCodeLine{45 xbUInt32 GetNodeCnt () \textcolor{keyword}{const};}
-\DoxyCodeLine{46 xbUInt32 GetNodeCnt ( \textcolor{keyword}{const} xbString \&sNodeKey ) \textcolor{keyword}{const};}
-\DoxyCodeLine{47 xbInt16 InsertKey ( \textcolor{keyword}{const} xbNodeType \&ntKey );}
-\DoxyCodeLine{48 xbInt16 InsertKey ( \textcolor{keyword}{const} xbNodeType \&ntKey, \textcolor{keyword}{const} xbString \&sData );}
-\DoxyCodeLine{49 xbInt16 InsertKey ( \textcolor{keyword}{const} xbNodeType \&ntKey, xbUInt32 ulData );}
-\DoxyCodeLine{50 }
-\DoxyCodeLine{51 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} KeyExists ( \textcolor{keyword}{const} xbNodeType \&ntKey ) \textcolor{keyword}{const};}
-\DoxyCodeLine{52 xbInt16 RemoveKey ( \textcolor{keyword}{const} xbNodeType \&ntKey );}
-\DoxyCodeLine{53 xbInt16 RemoveFromEnd ( xbNodeType \&ntKey );}
-\DoxyCodeLine{54 xbInt16 RemoveFromFront( xbNodeType \&ntKey );}
-\DoxyCodeLine{55 xbInt16 RemoveFromFront();}
-\DoxyCodeLine{56 \textcolor{keywordtype}{void} SetDupKeys ( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bAllowDupKeys );}
-\DoxyCodeLine{57 xbInt16 UpdateForKey ( \textcolor{keyword}{const} xbNodeType \&ntKey, \textcolor{keyword}{const} xbString \&sData );}
-\DoxyCodeLine{58 }
-\DoxyCodeLine{59 }
-\DoxyCodeLine{60 \textcolor{keyword}{private}:}
-\DoxyCodeLine{61 xbUInt32 ulNodeCnt;}
-\DoxyCodeLine{62 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bAllowDupKeys;}
-\DoxyCodeLine{63 xbLinkListNode<xbNodeType> *llStartPtr;}
-\DoxyCodeLine{64 xbLinkListNode<xbNodeType> *llEndPtr;}
-\DoxyCodeLine{65 }
-\DoxyCodeLine{66 \};}
-\DoxyCodeLine{67 }
-\DoxyCodeLine{68 }
-\DoxyCodeLine{69 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{70 xbLinkListOrd<xbNodeType>::xbLinkListOrd()\{}
-\DoxyCodeLine{71 bAllowDupKeys = \mbox{\hyperlink{xbtypes_8h_ab0ae00665298fe7f5292691cb98ec2d9}{xbTrue}}; \textcolor{comment}{// default setting -\/ allow duplicate keys}}
-\DoxyCodeLine{72 ulNodeCnt = 0;}
-\DoxyCodeLine{73 llStartPtr = NULL;}
-\DoxyCodeLine{74 llEndPtr = NULL;}
-\DoxyCodeLine{75 \}}
-\DoxyCodeLine{76 }
-\DoxyCodeLine{77 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{78 xbLinkListOrd<xbNodeType>::\string~xbLinkListOrd()\{}
-\DoxyCodeLine{79 Clear();}
-\DoxyCodeLine{80 \}}
-\DoxyCodeLine{81 }
-\DoxyCodeLine{82 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{83 \textcolor{keywordtype}{void} xbLinkListOrd<xbNodeType>::Clear()\{}
-\DoxyCodeLine{84 xbLinkListNode<xbNodeType> *cPtr = llStartPtr, *tPtr;}
-\DoxyCodeLine{85 \textcolor{keywordflow}{for}( xbUInt32 i = 0; i < ulNodeCnt; i++ )\{}
-\DoxyCodeLine{86 tPtr = cPtr;}
-\DoxyCodeLine{87 cPtr = cPtr-\/>GetNextNode();}
-\DoxyCodeLine{88 }
-\DoxyCodeLine{89 \textcolor{comment}{// next line might cause seg faults}}
-\DoxyCodeLine{90 \textcolor{comment}{// delete tPtr-\/>GetData();}}
-\DoxyCodeLine{91 }
-\DoxyCodeLine{92 \textcolor{keyword}{delete} tPtr;}
-\DoxyCodeLine{93 \}}
-\DoxyCodeLine{94 ulNodeCnt = 0;}
-\DoxyCodeLine{95 llStartPtr = NULL;}
-\DoxyCodeLine{96 llEndPtr = NULL;}
-\DoxyCodeLine{97 \}}
-\DoxyCodeLine{98 }
-\DoxyCodeLine{99 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{100 xbLinkListNode<xbNodeType> * xbLinkListOrd<xbNodeType>::GetHeadNode()\textcolor{keyword}{ const}\{}
-\DoxyCodeLine{101 \textcolor{keywordflow}{return} llStartPtr;}
-\DoxyCodeLine{102 \}}
-\DoxyCodeLine{103 }
-\DoxyCodeLine{104 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{105 xbLinkListNode<xbNodeType> * xbLinkListOrd<xbNodeType>::GetEndNode()\textcolor{keyword}{ const}\{}
-\DoxyCodeLine{106 \textcolor{keywordflow}{return} llEndPtr;}
-\DoxyCodeLine{107 \}}
-\DoxyCodeLine{108 }
-\DoxyCodeLine{109 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{110 xbUInt32 xbLinkListOrd<xbNodeType>::GetNodeCnt()\textcolor{keyword}{ const}\{}
-\DoxyCodeLine{111 \textcolor{keywordflow}{return} ulNodeCnt;}
-\DoxyCodeLine{112 \}}
-\DoxyCodeLine{113 }
-\DoxyCodeLine{114 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{115 xbUInt32 xbLinkListOrd<xbNodeType>::GetNodeCnt( \textcolor{keyword}{const} xbString \&sNodeKey )\textcolor{keyword}{ const}\{}
-\DoxyCodeLine{116 }
-\DoxyCodeLine{117 \textcolor{comment}{// won't work if nodekey is not a string}}
-\DoxyCodeLine{118 xbLinkListNode<xbNodeType> *currPtr = llStartPtr;}
-\DoxyCodeLine{119 \textcolor{comment}{// skip to sNodeKey}}
-\DoxyCodeLine{120 \textcolor{keywordflow}{while}( currPtr \&\& ( sNodeKey > currPtr-\/>GetKey())) \{}
-\DoxyCodeLine{121 currPtr = currPtr-\/>GetNextNode();}
-\DoxyCodeLine{122 \}}
-\DoxyCodeLine{123 \textcolor{comment}{// count entries for sNodeKey}}
-\DoxyCodeLine{124 xbInt16 iKeyCnt = 0;}
-\DoxyCodeLine{125 \textcolor{keywordflow}{while}( currPtr \&\& ( sNodeKey == currPtr-\/>GetKey())) \{}
-\DoxyCodeLine{126 iKeyCnt++;}
-\DoxyCodeLine{127 currPtr = currPtr-\/>GetNextNode();}
-\DoxyCodeLine{128 \}}
-\DoxyCodeLine{129 \textcolor{keywordflow}{return} iKeyCnt;}
-\DoxyCodeLine{130 \}}
-\DoxyCodeLine{131 }
-\DoxyCodeLine{132 }
-\DoxyCodeLine{133 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{134 xbInt16 xbLinkListOrd<xbNodeType>::InsertKey( \textcolor{keyword}{const} xbNodeType \&ntKey )\{}
-\DoxyCodeLine{135 xbString s;}
-\DoxyCodeLine{136 \textcolor{keywordflow}{return} InsertKey( ntKey, s );}
-\DoxyCodeLine{137 \}}
-\DoxyCodeLine{138 }
-\DoxyCodeLine{139 }
-\DoxyCodeLine{140 }
-\DoxyCodeLine{141 }
-\DoxyCodeLine{142 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{143 xbInt16 xbLinkListOrd<xbNodeType>::InsertKey( \textcolor{keyword}{const} xbNodeType \&ntKey, xbUInt32 ul )\{}
-\DoxyCodeLine{144 }
-\DoxyCodeLine{145 xbString s;}
-\DoxyCodeLine{146 s.Sprintf( \textcolor{stringliteral}{"{}\%ld"{}}, ul );}
-\DoxyCodeLine{147 \textcolor{keywordflow}{return} InsertKey( ntKey, s );}
-\DoxyCodeLine{148 \}}
-\DoxyCodeLine{149 }
-\DoxyCodeLine{150 }
-\DoxyCodeLine{151 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{152 xbInt16 xbLinkListOrd<xbNodeType>::InsertKey( \textcolor{keyword}{const} xbNodeType \&ntKey, \textcolor{keyword}{const} xbString \&sData )\{}
-\DoxyCodeLine{153 }
-\DoxyCodeLine{154 xbLinkListNode<xbNodeType> *p = \textcolor{keyword}{new} xbLinkListNode<xbNodeType>( ntKey, sData );}
-\DoxyCodeLine{155 \textcolor{keywordflow}{if}( p == 0 )}
-\DoxyCodeLine{156 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ae687fc7d872ba0475a8477e4447f9b54}{XB\_NO\_MEMORY}};}
-\DoxyCodeLine{157 }
-\DoxyCodeLine{158 \textcolor{keywordflow}{if}( ulNodeCnt > 0 )\{}
-\DoxyCodeLine{159 xbLinkListNode<xbNodeType> *currPtr = llStartPtr;}
-\DoxyCodeLine{160 xbLinkListNode<xbNodeType> *prevPtr = NULL;}
-\DoxyCodeLine{161 }
-\DoxyCodeLine{162 \textcolor{comment}{// find location in the chain}}
-\DoxyCodeLine{163 \textcolor{keywordflow}{while}( currPtr \&\& ntKey > currPtr-\/>GetKey() )\{}
-\DoxyCodeLine{164 prevPtr = currPtr;}
-\DoxyCodeLine{165 currPtr = currPtr-\/>GetNextNode();}
-\DoxyCodeLine{166 \}}
-\DoxyCodeLine{167 \textcolor{keywordflow}{if}( currPtr \&\& ntKey == currPtr-\/>GetKey() \&\& bAllowDupKeys == 0 )\{}
-\DoxyCodeLine{168 \textcolor{keyword}{delete} p;}
-\DoxyCodeLine{169 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ad60dbb1862c0c1c2dc0464cfbfd93a34}{XB\_KEY\_NOT\_UNIQUE}};}
-\DoxyCodeLine{170 \}}
-\DoxyCodeLine{171 }
-\DoxyCodeLine{172 \textcolor{keywordflow}{if}( currPtr == NULL )\{}
-\DoxyCodeLine{173 \textcolor{comment}{// std::cout << "{}at the end of the chain\(\backslash\)n"{};}}
-\DoxyCodeLine{174 llEndPtr = p;}
-\DoxyCodeLine{175 prevPtr-\/>SetNextNode( p );}
-\DoxyCodeLine{176 p-\/>SetPrevNode( prevPtr );}
-\DoxyCodeLine{177 }
-\DoxyCodeLine{178 \} \textcolor{keywordflow}{else} \textcolor{keywordflow}{if}( currPtr-\/>GetPrevNode() == NULL )\{}
-\DoxyCodeLine{179 \textcolor{comment}{// std::cout << "{}at the beginning of the chain\(\backslash\)n"{};}}
-\DoxyCodeLine{180 p-\/>SetNextNode( llStartPtr );}
-\DoxyCodeLine{181 llStartPtr-\/>SetPrevNode( p );}
-\DoxyCodeLine{182 llStartPtr = p;}
-\DoxyCodeLine{183 }
-\DoxyCodeLine{184 \} \textcolor{keywordflow}{else} \{}
-\DoxyCodeLine{185 \textcolor{comment}{// std::cout << "{}in the middle of the chain\(\backslash\)n"{};}}
-\DoxyCodeLine{186 p-\/>SetNextNode( currPtr ); }
-\DoxyCodeLine{187 p-\/>SetPrevNode( currPtr-\/>GetPrevNode());}
-\DoxyCodeLine{188 currPtr-\/>SetPrevNode( p );}
-\DoxyCodeLine{189 prevPtr-\/>SetNextNode( p );}
-\DoxyCodeLine{190 \}}
-\DoxyCodeLine{191 \} \textcolor{keywordflow}{else} \{}
-\DoxyCodeLine{192 \textcolor{comment}{// std::cout << "{}first addition to the chain\(\backslash\)n"{};}}
-\DoxyCodeLine{193 llStartPtr = p;}
-\DoxyCodeLine{194 llEndPtr = p;}
-\DoxyCodeLine{195 \}}
-\DoxyCodeLine{196 ulNodeCnt++;}
-\DoxyCodeLine{197 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}{XB\_NO\_ERROR}};}
-\DoxyCodeLine{198 \}}
-\DoxyCodeLine{199 }
-\DoxyCodeLine{200 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{201 xbInt16 xbLinkListOrd<xbNodeType>::RemoveKey( \textcolor{keyword}{const} xbNodeType \&ntKey )\{}
-\DoxyCodeLine{202 \textcolor{comment}{// Remove the first instance of ntKey from the node chain}}
-\DoxyCodeLine{203 xbLinkListNode<xbNodeType> *currPtr = llStartPtr;}
-\DoxyCodeLine{204 xbLinkListNode<xbNodeType> *prevPtr = NULL;}
-\DoxyCodeLine{205 }
-\DoxyCodeLine{206 \textcolor{keywordflow}{while}( currPtr \&\& ntKey > currPtr-\/>GetKey() )\{}
-\DoxyCodeLine{207 prevPtr = currPtr;}
-\DoxyCodeLine{208 currPtr = currPtr-\/>GetNextNode();}
-\DoxyCodeLine{209 \}}
-\DoxyCodeLine{210 }
-\DoxyCodeLine{211 \textcolor{keywordflow}{if}( currPtr \&\& ntKey == currPtr-\/>GetKey())\{}
-\DoxyCodeLine{212 \textcolor{comment}{// ntKey = currPtr-\/>GetKey();}}
-\DoxyCodeLine{213 \textcolor{keywordflow}{if}( prevPtr == NULL )\{ \textcolor{comment}{// this is the first node}}
-\DoxyCodeLine{214 llStartPtr = currPtr-\/>GetNextNode();}
-\DoxyCodeLine{215 \textcolor{comment}{// next line fails}}
-\DoxyCodeLine{216 \textcolor{keywordflow}{if}( llStartPtr )\{}
-\DoxyCodeLine{217 llStartPtr-\/>SetPrevNode( NULL );}
-\DoxyCodeLine{218 \}}
-\DoxyCodeLine{219 \textcolor{keyword}{delete} currPtr;}
-\DoxyCodeLine{220 ulNodeCnt-\/-\/;}
-\DoxyCodeLine{221 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}{XB\_NO\_ERROR}};}
-\DoxyCodeLine{222 \} \textcolor{keywordflow}{else} \textcolor{keywordflow}{if}( currPtr-\/>GetNextNode() == NULL )\{ \textcolor{comment}{// this is the last node}}
-\DoxyCodeLine{223 llEndPtr = prevPtr;}
-\DoxyCodeLine{224 prevPtr-\/>SetNextNode( NULL );}
-\DoxyCodeLine{225 \textcolor{keyword}{delete} currPtr;}
-\DoxyCodeLine{226 ulNodeCnt-\/-\/;}
-\DoxyCodeLine{227 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}{XB\_NO\_ERROR}};}
-\DoxyCodeLine{228 \} \textcolor{keywordflow}{else} \{}
-\DoxyCodeLine{229 }
-\DoxyCodeLine{230 prevPtr-\/>SetNextNode( currPtr-\/>GetNextNode());}
-\DoxyCodeLine{231 currPtr-\/>GetNextNode()-\/>SetPrevNode( prevPtr );}
-\DoxyCodeLine{232 \textcolor{keyword}{delete} currPtr;}
-\DoxyCodeLine{233 ulNodeCnt-\/-\/;}
-\DoxyCodeLine{234 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}{XB\_NO\_ERROR}};}
-\DoxyCodeLine{235 \}}
-\DoxyCodeLine{236 \} \textcolor{keywordflow}{else} \{}
-\DoxyCodeLine{237 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac2606659a54111334f5b02861e533700}{XB\_NOT\_FOUND}};}
-\DoxyCodeLine{238 \}}
-\DoxyCodeLine{239 \}}
-\DoxyCodeLine{240 }
-\DoxyCodeLine{241 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{242 xbInt16 xbLinkListOrd<xbNodeType>::RemoveFromFront( xbNodeType \&ntKey )\{}
-\DoxyCodeLine{243 }
-\DoxyCodeLine{244 \textcolor{keywordflow}{if}( ulNodeCnt <= 0 )}
-\DoxyCodeLine{245 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_a13e6876470bd34c8c4e5533f115e04eb}{XB\_INVALID\_NODELINK}};}
-\DoxyCodeLine{246 xbLinkListNode<xbNodeType> *p = llStartPtr;}
-\DoxyCodeLine{247 llStartPtr = p-\/>GetNextNode();}
-\DoxyCodeLine{248 \textcolor{keywordflow}{if}( llStartPtr )}
-\DoxyCodeLine{249 llStartPtr-\/>SetPrevNode( NULL );}
-\DoxyCodeLine{250 ntKey = p-\/>GetKey();}
-\DoxyCodeLine{251 \textcolor{keyword}{delete} p;}
-\DoxyCodeLine{252 ulNodeCnt-\/-\/;}
-\DoxyCodeLine{253 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}{XB\_NO\_ERROR}};}
-\DoxyCodeLine{254 \}}
-\DoxyCodeLine{255 }
-\DoxyCodeLine{256 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{257 xbInt16 xbLinkListOrd<xbNodeType>::RemoveFromFront()\{}
-\DoxyCodeLine{258 }
-\DoxyCodeLine{259 \textcolor{keywordflow}{if}( ulNodeCnt <= 0 )}
-\DoxyCodeLine{260 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_a13e6876470bd34c8c4e5533f115e04eb}{XB\_INVALID\_NODELINK}};}
-\DoxyCodeLine{261 xbLinkListNode<xbNodeType> *p = llStartPtr;}
-\DoxyCodeLine{262 llStartPtr = p-\/>GetNextNode();}
-\DoxyCodeLine{263 \textcolor{keywordflow}{if}( llStartPtr )}
-\DoxyCodeLine{264 llStartPtr-\/>SetPrevNode( NULL );}
-\DoxyCodeLine{265 }
-\DoxyCodeLine{266 \textcolor{keywordflow}{if}( p-\/>GetKey())}
-\DoxyCodeLine{267 \textcolor{keyword}{delete} p-\/>GetKey();}
-\DoxyCodeLine{268 }
-\DoxyCodeLine{269 \textcolor{keyword}{delete} p;}
-\DoxyCodeLine{270 ulNodeCnt-\/-\/;}
-\DoxyCodeLine{271 }
-\DoxyCodeLine{272 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}{XB\_NO\_ERROR}};}
-\DoxyCodeLine{273 \}}
-\DoxyCodeLine{274 }
-\DoxyCodeLine{275 }
-\DoxyCodeLine{276 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{277 xbInt16 xbLinkListOrd<xbNodeType>::RemoveFromEnd( xbNodeType \&ntKey )\{}
-\DoxyCodeLine{278 }
-\DoxyCodeLine{279 \textcolor{keywordflow}{if}( ulNodeCnt <= 0 )}
-\DoxyCodeLine{280 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_a13e6876470bd34c8c4e5533f115e04eb}{XB\_INVALID\_NODELINK}};}
-\DoxyCodeLine{281 xbLinkListNode<xbNodeType> *p = llEndPtr;}
-\DoxyCodeLine{282 llEndPtr = p-\/>GetPrevNode();}
-\DoxyCodeLine{283 llEndPtr-\/>SetNextNode( NULL );}
-\DoxyCodeLine{284 ntKey = p-\/>GetKey();}
-\DoxyCodeLine{285 \textcolor{keyword}{delete} p;}
-\DoxyCodeLine{286 ulNodeCnt-\/-\/;}
-\DoxyCodeLine{287 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}{XB\_NO\_ERROR}};}
-\DoxyCodeLine{288 \}}
-\DoxyCodeLine{289 }
-\DoxyCodeLine{290 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{291 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} xbLinkListOrd<xbNodeType>::GetDupKeys()\{}
-\DoxyCodeLine{292 \textcolor{keywordflow}{return} bAllowDupKeys;}
-\DoxyCodeLine{293 \}}
-\DoxyCodeLine{294 }
-\DoxyCodeLine{295 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{296 \textcolor{keywordtype}{void} xbLinkListOrd<xbNodeType>::SetDupKeys( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bAllowDupKeys )\{}
-\DoxyCodeLine{297 this-\/>bAllowDupKeys = bAllowDupKeys;}
-\DoxyCodeLine{298 \}}
-\DoxyCodeLine{299 }
-\DoxyCodeLine{300 }
-\DoxyCodeLine{301 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{302 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} xbLinkListOrd<xbNodeType>::KeyExists( \textcolor{keyword}{const} xbNodeType \&ntKey )\textcolor{keyword}{ const }\{}
-\DoxyCodeLine{303 }
-\DoxyCodeLine{304 xbLinkListNode<xbNodeType> *currPtr = llStartPtr;}
-\DoxyCodeLine{305 \textcolor{keywordflow}{while}( currPtr \&\& ntKey > currPtr-\/>GetKey() )\{}
-\DoxyCodeLine{306 currPtr = currPtr-\/>GetNextNode();}
-\DoxyCodeLine{307 \}}
-\DoxyCodeLine{308 \textcolor{keywordflow}{if}( currPtr \&\& ntKey == currPtr-\/>GetKey())\{}
-\DoxyCodeLine{309 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbtypes_8h_ab0ae00665298fe7f5292691cb98ec2d9}{xbTrue}};}
-\DoxyCodeLine{310 \} \textcolor{keywordflow}{else} \{}
-\DoxyCodeLine{311 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbtypes_8h_adc4b6ca5ad299f63675136d9e03938cc}{xbFalse}};}
-\DoxyCodeLine{312 \}}
-\DoxyCodeLine{313 \}}
-\DoxyCodeLine{314 }
-\DoxyCodeLine{315 }
-\DoxyCodeLine{316 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{317 xbInt16 xbLinkListOrd<xbNodeType>::GetDataForKey( \textcolor{keyword}{const} xbNodeType \&ntKey, xbString \&sData )\{}
-\DoxyCodeLine{318 }
-\DoxyCodeLine{319 xbLinkListNode<xbNodeType> *currPtr = llStartPtr;}
-\DoxyCodeLine{320 \textcolor{keywordflow}{while}( currPtr \&\& ntKey > currPtr-\/>GetKey() )\{}
-\DoxyCodeLine{321 currPtr = currPtr-\/>GetNextNode();}
-\DoxyCodeLine{322 \}}
-\DoxyCodeLine{323 }
-\DoxyCodeLine{324 \textcolor{keywordflow}{if}( currPtr \&\& ntKey == currPtr-\/>GetKey())\{}
-\DoxyCodeLine{325 sData = currPtr-\/>GetData();}
-\DoxyCodeLine{326 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}{XB\_NO\_ERROR}};}
-\DoxyCodeLine{327 \} \textcolor{keywordflow}{else} \{}
-\DoxyCodeLine{328 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac2606659a54111334f5b02861e533700}{XB\_NOT\_FOUND}};}
-\DoxyCodeLine{329 \}}
-\DoxyCodeLine{330 \}}
-\DoxyCodeLine{331 }
-\DoxyCodeLine{332 }
-\DoxyCodeLine{333 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{334 xbInt16 xbLinkListOrd<xbNodeType>::UpdateForKey( \textcolor{keyword}{const} xbNodeType \&ntKey, \textcolor{keyword}{const} xbString \&sData )\{}
-\DoxyCodeLine{335 }
-\DoxyCodeLine{336 \textcolor{keywordflow}{if}( ulNodeCnt == 0 )}
-\DoxyCodeLine{337 \textcolor{keywordflow}{return} InsertKey( ntKey, sData );}
-\DoxyCodeLine{338 xbLinkListNode<xbNodeType> * currPtr = llStartPtr;}
-\DoxyCodeLine{339 xbLinkListNode<xbNodeType> * prevPtr = NULL;}
-\DoxyCodeLine{340 \textcolor{keywordflow}{while}( currPtr \&\& ntKey > currPtr-\/>GetKey() ) \{}
-\DoxyCodeLine{341 prevPtr = currPtr;}
-\DoxyCodeLine{342 currPtr = currPtr-\/>GetNextNode();}
-\DoxyCodeLine{343 \}}
-\DoxyCodeLine{344 }
-\DoxyCodeLine{345 \textcolor{keywordflow}{if}( currPtr \&\& ntKey == currPtr-\/>GetKey() ) \{}
-\DoxyCodeLine{346 xbLinkListNode<xbNodeType> *p = \textcolor{keyword}{new} xbLinkListNode<xbNodeType>( ntKey, sData );}
-\DoxyCodeLine{347 \textcolor{keywordflow}{if}( prevPtr )}
-\DoxyCodeLine{348 prevPtr-\/>SetNextNode( p );}
-\DoxyCodeLine{349 \textcolor{keywordflow}{else}}
-\DoxyCodeLine{350 llStartPtr = p;}
-\DoxyCodeLine{351 p-\/>SetNextNode( currPtr-\/>GetNextNode() );}
-\DoxyCodeLine{352 p-\/>SetPrevNode( currPtr-\/>GetPrevNode() );}
-\DoxyCodeLine{353 \textcolor{keyword}{delete} currPtr;}
-\DoxyCodeLine{354 \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}{XB\_NO\_ERROR}};}
-\DoxyCodeLine{355 \}}
-\DoxyCodeLine{356 }
-\DoxyCodeLine{357 \textcolor{keywordflow}{return} InsertKey( ntKey, sData );}
-\DoxyCodeLine{358 }
-\DoxyCodeLine{359 \textcolor{comment}{// return 0;}}
-\DoxyCodeLine{360 \}}
-\DoxyCodeLine{361 }
-\DoxyCodeLine{362 \} \textcolor{comment}{// namespace}}
-\DoxyCodeLine{363 }
-\DoxyCodeLine{364 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_LINKLIST\_SUPPORT}}
-\DoxyCodeLine{365 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_XBLNKLSTORD\_H\_\_}}
-\DoxyCodeLine{366 }
-\DoxyCodeLine{367 }
-
-\end{DoxyCode}
diff --git a/docs/doxygen/latex/xblnknod_8h.tex b/docs/doxygen/latex/xblnknod_8h.tex
deleted file mode 100644
index cc23e56..0000000
--- a/docs/doxygen/latex/xblnknod_8h.tex
+++ /dev/null
@@ -1,2 +0,0 @@
-\hypertarget{xblnknod_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/include/xblnknod.h File Reference}
-\label{xblnknod_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xblnknod.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xblnknod.h}}
diff --git a/docs/doxygen/latex/xblnknod_8h_source.tex b/docs/doxygen/latex/xblnknod_8h_source.tex
deleted file mode 100644
index 4127b84..0000000
--- a/docs/doxygen/latex/xblnknod_8h_source.tex
+++ /dev/null
@@ -1,100 +0,0 @@
-\hypertarget{xblnknod_8h_source}{}\doxysection{xblnknod.\+h}
-\label{xblnknod_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xblnknod.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xblnknod.h}}
-\mbox{\hyperlink{xblnknod_8h}{Go to the documentation of this file.}}
-\begin{DoxyCode}{0}
-\DoxyCodeLine{1 \textcolor{comment}{/* xblnknod.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\_XBLNKNOD\_H\_\_}}
-\DoxyCodeLine{18 \textcolor{preprocessor}{\#define \_\_XB\_XBLNKNOD\_H\_\_}}
-\DoxyCodeLine{19 }
-\DoxyCodeLine{20 }
-\DoxyCodeLine{21 }
-\DoxyCodeLine{22 \textcolor{preprocessor}{\#ifdef XB\_LINKLIST\_SUPPORT}}
-\DoxyCodeLine{23 }
-\DoxyCodeLine{24 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
-\DoxyCodeLine{25 }
-\DoxyCodeLine{26 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{27 \textcolor{keyword}{class }XBDLLEXPORT xbLinkListNode \{}
-\DoxyCodeLine{28 \textcolor{keyword}{public}:}
-\DoxyCodeLine{29 xbLinkListNode( \textcolor{keyword}{const} xbNodeType \& );}
-\DoxyCodeLine{30 xbLinkListNode( \textcolor{keyword}{const} xbNodeType \&, \textcolor{keyword}{const} xbString \& );}
-\DoxyCodeLine{31 xbNodeType GetKey() \textcolor{keyword}{const};}
-\DoxyCodeLine{32 xbString \&GetData();}
-\DoxyCodeLine{33 xbLinkListNode<xbNodeType> *GetNextNode() \textcolor{keyword}{const};}
-\DoxyCodeLine{34 xbLinkListNode<xbNodeType> *GetPrevNode() \textcolor{keyword}{const};}
-\DoxyCodeLine{35 \textcolor{keywordtype}{void} SetNextNode( xbLinkListNode<xbNodeType> *llNext );}
-\DoxyCodeLine{36 \textcolor{keywordtype}{void} SetPrevNode( xbLinkListNode<xbNodeType> *llPrev );}
-\DoxyCodeLine{37 }
-\DoxyCodeLine{38 \textcolor{keyword}{private}:}
-\DoxyCodeLine{39 xbNodeType ntKey;}
-\DoxyCodeLine{40 xbString sData;}
-\DoxyCodeLine{41 xbLinkListNode *llNext;}
-\DoxyCodeLine{42 xbLinkListNode *llPrev;}
-\DoxyCodeLine{43 \};}
-\DoxyCodeLine{44 }
-\DoxyCodeLine{45 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{46 xbLinkListNode<xbNodeType>::xbLinkListNode( \textcolor{keyword}{const} xbNodeType \&key )\{}
-\DoxyCodeLine{47 ntKey = key;}
-\DoxyCodeLine{48 llNext = NULL;}
-\DoxyCodeLine{49 llPrev = NULL;}
-\DoxyCodeLine{50 \}}
-\DoxyCodeLine{51 }
-\DoxyCodeLine{52 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{53 xbLinkListNode<xbNodeType>::xbLinkListNode( \textcolor{keyword}{const} xbNodeType \&key, \textcolor{keyword}{const} xbString \&s )\{}
-\DoxyCodeLine{54 ntKey = key;}
-\DoxyCodeLine{55 sData = s;}
-\DoxyCodeLine{56 llNext = NULL;}
-\DoxyCodeLine{57 llPrev = NULL;}
-\DoxyCodeLine{58 \}}
-\DoxyCodeLine{59 }
-\DoxyCodeLine{60 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{61 xbNodeType xbLinkListNode<xbNodeType>::GetKey()\textcolor{keyword}{ const }\{}
-\DoxyCodeLine{62 \textcolor{keywordflow}{return} ntKey;}
-\DoxyCodeLine{63 \}}
-\DoxyCodeLine{64 }
-\DoxyCodeLine{65 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{66 xbString \&xbLinkListNode<xbNodeType>::GetData()\{}
-\DoxyCodeLine{67 \textcolor{keywordflow}{return} sData;}
-\DoxyCodeLine{68 \}}
-\DoxyCodeLine{69 }
-\DoxyCodeLine{70 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{71 xbLinkListNode<xbNodeType> *xbLinkListNode<xbNodeType>::GetNextNode()\textcolor{keyword}{ const }\{}
-\DoxyCodeLine{72 \textcolor{keywordflow}{return} llNext;}
-\DoxyCodeLine{73 \}}
-\DoxyCodeLine{74 }
-\DoxyCodeLine{75 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{76 xbLinkListNode<xbNodeType> *xbLinkListNode<xbNodeType>::GetPrevNode()\textcolor{keyword}{ const }\{}
-\DoxyCodeLine{77 \textcolor{keywordflow}{return} llPrev;}
-\DoxyCodeLine{78 \}}
-\DoxyCodeLine{79 }
-\DoxyCodeLine{80 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{81 \textcolor{keywordtype}{void} xbLinkListNode<xbNodeType>::SetNextNode( xbLinkListNode<xbNodeType> *lln )\{}
-\DoxyCodeLine{82 llNext = lln;}
-\DoxyCodeLine{83 \}}
-\DoxyCodeLine{84 }
-\DoxyCodeLine{85 \textcolor{keyword}{template}<\textcolor{keyword}{class} xbNodeType>}
-\DoxyCodeLine{86 \textcolor{keywordtype}{void} xbLinkListNode<xbNodeType>::SetPrevNode( xbLinkListNode<xbNodeType> *llp )\{}
-\DoxyCodeLine{87 llPrev = llp;}
-\DoxyCodeLine{88 \}}
-\DoxyCodeLine{89 }
-\DoxyCodeLine{90 \} \textcolor{comment}{// namespace}}
-\DoxyCodeLine{91 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_LINKLIST\_SUPPORT}}
-\DoxyCodeLine{92 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_XBLNKNOD\_H\_\_}}
-\DoxyCodeLine{93 }
-\DoxyCodeLine{94 }
-
-\end{DoxyCode}
diff --git a/docs/doxygen/latex/xblog_8cpp.tex b/docs/doxygen/latex/xblog_8cpp.tex
deleted file mode 100644
index 1a69ec7..0000000
--- a/docs/doxygen/latex/xblog_8cpp.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-\hypertarget{xblog_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/core/xblog.cpp File Reference}
-\label{xblog_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xblog.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xblog.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xblog_8h.tex b/docs/doxygen/latex/xblog_8h.tex
deleted file mode 100644
index 9ad1cb8..0000000
--- a/docs/doxygen/latex/xblog_8h.tex
+++ /dev/null
@@ -1,7 +0,0 @@
-\hypertarget{xblog_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/include/xblog.h File Reference}
-\label{xblog_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xblog.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xblog.h}}
-\doxysubsection*{Namespaces}
-\begin{DoxyCompactItemize}
-\item
-namespace \mbox{\hyperlink{namespacexb}{xb}}
-\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xblog_8h_source.tex b/docs/doxygen/latex/xblog_8h_source.tex
deleted file mode 100644
index 03a4094..0000000
--- a/docs/doxygen/latex/xblog_8h_source.tex
+++ /dev/null
@@ -1,59 +0,0 @@
-\hypertarget{xblog_8h_source}{}\doxysection{xblog.\+h}
-\label{xblog_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xblog.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xblog.h}}
-\mbox{\hyperlink{xblog_8h}{Go to the documentation of this file.}}
-\begin{DoxyCode}{0}
-\DoxyCodeLine{1 \textcolor{comment}{/* xblog.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 \textcolor{preprocessor}{\#ifndef \_\_XB\_XBLOG\_H\_\_}}
-\DoxyCodeLine{17 \textcolor{preprocessor}{\#define \_\_XB\_XBLOG\_H\_\_}}
-\DoxyCodeLine{18 }
-\DoxyCodeLine{19 \textcolor{preprocessor}{\#ifdef CMAKE\_COMPILER\_IS\_GNUCC}}
-\DoxyCodeLine{20 \textcolor{preprocessor}{\#pragma interface}}
-\DoxyCodeLine{21 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{22 }
-\DoxyCodeLine{23 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
-\DoxyCodeLine{24 }
-\DoxyCodeLine{25 \textcolor{preprocessor}{\#ifdef XB\_LOGGING\_SUPPORT}}
-\DoxyCodeLine{26 }
-\DoxyCodeLine{28 }
-\DoxyCodeLine{41 \textcolor{keyword}{class }XBDLLEXPORT \mbox{\hyperlink{namespacexb_a4a31fbe9110c9e55495ce71e642d785c}{xbLog}} : \textcolor{keyword}{public} xbFile \{}
-\DoxyCodeLine{42 \textcolor{keyword}{public}:}
-\DoxyCodeLine{43 \mbox{\hyperlink{namespacexb_a4a31fbe9110c9e55495ce71e642d785c}{xbLog}}();}
-\DoxyCodeLine{44 \mbox{\hyperlink{namespacexb_a4a31fbe9110c9e55495ce71e642d785c}{xbLog}}( \textcolor{keyword}{const} xbString \&sLogFileName );}
-\DoxyCodeLine{45 \string~xbLog();}
-\DoxyCodeLine{46 }
-\DoxyCodeLine{47 xbInt16 LogClose ();}
-\DoxyCodeLine{48 xbInt16 LogGetStatus ();}
-\DoxyCodeLine{49 xbInt16 LogOpen ();}
-\DoxyCodeLine{50 \textcolor{keywordtype}{void} LogSetStatus ( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bLogStatus );}
-\DoxyCodeLine{51 \textcolor{keywordtype}{void} LogSetLogSize( \textcolor{keywordtype}{size\_t} lSize ); \textcolor{comment}{// \{ LogSize = size; \}}}
-\DoxyCodeLine{52 xbInt16 LogWrite ( \textcolor{keyword}{const} xbString \&LogEntry, xbInt16 iOutputOption = 0 );}
-\DoxyCodeLine{53 xbInt16 LogWriteBytes( xbUInt32 lByteCnt, \textcolor{keyword}{const} \textcolor{keywordtype}{char} *p );}
-\DoxyCodeLine{54 }
-\DoxyCodeLine{55 \textcolor{keyword}{private}:}
-\DoxyCodeLine{56 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bLoggingStatus; \textcolor{comment}{// false = logging off}}
-\DoxyCodeLine{57 \textcolor{comment}{// true = logging on}}
-\DoxyCodeLine{58 \textcolor{keywordtype}{size\_t} lLogSize;}
-\DoxyCodeLine{59 xbInt16 iShareMode;}
-\DoxyCodeLine{60 \};}
-\DoxyCodeLine{61 }
-\DoxyCodeLine{62 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_LOGGING\_SUPPORT}}
-\DoxyCodeLine{63 \} \textcolor{comment}{// namespace}}
-\DoxyCodeLine{64 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_XBLOG\_H\_\_}}
-\DoxyCodeLine{65 }
-\DoxyCodeLine{66 }
-
-\end{DoxyCode}
diff --git a/docs/doxygen/latex/xbmemo3_8cpp.tex b/docs/doxygen/latex/xbmemo3_8cpp.tex
deleted file mode 100644
index 9697fff..0000000
--- a/docs/doxygen/latex/xbmemo3_8cpp.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-\hypertarget{xbmemo3_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/core/xbmemo3.cpp File Reference}
-\label{xbmemo3_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbmemo3.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbmemo3.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbmemo4_8cpp.tex b/docs/doxygen/latex/xbmemo4_8cpp.tex
deleted file mode 100644
index 7f0a348..0000000
--- a/docs/doxygen/latex/xbmemo4_8cpp.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-\hypertarget{xbmemo4_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/core/xbmemo4.cpp File Reference}
-\label{xbmemo4_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbmemo4.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbmemo4.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbmemo_8cpp.tex b/docs/doxygen/latex/xbmemo_8cpp.tex
deleted file mode 100644
index c62dee8..0000000
--- a/docs/doxygen/latex/xbmemo_8cpp.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-\hypertarget{xbmemo_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/core/xbmemo.cpp File Reference}
-\label{xbmemo_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbmemo.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbmemo.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbmemo_8h.tex b/docs/doxygen/latex/xbmemo_8h.tex
deleted file mode 100644
index c9771e4..0000000
--- a/docs/doxygen/latex/xbmemo_8h.tex
+++ /dev/null
@@ -1,2 +0,0 @@
-\hypertarget{xbmemo_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/include/xbmemo.h File Reference}
-\label{xbmemo_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbmemo.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbmemo.h}}
diff --git a/docs/doxygen/latex/xbmemo_8h_source.tex b/docs/doxygen/latex/xbmemo_8h_source.tex
deleted file mode 100644
index e46386c..0000000
--- a/docs/doxygen/latex/xbmemo_8h_source.tex
+++ /dev/null
@@ -1,187 +0,0 @@
-\hypertarget{xbmemo_8h_source}{}\doxysection{xbmemo.\+h}
-\label{xbmemo_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbmemo.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/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 \textcolor{keyword}{virtual} xbInt16 CreateMemoFile () = 0;}
-\DoxyCodeLine{66 }
-\DoxyCodeLine{67 \textcolor{keyword}{virtual} xbInt16 DumpMemoHeader () = 0;}
-\DoxyCodeLine{68 }
-\DoxyCodeLine{69 }
-\DoxyCodeLine{70 \textcolor{keyword}{virtual} xbInt16 GetMemoField ( xbInt16 iFieldNo, xbString \&sMemoData ) = 0;}
-\DoxyCodeLine{71 \textcolor{keyword}{virtual} xbInt16 GetMemoFieldLen ( xbInt16 iFieldNo, xbUInt32 \&ulMemoFieldLen ) = 0;}
-\DoxyCodeLine{72 \textcolor{keyword}{virtual} xbInt16 OpenMemoFile () = 0;}
-\DoxyCodeLine{73 \textcolor{keyword}{virtual} xbInt16 GetMemoFileType ();}
-\DoxyCodeLine{74 \textcolor{keyword}{virtual} xbInt16 PackMemo ( \textcolor{keywordtype}{void} (*memoStatusFunc)(xbUInt32 ulItemNum, xbUInt32 ulNumItems)) = 0;}
-\DoxyCodeLine{75 \textcolor{keyword}{virtual} xbInt16 UpdateMemoField ( xbInt16 iFieldNo, \textcolor{keyword}{const} xbString \&sMemoData ) = 0;}
-\DoxyCodeLine{76 }
-\DoxyCodeLine{77 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
-\DoxyCodeLine{78 \textcolor{keyword}{virtual} xbInt16 DumpMemoFreeChain() = 0;}
-\DoxyCodeLine{79 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{80 }
-\DoxyCodeLine{81 \textcolor{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
-\DoxyCodeLine{82 \textcolor{keyword}{virtual} xbInt16 LockMemo ( xbInt16 iLockFunction );}
-\DoxyCodeLine{83 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetMemoLocked () \textcolor{keyword}{const};}
-\DoxyCodeLine{84 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{85 }
-\DoxyCodeLine{86 }
-\DoxyCodeLine{87 }
-\DoxyCodeLine{88 \textcolor{comment}{// *********** FIXME *************}}
-\DoxyCodeLine{89 \textcolor{comment}{// next two methods should be protected but are called in the xb\_test\_xxxx programs testing routines}}
-\DoxyCodeLine{90 \textcolor{comment}{// so for now, they are kept as public}}
-\DoxyCodeLine{91 \textcolor{keyword}{virtual} xbInt16 CalcLastDataBlock ( xbUInt32 \&lLastDataBlock );}
-\DoxyCodeLine{92 \textcolor{keyword}{virtual} xbInt16 GetHdrNextBlock ( xbUInt32 \&ulBlockNo );}
-\DoxyCodeLine{93 }
-\DoxyCodeLine{94 \textcolor{keyword}{protected}:}
-\DoxyCodeLine{95 \textcolor{keyword}{friend} \textcolor{keyword}{class }\mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}};}
-\DoxyCodeLine{96 }
-\DoxyCodeLine{97 \textcolor{keyword}{virtual} xbInt16 ReadDbtHeader ( xbInt16 iOption ) = 0;}
-\DoxyCodeLine{98 \textcolor{keyword}{virtual} xbInt16 UpdateHeaderName () = 0;}
-\DoxyCodeLine{99 \textcolor{keyword}{virtual} xbInt16 UpdateHeadNextNode();}
-\DoxyCodeLine{100 \textcolor{keyword}{virtual} xbInt16 Zap () = 0;}
-\DoxyCodeLine{101 }
-\DoxyCodeLine{102 \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf; \textcolor{comment}{/* pointer to related dbf instance */}}
-\DoxyCodeLine{103 \textcolor{keywordtype}{char} cVersion; \textcolor{comment}{/* byte 16 off the header block, 0x03 for V3, version IV -\/ ? */}}
-\DoxyCodeLine{104 xbInt16 iMemoFileType; \textcolor{comment}{/* 3 = version III, 4 = version IV */}}
-\DoxyCodeLine{105 xbUInt32 ulHdrNextBlock; \textcolor{comment}{/* next available block , bytes 0-\/3 of the memo header */}}
-\DoxyCodeLine{106 \textcolor{keywordtype}{void} * mbb; \textcolor{comment}{/* memo block buffer */}}
-\DoxyCodeLine{107 }
-\DoxyCodeLine{108 }
-\DoxyCodeLine{109 \textcolor{keyword}{private}:}
-\DoxyCodeLine{110 }
-\DoxyCodeLine{111 \textcolor{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
-\DoxyCodeLine{112 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bFileLocked; \textcolor{comment}{/* memo file locked */}}
-\DoxyCodeLine{113 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{114 }
-\DoxyCodeLine{115 \};}
-\DoxyCodeLine{116 }
-\DoxyCodeLine{117 }
-\DoxyCodeLine{118 }
-\DoxyCodeLine{119 \textcolor{preprocessor}{\#ifdef XB\_DBF3\_SUPPORT}}
-\DoxyCodeLine{121 }
-\DoxyCodeLine{133 \textcolor{keyword}{class }XBDLLEXPORT xbMemoDbt3 : \textcolor{keyword}{public} xbMemo \{}
-\DoxyCodeLine{134 \textcolor{keyword}{public}:}
-\DoxyCodeLine{135 xbMemoDbt3( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf, xbString \textcolor{keyword}{const} \&sFileName );}
-\DoxyCodeLine{136 \string~xbMemoDbt3();}
-\DoxyCodeLine{137 \textcolor{keyword}{virtual} xbInt16 Abort ();}
-\DoxyCodeLine{138 \textcolor{keyword}{virtual} xbInt16 Commit ();}
-\DoxyCodeLine{139 \textcolor{keyword}{virtual} xbInt16 CreateMemoFile ();}
-\DoxyCodeLine{140 \textcolor{keyword}{virtual} xbInt16 DumpMemoHeader ();}
-\DoxyCodeLine{141 \textcolor{keyword}{virtual} xbInt16 GetMemoField ( xbInt16 iFieldNo, xbString \&sMemoData );}
-\DoxyCodeLine{142 \textcolor{keyword}{virtual} xbInt16 GetMemoFieldLen( xbInt16 iFieldNo, xbUInt32 \&ulMemoFieldLen );}
-\DoxyCodeLine{143 \textcolor{keyword}{virtual} xbInt16 OpenMemoFile ();}
-\DoxyCodeLine{144 \textcolor{keyword}{virtual} xbInt16 PackMemo ( \textcolor{keywordtype}{void} (*memoStatusFunc) (xbUInt32 ulItemNum, xbUInt32 ulNumItems));}
-\DoxyCodeLine{145 \textcolor{keyword}{virtual} xbInt16 UpdateMemoField( xbInt16 iFieldNo, \textcolor{keyword}{const} xbString \&sMemoData );}
-\DoxyCodeLine{146 }
-\DoxyCodeLine{147 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
-\DoxyCodeLine{148 \textcolor{keyword}{virtual} xbInt16 DumpMemoFreeChain();}
-\DoxyCodeLine{149 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{150 }
-\DoxyCodeLine{151 \textcolor{keyword}{protected}:}
-\DoxyCodeLine{152 \textcolor{keyword}{virtual} xbInt16 ReadDbtHeader( xbInt16 iOption );}
-\DoxyCodeLine{153 \textcolor{keyword}{virtual} xbInt16 UpdateHeaderName();}
-\DoxyCodeLine{154 \textcolor{keyword}{virtual} xbInt16 Zap();}
-\DoxyCodeLine{155 }
-\DoxyCodeLine{156 \textcolor{keyword}{private}:}
-\DoxyCodeLine{157 \};}
-\DoxyCodeLine{158 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{159 }
-\DoxyCodeLine{160 }
-\DoxyCodeLine{161 \textcolor{preprocessor}{\#ifdef XB\_DBF4\_SUPPORT}}
-\DoxyCodeLine{162 }
-\DoxyCodeLine{164 }
-\DoxyCodeLine{174 \textcolor{keyword}{class }XBDLLEXPORT xbMemoDbt4 : \textcolor{keyword}{public} xbMemo \{}
-\DoxyCodeLine{175 \textcolor{keyword}{public}:}
-\DoxyCodeLine{176 xbMemoDbt4( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf, xbString \textcolor{keyword}{const} \&sFileName );}
-\DoxyCodeLine{177 \string~xbMemoDbt4();}
-\DoxyCodeLine{178 \textcolor{keyword}{virtual} xbInt16 Abort ();}
-\DoxyCodeLine{179 \textcolor{keyword}{virtual} xbInt16 Commit ();}
-\DoxyCodeLine{180 \textcolor{keyword}{virtual} xbInt16 CreateMemoFile ();}
-\DoxyCodeLine{181 \textcolor{keyword}{virtual} xbInt16 DumpMemoHeader ();}
-\DoxyCodeLine{182 \textcolor{keyword}{virtual} xbInt16 GetMemoField ( xbInt16 iFieldNo, xbString \&sMemoData );}
-\DoxyCodeLine{183 \textcolor{keyword}{virtual} xbInt16 GetMemoFieldLen ( xbInt16 iFieldNo, xbUInt32 \&ulMemoFieldLen );}
-\DoxyCodeLine{184 \textcolor{keyword}{virtual} xbInt16 GetMemoFieldLen ( xbInt16 iFieldNo, xbUInt32 \&ulMemoFieldLen, xbUInt32 \&lBlockNo );}
-\DoxyCodeLine{185 \textcolor{keyword}{virtual} xbInt16 OpenMemoFile ();}
-\DoxyCodeLine{186 \textcolor{keyword}{virtual} xbInt16 PackMemo ( \textcolor{keywordtype}{void} (*memoStatusFunc) (xbUInt32 ulItemNum, xbUInt32 ulNumItems));}
-\DoxyCodeLine{187 \textcolor{keyword}{virtual} xbInt16 UpdateMemoField ( xbInt16 iFieldNo, \textcolor{keyword}{const} xbString \&sMemoData );}
-\DoxyCodeLine{188 }
-\DoxyCodeLine{189 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
-\DoxyCodeLine{190 \textcolor{keyword}{virtual} xbInt16 DumpMemoFreeChain ();}
-\DoxyCodeLine{191 \textcolor{keyword}{virtual} xbInt16 DumpMemoInternals ();}
-\DoxyCodeLine{192 \textcolor{keyword}{virtual} xbInt16 ReadFreeBlockHeader( xbUInt32 ulBlockNo, xbUInt32 \&ulNextBlock, xbUInt32 \&ulFreeBlockCnt );}
-\DoxyCodeLine{193 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{194 }
-\DoxyCodeLine{195 \textcolor{keyword}{protected}:}
-\DoxyCodeLine{196 \textcolor{keyword}{virtual} xbInt16 FindBlockSetInChain( xbUInt32 ulBlocksNeeded, xbUInt32 \&ulLastDataBlock, xbUInt32 \&ulLocation, xbUInt32 \&ulPrevNode, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bFound );}
-\DoxyCodeLine{197 \textcolor{keyword}{virtual} xbInt16 FreeMemoBlockChain( xbUInt32 ulBlockNo );}
-\DoxyCodeLine{198 \textcolor{keyword}{virtual} xbInt16 FreeMemoBlockChain( xbUInt32 ulBlockNo, xbUInt32 \&ulLastDataBlock );}
-\DoxyCodeLine{199 \textcolor{keyword}{virtual} xbInt16 GetBlockSetFromChain( xbUInt32 ulBlocksNeeded, xbUInt32 ulLocation, xbUInt32 ulPrevNode );}
-\DoxyCodeLine{200 \textcolor{keyword}{virtual} xbInt16 ReadDbtHeader( xbInt16 iOption );}
-\DoxyCodeLine{201 \textcolor{keyword}{virtual} xbInt16 ReadBlockHeader( xbUInt32 ulBlockNo, xbInt16 iOption );}
-\DoxyCodeLine{202 \textcolor{keyword}{virtual} xbInt16 UpdateHeaderName ();}
-\DoxyCodeLine{203 \textcolor{keyword}{virtual} xbInt16 WriteBlockHeader( xbUInt32 ulBlockNo, xbInt16 iOption );}
-\DoxyCodeLine{204 \textcolor{keyword}{virtual} xbInt16 Zap();}
-\DoxyCodeLine{205 }
-\DoxyCodeLine{206 \textcolor{keyword}{private}:}
-\DoxyCodeLine{207 xbString sDbfFileNameWoExt;}
-\DoxyCodeLine{208 xbUInt32 ulNextFreeBlock;}
-\DoxyCodeLine{209 xbUInt32 ulFreeBlockCnt;}
-\DoxyCodeLine{210 xbInt16 iField1;}
-\DoxyCodeLine{211 xbInt16 iStartPos;}
-\DoxyCodeLine{212 xbUInt32 ulFieldLen;}
-\DoxyCodeLine{213 }
-\DoxyCodeLine{214 xbLinkList<xbUInt32> llOldBlocks; \textcolor{comment}{// list of previously used memo blocks for field, used by Commit() / Abort()}}
-\DoxyCodeLine{215 xbLinkList<xbUInt32> llNewBlocks; \textcolor{comment}{// list of newly updated memo blocks for field, used by Commit() / Abort()}}
-\DoxyCodeLine{216 }
-\DoxyCodeLine{217 \};}
-\DoxyCodeLine{218 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{219 }
-\DoxyCodeLine{220 }
-\DoxyCodeLine{221 \} \textcolor{comment}{/* namespace xb */}}
-\DoxyCodeLine{222 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* XB\_MEMO\_SUPPORT */}\textcolor{preprocessor}{}}
-\DoxyCodeLine{223 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_MEMO\_H\_\_ */}\textcolor{preprocessor}{}}
-\DoxyCodeLine{224 }
-
-\end{DoxyCode}
diff --git a/docs/doxygen/latex/xbretcod_8h.tex b/docs/doxygen/latex/xbretcod_8h.tex
deleted file mode 100644
index fc7d89e..0000000
--- a/docs/doxygen/latex/xbretcod_8h.tex
+++ /dev/null
@@ -1,469 +0,0 @@
-\hypertarget{xbretcod_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/include/xbretcod.h File Reference}
-\label{xbretcod_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbretcod.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbretcod.h}}
-\doxysubsection*{Namespaces}
-\begin{DoxyCompactItemize}
-\item
-namespace \mbox{\hyperlink{namespacexb}{xb}}
-\end{DoxyCompactItemize}
-\doxysubsection*{Macros}
-\begin{DoxyCompactItemize}
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}{XB\+\_\+\+NO\+\_\+\+ERROR}}~0
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_ae687fc7d872ba0475a8477e4447f9b54}{XB\+\_\+\+NO\+\_\+\+MEMORY}}~-\/100
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_af1cd0baf346cad686fa4dd11f700012a}{XB\+\_\+\+INVALID\+\_\+\+OPTION}}~-\/101
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_ac18036408d10e5eee1bf76cf92352b95}{XB\+\_\+\+DUP\+\_\+\+TABLE\+\_\+\+OR\+\_\+\+ALIAS}}~-\/110
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_a13e6876470bd34c8c4e5533f115e04eb}{XB\+\_\+\+INVALID\+\_\+\+NODELINK}}~-\/120
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_ad60dbb1862c0c1c2dc0464cfbfd93a34}{XB\+\_\+\+KEY\+\_\+\+NOT\+\_\+\+UNIQUE}}~-\/121
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_aa2925f035e3b186d7efa14648ea0e86d}{XB\+\_\+\+MEMCPY\+\_\+\+ERROR}}~-\/122
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_a54303a9677dbd5342233f33dd08c64d0}{XB\+\_\+\+FILE\+\_\+\+EXISTS}}~-\/200
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_aa2ff8301503f446c6a5f6510090e520f}{XB\+\_\+\+ALREADY\+\_\+\+OPEN}}~-\/201
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_a8104510b347c87998eadd0b27201e3c2}{XB\+\_\+\+DBF\+\_\+\+FILE\+\_\+\+NOT\+\_\+\+OPEN}}~-\/202
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_ad090af330c93111d12f6de35dbb065bc}{XB\+\_\+\+FILE\+\_\+\+NOT\+\_\+\+FOUND}}~-\/203
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_ab7b9130a5f1df9975cfeaf6241933596}{XB\+\_\+\+FILE\+\_\+\+TYPE\+\_\+\+NOT\+\_\+\+SUPPORTED}}~-\/204
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_a373f30b2efcbbab9f6d060fb3fe8cba3}{XB\+\_\+\+RENAME\+\_\+\+ERROR}}~-\/205
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_a418c047353bc683d0fd6ecbbdd5b7885}{XB\+\_\+\+INVALID\+\_\+\+OBJECT}}~-\/206
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_a9474b400f647bdefbbb07e5177e8d7a1}{XB\+\_\+\+NOT\+\_\+\+OPEN}}~-\/207
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_ac2606659a54111334f5b02861e533700}{XB\+\_\+\+NOT\+\_\+\+FOUND}}~-\/208
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_aaab55236993a1d3acb29206252a904c8}{XB\+\_\+\+OPEN\+\_\+\+ERROR}}~-\/209
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_a030684d5541cf6127a76d81b0684b235}{XB\+\_\+\+CLOSE\+\_\+\+ERROR}}~-\/210
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_a0455ad8719e153b08ec68b10c81e9f41}{XB\+\_\+\+SEEK\+\_\+\+ERROR}}~-\/211
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_adbd40585db8bb748d191f94a33bac710}{XB\+\_\+\+READ\+\_\+\+ERROR}}~-\/212
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_aef34ebe6726057f805d6063130280549}{XB\+\_\+\+WRITE\+\_\+\+ERROR}}~-\/213
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_a8b47031e90c3f86306c7058e4490d3b7}{XB\+\_\+\+EOF}}~-\/214
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_ade5f3a7cf1467d12761e4e21b5e4200f}{XB\+\_\+\+BOF}}~-\/215
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_a1bd22921612389c37f6b2eac438c62c5}{XB\+\_\+\+INVALID\+\_\+\+BLOCK\+\_\+\+SIZE}}~-\/216
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_a4e13b529b486c43ca600ce7d8ddbf3c2}{XB\+\_\+\+INVALID\+\_\+\+BLOCK\+\_\+\+NO}}~-\/217
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_a0fd212f912b2e62700a66bae95bd73a1}{XB\+\_\+\+INVALID\+\_\+\+RECORD}}~-\/218
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_ada15513935d5ede9216f07c0438f34d2}{XB\+\_\+\+DELETE\+\_\+\+FAILED}}~-\/219
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_a53891c95a78483704d2a8e14c4499f92}{XB\+\_\+\+INVALID\+\_\+\+TABLE\+\_\+\+NAME}}~-\/220
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_a18068d0cbe0c7a1b4dd3176220180c29}{XB\+\_\+\+EMPTY}}~-\/221
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_a59f1a8a6aca19595c2d1804349a24850}{XB\+\_\+\+LIMIT\+\_\+\+REACHED}}~-\/222
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_aae9241d91cfb37f5d236128b3bce0a4a}{XB\+\_\+\+BLOCKREAD\+\_\+\+NOT\+\_\+\+ENABLED}}~-\/223
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_af532df74147ce2d872f61abfee49c53e}{XB\+\_\+\+DIRECTORY\+\_\+\+ERROR}}~-\/224
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_a79e2588f067d6e236c0e5a2c0728ba9f}{XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE}}~-\/300
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_a09d6c08a44316f551108a74003efd381}{XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO}}~-\/301
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_afb40bbed323ecb369dd430a2e1242f9a}{XB\+\_\+\+INVALID\+\_\+\+DATA}}~-\/302
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_a59403978784130834cf39434cb73f96e}{XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME}}~-\/303
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_a187c50745f51bfe4aa6f70a92f16c59f}{XB\+\_\+\+INVALID\+\_\+\+MEMO\+\_\+\+FIELD}}~-\/304
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_a34180b2e2bd350ba2ebcdd1335e15d7e}{XB\+\_\+\+INVALID\+\_\+\+FIELD}}~-\/305
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_a7bd322c0efbba17f68ccccd6cf624411}{XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+LEN}}~-\/306
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_a702475500357a27b8a34463be3e11925}{XB\+\_\+\+INVALID\+\_\+\+DATE}}~-\/307
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_ab45735e63c208eb7e6d6df31fd527aec}{XB\+\_\+\+INVALID\+\_\+\+LOCK\+\_\+\+OPTION}}~-\/400
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_a001e24b39e0f155fb1e892f5b1b9cff1}{XB\+\_\+\+LOCK\+\_\+\+FAILED}}~-\/401
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_af6aaf779fddecca521d785666f6dc56b}{XB\+\_\+\+TABLE\+\_\+\+NOT\+\_\+\+LOCKED}}~-\/402
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_aec713cac2b03a0d536a2d16336ae7c0b}{XB\+\_\+\+PARSE\+\_\+\+ERROR}}~-\/500
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_a2b7e5e440dbcf5e6dc885b24dbe28742}{XB\+\_\+\+INVALID\+\_\+\+FUNCTION}}~-\/501
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_a4cedf96581c9cbc9c14d07494143702d}{XB\+\_\+\+INVALID\+\_\+\+PARM}}~-\/502
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_adc4b24bfffa202f8df25409894e547b9}{XB\+\_\+\+INCONSISTENT\+\_\+\+PARM\+\_\+\+LENS}}~-\/503
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_af141ec58b7ca7360e0be6c61d015ea74}{XB\+\_\+\+INCOMPATIBLE\+\_\+\+OPERANDS}}~-\/504
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_aff5646a6b0884ff81004de6961473ea6}{XB\+\_\+\+UNBALANCED\+\_\+\+PARENS}}~-\/505
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_aedfa20a6c4eb9ba3063ba56be8280eac}{XB\+\_\+\+UNBALANCED\+\_\+\+QUOTES}}~-\/506
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_a54db562c3cae97581812b4fccd52b71a}{XB\+\_\+\+INVALID\+\_\+\+EXPRESSION}}~-\/507
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_aec2c0ac2bd62e0329ef130e4fbda39f8}{XB\+\_\+\+INVALID\+\_\+\+KEYNO}}~-\/600
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_acd175ef0541e2cad424791bd87619dd4}{XB\+\_\+\+INVALID\+\_\+\+INDEX}}~-\/601
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_a176d917912d3433f065483f905a4c50a}{XB\+\_\+\+INVALID\+\_\+\+TAG}}~-\/602
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_ad0aba12b5ae2137f8d6abd28b47f95f0}{XB\+\_\+\+INVALID\+\_\+\+PAGE}}~-\/603
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_a5db3a90f215534143bdde81253729c7f}{XB\+\_\+\+SYNTAX\+\_\+\+ERROR}}~-\/700
-\item
-\#define \mbox{\hyperlink{xbretcod_8h_a299419a9c80e000b74bf97a2d24d6a3d}{XB\+\_\+\+MAX\+\_\+\+ERROR\+\_\+\+NO}}~-\/999
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Macro Definition Documentation}
-\mbox{\Hypertarget{xbretcod_8h_aa2ff8301503f446c6a5f6510090e520f}\label{xbretcod_8h_aa2ff8301503f446c6a5f6510090e520f}}
-\index{xbretcod.h@{xbretcod.h}!XB\_ALREADY\_OPEN@{XB\_ALREADY\_OPEN}}
-\index{XB\_ALREADY\_OPEN@{XB\_ALREADY\_OPEN}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_ALREADY\_OPEN}{XB\_ALREADY\_OPEN}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+ALREADY\+\_\+\+OPEN~-\/201}
-
-\mbox{\Hypertarget{xbretcod_8h_aae9241d91cfb37f5d236128b3bce0a4a}\label{xbretcod_8h_aae9241d91cfb37f5d236128b3bce0a4a}}
-\index{xbretcod.h@{xbretcod.h}!XB\_BLOCKREAD\_NOT\_ENABLED@{XB\_BLOCKREAD\_NOT\_ENABLED}}
-\index{XB\_BLOCKREAD\_NOT\_ENABLED@{XB\_BLOCKREAD\_NOT\_ENABLED}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_BLOCKREAD\_NOT\_ENABLED}{XB\_BLOCKREAD\_NOT\_ENABLED}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+BLOCKREAD\+\_\+\+NOT\+\_\+\+ENABLED~-\/223}
-
-\mbox{\Hypertarget{xbretcod_8h_ade5f3a7cf1467d12761e4e21b5e4200f}\label{xbretcod_8h_ade5f3a7cf1467d12761e4e21b5e4200f}}
-\index{xbretcod.h@{xbretcod.h}!XB\_BOF@{XB\_BOF}}
-\index{XB\_BOF@{XB\_BOF}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_BOF}{XB\_BOF}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+BOF~-\/215}
-
-\mbox{\Hypertarget{xbretcod_8h_a030684d5541cf6127a76d81b0684b235}\label{xbretcod_8h_a030684d5541cf6127a76d81b0684b235}}
-\index{xbretcod.h@{xbretcod.h}!XB\_CLOSE\_ERROR@{XB\_CLOSE\_ERROR}}
-\index{XB\_CLOSE\_ERROR@{XB\_CLOSE\_ERROR}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_CLOSE\_ERROR}{XB\_CLOSE\_ERROR}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+CLOSE\+\_\+\+ERROR~-\/210}
-
-\mbox{\Hypertarget{xbretcod_8h_a8104510b347c87998eadd0b27201e3c2}\label{xbretcod_8h_a8104510b347c87998eadd0b27201e3c2}}
-\index{xbretcod.h@{xbretcod.h}!XB\_DBF\_FILE\_NOT\_OPEN@{XB\_DBF\_FILE\_NOT\_OPEN}}
-\index{XB\_DBF\_FILE\_NOT\_OPEN@{XB\_DBF\_FILE\_NOT\_OPEN}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_DBF\_FILE\_NOT\_OPEN}{XB\_DBF\_FILE\_NOT\_OPEN}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+DBF\+\_\+\+FILE\+\_\+\+NOT\+\_\+\+OPEN~-\/202}
-
-\mbox{\Hypertarget{xbretcod_8h_ada15513935d5ede9216f07c0438f34d2}\label{xbretcod_8h_ada15513935d5ede9216f07c0438f34d2}}
-\index{xbretcod.h@{xbretcod.h}!XB\_DELETE\_FAILED@{XB\_DELETE\_FAILED}}
-\index{XB\_DELETE\_FAILED@{XB\_DELETE\_FAILED}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_DELETE\_FAILED}{XB\_DELETE\_FAILED}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+DELETE\+\_\+\+FAILED~-\/219}
-
-\mbox{\Hypertarget{xbretcod_8h_af532df74147ce2d872f61abfee49c53e}\label{xbretcod_8h_af532df74147ce2d872f61abfee49c53e}}
-\index{xbretcod.h@{xbretcod.h}!XB\_DIRECTORY\_ERROR@{XB\_DIRECTORY\_ERROR}}
-\index{XB\_DIRECTORY\_ERROR@{XB\_DIRECTORY\_ERROR}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_DIRECTORY\_ERROR}{XB\_DIRECTORY\_ERROR}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+DIRECTORY\+\_\+\+ERROR~-\/224}
-
-\mbox{\Hypertarget{xbretcod_8h_ac18036408d10e5eee1bf76cf92352b95}\label{xbretcod_8h_ac18036408d10e5eee1bf76cf92352b95}}
-\index{xbretcod.h@{xbretcod.h}!XB\_DUP\_TABLE\_OR\_ALIAS@{XB\_DUP\_TABLE\_OR\_ALIAS}}
-\index{XB\_DUP\_TABLE\_OR\_ALIAS@{XB\_DUP\_TABLE\_OR\_ALIAS}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_DUP\_TABLE\_OR\_ALIAS}{XB\_DUP\_TABLE\_OR\_ALIAS}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+DUP\+\_\+\+TABLE\+\_\+\+OR\+\_\+\+ALIAS~-\/110}
-
-\mbox{\Hypertarget{xbretcod_8h_a18068d0cbe0c7a1b4dd3176220180c29}\label{xbretcod_8h_a18068d0cbe0c7a1b4dd3176220180c29}}
-\index{xbretcod.h@{xbretcod.h}!XB\_EMPTY@{XB\_EMPTY}}
-\index{XB\_EMPTY@{XB\_EMPTY}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_EMPTY}{XB\_EMPTY}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+EMPTY~-\/221}
-
-\mbox{\Hypertarget{xbretcod_8h_a8b47031e90c3f86306c7058e4490d3b7}\label{xbretcod_8h_a8b47031e90c3f86306c7058e4490d3b7}}
-\index{xbretcod.h@{xbretcod.h}!XB\_EOF@{XB\_EOF}}
-\index{XB\_EOF@{XB\_EOF}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_EOF}{XB\_EOF}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+EOF~-\/214}
-
-\mbox{\Hypertarget{xbretcod_8h_a54303a9677dbd5342233f33dd08c64d0}\label{xbretcod_8h_a54303a9677dbd5342233f33dd08c64d0}}
-\index{xbretcod.h@{xbretcod.h}!XB\_FILE\_EXISTS@{XB\_FILE\_EXISTS}}
-\index{XB\_FILE\_EXISTS@{XB\_FILE\_EXISTS}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_FILE\_EXISTS}{XB\_FILE\_EXISTS}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+FILE\+\_\+\+EXISTS~-\/200}
-
-\mbox{\Hypertarget{xbretcod_8h_ad090af330c93111d12f6de35dbb065bc}\label{xbretcod_8h_ad090af330c93111d12f6de35dbb065bc}}
-\index{xbretcod.h@{xbretcod.h}!XB\_FILE\_NOT\_FOUND@{XB\_FILE\_NOT\_FOUND}}
-\index{XB\_FILE\_NOT\_FOUND@{XB\_FILE\_NOT\_FOUND}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_FILE\_NOT\_FOUND}{XB\_FILE\_NOT\_FOUND}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+FILE\+\_\+\+NOT\+\_\+\+FOUND~-\/203}
-
-\mbox{\Hypertarget{xbretcod_8h_ab7b9130a5f1df9975cfeaf6241933596}\label{xbretcod_8h_ab7b9130a5f1df9975cfeaf6241933596}}
-\index{xbretcod.h@{xbretcod.h}!XB\_FILE\_TYPE\_NOT\_SUPPORTED@{XB\_FILE\_TYPE\_NOT\_SUPPORTED}}
-\index{XB\_FILE\_TYPE\_NOT\_SUPPORTED@{XB\_FILE\_TYPE\_NOT\_SUPPORTED}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_FILE\_TYPE\_NOT\_SUPPORTED}{XB\_FILE\_TYPE\_NOT\_SUPPORTED}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+FILE\+\_\+\+TYPE\+\_\+\+NOT\+\_\+\+SUPPORTED~-\/204}
-
-\mbox{\Hypertarget{xbretcod_8h_af141ec58b7ca7360e0be6c61d015ea74}\label{xbretcod_8h_af141ec58b7ca7360e0be6c61d015ea74}}
-\index{xbretcod.h@{xbretcod.h}!XB\_INCOMPATIBLE\_OPERANDS@{XB\_INCOMPATIBLE\_OPERANDS}}
-\index{XB\_INCOMPATIBLE\_OPERANDS@{XB\_INCOMPATIBLE\_OPERANDS}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_INCOMPATIBLE\_OPERANDS}{XB\_INCOMPATIBLE\_OPERANDS}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+INCOMPATIBLE\+\_\+\+OPERANDS~-\/504}
-
-\mbox{\Hypertarget{xbretcod_8h_adc4b24bfffa202f8df25409894e547b9}\label{xbretcod_8h_adc4b24bfffa202f8df25409894e547b9}}
-\index{xbretcod.h@{xbretcod.h}!XB\_INCONSISTENT\_PARM\_LENS@{XB\_INCONSISTENT\_PARM\_LENS}}
-\index{XB\_INCONSISTENT\_PARM\_LENS@{XB\_INCONSISTENT\_PARM\_LENS}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_INCONSISTENT\_PARM\_LENS}{XB\_INCONSISTENT\_PARM\_LENS}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+INCONSISTENT\+\_\+\+PARM\+\_\+\+LENS~-\/503}
-
-\mbox{\Hypertarget{xbretcod_8h_a4e13b529b486c43ca600ce7d8ddbf3c2}\label{xbretcod_8h_a4e13b529b486c43ca600ce7d8ddbf3c2}}
-\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_BLOCK\_NO@{XB\_INVALID\_BLOCK\_NO}}
-\index{XB\_INVALID\_BLOCK\_NO@{XB\_INVALID\_BLOCK\_NO}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_INVALID\_BLOCK\_NO}{XB\_INVALID\_BLOCK\_NO}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+BLOCK\+\_\+\+NO~-\/217}
-
-\mbox{\Hypertarget{xbretcod_8h_a1bd22921612389c37f6b2eac438c62c5}\label{xbretcod_8h_a1bd22921612389c37f6b2eac438c62c5}}
-\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_BLOCK\_SIZE@{XB\_INVALID\_BLOCK\_SIZE}}
-\index{XB\_INVALID\_BLOCK\_SIZE@{XB\_INVALID\_BLOCK\_SIZE}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_INVALID\_BLOCK\_SIZE}{XB\_INVALID\_BLOCK\_SIZE}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+BLOCK\+\_\+\+SIZE~-\/216}
-
-\mbox{\Hypertarget{xbretcod_8h_afb40bbed323ecb369dd430a2e1242f9a}\label{xbretcod_8h_afb40bbed323ecb369dd430a2e1242f9a}}
-\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_DATA@{XB\_INVALID\_DATA}}
-\index{XB\_INVALID\_DATA@{XB\_INVALID\_DATA}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_INVALID\_DATA}{XB\_INVALID\_DATA}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+DATA~-\/302}
-
-\mbox{\Hypertarget{xbretcod_8h_a702475500357a27b8a34463be3e11925}\label{xbretcod_8h_a702475500357a27b8a34463be3e11925}}
-\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_DATE@{XB\_INVALID\_DATE}}
-\index{XB\_INVALID\_DATE@{XB\_INVALID\_DATE}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_INVALID\_DATE}{XB\_INVALID\_DATE}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+DATE~-\/307}
-
-\mbox{\Hypertarget{xbretcod_8h_a54db562c3cae97581812b4fccd52b71a}\label{xbretcod_8h_a54db562c3cae97581812b4fccd52b71a}}
-\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_EXPRESSION@{XB\_INVALID\_EXPRESSION}}
-\index{XB\_INVALID\_EXPRESSION@{XB\_INVALID\_EXPRESSION}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_INVALID\_EXPRESSION}{XB\_INVALID\_EXPRESSION}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+EXPRESSION~-\/507}
-
-\mbox{\Hypertarget{xbretcod_8h_a34180b2e2bd350ba2ebcdd1335e15d7e}\label{xbretcod_8h_a34180b2e2bd350ba2ebcdd1335e15d7e}}
-\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_FIELD@{XB\_INVALID\_FIELD}}
-\index{XB\_INVALID\_FIELD@{XB\_INVALID\_FIELD}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_INVALID\_FIELD}{XB\_INVALID\_FIELD}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+FIELD~-\/305}
-
-\mbox{\Hypertarget{xbretcod_8h_a7bd322c0efbba17f68ccccd6cf624411}\label{xbretcod_8h_a7bd322c0efbba17f68ccccd6cf624411}}
-\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_FIELD\_LEN@{XB\_INVALID\_FIELD\_LEN}}
-\index{XB\_INVALID\_FIELD\_LEN@{XB\_INVALID\_FIELD\_LEN}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_INVALID\_FIELD\_LEN}{XB\_INVALID\_FIELD\_LEN}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+LEN~-\/306}
-
-\mbox{\Hypertarget{xbretcod_8h_a59403978784130834cf39434cb73f96e}\label{xbretcod_8h_a59403978784130834cf39434cb73f96e}}
-\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_FIELD\_NAME@{XB\_INVALID\_FIELD\_NAME}}
-\index{XB\_INVALID\_FIELD\_NAME@{XB\_INVALID\_FIELD\_NAME}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_INVALID\_FIELD\_NAME}{XB\_INVALID\_FIELD\_NAME}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~-\/303}
-
-\mbox{\Hypertarget{xbretcod_8h_a09d6c08a44316f551108a74003efd381}\label{xbretcod_8h_a09d6c08a44316f551108a74003efd381}}
-\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_FIELD\_NO@{XB\_INVALID\_FIELD\_NO}}
-\index{XB\_INVALID\_FIELD\_NO@{XB\_INVALID\_FIELD\_NO}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_INVALID\_FIELD\_NO}{XB\_INVALID\_FIELD\_NO}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~-\/301}
-
-\mbox{\Hypertarget{xbretcod_8h_a79e2588f067d6e236c0e5a2c0728ba9f}\label{xbretcod_8h_a79e2588f067d6e236c0e5a2c0728ba9f}}
-\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_FIELD\_TYPE@{XB\_INVALID\_FIELD\_TYPE}}
-\index{XB\_INVALID\_FIELD\_TYPE@{XB\_INVALID\_FIELD\_TYPE}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_INVALID\_FIELD\_TYPE}{XB\_INVALID\_FIELD\_TYPE}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~-\/300}
-
-\mbox{\Hypertarget{xbretcod_8h_a2b7e5e440dbcf5e6dc885b24dbe28742}\label{xbretcod_8h_a2b7e5e440dbcf5e6dc885b24dbe28742}}
-\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_FUNCTION@{XB\_INVALID\_FUNCTION}}
-\index{XB\_INVALID\_FUNCTION@{XB\_INVALID\_FUNCTION}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_INVALID\_FUNCTION}{XB\_INVALID\_FUNCTION}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+FUNCTION~-\/501}
-
-\mbox{\Hypertarget{xbretcod_8h_acd175ef0541e2cad424791bd87619dd4}\label{xbretcod_8h_acd175ef0541e2cad424791bd87619dd4}}
-\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_INDEX@{XB\_INVALID\_INDEX}}
-\index{XB\_INVALID\_INDEX@{XB\_INVALID\_INDEX}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_INVALID\_INDEX}{XB\_INVALID\_INDEX}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+INDEX~-\/601}
-
-\mbox{\Hypertarget{xbretcod_8h_aec2c0ac2bd62e0329ef130e4fbda39f8}\label{xbretcod_8h_aec2c0ac2bd62e0329ef130e4fbda39f8}}
-\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_KEYNO@{XB\_INVALID\_KEYNO}}
-\index{XB\_INVALID\_KEYNO@{XB\_INVALID\_KEYNO}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_INVALID\_KEYNO}{XB\_INVALID\_KEYNO}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+KEYNO~-\/600}
-
-\mbox{\Hypertarget{xbretcod_8h_ab45735e63c208eb7e6d6df31fd527aec}\label{xbretcod_8h_ab45735e63c208eb7e6d6df31fd527aec}}
-\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_LOCK\_OPTION@{XB\_INVALID\_LOCK\_OPTION}}
-\index{XB\_INVALID\_LOCK\_OPTION@{XB\_INVALID\_LOCK\_OPTION}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_INVALID\_LOCK\_OPTION}{XB\_INVALID\_LOCK\_OPTION}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+LOCK\+\_\+\+OPTION~-\/400}
-
-\mbox{\Hypertarget{xbretcod_8h_a187c50745f51bfe4aa6f70a92f16c59f}\label{xbretcod_8h_a187c50745f51bfe4aa6f70a92f16c59f}}
-\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_MEMO\_FIELD@{XB\_INVALID\_MEMO\_FIELD}}
-\index{XB\_INVALID\_MEMO\_FIELD@{XB\_INVALID\_MEMO\_FIELD}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_INVALID\_MEMO\_FIELD}{XB\_INVALID\_MEMO\_FIELD}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+MEMO\+\_\+\+FIELD~-\/304}
-
-\mbox{\Hypertarget{xbretcod_8h_a13e6876470bd34c8c4e5533f115e04eb}\label{xbretcod_8h_a13e6876470bd34c8c4e5533f115e04eb}}
-\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_NODELINK@{XB\_INVALID\_NODELINK}}
-\index{XB\_INVALID\_NODELINK@{XB\_INVALID\_NODELINK}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_INVALID\_NODELINK}{XB\_INVALID\_NODELINK}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+NODELINK~-\/120}
-
-\mbox{\Hypertarget{xbretcod_8h_a418c047353bc683d0fd6ecbbdd5b7885}\label{xbretcod_8h_a418c047353bc683d0fd6ecbbdd5b7885}}
-\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_OBJECT@{XB\_INVALID\_OBJECT}}
-\index{XB\_INVALID\_OBJECT@{XB\_INVALID\_OBJECT}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_INVALID\_OBJECT}{XB\_INVALID\_OBJECT}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+OBJECT~-\/206}
-
-\mbox{\Hypertarget{xbretcod_8h_af1cd0baf346cad686fa4dd11f700012a}\label{xbretcod_8h_af1cd0baf346cad686fa4dd11f700012a}}
-\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_OPTION@{XB\_INVALID\_OPTION}}
-\index{XB\_INVALID\_OPTION@{XB\_INVALID\_OPTION}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_INVALID\_OPTION}{XB\_INVALID\_OPTION}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+OPTION~-\/101}
-
-\mbox{\Hypertarget{xbretcod_8h_ad0aba12b5ae2137f8d6abd28b47f95f0}\label{xbretcod_8h_ad0aba12b5ae2137f8d6abd28b47f95f0}}
-\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_PAGE@{XB\_INVALID\_PAGE}}
-\index{XB\_INVALID\_PAGE@{XB\_INVALID\_PAGE}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_INVALID\_PAGE}{XB\_INVALID\_PAGE}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+PAGE~-\/603}
-
-\mbox{\Hypertarget{xbretcod_8h_a4cedf96581c9cbc9c14d07494143702d}\label{xbretcod_8h_a4cedf96581c9cbc9c14d07494143702d}}
-\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_PARM@{XB\_INVALID\_PARM}}
-\index{XB\_INVALID\_PARM@{XB\_INVALID\_PARM}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_INVALID\_PARM}{XB\_INVALID\_PARM}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+PARM~-\/502}
-
-\mbox{\Hypertarget{xbretcod_8h_a0fd212f912b2e62700a66bae95bd73a1}\label{xbretcod_8h_a0fd212f912b2e62700a66bae95bd73a1}}
-\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_RECORD@{XB\_INVALID\_RECORD}}
-\index{XB\_INVALID\_RECORD@{XB\_INVALID\_RECORD}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_INVALID\_RECORD}{XB\_INVALID\_RECORD}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+RECORD~-\/218}
-
-\mbox{\Hypertarget{xbretcod_8h_a53891c95a78483704d2a8e14c4499f92}\label{xbretcod_8h_a53891c95a78483704d2a8e14c4499f92}}
-\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_TABLE\_NAME@{XB\_INVALID\_TABLE\_NAME}}
-\index{XB\_INVALID\_TABLE\_NAME@{XB\_INVALID\_TABLE\_NAME}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_INVALID\_TABLE\_NAME}{XB\_INVALID\_TABLE\_NAME}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+TABLE\+\_\+\+NAME~-\/220}
-
-\mbox{\Hypertarget{xbretcod_8h_a176d917912d3433f065483f905a4c50a}\label{xbretcod_8h_a176d917912d3433f065483f905a4c50a}}
-\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_TAG@{XB\_INVALID\_TAG}}
-\index{XB\_INVALID\_TAG@{XB\_INVALID\_TAG}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_INVALID\_TAG}{XB\_INVALID\_TAG}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+TAG~-\/602}
-
-\mbox{\Hypertarget{xbretcod_8h_ad60dbb1862c0c1c2dc0464cfbfd93a34}\label{xbretcod_8h_ad60dbb1862c0c1c2dc0464cfbfd93a34}}
-\index{xbretcod.h@{xbretcod.h}!XB\_KEY\_NOT\_UNIQUE@{XB\_KEY\_NOT\_UNIQUE}}
-\index{XB\_KEY\_NOT\_UNIQUE@{XB\_KEY\_NOT\_UNIQUE}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_KEY\_NOT\_UNIQUE}{XB\_KEY\_NOT\_UNIQUE}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+KEY\+\_\+\+NOT\+\_\+\+UNIQUE~-\/121}
-
-\mbox{\Hypertarget{xbretcod_8h_a59f1a8a6aca19595c2d1804349a24850}\label{xbretcod_8h_a59f1a8a6aca19595c2d1804349a24850}}
-\index{xbretcod.h@{xbretcod.h}!XB\_LIMIT\_REACHED@{XB\_LIMIT\_REACHED}}
-\index{XB\_LIMIT\_REACHED@{XB\_LIMIT\_REACHED}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_LIMIT\_REACHED}{XB\_LIMIT\_REACHED}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+LIMIT\+\_\+\+REACHED~-\/222}
-
-\mbox{\Hypertarget{xbretcod_8h_a001e24b39e0f155fb1e892f5b1b9cff1}\label{xbretcod_8h_a001e24b39e0f155fb1e892f5b1b9cff1}}
-\index{xbretcod.h@{xbretcod.h}!XB\_LOCK\_FAILED@{XB\_LOCK\_FAILED}}
-\index{XB\_LOCK\_FAILED@{XB\_LOCK\_FAILED}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_LOCK\_FAILED}{XB\_LOCK\_FAILED}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+LOCK\+\_\+\+FAILED~-\/401}
-
-\mbox{\Hypertarget{xbretcod_8h_a299419a9c80e000b74bf97a2d24d6a3d}\label{xbretcod_8h_a299419a9c80e000b74bf97a2d24d6a3d}}
-\index{xbretcod.h@{xbretcod.h}!XB\_MAX\_ERROR\_NO@{XB\_MAX\_ERROR\_NO}}
-\index{XB\_MAX\_ERROR\_NO@{XB\_MAX\_ERROR\_NO}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_MAX\_ERROR\_NO}{XB\_MAX\_ERROR\_NO}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+MAX\+\_\+\+ERROR\+\_\+\+NO~-\/999}
-
-\mbox{\Hypertarget{xbretcod_8h_aa2925f035e3b186d7efa14648ea0e86d}\label{xbretcod_8h_aa2925f035e3b186d7efa14648ea0e86d}}
-\index{xbretcod.h@{xbretcod.h}!XB\_MEMCPY\_ERROR@{XB\_MEMCPY\_ERROR}}
-\index{XB\_MEMCPY\_ERROR@{XB\_MEMCPY\_ERROR}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_MEMCPY\_ERROR}{XB\_MEMCPY\_ERROR}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+MEMCPY\+\_\+\+ERROR~-\/122}
-
-\mbox{\Hypertarget{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}\label{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}}
-\index{xbretcod.h@{xbretcod.h}!XB\_NO\_ERROR@{XB\_NO\_ERROR}}
-\index{XB\_NO\_ERROR@{XB\_NO\_ERROR}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_NO\_ERROR}{XB\_NO\_ERROR}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+NO\+\_\+\+ERROR~0}
-
-\mbox{\Hypertarget{xbretcod_8h_ae687fc7d872ba0475a8477e4447f9b54}\label{xbretcod_8h_ae687fc7d872ba0475a8477e4447f9b54}}
-\index{xbretcod.h@{xbretcod.h}!XB\_NO\_MEMORY@{XB\_NO\_MEMORY}}
-\index{XB\_NO\_MEMORY@{XB\_NO\_MEMORY}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_NO\_MEMORY}{XB\_NO\_MEMORY}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+NO\+\_\+\+MEMORY~-\/100}
-
-\mbox{\Hypertarget{xbretcod_8h_ac2606659a54111334f5b02861e533700}\label{xbretcod_8h_ac2606659a54111334f5b02861e533700}}
-\index{xbretcod.h@{xbretcod.h}!XB\_NOT\_FOUND@{XB\_NOT\_FOUND}}
-\index{XB\_NOT\_FOUND@{XB\_NOT\_FOUND}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_NOT\_FOUND}{XB\_NOT\_FOUND}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+NOT\+\_\+\+FOUND~-\/208}
-
-\mbox{\Hypertarget{xbretcod_8h_a9474b400f647bdefbbb07e5177e8d7a1}\label{xbretcod_8h_a9474b400f647bdefbbb07e5177e8d7a1}}
-\index{xbretcod.h@{xbretcod.h}!XB\_NOT\_OPEN@{XB\_NOT\_OPEN}}
-\index{XB\_NOT\_OPEN@{XB\_NOT\_OPEN}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_NOT\_OPEN}{XB\_NOT\_OPEN}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+NOT\+\_\+\+OPEN~-\/207}
-
-\mbox{\Hypertarget{xbretcod_8h_aaab55236993a1d3acb29206252a904c8}\label{xbretcod_8h_aaab55236993a1d3acb29206252a904c8}}
-\index{xbretcod.h@{xbretcod.h}!XB\_OPEN\_ERROR@{XB\_OPEN\_ERROR}}
-\index{XB\_OPEN\_ERROR@{XB\_OPEN\_ERROR}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_OPEN\_ERROR}{XB\_OPEN\_ERROR}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+OPEN\+\_\+\+ERROR~-\/209}
-
-\mbox{\Hypertarget{xbretcod_8h_aec713cac2b03a0d536a2d16336ae7c0b}\label{xbretcod_8h_aec713cac2b03a0d536a2d16336ae7c0b}}
-\index{xbretcod.h@{xbretcod.h}!XB\_PARSE\_ERROR@{XB\_PARSE\_ERROR}}
-\index{XB\_PARSE\_ERROR@{XB\_PARSE\_ERROR}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_PARSE\_ERROR}{XB\_PARSE\_ERROR}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+PARSE\+\_\+\+ERROR~-\/500}
-
-\mbox{\Hypertarget{xbretcod_8h_adbd40585db8bb748d191f94a33bac710}\label{xbretcod_8h_adbd40585db8bb748d191f94a33bac710}}
-\index{xbretcod.h@{xbretcod.h}!XB\_READ\_ERROR@{XB\_READ\_ERROR}}
-\index{XB\_READ\_ERROR@{XB\_READ\_ERROR}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_READ\_ERROR}{XB\_READ\_ERROR}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+READ\+\_\+\+ERROR~-\/212}
-
-\mbox{\Hypertarget{xbretcod_8h_a373f30b2efcbbab9f6d060fb3fe8cba3}\label{xbretcod_8h_a373f30b2efcbbab9f6d060fb3fe8cba3}}
-\index{xbretcod.h@{xbretcod.h}!XB\_RENAME\_ERROR@{XB\_RENAME\_ERROR}}
-\index{XB\_RENAME\_ERROR@{XB\_RENAME\_ERROR}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_RENAME\_ERROR}{XB\_RENAME\_ERROR}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+RENAME\+\_\+\+ERROR~-\/205}
-
-\mbox{\Hypertarget{xbretcod_8h_a0455ad8719e153b08ec68b10c81e9f41}\label{xbretcod_8h_a0455ad8719e153b08ec68b10c81e9f41}}
-\index{xbretcod.h@{xbretcod.h}!XB\_SEEK\_ERROR@{XB\_SEEK\_ERROR}}
-\index{XB\_SEEK\_ERROR@{XB\_SEEK\_ERROR}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_SEEK\_ERROR}{XB\_SEEK\_ERROR}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+SEEK\+\_\+\+ERROR~-\/211}
-
-\mbox{\Hypertarget{xbretcod_8h_a5db3a90f215534143bdde81253729c7f}\label{xbretcod_8h_a5db3a90f215534143bdde81253729c7f}}
-\index{xbretcod.h@{xbretcod.h}!XB\_SYNTAX\_ERROR@{XB\_SYNTAX\_ERROR}}
-\index{XB\_SYNTAX\_ERROR@{XB\_SYNTAX\_ERROR}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_SYNTAX\_ERROR}{XB\_SYNTAX\_ERROR}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+SYNTAX\+\_\+\+ERROR~-\/700}
-
-\mbox{\Hypertarget{xbretcod_8h_af6aaf779fddecca521d785666f6dc56b}\label{xbretcod_8h_af6aaf779fddecca521d785666f6dc56b}}
-\index{xbretcod.h@{xbretcod.h}!XB\_TABLE\_NOT\_LOCKED@{XB\_TABLE\_NOT\_LOCKED}}
-\index{XB\_TABLE\_NOT\_LOCKED@{XB\_TABLE\_NOT\_LOCKED}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_TABLE\_NOT\_LOCKED}{XB\_TABLE\_NOT\_LOCKED}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+TABLE\+\_\+\+NOT\+\_\+\+LOCKED~-\/402}
-
-\mbox{\Hypertarget{xbretcod_8h_aff5646a6b0884ff81004de6961473ea6}\label{xbretcod_8h_aff5646a6b0884ff81004de6961473ea6}}
-\index{xbretcod.h@{xbretcod.h}!XB\_UNBALANCED\_PARENS@{XB\_UNBALANCED\_PARENS}}
-\index{XB\_UNBALANCED\_PARENS@{XB\_UNBALANCED\_PARENS}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_UNBALANCED\_PARENS}{XB\_UNBALANCED\_PARENS}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+UNBALANCED\+\_\+\+PARENS~-\/505}
-
-\mbox{\Hypertarget{xbretcod_8h_aedfa20a6c4eb9ba3063ba56be8280eac}\label{xbretcod_8h_aedfa20a6c4eb9ba3063ba56be8280eac}}
-\index{xbretcod.h@{xbretcod.h}!XB\_UNBALANCED\_QUOTES@{XB\_UNBALANCED\_QUOTES}}
-\index{XB\_UNBALANCED\_QUOTES@{XB\_UNBALANCED\_QUOTES}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_UNBALANCED\_QUOTES}{XB\_UNBALANCED\_QUOTES}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+UNBALANCED\+\_\+\+QUOTES~-\/506}
-
-\mbox{\Hypertarget{xbretcod_8h_aef34ebe6726057f805d6063130280549}\label{xbretcod_8h_aef34ebe6726057f805d6063130280549}}
-\index{xbretcod.h@{xbretcod.h}!XB\_WRITE\_ERROR@{XB\_WRITE\_ERROR}}
-\index{XB\_WRITE\_ERROR@{XB\_WRITE\_ERROR}!xbretcod.h@{xbretcod.h}}
-\doxysubsubsection{\texorpdfstring{XB\_WRITE\_ERROR}{XB\_WRITE\_ERROR}}
-{\footnotesize\ttfamily \#define XB\+\_\+\+WRITE\+\_\+\+ERROR~-\/213}
-
diff --git a/docs/doxygen/latex/xbretcod_8h_source.tex b/docs/doxygen/latex/xbretcod_8h_source.tex
deleted file mode 100644
index 48e4cbd..0000000
--- a/docs/doxygen/latex/xbretcod_8h_source.tex
+++ /dev/null
@@ -1,103 +0,0 @@
-\hypertarget{xbretcod_8h_source}{}\doxysection{xbretcod.\+h}
-\label{xbretcod_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbretcod.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbretcod.h}}
-\mbox{\hyperlink{xbretcod_8h}{Go to the documentation of this file.}}
-\begin{DoxyCode}{0}
-\DoxyCodeLine{1 \textcolor{comment}{/* xbretcod.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,2023 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 \textcolor{preprocessor}{\#ifndef \_\_XB\_RETCODES\_H\_\_}}
-\DoxyCodeLine{17 \textcolor{preprocessor}{\#define \_\_XB\_RETCODES\_H\_\_}}
-\DoxyCodeLine{18 }
-\DoxyCodeLine{19 \textcolor{comment}{/***********************************************/}}
-\DoxyCodeLine{20 \textcolor{comment}{/* Return Codes and Error Messages */}}
-\DoxyCodeLine{21 }
-\DoxyCodeLine{22 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
-\DoxyCodeLine{23 }
-\DoxyCodeLine{24 \textcolor{preprocessor}{ \#define XB\_NO\_ERROR 0 }\textcolor{comment}{// general}}
-\DoxyCodeLine{25 \textcolor{preprocessor}{ \#define XB\_NO\_MEMORY -\/100 }\textcolor{comment}{// general}}
-\DoxyCodeLine{26 \textcolor{preprocessor}{ \#define XB\_INVALID\_OPTION -\/101 }\textcolor{comment}{// general}}
-\DoxyCodeLine{27 \textcolor{preprocessor}{ \#define XB\_DUP\_TABLE\_OR\_ALIAS -\/110 }\textcolor{comment}{// table manager}}
-\DoxyCodeLine{28 \textcolor{preprocessor}{ \#define XB\_INVALID\_NODELINK -\/120 }\textcolor{comment}{// linklist}}
-\DoxyCodeLine{29 \textcolor{preprocessor}{ \#define XB\_KEY\_NOT\_UNIQUE -\/121 }\textcolor{comment}{// linklist}}
-\DoxyCodeLine{30 \textcolor{preprocessor}{ \#define XB\_MEMCPY\_ERROR -\/122 }\textcolor{comment}{// memcpy failure}}
-\DoxyCodeLine{31 }
-\DoxyCodeLine{32 \textcolor{preprocessor}{ \#define XB\_FILE\_EXISTS -\/200 }\textcolor{comment}{// file}}
-\DoxyCodeLine{33 \textcolor{preprocessor}{ \#define XB\_ALREADY\_OPEN -\/201 }\textcolor{comment}{// file}}
-\DoxyCodeLine{34 \textcolor{preprocessor}{ \#define XB\_DBF\_FILE\_NOT\_OPEN -\/202 }\textcolor{comment}{// file}}
-\DoxyCodeLine{35 \textcolor{preprocessor}{ \#define XB\_FILE\_NOT\_FOUND -\/203 }\textcolor{comment}{// file}}
-\DoxyCodeLine{36 \textcolor{preprocessor}{ \#define XB\_FILE\_TYPE\_NOT\_SUPPORTED -\/204 }\textcolor{comment}{// file}}
-\DoxyCodeLine{37 \textcolor{preprocessor}{ \#define XB\_RENAME\_ERROR -\/205 }\textcolor{comment}{// file}}
-\DoxyCodeLine{38 \textcolor{preprocessor}{ \#define XB\_INVALID\_OBJECT -\/206 }\textcolor{comment}{// file}}
-\DoxyCodeLine{39 \textcolor{preprocessor}{ \#define XB\_NOT\_OPEN -\/207 }\textcolor{comment}{// file}}
-\DoxyCodeLine{40 \textcolor{preprocessor}{ \#define XB\_NOT\_FOUND -\/208 }\textcolor{comment}{// file}}
-\DoxyCodeLine{41 \textcolor{preprocessor}{ \#define XB\_OPEN\_ERROR -\/209 }\textcolor{comment}{// file}}
-\DoxyCodeLine{42 \textcolor{preprocessor}{ \#define XB\_CLOSE\_ERROR -\/210 }\textcolor{comment}{// file}}
-\DoxyCodeLine{43 \textcolor{preprocessor}{ \#define XB\_SEEK\_ERROR -\/211 }\textcolor{comment}{// file}}
-\DoxyCodeLine{44 \textcolor{preprocessor}{ \#define XB\_READ\_ERROR -\/212 }\textcolor{comment}{// file}}
-\DoxyCodeLine{45 \textcolor{preprocessor}{ \#define XB\_WRITE\_ERROR -\/213 }\textcolor{comment}{// file}}
-\DoxyCodeLine{46 \textcolor{preprocessor}{ \#define XB\_EOF -\/214 }\textcolor{comment}{// file}}
-\DoxyCodeLine{47 \textcolor{preprocessor}{ \#define XB\_BOF -\/215 }\textcolor{comment}{// file}}
-\DoxyCodeLine{48 \textcolor{preprocessor}{ \#define XB\_INVALID\_BLOCK\_SIZE -\/216 }\textcolor{comment}{// file}}
-\DoxyCodeLine{49 \textcolor{preprocessor}{ \#define XB\_INVALID\_BLOCK\_NO -\/217 }\textcolor{comment}{// file}}
-\DoxyCodeLine{50 \textcolor{preprocessor}{ \#define XB\_INVALID\_RECORD -\/218 }\textcolor{comment}{// file}}
-\DoxyCodeLine{51 \textcolor{preprocessor}{ \#define XB\_DELETE\_FAILED -\/219 }\textcolor{comment}{// file}}
-\DoxyCodeLine{52 \textcolor{preprocessor}{ \#define XB\_INVALID\_TABLE\_NAME -\/220 }\textcolor{comment}{// file}}
-\DoxyCodeLine{53 \textcolor{preprocessor}{ \#define XB\_EMPTY -\/221 }\textcolor{comment}{// file}}
-\DoxyCodeLine{54 \textcolor{preprocessor}{ \#define XB\_LIMIT\_REACHED -\/222 }\textcolor{comment}{// file}}
-\DoxyCodeLine{55 \textcolor{preprocessor}{ \#define XB\_BLOCKREAD\_NOT\_ENABLED -\/223 }\textcolor{comment}{// file}}
-\DoxyCodeLine{56 \textcolor{preprocessor}{ \#define XB\_DIRECTORY\_ERROR -\/224 }\textcolor{comment}{// file}}
-\DoxyCodeLine{57 }
-\DoxyCodeLine{58 \textcolor{preprocessor}{ \#define XB\_INVALID\_FIELD\_TYPE -\/300 }\textcolor{comment}{// field}}
-\DoxyCodeLine{59 \textcolor{preprocessor}{ \#define XB\_INVALID\_FIELD\_NO -\/301 }\textcolor{comment}{// field}}
-\DoxyCodeLine{60 \textcolor{preprocessor}{ \#define XB\_INVALID\_DATA -\/302 }\textcolor{comment}{// field}}
-\DoxyCodeLine{61 \textcolor{preprocessor}{ \#define XB\_INVALID\_FIELD\_NAME -\/303 }\textcolor{comment}{// field}}
-\DoxyCodeLine{62 \textcolor{preprocessor}{ \#define XB\_INVALID\_MEMO\_FIELD -\/304 }\textcolor{comment}{// field}}
-\DoxyCodeLine{63 \textcolor{preprocessor}{ \#define XB\_INVALID\_FIELD -\/305 }\textcolor{comment}{// field}}
-\DoxyCodeLine{64 \textcolor{preprocessor}{ \#define XB\_INVALID\_FIELD\_LEN -\/306 }\textcolor{comment}{// field}}
-\DoxyCodeLine{65 \textcolor{preprocessor}{ \#define XB\_INVALID\_DATE -\/307 }\textcolor{comment}{// date field}}
-\DoxyCodeLine{66 }
-\DoxyCodeLine{67 \textcolor{preprocessor}{ \#define XB\_INVALID\_LOCK\_OPTION -\/400 }\textcolor{comment}{// lock}}
-\DoxyCodeLine{68 \textcolor{preprocessor}{ \#define XB\_LOCK\_FAILED -\/401 }\textcolor{comment}{// lock}}
-\DoxyCodeLine{69 \textcolor{preprocessor}{ \#define XB\_TABLE\_NOT\_LOCKED -\/402 }\textcolor{comment}{// lock -\/ need table locked for operation}}
-\DoxyCodeLine{70 }
-\DoxyCodeLine{71 \textcolor{preprocessor}{ \#define XB\_PARSE\_ERROR -\/500 }\textcolor{comment}{// expression}}
-\DoxyCodeLine{72 \textcolor{preprocessor}{ \#define XB\_INVALID\_FUNCTION -\/501 }\textcolor{comment}{// expression}}
-\DoxyCodeLine{73 \textcolor{preprocessor}{ \#define XB\_INVALID\_PARM -\/502 }\textcolor{comment}{// expression}}
-\DoxyCodeLine{74 \textcolor{preprocessor}{ \#define XB\_INCONSISTENT\_PARM\_LENS -\/503 }\textcolor{comment}{// expression}}
-\DoxyCodeLine{75 \textcolor{preprocessor}{ \#define XB\_INCOMPATIBLE\_OPERANDS -\/504 }\textcolor{comment}{// expression}}
-\DoxyCodeLine{76 \textcolor{preprocessor}{ \#define XB\_UNBALANCED\_PARENS -\/505 }\textcolor{comment}{// expression}}
-\DoxyCodeLine{77 \textcolor{preprocessor}{ \#define XB\_UNBALANCED\_QUOTES -\/506 }\textcolor{comment}{// expression}}
-\DoxyCodeLine{78 \textcolor{preprocessor}{ \#define XB\_INVALID\_EXPRESSION -\/507 }\textcolor{comment}{// expression}}
-\DoxyCodeLine{79 }
-\DoxyCodeLine{80 \textcolor{preprocessor}{ \#define XB\_INVALID\_KEYNO -\/600 }\textcolor{comment}{// index}}
-\DoxyCodeLine{81 \textcolor{preprocessor}{ \#define XB\_INVALID\_INDEX -\/601 }\textcolor{comment}{// index file error}}
-\DoxyCodeLine{82 \textcolor{preprocessor}{ \#define XB\_INVALID\_TAG -\/602 }\textcolor{comment}{// invalid index tag name, must be <= 10 bytes}}
-\DoxyCodeLine{83 \textcolor{preprocessor}{ \#define XB\_INVALID\_PAGE -\/603 }\textcolor{comment}{// invalid index page}}
-\DoxyCodeLine{84 }
-\DoxyCodeLine{85 }
-\DoxyCodeLine{86 \textcolor{preprocessor}{ \#define XB\_SYNTAX\_ERROR -\/700 }\textcolor{comment}{// sql syntax error}}
-\DoxyCodeLine{87 }
-\DoxyCodeLine{88 }
-\DoxyCodeLine{89 \textcolor{preprocessor}{ \#define XB\_MAX\_ERROR\_NO -\/999}}
-\DoxyCodeLine{90 }
-\DoxyCodeLine{91 }
-\DoxyCodeLine{92 \textcolor{comment}{/* when updating this table, also need to update messages in xbssv.cpp */}}
-\DoxyCodeLine{93 }
-\DoxyCodeLine{94 }
-\DoxyCodeLine{95 \} \textcolor{comment}{/* namespace */}}
-\DoxyCodeLine{96 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_RETCODES\_H\_\_ */}\textcolor{preprocessor}{}}
-\DoxyCodeLine{97 }
-
-\end{DoxyCode}
diff --git a/docs/doxygen/latex/xbselect_8cpp.tex b/docs/doxygen/latex/xbselect_8cpp.tex
deleted file mode 100644
index 921de45..0000000
--- a/docs/doxygen/latex/xbselect_8cpp.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-\hypertarget{xbselect_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/sql/xbselect.cpp File Reference}
-\label{xbselect_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbselect.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbselect.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbset_8cpp.tex b/docs/doxygen/latex/xbset_8cpp.tex
deleted file mode 100644
index ea5e5a3..0000000
--- a/docs/doxygen/latex/xbset_8cpp.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-\hypertarget{xbset_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/sql/xbset.cpp File Reference}
-\label{xbset_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbset.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbset.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbsql_8cpp.tex b/docs/doxygen/latex/xbsql_8cpp.tex
deleted file mode 100644
index e6c9503..0000000
--- a/docs/doxygen/latex/xbsql_8cpp.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-\hypertarget{xbsql_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/sql/xbsql.cpp File Reference}
-\label{xbsql_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbsql.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbsql.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbsql_8h.tex b/docs/doxygen/latex/xbsql_8h.tex
deleted file mode 100644
index c1b5903..0000000
--- a/docs/doxygen/latex/xbsql_8h.tex
+++ /dev/null
@@ -1,2 +0,0 @@
-\hypertarget{xbsql_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/include/xbsql.h File Reference}
-\label{xbsql_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbsql.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbsql.h}}
diff --git a/docs/doxygen/latex/xbsql_8h_source.tex b/docs/doxygen/latex/xbsql_8h_source.tex
deleted file mode 100644
index f52325d..0000000
--- a/docs/doxygen/latex/xbsql_8h_source.tex
+++ /dev/null
@@ -1,167 +0,0 @@
-\hypertarget{xbsql_8h_source}{}\doxysection{xbsql.\+h}
-\label{xbsql_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbsql.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbsql.h}}
-\mbox{\hyperlink{xbsql_8h}{Go to the documentation of this file.}}
-\begin{DoxyCode}{0}
-\DoxyCodeLine{1 \textcolor{comment}{/* xbsql.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}{This class manages a list of open tables, open indices are connected to the open tables}}
-\DoxyCodeLine{15 \textcolor{comment}{}}
-\DoxyCodeLine{16 \textcolor{comment}{*/}}
-\DoxyCodeLine{17 }
-\DoxyCodeLine{18 }
-\DoxyCodeLine{19 \textcolor{preprocessor}{\#ifndef \_\_XB\_XBSQL\_H\_\_}}
-\DoxyCodeLine{20 \textcolor{preprocessor}{\#define \_\_XB\_XBSQL\_H\_\_}}
-\DoxyCodeLine{21 }
-\DoxyCodeLine{22 \textcolor{preprocessor}{\#ifdef CMAKE\_COMPILER\_IS\_GNUCC}}
-\DoxyCodeLine{23 \textcolor{preprocessor}{\#pragma interface}}
-\DoxyCodeLine{24 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{25 }
-\DoxyCodeLine{26 }
-\DoxyCodeLine{27 \textcolor{preprocessor}{\#ifdef XB\_SQL\_SUPPORT}}
-\DoxyCodeLine{28 }
-\DoxyCodeLine{29 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
-\DoxyCodeLine{30 }
-\DoxyCodeLine{31 }
-\DoxyCodeLine{32 \textcolor{keyword}{struct }XBDLLEXPORT xbSqlFld\{}
-\DoxyCodeLine{33 \textcolor{keywordtype}{char} cType; \textcolor{comment}{// F -\/ Database field}}
-\DoxyCodeLine{34 \textcolor{comment}{// L -\/ Literal}}
-\DoxyCodeLine{35 \textcolor{comment}{// E -\/ Expression}}
-\DoxyCodeLine{36 xbInt16 iFldNo; \textcolor{comment}{// Field number if db field}}
-\DoxyCodeLine{37 xbExp * pExp; \textcolor{comment}{// If cType=E, pointer to parsed expression}}
-\DoxyCodeLine{38 xbString sFldAlias; \textcolor{comment}{// Alias name for query display}}
-\DoxyCodeLine{39 xbSqlFld * Next; \textcolor{comment}{// Next field in list}}
-\DoxyCodeLine{40 \};}
-\DoxyCodeLine{41 }
-\DoxyCodeLine{42 \textcolor{keyword}{class }xbStmt;}
-\DoxyCodeLine{43 }
-\DoxyCodeLine{44 }
-\DoxyCodeLine{45 \textcolor{keyword}{struct }XBDLLEXPORT xbTblJoin \{ \textcolor{comment}{// structure for defining joined tables in the query}}
-\DoxyCodeLine{46 }
-\DoxyCodeLine{47 xbString sTableName;}
-\DoxyCodeLine{48 xbString sAlias;}
-\DoxyCodeLine{49 xbString sJoinExp; \textcolor{comment}{// table join expression}}
-\DoxyCodeLine{50 \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *pDbf; \textcolor{comment}{// pointer the the dbf structure for this table}}
-\DoxyCodeLine{51 xbTag *pTag; \textcolor{comment}{// pointer to relevant tag for this table, null for record order}}
-\DoxyCodeLine{52 xbExp *pLinkExp; \textcolor{comment}{// pointer to parsed linkage expression}}
-\DoxyCodeLine{53 \textcolor{keywordtype}{char} cJoinType; \textcolor{comment}{// M -\/ Master}}
-\DoxyCodeLine{54 \textcolor{comment}{// L -\/ Left or Full Left}}
-\DoxyCodeLine{55 \textcolor{comment}{// R -\/ Right or Full Right}}
-\DoxyCodeLine{56 \textcolor{comment}{// I -\/ Inner}}
-\DoxyCodeLine{57 \textcolor{comment}{// O -\/ Outer or Full Outer Outer}}
-\DoxyCodeLine{58 }
-\DoxyCodeLine{59 xbTblJoin *pMaster; \textcolor{comment}{// pointer to master table, null if this is the primary master}}
-\DoxyCodeLine{60 xbLinkList<xbTblJoin *> llSubList; \textcolor{comment}{// linked list of subordinate tables}}
-\DoxyCodeLine{61 \textcolor{comment}{// xbStmt *pSubQuery; // pointer to sub query}}
-\DoxyCodeLine{62 xbTblJoin *next; \textcolor{comment}{// next tbl}}
-\DoxyCodeLine{63 \};}
-\DoxyCodeLine{64 }
-\DoxyCodeLine{65 }
-\DoxyCodeLine{66 \textcolor{keyword}{class }XBDLLEXPORT xbStmt : \textcolor{keyword}{public} xbSsv\{}
-\DoxyCodeLine{67 }
-\DoxyCodeLine{68 \textcolor{keyword}{public}:}
-\DoxyCodeLine{69 xbStmt( \mbox{\hyperlink{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}{xbXBase}} *x );}
-\DoxyCodeLine{70 \string~xbStmt();}
-\DoxyCodeLine{71 }
-\DoxyCodeLine{72 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
-\DoxyCodeLine{73 xbInt16 DumpStmtInternals();}
-\DoxyCodeLine{74 xbInt16 Test();}
-\DoxyCodeLine{75 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{76 }
-\DoxyCodeLine{77 xbInt16 ExecuteQuery( \textcolor{keyword}{const} xbString \&sCmdLine ); }
-\DoxyCodeLine{78 }
-\DoxyCodeLine{79 \textcolor{comment}{// xbInt16 FetchFirst();}}
-\DoxyCodeLine{80 \textcolor{comment}{// xbInt16 FetchNext();}}
-\DoxyCodeLine{81 \textcolor{comment}{// xbInt16 FetchPrev();}}
-\DoxyCodeLine{82 \textcolor{comment}{// xbInt16 FetchLast();}}
-\DoxyCodeLine{83 \textcolor{comment}{// xbString \&GetField( const xbString sFldName );}}
-\DoxyCodeLine{84 }
-\DoxyCodeLine{85 \textcolor{keyword}{protected}:}
-\DoxyCodeLine{86 }
-\DoxyCodeLine{87 \textcolor{keyword}{private}:}
-\DoxyCodeLine{88 }
-\DoxyCodeLine{89 xbInt16 AddQryTbl( \textcolor{keyword}{const} xbString \&sTable, \textcolor{keyword}{const} xbString \&sAlias, \textcolor{keyword}{const} xbString \&sExpression, \textcolor{keyword}{const} \textcolor{keywordtype}{char} cJoinType );}
-\DoxyCodeLine{90 xbInt16 CvtSqlExp2DbaseExp( \textcolor{keyword}{const} xbString \&sExpIn, xbString \&sExpOut );}
-\DoxyCodeLine{91 xbInt16 GetNextFromSeg( \textcolor{keyword}{const} xbString \&sLineIn, xbString \&sFromSegOut );}
-\DoxyCodeLine{92 xbUInt32 GetNextToken( \textcolor{keyword}{const} xbString \&sCmdLineIn, xbString \&sTokenOut, xbUInt32 ulStartPos );}
-\DoxyCodeLine{93 xbInt16 GetParenCnt( \textcolor{keyword}{const} xbString \&sToken );}
-\DoxyCodeLine{94 xbInt16 ParseFromStmt( \textcolor{keyword}{const} xbString \&sFromLine );}
-\DoxyCodeLine{95 xbInt16 ParseStmt( \textcolor{keyword}{const} xbString \&sCmdLine );}
-\DoxyCodeLine{96 xbInt16 ProcessFromSeg( \textcolor{keyword}{const} xbString \&sFromStmtSeg );}
-\DoxyCodeLine{97 xbInt16 UpdateJoinList( \textcolor{keywordtype}{char} cType, \textcolor{keyword}{const} xbString \&sTableName, \textcolor{keyword}{const} xbString \&sAlias, \textcolor{keyword}{const} xbString \&sExp, \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *d, xbExp *e ); \textcolor{comment}{//, xbTag *t);}}
-\DoxyCodeLine{98 }
-\DoxyCodeLine{99 \mbox{\hyperlink{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}{xbXBase}} *xbase; \textcolor{comment}{// pointer to xbase structure}}
-\DoxyCodeLine{100 }
-\DoxyCodeLine{101 }
-\DoxyCodeLine{102 xbTblJoin * pTblList;}
-\DoxyCodeLine{103 xbSqlFld *fl; \textcolor{comment}{// field list in sql select statement}}
-\DoxyCodeLine{104 xbString sStmt; \textcolor{comment}{// complete query statment}}
-\DoxyCodeLine{105 xbString sFields; \textcolor{comment}{// list of fields}}
-\DoxyCodeLine{106 xbString sFrom; \textcolor{comment}{// from statment}}
-\DoxyCodeLine{107 xbString sWhere; \textcolor{comment}{// where clause}}
-\DoxyCodeLine{108 xbString sOrderBy; \textcolor{comment}{// sort order}}
-\DoxyCodeLine{109 xbString sGroupBy; \textcolor{comment}{// group by}}
-\DoxyCodeLine{110 xbString sHaving; \textcolor{comment}{// having}}
-\DoxyCodeLine{111 xbUInt32 ulFromPos;}
-\DoxyCodeLine{112 xbUInt32 ulWherePos;}
-\DoxyCodeLine{113 xbUInt32 ulOrderByPos;}
-\DoxyCodeLine{114 xbUInt32 ulGroupByPos;}
-\DoxyCodeLine{115 xbUInt32 ulHavingPos;}
-\DoxyCodeLine{116 }
-\DoxyCodeLine{117 }
-\DoxyCodeLine{118 \};}
-\DoxyCodeLine{119 }
-\DoxyCodeLine{120 }
-\DoxyCodeLine{121 \textcolor{keyword}{class }XBDLLEXPORT xbSql : \textcolor{keyword}{public} xbSsv \{}
-\DoxyCodeLine{122 \textcolor{keyword}{public}:}
-\DoxyCodeLine{123 \textcolor{comment}{// xbSql();}}
-\DoxyCodeLine{124 xbSql( \mbox{\hyperlink{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}{xbXBase}} *x );}
-\DoxyCodeLine{125 \string~xbSql();}
-\DoxyCodeLine{126 }
-\DoxyCodeLine{127 xbInt16 ExecuteNonQuery( \textcolor{keyword}{const} xbString \&sCmdLine );}
-\DoxyCodeLine{128 \mbox{\hyperlink{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}{xbXBase}} *GetXbasePtr() \textcolor{keyword}{const};}
-\DoxyCodeLine{129 }
-\DoxyCodeLine{130 \textcolor{keyword}{protected}:}
-\DoxyCodeLine{131 }
-\DoxyCodeLine{132 \textcolor{keyword}{private}:}
-\DoxyCodeLine{133 }
-\DoxyCodeLine{134 xbInt16 SqlAlterTable( \textcolor{keyword}{const} xbString \&sCmdLine );}
-\DoxyCodeLine{135 xbInt16 SqlCreateTable( \textcolor{keyword}{const} xbString \&sCmdLine );}
-\DoxyCodeLine{136 xbInt16 SqlDelete( \textcolor{keyword}{const} xbString \&sCmdLine );}
-\DoxyCodeLine{137 xbInt16 SqlDropTable( \textcolor{keyword}{const} xbString \&sCmdLine );}
-\DoxyCodeLine{138 }
-\DoxyCodeLine{139 \textcolor{preprocessor}{ \#ifdef XB\_INDEX\_SUPPORT}}
-\DoxyCodeLine{140 xbInt16 SqlCreateIndex( \textcolor{keyword}{const} xbString \&sCmdLine );}
-\DoxyCodeLine{141 xbInt16 SqlDropIndex( \textcolor{keyword}{const} xbString \&sCmdLine );}
-\DoxyCodeLine{142 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INDEX\_SUPPORT}}
-\DoxyCodeLine{143 }
-\DoxyCodeLine{144 \textcolor{comment}{// xbInt16 SqlCreateView( const xbString \&sCmdLine );}}
-\DoxyCodeLine{145 \textcolor{comment}{// xbInt16 SqlDropView( const xbString \&sCmdLine );}}
-\DoxyCodeLine{146 \textcolor{comment}{// xbInt16 SqlUpdate( const xbString \&sCmdLine );}}
-\DoxyCodeLine{147 \textcolor{comment}{// xbInt16 SqlSelect( const xbString \&sCmdLine );}}
-\DoxyCodeLine{148 }
-\DoxyCodeLine{149 \textcolor{keywordtype}{void} SqlHelp() \textcolor{keyword}{const};}
-\DoxyCodeLine{150 xbInt16 SqlInsert( \textcolor{keyword}{const} xbString \&sCmLine );}
-\DoxyCodeLine{151 xbInt16 SqlSet( \textcolor{keyword}{const} xbString \&sCmdLine );}
-\DoxyCodeLine{152 xbInt16 SqlUse( \textcolor{keyword}{const} xbString \&sCmdLine );}
-\DoxyCodeLine{153 }
-\DoxyCodeLine{154 \mbox{\hyperlink{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}{xbXBase}} *xbase;}
-\DoxyCodeLine{155 xbUda uda;}
-\DoxyCodeLine{156 }
-\DoxyCodeLine{157 \};}
-\DoxyCodeLine{158 }
-\DoxyCodeLine{159 \} \textcolor{comment}{/* namespace xb */}}
-\DoxyCodeLine{160 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* XB\_SQL\_SUPPORT */}\textcolor{preprocessor}{}}
-\DoxyCodeLine{161 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_XBSQL\_H\_\_ */}\textcolor{preprocessor}{}}
-
-\end{DoxyCode}
diff --git a/docs/doxygen/latex/xbssv_8cpp.tex b/docs/doxygen/latex/xbssv_8cpp.tex
deleted file mode 100644
index 01484f2..0000000
--- a/docs/doxygen/latex/xbssv_8cpp.tex
+++ /dev/null
@@ -1,13 +0,0 @@
-\hypertarget{xbssv_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/core/xbssv.cpp File Reference}
-\label{xbssv_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbssv.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbssv.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
-\doxysubsection*{Namespaces}
-\begin{DoxyCompactItemize}
-\item
-namespace \mbox{\hyperlink{namespacexb}{xb}}
-\end{DoxyCompactItemize}
-\doxysubsection*{Variables}
-\begin{DoxyCompactItemize}
-\item
-const xb\+Error\+Message \mbox{\hyperlink{namespacexb_a04be228a037d220dd5564f5ef618adcc}{xb\+::xb\+Error\+Messages}} \mbox{[}$\,$\mbox{]}
-\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xbssv_8h.tex b/docs/doxygen/latex/xbssv_8h.tex
deleted file mode 100644
index ebb8ef1..0000000
--- a/docs/doxygen/latex/xbssv_8h.tex
+++ /dev/null
@@ -1,17 +0,0 @@
-\hypertarget{xbssv_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/include/xbssv.h File Reference}
-\label{xbssv_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbssv.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbssv.h}}
-\doxysubsection*{Data Structures}
-\begin{DoxyCompactItemize}
-\item
-class \mbox{\hyperlink{classxb_1_1xbSsv}{xb\+::xb\+Ssv}}
-\begin{DoxyCompactList}\small\item\em Class for handling shared system variables. \end{DoxyCompactList}\end{DoxyCompactItemize}
-\doxysubsection*{Namespaces}
-\begin{DoxyCompactItemize}
-\item
-namespace \mbox{\hyperlink{namespacexb}{xb}}
-\end{DoxyCompactItemize}
-\doxysubsection*{Variables}
-\begin{DoxyCompactItemize}
-\item
-class XBDLLEXPORT \mbox{\hyperlink{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}{xb\+::xb\+XBase}}
-\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xbssv_8h_source.tex b/docs/doxygen/latex/xbssv_8h_source.tex
deleted file mode 100644
index 0ffe764..0000000
--- a/docs/doxygen/latex/xbssv_8h_source.tex
+++ /dev/null
@@ -1,178 +0,0 @@
-\hypertarget{xbssv_8h_source}{}\doxysection{xbssv.\+h}
-\label{xbssv_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbssv.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbssv.h}}
-\mbox{\hyperlink{xbssv_8h}{Go to the documentation of this file.}}
-\begin{DoxyCode}{0}
-\DoxyCodeLine{1 \textcolor{comment}{/* xbssv.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,2023 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\_XBSSV\_H\_\_}}
-\DoxyCodeLine{18 \textcolor{preprocessor}{\#define \_\_XB\_XBSSV\_H\_\_}}
-\DoxyCodeLine{19 }
-\DoxyCodeLine{20 \textcolor{preprocessor}{\#ifdef CMAKE\_COMPILER\_IS\_GNUCC}}
-\DoxyCodeLine{21 \textcolor{preprocessor}{\#pragma interface}}
-\DoxyCodeLine{22 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{23 }
-\DoxyCodeLine{24 }
-\DoxyCodeLine{25 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
-\DoxyCodeLine{26 }
-\DoxyCodeLine{27 \textcolor{keyword}{class }XBDLLEXPORT \mbox{\hyperlink{classxb_1_1xbXBase}{xbXBase}};}
-\DoxyCodeLine{28 }
-\DoxyCodeLine{30 \textcolor{keyword}{struct }XBDLLEXPORT xbErrorMessage\{}
-\DoxyCodeLine{31 xbInt16 iErrorNo;}
-\DoxyCodeLine{32 \textcolor{keyword}{const} \textcolor{keywordtype}{char} *sErrorText;}
-\DoxyCodeLine{33 \};}
-\DoxyCodeLine{35 }
-\DoxyCodeLine{36 }
-\DoxyCodeLine{38 }
-\DoxyCodeLine{49 \textcolor{comment}{// By design, DBase allows mutliple records in a table all having the same key, but only one entry in a unique index}}
-\DoxyCodeLine{50 \textcolor{comment}{// XB\_HALT\_ON\_DUP\_KEY tells the library to not allow appending records which generate duplicate keys in a unique index}}
-\DoxyCodeLine{51 \textcolor{comment}{//}}
-\DoxyCodeLine{52 \textcolor{preprocessor}{\#if defined (XB\_NDX\_SUPPORT) || defined (XB\_MDX\_SUPPORT)}}
-\DoxyCodeLine{53 \textcolor{preprocessor}{\#define XB\_HALT\_ON\_DUPKEY 0}}
-\DoxyCodeLine{54 \textcolor{preprocessor}{\#define XB\_EMULATE\_DBASE 1}}
-\DoxyCodeLine{55 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{56 }
-\DoxyCodeLine{57 }
-\DoxyCodeLine{58 }
-\DoxyCodeLine{59 \textcolor{keyword}{class }XBDLLEXPORT \mbox{\hyperlink{classxb_1_1xbSsv}{xbSsv}}\{}
-\DoxyCodeLine{60 \textcolor{keyword}{public}:}
-\DoxyCodeLine{61 \mbox{\hyperlink{classxb_1_1xbSsv}{xbSsv}}();}
-\DoxyCodeLine{62 \textcolor{keyword}{const} \textcolor{keyword}{static} \textcolor{keywordtype}{char} *ErrorCodeText[];}
-\DoxyCodeLine{63 }
-\DoxyCodeLine{64 \textcolor{keywordtype}{void} DisplayError ( xbInt16 ErrorCode ) \textcolor{keyword}{const};}
-\DoxyCodeLine{65 \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& GetDefaultDateFormat () \textcolor{keyword}{const};}
-\DoxyCodeLine{66 \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& GetDataDirectory () \textcolor{keyword}{const};}
-\DoxyCodeLine{67 xbInt16 GetEndianType () \textcolor{keyword}{const};}
-\DoxyCodeLine{68 }
-\DoxyCodeLine{69 \textcolor{keyword}{const} \textcolor{keywordtype}{char} *GetErrorMessage ( xbInt16 ErrorCode ) \textcolor{keyword}{const};}
-\DoxyCodeLine{70 \textcolor{keywordtype}{void} SetDataDirectory ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sDataDirectory );}
-\DoxyCodeLine{71 \textcolor{keywordtype}{void} SetDefaultDateFormat ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sDefaultDateFormat );}
-\DoxyCodeLine{72 }
-\DoxyCodeLine{73 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} BitSet ( \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} c, xbInt16 iBitNo ) \textcolor{keyword}{const};}
-\DoxyCodeLine{74 \textcolor{keywordtype}{void} BitDump ( \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} c ) \textcolor{keyword}{const};}
-\DoxyCodeLine{75 \textcolor{keywordtype}{void} BitDump ( \textcolor{keywordtype}{char} c ) \textcolor{keyword}{const};}
-\DoxyCodeLine{76 }
-\DoxyCodeLine{77 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetDefaultAutoCommit () \textcolor{keyword}{const};}
-\DoxyCodeLine{78 \textcolor{keywordtype}{void} SetDefaultAutoCommit ( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bDefaultAutoCommit );}
-\DoxyCodeLine{79 }
-\DoxyCodeLine{80 \textcolor{keywordtype}{void} GetHomeDir ( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sHomeDirOut );}
-\DoxyCodeLine{81 }
-\DoxyCodeLine{82 \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& GetLogDirectory () \textcolor{keyword}{const};}
-\DoxyCodeLine{83 \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& GetLogFileName () \textcolor{keyword}{const};}
-\DoxyCodeLine{84 \textcolor{keywordtype}{void} SetLogDirectory ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sLogDirectory );}
-\DoxyCodeLine{85 }
-\DoxyCodeLine{86 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetMultiUser () \textcolor{keyword}{const};}
-\DoxyCodeLine{87 \textcolor{keywordtype}{void} SetMultiUser ( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bMultiUser );}
-\DoxyCodeLine{88 }
-\DoxyCodeLine{89 \textcolor{preprocessor}{ \#if defined (XB\_NDX\_SUPPORT) || defined (XB\_MDX\_SUPPORT)}}
-\DoxyCodeLine{90 xbInt16 GetUniqueKeyOpt () \textcolor{keyword}{const};}
-\DoxyCodeLine{91 xbInt16 SetUniqueKeyOpt ( xbInt16 iUniqueKeyOpt );}
-\DoxyCodeLine{92 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// (XB\_NDX\_SUPPORT) || defined (XB\_MDX\_SUPPORT)}}
-\DoxyCodeLine{93 }
-\DoxyCodeLine{94 \textcolor{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
-\DoxyCodeLine{95 xbInt16 GetDefaultLockRetries () \textcolor{keyword}{const};}
-\DoxyCodeLine{96 \textcolor{keywordtype}{void} SetDefaultLockRetries ( xbInt16 iRetryCount );}
-\DoxyCodeLine{97 xbInt32 GetDefaultLockWait () \textcolor{keyword}{const};}
-\DoxyCodeLine{98 \textcolor{keywordtype}{void} SetDefaultLockWait ( xbInt32 lRetryWait );}
-\DoxyCodeLine{99 xbInt16 GetDefaultLockFlavor () \textcolor{keyword}{const};}
-\DoxyCodeLine{100 \textcolor{keywordtype}{void} SetDefaultLockFlavor ( xbInt16 iLockFlavor );}
-\DoxyCodeLine{101 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetDefaultAutoLock () \textcolor{keyword}{const};}
-\DoxyCodeLine{102 \textcolor{keywordtype}{void} SetDefaultAutoLock ( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bAutoLock );}
-\DoxyCodeLine{103 \textcolor{keywordtype}{void} EnableDefaultAutoLock ();}
-\DoxyCodeLine{104 \textcolor{keywordtype}{void} DisableDefaultAutoLock ();}
-\DoxyCodeLine{105 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_LOCKING\_SUPPORT}}
-\DoxyCodeLine{106 }
-\DoxyCodeLine{107 \textcolor{preprocessor}{ \#ifdef XB\_MDX\_SUPPORT}}
-\DoxyCodeLine{108 xbInt16 GetCreateMdxBlockSize() \textcolor{keyword}{const};}
-\DoxyCodeLine{109 xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );}
-\DoxyCodeLine{110 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_MDX\_SUPPORT}}
-\DoxyCodeLine{111 }
-\DoxyCodeLine{112 \textcolor{preprocessor}{ \#ifdef XB\_BLOCKREAD\_SUPPORT}}
-\DoxyCodeLine{113 xbUInt32 GetDefaultBlockReadSize() \textcolor{keyword}{const};}
-\DoxyCodeLine{114 \textcolor{keywordtype}{void} SetDefaultBlockReadSize( xbUInt32 ulDfltBlockReadSize );}
-\DoxyCodeLine{115 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_BLOCKREAD\_SUPPORT}}
-\DoxyCodeLine{116 }
-\DoxyCodeLine{117 }
-\DoxyCodeLine{118 \textcolor{keyword}{protected}:}
-\DoxyCodeLine{119 }
-\DoxyCodeLine{120 \textcolor{keywordtype}{void} SetEndianType ();}
-\DoxyCodeLine{121 }
-\DoxyCodeLine{122 \textcolor{keyword}{static} xbInt16 \mbox{\hyperlink{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}{iEndianType}}; \textcolor{comment}{// B=Big Endian L=Little Endian}}
-\DoxyCodeLine{123 \textcolor{keyword}{static} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \mbox{\hyperlink{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}{sNullString}}; \textcolor{comment}{// Null String}}
-\DoxyCodeLine{124 }
-\DoxyCodeLine{125 }
-\DoxyCodeLine{126 \textcolor{keyword}{private}:}
-\DoxyCodeLine{127 }
-\DoxyCodeLine{128 \textcolor{keyword}{static} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sDefaultDateFormat;}
-\DoxyCodeLine{129 \textcolor{keyword}{static} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sDataDirectory; \textcolor{comment}{//Data file directory}}
-\DoxyCodeLine{130 }
-\DoxyCodeLine{131 \textcolor{preprocessor}{ \#ifdef XB\_LOGGING\_SUPPORT}}
-\DoxyCodeLine{132 \textcolor{keyword}{static} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sLogDirectory; \textcolor{comment}{//Default location to store log files}}
-\DoxyCodeLine{133 \textcolor{keyword}{static} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sLogFileName; \textcolor{comment}{//Default LogFileName}}
-\DoxyCodeLine{134 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{135 }
-\DoxyCodeLine{136 \textcolor{keyword}{static} xbInt16 iDefaultFileVersion; \textcolor{comment}{// 3 = DBase 3}}
-\DoxyCodeLine{137 \textcolor{comment}{// 4 = DBase 4}}
-\DoxyCodeLine{138 \textcolor{comment}{// default version used in CreateTable command}}
-\DoxyCodeLine{139 \textcolor{comment}{// can be over ridden at the Xbase level, or table level}}
-\DoxyCodeLine{140 \textcolor{comment}{// Different versions can be open simultaneously}}
-\DoxyCodeLine{141 }
-\DoxyCodeLine{142 \textcolor{keyword}{static} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bDefaultAutoCommit; \textcolor{comment}{// Default dbf auto commit switch}}
-\DoxyCodeLine{143 }
-\DoxyCodeLine{144 \textcolor{keyword}{static} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bMultiUser; \textcolor{comment}{// True if multi user mode is turned on}}
-\DoxyCodeLine{145 \textcolor{comment}{// Turn this off for better performance in single user mode}}
-\DoxyCodeLine{146 \textcolor{comment}{// This needs to be turned on or off before any data tables are opened}}
-\DoxyCodeLine{147 \textcolor{comment}{// turning this on after tables are opened, can result in out of date}}
-\DoxyCodeLine{148 \textcolor{comment}{// file buffers if multiple users are sharing the files}}
-\DoxyCodeLine{149 }
-\DoxyCodeLine{150 \textcolor{preprocessor}{\#ifdef XB\_LOCKING\_SUPPORT}}
-\DoxyCodeLine{151 \textcolor{keyword}{static} xbInt32 lDefaultLockWait; \textcolor{comment}{// Number of milliseconds between lock retries}}
-\DoxyCodeLine{152 \textcolor{keyword}{static} xbInt16 iDefaultLockRetries; \textcolor{comment}{// Number of times to retry a lock before conceding}}
-\DoxyCodeLine{153 \textcolor{keyword}{static} xbInt16 bDefaultAutoLock; \textcolor{comment}{// Autolocking enabled?}}
-\DoxyCodeLine{154 \textcolor{keyword}{static} xbInt16 iDefaultLockFlavor; \textcolor{comment}{// 1 = DBase}}
-\DoxyCodeLine{155 \textcolor{comment}{// 2 = Clipper -\/ not developed yet}}
-\DoxyCodeLine{156 \textcolor{comment}{// 3 = FoxPro -\/ not developed yet}}
-\DoxyCodeLine{157 \textcolor{comment}{// 9 = Xbase64 -\/ not developed yet}}
-\DoxyCodeLine{158 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{159 }
-\DoxyCodeLine{160 }
-\DoxyCodeLine{161 \textcolor{preprocessor}{\#if defined (XB\_NDX\_SUPPORT) || defined (XB\_MDX\_SUPPORT)}}
-\DoxyCodeLine{162 }
-\DoxyCodeLine{163 \textcolor{keyword}{static} xbInt16 iUniqueKeyOpt;}
-\DoxyCodeLine{164 }
-\DoxyCodeLine{165 \textcolor{comment}{// is one of:}}
-\DoxyCodeLine{166 \textcolor{comment}{// XB\_HALT\_ON\_DUPKEY}}
-\DoxyCodeLine{167 \textcolor{comment}{// XB\_EMULATE\_DBASE}}
-\DoxyCodeLine{168 }
-\DoxyCodeLine{169 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{170 }
-\DoxyCodeLine{171 }
-\DoxyCodeLine{172 \textcolor{preprocessor}{\#ifdef XB\_MDX\_SUPPORT}}
-\DoxyCodeLine{173 \textcolor{keyword}{static} xbInt16 iCreateMdxBlockSize; \textcolor{comment}{// System level Mdx Block Size}}
-\DoxyCodeLine{174 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_MDX\_SUPPORT}}
-\DoxyCodeLine{175 }
-\DoxyCodeLine{176 }
-\DoxyCodeLine{177 \textcolor{preprocessor}{\#ifdef XB\_BLOCKREAD\_SUPPORT}}
-\DoxyCodeLine{178 \textcolor{keyword}{static} xbUInt32 ulDefaultBlockReadSize;}
-\DoxyCodeLine{179 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_BLOCKREAD\_SUPPORT}}
-\DoxyCodeLine{180 }
-\DoxyCodeLine{181 }
-\DoxyCodeLine{182 \};}
-\DoxyCodeLine{183 }
-\DoxyCodeLine{184 \} \textcolor{comment}{/* namespace xb */}}
-\DoxyCodeLine{185 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_XBSSV\_H\_\_ */}\textcolor{preprocessor}{}}
-
-\end{DoxyCode}
diff --git a/docs/doxygen/latex/xbstmt_8cpp.tex b/docs/doxygen/latex/xbstmt_8cpp.tex
deleted file mode 100644
index b0c7d3b..0000000
--- a/docs/doxygen/latex/xbstmt_8cpp.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-\hypertarget{xbstmt_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/sql/xbstmt.cpp File Reference}
-\label{xbstmt_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbstmt.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbstmt.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbstring_8cpp.tex b/docs/doxygen/latex/xbstring_8cpp.tex
deleted file mode 100644
index b789259..0000000
--- a/docs/doxygen/latex/xbstring_8cpp.tex
+++ /dev/null
@@ -1,13 +0,0 @@
-\hypertarget{xbstring_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/core/xbstring.cpp File Reference}
-\label{xbstring_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbstring.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbstring.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
-\doxysubsection*{Namespaces}
-\begin{DoxyCompactItemize}
-\item
-namespace \mbox{\hyperlink{namespacexb}{xb}}
-\end{DoxyCompactItemize}
-\doxysubsection*{Functions}
-\begin{DoxyCompactItemize}
-\item
-std\+::ostream \& \mbox{\hyperlink{namespacexb_ad27f348219e895c44f74addba8e1889a}{xb\+::operator$<$$<$}} (std\+::ostream \&os, const xb\+String \&s)
-\begin{DoxyCompactList}\small\item\em Stream insertion operator \texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<}. \end{DoxyCompactList}\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xbstring_8h.tex b/docs/doxygen/latex/xbstring_8h.tex
deleted file mode 100644
index 7736618..0000000
--- a/docs/doxygen/latex/xbstring_8h.tex
+++ /dev/null
@@ -1,14 +0,0 @@
-\hypertarget{xbstring_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/include/xbstring.h File Reference}
-\label{xbstring_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbstring.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbstring.h}}
-{\ttfamily \#include $<$stdlib.\+h$>$}\newline
-{\ttfamily \#include $<$iostream$>$}\newline
-\doxysubsection*{Data Structures}
-\begin{DoxyCompactItemize}
-\item
-class \mbox{\hyperlink{classxb_1_1xbString}{xb\+::xb\+String}}
-\begin{DoxyCompactList}\small\item\em Class for handling string data. \end{DoxyCompactList}\end{DoxyCompactItemize}
-\doxysubsection*{Namespaces}
-\begin{DoxyCompactItemize}
-\item
-namespace \mbox{\hyperlink{namespacexb}{xb}}
-\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xbstring_8h_source.tex b/docs/doxygen/latex/xbstring_8h_source.tex
deleted file mode 100644
index fb0f08e..0000000
--- a/docs/doxygen/latex/xbstring_8h_source.tex
+++ /dev/null
@@ -1,172 +0,0 @@
-\hypertarget{xbstring_8h_source}{}\doxysection{xbstring.\+h}
-\label{xbstring_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbstring.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbstring.h}}
-\mbox{\hyperlink{xbstring_8h}{Go to the documentation of this file.}}
-\begin{DoxyCode}{0}
-\DoxyCodeLine{1 \textcolor{comment}{/* xbstring.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 \textcolor{preprocessor}{\#ifndef \_\_XBSTRING\_H\_\_}}
-\DoxyCodeLine{17 \textcolor{preprocessor}{\#define \_\_XBSTRING\_H\_\_}}
-\DoxyCodeLine{18 }
-\DoxyCodeLine{19 \textcolor{preprocessor}{\#ifdef CMAKE\_COMPILER\_IS\_GNUCC}}
-\DoxyCodeLine{20 \textcolor{preprocessor}{\#pragma interface}}
-\DoxyCodeLine{21 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{22 }
-\DoxyCodeLine{23 \textcolor{preprocessor}{\#include <stdlib.h>}}
-\DoxyCodeLine{24 \textcolor{preprocessor}{\#include <iostream>}}
-\DoxyCodeLine{25 }
-\DoxyCodeLine{26 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
-\DoxyCodeLine{27 }
-\DoxyCodeLine{28 }
-\DoxyCodeLine{30 }
-\DoxyCodeLine{50 \textcolor{keyword}{class }XBDLLEXPORT \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \{}
-\DoxyCodeLine{51 }
-\DoxyCodeLine{52 \textcolor{keyword}{public}:}
-\DoxyCodeLine{53 \textcolor{comment}{//Various constructors}}
-\DoxyCodeLine{54 \mbox{\hyperlink{classxb_1_1xbString}{xbString}}(xbUInt32 size);}
-\DoxyCodeLine{55 \mbox{\hyperlink{classxb_1_1xbString}{xbString}}(\textcolor{keywordtype}{char} c);}
-\DoxyCodeLine{56 \mbox{\hyperlink{classxb_1_1xbString}{xbString}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *s, xbUInt32 lMaxLen);}
-\DoxyCodeLine{57 \mbox{\hyperlink{classxb_1_1xbString}{xbString}}(\textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s);}
-\DoxyCodeLine{58 \mbox{\hyperlink{classxb_1_1xbString}{xbString}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char} * = \textcolor{stringliteral}{"{}"{}});}
-\DoxyCodeLine{59 \mbox{\hyperlink{classxb_1_1xbString}{xbString}}( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} d );}
-\DoxyCodeLine{60 \mbox{\hyperlink{classxb_1_1xbString}{\string~xbString}}();}
-\DoxyCodeLine{61 }
-\DoxyCodeLine{62 \textcolor{comment}{//operators}}
-\DoxyCodeLine{63 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&operator= (\textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s);}
-\DoxyCodeLine{64 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&operator= (\textcolor{keyword}{const} \textcolor{keywordtype}{char} *s);}
-\DoxyCodeLine{65 \textcolor{keyword}{operator} \textcolor{keyword}{const} \textcolor{keywordtype}{char} *() \textcolor{keyword}{const};}
-\DoxyCodeLine{66 \textcolor{keywordtype}{char} \&operator[](xbUInt32 n) \textcolor{keyword}{const};}
-\DoxyCodeLine{67 \textcolor{keywordtype}{char} \&operator[](xbInt32 n) \textcolor{keyword}{const};}
-\DoxyCodeLine{68 }
-\DoxyCodeLine{69 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&operator+=(\textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s);}
-\DoxyCodeLine{70 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&operator+=(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *s);}
-\DoxyCodeLine{71 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&operator+=(\textcolor{keywordtype}{char} c);}
-\DoxyCodeLine{72 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&operator-\/=(\textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s);}
-\DoxyCodeLine{73 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&operator-\/=(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *s);}
-\DoxyCodeLine{74 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&operator-\/=(\textcolor{keywordtype}{char} c);}
-\DoxyCodeLine{75 }
-\DoxyCodeLine{76 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator == ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& ) \textcolor{keyword}{const};}
-\DoxyCodeLine{77 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator == ( \textcolor{keyword}{const} \textcolor{keywordtype}{char} * ) \textcolor{keyword}{const};}
-\DoxyCodeLine{78 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator != ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& ) \textcolor{keyword}{const};}
-\DoxyCodeLine{79 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator != ( \textcolor{keyword}{const} \textcolor{keywordtype}{char} * ) \textcolor{keyword}{const};}
-\DoxyCodeLine{80 }
-\DoxyCodeLine{81 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator < ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& ) \textcolor{keyword}{const};}
-\DoxyCodeLine{82 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator > ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& ) \textcolor{keyword}{const};}
-\DoxyCodeLine{83 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator <= ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& ) \textcolor{keyword}{const};}
-\DoxyCodeLine{84 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator >= ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& ) \textcolor{keyword}{const};}
-\DoxyCodeLine{85 }
-\DoxyCodeLine{86 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} operator-\/( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s );}
-\DoxyCodeLine{87 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} operator+( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *s );}
-\DoxyCodeLine{88 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} operator+( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s );}
-\DoxyCodeLine{89 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} operator+( \textcolor{keyword}{const} \textcolor{keywordtype}{char} c );}
-\DoxyCodeLine{90 }
-\DoxyCodeLine{91 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&AddBackSlash( \textcolor{keywordtype}{char} c );}
-\DoxyCodeLine{92 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Append(\textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s);}
-\DoxyCodeLine{93 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Append(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *s);}
-\DoxyCodeLine{94 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Append(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *s, xbUInt32 iByteCount );}
-\DoxyCodeLine{95 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Append(\textcolor{keywordtype}{char} c);}
-\DoxyCodeLine{96 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Assign(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *srcStr, xbUInt32 lStartPos, xbUInt32 lCopyLen );}
-\DoxyCodeLine{97 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Assign(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *srcStr, xbUInt32 lStartPos );}
-\DoxyCodeLine{98 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Assign(\textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s, xbUInt32 pos, xbUInt32 lCopyLen );}
-\DoxyCodeLine{99 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Assign(\textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s, xbUInt32 lCopyLen );}
-\DoxyCodeLine{100 }
-\DoxyCodeLine{101 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} Copy() \textcolor{keyword}{const};}
-\DoxyCodeLine{102 xbUInt32 CountChar( \textcolor{keywordtype}{char} c ) \textcolor{keyword}{const};}
-\DoxyCodeLine{103 xbUInt32 CountChar( \textcolor{keywordtype}{char} c, xbInt16 iOpt ) \textcolor{keyword}{const};}
-\DoxyCodeLine{104 xbInt16 CvtHexChar( \textcolor{keywordtype}{char} \&cOut );}
-\DoxyCodeLine{105 xbInt16 CvtHexString( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
-\DoxyCodeLine{106 xbInt16 CvtULongLong( xbUInt64 \&ullOut );}
-\DoxyCodeLine{107 xbInt16 CvtLongLong( xbInt64 \&llOut );}
-\DoxyCodeLine{108 }
-\DoxyCodeLine{109 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
-\DoxyCodeLine{110 \textcolor{keywordtype}{void} Dump( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *title ) \textcolor{keyword}{const};}
-\DoxyCodeLine{111 \textcolor{keywordtype}{void} Dump( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *title, xbInt16 iOption ) \textcolor{keyword}{const};}
-\DoxyCodeLine{112 \textcolor{keywordtype}{void} DumpHex( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *title ) \textcolor{keyword}{const};}
-\DoxyCodeLine{113 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{114 }
-\DoxyCodeLine{115 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&ExtractElement(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *src, \textcolor{keywordtype}{char} delim, xbUInt32 iCnt, xbInt16 iOpt = 0 );}
-\DoxyCodeLine{116 \textcolor{keywordtype}{char} GetCharacter( xbUInt32 lPos ) \textcolor{keyword}{const};}
-\DoxyCodeLine{117 xbUInt32 GetLastPos(\textcolor{keywordtype}{char} c) \textcolor{keyword}{const};}
-\DoxyCodeLine{118 xbUInt32 GetLastPos(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *s) \textcolor{keyword}{const};}
-\DoxyCodeLine{119 \textcolor{keywordtype}{char} GetPathSeparator() \textcolor{keyword}{const};}
-\DoxyCodeLine{120 xbUInt32 GetSize() \textcolor{keyword}{const};}
-\DoxyCodeLine{121 }
-\DoxyCodeLine{122 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} HasAlphaChars() \textcolor{keyword}{const};}
-\DoxyCodeLine{123 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsEmpty() \textcolor{keyword}{const};}
-\DoxyCodeLine{124 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsNull() \textcolor{keyword}{const};}
-\DoxyCodeLine{125 }
-\DoxyCodeLine{126 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Left( xbUInt32 ulLen );}
-\DoxyCodeLine{127 xbUInt32 Len() \textcolor{keyword}{const}; \textcolor{comment}{// returns the length of the string}}
-\DoxyCodeLine{128 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Ltrim();}
-\DoxyCodeLine{129 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Ltrunc( xbUInt32 ulCnt );}
-\DoxyCodeLine{130 }
-\DoxyCodeLine{131 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Mid(xbUInt32 ulPos, xbUInt32 lLen );}
-\DoxyCodeLine{132 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&PadLeft( \textcolor{keywordtype}{char} c, xbUInt32 ulLen );}
-\DoxyCodeLine{133 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&PadRight( \textcolor{keywordtype}{char} c, xbUInt32 ulLen );}
-\DoxyCodeLine{134 }
-\DoxyCodeLine{135 xbUInt32 Pos(\textcolor{keywordtype}{char} c, xbUInt32 ulStartPos ) \textcolor{keyword}{const};}
-\DoxyCodeLine{136 xbUInt32 Pos(\textcolor{keywordtype}{char} c) \textcolor{keyword}{const};}
-\DoxyCodeLine{137 xbUInt32 Pos(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *s) \textcolor{keyword}{const};}
-\DoxyCodeLine{138 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&PutAt(xbUInt32 ulPos, \textcolor{keywordtype}{char} c);}
-\DoxyCodeLine{139 }
-\DoxyCodeLine{140 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Remove( xbUInt32 ulPos, xbUInt32 ulN );}
-\DoxyCodeLine{141 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Replace( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *sReplace, \textcolor{keyword}{const} \textcolor{keywordtype}{char} *sReplaceWith, xbInt16 iOpt = 0 );}
-\DoxyCodeLine{142 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Resize( xbUInt32 lSize );}
-\DoxyCodeLine{143 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Rtrim();}
-\DoxyCodeLine{144 }
-\DoxyCodeLine{145 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Set( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *s );}
-\DoxyCodeLine{146 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Set( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s );}
-\DoxyCodeLine{147 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Set( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *s, xbUInt32 ulSize );}
-\DoxyCodeLine{148 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&SetNum( xbInt32 lNum );}
-\DoxyCodeLine{149 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Sprintf(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *format, ...);}
-\DoxyCodeLine{150 }
-\DoxyCodeLine{151 \textcolor{keyword}{const} \textcolor{keywordtype}{char} *Str() \textcolor{keyword}{const};}
-\DoxyCodeLine{152 \textcolor{keywordtype}{char} *strncpy( \textcolor{keywordtype}{char} * cDest, xbUInt32 n ) \textcolor{keyword}{const};}
-\DoxyCodeLine{153 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&SwapChars( \textcolor{keywordtype}{char} from, \textcolor{keywordtype}{char} to );}
-\DoxyCodeLine{154 }
-\DoxyCodeLine{155 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&ToLowerCase();}
-\DoxyCodeLine{156 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&ToUpperCase();}
-\DoxyCodeLine{157 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Trim();}
-\DoxyCodeLine{158 }
-\DoxyCodeLine{159 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} ValidLogicalValue() \textcolor{keyword}{const};}
-\DoxyCodeLine{160 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} ValidNumericValue() \textcolor{keyword}{const};}
-\DoxyCodeLine{161 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&ZapChar( \textcolor{keywordtype}{char} c );}
-\DoxyCodeLine{162 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&ZapLeadingChar( \textcolor{keywordtype}{char} c );}
-\DoxyCodeLine{163 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&ZapTrailingChar( \textcolor{keywordtype}{char} c );}
-\DoxyCodeLine{164 }
-\DoxyCodeLine{165 \textcolor{keyword}{friend} std::ostream\& \mbox{\hyperlink{namespacexb_ad27f348219e895c44f74addba8e1889a}{operator<< }}( std::ostream\& os, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& s );}
-\DoxyCodeLine{166 }
-\DoxyCodeLine{167 \textcolor{keyword}{private}:}
-\DoxyCodeLine{168 }
-\DoxyCodeLine{169 \textcolor{keyword}{static} \textcolor{keyword}{const} \textcolor{keywordtype}{char} * NullString;}
-\DoxyCodeLine{170 \textcolor{keyword}{static} \textcolor{keywordtype}{char} cJunkBuf;}
-\DoxyCodeLine{171 }
-\DoxyCodeLine{172 \textcolor{keywordtype}{char} *data; \textcolor{comment}{// pointer to actual string data}}
-\DoxyCodeLine{173 xbUInt32 size; \textcolor{comment}{// size of string plus null terminating byte}}
-\DoxyCodeLine{174 }
-\DoxyCodeLine{175 \textcolor{keywordtype}{void} ctor(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *s);}
-\DoxyCodeLine{176 \textcolor{comment}{// xbUInt32 CalcSprintfBufSize(const char *format, ...);}}
-\DoxyCodeLine{177 }
-\DoxyCodeLine{178 \textcolor{comment}{// char * xb\_realloc( char *pIn, xbUInt32 iLen );}}
-\DoxyCodeLine{179 }
-\DoxyCodeLine{180 \textcolor{comment}{// next routine could result in buffer over runs if used with improperly sized buffers}}
-\DoxyCodeLine{181 \textcolor{keywordtype}{char} * xb\_strcpy ( \textcolor{keywordtype}{char} *target, \textcolor{keyword}{const} \textcolor{keywordtype}{char} *source);}
-\DoxyCodeLine{182 }
-\DoxyCodeLine{183 \};}
-\DoxyCodeLine{184 }
-\DoxyCodeLine{185 \} \textcolor{comment}{/* namespace */}}
-\DoxyCodeLine{186 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XBSTRING\_H\_\_ */}\textcolor{preprocessor}{}}
-
-\end{DoxyCode}
diff --git a/docs/doxygen/latex/xbtag_8cpp.tex b/docs/doxygen/latex/xbtag_8cpp.tex
deleted file mode 100644
index 562d678..0000000
--- a/docs/doxygen/latex/xbtag_8cpp.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-\hypertarget{xbtag_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/core/xbtag.cpp File Reference}
-\label{xbtag_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbtag.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbtag.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbtag_8h.tex b/docs/doxygen/latex/xbtag_8h.tex
deleted file mode 100644
index be28a4a..0000000
--- a/docs/doxygen/latex/xbtag_8h.tex
+++ /dev/null
@@ -1,7 +0,0 @@
-\hypertarget{xbtag_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/include/xbtag.h File Reference}
-\label{xbtag_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbtag.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbtag.h}}
-\doxysubsection*{Namespaces}
-\begin{DoxyCompactItemize}
-\item
-namespace \mbox{\hyperlink{namespacexb}{xb}}
-\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xbtag_8h_source.tex b/docs/doxygen/latex/xbtag_8h_source.tex
deleted file mode 100644
index f15f79d..0000000
--- a/docs/doxygen/latex/xbtag_8h_source.tex
+++ /dev/null
@@ -1,69 +0,0 @@
-\hypertarget{xbtag_8h_source}{}\doxysection{xbtag.\+h}
-\label{xbtag_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbtag.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbtag.h}}
-\mbox{\hyperlink{xbtag_8h}{Go to the documentation of this file.}}
-\begin{DoxyCode}{0}
-\DoxyCodeLine{1 \textcolor{comment}{/* xbtag.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\_XBTAG\_H\_\_}}
-\DoxyCodeLine{18 \textcolor{preprocessor}{\#define \_\_XB\_XBTAG\_H\_\_}}
-\DoxyCodeLine{19 }
-\DoxyCodeLine{20 \textcolor{comment}{//\#ifdef CMAKE\_COMPILER\_IS\_GNUCC}}
-\DoxyCodeLine{21 \textcolor{comment}{//\#pragma interface}}
-\DoxyCodeLine{22 \textcolor{comment}{//\#endif}}
-\DoxyCodeLine{23 }
-\DoxyCodeLine{24 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
-\DoxyCodeLine{25 }
-\DoxyCodeLine{26 }
-\DoxyCodeLine{27 \textcolor{preprocessor}{\#ifdef XB\_INDEX\_SUPPORT}}
-\DoxyCodeLine{28 }
-\DoxyCodeLine{29 \textcolor{keyword}{class }XBDLLEXPORT xbIx;}
-\DoxyCodeLine{30 }
-\DoxyCodeLine{31 }
-\DoxyCodeLine{32 }
-\DoxyCodeLine{34 }
-\DoxyCodeLine{45 \textcolor{keyword}{class }XBDLLEXPORT xbTag \{}
-\DoxyCodeLine{46 }
-\DoxyCodeLine{47 \textcolor{keyword}{public}:}
-\DoxyCodeLine{48 xbTag( xbIx *pIx, \textcolor{keywordtype}{void} *vpTag, xbString \&sType, xbString \&sTagName, xbString \&sExpression, xbString \&sFilter, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bUnique, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bSort );}
-\DoxyCodeLine{49 }
-\DoxyCodeLine{50 xbIx *GetIx() \textcolor{keyword}{const};}
-\DoxyCodeLine{51 \textcolor{keywordtype}{void} *GetVpTag() \textcolor{keyword}{const};}
-\DoxyCodeLine{52 \textcolor{keyword}{const} xbString \&GetType() \textcolor{keyword}{const};}
-\DoxyCodeLine{53 \textcolor{keyword}{const} xbString \&GetTagName() \textcolor{keyword}{const};}
-\DoxyCodeLine{54 \textcolor{keyword}{const} xbString \&GetExpression() \textcolor{keyword}{const};}
-\DoxyCodeLine{55 \textcolor{keyword}{const} xbString \&GetFilter() \textcolor{keyword}{const};}
-\DoxyCodeLine{56 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetUnique() \textcolor{keyword}{const};}
-\DoxyCodeLine{57 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetSort() \textcolor{keyword}{const};}
-\DoxyCodeLine{58 }
-\DoxyCodeLine{59 \textcolor{keyword}{private}:}
-\DoxyCodeLine{60 xbIx *pIx;}
-\DoxyCodeLine{61 \textcolor{keywordtype}{void} *vpTag;}
-\DoxyCodeLine{62 xbString sType;}
-\DoxyCodeLine{63 xbString sTagName;}
-\DoxyCodeLine{64 xbString sExpression;}
-\DoxyCodeLine{65 xbString sFilter;}
-\DoxyCodeLine{66 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bUnique;}
-\DoxyCodeLine{67 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bSort; \textcolor{comment}{// 0 = Ascending, 1 = Descending}}
-\DoxyCodeLine{68 \};}
-\DoxyCodeLine{69 }
-\DoxyCodeLine{70 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_INDEX\_SUPPORT}}
-\DoxyCodeLine{71 }
-\DoxyCodeLine{72 }
-\DoxyCodeLine{73 \} \textcolor{comment}{/* namespace xb */}}
-\DoxyCodeLine{74 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_TAG\_H\_\_ */}\textcolor{preprocessor}{}}
-
-\end{DoxyCode}
diff --git a/docs/doxygen/latex/xbtblmgr_8cpp.tex b/docs/doxygen/latex/xbtblmgr_8cpp.tex
deleted file mode 100644
index 6c3f849..0000000
--- a/docs/doxygen/latex/xbtblmgr_8cpp.tex
+++ /dev/null
@@ -1,8 +0,0 @@
-\hypertarget{xbtblmgr_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/core/xbtblmgr.cpp File Reference}
-\label{xbtblmgr_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbtblmgr.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbtblmgr.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
-\doxysubsection*{Namespaces}
-\begin{DoxyCompactItemize}
-\item
-namespace \mbox{\hyperlink{namespacexb}{xb}}
-\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xbtblmgr_8h.tex b/docs/doxygen/latex/xbtblmgr_8h.tex
deleted file mode 100644
index b53c99a..0000000
--- a/docs/doxygen/latex/xbtblmgr_8h.tex
+++ /dev/null
@@ -1,19 +0,0 @@
-\hypertarget{xbtblmgr_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/include/xbtblmgr.h File Reference}
-\label{xbtblmgr_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbtblmgr.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbtblmgr.h}}
-\doxysubsection*{Data Structures}
-\begin{DoxyCompactItemize}
-\item
-struct \mbox{\hyperlink{structxb_1_1xbTblList}{xb\+::xb\+Tbl\+List}}
-\item
-class \mbox{\hyperlink{classxb_1_1xbTblMgr}{xb\+::xb\+Tbl\+Mgr}}
-\end{DoxyCompactItemize}
-\doxysubsection*{Namespaces}
-\begin{DoxyCompactItemize}
-\item
-namespace \mbox{\hyperlink{namespacexb}{xb}}
-\end{DoxyCompactItemize}
-\doxysubsection*{Variables}
-\begin{DoxyCompactItemize}
-\item
-class XBDLLEXPORT \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xb\+::xb\+Dbf}}
-\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xbtblmgr_8h_source.tex b/docs/doxygen/latex/xbtblmgr_8h_source.tex
deleted file mode 100644
index e735784..0000000
--- a/docs/doxygen/latex/xbtblmgr_8h_source.tex
+++ /dev/null
@@ -1,69 +0,0 @@
-\hypertarget{xbtblmgr_8h_source}{}\doxysection{xbtblmgr.\+h}
-\label{xbtblmgr_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbtblmgr.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbtblmgr.h}}
-\mbox{\hyperlink{xbtblmgr_8h}{Go to the documentation of this file.}}
-\begin{DoxyCode}{0}
-\DoxyCodeLine{1 \textcolor{comment}{/* xbtblmgr.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}{This class manages a list of open tables, open indices are connected to the open tables}}
-\DoxyCodeLine{15 \textcolor{comment}{}}
-\DoxyCodeLine{16 \textcolor{comment}{*/}}
-\DoxyCodeLine{17 }
-\DoxyCodeLine{18 }
-\DoxyCodeLine{19 \textcolor{preprocessor}{\#ifndef \_\_XB\_XBMGR\_H\_\_}}
-\DoxyCodeLine{20 \textcolor{preprocessor}{\#define \_\_XB\_XBMGR\_H\_\_}}
-\DoxyCodeLine{21 }
-\DoxyCodeLine{22 \textcolor{preprocessor}{\#ifdef CMAKE\_COMPILER\_IS\_GNUCC}}
-\DoxyCodeLine{23 \textcolor{preprocessor}{\#pragma interface}}
-\DoxyCodeLine{24 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{25 }
-\DoxyCodeLine{26 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
-\DoxyCodeLine{27 }
-\DoxyCodeLine{28 \textcolor{keyword}{class }XBDLLEXPORT \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}};}
-\DoxyCodeLine{29 }
-\DoxyCodeLine{30 \textcolor{comment}{/* this structure is a linked list of open tables */}}
-\DoxyCodeLine{31 \textcolor{keyword}{struct }XBDLLEXPORT \mbox{\hyperlink{structxb_1_1xbTblList}{xbTblList}}\{}
-\DoxyCodeLine{32 \mbox{\hyperlink{structxb_1_1xbTblList}{xbTblList}} *\mbox{\hyperlink{structxb_1_1xbTblList_a3fd169fcf0fd4df927544e5342db583c}{pNext}};}
-\DoxyCodeLine{33 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} *\mbox{\hyperlink{structxb_1_1xbTblList_aceec65f6f6b585788cf98e8dabd2737d}{psFqTblName}}; \textcolor{comment}{// Fully qualified name of table -\/ same table can be opened multiple times, but must have unique alias}}
-\DoxyCodeLine{34 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} *\mbox{\hyperlink{structxb_1_1xbTblList_a02c3b0c47fd104ef9758b375ecdcfd0f}{psTblName}}; \textcolor{comment}{// Table name without path, without extension}}
-\DoxyCodeLine{35 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} *\mbox{\hyperlink{structxb_1_1xbTblList_ac87742c8a6b1cf2e7e35218e96966a05}{psTblAlias}}; \textcolor{comment}{// TblAliasName must be unique, same as TblNAme if Alias not provided}}
-\DoxyCodeLine{36 \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} *\mbox{\hyperlink{structxb_1_1xbTblList_a387d3f6bbf291a1fb96d276ed9bb96b6}{pDbf}};}
-\DoxyCodeLine{37 \};}
-\DoxyCodeLine{38 }
-\DoxyCodeLine{39 \textcolor{keyword}{class }XBDLLEXPORT \mbox{\hyperlink{classxb_1_1xbTblMgr}{xbTblMgr}} : \textcolor{keyword}{public} \mbox{\hyperlink{classxb_1_1xbSsv}{xbSsv}} \{}
-\DoxyCodeLine{40 \textcolor{keyword}{public}:}
-\DoxyCodeLine{41 \mbox{\hyperlink{classxb_1_1xbTblMgr}{xbTblMgr}}();}
-\DoxyCodeLine{42 \mbox{\hyperlink{classxb_1_1xbTblMgr}{\string~xbTblMgr}}();}
-\DoxyCodeLine{43 xbInt16 AddTblToTblList ( \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} *d, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFqTblName );}
-\DoxyCodeLine{44 xbInt16 AddTblToTblList ( \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} *d, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFqTblName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTblAlias );}
-\DoxyCodeLine{45 xbInt16 DisplayTableList () \textcolor{keyword}{const};}
-\DoxyCodeLine{46 \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} * GetDbfPtr ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTblAlias ) \textcolor{keyword}{const};}
-\DoxyCodeLine{47 \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} * GetDbfPtr ( xbInt16 sItemNo ) \textcolor{keyword}{const};}
-\DoxyCodeLine{48 \mbox{\hyperlink{structxb_1_1xbTblList}{xbTblList}} * GetTblListEntry ( \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} *d );}
-\DoxyCodeLine{49 xbInt16 GetOpenTableCount () \textcolor{keyword}{const};}
-\DoxyCodeLine{50 xbInt16 RemoveTblFromTblList ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTblAlias );}
-\DoxyCodeLine{51 xbInt16 RemoveTblFromTblList ( \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} *d );}
-\DoxyCodeLine{52 }
-\DoxyCodeLine{53 \textcolor{keyword}{protected}:}
-\DoxyCodeLine{54 }
-\DoxyCodeLine{55 \textcolor{keyword}{private}:}
-\DoxyCodeLine{56 \mbox{\hyperlink{structxb_1_1xbTblList}{xbTblList}} * TblList; \textcolor{comment}{// List of open database tables}}
-\DoxyCodeLine{57 xbInt16 iOpenTableCount; \textcolor{comment}{// Number of open tables}}
-\DoxyCodeLine{58 }
-\DoxyCodeLine{59 \};}
-\DoxyCodeLine{60 }
-\DoxyCodeLine{61 \} \textcolor{comment}{/* namespace xb */}}
-\DoxyCodeLine{62 }
-\DoxyCodeLine{63 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_XBMGR\_H\_\_ */}\textcolor{preprocessor}{}}
-
-\end{DoxyCode}
diff --git a/docs/doxygen/latex/xbtypes_8h.tex b/docs/doxygen/latex/xbtypes_8h.tex
deleted file mode 100644
index a198f39..0000000
--- a/docs/doxygen/latex/xbtypes_8h.tex
+++ /dev/null
@@ -1,48 +0,0 @@
-\hypertarget{xbtypes_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/include/xbtypes.h File Reference}
-\label{xbtypes_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbtypes.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbtypes.h}}
-\doxysubsection*{Namespaces}
-\begin{DoxyCompactItemize}
-\item
-namespace \mbox{\hyperlink{namespacexb}{xb}}
-\end{DoxyCompactItemize}
-\doxysubsection*{Macros}
-\begin{DoxyCompactItemize}
-\item
-\#define \mbox{\hyperlink{xbtypes_8h_ab0ae00665298fe7f5292691cb98ec2d9}{xb\+True}}~1
-\item
-\#define \mbox{\hyperlink{xbtypes_8h_adc4b6ca5ad299f63675136d9e03938cc}{xb\+False}}~0
-\item
-\#define \mbox{\hyperlink{xbtypes_8h_a2c65f692ac861990861575e18f72f6eb}{xb\+File\+No}}~fileno
-\end{DoxyCompactItemize}
-\doxysubsection*{Typedefs}
-\begin{DoxyCompactItemize}
-\item
-typedef float \mbox{\hyperlink{namespacexb_a83aa6a550398db55973aa9fb4257e66e}{xb\+::xb\+Float}}
-\item
-typedef double \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+::xb\+Double}}
-\item
-typedef short int \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+::xb\+Bool}}
-\item
-typedef xb\+UInt64 \mbox{\hyperlink{namespacexb_ac963d9fde6debb416303cfbed35fb793}{xb\+::xb\+OffT}}
-\end{DoxyCompactItemize}
-
-
-\doxysubsection{Macro Definition Documentation}
-\mbox{\Hypertarget{xbtypes_8h_adc4b6ca5ad299f63675136d9e03938cc}\label{xbtypes_8h_adc4b6ca5ad299f63675136d9e03938cc}}
-\index{xbtypes.h@{xbtypes.h}!xbFalse@{xbFalse}}
-\index{xbFalse@{xbFalse}!xbtypes.h@{xbtypes.h}}
-\doxysubsubsection{\texorpdfstring{xbFalse}{xbFalse}}
-{\footnotesize\ttfamily \#define xb\+False~0}
-
-\mbox{\Hypertarget{xbtypes_8h_a2c65f692ac861990861575e18f72f6eb}\label{xbtypes_8h_a2c65f692ac861990861575e18f72f6eb}}
-\index{xbtypes.h@{xbtypes.h}!xbFileNo@{xbFileNo}}
-\index{xbFileNo@{xbFileNo}!xbtypes.h@{xbtypes.h}}
-\doxysubsubsection{\texorpdfstring{xbFileNo}{xbFileNo}}
-{\footnotesize\ttfamily \#define xb\+File\+No~fileno}
-
-\mbox{\Hypertarget{xbtypes_8h_ab0ae00665298fe7f5292691cb98ec2d9}\label{xbtypes_8h_ab0ae00665298fe7f5292691cb98ec2d9}}
-\index{xbtypes.h@{xbtypes.h}!xbTrue@{xbTrue}}
-\index{xbTrue@{xbTrue}!xbtypes.h@{xbtypes.h}}
-\doxysubsubsection{\texorpdfstring{xbTrue}{xbTrue}}
-{\footnotesize\ttfamily \#define xb\+True~1}
-
diff --git a/docs/doxygen/latex/xbtypes_8h_source.tex b/docs/doxygen/latex/xbtypes_8h_source.tex
deleted file mode 100644
index c6e7a1d..0000000
--- a/docs/doxygen/latex/xbtypes_8h_source.tex
+++ /dev/null
@@ -1,61 +0,0 @@
-\hypertarget{xbtypes_8h_source}{}\doxysection{xbtypes.\+h}
-\label{xbtypes_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbtypes.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbtypes.h}}
-\mbox{\hyperlink{xbtypes_8h}{Go to the documentation of this file.}}
-\begin{DoxyCode}{0}
-\DoxyCodeLine{1 \textcolor{comment}{/* xbtypes.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 \textcolor{preprocessor}{\#ifndef \_\_XB\_XTYPES\_H\_\_}}
-\DoxyCodeLine{17 \textcolor{preprocessor}{\#define \_\_XB\_XTYPES\_H\_\_}}
-\DoxyCodeLine{18 }
-\DoxyCodeLine{19 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
-\DoxyCodeLine{20 }
-\DoxyCodeLine{21 }
-\DoxyCodeLine{22 \textcolor{keyword}{typedef} \textcolor{keywordtype}{float} \mbox{\hyperlink{namespacexb_a83aa6a550398db55973aa9fb4257e66e}{xbFloat}};}
-\DoxyCodeLine{23 \textcolor{keyword}{typedef} \textcolor{keywordtype}{double} \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}};}
-\DoxyCodeLine{24 \textcolor{keyword}{typedef} \textcolor{keywordtype}{short} \textcolor{keywordtype}{int} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}};}
-\DoxyCodeLine{25 \textcolor{keyword}{typedef} xbUInt64 \mbox{\hyperlink{namespacexb_ac963d9fde6debb416303cfbed35fb793}{xbOffT}};}
-\DoxyCodeLine{26 }
-\DoxyCodeLine{27 }
-\DoxyCodeLine{28 \textcolor{preprocessor}{\#define xbTrue 1}}
-\DoxyCodeLine{29 \textcolor{preprocessor}{\#define xbFalse 0}}
-\DoxyCodeLine{30 }
-\DoxyCodeLine{31 }
-\DoxyCodeLine{32 \textcolor{preprocessor}{\#ifdef HAVE\_\_FILENO\_F}}
-\DoxyCodeLine{33 \textcolor{preprocessor}{ \#define xbFileNo \_fileno}}
-\DoxyCodeLine{34 \textcolor{preprocessor}{\#else}}
-\DoxyCodeLine{35 \textcolor{preprocessor}{ \#define xbFileNo fileno}}
-\DoxyCodeLine{36 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{37 }
-\DoxyCodeLine{38 \textcolor{preprocessor}{\#ifdef XB\_LOCKING\_SUPPORT}}
-\DoxyCodeLine{39 \textcolor{preprocessor}{ \#if defined( HAVE\_LONG\_LONG )}}
-\DoxyCodeLine{40 \textcolor{preprocessor}{ \#define LK4026531839 4026531839LL}}
-\DoxyCodeLine{41 \textcolor{preprocessor}{ \#define LK4026531838 4026531838LL}}
-\DoxyCodeLine{42 \textcolor{preprocessor}{ \#define LK3026531838 3026531838LL}}
-\DoxyCodeLine{43 \textcolor{preprocessor}{ \#define LK1000000000 1000000000LL}}
-\DoxyCodeLine{44 \textcolor{preprocessor}{ \#else}}
-\DoxyCodeLine{45 \textcolor{preprocessor}{ \#define LK4026531839 4026531839L}}
-\DoxyCodeLine{46 \textcolor{preprocessor}{ \#define LK4026531838 4026531838L}}
-\DoxyCodeLine{47 \textcolor{preprocessor}{ \#define LK3026531838 3026531838L}}
-\DoxyCodeLine{48 \textcolor{preprocessor}{ \#define LK1000000000 1000000000L}}
-\DoxyCodeLine{49 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{50 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{51 }
-\DoxyCodeLine{52 }
-\DoxyCodeLine{53 }
-\DoxyCodeLine{54 \} \textcolor{comment}{/* namespace */}}
-\DoxyCodeLine{55 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_XTYPES\_H\_\_ */}\textcolor{preprocessor}{}}
-
-\end{DoxyCode}
diff --git a/docs/doxygen/latex/xbuda_8cpp.tex b/docs/doxygen/latex/xbuda_8cpp.tex
deleted file mode 100644
index 63b3515..0000000
--- a/docs/doxygen/latex/xbuda_8cpp.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-\hypertarget{xbuda_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/core/xbuda.cpp File Reference}
-\label{xbuda_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbuda.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbuda.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbuda_8h.tex b/docs/doxygen/latex/xbuda_8h.tex
deleted file mode 100644
index 19d5f8e..0000000
--- a/docs/doxygen/latex/xbuda_8h.tex
+++ /dev/null
@@ -1,2 +0,0 @@
-\hypertarget{xbuda_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/include/xbuda.h File Reference}
-\label{xbuda_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbuda.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbuda.h}}
diff --git a/docs/doxygen/latex/xbuda_8h_source.tex b/docs/doxygen/latex/xbuda_8h_source.tex
deleted file mode 100644
index eb5a738..0000000
--- a/docs/doxygen/latex/xbuda_8h_source.tex
+++ /dev/null
@@ -1,58 +0,0 @@
-\hypertarget{xbuda_8h_source}{}\doxysection{xbuda.\+h}
-\label{xbuda_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbuda.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbuda.h}}
-\mbox{\hyperlink{xbuda_8h}{Go to the documentation of this file.}}
-\begin{DoxyCode}{0}
-\DoxyCodeLine{1 \textcolor{comment}{/* xbuda.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,2023 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}{This class manages the user data area (UDA)}}
-\DoxyCodeLine{15 \textcolor{comment}{}}
-\DoxyCodeLine{16 \textcolor{comment}{*/}}
-\DoxyCodeLine{17 }
-\DoxyCodeLine{18 }
-\DoxyCodeLine{19 \textcolor{preprocessor}{\#ifndef \_\_XB\_XBUDA\_H\_\_}}
-\DoxyCodeLine{20 \textcolor{preprocessor}{\#define \_\_XB\_XBUDA\_H\_\_}}
-\DoxyCodeLine{21 }
-\DoxyCodeLine{22 \textcolor{preprocessor}{\#ifdef CMAKE\_COMPILER\_IS\_GNUCC}}
-\DoxyCodeLine{23 \textcolor{preprocessor}{\#pragma interface}}
-\DoxyCodeLine{24 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{25 }
-\DoxyCodeLine{26 }
-\DoxyCodeLine{27 \textcolor{preprocessor}{\#ifdef XB\_EXPRESSION\_SUPPORT}}
-\DoxyCodeLine{28 }
-\DoxyCodeLine{29 }
-\DoxyCodeLine{30 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
-\DoxyCodeLine{31 }
-\DoxyCodeLine{32 \textcolor{keyword}{class }XBDLLEXPORT xbUda \{}
-\DoxyCodeLine{33 }
-\DoxyCodeLine{34 \textcolor{keyword}{public}:}
-\DoxyCodeLine{35 xbUda();}
-\DoxyCodeLine{36 \string~xbUda();}
-\DoxyCodeLine{37 }
-\DoxyCodeLine{38 xbInt16 AddTokenForKey( \textcolor{keyword}{const} xbString \&sKey, \textcolor{keyword}{const} xbString \&sToken );}
-\DoxyCodeLine{39 \textcolor{keywordtype}{void} Clear();}
-\DoxyCodeLine{40 xbInt16 DelTokenForKey( \textcolor{keyword}{const} xbString \&sKey );}
-\DoxyCodeLine{41 xbInt16 GetTokenCnt() \textcolor{keyword}{const};}
-\DoxyCodeLine{42 xbInt16 GetTokenForKey( \textcolor{keyword}{const} xbString \&sKey, xbString \&sData );}
-\DoxyCodeLine{43 xbInt16 UpdTokenForKey( \textcolor{keyword}{const} xbString \&sKey, \textcolor{keyword}{const} xbString \&sToken );}
-\DoxyCodeLine{44 \textcolor{keywordtype}{void} DumpUda() \textcolor{keyword}{const};}
-\DoxyCodeLine{45 }
-\DoxyCodeLine{46 \textcolor{keyword}{private}:}
-\DoxyCodeLine{47 xbLinkListOrd<xbString> llOrd;}
-\DoxyCodeLine{48 }
-\DoxyCodeLine{49 \};}
-\DoxyCodeLine{50 \} \textcolor{comment}{/* namespace */}}
-\DoxyCodeLine{51 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* XB\_EXPRESSION\_SUPPORT */}\textcolor{preprocessor}{}}
-\DoxyCodeLine{52 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XBUDA\_H\_\_ */}\textcolor{preprocessor}{}}
-
-\end{DoxyCode}
diff --git a/docs/doxygen/latex/xbxbase_8cpp.tex b/docs/doxygen/latex/xbxbase_8cpp.tex
deleted file mode 100644
index 97797d5..0000000
--- a/docs/doxygen/latex/xbxbase_8cpp.tex
+++ /dev/null
@@ -1,8 +0,0 @@
-\hypertarget{xbxbase_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/core/xbxbase.cpp File Reference}
-\label{xbxbase_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbxbase.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbxbase.cpp}}
-{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
-\doxysubsection*{Namespaces}
-\begin{DoxyCompactItemize}
-\item
-namespace \mbox{\hyperlink{namespacexb}{xb}}
-\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xbxbase_8h.tex b/docs/doxygen/latex/xbxbase_8h.tex
deleted file mode 100644
index 12bb276..0000000
--- a/docs/doxygen/latex/xbxbase_8h.tex
+++ /dev/null
@@ -1,17 +0,0 @@
-\hypertarget{xbxbase_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/include/xbxbase.h File Reference}
-\label{xbxbase_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbxbase.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbxbase.h}}
-\doxysubsection*{Data Structures}
-\begin{DoxyCompactItemize}
-\item
-class \mbox{\hyperlink{classxb_1_1xbXBase}{xb\+::xb\+XBase}}
-\begin{DoxyCompactList}\small\item\em xb\+Xbase class. \end{DoxyCompactList}\end{DoxyCompactItemize}
-\doxysubsection*{Namespaces}
-\begin{DoxyCompactItemize}
-\item
-namespace \mbox{\hyperlink{namespacexb}{xb}}
-\end{DoxyCompactItemize}
-\doxysubsection*{Variables}
-\begin{DoxyCompactItemize}
-\item
-class XBDLLEXPORT \mbox{\hyperlink{namespacexb_a4a31fbe9110c9e55495ce71e642d785c}{xb\+::xb\+Log}}
-\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xbxbase_8h_source.tex b/docs/doxygen/latex/xbxbase_8h_source.tex
deleted file mode 100644
index 5b803b6..0000000
--- a/docs/doxygen/latex/xbxbase_8h_source.tex
+++ /dev/null
@@ -1,232 +0,0 @@
-\hypertarget{xbxbase_8h_source}{}\doxysection{xbxbase.\+h}
-\label{xbxbase_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbxbase.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbxbase.h}}
-\mbox{\hyperlink{xbxbase_8h}{Go to the documentation of this file.}}
-\begin{DoxyCode}{0}
-\DoxyCodeLine{1 \textcolor{comment}{/* xbxbase.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,2023 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\_XBDBLIST\_H\_\_}}
-\DoxyCodeLine{18 \textcolor{preprocessor}{\#define \_\_XB\_XBDBLIST\_H\_\_}}
-\DoxyCodeLine{19 }
-\DoxyCodeLine{20 \textcolor{preprocessor}{\#ifdef CMAKE\_COMPILER\_IS\_GNUCC}}
-\DoxyCodeLine{21 \textcolor{preprocessor}{\#pragma interface}}
-\DoxyCodeLine{22 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{23 }
-\DoxyCodeLine{24 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
-\DoxyCodeLine{25 }
-\DoxyCodeLine{26 \textcolor{keyword}{class }XBDLLEXPORT \mbox{\hyperlink{namespacexb_a4a31fbe9110c9e55495ce71e642d785c}{xbLog}};}
-\DoxyCodeLine{27 }
-\DoxyCodeLine{28 \textcolor{comment}{/************************************************************************/}}
-\DoxyCodeLine{29 \textcolor{comment}{/* }}
-\DoxyCodeLine{30 \textcolor{comment}{ Xbase functions}}
-\DoxyCodeLine{31 \textcolor{comment}{}}
-\DoxyCodeLine{32 \textcolor{comment}{ Min Parm Count is the minimum number of input parms needed by the function}}
-\DoxyCodeLine{33 \textcolor{comment}{}}
-\DoxyCodeLine{34 \textcolor{comment}{ Return Type}}
-\DoxyCodeLine{35 \textcolor{comment}{ C Char or string}}
-\DoxyCodeLine{36 \textcolor{comment}{ D Date}}
-\DoxyCodeLine{37 \textcolor{comment}{ L Logical}}
-\DoxyCodeLine{38 \textcolor{comment}{ N Numeric}}
-\DoxyCodeLine{39 \textcolor{comment}{ 1 Varies -\/ pull return type from first sibling}}
-\DoxyCodeLine{40 \textcolor{comment}{ 2 Varies -\/ pull return type from second sibling}}
-\DoxyCodeLine{41 \textcolor{comment}{*/}}
-\DoxyCodeLine{42 }
-\DoxyCodeLine{43 \textcolor{preprocessor}{\#ifdef XB\_FUNCTION\_SUPPORT}}
-\DoxyCodeLine{44 }
-\DoxyCodeLine{45 \textcolor{comment}{/*}}
-\DoxyCodeLine{46 \textcolor{comment}{struct XBDLLEXPORT xbFunctionInfo \{}}
-\DoxyCodeLine{47 \textcolor{comment}{ const char * FuncName; // function name}}
-\DoxyCodeLine{48 \textcolor{comment}{ char ReturnType; // return type of function}}
-\DoxyCodeLine{49 \textcolor{comment}{ xbInt16 iReturnLenCalc; // used to calculate the function return value is}}
-\DoxyCodeLine{50 \textcolor{comment}{ // 1 = use value specified in iReturnLenVal}}
-\DoxyCodeLine{51 \textcolor{comment}{ // 2 = use length of operand specified in col 4}}
-\DoxyCodeLine{52 \textcolor{comment}{ // 3 = use valued of numeric operand specified in col 4}}
-\DoxyCodeLine{53 \textcolor{comment}{ // 4 = length of parm 1 * numeric value parm}}
-\DoxyCodeLine{54 \textcolor{comment}{ // 5 = larger length of parm 2 or length of parm 3}}
-\DoxyCodeLine{55 \textcolor{comment}{ // 6 = if two or more parms, use numeric value from second parm,}}
-\DoxyCodeLine{56 \textcolor{comment}{ // otherwise use col4 value}}
-\DoxyCodeLine{57 \textcolor{comment}{ xbInt16 iReturnLenVal; // Used in combination with iReturnLenCalc}}
-\DoxyCodeLine{58 \textcolor{comment}{}}
-\DoxyCodeLine{59 \textcolor{comment}{\};}}
-\DoxyCodeLine{60 \textcolor{comment}{*/}}
-\DoxyCodeLine{61 \textcolor{comment}{/*}}
-\DoxyCodeLine{62 \textcolor{comment}{static xbFunctionInfo FunctionList[] =}}
-\DoxyCodeLine{63 \textcolor{comment}{// Func Return -\/Rtrn Len-\/}}
-\DoxyCodeLine{64 \textcolor{comment}{// Name Type -\/Calc Val-\/}}
-\DoxyCodeLine{65 \textcolor{comment}{\{}}
-\DoxyCodeLine{66 \textcolor{comment}{ \{ "{}ABS"{}, 'N', 1, 4 \},}}
-\DoxyCodeLine{67 \textcolor{comment}{ \{ "{}ALLTRIM"{}, 'C', 2, 1 \},}}
-\DoxyCodeLine{68 \textcolor{comment}{ \{ "{}ASC"{}, 'N', 1, 4 \},}}
-\DoxyCodeLine{69 \textcolor{comment}{ \{ "{}AT"{}, 'N', 1, 4 \},}}
-\DoxyCodeLine{70 \textcolor{comment}{ \{ "{}CDOW"{}, 'C', 1, 9 \},}}
-\DoxyCodeLine{71 \textcolor{comment}{ \{ "{}CHR"{}, 'C', 1, 1 \},}}
-\DoxyCodeLine{72 \textcolor{comment}{ \{ "{}CMONTH"{}, 'C', 1, 9 \},}}
-\DoxyCodeLine{73 \textcolor{comment}{ \{ "{}CTOD"{}, 'D', 1, 8 \},}}
-\DoxyCodeLine{74 \textcolor{comment}{ \{ "{}DATE"{}, 'D', 1, 8 \},}}
-\DoxyCodeLine{75 \textcolor{comment}{ \{ "{}DAY"{}, 'N', 1, 4 \},}}
-\DoxyCodeLine{76 \textcolor{comment}{ \{ "{}DEL"{}, 'C', 1, 1 \},}}
-\DoxyCodeLine{77 \textcolor{comment}{ \{ "{}DELETED"{}, 'L', 1, 1 \},}}
-\DoxyCodeLine{78 \textcolor{comment}{ \{ "{}DESCEND"{}, '1', 2, 1 \},}}
-\DoxyCodeLine{79 \textcolor{comment}{ \{ "{}DOW"{}, 'N', 1, 4 \},}}
-\DoxyCodeLine{80 \textcolor{comment}{ \{ "{}DTOC"{}, 'C', 1, 8 \},}}
-\DoxyCodeLine{81 \textcolor{comment}{ \{ "{}DTOS"{}, 'C', 1, 8 \},}}
-\DoxyCodeLine{82 \textcolor{comment}{ \{ "{}EXP"{}, 'N', 1, 4 \},}}
-\DoxyCodeLine{83 \textcolor{comment}{ \{ "{}IIF"{}, 'C', 5, 0 \},}}
-\DoxyCodeLine{84 \textcolor{comment}{ \{ "{}INT"{}, 'N', 1, 4 \},}}
-\DoxyCodeLine{85 \textcolor{comment}{ \{ "{}ISALPHA"{}, 'L', 1, 1 \},}}
-\DoxyCodeLine{86 \textcolor{comment}{ \{ "{}ISLOWER"{}, 'L', 1, 1 \},}}
-\DoxyCodeLine{87 \textcolor{comment}{ \{ "{}ISUPPER"{}, 'L', 1, 1 \},}}
-\DoxyCodeLine{88 \textcolor{comment}{ \{ "{}LEFT"{}, 'C', 3, 2 \},}}
-\DoxyCodeLine{89 \textcolor{comment}{ \{ "{}LEN"{}, 'N', 1, 4 \},}}
-\DoxyCodeLine{90 \textcolor{comment}{ \{ "{}LOG"{}, 'N', 1, 4 \},}}
-\DoxyCodeLine{91 \textcolor{comment}{ \{ "{}LOWER"{}, 'C', 2, 1 \},}}
-\DoxyCodeLine{92 \textcolor{comment}{ \{ "{}LTRIM"{}, 'C', 2, 1 \},}}
-\DoxyCodeLine{93 \textcolor{comment}{ \{ "{}MAX"{}, 'N', 1, 4 \},}}
-\DoxyCodeLine{94 \textcolor{comment}{ \{ "{}MIN"{}, 'N', 1, 4 \},}}
-\DoxyCodeLine{95 \textcolor{comment}{ \{ "{}MONTH"{}, 'N', 1, 4 \},}}
-\DoxyCodeLine{96 \textcolor{comment}{ \{ "{}RECNO"{}, 'N', 1, 4 \},}}
-\DoxyCodeLine{97 \textcolor{comment}{ \{ "{}RECCOUNT"{}, 'N', 1, 4 \},}}
-\DoxyCodeLine{98 \textcolor{comment}{ \{ "{}REPLICATE"{}, 'C', 4, 0 \},}}
-\DoxyCodeLine{99 \textcolor{comment}{ \{ "{}RIGHT"{}, 'C', 3, 2 \},}}
-\DoxyCodeLine{100 \textcolor{comment}{ \{ "{}RTRIM"{}, 'C', 2, 1 \},}}
-\DoxyCodeLine{101 \textcolor{comment}{ \{ "{}SPACE"{}, 'C', 3, 1 \},}}
-\DoxyCodeLine{102 \textcolor{comment}{ \{ "{}SQRT"{}, 'N', 1, 4 \},}}
-\DoxyCodeLine{103 \textcolor{comment}{ \{ "{}STOD"{}, 'D', 1, 8 \},}}
-\DoxyCodeLine{104 \textcolor{comment}{ \{ "{}STR"{}, 'C', 6, 10 \},}}
-\DoxyCodeLine{105 \textcolor{comment}{ \{ "{}STRZERO"{}, 'C', 3, 2 \},}}
-\DoxyCodeLine{106 \textcolor{comment}{ \{ "{}SUBSTR"{}, 'C', 3, 3 \},}}
-\DoxyCodeLine{107 \textcolor{comment}{ \{ "{}TRIM"{}, 'C', 2, 1 \},}}
-\DoxyCodeLine{108 \textcolor{comment}{ \{ "{}UPPER"{}, 'C', 2, 1 \},}}
-\DoxyCodeLine{109 \textcolor{comment}{ \{ "{}VAL"{}, 'N', 1, 4 \},}}
-\DoxyCodeLine{110 \textcolor{comment}{ \{ "{}YEAR"{}, 'N', 1, 4 \},}}
-\DoxyCodeLine{111 \textcolor{comment}{ \{ 0, 0, 0, 0 \},}}
-\DoxyCodeLine{112 \textcolor{comment}{\};}}
-\DoxyCodeLine{113 \textcolor{comment}{*/}}
-\DoxyCodeLine{114 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{115 }
-\DoxyCodeLine{116 }
-\DoxyCodeLine{117 }
-\DoxyCodeLine{119 }
-\DoxyCodeLine{123 \textcolor{keyword}{class }XBDLLEXPORT \mbox{\hyperlink{classxb_1_1xbXBase}{xbXBase}} : \textcolor{keyword}{public} \mbox{\hyperlink{classxb_1_1xbTblMgr}{xbTblMgr}}\{}
-\DoxyCodeLine{124 \textcolor{keyword}{public}:}
-\DoxyCodeLine{125 \mbox{\hyperlink{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}{xbXBase}}();}
-\DoxyCodeLine{126 \mbox{\hyperlink{classxb_1_1xbXBase}{\string~xbXBase}}();}
-\DoxyCodeLine{127 }
-\DoxyCodeLine{128 xbInt16 CloseAllTables();}
-\DoxyCodeLine{129 \textcolor{keywordtype}{void} DisableMsgLogging();}
-\DoxyCodeLine{130 \textcolor{keywordtype}{void} EnableMsgLogging ();}
-\DoxyCodeLine{131 xbInt16 FlushLog();}
-\DoxyCodeLine{132 }
-\DoxyCodeLine{133 \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&GetLogDirectory () \textcolor{keyword}{const};}
-\DoxyCodeLine{134 \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&GetLogFileName () \textcolor{keyword}{const};}
-\DoxyCodeLine{135 \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&GetLogFqFileName() \textcolor{keyword}{const};}
-\DoxyCodeLine{136 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetLogStatus () \textcolor{keyword}{const};}
-\DoxyCodeLine{137 }
-\DoxyCodeLine{138 xbInt16 \mbox{\hyperlink{classxb_1_1xbXBase_aa957eb502ecd076e5df89e7415cb094b}{OpenHighestVersion}}( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTableName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sAlias, \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} \&dbf, \textcolor{keywordtype}{int} dummy );}
-\DoxyCodeLine{139 xbInt16 OpenHighestVersion( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTableName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sAlias, \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} **dbf );}
-\DoxyCodeLine{140 }
-\DoxyCodeLine{141 \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} * Open( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTableName, xbInt16 \&iRc );}
-\DoxyCodeLine{142 \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} * Open( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTableName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sAlias, xbInt16 iOpenMode, xbInt16 iShareMode, xbInt16 iVersion, xbInt16 \&iRc );}
-\DoxyCodeLine{143 \textcolor{keywordtype}{void} SetLogDirectory( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sLogFileDirectory );}
-\DoxyCodeLine{144 \textcolor{keywordtype}{void} SetLogFileName ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sLogFileName );}
-\DoxyCodeLine{145 \textcolor{keywordtype}{void} SetLogSize ( \textcolor{keywordtype}{size\_t} lSize );}
-\DoxyCodeLine{146 xbInt16 WriteLogMessage( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sLogMessage, xbInt16 iOutputOpt = 0 );}
-\DoxyCodeLine{147 xbInt16 WriteLogBytes ( xbUInt32 lCnt, \textcolor{keyword}{const} \textcolor{keywordtype}{char} *p );}
-\DoxyCodeLine{148 }
-\DoxyCodeLine{149 \textcolor{keywordtype}{void} xbSleep ( xbInt32 lMillisecs );}
-\DoxyCodeLine{150 }
-\DoxyCodeLine{151 xbInt16 GetCmdLineOpt ( xbInt32 lArgc, \textcolor{keywordtype}{char} **argv, \textcolor{keyword}{const} \textcolor{keywordtype}{char} *sOptRqst, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sParmOut );}
-\DoxyCodeLine{152 xbInt16 GetCmdLineOpt ( xbInt32 lArgc, \textcolor{keywordtype}{char} **argv, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOptRqst, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sParmOut );}
-\DoxyCodeLine{153 }
-\DoxyCodeLine{154 }
-\DoxyCodeLine{155 \textcolor{comment}{/* xbase functions */}}
-\DoxyCodeLine{156 \textcolor{preprocessor}{ \#ifdef XB\_FUNCTION\_SUPPORT}}
-\DoxyCodeLine{157 xbInt16 ABS( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dOut );}
-\DoxyCodeLine{158 xbInt16 ALLTRIM( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
-\DoxyCodeLine{159 xbInt16 ASC( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dAscOut );}
-\DoxyCodeLine{160 xbInt16 AT( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sSrchFor, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sBase, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dPos );}
-\DoxyCodeLine{161 xbInt16 CDOW( \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dInDate, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOutDow );}
-\DoxyCodeLine{162 xbInt16 CHR( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dAsciCd, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
-\DoxyCodeLine{163 xbInt16 CMONTH( \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dInDate, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOutMonth );}
-\DoxyCodeLine{164 xbInt16 CTOD( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sInDate, \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dOutDate );}
-\DoxyCodeLine{165 xbInt16 DATE( \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dOutDate );}
-\DoxyCodeLine{166 xbInt16 DAY( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dInDate, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dOutDay );}
-\DoxyCodeLine{167 xbInt16 DEL( \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} * d, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut, xbInt16 iRecBufSw = 0 );}
-\DoxyCodeLine{168 xbInt16 DELETED( \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} * d, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bOut, xbInt16 iRecBufSw = 0 );}
-\DoxyCodeLine{169 xbInt16 DESCEND( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
-\DoxyCodeLine{170 xbInt16 DESCEND( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dInDate, \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dOutDate );}
-\DoxyCodeLine{171 xbInt16 DESCEND( \textcolor{keyword}{const} \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dsOut );}
-\DoxyCodeLine{172 xbInt16 DOW( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&sInDate, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dDowOut );}
-\DoxyCodeLine{173 xbInt16 DTOC( \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dInDate, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOutFmtDate );}
-\DoxyCodeLine{174 xbInt16 DTOS( \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dInDate, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOutFmtDate );}
-\DoxyCodeLine{175 xbInt16 EXP( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dOut );}
-\DoxyCodeLine{176 xbInt16 IIF( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bResult, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTrueResult, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFalseResult, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sResult );}
-\DoxyCodeLine{177 xbInt16 INT( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dOut );}
-\DoxyCodeLine{178 xbInt16 ISALPHA( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bResult );}
-\DoxyCodeLine{179 xbInt16 ISLOWER( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bResult );}
-\DoxyCodeLine{180 xbInt16 ISUPPER( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bResult );}
-\DoxyCodeLine{181 xbInt16 LEFT( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, xbUInt32 lCharCnt, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
-\DoxyCodeLine{182 xbInt16 LEN( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dLen );}
-\DoxyCodeLine{183 xbInt16 LOG( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dOut );}
-\DoxyCodeLine{184 xbInt16 LOWER( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
-\DoxyCodeLine{185 xbInt16 LTRIM( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \& sOut );}
-\DoxyCodeLine{186 xbInt16 MAX( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn1, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn2, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dOut );}
-\DoxyCodeLine{187 xbInt16 MIN( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn1, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn2, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dOut );}
-\DoxyCodeLine{188 xbInt16 MONTH( \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dInDate, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dMonthOut );}
-\DoxyCodeLine{189 xbInt16 RECCOUNT( \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} * d, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dRecOut );}
-\DoxyCodeLine{190 xbInt16 RECNO( \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} * d, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dRecOut );}
-\DoxyCodeLine{191 xbInt16 REPLICATE( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, xbUInt32 ulRepCnt, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
-\DoxyCodeLine{192 xbInt16 RIGHT( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, xbUInt32 iCharCnt, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
-\DoxyCodeLine{193 xbInt16 RTRIM( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
-\DoxyCodeLine{194 xbInt16 SPACE( xbInt32 lCnt, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
-\DoxyCodeLine{195 xbInt16 SQRT( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dBase, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dSqrRt );}
-\DoxyCodeLine{196 xbInt16 STOD( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&sDateOut );}
-\DoxyCodeLine{197 xbInt16 STR( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
-\DoxyCodeLine{198 xbInt16 STR( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, xbUInt32 ulLen, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
-\DoxyCodeLine{199 xbInt16 STR( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, xbUInt32 ulLen, xbUInt32 ulDec, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
-\DoxyCodeLine{200 xbInt16 STR( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, xbUInt32 ulLen, xbUInt32 ulDec, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sPadChar, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
-\DoxyCodeLine{201 xbInt16 STRZERO( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, xbUInt32 ulLen, xbUInt32 ulDec, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
-\DoxyCodeLine{202 xbInt16 SUBSTR( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, xbUInt32 ulStartPos, xbUInt32 ulLen, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
-\DoxyCodeLine{203 xbInt16 TRIM( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
-\DoxyCodeLine{204 xbInt16 UPPER( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
-\DoxyCodeLine{205 xbInt16 VAL( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dOut );}
-\DoxyCodeLine{206 xbInt16 YEAR( \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dInDate, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dOutYear );}
-\DoxyCodeLine{207 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{208 }
-\DoxyCodeLine{209 \textcolor{keyword}{protected}:}
-\DoxyCodeLine{210 \textcolor{keyword}{friend} \textcolor{keyword}{class }xbBcd;}
-\DoxyCodeLine{211 \textcolor{keyword}{friend} \textcolor{keyword}{class }xbExp;}
-\DoxyCodeLine{212 }
-\DoxyCodeLine{213 \textcolor{preprocessor}{ \#ifdef XB\_BLOCKREAD\_SUPPORT}}
-\DoxyCodeLine{214 \textcolor{keyword}{friend} \textcolor{keyword}{class }xbBlockRead;}
-\DoxyCodeLine{215 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_BLOCKREAD\_SUPPORT}}
-\DoxyCodeLine{216 }
-\DoxyCodeLine{217 }
-\DoxyCodeLine{218 xbInt16 \mbox{\hyperlink{classxb_1_1xbXBase_ae52e53340593b4253936c1372ec15ee1}{GetFunctionInfo}}( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sExpLine, \textcolor{keywordtype}{char} \&cReturnType, xbInt16 \&iReturnLenCalc, xbInt32 \&lReturnLenVal ) \textcolor{keyword}{const};}
-\DoxyCodeLine{219 \textcolor{keyword}{static} xbInt16 xbMemcmp( \textcolor{keyword}{const} \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} *s1, \textcolor{keyword}{const} \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} *s2, \textcolor{keywordtype}{size\_t} n );}
-\DoxyCodeLine{220 }
-\DoxyCodeLine{221 \textcolor{keyword}{private}:}
-\DoxyCodeLine{222 }
-\DoxyCodeLine{223 \textcolor{preprocessor}{\#ifdef XB\_LOGGING\_SUPPORT}}
-\DoxyCodeLine{224 \mbox{\hyperlink{namespacexb_a4a31fbe9110c9e55495ce71e642d785c}{xbLog}} *xLog;}
-\DoxyCodeLine{225 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{226 }
-\DoxyCodeLine{227 \};}
-\DoxyCodeLine{228 }
-\DoxyCodeLine{229 \} \textcolor{comment}{/* namespace xb */}}
-\DoxyCodeLine{230 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_DBLIST\_H\_\_ */}\textcolor{preprocessor}{}}
-
-\end{DoxyCode}
diff --git a/docs/howto/GettingStarted.txt b/docs/howto/GettingStarted.txt
deleted file mode 100755
index a88698f..0000000
--- a/docs/howto/GettingStarted.txt
+++ /dev/null
@@ -1,86 +0,0 @@
-
-To build the xbase library
-
-1) Verify you have the correct software prerequisites installed
- A) cmake 2.6 or LATER
- B) Compiler and linker
-
-2) Verify you have access to the target location of the library
-
-3) Unpack the tar or zip file
-
-4) For Linux 64 bit or 32 bit plat forms
-
- cd xbase/build/Linux64 or xbase/build/Linux32
- cmake .
- make
- make test
- sudo make install
-
- Verify the ld.so.conf file has the library target directory
- For example
- update file /etc/ld.so.conf to include /usr/local/lib
- and run ldconfig
- Your milage may vary depending on Linux Distro
-
-
- To update the configuration file
- cd xbase/build/Linux64 or xbase/build/Linux32
- ccmake .
-
-
-
-5) For Mac
-
- Verify you have xcode installed and operational
- cd xbase/build/Mac
- cmake . -DCMAKE_OSX_SYSROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk
- make
- make test
-
-
-6) For Windows 64 bit with Visual Studio
-
- Open a Visual Studio 64 bit Shell
- cd xbase\build\Win64VS
- buildwin.bat
- nmake test
-
- From a VS Studio 64 bit shell in admin mode
- nmake install
-
- Also of note: cleanwin.bat resets everything
-
-7) For Windows 32 bit with Visual Studio
-
- Open a Visual Studio 32 bit Shell
- cd xbase\build\Win32VS
- buildwin.bat
- nmake test
-
- From a VS Studio 32 bit shell in admin mode
- nmake install
-
-
-
-8) For Windows 32 bit with Borland 5.5 free compiler
-
- cd xbase\build\Win32Borland
- BuildBorland.bat
- make test
-
-
-9) For other platforms
-
- Here is something to start with...
-
- cd xbase
- md MyPlatform
- cd MyPlatform
- cp ../Cmake/CmakeLists.txt .
-
- Enter the appropriate make command for your environment - check the cmake web site for help
- On Linux, it is .cmake, then make
- your mileage may vary
-
- Send your results to the library maintainer so it can be added to this library
diff --git a/docs/html/index.html b/docs/html/index.html
deleted file mode 100755
index 0e8db33..0000000
--- a/docs/html/index.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE HTML PUBLIC>
-<HTML><TITLE>Xbase DBMS Documentation Table of Contents</TITLE>
-<BODY BGCOLOR=#FFFFFF>
-<H1><p align="center">Xbase DBMS<br>
-Last Updated 2/11/23<br>Version 4.1.0</p></H1>
-<h2>Documentation Table Of Contents</h2>
-<h3>Section 1 - Xbase Concepts</h3>
-<h4>
-<A HREF="xbc1.html">Chapter 1 - Getting Started</A><br>
-<A HREF="xbc2.html">Chapter 2 - Database Overview</A><br>
-<A HREF="xbc3.html">Chapter 3 - Fields and Strings</A><br>
-<A HREF="xbc4.html">Chapter 4 - Date Processing</A><br>
-<A HREF="xbc5.html">Chapter 5 - Expression Handling</A><br>
-<A HREF="xbc6.html">Chapter 6 - Index Overview</A><br>
-<A HREF="xbc7.html">Chapter 7 - NDX (DBase) Indices</A><br>
-<A HREF="xbc8.html">Chapter 8 - MDX (DBase) Indices</A><br>
-<A HREF="xbc9.html">Chapter 9 - NTX (Clipper) Indices</A><br>
-<A HREF="xbc10.html">Chapter 10 - CDX (FoxPro) Indices</A><br>
-<A HREF="xbc11.html">Chapter 11 - IDX (FoxPro) Indices</A><br>
-<A HREF="xbc12.html">Chapter 12 - Record and File Locking</A><br>
-<A HREF="xbc13.html">Chapter 13 - Logfile Support</A><br>
-<A HREF="xbc14.html">Chapter 14 - SQL Support</A><br>
-<A HREF="xbc15.html">Chapter 15 - Sequential Block Read</A><br>
-
-</h4>
-<h3>Section 2 - Classes and Objects</h3>
-<h4>
-<A HREF="xbc16.html">Chapter 16 - General Class Information</A><br>
-<A HREF="xbc17.html">Chapter 17 - Class xbSsv - Shared System Values</A><br>
-<A HREF="xbc18.html">Chapter 18 - Class xbXBase - The class that links it all together</A><br>
-
-</h4>
-<h3>Section 3 - Appendices</h3>
-<h4>
-<A HREF="gpl-3.0.txt">Appendix A - GPL Library License</A><br>
-<A HREF="xbab.html">Appendix B - Bibliography</A><br>
-<A HREF="xbac.html">Appendix C - Library Build Options</A><br>
-<A HREF="xbad.html">Appendix D - File Types</A><br>
-<A HREF="xbae.html">Appendix E - Error Codes</A><br>
-<A HREF="xbaf.html">Appendix F - Utility and Example Programs</A><br>
-
-</h4>
-<p><img src="xbase.jpg"><br><hr>
-</BODY>
-</HTML>
diff --git a/docs/html/xbae.html b/docs/html/xbae.html
deleted file mode 100755
index e860911..0000000
--- a/docs/html/xbae.html
+++ /dev/null
@@ -1,96 +0,0 @@
-<!DOCTYPE HTML PUBLIC>
-<HTML>
-<TITLE>Xbase DBMS Appendix E</TITLE>
-<BODY BGCOLOR=#FFFFFF>
-<H2><p align="center">Eror Codes</p></H2>
-<p align="center">Chapter Updated 1/31/23</p><hr>
-
-<h3>Error Codes and Error Processing</h3>
-
-Alomost all Xbase64 methods and functions return and xbInt16 return code, which is zero or positive on success and negative
-if an error condition occurs.
-<br><br>
-As of the 4.x.x release, the library has been extensively updated to use exception processing and most error
-conditions will result in a mesage written to the logfile if logfile processing is enabled. The error routines
-typically write two values to the logfile, an error code value and an iErrorStop value which identifies where
-exactly in the library code the error occurred.
-<br><br>
-Error codes are defined in the xbretcod.h file.<br><br><br>
-
-
-<TR><TH>File Type</TH><TH>Description</TH></TR>
-<TR><TD>*.DBF</TD><TD>Main database file or Table</TD></TR>
-<TR><TD>*.DBT</TD><TD>Memo file data</TD></TR>
-<TR><TD>*.INF</TD><TD>INF - Behave like MS ODBC File. Used to auto open NDX index file</TD></TR>
-<TR><TD>*.MDX</TD><TD>Production V4 index file, contains up to 47 tags. Automatically opened.</TD></TR>
-<TR><TD>*.NDX</TD><TD>Non production V3 index files. Contains one tag per file. Automatically opened if included in ocrreespondin INF file.</TD></TR>
-
-
-<br><br><br>
-<table >
-<TABLE BORDER>
-<TR VALIGN="BASELINE">
-<TR><TH>Description</TH><TH>Error Code</TH><TH>Category</TH></TR>
-<TR><TD> XB_NO_ERROR </TD><TD> 0 </TD><TD> general </TD></TR>
-<TR><TD> XB_NO_MEMORY </TD><TD> -100 </TD><TD> general </TD></TR>
-<TR><TD> XB_INVALID_OPTION </TD><TD> -101 </TD><TD> general </TD></TR>
-<TR><TD> XB_DUP_TABLE_OR_ALIAS </TD><TD> -110 </TD><TD> table manager </TD></TR>
-<TR><TD> XB_INVALID_NODELINK </TD><TD> -120 </TD><TD> linklist </TD></TR>
-<TR><TD> XB_KEY_NOT_UNIQUE </TD><TD> -121 </TD><TD> linklist </TD></TR>
-<TR><TD> XB_FILE_EXISTS </TD><TD> -200 </TD><TD> file </TD></TR>
-<TR><TD> XB_ALREADY_OPEN </TD><TD> -201 </TD><TD> file </TD></TR>
-<TR><TD> XB_DBF_FILE_NOT_OPEN </TD><TD> -202 </TD><TD> file </TD></TR>
-<TR><TD> XB_FILE_NOT_FOUND </TD><TD> -203 </TD><TD> file </TD></TR>
-<TR><TD> XB_FILE_TYPE_NOT_SUPPORTED</TD><TD> -204 </TD><TD> file </TD></TR>
-<TR><TD> XB_RENAME_ERROR </TD><TD> -205 </TD><TD> file </TD></TR>
-<TR><TD> XB_INVALID_OBJECT </TD><TD> -206 </TD><TD> file </TD></TR>
-<TR><TD> XB_NOT_OPEN </TD><TD> -207 </TD><TD> file </TD></TR>
-<TR><TD> XB_NOT_FOUND </TD><TD> -208 </TD><TD> file </TD></TR>
-<TR><TD> XB_OPEN_ERROR </TD><TD> -209 </TD><TD> file </TD></TR>
-<TR><TD> XB_CLOSE_ERROR </TD><TD> -210 </TD><TD> file </TD></TR>
-<TR><TD> XB_SEEK_ERROR </TD><TD> -211 </TD><TD> file </TD></TR>
-<TR><TD> XB_READ_ERROR </TD><TD> -212 </TD><TD> file </TD></TR>
-<TR><TD> XB_WRITE_ERROR </TD><TD> -213 </TD><TD> file </TD></TR>
-<TR><TD> XB_EOF </TD><TD> -214 </TD><TD> file </TD></TR>
-<TR><TD> XB_BOF </TD><TD> -215 </TD><TD> file </TD></TR>
-<TR><TD> XB_INVALID_BLOCK_SIZE </TD><TD> -216 </TD><TD> file </TD></TR>
-<TR><TD> XB_INVALID_BLOCK_NO </TD><TD> -217 </TD><TD> file </TD></TR>
-<TR><TD> XB_INVALID_RECORD </TD><TD> -218 </TD><TD> file </TD></TR>
-<TR><TD> XB_DELETE_FAILED </TD><TD> -219 </TD><TD> file </TD></TR>
-<TR><TD> XB_INVALID_TABLE_NAME </TD><TD> -220 </TD><TD> file </TD></TR>
-<TR><TD> XB_EMPTY </TD><TD> -221 </TD><TD> file </TD></TR>
-<TR><TD> XB_LIMIT_REACHED </TD><TD> -222 </TD><TD> file </TD></TR>
-<TR><TD> XB_BLOCKREAD_NOT_ENABLED </TD><TD> -223 </TD><TD> file </TD></TR>
-<TR><TD> XB_DIRECTORY_ERROR </TD><TD> -224 </TD><TD file </TD></TR>
-<TR><TD> XB_INVALID_FIELD_TYPE </TD><TD> -300 </TD><TD> field </TD></TR>
-<TR><TD> XB_INVALID_FIELD_NO </TD><TD> -301 </TD><TD> field </TD></TR>
-<TR><TD> XB_INVALID_DATA </TD><TD> -302 </TD><TD> field </TD></TR>
-<TR><TD> XB_INVALID_FIELD_NAME </TD><TD> -303 </TD><TD> field </TD></TR>
-<TR><TD> XB_INVALID_MEMO_FIELD </TD><TD> -304 </TD><TD> field </TD></TR>
-<TR><TD> XB_INVALID_FIELD </TD><TD> -305 </TD><TD> field </TD></TR>
-<TR><TD> XB_INVALID_FIELD_LEN </TD><TD> -306 </TD><TD> field </TD></TR>
-<TR><TD> XB_INVALID_DATE </TD><TD> -307 </TD><TD> date field </TD></TR>
-<TR><TD> XB_INVALID_LOCK_OPTION </TD><TD> -400 </TD><TD> lock </TD></TR>
-<TR><TD> XB_LOCK_FAILED </TD><TD> -401 </TD><TD> lock </TD></TR>
-<TR><TD> XB_TABLE_NOT_LOCKED </TD><TD> -402 </TD><TD> lock - need table locked for operation </TD></TR>
-<TR><TD> XB_PARSE_ERROR </TD><TD> -500 </TD><TD> expression </TD></TR>
-<TR><TD> XB_INVALID_FUNCTION </TD><TD> -501 </TD><TD> expression </TD></TR>
-<TR><TD> XB_INVALID_PARM </TD><TD> -502 </TD><TD> expression </TD></TR>
-<TR><TD> XB_INCONSISTENT_PARM_LENS </TD><TD> -503 </TD><TD> expression </TD></TR>
-<TR><TD> XB_INCOMPATIBLE_OPERANDS </TD><TD> -504 </TD><TD> expression </TD></TR>
-<TR><TD> XB_UNBALANCED_PARENS </TD><TD> -505 </TD><TD> expression </TD></TR>
-<TR><TD> XB_UNBALANCED_QUOTES </TD><TD> -506 </TD><TD> expression </TD></TR>
-<TR><TD> XB_INVALID_EXPRESSION </TD><TD> -507 </TD><TD> expression </TD></TR>
-<TR><TD> XB_INVALID_KEYNO </TD><TD> -600 </TD><TD> index </TD></TR>
-<TR><TD> XB_INVALID_INDEX </TD><TD> -601 </TD><TD> index file error </TD></TR>
-<TR><TD> XB_INVALID_TAG </TD><TD> -602 </TD><TD> invalid index tag name, must be <= 10 bytes </TD></TR>
-<TR><TD> XB_INVALID_PAGE </TD><TD> -603 </TD><TD> invalid index page </TD></TR>
-<TR><TD> XB_SYNTAX_ERROR </TD><TD> -700 </TD><TD> sql syntax error </TD></TR>
-</TABLE>
-
-
-
-<br><hr><br>
-<p><img src="xbase.jpg"><br><hr>
-</BODY>
-</HTML>
diff --git a/docs/html/xbaf.html b/docs/html/xbaf.html
deleted file mode 100755
index 110db7b..0000000
--- a/docs/html/xbaf.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE HTML PUBLIC>
-<HTML>
-<TITLE>Xbase DBMS Chapter 15</TITLE>
-<BODY BGCOLOR=#FFFFFF>
-<H1><p align=center>Sample Programs</p></H1>
-<p align=center>Page Updated 12/20/22</p><hr><br><br>
-
-<CENTER>
-<TABLE BORDER>
-<CAPTION ALIGN=TOP><H3>XBase Example Programs</H3></CAPTION>
-<TR ALIGN=BASELINE>
-<TR><TH ALIGN=LEFT>Program<TD>Program Description
-<TR><TH ALIGN=LEFT>xb_ex_string<TD>Example program to demonstrate xbString class usage
-<TR><TH ALIGN=LEFT>xb_ex_v3_create_dbf<TD>Example program to create V3 DBF file
-<TR><TH ALIGN=LEFT>xb_ex_v3_upd_dbf<TD>Example program to update V3 DBF file
-<TR><TH ALIGN=LEFT>xb_ex_v4_create_dbf<TD>Example Program to create V4 DBF file
-<TR><TH ALIGN=LEFT>xb_ex_v4_upd_dbf<TD>Example program to update V4 DBF file
-</TABLE></CENTER>
-<br><br>
-
-
-<CENTER>
-<TABLE BORDER>
-<CAPTION ALIGN=TOP><H3>XBase Utility Programs</H3></CAPTION>
-<TR ALIGN=BASELINE>
-<TR><TH ALIGN=LEFT>Program<TD>Program Description
-<TR><TH ALIGN=LEFT>xb_cfg_check<TD>This program prints the compile settings and options in use
-<TR><TH ALIGN=LEFT>xb_copydbf<TD>This program copies a DBF file structure
-<TR><TH ALIGN=LEFT>xb_dbfutil1<TD>Menu program for executing Xbase functions
-<TR><TH ALIGN=LEFT>xb_deletall<TD>This program marks all records in a DBF file for deletion
-<TR><TH ALIGN=LEFT>xb_dumpdbt<TD>Debug memo files
-<TR><TH ALIGN=LEFT>xb_dumphdr<TD>This program opens an Xbase file and prints its header
-<TR><TH ALIGN=LEFT>xb_dumprecs<TD>This program dumps records for an XBase file
-<TR><TH ALIGN=LEFT>xb_execsql<TD>This program executes SQL statements
-<TR><TH ALIGN=LEFT>xb_pack<TD>This program packs (removes deleted records) from a DBF database file
-<TR><TH ALIGN=LEFT>xb_undelall<TD>This program undeletes all deleted records in a dbf file
-<TR><TH ALIGN=LEFT>xb_zap<TD>This program removes all records from a DBF file
-</TABLE></CENTER>
-<br><br>
-
-
-<hr>
-<p><img src="xbase.jpg"><br><hr>
-</BODY>
-</HTML>
diff --git a/docs/html/xbc1.html b/docs/html/xbc1.html
deleted file mode 100755
index c07e5f6..0000000
--- a/docs/html/xbc1.html
+++ /dev/null
@@ -1,199 +0,0 @@
-<!DOCTYPE HTML PUBLIC>
-<HTML>
-<TITLE>Xbase DBMS Chapter 1</TITLE>
-<BODY BGCOLOR=#FFFFFF>
-
-<h1><p align="center">Getting Started</p></h1>
-<p align="center">Chapter Updated 12/09/22</p>
-
-<hr><h2>Overview</h2>
-
-Welcome to Xbase64 DBMS, a collection of specifications, programs,
-utilities and a C++ class library for manipulating legacy Xbase (DBF) type
-data files and indices.
-<br><br>
-
-The term Xbase is often used used to describe the format of the original
-DBase, Clipper and Foxbase (.DBF) files. The XBase file format is well
-documented and has stood the test of time. Various popular programs
-still create and read xbase formatted files.<br><br>
-
-The purpose of the Xbase64 library is to provide reliable and usable
-programming tools for reading, writing and updating DBF databases,
-indices and memo fields. Version 4.x.x has been tested for compatability
-with DBase III (TM) and DBase IV (TM) version data files and indices
-*.DBF (data), *.NDX (single tag index), *.MDX (multi tag index) and
-*.DBT (memo).<br><br>
-
-Version 4.x.x is a major rewrite of the library to strengthen error
-processing and bring consistency across modules. It includes updates
-to the locking process and also includes a module to support MDX multi
-tag indices.<br><br>
-
-Earlier versions of the library have included NTX and CDX index formats
-and that code will be re-incorporated into the latest version in the
-future.
-
-
-<br><br>
-<B>Why use the Xbase library? </B>
-The DBF file format is a ubiquitous industry standard with
-widespread usage and application. Using this standard file format removes any
-<em>vender specific</em> locks that bind you to a particular platform.
-Additionally, with Xbase64 only the options needed can be compiled into or out of the library
-to provide a custom configuration specific to project requirements.
-For a small footprint, locking, memo fields and indices could be excluded from
-the library build which would reduce the library size.
-This tool is usefull for small to medium sized apps that don't need all the
-overhead, sophistication and cost of a complex client server configuration.
-The Xbase library is designed to be flexible in which options can be compiled
-into or out fo the library and also which environments it can be run on.
-
-
-<br><br><br>
-
-<hr><h2>System Requirements</h2>
-
-To build the Xbase64 library, the following items are needed:<br><br>
-
-A computer, a C/C++ compiler and CMAKE.<br><br>
-
-The original source code was developed on a Linux platform with the GCC
-public domain C/C++ compiler.
-<br><br>
-
-Xbase64 DBMS has been successfully ported and runs on Linux, Mac and and Windows.
-<br><br>
-
-<hr><h2>Classes and User Interface</h2>
-
-<a href="..\doxygen\html\index.html">Classes and User Interface Documentation via Doxygen</a>
-
-<br><br>
-<hr><h2>Portability, Type Defs and Structures</h2>
-
-To make the Xbase64 library as portable as possible, the following things occurred:
-<br><br>
-<li>The software was developed to compile and run on either 32 or 64 bit architectures.
-<li>The software was developed to compile and run on either big endian or little endian archtectures.
-<li>All numeric data is stored in little endian format.
-<li>The library is built using <a href="https://cmake.org">Cmake</a> to provide support on a wide variety of platforms.
-<li>Field types were defined to be consistent across various OS and CPU configurations.
-Xbase64 defines the following field types:<br><br><br>
-<CENTER>
-<TABLE BORDER>
-<CAPTION ALIGN=TOP><h3>Field Types</h3></CAPTION>
-<TR ALIGN=BASELINE>
-<TR><TH ALIGN=LEFT>Type<TD>Description
-<TR><TH ALIGN=LEFT>xbBool<TD>Contains xbTrue (0) or xbFalse (1)
-<TR><TH ALIGN=LEFT>xbInt16<TD>16 bit int
-<TR><TH ALIGN=LEFT>xbUInt16<TD>16 bit unsigned int
-<TR><TH ALIGN=LEFT>xbInt32<TD>32 bit int
-<TR><TH ALIGN=LEFT>xbUInt32<TD>32 bit unsigned int
-<TR><TH ALIGN=LEFT>xbInt64<TD>64 bit int
-<TR><TH ALIGN=LEFT>xbUInt64<TD>64 bit unsigned int
-<TR><TH ALIGN=LEFT>xbDouble<TD>double
-<TR><TH ALIGN=LEFT>char<TD>char
-<TR><TH ALIGN=LEFT>void<TD>void
-<TR><TH ALIGN=LEFT>struct SCHEMA<TD>Used for defining record structures
-</TABLE></CENTER>
-<br><br>
-
-Xbase64 was designed for portability utilizing standard ANSI-C/C++ compliant
-code. If you decide to write updates to the Xbase64 project, please try
-to keep your work to standard C/C++ generic calls and use the above predefined field types.<br><br>
-
-<hr><h2>Compilation Overview</h2>
-To build the xbase64 library, verify you have:<br>
-<li>Xbase64 source code
-<li>cmake 2.6 or LATER
-<li>Compiler and linker
-
-<br><br>
-Verify you have access rights to the target location of the library
-
-<br><br>
-For Linux:
-<br><br>
-<li>cd xbase/Linux
-<li>cmake .
-<li>make
-<li>make test
-<li>sudo make install
-<li>Verify the ld.so.conf file has the library target directory. For example
-update file /etc/ld.so.conf to include /usr/local/lib and run ldconfig.
-<br><br>
-
-For Mac:
-<br><br>
-<li>Verify you have xcode installed and operational.
-<li>cd xbase/Mac
-<li>cmake . -DCMAKE_OSX_SYSROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk
-<li>make
-<li>make test
-<br><br>
-
-For Windows 64 bit with Visual Studio:
-<br><br>
-<li>Open a Visual Studio 64 bit Shell
-<li>cd xbase\Win64VS
-<li>buildwin.bat
-<li>nmake test
-<li>From a VS Studio 64 bit shell in admin mode: nmake install
-<br><br>
-
-For Windows 32 bit with Visual Studio:
-<br><br>
-<li>Open a Visual Studio 32 bit Shell
-<li>cd xbase\Win32VS
-<li>buildwin.bat
-<li>nmake test
-<li>From a VS Studio 32 bit shell in admin mode: nmake install
-<br><br>
-
-For Windows 32 bit with Borland 5.5 free compiler
-<br><br>
-<li>cd xbase\Win32Borland
-<li>BuildBorland.bat
-<li>make test
-<br><br>
-
-For other platforms:
-<br><br>
-Here is something to start with...
-<li>cd xbase
-<li>md MyPlatform
-<li>cd MyPlatform
-<li>cp ../Cmake/CmakeLists.txt.
-<li>Enter the appropriate make command for your environment. Check the cmake web site for help.<br>
- On Linux, it is .cmake, then make
- your mileage may vary
-
- Send your results to the library maintainer so it can be added to this library
-
-
-
-To use the Xbase classes, include the following header file in the program:
-<br><br>
-
-#include &lt;xbase.h&gt;<br><br>
-
-For more information on getting started, check out the sample programs in the src/examples folder.
-<br><br>
-
-<hr><br>
-<h2>System Limitations</h2>
-<br>
-Maximum size of a database file is the size of LONG - 2,147,483,647 bytes<br>
-Total number of fields in a database - 255 <br>
-Total number of characters in all fields - 32767<br>
-Maximum number of characters in a field - 254<br>
-Total number of records in a file - 1 billion<br>
-Maximum index key length - 100 bytes<br>
-Maximum .DBT file memo block size - 32256<br>
-Maximum expression result length - 100 bytes<br>
-Maximum NDX index key length - 100 bytes<br><br>
-<hr><br>
-<p><img src=xbase.jpg><br><hr>
-</BODY>
-</HTML>
diff --git a/docs/html/xbc10.html b/docs/html/xbc10.html
deleted file mode 100755
index 04f5158..0000000
--- a/docs/html/xbc10.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<!DOCTYPE HTML PUBLIC>
-<HTML>
-<TITLE>Xbase DBMS Chapter 10</TITLE>
-<BODY BGCOLOR=#FFFFFF>
-<H2><p align="center">CDX Indices</p></H2>
-<p align="center">Chapter Updated 11/28/22</p><hr>
-
-<h3>Pending CDX index module development.</h3>
-
-<hr>
-</BODY>
-</HTML>
diff --git a/docs/html/xbc11.html b/docs/html/xbc11.html
deleted file mode 100755
index 4230f3f..0000000
--- a/docs/html/xbc11.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<!DOCTYPE HTML PUBLIC>
-<HTML>
-<TITLE>Xbase DBMS Chapter 10</TITLE>
-<BODY BGCOLOR=#FFFFFF>
-<H2><p align="center">CDX Indices</p></H2>
-<p align="center">Chapter Updated 11/28/22</p><hr>
-
-<h3>Pending IDX index module development.</h3>
-
-<hr>
-</BODY>
-</HTML>
diff --git a/docs/html/xbc12.html b/docs/html/xbc12.html
deleted file mode 100755
index a40c7e0..0000000
--- a/docs/html/xbc12.html
+++ /dev/null
@@ -1,86 +0,0 @@
-<!DOCTYPE HTML PUBLIC>
-<HTML>
-<TITLE>Xbase DBMS Chapter 12</TITLE>
-<BODY BGCOLOR=#FFFFFF>
-<H1><p align="center">Record and File Locking</p></H1>
-<p align="center">Chapter Updated 12/13/22</p><hr>
-
-<h3>Locking Overview</h3>
-
-Xbase64 supports multi-user processing through file and record locks.
-Record locking restricts multiple cooperating programs from simultaneously
-accessing the same data and corrupting it. Without record and file locking
-in a multi-user environment, simultaneous access to the data and index files
-can cause the files to become inaccurate and unusable.<br><br>
-
-Automatic record locking is on by default in the Xbase64 library. To disable it,
-use method xbXBase::DisableDefaultAutoLock() and to enable it, use method xbXBase::EnableDefaultAutoLock().
-<br><br>
-Locking can also be enabled / disabled at the table level with with xbDbf::SetAutoLock().<br><br>
-If autolocking is disabled and the code base is being used in a multi user environment, it is
-up to the application program to verify the needed locks are set as there is no checking or
-setting any locks if autolocking is turned off. It is only safe to turn off the autolocking functionality
-if the library is being used in a single user environment.
-
-<br><br>
-The current Xbase64 record locking logic is modeled after DBase (tm) V7 locking.
-<br><br>
-
-The locking methods return either XB_LOCK_FAILED or XB_NO_ERROR. If they return
-XB_LOCK_FAILED the actual reason can be found in the global variable
-<em>errno</em> or function <em>perror()</em> can be executed to view the
-results.
-<br><br>
-
-The errno field may contain one of the following values if the lock was not
-successful.<br><br>
-<TABLE BORDER>
-<TR VALIGN="BASELINE">
-<TR><TH ALIGN="LEFT">Error Code<TD>Description
-<TR><TH ALIGN="LEFT">EBADF<TD>Invalid file descriptor
-<TR><TH ALIGN="LEFT">EINVAL<TD>Invalid lock information or file does not support locks
-<TR><TH ALIGN="LEFT">EACCESS<BR>EAGAIN<TD>Lock can not be set because it is blocked by an existing lock on the file.
-<TR><TH ALIGN="LEFT">ENOLCK<TD>The system is out of lock resources, too many file locks in place.
-<TR><TH ALIGN="LEFT">EDEADLK<TD>Deadlock condition
-<TR><TH ALIGN="LEFT">EINTR<TD>Process was interrupted by a signal while it was waiting
-</TABLE>
-<br><br>
-
-<h3>Linux/Windows File Locking Compatibility Issue</h3>
-
-There is a compatibility locking issue to be aware of. Windows environments allow for the exclusive
-opening of file handles and Linux/Unix platforms do not. If you are writing an application that will be
-using a tool like Dbase on a Windows machine, accessing a file on a Linux/Samba configure machine,
-be aware that the file could be opened in exclusive mode by DBase on the Windows system, and the same file could
-be simultaneously opened with a program on the Unix box. That could cause some issues.
-
-<br><br>
-In Unix, a program can not lock a file so another process can not access it.<br>
-In Windows, a program can lock a file so another process can not access it.<br>
-DBase(tm) supports routines to open files exclusively, preventing other users from opening a file.<br>
-Locking on the Mac/Apple platform only works on NFS shares. It does not work with SMB shares.
-
-<br><h3>Samba settings</h3>
-
-If you will be using Samba on Linux/Unix and sharing files between Linux and Windows machines,
-you will need to disable oplocks. In the smb.conf file, set:<br>
-<br>
-[sharename]<br>
-oplocks = False<br>
-level2 oplocks = False
-
-
-<br><h3>iLockFlavor</h3>
-
-The library was constructed in a manner so that it could be updated to support alternate lock "flavors".
-The 4.x.x library is built to mirror the DBase locking, but the structure is in place to expand to other locking
-types if needed.
-
-
-
-
-<br><br><br>
-<hr><br>
-<p><img src="xbase.jpg"><br><hr>
-</BODY>
-</HTML>
diff --git a/docs/html/xbc13.html b/docs/html/xbc13.html
deleted file mode 100755
index 9f51a85..0000000
--- a/docs/html/xbc13.html
+++ /dev/null
@@ -1,46 +0,0 @@
-
-<!DOCTYPE HTML PUBLIC>
-<HTML>
-<TITLE>Xbase DBMS Chapter 13</TITLE>
-<BODY BGCOLOR=#FFFFFF>
-<H2><p align="center">Logfiles</p></H2>
-<p align="center">Chapter Updated 11/29/22</p><hr>
-
-
-<h3>Logging</h3>
-
-The Xbase library includes a logging module that can be turned on or off for auditing purposes.
-
-See example code below for how to use the logging routines.
-
-<hr>
-
-#include "xbase.h"<br>
-using namespace xb;<br>
-<br>
-int main( int argCnt, char **av ){<br>
-
- #ifdef XB_LOGGING_SUPPORT<br>
- xbString sMsg;<br>
- xbString sLogFileName;<br>
- xbXBase x;<br>
- sLogFileName = "/home/xbase/logfiles/LogFile.txt";<br>
- x.SetLogFileName( sLogFileName );<br>
- x.EnableMsgLogging(); <br><br>
-
-
- std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;<br>
- sMsg.Sprintf( "Program [%s] initializing...", av[0] );<br>
- x.WriteLogMessage( sMsg );<br>
- std::cout << "Logging status is " << x.GetLogStatus() << std::endl;<br>
- sMsg = "A logfile message";<br>
- x.WriteLogMessage( sMsg );<br>
- x.DisableMsgLogging();<br>
- #endif /* XB_LOGGING_SUPPORT */<br>
- return 0;<br>
-}<br>
-
-<hr>
-<p><img src="xbase.jpg"><hr>
-</BODY>
-</HTML>
diff --git a/docs/html/xbc14.html b/docs/html/xbc14.html
deleted file mode 100755
index 2c086df..0000000
--- a/docs/html/xbc14.html
+++ /dev/null
@@ -1,113 +0,0 @@
-<!DOCTYPE HTML PUBLIC>
-<HTML>
-<TITLE>Xbase DBMS Chapter 14</TITLE>
-<BODY BGCOLOR=#FFFFFF>
-<H2><p align="center">CDX Indices</p></H2>
-<p align="center">Chapter Updated 12/08/22</p><hr>
-
-<h3>SQL Command Status</h3>
-
-Development of SQL support is still underway and very preliminary. As of the 4.0.3 version, the following SQL commands
-are available.<br><br>
-The SQL commands are modeled after industry standard SQL specifications and do what you would expect an SQL command to do.
-<br>
-Use of <em>[brackets]</em> in this chapter identifies optional components of a given command.
-<br><br>
-<hr>
-<h3>ALTER TABLE</h3>
-Expected format:<br>
-ALTER TABLE tablename.DBF RENAME TO newtablename.DBF
-<br><br>
-<hr>
-<h3>CREATE INDEX</h3>
-Expected format to create an Dbase 3, NDX index:<br>
-CREATE INDEX ixname.NDX ON tablename.dbf ( EXPRESSION ) [ASSOCIATE]
-
-<br><br>
-Expected format to create an Dbase 4, tag on an MDX index:<br>
-CREATE [UNIQUE] INDEX tagname ON tablename.DBF ( EXPRESSION ) [DESC] [FILTER .NOT. DELETED()]
-
-<br><br>
-The ASSOCIATE parameter is specific to Xbase64 library, it is used to associate non production (NDX) index file to a dbf
-file so it will be automatically opened with the dbf file whenever the dbf file is opened by the xbase64 routines.
-<br><br>
-The [ASSOCIATE] parameter is not used with MDX production indices
-<br><br>
-Xbase first looks for ".NDX" in the file name to determine if an NDX index should be created.
-If .NDX is not in the filename, it looks in the uda for "IXTYPE" for either NDX or MDX to
-detmermine the index type to create. if IXTYPE is not found, it creates an MDX tag.
-<br><br>
-The optional DESC parameter defines an entire index key as descending. This is
-different than other SQL implementations where specific fields can be descending.
-<br><br>
-The optional FILTER parameter is specific to the XBASE64 library, is it used to assign a filter to a tag in an
-MDX style index. Everything to the right of the keyword FILTER is considered part of the filter.
-<br><br>
-The original DBASE indices used to '+' to create an index on more than one field
-<br>ie: FIELD1+FIELD2+FIELD3
-<br><brSQL uses commas: ie: FIELD1, FIELD2, FIELD3
-<br>
-The Xbase library supports either '+' or ',' when creating mutli field indices.
-<br><br>
-<hr>
-
-
-
-<h3>CREATE TABLE</h3>
-Expected format:<br>
-CREATE TABLE tablename.dbf (Field1 CHAR(10), INTFLD1 INTEGER, ... )
-<br><br>
-<table border=1>
-<tr><th>SQL TYPE</th><th>XBASE Field Type</th></tr>
-<tr><td>SMALLINT</td><td>NUMERIC(6,0)</td></tr>
-<tr><td>INTEGER</td><td>NUMERIC(11,0)</td></tr>
-<tr><td>DECIMAL(x,y)</td><td>NUMERIC(x+1,y)</td></tr>
-<tr><td>NUMERIC(x,y)</td><td>NUMERIC(x,y)</td></tr>
-<tr><td>FLOAT(x,y)</td><td>FLOAT(x,y)</td></tr>
-<tr><td>CHAR(n)</td><td>CHARACTER(n)</td></tr>
-<tr><td>DATE</td><td>DATE</td></tr>
-<tr><td>VARCHAR</td><td>MEMO</td></tr>
-<tr><td>LOGICAL</td><td>LOGICAL</td></tr>
-</table>
-<br>
-<hr>
-
-
-<h3>DELETE</h3>
-Expected format:<br>
-DELETE FROM tablename.DBF [WHERE expression]
-<br><br>
-<hr>
-
-
-<h3>DROP INDEX</h3>
-Expected format:<br>
-DROP INDEX [IF EXISTS] ixname.NDX ON tablename.DBF<br>
-DROP INDEX [IF EXISTS] tagname ON tablename.DBF<br>
-<br>
-
-
-<hr>
-<h3>DROP TABLE</h3>
-Expected format:<br>
-DROP TABLE [IF EXISTS] tablename.DBF
-<br>
-<hr>
-<h3>INSERT</h3>
-Expexted format:<br>
-INSERT INTO tablename (field1, field2, field3,...) VALUES ( 'charval', numval, 'what is the correct odbc date format to use? CCYYMMDD');
-<br><br>
-<hr>
-<h3>SET</h3>
-Used to set a variable name<br>
-Expected format:<br>
-SET ATTRIBUTE = DATAVALUE<br>
-SET ATTRIBUTE = ^ (to delete an entry) <br>
-<br>
-<hr><br><br>
-<p><img src=xbase.jpg><br><hr>
-
-</BODY>
-</HTML>
-
-
diff --git a/docs/html/xbc15.html b/docs/html/xbc15.html
deleted file mode 100755
index fde33b8..0000000
--- a/docs/html/xbc15.html
+++ /dev/null
@@ -1,96 +0,0 @@
-
-<!DOCTYPE HTML PUBLIC>
-<HTML>
-<TITLE>Xbase DBMS Chapter 15</TITLE>
-<BODY BGCOLOR=#FFFFFF>
-<H2><p align="center">Block Read Functionality</p></H2>
-<p align="center">Chapter Updated 2/1/23</p><hr>
-
-
-<h3>Block Reads</h3>
-
-As of release 4.1.1, the Xbase library includes functionality for reading a DBF file in blocks, rather than one record at a time.<br><br>
-
-This functionality can be used to improve application performance in situations where a data file is being read sequentially.
-For situations where records are retrieved randomly from the file, enabling this probably won't help much. In short, this
-can be turned on when accessing a file sequentially and should be left off when not processing sequentially.<br><br>
-
-The logic is all handled internally within the library, all that is needed is to enable it and the library handles the rest.<br><br>
-
-<h3>One Caveat</h3>
-This functionality was originally designed with reporting in mind and doesn't currently have any auto locking associated with it.
-<br><br>
-
-
-<h3>Sample Code</h3>
-See example code below for how to enable and disable the feature.
-
-
-<hr>
-
-#include "xbase.h"<br>
-using namespace xb;<br>
-<br>
-int main(int ac,char** av)<br>
-{<br>
- xbXBase x;<br>
- xbInt16 iRc;<br>
- x.EnableMsgLogging();<br>
- x.SetLogSize( 1000000L );<br>
-<br>
- if (ac <= 1) {<br>
- std::cout << "Usage: xb_dumprecs filename..." << std::endl;<br>
- return 1;<br>
- }<br>
-<br>
- xbDbf *MyFile = NULL;<br>
- if(( iRc = x.OpenHighestVersion( av[1], "", &MyFile )) != XB_NO_ERROR ){<br>
- std::cout << "Could not open file iRc = " << iRc << " file = " << av[1] << std::endl;<br>
- x.DisplayError( iRc );<br>
- return 0;<br>
- }<br>
-<br>
-// std::cout << "Processing file sequentially from beginning..." << std::endl;<br>
-<br>
-<br>
-<b>
- // turn on Block Read Processing<br>
- #ifdef XB_BLOCKREAD_SUPPORT<br>
- MyFile->EnableBlockReadProcessing();<br>
- #endif<br>
-</b>
-<br>
- xbUInt32 j = 0;<br>
- xbUInt32 ulRecCnt = 0;<br>
-<br>
- iRc = MyFile->GetRecordCnt( ulRecCnt );<br>
-<br>
- if( iRc < XB_NO_ERROR )<br>
- return iRc;<br>
- while( j < ulRecCnt ){<br>
- if( j == 0 )<br>
- iRc = MyFile->DumpRecord(++j, 2, 2 );<br>
- else<br>
- iRc = MyFile->DumpRecord(++j, 2, 1 );<br>
- if( iRc != XB_NO_ERROR ){<br>
- x.DisplayError( iRc );<br>
- return 1;<br>
- }<br>
- }<br>
- std::cout << j << " Records processed." << std::endl;<br>
-<br>
-<br><b>
- // optionally turn off Block Read Processing<br>
- #ifdef XB_BLOCKREAD_SUPPORT<br>
- MyFile->DisableBlockReadProcessing();<br>
- #endif<br></b>
-<br>
- MyFile->Close();<br>
- return 0;<br>
-}<br>
-<br>
-
-<hr>
-<p><img src="xbase.jpg"><hr>
-</BODY>
-</HTML>
diff --git a/docs/html/xbc16.html b/docs/html/xbc16.html
deleted file mode 100755
index 873264d..0000000
--- a/docs/html/xbc16.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<!DOCTYPE HTML PUBLIC>
-<HTML>
-<TITLE>Xbase DBMS Chapter 16</TITLE>
-<BODY BGCOLOR=#FFFFFF>
-<H2><p align="center">Class Inventory</p></H2>
-<p align="center">Chapter Updated 2/1/23</p><hr>
-<br>
-<center><h3>Class Descriptions</h3></center>
-
-<center>
-<table border=1>
-<tr><th>Class</th><th>Description</th></tr>
-<tr><td>xbBcd</td><td>Supports binary coded decimal data</td></tr>
-<tr><td>xbBlockRead<td>Supports block read functionality for improved sequential file access performance.</td></tr>
-<tr><td>xbDate</td><td>Support date operations on a given date formatted as YYYYMMDD</td></tr>
-<tr><td>xbDbf</td><td>Base class for DBF file handling. If you are adding support for a new file type, <br>derive new file type class from this.</td></tr>
-<tr><td>xbDbf3</td><td>Derived from xbDbf, supports DBase V3 files</td></tr>
-<tr><td>xbDbf4</td><td>Derived from xbDbf, supports DBase V4 files</td></tr>
-<tr><td>xbExp</td><td>Class for supporting expression logic</td></tr>
-<tr><td>xbExpNode</td><td>Class definition of a single node, utilized by xbExp</td></tr>
-<tr><td>xbFile</td><td>Main file class. If you are porting this library to another platform, start here</td></tr>
-<tr><td>xbFilter</td><td>Supports filters</td></tr>
-<tr><td>xbIx</td><td>Base class for index file support. If you are adding support for a new index type, <br>derive new index type class from this.</td></tr>
-<tr><td>xbIxNdx</td><td>Derived from xbIx, supports NDX style indices.</td></tr>
-<tr><td>xbIxMdx</td><td>Derived from xbIx, supports MDX style indices</td></tr>
-<tr><td>xbLinkList</td><td>Class supporting linked list functionality</td></tr>
-<tr><td>xbLinkListOrd</td><td>Class supporting ordered linked list functionality</td></tr>
-<tr><td>xbLinkListNode</td><td>Class defining one node, used by xbLinkList and xbLinkListOrd</td></tr>
-<tr><td>xbLog</td><td>Class supporting general log file activity</td></tr>
-<tr><td>xbMemo</td><td>Base class for supporting memo (.DBT) files. If you are adding support for a new memo type, <br>derive new memo type class from this.</td></tr>
-<tr><td>xbMemoDbt3</td><td>Derived from xbMemo, supports V3 Memo files</td></tr>
-<tr><td>xbMemoDbt4</td><td>Derived from xbMemo, supports V3 Memo files</td></tr>
-<tr><td>xbSql</td><td>Supports SQL access</td></tr>
-<tr><td>xbSsv</td><td>Base class, shared system values</td></tr>
-<tr><td>xbString</td><td>String handling class</td></tr>
-<tr><td>xbTag</td><td>Class to support index tags</td></tr>
-<tr><td>xbTblMgr</td><td>Class used internally in the library for managing multiple open files/tables</td></tr>
-<tr><td>xbUda</td><td>Class for supporting fields for the xbSql functions. Stands for User data area</td></tr>
-<tr><td>xbXBase</td><td>Class to tie everything together. Every application program starts with one of these</td></tr>
-</table>
-</center>
-
-<hr>
-<br><br>
-Fix me...
-<p><img src="Xbase64ClassDiagram.jpg"><br>
-
-<br><br>
-<hr>
-<p><img src="xbase.jpg"><br><hr>
-</BODY>
-</HTML>
diff --git a/docs/html/xbc17.html b/docs/html/xbc17.html
deleted file mode 100755
index c0b2208..0000000
--- a/docs/html/xbc17.html
+++ /dev/null
@@ -1,219 +0,0 @@
-<!DOCTYPE HTML PUBLIC>
-<HTML>
-<TITLE>Xbase DBMS Chapter 17</TITLE>
-<BODY BGCOLOR=#FFFFFF>
-<H2><p align="center">Class xbSsv</p></H2>
-<p align="center">Chapter Updated 2/7/23</p><hr>
-
-<h3>Class xbSsv - Shared System Values.</h3>
-
-Base class xbSsv is used for maintaining static variables used system
-wide by the XBase library routines and is a base class that is used by the xbXBase class.
-See the diagram in chapter 15 to gain an understanding of where the xbSsv class sits in relation to the
-other classes. Accessing the methods in this class are done via the xbXBase class instance.<br><br>
-Additionally, there are a few other misc routines contained in this class that are available to all
-subordinate classes/objects.
-<br><br><br><br>
-
-
-<center>
-<table border=1>
-<tr><th width=40%>Method</th><th>Description</th></tr>
-
-<tr><td>void BitDump( unsigned char c ) const<br>void BitDump( char c ) const</td><td>These routines dump the bits for a specified char field to stdout.</td></tr>
-<tr><td>xbBool BitSet( unsigned char c, xbInt16 iBitNo ) const</td><td>This routine will set a specified bit in a char field.</td></tr>
-<tr><td>void DisplayError( xbInt16 ErrorCode ) const</td><td>This routine prints a description for a specifed error to stdout.</td></tr>
-
-<tr><td>xbString& GetDataDirectory() const<br>void SetDataDirectory( const xbString &sDataDirectory )</td>
- <td>Get and Set the current directory where the library routines expect to find the .DBF, .DBT, .NDX and .MDX files.</td></tr>
-
-<tr><td>xbString& GetDefaultDateFormat() const<br>void SetDefaultDateFormat( const xbString &sDefaultDateFormat )</td>
- <td>Get and Set the current default date format used by the date formatting routines if no format specifier is provided.</td></tr>
-
-<tr><td>xbInt16 GetEndianType() const</td><td>Returns the current Endian type of the machine the library is operating on.</td></tr>
-<tr><td>const char *GetErrorMessage( xbInt16 ErrorCode ) const</td><td>Returns a pointer to an error message for a given error number.</td></tr>
-
-<tr><td>xbBool GetDefaultAutoCommit() const<br>void SetDefaultAutoCommit( xbBool bDefaultAutoCommit )</td>
- <td>Get and Set the default auto commit status. If auto commit is on, the library will automatically post any updates to the database when navigating away from an updated record.</td></tr>
-
-<tr><td>xbBool GetHomeDir( xbString &sHomeDirOut )</td><td>Get the home directory for the current user.</td></tr>
-
-<tr><td>xbString& GetLogDirectory() const<br>void SetLogDirectory( const xbString &sLogDirectory )</td>
- <td>Get and set the directory location for any system generated logfiles.</td></tr>
-<tr><td>xbString& GetLogFileName() const</td><td>Returns the default log file name.</td></tr>
-
-
-<tr><td>xbBool GetMultiUser() const<br>void SetMultiUser( xbBool bMultiUser )</td>
- <td>Get and set multi user status. This turns the auto locking on and off. For better performance in single user applications, turn multuser off.</td></tr>
-
-<tr><td>xbInt16 GetUniqueKeyOpt() const<br>xbInt16 SetUniqueKeyOpt( xbInt16 iUniqueKeyOpt )</td>
- <td>Determines library behavior for unique key processing. The original Dbase (tm) product allowed duplicate recrds in the .DBF file when the unique option was specified for a given index tag.
- The Xbase library supports either the original DBase behavior (XB_EMULATE_DBASE), or the prevention of duplicate records for duplicate keys (XB_HALT_ON_DUPKEY).</td></tr>
-
-
-<tr><td>xbInt16 GetDefaultLockRetries() const<br>void SetDefaultLockRetries( xbInt16 iRetryCount )</td>
- <td>Get and Set the number of times to attempt a lock</td></tr>
-
-<tr><td>xbInt32 GetDefaultLockWait() const<br>void SetDefaultLockWait( xbInt32 lRetryWait )
- </td><td>Get and Set the wait time between lock attempts.</td></tr>
-
-<tr><td>xbInt16 GetDefaultLockFlavor() const<br>void SetDefaultLockFlavor( xbInt16 iLockFlavor )
- </td><td>For future use. With current versions, only DBase (TM) locking offsets are supported.</td></tr>
-
-<tr><td>xbBool GetDefaultAutoLock() const<br>void SetDefaultAutoLock( xbBool bAutoLock )<br>void EnableDefaultAutoLock()<br>void DisableDefaultAutoLock()
- </td><td>Set, Get or update Auto Lock Status</td></tr>
-
-
-<tr><td>xbInt16 GetCreateMdxBlockSize() const<br>xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize )
- </td><td>Set or get MDX Index block size. Must be a multiple of 512.</td></tr>
-
-<tr><td>xbUInt32 GetDefaultBlockReadSize() const<br>void SetDefaultBlockReadSize( xbUInt32 ulDfltBlockReadSize )
- </td><td>Set or Get the default block size for Block Read functionality. Block reading is used to improve sequentential access performance.</td></tr>
-</table>
-
-<br><br>
-
-<h3>Example program using xbSsv methods</h3>
-</center>
-<xmp>
-/* xb_ex_ssv.cpp
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2021,2022,2023 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-This program demonstrates using functionality of the xbSsv class (Shared system values)
-
-*/
-
-#include "xbase.h"
-
-using namespace xb;
-
-int main( int ac, char ** av ){
-
- xbXBase x; // set up xbase for business
- xbString sMsg; // a message string
-
- sMsg.Sprintf( "Program [%s] initializing...", av[0] );
- std::cout << sMsg.Str() << std::endl;
-
- // example code to set up log file usage
- #ifdef XB_LOGGING_SUPPORT
- char cSeperator; // is this a unix (/) or windows (\) file system
- xbString sLog; // general string for log file activities
- sLog = x.GetLogFqFileName().Str(); // get the system default log file name
- std::cout << "System default logfile is [" << sLog.Str() << "]" << std::endl;
-
- cSeperator = sLog.GetPathSeparator(); // get the seperator from
- std::cout << "Path seperator = [" << cSeperator << "]" << std::endl;
-
- sLog.Sprintf( "..%c", cSeperator );
- x.SetLogDirectory( sLog );
- std::cout << "sLog = [" << sLog.Str() << "]\n";
-
- sLog = x.GetLogFqFileName().Str(); // get the system default log file name
- std::cout << "New logfile is [" << sLog.Str() << "]" << std::endl;
-
- // turn on logging after file name set
- x.EnableMsgLogging();
- #endif // XB_LOGGING_SUPPORT
-
- // const char *GetErrorMessage( xbInt16 ErrorCode ) const;
- // void DisplayError( xbInt16 ErrorCode ) const;
- std::cout << "DisplayError( -100 ) - ";
- x.DisplayError( -100 );
- // << "]" << std::endl;
-
-
- // void SetDefaultDateFormat( const xbString &sDefaultDateFormat );
- // xbString& GetDefaultDateFormat() const;
- std::cout << "GetDefaultDateFormat() - " << x.GetDefaultDateFormat() << std::endl;
-
- // void SetDataDirectory ( const xbString &sDataDirectory );
- // xbString& GetDataDirectory() const;
- std::cout << "GetDataDirectory() - " << x.GetDataDirectory() << std::endl;
-
- // xbInt16 GetEndianType() const;
- if( x.GetEndianType() == 'L' )
- std::cout << "Little Endian Architecture." << std::endl;
- else
- std::cout << "Bid Endian Architecture." << std::endl;
-
- //xbBool GetDefaultAutoCommit() const;
- //void SetDefaultAutoCommit( xbBool bDefaultAutoCommit );
- if( x.GetDefaultAutoCommit())
- std::cout << "AutoCommit is on." << std::endl;
- else
- std::cout << "AutoCommit is off." << std::endl;
-
- //xbBool GetMultiUser () const;
- //void SetMultiUser ( xbBool bMultiUser );
- if( x.GetMultiUser())
- std::cout << "Multi user (locking) is enabled." << std::endl;
- else
- std::cout << "Multi user (locking) not enabled." << std::endl;
-
- #if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
- // xbInt16 GetUniqueKeyOpt () const;
- // xbInt16 SetUniqueKeyOpt ( xbInt16 iUniqueKeyOpt );
- // XB_HALT_ON_DUPKEY
- // XB_EMULATE_DBASE
- if( x.GetUniqueKeyOpt() == XB_HALT_ON_DUPKEY )
- std::cout << "UniqueKey option - XB_HALT_ON_DUPKEY" << std::endl;
- else if( x.GetUniqueKeyOpt() == XB_EMULATE_DBASE )
- std::cout << "UniqueKey option - XB_EMULATE_DBASE" << std::endl;
- #endif // (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
-
- #ifdef XB_LOCKING_SUPPORT
- //xbInt16 GetDefaultLockRetries () const;
- //void SetDefaultLockRetries ( xbInt16 iRetryCount );
- //xbInt32 GetDefaultLockWait () const;
- //void SetDefaultLockWait ( xbInt32 lRetryWait );
- //xbInt16 GetDefaultLockFlavor () const;
- //void SetDefaultLockFlavor ( xbInt16 iLockFlavor );
- //xbBool GetDefaultAutoLock () const;
- //void SetDefaultAutoLock ( xbBool bAutoLock );
- //void EnableDefaultAutoLock ();
- //void DisableDefaultAutoLock ();
-
- std::cout << "GetDefaultLockRetries() - " << x.GetDefaultLockRetries() << std::endl;
- std::cout << "GetDefaultLockWait() - " << x.GetDefaultLockWait() << std::endl;
- std::cout << "GetDefaultAutoLock() - " << x.GetDefaultAutoLock() << std::endl;
- #endif // XB_LOCKING_SUPPORT
-
- #ifdef XB_MDX_SUPPORT
- // xbInt16 GetCreateMdxBlockSize() const;
- // xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );
- std::cout << "GetCreateMdxBlockSize() - " << x.GetCreateMdxBlockSize() << std::endl;
- #endif // XB_MDX_SUPPORT
-
- #ifdef XB_BLOCKREAD_SUPPORT
- // xbUInt32 GetDefaultBlockReadSize() const;
- // void SetDefaultBlockReadSize( xbUInt32 ulDfltBlockReadSize );
- std::cout << "GetDefaultBlockReadSize() - " << x.GetDefaultBlockReadSize() << std::endl;
- #endif // XB_BLOCKREAD_SUPPORT
-
- //xbBool BitSet ( unsigned char c, xbInt16 iBitNo ) const;
- //void BitDump ( unsigned char c ) const;
- //void BitDump ( char c ) const;
- std::cout << "BitDump( 'A' ) - ";
- x.BitDump( 'A' );
-
- return 0;
-}
-
-
-</xmp>
-
-<br><br>
-<hr>
-<p><img src="xbase.jpg"><br><hr>
-</BODY>
-</HTML>
diff --git a/docs/html/xbc18.html b/docs/html/xbc18.html
deleted file mode 100755
index 36f3b50..0000000
--- a/docs/html/xbc18.html
+++ /dev/null
@@ -1,252 +0,0 @@
-<!DOCTYPE HTML PUBLIC>
-<HTML>
-<TITLE>Xbase DBMS Chapter 18</TITLE>
-<BODY BGCOLOR=#FFFFFF>
-<H2><p align="center">Class xbXBase</p></H2>
-<p align="center">Chapter Updated 2/7/23</p><hr>
-
-<h3>Class xbXBase - Core Level Class</h3>
-
-
-The xbXBase class is the core class that needs to be in every application program.
-Established an instance of class xbXBase before any other Xbase calls are made.
-
-<i>xbXBase x</i>
-
-<br><br>
-xbXBase is derived from base classes xbTblMgr and xbSsv.
-<br><br><br><br>
-
-
-
-
-
-<center>
-<table border=1>
-<tr><th width=40%>Method</th><th>Description</th><th>Category</th></tr>
-
-<tr><td>xbInt16 CloseAllTables()</td><td>Close all open tables.</td><td>Table</tr>
-
-<tr><td>xbInt16 OpenHighestVersion( const xbString &sTableName, const xbString &sAlias, xbDbf &dbf, int dummy )</td><td>Open highest version available for sTableName.</td><td>Table</tr>
-<tr><td>xbInt16 OpenHighestVersion( const xbString &sTableName, const xbString &sAlias, xbDbf **dbf )</td><td>Open highest version available for sTableName.</td><td>Table</tr>
-<tr><td>xbDbf * Open( const xbString &sTableName, xbInt16 &iRc )</td><td>Open the highest available version of the dbf file. Defaults to XB_READ_WRITE and XB_MULTI_USER mode.</td><td>Table</tr>
-<tr><td>xbDbf * Open( const xbString &sTableName, const xbString &sAlias, xbInt16 iOpenMode, xbInt16 iShareMode, xbInt16 iVersion, xbInt16 &iRc )</td><td>Open table.</td><td>Table</tr>
-
-<tr><td colspan=3><hr></td></tr>
-<tr><td>void DisableMsgLogging()</td><td>Disable logging routines.</td><td>Logging</td></tr>
-<tr><td>void EnableMsgLogging ()</td><td>Enable logging routines.</td><td>Logging</td></tr>
-<tr><td>xbInt16 FlushLog()</td><td>Flush any queued logfile updates to disk.</td><td>Logging</td></tr>
-<tr><td>const xbString &GetLogDirectory () const</td><td>Get the current logfile directory.</td><td>Logging</td></tr>
-<tr><td>const xbString &GetLogFileName () const</td><td>Get the current logfile name.</td><td>Logging</td></tr>
-<tr><td>const xbString &GetLogFqFileName() const</td><td>Get fully qualified logfile name.</td><td>Logging</td></tr>
-<tr><td>xbBool GetLogStatus () const</td><td>Get the logging status.</td><td>Logging</td></tr>
-<tr><td>void SetLogDirectory( const xbString &sLogFileDirectory )</td><td>Set the log directory. Must be done while logging is off.</td><td>Logging</td></tr>
-<tr><td>void SetLogFileName( const xbString &sLogFileName )</td><td>Set the log file name. Must be done while logging is off.</td><td>Logging</td></tr>
-<tr><td>void SetLogSize( size_t lSize )</td><td>Set the logfile size. After the size is reached, the log file roll.</td><td>Logging</td></tr>
-<tr><td>xbInt16 WriteLogBytes ( xbUInt32 lCnt, const char *p )</td><td>Write lCnt bytes pointed to by pointer p to the logfile.</td><td>Logging</td></tr>
-<tr><td>xbInt16 WriteLogMessage( const xbString &sLogMessage, xbInt16 iOutputOpt = 0 )</td><td>Write a string to the logfile.</td><td>Logging</td></tr>
-
-<tr><td colspan=3><hr></td></tr>
-<tr><td>xbInt16 xbXBase::GetCmdLineOpt( xbInt32 lArgc, char **sArgv, xbString &sOptRqst, xbString &sParmOut )<br>
-xbXBase::GetCmdLineOpt( xbInt32 lArgc, char **sArgv, const char *sOptRqst, xbString &sParmOut )</td><td>Parse command line values seeking given parameter info.</td><td>Misc</td></tr>
-
-<tr><td>void xbSleep( xbInt32 lMillisecs )</td><td>Sleep command, used mainly in lock commands for waiting between retries.</td><td>Misc</td></td></tr>
-
-<tr><td colspan=3><hr></td></tr>
-<tr><td>xbInt16 ABS( xbDouble dIn, xbDouble &dOut )</td><td>Dbase ABS function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 ALLTRIM( const xbString &sIn, xbString &sOut )</td><td>Dbase ALLTRIM function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 ASC( const xbString &s, xbDouble &dAscOut )</td><td>Dbase ASC function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 AT( const xbString &sSrchFor, const xbString &sBase, xbDouble &dPos )</td><td>Dbase AT function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 CDOW( xbDate &dInDate, xbString &sOutDow )</td><td>Dbase CDOW function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 CHR( xbDouble dAsciCd, xbString &sOut )</td><td>Dbase CHR function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 CMONTH( xbDate &dInDate, xbString &sOutMonth )</td><td>Dbase CMONTH function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 CTOD( const xbString &sInDate, xbDate &dOutDate )</td><td>Dbase CTOD function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 DATE( xbDate &dOutDate )</td><td>Dbase DATE function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 DAY( const xbDate &dInDate, xbDouble &dOutDay )</td><td>Dbase DAY function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 DEL( xbDbf * d, xbString &sOut, xbInt16 iRecBufSw = 0 )</td><td>Dbase DEL function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 DELETED( xbDbf * d, xbBool &bOut, xbInt16 iRecBufSw = 0 )</td><td>Dbase DELETED function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 DESCEND( const xbString &sIn,xbString &sOut )<br>xbInt16 DESCEND( const xbDate &dInDate, xbDate &dOutDate )<br>xbInt16 DESCEND( const xbDouble dIn, xbDouble &dsOut )</td><td>Dbase DESCEND function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 DOW( const xbDate &sInDate, xbDouble &dDowOut )</td><td>Dbase DOW function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 DTOC( xbDate &dInDate, xbString &sOutFmtDate )</td><td>Dbase DTOC function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 DTOS( xbDate &dInDate, xbString &sOutFmtDate )</td><td>Dbase DTOS function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 EXP( xbDouble dIn, xbDouble &dOut )</td><td>Dbase EXP function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 IIF( xbBool bResult, const xbString &sTrueResult, const xbString &sFalseResult, xbString &sResult )</td><td>Dbase IIF function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 INT( xbDouble dIn, xbDouble &dOut )</td><td>Dbase INT function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 ISALPHA( const xbString &s, xbBool &bResult )</td><td>Dbase ISALPHA function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 ISLOWER( const xbString &s, xbBool &bResult )</td><td>Dbase ISLOWER function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 ISUPPER( const xbString &s, xbBool &bResult )</td><td>Dbase ISUPPER function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 LEFT( const xbString &sIn, xbUInt32 lCharCnt, xbString &sOut )</td><td>Dbase LEF function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 LEN( const xbString &sIn, xbDouble &dLen )</td><td>Dbase LEN function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 LOG( xbDouble dIn, xbDouble &dOut )</td><td>Dbase LOG function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 LOWER( const xbString &sIn, xbString &sOut )</td><td>Dbase LOWER function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 LTRIM( const xbString &sIn, xbString & sOut )</td><td>Dbase LTRIM function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 MAX( xbDouble dIn1, xbDouble dIn2, xbDouble &dOut )</td><td>Dbase MAX function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 MIN( xbDouble dIn1, xbDouble dIn2, xbDouble &dOut )</td><td>Dbase MIN function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 MONTH( xbDate &dInDate, xbDouble &dMonthOut )</td><td>Dbase MONTH function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 RECCOUNT( xbDbf * d, xbDouble &dRecOut )</td><td>Dbase RECCOUNT function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 RECNO( xbDbf * d, xbDouble &dRecOut )</td><td>Dbase RECNO function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 REPLICATE( const xbString &sIn, xbUInt32 ulRepCnt, xbString &sOut )</td><td>Dbase REPLICATE function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 RIGHT( const xbString &sIn, xbUInt32 iCharCnt, xbString &sOut )</td><td>Dbase RIGHT function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 RTRIM( const xbString &sIn, xbString &sOut )</td><td>Dbase RTRIM function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 SPACE( xbInt32 lCnt, xbString &sOut )</td><td>Dbase SPACE function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 SQRT( xbDouble dBase, xbDouble &dSqrRt )</td><td>Dbase SQRT function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 STOD( const xbString &sIn, xbDate &sDateOut )</td><td>Dbase STOD function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 STR( xbDouble dIn, xbString &sOut )</td><td>Dbase function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 STR( xbDouble dIn, xbUInt32 ulLen, xbString &sOut )<br>
- xbInt16 STR( xbDouble dIn, xbUInt32 ulLen, xbUInt32 ulDec, xbString &sOut )<br>
- xbInt16 STR( xbDouble dIn, xbUInt32 ulLen, xbUInt32 ulDec, xbString &sPadChar, xbString &sOut )</td><td>Dbase STR function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 STRZERO( xbDouble dIn, xbUInt32 ulLen, xbUInt32 ulDec, xbString &sOut )</td><td>Dbase STRZERO function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 SUBSTR( const xbString &sIn, xbUInt32 ulStartPos, xbUInt32 ulLen, xbString &sOut )</td><td>Dbase SUBSTR function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 TRIM( const xbString &sIn, xbString &sOut )</td><td>Dbase TRIM function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 UPPER( const xbString &sIn, xbString &sOut )</td><td>Dbase UPPER function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 VAL( const xbString &sIn, xbDouble &dOut )</td><td>Dbase VAL function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 YEAR( xbDate &dInDate, xbDouble &dOutYear )</td><td>Dbase YEAR function.</td><td>Expression</td></tr>
-</table>
-
-<br><br>
-<hr>
-
-<h3>Example program using xbXbase methods</h3>
-</center>
-<xmp>
-/* xb_ex_ssv.cpp
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2021,2022,2023 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-This program demonstrates using functionality of the xbSsv class (Shared system values)
-
-*/
-
-#include "xbase.h"
-
-using namespace xb;
-
-int main( int ac, char ** av ){
-
- xbXBase x; // set up xbase for business
- xbString sMsg; // a message string
-
- sMsg.Sprintf( "Program [%s] initializing...", av[0] );
- std::cout << sMsg.Str() << std::endl;
-
- // example code to set up log file usage
- #ifdef XB_LOGGING_SUPPORT
- char cSeperator; // is this a unix (/) or windows (\) file system
- xbString sLog; // general string for log file activities
- sLog = x.GetLogFqFileName().Str(); // get the system default log file name
- std::cout << "System default logfile is [" << sLog.Str() << "]" << std::endl;
-
- cSeperator = sLog.GetPathSeparator(); // get the seperator from
- std::cout << "Path seperator = [" << cSeperator << "]" << std::endl;
-
- sLog.Sprintf( "..%c", cSeperator );
- x.SetLogDirectory( sLog );
- std::cout << "sLog = [" << sLog.Str() << "]\n";
-
- sLog = x.GetLogFqFileName().Str(); // get the system default log file name
- std::cout << "New logfile is [" << sLog.Str() << "]" << std::endl;
-
- // turn on logging after file name set
- x.EnableMsgLogging();
- #endif // XB_LOGGING_SUPPORT
-
- // const char *GetErrorMessage( xbInt16 ErrorCode ) const;
- // void DisplayError( xbInt16 ErrorCode ) const;
- std::cout << "DisplayError( -100 ) - ";
- x.DisplayError( -100 );
- // << "]" << std::endl;
-
-
- // void SetDefaultDateFormat( const xbString &sDefaultDateFormat );
- // xbString& GetDefaultDateFormat() const;
- std::cout << "GetDefaultDateFormat() - " << x.GetDefaultDateFormat() << std::endl;
-
- // void SetDataDirectory ( const xbString &sDataDirectory );
- // xbString& GetDataDirectory() const;
- std::cout << "GetDataDirectory() - " << x.GetDataDirectory() << std::endl;
-
- // xbInt16 GetEndianType() const;
- if( x.GetEndianType() == 'L' )
- std::cout << "Little Endian Architecture." << std::endl;
- else
- std::cout << "Bid Endian Architecture." << std::endl;
-
- //xbBool GetDefaultAutoCommit() const;
- //void SetDefaultAutoCommit( xbBool bDefaultAutoCommit );
- if( x.GetDefaultAutoCommit())
- std::cout << "AutoCommit is on." << std::endl;
- else
- std::cout << "AutoCommit is off." << std::endl;
-
- //xbBool GetMultiUser () const;
- //void SetMultiUser ( xbBool bMultiUser );
- if( x.GetMultiUser())
- std::cout << "Multi user (locking) is enabled." << std::endl;
- else
- std::cout << "Multi user (locking) not enabled." << std::endl;
-
- #if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
- // xbInt16 GetUniqueKeyOpt () const;
- // xbInt16 SetUniqueKeyOpt ( xbInt16 iUniqueKeyOpt );
- // XB_HALT_ON_DUPKEY
- // XB_EMULATE_DBASE
- if( x.GetUniqueKeyOpt() == XB_HALT_ON_DUPKEY )
- std::cout << "UniqueKey option - XB_HALT_ON_DUPKEY" << std::endl;
- else if( x.GetUniqueKeyOpt() == XB_EMULATE_DBASE )
- std::cout << "UniqueKey option - XB_EMULATE_DBASE" << std::endl;
- #endif // (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
-
- #ifdef XB_LOCKING_SUPPORT
- //xbInt16 GetDefaultLockRetries () const;
- //void SetDefaultLockRetries ( xbInt16 iRetryCount );
- //xbInt32 GetDefaultLockWait () const;
- //void SetDefaultLockWait ( xbInt32 lRetryWait );
- //xbInt16 GetDefaultLockFlavor () const;
- //void SetDefaultLockFlavor ( xbInt16 iLockFlavor );
- //xbBool GetDefaultAutoLock () const;
- //void SetDefaultAutoLock ( xbBool bAutoLock );
- //void EnableDefaultAutoLock ();
- //void DisableDefaultAutoLock ();
-
- std::cout << "GetDefaultLockRetries() - " << x.GetDefaultLockRetries() << std::endl;
- std::cout << "GetDefaultLockWait() - " << x.GetDefaultLockWait() << std::endl;
- std::cout << "GetDefaultAutoLock() - " << x.GetDefaultAutoLock() << std::endl;
- #endif // XB_LOCKING_SUPPORT
-
- #ifdef XB_MDX_SUPPORT
- // xbInt16 GetCreateMdxBlockSize() const;
- // xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );
- std::cout << "GetCreateMdxBlockSize() - " << x.GetCreateMdxBlockSize() << std::endl;
- #endif // XB_MDX_SUPPORT
-
- #ifdef XB_BLOCKREAD_SUPPORT
- // xbUInt32 GetDefaultBlockReadSize() const;
- // void SetDefaultBlockReadSize( xbUInt32 ulDfltBlockReadSize );
- std::cout << "GetDefaultBlockReadSize() - " << x.GetDefaultBlockReadSize() << std::endl;
- #endif // XB_BLOCKREAD_SUPPORT
-
- //xbBool BitSet ( unsigned char c, xbInt16 iBitNo ) const;
- //void BitDump ( unsigned char c ) const;
- //void BitDump ( char c ) const;
- std::cout << "BitDump( 'A' ) - ";
- x.BitDump( 'A' );
-
- return 0;
-}
-
-
-</xmp>
-
-<br><br>
-<hr>
-<p><img src="xbase.jpg"><br><hr>
-</BODY>
-</HTML>
diff --git a/docs/html/xbc2.html b/docs/html/xbc2.html
deleted file mode 100755
index 72a6009..0000000
--- a/docs/html/xbc2.html
+++ /dev/null
@@ -1,267 +0,0 @@
-<!DOCTYPE HTML PUBLIC>
-<HTML>
-<TITLE>Xbase DBMS Chapter 2</TITLE>
-<BODY BGCOLOR=#FFFFFF>
-<H2><p align="center">Database Overview</p></H2>
-<p align="center">Chapter Updated 11/21/22</p><hr>
-
-The objective of this chapter is to provide information regarding how
-the database files are utilized and document the various record structures.
-With the exception of the brief section on the record buffer, the
-information presented in this chapter is not required to use the
-Xbase library. It is mainly information describing internal file
-structures utilized by the Xbase routines.<br><br>
-
-Xbase DBF files are comprised of a variable length header record which stores
-information about the file and describes
-the fixed length record format, followed by a series of fixed length
-data records.
-<br><br>
-
-Each fixed length data record is preceded by a one byte indicator
-which identifiies if the record has been deleted. If the record is
-not deleted, the indicator is a space (0x20). If deleted, the
-indicator contains an asterisk (0x2A). Data fields are stored in records
-without field separators or record terminators.<br><br>
-
-In earlier releases of dBASE, there is an ASCII NULL character
-between the $0D end of header indicator and the start of the data.
-This NULL was removed starting with dBASE III Plus, making a Plus
-header one byte shorter than an identically structured III file.
-The methods documented in the Xbase software and documentation follow
-the more recent version where the NULL character is not included.
-<br><br>
-
-Each database file is comprised of zero, one or many records. A record is
-comprised of fields. Only one record is accessed at a time.<br><br>
-
-Zero, one or many database files can be open simultaneously.<br><br>
-
-<hr>
-
-<h3>The Record Buffer</h3>
-
-When using the Xbase routines, each open data file has a record buffer
-which is manipulated by calling the database, index and field routines.
-<br><br>
-
-If <i>AutoCommit</i> is turned on (Default), updates are committed from
-the record buffer to the database when a write, or append is performed.
-The library automatically writes updates to the database if the buffer has
-been updated and the record is repositioned or the database is closed.
-<br><br>
-
-If <i>AutoCommit</i> is turned off, updates will need to be explicity
-committed to the database file with one of <i>dbf->Put(), dbf->Append()
-or dbf->Commit()</i> command depending on context..
-Updates can be cancelled with the <i>Abort()</i> command.
-<br><br>
-The record buffer is not used for handling the actual data portion of
-memo fields. When working with memo fields, the application program must
-allocate enough buffer space for reading and writing memo fields or use
-the xbString class for handling memo data.<br><br>
-
-Internal to the library, there is an additional record buffer which
-stores the original value of the data record before any changes are made.
-This is used by the index routines for finding and deleting original key
-values from any open indices before adding the new keys. If the key values
-are not changed, no index updates occur. Additionally, calling the Abort()
-method will back out any updates to the record buffer.
-
-
-<br><br>
-
-<hr>
-<br>
-<h3>Xbase Database File Header - DBF Version III and Version IV</h3>
-
-The Xbase file header, located at the beginning of the database, describes
-the .DBF database. Knowledge of this structure is not necessary to
-effectively utilize the Xbase64 libraries.<br><br><br>
-
-<TABLE BORDER>
-<TR valign="BASELINE">
-<TR><TH ALIGN="LEFT">Position<TD>Length<TD>Description
-<TR><TH ALIGN="LEFT">0<TD>1 byte<TD>file version number<br>
- (03H without a .DBT file)<br>
- (83H with a .DBT file)
-<TR><TH ALIGN="LEFT">1-3<TD>3 bytes<TD>date of last update<br>
- (YY MM DD) in binary format
-<TR><TH ALIGN="LEFT">4-7<TD>32 bit number<TD>number of records in data file
-<TR><TH ALIGN="LEFT">8-9<TD>16 bit number<TD>length of header structure
-<TR><TH ALIGN="LEFT">10-11<TD>16 bit number<TD>length of the record
-<TR><TH ALIGN="LEFT">12-31<TD>20 bytes<TD>reserved
-<TR><TH ALIGN="LEFT">32-n<TD>32 bytes each<TD>field descriptor record (see below)
-<TR><TH ALIGN="LEFT">n+1<TD>1 byte<TD>0DH as the field terminator
-</TABLE>
-<BR><BR>
-
-<hr>
-<br>
-<h3>Xbase Field Descriptor Record</h3>
-The Xbase field descriptor record stores information about each field in the
-database. Each database has from 1 to 1024 fields.
-Knowledge of this structure is not necessary to
-effectively utilize the Xbase libraries.<br><br><br>
-
-<TABLE BORDER>
-<TR VALIGN="BASELIGN">
-<TR><TH ALIGN="LEFT">Position<TD>Length<TD>Description
-<TR><TH ALIGN="LEFT">0-10<TD>11 bytes<TD>field name in ASCII zero-filled
-<TR><TH ALIGN="LEFT">11<TD>1 byte<TD>field type in ASCII (C N L D or M)
-<TR><TH ALIGN="LEFT">12-15<TD>32 bit number<TD>field data address
-<TR><TH ALIGN="LEFT">16<TD>1 byte<TD>field length in binary
-<TR><TH ALIGN="LEFT">17<TD>1 byte<TD>field decimal count in binary
-<TR><TH ALIGN="LEFT">18-31<TD>14 bytes<TD>reserved bytes (version 1.00)
-</TABLE>
-<BR><BR>
-<hr>
-<br>
-<h3>Field Data Format</h3>
-Data are stored in ASCII format in the database as follows:<br><br>
-<TABLE BORDER>
-<TR VALIGN="BASELIGN">
-<TR><TH ALIGN="LEFT">DATA TYPE<TD>DATA RECORD STORAGE
-<TR><TH ALIGN="LEFT">Character<TD>ASCII characters, left justified, right blank filled
-<TR><TH ALIGN="LEFT">Date<TD>(8 digits in YYYYMMDD format, such as<BR>
- 19601007 for October 7, 1960)
-<TR><TH ALIGN="LEFT">Logical<TD>? Y y N n T t F f (? when not initialized)
-<TR><TH ALIGN="LEFT">Memo<TD>10 digits representing a .DBT block number
-<TR><TH ALIGN="LEFT">Numeric<TD>. 0 1 2 3 4 5 6 7 8 9 + -, right justified, left blank filled
-<TR><TH ALIGN="LEFT">Float (Version IV only)<TD>. 0 1 2 3 4 5 6 7 8 9 + -, right justified, left blank filled
-</TABLE>
-<BR><BR>
-
-<hr>
-<h3>Memo Fields</h3>
-
-Memo fields store variable length data elements in a seperate .DBT file.
-The main .DBF file maintains a ten byte field which is used by the Xbase
-routines for determining the location of the data in the .DBT file.
-<br><br>
-
-Xbase DBMS supports both dBASE III+ and dBASE IV version memo files.
-The version IV files are somewhat more efficient in that they reuse
-unused memo space when data are deleted or freed from use. With version
-III files, all new updates are appended to the end of the file and the
-unused space is not reclaimed until the datafiles are packed.
-<br><br>
-
-Memo fields can be used for storing a variety of date type. However,
-type 3 files are limited to storing textual data because most internal
-memo field processing in a type 3 file relies on two contiguous 0x1a
-charaters. <br><br>
-
-Type 4 memo fields can be used for storing BLOB (binary large object)
-data reliably, as the internal file structure does not rely on any
-special characters embedded in the data.<br><br>
-
-A special note on storing string data in a memo field. For those users
-that are new to C/C++ programming, string fields typically end with
-a null (0x00) terminator character. As a general rule of thumb when using
-the library, add one to the length of any string when
-specifying the length of the data. This stores the null terminating byte
-with the data. For example, when storing string "This is a string"
-specified size should be 17, not 16.
-
-
-<h4>Technical memo file information</h4>
-
-The following info on memo fields is for the curious.
-It is not required
-reading if you don't need to know the internals.<br><br>
-
-<li>Memo files are made up of one or more blocks
-<li>For version III files, the block size is 512
-<li>For version IV files, the block size is a multiple of 512
-<li>The minimum amout of space necessary to store one memo field is
-one block or 512 bytes.
-<li>The default block size can be adjusted by manipulating the
-XB_DBT_BLOCK_SIZE macro in the options.h file.
-
-
-<li>The main .DBF file maintains a ten byte numeric field which is blank if
-no memo data exists for a given field. Otherwise it contains a number, which
-when multiplied by the block size, points to the offset in the file of the head
-block in the file/
-<br><br>
-
-For version 3 memo field files, there are two fields in the head block of
-the file, <em>NextBlockNo</em> and <em>Version</em>. Depending on the
-Xbase software, some vendors products update these two fields, some do not.
-The Xbase library keeps the fields updated, but does not rely on them to
-be valued with correct data. This helps to support maximum compatibility
-amoungst all Xbase tools available.<br><br>
-
-For version 4 memo field files,
-the first block in the .DBT file is a header block which is comprised of
-8 bytes of data which maintain the file's block size and the next free
-block available in the file. Blocks two through n contain the actual
-memo data. A chain of empty blocks is maintained within the file for
-potential future use. When an add or update routine executes, it first
-attempts to find a spot in a set of blocks which were earlier allocated,
-but not currently in use for the data. If no free spot is found, data are
-appended to the end of the file.
-
-The free block chain is sorted in block number order. When blocks of
-data are freed and added to the free block chain, the routines will attempt
-to concatonate free block chains togethor where possible. When a delete
-occurs, or an update which requires less space occurs, the new free space
-is added to the free block chain.
-
-<br><br>
-
-<h3>Various Memo File Block Types</h3>
-
-<TABLE BORDER>
-<TR VALIGN="BASELIGN">
-<TR><TH ALIGN="LEFT">Valid Block Types
-<TR><TH ALIGN="LEFT">Head Block
-<TR><TH ALIGN="LEFT">Only data block for memo field
-<TR><TH ALIGN="LEFT">First of several contiguous data block set
-<TR><TH ALIGN="LEFT">2-n of contiguous data block set
-<TR><TH ALIGN="LEFT">Only data block in free chain (version IV only)
-<TR><TH ALIGN="LEFT">First of several contiguous free block set (version IV only)
-<TR><TH ALIGN="LEFT">2-n of contiguous free block set (type 4 only)
-</TABLE>
-<BR><BR>
-
-<h3>Head Block Structure</h3>
-<TABLE BORDER>
-<TR VALIGN="BASELIGN">
-<TR><TH ALIGN="LEFT">1-4<TD>LONG<TD>Next Block ID
-<TR><TH ALIGN="LEFT">5-8<TD>LONG<TD>Not used all 0x00's
-<TR><TH ALIGN="LEFT">9-16<TD>CHAR(8)<TD>Filename (Version IV Only)
-<TR><TH ALIGN="LEFT">17<TD>CHAR<TD>Version (0x03 = Version III, 0x00 = Version IV)
-<TR><TH ALIGN="LEFT">18-20<TD>CHAR(3)<TD>Not used all 0x00's
-<TR><TH ALIGN="LEFT">21-22<TD>SHORT<TD>Block Size (Version IV only )
-<TR><TH ALIGN="LEFT">23-Remainder of block<TD>CHAR<TD>Not used
-</TABLE>
-<BR><BR>
-
-
-<h3>Version IV Head Data Block Structure</h3>
-<TABLE BORDER>
-<TR VALIGN="BASELIGN">
-<TR><TH ALIGN="LEFT">xbShort<TD>0-1<TD>-1
-<TR><TH ALIGN="LEFT">xbShort<TD>2-3<TD>Starting position of data (always 8 ?)
-<TR><TH ALIGN="LEFT">xbLong<TD>4-7<TD>Length of data includes first 8 bytes
-<TR><TH ALIGN="LEFT">char (9) - Blocksize<TD>8-15<TD>Data
-</TABLE>
-<BR><BR>
-
-<h3>Version IV Head Free Block Structure</h3>
-<TABLE BORDER>
-<TR VALIGN="BASELIGN">
-<TR><TH ALIGN="LEFT">xbLong<TD>0-3<TD>Next free block in the free block chain
-<TR><TH ALIGN="LEFT">xbLong<TD>4-7<TD>Number of free blocks in this contiguous free
- block set
-</table>
-<br><br>
-Version 3 and 4 memo fields are terminated with two contiguous 0x1A bytes of data.
-<br><br>
-<hr>
-<p><img src="xbase.jpg"><hr>
-</BODY>
-</HTML>
-
diff --git a/docs/html/xbc3.html b/docs/html/xbc3.html
deleted file mode 100755
index f2f4a1d..0000000
--- a/docs/html/xbc3.html
+++ /dev/null
@@ -1,73 +0,0 @@
-<!DOCTYPE HTML PUBLIC>
-<HTML>
-<TITLE>Xbase DBMS Chapter 3</TITLE>
-<BODY BGCOLOR=#FFFFFF>
-<H1><p align="center">Fields and Strings</p></H1>
-<p align="center">Chapter Updated 11/21/22</p><hr>
-
-<br><br>
-The main objective of this chapter is to provide basic information regarding
-various field types supported by the library.<br><br>
-
-Field names can be up to ten bytes in length and can contain characters, numbers
-or special characters in the name. The field methods are used to manipulate
-the data in a record of a data file. There are several types of fields.<br><br>
-
-
-<TABLE BORDER>
-<CAPTION ALIGN="TOP"><h3>Field Types</H3></CAPTION>
-<TR VALIGN="BASELINE">
-<TR><TH ALIGN="LEFT">Type<TD>Size<TD>Allowable Values<TD>Schema Value
-<TR><TH ALIGN="LEFT">Numeric<TD>0 - 17(include sign and decimal point<TD>+ - . 0 through 9<TD>XB_NUMERIC_FLD
-<TR><TH ALIGN="LEFT">Character<TD>0 - 254<TD>Anything<TD>XB_CHAR_FLD
-<TR><TH ALIGN="LEFT">Date<TD>8<TD>CCYYMMDD<TD>XB_DATE_FLD
-<TR><TH ALIGN="LEFT">Floating Point<TD>0 - 17 (includes sign and decimal point<TD>+ - . 0 through 9<TD>XB_FLOAT_FLD
-<TR><TH ALIGN="LEFT">Logical<TD>1<TD>? Y y N n T t F f (? - uninitialized)<TD>XB_LOGICAL_FLD
-<TR><TH ALIGN="LEFT">Memo<TD>Fixed length portion - 10<br>Variable length 0 - 32760
-<TD>Type III - Text<br>Type IV - Anything<TD>XB_MEMO_FLD
-</TABLE>
-
-<br><br>
-Field names, types and lengths are defined when a data file is created.
-After the file is created, the field characteristics can not be changed. To
-change field characteristics, a new database table must be defined with the new
-field requirements.<br><br>
-
-<h2>Memo Fields</h2>
-
-Memo fields are variable length data fields which are stored in two parts.
-This first part is a ten byte field which is stored
-in the fixed length record of the .DBF file. The variable data is stored in
-a seperate .DBT file in 512 byte blocks. The ten byte field in the fixed
-length portion of the record points to a .DBT block number.<br><br>
-
-There are two versions of memo data files type III and type IV. Type IV
-is more advanced in that released space can be reused and it also
-supports BLOB data. The type III file is older technology, does not
-support dynamic space reclamation and only supports string data.
-See method xbDbf::SetVersion for controlling which version type you are
-using.
-
-<br><br>
-To utilize memo fields, the application program must allocate a buffer
-which is large enough to handle the memo data.<br><br>
-
-<h2>Fields and Field Numbers</h2>
-
-The Xbase routines can access field data via using field names or field
-numbers. Field numbers are numbered 0-n where the first field in a datafile
-is field 0 going through the last field n. Accessing fields by number is
-slightly more efficient than accessing by name.<br><br>
-
-<h2>Strings</h2>
-
-Xbase64 includes support for a string class <em>xbString</em>.
-The xbString class interface was originally derived from the
-<em>Draft Standard C++ Library by P.J. Plauger</em> and modified.
-If you are familiar with other string classes, this one should be similar.
-Strings can be used to manage strings of character data.
-<br><br>
-<hr>
-<p><img src="xbase.jpg"><hr>
-</BODY>
-</HTML>
diff --git a/docs/html/xbc4.html b/docs/html/xbc4.html
deleted file mode 100755
index a0275ed..0000000
--- a/docs/html/xbc4.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!DOCTYPE HTML PUBLIC>
-<HTML>
-<TITLE>Xbase DBMS Chapter 4</TITLE>
-<BODY BGCOLOR=#FFFFFF>
-<H1><p align="center">Date Processing</p></H1>
-<p align="center">Chapter Updated 12/09/22</p><hr>
-
-The objective of this chapter is to provide information regarding
-the basic concepts of date arithmetic and supply generic
-C/C++ date methods.<br><br>
-
-<h2>Leap Years</h2>
-
-Due to the fact that it actually takes about 365 1/4 days for
-the earth to circle the sun, every fourth year and every fourth
-century have an extra day added to the end of February and the year
-is called a leap year. Leap years have 366 days, non leap years
-have 365 days. The following code segment describes how to
-determine if a given year is a leap year.
-
-A leap year is a year having 366 days, which can be evenly
-divisible by 4 and not by 100 or divisible by 400.
-
-There are also leap centuries. Leap centuries are years which
-are evenly divisible by 400.
-
-To calculate a leap year, the following code segment can be used
-
-<xmp>
- int year;
-
- if(( year % 4 == 0 && year % 100 != 0 ) || year % 400 = 0 )
- LEAP_YEAR = TRUE;
- else
- LEAP_YEAR = FALSE
-</xmp>
-
-
-<h2>Julian Dates</h2>
-
-Around the time of Jesus Christ, a fellow with the name of Julias Ceasar
-established the Julian calendar. The Julian calendar established every
-fourth year as a leap year with 366 days and all other years having 365 days.
-The months were set up the same as they are with a Gregorian calendar, which
-is what we use today. A Julian date is defined as as the number of days from the
-first day of the year; February 1 would have a Julian day of 32.<br><br>
-
-From a programmer's perspective, Julian dates are useful for doing date
-arithmetic, determining the difference between two dates or calculating
-a future or past date.<br><br>
-
-To determine the difference between two dates, convert both dates to a
-Julian date and subtract one from the other.<br><br>
-
-To calculate a future or past date, convert the base date to a Julian date,
-add (or subtract) the number of days necessary to (from) it and convert the
-julian date back to a Gregorian date.<br><br>
-
-The Julian date routines use a base date of 01/01/0001. DBase julian Dates have an offset of 1721425L, reason unknown.
-<br><br>
-
-<h2>Gregorian Dates</h2>
-
-In 1582, Pope Gregor XIII introduced a corrected form of the Julian calendar.
-Every 4th year still has 366 days except for century years. Century years
-were added as leap years if evenly divisible by 400. The year 2000 is a leap century.
-<br><br>
-
-The methods supplied with this software are based on gregorian dates with
-the format of CCYYMMDD for century, year, month and day.<br><br>
-
-
-<h2>Date Formats</h2>
-
-All dates are stored in the .DBF files with format CCYYMMDD.<br><br>
-All date routines work with dates formated with the same CCYYMMDD format.<br><br>
-
-<hr>
-<p><img src="xbase.jpg"><br><hr>
-</BODY>
-</HTML>
diff --git a/docs/html/xbc5.html b/docs/html/xbc5.html
deleted file mode 100755
index 9708b17..0000000
--- a/docs/html/xbc5.html
+++ /dev/null
@@ -1,208 +0,0 @@
-<!DOCTYPE HTML PUBLIC>
-<html>
-<title>Xbase DBMS Chapter 5</title>
-<body bgcolor=#FFFFFF>
-<h1><p align="center">Expression Handling<br></h1>
-<p align="center">Chapter Updated 12/26/22</p><hr>
-
-<h3>Overview</h3>
-
-The main objective of this chapter is to provide information regarding the
-basic concepts of using the Xbase64 Expression module.<br><br>
-
-The Xbase64 library includes an expression parsing routine which assists
-application programmers by providing a high level data manipulation tool and
-also allows for building complex index keys.
-
-The functions included were derived from dBASE III Plus, dBASE IV and Clipper.
-<br><br>
-Expressions are primarily used for index key definitions and filter criteria, but
-can also be used for other tasks as well.
-<br><br>
-
-<h3>Internal fuctioning</h3>
-The expression module works in two phases. Firstly, method
-<em>ParseExpression</em> is called and builds an expression tree from
-all the components of the expression. The tree is made up of individual
-nodes. The expression is checked for valid field names, literals,
-operands and functions. Any field references are resolved. If fields
-are used in an expression and the database name for the field is not
-included in the name with the -> operand, the routines assume the
-associated database has been successfully opened.
-<br><br>
-Secondly, method <em>ProcessExpression</em> is called to process the
-expression tree created by ParseExpression(). The routine parses each
-node in the expression tree, executing functions, processing operands
-and manipulating data to produce the desired result.<br><br>
-
-If an expression will be processed repeatedly, it is best to pre-parse the
-tree using <em>ParseExpression</em>, then for each new call to the expression,
-execute method <em>ProcessExpression</em> which processes the tree.
-
-<h3>Expression Return Types</h3>
-Expressions will return a type of CHAR, NUMERIC, DATE or LOGICAL.<br><br>
-
-An expression return type can be determined with method <em>
-GetExpressionResultType</em> after parsing it.<br><br>
-
-Expressions returning a return type of CHAR are limited to a 200 byte internal
-buffer. There is also a 100 byte limit for NDX and MDX index key support. If
-the 200 byte limit is not large enough for your application, adjust field
-<em>enum { WorkBufMaxLen = 200 };</em> in file <em>exp.h</em>.
-
-<br><br>
-<table border=1>
-<tr><th>Return Type</th><th>XBase Type</th></tr>
-<tr><td>CHAR</td><td>xbString</td></tr>
-<tr><td>NUMERIC</td><td>xbDouble</td></tr>
-<tr><td>DATE</td><td>xbDate</td></tr>
-<tr><td>LOGICAL</td><td>xbBool</td></tr>
-</table>
-
-<br><br>
-Date routines return an xbDate result. In addition, the date value can be
-extracted using GetStringResult() which returns YYYYMMDD or GetDoubleResult()
-which returns a julian value.
-
-<br><br>
-<h3>Expression Functions</h3>
-Each expression function also has a corresponding C++ function. It is
-slightly more efficient to call the C++ functions directly, rather than
-execute the expression parsing routines.<br><br>
-
-To add a new function, find a function that is similar to what you need, copy
-the code and modify xbxbase.h, xbfuncs.cpp, xbexp.cpp and xb_test_expression.cpp.<br><br>
-
-
-<table border=1>
-<tr><th>Function Name</th><th>Return Type</th><th>Description</th></tr>
-<tr><td>ABS</td><td>N</td><td>Calculate absolute value of numeric expression</td></tr>
-<tr><td>ALLTRIM</td><td>C</td><td>Trim leading andtrailing whitespace from a string</td></tr>
-<tr><td>ASC</td><td>N</td><td>Return ASCII code for first character in a string</td></tr>
-<tr><td>AT</td><td>N</td><td>Return starting position of a string within a string</td></tr>
-<tr><td>CDOW</td><td>C</td><td>Retun character weekday name for a date</td></tr>
-<tr><td>CHR</td><td>C</td><td>Convert numeric expression to a character</td></tr>
-<tr><td>CMONTH</td><td>C</td><td>Return month name for a date</td></tr>
-<tr><td>CTOD</td><td>D</td><td>Return date from a character date input</td></tr>
-<tr><td>DATE</td><td>D</td><td>Return system date</td></tr>
-<tr><td>DAY</td><td>N</td><td>Return the day of the month from a date</td></tr>
-<tr><td>DEL</td><td>C</td><td>Return record deletion status for a record</td></tr>
-<tr><td>DELETED</td><td>L</td><td>Return record deletion status for a record<</td></tr>
-<tr><td>DESCEND</td><td>1</td><td>Clipper DESCEND function</td></tr>
-<tr><td>DOW</td><td>N</td><td>Return number of day of week</td></tr>
-<tr><td>DTOC</td><td>C</td><td>Return character date from input date</td></tr>
-<tr><td>DTOS</td><td>C</td><td>Return character CCYYMMDD date from input date</td></tr>
-<tr><td>EXP</td><td>N</td><td>Return exponent value</td></tr>
-<tr><td>IIF</td><td>C</td><td>Immediate If</td></tr>
-<tr><td>INT</td><td>N</td><td>Convert number to integer, truncate any decimals</td></tr>
-<tr><td>ISALPHA</td><td>L</td><td>Check if string begins with alpha character</td></tr>
-<tr><td>ISLOWER</td><td>L</td><td>Check if string begins with lower case alpha character</td></tr>
-<tr><td>ISUPPER</td><td>L</td><td>Check if string begins with upper case character</td></tr>
-<tr><td>LEFT</td><td>C</td><td>Return left characters from a string</td></tr>
-<tr><td>LEN</td><td>N</td><td>Return lenght of string</td></tr>
-<tr><td>LOG</td><td>N</td><td>Calculate logarithm</td></tr>
-<tr><td>LOWER</td><td>C</td><td>Convert upper case to lower case</td></tr>
-<tr><td>LTRIM</td><td>C</td><td>Trim left side of a string</td></tr>
-<tr><td>MAX</td><td>N</td><td>Return higher of two values</td></tr>
-<tr><td>MIN</td><td>N</td><td>Return lesser of two values</td></tr>
-<tr><td>MONTH</td><td>N</td><td>Return number of month for a given date</td></tr>
-<tr><td>RECNO</td><td>N</td><td>Return current rec number for a given table</td></tr>
-<tr><td>RECCOUNT</td><td>N</td><td>Return number of records in a given table</td></tr>
-<tr><td>REPLICATE</td><td>C</td><td>Repeat character expression N times</td></tr>
-<tr><td>RIGHT</td><td>C</td><td>Return right characters from as tring</td></tr>
-<tr><td>RTRIM</td><td>C</td><td>Trim right side of string</td></tr>
-<tr><td>SPACE</td><td>C</td><td>Generate a string of N spaces</td></tr>
-<tr><td>SQRT</td><td>N</td><td>Calculate square root</td></tr>
-<tr><td>STOD</td><td>D</td><td>Convert 8 byte CCYYMMDD date to date</td></tr>
-<tr><td>STR</td><td>C</td><td>Convert number to character string</td></tr>
-<tr><td>STRZERO</td><td>C</td><td>Convert number to character string with leading zeroes. Clipper Function.</td></tr>
-<tr><td>SUBSTR</td><td>C</td><td>Extract portion oif one string from another string</td></tr>
-<tr><td>TRIM</td><td>C</td><td>Trim left and right sides of a string</td></tr>
-<tr><td>UPPER</td><td>C</td><td>Conver lower case to upper case</td></tr>
-<tr><td>VAL</td><td>N</td><td>Convert numeric characters to number</td></tr>
-<tr><td>YEAR</td><td>N</td><td>Return year for a given date</td></tr>
-</table>
-
-<br><br>
-<h3>Expression Components</h3>
-Expressions are made up of one or more tokens. A token is one of literal,
-database field, operand or function. Literals are either numeric or character.
-Character literals are enclosed in 'single' or "double" quotes. numeric
-literals are a series of one or more contiguous numerals, ".", "+" or "-'".
-<br><br>
-A field is simply a field name in the default database, or is in the form
-of database->fieldname.
-
-
-<br><br>
-<h3>Expression Literals</h3>
-
-<table border=1>
-<tr><th>Type</th><th>Example</th></tr>
-<tr><td>CHAR</td><td>"literal" or 'literal'</td></tr>
-<tr><td>NUMERIC</td><td>+99999.99</td></tr>
-<tr><td>DATE</td><td>{10/07/60} or {02/09/1989}</td></tr>
-</table>
-
-<br><br>
-<h3>Expression Operators</h3>
-<table border=1>
-<tr><th>Type</th><th>Operator</th><th>Precedence</th><th>Result</th><th>Notes</th></tr>
-<tr><td>Parens</td><td>()</td><td>12</td></tr>
-<tr><td>Numeric Operator</td><td>+ (unary)</td><td>11</td><td>N</td></tr>
-<tr><td>Numeric Operator</td><td>- (unary)</td><td>11</td><td>N</td></tr>
-<tr><td>Numeric Operator</td><td>--X</td><td>10</td><td>N</td></tr>
-<tr><td>Numeric Operator</td><td>++X</td><td>10</td><td>N</td></tr>
-<tr><td>Numeric Operator</td><td>**</td><td>9</td><td>N</td></tr>
-<tr><td>Numeric Operator</td><td>^</td><td>9</td><td>N</td></tr>
-<tr><td>Numeric Operator</td><td>%</td><td>8</td><td>N</td></tr>
-<tr><td>Numeric Operator</td><td>*</td><td>8</td><td>N</td></tr>
-<tr><td>Numeric Operator</td><td>/</td><td>8</td><td>N</td></tr>
-<tr><td>Numeric Operator</td><td>+ Addition</td><td>7</td><td>N</td></tr>
-<tr><td>Numeric Operator</td><td>- Subtraction</td><td>7</td><td>N</td></tr>
-<tr><td>Numeric Operator</td><td>X--</td><td>6</td><td>N</td></tr>
-<tr><td>Numeric Operator</td><td>X++</td><td>6</td><td>N</td></tr>
-<tr></tr>
-<tr><td>String Operator</td><td>+</td><td>5</td><td>C</td><td>Concatonate 1</td></tr>
-<tr><td>String Operator</td><td>-</td><td>5</td><td>C</td><td>Concatonate 2</td></tr>
-<tr></tr>
-<tr><td>Relational Operator</td><td>=</td><td>4</td><td>L</td><td>N,C,D</td></tr>
-<tr><td>Relational Operator</td><td>#, <>, !=</td><td>4</td><td?L</td><td>N,C,D</td></tr>
-<tr><td>Relational Operator</td><td><</td><td>4</td><td>L</td><td>N,C,D</td></tr>
-<tr><td>Relational Operator</td><td>></td><td>4</td><td>L</td><td>N,C,D</td></tr>
-<tr><td>Relational Operator</td><td><=</td><td>4</td><td>L</td><td>N,C,D</td></tr>
-<tr><td>Relational Operator</td><td>>=</td><td>4</td><td>L</td><td>N,C,D</td></tr>
-<tr><td>Relational Operator</td><td>$</td><td>4</td><td>L</td><td>N,C,D</td></tr>
-<tr><td>Relational Operator</td><td>==</td><td></td><td></td><td>Clipper operator, not implemented yet</td></tr>
-<tr></tr>
-<tr><td>Logical Operator</td><td>NOT</td><td>3</td><td>L</td><td>Evaluated after all math and relational operators</td></tr>
-<tr><td>Logical Operator</td><td>.NOT.</td><td>3</td><td>L</td><td>Evaluated after all math and relational operators</td></tr>
-<tr><td>Logical Operator</td><td>AND</td><td>2</td><td>L</td><td>Evaluated after all math and relational operators</td></tr>
-<tr><td>Logical Operator</td><td>.AND.</td><td>2</td><td>L</td><td>Evaluated after all math and relational operators</td></tr>
-<tr><td>Logical Operator</td><td>OR</td><td>1</td><td>L</td><td>Evaluated after all math and relational operators</td></tr>
-<tr><td>Logical Operator</td><td>.OR.</td><td>1</td><td>L</td><td>Evaluated after all math and relational operators</td></tr>
-</table>
-
-<br><br>
-<h3>Example Expressions</h3>
-<li>CUSTOMERS->LNAME + ", " + CUSTOMERS->FNAME
-<li>LNAME + ", " + FNAME
-<li>STARTDT + 90
-<li>DATE() - 7
-<li>YEAR( TODAY() )
-<li>IIF( "A" = "N", "true result", "false result" )
-<li>IIF( "A" = "N" .OR. 2 > 1 , "true result", "false result" )
-<li>IIF( .NOT. "A" = "N", "true result", "false result" )
-<li>.NOT. DELETED()
-<br><br>
-
-
-<h3>Example program</h3>
-For an example on how to use the expression logic, see program
-<em>src/examples/xb_ex_expression.cpp</em>.
-<br><br>
-
-<hr>
-<p><img src="xbase.jpg"><br><hr>
-</BODY>
-</HTML>
diff --git a/docs/html/xbc6.html b/docs/html/xbc6.html
deleted file mode 100755
index 094545f..0000000
--- a/docs/html/xbc6.html
+++ /dev/null
@@ -1,153 +0,0 @@
-<!DOCTYPE HTML PUBLIC>
-<HTML>
-<TITLE>Xbase DBMS Chapter 6</TITLE>
-<BODY BGCOLOR=#FFFFFF>
-<H1><p align="center">Index Overview</p></H1>
-<p align="center">Chapter Updated 12/09/22</p><hr>
-
-The objective of this chapter is to provide information regarding
-the basic concepts of index processing for the Xbase library.<br><br>
-
-
-<h2>Overview</h2>
-
-The Xbase library is designed to support multiple index types simultaneously.
-Dbase, Clipper and Foxbase each had their own index formats and ultimately the
-goal is to provide support for all the legacy index file formats.
-
-<br><br>
-The 4.0.x rewrite includes the NDX and MDX formats. Earlier versions of the
-library included NTX and CDX formats which will be brought forward into the
-library rewrite at some point in the future.
-
-
-<h2>Tags</h2>
-
-Each index file contains one or more tags depending on the file type. Each tag is a sort order
-and has characteristics: Sort order (ASC or DESC), unique or not unique and some formats support filtering.
-Each open table (dbf file) has an "active tag" for database operations.
-
-<h2>Index processing design</h2>
-
-The library is construcuted to handle index files with multiple tags per file. Single tag files like the NDX indices
-are treated as a multi tag file, but there is only one tag. This allows for maximum flexibility for future
-additional index types.
-
-
-
-<h2>Index updates</h2>
-
-The library automatically updates all tags in all open index files.
-
-
-<br><br>
-<h2>Index File Types</h2>
-
-<table border=1>
-<tr><th>File<br>Type</th><th>Source</th><th>Max Tags<br>Per File</th><th>Auto Opened</th><th>Sort Order</th><th>Unique Keys</th>
- <th>Reclaimed Nodes</th><th>Filter Support</th><th>Status</th></tr>
-<tr>
- <td>NDX</td><td>dBase</td>
- <td><center>1</center></td>
- <td><center>Optional</center></td>
- <td>ASC only</td>
- <td><center>Y</center></td>
- <td><center>N</center></td>
- <td><center>N</center></td>
- <td><center>Available in 4.0.1</center></td>
-</tr>
-<tr>
- <td>MDX</td><td>dBase</td>
- <td><center>47</center></td>
- <td><center>Yes</center></td>
- <td><center>ASC or DESC</center></td>
- <td><center>Y</center></td>
- <td><center>Y</center></td>
- <td><center>Y</center></td>
- <td><center>Available in 4.0.1</center></td>
-</tr>
-<tr>
- <td>NTX</td>
- <td>Clipper</td>
- <td><center>1</center></td>
- <td><center>Optional</center></td>
- <td><center>?</center></td>
- <td><center>?</center></td>
- <td><center>?</center></td>
- <td><center>?</center></td>
- <td><center>Pending upgrades</center></td>
-</tr>
-<tr>
- <td>CDX</td>
- <td>Fox Pro</td>
- <td><center>?</center></td>
- <td><center>?</center></td>
- <td><center>?</center></td>
- <td><center>?</center></td>
- <td><center>?</center></td>
- <td><center>?</center></td>
- <td><center>Pending upgrades</center></td>
-<tr>
-<tr>
- <td>IDX</td><td>Fox Pro</td><td></td><td></td><td></td><td></td><td></td><td></td><td>Undeveloped</td>
-<tr>
-
-</table>
-
-<br><br>
-<h2>Index/Tag Methods</h2>
-<table border=1>
-<tr><th>Method</th><th>Description</th></tr>
-
-<tr>
- <td>xbDbf::CheckTagIntegrity</td><td>Checks a tag for missing or duplicate entries. Available if XB_DEBUG_SUPPORT is on.</td>
-</tr>
-<tr>
- <td>xbDbf::CreateTag</td><td>Create a new tag.</td>
-</tr>
-<tr>
- <td>xbDbf::DeleteTag</td><td>Delete existing tag.</td>
-</tr>
-<tr>
- <td>xbDbf::Find</td><td>Find key value for the active tag.</td>
-</tr>
-<tr>
- <td>xbDbf::GetFirsKey</td><td>Retrieve the first key for the active tag.</td>
-</tr>
-<tr>
- <td>xbDbf::GetLastKey</td><td>Retrieve the last key for the active tag.</td>
-</tr>
-<tr>
- <td>xbDbf::GetNextKey</td><td>Retrieve the next key for the active tag.</td>
-</tr>
-<tr>
- <td>xbDbf::GetPrevKey</td><td>Retrieve the previous key for the active tag.</td>
-</tr>
-<tr>
- <td>xbDbf::GetCurTag</td><td>Retrieve the tag name key for the active tag.</td>
-</tr>
-<tr>
- <td>xbDbf::OpenIndex</td><td>Open an index file. Only used for index files that aren't automatically opened.</td>
-</tr>
-<tr>
- <td>xbDbf::Reindex</td><td>Rebuild a tag. Available if XB_DEBUG_SUPPORT is on.</td>
-</tr>
-<tr>
- <td>xbDbf::SetCurTag</td><td>Set current tag.</td>
-</tr>
-</table>
-<br><br>
-<h2>Internal Data Storage</h2>
-
-<table border=1>
-<tr><th>Type<th>Stored in DBF as</th><th>Stored in NDX as</th><th>Stored in MDX as</th></tr>
-<tr><td>C</td><td>Character data</td><td>Character data</td><td>Character data</td></tr>
-<tr><td>F</td><td>Text numbers</td><td>xbDouble</td><td>xbBcd</td></tr>
-<tr><td>N</td><td>Text numbers</td><td>xbDouble</td><td>xbBcd</td></tr>
-<tr><td>D</td><td>Text YYYYMMDD</td><td>xbDouble Julian</td><td>xbDouble Julian</td></tr>
-</table>
-<br><br>
-<hr>
-<p><img src="xbase.jpg"><br><hr>
-</BODY>
-</HTML>
diff --git a/docs/html/xbc7.html b/docs/html/xbc7.html
deleted file mode 100755
index 20a60de..0000000
--- a/docs/html/xbc7.html
+++ /dev/null
@@ -1,153 +0,0 @@
-<!DOCTYPE HTML PUBLIC>
-<HTML>
-<TITLE>Xbase DBMS Chapter 7</TITLE>
-<BODY BGCOLOR=#FFFFFF>
-<H2><p align="center">NDX Indices</p></H2>
-<p align="center">Chapter Updated 11/27/22</p><hr>
-
-The objective of this chapter is to provide information regarding the
-basic concepts of how .NDX index files work in the Xbase environment.<br><br>
-
-The information in this chapter has been gathered by searching the internet
-and by examining the structure of known good NDX indexes.<br><br>
-
-<h4>NDX Index File Characteristics</h4>
-
-<li>NDX indices maintain keys in ascending sort order only.<br><br>
-<li>NDX indices support <em>unique</em> or <em>non unique</em> keys.<br><br>
-
-<em>Unique</em> keys must be unique if the UniqueKeyOption is not set to XB_EMULATE_DBASE.
-If the UniqueKeyOption is set to XB_EMULATE_DBASE, then the database update routines will
-add a record to the table, but not add a corresponding duplicate key to the index tag.
-The UniqueKeyOption is off (don't allow duplicates) by default.
-<br><br>
-
-<em>Non-unique</em> Keys are not required to be unique, duplicate
-keys are allowed if the index is created with the XB_NOT_UNIQUE
-setting. Duplicate keys are stored in record number order.<br><br>
-
-<li>NDX indexes are automatically updated by the Xbase library after the
-indices are opened.<br><br>
-
-<li>Character keys are left justified and padded on the right with spaces.<br><br>
-
-<li>Numeric keys are stored as eight byte double values.<br><br>
-
-<h4>NDX File Internals</h4>
-
-NDX files are comprised of two or more 512 byte blocks or nodes of
-information. There are three types of nodes: Head Nodes, Interior
-Nodes and Leaf Nodes.<br><br>
-
-<li>The <em>Head Node</em> is the first node in the file starting at
-position zero (0) and contains information about the NDX file. There
-is only one Head Node in each index and it always starts at the
-beginning of the file.<br><br>
-
-
-<TABLE BORDER>
-<CAPTION ALIGN="TOP"><h3>NDX Header Node</H3></CAPTION>
-<TR VALIGN="BASELINE">
-<TR><TH ALIGN="LEFT">Type<TD>Size<TD>Field Name<TD>Description
-<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>StartNode<TD>This identifies the root node of
- the index. The Header node is node 0.
-<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>Total Nodes<TD>This is the count of the total
- nodes in the index. The count includes the header node.
-<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>NoOfKeys<TD>Total number of keys in the index +1
-<TR><TH ALIGN="LEFT">xbUShort<TD>2<TD>KeyLen<TD>The index key length
-<TR><TH ALIGN="LEFT">xbUShort<TD>2<TD>KeysPerNode<TD>The maximum number of keys per node
-<TR><TH ALIGN="LEFT">xbUShort<TD>2<TD>KeyType<TD>Type of key<br>
-00 - Character<br>01 - Numeric
-<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>Keysize<TD>Key record size + 8
-<TR><TH ALIGN="LEFT">char<TD>1<TD>Unknown<TD>Reserved
-<TR><TH ALIGN="LEFT">char<TD>1<TD>Unique<TD>Unique indicator<br>
-00 - Not Unique - XB_NON_UNIQUE<br>01 - Unique - XB_UNIQUE
-<TR><TH ALIGN="LEFT">char<TD>488<TD>KeyExpression<TD>Key expression string
-<TR><TH ALIGN="LEFT"><TD>512<TD><TD>Total bytes in node
-</TABLE>
-<br><br>
-The following structure is used by the Xbase NDX routines:
-<xmp>
- struct NdxHeadNode{
- xbLong StartNode; /* header node is node 0 */
- xbLong TotalNodes; /* includes header node */
- xbLong NoOfKeys; /* actual count + 1 */
- xbUShort KeyLen; /* length of key data */
- xbUShort KeysPerNode; /* max number of keys per node */
- xbUShort KeyType; /* 00 = Char, 01 = Numeric */
- xbLong KeySize; /* KeyLen + 8 */
- char Reserved1; /* Not sure about this one */
- char Unique; /* 00 = not unique, 01 = unique*/
- char KeyExpression[488]; /* key definition */
- }
-</xmp>
-<br><br>
-
-<h4>Interior and Leaf Nodes</h4>
-
-Interior Nodes and Leaf Nodes share the same structure in an NDX file.
-The difference between the two types is that interior nodes point to
-other interior nodes or leaf nodes and leaf nodes point to records in
-a DBF file. Interior nodes are optional nodes in an NDX file,
-however if there are more than a few keys in the index there will
-certainly be one or more interior nodes in the file. There will
-always be at least one leaf node in the file. Leaf nodes contain DBF
-record numbers which point to the location of the record in the
-DBF file.<br><br>
-
-Interior nodes have field LeftNodeNo valued which points to the node
-which points to the keys which are less than the key value in the KeyVal
-field. There is one more LeftNodeNo value in the node than there are keys.
-The Last LeftNodeNo points to the node which is greater than the highest
-key value in the node. Interior nodes have 0 in the value for the
-DbfRecNo field.<br><br>
-
-Leaf nodes have 0 in the LeftNodeNo field but do have a value in the
-DbfRecNo field which points to a DFB record.<br><br>
-
-
-<TABLE BORDER>
-<CAPTION ALIGN="TOP"><h3>NDX Interior Node and Leaf Node Structure</H3></CAPTION>
-<TR VALIGN="BASELINE">
-<TR><TH ALIGN="LEFT">Type<TD>Size<TD>Field Name<TD>Description
-<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>NoOfKeysThisNode<TD>The number of key values in this node.
-<TR><TH ALIGN="LEFT">char<TD>508<TD>KeyRec<TD>A repeating structure of
- pointers and keys. See the next table for the KeyRec structure.
-</TABLE>
-<br><br>
-<TABLE BORDER>
-<CAPTION ALIGN="TOP"><h3>KeyRec Structure</H3></CAPTION>
-<TR VALIGN="BASELINE">
-<TR><TH ALIGN="LEFT">Type<TD>Size<TD>Field Name<TD>Description
-<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>LeftNodeNo<TD>The node number of the lower node
- for this key. 0 in Leaf Nodes.
-<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>DbfRecNo<TD>The DBF record number for this key.
- 0 in Interior Nodes.
-<TR><TH ALIGN="LEFT">char<TD>KeyLen<TD>KeyValue<TD>The key value.
-</TABLE>
-
-<br><br>
-For those interested in knowing how the Xbase DBMS manipulates and
-navigates index files, the following discussion may be helpfull.<br><br>
-
-Xbase DBMS navigates through NDX files by using an in-memory chain
-of nodes of the current location / key in use. It starts by reading the
-Head Node of the index, which points to the first node of the file. The
-first node of the file will be a leaf node if the index is small or will
-be an interior node if the index has more than one leaf node. The first
-interior node is loaded into memory, added to the node chain and points
-to the next node to read. The node is made up of one or more keys. If
-it is a leaf node, the logic looks for a matching key on the node.
-Otherwise, if it is an interior node, the logic looks at the keys until the
-search key is greater than or equal to the key in the node and then
-traverses down the tree to the next node. It continues down the tree,
-adding the nodes to the in-memory node chain until it reaches the correct
-leaf node. If it finds a matching key in the leaf node, it returns a
-XB_FOUND condition. If it doesn't find an exact match in the leaf node, it
-returns a XB_NOT_FOUND condition and stops on the key which is greater than
-the search key given.
-
-<hr>
-<p><img src="xbase.jpg"><br><hr>
-</BODY>
-</HTML>
diff --git a/docs/html/xbc8.html b/docs/html/xbc8.html
deleted file mode 100755
index fcc461c..0000000
--- a/docs/html/xbc8.html
+++ /dev/null
@@ -1,79 +0,0 @@
-<!DOCTYPE HTML PUBLIC>
-<HTML>
-<TITLE>Xbase DBMS Chapter 8</TITLE>
-<BODY BGCOLOR=#FFFFFF>
-<H2><p align="center">MDX Indices</p></H2>
-<p align="center">Chapter Updated 12/02/22</p><hr>
-
-The objective of this chapter is to provide information regarding the
-basic concepts of how .MDX index files work in the Xbase environment.<br><br>
-
-The information in this chapter has been gathered by searching the internet
-and by examining the structure of known good <DX indexes.<br><br>
-
-<h4>MDX Index File Characteristics</h4>
-
-<li>MDX files are the same name as the corresponding DBF file with an MDX extension.
-<li>MDX files are automatically opened by the library when the DBF file is opened.
-<li>MDX index files (aka prod indices) contain from one to 47 tags, where each tag has it's own key characteristics.
-<li>MDX indices maintain keys in either ascending or descending sort order.
-<li>MDX indices support filtered keys. For example, a filter of <b>.NOT. DELETED()</b> will keep deleted records out
-of the index tag.
-<li>MDX indices are automatically updated by the Xbase library after the
-indices are opened.
-
-<li>MDX indices support <em>unique</em> or <em>non unique</em> keys.<br><br>
-
-<em>Unique</em> keys must be unique if the UniqueKeyOption is not set to XB_EMULATE_DBASE.
-If the UniqueKeyOption is set to XB_EMULATE_DBASE, then the database update routines will
-add a record to the table, but not add a corresponding duplicate key to the index tag.
-The UniqueKeyOption is off (don't allow duplicates) by default.
-<br><br>
-
-<em>Non-unique</em> Keys are not required to be unique, duplicate
-keys are allowed if the index is created with the XB_NOT_UNIQUE
-setting. Duplicate keys are stored in record number order.<br><br>
-
-
-<li>Character keys are left justified and padded on the right with spaces.
-<li>Numeric keys are stored as twelve byte BCD values.
-<li>Date keys are stored as eight byte double julian values.
-
-<h4>MDX File Internals</h4>
-
-The following information is not needed to use the library, it is just included
-for general information.<br><br>
-
-MDX files are comprised of 512 pages where multiple pages make a block. The default
-setting is 1024 blocks, each block containing two pages.<br><br>
-
-The first four pages contain:
-<li>Bytes 0 - 543 contain general file information.
-<li>Bytes 544 - 2047 is a 47 item table containing specific tag information.
-<br><br>
-
-Pages five and beyound:
-<li>Bytes 2048 and beyond contain tag header blocks, interior nodes and leaf nodes.
-
-<br><br>
-
-<h4>Interior and Leaf Nodes</h4>
-
-Interior Nodes and Leaf Nodes share the same structure in an NDX file with
-the exception that interior nodes have a non zero number immediately
-after the rightmost key on the node.
-
-Interior nodes point to other interior nodes or leaf nodes and leaf nodes point
-to records in a DBF file. Interior nodes are optional nodes in an MDX file,
-however if there are more than a few keys in the index there will
-certainly be one or more interior nodes in the file. There will
-always be at least one leaf node per tag in the file. Leaf nodes
-contain DBF record numbers which point to the location of the record
-in the DBF file.<br><br>
-
-<br><br>
-
-<hr>
-<p><img src="xbase.jpg"><br><hr>
-</BODY>
-</HTML>
diff --git a/docs/html/xbc9.html b/docs/html/xbc9.html
deleted file mode 100755
index afcd2fa..0000000
--- a/docs/html/xbc9.html
+++ /dev/null
@@ -1,180 +0,0 @@
-<!DOCTYPE HTML PUBLIC>
-<HTML>
-<TITLE>Xbase DBMS Chapter 9</TITLE>
-<BODY BGCOLOR=#FFFFFF>
-<H2><p align="center">NTX Indices</p></H2>
-<p align="center">Chapter Updated 11/28/22</p><hr>
-
-
-<h3>This chapter might be out of date. The NTX module is pending review and updates for release 4.x.x</h3>
-
-The objective of this chapter is to provide information regarding the
-basic concepts of how .NTX index files work in the Xbase environment.<br><br>
-
-The information in this chapter has been gathered by searching the internet
-and by examining the structure of known good NTX indexes.<br><br>
-
-<h4>NTX Index File Characteristics</h4>
-
-<ul><li>NTX indices maintain keys in ascending sort order only.<br><br>
-<li>NTX indices support <em>unique</em> or <em>non unique</em> keys.<br><br>
-
-<em>Unique</em> keys must be unique. The database update routines will
-fail if an attempt to add a non-unique key is performed.<br><br>
-
-<em>Non-unique</em> Keys are not required to be unique, duplicate
-keys are allowed if the index is created with the XB_NOT_UNIQUE
-setting. Duplicate keys are stored in record number order.<br><br>
-
-<li>NTX indexes are automatically updated by the Xbase library after the
-indices are opened.<br><br>
-
-<li>Character keys are left justified and padded on the right with spaces.<br><br>
-
-<li>Numeric keys are stored as eight byte double values.<br><br>
-
-The numeric key processing logic performs floating point numeric
-calculations on eight byte double values. This logic may be compute intensive
-and slow on older machines, especially the older intel processors without a
-math coprocessor chip.
-
-</ul>
-
-
-<h4>NTX File Internals</h4>
-
-NTX files are comprised of two or more 1024 byte blocks or nodes of
-information. There are three types of nodes: Head Nodes, Interior
-Nodes and Leaf Nodes.<br><br>
-
-The <em>Head Node</em> is the first node in the file starting at
-position zero (0) and contains information about the NTX file. There
-is only one Head Node in each index and it always starts at the
-beginning of the file.<br><br>
-
-
-<TABLE BORDER>
-<CAPTION ALIGN="TOP"><h3>NTX Header Node</H3></CAPTION>
-<TR VALIGN="BASELINE">
-<TR><TH ALIGN="LEFT">Type<TD>Size<TD>Field Name<TD>Description
-<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>Signature Byte<TD>The Clipper signature byte. 0x003h indicates Clipper 87. 0x006h indicates Clipper 5.x
-<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>Indexing Version Number<TD>Documented as the "Compiler Version" but I have observed an increasing number. Incremented whenever the index is changed.
-<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>First Node Offset<TD>The offset to the first node.
-<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>First Unused Page Offset<TD>The offset to the first unused node.
-<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>Key Size + 8<TD>The Key Size plus 8 bytes.
-<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>Key Size<TD>The size (length) of the key.
-<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>Number of Decimals<TD>Number of decimal places in key.
-<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>Max Items Per Node<TD>The maximum number of key per node.
-<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>1/2 The Max Items Per Node<TD>Half the maximum number of key per node. Important in a B-tree system, as this is the minimum number of keys that must be on a page.
-<TR><TH ALIGN="LEFT">char<TD>256<TD>KeyExpression<TD>Key expression string
-<TR><TH ALIGN="LEFT">char<TD>1<TD>Unique<TD>Unique indicator<br>
- 00 - Not Unique - XB_NON_UNIQUE<br>
- 01 - Unique - XB_UNIQUE
-<TR><TH ALIGN="LEFT">char<TD>745<TD>Unused<TD>Unused
-
-
-<TR><TH ALIGN="LEFT"><TD>1024<TD><TD>Total bytes in node
-</TABLE>
-<br><br>
-The following structure is used by the Xbase NTX routines:
-<xmp>
-
-struct NtxHeadNode { /* ntx header on disk */
- xbUShort Signature; /* Clipper 5.x or Clipper 87 */
- xbUShort Version; /* Compiler Version */
- /* Also turns out to be */
- /* a last modified counter */
- xbULong StartNode; /* Offset in file for first node */
- xbULong UnusedOffset; /* First free node offset */
- xbUShort KeySize; /* Size of items (KeyLen + 8) */
- xbUShort KeyLen; /* Size of the Key */
- xbUShort DecimalCount; /* Number of decimal positions */
- xbUShort KeysPerNode; /* Max number of keys per node */
- xbUShort HalfKeysPerNode; /* Min number of keys per node */
- char KeyExpression[256]; /* Null terminated key expression */
- unsigned Unique; /* Unique Flag */
- char NotUsed[745];
-};
-
-</xmp>
-
-<br><br>
-
-<h4>Interior and Leaf Nodes</h4>
-
-NTX files use a B-tree system to store keys. A B-tree is a balanced,
-on disk tree who's design minimizes disk access. Interior Nodes and
-Leaf Nodes share the same structure in an NTX file. The difference is
-that interior nodes point to other nodes. Leaf nodes point to
-nothing. Keys in both interior nodes and leaf nodes point to records
-in a DBF file.
-
-Interior nodes have field LeftNodeNo valued which points to the node
-which points to the keys which are less than the key value in the KeyVal
-field. There is one more LeftNodeNo value in the node than there are keys. The
-Last LeftNodeNo points to the node which is greater than the highest
-key value in the node. <br><br>
-
-Leaf nodes have 0 in the LeftNodeNo field.<br><br>
-
-
-<TABLE BORDER>
-<CAPTION ALIGN="TOP"><h3>NTX Interior Node and Leaf Node Structure</H3></CAPTION>
-<TR VALIGN="BASELINE">
-<TR><TH ALIGN="LEFT">Type<TD>Size<TD>Field Name<TD>Description
-<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>NoOfKeysThisNode<TD>The number of key values in this node. (N)
-<TR><TH ALIGN="LEFT">Array of xbUShort<TD>2<TD>offsets[]<TD>Array of
- <pre>HeadNode.KeysPerNode +1</pre> unsigned longs.
- These values are the offsets (in bytes) of each key
- in this node, from the beginning of the node.
-<TR><TH ALIGN="LEFT">char<TD>variable<TD>KeyRecs<TD>A repeating structure of
- pointers and keys. See the next table for the KeyRec structure.
-</TABLE>
-<br><br>
-
-One primary difference between NDX files and NTX files is that NTX
-files uses an array of offsets on all interior and leaf nodes. Each
-offset is the byte count from the beginning of the node where each
-KeyRec will be found. The order of the array of offsets determines
-the order of keys on a given node. When keys are added or deleted,
-thus changing the order of the keys on a node, only the order of the
-offset array is changed. All other key data is not moved. This results
-in slightly better index performance.
-
-<BR>
-<TABLE BORDER>
-<CAPTION ALIGN="TOP"><h3>KeyRec Structure</H3></CAPTION>
-<TR VALIGN="BASELINE">
-<TR><TH ALIGN="LEFT">Type<TD>Size<TD>Field Name<TD>Description
-<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>LeftNodeNo<TD>The node number (offset from beginning of file) of the lower node
- for this key. 0 in Leaf Nodes.
-<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>DbfRecNo<TD>The DBF record number for this key.
- 0 in Interior Nodes.
-<TR><TH ALIGN="LEFT">char<TD>KeyLen<TD>KeyValue<TD>The key value.
-</TABLE>
-
-<br><br>
-For those interested in knowing how the Xbase DBMS manipulates and
-navigates index files, the following discussion may be helpfull.<br><br>
-
-Xbase DBMS navigates through NTX files by using an in-memory chain of
-nodes of the current location / key in use. It starts by reading the
-Head Node of the index, which points to the first node of the
-file. The first node of the file will be a leaf node if the index is
-small or will be an interior node if the index has more than one leaf
-node. The first interior node is loaded into memory, added to the
-node chain and points to the next node to read. The node is made up
-of one or more keys. If it is a leaf node, the logic looks for a
-matching key on the node. It continues down the tree, adding the
-nodes to the in-memory node chain until it reaches the correct
-node. If it finds a matching key in the leaf node, it returns a XB_FOUND
-condition. If it doesn't find an exact match in the leaf node, it
-returns a XB_NOT_FOUND condition and stops on the key which is greater
-than the search key given.
-
-<hr>
-<A HREF="mailto:bob@#synxis.com">
-Author: Bob Cotton - bob@synxis.com</A><br>
-<p><img src="xbase.jpg"><br><hr>
-</BODY>
-</HTML>
diff --git a/docs/man/xb_cfg_chk.1.gz b/docs/man/xb_cfg_chk.1.gz
deleted file mode 100644
index 9dabd69..0000000
--- a/docs/man/xb_cfg_chk.1.gz
+++ /dev/null
Binary files differ
diff --git a/docs/man/xb_copydbf.1.gz b/docs/man/xb_copydbf.1.gz
deleted file mode 100644
index 410723d..0000000
--- a/docs/man/xb_copydbf.1.gz
+++ /dev/null
Binary files differ
diff --git a/docs/man/xb_dbfutil.1.gz b/docs/man/xb_dbfutil.1.gz
deleted file mode 100644
index 555bd83..0000000
--- a/docs/man/xb_dbfutil.1.gz
+++ /dev/null
Binary files differ
diff --git a/docs/man/xb_deletall.1.gz b/docs/man/xb_deletall.1.gz
deleted file mode 100644
index 8016f10..0000000
--- a/docs/man/xb_deletall.1.gz
+++ /dev/null
Binary files differ
diff --git a/docs/man/xb_dumpdbt.1.gz b/docs/man/xb_dumpdbt.1.gz
deleted file mode 100644
index f0585b4..0000000
--- a/docs/man/xb_dumpdbt.1.gz
+++ /dev/null
Binary files differ
diff --git a/docs/man/xb_dumprecs.1.gz b/docs/man/xb_dumprecs.1.gz
deleted file mode 100644
index f63c8b7..0000000
--- a/docs/man/xb_dumprecs.1.gz
+++ /dev/null
Binary files differ
diff --git a/docs/man/xb_pack.1.gz b/docs/man/xb_pack.1.gz
deleted file mode 100644
index c5ec726..0000000
--- a/docs/man/xb_pack.1.gz
+++ /dev/null
Binary files differ
diff --git a/docs/man/xb_tblinfo.1.gz b/docs/man/xb_tblinfo.1.gz
deleted file mode 100644
index ab7b26a..0000000
--- a/docs/man/xb_tblinfo.1.gz
+++ /dev/null
Binary files differ
diff --git a/docs/man/xb_undelall.1.gz b/docs/man/xb_undelall.1.gz
deleted file mode 100644
index 31cc868..0000000
--- a/docs/man/xb_undelall.1.gz
+++ /dev/null
Binary files differ
diff --git a/src/core/xbblockread.cpp b/src/core/xbblockread.cpp
deleted file mode 100755
index 09076b1..0000000
--- a/src/core/xbblockread.cpp
+++ /dev/null
@@ -1,271 +0,0 @@
-/* xbblockread.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-This module handles block read methods. Block reading is used for performance improvement
-during sequential access processing.
-
-*/
-
-#include "xbase.h"
-
-#ifdef XB_BLOCKREAD_SUPPORT
-
-namespace xb{
-
-/************************************************************************/
-xbBlockRead::xbBlockRead( xbDbf * d ) {
- pBlock = NULL;
- ulBlkSize = 0;
- ulFirstBlkRec = 0;
- ulRecCnt = 0;
- ulMaxRecs = 0;
- bEof = xbFalse;
- this->dbf = d;
- tFmTime = 0;
-}
-/************************************************************************/
-xbBlockRead::~xbBlockRead(){
- if( pBlock ){
- free( pBlock );
- pBlock = NULL;
- }
-}
-
-/************************************************************************/
-//! @brief Dump read block internals to stdout.
-/*!
- Dump the current read block internals to stdout.
-*/
-
-
-#ifdef XB_DEBUG_SUPPORT
-void xbBlockRead::DumpReadBlockInternals(){
- std::cout << "------- DumpBlockInternals ---------" << std::endl;
- std::cout << "Dflt Blk Size = [" << dbf->GetXbasePtr()->GetDefaultBlockReadSize()
- << "]" << std::endl;
- std::cout << "Dbf Record Count = [" << dbf->GetRecordCount() << "]" << std::endl;
- std::cout << "Dbf Record Len = [" << dbf->GetRecordLen() << "]" << std::endl;
- std::cout << "ulBlkSize = [" << ulBlkSize << "]" << std::endl;
- std::cout << "ulMaxRecs = [" << ulMaxRecs << "]" << std::endl;
- std::cout << "ulFirstBlkRec = [" << ulFirstBlkRec << "]" << std::endl;
- std::cout << "ulRecCnt = [" << ulRecCnt << "]" << std::endl;
- std::cout << "bEof = [" << bEof << "]" << std::endl;
-}
-#endif // XB_DEBUG_SUPPORT
-/************************************************************************/
-//! @brief Get the first record number in the current block.
-/*!
- Retrieve the first record numer in the current block.<br>
-
- \returns First record number in the current block.
-*/
-
-xbUInt32 xbBlockRead::GetBlockFirstRecNo() const{
- return ulFirstBlkRec;
-}
-/************************************************************************/
-//! @brief Get record for specified record number.
-/*!
- Retrieve a record from read block buffer and copy it into the record buffer.
- If the current record is not in the current block, the routine calls
- GetBlockForRecNo to load the currect block from disk.<br><br>
- For performance reasons, this method assumes a valid record number has been
- passed.<br><br>
-
- \param ulRecNo - Record number to retrieve.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbBlockRead::GetRecord( xbUInt32 ulRecNo ){
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
-
- // std::cout << "xbBlockRead::GetRecord( " << ulRecNo << ")\n";
-
- try{
- if( !( ulRecNo >= ulFirstBlkRec && ulRecNo < (ulFirstBlkRec + ulRecCnt))){
- if(( iRc = GetBlockForRecNo( ulRecNo )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- }
- char *s = pBlock;
- s += (ulRecNo - ulFirstBlkRec) * dbf->GetRecordLen();
- char *t = dbf->RecBuf;
- xbUInt32 ulRecLen = dbf->GetRecordLen();
- for( xbUInt32 l = 0; l < ulRecLen; l++ ){
- *t = *s;
- t++;
- s++;
- }
- dbf->ulCurRec = ulRecNo;
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbBlockRead::GetBlockForRecNo() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- dbf->GetXbasePtr()->WriteLogMessage( sMsg.Str() );
- dbf->GetXbasePtr()->WriteLogMessage( dbf->GetXbasePtr()->GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/************************************************************************/
-//! @brief Get record for specified record number.
-/*!
- Retrieve a block containing specified record. This routine calculates the
- correct block in the DBF file, updates the internal block fields and retrieves
- the block of records from disk and loads into the block buffer.<br><br>
-
- \param ulRecNo - Record number to retrieve.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbBlockRead::GetBlockForRecNo( xbUInt32 ulRecNo ){
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
-
- try{
- xbUInt32 ulDbfRecCnt = dbf->GetRecordCount();
-
- // calc to determine block number for the requested record, 0 based offset
- xbUInt32 ulBlockNo = (xbUInt32)(ulRecNo / ulMaxRecs);
- if( ulRecNo % ulMaxRecs == 0 ) ulBlockNo--;
-
- // calc the first record
- ulFirstBlkRec = (ulBlockNo * ulMaxRecs);
-
- // calc the record count
- if(( ulFirstBlkRec + ulMaxRecs) > ulDbfRecCnt ){
- ulRecCnt = ulDbfRecCnt - ulFirstBlkRec;
- bEof = xbTrue;
- } else {
- ulRecCnt = ulMaxRecs;
- bEof = xbFalse;
- }
-
- // position accordingly
- xbInt64 ulStartPos = dbf->GetHeaderLen() + ((xbInt64) ulFirstBlkRec * dbf->GetRecordLen());
- if(( dbf->xbFseek( ulStartPos, SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 110;
- iRc = XB_SEEK_ERROR;
- throw iRc;
- }
-
- if(( dbf->GetFileMtime( tFmTime )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- // read it
- if(( dbf->xbFread( (void *) pBlock, ulRecCnt * dbf->GetRecordLen(), 1 )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
-
- ulFirstBlkRec++; // zero offset in the routine, regular record number from ths point forward
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbBlockRead::GetBlockForRecNo() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- dbf->GetXbasePtr()->WriteLogMessage( sMsg.Str() );
- dbf->GetXbasePtr()->WriteLogMessage( dbf->GetXbasePtr()->GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-
-/************************************************************************/
-//! @brief Get the current block size.
-/*!
- Retrieve the current block size.<br><br>
-
- \returns Current Block Size.
-*/
-
-xbUInt32 xbBlockRead::GetBlockSize() const{
- return ulBlkSize;
-}
-
-/************************************************************************/
-//! @brief Get the current block record count.
-/*!
- Retrieve the current number of records loaded in the block.<br><br>
-
- \returns Current Block Size.
-*/
-
-xbUInt32 xbBlockRead::GetBlockRecCnt() const {
- return ulRecCnt;
-}
-
-/************************************************************************/
-//! @brief Init the block processing for a iven DBF file.
-/*!
- Initialize the settings for a given DBF file.<br>
- This routine may adjust the block size as needed to eliminate unused
- memory or adjust it bigger if too small.
-
- \param ulRecNo - ulBlockSize - Block size to allocate. If 0 or missing, it uses default block size of 32K.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbBlockRead::Init(xbUInt32 ulBlockSize ){
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
-
- try{
-
- // calculate the block size
- if( ulBlockSize == 0 )
- ulBlkSize = dbf->GetXbasePtr()->GetDefaultBlockReadSize();
-
- // if not big enough to handle more than one record, bump it up to something meaningful
- if( ulBlkSize < (xbUInt32)(dbf->GetRecordLen() * 2 ))
- ulBlkSize = (xbUInt32) dbf->GetRecordLen() * 10;
-
- ulMaxRecs = (xbUInt32) ulBlkSize / dbf->GetRecordLen();
- ulBlkSize = ulMaxRecs * dbf->GetRecordLen();
-
- // allocate memory for the block
- if(( pBlock = (char *) calloc( 1, ulBlkSize )) == NULL ){
- iErrorStop = 100;
- throw iRc;
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbBlockRead::Init() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- dbf->GetXbasePtr()->WriteLogMessage( sMsg.Str() );
- dbf->GetXbasePtr()->WriteLogMessage( dbf->GetXbasePtr()->GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/************************************************************************/
-//! @brief Set the block size.
-/*!
- St block size for this DBF file.<br>.
-
- \param ulBlkSize - Block Size.
- \returns XB_NO_ERROR
-*/
-
-xbInt16 xbBlockRead::SetBlockSize( xbUInt32 ulBlkSize ){
- this->ulBlkSize = ulBlkSize;
- return XB_NO_ERROR;
-}
-
-/************************************************************************/
-} /* namespace */
-#endif /* XB_BLOCKREAD_SUPPORT */ \ No newline at end of file
diff --git a/src/core/xbdate.cpp b/src/core/xbdate.cpp
deleted file mode 100755
index ba0fdf1..0000000
--- a/src/core/xbdate.cpp
+++ /dev/null
@@ -1,802 +0,0 @@
-/* xbdate.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-#include "xbase.h"
-#include <time.h>
-
-namespace xb{
-
-int xbDate::iDaysInMonths[2][13];
-int xbDate::iAggregatedDaysInMonths[2][13];
-
-/*************************************************************************/
-//! @brief Constructor.
-
-xbDate::xbDate() {
- Sysdate();
- SetDateTables();
-}
-
-/*************************************************************************/
-//! @brief Constructor.
-/*!
- \param sDate8In - Input date.
-*/
-
-xbDate::xbDate( const xbString & sDate8In ) {
- if( DateIsValid( sDate8In ))
- sDate8.Set( sDate8In );
- else
- Sysdate();
- SetDateTables();
-}
-
-/*************************************************************************/
-//! @brief Constructor.
-/*!
- \param sDate8In - Input date.
-*/
-xbDate::xbDate( const char * sDate8In ) {
-
- if( DateIsValid( sDate8In ))
- sDate8.Set( sDate8In );
- else
- Sysdate();
- SetDateTables();
-}
-
-/*************************************************************************/
-//! @brief Constructor.
-/*!
- \param lJulDate - Input julian date.
-*/
-xbDate::xbDate( xbInt32 lJulDate ) {
- SetDateTables();
- JulToDate8( lJulDate );
-}
-
-/*************************************************************************/
-//! @brief Destructor.
-xbDate::~xbDate(){}
-/*************************************************************************/
-//! @brief Set operator=
-/*!
- \param dt - Date value for set operation.
-*/
-void xbDate::operator=( const xbDate & dt ){
- sDate8.Set( dt.Str());
-}
-/*************************************************************************/
-//! @brief operator +=
-/*!
- This routine adds lDays to the date
- \param lDays - Number of days to add to the date.
-*/
-void xbDate::operator+=( xbInt32 lDays ){
- JulToDate8( JulianDays() + lDays );
-}
-/*************************************************************************/
-//! @brief operator -=
-/*!
- This routine subtracts lDays from the date.
- \param lDays - Number of days to subtract from the date.
-*/
-void xbDate::operator-=( xbInt32 lDays ){
- JulToDate8( JulianDays() - lDays );
-}
-/*************************************************************************/
-//! @brief operator ++
-/*!
- This routine adds one day to the date field.
-*/
-void xbDate::operator++(xbInt32){
- *this+=1;
-}
-/*************************************************************************/
-//! @brief operator --
-/*!
- This routine subtracts one day from the date field.
-*/
-void xbDate::operator--(xbInt32){
- *this-=1;
- return;
-}
-/*************************************************************************/
-//! @brief operator -
-/*!
- This routine subtracts one date from another date returning the difference.
- \param dt - Date to subtract.
- \returns Number of days
-*/
-xbInt32 xbDate::operator-( const xbDate &dt ) const{
- return JulianDays() - dt.JulianDays();
-}
-/*************************************************************************/
-//! @brief operator +
-/*!
- This routine adds additional days to a date field.
- \param lCount - Number of days to add.
- \returns New date in CCYYMMDD format.
-*/
-const char *xbDate::operator+( xbInt32 lCount ){
- JulToDate8( JulianDays() + lCount );
- return sDate8.Str();
-}
-/*************************************************************************/
-//! @brief operator -
-/*!
- This routine subtracts days from a date field.
- \param lCount - Number of days to subtract.
- \returns New date in CCYYMMDD format.
-*/
-const char *xbDate::operator-( xbInt32 lCount ){
- JulToDate8( JulianDays() - lCount );
- return sDate8;
-}
-/*************************************************************************/
-//! @brief operator ==
-/*!
- This routine compares two dates for equality.
- \param dt - Date to compare.
- \returns xbTrue - Dates match.<br>xbFalse - Dates don't match.
-*/
-xbBool xbDate::operator==( const xbDate &dt ) const{
- if( JulianDays() == dt.JulianDays() )
- return xbTrue;
- else
- return xbFalse;
-}
-/*************************************************************************/
-//! @brief operator !=
-/*!
- This routine compares two dates for inequality.
- \param dt - Date to compare.
- \returns xbTrue - Dates don't match.<br>xbFalse - Dates match.
-*/
-xbBool xbDate::operator!=( const xbDate &dt ) const{
- if( JulianDays() != dt.JulianDays() )
- return xbTrue;
- else
- return xbFalse;
-}
-/*************************************************************************/
-//! @brief operator <
-/*!
- This routine compares two dates
- \param dt - Date to compare.
- \returns xbTrue - Left date is less than right date.<br>
- xbFalse - Left date is not less than right date.
-*/
-xbBool xbDate::operator<( const xbDate &dt ) const {
- if( JulianDays() < dt.JulianDays() )
- return xbTrue;
- else
- return xbFalse;
-}
-/*************************************************************************/
-//! @brief >
-/*!
- This routine compares two dates
- \param dt - Date to compare.
- \returns xbTrue - Left date is greater than right date.<br>
- xbFalse - Left date is not greater than right date.
-*/
-xbBool xbDate::operator>( const xbDate &dt ) const {
- if( JulianDays() > dt.JulianDays() )
- return xbTrue;
- else
- return xbFalse;
-}
-/*************************************************************************/
-//! @brief operator <=
-/*!
- This routine compares two dates
- \param dt - Date to compare.
- \returns xbTrue - Left date is less than or equal to right date.<br>
- xbFalse - Left date is not less than or equal to right date.
-*/
-xbBool xbDate::operator<=( const xbDate &dt ) const {
- if( JulianDays() <= dt.JulianDays() )
- return xbTrue;
- else
- return xbFalse;
-}
-/*************************************************************************/
-//! @brief operator >=
-/*!
- This routine compares two dates
- \param dt - Date to compare.
- \returns xbTrue - Left date is greater than or equal to right date.<br>
- xbFalse - Left date is not greater than or equal to right date.
-*/
-xbBool xbDate::operator>=( const xbDate &dt ) const {
- if( JulianDays() >= dt.JulianDays() )
- return xbTrue;
- else
- return xbFalse;
-}
-/*************************************************************************/
-//! @brief Calculate century for a given year.
-/*!
- This routine calculates a century for a given year. It uses an 80/20
- rolling date window to calculate the century.
-
- \param iCalcYear - Two digit year to calculate a century for.
- \returns Century calculated for the two digit year.
-*/
-xbInt16 xbDate::CalcRollingCenturyForYear( xbInt16 iCalcYear ) const {
-
- xbDate d;
- xbInt16 iThisYear = d.YearOf();
- xbInt16 iThisCentury = d.CenturyOf();
- iThisYear -= (iThisCentury * 100);
- if( iThisYear < 80 && iCalcYear < (iThisYear+20) )
- return iThisCentury;
- else if( iThisYear >= 80 &&
- iCalcYear < iThisYear &&
- iCalcYear >= (iThisYear-80))
- return iThisCentury;
- else
- return iThisCentury - 1;
-}
-/*************************************************************************/
-//! @brief Get century for date.
-/*!
- \returns This routine returns the century from the date.
-*/
-xbInt16 xbDate::CenturyOf() const {
- char Century[3];
- Century[0] = sDate8[1];
- Century[1] = sDate8[2];
- Century[2] = 0x00;
- return( atoi( Century ));
-}
-/*************************************************************************/
-//! @brief Get the day of the week.
-/*!
- \param sOutCharDay - Output character day of week (Sun-Sat).
- \returns XB_INVALID_DATE<br>XB_NO_ERROR
-*/
-xbInt16 xbDate::CharDayOf( xbString &sOutCharDay ) {
-
- struct tm tblock;
- char buf[25];
-
- tblock.tm_year = YearOf() - 1900;
- tblock.tm_mon = MonthOf() - 1;
- tblock.tm_mday = DayOf( XB_FMT_MONTH );
- tblock.tm_hour = 0;
- tblock.tm_min = 0;
- tblock.tm_sec = 1;
- tblock.tm_isdst = -1;
- if( mktime( &tblock ) == -1 ){
- sOutCharDay = "" ;
- return XB_INVALID_DATE;
- } else {
- strftime( buf, 25, "%A", &tblock );
- sOutCharDay = buf;
- }
- return XB_NO_ERROR;;
-}
-/*************************************************************************/
-//! @brief Get the month from the date.
-/*!
- \param sOutCharMonth - Output character month.
- \returns XB_INVALID_DATE<br>XB_NO_ERROR
-*/
-xbInt16 xbDate::CharMonthOf( xbString &sOutCharMonth ) {
- struct tm tblock;
- char buf[25];
- tblock.tm_year = YearOf() - 1900;
- tblock.tm_mon = MonthOf() - 1;
- tblock.tm_mday = DayOf( XB_FMT_MONTH );
- tblock.tm_hour = 0;
- tblock.tm_min = 0;
- tblock.tm_sec = 1;
- tblock.tm_isdst = -1;
- if( mktime( &tblock ) == -1 ){
- sOutCharMonth = "";
- return XB_INVALID_DATE;
- } else {
- strftime( buf, 25, "%B", &tblock );
- sOutCharMonth = buf;
- }
- return XB_NO_ERROR;
-}
-/*************************************************************************/
-//! @brief Check a date for valid data.
-/*!
- \param sDateIn - Date to check for valid formaat of CCYYMMDD.
- \returns xbTrue - Valid date.<br>xbFalse - Not a valid date.
-*/
-xbBool xbDate::DateIsValid( const xbString &sDateIn ) const {
-
- xbInt16 iYear, iMonth, iDay;
- char sYear[5];
- char sMonth[3];
- char sDay[3];
-
- if( sDateIn.Len() != 8 )
- return xbFalse;
-
- if(!isdigit( sDateIn[1] ) || !isdigit( sDateIn[2] ) || !isdigit( sDateIn[3] ) ||
- !isdigit( sDateIn[4] ) || !isdigit( sDateIn[5] ) || !isdigit( sDateIn[6] ) ||
- !isdigit( sDateIn[7] ) || !isdigit( sDateIn[8] ) )
- return xbFalse;
-
- sDay[0] = sDateIn[7];
- sDay[1] = sDateIn[8];
- sDay[2] = 0x00;
- iDay = atoi( sDay );
-
- sMonth[0] = sDateIn[5];
- sMonth[1] = sDateIn[6];
- sMonth[2] = 0x00;
- iMonth = atoi( sMonth );
-
- sYear[0] = sDateIn[1];
- sYear[1] = sDateIn[2];
- sYear[2] = sDateIn[3];
- sYear[3] = sDateIn[4];
- sYear[4] = 0x00;
- iYear = atoi( sYear );
-
- // valid years are 0001 thru 9999
- if( iYear < 1 || iYear > 9999 || iMonth < 1 || iMonth > 12 || iDay < 1 || iDay > 31 )
- return xbFalse;
-
- // April, June, September and November have 30 days
- if(( iMonth==4 || iMonth==6 || iMonth==9 || iMonth==11 )&& iDay > 30 )
- return xbFalse;
-
- // check for February with leap year
- if( iMonth == 2 ){
- if(( iYear % 4 == 0 && iYear % 100 != 0 ) || iYear % 400 == 0 ){
- if( iDay > 29 ){
- return xbFalse;
- }
- } else if( iDay > 28 ){
- return xbFalse;
- }
- }
- return xbTrue;
-}
-
-/*************************************************************************/
-//! @brief
-/*!
- This routine returns the numeric day.
- \param iFormat
- XB_FMT_WEEK Number of day in WEEK 0-6 ( Sat - Fri )<br>
- XB_FMT_MONTH Number of day in MONTH 1-31<br>
- XB_FMT_YEAR Number of day in YEAR 1-366
- \returns XB_INVALID_OPTION<br>XB_NO_ERROR
-*/
-
-xbInt16 xbDate::DayOf( xbInt16 iFormat ) const {
-
- xbInt16 iOutDay = 0;
- char sDay[3];
- xbInt16 iDay, iMonth, iYear, iDay2;
-
- // check for valid format switch
- if( iFormat!=XB_FMT_WEEK && iFormat!=XB_FMT_MONTH && iFormat!=XB_FMT_YEAR )
- return XB_INVALID_OPTION;
-
- if( iFormat == XB_FMT_WEEK ){
- //DayOf( XB_FMT_MONTH, iDay );
- iDay = DayOf( XB_FMT_MONTH );
- iMonth = MonthOf();
- iYear = YearOf();
-
- // The following formula uses Zeller's Congruence to determine the day of the week
- if( iMonth > 2 ) // init to February
- iMonth -= 2;
- else {
- iMonth += 10;
- iYear--;
- }
- iDay2 = ((13 * iMonth - 1) / 5) + iDay + ( iYear % 100 ) +
- (( iYear % 100 ) / 4) + ((iYear /100 ) / 4 ) - 2 *
- ( iYear / 100 ) + 77 ;
-
- iOutDay = iDay2 - 7 * ( iDay2 / 7 );
- iOutDay == 6 ? iOutDay = 0 : iOutDay++;
- }
- else if( iFormat == XB_FMT_MONTH ){
- sDay[0] = sDate8[7];
- sDay[1] = sDate8[8];
- sDay[2] = 0x00;
- iOutDay = atoi( sDay );
- } else {
- iOutDay = iAggregatedDaysInMonths[IsLeapYear()][MonthOf()-1] + DayOf( XB_FMT_MONTH );
- }
- return iOutDay;
-}
-
-/*************************************************************************/
-#ifdef XB_DEBUG_SUPPORT
-//! @brief Dump date information to stdout.
-/*!
- \param sTitle - Title for output.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-void xbDate::Dump( const char *sTitle ){
- fprintf( stdout, "%s\n sDate = [%s]\n", sTitle, sDate8.Str() );
-}
-
-/*************************************************************************/
-//! @brief Dump the date tables.
-/*!
- This dumps the internal date structures to stdout.
- \returns void
-*/
-
-void xbDate::DumpDateTables(){
- fprintf( stdout, "Date Tables\n" );
- fprintf( stdout, "Month *-Aggragated Days-* *--Days In Month--*\n" );
- fprintf( stdout, " *-NonLeap Leap-* *--NonLeap Leap--*\n" );
- for( int i = 1; i < 13; i++ )
- fprintf( stdout, " %2d %3d %3d %3d %3d\n", i,
- iAggregatedDaysInMonths[0][i],iAggregatedDaysInMonths[1][i],
- iDaysInMonths[0][i], iDaysInMonths[1][i]);
-}
-#endif
-
-/*************************************************************************/
-//! @brief Format MM/DD/YY date
-/*!
- This routine takes an MM/DD/YY format date as input and populates a
- date class with the appropriate YYYYMMDD data.
-
- \param sCtodInDate - MM/DD/YY formatted date as input.
- \returns XB_INVALID_OPTION<br>XB_NO_ERROR
-*/
-xbInt16 xbDate::CTOD( const xbString &sCtodInDate ){
-
-
- if( sCtodInDate[1] != ' ' && ( sCtodInDate[3] == '\\' || sCtodInDate[3] == '/') ){
- char yy[3];
- yy[0] = sCtodInDate[7];
- yy[1] = sCtodInDate[8];
- yy[2] = 0x00;
- sDate8.Sprintf( "%02d%c%c%c%c%c%c", CalcRollingCenturyForYear( atoi( yy )),
- sCtodInDate[7], sCtodInDate[8], sCtodInDate[1], sCtodInDate[2], sCtodInDate[4], sCtodInDate[5] );
- return XB_NO_ERROR;
- }
- else{
- return XB_INVALID_DATE;
- }
-}
-/*************************************************************************/
-//! @brief
-/*!
- This routine will reformat a date based on the format specifiers entered
- in sFmtIn. If no input format is specified, the routine will use the
- system default date format.
-
- \param sFmtIn - A format specifier with the following paramaters:<br>
-
- 1) YYDDD - A julian date format
- 2) YY or YYYY will print a 2 or 4 digit year
- 3) M,MM,MMM or MMMM
- M - one digit month if no leading zero
- MM - two digit month, contains leading zero
- MMM - Jan through Dec
- MMMM - January through December
- 4) D,DD,DDD or DDDD
- D - one digit dayif no leading zero
- DD - two digit day, contains leading zero
- DDD - Sun through Sat (or julian if YYDDD)
- DDDD - Sunday through Saturday
-
- \param sOutFmtDate - Reformatted output date.
- \returns XB_NO_ERROR
- <br><br>
- Format Examples:<br>
- MM/DD/YY<br>
- YYYY-MM-DD<br>
- DDDDDDDDDDD MMMMMMMMMMM DD,YYYY
-*/
-xbInt16 xbDate::FormatDate( const xbString &sFmtIn, xbString &sOutFmtDate ){
- xbUInt32 FmtCtr;
- char type;
- xbUInt32 iTypeCtr;
- xbString ws;
- xbString sWrkFmt;
- sOutFmtDate = "";
-
- /* use format for this specific string if available, else use default format */
- if( strlen( sFmtIn ) > 0 )
- sWrkFmt = sFmtIn;
- else
- sWrkFmt = GetDefaultDateFormat();
-
- if( strstr( sWrkFmt.Str(), "YYDDD" )){
- sOutFmtDate.Sprintf( "%c%c%03d", sDate8[3], sDate8[4], DayOf( XB_FMT_YEAR ));
- } else {
- FmtCtr = 1;
- while( FmtCtr <= sWrkFmt.Len() ){
- if( sWrkFmt[FmtCtr] != 'D' && sWrkFmt[FmtCtr] != 'M' && sWrkFmt[FmtCtr] != 'Y' ){
- sOutFmtDate += sWrkFmt[FmtCtr];
- FmtCtr++;
- iTypeCtr = 0;
- } else {
- type = sWrkFmt[FmtCtr];
- iTypeCtr = 0;
- while( sWrkFmt[FmtCtr] == type ) {
- iTypeCtr++;
- FmtCtr++;
- }
- switch( type ){
- case 'D':
-
- if( iTypeCtr == 1 ){
- sOutFmtDate += ws.Sprintf( "%d", DayOf( XB_FMT_MONTH ));
- }
- else if( iTypeCtr == 2 ){
- sOutFmtDate += ws.Sprintf( "%c%c", sDate8[7], sDate8[8] );
- } else {
- xbString sCDO;
- CharDayOf( sCDO );
- ws.Assign( sCDO, 1, iTypeCtr );
- sOutFmtDate += ws.Str();
- }
- break;
-
- case 'M':
- if( iTypeCtr == 1 ){
- sOutFmtDate += ws.Sprintf( "%d", MonthOf());
- }
- else if( iTypeCtr == 2 ){
- sOutFmtDate += ws.Sprintf( "%c%c", sDate8[5], sDate8[6] );
- } else {
- xbString sCMO;
- CharMonthOf( sCMO );
- ws.Assign( sCMO, 1, iTypeCtr );
- sOutFmtDate += ws.Str();
- }
- break;
-
- case 'Y':
- if( iTypeCtr == 2 ){
- sOutFmtDate += ws.Sprintf( "%c%c", sDate8[3], sDate8[4] );
- }
- else if( iTypeCtr == 4 ){
- sOutFmtDate += ws.Sprintf( "%c%c%c%c", sDate8[1], sDate8[2], sDate8[3], sDate8[4] );
- }
- break;
- default:
- break;
- }
- }
- }
- }
- return XB_NO_ERROR;
-}
-/*************************************************************************/
-//! @brief Return the date value.
-/*!
- \returns char ptr to date value.
-*/
-const char * xbDate::Str() const{
- return sDate8.Str();
-};
-/*************************************************************************/
-//! @brief Determine if date is a leap year.
-/*!
- \returns xbTrue - Is leapyear.<br> xbFalse - Not a leap year.
-*/
-xbBool xbDate::IsLeapYear() const {
- xbInt16 iYear = YearOf();
- if(( iYear % 4 == 0 && iYear % 100 != 0 ) || iYear % 400 == 0 )
- return xbTrue;
- else
- return xbFalse;
-}
-/*************************************************************************/
-//! @brief Determine if date is a leap year.
-/*!
- \param iYear - Year to check for leap year status.
- \returns xbTrue - Is leapyear.<br> xbFalse - Not a leap year.
-*/
-xbBool xbDate::IsLeapYear( xbInt16 iYear ) const {
- if(( iYear % 4 == 0 && iYear % 100 != 0 ) || iYear % 400 == 0 )
- return xbTrue;
- else
- return xbFalse;
-}
-/*************************************************************************/
-//! @brief Calculate julian days for a given date.
-/*!
- \returns The number of days since 01/01/0001 + JUL_OFFSET.
-*/
-xbInt32 xbDate::JulianDays() const{
- xbInt32 ly = YearOf() - 1;
- xbInt32 lDays = ly * 365L + ly / 4L - ly / 100L + ly / 400L;
- lDays += DayOf( XB_FMT_YEAR );
- return lDays + JUL_OFFSET;
-}
-/*************************************************************************/
-//! @brief Convert the number of julian days to gregorian date.
-/*!
- \param lJulDays - Julian days.
- \returns XB_NO_ERROR
-*/
-xbInt16 xbDate::JulToDate8( xbInt32 lJulDays )
-{
- lJulDays -= JUL_OFFSET;
- // calculate the year
- xbInt16 iYear = (xbInt16)(lJulDays / 365.24 );
- lJulDays -= (iYear * 365L) + (iYear / 4L) - (iYear / 100L) + (iYear / 400L);
- iYear++;
- while( lJulDays <= 0 ){
- iYear--;
- lJulDays += (365L + IsLeapYear( iYear ));
- }
- // this for loop calculates the month by comparing the number of days remaining to one of the tables
- xbInt16 iIsLeap = IsLeapYear(iYear);
- xbInt16 iMonth = 1;
- while( ((xbInt16) lJulDays > iAggregatedDaysInMonths[iIsLeap][iMonth]) && (iMonth < 12) )
- iMonth++;
-
- lJulDays -= iAggregatedDaysInMonths[iIsLeap][iMonth-1];
- sDate8.Sprintf( "%04d%02d%02ld", iYear, iMonth, lJulDays );
- return XB_NO_ERROR;
-}
-/*************************************************************************/
-//! @brief Set the date to the last day of month for a given date.
-/*!
- This routine sets the last date of the month.
- \returns XB_NO_ERROR
-*/
-xbInt16 xbDate::LastDayOfMonth(){
- sDate8.Sprintf( "%4.4d%2.2d%2.2d", YearOf(), MonthOf(), iDaysInMonths[IsLeapYear()][MonthOf()]);
- return XB_NO_ERROR;
-};
-/*************************************************************************/
-//! @brief Return the month for the date.
-/*!
- \returns The month of the date.
-*/
-xbInt16 xbDate::MonthOf() const {
- xbInt16 iOutMonth;
- char month[3];
- month[0] = sDate8[5];
- month[1] = sDate8[6];
- month[2] = 0x00;
- iOutMonth = atoi( month );
- return iOutMonth;
-}
-
-/*************************************************************************/
-//! @brief Set the date.
-/*!
- \param sDateIn - Input date.
- \returns XB_NO_ERROR<br>XB_INVALID_DATE
-*/
-xbInt16 xbDate::Set( const xbString & sDateIn ){
- if( DateIsValid( sDateIn )){
- sDate8 = sDateIn;
- return XB_NO_ERROR;
- }
- return XB_INVALID_DATE;
-}
-/*************************************************************************/
-//! @brief This routine sets up static data tables on startup.
-/*!
- \returns void
-*/
-void xbDate::SetDateTables() {
- if( iAggregatedDaysInMonths[1][12] != 366 ){ /* first time called ? */
-
- iAggregatedDaysInMonths[0][0] = 0;
- iAggregatedDaysInMonths[0][1] = 31;
- iAggregatedDaysInMonths[0][2] = 59;
- iAggregatedDaysInMonths[0][3] = 90;
- iAggregatedDaysInMonths[0][4] = 120;
- iAggregatedDaysInMonths[0][5] = 151;
- iAggregatedDaysInMonths[0][6] = 181;
- iAggregatedDaysInMonths[0][7] = 212;
- iAggregatedDaysInMonths[0][8] = 243;
- iAggregatedDaysInMonths[0][9] = 273;
- iAggregatedDaysInMonths[0][10] = 304;
- iAggregatedDaysInMonths[0][11] = 334;
- iAggregatedDaysInMonths[0][12] = 365;
- iAggregatedDaysInMonths[1][0] = 0;
- iAggregatedDaysInMonths[1][1] = 31;
- iAggregatedDaysInMonths[1][2] = 60;
- iAggregatedDaysInMonths[1][3] = 91;
- iAggregatedDaysInMonths[1][4] = 121;
- iAggregatedDaysInMonths[1][5] = 152;
- iAggregatedDaysInMonths[1][6] = 182;
- iAggregatedDaysInMonths[1][7] = 213;
- iAggregatedDaysInMonths[1][8] = 244;
- iAggregatedDaysInMonths[1][9] = 274;
- iAggregatedDaysInMonths[1][10] = 305;
- iAggregatedDaysInMonths[1][11] = 335;
- iAggregatedDaysInMonths[1][12] = 366;
-
- iDaysInMonths[0][0] = 0;
- iDaysInMonths[0][1] = 31;
- iDaysInMonths[0][2] = 28;
- iDaysInMonths[0][3] = 31;
- iDaysInMonths[0][4] = 30;
- iDaysInMonths[0][5] = 31;
- iDaysInMonths[0][6] = 30;
- iDaysInMonths[0][7] = 31;
- iDaysInMonths[0][8] = 31;
- iDaysInMonths[0][9] = 30;
- iDaysInMonths[0][10] = 31;
- iDaysInMonths[0][11] = 30;
- iDaysInMonths[0][12] = 31;
- iDaysInMonths[1][0] = 0;
- iDaysInMonths[1][1] = 31;
- iDaysInMonths[1][2] = 29;
- iDaysInMonths[1][3] = 31;
- iDaysInMonths[1][4] = 30;
- iDaysInMonths[1][5] = 31;
- iDaysInMonths[1][6] = 30;
- iDaysInMonths[1][7] = 31;
- iDaysInMonths[1][8] = 31;
- iDaysInMonths[1][9] = 30;
- iDaysInMonths[1][10] = 31;
- iDaysInMonths[1][11] = 30;
- iDaysInMonths[1][12] = 31;
- }
-}
-/*************************************************************************/
-//! @brief Set the date equal to the system date.
-/*!
- \returns XB_NO_ERROR
-*/
-xbInt16 xbDate::Sysdate(){
-
- #ifdef HAVE__LOCALTIME64_S_F
- __time64_t timer;
- _time64( &timer );
- struct tm tblock;
- _localtime64_s( &tblock, &timer );
- tblock.tm_year += 1900;
- tblock.tm_mon++;
- sDate8.Sprintf( "%4d%02d%02d", tblock.tm_year, tblock.tm_mon, tblock.tm_mday );
- #else
- time_t timer;
- timer = time( &timer );
- struct tm *tblock;
- tblock = localtime( &timer );
- tblock->tm_year += 1900;
- tblock->tm_mon++;
- sDate8.Sprintf( "%4d%02d%02d",tblock->tm_year,tblock->tm_mon,tblock->tm_mday );
- #endif
-
- return XB_NO_ERROR;
-}
-/*************************************************************************/
-//! @brief Returns the year of the date.
-/*!
- \returns The year of the date.
-*/
-xbInt16 xbDate::YearOf() const {
- char year[5];
- year[0] = sDate8[1];
- year[1] = sDate8[2];
- year[2] = sDate8[3];
- year[3] = sDate8[4];
- year[4] = 0x00;
- xbInt16 iOutYear = atoi( year );
- return iOutYear;
-};
-} /* namespace */ \ No newline at end of file
diff --git a/src/core/xbdbf.cpp b/src/core/xbdbf.cpp
deleted file mode 100755
index 4033ef9..0000000
--- a/src/core/xbdbf.cpp
+++ /dev/null
@@ -1,4338 +0,0 @@
-/* xbdbf.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-#include "xbase.h"
-
-
-namespace xb{
-
-/************************************************************************/
-//! @brief Constructor
-/*!
- \param x Pointer to xbXbase
-*/
-xbDbf::xbDbf( xbXBase * x ) : xbFile( x ){
- xbase = x;
- SchemaPtr = NULL;
- RecBuf = NULL;
- RecBuf2 = NULL;
-
- #ifdef XB_BLOCKREAD_SUPPORT
- pRb = NULL;
- bBlockReadEnabled = xbFalse; // batch read switch, if xbTrue, then ON
- #endif // XB_BLOCKREAD_SUPPORT
-
- InitVars();
-}
-/************************************************************************/
-void xbDbf::InitVars()
-{
- iNoOfFields = 0;
- iDbfStatus = XB_CLOSED;
- ulCurRec = 0L;
- cVersion = 0x00;
- cUpdateYY = 0x00;
- cUpdateMM = 0x00;
- cUpdateDD = 0x00;
- ulNoOfRecs = 0L;
- uiHeaderLen = 0x00;
- uiRecordLen = 0x00;
- cTransactionFlag = 0x00;
- cEncryptionFlag = 0x00;
- cIndexFlag = 0x00;
- cLangDriver = 0x00;
- iFileVersion = 0; /* Xbase64 file version */
- iAutoCommit = -1;
-
- SetFileName ( "" );
- sAlias.Set ( "" );
- SetDirectory ( GetDataDirectory());
-
- #ifdef XB_LOCKING_SUPPORT
- iLockFlavor = -1;
- bTableLocked = xbFalse;
- bHeaderLocked = xbFalse;
- ulAppendLocked = 0;
- SetAutoLock( -1 );
- lloRecLocks.SetDupKeys( xbFalse );
- #endif // XB_LOCKING_SUPPORT
-
- #ifdef XB_INDEX_SUPPORT
- ixList = NULL;
- pCurIx = NULL;
- vpCurIxTag = NULL;
- sCurIxType = "";
- ClearTagList();
- #endif // XB_INDEX_SUPPORT
-
- #ifdef XB_MEMO_SUPPORT
- Memo = NULL;
- #endif // XB_MEMO_SUPPORT
-
- #ifdef XB_INF_SUPPORT
- llInfData.Clear();
- #endif // XB_INF_SUPPORT
-}
-
-/************************************************************************/
-//! @brief Destructor
-xbDbf::~xbDbf(){
-
- // is there is an uncommited update, discard it.
- // as we don't know if it is an append or an update
- if( iDbfStatus == XB_UPDATED )
- Abort();
-
- if( iDbfStatus != XB_CLOSED )
- Close();
-
- if( SchemaPtr ){
- free( SchemaPtr );
- SchemaPtr = NULL;
- }
- if( RecBuf ){
- free( RecBuf );
- RecBuf = NULL;
- }
- if( RecBuf2){
- free( RecBuf2 );
- RecBuf2 = NULL;
- }
- if( RecBuf ){
- free( RecBuf );
- RecBuf = NULL;
- }
-
- #ifdef XB_BLOCKREAD_SUPPORT
- if( bBlockReadEnabled )
- DisableBlockReadProcessing();
- #endif // XB_BLOCKREAD_SUPPORT
-
- Close();
-}
-/************************************************************************/
-//! @brief Abort any uncommited changes for the current record buffer.
-/*!
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbDbf::Abort(){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
-
- try{
- if( iDbfStatus == XB_UPDATED ){
- #ifdef XB_MEMO_SUPPORT
- if( MemoFieldsExist()){
- if(( iRc = Memo->Abort()) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- }
- #endif
- memcpy( RecBuf, RecBuf2, uiRecordLen );
- iDbfStatus = XB_OPEN;
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbdbf::Abort() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-/************************************************************************/
-#ifdef XB_INDEX_SUPPORT
-//! @brief Add an index to the internal list of indices for this table.
-/*!
- The index list is used during any table update process to update any open
- index file. Index files can contain one or more tags.
-
- \param ixIn Pointer to index object for a given index file.
- \param sFmt NDX or MDX.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-
-*/
-
-xbInt16 xbDbf::AddIndex( xbIx * ixIn, const xbString &sFmt ){
-
- xbIxList *ixt; // this
- if(( ixt = (xbIxList *) malloc( sizeof( xbIxList ))) == NULL )
- return XB_NO_ERROR;
-
- ixt->ix = ixIn;
- ixt->next = NULL;
- ixt->sFmt = new xbString( sFmt );
- ixt->sFmt->ToUpperCase();
-
- if( ixList ){
- xbIxList *ixn = ixList; // next
- while( ixn->next ){
- ixn = ixn->next;
- }
- ixn->next = ixt;
- } else {
- ixList = ixt;
- }
- return XB_NO_ERROR;
-}
-#endif // XB_INDEX_SUPPORT
-
-
-/************************************************************************/
-//! @brief Append the current record to the data file.
-/*!
- This method attempts to append the contents of the current record buffer
- to the end of the DBF file, updates the file date, number of records in the file
- and updates any open indices associated with this data file.<br>
-
- To add a record, an application would typically blank the record buffer,
- update various fields in the record buffer, then append the record.<br>
-
- The append method performs the following tasks:<br>
- 1) Create new index key values<br>
- 2) Lock the table<br>
- 3) Lock append bytes<br>
- 4) Lock indices<br>
- 5) Read the dbf header<br>
- 6) Check for dup keys<br>
- 7) Calc last update date, no of recs<br>
- 8) Add keys<br>
- 9) Unlock indices<br>
- 10) Update file header<br>
- 11) Unlock file header<br>
- 12) Append record<br>
- 13) Unlock append bytes<br>
-
-Note: Locking memo files is not needed as the memo file updates are handled outside of the append method.<br>
-
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbDbf::AppendRecord(){
- xbInt16 iErrorStop = 0;
- xbInt16 iRc = XB_NO_ERROR;
- xbUInt32 ulSaveCurRec = 0;
-
- try{
- #ifdef XB_INDEX_SUPPORT
- xbIxList *ixList = GetIxList();
- // do this step first before anything is locked, reduce lock time as much as possible
- while( ixList ){
-
- // std::cout << "xbDbf::CreateKeys(x)\n";
- if(( iRc = ixList->ix->CreateKeys( 1 )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
-
- ixList = ixList->next;
- }
- #endif // XB_INDEX_SUPPORT
-
- // lock everything up for an update
- #ifdef XB_LOCKING_SUPPORT
- if( iAutoLock && !bTableLocked ){
- if(( iRc = LockHeader( XB_LOCK )) != XB_NO_ERROR ){
- if( iRc == XB_LOCK_FAILED ) {
- return iRc;
- } else {
- iErrorStop = 110;
- throw iRc;
- }
- }
- if(( iRc = LockAppend( XB_LOCK )) != XB_NO_ERROR ){
- if( iRc == XB_LOCK_FAILED ){
- LockHeader( XB_UNLOCK );
- return iRc;
- } else {
- iErrorStop = 120;
- throw iRc;
- }
- }
-
- #ifdef XB_INDEX_SUPPORT
- if(( iRc = LockIndices( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- #endif // XB_INDEX_SUPPORT
-
- }
- #endif // XB_LOCKING_SUPPORT
- if(( iRc = ReadHeader( 1, 1 )) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
- #ifdef XB_INDEX_SUPPORT
- ixList = GetIxList();
-
- while( ixList ){
- if(( iRc = ixList->ix->CheckForDupKeys()) != 0 ){
- if( iRc < 0 ){
- iErrorStop = 150;
- throw iRc;
- }
- return XB_KEY_NOT_UNIQUE;
- }
- ixList = ixList->next;
- }
-
- #endif // XB_INDEX_SUPPORT
-
- // calculate the latest header information
- xbDate d;
- cUpdateYY = (char) d.YearOf() - 1900;
- cUpdateMM = (char) d.MonthOf();
- cUpdateDD = (char) d.DayOf( XB_FMT_MONTH );
- ulSaveCurRec = ulCurRec;
- ulNoOfRecs++;
- ulCurRec = ulNoOfRecs;
-
- #ifdef XB_INDEX_SUPPORT
-
-
- ixList = GetIxList();
- while( ixList ){
- if(( iRc = ixList->ix->AddKeys( ulCurRec )) != XB_NO_ERROR ){
- iErrorStop = 160;
- throw iRc;
- }
- ixList = ixList->next;
- }
-
- #ifdef XB_LOCKING_SUPPORT
- if( iAutoLock ){
- if(( iRc = LockIndices( XB_UNLOCK )) != XB_NO_ERROR ){
- iErrorStop = 170;
- throw iRc;
- }
- }
- #endif // XB_LOCKING_SUPPORT
- #endif // XB_INDEX_SUPPORT
-
- // rewrite the header record
- if(( iRc = WriteHeader( 1, 1 )) != XB_NO_ERROR ){
- iErrorStop = 180;
- throw iRc;
- }
-
- #ifdef XB_LOCKING_SUPPORT
- if( iAutoLock ){
- if(( iRc = LockHeader( XB_UNLOCK )) != XB_NO_ERROR ){
- iErrorStop = 190;
- throw iRc;
- }
- }
- #endif
-
- // write the last record
- if(( iRc = xbFseek( (uiHeaderLen+((xbInt64)(ulNoOfRecs-1)*uiRecordLen)), 0 )) != XB_NO_ERROR ){
- iErrorStop = 200;
- throw iRc;
- }
-
- if(( iRc = xbFwrite( RecBuf, uiRecordLen, 1 )) != XB_NO_ERROR ){
- iErrorStop = 210;
- throw iRc;
- }
-
- // write the end of file marker
- if(( iRc = xbFputc( XB_CHAREOF )) != XB_NO_ERROR ){
- iErrorStop = 220;
- throw iRc;
- }
-
- #ifdef XB_LOCKING_SUPPORT
- if( iAutoLock ){
- if(( iRc = LockAppend( XB_UNLOCK )) != XB_NO_ERROR ){
- iErrorStop = 230;
- throw( iRc );
- }
- }
- #endif // XB_LOCKING_SUPPORT
-
- }
- catch (xbInt16 iRc ){
- if( ulSaveCurRec != 0 ){
- ulCurRec = ulSaveCurRec;
- ulNoOfRecs--;
- }
- #ifdef XB_LOCKING_SUPPORT
- if( iAutoLock ){
- #ifdef XB_INDEX_SUPPORT
- LockIndices( XB_UNLOCK );
- #endif // XB_INDEX_SUPPORT
- LockAppend( XB_UNLOCK );
- LockHeader( XB_UNLOCK );
- }
- #endif // XB_LOCKING_SUPPORT
-
- if( iRc != XB_LOCK_FAILED && iRc != XB_KEY_NOT_UNIQUE ){
- xbString sMsg;
- sMsg.Sprintf( "xbdbf::Append() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- }
-
- if( iRc == XB_NO_ERROR )
- iDbfStatus = XB_OPEN;
- return iRc;
-}
-
-/************************************************************************/
-#ifdef XB_INF_SUPPORT
-//! @brief Asscoiate a non production index to a DBF file.
-/*!
-
- The original Dbase (TM) software supported non production indices (NDX) and production indices (MDX).
- The production indices are opened automatically when the DBF file is opened but the non-production
- indices are not. This method is specific to the Xbas64 library and providex a means to link non production
- NDX index files to the DBF file so they will be opened automatically when the DBF file is opened.<br>
-
- This routine requires INF support be enabled when building the library.<br>
- This routine creates a file with the same name as the DBF file, but with an extension of INF.<br>
-
-
- \param sIxType Currently only NDX. Future versions will support additional non prod index types.
- \param sIxName The index name.
- \param iOpt 0 - Add index to .INF if not already there<br>
- 1 - Remove index from .INF if there
-
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-
-*/
-
-xbInt16 xbDbf::AssociateIndex( const xbString &sIxType, const xbString &sIxName, xbInt16 iOpt ){
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
-
- try{
- xbString sIxTypeIn = sIxType;
- sIxTypeIn.Trim();
- xbString sIxNameIn = sIxName;
- sIxNameIn.Trim();
-
- if( sIxTypeIn != "NDX" || sIxName == "" )
- return XB_INVALID_INDEX;
-
- if(( iRc = LoadInfData()) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
-
- // check if entry exists
- xbLinkListNode<xbString> * llN = llInfData.GetHeadNode();
- xbBool bFound = xbFalse;
- xbString s;
-
- while( llN && !bFound ){
- s = llN->GetKey();
- if( s.Len() > 0 ){
- if( sIxNameIn == s )
- bFound = xbTrue;
- }
- llN = llN->GetNextNode();
- }
-
- xbBool bUpdated = xbFalse;
- if( iOpt == 0 && !bFound ){
- s.Sprintf( "%s%c%c", sIxName.Str(), 0x0d, 0x0a );
- llInfData.InsertAtEnd( s );
- bUpdated = xbTrue;
-
- } else if( iOpt == 1 && bFound ){
- llInfData.RemoveByVal( s );
- bUpdated = xbTrue;
- }
-
- if( bUpdated ){
- if(( iRc = SaveInfData()) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- }
-
- } catch( xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbdbf::AssociateIndex() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-#endif // XB_INF_SUPPORT
-
-/************************************************************************/
-//! @brief Blank the record buffer.
-/*!
-
- This method would typically be called to initialize the record buffer before
- updates are applied to append a new record.
-
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbDbf::BlankRecord()
-{
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
-
- try{
-
- if( iDbfStatus == XB_CLOSED ){
- iErrorStop = 100;
- iRc = XB_NOT_OPEN;
- throw iRc;
- }
-
- if( iDbfStatus == XB_UPDATED ){
- if( GetAutoCommit() == 1 ){
- if(( iRc = Commit()) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- } else {
- if(( iRc = Abort()) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- }
- }
- ulCurRec = 0;
- memset( RecBuf, 0x20, uiRecordLen );
- memset( RecBuf2, 0x20, uiRecordLen );
- }
-
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbdbf::BlankRecord() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
-
- return iRc;
-}
-/************************************************************************/
-#ifdef XB_INDEX_SUPPORT
-/*!
- This method is used to check an index tag's intgerity.
-
- \param iTagOpt 0 - Check current tag<br>
- 1 - Check all tag<br>
-
- \param iOutputOpt Output message destination<br>
- 0 = stdout<br>
- 1 = Syslog<br>
- 2 = Both<br>
-
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbDbf::CheckTagIntegrity( xbInt16 iTagOpt, xbInt16 iOutputOpt ){
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
-
- try{
- if( iTagOpt == 0 ){
- if( pCurIx )
- return pCurIx->CheckTagIntegrity( vpCurIxTag, iOutputOpt );
- else
- return XB_INVALID_TAG;
-
- } else {
-
- xbLinkListNode<xbTag *> *llN = GetTagList();
- xbTag *pTag;
-
- while( llN ){
- pTag = llN->GetKey();
- if(( iRc = pTag->GetIx()->CheckTagIntegrity( pTag->GetVpTag(), iOutputOpt )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- llN = llN->GetNextNode();
- }
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbdbf::CheckTagIntegrity() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/************************************************************************/
-/*!
- This method is used to reindex / rebuild index tag.
-
- \param iTagOpt 0 - Reindex current tag<br>
- 1 - Reindex all tags<br>
-
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbDbf::Reindex( xbInt16 iTagOpt ){
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- void *vp;
-
- try{
- if( iTagOpt == 0 ){
- if( pCurIx ){
-
- iRc = pCurIx->Reindex( &vpCurIxTag );
- if( iRc != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- return iRc;
- } else {
- return XB_INVALID_TAG;
- }
-
- } else {
-
- xbLinkListNode<xbTag *> *llN = GetTagList();
- xbTag *pTag;
-
- while( llN ){
- pTag = llN->GetKey();
- vp = pTag->GetVpTag();
- if(( iRc = pTag->GetIx()->Reindex( &vp )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- llN = llN->GetNextNode();
- }
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbdbf::Reindex() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/************************************************************************/
-// @brief Clear the index tag list.
-/*
- Protected method. Clears the list inf index tags.
- \returns void.
-*/
-void xbDbf::ClearTagList(){
-
- xbTag *pTag;
- xbBool bDone = xbFalse;
- while( llTags.GetNodeCnt() > 0 && !bDone ){
- if( llTags.RemoveFromFront( pTag ) != XB_NO_ERROR ){
- bDone = xbTrue;
- } else {
- if( pTag )
- delete pTag;
- }
- }
-}
-#endif // XB_INDEX_SUPPORT
-
-/************************************************************************/
-//! @brief Close DBF file/table.
-/*!
- This routine flushes any remaining updates to disk, closes the DBF file and
- any associated memo and index files.
-
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbDbf::Close(){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
-
- try{
-
- if(iDbfStatus == XB_CLOSED)
- return XB_NO_ERROR;
-
- else if( iDbfStatus == XB_UPDATED ){
-
- if( GetAutoCommit() == 1 ){
- if(( iRc = Commit()) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- } else {
- if(( iRc = Abort()) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- }
- }
-
- if(SchemaPtr){
- free( SchemaPtr );
- SchemaPtr = NULL;
- }
- if(RecBuf){
- free( RecBuf );
- RecBuf = NULL;
- }
- if(RecBuf2){
- free( RecBuf2 );
- RecBuf2 = NULL;
- }
-
- #ifdef XB_MEMO_SUPPORT
- if( iMemoFieldCnt > 0 ){
- Memo->CloseMemoFile();
- delete Memo;
- Memo = NULL;
- }
- #endif
-
- // close any open index files, remove from the ix list
- #ifdef XB_INDEX_SUPPORT
- while( ixList ){
- ixList->ix->Close();
- RemoveIndex( ixList->ix );
- }
- #endif
-
- if(( iRc = xbase->RemoveTblFromTblList( this )) != XB_NO_ERROR ){
- xbString sMsg;
- sMsg.Sprintf( "Alias = [%s]", sAlias.Str());
- xbase->WriteLogMessage( sMsg.Str() );
- iErrorStop = 120;
- throw iRc;
- }
- xbFclose();
- InitVars();
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbdbf::Close() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/************************************************************************/
-#ifdef XB_INDEX_SUPPORT
-//! @brief Close an open index file
-/*!
- All index files are automatically closed when the DBF file is closed.
- Under normal conditions, it is not necessary to explicitly close an index file
- with this routine. Any updates posted to a DBF file while an index is closed
- will not be reflected in the closed index file.
-
- \param pIx Pointer to index object to close.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbDbf::CloseIndexFile( xbIx *pIx ){
-
- xbInt16 iErrorStop = 0;
- xbInt16 iRc = XB_NO_ERROR;
-
- try{
-
- // verify index is open and in the list
- xbBool bFound = xbFalse;
- xbIxList *p = GetIxList();
- while( p && !bFound ){
- if( pIx == p->ix )
- bFound = xbTrue;
- p = p->next;
- }
- if( !bFound ){
- iErrorStop = 100;
- iRc = XB_NOT_OPEN;
- throw iRc;
- }
- // close it
- if(( iRc = pIx->Close()) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- // remove it from the list
- if(( iRc = RemoveIndex( pIx )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- // refresh the tag list
- if(( iRc = UpdateTagList()) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- if( pIx == pCurIx ){
- pCurIx = NULL;
- vpCurIxTag = NULL;
- sCurIxType = "";
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbdbf::CloseIndexFile() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-#endif // XB_INDEX_SUPPORT
-
-/************************************************************************/
-//! @brief Commit updates to disk
-/*!
-
- This routine commits any pending updates to disk.
-
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbDbf::Commit(){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- try{
-
- if( iDbfStatus == XB_UPDATED ){
- if( ulCurRec == 0 ){
- if(( iRc = AppendRecord()) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- } else {
- if(( iRc = PutRecord( ulCurRec )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- }
- }
- }
- catch (xbInt16 iRc ){
- if( iRc != XB_LOCK_FAILED ){
- xbString sMsg;
- sMsg.Sprintf( "xbdbf::Commit() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- }
- return iRc;
-}
-
-/************************************************************************/
-//! @brief Copy table (dbf) file structure.
-/*!
-
- This routine will copy the structure of a dbf file and if successful
- return a pointer to the new table in an open state.
-
- \param dNewTable Reference to new table object.
- \param sNewTableName New table (dbf) name.
- \param sNewTableAlias Alias name of new table.
- \param iOverlay xbTrue - Overlay existing file.<br>
- xbFalse - Don't overlay existing file.
- \param iShareMode XB_SINGLE_USER<br>
- XB_MULTI_USER
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-//! Copy DBF structure
-/*!
-*/
-xbInt16 xbDbf::CopyDbfStructure( xbDbf * dNewTable, const xbString &sNewTableName,
- const xbString & sNewTableAlias, xbInt16 iOverlay, xbInt16 iShareMode ) {
-
-// If successful, the table is returned in an open state after executing this method
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbSchema *newTableSchema = NULL;
-
- try{
-
- if( iDbfStatus == XB_CLOSED ){
- iErrorStop = 100;
- iRc = XB_DBF_FILE_NOT_OPEN;
- throw iRc;
- }
-
- if( !dNewTable ){
- iErrorStop = 110;
- iRc = XB_INVALID_OBJECT;
- throw iRc;
- }
-
- // Get the number of schema entries for this table
- xbInt32 lSchemaRecCnt = GetFieldCnt() + 1;
-
- // Allocate a Schema = No Of Fields + 1
- if((newTableSchema=(xbSchema *)malloc( (size_t) lSchemaRecCnt * sizeof(xbSchema)))==NULL){
- iErrorStop = 120;
- iRc = XB_NO_MEMORY;
- throw iRc;
- }
-
- // Populate the Schema
- xbInt32 l;
- for( l = 0; l < lSchemaRecCnt-1; l++ ){
- memset( newTableSchema[l].cFieldName, 0x00, 11 );
- for( int x = 0; x < 10 && SchemaPtr[l].cFieldName[x]; x++ )
- newTableSchema[l].cFieldName[x] = SchemaPtr[l].cFieldName[x];
- newTableSchema[l].cType = SchemaPtr[l].cType;
- newTableSchema[l].iFieldLen = SchemaPtr[l].cFieldLen;
- newTableSchema[l].iNoOfDecs = SchemaPtr[l].cNoOfDecs;
- }
-
- // set the last one to zeroes
- memset( newTableSchema[l].cFieldName, 0x00, 11 );
- newTableSchema[l].cType = 0;
- newTableSchema[l].iFieldLen = 0;
- newTableSchema[l].iNoOfDecs = 0;
-
- dNewTable->SetVersion();
- #ifdef XB_MEMO_SUPPORT
- if( MemoFieldsExist())
- dNewTable->SetCreateMemoBlockSize( Memo->GetBlockSize() );
- #endif
-
- // Call the create a table function
- if(( iRc = dNewTable->CreateTable( sNewTableName, sNewTableAlias, newTableSchema, iOverlay, iShareMode )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- }
-
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbDbf::CopyDbfStructure() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
-
- if( newTableSchema )
- free( newTableSchema );
-
- return iRc;
-}
-
-/************************************************************************/
-#ifdef XB_INDEX_SUPPORT
-//! @brief Create a new tag (index) for this dbf file (table).
-/*!
- This routine creates a new tag (index) on a dbf file. The library currently supports NDX and MDX
- indices. If you don't have a specific need for an NDX file, use MDX.
-
- \param sIxType "MDX" or "NDX".
- \param sName Index or tag name.
- \param sKey Index key expression,
- \param sFilter Filter expression. Not applicable for NDX indices.
- \param iDescending xbTrue for descending. Not available for NDX indices.<br>
- xbFalse - ascending
- \param iUnique xbTrue - Unique index<br>xbFalse - Not unique index.
- \param iOverLay xbTrue - Overlay if exists<br>
- xbFalse - Don't overlay if it exists.
- \param pIxOut Pointer to pointer of output index object.
- \param vpTagOut Pointer to pointer of newly created tag,
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbDbf::CreateTag( const xbString &sIxType, const xbString &sName, const xbString &sKey, const xbString &sFilter,
- xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverLay, xbIx **pIxOut, void **vpTagOut ){
-
- // this routine is used to open indices and link to files
-
- xbInt16 iErrorStop = 0;
- xbInt16 iRc = XB_NO_ERROR;
-
- #ifdef XB_LOCKING_SUPPORT
- xbBool bLocked = xbFalse;
- #endif
-
- try{
- xbString sType = sIxType;
- sType.ToUpperCase();
-
- #ifdef XB_LOCKING_SUPPORT
- if( iAutoLock && !bTableLocked ){
- if(( iRc = LockTable( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw( iRc );
- }
- bLocked = xbTrue;
- }
- #endif // XB_LOCKING_SUPPORT
-
- if( sIxType == "" ){
- iErrorStop = 110;
- iRc = XB_INVALID_OPTION;
- throw iRc;
-
- #ifdef XB_NDX_SUPPORT
- } else if( sIxType == "NDX" ){
- xbIxNdx *ixNdx = new xbIxNdx( this );
-
- if(( iRc = ixNdx->CreateTag( sName, sKey, sFilter, iDescending, iUnique, iOverLay, vpTagOut )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
-
- if(( iRc = AddIndex( ixNdx, sIxType )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- *pIxOut = ixNdx;
-
- // Set the current tag if one not already set
- if( sCurIxType == "" ){
- sCurIxType = "NDX";
- pCurIx = ixNdx;
- vpCurIxTag = ixNdx->GetTag(0);
- }
-
- #endif
-
- #ifdef XB_MDX_SUPPORT
- } else if( sIxType == "MDX" ){
-
- if( GetVersion() == 3 ){ // MDX indexes were version 4 and higher
- iErrorStop = 140;
- iRc = XB_INVALID_INDEX;
- throw iRc;
- }
-
- xbIxMdx *ixMdx;
- xbString s;
- // look through the index list and see if there is an mdx pointer we can grab
- xbBool bMdxFound = xbFalse;
- xbIxList *ixList = GetIxList();
- while( ixList && !bMdxFound ){
- s = ixList->sFmt->Str();
- if( s == "MDX" ){
- ixMdx = (xbIxMdx *) ixList->ix;
- bMdxFound = xbTrue;
- }
- }
-
- if( !bMdxFound )
- ixMdx = new xbIxMdx( this );
-
- if(( iRc = ixMdx->CreateTag( sName, sKey, sFilter, iDescending, iUnique, iOverLay, vpTagOut )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
-
- if( !bMdxFound ){
- if(( iRc = AddIndex( ixMdx, "MDX" )) != XB_NO_ERROR ){
- iErrorStop = 160;
- throw iRc;
- }
-
- cIndexFlag = 0x01;
- if(( iRc = WriteHeader( 1, 0 )) != XB_NO_ERROR ){
- iErrorStop = 170;
- throw iRc;
- }
- }
- *pIxOut = ixMdx;
-
- // set the current tag if one not already set
- if( sCurIxType == "" ){
- sCurIxType = "MDX";
- pCurIx = ixMdx;
- vpCurIxTag = ixMdx->GetTag(0);
- }
-
- #endif
-
- } else {
- iErrorStop = 200;
- iRc = XB_INVALID_OPTION;
- throw iRc;
- }
-
- if(( iRc = UpdateTagList()) != XB_NO_ERROR ){
- iErrorStop = 300;
- throw iRc;
- }
-
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbdbf::CreateTag() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
-
- #ifdef XB_LOCKING_SUPPORT
- if( bLocked )
- LockTable( XB_UNLOCK );
- #endif // XB_LOCKING_SUPPORT
-
- return iRc;
-}
-#endif // XB_INDEX_SUPPORT
-
-/************************************************************************/
-//! @brief Delete or undelete all records in a dbf file (table).
-/*!
- This routine deletes or un-deletes all records. The xbase file format contains
- a leading one byte character used for flagging a record as deleted. When a record
- is deleted, it's not physically removed from the file, the first byte is flagged as deleted.
-
- \param iOption 0 - Delete all records.<br>
- 1 - Un-delete all deleted records.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbDbf::DeleteAll( xbInt16 iOption )
-{
- xbInt16 iErrorStop = 0;
- xbInt16 iRc = XB_NO_ERROR;
- xbUInt32 ulRecCnt;
-
- try{
- if(( iRc = GetRecordCnt( ulRecCnt )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- if( ulRecCnt == 0 )
- return XB_NO_ERROR;
- for( xbUInt32 ul = 0; ul < ulRecCnt; ul++ ){
- if(( iRc = GetRecord( ul+1 )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- if( iOption == 0 ){ /* delete all option */
- if( !RecordDeleted()){
- if(( iRc = DeleteRecord()) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- if(( iRc = Commit()) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- }
- } else { /* undelete all option */
- if( RecordDeleted()){
- if(( iRc = UndeleteRecord()) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
- if(( iRc = Commit()) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
- }
- }
- }
- }
- catch (xbInt16 iRc ){
- if( iRc != XB_LOCK_FAILED ){
- xbString sMsg;
- sMsg.Sprintf( "xbDbf::DeleteAll() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- }
- return iRc;
-}
-
-/************************************************************************/
-#ifdef XB_INDEX_SUPPORT
-//! @brief
-/*!
- This routine deletes all indices associated with the dbf file.
-
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbDbf::DeleteAllIndexFiles(){
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
-
- #ifdef XB_LOCKING_SUPPORT
- xbBool bLocked = xbFalse;
- #endif // XB_LOCKING_SUPPORT
-
- #ifdef XB_INF_SUPPORT
- xbString sIxName;
- #endif // XB_INF_SUPPORT
-
- try{
- #ifdef XB_LOCKING_SUPPORT
- if( iAutoLock && !bTableLocked ){
- if(( iRc = LockTable( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw( iRc );
- }
- bLocked = xbTrue;
- }
- #endif // XB_LOCKING_SUPPORT
-
- // close any open index files, delete it, remove from the ix list
- while( ixList ){
- ixList->ix->Close();
- ixList->ix->xbRemove();
- #ifdef XB_INF_SUPPORT
- // if XB_INF_SUPPORT is enabled, all open non prod indices should be in here
- if( *ixList->sFmt != "MDX" ){ // production indices not stored in .INF dataset
- if(( iRc = ixList->ix->GetFileNamePart( sIxName )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- if(( iRc = AssociateIndex( *ixList->sFmt, sIxName, 1 )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- }
- #endif
- RemoveIndex( ixList->ix );
- }
- } catch( xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbdbf::DeleteAllIndexFiles() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- #ifdef XB_LOCKING_SUPPORT
- if( bLocked )
- LockTable( XB_UNLOCK );
- #endif // XB_LOCKING_SUPPORT
- return iRc;
-}
-#endif // XB_INDEX_SUPPORT
-
-/************************************************************************/
-//! @brief Delete all records.
-/*!
- This routine deletes all the records in a table / dbf file.
-
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbDbf::DeleteAllRecords(){
- return DeleteAll( 0 );
-}
-
-/************************************************************************/
-#ifdef XB_INF_SUPPORT
-//! @brief Delete .INF File
-/*!
- The original Dbase (TM) software supported non production indices (NDX) and production indices (MDX).
- The production indices are opened automatically when the DBF file is opened but the non-production
- indices are not. This method is specific to the Xbas64 library and providex a means to link non production
- NDX index files to the DBF file so they will be opened automatically when the DBF file is opened.<br>
-
- This routine requires INF support be enabled when building the library.<br>
- This routine deletes the .INF file.<br>
-
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbDbf::DeleteInfData(){
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
-
- try{
- xbString sInfFileName;
- if(( iRc = GetInfFileName( sInfFileName )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- xbFile f( xbase );
- f.SetFileName( sInfFileName );
- if( f.FileExists()){
- if(( iRc = f.xbRemove()) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- }
- } catch( xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbdbf::DeleteInfData() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-#endif // XB_INF_SUPPORT
-
-/************************************************************************/
-//! @brief Delete the current record.
-/*!
- This routine flags the current record for deletion if it's not already flagged.
-
- \returns XB_NO_ERROR<br>
- XB_INVALID_RECORD
-*/
-
-xbInt16 xbDbf::DeleteRecord(){
- if( RecBuf && ulCurRec > 0 ){
- if( RecBuf[0] != 0x2a){
- if( iDbfStatus != XB_UPDATED ){
- iDbfStatus = XB_UPDATED;
- memcpy( RecBuf2, RecBuf, uiRecordLen ); // save off original before making any updates
- }
- RecBuf[0] = 0x2a;
- }
- return XB_NO_ERROR;
- }
- else
- return XB_INVALID_RECORD;
-}
-/************************************************************************/
-//! @brief Delete a table.
-/*!
- This routine deletes a given table, associated index files if any, the
- memo file if any and the .INF file if any.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbDbf::DeleteTable(){
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
-
- #ifdef XB_LOCKING_SUPPORT
- xbBool bTableLocked = xbFalse;
- #endif
-
- try{
-
- #ifdef XB_LOCKING_SUPPORT
- if( iAutoLock && !bTableLocked ){
- if(( iRc = LockTable( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- } else {
- bTableLocked = xbTrue;
- }
- }
- #endif // XB_LOCKING_SUPPORT
-
- #ifdef XB_INDEX_SUPPORT
- if(( iRc = DeleteAllIndexFiles()) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
-
- #ifdef XB_INF_SUPPORT
- if(( iRc = DeleteInfData()) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- #endif // XB_INF_SUPPORT
- #endif // XB_INDEX_SUPPORT
-
- #ifdef XB_MEMO_SUPPORT
- xbInt16 iMemoFldCnt = GetMemoFieldCnt();
- xbString sMemoFileName;
- if(iMemoFldCnt > 0 ){
- sMemoFileName = Memo->GetFqFileName();
- }
- #endif // XB_MEMO_SUPPORT
-
- if(( iRc = Close()) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
-
- if(( iRc = xbRemove()) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
-
- #ifdef XB_MEMO_SUPPORT
- if( iMemoFieldCnt > 0 ){
- xbFile f( xbase );
- if(( iRc = f.xbRemove( sMemoFileName )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
- }
- #endif // XB_MEMO_SUPPORT
-
- } catch( xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbdbf::DeleteTable() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- #ifdef XB_LOCKING_SUPPORT
- if( bTableLocked )
- LockTable( XB_UNLOCK );
- #endif // XB_LOCKING_SUPPORT
- return iRc;
-}
-
-/************************************************************************/
-#ifdef XB_INDEX_SUPPORT
-//! @brief Delete an index tag.
-
-/*!
- This routine deletes an index tag
- \param sIxType Either "NDX" or "MDX".<br>
- \param sName Tag name to delete.<br>
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbDbf::DeleteTag( const xbString &sIxType, const xbString &sName ){
-
- xbInt16 iErrorStop = 0;
- xbInt16 iRc = XB_NO_ERROR;
- xbIx *pIx = NULL;
-
- #ifdef XB_LOCKING_SUPPORT
- xbBool bTableLocked = xbFalse;
- #endif
-
- try{
-
- #ifdef XB_LOCKING_SUPPORT
- if( iAutoLock && !GetTableLocked() ){
- if(( iRc = LockTable( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- } else {
- bTableLocked = xbTrue;
- }
- }
- #endif // XB_LOCKING_SUPPORT
-
- if( sIxType == "" ){
- iErrorStop = 110;
- iRc = XB_INVALID_OPTION;
- throw iRc;
-
- #ifdef XB_NDX_SUPPORT
- } else if( sIxType == "NDX" ){
-
- xbIxList *ixl = ixList;
- xbBool bDone = xbFalse;
- while( ixl && !bDone ){
-
- if( ixl->ix->GetTagName( NULL ) == sName ){
- bDone = xbTrue;
-
- // remove from .INF if it's there
- #ifdef XB_INF_SUPPORT
- if(( iRc = AssociateIndex( "NDX", sName, 1 )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- #endif // XB_INF_SUPPORT
-
- if(( iRc = ixl->ix->DeleteTag( ixl->ix->GetTag( 0 ))) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
-
- if(( iRc = RemoveIndex( ixl->ix )) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
-
- if( ixl->ix == pCurIx )
- SetCurTag( "", NULL, NULL );
-
- }
- ixl = ixl->next;
- }
- #endif
-
- #ifdef XB_MDX_SUPPORT
- } else if( sIxType == "MDX" ){
- xbIxList *ixl = ixList;
- xbIxList *ixlNext;
- xbIxList *ixlPrev = NULL;
- xbBool bDone = xbFalse;
- xbIxMdx *pMdx;
- xbMdxTag *pMdxTag;
- xbInt16 iTagCnt = 0;
-
- while( ixl && !bDone ){
- ixlNext = ixl->next;
- pMdx = (xbIxMdx *) ixl->ix;
- iTagCnt = pMdx->GetTagCount();
- for( xbInt16 i = 0; i < iTagCnt && !bDone; i++ ){
- pMdxTag = (xbMdxTag *) pMdx->GetTag( i );
- if( pMdx->GetTagName( pMdxTag ) == sName ){
- bDone = xbTrue;
- iRc = pMdx->DeleteTag( pMdxTag );
- if( iRc > 0 ){
- // Successful delete of only tag in production mdx file - need to remove it from the list, update the dbf header
- cIndexFlag = 0x00;
- if(( iRc = WriteHeader( 1, 0 )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
- if(( iRc = RemoveIndex( ixl->ix )) != XB_NO_ERROR ){
- iErrorStop = 160;
- throw iRc;
- }
- if( ixlPrev == NULL ){
- // std::cout << "setting ixList to null or should be\n";
- ixList = ixlNext;
- } else {
- ixlPrev = ixlNext;
- }
- } else if( iRc < 0 ){
- iErrorStop = 170;
- throw iRc;
- }
- if( ixl->ix == pCurIx )
- SetCurTag( "", NULL, NULL );
- }
- }
- ixlPrev = ixl;
- ixl = ixlNext;
- }
-
- if( !bDone )
- return XB_INVALID_TAG;
-
- #endif
-
- } else {
- iErrorStop = 180;
- iRc = XB_INVALID_OPTION;
- throw iRc;
- }
-
- if(( iRc = UpdateTagList()) != XB_NO_ERROR ){
- iErrorStop = 190;
- throw iRc;
- }
-
-
- }
- catch (xbInt16 iRc ){
- if( pIx ) delete pIx;
- xbString sMsg;
- sMsg.Sprintf( "xbdbf::DeleteTag() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
-
- #ifdef XB_LOCKING_SUPPORT
- if( iAutoLock && GetTableLocked() ){
- LockTable( XB_UNLOCK );
- }
- #endif // XB_LOCKING_SUPPORT
- }
-
- #ifdef XB_LOCKING_SUPPORT
- if( bTableLocked ){
- LockTable( XB_UNLOCK );
- }
- #endif // XB_LOCKING_SUPPORT
-
-
- return iRc;
-}
-#endif // XB_INDEX_SUPPORT
-/************************************************************************/
-//! @brief Dump dbf file header.
-/*!
- This routine dumps dbf header information to the console.
-
- \param iOption 1 = Print header only<br>
- 2 = Field data only<br>
- 3 = Header and Field data<br>
- 4 = Header, Field and Memo header data if applicable
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbDbf::DumpHeader( xbInt16 iOption ) const {
- int i;
- int iMemoCtr = 0;
-
- if( iOption < 1 || iOption > 4 )
- return XB_INVALID_OPTION;
-
- if( iDbfStatus == XB_CLOSED )
- return XB_NOT_OPEN;
-
- std::cout << "\nDatabase file " << GetFqFileName() << std::endl << std::endl;
-
- if( iOption != 2 ){
- std::cout << "File header data:" << std::endl;
-
- xbInt16 sVer = DetermineXbaseTableVersion( cVersion );
-
- if( sVer == 3 )
- std::cout << "Dbase III file" << std::endl;
- else if ( sVer == 4 )
- std::cout << "Dbase IV file" << std::endl << std::endl;
- else if ( sVer == 5 )
- std::cout << "Dbase V file" << std::endl << std::endl;
- else if ( sVer == 7 )
- std::cout << "Dbase VII file" << std::endl << std::endl;
- else
- std::cout << "Unknown Version" << std::endl;
-
- /* display the bit stream */
- unsigned char c, tfv, displayMask = 1 << 7;
- tfv = cVersion;
- std::cout << "File descriptor bits = ";
- for( c = 1; c<= 8; c++ ){
- std::cout << (tfv & displayMask ? '1' : '0');
- tfv <<= 1;
- }
- std::cout << std::endl;
-
- std::cout << "Descriptor bits legend:" << std::endl;
- std::cout << " 0-2 = version number" << std::endl;
- std::cout << " 3 = presence of dBASE IV memo" << std::endl;
- std::cout << " 4-6 = SQL table presence" << std::endl;
- std::cout << " 7 = Presence of any memo file (dBASE III PLUS or dBASE IV)" << std::endl << std::endl;
-
- std::cout << "Last update date = "
- << (int) cUpdateMM << "/" << (int) cUpdateDD << "/" << (int) cUpdateYY % 100 << std::endl;
-
- std::cout << "Header length = " << uiHeaderLen << std::endl;
- std::cout << "Record length = " << uiRecordLen << std::endl;
- std::cout << "Records in file = " << ulNoOfRecs << std::endl << std::endl << std::endl;
-
- std::cout << "Transaction Flag = ";
- xbase->BitDump( cTransactionFlag );
- std::cout << std::endl;
-
- std::cout << "Encryption Flag = ";
- xbase->BitDump( cEncryptionFlag );
- std::cout << std::endl;
-
- std::cout << "Index Flag = ";
- xbase->BitDump( cIndexFlag );
- std::cout << std::endl;
-
- std::cout << "Lang Driver = " << (int) cIndexFlag << " - ";
- xbase->BitDump( cIndexFlag );
- std::cout << std::endl;
- #ifdef XB_INDEX_SUPPORT
- std::cout << "Open Index Files = " << GetPhysicalIxCnt() << std::endl;
- #endif // XB_INDEX_SUPPORT
- }
-
- if( iOption != 1 ){
- char c;
- std::cout << "Field Name Type Length Decimals IxFlag" << std::endl;
- std::cout << "---------- ---- ------ -------- ------" << std::endl;
- for( i = 0; i < iNoOfFields; i++ ){
-
- SchemaPtr[i].cIxFlag ? c = 'Y' : c = ' ';
-
- if( SchemaPtr[i].cType == 'C' && SchemaPtr[i].cNoOfDecs > 0 )
- printf( "%10s %1c %4d %4d %c\n", SchemaPtr[i].cFieldName,
- SchemaPtr[i].cType, SchemaPtr[i].cFieldLen, 0, c );
- else
- printf( "%10s %1c %4d %4d %c\n", SchemaPtr[i].cFieldName,
- SchemaPtr[i].cType, SchemaPtr[i].cFieldLen, SchemaPtr[i].cNoOfDecs, c );
-
- if( SchemaPtr[i].cType == 'M' )
- iMemoCtr++;
- }
- }
- std::cout << std::endl;
-
-#ifdef XB_MEMO_SUPPORT
- if( iOption > 3 && iMemoCtr > 0 )
- Memo->DumpMemoHeader();
-#endif
-
- return XB_NO_ERROR;
-}
-/************************************************************************/
-//! Dump record
-/*!
- Dump the contents of the specified record
-
-
- \param ulRecNo Record number of record to be dumped.
- \param iOutputDest 0 = stdout<br>
- 1 = Syslog<br>
- 2 = Both<br>
-
- \param iOutputFmt 0 = with field names<br>
- 1 = 1 line per rec, no field names<br>
- 2 = 1 line per rec, first line is a list of field names.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbDbf::DumpRecord( xbUInt32 ulRecNo, xbInt16 iOutputDest, xbInt16 iOutputFmt ) {
- int i, iRc = XB_NO_ERROR;
-
- xbString sTemp;
- xbString s2;
- if( ulRecNo == 0 || ulRecNo > ulNoOfRecs )
- return XB_INVALID_RECORD;
-
- if( ulCurRec != ulRecNo ){
- iRc = GetRecord( ulRecNo );
- if( iRc != XB_NO_ERROR )
- return iRc;
- }
-
- if( iOutputFmt >= 1 ){
- if( iOutputFmt == 2 ){
- sTemp = "RecNo,DEL";
- for( i = 0; i < iNoOfFields; i++ ){
- s2 = SchemaPtr[i].cFieldName;
- s2.Trim();
- sTemp += ",";
- sTemp += s2;
- }
- xbase->WriteLogMessage( sTemp.Str(), iOutputDest );
- }
-
- if( RecordDeleted() )
- s2.Sprintf( "%ld,DEL", ulRecNo );
- else
- s2.Sprintf( "%ld,", ulRecNo );
-
- for( i = 0; i < iNoOfFields; i++ ){
- GetField( i, sTemp );
- sTemp.Trim();
- s2.Sprintf( "%s,'%s'", s2.Str(), sTemp.Str());
- }
- xbase->WriteLogMessage( s2.Str(),iOutputDest );
- return XB_NO_ERROR;
- }
-
- sTemp.Sprintf( "\nRec Number: %ld", ulRecNo );
- xbase->WriteLogMessage( sTemp.Str(),iOutputDest);
-
- if( RecordDeleted())
- xbase->WriteLogMessage( "Record flagged as deleted", iOutputDest );
-
-
- #ifdef XB_MEMO_SUPPORT
- xbString sMemo;
- #endif
-
- for( i = 0; i < iNoOfFields; i++ ){
-
- #ifdef XB_MEMO_SUPPORT
- GetField( i, sTemp );
- sTemp.Trim();
-
- if(SchemaPtr[i].cType == 'M'){
- GetMemoField( i, sMemo );
- if( sMemo.Len() > 70 )
- sMemo.Resize( 70 );
- s2.Sprintf ( "%c %s = '%s'", SchemaPtr[i].cType, SchemaPtr[i].cFieldName, sMemo.Str());
- xbase->WriteLogMessage( s2.Str(), iOutputDest);
-
- /*
- xbUInt32 ulMlen;
- if( MemoFieldExists( i )){
- Memo->GetMemoFieldLen( i, ulMlen );
- s2.Sprintf( " Len = %d", ulMlen );
- }
- xbase->WriteLogMessage( s2.Str(), iOutputDest);
- */
-
- }
- else{
- s2.Sprintf ( "%c %s = '%s'", SchemaPtr[i].cType, SchemaPtr[i].cFieldName, sTemp.Str());
- xbase->WriteLogMessage( s2.Str(), iOutputDest);
- }
- #else
- GetField( i, sTemp );
- sTemp.Trim();
- s2.Sprintf( "%s = '%s'", SchemaPtr[i].cFieldName, sTemp.Str());
- xbase->WriteLogMessage( s2.Str(), iOutputDest);
- #endif
-
- }
- return XB_NO_ERROR;
-}
-
-
-/************************************************************************/
-#ifdef XB_DEBUG_SUPPORT
-
-
-#ifdef XB_LOCKING_SUPPORT
-//! @brief Dump the table lock status
-/*!
- Debugging routine. Dumps the table lock status to the console.
- \returns void
-*/
-
-void xbDbf::DumpTableLockStatus() const {
-
- std::cout << "File Lock Retry Count = [" << GetLockRetryCount() << "]" << std::endl;
- std::cout << "File Lock Flavor = [";
- switch (GetLockFlavor()){
- case 1:
- std::cout << "Dbase]" << std::endl;
- break;
- case 2:
- std::cout << "Clipper]" << std::endl;
- break;
- case 3:
- std::cout << "Fox]" << std::endl;
- break;
- case 9:
- std::cout << "Xbase64]" << std::endl;
- break;
- default:
- std::cout << "Unknown]" << std::endl;
- break;
- }
- std::cout << "File Auto Lock = [";
-
- if( GetAutoLock())
- std::cout << "ON]" << std::endl;
- else
- std::cout << "OFF]" << std::endl;
- if( GetHeaderLocked())
- std::cout << "Header Locked = [TRUE]\n";
- else
- std::cout << "Header Locked = [FALSE]\n";
-
- if( GetTableLocked())
- std::cout << "Table Locked = [TRUE]\n";
- else
- std::cout << "Table Locked = [FALSE]\n";
-
- if( GetAppendLocked() > 0 )
- std::cout << "Append Locked = [" << GetAppendLocked() << "]\n";
- else
- std::cout << "Append Locked = [FALSE]\n";
-
- #ifdef XB_MEMO_SUPPORT
- if( GetMemoLocked())
- std::cout << "Memo Locked = [TRUE]\n";
- else
- std::cout << "Memo Locked = [FALSE]\n";
- #endif // XB_MEMO_SUPPORT
-
- xbLinkListNode<xbUInt32> * llN = GetFirstRecLock();
- if( llN ){
- while( llN ){
- std::cout << "Record Locked = [" << llN->GetKey() << "]\n";
- llN = llN->GetNextNode();
- }
- } else {
- std::cout << "Record Locked = [None]\n";
- }
-}
-#endif // XB_LOCKING_SUPPORT
-#endif // XB_DEBUG_SUPPORT
-
-/************************************************************************/
-#ifdef XB_LOCKING_SUPPORT
-//! @brief Get the append locked bytes status
-/*!
- \returns The record number of the new record for the append lock operation.
-*/
-
-xbUInt32 xbDbf::GetAppendLocked() const {
- return this->ulAppendLocked;
-}
-
-#endif // XB_LOCKING_SUPPORT
-
-/************************************************************************/
-//! @brief Get auto commit setting.
-/*!
-
- This routine returns the table setting if set, otherwise returns the system
- level setting.
-
- \returns Not 0 - Auto commit on for this table.<br>
- 0 - Auto commit off for this table.
-*/
-
-xbInt16 xbDbf::GetAutoCommit() const {
- return GetAutoCommit( 1 );
-}
-
-/************************************************************************/
-//! @brief Get auto commit setting.
-/*!
-
- \param iOption 0 - Specific setting for this table<br>
- 1 - If this table should be auto updated (takes DBMS setting into account)
- \returns Not 0 - Auto commit on for this table.<br>
- 0 - Auto commit off for this table.
-*/
-
-xbInt16 xbDbf::GetAutoCommit( xbInt16 iOption ) const {
- if( iOption == 1 && iAutoCommit == -1 )
- return xbase->GetDefaultAutoCommit();
- else
- return iAutoCommit;
-}
-
-
-/************************************************************************/
-#ifdef XB_LOCKING_SUPPORT
-//! @brief Get Auto Lock setting.
-/*!
- \returns Auto lock setting.
-*/
-xbInt16 xbDbf::GetAutoLock() const{
- return iAutoLock;
-}
-#endif // XB_LOCKING_SUPPORT
-
-/************************************************************************/
-#ifdef XB_MEMO_SUPPORT
-//! @brief Get the memo file block size used when creating a memo file.
-/*!
- \returns Memo block size.
-*/
-xbUInt32 xbDbf::GetCreateMemoBlockSize() const {
- return ulCreateMemoBlockSize;
-}
-#endif // XB_MEMO_SUPPORT
-
-/************************************************************************/
-//! @brief Get a pointer to the current index object.
-/*!
- \returns Pointer to current index.
-*/
-#ifdef XB_INDEX_SUPPORT
-xbIx *xbDbf::GetCurIx() const {
- return pCurIx;
-}
-/************************************************************************/
-//! @brief Get pointer to current tag for the current index.
-/*!
- An index file can have one or more tags. An NDX index has one tag.
- An MDX file can have up to 47 tags.
-
- \returns Pointer to current tag.
-*/
-void *xbDbf::GetCurTag() const {
- return vpCurIxTag;
-}
-/************************************************************************/
-//! @brief Get the current index type.
-/*!
- \returns NDX for single tag index.<br>
- MDX for production multi tag index.
-*/
-const xbString &xbDbf::GetCurIxType() const {
- return sCurIxType;
-}
-
-/************************************************************************/
-//! @brief Get the current tag name.
-/*!
- \returns Current Tag Name.<br>
-*/
-
-const xbString &xbDbf::GetCurTagName() const {
-
- if( pCurIx )
- return pCurIx->GetTagName( vpCurIxTag );
- else
- return sNullString;
-}
-
-/************************************************************************/
-//! @brief GetFirstKey for tag.
-/*!
-
- Position to the first key for the current tag
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-
-*/
-xbInt16 xbDbf::GetFirstKey(){
- if( pCurIx )
- return pCurIx->GetFirstKey( vpCurIxTag, 1 );
- else
- return XB_INVALID_TAG;
-}
-
-/************************************************************************/
-//! @brief GetHeaderLen for dbf
-/*!
-
- Returns the length of the header portion of the dbf file
- \returns Length of header protion of dbf file
-
-*/
-xbUInt16 xbDbf::GetHeaderLen() const {
- return uiHeaderLen;
-}
-
-/************************************************************************/
-//! @brief GetLastKey for tag.
-/*!
-
- Position to the last key for the current tag
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-
-*/
-xbInt16 xbDbf::GetLastKey(){
- if( pCurIx )
- return pCurIx->GetLastKey( vpCurIxTag, 1 );
- else
- return XB_INVALID_TAG;
-}
-
-/************************************************************************/
-//! @brief GetNextKey for tag.
-/*!
-
- Position to the next key for the current tag
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-
-*/
-xbInt16 xbDbf::GetNextKey(){
- if( pCurIx )
- return pCurIx->GetNextKey( vpCurIxTag, 1 );
- else
- return XB_INVALID_TAG;
-}
-
-/************************************************************************/
-//! @brief GetPrevKey for tag.
-/*!
-
- Position to the previous key for the current tag
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-
-*/
-xbInt16 xbDbf::GetPrevKey(){
- if( pCurIx )
- return pCurIx->GetPrevKey( vpCurIxTag, 1 );
- else
- return XB_INVALID_TAG;
-}
-
-/************************************************************************/
-//! @brief Find record for key.
-/*!
-
- Find a key and position to record if key found
-
- \param sKey String key to find
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-
-*/
-xbInt16 xbDbf::Find( xbString &sKey ){
- if( pCurIx )
- return pCurIx->FindKey( vpCurIxTag, sKey.Str(), (xbInt32) sKey.Len(), 1 );
- else
- return XB_INVALID_TAG;
-}
-
-/************************************************************************/
-//! @brief Find record for key.
-/*!
-
- Find a key and position to record if key found
-
- \param dtKey Date key to find
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-
-*/
-xbInt16 xbDbf::Find( xbDate &dtKey ){
-
- if( pCurIx )
- return pCurIx->FindKey( vpCurIxTag, dtKey, 1 );
- else
- return XB_INVALID_TAG;
-
-}
-/************************************************************************/
-//! @brief Find record for key.
-/*!
-
- Find a key and position to record if key found
-
- \param dtKey Date key to find
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-
-*/
-xbInt16 xbDbf::Find( xbDouble &dKey ){
-
- if( pCurIx )
- return pCurIx->FindKey( vpCurIxTag, dKey, 1 );
- else
- return XB_INVALID_TAG;
-
-}
-
-
-#endif // XB_INDEX_SUPPORT
-
-/************************************************************************/
-//! @brief Return true if dbf file empty or positioned to the first record
-/*!
- \returns Returns true if dbf file is empty or positioned on the first record.
-*/
-xbBool xbDbf::GetBof() {
-/*
- if( GetRecordCount() == 0 || GetCurRecNo() == 1 )
- return xbTrue;
- else
- */
- return xbFalse;
-}
-/************************************************************************/
-//! @brief Return true if dbf file empty or positioned to the last record
-/*!
- \returns Returns true if dbf file is empty or positioned on the last record.
-*/
-xbBool xbDbf::GetEof() {
- xbUInt32 ulRecCnt = GetRecordCount();
-
- if( ulRecCnt == 0 || GetCurRecNo() == ulRecCnt )
- return xbTrue;
- else
- return xbFalse;
-}
-/************************************************************************/
-//! @brief Return the current record number.
-/*!
- \returns Returns the current record number.
-*/
-xbUInt32 xbDbf::GetCurRecNo() const {
- return ulCurRec;
-}
-
-/************************************************************************/
-//! @brief Return the current dbf status.
-/*!
- \returns 0 = closed<br>
- 1 = open<br>
- 2 = updates pending<br>
-*/
-xbInt16 xbDbf::GetDbfStatus() const {
- return iDbfStatus;
-}
-/************************************************************************/
-//! @brief Return the number of fields in the table.
-/*!
- \returns The number of fields in the table.
-*/
-xbInt32 xbDbf::GetFieldCnt() const {
- return iNoOfFields;
-}
-
-/************************************************************************/
-#ifdef XB_LOCKING_SUPPORT
-//! @brief Get the first first record lock.
-/*!
- Get the first record lock from a linked list of record locks.
- \returns First record lock.
-*/
-xbLinkListNode<xbUInt32> * xbDbf::GetFirstRecLock() const {
- return lloRecLocks.GetHeadNode();
-}
-#endif // XB_LOCKING_SUPPORT
-/************************************************************************/
-//! @brief Get the first record.
-/*!
- Get the first not deleted record. This routines skips over any deleted records.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbDbf::GetFirstRecord()
-{
- return GetFirstRecord( XB_ACTIVE_RECS );
-}
-
-/************************************************************************/
-//! @brief Get the first record.
-/*!
-
- \param iOption XB_ALL_RECS - Get the first record, deleted or not.<br>
- XB_ACTIVE_RECS - Get the first active record.<br>
- XB_DELETED_RECS - Get the first deleted record.<br>
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbDbf::GetFirstRecord( xbInt16 iOption )
-{
- if( ulNoOfRecs == 0 )
- return XB_EMPTY;
-
- xbInt16 iRc = GetRecord( 1L );
- while( iRc == XB_NO_ERROR &&
- ((RecordDeleted() && iOption == XB_ACTIVE_RECS) ||
- (!RecordDeleted() && iOption == XB_DELETED_RECS)))
- if( ulCurRec < ulNoOfRecs )
- iRc = GetRecord( ulCurRec + 1 );
- else
- return XB_EOF;
-
- return iRc;
-}
-
-/************************************************************************/
-#ifdef XB_LOCKING_SUPPORT
-//! @brief Return lock status of the table header
-/*! \returns DBF header lock status
-*/
-
-xbBool xbDbf::GetHeaderLocked() const {
- return this->bHeaderLocked;
-}
-#endif // XB_LOCKING_SUPPORT
-
-#ifdef XB_INDEX_SUPPORT
-//! @brief Return pointer to list of index files for the table.
-/*!
- \returns Returns an xbIxList * pointer to list of open index files.
-*/
-
-xbIxList *xbDbf::GetIxList() const{
- return ixList;
-}
-#endif // XB_INDEX_SUPPORT
-
-
-/************************************************************************/
-//! @brief Get the last record.
-/*!
- Get the last not deleted record. This routines skips over any deleted records.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbDbf::GetLastRecord()
-{
- return GetLastRecord( XB_ACTIVE_RECS );
-}
-/************************************************************************/
-//! @brief Get the last record.
-/*!
-
- \param iOption XB_ALL_RECS - Get the last record, deleted or not.<br>
- XB_ACTIVE_RECS - Get the last active record.<br>
- XB_DELETED_RECS - Get the last deleted record.<br>
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbDbf::GetLastRecord( xbInt16 iOption )
-{
- if( ulNoOfRecs == 0 )
- return XB_EMPTY;
-
- xbInt16 iRc = GetRecord( ulNoOfRecs );
- while( iRc == XB_NO_ERROR &&
- ((RecordDeleted() && iOption == XB_ACTIVE_RECS) ||
- (!RecordDeleted() && iOption == XB_DELETED_RECS)))
- if( ulCurRec > 1 )
- iRc = GetRecord( ulCurRec - 1 );
- else
- return XB_EOF;
-
- return iRc;
-}
-
-
-/************************************************************************/
-#ifdef XB_LOCKING_SUPPORT
-//! @brief Get lock flavor.
-/*!
- This routine is currently in place to provide structure for future locking
- schemes that may differ from the legacy DBase (TM) locking scheme.
- \returns Always 1.
-*/
-
-xbInt16 xbDbf::GetLockFlavor() const{
- if( iLockFlavor == -1 )
- return xbase->GetDefaultLockFlavor();
- else
- return iLockFlavor;
-}
-#endif // XB_LOCKING_SUPPORT
-
-/************************************************************************/
-#ifdef XB_MEMO_SUPPORT
-/************************************************************************/
-#ifdef XB_LOCKING_SUPPORT
-//! @brief Get the lock status of the memo file.
-/*!
- \returns Lock status of memo file.
-*/
-xbBool xbDbf::GetMemoLocked() const {
- if( MemoFieldsExist())
- return Memo->GetMemoLocked();
- else
- return xbFalse;
-}
-#endif // XB_LOCKING_SUPPORT
-
-/************************************************************************/
-//! @brief Get pointer to Memo object.
-/*!
- \returns This routine returns the pointer to the memo object.
-*/
-
-xbMemo * xbDbf::GetMemoPtr(){
- return Memo;
-}
-
-#endif // XB_MEMO_SUPPORT
-
-
-/************************************************************************/
-#ifdef XB_INF_SUPPORT
-//! @brief Return the .INF file name
-/*!
- If NDXIDX support is enabled in the library, and a non production (ndx)
- has been associated with the dbf file, the .INF file name can be retrieved
- with this routine.
-
- \param sInfFileName Output string containing .INF file name.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbDbf::GetInfFileName( xbString &sInfFileName ){
-
- sInfFileName = GetFqFileName();
- xbUInt32 lLen = sInfFileName.Len();
- if( lLen < 5 )
- return XB_FILE_NOT_FOUND;
- sInfFileName.PutAt(lLen-2, 'I');
- sInfFileName.PutAt(lLen-1, 'N');
- sInfFileName.PutAt(lLen, 'F');
- return XB_NO_ERROR;
-}
-
-/************************************************************************/
-//! @brief Return first node of linked list of .INF items.
-/*!
- \returns List of .INF entries.
-*/
-
-xbLinkListNode<xbString> * xbDbf::GetInfList() const{
- return llInfData.GetHeadNode();
-}
-#endif // XB_INF_SUPPORT
-
-
-/************************************************************************/
-//! @brief Get the next record.
-/*!
- Get the next not deleted record. This routines skips over any deleted records.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbDbf::GetNextRecord(){
- return GetNextRecord( XB_ACTIVE_RECS );
-}
-
-/************************************************************************/
-//! @brief Get the next record.
-/*!
- \param iOption XB_ALL_RECS - Get the next record, deleted or not.<br>
- XB_ACTIVE_RECS - Get the next active record.<br>
- XB_DELETED_RECS - Get the next deleted record.<br>
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbDbf::GetNextRecord( xbInt16 iOption ){
- if( ulNoOfRecs == 0 )
- return XB_EMPTY;
- else if( ulCurRec >= ulNoOfRecs )
- return XB_EOF;
- xbInt16 iRc = GetRecord( ulCurRec + 1 );
- while( iRc == XB_NO_ERROR &&
- ((RecordDeleted() && iOption == XB_ACTIVE_RECS) ||
- (!RecordDeleted() && iOption == XB_DELETED_RECS)))
- if( ulCurRec < ulNoOfRecs )
- iRc = GetRecord( ulCurRec + 1 );
- else
- return XB_EOF;
- return iRc;
-}
-/************************************************************************/
-//! @brief Get the next record.
-/*!
-
- \param iOption XB_ALL_RECS - Get the next record, deleted or not.<br>
- XB_ACTIVE_RECS - Get the next active record.<br>
- XB_DELETED_RECS - Get the next deleted record.<br>
- \param ulStartRec Get next record, starting from ulStartRec.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbDbf::GetNextRecord( xbInt16 iOption , xbUInt32 ulStartRec ){
-
- if( iOption == 0 )
- return GetNextRecord();
- else if( iOption == 1 ){
- if( ulStartRec > 0 )
- ulCurRec = ulStartRec;
- xbInt16 iRc = GetNextRecord();
- while( iRc == XB_NO_ERROR && RecordDeleted())
- iRc = GetNextRecord();
- return iRc;
- }
- else
- return XB_INVALID_OPTION;
-}
-
-
-/************************************************************************/
-#ifdef XB_INDEX_SUPPORT
-//! @brief Physical count of open index files.
-/*!
-
- Returns a physical count of open index files for the dbf file. An index file
- can contain one or more tags.
- \returns Count of open index files.
-*/
-
-xbInt32 xbDbf::GetPhysicalIxCnt() const {
-
- xbInt32 lCnt = 0;
- #ifdef XB_INDEX_SUPPORT
- xbIxList *p = ixList;
- while( p ){
- lCnt++;
- p = p->next;
- }
- #endif
- return lCnt;
-}
-#endif // XB_INDEX_SUPPORT
-
-
-/************************************************************************/
-//! @brief Get the previous record.
-/*!
- Get the previous not deleted record. This routine skips over any deleted records.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbDbf::GetPrevRecord()
-{
- return GetPrevRecord( XB_ACTIVE_RECS );
-}
-
-/************************************************************************/
-//! @brief Get the previous record.
-/*!
-
- \param iOption XB_ALL_RECS - Get the previous record, deleted or not.<br>
- XB_ACTIVE_RECS - Get the previous active record.<br>
- XB_DELETED_RECS - Get the previous deleted record.<br>
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbDbf::GetPrevRecord( xbInt16 iOption ){
- if( ulNoOfRecs == 0 )
- return XB_EMPTY;
- else if( ulCurRec <= 1L )
- return XB_BOF;
- xbInt16 iRc = GetRecord( ulCurRec - 1 );
- while( iRc == XB_NO_ERROR &&
- ((RecordDeleted() && iOption == XB_ACTIVE_RECS) ||
- (!RecordDeleted() && iOption == XB_DELETED_RECS)))
- if( ulCurRec > 1 )
- iRc = GetRecord( ulCurRec - 1 );
- else
- return XB_BOF;
-
- return iRc;
-}
-
-
-/************************************************************************/
-//! @brief Get record for specified record number.
-/*!
- Retrieve a record from disk and load it into the record buffer. If auto commit
- is enabled and there are pending updates, this routine will flush the updates
- to disk before proceeding to ulRecNo.
-
- \param ulRecNo - Record number to retrieve.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbDbf::GetRecord( xbUInt32 ulRecNo ){
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
-
- try{
- /* verify the file is open */
- if( iDbfStatus == XB_CLOSED ){
- iErrorStop = 100;
- iRc = XB_NOT_OPEN;
- throw iRc;
- }
- if( iDbfStatus == XB_UPDATED ){
- if( GetAutoCommit() == 1 ){
- if(( iRc = Commit()) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- } else {
- if(( iRc = Abort()) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- }
- }
-
-
- // std::cout << "xbdbf::GetRecord: " << ulRecNo << " " << ulNoOfRecs << "\n";
- if( ulRecNo > ulNoOfRecs || ulRecNo == 0L ){
- iErrorStop = 130;
- iRc = XB_INVALID_RECORD;
- throw iRc;
- }
-
- #ifdef XB_BLOCKREAD_SUPPORT
- if( bBlockReadEnabled )
- return pRb->GetRecord( ulRecNo );
- #endif // XB_BLOCK_READ_SUPPORT
-
-
- if(( xbFseek( (uiHeaderLen+(( (xbInt64) ulRecNo-1L ) * uiRecordLen )), SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 140;
- iRc = XB_SEEK_ERROR;
- throw iRc;
- }
-
- if( xbFread( RecBuf, uiRecordLen, 1 ) != XB_NO_ERROR ){
- iErrorStop = 150;
- iRc = XB_READ_ERROR;
- throw iRc;
- }
- ulCurRec = ulRecNo;
- }
-
- catch (xbInt16 iRc ){
- if( iRc != XB_LOCK_FAILED ){
- xbString sMsg;
- sMsg.Sprintf( "xbDbf::GetRecord() Exception Caught. Error Stop = [%d] iRc = [%d] record = [%d]", iErrorStop, iRc, ulRecNo );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- }
- return iRc;
-}
-/************************************************************************/
-//! @brief Get pointer to record buffer
-/*!
- \param iOpt 0 for RecBuf (current) or 1 for RecBuf2 (original contents)
-
- \returns Pointer to record buffer.
-*/
-char * xbDbf::GetRecordBuf( xbInt16 iOpt ) const {
- if( iOpt )
- return RecBuf2;
- else
- return RecBuf;
-}
-
-/************************************************************************/
-//! @brief Get the current number of records in the dbf data file.
-/*!
- \returns Record count or <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbUInt32 xbDbf::GetRecordCount(){
-
- xbUInt32 ulCnt;
- xbInt16 iRc = GetRecordCnt( ulCnt );
- if( iRc < 0 )
- return (xbUInt32) iRc;
- else
- return ulCnt;
-}
-
-/************************************************************************/
-//! @brief Get the current number of records in the dbf data file.
-/*!
- \param ulRecCnt Output number of records in file.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbDbf::GetRecordCnt( xbUInt32 & ulRecCnt )
-{
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
-
- #ifdef XB_LOCKING_SUPPORT
- xbBool bLocked = xbFalse;
- #endif // XB_LOCKING_SUPPORT
-
- try{
- #ifdef XB_LOCKING_SUPPORT
- if( iAutoLock && !bTableLocked ){
- if(( iRc = LockHeader( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- } else
- bLocked = xbTrue;
- }
- #endif // XB_LOCKING_SUPPORT
-
- if((iRc = ReadHeader(1,1)) != XB_NO_ERROR){
- iErrorStop = 110;
- throw iRc;
- }
- }
- catch( xbInt16 iRc ){
- if( iRc != XB_LOCK_FAILED ){
- xbString sMsg;
- sMsg.Sprintf( "xbDbf::GetRecordCnt() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- }
-
- #ifdef XB_LOCKING_SUPPORT
- if( bLocked ){
- LockHeader( XB_UNLOCK );
- }
- #endif
-
- ulRecCnt = ulNoOfRecs;
- return iRc;
-}
-/************************************************************************/
-//! @brief Get the dbf record length.
-/*!
- \returns Record length.
-*/
-xbUInt16 xbDbf::GetRecordLen() const {
- return uiRecordLen;
-}
-/************************************************************************/
-#ifdef XB_LOCKING_SUPPORT
-//! @brief Get table locked status
-/*!
- \returns Table lock status.
-*/
-xbBool xbDbf::GetTableLocked() const {
- return this->bTableLocked;
-}
-#endif // XB_LOCKING_SUPPORT
-/************************************************************************/
-#ifdef XB_INDEX_SUPPORT
-//! @brief Get tag list for dbf file.
-/*!
- This routine returns a list of tags for the file.<br>
-
- The library is structured to support one or more files of the same or differing
- index types (NDX/MDX), with each file supporting one or more index tags.<br>
-
- \returns Tag list for the file/table.
-*/
-xbLinkListNode<xbTag *> *xbDbf::GetTagList() const {
- return llTags.GetHeadNode();
-}
-#endif // XB_INDEX_SUPPORT
-/************************************************************************/
-//! @brief Get the table alias.
-/*!
- This routine returns the table alias.
- \returns Table alias
-*/
-const xbString & xbDbf::GetTblAlias() const {
- return this->sAlias;
-}
-
-/************************************************************************/
-//! @brief Get the pointer to the xbXbase structure,
-/*!
- \returns Pointer to xbXbase structure.
-*/
-xbXBase * xbDbf::GetXbasePtr() const {
- return xbase;
-}
-/************************************************************************/
-#ifdef XB_INF_SUPPORT
-//! @brief Load .INF data file,
-/*!
- Protected method. This routine loads the ndx inf file.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbDbf::LoadInfData(){
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
-
- try{
- // create file name
- xbString sInfFileName;
- if(( iRc = GetInfFileName( sInfFileName )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- // if file does not exist, return no error
- xbFile fMd( xbase );
- if( !fMd.FileExists( sInfFileName ))
- return XB_NO_ERROR;
-
- // open file file in read only mode
- if(( iRc = fMd.xbFopen( "r", sInfFileName, GetShareMode())) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- // clear the linked list
- llInfData.Clear();
-
- // for each entry in the file, add a linked list item
- xbString sRec;
- xbString sLeft3;
- xbString sFn;
-
- while( iRc == XB_NO_ERROR ){
- sRec = "";
- if(( iRc = fMd.xbFgets( 132, sRec )) == XB_NO_ERROR ){
- sLeft3 = sRec;
- sLeft3.Left( 3 );
- sLeft3.ToUpperCase();
- if( sLeft3 == "NDX"){
- sFn.ExtractElement(sRec.Str(), '=', 2 );
- sFn.ZapChar( 0x0d );
- sFn.ZapChar( 0x0a );
- llInfData.InsertAtEnd( sFn );
- }
- }
- }
- // close the file
- if(( iRc = fMd.xbFclose()) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
-
- } catch( xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbdbf::LoadInfData() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-#endif // XB_INF_SUPPORT
-
-/************************************************************************/
-#ifdef XB_LOCKING_SUPPORT
-//! @brief Lock append bytes.
-/*!
- This routine locks the append bytes and is used by the AppendRecord function.
-
- \param iLockFunction XB_LOCK<br>XB_UNLOCK
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbDbf::LockAppend( xbInt16 iLockFunction )
-{
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
- xbUInt32 ulAppendRec;
-
- try{
- if( iLockFunction == XB_LOCK ){
- iErrorStop = 100;
- if( ulAppendLocked > 0 ) /* already have an append lock */
- return XB_NO_ERROR;
-
- ulAppendRec = ulNoOfRecs + 1; /* record number needing to be locked */
- if( GetLockFlavor() == LK_DBASE ){
- iRc = xbLock( XB_LOCK, LK4026531839, 1 );
- if( iRc != XB_NO_ERROR ){
- if( iRc == XB_LOCK_FAILED )
- return iRc;
- else{
- iErrorStop = 110;
- throw iRc;
- }
- }
-
- xbInt64 llAppendRecLockByte = (xbInt64) LK4026531838 - ulAppendRec;
- iRc = xbLock( XB_LOCK, llAppendRecLockByte, 1 );
- if( iRc != XB_NO_ERROR ){
- xbLock( XB_UNLOCK, LK4026531839, 1 );
- if( iRc == XB_LOCK_FAILED ){
- return iRc;
- } else {
- iErrorStop = 120;
- throw iRc;
- }
- }
- ulAppendLocked = ulAppendRec; /* set the append lock switch */
-
-
- // } else { - other lock-table flavor options go here Clipper, Fox, etc - }
-
- } else {
- iErrorStop = 130;
- iRc = XB_INVALID_OPTION;
- throw iRc;
- }
-
- } else if( iLockFunction == XB_UNLOCK ){
- iErrorStop = 200;
-
- if( ulAppendLocked == 0 ) /* verify we have an active append lock */
- return XB_NO_ERROR;
-
- if( GetLockFlavor() == LK_DBASE ){
- xbInt64 llAppendRecLockByte =(xbInt64) LK4026531838 - ulAppendLocked;
- iRc = xbLock( XB_UNLOCK, llAppendRecLockByte, 1 );
- if( iRc != XB_NO_ERROR ){
- xbLock( XB_UNLOCK, LK4026531839, 1 );
- iErrorStop = 220;
- throw iRc;
- }
- iRc = xbLock( XB_UNLOCK, LK4026531839, 1 );
- if( iRc != XB_NO_ERROR ){
- iErrorStop = 230;
- throw iRc;
- }
-
- ulAppendLocked = 0; /* release the append lock switch */
-
- // } else { - other unlock-table flavor options go here Clipper, Fox, etc - }
-
- } else {
- iErrorStop = 290;
- iRc = XB_INVALID_OPTION;
- throw iRc;
- }
- } else {
- iErrorStop = 300;
- iRc = XB_INVALID_OPTION;
- throw iRc;
- }
- } catch( xbInt16 iRc ){
- if( iRc != XB_LOCK_FAILED ){
- xbString sMsg;
- sMsg.Sprintf( "xbdbf::LockAppendBytes() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- }
-
- return iRc;
-}
-
-/************************************************************************/
-//! @brief Lock Header
-/*!
- This routine locks the file header.
- \param iLockFunction XB_LOCK<br>XB_UNLOCK
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbDbf::LockHeader( xbInt16 iLockFunction )
-{
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
- try{
-
- if( iLockFunction == XB_LOCK ){
- iErrorStop = 100;
- if( GetHeaderLocked())
- return XB_NO_ERROR;
-
- iErrorStop = 110;
- if( GetLockFlavor() == LK_DBASE ){
-
- iRc = xbLock( XB_LOCK, LK4026531838, 1 );
-
- if( iRc != XB_NO_ERROR ){
- if( iRc == XB_LOCK_FAILED )
- return iRc;
- else{
- iErrorStop = 120;
- throw iRc;
- }
- }
-
- } else {
- iErrorStop = 130;
- iRc = XB_INVALID_OPTION;
- throw iRc;
- }
-
- SetHeaderLocked( xbTrue );
-
- } else if( iLockFunction == XB_UNLOCK ){
-
- iErrorStop = 200;
- if( !GetHeaderLocked())
- return XB_NO_ERROR;
-
- iErrorStop = 210;
- if( GetLockFlavor() == LK_DBASE ){
- iRc = xbLock( XB_UNLOCK, LK4026531838, 1 );
- if( iRc != XB_NO_ERROR ){
- iErrorStop = 220;
- throw iRc;
- }
- } else {
- iErrorStop = 230;
- iRc = XB_INVALID_OPTION;
- throw iRc;
- }
- SetHeaderLocked( xbFalse );
- } else {
- iErrorStop = 300;
- iRc = XB_INVALID_OPTION;
- throw iRc;
- }
-
- } catch (xbInt16 iRc ){
- if( iRc != XB_LOCK_FAILED ){
- xbString sMsg;
- sMsg.Sprintf( "xbdbf::LockHeader() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- }
- return iRc;
-}
-/************************************************************************/
-#ifdef XB_INDEX_SUPPORT
-//! @brief Lock Index files.
-/*!
- This routine locks all the index files.
- \param iLockFunction XB_LOCK<br>XB_UNLOCK
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbDbf::LockIndices( xbInt16 iLockFunction )
-{
- // this function doesn't take into account any Lack Flavors other than DBASE,
- // would need updated to supprot other lock flavors - Clipper, FoxPro etc
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
-
- try{
- xbIxList *ixLI = GetIxList(); // index list item
-
- while( ixLI ){
- if( iLockFunction == XB_LOCK ){
-
- #ifdef XB_NDX_SUPPORT
- if( *ixLI->sFmt == "NDX" ){
- if( !ixLI->ix->GetLocked()){
- if(( iRc = ixLI->ix->xbLock( XB_LOCK, LK4026531838, 1 )) != XB_NO_ERROR ){
- ixLI->ix->xbLock( XB_UNLOCK, LK4026531838, 1 );
- iErrorStop = 100;
- throw iRc;
- }
- ixLI->ix->SetLocked( xbTrue );
- }
- }
- #endif
-
- #ifdef XB_MDX_SUPPORT
- if( *ixLI->sFmt == "MDX" ){
- if( !ixLI->ix->GetLocked()){
- if(( iRc = ixLI->ix->xbLock( XB_LOCK, LK4026531838, 1 )) != XB_NO_ERROR ){
- ixLI->ix->xbLock( XB_UNLOCK, LK4026531838, 1 );
- iErrorStop = 100;
- throw iRc;
- }
- ixLI->ix->SetLocked( xbTrue );
- }
- }
- #endif
-
- } else if( iLockFunction == XB_UNLOCK ){
-
- #ifdef XB_NDX_SUPPORT
- if( *ixLI->sFmt == "NDX" ){
- if( ixLI->ix->GetLocked()){
- if(( iRc = ixLI->ix->xbLock( XB_UNLOCK, LK4026531838, 1 )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- ixLI->ix->SetLocked( xbFalse );
- }
- }
- #endif
-
- #ifdef XB_MDX_SUPPORT
- if( *ixLI->sFmt == "MDX" ){
- if( ixLI->ix->GetLocked()){
- if(( iRc = ixLI->ix->xbLock( XB_UNLOCK, LK4026531838, 1 )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- ixLI->ix->SetLocked( xbFalse );
- }
- }
- #endif
-
- }
- ixLI = ixLI->next;
- }
-
- } catch( xbInt16 iRc ){
- if( iRc != XB_LOCK_FAILED ){
- xbString sMsg;
- sMsg.Sprintf( "xbdbf::LockIndices() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- }
- return iRc;
-}
-#endif // XB_INDEX_SUPPORT
-/************************************************************************/
-#ifdef XB_MEMO_SUPPORT
-//! @brief Lock Memo file.
-/*!
- This routine locks the memo file for updates.
- \param iLockFunction XB_LOCK<br>XB_UNLOCK
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbDbf::LockMemo( xbInt16 iLockFunction ){
- if( MemoFieldsExist())
- return Memo->LockMemo( iLockFunction );
- else
- return XB_NO_ERROR;
-}
-#endif // XB_MEMO_SUPPORT
-
-
-
-/************************************************************************/
-//! @brief Loc Record
-/*!
- This routine locks a record for update.
- \param iLockFunction XB_LOCK<br>XB_UNLOCK
- \param ulRecNo Record number to lock
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbDbf::LockRecord( xbInt16 iLockFunction, xbUInt32 ulRecNo )
-{
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
-
- try{
-
- if( ulRecNo > ulNoOfRecs )
- return XB_INVALID_RECORD;
-
- if( iLockFunction == XB_LOCK ){
- iErrorStop = 100;
-
- if( lloRecLocks.KeyExists( ulRecNo ))
- return XB_NO_ERROR;
-
- if( GetLockFlavor() == LK_DBASE ){
-
- iRc = xbLock( XB_LOCK, LK4026531838 - ulRecNo, 1 );
- if( iRc != XB_NO_ERROR ){
- if( iRc == XB_LOCK_FAILED ){
- return iRc;
- } else {
- iErrorStop = 110;
- throw iRc;
- }
- }
- // other lock-table flavor options go here Clipper, Fox, etc
-
- } else {
- iErrorStop = 120;
- iRc = XB_INVALID_OPTION;
- throw iRc;
- }
-
- // add the record lock info to the linked list chain of record locks
- iRc = lloRecLocks.InsertKey( ulRecNo );
- if( iRc != XB_NO_ERROR ){
- xbLock( XB_UNLOCK, LK4026531838 - ulRecNo, 1 );
- iErrorStop = 130;
- throw iRc;
- }
-
- } else if( iLockFunction == XB_UNLOCK ){
-
- iErrorStop = 200;
-
- if( !lloRecLocks.KeyExists( ulRecNo ) )
- return XB_NO_ERROR;
-
- if( GetLockFlavor() == LK_DBASE ){
- iRc = xbLock( XB_UNLOCK, LK4026531838 - ulRecNo, 1 );
- if( iRc != XB_NO_ERROR ){
- iErrorStop = 210;
- throw iRc;
- }
- } else {
- iErrorStop = 220;
- iRc = XB_INVALID_OPTION;
- throw iRc;
- }
-
- // remove the record lock info to the linked list chain of record locks
- // next line is crashing
- iRc = lloRecLocks.RemoveKey( ulRecNo );
- if( iRc != XB_NO_ERROR ){
- iErrorStop = 230;
- throw iRc;
- }
-
- } else {
- iErrorStop = 300;
- iRc = XB_INVALID_OPTION;
- throw iRc;
- }
-
- } catch( xbInt16 iRc ){
- if( iRc != XB_LOCK_FAILED ){
- xbString sMsg;
- sMsg.Sprintf( "xbdbf::LockRecord() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- }
- return iRc;
-}
-
-/************************************************************************/
-//! @brief Lock table.
-/*!
- This routine locks the table for updates.
-
- \param iLockFunction XB_LOCK<br>XB_UNLOCK
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbDbf::LockTable( xbInt16 iLockFunction )
-{
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
-
- try{
- if( iLockFunction == XB_LOCK ){
- iErrorStop = 100;
- if( GetTableLocked())
- return XB_NO_ERROR; // table already locked
-
- iErrorStop = 110;
- if( GetLockFlavor() == LK_DBASE ){
-
- // lOffset = LK4026531838;
- // iLen = 2;
- iRc = xbLock( XB_LOCK, LK4026531838, 2 );
- if( iRc != XB_NO_ERROR ){
- if( iRc == XB_LOCK_FAILED )
- return iRc;
- else{
- iErrorStop = 120;
- throw iRc;
- }
- }
-
- // lOffset = LK3026531838;
- // iLen = LK1000000000;
- iRc = xbLock( XB_LOCK, LK3026531838, LK1000000000);
- if( iRc != XB_NO_ERROR ){
-
- // lOffset = LK4026531838;
- // iLen = 2;
- xbLock( XB_UNLOCK, LK4026531838, 2 );
- if( iRc == XB_LOCK_FAILED ){
- return iRc;
- } else {
- iErrorStop = 130;
- throw iRc;
- }
- }
-
- // iRc = xbLock( XB_UNLOCK, lOffset, iLen );
- iRc = xbLock( XB_UNLOCK, LK3026531838, LK1000000000);
- if( iRc != XB_NO_ERROR ){
- // lOffset = LK4026531838;
- // iLen = 2;
- xbLock( XB_UNLOCK, LK4026531838, 2 );
- iErrorStop = 140;
- throw iRc;
- }
-
- // other lock-table flavor options go here Clipper, Fox, etc
-
- } else {
- iErrorStop = 190;
- iRc = XB_INVALID_OPTION;
- throw iRc;
- }
- SetTableLocked( xbTrue );
-
- } else if( iLockFunction == XB_UNLOCK ){
-
- iErrorStop = 200;
- if( !GetTableLocked())
- return XB_NO_ERROR; // table already unlocked
-
- iErrorStop = 210;
- if( GetLockFlavor() == LK_DBASE ){
-
- // lOffset = LK4026531838;
- // iLen = 2;
- iRc = xbLock( XB_UNLOCK, LK4026531838, 2 );
- if( iRc != XB_NO_ERROR ){
- iErrorStop = 220;
- throw iRc;
- }
- } else {
- iErrorStop = 290;
- iRc = XB_INVALID_OPTION;
- throw iRc;
- }
- SetTableLocked( xbFalse );
-
- } else {
- iErrorStop = 300;
- iRc = XB_INVALID_OPTION;
- throw iRc;
- }
-
- } catch (xbInt16 iRc ){
- if( iRc != XB_LOCK_FAILED ){
- xbString sMsg;
- sMsg.Sprintf( "xbdbf::LockFile() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- }
- return iRc;
-
-}
-#endif // XB_LOCKING_SUPPORT
-
-
-/************************************************************************/
-//! @brief Check for existence of any memo fields.
-/*!
- \returns xbTrue - Memo fields exist.<br>xbFalse - Memo fields don't exist.
-*/
-xbBool xbDbf::MemoFieldsExist() const {
-
-
-#ifdef XB_MEMO_SUPPORT
- if( iMemoFieldCnt > 0 )
- return xbTrue;
-#endif
- return xbFalse;
-}
-
-/************************************************************************/
-//! @brief Open a table/dbf file.
-/*!
- This routine sets the alias name to the same as the table name.
-
- \param sTableName Table name to open, Include the .dbf or .DBF extension.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbDbf::Open( const xbString & sTableName ) {
- return Open( sTableName, sTableName );
-}
-
-/************************************************************************/
-//! @brief Open a table/dbf file.
-/*!
- \param sTableName Table name to open, Include the .dbf or .DBF extension.
- \param sAlias Alias name to assign to this entry.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbDbf::Open( const xbString & sTableName, const xbString & sAlias ){
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
-
- try{
- if(( iRc = Open( sTableName, sAlias, XB_READ_WRITE, XB_MULTI_USER )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
-
- // do any .INF data things on the file, like open indices
- #ifdef XB_INF_SUPPORT
- if(( iRc = LoadInfData()) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- xbUInt32 llNodeCnt = llInfData.GetNodeCnt();
- if( llNodeCnt > 0 ){
- xbString s2;
- xbLinkListNode<xbString> * llN = llInfData.GetHeadNode();
- for( xbUInt32 i = 0; i < llNodeCnt; i++ ){
- s2 = llN->GetKey();
- #ifdef XB_NDX_SUPPORT
- if(( iRc = OpenIndex( "NDX", s2 )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc ;
- }
- #endif // XB_NDX_SUPPORT
- llN = llN->GetNextNode();
- }
- }
- #endif // XB_INF_SUPPORT
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbdbf::Open() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/************************************************************************/
-#ifdef XB_INDEX_SUPPORT
-//! @brief Open an index.
-/*!
- Open an index file for the dbf file.
-
- \param sIxType - "NDX" or "MDX"
- \param sFileName - File name of index,
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbDbf::OpenIndex( const xbString &sIxType, const xbString &sFileName ){
-
- // this routine is used to open indices and set up linkages
-
- xbInt16 iErrorStop = 0;
- xbInt16 iRc = XB_NO_ERROR;
- xbIx *pIx = NULL;
-
- try{
- xbString sType = sIxType;
- sType.ToUpperCase();
-
- if( sType == "" ){
- iErrorStop = 100;
- iRc = XB_INVALID_OPTION;
- throw iRc;
-
- #ifdef XB_NDX_SUPPORT
- } else if( sType == "NDX" ){
- pIx = new xbIxNdx( this );
- if(( iRc = pIx->Open( sFileName )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- #endif
-
- #ifdef XB_MDX_SUPPORT
- } else if( sType == "MDX" ){
- pIx = new xbIxMdx( this );
- if(( iRc = pIx->Open( sFileName )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
-
- #endif
-
- } else {
- iErrorStop = 130;
- iRc = XB_INVALID_OPTION;
- throw iRc;
- }
-
- if(( iRc = AddIndex( pIx, sIxType )) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
- if(( iRc = UpdateTagList()) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
- pCurIx = pIx;
- sCurIxType = sIxType;
- vpCurIxTag = pIx->GetTag( 0 );
- }
- catch (xbInt16 iRc ){
- if( pIx ) delete pIx;
- xbString sMsg;
- sMsg.Sprintf( "xbdbf::OpenIndex() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-#endif // XB_INDEX_SUPPORT
-
-
-
-/************************************************************************/
-//! @brief Pack dbf file.
-/*!
- This routine eliminates all deleted records from the file.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbDbf::Pack()
-{
- xbUInt32 ulDeletedRecCnt;
- return Pack( ulDeletedRecCnt );
-}
-
-
-/************************************************************************/
-//! @brief Pack dbf file.
-/*!
- This routine eliminates all deleted records from the file and clears
- out any unused blocks in the memo file if one exists.
- \param ulDeletedRecCnt - Output - number of recrods removed from the file.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbDbf::Pack( xbUInt32 &ulDeletedRecCnt )
-{
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
- xbUInt32 ulLastMovedRec = 0;
- xbUInt32 ulStartPos = 0;
- xbUInt32 ulLastPackedRec = 0;
- xbUInt32 ulMoveRec = 0;
- xbUInt32 ulRecCnt = 0;
- ulDeletedRecCnt = 0;
-
- #ifdef XB_LOCKING_SUPPORT
- xbBool bLocked = xbFalse;
- #endif // XB_LOCKING_SUPPORT
-
- try{
- if( !FileIsOpen() ){
- iErrorStop = 100;
- iRc = XB_DBF_FILE_NOT_OPEN;
- throw iRc;
- }
-
- #ifdef XB_LOCKING_SUPPORT
- if( iAutoLock && !bTableLocked ){
- if(( iRc = LockTable( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- } else {
- bLocked = xbTrue;
- }
- }
- #endif
-
- if(( iRc = GetRecordCnt( ulRecCnt )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
-
- xbBool bDone = xbFalse;
- for( xbUInt32 ulI = 1; ulI <= ulRecCnt && !bDone; ulI++ ){
-
- if(( iRc = GetRecord( ulI )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- if( RecordDeleted()){
- ulDeletedRecCnt++;
- if( ulI > ulLastMovedRec )
- ulStartPos = ulI;
- else
- ulStartPos = ulLastMovedRec;
-
- iRc = GetNextRecord( 1, ulStartPos );
-
- if( iRc == XB_NO_ERROR ){
- ulMoveRec = ulCurRec;
- }
- else if( iRc == XB_EOF ){
- ulMoveRec = 0;
- bDone = xbTrue;
- }
- else{
- iErrorStop = 140;
- throw iRc;
- }
- if( ulMoveRec > 0 ){
- if(( iRc = DeleteRecord()) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
- if(( iRc = PutRecord( ulMoveRec )) != XB_NO_ERROR ){
- iErrorStop = 160;
- throw iRc;
- }
- if(( iRc = UndeleteRecord()) != XB_NO_ERROR ){
- iErrorStop = 170;
- throw iRc;
- }
- if(( iRc = PutRecord( ulI )) != XB_NO_ERROR ){
- iErrorStop = 180;
- throw iRc;
- }
- ulLastPackedRec = ulI;
- }
-
- } else {
- ulLastPackedRec = ulI;
- }
- }
-
- if( ulLastPackedRec < ulRecCnt ){
- // update header record count
-
- xbDate d;
- cUpdateYY = (char) d.YearOf() - 1900;
- cUpdateMM = (char) d.MonthOf();
- cUpdateDD = (char) d.DayOf( XB_FMT_MONTH );
- ulNoOfRecs = ulLastPackedRec;
-
- // rewrite the header record
- if(( iRc = WriteHeader( 1, 1 )) != XB_NO_ERROR ){
- iErrorStop = 190;
- throw iRc;
- }
-
- // truncate the file to the new size
- if(( iRc = xbTruncate( uiHeaderLen + uiRecordLen * ulLastPackedRec )) != XB_NO_ERROR ){
- iErrorStop = 200;
- throw iRc;
- }
- }
-
- if( ulNoOfRecs > 0 ){
- if(( iRc = GetRecord( 1 )) != XB_NO_ERROR ){
- iErrorStop = 210;
- throw iRc;
- }
- } else {
- BlankRecord();
- ulCurRec = 0;
- }
-
- #ifdef XB_MEMO_SUPPORT
- if( iMemoFieldCnt > 0 ){
- if(( iRc = Memo->PackMemo( 0 )) != XB_NO_ERROR ){
- iErrorStop = 220;
- throw iRc;
- }
- }
- #endif // XB_MEMO_SUPPORT
-
- }
- catch (xbInt16 iRc ){
- if( iRc != XB_LOCK_FAILED ){
- xbString sMsg;
- sMsg.Sprintf( "xbdbf::Pack() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- }
- #ifdef XB_LOCKING_SUPPORT
- if( bLocked ){
- LockTable( XB_UNLOCK );
- }
- #endif
- return iRc;
-}
-
-/************************************************************************/
-//! @brief Write the current record to disk.
-/*!
- This routine is used to write any updates to the current record buffer to disk.
-
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbDbf::PutRecord() {
- return PutRecord(ulCurRec);
-}
-
-/************************************************************************/
-//! @brief Write record to disk.
-/*!
- This routine is used to write a copy of the current record buffer to disk
- for a given record number.
-
- \param ulRecNo Record number to update.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbDbf::PutRecord(xbUInt32 ulRecNo)
-{
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- try{
-
- if( ulRecNo < 1 ){
- iErrorStop = 100;
- throw XB_INVALID_RECORD;
- }
-
- xbUInt32 ulRecCnt;
- if(( iRc = GetRecordCnt( ulRecCnt )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
-
- if( ulRecNo > ulRecCnt ){
- iErrorStop = 120;
- throw XB_INVALID_RECORD;
- }
-
- if( iDbfStatus == XB_CLOSED ){
- iErrorStop = 130;
- iRc = XB_NOT_OPEN;
- throw iRc;
- }
- /* lock the database */
- #ifdef XB_LOCKING_SUPPORT
- if( iAutoLock && !bTableLocked ){
- if(( iRc = LockHeader( XB_LOCK )) != XB_NO_ERROR ){
- throw iRc;
- }
- }
- #endif // XB_LOCKING_SUPPORT
-
- if(( iRc = ReadHeader( 1, 1 )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
-
- // verify valid record number request
- if( ulRecNo > ulNoOfRecs || ulRecNo == 0L ){
- iErrorStop = 160;
- iRc = XB_INVALID_RECORD;
- throw iRc;
- }
-
- #ifdef XB_LOCKING_SUPPORT
- if( iAutoLock && !bTableLocked ){
- if(( iRc = LockRecord( XB_LOCK, ulRecNo )) != XB_NO_ERROR ){
- iErrorStop = 170;
- throw iRc;
- }
-
- #ifdef XB_INDEX_SUPPORT
- if(( iRc = LockIndices( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 180;
- throw iRc;
- }
- #endif // XB_INDEX_SUPPORT
- }
- #endif // XB_LOCKING_SUPPORT
-
- // build keys, check for duplicate keys, add keys
- #ifdef XB_INDEX_SUPPORT
- xbIxList *ixList = GetIxList();
-
- while( ixList ){
- if(( iRc = ixList->ix->CreateKeys( 2 )) != XB_NO_ERROR ){
- iErrorStop = 190;
- throw iRc;
- }
- iRc = ixList->ix->CheckForDupKeys();
- if( iRc != 0 ){
- if( iRc < 0 ){
- iErrorStop = 200;
- throw iRc;
- }
- throw XB_KEY_NOT_UNIQUE;
- }
- ixList = ixList->next;
- }
-
- ixList = GetIxList();
- while( ixList ){
-
- if(( iRc = ixList->ix->AddKeys( ulCurRec )) != XB_NO_ERROR ){
- iErrorStop = 210;
- throw iRc;
- }
- ixList = ixList->next;
- }
-
- ixList = GetIxList();
- while( ixList ){
- if(( iRc = ixList->ix->DeleteKeys()) != XB_NO_ERROR ){
- iErrorStop = 220;
- throw iRc;
- }
- ixList = ixList->next;
- }
- #endif // XB_INDEX_SUPPORT
-
- // update latest header date if changed
- xbDate d;
- if( (cUpdateYY != (char)(d.YearOf() - 1900)) || (cUpdateMM != (char) d.MonthOf()) || (cUpdateDD != (char)d.DayOf( XB_FMT_MONTH))){
- cUpdateYY = (char) d.YearOf() - 1900;
- cUpdateMM = (char) d.MonthOf();
- cUpdateDD = (char) d.DayOf( XB_FMT_MONTH );
- // rewrite the header record - first 8 bytes
- if(( iRc = WriteHeader( 1, 1 )) != XB_NO_ERROR ){
- iErrorStop = 70;
- throw iRc;
- }
- }
-
- // update record
- iRc = xbFseek( (uiHeaderLen+(( (xbInt64) ulRecNo-1L ) * uiRecordLen )),0 );
- if( iRc != XB_NO_ERROR ){
- iErrorStop = 240;
- throw iRc;
- }
-
- if( xbFwrite( RecBuf, uiRecordLen, 1 ) != XB_NO_ERROR ){
- iErrorStop = 250;
- iRc = XB_WRITE_ERROR;
- throw iRc;
- }
-
- #ifdef XB_MEMO_SUPPORT
- if( MemoFieldsExist() ){
- if(( iRc = Memo->Commit()) != XB_NO_ERROR ){
- iErrorStop = 260;
- throw iRc;
- }
- }
- #endif
-
- ulCurRec = ulRecNo;
- iDbfStatus = XB_OPEN;
- }
-
- catch (xbInt16 iRc ){
- if( iRc != XB_LOCK_FAILED && iRc != XB_KEY_NOT_UNIQUE ){
- xbString sMsg;
- sMsg.Sprintf( "xbdbf::PutRecord() Exception Caught. Error Stop = [%d] iRc = [%d] record = [%d]", iErrorStop, iRc, ulRecNo );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- }
-
- #ifdef XB_LOCKING_SUPPORT
- if( iAutoLock ){
- LockHeader( XB_UNLOCK );
- LockAppend( XB_UNLOCK );
- LockRecord( XB_UNLOCK, ulRecNo );
- #ifdef XB_INDEX_SUPPORT
- LockIndices( XB_UNLOCK );
- #endif // XB_INDEX_SUPPORT
- }
- #endif // XB_LOCKING_SUPPORT
-
- return iRc;
-}
-
-/************************************************************************/
-//! @brief Read dbf file header information.
-/*!
- This method assumes the header has been locked appropriately
- in a multi user environment
-
-
- \param iPositionOption 0 - Don't fseek to beginning of file before read.<br>
- 1 - Start from beginning of file.
-
- \param iReadOption 0 - Read entire 32 byte header<br>
- 1 - Read first eight bytes which includes the last update date and number of records.
-
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbDbf::ReadHeader( xbInt16 iPositionOption, xbInt16 iReadOption ){
-
- char buf[32];
- size_t iReadSize;
-
- if(iPositionOption)
- xbRewind();
- if( iReadOption == 1 )
- iReadSize = 8;
- else
- iReadSize = 32;
-
- if(xbFread(buf, iReadSize, 1) != XB_NO_ERROR)
- return XB_READ_ERROR;
- memcpy(&cVersion, buf, 4);
- ulNoOfRecs = eGetUInt32(&buf[4]);
- if( iReadOption == 1 )
- return XB_NO_ERROR;
-
- uiHeaderLen = eGetUInt16(&buf[8]);
- uiRecordLen = eGetUInt16(&buf[10]);
- cTransactionFlag = buf[14];
- cEncryptionFlag = buf[15];
- cIndexFlag = buf[28];
- cLangDriver = buf[29];
- return XB_NO_ERROR;
-}
-
-/************************************************************************/
-//! @brief Return record deletion status.
-/*!
- This routine returns the record deletion status.
- \param iOpt 0 = Current record buffer, 1 = Original record buffer
- \returns xbTrue - Record deleted.<br>xbFalse - Record not deleted.
-*/
-xbInt16 xbDbf::RecordDeleted( xbInt16 iOpt ) const {
- if( !iOpt && RecBuf && RecBuf[0] == 0x2a )
- return xbTrue;
- else if( iOpt && RecBuf2 && RecBuf2[0] == 0x2a )
- return xbTrue;
- else
- return xbFalse;
-}
-
-/************************************************************************/
-#ifdef XB_INDEX_SUPPORT
-//! @brief Remove an index from the internal list of indices for this table
-/*
- The index list is used during any table update process to update any open
- index file. Index files can contain one or more tags.
-
- \param ixIn Pointer to index object for a given index file.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbDbf::RemoveIndex( xbIx * ixIn ){
-
- xbIxList *p = ixList;
- // if index is the first entry in the list
- if( ixList->ix == ixIn ){
- ixList = ixList->next;
- delete p->sFmt;
- delete p->ix;
- free( p );
- return XB_NO_ERROR;
- }
-
- // spin down to the correct ix
- xbIxList *p2 = NULL;
- while( p && p->ix != ixIn ){
- p2 = p;
- p = p->next;
- }
- if( p ){
- p2->next = p->next;
- delete p->sFmt;
- delete p->ix;
- free( p );
- }
- return XB_NO_ERROR;
-}
-#endif // XB_INDEX_SUPPORT
-
-/************************************************************************/
-// @brief Reset number of records.
-/*
- Protected method. Resets number of records to 0.
- \returns void
-*/
-void xbDbf::ResetNoOfRecords() {
- ulNoOfRecs = 0UL;
-}
-
-/************************************************************************/
-#ifdef XB_INF_SUPPORT
-// @brief Update .INF data file.
-/*
- Protected method.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbDbf::SaveInfData(){
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
- xbFile fMd( xbase );
-
- try{
-
- xbUInt32 llNodeCnt = llInfData.GetNodeCnt();
-
- xbString sInfFileName;
- if(( iRc = GetInfFileName( sInfFileName )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
-
- // open the file
- if(( iRc = fMd.xbFopen( "w", sInfFileName, GetShareMode())) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
-
- xbString s1;
- xbString s2;
- s2.Sprintf( "[dbase]%c%c", 0x0d, 0x0a );
- if(( iRc = fMd.xbFputs( s2 )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
-
- // for each entry in the linked list, write a line
- xbLinkListNode<xbString> * llN = llInfData.GetHeadNode();
- for( xbUInt32 i = 0; i < llNodeCnt; i++ ){
- s2 = llN->GetKey();
- if( i > 0 )
- s1.Sprintf( "NDX%d=%s%c%c", i, s2.Str(), 0x0d, 0x0a );
- else
- s1.Sprintf( "NDX=%s%c%c", s2.Str(), 0x0d, 0x0a );
-
- if(( iRc = fMd.xbFputs( s1 )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- llN = llN->GetNextNode();
- }
-
- // close the file
- if(( iRc = fMd.xbFclose()) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
-
- } catch( xbInt16 iRc ){
- if( fMd.FileIsOpen())
- fMd.xbFclose();
- xbString sMsg;
- sMsg.Sprintf( "xbdbf::SaveInfData() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-#endif // XB_INF_SUPPORT
-/************************************************************************/
-//! @brief Set auto commit.
-/*!
- This routine sets the auto commit setting for this table.
- \returns XB_NO_ERROR;
-*/
-xbInt16 xbDbf::SetAutoCommit( xbBool iAutoCommit ) {
- this->iAutoCommit = iAutoCommit;
- return XB_NO_ERROR;
-}
-
-
-/************************************************************************/
-//! @brief Set auto lock.
-/*!
- This routine sets the auto lock setting for this table.
- There is an overall system level auto lock default setting and each table
- can have it's own autolock setting. This method controls the table level
- auto lock setting.
-
- \param iAutoLock 1 - Use auto lock for this table.<br>
- 0 - Don't use auto lock for this table.<br>
- -1 - (minus one) Use system default.<br>
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-#ifdef XB_LOCKING_SUPPORT
-void xbDbf::SetAutoLock( xbInt16 iAutoLock ){
- if( iAutoLock == -1 )
- this->iAutoLock = xbase->GetDefaultAutoLock();
- else
- this->iAutoLock = iAutoLock;
-}
-#endif
-
-
-/************************************************************************/
-#ifdef XB_INDEX_SUPPORT
-//! @brief Set the current tag for the dbf file.
-/*!
- \param sTagName - Tag Name
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbDbf::SetCurTag( const xbString &sTagName ){
-
- if( sTagName == "" ){
- SetCurTag( "", 0, 0 );
- return XB_NO_ERROR;
-
- } else {
- xbLinkListNode<xbTag *> *llN = GetTagList();
- xbTag *pTag;
- while( llN ){
- pTag = llN->GetKey();
- if( pTag->GetTagName() == sTagName ){
- SetCurTag( pTag->GetType(), pTag->GetIx(), pTag->GetVpTag());
- return XB_NO_ERROR;
- }
- llN = llN->GetNextNode();
- }
- }
-
- return XB_INVALID_TAG;
-}
-
-/************************************************************************/
-//! @brief Set the current tag for the dbf file.
-/*!
-
- \param sIxType - One of "NDX" or MDX",
- \param pIx - Pointer to index object.
- \param vpTag - Pointer to tag object.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-void xbDbf::SetCurTag( const xbString &sIxType, xbIx *pIx, void *vpTag ){
- pCurIx = pIx;
- vpCurIxTag = vpTag;
- sCurIxType.Set( sIxType );
-}
-#endif // XB_INDEX_SUPPORT
-
-/************************************************************************/
-//! @brief Set the header locked status.
-/*!
- \param bHeaderLocked xbTrue - Locked<br>xbFalse - Not locked.
- \returns void
-*/
-#ifdef XB_LOCKING_SUPPORT
-void xbDbf::SetHeaderLocked( xbBool bHeaderLocked ){
- this->bHeaderLocked = bHeaderLocked;
-}
-#endif
-
-/************************************************************************/
-//! @brief Set lock flavor.
-/*!
- This routine is for future expansion.
- \param iLockFlavor 1 - Use Dbase (tm) style locking.
- \returns void
-*/
-#ifdef XB_LOCKING_SUPPORT
-void xbDbf::SetLockFlavor( xbInt16 iLockFlavor ){
- this->iLockFlavor = iLockFlavor;
-}
-#endif
-
-/************************************************************************/
-//! @brief Set table locked status.
-/*!
- \param bTableLocked - xbTrue Table locked.<br>xbFalse Table unlocked.
- \returns void
-*/
-#ifdef XB_LOCKING_SUPPORT
-void xbDbf::SetTableLocked( xbBool bTableLocked ){
- this->bTableLocked = bTableLocked;
-}
-#endif
-/************************************************************************/
-//! @brief Undelete all records.
-/*!
- This routine will remove the deletion flag on any deleted records in the table.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbDbf::UndeleteAllRecords(){
- return DeleteAll( 1 );
-}
-
-/************************************************************************/
-//! @brief Undelete one record.
-/*!
- This routine will undelete the current record, if it is deleted.
- \returns XB_NO_ERROR<br>XB_INVALID_RECORD
-*/
-xbInt16 xbDbf::UndeleteRecord()
-{
- if( RecBuf && ulCurRec > 0 ){
- if( RecBuf[0] != 0x20 ){
- if( iDbfStatus != XB_UPDATED ){
- iDbfStatus = XB_UPDATED;
- memcpy( RecBuf2, RecBuf, uiRecordLen ); // save off original before making updates
- }
- RecBuf[0] = 0x20;
- }
- return XB_NO_ERROR;
- }
- else
- return XB_INVALID_RECORD;
-}
-
-/************************************************************************/
-#ifdef XB_MEMO_SUPPORT
-//! @brief Update memo field
-/*!
- This routine updates a memo field.
- \param iFieldNo - Memo field number to update.
- \param sMemoData - Memo data for update.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbDbf::UpdateMemoField( xbInt16 iFieldNo, const xbString &sMemoData ){
- return Memo->UpdateMemoField( iFieldNo, sMemoData );
-}
-/************************************************************************/
-//! @brief Update memo field
-/*!
- This routine updates a memo field.
- \param sFieldName - Memo field name to update.
- \param sMemoData - Memo data for update.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbDbf::UpdateMemoField( const xbString & sFieldName, const xbString & sMemoData ){
- return Memo->UpdateMemoField( GetFieldNo( sFieldName ), sMemoData );
-}
-#endif
-
-
-/************************************************************************/
-#ifdef XB_INDEX_SUPPORT
-//! @brief Update SchemaIxFlag
-/*!
- This routine can be called from the DeleteTag routine if a tag has been deleted and the flag needs reset
- \param iFldNo - Which field the index flag needs changed on
- \param cVal - Value to change it to
-*/
-
-void xbDbf::UpdateSchemaIxFlag( xbInt16 iFldNo, unsigned char cVal ){
- if( cVal != 0x00 || cVal != 0x01 )
- SchemaPtr[iFldNo].cIxFlag = cVal;
-}
-
-/************************************************************************/
-
-//! @brief Update tag list.
-/*!
- This routine updates the internal tag list of open index tags.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbDbf::UpdateTagList(){
-
- xbInt16 iErrorStop = 0;
- xbInt16 iRc = XB_NO_ERROR;
- xbInt32 lTagCnt;
-
- try{
- ClearTagList();
-
- // For each active index
- xbIxList *p = GetIxList();
- xbIx *ixp;
- while( p ){
- ixp = p->ix;
- // for each tag within the file
- lTagCnt = ixp->GetTagCount();
- for( xbInt32 l = 0; l < lTagCnt; l++ ){
- xbTag *pTag = new xbTag( ixp, ixp->GetTag( l ), *p->sFmt, ixp->GetTagName( ixp->GetTag( l )),
- ixp->GetKeyExpression( ixp->GetTag( l )), ixp->GetKeyFilter( ixp->GetTag( l )),
- ixp->GetUnique( ixp->GetTag( l )), ixp->GetSortOrder( ixp->GetTag( l )));
-
- // append it to the llTags list
- llTags.InsertAtEnd( pTag );
- }
- p = p->next;
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbdbf::UpdateTagList() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-#endif // XB_INDEX_SUPPORT
-
-/************************************************************************/
-// @brief Write Header
-/*
- Protected method.
-
- \param iPositionOption 0 - Don't fseek to beginning of file before read.<br>
- 1 - Go to beginning of file before read.
- \param iWriteOption 0 - Write entire 32 byte header.<br>
- 1 - Write first eight bytes needed for table updates - last update date and number of records.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbDbf::WriteHeader( xbInt16 iPositionOption, xbInt16 iWriteOption )
-{
- char buf[32];
- xbInt32 lWriteLen;
-
- if(iPositionOption)
- xbRewind();
-
- memset(buf, 0, 32);
- if( iWriteOption == 1 )
- lWriteLen = 8;
- else{
- lWriteLen = 32;
- ePutUInt16( &buf[8], uiHeaderLen );
- ePutUInt16( &buf[10], uiRecordLen );
- buf[14] = cTransactionFlag;
- buf[15] = cEncryptionFlag;
- buf[28] = cIndexFlag;
- buf[29] = cLangDriver;
- }
- memcpy(&buf[0], &cVersion, 4);
- ePutUInt32( &buf[4], ulNoOfRecs);
- if(xbFwrite(buf, (size_t) lWriteLen, 1) != XB_NO_ERROR)
- return XB_WRITE_ERROR;
-
- return XB_NO_ERROR;
-}
-/************************************************************************/
-//! @brief Zap (remove) everything from the file,
-/*!
- This routine eliminates everything from the dbf file and dbt memo file.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbDbf::Zap(){
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
-
- #ifdef XB_LOCKING_SUPPORT
- xbBool bLocked = xbFalse;
- #endif // XB_LOCKING_SUPPORT
-
- try{
- if( iDbfStatus != XB_OPEN ){
- iErrorStop = 100;
- iRc = XB_DBF_FILE_NOT_OPEN;
- throw iRc;
- }
- #ifdef XB_LOCKING_SUPPORT
- if( iAutoLock ){
- if(( iRc = LockTable( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- }
- #endif
-
- xbDate d;
- cUpdateYY = (char) d.YearOf() - 1900;
- cUpdateMM = (char) d.MonthOf();
- cUpdateDD = (char) d.DayOf( XB_FMT_MONTH );
- ulNoOfRecs = 0;
-
- // rewrite the header record
- if(( iRc = WriteHeader( 1, 1 )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
-
- // truncate the file to the new size
- if(( iRc = xbTruncate( uiHeaderLen )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- BlankRecord();
- ulCurRec = 0;
-
- #ifdef XB_MEMO_SUPPORT
- if( iMemoFieldCnt ){
- if(( iRc = Memo->Zap()) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
- }
- #endif
- #ifdef XB_INDEX_SUPPORT
- xbLinkListNode<xbTag *> *llN = GetTagList();
- xbTag *pTag;
- xbIx *pIx;
- void *vpTag;
- while( llN ){
- pTag = llN->GetKey();
- pIx = pTag->GetIx();
- vpTag = pTag->GetVpTag();
- if(( iRc = pIx->Reindex( &vpTag )) != XB_NO_ERROR ){
- iErrorStop = 60;
- throw iRc;
- }
- llN = llN->GetNextNode();
- }
-
- #endif // XB_INDEX_SUPPORT
- }
- catch (xbInt16 iRc ){
- if( iRc != XB_LOCK_FAILED ){
- xbString sMsg;
- sMsg.Sprintf( "xbdbf::Zap() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- }
- #ifdef XB_LOCKING_SUPPORT
- if( bLocked ){
- LockTable( XB_UNLOCK );
- }
- #endif // XB_LOCKING_SUPPORT
- return iRc;
-}
-/************************************************************************/
-#ifdef XB_BLOCKREAD_SUPPORT
-// block read processing is designed to provide a way to rapidly retrieve
-// all the records from a .DBF file in sequential order.
-
-// It is not designed for doing any read/write processing or data retrieval based on a tag sort.
-// It is designed for doing a fast sequentil block read out of a table
-
-
-xbInt16 xbDbf::DisableBlockReadProcessing(){
-
- if( bBlockReadEnabled ){
- bBlockReadEnabled = xbFalse;
- delete pRb;
- pRb = NULL;
- }
- return XB_NO_ERROR;
-}
-
-xbBool xbDbf::GetBlockReadStatus() const {
- return bBlockReadEnabled;
-}
-
-xbInt16 xbDbf::EnableBlockReadProcessing(){
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
-
- try{
-
- if( !bBlockReadEnabled ){
- if( iDbfStatus == XB_UPDATED ){
- if( GetAutoCommit() == 1 ){
- if(( iRc = Commit()) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- } else {
- if(( iRc = Abort()) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- }
- }
- pRb = new xbBlockRead( this );
- if( !pRb ){
- iErrorStop = 120;
- iRc = XB_NO_MEMORY;
- throw iRc;
- }
- if(( iRc = pRb->Init()) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
-
- bBlockReadEnabled = xbTrue;
- }
-
- } catch( xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbdbf::EnableBlockReadProcessing() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-#endif // XB_BLOCKREAD_SUPPORT
-/************************************************************************/
-} /* namespace */ \ No newline at end of file
diff --git a/src/core/xbdbf3.cpp b/src/core/xbdbf3.cpp
deleted file mode 100755
index d57be3c..0000000
--- a/src/core/xbdbf3.cpp
+++ /dev/null
@@ -1,767 +0,0 @@
-/* xbdbf3.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-#include "xbase.h"
-
-
-#ifdef XB_DBF3_SUPPORT
-
-namespace xb{
-
-
-/************************************************************************/
-//! @brief Constructor.
-
-xbDbf3::xbDbf3(xbXBase * x) : xbDbf( x ) {
- #ifdef XB_MEMO_SUPPORT
- ulCreateMemoBlockSize = 512;
- #endif
- iFileVersion = 3;
-};
-
-/************************************************************************/
-//! @brief Destructor.
-
-xbDbf3::~xbDbf3() {};
-
-/************************************************************************/
-//! @brief Create Version 3 table.
-/*!
- This routine creates a Dbase III Plus (tm) DBF file.
-
- \param sTableName DBF table name.
- \param sAlias Table alias
- \param pSchema Pointer to schema structure with field definitions.
- \param iOverlay xbTrue - Overlay.<br> xbFalse - Don't overlay.
- \param iShareMode XB_SINGLE_USER<br>XB_MULTI_USER
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-
-*/
-xbInt16 xbDbf3::CreateTable( const xbString & sTableName, const xbString & sAlias, xbSchema *pSchema, xbInt16 iOverlay, xbInt16 iShareMode ){
-
- xbInt16 i, k, k2;
- xbInt16 rc = 0;
- xbInt16 iErrorStop = 0;
- iDbfStatus = XB_CLOSED;
-
- xbString sNfn;
- try{
- sNfn = sTableName;
- xbase->GetLogStatus();
-
- rc = NameSuffixMissing( sNfn, 1 );
- if( rc > 0 )
- sNfn += ".DBF";
-
- SetFileName( sNfn );
- this->sAlias = sAlias;
-
- /* check if the file already exists */
- if( FileExists( 0 )){
- if( !iOverlay ){
- iErrorStop = 100;
- rc = XB_FILE_EXISTS;
- throw rc;
- }
-
- // remove other files if they exist
- xbString sMname = sNfn;
- xbUInt32 iMnameLen = sMname.Len();
- sMname.PutAt( iMnameLen-2, 'I' );
- sMname.PutAt( iMnameLen-1, 'N' );
- sMname.PutAt( iMnameLen, 'F' );
- xbFile fTemp( xbase );
- fTemp.SetFileName( sMname );
- if( fTemp.FileExists() )
- fTemp.xbRemove();
-
- sMname.PutAt( iMnameLen-2, 'D' );
- sMname.PutAt( iMnameLen-1, 'B' );
- sMname.PutAt( iMnameLen, 'T' );
- fTemp.SetFileName( sMname );
- if( fTemp.FileExists() )
- fTemp.xbRemove();
-
- sMname.PutAt( iMnameLen-2, 'M' );
- sMname.PutAt( iMnameLen-1, 'D' );
- sMname.PutAt( iMnameLen, 'X' );
- fTemp.SetFileName( sMname );
- if( fTemp.FileExists() )
- fTemp.xbRemove();
- }
-
- /* check if we already have a file with this alias */
- if(( rc = xbase->AddTblToTblList( this, GetFqFileName(), sAlias )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw rc;
- }
-
- rc = ValidateSchema( pSchema );
- if( rc < 0 ){
- iErrorStop = 120;
- throw rc;
- } else
- iNoOfFields = rc;
-
- #ifdef XB_MEMO_SUPPORT
- // if we have memo fields
- iMemoFieldCnt = 0;
- i = 0;
- while( pSchema[i].cType != 0){
- if( pSchema[i].cType == 'M' )
- iMemoFieldCnt++; /* number of memo fields in the incoming definition */
- i++;
- }
-
- if( iMemoFieldCnt > 0 ){
- xbString sMfn = sNfn; /* memo file name, same as filename except ends with a "t", not an "f" */
- xbUInt32 iMfnLen = sMfn.Len();
- sMfn.PutAt( iMfnLen, 'T' );
-
- // dont overlay the memo file if it exists, and Overlay switch is off
- xbFile fTemp( xbase );
- fTemp.SetFileName( sMfn );
- if( fTemp.FileExists() && !iOverlay ){
- iErrorStop = 130;
- rc = XB_FILE_EXISTS;
- throw rc;
- }
-
- Memo = new xbMemoDbt3( this, fTemp.GetFqFileName());
-
- if(( rc = Memo->CreateMemoFile()) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw rc;
- }
- }
- #endif
-
- /* this is the dBase III version of the class */
- cVersion = 0x03; // 0x03 for Dbase level 5
- #ifdef XB_MEMO_SUPPORT
- if( iMemoFieldCnt > 0 ){
-// cVersion = cVersion |= 0x80; // Version III memo, compiler complaints
- cVersion |= 0x80; // Version III memo
- }
- #endif
-
- if(( rc = xbFopen( "w+b", iShareMode )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw rc;
- }
- uiRecordLen++; /* add one byte for 0x0D */
-
- if(( RecBuf = (char *) malloc( uiRecordLen )) == NULL ){
- iErrorStop = 160;
- throw rc;
- }
-
- if(( RecBuf2 = (char *) malloc( uiRecordLen )) == NULL ){
- iErrorStop = 170;
- rc = XB_NO_MEMORY;
- throw rc;
- }
-
- /* BlankRecord(); */
- memset( RecBuf, 0x20, uiRecordLen );
- memset( RecBuf2, 0x20, uiRecordLen );
- ulCurRec = 0L;
- uiHeaderLen = 33 + iNoOfFields * 32;
- xbDate d;
- cUpdateYY = (char) (d.YearOf() - 1900);
- cUpdateMM = (char) d.MonthOf();
- cUpdateDD = (char) d.DayOf( XB_FMT_MONTH );
-
- /* write the header prolog */
- if(( rc = WriteHeader( 0, 0 )) != XB_NO_ERROR ){
- iErrorStop = 180;
- rc = XB_WRITE_ERROR;
- throw rc;
- }
- if((SchemaPtr = (xbSchemaRec *) malloc( (size_t) iNoOfFields * sizeof( xbSchemaRec ))) == NULL){
- iErrorStop = 190;
- rc = XB_NO_MEMORY;
- throw rc;
- }
-
- /* write the field information into the header */
- for( i = 0, k = 1; i < iNoOfFields; i++ ){
-
- memset( SchemaPtr[i].cFieldName, 0x00, 11 );
- for( int x = 0; x < 10 && pSchema[i].cFieldName[x]; x++ )
- SchemaPtr[i].cFieldName[x] = pSchema[i].cFieldName[x];
-
- SchemaPtr[i].cType = pSchema[i].cType;
- SchemaPtr[i].cFieldLen = (unsigned char) pSchema[i].iFieldLen;
- SchemaPtr[i].cNoOfDecs = (unsigned char) pSchema[i].iNoOfDecs;
-
- if( SchemaPtr[i].cNoOfDecs > SchemaPtr[i].cFieldLen ){
- iErrorStop = 200;
- rc = XB_WRITE_ERROR;
- throw rc;
- }
-
- k2 = k;
- k += SchemaPtr[i].cFieldLen;
-
- if(( xbFwrite( &SchemaPtr[i].cFieldName, 1, 11 )) != XB_NO_ERROR ) {
- iErrorStop = 210;
- rc = XB_WRITE_ERROR;
- throw rc;
- }
-
- if(( xbFwrite( &SchemaPtr[i].cType, 1, 1 )) != XB_NO_ERROR ) {
- iErrorStop = 220;
- rc = XB_WRITE_ERROR;
- throw rc;
- }
-
- for( int j = 0; j < 4; j++ )
- xbFputc( 0x00 );
-
- if(( xbFwrite( &SchemaPtr[i].cFieldLen, 1, 1 )) != XB_NO_ERROR ) {
- iErrorStop = 230;
- rc = XB_WRITE_ERROR;
- throw rc;
- }
-
- if(( xbFwrite( &SchemaPtr[i].cNoOfDecs, 1, 1 )) != XB_NO_ERROR ) {
- iErrorStop = 240;
- rc = XB_WRITE_ERROR;
- throw rc;
- }
-
- /* 14 bytes reserved */
- for( int j = 0; j < 14; j++ )
- xbFputc( 0x00 );
-
- SchemaPtr[i].pAddress = RecBuf + k2;
- SchemaPtr[i].pAddress2 = RecBuf2 + k2;
- }
-
- /* write the header terminator */
- if(( xbFputc( XB_CHARHDR )) != XB_NO_ERROR ){
- iErrorStop = 250;
- rc = XB_WRITE_ERROR;
- throw rc;
- }
- }
- catch( xbInt16 rc )
- {
- xbString sMsg;
- sMsg.Sprintf( "xbdbf3::CreateTable() Exception Caught Error Stop = [%d] rc = [%d]", iErrorStop, rc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( rc ));
-
- sMsg.Sprintf( "Table Name = [%s]", GetFqFileName().Str());
- xbase->WriteLogMessage( sMsg );
- sMsg.Sprintf( "Alias Name = [%s]", sAlias.Str());
- xbase->WriteLogMessage( sMsg );
-
- xbFclose();
- if( RecBuf ){
- free( RecBuf );
- RecBuf = NULL;
- }
- if( RecBuf2 ){
- free( RecBuf2 );
- RecBuf2 = NULL;
- }
- if( SchemaPtr ){
- free( SchemaPtr );
- SchemaPtr = NULL;
- }
-
- InitVars();
- if( rc != XB_FILE_EXISTS )
- xbase->RemoveTblFromTblList( sAlias );
- }
-
- if( rc == XB_NO_ERROR )
- iDbfStatus = XB_OPEN;
-
- return rc;
-}
-
-/************************************************************************/
-//! @brief Get version.
-/*!
- The version info can be retrieved to determine
- which class is being used for a given dbf instance.
- \returns 3
-*/
-
-xbInt16 xbDbf3::GetVersion() const {
- return 3;
-}
-
-
-
-/************************************************************************/
-//! @brief Open dbf file/table.
-/*!
- \param sTableName DBF table name.
- \param sAlias Table alias
- \param iOpenMode XB_READ<br>XB_READ_WRITE
- \param iShareMode XB_SINGLE_USER<br>XB_MULTI_USER
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbDbf3::Open( const xbString & sTableName, const xbString & sAlias,
- xbInt16 iOpenMode, xbInt16 iShareMode ){
- xbInt16 i, j, iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- char buf[33];
- char *p;
-
- #ifdef XB_MEMO_SUPPORT
- iMemoFieldCnt = 0;
- #endif
-
- try{
-
- /* verify the file is not already open */
- if( iDbfStatus != XB_CLOSED ){
- iErrorStop = 100;
- iRc = XB_ALREADY_OPEN;
- throw iRc;
- }
- /* copy the file name to the class variable */
- SetFileName( sTableName );
- this->sAlias = sAlias;
-
- if( !FileExists()){
- iErrorStop = 110;
- iRc = XB_FILE_NOT_FOUND;
- throw iRc;
- }
-
- if(( iRc = xbase->AddTblToTblList( this, GetFqFileName(), sAlias )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
-
- /* open the file */
- if(( iRc = xbFopen( iOpenMode, iShareMode )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
-
- /* copy the header into memory */
- if(( iRc = ReadHeader( 1, 0 )) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
-
- /* check the version */
- if(( cVersion & 0x07 ) != 3 ){
- // if( xFileVersion != 3 && xFileVersion != 4 ){
- iErrorStop = 150;
- iRc = XB_FILE_TYPE_NOT_SUPPORTED;
- throw iRc;
- }
- iFileVersion = 3;
-
- /* calculate the number of fields */
- if( cVersion == (char)0x30 ) {
- iNoOfFields = ( uiHeaderLen - 296 ) / 32 ;
- } else {
- iNoOfFields = ( uiHeaderLen - 33 ) / 32;
- }
-
- if(( RecBuf = (char *) malloc( (size_t) uiRecordLen )) == NULL ){
- iErrorStop = 160;
- iRc = XB_NO_MEMORY;
- throw iRc;
- }
-
- if(( RecBuf2 = (char *) malloc( uiRecordLen )) == NULL ) {
- iErrorStop = 170;
- iRc = XB_NO_MEMORY;
- throw iRc;
- }
-
- if((SchemaPtr=(xbSchemaRec *)malloc( (size_t) iNoOfFields * sizeof( xbSchemaRec ))) == NULL){
- iErrorStop = 180;
- iRc = XB_NO_MEMORY;
- throw iRc;
- }
-
- memset( SchemaPtr, 0x00, ( (size_t) iNoOfFields * sizeof(xbSchemaRec) ));
- /* copy field info into memory */
- for( i = 0, j = 1; i < iNoOfFields; i++ ){
- xbFseek( ((xbInt64)i*32+32), SEEK_SET );
- xbFread( &buf, 1, 32 );
- p = buf;
- for( int x = 0; x < 10 && buf[x]; x++ ){
- SchemaPtr[i].cFieldName[x] = buf[x];
- }
- p = buf + 11;
- SchemaPtr[i].cType = *p++;
- SchemaPtr[i].pAddress = RecBuf + j;
- SchemaPtr[i].pAddress2 = RecBuf2 + j;
- SchemaPtr[i].cFieldLen = (unsigned char) *( p + 4 );
- SchemaPtr[i].cNoOfDecs = (unsigned char) *( p + 5 );
- j += SchemaPtr[i].cFieldLen;
- #ifdef XB_MEMO_SUPPORT
- if( (SchemaPtr[i].cType == 'M' || SchemaPtr[i].cType == 'B' || SchemaPtr[i].cType == 'O' ))
- iMemoFieldCnt++;
- #endif
- }
- ulCurRec = 0L;
- iDbfStatus = XB_OPEN;
- if(( iRc = BlankRecord()) != XB_NO_ERROR ){
- iErrorStop = 190;
- throw iRc;
- }
-
- #ifdef XB_MEMO_SUPPORT
- if( iMemoFieldCnt > 0 ){ /* does this table have memo fields ? */
-
- // build the file name
- xbString sMfn = GetFqFileName(); /* memo file name, same as filename except ends with a "t", not an "f" */
- xbUInt32 ulMfnLen = sMfn.Len();
- if( sMfn[ulMfnLen] == 'F' )
- sMfn.PutAt( ulMfnLen, 'T' );
- else
- sMfn.PutAt( ulMfnLen, 't' );
- xbFile fTemp( xbase );
- fTemp.SetFileName( sMfn );;
-
- Memo = new xbMemoDbt3( this, fTemp.GetFqFileName());
-
- if(( iRc = Memo->OpenMemoFile()) != XB_NO_ERROR ){
- iErrorStop = 200;
- throw iRc;
- }
- }
- #endif // XB_MEMO_SUPPORT
-
- }
- catch ( xbInt16 iRc )
- {
- xbString sMsg;
- sMsg.Sprintf( "xbdbf3::Open() Exception Caught Error Stop = [%d] iRc = [%d] ShareMode = [%d] OpenMode = [%d]", iErrorStop, iRc, iShareMode, iOpenMode );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- xbFclose();
- if( RecBuf ){
- free( RecBuf );
- RecBuf = NULL;
- }
- if( RecBuf2 ){
- free( RecBuf2 );
- RecBuf2 = NULL;
- }
- if( SchemaPtr ){
- free( SchemaPtr );
- SchemaPtr = NULL;
- }
- InitVars();
-
- #ifdef XB_MEMO_SUPPORT
- if( Memo ){
- Memo->CloseMemoFile();
- delete Memo;
- Memo = NULL;
- }
- #endif // XB_MEMO_SUPPORT
- }
-
- if( iRc == XB_NO_ERROR )
- iDbfStatus = XB_OPEN;
-
- return iRc;
-}
-/************************************************************************/
-//! @brief Rename table.
-/*!
- This routine renames a give table, associated memo and inf files
- \param sNewName - New file name.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbDbf3::Rename( const xbString sNewName ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
-
- xbString sNewDbf;
-
- xbBool bDbfRenamed = xbFalse;
-
- #ifdef XB_INF_SUPPORT
- xbString sNewInf;
- xbString sThisInf;
- xbBool bInfRenamed = xbFalse;
- #endif
-
- #ifdef XB_MEMO_SUPPORT
- xbString sNewDbt;
- xbString sThisDbt;
- xbBool bDbtRenamed = xbFalse;
- #endif // XB_MEMO_SUPPORT
-
- #ifdef XB_LOCKING_SUPPORT
- xbBool bLocked = xbFalse;
- #endif
-
- try{
-
- xbString sDir;
- xbString sFile;
- xbString sExt;
-
- xbString sNewNameWoExt;
- sNewNameWoExt.Set( sNewName );
- if( sNewName.Pos( ".DBF" ) > 0 )
- sNewNameWoExt.Left( sNewName.Len() - 4 );
-
- GetFileDirPart ( sDir );
- GetFileNamePart( sFile );
- GetFileExtPart ( sExt );
-
- if( FileExists( sNewDbf )) return XB_FILE_EXISTS;
- sNewDbf.Sprintf( "%s%s.DBF", sDir.Str(), sNewNameWoExt.Str());
-
- #ifdef XB_MEMO_SUPPORT
- sNewDbt.Sprintf( "%s%s.DBT", sDir.Str(), sNewNameWoExt.Str());
- if( FileExists( sNewDbt )) return XB_FILE_EXISTS;
- sThisDbt.Sprintf( "%s%s.DBT", sDir.Str(), sFile.Str());
- #endif
-
- #ifdef XB_INF_SUPPORT
- sNewInf.Sprintf( "%s%s.INF", sDir.Str(), sNewNameWoExt.Str());
- if( FileExists( sNewInf )) return XB_FILE_EXISTS;
- sThisInf.Sprintf( "%s%s.INF", sDir.Str(), sFile.Str());
- #endif // XB_INF_SUPPORT
-
- #ifdef XB_LOCKING_SUPPORT
- if( GetAutoLock() && GetTableLocked() ){
- if(( iRc = LockTable( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- bLocked = xbTrue;
- }
- #endif
-
- xbInt16 iOpenMode = GetOpenMode();
- xbInt16 iShareMode = GetShareMode();
- xbBool bWasOpen = xbFalse;
- if( FileIsOpen() ){
- bWasOpen = xbTrue;
- if(( iRc = xbFclose()) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- }
-
- if(( iRc = xbRename( GetFqFileName().Str(), sNewDbf.Str())) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- } else {
- bDbfRenamed = xbTrue;
- }
- xbString sNameWext;
- sNameWext.Sprintf( "%s.DBF", sNewNameWoExt.Str());
- SetFileName( sNameWext );
-
- if( bWasOpen ){
- if(( iRc = xbFopen( iOpenMode, iShareMode )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- }
-
- #ifdef XB_MEMO_SUPPORT
- if( FileExists( sThisDbt )){
- if( bWasOpen ){
- if(( iRc = Memo->xbFclose()) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
- }
- if(( xbRename( sThisDbt.Str(), sNewDbt.Str())) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
- Memo->SetFileName( sNewDbt );
- if( bWasOpen ){
- if(( iRc = Memo->xbFopen( iOpenMode, iShareMode )) != XB_NO_ERROR ){
- iErrorStop = 160;
- throw iRc;
- }
- }
- bDbtRenamed = xbTrue;
- }
- #endif // XB_MEMO_SUPPORT
-
- #ifdef XB_INF_SUPPORT
- if( FileExists( sThisInf )){
- if(( iRc = xbRename( sThisInf.Str(), sNewInf.Str())) != XB_NO_ERROR ){
- iErrorStop = 170;
- throw iRc;
- } else {
- bInfRenamed = xbTrue;
- }
- }
- #endif // XB_INF_SUPPORT
-
- // rname the table in the table list
- xbTblList *tle = xbase->GetTblListEntry( this );
- if( tle ){
- // std::cout << "setting [" << GetFqFileName().Str() << "][" << sNewNameWoExt.Str() << "]\n";
- tle->psFqTblName->Set( GetFqFileName().Str());
- tle->psTblAlias->Set( sNewNameWoExt.Str());
- }
- }
- catch ( xbInt16 iRc )
- {
- xbString sMsg;
- sMsg.Sprintf( "xbdbf3::Rename() Exception Caught Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
-
- // attempt to reverse things out if unsuccessful
- if( bDbfRenamed ){
- #ifdef XB_MEMO_SUPPORT
- if( bDbtRenamed ){
- xbRename( sNewDbt.Str(), sThisDbt.Str());
- }
- #endif // XB_MEMO_SUPPORT
- #ifdef XB_INF_SUPPORT
- if( bInfRenamed ){
- xbRename( sNewInf.Str(), sNewInf.Str());
- }
- #endif // XB_INF_SUPPORT
- }
-
- #ifdef XB_LOCKING_SUPPORT
- if( bLocked ){
- LockTable( XB_UNLOCK );
- }
- #endif
-
- }
- return iRc;
-}
-
-
-/************************************************************************/
-#ifdef XB_MEMO_SUPPORT
-//! @brief Create memo block size.
-/*!
- This routine sets the memo file block size. This value is used when
- the memo file is created so you if you want to change it, this must be
- called before creating the table.
-
- DBF III Plus uses a block size of 512.
-
- \param ulBlockSize - Block size, must be evenly divisible by 512.
- \returns XB_INVALID_BLOCK_SIZE<br>XB_NO_ERROR
-*/
-
-xbInt16 xbDbf3::SetCreateMemoBlockSize( xbUInt32 ulBlockSize ){
-
- if( ulBlockSize != 512 )
- return XB_INVALID_BLOCK_SIZE;
- else
- ulCreateMemoBlockSize = 512;
-
- return XB_NO_ERROR;
-}
-#endif
-
-/************************************************************************/
-//! @brief Set version.
-/*!
- Sets the version to 3. The version info can be retrieved to determine
- which class is being used for a given dbf instance.
- \returns 3
-*/
-
-xbInt16 xbDbf3::SetVersion() {
- iFileVersion = 3;
- return iFileVersion;
-}
-
-
-/************************************************************************/
-//! @brief Validate schema
-/*!
- This routine verifies the field types are valid for Dbase III Plus (tm).
-
- \param s Pointer to schema structure with field definitions.
-
- \returns Number of fields or XB_INVALID_FIELD_TYPE.
-*/
-
-xbInt16 xbDbf3::ValidateSchema( xbSchema * s ){
-
-// This routine validates an input schema
-// Negative return value is an error
-// Positive return value is the number of fields
-// On success, the class variable uiRecordLen will be updated with the record length of the combined total of the fields
-
- xbInt16 iFieldCnt = 0;
- uiRecordLen = 0;
-
- /* count the number of fields and check paramaters */
- xbInt16 i = 0;
- while( s[i].cType != 0 ){
- iFieldCnt++;
- // Version 3 field types
- if( s[i].cType != 'C' &&
- s[i].cType != 'N' &&
- s[i].cType != 'D' &&
- #ifdef XB_MEMO_SUPPORT
- s[i].cType != 'M' &&
- #endif // XB_MEMO_SUPPORT
- s[i].cType != 'L' ){
- return XB_INVALID_FIELD_TYPE;
- }
-
- if(s[i].cType == 'D'){
- s[i].iFieldLen = 8;
- s[i].iNoOfDecs = 0;
- }
-
- else if(s[i].cType == 'C')
- s[i].iNoOfDecs = 0;
-
- // check for numeric fields which are too long
- else if( s[i].cType == 'N' && s[i].iFieldLen > 19 ){
- return XB_INVALID_FIELD_LEN;
- }
- // field len must be >= no of decimals
- else if( s[i].cType == 'N' && s[i].iFieldLen < s[i].iNoOfDecs ){
- return XB_INVALID_FIELD_LEN;
- }
-
- #ifdef XB_MEMO_SUPPORT
- else if(s[i].cType == 'M'){
- s[i].iFieldLen = 10;
- s[i].iNoOfDecs = 0;
- }
- #endif // XB_MEMO_SUPPORT
-
- uiRecordLen += s[i].iFieldLen;
- i++;
- }
- return iFieldCnt;
-}
-
-} /* namespace */
-#endif /* XB_DBF3_SUPPORT */ \ No newline at end of file
diff --git a/src/core/xbdbf4.cpp b/src/core/xbdbf4.cpp
deleted file mode 100755
index 59ba39a..0000000
--- a/src/core/xbdbf4.cpp
+++ /dev/null
@@ -1,884 +0,0 @@
-/* xbdbf4.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-#include "xbase.h"
-
-
-#ifdef XB_DBF4_SUPPORT
-
-namespace xb{
-
-
-/************************************************************************/
-//! @brief Constructor.
-xbDbf4::xbDbf4(xbXBase * x) : xbDbf( x ) {
-
- iFileVersion = 4;
- #ifdef XB_MEMO_SUPPORT
- ulCreateMemoBlockSize = 1024;
- #endif
-};
-
-/************************************************************************/
-//! @brief Destructor.
-xbDbf4::~xbDbf4() {};
-
-/************************************************************************/
-//! @brief Create Version 4 table.
-/*!
- This routine creates a Dbase IV (tm) DBF file.
-
- \param sTableName DBF table name.
- \param sAlias Table alias
- \param pSchema Pointer to schema structure with field definitions.
- \param iOverlay xbTrue - Overlay.<br> xbFalse - Don't overlay.
- \param iShareMode XB_SINGLE_USER<br>XB_MULTI_USER
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbDbf4::CreateTable( const xbString &sTableName, const xbString &sAlias, xbSchema * pSchema, xbInt16 iOverlay, xbInt16 iShareMode ){
-
- xbInt16 i, k, k2;
- xbInt16 rc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- iDbfStatus = XB_CLOSED;
-
- xbString sNfn;
-
- try{
- sNfn = sTableName;
- xbase->GetLogStatus();
-
- rc = NameSuffixMissing( sNfn, 1 );
- if( rc > 0 )
- sNfn += ".DBF";
-
- SetFileName( sNfn );
- this->sAlias = sAlias;
-
- /* check if the file already exists */
- if( FileExists( 0 )){
- if( !iOverlay ){
- iErrorStop = 100;
- rc = XB_FILE_EXISTS;
- throw rc;
- }
-
- // remove other files if they exist
- xbString sMname = sNfn;
- xbUInt32 iMnameLen = sMname.Len();
- sMname.PutAt( iMnameLen-2, 'I' );
- sMname.PutAt( iMnameLen-1, 'N' );
- sMname.PutAt( iMnameLen, 'F' );
- xbFile fTemp( xbase );
- fTemp.SetFileName( sMname );
- if( fTemp.FileExists() )
- fTemp.xbRemove();
-
- sMname.PutAt( iMnameLen-2, 'D' );
- sMname.PutAt( iMnameLen-1, 'B' );
- sMname.PutAt( iMnameLen, 'T' );
- fTemp.SetFileName( sMname );
- if( fTemp.FileExists() )
- fTemp.xbRemove();
-
- sMname.PutAt( iMnameLen-2, 'M' );
- sMname.PutAt( iMnameLen-1, 'D' );
- sMname.PutAt( iMnameLen, 'X' );
- fTemp.SetFileName( sMname );
- if( fTemp.FileExists() )
- fTemp.xbRemove();
- }
-
- /* check if we already have a file with this alias */
- if(( rc = xbase->AddTblToTblList( this, GetFqFileName(), sAlias )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw rc;
- }
-
- rc = ValidateSchema( pSchema );
- if( rc < 0 ){
- iErrorStop = 120;
- throw rc;
- } else
- iNoOfFields = rc;
-
- #ifdef XB_MEMO_SUPPORT
- // if we have memo fields
- iMemoFieldCnt = 0;
- i = 0;
- while( pSchema[i].cType != 0){
- if( pSchema[i].cType == 'M' )
- iMemoFieldCnt++; /* number of memo fields in the incoming definition */
- i++;
- }
-
- if( iMemoFieldCnt > 0 ){
- xbString sMfn = sNfn; /* memo file name, same as filename except ends with a "t", not an "f" */
- xbUInt32 ulMfnLen = sMfn.Len();
- sMfn.PutAt( ulMfnLen, 'T' );
-
- // dont overlay the memo file if it exists, and Overlay switch is off
- xbFile fTemp( xbase );
- fTemp.SetFileName( sMfn );
- if( fTemp.FileExists() && !iOverlay ){
- iErrorStop = 130;
- rc = XB_FILE_EXISTS;
- throw rc;
- }
-
- Memo = new xbMemoDbt4( this, fTemp.GetFqFileName());
-
- if(( rc = Memo->CreateMemoFile()) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw rc;
- }
- }
- #endif
-
- /* this is the dBase IV version of the class */
- cVersion = 0x03; // 0x03 for Dbase level 5
- #ifdef XB_MEMO_SUPPORT
- if( iMemoFieldCnt > 0 ){
-// cVersion = cVersion |= 0x88; // version IV memos, compiler complains about this
- cVersion |= 0x88; // version IV memos
- }
- #endif
-
- if(( rc = xbFopen( "w+b", iShareMode )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw rc;
- }
- uiRecordLen++; /* add one byte for 0x0D */
-
- if(( RecBuf = (char *) malloc( uiRecordLen )) == NULL ){
- iErrorStop = 160;
- throw rc;
- }
-
- if(( RecBuf2 = (char *) malloc( uiRecordLen )) == NULL ){
- iErrorStop = 170;
- rc = XB_NO_MEMORY;
- throw rc;
- }
-
- /* BlankRecord(); */
- memset( RecBuf, 0x20, uiRecordLen );
- memset( RecBuf2, 0x20, uiRecordLen );
- ulCurRec = 0L;
- uiHeaderLen = 33 + iNoOfFields * 32;
- xbDate d;
- cUpdateYY = (char) (d.YearOf() - 1900);
- cUpdateMM = (char) d.MonthOf();
- cUpdateDD = (char) d.DayOf( XB_FMT_MONTH );
- cIndexFlag = 0;
- // Default language driver to 0x1b
- cLangDriver = 0x1b;
-
- /* write the header prolog */
- if(( rc = WriteHeader( 0, 0 )) != XB_NO_ERROR ){
- iErrorStop = 180;
- rc = XB_WRITE_ERROR;
- throw rc;
- }
- if((SchemaPtr=(xbSchemaRec *)malloc( (size_t) iNoOfFields * sizeof( xbSchemaRec ))) == NULL){
- iErrorStop = 190;
- rc = XB_NO_MEMORY;
- throw rc;
- }
-
- /* write the field information into the header */
- for( i = 0, k = 1; i < iNoOfFields; i++ ){
-
- memset( SchemaPtr[i].cFieldName, 0x00, 11 );
- for( int x = 0; x < 10 && pSchema[i].cFieldName[x]; x++ )
- SchemaPtr[i].cFieldName[x] = pSchema[i].cFieldName[x];
-
- SchemaPtr[i].cType = pSchema[i].cType;
- SchemaPtr[i].cFieldLen = (unsigned char) pSchema[i].iFieldLen;
- SchemaPtr[i].cNoOfDecs = (unsigned char) pSchema[i].iNoOfDecs;
-
- if( SchemaPtr[i].cNoOfDecs > SchemaPtr[i].cFieldLen ){
- iErrorStop = 110;
- rc = XB_WRITE_ERROR;
- throw rc;
- }
-
- k2 = k;
- k += SchemaPtr[i].cFieldLen;
-
- if(( xbFwrite( &SchemaPtr[i].cFieldName, 1, 11 )) != XB_NO_ERROR ) {
- iErrorStop = 200;
- rc = XB_WRITE_ERROR;
- throw rc;
- }
-
- if(( xbFwrite( &SchemaPtr[i].cType, 1, 1 )) != XB_NO_ERROR ) {
- iErrorStop = 210;
- rc = XB_WRITE_ERROR;
- throw rc;
- }
-
- for( int j = 0; j < 4; j++ )
- xbFputc( 0x00 );
-
- if(( xbFwrite( &SchemaPtr[i].cFieldLen, 1, 1 )) != XB_NO_ERROR ) {
- iErrorStop = 220;
- rc = XB_WRITE_ERROR;
- throw rc;
- }
-
- if(( xbFwrite( &SchemaPtr[i].cNoOfDecs, 1, 1 )) != XB_NO_ERROR ) {
- iErrorStop = 230;
- rc = XB_WRITE_ERROR;
- throw rc;
- }
-
- /* 14 bytes reserved */
- for( int j = 0; j < 14; j++ )
- xbFputc( 0x00 );
-
- SchemaPtr[i].pAddress = RecBuf + k2;
- SchemaPtr[i].pAddress2 = RecBuf2 + k2;
- }
-
- /* write the header terminator */
- if(( xbFputc( XB_CHARHDR )) != XB_NO_ERROR ){
- iErrorStop = 240;
- rc = XB_WRITE_ERROR;
- throw rc;
- }
- }
- catch( xbInt16 rc )
- {
- xbString sMsg;
- sMsg.Sprintf( "xbdbf4::CreateTable() Exception Caught Error Stop = [%d] rc = [%d]", iErrorStop, rc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( rc ));
-
- sMsg.Sprintf( "Table Name = [%s]", GetFqFileName().Str());
- xbase->WriteLogMessage( sMsg );
- sMsg.Sprintf( "Alias Name = [%s]", sAlias.Str());
- xbase->WriteLogMessage( sMsg );
-
- xbFclose();
- if( RecBuf ){
- free( RecBuf );
- RecBuf = NULL;
- }
- if( RecBuf2 ){
- free( RecBuf2 );
- RecBuf2 = NULL;
- }
- if( SchemaPtr ){
- free( SchemaPtr );
- SchemaPtr = NULL;
- }
-
- InitVars();
- if( rc != XB_FILE_EXISTS )
- xbase->RemoveTblFromTblList( sAlias );
- }
-
- if( rc == XB_NO_ERROR )
- iDbfStatus = XB_OPEN;
-
- return rc;
-}
-
-/************************************************************************/
-//! @brief Get version.
-/*!
- The version info can be retrieved to determine
- which class is being used for a given dbf instance.
- \returns 4
-*/
-
-xbInt16 xbDbf4::GetVersion() const {
- return 4;
-}
-
-/************************************************************************/
-//! @brief Open dbf file/table.
-/*!
- \param sTableName DBF table name.
- \param sAlias Table alias
- \param iOpenMode XB_READ<br>XB_READ_WRITE
- \param iShareMode XB_SINGLE_USER<br>XB_MULTI_USER
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbDbf4::Open( const xbString & sTableName, const xbString & sAlias,
- xbInt16 iOpenMode, xbInt16 iShareMode ){
- xbInt16 i, j, iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- char buf[33];
- char *p;
-
- #ifdef XB_MEMO_SUPPORT
- iMemoFieldCnt = 0;
- #endif
-
- try{
- /* verify the file is not already open */
- if( iDbfStatus != XB_CLOSED ){
- iErrorStop = 100;
- iRc = XB_ALREADY_OPEN;
- throw iRc;
- }
- /* copy the file name to the class variable */
- SetFileName( sTableName );
- this->sAlias = sAlias;
-
- if( !FileExists()){
- iErrorStop = 110;
- iRc = XB_FILE_NOT_FOUND;
- throw iRc;
- }
-
- if(( iRc = xbase->AddTblToTblList( this, GetFqFileName(), sAlias )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
-
- /* open the file */
- if(( iRc = xbFopen( iOpenMode, iShareMode )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
-
- /* copy the header into memory */
- if(( iRc = ReadHeader( 1, 0 )) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
-
- /* check the version */
- //if(( xFileVersion = DetermineXbaseTableVersion( cVersion )) != 4 ){
- if(( cVersion & 0x07 ) != 3 ){
- iErrorStop = 150;
- iRc = XB_FILE_TYPE_NOT_SUPPORTED;
- throw iRc;
- }
- iFileVersion = 4;
-
- /* calculate the number of fields */
- if( cVersion == (char)0x30 ) {
- iNoOfFields = ( uiHeaderLen - 296 ) / 32 ;
- } else {
- iNoOfFields = ( uiHeaderLen - 33 ) / 32;
- }
-
- if(( RecBuf = (char *) malloc( uiRecordLen )) == NULL ){
- iErrorStop = 160;
- iRc = XB_NO_MEMORY;
- throw iRc;
- }
-
- if(( RecBuf2 = (char *) malloc( uiRecordLen )) == NULL ) {
- iErrorStop = 170;
- iRc = XB_NO_MEMORY;
- throw iRc;
- }
-
- if((SchemaPtr=(xbSchemaRec *)malloc((size_t) iNoOfFields * sizeof( xbSchemaRec ))) == NULL){
- iErrorStop = 180;
- iRc = XB_NO_MEMORY;
- throw iRc;
- }
-
- memset( SchemaPtr, 0x00, (size_t) iNoOfFields * (size_t) sizeof( xbSchemaRec ));
- /* copy field info into memory */
- for( i = 0, j = 1; i < iNoOfFields; i++ ){
- xbFseek( ((xbInt64)i*32+32), SEEK_SET );
- xbFread( &buf, 1, 32 );
- p = buf;
- for( int x = 0; x < 10 && buf[x]; x++ ){
- SchemaPtr[i].cFieldName[x] = buf[x];
- }
- p = buf + 11;
- SchemaPtr[i].cType = *p++;
- SchemaPtr[i].pAddress = RecBuf + j;
- SchemaPtr[i].pAddress2 = RecBuf2 + j;
- SchemaPtr[i].cFieldLen = (unsigned char) *( p + 4 );
- SchemaPtr[i].cNoOfDecs = (unsigned char) *( p + 5 );
- SchemaPtr[i].cIxFlag = (unsigned char) *( p + 19 );
- j += SchemaPtr[i].cFieldLen;
- #ifdef XB_MEMO_SUPPORT
- if( (SchemaPtr[i].cType == 'M' || SchemaPtr[i].cType == 'B' || SchemaPtr[i].cType == 'O' ))
- iMemoFieldCnt++;
- #endif
- }
- ulCurRec = 0L;
- iDbfStatus = XB_OPEN;
- if(( iRc = BlankRecord()) != XB_NO_ERROR ){
- iErrorStop = 190;
- throw iRc;
- }
-
-
- #ifdef XB_MEMO_SUPPORT
- if( iMemoFieldCnt > 0 ){ /* does this table have memo fields ? */
-
- // build the file name
- xbString sMfn = GetFqFileName(); /* memo file name, same as filename except ends with a "t", not an "f" */
- xbUInt32 ulMfnLen = sMfn.Len();
- if( sMfn[ulMfnLen] == 'F' )
- sMfn.PutAt( ulMfnLen, 'T' );
- else
- sMfn.PutAt( ulMfnLen, 't' );
- xbFile fTemp( xbase );
- fTemp.SetFileName( sMfn );
-
- Memo = new xbMemoDbt4( this, fTemp.GetFqFileName());
-
- if(( iRc = Memo->OpenMemoFile()) != XB_NO_ERROR ){
- iErrorStop = 200;
- throw iRc;
- }
- }
- #endif
-
- #ifdef XB_MDX_SUPPORT
-
-// printf( "cIndexFlag [%x]\n", cIndexFlag );
-
- if( cIndexFlag ){
- // create the file name
- xbString sIxFileName = GetFqFileName();
- sIxFileName.Trim();
- xbUInt32 lLen = sIxFileName.Len();
- sIxFileName.PutAt( lLen-2, 'M' );
- sIxFileName.PutAt( lLen-1, 'D' );
- sIxFileName.PutAt( lLen, 'X' );
- if(( iRc = OpenIndex( "MDX", sIxFileName )) != XB_NO_ERROR ){
- iErrorStop = 210;
- throw iRc;
- }
- }
- #endif
-
- }
- catch ( xbInt16 iRc )
- {
- xbString sMsg;
- sMsg.Sprintf( "xbdbf4::Open() Exception Caught Error Stop = [%d] iRc = [%d] ShareMode = [%d] OpenMode = [%d]", iErrorStop, iRc, iShareMode, iOpenMode );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- xbFclose();
- if( RecBuf ){
- free( RecBuf );
- RecBuf = NULL;
- }
- if( RecBuf2 ){
- free( RecBuf2 );
- RecBuf2 = NULL;
- }
- if( SchemaPtr ){
- free( SchemaPtr );
- SchemaPtr = NULL;
- }
- InitVars();
-
-#ifdef XB_MEMO_SUPPORT
- if( Memo ){
- Memo->CloseMemoFile();
- delete Memo;
- Memo = NULL;
- }
-#endif
- }
-
- if( iRc == XB_NO_ERROR )
- iDbfStatus = XB_OPEN;
-
- return iRc;
-}
-
-/************************************************************************/
-//! @brief Rename table.
-/*!
- This routine renames a give table, associated memo and inf files
- \param sNewName - New file name.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbDbf4::Rename( const xbString sNewName ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
-
- xbString sNewDbf;
-
- #ifdef XB_MEMO_SUPPORT
- xbString sNewDbt;
- xbBool bDbtRenamed = xbFalse;
- xbString sThisDbt;
- #endif
-
- #ifdef XB_MDX_SUPPORT
- xbString sNewMdx;
- xbBool bMdxRenamed = xbFalse;
- xbString sThisMdx;
- #endif
-
- #ifdef XB_INF_SUPPORT
- xbString sNewInf;
- xbString sThisInf;
- xbBool bInfRenamed = xbFalse;
- #endif // XB_INF_SUPPORT
-
- xbBool bDbfRenamed = xbFalse;
-
- #ifdef XB_LOCKING_SUPPORT
- xbBool bLocked = xbFalse;
- #endif // XB_LOCKIN_SUPPORT
-
-
- try{
-
- xbString sDir;
- xbString sFile;
- xbString sExt;
- xbString sNewNameWoExt;
- sNewNameWoExt.Set( sNewName );
- if( sNewName.Pos( ".DBF" ) > 0 )
- sNewNameWoExt.Left( sNewName.Len() - 4 );
-
-// std::cout << "NewName wo ext = [" << sNewNameWoExt.Str() << "]\n";
-
- GetFileDirPart ( sDir );
- GetFileNamePart( sFile );
- GetFileExtPart ( sExt );
-
- sNewDbf.Sprintf( "%s%s.DBF", sDir.Str(), sNewNameWoExt.Str());
-
- #ifdef XB_MEMO_SUPPORT
- sNewDbt.Sprintf( "%s%s.DBT", sDir.Str(), sNewNameWoExt.Str());
- if( FileExists( sNewDbt )) return XB_FILE_EXISTS;
- sThisDbt.Sprintf( "%s%s.DBT", sDir.Str(), sFile.Str());
- #endif
-
- #ifdef XB_MDX_SUPPORT
- sNewMdx.Sprintf( "%s%s.MDX", sDir.Str(), sNewNameWoExt.Str());
- if( FileExists( sNewMdx )) return XB_FILE_EXISTS;
- sThisMdx.Sprintf( "%s%s.MDX", sDir.Str(), sFile.Str());
- #endif
-
- #ifdef XB_INF_SUPPORT
- sNewInf.Sprintf( "%s%s.INF", sDir.Str(), sNewNameWoExt.Str());
- if( FileExists( sNewInf )) return XB_FILE_EXISTS;
- sThisInf.Sprintf( "%s%s.INF", sDir.Str(), sFile.Str());
- #endif // XB_INF_SUPPORT
-
-
-/*
- std::cout << "xbDbf3::Rename dir = [" << sDir.Str() << "] file = [" << sFile.Str() << "] ext = [" << sExt.Str() << "]\n";
- std::cout << "xbDbf3::Rename new dbf = [" << sNewDbf.Str() << "]\n";
- std::cout << "xbDbf3::Rename new dbt = [" << sNewDbt.Str() << "]\n";
- std::cout << "xbDbf3::Rename new inf = [" << sNewInf.Str() << "]\n";
- std::cout << "xbDbf3::Rename new mdx = [" << sNewMdx.Str() << "]\n";
-*/
-
- if( FileExists( sNewDbf )) return XB_FILE_EXISTS;
-
- #ifdef XB_LOCKING_SUPPORT
- if( GetAutoLock() ){
- if(( iRc = LockTable( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- bLocked = xbTrue;
- }
- #endif
-
- xbInt16 iOpenMode = GetOpenMode();
- xbInt16 iShareMode = GetShareMode();
- xbBool bWasOpen = xbFalse;
- if( FileIsOpen() ){
- bWasOpen = xbTrue;
- if(( iRc = xbFclose()) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- }
-
- if(( iRc = xbRename( GetFqFileName().Str(), sNewDbf.Str())) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- } else {
- bDbfRenamed = xbTrue;
- }
- xbString sNameWext;
- sNameWext.Sprintf( "%s.DBF", sNewNameWoExt.Str());
- SetFileName( sNameWext );
-
-
- if( bWasOpen ){
- if(( iRc = xbFopen( iOpenMode, iShareMode )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- }
-
- #ifdef XB_MEMO_SUPPORT
- if( FileExists( sThisDbt )){
- if(( iRc = Memo->xbFseek( 8, SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
-
- sNewNameWoExt.PadRight( ' ', 8 );
- for( int i = 1; i < 9; i++ )
- Memo->xbFputc( sNewNameWoExt[i] );
-
- if( bWasOpen ){
- if(( iRc = Memo->xbFclose()) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
- }
-
- Memo->SetFileName( sNewDbt );
- if(( xbRename( sThisDbt.Str(), sNewDbt.Str())) != XB_NO_ERROR ){
- iErrorStop = 160;
- throw iRc;
- }
-
- if( bWasOpen ){
- if(( iRc = Memo->xbFopen( iOpenMode, iShareMode )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
- }
-
- bDbtRenamed = xbTrue;
- }
- #endif
-
- #ifdef XB_MDX_SUPPORT
- if( FileExists( sThisMdx )){
- xbIxMdx *ixMdx;
- xbString s;
- xbBool bMdxFound = xbFalse;
- xbIxList *ixList = GetIxList();
- while( ixList && !bMdxFound ){
- s = ixList->sFmt->Str();
- if( s == "MDX" ){
- ixMdx = (xbIxMdx *) ixList->ix;
- bMdxFound = xbTrue;
- }
- }
-
- if( bMdxFound ){
- if(( iRc = ixMdx->xbFseek( 4, SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 180;
- throw iRc;
- }
-
- sNewNameWoExt.PadRight( ' ', 8 );
- for( int i = 1; i < 9; i++ )
- ixMdx->xbFputc( sNewNameWoExt[i] );
-
- if( bWasOpen ){
- if(( iRc = ixMdx->xbFclose()) != XB_NO_ERROR ){
- iErrorStop = 190;
- throw iRc;
- }
- }
-
- ixMdx->SetFileName( sNewMdx );
- if(( xbRename( sThisMdx.Str(), sNewMdx.Str())) != XB_NO_ERROR ){
- iErrorStop = 200;
- throw iRc;
- }
-
- if( bWasOpen ){
- if(( iRc = ixMdx->xbFopen( iOpenMode, iShareMode )) != XB_NO_ERROR ){
- iErrorStop = 210;
- throw iRc;
- }
- }
- bMdxRenamed = xbTrue;
- }
- }
- #endif // XB_MDX_SUPPORT
-
- #ifdef XB_INF_SUPPORT
- if( FileExists( sThisInf )){
- if(( xbRename( sThisInf.Str(), sNewInf.Str())) != XB_NO_ERROR ){
- iErrorStop = 180;
- throw iRc;
- } else {
- bInfRenamed = xbTrue;
- }
- }
- #endif // XB_INF_SUPPORT
-
- // rename the table in the table list
- xbTblList *tle = xbase->GetTblListEntry( this );
- if( tle ){
- tle->psFqTblName->Set( GetFqFileName().Str());
- tle->psTblAlias->Set( sNewNameWoExt.Str());
- }
-
-
- }
- catch ( xbInt16 iRc )
- {
- xbString sMsg;
- sMsg.Sprintf( "xbdbf4::Rename() Exception Caught Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
-
- // attempt to reverse things out if unsuccessful
- if( bDbfRenamed ){
-
- #ifdef XB_MEMO_SUPPORT
- if( bDbtRenamed ){
- xbRename( sNewDbt.Str(), sThisDbt.Str());
- }
- #endif
-
- #ifdef XB_MDX_SUPPORT
- if( bMdxRenamed ){
- xbRename( sNewMdx.Str(), sThisMdx.Str());
- }
- #endif
-
- #ifdef XB_INF_SUPPORT
- if( bInfRenamed ){
- xbRename( sNewInf.Str(), sNewInf.Str());
- }
- #endif // XB_INF_SUPPORT
- }
-
- #ifdef XB_LOCKING_SUPPORT
- if( GetAutoLock() ){
- iRc = LockTable( XB_UNLOCK );
- }
- #endif
-
- }
-
- #ifdef XB_LOCKING_SUPPORT
- if( bLocked ){
- LockTable( XB_UNLOCK );
- }
- #endif
-
- return iRc;
-}
-
-/************************************************************************/
-#ifdef XB_MEMO_SUPPORT
-
-//! @brief Create memo block size.
-/*!
- This routine sets the memo file block size. This value is used when
- the memo file is created so you if you want to change it, this must be
- called before creating the table.
-
- The default size for version 4 is 1024.
-
- \param ulBlockSize - Block size, must be evenly divisible by 512.
- \returns XB_INVALID_BLOCK_SIZE<br>XB_NO_ERROR
-*/
-
-xbInt16 xbDbf4::SetCreateMemoBlockSize( xbUInt32 ulBlockSize ){
-
- if( ulBlockSize % 512 )
- return XB_INVALID_BLOCK_SIZE;
- else
- ulCreateMemoBlockSize = ulBlockSize;
-
- return XB_NO_ERROR;
-}
-#endif // XB_MEMO_SUPPORT
-/************************************************************************/
-//! @brief Set version.
-/*!
- Sets the version to 4. The version info can be retrieved to determine
- which class is being used for a given dbf instance.
- \returns 4
-*/
-xbInt16 xbDbf4::SetVersion() {
- iFileVersion = 4;
- return iFileVersion;
-}
-/************************************************************************/
-//! @brief Validate schema
-/*!
- This routine verifies the field types are valid for Dbase IV (tm).
-
- \param s Pointer to schema structure with field definitions.
-
- \returns Number of fields or XB_INVALID_FIELD_TYPE.
-*/
-
-
-xbInt16 xbDbf4::ValidateSchema( xbSchema * s ){
-
- xbInt16 iFieldCnt = 0;
- uiRecordLen = 0;
-
- // Count the number of fields and check paramaters
- xbInt16 i = 0;
- while( s[i].cType != 0 ){
- iFieldCnt++;
- // Version IV field types
- if( s[i].cType != 'C' &&
- s[i].cType != 'N' &&
- s[i].cType != 'F' &&
- s[i].cType != 'D' &&
- #ifdef XB_MEMO_SUPPORT
- s[i].cType != 'M' &&
- #endif /* XB_MEMO_SUPPORT */
- s[i].cType != 'L' ){
- return XB_INVALID_FIELD_TYPE;
- }
-
- if(s[i].cType == 'D'){
- s[i].iFieldLen = 8;
- s[i].iNoOfDecs = 0;
- }
-
- else if(s[i].cType == 'C')
- s[i].iNoOfDecs = 0;
-
- // check for numeric fields which are too long
- else if((s[i].cType == 'N' || s[i].cType == 'F') && s[i].iFieldLen > 19 ){
- return XB_INVALID_FIELD_LEN;
- }
-
- // field len must be greater then number of decimals
- else if((s[i].cType == 'N' || s[i].cType == 'F') && s[i].iFieldLen < s[i].iNoOfDecs ){
- return XB_INVALID_FIELD_LEN;
- }
-
- #ifdef XB_MEMO_SUPPORT
- else if(s[i].cType == 'M'){
- s[i].iFieldLen = 10;
- s[i].iNoOfDecs = 0;
- }
- #endif // XB_MEMO_SUPPORT
-
- uiRecordLen += s[i].iFieldLen;
- i++;
- }
- return iFieldCnt;
-}
-
-} /* namespace */
-#endif /* XB_DBF4_SUPPORT */ \ No newline at end of file
diff --git a/src/core/xbexp.cpp b/src/core/xbexp.cpp
deleted file mode 100755
index deea53d..0000000
--- a/src/core/xbexp.cpp
+++ /dev/null
@@ -1,2661 +0,0 @@
-/* xbexp.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2017,2021,2022 Gary A Kunkel
-
-The xb64 software library is covered under
-the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-
-This module is part of the expression logic and has the code
-for parsing various tokens out of an expression
-
-*/
-
-#include "xbase.h"
-
-#ifdef XB_EXPRESSION_SUPPORT
-
-namespace xb{
-
-/*************************************************************************/
-//! Constructor
-/*!
- \param x Pointer to xbXBase instance.
-*/
-
-xbExp::xbExp( xbXBase *x ){
- xbase = x;
- dbf = NULL;
- nTree = NULL;
-}
-
-/*************************************************************************/
-//! Constructor
-/*!
- \param x Pointer to xbXBase instance.
- \param d Pointer to xbDbf instance.
-*/
-xbExp::xbExp( xbXBase *x, xbDbf *d ){
- xbase = x;
- dbf = d;
- nTree = NULL;
-}
-
-/*************************************************************************/
-//! Deconstrucor.
-
-xbExp::~xbExp() {
-
- if( nTree )
- delete nTree;
-}
-
-/*************************************************************************/
-//! Calulate expression return length
-/*!
-
- This function returns the maximum possible length of an expression
- The create index functions use this for determining the fixed length keys
- It sets the return length field in the node.
-
- \param n Start node
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbExp::CalcFunctionResultLen( xbExpNode * n ) const{
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbInt16 iReturnLenCalc = 0;;
- xbInt32 lReturnLenVal = 0;
- xbString sNodeText;
-
-
- try{
-
- n->GetNodeText( sNodeText );
- char cReturnType = 0;
- if(( iRc = xbase->GetFunctionInfo( sNodeText, cReturnType, iReturnLenCalc, lReturnLenVal )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
-
- if( iReturnLenCalc == 1 ){
- // use the value from iReturnLenVal
- n->SetResultLen( (xbUInt32) lReturnLenVal );
- }
- else if( iReturnLenCalc == 2 ){
- // use the length from the child node identified in lReturnLenVal
- xbExpNode *nChild = n->GetChild( (xbUInt32) lReturnLenVal - 1 );
- if( !nChild ){
- iErrorStop = 110;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- }
- n->SetResultLen( nChild->GetResultLen());
- }
-
- else if( iReturnLenCalc == 3 ){
- // use the length from the child node identified in lReturnLenVal
- xbExpNode *nChild = n->GetChild( (xbUInt32) lReturnLenVal - 1 );
- if( !nChild ){
- iErrorStop = 120;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- }
- n->SetResultLen( (xbUInt32) nChild->GetNumericResult());
- }
- else if( iReturnLenCalc == 4 ){
- // use the value from the length in parm 1 multiplied by the value in parm 2 (REPLICATE)
- xbExpNode *nChild1 = n->GetChild( 0 );
- xbExpNode *nChild2 = n->GetChild( 1 );
- if( !nChild1 || !nChild2 ){
- iErrorStop = 130;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- }
- n->SetResultLen( nChild1->GetResultLen() * (xbUInt32) nChild2->GetNumericResult());
- }
- else if( iReturnLenCalc == 5 ){
- // use the larger of the length of the value in parm2 or parm 3 (IIF statement)
- xbExpNode *nChild2 = n->GetChild( 1 );
- xbExpNode *nChild3 = n->GetChild( 2 );
- if( !nChild2 || !nChild3 ){
- iErrorStop = 140;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- }
- if( nChild2->GetResultLen() >= nChild3->GetResultLen())
- n->SetResultLen( nChild2->GetResultLen());
- else
- n->SetResultLen( nChild3->GetResultLen());
- }
-
- else if( iReturnLenCalc == 6 ){
-
- if( n->GetChildCnt() >= 2 ){
- xbExpNode *nChild2 = n->GetChild( 1 );
- n->SetResultLen( (xbUInt32) nChild2->GetNumericResult());
- } else {
- n->SetResultLen( (xbUInt32) lReturnLenVal );
- }
-
- } else {
- iErrorStop = 150;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbexp::GetFunctionResultLen() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- }
- return iRc;
-}
-
-/*************************************************************************/
-//! Check parens and quotes
-/*!
- This routine looks for unbalanced parens and quotes
-
- \param sExpression Expression to examine.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-
-xbInt16 xbExp::CheckParensAndQuotes( const xbString &sExpression ){
-
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
-
- xbBool bInQuotes = xbFalse;
- xbInt16 iLparenCtr = 0;
- xbInt16 iRparenCtr = 0;
- xbInt16 iQuoteType = 0;
- const char *s = sExpression;
-
- try{
-
- while( *s ){
- if( !bInQuotes ){
- if( *s == '(' ){
- iLparenCtr++;
- } else if( *s == ')' ){
- iRparenCtr++;
- } else if( *s == '\'' ){
- bInQuotes++;
- iQuoteType = 0;
- } else if( *s == '"' ){
- bInQuotes++;
- iQuoteType = 1;
- }
- } else {
- if(( *s == '\'' && iQuoteType == 0 ) || (*s == '"' && iQuoteType == 1 ))
- bInQuotes--;
- }
- s++;
- }
- if( iLparenCtr != iRparenCtr ){
- iErrorStop = 100;
- iRc = XB_UNBALANCED_PARENS;
- throw iRc;
- }
- if( bInQuotes ){
- iErrorStop = 110;
- iRc = XB_UNBALANCED_QUOTES;
- throw iRc;
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbexp::CheckParensAndQuots() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( sExpression );
- }
- return iRc;
-}
-/*************************************************************************/
-//! Clear tree handle.
-/*!
- This routine clears the expression tree and frees any associated memory.
- \returns void.
-*/
-
-void xbExp::ClearTreeHandle(){
- if( nTree ){
- nTree = NULL;
- }
-}
-
-/*************************************************************************/
-#ifdef XB_DEBUG_SUPPORT
-//! Dump the tree.
-/*!
- \param iOption - Output opton.
- \returns void.
-*/
-
-void xbExp::DumpTree( xbInt16 iOption ){
- nTree->DumpNode( iOption );
-}
-
-//! Dump token
-/*!
- \param iOption - Output opton.
- \returns void.
-*/
-
-
-void xbExp::DumpToken( xbExpToken &t, xbInt16 iOption ){
-
- xbString sMsg;
- sMsg = "Processing Token";
- xbase->WriteLogMessage( sMsg.Str(), iOption );
-
- sMsg.Sprintf( "Expression = [%s]", t.sExpression.Str());
- xbase->WriteLogMessage( sMsg.Str(), iOption );
-
- sMsg.Sprintf( "Token = [%s]", t.sToken.Str());
- xbase->WriteLogMessage( sMsg.Str(), iOption );
-
- sMsg.Sprintf( "NodeType = [%c]", t.cNodeType );
- xbase->WriteLogMessage( sMsg.Str(), iOption );
-
- sMsg.Sprintf( "ReturnType = [%c]", t.cReturnType );
- xbase->WriteLogMessage( sMsg.Str(), iOption );
-
- sMsg.Sprintf( "Sts = [%d]", t.iSts );
- xbase->WriteLogMessage( sMsg.Str(), iOption );
-
- sMsg.Sprintf( "PrevNodeType = [%c]", t.cPrevNodeType );
- xbase->WriteLogMessage( sMsg.Str(), iOption );
-
- sMsg.Sprintf( "PrevReturnType = [%c]", t.cPrevReturnType );
- xbase->WriteLogMessage( sMsg.Str(), iOption );
-}
-
-#endif
-
-/*************************************************************************/
-//! Get date result.
-/*!
- If the expression generates a date return type, this method retrieves the date value.
- \param dtResult - Output date value.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbExp::GetDateResult( xbDate &dtResult ){
- if( nTree ){
- dtResult.JulToDate8( (xbInt32) nTree->GetNumericResult() );
- return XB_NO_ERROR;
- }
- else{
- //dtResult = ?;
- return XB_PARSE_ERROR;
- }
-}
-/*************************************************************************/
-//! Get bool result.
-/*!
- If the expression generates a boolean return type, this method retrieves the boolean value.
- \param bResult - Output boolean value.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbExp::GetBoolResult( xbBool &bResult){
- if( nTree ){
- bResult = nTree->GetBoolResult();
- return XB_NO_ERROR;
- }
- else{
- return XB_PARSE_ERROR;
- }
-}
-
-/*************************************************************************/
-//! Get the next node in the tree.
-/*!
- \param n Node to starting point. To get the first node of the entire tree, set n = NULL
- \returns Pointer to next node.
-*/
-
-xbExpNode *xbExp::GetNextNode( xbExpNode * n ) const {
-
- // to get the first node of the entire tree, set n = NULL
- // std::cout << "In GetNextNode\n";
-
- if( n == nTree )
- return NULL;
-
- else if( !n ){
- if( !nTree )
- return NULL;
- else
- return nTree->GetFirstNode();
- }
- return n->GetNextNode();
-}
-
-/*************************************************************************/
-//! GetNextToken
-/*! This method returns the next token in an expression of one or more tokens
- \param t Token
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbExp::GetNextToken( xbExpToken &t ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
-
- try{
- t.iSts = XB_NO_ERROR;
- t.sExpression.Ltrim();
-
- if( t.sExpression.Len() == 0 ){
- t.iSts = XB_END_OF_EXPRESSION;
- return XB_NO_ERROR;
- }
-
- // Check for date constant
- if((t.sExpression.Len() >= 10 && t.sExpression[1] == '{' && t.sExpression[4] == '/' && t.sExpression[7] == '/') &&
- (t.sExpression[10] == '}' || (t.sExpression.Len() >= 12 && t.sExpression[12] == '}'))){
- if(( iRc = GetTokenDateConstant( t )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- }
- // Check for parens
- else if( t.sExpression[1] == '(' || t.sExpression[1] == '{' ){
- if(( iRc = GetTokenParen( t )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- }
- // Check for a char constant
- else if( t.sExpression[1] == '"' || t.sExpression[1] == '\'' ){
- if(( iRc = GetTokenCharConstant( t )) != XB_NO_ERROR ){
- iErrorStop = 120;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- }
- }
- // Check for logical constant
- else if( IsLogicalConstant( t.sExpression )){
- if(( iRc = GetTokenLogicalConstant( t )) != XB_NO_ERROR ){
- iErrorStop = 130;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- }
- }
- // check for numeric constant
- else if( IsNumericConstant( t.sExpression, t.cPrevNodeType )){
- if(( iRc = GetTokenNumericConstant( t )) != XB_NO_ERROR ){
- iErrorStop = 140;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- }
- }
- // check for operator
- else if( IsOperator( t.sExpression )){
- if(( iRc = GetTokenOperator( t )) != XB_NO_ERROR ){
- iErrorStop = 150;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- }
- }
- // check for function
- else if( IsFunction( t.sExpression, t.cReturnType )){
- if(( iRc = GetTokenFunction( t )) != XB_NO_ERROR ){
- iErrorStop = 160;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- }
- }
- else if(( iRc = GetTokenDatabaseField( t )) != XB_NO_ERROR ){
- iErrorStop = 170;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- }
- }
-
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbexp::GetNextToken() Exception Caught. Error Stop = [%d] iRc = [%d] Expression = [%s]", iErrorStop, iRc, t.sExpression.Str() );sMsg.Sprintf( "xbexp::GetNextToken() Exception Caught. Error Stop = [%d] iRc = [%d] Expression = [%s]", iErrorStop, iRc, t.sExpression.Str() );sMsg.Sprintf( "xbexp::GetNextToken() Exception Caught. Error Stop = [%d] iRc = [%d] Expression = [%s]", iErrorStop, iRc, t.sExpression.Str() );sMsg.Sprintf( "xbexp::GetNextToken() Exception Caught. Error Stop = [%d] iRc = [%d] Expression = [%s]", iErrorStop, iRc, t.sExpression.Str() );
- xbase->WriteLogMessage( sMsg.Str() );
- }
- return iRc;
-}
-
-/*************************************************************************/
-//! Get numeric result.
-/*!
- If the expression generates a numeric return type, this method retrieves the numeric value.
- \param dResult - Output numeric value.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbExp::GetNumericResult( xbDouble &dResult){
- if( nTree ){
- dResult = nTree->GetNumericResult();
- return XB_NO_ERROR;
- }
- else{
- dResult = 0;
- return XB_PARSE_ERROR;
- }
-}
-/*************************************************************************/
-//! Get result length.
-/*!
- This routine returns the result length.
- \returns Result length.
-*/
-
-xbInt16 xbExp::GetResultLen() const{
- if( nTree )
- return nTree->GetResultLen();
- else
- return 0;
-}
-
-/*************************************************************************/
-//! Get return type.
-/*!
- \returns Expression return type.
-*/
-
-char xbExp::GetReturnType() const{
- if( nTree )
- return nTree->GetReturnType();
- else
- return ' ';
-}
-
-/*************************************************************************/
-//! Get string result.
-/*!
- If the expression generates a string return type, this method retrieves the string value.
- \param sResult - Output string value.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbExp::GetStringResult( xbString &sResult){
- if( nTree ){
- sResult = nTree->GetStringResult();
- return XB_NO_ERROR;
- }
- else{
- sResult = "";
- return XB_PARSE_ERROR;
- }
-}
-
-/*************************************************************************/
-//! Get string result.
-/*!
- If the expression generates a string return type, this method retrieves the string value.
- \param vpResult - Pointer to user supplied buffer for result.
- \param ulLen - Max size of buffer.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-
-xbInt16 xbExp::GetStringResult( char * vpResult, xbUInt32 ulLen ){
- if( nTree ){
- nTree->GetStringResult().strncpy((char *) vpResult, ulLen );
- return XB_NO_ERROR;
- }
- else{
- return XB_PARSE_ERROR;
- }
-}
-
-
-
-/*************************************************************************/
-//! GetTokenCharConstant
-/*! This method returns the character constant in a pair of quotes
-
- This routine returns the tokens inside a set of matching quotes in sOutToken
- If there is nothing between the quotes then sOutToken is returned empty
- sOutRemainder contains whatever remains to the right of the right quote
-
- \param t Token
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-
-*/
-
-xbInt16 xbExp::GetTokenCharConstant( xbExpToken &t ){
-
- const char *s = t.sExpression;
- const char *sToken; // pointer to beginning of token
- xbInt16 iQuoteType;
- xbUInt32 ulTokenLen = 0;
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbBool bDone = xbFalse;
-
- try{
- if( *s == '"' )
- iQuoteType = 0;
- else
- iQuoteType = 1;
- s++;
- sToken = s;
- while( *s && !bDone ){
- if(( *s == '"' && iQuoteType == 0 ) || (*s == '\'' && iQuoteType == 1 ))
- bDone = xbTrue;
- s++;
- ulTokenLen++;
- }
- if( bDone ){ // found matching paren
- t.cNodeType = XB_EXP_CONSTANT;
- t.cReturnType = XB_EXP_CHAR;
- t.sToken.Set( sToken, ulTokenLen - 1 );
- t.sExpression.Ltrunc( ulTokenLen + 1 );
- } else {
- iRc = XB_PARSE_ERROR;
- t.iSts = XB_UNBALANCED_QUOTES;
- iErrorStop = 100;
- throw iRc;
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbexp::GetTokenCharConstant() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- }
- return iRc;
-}
-
-
-/*************************************************************************/
-//! GetTokenDateConstant
-/*! This method returns the date constant in a pair of {}
-
- Date format is one of {mm/dd/yy} or {mm/dd/yyyy}
- \param t Token.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbExp::GetTokenDateConstant( xbExpToken &t ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- char wBuf[13];
- xbDate dt;
-
- try{
- memset( wBuf, 0x00, 13 );
- t.cNodeType = XB_EXP_CONSTANT;
- t.cReturnType = XB_EXP_DATE;
-
- if( t.sExpression[10] == '}' ){
- for( xbInt16 i = 0; i < 8; i++ )
- wBuf[i] = t.sExpression[i+2];
-
- if(( iRc = dt.CTOD( wBuf )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- t.sToken.Set( dt.Str() );
- t.sExpression.Ltrunc( 10 );
-
- } else if( t.sExpression[12] == '}' ){
-
- wBuf[0] = t.sExpression[8];
- wBuf[1] = t.sExpression[9];
- wBuf[2] = t.sExpression[10];
- wBuf[3] = t.sExpression[11];
- wBuf[4] = t.sExpression[2];
- wBuf[5] = t.sExpression[3];
- wBuf[6] = t.sExpression[5];
- wBuf[7] = t.sExpression[6];
-
- t.sToken.Set( wBuf );
- t.sExpression.Ltrunc( 12 );
- } else {
- iRc = XB_PARSE_ERROR;
- t.iSts = XB_INVALID_DATE;
- iErrorStop = 110;
- throw iRc;
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbexp::GetTokenDateConstant() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- }
- return iRc;
-}
-/*************************************************************************/
-//! GetTokenField
-/*! This method gets a database field token
-
- Looks for a xbase field in one of the following formats
-
- FIELDNAME
- or
- TABLENAME->FIELDNAME
-
- \param t Token.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbExp::GetTokenDatabaseField( xbExpToken &t ){
-
- const char *s = t.sExpression;
- xbUInt32 ulTokenLen = 0;
- xbUInt32 ulTokenLen2 = 0;
-
- while( *s && !IsTokenSeparator( *s ) && !IsWhiteSpace( *s )) {
- ulTokenLen++;
- s++;
- }
-
- // go past any white space
- while( *s && !IsTokenSeparator( *s ) && IsWhiteSpace( *s )) {
- ulTokenLen2++;
- s++;
- }
-
- // look for ->
- // remove the table name from before the ->
- if( strncmp( s, "->", 2 ) == 0 ){
- ulTokenLen2+=2;
- s+=2;
-
-/*
- if( strncmp( s, "->", 2 ) == 0 || strncmp( s, ".", 1 ) == 0){
- if( *s == '.' ){
- ulTokenLen2+=1;
- s+=1;
- } else {
- ulTokenLen2+=2;
- s+=2;
- }
-*/
-
- // go past white space
- while( *s && !IsTokenSeparator( *s ) && IsWhiteSpace( *s )) {
- ulTokenLen2++;
- s++;
- }
- // go to the end
- while( *s && !IsTokenSeparator( *s ) && !IsWhiteSpace( *s )) {
- ulTokenLen2++;
- s++;
- }
- ulTokenLen += ulTokenLen2;
- }
- t.cNodeType = XB_EXP_FIELD;
- t.cReturnType = XB_EXP_UNKNOWN;
- t.sToken.Set( t.sExpression, ulTokenLen );
- t.sExpression.Ltrunc( ulTokenLen );
-
- return XB_NO_ERROR;
-}
-
-/*************************************************************************/
-//! GetTokenFunction
-/*!
- This method gets a function and everything between the following quotes
- \param t Token
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-
-*/
-
-xbInt16 xbExp::GetTokenFunction( xbExpToken &t ){
-
- xbUInt32 lPos = t.sExpression.Pos( '(' );
- if( lPos == 0 )
- return XB_PARSE_ERROR;
-
- xbBool bDone = xbFalse;
- xbUInt32 lLen = t.sExpression.Len();
- xbInt16 iDepthCtr = 1;
-
- while( ++lPos <= lLen && !bDone ){
- if( t.sExpression[lPos] == ')' ){
- iDepthCtr--;
- if( iDepthCtr == 0 )
- bDone = xbTrue;
- } else if( t.sExpression[lPos] == '(' ){
- iDepthCtr++;
- }
- }
-
- t.cNodeType = XB_EXP_FUNCTION;
- t.sToken.Set( t.sExpression, lPos-1 );
- t.sExpression.Ltrunc( lPos-1 );
-
-// std::cout << "lPos = [" << lPos << "] done= [" << bDone << "][" << t.sExpression << "] len=[" << lLen << "] return type = [" << t.cReturnType << "]\n";
-
- return XB_NO_ERROR;
-}
-
-/*************************************************************************/
-//! GetTokenCharConstant
-/*! This method returns the character constant in a pair of quotes
-
- This routine returns the tokens inside a set of matching quotes in sOutToken
- If there is nothing between the quotes then sOutToken is returned empty
- sOutRemainder contains whatever remains to the right of the right quote
-
- \param t Token
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbExp::GetTokenLogicalConstant( xbExpToken &t ){
-
- t.cNodeType = XB_EXP_CONSTANT;
- t.cReturnType = XB_EXP_LOGICAL;
- t.sToken = t.sExpression[2];
-
- if( t.sExpression[3] == '.' )
- t.sExpression.Ltrunc( 3 );
- else if( t.sExpression[6] == '.' )
- t.sExpression.Ltrunc( 6 );
- else if( t.sExpression[7] == '.' )
- t.sExpression.Ltrunc( 7 );
-
- return XB_NO_ERROR;
-}
-
-
-/*************************************************************************/
-//! GetTokenNumericConstant
-/*! This method returns a numeric constant in
-
- This routine returns a numeric constant token
- sOutRemainder contains whatever remains to the right of the right quote
-
- \param t Token
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbExp::GetTokenNumericConstant( xbExpToken &t ){
-
- const char * s = t.sExpression;
- xbUInt32 ulTokenLen = 0;
- t.sToken = "";
-
- t.cNodeType = XB_EXP_CONSTANT;
- t.cReturnType = XB_EXP_NUMERIC;
-
- // capture the leading sign
- if( *s == '-' || *s == '+' || *s == '.' ){
- t.sToken = *s;
- ulTokenLen++;
- s++;
-
- // go past any white space between sign and number
- while( *s && IsWhiteSpace( *s )){
- s++;
- ulTokenLen++;
- }
- }
-
- // add the number to the token
- while( *s && (isdigit( *s ) || *s == '.' )){
- t.sToken += *s;
- s++;
- ulTokenLen++;
- }
- t.sExpression.Ltrunc( ulTokenLen );
- return XB_NO_ERROR;
-}
-
-/*************************************************************************/
-//! GetTokenOperator
-/*! This method returns the operator
-
- \param t Token
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-
-*/
-
-xbInt16 xbExp::GetTokenOperator( xbExpToken &t ){
-
- const char *s = t.sExpression;
-
- // Logical operators
- if((strncmp( s, "<>", 2 ) == 0 ) || (strncmp( s, "!=", 2 ) == 0 ) ||
- (strncmp( s, "<=", 2 ) == 0 ) || (strncmp( s, ">=", 2 ) == 0 )){
- t.cReturnType = XB_EXP_LOGICAL;
- t.sToken.Assign( s, 1, 2 );
- t.sExpression.Ltrunc( 2 );
- t.cNodeType = XB_EXP_OPERATOR;
- return XB_NO_ERROR;
- }
-
- if( *s == '=' || *s == '<' || *s == '>' || *s == '$' || *s == '#' ){
- t.cReturnType = XB_EXP_LOGICAL;
- t.sToken.Assign( s, 1, 1 );
- t.sExpression.Ltrunc( 1 );
- t.cNodeType = XB_EXP_OPERATOR;
- return XB_NO_ERROR;
- }
-
- if( (strncmp( s, ".NOT.", 5 ) == 0 ) || (strncmp( s, ".AND.", 5 ) == 0 )){
- t.cReturnType = XB_EXP_LOGICAL;
- t.sToken.Assign( s, 1, 5 );
- t.sExpression.Ltrunc( 5 );
- t.cNodeType = XB_EXP_OPERATOR;
- return XB_NO_ERROR;
- }
-
- if( (strncmp( s, "NOT ", 4 ) == 0 ) || (strncmp( s, "AND ", 4 ) == 0 )){
- t.cReturnType = XB_EXP_LOGICAL;
- t.sToken.Assign( s, 1, 3 );
- t.sExpression.Ltrunc( 3 );
- t.cNodeType = XB_EXP_OPERATOR;
- return XB_NO_ERROR;
- }
-
- if( strncmp( s, ".OR.", 4 ) == 0 ) {
- t.cReturnType = XB_EXP_LOGICAL;
- t.sToken.Assign( s, 1, 4 );
- t.sExpression.Ltrunc( 4 );
- t.cNodeType = XB_EXP_OPERATOR;
- return XB_NO_ERROR;
- }
-
- if( strncmp( s, "OR ", 3 ) == 0 ) {
- t.cReturnType = XB_EXP_LOGICAL;
- t.sToken.Assign( s, 1, 2 );
- t.sExpression.Ltrunc( 2 );
- t.cNodeType = XB_EXP_OPERATOR;
- return XB_NO_ERROR;
- }
-
- // Numeric operators
- if(( strncmp( s, "**", 2 ) == 0 ) || ( strncmp( s, "+=", 2 ) == 0 ) ||
- ( strncmp( s, "-=", 2 ) == 0 ) || ( strncmp( s, "*=", 2 ) == 0 ) || ( strncmp( s, "/=", 2 ) == 0 )){
- t.cReturnType = XB_EXP_NUMERIC;
- t.sToken.Assign( s, 1, 2 );
- t.sExpression.Ltrunc( 2 );
- t.cNodeType = XB_EXP_OPERATOR;
- return XB_NO_ERROR;
- }
-
- // Pre/post increment/decrement operators ++ or --
- if(( strncmp( s, "--", 2 ) == 0 ) || ( strncmp( s, "++", 2 ) == 0 )){
- t.cReturnType = XB_EXP_NUMERIC;
- t.sToken.Assign( s, 1, 2 );
- t.sExpression.Ltrunc( 2 );
- if( t.sExpression.Len() > 0 && (isdigit( t.sExpression[1] ) || isalpha( t.sExpression[1] )))
- t.cNodeType = XB_EXP_PRE_OPERATOR;
- else
- t.cNodeType = XB_EXP_POST_OPERATOR;
-
- return XB_NO_ERROR;
- }
-
- if( *s == '*' || *s == '/' || *s == '%' || *s == '^' ){
- t.cReturnType = XB_EXP_NUMERIC;
- t.sToken.Assign( s, 1, 1 );
- t.sExpression.Ltrunc( 1 );
- t.cNodeType = XB_EXP_OPERATOR;
- return XB_NO_ERROR;
- }
-
- // multi return type operators
- t.cReturnType = XB_EXP_UNKNOWN;
- if( *s == '+' || *s == '-' ){
- t.sToken.Assign( s, 1, 1 );
- t.sExpression.Ltrunc( 1 );
- t.cNodeType = XB_EXP_OPERATOR;
- return XB_NO_ERROR;
- }
- return XB_PARSE_ERROR;
-}
-
-/*************************************************************************/
-//! GetTokenParen
-/*! This method returns the tokens in a pair of enclosed parens
-
- This routine returns the tokens inside a set of matching parens in sOutToken
- If there is nothing between the parens then sOutToken is returned empty
- sOutRemainder contains whatever remains to the right of the right paren
-
- \param t Token
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-
-xbInt16 xbExp::GetTokenParen( xbExpToken &t ){
-
- const char * s = t.sExpression;
- const char * sToken; // pointer to beginning of token
- xbInt16 iParenType = 0;
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbInt16 iDepthCtr = 0; // depth inside of nested parens
- xbUInt32 ulTokenLen = 0;
- xbBool bDone = xbFalse;
-
- try{
- if( *s == '{' )
- iParenType = 0;
- else
- iParenType = 1;
- iDepthCtr = 1;
- s++;
- sToken = s;
-
- while( *s && !bDone ){
- if(( *s == ')' && iParenType == 1 ) || (*s == '}' && iParenType == 0 )){
- iDepthCtr--;
- if( iDepthCtr == 0 )
- bDone = xbTrue;
- } else if(( *s == '(' && iParenType == 1 ) || (*s == '{' && iParenType == 0 )){
- iDepthCtr++;
- }
- s++;
- ulTokenLen++;
- }
-
- if( bDone ){ // found matching paren
- t.cNodeType = XB_EXP_NOTROOT;
- t.cReturnType = XB_EXP_UNKNOWN;
- t.sToken.Set( sToken, ulTokenLen - 1 );
- t.sExpression.Ltrunc( ulTokenLen + 1 );
- } else {
- t.sToken = "";
- t.cNodeType = XB_EXP_NOTROOT;
- t.cReturnType = XB_EXP_UNKNOWN;
- t.iSts = XB_UNBALANCED_PARENS;
- iRc = XB_PARSE_ERROR;
- iErrorStop = 100;
- throw iRc;
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbexp::GetTokenParen() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- }
- return iRc;
-}
-
-/*************************************************************************/
-//! Get the expression tree handle.
-/*!
- \returns Pointer to the top most node in the expression tree.
-*/
-xbExpNode *xbExp::GetTreeHandle(){
- return nTree;
-}
-
-/*************************************************************************/
-//! Is Function
-/*! This method determines if the next token is a function.
-
- \param sExpression - String expression to be evaluated.
- \param cReturnType Output - Return type.
- \returns xbTrue - Is a function.<br>
- xbFalse - Is not a function.
-*/
-
-xbBool xbExp::IsFunction( const xbString & sExpression, char &cReturnType ){
-
- xbInt16 i = 0;
- xbInt32 l = 0;
- if( sExpression.Pos( '(' ) > 0 ){
- if( xbase->GetFunctionInfo( sExpression, cReturnType, i, l ) == XB_NO_ERROR )
- return xbTrue;
- }
- return xbFalse;
-}
-
-/*************************************************************************/
-//! Is Logical constant
-/*! This method determines if the next token is a logical constant (T/F, etc).
-
- \param sExpression - String expression to be evaluated.
- \returns xbTrue - Is a logical constant.<br>
- xbFalse - Is not a logical constant.
-*/
-
-xbBool xbExp::IsLogicalConstant( const xbString & sExpression ){
-
- const char *s = sExpression;
- if(( strncmp( s, ".T.", 3 ) == 0 ) || ( strncmp( s, ".F.", 3 ) == 0 ))
- return xbTrue;
- else if( strncmp( s, ".TRUE.", 6 ) == 0 )
- return xbTrue;
- else if( strncmp( s, ".FALSE.", 7 ) == 0 )
- return xbTrue;
-
- return xbFalse;
-}
-
-/*************************************************************************/
-//! Is Numeric constant
-/*! This method determines if the next token is a numeric constant.
-
- \param sExpression - String expression to be evaluated.
- \param cPrevNodeType - Type of previous node.
- \returns xbTrue - Is a numeric constant.<br>
- xbFalse - Is not a numeric constant.
-*/
-xbBool xbExp::IsNumericConstant( const xbString & sExpression, char cPrevNodeType ){
-
- // check for positive, negative or decimal number constants
-
- const char *s = sExpression;
- if(( *s == '-' && ( cPrevNodeType == 'O' || cPrevNodeType == 0 )) ||
- ( *s == '+' && ( cPrevNodeType == 'O' || cPrevNodeType == 0 ))){
- s++;
- while( *s && IsWhiteSpace( *s ))
- s++;
- }
- if( *s == '.' )
- s++;
-
- if( isdigit( *s ))
- return xbTrue;
- else
- return xbFalse;
-}
-
-/*************************************************************************/
-//! Is Operator.
-/*! This method determines if the next token is an operator.
-
- \param sExpression - String expression to be evaluated.
- \returns xbTrue - Is an operator.<br>
- xbFalse - Is not an operator.
-*/
-xbBool xbExp::IsOperator( const xbString & sExpression ){
-
- const char *s = sExpression;
- if( *s == '+' || *s == '-' || *s == '/' || *s == '^' || *s == '=' || *s == '$' ||
- *s == '#' || *s == '*' || *s == '<' || *s == '>' || *s == '%' )
- return xbTrue;
-
- if( strncmp( s, "!=", 2 ) == 0 )
- return xbTrue;
-
- if((strncmp( s, ".NOT.", 5 ) == 0 ) || (strncmp( s, ".OR.", 4 ) == 0 ) || (strncmp( s, ".AND.", 5 ) == 0 ))
- return xbTrue;
-
- if((strncmp( s, "NOT ", 4 ) == 0 ) || (strncmp( s, "OR ", 3 ) == 0 ) || (strncmp( s, "AND ", 4 ) == 0 ))
- return xbTrue;
-
- return xbFalse;
-}
-
-/*************************************************************************/
-//! Is Token seperator
-/*! This method determines if the next token is a seperator.
-
- \param sExpression - String expression to be evaluated.
- \returns xbTrue - Is a token seperator.<br>
- xbFalse - Is not a token seperator.
-*/
-char xbExp::IsTokenSeparator( char c ){
- if( c == '-' || c == '+' || c == '*' || c == '/' || c == '$' || c == '#' ||
- c == '<' || c == '>' || c == '^' || c == '=' || c == '.' || c == '!' )
- return c;
- else
- return 0;
-}
-/*************************************************************************/
-//! Is White space
-/*! This method determines if a given character is white space.
-
- \param c - Character to be evaluated.
- \returns xbTrue - Is white space.<br>
- xbFalse - Is not white space.
-*/
-xbBool xbExp::IsWhiteSpace( char c ){
- return(( c == 0x20 )? 1 : 0 );
-}
-
-/*************************************************************************/
-//! Get operator weight.
-/*!
- This method determines the priority of an operator
-
- Operator precendence
- 10 .AND. .OR. .NOT. (not really an operator)
- 9 > or < (includes <= or >=)
- 6 unary plus or minus (+,-) -- not passed this routine
- 5 prefix increment and/or decrement (++,--)
- 4 exponentiation ** or ^
- 3 multiplication,division or modulus (*,/,%)
- 2 Addition, subtraction (+,-)
- 1 Postfix increment and/or decrement (++,--)
-
- \param sOper - Operator.
- \returns Operator weight
-
-*/
-
-xbInt16 xbExp::OperatorWeight( const xbString &sOper ){
-
- if( sOper == "" || sOper.Len() > 5 )
- return 0;
-
- else if( sOper == "--0" || sOper == "++0" ) // 0 is prefix
- return 9;
- else if( sOper == "**" || sOper == "^" )
- return 8;
- else if( sOper == "*" || sOper == "/" || sOper == "%" || sOper == "*=" || sOper == "/=" )
- return 7;
- else if( sOper == "+" || sOper == "-" || sOper == "+=" || sOper == "-=" )
- return 6;
- else if( sOper == "--1" || sOper == "++1" ) // 1 is post fix
- return 5;
- else if( sOper == ">" || sOper == ">=" || sOper == "<" || sOper == "<=" ||
- sOper == "<>" || sOper == "!=" || sOper == "#" || sOper == "$" || sOper == "=" )
- return 4;
- else if( sOper == ".NOT." || sOper == "NOT" )
- return 3;
- else if( sOper == ".AND." || sOper == "AND" )
- return 2;
- else if( sOper == ".OR." || sOper == "OR" )
- return 1;
-
- return 0;
-}
-
-
-/*************************************************************************/
-//! Parse expression.
-/*!
- \param sExpression - Expression to parse.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbExp::ParseExpression( const xbString &sExpression ){
- return ParseExpression( sExpression, (xbInt16) 0 );
-}
-
-/*************************************************************************/
-//! Parse expression.
-/*!
- \param dbf - Pointer to xbDbf instance.
- \param sExpression - Expression to parse.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbExp::ParseExpression( xbDbf *dbf, const xbString &sExpression ){
- this->dbf = dbf;
- return ParseExpression( sExpression, (xbInt16) 0 );
-}
-
-/*************************************************************************/
-//! Parse expression.
-/*!
- \param sExpression - Expression to parse.
- \param iWeight.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbExp::ParseExpression( const xbString &sExpression, xbInt16 iWeight ){
-
- xbExpNode *n;
- xbExpNode *nLastNode = NULL; // pointer to the last node processed
- xbExpToken t;
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbString s;
-
- try {
-
- if( nTree )
- delete nTree;
-
- if(( iRc = CheckParensAndQuotes( sExpression )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
-
- t.sExpression = sExpression;
-
- xbString sOriginalExp;
- while( t.iSts == XB_NO_ERROR && iRc == XB_NO_ERROR ){
-
- sOriginalExp = t.sExpression; // test code
- iRc = GetNextToken( t );
- if( !iRc && !t.iSts ){
-
- // comment / uncomment debug / live
- // DumpToken( t, 0 );
-
- if( t.cNodeType == XB_EXP_NOTROOT ){
- xbExp enr( xbase, dbf );
- if(( iRc = enr.ParseExpression( t.sToken, iWeight + 10 )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- n = enr.GetTreeHandle();
- enr.ClearTreeHandle();
-
- } else {
-
- switch( t.cNodeType ) {
-
- case XB_EXP_CONSTANT:
- n = new xbExpNode( t.sToken, t.cNodeType );
- if(( iRc = ParseExpressionConstant( t, n )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- break;
-
- case XB_EXP_FUNCTION:
- n = new xbExpNode( t.cNodeType );
- if(( iRc = ParseExpressionFunction( t, n, iWeight )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- break;
-
- case XB_EXP_FIELD:
- n = new xbExpNode( t.cNodeType );
- if(( iRc = ParseExpressionField( t, n )) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
- break;
-
- case XB_EXP_OPERATOR:
- case XB_EXP_PRE_OPERATOR:
- case XB_EXP_POST_OPERATOR:
- n = new xbExpNode( t.sToken, t.cNodeType );
- if(( iRc = ParseExpressionOperator( t, n, iWeight )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
- break;
-
- default:
- iErrorStop = 160;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- // break;
- }
- }
- t.cPrevNodeType = t.cNodeType;
- t.cPrevReturnType = t.cReturnType;
-
- // determine where in the expression tree to insert the latest node "n"
- // Is this the first node to be added to the tree?
- if( !nTree ){
- nTree = n;
- }
-
- // else if last node was XB_EXB_PRE_OPERATOR then append this as child to last node
- else if( nLastNode && nLastNode->GetNodeType() == XB_EXP_PRE_OPERATOR ){
- n->SetParent( nLastNode );
- nLastNode->AddChild( n );
- }
-
- // else if last node was XB_EXB_POST_OPERATOR then append this as child to last node
- else if( nLastNode && n->GetNodeType() == XB_EXP_POST_OPERATOR ){
- n->AddChild( nLastNode );
- nLastNode->SetParent( n );
- if( nLastNode == nTree ){
- nTree = n;
- } else {
- nLastNode->GetParent()->RemoveLastChild();
- nLastNode->GetParent()->AddChild( n );
- n->SetParent( nLastNode->GetParent() );
- }
- }
-
- else if( n->GetNodeType() == XB_EXP_OPERATOR ){
- xbExpNode * nWorkNode = nLastNode;
- while( nWorkNode && ( nWorkNode->GetNodeType() != XB_EXP_OPERATOR || n->GetWeight() <= nWorkNode->GetWeight())){
- nWorkNode = nWorkNode->GetParent();
- }
-
- if( !nWorkNode ){ // we are at the top
- nTree->SetParent( n );
- n->AddChild( nTree );
- nTree = n;
-
- } else if( nWorkNode->GetChildCnt() == 1 ){
- nWorkNode->AddChild( n );
- n->SetParent( nWorkNode );
-
- } else if( nWorkNode->GetChildCnt() == 2 ){
- xbExpNode * nChild2 = nWorkNode->GetChild(1);
- n->AddChild( nChild2 );
- nWorkNode->RemoveLastChild();
- nWorkNode->AddChild( n );
- n->SetParent( nWorkNode );
-
- } else{
- // should not be stopping on anything but an operator node with one or two children
- iErrorStop = 170;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- }
- } else {
- n->SetParent( nLastNode );
- nLastNode->AddChild( n );
- }
- nLastNode = n;
- n = NULL;
- }
- }
-
- // for each node in the tree, calculate the length if it's not already set
- xbExpNode * nWork = GetNextNode( NULL );
- xbExpNode * nChild1;
- xbExpNode * nChild2;
-
- while( nWork ){
- if( nWork->GetReturnType() == XB_EXP_UNKNOWN ){
- nWork->GetNodeText( s );
-
- // std::cout << "XB_EXP_UNKNOWN logic [" << s << "][" << nWork->GetChildCnt() << "]\n";
- // if this is "-" and child 1 and child 2 are both dates, set this result type to numeric
- if( s == "-" && nWork->GetChildCnt() == 2 &&
- nWork->GetChild(0)->GetReturnType() == XB_EXP_DATE && nWork->GetChild(1)->GetReturnType() == XB_EXP_DATE )
- nWork->SetReturnType( XB_EXP_NUMERIC );
- else if( nWork->GetChildCnt() > 0 )
- nWork->SetReturnType( nWork->GetChild(0)->GetReturnType());
- else{
- iErrorStop = 180;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- }
- }
- if( nWork->GetResultLen() == 0 ){
-
- switch( nWork->GetReturnType() ){
-
- case XB_EXP_NUMERIC:
- nWork->SetResultLen( 4 );
- break;
-
- case XB_EXP_CHAR:
- if( nWork->GetNodeType() != XB_EXP_OPERATOR ){
- iErrorStop = 190;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- }
- if( nWork->GetChildCnt() < 2 ){
- iErrorStop = 200;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- }
- nChild1 = nWork->GetChild( 0 );
- nChild2 = nWork->GetChild( 1 );
- nWork->SetResultLen( nChild1->GetResultLen() + nChild2->GetResultLen());
- break;
-
- case XB_EXP_DATE:
- nWork->SetResultLen( 8 );
- break;
-
- case XB_EXP_LOGICAL:
- nWork->SetResultLen( 1 );
- break;
-
- default:
- iErrorStop = 210;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- // break;
- }
- }
- if( nWork->IsUnaryOperator() ){
- if( nWork->GetChildCnt() != 1 ){
- iErrorStop = 220;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- }
- } else if( nWork->IsOperator() && nWork->GetChildCnt() != 2 ){
- iErrorStop = 230;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- }
- nWork = GetNextNode( nWork );
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbexp::ParseExpression() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- }
- return iRc;
-}
-/*************************************************************************/
-//! Parse expression constant.
-/*!
- \param t - Token.
- \param n - Node.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbExp::ParseExpressionConstant( xbExpToken &t, xbExpNode *n ){
-
- xbDate dtWork;
- n->SetReturnType( t.cReturnType );
-
- // std::cout << "parse expression constant[" << t.sToken << "]\n";
-
- switch( t.cReturnType ){
- case XB_EXP_CHAR:
- n->SetResultLen( t.sToken.Len() );
- n->SetResult( t.sToken );
- break;
-
- case XB_EXP_DATE:
- n->SetResultLen( 8 );
- dtWork.Set( t.sToken );
- n->SetResult( dtWork );
- break;
-
- case XB_EXP_LOGICAL:
- n->SetResultLen( 1 );
- if( strncmp( t.sToken, "T", 1 ) == 0 )
- n->SetResult( (xbBool) xbTrue );
- else
- n->SetResult( (xbBool) xbFalse );
- break;
-
- case XB_EXP_NUMERIC:
- n->SetResultLen( 4 );
- n->SetResult( strtod( t.sToken, 0 ));
- n->SetResult( t.sToken );
- break;
-
- default:
- return XB_PARSE_ERROR;
- // break;
- }
- return XB_NO_ERROR;
-}
-
-/*************************************************************************/
-//! Parse expression field.
-/*!
- \param t - Token.
- \param n - Node.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbExp::ParseExpressionField( xbExpToken &t, xbExpNode *n ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbDbf * pDbf;
- xbString sFieldName;
-
- // do the db lookup and set the field number for the field
-
- try{
-
- xbUInt32 lPos;
-
- if(( lPos = t.sToken.Pos( "->" )) > 0 ){
- // table name is part of the token
- xbString sTableName = t.sToken;
- sTableName.Left( lPos-1 );
- sFieldName = t.sToken;
- sFieldName.Mid( lPos + 2, t.sToken.Len() - lPos - 1 );
- pDbf = (xbDbf *) xbase->GetDbfPtr( sTableName );
-
-
-/*
- // updated 1/2/23 to support either table.field or table->field
- if((( lPos = t.sToken.Pos( "->" )) > 0) || (( lPos = t.sToken.Pos( "." )) > 0) ){
- // table name is part of the token
- xbString sTableName = t.sToken;
- sTableName.Left( lPos-1 );
- sFieldName = t.sToken;
- if( t.sToken[lPos] == '.' )
- sFieldName.Mid( lPos + 1, t.sToken.Len() - lPos );
- else // ->
- sFieldName.Mid( lPos + 2, t.sToken.Len() - lPos - 1 );
- pDbf = (xbDbf *) xbase->GetDbfPtr( sTableName );
-*/
-
- } else {
- // table name is not part of the token
- pDbf = dbf;
- sFieldName = t.sToken;
- }
- if( !pDbf ){
- iErrorStop = 100;
- iRc = XB_INVALID_FIELD;
- throw iRc;
- }
- xbInt16 iFieldNo = 0;
-
- if(( iRc = pDbf->GetFieldNo( sFieldName, iFieldNo )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- char cFieldType;
- if(( iRc = pDbf->GetFieldType( iFieldNo, cFieldType )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- n->SetDbfInfo( pDbf, iFieldNo );
- switch( cFieldType ){
- case XB_CHAR_FLD:
- n->SetReturnType( XB_EXP_CHAR );
- break;
-
- case XB_LOGICAL_FLD:
- n->SetReturnType( XB_EXP_LOGICAL );
- break;
-
- case XB_NUMERIC_FLD:
- case XB_FLOAT_FLD:
- n->SetReturnType( XB_EXP_NUMERIC );
- break;
-
- case XB_DATE_FLD:
- n->SetReturnType( XB_EXP_DATE );
- break;
-
- case XB_MEMO_FLD:
- default:
- iErrorStop = 130;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- // break;
- }
- n->SetNodeText( sFieldName );
- xbInt16 iResultLen = 0;
- if(( iRc = pDbf->GetFieldLen( iFieldNo, iResultLen )) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
- n->SetResultLen( (xbUInt32) iResultLen );
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbexp::ParseExpressionField() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- }
- return iRc;
-}
-
-/*************************************************************************/
-//! Parse expression function.
-/*!
- \param t - Token.
- \param n - Node.
- \param iWeight
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbExp::ParseExpressionFunction( xbExpToken &t, xbExpNode *n, xbInt16 iWeight ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
-
- try{
- // find the first "("
- xbUInt32 lPos = t.sToken.Pos( '(' );
- if( lPos == 0 ){
- iErrorStop = 100;
- iRc = XB_INVALID_FUNCTION;
- throw iRc;
- }
- // Get the function name and look it up in the table
-
-
- xbString sFunc = t.sToken;
- sFunc.Left( lPos - 1 ).Trim();
- char cReturnType;
- xbInt16 i = 0;
- xbInt32 l = 0;
- if(( iRc = xbase->GetFunctionInfo( sFunc, cReturnType, i, l )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- n->SetNodeText( sFunc );
-
-
- // Get the function parms
- xbString sParms = t.sToken;
- sParms.Mid( lPos+1, t.sToken.Len() - lPos );
- lPos = sParms.GetLastPos( ')' );
- if( lPos == 0 ){
- iErrorStop = 120;
- iRc = XB_INVALID_FUNCTION;
- throw iRc;
- }
-
- // remove the trailing ")" paren
- sParms.Left( lPos - 1 ).Trim();
-
- // if this function has parms, put them in the tree
- if( sParms.Len() > 0 ){
- xbExp enr( xbase, dbf );
-
- // create a linked list of parms
- xbLinkList<xbString> llParms;
- if(( iRc = ParseExpressionFunctionParms( sParms, llParms )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
-
- // for each function parm, recursively process it
- xbLinkListNode<xbString> * llN = llParms.GetHeadNode();
- xbString sParm;
- while( llN ){
- sParm = llN->GetKey();
- if(( iRc = enr.ParseExpression( sParm, iWeight + 10 )) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
- n->AddChild( enr.GetTreeHandle());
- enr.ClearTreeHandle();
- llN = llN->GetNextNode();
- }
- llParms.Clear();
- }
-
- if( cReturnType == '1' ){
- if( n->GetChildCnt() > 0 ){
- xbExpNode *n1 = n->GetChild( 0 );
- n->SetReturnType( n1->GetReturnType());
- }
-
- } else {
- n->SetReturnType( cReturnType );
- }
-
- if(( iRc = CalcFunctionResultLen( n )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbexp::ParseExpressionFunction() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- }
- return iRc;
-}
-
-/*************************************************************************/
-//! Parse expression function.
-/*!
-
- Creates a linked list of function parms as xbStrings
- This function pulls out the parms and addresses embedded parens and quotes within the parms
-
- \param sParms
- \param lParms
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbExp::ParseExpressionFunctionParms( const xbString &sParms, xbLinkList<xbString> & llParms ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbInt16 iParenCtr = 0;
- xbInt16 iInQuotes = 0;
- xbInt16 iDoubleQuotes = 0;
- xbInt16 iSingleQuotes = 0;
- xbInt32 lStartPos = 0;
- xbInt32 lParmLen = 0;
-
- xbString sParm;
-
- try{
- const char *sp = sParms;
-
- while( *sp ){
- if( *sp == '(')
- iParenCtr++;
- else if( *sp == ')' )
- iParenCtr--;
- else if( !iInQuotes && *sp == '"' ){
- iInQuotes++;
- iDoubleQuotes++;
- } else if( iInQuotes && *sp == '"' ){
- iInQuotes--;
- iDoubleQuotes--;
- }
- else if( !iInQuotes && *sp == '\'' ){
- iInQuotes++;
- iSingleQuotes++;
- } else if( iInQuotes && *sp == '\'' ){
- iInQuotes--;
- iSingleQuotes--;
-
- } else if( !iInQuotes && !iParenCtr && *sp == ',' ){
- // found a valid comma - at the end of a parm
- // add it to the end of the linked list
- sParm = sParms;
- sParm.Mid( (xbUInt32) lStartPos + 1, (xbUInt32) lParmLen ).Trim(); // mid is one based
- llParms.InsertAtEnd( sParm );
-
- // set the start pos for the next one on the list
- lStartPos += lParmLen + 1;
- lParmLen = -1;
- // lParmLen = 0;
- }
- lParmLen++;
- sp++;
- }
- if( lParmLen > 0 ){
- // get the last parm, it didn't end with a comma
- sParm = sParms;
- sParm.Mid( (xbUInt32) lStartPos + 1, (xbUInt32) lParmLen ).Trim();
- llParms.InsertAtEnd( sParm );
- }
-
- }
- // try / catch not used in this method, structure added for potential future use
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbexp::ParseExpressionFunctionParms() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- }
- return iRc;
-}
-/*************************************************************************/
-//! Parse expression operator.
-/*!
- \param t - Token.
- \param n - Node.
- \param iWeight
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbExp::ParseExpressionOperator( xbExpToken &t, xbExpNode *n, xbInt16 iWeight ){
-
- n->SetResult( t.sToken );
- n->SetWeight( iWeight + OperatorWeight( t.sToken) );
-
-// std::cout << "ParseExpressionOperator [" << t.cPrevNodeType << "][" << t.sToken << "] Weight = [" << iWeight;
-// std::cout << "] PrevReturnType [" << t.cPrevReturnType;
-// std::cout << "] Operator weight [" << OperatorWeight( t.sToken ) << "] getweight [" << n->GetWeight() << "]\n";
-
- if( t.sToken == "**" || t.sToken == "^" ||
- t.sToken == "*" || t.sToken == "/" || t.sToken == "%" || t.sToken == "*=" || t.sToken == "/=" )
- n->SetReturnType( XB_EXP_NUMERIC );
-
- else if( t.sToken == "--" || t.sToken == "++" || t.sToken == "+=" || t.sToken == "-=" ) // could be date or numeric
- n->SetReturnType( XB_EXP_UNKNOWN );
-
- else if( t.cPrevReturnType == XB_EXP_CHAR && ( t.sToken == "+" || t.sToken == "-" ))
- n->SetReturnType( XB_EXP_CHAR );
-
- else if( t.sToken == ".AND." || t.sToken == ".OR." || t.sToken == ".NOT." ||
- t.sToken == "AND" || t.sToken == "OR" || t.sToken == "NOT" ||
- t.sToken == ">" || t.sToken == ">=" || t.sToken == "<" ||
- t.sToken == "<=" || t.sToken == "<>" || t.sToken == "!=" ||
- t.sToken == "$" || t.sToken == "#" || t.sToken == "=" )
- n->SetReturnType( XB_EXP_LOGICAL );
-
-
- else if( t.cPrevReturnType == XB_EXP_UNKNOWN )
- n->SetReturnType( XB_EXP_UNKNOWN );
-
- // added for date constant logic 10/28/17
- else if(( t.sToken == "+" || t.sToken == "-" ) && t.cPrevReturnType == XB_EXP_DATE )
- n->SetReturnType( XB_EXP_DATE );
-
- else if( t.sToken == "+" || t.sToken == "-" )
- n->SetReturnType( XB_EXP_NUMERIC );
-
- return XB_NO_ERROR;
-}
-
-
-/************************************************************************/
-//! ProcessExpression
-/*! This method processes an expression tree leaving the result in the
- root node of the tree
-*/
-xbInt16 xbExp::ProcessExpression(){
- return ProcessExpression( 0 );
-}
-/************************************************************************/
-//! ProcessExpression
-/*! This method processes a parsed expression tree leaving the result in the
- root node of the tree
- \param iRecBufSw Record buffer to use when evaluating expression.<br>
- 0 - Current record buffer.<br>
- 1 - Original record buffer.
-*/
-
-xbInt16 xbExp::ProcessExpression( xbInt16 iRecBufSw ){
-
-// iRecBufSw 0 - Record Buffer
-// 1 - Original Record Buffer
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
-
- try{
-
- xbExpNode * nWork = GetNextNode( NULL );
- xbExpNode * nChild1;
- xbDbf * dbf;
- xbString sWork1;
- xbString sWork2;
- xbString sOperator;
- xbDate dtWork1;
-
- xbBool bWork;
- xbDouble dWork;
-
- while( nWork ){
- switch( nWork->GetNodeType() ){
-
- case XB_EXP_CONSTANT:
- break;
-
- case XB_EXP_PRE_OPERATOR: // increment value before setting in head node
- if( nWork->GetChildCnt() != 1 ){
- iErrorStop = 100;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- }
- nChild1 = nWork->GetChild( 0 );
- //if( nChild1->GetReturnType() == XB_EXP_DATE )
- // nChild1->SetResult( (xbDouble) nChild1->GetDateResult().JulianDays());
-
- nWork->GetNodeText( sWork1 );
- if( sWork1 == "++" )
- nChild1->SetResult( nChild1->GetNumericResult() + 1 );
- else
- nChild1->SetResult( nChild1->GetNumericResult() - 1 );
-
- nWork->SetResult( nChild1->GetNumericResult());
-
- //if( nChild1->GetReturnType() == XB_EXP_DATE ){
- // dtWork1.JulToDate8( (xbInt32) nChild1->GetNumericResult());
- // nChild1->SetResult( dtWork1 );
- // nWork->SetResult( dtWork1 );
- // }
- break;
-
- case XB_EXP_POST_OPERATOR: // increment value after setting in head node
- if( nWork->GetChildCnt() != 1 ){
- iErrorStop = 110;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- }
- nChild1 = nWork->GetChild( 0 );
- //if( nChild1->GetReturnType() == XB_EXP_DATE ){
- // nWork->SetResult( nChild1->GetDateResult());
- // nChild1->SetResult( (xbDouble) nChild1->GetDateResult().JulianDays());
- //}
- //else
- nWork->SetResult( nChild1->GetNumericResult());
-
- nWork->GetNodeText( sWork1 );
- if( sWork1 == "++" )
- nChild1->SetResult( nChild1->GetNumericResult() + 1 );
- else
- nChild1->SetResult( nChild1->GetNumericResult() - 1 );
-
- //if( nChild1->GetReturnType() == XB_EXP_DATE ){
- // dtWork1.JulToDate8( (xbInt32) nChild1->GetNumericResult());
- // nChild1->SetResult( dtWork1 );
- // }
- break;
-
- case XB_EXP_FIELD:
-
- if(( dbf = nWork->GetDbf()) == NULL ){
- iErrorStop = 120;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- }
- switch( nWork->GetReturnType()){
- case XB_EXP_CHAR:
- if(( iRc = dbf->GetField( nWork->GetFieldNo(), sWork1, iRecBufSw )) < XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- nWork->SetResult( sWork1 );
- break;
-
- case XB_EXP_DATE:
-
- if(( iRc = dbf->GetField( nWork->GetFieldNo(), sWork1, iRecBufSw )) < XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
- if( sWork1 == " " ){
- nWork->SetResult( (xbDouble) 21474835648 ); // dbase sets a date value in ndx to this if spaces on dbf record
- } else {
- dtWork1.Set( sWork1 );
- nWork->SetResult( (xbDouble) dtWork1.JulianDays() );
- }
- break;
-
- case XB_EXP_LOGICAL:
- if(( iRc = dbf->GetLogicalField( nWork->GetFieldNo(), bWork, iRecBufSw )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
- nWork->SetResult( bWork );
- break;
-
- case XB_EXP_NUMERIC:
- if(( iRc = dbf->GetDoubleField( nWork->GetFieldNo(), dWork, iRecBufSw )) != XB_NO_ERROR ){
- iErrorStop = 160;
- throw iRc;
- }
- nWork->SetResult( dWork );
- break;
-
- default:
- iErrorStop = 170;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- // break;
- }
- break;
-
-
- case XB_EXP_OPERATOR:
- if(( iRc = ProcessExpressionOperator( nWork )) != XB_NO_ERROR ){
- iErrorStop = 180;
- throw iRc;
- }
-
- break;
-
- case XB_EXP_FUNCTION:
- if(( iRc = ProcessExpressionFunction( nWork, iRecBufSw )) != XB_NO_ERROR ){
- iErrorStop = 190;
- throw iRc;
- }
- break;
-
- default:
- iErrorStop = 200;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- // break;
- }
- nWork = GetNextNode( nWork );
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbexp::ProcessExpression() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- }
- return iRc;
-}
-/*************************************************************************/
-//! ProcessExpression
-/*! This method processes an expression tree for a given node.
-*/
-
-xbInt16 xbExp::ProcessExpressionFunction( xbExpNode * n, xbInt16 iRecBufSw ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
-
- try{
-
- xbString sFunction;
- xbString sResult;
- xbDouble dResult;
- xbDate dtResult;
- xbBool bResult;
-
- n->GetNodeText( sFunction );
-
- // process functions with no children first
- xbExpNode * nChild1;
- if( n->GetChildCnt() == 0 ){
- if( sFunction == "DATE" ){
- if(( iRc = xbase->DATE( dtResult )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- n->SetResult( dtResult );
- } else if( sFunction == "DEL" ){
- if(( iRc = xbase->DEL( dbf, sResult, iRecBufSw )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- n->SetResult( sResult );
- } else if( sFunction == "DELETED" ){
- if(( iRc = xbase->DELETED( dbf, bResult, iRecBufSw )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- n->SetResult( bResult );
- } else if( sFunction == "RECCOUNT" ){
- if(( iRc = xbase->RECCOUNT( dbf, dResult )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- n->SetResult( dResult );
- } else if( sFunction == "RECNO" ){
- if(( iRc = xbase->RECNO( dbf, dResult )) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
- n->SetResult( dResult );
- }
- // process functions with one child
- } else if( n->GetChildCnt() == 1 ){
-
- nChild1 = n->GetChild( 0 );
-
- if( sFunction == "ABS" ){
- if(( iRc = xbase->ABS( nChild1->GetNumericResult(), dResult )) != XB_NO_ERROR ){
- iErrorStop = 200;
- throw iRc;
- }
- n->SetResult( dResult );
- } else if( sFunction == "ALLTRIM" ){
- if(( iRc = xbase->ALLTRIM( nChild1->GetStringResult(), sResult )) != XB_NO_ERROR ){
- iErrorStop = 210;
- throw iRc;
- }
- n->SetResult( sResult );
- } else if( sFunction == "ASC" ){
- if(( iRc = xbase->ASC( nChild1->GetStringResult(), dResult )) != XB_NO_ERROR ){
- iErrorStop = 220;
- throw iRc;
- }
- n->SetResult( dResult );
- } else if( sFunction == "CDOW" ){
- xbDate d( (xbInt32) nChild1->GetNumericResult());
- if(( iRc = xbase->CDOW( d, sResult )) != XB_NO_ERROR ){
- iErrorStop = 230;
- throw iRc;
- }
- n->SetResult( sResult );
- } else if( sFunction == "CHR" ){
- if(( iRc = xbase->CHR( nChild1->GetNumericResult(), sResult )) != XB_NO_ERROR ){
- iErrorStop = 240;
- throw iRc;
- }
- n->SetResult( sResult );
- } else if( sFunction == "CMONTH" ){
- xbDate d( (xbInt32) nChild1->GetNumericResult());
- if(( iRc = xbase->CMONTH( d, sResult )) != XB_NO_ERROR ){
- iErrorStop = 250;
- throw iRc;
- }
- n->SetResult( sResult );
- } else if( sFunction == "CTOD" ){
- if(( iRc = xbase->CTOD( nChild1->GetStringResult(), dtResult )) != XB_NO_ERROR ){
- iErrorStop = 260;
- throw iRc;
- }
- n->SetResult( dtResult );
- } else if( sFunction == "DAY" ){
- xbDate d( (xbInt32) nChild1->GetNumericResult());
- if(( iRc = xbase->DAY( d, dResult )) != XB_NO_ERROR ){
- iErrorStop = 270;
- throw iRc;
- }
- n->SetResult( dResult );
- } else if( sFunction == "DESCEND" ){
-
- if( n->GetReturnType() == XB_EXP_CHAR ){
- if(( iRc = xbase->DESCEND( nChild1->GetStringResult(), sResult )) != XB_NO_ERROR ){
- iErrorStop = 280;
- throw iRc;
- }
- n->SetResult( sResult );
-
- } else if( n->GetReturnType() == XB_EXP_DATE ){
- xbDate d( (xbInt32) nChild1->GetNumericResult());
- if(( iRc = xbase->DESCEND( d, dtResult )) != XB_NO_ERROR ){
- iErrorStop = 290;
- throw iRc;
- }
- n->SetResult( dtResult );
-
- } else if( n->GetReturnType() == XB_EXP_NUMERIC ){
- if(( iRc = xbase->DESCEND( nChild1->GetNumericResult(), dResult )) != XB_NO_ERROR ){
- iErrorStop = 300;
- throw iRc;
- }
- n->SetResult( dResult );
-
- } else {
- iErrorStop = 310;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- }
-
- } else if( sFunction == "DOW" ){
- xbDate d( (xbInt32) nChild1->GetNumericResult());
- if(( iRc = xbase->DOW( d, dResult )) != XB_NO_ERROR ){
- iErrorStop = 320;
- throw iRc;
- }
- n->SetResult( dResult );
- } else if( sFunction == "DTOC" ){
- xbDate d( (xbInt32) nChild1->GetNumericResult());
- if(( iRc = xbase->DTOC( d, sResult )) != XB_NO_ERROR ){
- iErrorStop = 330;
- throw iRc;
- }
- n->SetResult( sResult );
- } else if( sFunction == "DTOS" ){
- xbDate d( (xbInt32) nChild1->GetNumericResult());
- if(( iRc = xbase->DTOS( d, sResult )) != XB_NO_ERROR ){
- iErrorStop = 340;
- throw iRc;
- }
- n->SetResult( sResult );
- } else if( sFunction == "EXP" ){
- if(( iRc = xbase->EXP( nChild1->GetNumericResult(), dResult )) != XB_NO_ERROR ){
- iErrorStop = 350;
- throw iRc;
- }
- n->SetResult( dResult );
- } else if( sFunction == "INT" ){
- if(( iRc = xbase->INT( nChild1->GetNumericResult(), dResult )) != XB_NO_ERROR ){
- iErrorStop = 360;
- throw iRc;
- }
- n->SetResult( dResult );
- } else if( sFunction == "ISALPHA" ){
- if(( iRc = xbase->ISALPHA( nChild1->GetStringResult(), bResult )) != XB_NO_ERROR ){
- iErrorStop = 370;
- throw iRc;
- }
- n->SetResult( bResult );
- } else if( sFunction == "ISLOWER" ){
- if(( iRc = xbase->ISLOWER( nChild1->GetStringResult(), bResult )) != XB_NO_ERROR ){
- iErrorStop = 380;
- throw iRc;
- }
- n->SetResult( bResult );
- } else if( sFunction == "ISUPPER" ){
- if(( iRc = xbase->ISUPPER( nChild1->GetStringResult(), bResult )) != XB_NO_ERROR ){
- iErrorStop = 390;
- throw iRc;
- }
- n->SetResult( bResult );
- } else if( sFunction == "LEN" ){
- if(( iRc = xbase->LEN( nChild1->GetStringResult(), dResult )) != XB_NO_ERROR ){
- iErrorStop = 400;
- throw iRc;
- }
- n->SetResult( dResult );
- } else if( sFunction == "LOG" ){
- if(( iRc = xbase->LOG( nChild1->GetNumericResult(), dResult )) != XB_NO_ERROR ){
- iErrorStop = 410;
- throw iRc;
- }
- n->SetResult( dResult );
- } else if( sFunction == "LTRIM" ){
- if(( iRc = xbase->LTRIM( nChild1->GetStringResult(), sResult )) != XB_NO_ERROR ){
- iErrorStop = 420;
- throw iRc;
- }
- n->SetResult( sResult );
- } else if( sFunction == "LOWER" ){
- if(( iRc = xbase->LOWER( nChild1->GetStringResult(), sResult )) != XB_NO_ERROR ){
- iErrorStop = 430;
- throw iRc;
- }
- n->SetResult( sResult );
- } else if( sFunction == "MONTH" ){
- xbDate d( (xbInt32) nChild1->GetNumericResult());
- if(( iRc = xbase->MONTH( d, dResult )) != XB_NO_ERROR ){
- iErrorStop = 440;
- throw iRc;
- }
- n->SetResult( dResult );
- } else if( sFunction == "RTRIM" ){
- if(( iRc = xbase->RTRIM( nChild1->GetStringResult(), sResult )) != XB_NO_ERROR ){
- iErrorStop = 450;
- throw iRc;
- }
- n->SetResult( sResult );
- } else if( sFunction == "STOD" ){
- if(( iRc = xbase->STOD( nChild1->GetStringResult(), dtResult )) != XB_NO_ERROR ){
- iErrorStop = 460;
- throw iRc;
- }
- n->SetResult( dtResult );
- } else if( sFunction == "SPACE" ){
- if(( iRc = xbase->SPACE( (xbInt32) nChild1->GetNumericResult(), sResult )) != XB_NO_ERROR ){
- iErrorStop = 470;
- throw iRc;
- }
- n->SetResult( sResult );
- } else if( sFunction == "SQRT" ){
- if(( iRc = xbase->SQRT( nChild1->GetNumericResult(), dResult )) != XB_NO_ERROR ){
- iErrorStop = 480;
- throw iRc;
- }
- n->SetResult( dResult );
- } else if( sFunction == "STR" ){
- if(( iRc = xbase->STR( nChild1->GetNumericResult(), sResult )) != XB_NO_ERROR ){
- iErrorStop = 490;
- throw iRc;
- }
- n->SetResult( sResult );
- } else if( sFunction == "TRIM" ){
- if(( iRc = xbase->TRIM( nChild1->GetStringResult(), sResult )) != XB_NO_ERROR ){
- iErrorStop = 500;
- throw iRc;
- }
- n->SetResult( sResult );
- } else if( sFunction == "UPPER" ){
- if(( iRc = xbase->UPPER( nChild1->GetStringResult(), sResult )) != XB_NO_ERROR ){
- iErrorStop = 510;
- throw iRc;
- }
- n->SetResult( sResult );
- } else if( sFunction == "VAL" ){
- if(( iRc = xbase->VAL( nChild1->GetStringResult(), dResult )) != XB_NO_ERROR ){
- iErrorStop = 520;
- throw iRc;
- }
- n->SetResult( dResult );
- } else if( sFunction == "YEAR" ){
- xbDate d( (xbInt32) nChild1->GetNumericResult());
- if(( iRc = xbase->YEAR( d, dResult )) != XB_NO_ERROR ){
- iErrorStop = 530;
- throw iRc;
- }
- n->SetResult( dResult );
- } else {
- iErrorStop = 540;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- }
- } else if( n->GetChildCnt() == 2 ){
- xbExpNode * nChild2;
- nChild1 = n->GetChild( 0 );
- nChild2 = n->GetChild( 1 );
-
- if( sFunction == "AT" ){
- if(( iRc = xbase->AT( nChild1->GetStringResult(), nChild2->GetStringResult(), dResult )) != XB_NO_ERROR ){
- iErrorStop = 700;
- throw iRc;
- }
- n->SetResult( dResult );
- } else if( sFunction == "LEFT" ){
- if(( iRc = xbase->LEFT( nChild1->GetStringResult(), (xbUInt32) nChild2->GetNumericResult(), sResult )) != XB_NO_ERROR ){
- iErrorStop = 710;
- throw iRc;
- }
- n->SetResult( sResult );
- } else if( sFunction == "MAX" ){
- if(( iRc = xbase->MAX( nChild1->GetNumericResult(), nChild2->GetNumericResult(), dResult )) != XB_NO_ERROR ){
- iErrorStop = 720;
- throw iRc;
- }
- n->SetResult( dResult );
- } else if( sFunction == "MIN" ){
- if(( iRc = xbase->MIN( nChild1->GetNumericResult(), nChild2->GetNumericResult(), dResult )) != XB_NO_ERROR ){
- iErrorStop = 730;
- throw iRc;
- }
- n->SetResult( dResult );
- }
- else if( sFunction == "REPLICATE" ){
- if(( iRc = xbase->REPLICATE( nChild1->GetStringResult(), (xbUInt32) nChild2->GetNumericResult(), sResult )) != XB_NO_ERROR ){
- iErrorStop = 800;
- throw iRc;
- }
- n->SetResult( sResult );
- } else if( sFunction == "RIGHT" ){
- if(( iRc = xbase->RIGHT( nChild1->GetStringResult(), (xbUInt32) nChild2->GetNumericResult(), sResult )) != XB_NO_ERROR ){
- iErrorStop = 810;
- throw iRc;
- }
- n->SetResult( sResult );
- } else if( sFunction == "STR" ){
- if(( iRc = xbase->STR( nChild1->GetNumericResult(), (xbUInt32) nChild2->GetNumericResult(), sResult )) != XB_NO_ERROR ){
- iErrorStop = 820;
- throw iRc;
- }
- n->SetResult( sResult );
- } else {
- iErrorStop = 830;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- }
- } else if( n->GetChildCnt() == 3 ){
- xbExpNode * nChild2;
- xbExpNode * nChild3;
- nChild1 = n->GetChild( 0 );
- nChild2 = n->GetChild( 1 );
- nChild3 = n->GetChild( 2 );
-
- if( sFunction == "IIF" ){
- if(( iRc = xbase->IIF( nChild1->GetBoolResult(), nChild2->GetStringResult(), nChild3->GetStringResult(), sResult )) != XB_NO_ERROR ){
- iErrorStop = 900;
- throw iRc;
- }
- n->SetResult( sResult );
- } else if( sFunction == "STR" ){
- if(( iRc = xbase->STR( nChild1->GetNumericResult(), (xbUInt32) nChild2->GetNumericResult(), (xbUInt32) nChild3->GetNumericResult(), sResult )) != XB_NO_ERROR ){
- iErrorStop = 910;
- throw iRc;
- }
- n->SetResult( sResult );
- } else if( sFunction == "STRZERO" ){
- if(( iRc = xbase->STRZERO( nChild1->GetNumericResult(), (xbUInt32) nChild2->GetNumericResult(), (xbUInt32) nChild3->GetNumericResult(), sResult )) != XB_NO_ERROR ){
- iErrorStop = 920;
- throw iRc;
- }
- n->SetResult( sResult );
- } else if( sFunction == "SUBSTR" ){
- if(( iRc = xbase->SUBSTR( nChild1->GetStringResult(), (xbUInt32) nChild2->GetNumericResult(), (xbUInt32) nChild3->GetNumericResult(), sResult )) != XB_NO_ERROR ){
- iErrorStop = 930;
- throw iRc;
- }
- n->SetResult( sResult );
- } else {
- iErrorStop = 950;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- }
- } else if( n->GetChildCnt() == 4 ){
- xbExpNode * nChild2;
- xbExpNode * nChild3;
- xbExpNode * nChild4;
- nChild1 = n->GetChild( 0 );
- nChild2 = n->GetChild( 1 );
- nChild3 = n->GetChild( 2 );
- nChild4 = n->GetChild( 3 );
-
- if( sFunction == "STR" ){
- if(( iRc = xbase->STR( nChild1->GetNumericResult(), (xbUInt32) nChild2->GetNumericResult(),
- (xbUInt32) nChild3->GetNumericResult(), nChild4->GetStringResult(), sResult )) != XB_NO_ERROR ){
- iErrorStop = 1000;
- throw iRc;
- }
- n->SetResult( sResult );
- } else {
- iErrorStop = 1010;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- }
-
- } else {
- iErrorStop = 2000;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- }
-
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbexp::ProcessExpressionFunction() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- }
- return iRc;
-}
-/*************************************************************************/
-//! Process Expression Operator
-/*! This method processes an expression operator for a given node.
-*/
-
-xbInt16 xbExp::ProcessExpressionOperator( xbExpNode * n ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
-
- xbExpNode * nChild1 = NULL;
- xbExpNode * nChild2 = NULL;
- xbString sOperator;
- xbString sWork1;
- xbString sWork2;
- xbDate dtWork1;
-
- xbString sMsg;
-
- try{
-
- n->GetNodeText( sOperator );
- nChild1 = n->GetChild( 0 );
- if( !n->IsUnaryOperator())
- nChild2 = n->GetChild( 1 );
-
- switch( n->GetReturnType()){
- case XB_EXP_CHAR:
- if( sOperator == "+" ){
- sWork1 = nChild1->GetStringResult();
- sWork1 += nChild2->GetStringResult();
- n->SetResult( sWork1 );
- } else if( sOperator == "-" ){
- sWork1 = nChild1->GetStringResult();
- sWork1.Rtrim();
- sWork1 += nChild2->GetStringResult();
- sWork1.PadRight( ' ', n->GetResultLen());
- n->SetResult( sWork1 );
- } else {
- iErrorStop = 100;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- }
- break;
-
- case XB_EXP_NUMERIC:
- if( sOperator == "+" )
- n->SetResult( nChild1->GetNumericResult() + nChild2->GetNumericResult());
- else if( sOperator == "-" ){
- n->SetResult( nChild1->GetNumericResult() - nChild2->GetNumericResult());
-
- }
- else if( sOperator == "*" )
- n->SetResult( nChild1->GetNumericResult() * nChild2->GetNumericResult());
- else if( sOperator == "/" )
- n->SetResult( nChild1->GetNumericResult() / nChild2->GetNumericResult());
- else if( sOperator == "^" || sOperator == "**" )
- n->SetResult( pow( nChild1->GetNumericResult(), nChild2->GetNumericResult()));
- else if( sOperator == "+=" ){
- n->SetResult( nChild1->GetNumericResult() + nChild2->GetNumericResult());
- nChild1->SetResult( n->GetNumericResult() );
- }
- else if( sOperator == "-=" ){
- n->SetResult( nChild1->GetNumericResult() - nChild2->GetNumericResult());
- nChild1->SetResult( n->GetNumericResult() );
- }
- else if( sOperator == "*=" ){
- n->SetResult( nChild1->GetNumericResult() * nChild2->GetNumericResult());
- nChild1->SetResult( n->GetNumericResult() );
- }
- else if( sOperator == "/=" ){
- n->SetResult( nChild1->GetNumericResult() / nChild2->GetNumericResult());
- nChild1->SetResult( n->GetNumericResult() );
- } else {
- iErrorStop = 200;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- }
- break;
-
-
- case XB_EXP_DATE:
- // if date values in the leaf nodes, convert to numeric for operator logic
-
- if( sOperator == "+" )
- n->SetResult( nChild1->GetNumericResult() + nChild2->GetNumericResult());
- else if( sOperator == "-" ){
- n->SetResult( nChild1->GetNumericResult() - nChild2->GetNumericResult());
- xbDate d( (xbInt32) n->GetNumericResult());
- }
- else if( sOperator == "+=" ){
- n->SetResult( nChild1->GetNumericResult() + nChild2->GetNumericResult());
- nChild1->SetResult( n->GetNumericResult() );
- }
- else if( sOperator == "-=" ){
- n->SetResult( nChild1->GetNumericResult() - nChild2->GetNumericResult());
- nChild1->SetResult( n->GetNumericResult() );
- } else {
- iErrorStop = 300;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- }
- break;
-
- case XB_EXP_LOGICAL:
-
- if( !n->IsUnaryOperator() && (nChild1->GetReturnType() != nChild2->GetReturnType())){
- iErrorStop = 400;
- iRc = XB_INCOMPATIBLE_OPERANDS;
- throw iRc;
- }
-
- if( sOperator == ".AND." || sOperator == "AND" )
- n->SetResult((xbBool) (nChild1->GetBoolResult() && nChild2->GetBoolResult()) );
-
- else if( sOperator == ".OR." || sOperator == "OR" )
- n->SetResult((xbBool) (nChild1->GetBoolResult() || nChild2->GetBoolResult()) );
-
- else if( sOperator == ".NOT." || sOperator == "NOT" ){
- if( nChild1->GetBoolResult())
- n->SetResult((xbBool) xbFalse );
- else
- n->SetResult((xbBool) xbTrue );
- }
-
- else if( sOperator == ">" ){
-
- if( nChild1->GetReturnType() == XB_EXP_CHAR )
- n->SetResult((xbBool)(nChild1->GetStringResult() > nChild2->GetStringResult()));
- else if( nChild1->GetReturnType() == XB_EXP_NUMERIC || nChild1->GetReturnType() == XB_EXP_DATE )
- n->SetResult((xbBool)(nChild1->GetNumericResult() > nChild2->GetNumericResult()));
-
- else {
- iErrorStop = 410;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- }
- }
-
- else if( sOperator == ">=" ){
- if( nChild1->GetReturnType() == XB_EXP_CHAR )
- n->SetResult((xbBool)(nChild1->GetStringResult() >= nChild2->GetStringResult()));
-
- else if( nChild1->GetReturnType() == XB_EXP_NUMERIC || nChild1->GetReturnType() == XB_EXP_DATE )
- n->SetResult((xbBool)(nChild1->GetNumericResult() >= nChild2->GetNumericResult()));
-
- else {
- iErrorStop = 420;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- }
- }
-
- else if( sOperator == "<" ){
-
- if( nChild1->GetReturnType() == XB_EXP_CHAR )
- n->SetResult((xbBool)( nChild1->GetStringResult() < nChild2->GetStringResult()));
-
- else if( nChild1->GetReturnType() == XB_EXP_NUMERIC || nChild1->GetReturnType() == XB_EXP_DATE )
- n->SetResult((xbBool)( nChild1->GetNumericResult() < nChild2->GetNumericResult()));
-
- else {
- iErrorStop = 430;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- }
- }
-
- else if( sOperator == "<=" ){
-
- if( nChild1->GetReturnType() == XB_EXP_CHAR )
- n->SetResult((xbBool)( nChild1->GetStringResult() <= nChild2->GetStringResult()));
-
- else if( nChild1->GetReturnType() == XB_EXP_NUMERIC || nChild1->GetReturnType() == XB_EXP_DATE )
- n->SetResult((xbBool)( nChild1->GetNumericResult() <= nChild2->GetNumericResult()));
-
- else {
- iErrorStop = 440;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- }
- }
-
- else if( sOperator == "<>" || sOperator == "#" || sOperator == "!=" ){
-
- if( nChild1->GetReturnType() == XB_EXP_CHAR )
- n->SetResult((xbBool)( nChild1->GetStringResult() != nChild2->GetStringResult()));
-
- else if( nChild1->GetReturnType() == XB_EXP_NUMERIC || nChild1->GetReturnType() == XB_EXP_DATE )
- n->SetResult((xbBool)( nChild1->GetNumericResult() != nChild2->GetNumericResult()));
-
- else {
- iErrorStop = 450;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- }
- }
-
- else if( sOperator == "$" ){
- if( nChild1->GetReturnType() == XB_EXP_CHAR )
- if( nChild2->GetStringResult().Pos( nChild1->GetStringResult()) > 0 )
- n->SetResult((xbBool) xbTrue );
- else
- n->SetResult((xbBool) xbFalse );
- else {
- iErrorStop = 460;
- iRc = XB_INCOMPATIBLE_OPERANDS;
- throw iRc;
- }
- }
-
- else if( sOperator == "=" ){
-
- if( nChild1->GetReturnType() == XB_EXP_CHAR ){
- xbString sChld1 = nChild1->GetStringResult();
- xbString sChld2 = nChild2->GetStringResult();
- sChld1.Rtrim();
- sChld2.Rtrim();
- n->SetResult((xbBool)( sChld1 == sChld2 ));
-
- } else if( nChild1->GetReturnType() == XB_EXP_NUMERIC || nChild1->GetReturnType() == XB_EXP_DATE )
- n->SetResult((xbBool)( nChild1->GetNumericResult() == nChild2->GetNumericResult()));
-
- else {
- iErrorStop = 470;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- }
-
- } else {
- iErrorStop = 500;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- }
-
- break;
-
- default:
- iErrorStop = 600;
- iRc = XB_PARSE_ERROR;
- throw iRc;
- // break;
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbexp::ProcessExpressionOperator() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- }
- return iRc;
-}
-
-/*************************************************************************/
-}; // namespace
-#endif // XB_EXPRESSION_SUPPORT
-/*************************************************************************/
diff --git a/src/core/xbexpnode.cpp b/src/core/xbexpnode.cpp
deleted file mode 100755
index 77a8c33..0000000
--- a/src/core/xbexpnode.cpp
+++ /dev/null
@@ -1,562 +0,0 @@
-/* xbexpnode.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2017,2022 Gary A Kunkel
-
-The xb64 software library is covered under
-the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-#include "xbase.h"
-
-#ifdef XB_EXPRESSION_SUPPORT
-
-namespace xb{
-/************************************************************************/
-//! @brief Constructor
-xbExpNode::xbExpNode(){
- sNodeText = "";
- cReturnType = 0;
- cNodeType = 0;
- dResult = 0;
- iFieldNo = 0;
- ulResultLen = 0;
- iWeight = 0;
- nParent = NULL;
- dbf = NULL;
-}
-
-/************************************************************************/
-//! @brief Constructor
-/*!
- \param sNodeText Node text.
- \param cReturnType Return type.
- \param cNodeType Node type.
-*/
-
-xbExpNode::xbExpNode( xbString &sNodeText, char cReturnType, char cNodeType ){
- this->sNodeText = sNodeText;
- this->cReturnType = cReturnType;
- this->cNodeType = cNodeType;
- dResult = 0;
- iFieldNo = 0;
- ulResultLen = 0;
- iWeight = 0;
- nParent = NULL;
- dbf = NULL;
-}
-
-/************************************************************************/
-//! @brief Constructor
-/*!
- \param sNodeText Node text.
- \param cNodeType Node type.
-*/
-xbExpNode::xbExpNode( xbString &sNodeText, char cNodeType ){
- this->sNodeText = sNodeText;
- this->cReturnType = 0x00;
- this->cNodeType = cNodeType;
- dResult = 0;
- iFieldNo = 0;
- ulResultLen = 0;
- iWeight = 0;
- nParent = NULL;
- dbf = NULL;
-}
-
-/************************************************************************/
-//! @brief Constructor
-/*!
- \param cNodeType Node type.
-*/
-xbExpNode::xbExpNode( char cNodeType ){
- this->cReturnType = 0x00;
- this->cNodeType = cNodeType;
- dResult = 0;
- iFieldNo = 0;
- ulResultLen = 0;
- iWeight = 0;
- nParent = NULL;
- dbf = NULL;
-}
-
-/************************************************************************/
-//! @brief Deconstructor
-xbExpNode::~xbExpNode(){
-
- xbExpNode * n;
- while( llChildren.GetNodeCnt() > 0 ){
- llChildren.RemoveFromFront( n );
- delete n;
- }
-}
-
-/************************************************************************/
-//! @brief Add child node to linked list.
-/*!
- \param n Pointer to node to add to linked list.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbExpNode::AddChild( xbExpNode *n ){
- n->SetParent( this );
- return llChildren.InsertAtEnd( n );
-}
-
-/************************************************************************/
-#ifdef XB_DEBUG_SUPPORT
-
-//! @brief Dump Node.
-/*!
- \param iOption xbTrue - Print child info if they exist.<bt>
- xbFalse - Don't print child info.
- \returns void.
-*/
-void xbExpNode::DumpNode( xbInt16 iOption ) const {
- xbString sMsg;
- std::cout << "Me=[" << this << "] ";
- if( nParent )
- std::cout << "Par=[" << nParent << "] ";
-
- std::cout << "nTyp=[" << cNodeType << "] ";
- std::cout << "dTyp=[" << cReturnType << "] ";
- if( iWeight != 0 )
- std::cout << "W=[" << iWeight << "] ";
-
- if( cNodeType == XB_EXP_FIELD )
- std::cout << "FieldNo=[" << iFieldNo << "] ";
-
- std::cout << "Txt=[" << sNodeText << "] ";
- if( sResult != "" )
- std::cout << "sVal=[" << sResult << "] ";
-
- if( ulResultLen > 0 )
- std::cout << "Len=[" << ulResultLen << "] ";
- if( cReturnType == XB_EXP_DATE ){
- xbDate d( (xbInt32) dResult );
- std::cout << "dtVal=[" << d.Str() << "] ";
- }
-
- if( cReturnType == XB_EXP_DATE || cReturnType == XB_EXP_NUMERIC ){
- sMsg.Sprintf( "dVal=[%f]\n", dResult );
- std::cout << sMsg.Str();
- }
-
- if( cReturnType == XB_EXP_LOGICAL ){
- sMsg.Sprintf( "lVal=[%d]\n", (xbInt32) dResult );
- std::cout << sMsg.Str();
- }
-
- if( iOption ){
- xbLinkListNode<xbExpNode *> *lln = llChildren.GetHeadNode();
- xbExpNode *n;
- if( lln ){
- std::cout << " Children: ";
- while( lln ){
- n = lln->GetKey();
- std::cout << " [" << n << "]";
- lln = lln->GetNextNode();
- }
- std::cout << std::endl;
-
- lln = llChildren.GetHeadNode();
- while( lln ){
- n = lln->GetKey();
- n->DumpNode( iOption );
- lln = lln->GetNextNode();
- }
- }
- }
-
- std::cout << std::endl;
-}
-#endif
-
-/************************************************************************/
-//! @brief Get boolean result.
-/*!
- \returns Boolean result.
-*/
-
-xbBool xbExpNode::GetBoolResult() const {
- return (xbBool) dResult;
-}
-
-/************************************************************************/
-//! @brief Get pointer to child.
-/*!
- \param ulChildNo - Which child? 1,2 or3
- \returns Pointer to child node or null if none exists.
-*/
-xbExpNode *xbExpNode::GetChild( xbUInt32 ulChildNo ) const {
-
- xbLinkListNode<xbExpNode *> *lln = llChildren.GetNodeForNo( ulChildNo );
- if( lln )
- return lln->GetKey();
- else
- return 0x00;
-}
-/************************************************************************/
-//! @brief Get child count.
-/*!
- \returns Child count.
-*/
-xbUInt32 xbExpNode::GetChildCnt() const{
- return llChildren.GetNodeCnt();
-}
-
-/************************************************************************/
-//! @brief Get the current child number for this node.
-/*!
- \returns Child number: 1, 2 or 3.
-*/
-
-xbUInt32 xbExpNode::GetChildNo() const {
-
- if( !nParent )
- return 0;
-
- for( xbUInt32 i = 0; i < nParent->GetChildCnt(); i++ ){
- if( this == nParent->GetChild( i )){
- // std::cout << "get child no [" << this << "][" << nParent->GetChild(i) << "]\n";
- return i;
- }
- }
- return 0;
-}
-
-/************************************************************************/
-//! @brief Get the dbf pointer.
-/*!
- \returns Pointer to dbf.
-*/
-xbDbf *xbExpNode::GetDbf() const {
- return dbf;
-}
-/************************************************************************/
-//! @brief Get the field number.
-/*!
- \returns Field number for field node.
-*/
-
-xbInt16 xbExpNode::GetFieldNo() const {
- return iFieldNo;
-}
-
-/*************************************************************************/
-//! @brief Get the first node.
-/*!
- \returns Pointer to left most child node or *this if childless.
-*/
-
-xbExpNode *xbExpNode::GetFirstNode() {
- xbExpNode *n = this;
- while( n && n->GetChildCnt() > 0 )
- n = n->GetChild(0);
- return n;
-}
-
-/*************************************************************************/
-//! @brief Get the next node.
-/*!
- \returns Pointer to right node or parent if right node does not exist.
-*/
-
-xbExpNode *xbExpNode::GetNextNode() const {
-
- if( HasRightSibling())
- return GetRightSibling()->GetFirstNode();
- else
- return nParent;
-}
-
-/************************************************************************/
-//! @brief Get the node text.
-/*!
- \param sOutText Output string containing node text.
- \returns void
-*/
-
-void xbExpNode::GetNodeText( xbString &sOutText ) const{
- sOutText = sNodeText;
-}
-
-/************************************************************************/
-//! @brief Get the node type.
-/*!
- \returns Node type.
-*/
-
-char xbExpNode::GetNodeType() const{
- return cNodeType;
-}
-
-/************************************************************************/
-//! @brief Get numeric result.
-/*!
- \returns Numeric result.
-*/
-
-xbDouble xbExpNode::GetNumericResult() const {
- return dResult;
-}
-
-/************************************************************************/
-//! @brief Get parent.
-/*!
- \returns Pointer to parent node.
-*/
-
-xbExpNode *xbExpNode::GetParent() const{
- return nParent;
-}
-
-/************************************************************************/
-//! @brief Get result length.
-/*!
- \returns Result length.
-*/
-xbUInt32 xbExpNode::GetResultLen() const{
- return ulResultLen;
-}
-/************************************************************************/
-//! @brief Get result type.
-/*!
- \returns Result type.
-*/
-char xbExpNode::GetReturnType() const{
- return cReturnType;
-}
-
-/*************************************************************************/
-//! @brief Get right sibling.
-/*!
- \returns Pointer to right sibling.
-*/
-
-xbExpNode *xbExpNode::GetRightSibling() const {
-
- xbExpNode * nParent;
- if(( nParent = GetParent()) == NULL )
- return NULL;
-
- if( nParent->GetChildCnt() <= 0 )
- return NULL;
-
- xbUInt32 ulChildNo = GetChildNo();
-
- if( ulChildNo < (nParent->GetChildCnt() - 1))
- return nParent->GetChild( ulChildNo + 1 );
- else
- return NULL;
-}
-/************************************************************************/
-//! @brief Get string result.
-/*!
- \returns String result.
-*/
-xbString &xbExpNode::GetStringResult(){
- return sResult;
-}
-/************************************************************************/
-//! @brief Get node weight.
-/*!
- Each node is assigned a weight used internally to detmerine processing sequence.
- \returns Node weight.
-*/
-
-xbInt16 xbExpNode::GetWeight() const {
- return iWeight;
-}
-
-/*************************************************************************/
-//! @brief Determine if node has a right sibling.
-/*!
- \returns xbTrue - Node has right sibling.<br>
- xbFalse - Node has no right sibling.
-*/
-
-xbBool xbExpNode::HasRightSibling() const {
-
- // std::cout << "in HasRightSibling [" << sNodeText << "]\n";
-
- if( nParent == NULL )
- return xbFalse;
-
- xbUInt32 ulChildNo = GetChildNo();
-
- if( ulChildNo < (nParent->GetChildCnt() - 1)){
- // std::cout << "Has Right Sibling = " << iChildNo << "] of [" << nParent->GetChildCnt() << "]\n";
- return xbTrue;
-}
- else
- return xbFalse;
-}
-
-
-/*************************************************************************/
-//! @brief Determine if node is an operator.
-/*!
- \returns xbTrue - Node is an operator.<br>
- xbFalse - Node is not an operator.
-*/
-
-xbBool xbExpNode::IsOperator() const {
-
- if( cNodeType == XB_EXP_OPERATOR )
- return xbTrue;
- else
- return xbFalse;
-}
-
-/*************************************************************************/
-//! @brief Determine if node is a unary operator.
-/*!
- \returns xbTrue - Node is a unary operator.<br>
- xbFalse - Node is not a unary operator.
-*/
-xbBool xbExpNode::IsUnaryOperator() const {
-
- if( cNodeType == XB_EXP_PRE_OPERATOR || cNodeType == XB_EXP_POST_OPERATOR )
- return xbTrue;
- else if( cNodeType == XB_EXP_OPERATOR && (sNodeText == ".NOT." || sNodeText == "NOT" ))
- return xbTrue;
- else
- return xbFalse;
-}
-/************************************************************************/
-//! @brief Remove last child from node.
-/*!
- \returns void.
-*/
-
-void xbExpNode::RemoveLastChild(){
- xbExpNode *n;
- llChildren.RemoveFromEnd( n );
-}
-
-/************************************************************************/
-//! @brief Set dbf info on node.
-/*!
- \param dbf Pointer to dbf.
- \param iFieldNo Field number of field.
- \returns void.
-*/
-void xbExpNode::SetDbfInfo( xbDbf *dbf, xbInt16 iFieldNo ){
- this->dbf = dbf;
- this->iFieldNo = iFieldNo;
-}
-
-/************************************************************************/
-//! @brief Set dbf info on node.
-/*!
- \param dbf Pointer to dbf.
- \returns void.
-*/
-void xbExpNode::SetDbfInfo( xbDbf *dbf ){
- this->dbf = dbf;
-}
-/************************************************************************/
-//! @brief Set node type.
-/*!
- \param cNodeType Node type.
- \returns void.
-*/
-void xbExpNode::SetNodeType( char cNodeType ){
- this->cNodeType = cNodeType;
-}
-
-/************************************************************************/
-//! @brief Set node text.
-/*!
- \param sNodeText Node text.
- \returns void.
-*/
-void xbExpNode::SetNodeText( xbString & sNodeText ){
- this->sNodeText = sNodeText;
-}
-
-/************************************************************************/
-//! @brief Set parent.
-/*!
- \param n Pointer to parent.
- \returns void.
-*/
-void xbExpNode::SetParent( xbExpNode *n ){
- this->nParent = n;
-}
-
-/************************************************************************/
-//! @brief Set date result.
-/*!
- \param dtResult Date result.
- \returns void.
-*/
-void xbExpNode::SetResult( xbDate &dtResult ){
- this->dResult = dtResult.JulianDays();
-}
-
-/************************************************************************/
-//! @brief Set boolean result.
-/*!
- \param bResult Boolean result.
- \returns void.
-*/
-void xbExpNode::SetResult( xbBool bResult ){
- this->dResult = bResult;
-}
-/************************************************************************/
-//! @brief Set numeric result.
-/*!
- \param dResult Double numeric result.
- \returns void.
-*/
-void xbExpNode::SetResult( xbDouble dResult ){
- this->dResult = dResult;
-}
-/************************************************************************/
-//! @brief Set string result.
-/*!
- \param sResult String result.
- \returns void.
-*/
-void xbExpNode::SetResult( xbString &sResult ){
- this->sResult = sResult;
-}
-/************************************************************************/
-//! @brief Set result length.
-/*!
- \param ulResultLen Set result length.
- \returns void.
-*/
-void xbExpNode::SetResultLen( xbUInt32 ulResultLen ){
- this->ulResultLen = ulResultLen;
-}
-/************************************************************************/
-//! @brief Set return type.
-/*!
- \param cReturnType Return Type.
- \returns void.
-*/
-void xbExpNode::SetReturnType( char cReturnType ){
- this->cReturnType = cReturnType;
-}
-/************************************************************************/
-//! @brief Set weight.
-/*!
- \param iWeight Weight to set this node at.
- \returns void.
-*/
-void xbExpNode::SetWeight( xbInt16 iWeight ){
- this->iWeight = iWeight;
-}
-/*************************************************************************/
-}; // namespace
-#endif // XB_EXPRESSION_SUPPORT
-/*************************************************************************/
diff --git a/src/core/xbfields.cpp b/src/core/xbfields.cpp
deleted file mode 100755
index e683d9c..0000000
--- a/src/core/xbfields.cpp
+++ /dev/null
@@ -1,1130 +0,0 @@
-/* xbfields.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-#include "xbase.h"
-
-namespace xb{
-
-/************************************************************************/
-//! @brief Get xbDouble field for field name.
-/*!
- \param sFieldName Name of field to retrieve.
- \param dFieldValue Output field value.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-
-xbInt16 xbDbf::GetDoubleField( const xbString &sFieldName, xbDouble &dFieldValue ) const {
- return GetDoubleField( GetFieldNo( sFieldName ), dFieldValue );
-}
-
-/************************************************************************/
-//! @brief Get xbDouble field for field number.
-/*!
- \param iFieldNo Number of field to retrieve.
- \param dFieldValue Output field value.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-xbInt16 xbDbf::GetDoubleField( xbInt16 iFieldNo, xbDouble &dFieldValue ) const {
- xbInt16 iRc = XB_NO_ERROR;
- char buf[21];
- memset( buf, 0x00, 21 );
- if(( iRc = GetRawField( iFieldNo, buf, 21, 0 )) >= XB_NO_ERROR ){
- dFieldValue = strtod( buf, NULL );
- return XB_NO_ERROR;
- } else
- return iRc;
-}
-/************************************************************************/
-//! @brief Get xbDouble field for field number.
-/*!
- \param iFieldNo Number of field to retrieve.
- \param dFieldValue Output field value.
- \param iRecBufSw 0 - Record buffer with any updates.<br>1 - Record buffer with original data.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-
-xbInt16 xbDbf::GetDoubleField( xbInt16 iFieldNo, xbDouble &dFieldValue, xbInt16 iRecBufSw ) const {
- xbInt16 iRc = XB_NO_ERROR;
- char buf[21];
- memset( buf, 0x00, 21 );
- if(( iRc = GetRawField( iFieldNo, buf, 21, iRecBufSw )) >= XB_NO_ERROR ){
- dFieldValue = strtod( buf, NULL );
- return XB_NO_ERROR;
- } else
- return iRc;
-}
-
-/************************************************************************/
-//! @brief Get xbDate field for field number.
-/*!
- \param iFieldNo Number of field to retrieve.
- \param dtFieldValue Output field value.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-
-xbInt16 xbDbf::GetDateField( xbInt16 iFieldNo, xbDate &dtFieldValue ) const{
- xbString s;
- xbInt16 iRc;
- if(( iRc = GetField( iFieldNo, s )) != XB_NO_ERROR )
- return iRc;
- dtFieldValue.Set( s );
- return XB_NO_ERROR;
-}
-
-/************************************************************************/
-//! @brief Get xbDate field for field name.
-/*!
- \param sFieldName Name of field to retrieve.
- \param dtFieldValue Output field value.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-
-xbInt16 xbDbf::GetDateField( const xbString &sFieldName, xbDate &dtFieldValue ) const{
- xbString s;
- xbInt16 iRc;
- if(( iRc = GetField( sFieldName, s )) != XB_NO_ERROR )
- return iRc;
- dtFieldValue.Set( s );
- return XB_NO_ERROR;
-}
-
-/************************************************************************/
-//! @brief Get xbString field for field name.
-/*!
- \param sFieldName Name of field to retrieve
- \param sFieldValue Output field value.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-
-xbInt16 xbDbf::GetField( const xbString &sFieldName, xbString &sFieldValue ) const{
- return GetField( GetFieldNo( sFieldName ), sFieldValue, 0 );
-}
-/************************************************************************/
-//! @brief Get field data for field number.
-/*!
- \param iFieldNo Number of field to retrieve.
- \param sFieldValue Output field value.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-
-xbInt16 xbDbf::GetField( xbInt16 iFieldNo, xbString &sFieldValue ) const{
- return GetField( iFieldNo, sFieldValue, 0 );
-}
-/************************************************************************/
-//! @brief Get field data for field number.
-/*!
- \param iFieldNo Number of field to retrieve.
- \param sFieldValue Output field value.
- \param iRecBufSw 0 - Record buffer with any updates.<br>1 - Record buffer with original data.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-
-xbInt16 xbDbf::GetField( xbInt16 iFieldNo, xbString &sFieldValue, xbInt16 iRecBufSw) const
-{
- xbUInt32 iLen;
- if( iFieldNo < 0 || iFieldNo >= iNoOfFields ) {
- sFieldValue = "";
- return XB_INVALID_FIELD_NO;
- }
- iLen = SchemaPtr[iFieldNo].cFieldLen;
- sFieldValue = "";
- if( iRecBufSw )
- sFieldValue.Append( (char *) SchemaPtr[iFieldNo].pAddress2, iLen ); // original record buffer
- else
- sFieldValue.Append( (char *) SchemaPtr[iFieldNo].pAddress, iLen ); // current record buffer
- return XB_NO_ERROR;
-}
-
-/************************************************************************/
-//! @brief Get decimal for field name.
-/*!
- This routine retreives a field's decimal length.
- \param sFieldName Name of field to retrieve
- \param iFieldDecimal Output field value.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-
-xbInt16 xbDbf::GetFieldDecimal( const xbString &sFieldName, xbInt16 & iFieldDecimal ) const {
- return GetFieldDecimal( GetFieldNo( sFieldName ), iFieldDecimal );
-}
-
-
-/************************************************************************/
-//! @brief Get decimal for field number.
-/*!
- This routine retreives a field's decimal length.
- \param iFieldNo Number of field to retrieve
- \param iFieldDecimal Output field value.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-
-xbInt16 xbDbf::GetFieldDecimal( xbInt16 iFieldNo, xbInt16 & iFieldDecimal ) const {
-
- if( iFieldNo < 0 || iFieldNo >= iNoOfFields ) {
- return XB_INVALID_FIELD_NO;
- }
- iFieldDecimal = SchemaPtr[iFieldNo].cNoOfDecs;
- return XB_NO_ERROR;
-}
-
-/************************************************************************/
-//! @brief Get field length for field name.
-/*!
-
- This function retrieves a field's length.
-
- \param sFieldName Name of field to retrieve
- \param iFieldLen Output field length value.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-
-xbInt16 xbDbf::GetFieldLen( const xbString &sFieldName, xbInt16 &iFieldLen ) const {
- return GetFieldLen( GetFieldNo( sFieldName ), iFieldLen );
-}
-
-
-/************************************************************************/
-//! @brief Get field length for field number.
-/*!
- This function retrieves a field's length.
-
- \param iFieldNo Name of field to retrieve
- \param iFieldLen Output field length value.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-
-xbInt16 xbDbf::GetFieldLen( xbInt16 iFieldNo, xbInt16 &iFieldLen ) const {
- if( iFieldNo >= 0 && iFieldNo < iNoOfFields ){
- iFieldLen = SchemaPtr[iFieldNo].cFieldLen;
- return XB_NO_ERROR;
- } else
- return XB_INVALID_FIELD_NO;
-}
-
-/************************************************************************/
-//! @brief Get the field number for name.
-/*! Returns the field number for the named field.
-
- All field get/put methods require either a field number or field name as
- one of the parameters. Using the methods that take the field numbers will
- yield slightly better performance because the methods that take a name, have
- to look up the number.
-
- \param sFieldName Name of field.
- \param iFieldNo Output field number for the given name.
- \returns Number of field named fldName.
-*/
-
-xbInt16 xbDbf::GetFieldNo( const xbString & sFieldName, xbInt16 &iFieldNo ) const
-{
- int i;
-
- if( sFieldName.Len() > 10 )
- return XB_INVALID_FIELD_NAME;
-
- for( i = 0; i < iNoOfFields; i++ ){
- if( sFieldName == SchemaPtr[i].cFieldName ){
- iFieldNo = i;
- return XB_NO_ERROR;
- }
- }
- return XB_INVALID_FIELD_NAME;
-}
-
-/************************************************************************/
-//! Get field ID number for a given field name.
-/*! Returns the field number for the named field.
-
- \param sFieldName Name of field.
- \returns Number of field or XB_INVALID_FIELD_NAME.
-*/
-
-xbInt16 xbDbf::GetFieldNo( const xbString &sFieldName ) const {
- int i;
-
- if( sFieldName.Len() > 10 )
- return XB_INVALID_FIELD_NAME;
-
- for( i = 0; i < iNoOfFields; i++ ){
- if( sFieldName == SchemaPtr[i].cFieldName )
- return i;
- }
- return XB_INVALID_FIELD_NAME;
-}
-
-/************************************************************************/
-//! Get field type for field number.
-/*!
- \param iFieldNo Field number.
- \param cFieldType Output field type.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-xbInt16 xbDbf::GetFieldType( xbInt16 iFieldNo, char & cFieldType ) const{
-
- if( iFieldNo >= 0 && iFieldNo < iNoOfFields ){
- cFieldType = SchemaPtr[iFieldNo].cType;
- return XB_NO_ERROR;
- }
- else
- return XB_INVALID_FIELD_NO;
-}
-
-/************************************************************************/
-//! Get field type for field name.
-/*!
- \param sFieldName Field name.
- \param cFieldType Output field type.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-
-xbInt16 xbDbf::GetFieldType( const xbString &sFieldName, char & cFieldType ) const{
- return( GetFieldType( GetFieldNo( sFieldName ), cFieldType));
-}
-
-/************************************************************************/
-//! @brief Returns the name of the specified field.
-/*! Returns a pointer to the name for the field specified by iFieldNo.
-
- \param iFieldNo Number of field.
- \param sFieldName Output variable containing the field name.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-xbInt16 xbDbf::GetFieldName( xbInt16 iFieldNo, xbString &sFieldName ) const{
- if( iFieldNo >= 0 && iFieldNo < iNoOfFields ){
- sFieldName = SchemaPtr[iFieldNo].cFieldName;
- return XB_NO_ERROR;
- }
- else
- return XB_INVALID_FIELD_NO;
-}
-
-/************************************************************************/
-//! @brief Get xbFloat field for field number.
-/*!
- \param iFieldNo Number of field to retrieve.
- \param fFieldValue Output field value.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-xbInt16 xbDbf::GetFloatField( xbInt16 iFieldNo, xbFloat & fFieldValue ) const {
-
- char cFieldType;
- xbInt16 rc = GetFieldType( iFieldNo, cFieldType );
- if( rc < 0 )
- return rc;
-
- if( cFieldType != 'N' && cFieldType != 'F' )
- return XB_INVALID_FIELD_TYPE;
-
- xbString sTemp;
- rc = GetField( iFieldNo, sTemp, 0 );
- if( rc < 0 )
- return rc;
-
- fFieldValue = (xbFloat) atof( sTemp.Str());
- return XB_NO_ERROR;
-}
-
-
-/************************************************************************/
-//! @brief Get xbFloat field for field name.
-/*!
- \param sFieldName Number of field to retrieve.
- \param fFieldValue Output field value.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-
-xbInt16 xbDbf::GetFloatField( const xbString & sFieldName, xbFloat & fFieldValue ) const {
- return GetFloatField( GetFieldNo(sFieldName ), fFieldValue );
-}
-
-/************************************************************************/
-//! @brief Get logical field for field number.
-/*!
- \param iFieldNo Number of field to retrieve.
- \param sFieldValue Output field value.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-xbInt16 xbDbf::GetLogicalField( xbInt16 iFieldNo, xbString &sFieldValue ) const {
-
- char cFieldType;
- xbInt16 iRc = GetFieldType( iFieldNo, cFieldType );
- if( iRc < 0 )
- return iRc;
- else if( cFieldType != 'L' )
- return XB_INVALID_FIELD_TYPE;
-
- if(( iRc = GetField( iFieldNo, sFieldValue )) < XB_NO_ERROR )
- return iRc;
- else
- return XB_NO_ERROR;
-}
-
-/************************************************************************/
-//! @brief Get logical field for field name.
-/*!
- \param sFieldName Name of field to retrieve.
- \param sFieldValue Output field value.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-
-xbInt16 xbDbf::GetLogicalField( const xbString &sFieldName, xbString &sFieldValue ) const {
- return GetLogicalField( GetFieldNo( sFieldName ), sFieldValue );
-}
-
-
-/************************************************************************/
-//! @brief Get logical field for field number.
-/*!
- \param iFieldNo Number of field to retrieve.
- \param bFieldValue Output field value.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-
-xbInt16 xbDbf::GetLogicalField( xbInt16 iFieldNo, xbBool &bFieldValue ) const {
- return GetLogicalField( iFieldNo, bFieldValue, 0 );
-}
-
-/************************************************************************/
-//! @brief Get logical field for field number.
-/*!
- \param iFieldNo Number of field to retrieve.
- \param bFieldValue Output field value.
- \param iRecBufSw 0 - Record buffer with any updates.<br>1 - Record buffer with original data.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-
-xbInt16 xbDbf::GetLogicalField( xbInt16 iFieldNo, xbBool &bFieldValue, xbInt16 iRecBufSw ) const {
-
- char cFieldType;
- xbInt16 iRc = GetFieldType( iFieldNo, cFieldType );
- if((iRc = GetFieldType( iFieldNo, cFieldType )) != XB_NO_ERROR )
- return iRc;
-
- if( cFieldType != 'L' )
- return XB_INVALID_FIELD_TYPE;
-
- xbString sFieldValue;
- if(( iRc = GetField( iFieldNo, sFieldValue, iRecBufSw )) < XB_NO_ERROR )
- return iRc;
-
- if( sFieldValue == 'T' || sFieldValue == 't' || sFieldValue == 'Y' || sFieldValue == 'y' )
- bFieldValue = xbTrue;
- else
- bFieldValue = xbFalse;
-
- return XB_NO_ERROR;
-}
-
-/************************************************************************/
-//! @brief Get logical field for field name.
-/*!
- \param sFieldName Name of field to retrieve.
- \param bFieldValue Output field value.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-xbInt16 xbDbf::GetLogicalField( const xbString &sFieldName, xbBool &bFieldValue ) const {
- return GetLogicalField( GetFieldNo( sFieldName ), bFieldValue );
-}
-/************************************************************************/
-//! @brief Get long field for field number.
-/*!
- \param iFieldNo Number of field to retrieve.
- \param lFieldValue Output field value.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-xbInt16 xbDbf::GetLongField( xbInt16 iFieldNo, xbInt32 & lFieldValue ) const {
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
- char cFieldType;
- xbString sTemp;
-
- try{
-
- if(( iRc = GetFieldType( iFieldNo, cFieldType )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
-
- if( cFieldType != 'N' && cFieldType != 'F' && cFieldType != 'M' ){
- iErrorStop = 110;
- iRc = XB_INVALID_FIELD_TYPE;
- throw iRc;
- }
-
- if(( iRc = GetField( iFieldNo, sTemp, 0 )) < 0 ){
- iErrorStop = 120;
- throw iRc;
- }
- sTemp.Trim();
-
- if( !sTemp.ValidNumericValue() ){
- iErrorStop = 130;
- iRc = XB_INVALID_DATA;
- throw iRc;
- }
-
- if( sTemp.Pos( '.' ) > 0){
- iErrorStop = 140;
- iRc = XB_INVALID_DATA;
- throw iRc;
- }
-
- lFieldValue = atol( sTemp.Str());
- }
-
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbDbf::GetLongField() Exception Caught. Error Stop = [%d] rc = [%d] [%s]", iErrorStop, iRc, sTemp.Str() );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
-
- return XB_NO_ERROR;
-}
-
-/************************************************************************/
-#ifdef XB_MEMO_SUPPORT
-//! @brief Get memo field for field number.
-/*!
- \param iFieldNo Number of field to retrieve.
- \param sMemoValue Output field value.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-xbInt16 xbDbf::GetMemoField( xbInt16 iFieldNo, xbString &sMemoValue ){
- return Memo->GetMemoField( iFieldNo, sMemoValue );
-}
-/************************************************************************/
-//! @brief Get memo field for field name.
-/*!
-
- \param sFieldName Name of field to retrieve.
- \param sMemoValue Output field value.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-xbInt16 xbDbf::GetMemoField( const xbString & sFieldName, xbString & sMemoValue ){
- return Memo->GetMemoField( GetFieldNo( sFieldName ), sMemoValue );
-}
-
-/************************************************************************/
-//! @brief Get the memo field count for this table.
-/*!
- \returns Returns the number of memo fields in the table,
-*/
-xbInt16 xbDbf::GetMemoFieldCnt() const {
- return iMemoFieldCnt;
-}
-/************************************************************************/
-//! @brief Get memo field length for field number.
-/*!
- \param iFieldNo Number of field to retrieve.
- \param ulMemoFieldLen Output memo field value length.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-
-xbInt16 xbDbf::GetMemoFieldLen( xbInt16 iFieldNo, xbUInt32 & ulMemoFieldLen ){
- return Memo->GetMemoFieldLen( iFieldNo, ulMemoFieldLen );
-}
-/************************************************************************/
-//! @brief Get memo field length for field name.
-/*!
- \param sFieldName Name of field to retrieve.
- \param ulMemoFieldLen Output memo field value length.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-xbInt16 xbDbf::GetMemoFieldLen( const xbString &sFieldName, xbUInt32 &ulMemoFieldLen ){
- return Memo->GetMemoFieldLen( GetFieldNo( sFieldName ), ulMemoFieldLen );
-}
-
-#endif // XB_MEMO_SUPPORT
-
-/************************************************************************/
-//! @brief Get unsigned long field for field number.
-/*!
- \param iFieldNo Number of field to retrieve.
- \param ulFieldValue Output field value.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-xbInt16 xbDbf::GetULongField( xbInt16 iFieldNo, xbUInt32 & ulFieldValue ) const {
-
- xbInt16 rc = 0;
- xbInt16 iErrorStop = 0;
- char cFieldType;
-
- try{
-
- if(( rc = GetFieldType( iFieldNo, cFieldType )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw rc;
- }
-
- if( cFieldType != 'N' && cFieldType != 'F' && cFieldType != 'M' ){
- iErrorStop = 110;
- rc = XB_INVALID_FIELD_TYPE;
- throw rc;
- }
-
- xbString sTemp;
- if(( rc = GetField( iFieldNo, sTemp, 0 )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw rc;
- }
- sTemp.Trim();
- if( !sTemp.ValidNumericValue() || ((int) sTemp.Pos( '.' ) > 0)){
- iErrorStop = 130;
- rc = XB_INVALID_DATA;
- throw rc;
- }
- ulFieldValue = strtoul( sTemp.Str(), NULL, 10 );
- }
-
- catch (xbInt16 rc ){
- xbString sMsg;
- sMsg.Sprintf( "xbDbf::GetULongField() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( rc ));
- }
-
- return XB_NO_ERROR;
-}
-
-/************************************************************************/
-//! @brief Get long field for field name.
-/*!
- \param sFieldName Number of field to retrieve.
- \param lFieldValue Output field value.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-
-xbInt16 xbDbf::GetLongField( const xbString &sFieldName, xbInt32 &lFieldValue ) const {
- return GetLongField( GetFieldNo( sFieldName ), lFieldValue );
-}
-
-/************************************************************************/
-//! @brief Get unsigned long field for field name.
-/*!
- \param sFieldName Number of field to retrieve.
- \param ulFieldValue Output field value.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-
-xbInt16 xbDbf::GetULongField( const xbString &sFieldName, xbUInt32 &ulFieldValue ) const {
- return GetULongField( GetFieldNo( sFieldName ), ulFieldValue );
-}
-
-/************************************************************************/
-//! @brief Get raw field data for field number.
-/*!
-
- This is a protected method, used by other methods. This method would be
- subject to buffer overflows if made public.
-
- \param iFieldNo Number of field to retrieve.
- \param cBuf Pointer to buffer area provided by calling application program.
- \param ulBufSize Size of data to copy
- \param iRecBufSw 0 - Record buffer with any updates.<br>1 - Record buffer with original data.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-
-
-xbInt16 xbDbf::GetRawField( xbInt16 iFieldNo, char *cBuf, xbUInt32 ulBufSize, xbInt16 iRecBufSw ) const
-{
- if( iFieldNo < 0 || iFieldNo >= iNoOfFields ) {
- return XB_INVALID_FIELD_NO;
- }
-
- size_t stCopySize;
- if( ulBufSize > (size_t) (SchemaPtr[iFieldNo].cFieldLen ))
- stCopySize = (size_t) (SchemaPtr[iFieldNo].cFieldLen );
- else
- stCopySize = ulBufSize - 1;
-
- if( iRecBufSw )
- memcpy( cBuf, SchemaPtr[iFieldNo].pAddress2, stCopySize );
- else
- memcpy( cBuf, SchemaPtr[iFieldNo].pAddress, stCopySize );
-
- cBuf[stCopySize] = 0x00;
- return XB_NO_ERROR;
-}
-
-
-/************************************************************************/
-//! @brief Put double field for field name.
-/*!
- \param sFieldName Name of field to update.
- \param dFieldValue Field value.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-xbInt16 xbDbf::PutDoubleField( const xbString &sFieldName, xbDouble dFieldValue ){
- return PutDoubleField( GetFieldNo( sFieldName ), dFieldValue );
-}
-
-/************************************************************************/
-//! @brief Put double field for field number.
-/*!
- \param iFieldNo Number of field to update.
- \param dFieldValue Field value.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-
-xbInt16 xbDbf::PutDoubleField( xbInt16 iFieldNo, xbDouble dFieldValue ){
-
- xbInt16 rc;
- xbString sDoubleFmt;
- xbString sDoubleFmt2;
- xbString sDoubleVal;
- xbInt16 iFieldLen;
- xbInt16 iNoOfDecs;
-
- if(( rc = GetFieldDecimal( iFieldNo, iNoOfDecs )) != XB_NO_ERROR )
- return rc;
-
- if(( rc = GetFieldLen( iFieldNo, iFieldLen )) != XB_NO_ERROR )
- return rc;
-
- sDoubleFmt.Sprintf( "%d.%df", iFieldLen, iNoOfDecs );
- sDoubleFmt2 = "%-";
- sDoubleFmt2 += sDoubleFmt;
- sDoubleVal.Sprintf( sDoubleFmt2.Str(), dFieldValue );
- sDoubleVal.Rtrim();
- return PutField( iFieldNo, sDoubleVal );
-}
-
-/************************************************************************/
-//! @brief Put date field for field name.
-/*!
- \param sFieldName Name of field to update.
- \param dtFieldValue Field value.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-
-xbInt16 xbDbf::PutDateField(const xbString &sFieldName, const xbDate &dtFieldValue ){
- return PutField( GetFieldNo( sFieldName ), dtFieldValue.Str() );
-}
-
-/************************************************************************/
-//! @brief Put date field for field number.
-/*!
- \param iFieldNo Number of field to update.
- \param dtFieldValue Field value.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-xbInt16 xbDbf::PutDateField( xbInt16 iFieldNo, const xbDate &dtFieldValue ){
- return PutField( iFieldNo, dtFieldValue.Str() );
-}
-
-/************************************************************************/
-//! @brief Put field for field name.
-/*!
- \param sFieldName Name of field to update.
- \param sFieldValue Field value.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-xbInt16 xbDbf::PutField(const xbString &sFieldName, const xbString &sFieldValue ) {
- return PutField( GetFieldNo( sFieldName ), sFieldValue );
-}
-/************************************************************************/
-//! @brief Put field for field number.
-/*!
- \param iFieldNo Number of field to update.
- \param sFieldValue Field value.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-
-xbInt16 xbDbf::PutField( xbInt16 iFieldNo, const xbString &sFieldValue ) {
- xbInt16 iLen;
- xbInt16 iDecPos; /* Decimal Position */
- char * startpos;
- char * tp; /* Target Pointer */
-
- if( iFieldNo < 0 || iFieldNo >= iNoOfFields )
- return XB_INVALID_FIELD_NO;
-
- if( SchemaPtr[iFieldNo].cType == 'L' && !sFieldValue.ValidLogicalValue())
- return XB_INVALID_DATA;
-
- else if( SchemaPtr[iFieldNo].cType == 'D' ){
- xbDate d;
- if( !d.DateIsValid( sFieldValue ))
- return XB_INVALID_DATA;
- iLen = 8;
- }
- else
- {
- iLen = (xbInt16) sFieldValue.Len();
- if( SchemaPtr[iFieldNo].cType == 'F' || SchemaPtr[iFieldNo].cType == 'N' || SchemaPtr[iFieldNo].cType == 'M' ){
- if( !sFieldValue.ValidNumericValue()) {
- return XB_INVALID_DATA;
- }
- else {
- iDecPos = (xbInt16) sFieldValue.Pos( "." ); // 0 is no decimal
- int mlod; // max no of digits left of decimal point digit count
-
-
- if( SchemaPtr[iFieldNo].cNoOfDecs > 0 )
- mlod = SchemaPtr[iFieldNo].cFieldLen - SchemaPtr[iFieldNo].cNoOfDecs - 1;
- else
- mlod = iLen;
-
- if( iDecPos == 0 ){ // no decimal in incoming data
-
- // check digits to the left of the decimal
- if( SchemaPtr[iFieldNo].cNoOfDecs > 0 && iLen > mlod ) /* no decimal in incoming data */
- return XB_INVALID_DATA;
-
- else if( SchemaPtr[iFieldNo].cNoOfDecs == 0 && iLen > SchemaPtr[iFieldNo].cFieldLen )
- return XB_INVALID_DATA;
-
- }
- else // decimal in incoming data
- {
- if( (iDecPos-1) > mlod ) // too many digits to the left of dec in incoming data
- return XB_INVALID_DATA;
-
- // check digits to the right of the decimal
- else if((iLen - iDecPos) > SchemaPtr[iFieldNo].cNoOfDecs )
- return XB_INVALID_DATA;
- }
- }
- }
- }
-
- // do all field edits before this point
- if( iDbfStatus != XB_UPDATED ){
- iDbfStatus = XB_UPDATED;
- memcpy( RecBuf2, RecBuf, uiRecordLen ); // save the original record bufer before making updates
- }
-
- memset( SchemaPtr[iFieldNo].pAddress, 0x20, SchemaPtr[iFieldNo].cFieldLen );
-
- if( iLen > SchemaPtr[iFieldNo].cFieldLen )
- iLen = SchemaPtr[iFieldNo].cFieldLen;
-
- if( SchemaPtr[iFieldNo].cType == 'F' || SchemaPtr[iFieldNo].cType == 'N'
- || SchemaPtr[iFieldNo].cType == 'M') {
-
- xbInt16 iDecPos = (xbInt16) sFieldValue.Pos( "." );
- if( iDecPos == 0 ){
- iLen = (xbInt16) sFieldValue.Len();
- iDecPos = 0;
- }
- else{
- iLen = iDecPos - 1;
- }
-
- if( SchemaPtr[iFieldNo].cNoOfDecs > 0 ){
- tp = SchemaPtr[iFieldNo].pAddress;
- tp += SchemaPtr[iFieldNo].cFieldLen - SchemaPtr[iFieldNo].cNoOfDecs - 1;
- *tp++ = '.';
-
- if( iDecPos == 0 ){
- for( xbInt32 i = 0; i < SchemaPtr[iFieldNo].cNoOfDecs; i++ )
- *tp++ = '0';
- } else {
- xbInt32 j = iDecPos + 1;
- for( xbInt32 i = 0; i < SchemaPtr[iFieldNo].cNoOfDecs; i++, j++ ){
- if( j <= (xbInt32) sFieldValue.Len())
- *tp++ = sFieldValue[j];
- else
- *tp++ = '0';
- }
- }
- startpos= SchemaPtr[iFieldNo].pAddress +
- SchemaPtr[iFieldNo].cFieldLen -
- SchemaPtr[iFieldNo].cNoOfDecs - iLen - 1;
-
- }
- else
- startpos=SchemaPtr[iFieldNo].pAddress+SchemaPtr[iFieldNo].cFieldLen-iLen;
- }
- else
- startpos = SchemaPtr[iFieldNo].pAddress;
-
- memcpy( startpos, sFieldValue.Str(), (size_t) iLen );
- return 0;
-}
-
-/************************************************************************/
-//! @brief Put float field for field number.
-/*!
- \param iFieldNo Number of field to update.
- \param fFieldValue Field value.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-xbInt16 xbDbf::PutFloatField( xbInt16 iFieldNo, xbFloat fFieldValue ){
-
- xbInt16 rc;
- xbString sFloatFmt;
- xbString sFloatFmt2;
- xbString sFloatVal;
- xbInt16 iFieldLen;
- xbInt16 iNoOfDecs;
-
- if(( rc = GetFieldDecimal( iFieldNo, iNoOfDecs )) != XB_NO_ERROR )
- return rc;
-
- if(( rc = GetFieldLen( iFieldNo, iFieldLen )) != XB_NO_ERROR )
- return rc;
-
- sFloatFmt.Sprintf( "%d.%df", iFieldLen, iNoOfDecs );
- sFloatFmt2 = "%-";
- sFloatFmt2 += sFloatFmt;
- sFloatVal.Sprintf( sFloatFmt2.Str(), fFieldValue );
- sFloatVal.Rtrim();
- return PutField( iFieldNo, sFloatVal );
-}
-
-/************************************************************************/
-//! @brief Put float field for field name.
-/*!
- \param sFieldName Name of field to update.
- \param fFieldValue Field value.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-
-xbInt16 xbDbf::PutFloatField( const xbString &sFieldName, xbFloat fFieldValue ){
- return PutFloatField( GetFieldNo( sFieldName ), fFieldValue );
-}
-
-/************************************************************************/
-//! @brief Put logical field for field number.
-/*!
- \param iFieldNo Number of field to update.
- \param sFieldValue Field value.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-
-xbInt16 xbDbf::PutLogicalField( xbInt16 iFieldNo, const xbString &sFieldValue ) {
- return PutField( iFieldNo, sFieldValue );
-}
-
-/************************************************************************/
-//! @brief Put logical field for field name.
-/*!
- \param sFieldName Name of field to update.
- \param sFieldValue Field value.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-xbInt16 xbDbf::PutLogicalField( const xbString &sFieldName, const xbString &sFieldValue ) {
- return PutField( GetFieldNo( sFieldName ), sFieldValue );
-}
-
-/************************************************************************/
-//! @brief Put logical field for field number.
-/*!
- \param iFieldNo Number of field to update.
- \param bFieldValue Field value.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-
-xbInt16 xbDbf::PutLogicalField( xbInt16 iFieldNo, xbBool bFieldValue ) {
-
- if( bFieldValue )
- return PutField( iFieldNo, "T" );
- else
- return PutField( iFieldNo, "F" );
-}
-
-/************************************************************************/
-//! @brief Put logical field for field name.
-/*!
- \param sFieldName Name of field to update.
- \param bFieldValue Field value.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-xbInt16 xbDbf::PutLogicalField( const xbString &sFieldName, xbBool bFieldValue ) {
- return PutLogicalField( GetFieldNo( sFieldName ), bFieldValue );
-}
-
-/************************************************************************/
-//! @brief Put long field for field number.
-/*!
- \param iFieldNo Number of field to update.
- \param lFieldValue Field value.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-
-xbInt16 xbDbf::PutLongField( xbInt16 iFieldNo, xbInt32 lFieldValue ) {
- xbString sLong;
- sLong.Sprintf( "%ld", (xbInt32) lFieldValue );
- return PutField( iFieldNo, sLong.Str() );
-}
-
-/************************************************************************/
-//! @brief Put long field for field name.
-/*!
- \param sFieldName Name of field to update.
- \param lFieldValue Field value.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-
-xbInt16 xbDbf::PutLongField( const xbString &sFieldName, xbInt32 lFieldValue ) {
- return PutLongField( GetFieldNo( sFieldName ), lFieldValue );
-}
-
-/************************************************************************/
-//! @brief Put unsigned long field for field number.
-/*!
- \param iFieldNo Number of field to update.
- \param ulFieldValue Field value.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-
-xbInt16 xbDbf::PutULongField( xbInt16 iFieldNo, xbUInt32 ulFieldValue ) {
- xbString sLong;
- sLong.Sprintf( "%lu", (xbInt32) ulFieldValue );
- return PutField( iFieldNo, sLong.Str() );
-}
-
-/************************************************************************/
-//! @brief Put unsigned long field for field name.
-/*!
- \param sFieldName Name of field to update.
- \param ulFieldValue Field value.
- \returns The field routines return one of:<br>
- XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
- XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
-*/
-
-xbInt16 xbDbf::PutULongField( const xbString &sFieldName, xbUInt32 ulFieldValue ) {
- return PutLongField( GetFieldNo( sFieldName ), (xbInt32) ulFieldValue );
-}
-
-/************************************************************************/
-#ifdef XB_MEMO_SUPPORT
-//! @brief Check if memo field exists for field name.
-/*!
- \param sFieldName Name of field to check.
- \returns xbTrue Field exists.<br> xbFale Field does not exist.
-*/
-
-xbBool xbDbf::MemoFieldExists( const xbString &sFieldName ) const{
- return MemoFieldExists( GetFieldNo( sFieldName ));
-}
-
-/************************************************************************/
-//! @brief Check if memo field exists for field number.
-/*!
- \param iFieldNo Number of field to check.
- \returns xbTrue Field exists.<br> xbFale Field does not exist.
-*/
-
-xbBool xbDbf::MemoFieldExists( xbInt16 iFieldNo ) const{
-
- xbInt32 lFld = 0L;
- GetLongField( iFieldNo, lFld );
- if( lFld == 0L )
- return xbFalse;
- else
- return xbTrue;
-}
-
-#endif
-
-} /* namespace */
-
diff --git a/src/core/xbfile.cpp b/src/core/xbfile.cpp
deleted file mode 100755
index 3b798a2..0000000
--- a/src/core/xbfile.cpp
+++ /dev/null
@@ -1,2193 +0,0 @@
-/* xbfile.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-This module handles all the low level file I/O and is the base class
-for the table, memo and index classes
-
-*/
-
-#include "xbase.h"
-
-namespace xb{
-
-/************************************************************************/
-//! @brief Class Constructor.
-xbFile::xbFile( xbXBase * x ){
- fp = NULL;
- bFileOpen = xbFalse;
- ulBlockSize = 0;
- iFileNo = 0;
- xbase = x;
- if( GetMultiUser() == xbTrue )
- iShareMode = XB_MULTI_USER;
- else
- iShareMode = XB_SINGLE_USER;
- iOpenMode = 0;
- #ifdef XB_LOCKING_SUPPORT
- iLockRetries = -1;
- #endif
- #ifdef HAVE_SETENDOFFILE_F
- fHandle = NULL;
- #endif
-}
-
-/************************************************************************/
-//! @brief Class Destructor.
-xbFile::~xbFile(){
- if( bFileOpen )
- xbFclose();
-}
-
-/************************************************************************/
-//! @brief Create Home Folders.
-/*!
- Create xbase64 log and data folders in the home directory for current usre.
-
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbFile::SetHomeFolders(){
-
- xbInt16 iErrorStop = 0;
- xbInt16 iRc = XB_NO_ERROR;
- xbString sHomeDir;
- char cPathSeperator;
- xbString sDflt;
-
- try{
-
- GetHomeDir( sHomeDir );
- //std::cout << "CreateHomeFolders() home dir = [" << sHomeDir.Str() << "]\n";
-
- if( FileExists( sHomeDir ) == xbFalse ){
- iErrorStop = 100;
- iRc = XB_DIRECTORY_ERROR;
- throw iRc;
- }
-
- #ifdef WIN32
- cPathSeperator = '\\';
- #else
- cPathSeperator = '/';
- #endif
- sDflt.Sprintf( ".%c", cPathSeperator );
- // set the default folders just in case later steps fail
- xbase->SetDataDirectory( sDflt );
- #ifdef XB_LOGGING_SUPPORT
- xbase->SetLogDirectory( sDflt );
- #endif
-
- if( sHomeDir[sHomeDir.Len()] != cPathSeperator )
- sHomeDir += cPathSeperator;
-
- xbString sWork( sHomeDir );
- sWork += "xbase64";
-
- if( FileExists( sWork ) == xbFalse ){
- #ifdef WIN32
- if( CreateDirectory( sWork.Str(), NULL ) == 0 ){
- iErrorStop = 130;
- iRc = XB_DIRECTORY_ERROR;
- throw iRc;
- }
- #else
- // 0777 mode is correct, the mode will be modified by the user's umask
- if( mkdir( sWork.Str(), 0777 ) == -1 ){
- iErrorStop = 140;
- iRc = XB_DIRECTORY_ERROR;
- throw iRc;
- }
- #endif
- }
-
- #ifdef XB_LOGGING_SUPPORT
- sWork.Sprintf( "%sxbase64%clogs", sHomeDir.Str(), cPathSeperator );
- // std::cout << "logdir = " << sWork.Str() << "\n";
-
- if( FileExists( sWork ) == xbFalse ){
- #ifdef WIN32
- if( CreateDirectory( sWork.Str(), NULL ) == 0 ){
- iErrorStop = 110;
- iRc = XB_DIRECTORY_ERROR;
- throw iRc;
- }
- #else
- if( mkdir( sWork.Str(), 0777 ) == -1 ){
- iErrorStop = 120;
- iRc = XB_DIRECTORY_ERROR;
- throw iRc;
- }
- #endif
- }
- xbase->SetLogDirectory( sWork );
- #endif // XB_LOGGING_SUPPORT
-
- sWork.Sprintf( "%sxbase64%cdata", sHomeDir.Str(), cPathSeperator );
- // std::cout << "datadir = " << sWork.Str() << "\n";
- if( FileExists( sWork ) == xbFalse ){
- #ifdef WIN32
- if( CreateDirectory( sWork.Str(), NULL ) == 0 ){
- iErrorStop = 130;
- iRc = XB_DIRECTORY_ERROR;
- throw iRc;
- }
- #else
- if( mkdir( sWork.Str(), 0777 ) == -1 ){
- iErrorStop = 140;
- iRc = XB_DIRECTORY_ERROR;
- throw iRc;
- }
- #endif
- }
- xbase->SetDataDirectory( sWork );
-
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbFile::CreateHomeFolders() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/************************************************************************/
-//! @brief Create a unique file name.
-/*!
- Given a directory and file extension as inputs, create a unique file name.
-
- \param sDirIn Directory
- \param sExtIn File Extension
- \param sFqnOut A fully qualifed unique file name as output
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbFile::CreateUniqueFileName( const xbString & sDirIn, const xbString & sExtIn, xbString &sFqnOut ){
- return CreateUniqueFileName( sDirIn, sExtIn, sFqnOut, 0 );
-}
-
-/************************************************************************/
-//! @brief Create a unique file name.
-/*!
- Given a directory and file extension as inputs, create a unique file name.
-
- \param sDirIn Directory
- \param sExtIn File Extension
- \param iOption 0 - look only for one file for a given directory and extension<br>
- 1 - if file name extension is "dbf" or "DBF", verify unique dbt or DBT (memo) file is also available<br>
- \param sFqnOut A fully qualifed unique file name as output
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbFile::CreateUniqueFileName( const xbString & sDirIn, const xbString & sExtIn, xbString &sFqnOut, xbInt16 iOption ){
-
- xbBool bUniqueFileNameFound = xbFalse;
- xbFile f( xbase);
- xbInt32 l = 1;
- xbString sMemoFileName;
-
-
- while( !bUniqueFileNameFound ){
- sFqnOut.Sprintf( "%sxbTmp%03d.%s", sDirIn.Str(), l, sExtIn.Str());
- if( iOption == 1 && sExtIn == "DBF" ){
- sMemoFileName.Sprintf( "%sxbTmp%03d.DBT", sDirIn.Str(), l );
- }
- else if( iOption == 1 && sExtIn == "dbf" ){
- sMemoFileName.Sprintf( "%sxbTmp%03d.dbt", sDirIn.Str(), l );
- }
- if( f.FileExists( sFqnOut ) || ( sMemoFileName.Len() > 0 && f.FileExists( sMemoFileName ))){
- l++;
- }
- else
- {
- bUniqueFileNameFound = xbTrue;
- }
- if( l > 999 )
- return XB_FILE_EXISTS;
- }
- return XB_NO_ERROR;
-}
-
-/*************************************************************************/
-//! @brief Determine which version the memo (dbt) file is.
-/*!
-
- This routine uses the first byte in the dbf file to determine which memo
- file version is in use. The main difference between version 3 and 4 is that
- version 4 will reuse blocks if they become available. Version 3 does not.
-
- \param cFileTypeByte is an output field and is one of:<br>
- <br>
- 0 - none<br>
- 3 - Dbase III+<br>
- 4 - Dbase IV<br>
-
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbFile::DetermineXbaseMemoVersion( unsigned char cFileTypeByte ) const {
-
-
- if( BitSet( cFileTypeByte, 3 ) && BitSet( cFileTypeByte, 7 ))
- return 4;
- else if( BitSet( cFileTypeByte, 7 ))
- return 3;
-
- return 0;
-}
-/*************************************************************************/
-//! @brief Determine xbase dbf version.
-/*!
-
- This routine is used to determine which version of the Xbase classes can
- be used for a given DBF file.<br>
-
- It attempts to use the highest version compiled into the library.<br>
-
- References:<br>
- This routine uses the first byte from the dbf file.<br>
- Per DBase documentation:<br>
- Valid dBASE for Windows table file, bits 0-2 indicate version number: 3 for dBASE Level 5, 4 for dBASE Level 7.<br>
- Bit 3 and bit 7 indicate presence of a dBASE IV or dBASE for Windows memo file;<br>
- Bits 4-6 indicate the presence of a dBASE IV SQL table;<br>
- Bit 7 indicates the presence of any .DBT memo file (either a dBASE III PLUS type or a dBASE IV or dBASE for Windows memo file).<br>
-<br>
- Bachmann spec (used extensively in library build), page 7 - does not match DBase documentation<br>
-<br>
- returns<br>
- 0 - unknown<br>
- 3 - Dbase level 3<br>
- 4 - Dbase level 4<br>
- 5 - Dbase Level 5 (future)<br>
- 7 - Dbase Level 7 (future)<br>
-<br>
- 1x - Clipper files (future)<br>
- 2x - Foxbase files (future)<br>
-<br>
-*/
-
-xbInt16 xbFile::DetermineXbaseTableVersion( unsigned char cFileTypeByte ) const {
-
- xbInt16 iMemoVersion = DetermineXbaseMemoVersion(cFileTypeByte);
- char cDbfLevel = cFileTypeByte & 0x07;
-
- #ifdef XB_DBF4_SUPPORT
- if( cDbfLevel == 3 && iMemoVersion != 3 )
- return 4;
- #endif
-
- #ifdef XB_DBF3_SUPPORT
- if( cDbfLevel == 3 && iMemoVersion != 4 )
- return 3;
- #endif
-
- return 0;
-}
-
-/*************************************************************************/
-//! @brief Get a portable double value.
-/*!
-
- This routine returns a double value from an 8 byte character stream,
- accounting for endian type.
-
- Converts a double (64 bit floating point) value stored at p from a portable
- format to the machine format.
-
- \param p pointer to memory containing the portable double value
-
- \returns the double value.
-*/
-
-xbDouble xbFile::eGetDouble( const char *p ) const {
- xbDouble d;
- const char *sp;
- char *tp;
- xbInt16 i;
-
- tp = (char *) &d;
- sp = p;
- if( iEndianType == 'L' )
- for( i = 0; i < 8; i++ ) *tp++ = *sp++;
- else
- {
- sp+=7;
- for( i = 0; i < 8; i++ ) *tp++ = *sp--;
- }
-
- return d;
-}
-
-/*************************************************************************/
-//! @brief Get a portable long value.
-
-/*!
- This routine returns a long int value from a 4 byte character stream,
- accounting for endian type.
-
- \param p pointer to memory containing the portable long value
-
- \returns the long value.
-*/
-
-xbInt32 xbFile::eGetInt32( const char *p ) const {
- xbInt32 l;
- char *tp;
- xbInt16 i;
-
- tp = (char *) &l;
- if( iEndianType == 'L' )
- for( i = 0; i < 4; i++ ) *tp++ = *p++;
- else {
- p+=3;
- for( i = 0; i < 4; i++ ) *tp++ = *p--;
- }
- return l;
-
-}
-/*************************************************************************/
-//! @brief Get a portable unsigned long value.
-
-/*!
- This routine returns an unsigned long int value from a 4 byte character stream,
- accounting for endian type.
-
- \param p pointer to memory containing the portable long value
-
- \returns the unsigned long value.
-*/
-
-xbUInt32 xbFile::eGetUInt32( const char *p ) const {
- xbUInt32 ul;
- xbInt16 i;
- char *tp;
-
- tp = (char *) &ul;
- if( iEndianType == 'L' )
- for( i = 0; i < 4; i++ ) *tp++ = *p++;
- else{
- p+=3;
- for( i = 0; i < 4; i++ ) *tp++ = *p--;
- }
- return ul;
-}
-
-/*************************************************************************/
-//! @brief Get a portable short value.
-
-/*!
- This routine returns a short int value from a 2 byte character stream,
- accounting for endian type.
-
- \param p pointer to memory containing the portable long value
-
- \returns the short value.
-*/
-
-xbInt16 xbFile::eGetInt16(const char *p) const {
- xbInt16 s, i;
- char *tp;
- tp = (char *) &s;
- if( iEndianType == 'L' )
- for( i = 0; i < 2; i++ ) *tp++ = *p++;
- else{
- p++;
- for( i = 0; i < 2; i++ ) *tp++ = *p--;
- }
- return s;
-}
-/*************************************************************************/
-//! @brief Get a portable unsigned short value.
-
-/*!
- This routine returns a short unsigned int value from a 2 byte character stream,
- accounting for endian type.
-
- \param p pointer to memory containing the portable long value
-
- \returns the short value.
-*/
-
-xbUInt16 xbFile::eGetUInt16(const char *p) const {
- xbInt16 i;
- xbUInt16 uI;
- char *tp;
-
- tp = (char *) &uI;
- if( iEndianType == 'L' )
- for( i = 0; i < 2; i++ ) *tp++ = *p++;
- else{
- p++;
- for( i = 0; i < 2; i++ ) *tp++ = *p--;
- }
- return uI;
-}
-
-
-/*************************************************************************/
-//! @brief Write a portable double value to memory location.
-/*!
- Converts a double (64 bit floating point) value from machine format to a
- portable format and stores the converted value in the memory referenced
- by c.
-
- This routine puts a double value to an 8 byte character stream
-
- \param c Pointer to memory to hold converted value
- \param d Input value to be converted
-*/
-
-void xbFile::ePutDouble( char *c, xbDouble d ){
- const char *sp;
- char *tp;
- xbInt16 i;
-
- tp = c;
- sp = (const char *) &d;
- if( iEndianType == 'L' )
- for( i = 0; i < 8; i++ ) *tp++ = *sp++;
- else
- {
- sp+=7;
- for( i = 0; i < 8; i++ ) *tp++ = *sp--;
- }
- return;
-}
-
-/*************************************************************************/
-//! @brief Write a portable short value to memory location.
-/*!
- Converts a short (16 bit integer) value from machine format to a
- portable format and stores the converted value in the memory referenced
- by c.
-
- This routine puts a short value to a 2 byte character stream
-
- \param c Pointer to memory to hold converted value
- \param s Input value to be converted
-*/
-
-void xbFile::ePutInt16( char * c, xbInt16 s ){
- const char *sp;
- char *tp;
- xbInt16 i;
-
- tp = c;
- sp = (const char *) &s;
-
- if( iEndianType == 'L' )
- for( i = 0; i < 2; i++ ) *tp++ = *sp++;
- else{ /* big endian */
- sp++;
- for( i = 0; i < 2; i++ ) *tp++ = *sp--;
- }
- return;
-}
-/*************************************************************************/
-//! @brief Write a portable unsigned short value to memory location.
-/*!
- Converts an unsigned short (16 bit integer) value from machine format to a
- portable format and stores the converted value in the memory referenced
- by c.
-
- This routine puts an unsigned short value to a 2 byte character stream
-
- \param c Pointer to memory to hold converted value
- \param s Input value to be converted
-*/
-
-void xbFile::ePutUInt16( char * c, xbUInt16 s ){
- const char *sp;
- char *tp;
- xbInt16 i;
-
- tp = c;
- sp = (const char *) &s;
-
- if( iEndianType == 'L' )
- for( i = 0; i < 2; i++ ) *tp++ = *sp++;
- else{ /* big endian */
- sp++;
- for( i = 0; i < 2; i++ ) *tp++ = *sp--;
- }
- return;
-}
-
-/*************************************************************************/
-//! @brief Write a portable long value to memory location.
-/*!
- Converts a long (32 bit integer) value from machine format to a
- portable format and stores the converted value in the memory referenced
- by c.
-
- This routine puts a long value to a 4 byte character stream.
-
- \param c Pointer to memory to hold converted value
- \param l Input value to be converted
-*/
-
-void xbFile::ePutInt32( char * c, xbInt32 l )
-{
- const char *sp;
- char *tp;
- xbInt16 i;
-
- tp = c;
- sp = (const char *) &l;
- if( iEndianType == 'L' )
- for( i = 0; i < 4; i++ ) *tp++ = *sp++;
- else {
- sp+=3;
- for( i = 0; i < 4; i++ ) *tp++ = *sp--;
- }
- return;
-}
-
-
-/*************************************************************************/
-//! @brief Write a portable unsigned long value to memory location.
-/*!
- Converts an unsigned long (32 bit integer) value from machine format to a
- portable format and stores the converted value in the memory referenced
- by c.
-
- This routine puts an unsigned long value to a 4 byte character stream.
-
- \param c Pointer to memory to hold converted value
- \param ul Input value to be converted
-*/
-
-void xbFile::ePutUInt32( char * c, xbUInt32 ul )
-{
- const char *sp;
- char *tp;
- xbInt16 i;
-
- tp = c;
- sp = (const char *) &ul;
- if( iEndianType == 'L' )
- for( i = 0; i < 4; i++ ) *tp++ = *sp++;
- else
- {
- sp+=3;
- for( i = 0; i < 4; i++ ) *tp++ = *sp--;
- }
- return;
-}
-
-/************************************************************************/
-//! @brief Determines if a file exists.
-/*!
- \returns xbTrue if file exists<br>
- xbFalse if file does not exist
-
-*/
-xbBool xbFile::FileExists() const {
- return FileExists( sFqFileName, 0 );
-}
-/************************************************************************/
-//! @brief Determines if a file exists.
-/*!
- \param iOption if 1, assume this is a request for a dbf file and
- check for the a dbt memo file also, returns true if both files are found
-
- \returns xbTrue if both files exist<br>
- xbFalse if file does not exist
-
-*/
-xbBool xbFile::FileExists( xbInt16 iOption ) const {
- return FileExists( sFqFileName, iOption );
-}
-
-/************************************************************************/
-//! @brief Determines if a file exists.
-/*!
- \param sFileName - file name to check for
-
- \returns xbTrue if file exists<br>
- xbFalse if file does not exist
-*/
-
-xbBool xbFile::FileExists(const xbString &sFileName ) const {
- return FileExists( sFileName, 0 );
-}
-
-/************************************************************************/
-//! @brief Determines if a file exists.
-/*!
- \param sFileName - file name to check for
- \param iOption if 1, assume this is a request for a dbf file and
- check for the a dbt memo file also, returns true if both files are found
-
- \returns xbTrue if both dbf and dbt files exist<br>
- xbFalse if file does not exist
-*/
-
-xbBool xbFile::FileExists( const xbString & sFileName, xbInt16 iOption ) const {
-
- struct stat buffer;
- if(( stat( sFileName.Str(), &buffer ) != 0 )){
- return xbFalse;
- }
-
- #ifdef XB_MEMO_SUPPORT
- if( iOption == 1 ){
- xbString sFileName2 = sFileName;
-
- if( sFileName2[sFileName2.Len()] == 'F' )
- sFileName2.PutAt( sFileName2.Len(), 'T' );
- else
- sFileName2.PutAt( sFileName2.Len(), 't' );
-
- if(( stat( sFileName2.Str(), &buffer) != 0 ))
- return xbFalse;
- }
- #endif
- return xbTrue;
-}
-
-/************************************************************************/
-//! @brief Determines if file is open.
-/*!
-
- \returns xbTrue if file is open<br>
- xbFalse if file is not open
-*/
-
-xbBool xbFile::FileIsOpen() const {
- return bFileOpen;
-}
-/************************************************************************/
-//! @brief Get the block size.
-/*!
- \returns Block Size
-*/
-
-xbUInt32 xbFile::GetBlockSize() const {
- return ulBlockSize;
-}
-
-/************************************************************************/
-//! @brief Get the directory name.
-/*!
- \returns the directory name of the file
-*/
-
-const xbString & xbFile::GetDirectory() const {
- return sDirectory;
-}
-
-/************************************************************************/
-//! @brief Get the directory part of the file name.
-/*!
- \param sFileDirPartOut - the returned directory name
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-
-xbInt16 xbFile::GetFileDirPart( xbString & sFileDirPartOut ) const {
- return GetFileDirPart( sFqFileName, sFileDirPartOut );
-}
-
-/************************************************************************/
-//! @brief Get the directory part of the file name.
-/*!
- \param sCompleteFileNameIn - a fully qualfied input file name
- \param sFileDirPartOut - the returned directory name part out of sCompleteFileNameIn
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-
-xbInt16 xbFile::GetFileDirPart( const xbString & sCompleteFileNameIn, xbString & sFileDirPartOut ) const {
-
- sFileDirPartOut = sCompleteFileNameIn;
- sFileDirPartOut.SwapChars( '\\', '/' );
- xbUInt32 iPos = sFileDirPartOut.GetLastPos( '/' );
-
- if( iPos > 0 ){
- xbString sTemp = sFileDirPartOut;
- sFileDirPartOut.Assign( sTemp, 1, iPos );
- return XB_NO_ERROR;
- }
- return XB_INVALID_DATA;
-}
-
-/************************************************************************/
-//! @brief Get the extension part of the file name.
-/*!
- \param sFileNameExtOut - the returned extension part out of sCompleteFileNameIn
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbFile::GetFileExtPart( xbString & sFileNameExtOut ) const {
- return GetFileExtPart( sFqFileName, sFileNameExtOut );
-}
-
-/************************************************************************/
-//! @brief Get the extension part of the file name.
-/*!
- \param sCompleteFileNameIn - a fully qualfied input file name
-
- \param sFileExtPartOut - the returned directory name part out of sCompleteFileNameIn
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-
-xbInt16 xbFile::GetFileExtPart( const xbString & sCompleteFileNameIn, xbString & sFileExtPartOut ) const {
-
-
- sFileExtPartOut = sCompleteFileNameIn;
- xbUInt32 iPos = sFileExtPartOut.GetLastPos( '.' );
- if( iPos > 0 ){ /* get rid of the directory part of the name */
- sFileExtPartOut.Ltrunc( iPos );
- return XB_NO_ERROR;
- }
- return XB_INVALID_DATA;
-}
-/************************************************************************/
-//! @brief Get the time of last file modification timestamp as reported by the OS.
-/*!
- \param mtime - returned time of last file modification
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbFile::GetFileMtime( time_t &mtime ){
-
- struct stat buffer;
- if( stat( sFqFileName.Str(), &buffer ))
- return XB_FILE_NOT_FOUND;
- else{
- mtime = buffer.st_mtime;
- return XB_NO_ERROR;
- }
-}
-/************************************************************************/
-//! @brief Get the file name.
-/*!
- \returns the file name portion of the file
-*/
-
-const xbString & xbFile::GetFileName() const {
- return sFileName;
-}
-
-
-/************************************************************************/
-//! @brief Get the name part of the file name.
-/*!
- \param sFileNamePartOut - the returned file name part out of sCompleteFileNameIn
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-
-xbInt16 xbFile::GetFileNamePart( xbString & sFileNamePartOut ) const {
- return GetFileNamePart( sFqFileName, sFileNamePartOut );
-}
-
-/************************************************************************/
-//! @brief Get the name part of the file name.
-/*!
- \param sCompleteFileNameIn - a fully qualified input file name
- \param sFileNamePartOut - the returned file name part out of sCompleteFileNameIn
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-//*********** fixme should this be static?????
-
-xbInt16 xbFile::GetFileNamePart( const xbString & sCompleteFileNameIn, xbString & sFileNamePartOut ) const {
- /* extract the file name part out of the string */
-
- sFileNamePartOut = sCompleteFileNameIn;
- sFileNamePartOut.SwapChars( '\\', '/' );
- xbUInt32 iPos = sFileNamePartOut.GetLastPos( '/' );
- if( iPos > 0 ) /* get rid of the directory part of the name */
- sFileNamePartOut.Ltrunc( iPos );
- iPos = sFileNamePartOut.Pos( '.' );
- if( iPos > 0 ){ /* get rid of the extension part of the name */
- xbString sTemp = sFileNamePartOut;
- sFileNamePartOut.Assign( sTemp, 1, iPos-1 );
- }
- return XB_NO_ERROR;
-}
-
-
-/************************************************************************/
-//! @brief Get the size of the file as reported by the OS.
-/*!
- \param ullFileSize - unsigned long long field as output
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbFile::GetFileSize( xbUInt64 &ullFileSize ){
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
-
- try{
-
- if(( iRc = xbFseek( 0, SEEK_END )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- ullFileSize = xbFtell();
- }
-
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbFile::GetFileSize() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/************************************************************************/
-//! @brief Get the file type aka Capitalized file extension
-/*!
- \param sFileTypeOut - the returned extension part out of sCompleteFileNameIn
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbFile::GetFileType( xbString & sFileTypeOut ) const {
-
- xbInt16 iRc = GetFileExtPart( sFqFileName, sFileTypeOut );
- sFileTypeOut.ToUpperCase();
- return iRc;
-}
-/************************************************************************/
-//! @brief Get the fully qualified file name.
-/*!
- \returns the fully qualfied name of the file
-*/
-
-const xbString & xbFile::GetFqFileName() const {
- return sFqFileName;
-}
-
-/************************************************************************/
-//! @brief Get the open mode of the file.
-/*!
- \returns XB_READ<br>
- XB_READ_WRITE<br>
- XB_WRITE<BR>
-*/
-
-xbInt16 xbFile::GetOpenMode() const {
- return iOpenMode;
-}
-
-/************************************************************************/
-//! @brief Get the share mode of the file.
-/*!
- \returns XB_SINGLE_USER - (file buffering on><br>
- XB_MULTI_USER - (file buffering off)<br>
-*/
-
-xbInt16 xbFile::GetShareMode() const {
- return iShareMode;
-}
-
-/************************************************************************/
-//! @brief Get the file type byte and version of the dbf file.
-/*!
-
- Pull the first bye off the DBF file for further inspection.
- First byte has various bits set to determine what the file format is.
-
- \param sFileName - Name of file to examine
- \param iVersion - Returned file version
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbFile::GetXbaseFileTypeByte( const xbString &sFileName, xbInt16 &iVersion )
-{
- unsigned char cFileTypeByte;
- return GetXbaseFileTypeByte( sFileName, cFileTypeByte, iVersion );
-}
-
-/************************************************************************/
-//! @brief Get the file type byte and version of the dbf file.
-/*!
- Pull the first bye off the DBF file for further inspection.
- First byte has various bits set to determine what the file format is.
-
- \param sFileName - Name of file to examine
- \param cFileTypeByte - Retruned first byte of dbf file
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-
-xbInt16 xbFile::GetXbaseFileTypeByte( const xbString &sFileName, unsigned char &cFileTypeByte )
-{
- xbInt16 iVersion;
- return GetXbaseFileTypeByte( sFileName, cFileTypeByte, iVersion );
-}
-
-/************************************************************************/
-//! @brief Get the file type byte and version of the dbf file.
-/*!
- Pull the first bye off the DBF file for further inspection.
- First byte has various bits set to determine what the file format is.
-
-
- \param sFileName - Name of file to examine
- \param cFileTypeByte - Returned first byte of dbf file
- \param iVersion - Returned file version
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbFile::GetXbaseFileTypeByte( const xbString &sFileName, unsigned char &cFileTypeByte, xbInt16 &iVersion ){
- xbInt16 iErrorStop = 0;
- xbInt16 iRc = XB_NO_ERROR;
- size_t stRc;
- FILE *tfp;
-
- try{
-
- iVersion = 0;
- cFileTypeByte = 0x00;
- #ifdef HAVE__FSOPEN_F
- // 0x40 is SH_DENYNO or _SH_DENYNO
- if(( tfp = _fsopen( sFileName.Str(), "r", 0x40 )) == NULL ){
- iErrorStop = 100;
- iRc = XB_OPEN_ERROR;
- throw iRc;
- }
- #else
- if(( tfp = fopen( sFileName.Str(), "r" )) == NULL ){
- iErrorStop = 110;
- iRc = XB_OPEN_ERROR;
- throw iRc;
- }
- #endif
-
- #ifdef HAVE_FSEEKO_F
- iRc = fseeko( tfp, 0, SEEK_SET );
- #else
- iRc = fseek( tfp, 0, SEEK_SET );
- #endif
-
- if( iRc != 0 ){
- iErrorStop = 120;
- iRc = XB_SEEK_ERROR;
- throw iRc;
- }
- stRc = fread( &cFileTypeByte, (size_t) 1, (size_t) 1, tfp );
- if( stRc != (size_t) 1 ){
- iErrorStop = 130;
- iRc = XB_READ_ERROR;
- throw iRc;
- }
- iRc = XB_NO_ERROR;
- fclose( tfp );
- iVersion = DetermineXbaseTableVersion( cFileTypeByte );
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbFile::GetXbaseFileType() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/************************************************************************/
-//! @brief Determines status of file extension.
-/*!
-
- \param sFileName - Name of file to examine
- \param iOption - Inspection type<br>
- 1 check for DBF<br>
- 2 check for NDX<br>
- 3 check for MDX<br>
- 4 check for NTX<br>
-
- \returns 0 if suffix found<br>
- 1 if suffix not found, lower case<br>
- 2 is suffix not found, upper case<br>
-
-*/
-
-xbInt16 xbFile::NameSuffixMissing( const xbString & sFileName, xbInt16 iOption ) const {
-
- xbUInt32 ulLen = sFileName.Len();
- if( ulLen <= 4 ){
- if( sFileName[ulLen] >= 'A' && sFileName[ulLen] <= 'Z' )
- return 2;
- else
- return 1;
- }
- if( iOption == 1 && sFileName[ulLen-3] == '.' &&
- ( sFileName[ulLen-2] == 'd' || sFileName[ulLen-2] == 'D' ) &&
- ( sFileName[ulLen-1] == 'b' || sFileName[ulLen-1] == 'B' ) &&
- ( sFileName[ulLen] == 'f' || sFileName[ulLen] == 'F' )
- )
- return 0;
- if( iOption == 2 && sFileName[ulLen-3] == '.' &&
- ( sFileName[ulLen-2] == 'n' || sFileName[ulLen-2] == 'N' ) &&
- ( sFileName[ulLen-1] == 'd' || sFileName[ulLen-1] == 'D' ) &&
- ( sFileName[ulLen] == 'x' || sFileName[ulLen] == 'X' )
- )
- return 0;
- if( iOption == 3 && sFileName[ulLen-3] == '.' &&
- ( sFileName[ulLen-2] == 'm' || sFileName[ulLen-2] == 'M' ) &&
- ( sFileName[ulLen-1] == 'd' || sFileName[ulLen-1] == 'D' ) &&
- ( sFileName[ulLen] == 'x' || sFileName[ulLen] == 'X' )
- )
- return 0;
- if( iOption == 4 && sFileName[ulLen-3] == '.' &&
- ( sFileName[ulLen-2] == 'n' || sFileName[ulLen-2] == 'N' ) &&
- ( sFileName[ulLen-1] == 't' || sFileName[ulLen-1] == 'T' ) &&
- ( sFileName[ulLen] == 'x' || sFileName[ulLen] == 'X' )
- )
- return 0;
- // next line might be problematic if file naem has mixed case and extension is missing
- if( sFileName[ulLen-4] >= 'A' && sFileName[ulLen-4] <= 'Z' )
- return 2;
- else
- return 1;
-}
-
-/***********************************************************************/
-//! @brief Read a block of data from file.
-/*!
-
- \param ulBlockNo - block number to read
- \param lReadSize - size of data to read at block location, set to 0 to read blocksize
- \param *buf - pointer to buffer to write output data, assumed to be previosuly allocated
- and large enough to contain data
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-
-*/
-
-xbInt16 xbFile::ReadBlock( xbUInt32 ulBlockNo, size_t lReadSize, void * buf ){
- return ReadBlock( ulBlockNo, ulBlockSize, lReadSize, buf );
-}
-
-/***********************************************************************/
-//! @brief Read a block of data from file.
-/*!
-
- \param ulBlockNo - block number to read
- \param ulBlockSize - block size
- \param lReadSize - size of data to read at block location, set to 0 to read blocksize
- \param buf - pointer to buffer to write output data, assumed to be previosuly allocated
- and large enough to contain data
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-
-*/
-xbInt16 xbFile::ReadBlock( xbUInt32 ulBlockNo, xbUInt32 ulBlockSize, size_t lReadSize, void * buf ){
-
- xbInt16 iErrorStop = 0;
- xbInt16 iRc = XB_NO_ERROR;
-
- try{
- if( ulBlockSize <= 0 ){
- iErrorStop = 100;
- iRc = XB_INVALID_BLOCK_SIZE;
- throw iRc;
- }
-
- if(( iRc = xbFseek(((xbInt64) ulBlockNo*ulBlockSize ), SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 110;
- iRc = XB_SEEK_ERROR;
- throw iRc;
- }
-
- if( lReadSize <= 0 )
- lReadSize = ulBlockSize;
-
- if(( iRc = xbFread( buf, lReadSize, 1 )) != XB_NO_ERROR ){
- iErrorStop = 120;
- iRc = XB_READ_ERROR;
- throw iRc;
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbFile::ReadBlock() Exception Caught. Error Stop = [%d] iRc = [%d] BlkNo=[%ld] BlkSize=[%ld] ReadSize=[%ld]", iErrorStop, iRc, ulBlockNo, ulBlockSize, lReadSize );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-/************************************************************************/
-//! @brief Set the block size.
-/*!
-
- \param ulBlockSize - unsigned long block size, divisible by 512
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbFile::SetBlockSize( xbUInt32 ulBlockSize ){
- if( ulBlockSize %512 != 0 )
- return XB_INVALID_BLOCK_SIZE;
-
- this->ulBlockSize = ulBlockSize;
- return XB_NO_ERROR;
-}
-/************************************************************************/
-//! @brief Set the directory.
-/*!
- \param sDirectory - Valid directory name
-*/
-
-
-void xbFile::SetDirectory( const xbString & sDirectory ){
-
- this->sDirectory = sDirectory;
- char cLastChar = sDirectory[sDirectory.Len()];
- if( cLastChar != '/' && cLastChar != '\\' )
- sFqFileName.Sprintf( "%s/%s", sDirectory.Str(), sFileName.Str());
- else
- sFqFileName.Sprintf( "%s%s", sDirectory.Str(), sFileName.Str());
-
- #ifdef WIN32
- sFqFileName.SwapChars( '/', '\\' );
- #else
- sFqFileName.SwapChars( '\\', '/' );
- #endif
-}
-
-/************************************************************************/
-//! @brief Set the filename.
-/*!
- This routine builds out two internal variables from the input file name<br>
- sFileName - the file name part<br>
- sFqFileName - the fully qualified file name<br>
-
-
- \param sFileName - Input file name
-*/
-void xbFile::SetFileName( const xbString & sFileName ){
-
- if( sFileName == "" ){
- sFqFileName = "";
- return;
- }
-
- char cPathSep = sFileName.GetPathSeparator();
-
- if( cPathSep ){
-
- xbString sName;
- xbString sExt;
- // GetFileDirPart( this->sDirectory );
- GetFileNamePart( sFileName, sName );
- GetFileExtPart( sFileName, sExt );
- this->sFileName.Sprintf( "%s.%s", sName.Str(), sExt.Str());
- sFqFileName = sFileName;
-
- } else {
-
- this->sFileName = sFileName;
- if( sDirectory.Len() == 0 ){
- sDirectory = GetDataDirectory();
- char cLastChar = sDirectory[sDirectory.Len()];
- if( cLastChar != '/' && cLastChar != '\\' )
- sFqFileName.Sprintf( "%s/%s", sDirectory.Str(), sFileName.Str() );
- else
- sFqFileName = sDirectory + sFileName;
- }
- else{
- char cLastChar = sDirectory[sDirectory.Len()];
- if( cLastChar != '/' && cLastChar != '\\' )
- sFqFileName.Sprintf( "%s/%s", sDirectory.Str(), sFileName.Str() );
- else
- sFqFileName = sDirectory + sFileName;
- }
- }
-
- #ifdef WIN32
- sFqFileName.SwapChars( '/', '\\' );
- #else
- sFqFileName.SwapChars( '\\', '/' );
- #endif
-}
-
-/************************************************************************/
-//! @brief Set the fully qualifed filename.
-/*!
- \param sFqFileName - Fully qualifed input file name
-*/
-
-void xbFile::SetFqFileName( const xbString & sFqFileName ){
- this->sFqFileName = sFqFileName;
-
- xbString sDir;
- xbString sName;
- xbString sExt;
-
- GetFileDirPart ( sFqFileName, sDir );
- GetFileNamePart( sFqFileName, sName );
- GetFileExtPart ( sFqFileName, sExt );
-
- sDirectory = sDir;
- sFileName.Sprintf( "%s.%s", sName.Str(), sExt.Str() );
-
- #ifdef WIN32
- this->sDirectory.SwapChars ( '/', '\\' );
- this->sFqFileName.SwapChars( '/', '\\' );
- #else
- this->sDirectory.SwapChars ( '\\', '/' );
- this->sFqFileName.SwapChars( '\\', '/' );
- #endif
-}
-
-/************************************************************************/
-//! @brief Write a block of data to file.
-/*!
-
- \param ulBlockNo - block number to write
- \param lWriteSize - size of data to write, set to 0 to write blocksize
- \param *buf - pointer to buffer of data to be written
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-
-*/
-xbInt16 xbFile::WriteBlock( xbUInt32 ulBlockNo, size_t lWriteSize, void * buf ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
-
- try{
-
- if( ulBlockSize == 0 ){
- iErrorStop = 100;
- iRc = XB_INVALID_BLOCK_SIZE;
- throw iRc;
- }
- if( lWriteSize <= 0 )
- lWriteSize = ulBlockSize;
- if(( iRc = xbFseek(( (xbInt64) ulBlockNo*ulBlockSize), SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- if(( iRc = xbFwrite( buf, lWriteSize, 1 )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbFile::WriteBlock() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/************************************************************************/
-//! @brief Xbase wrapper for standard libary fclose.
-/*!
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbFile::xbFclose(){
-
- int iRc = 0;
- if( bFileOpen ){
- iRc = fclose( fp );
- if( iRc != 0 ){
- return XB_CLOSE_ERROR;
- }
- else{
- bFileOpen = xbFalse;
- }
- iFileNo = 0;
- }
- return XB_NO_ERROR;
-}
-
-
-
-/************************************************************************/
-//! @brief Xbase wrapper for standard libary feof.
-/*!
- \returns non zero if end-of-file is set for the stream.
-*/
-xbInt16 xbFile::xbFeof(){
- return feof( fp );
-}
-
-/************************************************************************/
-//! @brief Xbase wrapper for standard libary fflush.
-/*!
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbFile::xbFflush() {
-
- if( fflush( fp ) )
- return XB_WRITE_ERROR;
- else
- return XB_NO_ERROR;
-}
-
-/************************************************************************/
-//! @brief Xbase wrapper for standard libary fgetc.
-/*!
- \param c - output integer returned by fgetc
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbFile::xbFgetc( xbInt32 &c ) {
-
- int i;
-
- i = fgetc( fp );
- if( i == EOF )
- return XB_EOF;
-
- c = i;
- return XB_NO_ERROR;
-}
-
-/************************************************************************/
-//! @brief Xbase wrapper for standard libary fgetc.
-/*!
- \param c - output character returned by fgetc
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbFile::xbFgetc( char &c ) {
-
- int i;
- i = fgetc( fp );
- if( i == EOF )
- return XB_EOF;
-
- c = (char) i;
- return XB_NO_ERROR;
-}
-/************************************************************************/
-//! @brief Xbase wrapper for standard libary fgets.
-/*!
- \param lSize - reads in at most, one character less than lSize
- \param s - an xbString containing data returned by fseek
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbFile::xbFgets( size_t lSize, xbString &s ) {
-
- s = "";
- if( feof( fp ))
- return XB_EOF;
-
- char *sBuf = (char *) malloc( lSize + 1 );
-
- if( fgets( sBuf, (xbInt32) lSize, fp ) == NULL ){
- free( sBuf );
- return XB_EOF;
- }
- s.Set( sBuf );
- free( sBuf );
- return XB_NO_ERROR;
-}
-/************************************************************************/
-//! @brief Xbase wrapper for standard libary fopen.
-/*!
-
- This routine supports all the standard C library open modes. The Xbase routines only
- use "r" and "r+b".
-
- \param sOpenMode
- <table>
- <tr><th>OpenMode<th>Description
- <tr><td>r<td>Reading
- <tr><td>r+<td>Reading and Writing
- <tr><td>w<td>Open for writing. Truncate to zero bytes if it exists
- <tr><td>w+<td>Open for reading and writing, truncate to zero bytes if it exists
- <tr><td>a<td>Open for append
- <tr><td>a+<td>Open for reading and writing (at end).
- </table>
- The mode can also include the letter "b" for binary ie; "r+b". The "b" is ignored on
- POSIX compliant systems, but is included for cross platform compatibility.
- \param sFileName File name to open
- \param iShareMode
- XB_SINGLE_USER<br>
- XB_MULTI_USER<br>
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbFile::xbFopen( const xbString &sOpenMode, const xbString &sFileName, xbInt16 iShareMode ) {
- if( sFileName == "" || sFqFileName == "" )
- SetFileName( sFileName );
- return xbFopen( sOpenMode, iShareMode );
-}
-
-/************************************************************************/
-//! @brief Xbase wrapper for standard libary fopen.
-/*!
-
- This routine supports all the standard C library open modes. The Xbase routines only
- use "r" and "r+".
-
-
- \param sOpenMode
- <table>
- <tr><th>OpenMode<th>Description
- <tr><td>r<td>Reading
- <tr><td>r+<td>Reading and Writing
- <tr><td>w<td>Open for writing. Truncate to zero bytes if it exists
- <tr><td>w+<td>Open for reading and writing, truncate to zero bytes if it exists
- <tr><td>a<td>Open for append
- <tr><td>a+<td>Open for reading and writing (at end).
- </table>
- The mode can also include the letter "b" for binary ie; "r+b". The "b" is ignored on
- POSIX compliant systems, but is included for cross platform compatibility.
- \param iShareMode
- XB_SINGLE_USER<br>
- XB_MULTI_USER<br>
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbFile::xbFopen( const xbString & sOpenMode, xbInt16 iShareMode ) {
-
- #ifdef HAVE__FSOPEN_F
- if(( fp = _fsopen( sFqFileName.Str(), sOpenMode.Str(), 0x40 )) != NULL ){
- #else
- if(( fp = fopen( sFqFileName.Str(), sOpenMode.Str())) != NULL ){
- #endif
-
- if( sOpenMode == "r" )
- iOpenMode = XB_READ;
- else if( sOpenMode == "w" )
- iOpenMode = XB_WRITE;
- else
- iOpenMode = XB_READ_WRITE;
-
- bFileOpen = xbTrue;
- this->iShareMode = iShareMode;
-
- #ifdef HAVE__FILENO_F
- iFileNo = _fileno( fp );
- #else
- iFileNo = fileno( fp );
- #endif
-
- #ifdef HAVE_SETENDOFFILE_F
- //used by visual studio, 32 bit
- fHandle = (HANDLE) _get_osfhandle( iFileNo );
- #endif
-
- #ifdef XB_LOCKING_SUPPORT
- if( iShareMode )
- xbFTurnOffFileBuffering();
- #endif
-
- return XB_NO_ERROR;
- }
- else
- return XB_OPEN_ERROR;
-}
-/************************************************************************/
-//! @brief Xbase wrapper for standard libary fopen.
-/*!
- \param iOpenMode
- XB_READ<br>
- XB_READ_WRITE<br>
- \param iShareMode
- XB_SINGLE_USER<br>
- XB_MULTI_USER<br>
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbFile::xbFopen( xbInt16 iOpenMode, xbInt16 iShareMode ) {
- this->iOpenMode = iOpenMode;
- if( iOpenMode == XB_READ_WRITE )
- return xbFopen( "r+b", iShareMode );
- else if( iOpenMode == XB_READ )
- return xbFopen( "r", iShareMode );
- else
- return XB_INVALID_OPTION;
-}
-
-/************************************************************************/
-//! @brief Xbase wrapper for standard libary fputc.
-/*!
- \param c Character to write
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-
-xbInt16 xbFile::xbFputc( xbInt32 c ) {
- return xbFputc( c, 1 );
-}
-
-/************************************************************************/
-//! @brief Xbase wrapper for standard libary fputc.
-/*!
- \param c Character to write
- \param iNoOfTimes Number of times to write the character
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-
-xbInt16 xbFile::xbFputc( xbInt32 c, xbInt32 iNoOfTimes ) {
-
- for( xbInt32 l = 0; l < iNoOfTimes; l++ )
- if( fputc( c, fp ) != (int) c )
- return XB_WRITE_ERROR;
-
- return XB_NO_ERROR;
-}
-
-/************************************************************************/
-//! @brief Xbase wrapper for standard libary fputs.
-/*!
- \param s xbString to write to file
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbFile::xbFputs( const xbString & s ){
- if( fputs( s.Str(), fp ) < 0 )
- return XB_WRITE_ERROR;
- else
- return XB_NO_ERROR;
-}
-
-/************************************************************************/
-//! @brief Xbase wrapper for standard libary fread.
-/*!
- \param p Pointer to data to write
- \param size size of write
- \param nmemb Number of times to read it
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbFile::xbFread( void *p, size_t size, size_t nmemb ) {
-
- size_t iRc;
- iRc = fread( p, size, nmemb, fp );
- if( iRc == nmemb )
- return XB_NO_ERROR;
- else
- return XB_READ_ERROR;
-}
-
-/************************************************************************/
-//! @brief Xbase wrapper for standard libary fseek.
-/*!
- \param lOffset Position in file to seek to
- \param iWhence SEEK_SET - from beginning of file<br>
- SEEK_CUR - from current position<br>
- SEEK_END - from end of file<br>
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbFile::xbFseek( xbInt64 lOffset, xbInt32 iWhence ) {
-
- xbInt32 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- try {
-
- #if defined(HAVE_FSEEKO_F)
- iRc = fseeko( fp, lOffset, iWhence );
- if( iRc != 0 ){
- iErrorStop = 100;
- throw iRc;
- }
-
- #elif defined(HAVE__FSEEKI64_F)
- iRc = _fseeki64( fp, lOffset, iWhence );
- if( iRc != 0 ){
- iErrorStop = 110;
- throw iRc;
- }
- #else
- #ifdef XB_PLATFORM_32
- /* if request is larger than 2 gig,this is a part of a locking request,
- assuming offset is less than 4 gig, split the request into 2 fseek calls */
- if( lOffset > 2147483647 && iWhence == SEEK_SET ){
- /* move forward max amt - 2G */
- if(( iRc = fseek( fp, 2147483647, SEEK_SET )) != 0 ){
- iErrorStop = 120;
- throw iRc;
- }
- lOffset -= 2147483647;
- iWhence = SEEK_CUR;
- }
- #endif
- iRc = fseek( fp, (long) lOffset, iWhence );
- if( iRc != 0 ){
- iErrorStop = 310;
- throw iRc;
- }
- #endif
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbFile::xbFseek() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- iRc = XB_SEEK_ERROR;
- }
- return iRc;
-}
-
-/************************************************************************/
-//! @brief Xbase wrapper for standard libary ftell.
-/*!
- Returns the current file position.
- \returns Current file position.
-*/
-
-size_t xbFile::xbFtell() {
- return (size_t) ftell( fp );
-}
-
-/************************************************************************/
-//! @brief Turn off file buffering.
-/*!
- Turns off file buffering. File buffering can't be used while in multi user mode.
-
-*/
-
-void xbFile::xbFTurnOffFileBuffering() {
- setvbuf( fp, NULL, _IONBF, 0 );
-}
-
-/************************************************************************/
-//! @brief Xbase wrapper for standard libary fwrite.
-/*!
- \param p Pointer to data buffer to write
- \param size Size of data to write
- \param nmemb Number of times to write data buffer
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbFile::xbFwrite( const void *p, size_t size, size_t nmemb ) {
-
- size_t iRc;
- iRc = fwrite( p, size, nmemb, fp );
- if( iRc == nmemb )
- return XB_NO_ERROR;
- else
- return XB_READ_ERROR;
-}
-
-/************************************************************************/
-//! @brief Read file until a particular character is encountered on input stream.
-/*!
- This routine will read until cDelim is encountered or eof, which ever occurs first.
-
- \param cDelim Delimiter to stop writing at.
- \param sOut Output xbString containing data read
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbFile::xbReadUntil( const char cDelim, xbString &sOut ){
-
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- char c;
-
- try{
- sOut = "";
- if(( iRc = xbFgetc( c )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- sOut = c;
- while( iRc == XB_NO_ERROR && c != cDelim ){
- if(( iRc = xbFgetc( c )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- sOut += c;
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbFile::xbReadUntil() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/************************************************************************/
-//! @brief Delete file.
-/*!
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbFile::xbRemove() {
- return xbRemove( sFqFileName.Str(), 0 );
-}
-
-/************************************************************************/
-//! @brief Delete file.
-/*!
- \param sFileNameIn Name of file to delete
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbFile::xbRemove( const xbString & sFileNameIn ) {
- return xbRemove( sFileNameIn, 0 );
-}
-
-
-/************************************************************************/
-//! @brief Delete file.
-/*!
- \param sFileNameIn Name of file to delete
- \param iOption If Set to 1, assume this is a delete request for a dbf file, and should rename the dbt file also
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbFile::xbRemove( const xbString & sFileNameIn, xbInt16 iOption ) {
-
- xbInt32 iRc = remove( sFileNameIn.Str());
- if( iRc != 0 )
- return XB_DELETE_FAILED;
-
- if( iOption == 1 ){
- xbString sFileName2 = sFileNameIn;
-
- if( sFileName2[sFileName2.Len()] == 'F' )
- sFileName2.PutAt( sFileName2.Len(), 'T' );
- else
- sFileName2.PutAt( sFileName2.Len(), 't' );
-
- iRc = remove( sFileName2.Str());
- if( iRc != 0 )
- return XB_DELETE_FAILED;
- }
-
- return XB_NO_ERROR;
-}
-
-/************************************************************************/
-//! @brief Rename file.
-/*!
- \param sOldName Original file name
- \param sNewName New file name
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbFile::xbRename( const xbString & sOldName, const xbString & sNewName ){
- if( rename( sOldName.Str(), sNewName.Str()))
- return XB_RENAME_ERROR;
- else
- return XB_NO_ERROR;
-}
-
-/************************************************************************/
-//! @brief Xbase wrapper for rewind.
-/*!
- Set file pointer at beginning of file.
-*/
-
-void xbFile::xbRewind() {
- rewind( fp );
-}
-
-/************************************************************************/
-//! @brief Xbase wrapper for ftruncate.
-/*!
- Set file size to llSize
- \param llSize New file size.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbFile::xbTruncate( xbInt64 llSize ) {
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
- try{
- #ifdef HAVE_FTRUNCATE_F
- if(( iRc = ftruncate( iFileNo, llSize )) != 0 ){
- iErrorStop = 100;
- iRc = XB_WRITE_ERROR;
- throw iRc;
- }
- #elif defined(HAVE_SETENDOFFILE_F)
- if(( iRc = xbFseek( llSize, SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- if(( iRc = SetEndOfFile( fHandle )) == 0 ){
- iErrorStop = 120;
- iRc = XB_WRITE_ERROR;
- throw iRc;
- } else {
- iRc = XB_NO_ERROR;
- }
- #else
-
- // check that cmake can find function SetEndOfFile -
- // cmake could not find for Borland 5.5
- FATAL_COMPILE_ERROR
- CANT_LOCATE_FUNCTION_ftruncate_or_SetEndOfFile
-
- #endif
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbFile::xbTruncate() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/***********************************************************************/
-
-#ifdef XB_LOCKING_SUPPORT
-
-//! @brief Lock / unlock file.
-/*!
- \param iFunction XB_LOCK<br>
- XB_UNLOCK<br>
- \param lOffset Position in file to lock
- \param stLen Length to lock
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbFile::xbLock( xbInt16 iFunction, xbInt64 lOffset, size_t stLen ){
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
- xbInt16 iTries = 0;
-
- try{
- #ifdef HAVE_FCNTL_F
- /* Unix lock function */
-
- if(( iRc = xbFseek( lOffset, SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
-
- struct flock fl;
- switch( iFunction ){
- case( XB_LOCK ):
- fl.l_type = F_WRLCK;
- break;
- case( XB_UNLOCK ):
- fl.l_type = F_UNLCK;
- break;
- default:
- iErrorStop = 110;
- iRc = XB_INVALID_LOCK_OPTION;
- throw iRc;
- break;
- }
- fl.l_whence = SEEK_CUR;
- fl.l_start = 0;
- fl.l_len = (xbInt32) stLen;
- do{
- iRc = fcntl( iFileNo, F_SETLK, &fl );
- if( iRc && (errno == EACCES || errno == EAGAIN )){
- iTries++;
- xbase->xbSleep( GetDefaultLockWait() );
- } else if( iRc ){
- iErrorStop = 120;
- iRc = XB_LOCK_FAILED;
- throw iRc;
- }
- } while( iRc && iTries < GetLockRetryCount());
- if( iRc )
- iRc = XB_LOCK_FAILED; // lock failed, don't log an exception
-
- #elif defined(HAVE_LOCKFILE_F)
- /* Windows 64 byte lock functions */
- /* split a quad word into two double words */
- typedef union{
- size_t Qword;
- xbUInt32 Dword[2];
- } Qsplit;
-
- Qsplit lPos;
- Qsplit lLen;
- lPos.Qword = lOffset;
- lLen.Qword = stLen;
-
- do{
- if( iFunction == XB_LOCK ){
- if(( iRc = LockFile( fHandle, lPos.Dword[0], lPos.Dword[1], lLen.Dword[0], lLen.Dword[1] )) == 0 ){
- iTries++;
- xbase->xbSleep( GetDefaultLockWait() );
- }
- }
- else if( iFunction == XB_UNLOCK ){
- if(( iRc = UnlockFile( fHandle, lPos.Dword[0], lPos.Dword[1], lLen.Dword[0], lLen.Dword[1] )) == 0 ){
- iTries++;
- xbase->xbSleep( GetDefaultLockWait() );
- }
- }
- else
- {
- iErrorStop = 130;
- iRc = XB_INVALID_LOCK_OPTION;
- throw iRc;
- }
- } while( iRc == 0 && iTries < GetLockRetryCount());
- if( iRc == 0 )
- iRc = XB_LOCK_FAILED; // lock failed, don't log an exception
- else
- iRc = XB_NO_ERROR;
-
- #elif defined(HAVE_LOCKING_F) || defined(HAVE__LOCKING_F)
-
- /* older 32 bit locking functions */
- xbInt32 iLockType;
- if( iFunction == XB_LOCK ){
- iLockType = 2;
- } else if( iFunction == XB_UNLOCK ){
- iLockType = 0;
- } else {
- iErrorStop = 140;
- iRc = XB_INVALID_LOCK_OPTION;
- throw iRc;
- }
-
- if(( iRc = xbFseek( lOffset, SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 150;
- iRc = XB_SEEK_ERROR;
- throw iRc;
- }
-
- do{
- #ifdef HAVE__LOCKING_F
- if(( iRc = _locking( iFileNo, iLockType, stLen )) != 0 ){
- #else
- if(( iRc = locking( iFileNo, iLockType, stLen )) != 0 ){
- #endif
- iTries++;
- xbase->xbSleep( GetDefaultLockWait() );
- }
- } while( iRc != 0 && iTries < GetLockRetryCount());
-
- if( iRc != 0 )
- iRc = XB_LOCK_FAILED; // lock failed, don't log an exception
- else
- iRc = XB_NO_ERROR;
-
- #else
-
- FATAL ERROR - CANT BUILD LIBRARY IN CURRENT CONFIG - MISSING - no file locking function defined in xbfile.cpp
-
- #endif
-
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbFile::xbLock() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
-
- return iRc;
-
-
-}
-
-//! @brief Return the locking retry setting.
-/*!
-
- \returns The lock retry setting for this file or ths system default setting if the lock retry for the file
- has not been set.
-*/
-
-xbInt16 xbFile::GetLockRetryCount() const {
-
- if( iLockRetries == -1 )
- return xbase->GetDefaultLockRetries();
- else
- return iLockRetries;
-}
-
-//! @brief Set the lock retry countr for this specific file.
-/*!
- \param iLockRetries The number of retries to attempt before returning failure for this file
-*/
-
-void xbFile::SetLockRetryCount( xbInt16 iLockRetries ) {
- this->iLockRetries = iLockRetries;
-}
-
-#endif
-
-
-/***********************************************************************/
-#ifdef XB_DEBUG_SUPPORT
-//! @brief Debugging routine - dump mem to the log file.
-/*!
- This routine dumps data from meemory to the log file. This is
- primarily used for debugging and analysis purposes.
-
- \param p Pointer to data to write
- \param lBlxkSize Size of block
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbFile::DumpMemToDisk( char *p, size_t lSize ){
-
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
- xbString sDir;
- xbString sFn;
-
- FILE *fpd = NULL;
-
- try{
-
- sDir = GetLogDirectory();
- char cLastChar = sDir[sDir.Len()];
-
- // build logfile name
- if( cLastChar != '/' && cLastChar != '\\' )
- sFn.Sprintf( "%s/MemDump.txt", sDir.Str());
- else
- sFn.Sprintf( "%sMemDump.txt", sDir.Str());
-
- // open the dump file for append
- #ifdef HAVE__FSOPEN_F
- if(( fpd = _fsopen( sFn.Str(), "w+b", 0x40 )) == NULL ){
- #else
- if(( fpd = fopen( sFn.Str(), "w+b")) == NULL ){
- #endif
- iErrorStop = 100;
- iRc = XB_OPEN_ERROR;
- throw iRc;
- }
-
- int i;
- // dump the block to the file
- for( size_t l = 0; l < lSize; l++ ){
- i = *p;
- if( fputc( i, fpd ) == EOF ){
- iErrorStop = 110;
- iRc = XB_WRITE_ERROR;
- throw iRc;
- }
- p++;
- }
- // close the dump file
- fclose( fpd );
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbFile::DumpBlockToDisk() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- if( fpd )
- fclose( fpd );
- }
- return iRc;
-}
-
-/***********************************************************************/
-//! @brief Debugging routine - dump a block to the log file.
-/*!
- This routine dumps a block to the log file. This is
- primarily used for debugging and analysis purposes.
-
- \param ulBlockNo Block number to write
- \param lBlxkSize Size of block
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbFile::DumpBlockToDisk( xbUInt32 ulBlockNo, size_t lBlkSize ){
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
-
- xbUInt32 ulStartBlock;
- xbUInt32 ulEndBlock;
-
- char *p = 0x00;
-
- xbString sDir;
- xbString sFn;
- char *buf = NULL;
- FILE *fpd = NULL;
- try{
-
- if( ulBlockNo == 0 ){
- ulStartBlock = 0;
- xbUInt64 ullFileSizeulBlockNo;
- if(( iRc = GetFileSize( ullFileSizeulBlockNo )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- ulEndBlock = (xbUInt32) (ullFileSizeulBlockNo / lBlkSize);
- } else {
- ulStartBlock = ulBlockNo;
- ulEndBlock = ulBlockNo;
- }
-
- if(( buf = (char *) malloc( lBlkSize )) == NULL ){
- iErrorStop = 110;
- iRc = XB_NO_MEMORY;
- throw iRc;
- }
-
- sDir = GetLogDirectory();
- char cLastChar = sDir[sDir.Len()];
-
- for( xbUInt32 l = ulStartBlock; l < ulEndBlock; l++ ){
-
- if(( iRc = ReadBlock( l, lBlkSize, buf )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
-
- // build logfile name
- if( cLastChar != '/' && cLastChar != '\\' )
- sFn.Sprintf( "%s/BlockDump.B%ld", sDir.Str(), l);
- else
- sFn.Sprintf( "%sBlockDump.%ld", sDir.Str(), l);
-
- // open the dump file for append
- #ifdef HAVE__FSOPEN_F
- if(( fpd = _fsopen( sFn.Str(), "w+b", 0x40 )) == NULL ){
- #else
- if(( fpd = fopen( sFn.Str(), "w+b")) == NULL ){
- #endif
- iErrorStop = 130;
- iRc = XB_OPEN_ERROR;
- throw iRc;
- }
-
- // dump the block to the file
- p = buf;
- for( size_t l = 0; l < lBlkSize; l++ ){
- //if( fputc( *p, fpd ) != *p ){
- if( fputc( *p, fpd ) == EOF ){
- iErrorStop = 140;
- iRc = XB_WRITE_ERROR;
- throw iRc;
- }
- p++;
- }
- // close the dump file
- fclose( fpd );
- }
-
- // free the buffer
- if( buf )
- free( buf );
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbFile::DumpBlockToDisk() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- if( buf )
- free( buf );
- if( fpd )
- fclose( fpd );
- }
- return iRc;
-}
-#endif
-/***********************************************************************/
-} /* namespace xb */
-
-
-
diff --git a/src/core/xbfilter.cpp b/src/core/xbfilter.cpp
deleted file mode 100755
index 0fb643d..0000000
--- a/src/core/xbfilter.cpp
+++ /dev/null
@@ -1,544 +0,0 @@
-/* xbfilter.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-
-This module handles uda (user data area) methods
-
-*/
-
-#include "xbase.h"
-
-
-// might need to change thisto XB_EXPRESSION_SUPPORT
-#ifdef XB_FILTER_SUPPORT
-
-
-namespace xb{
-
-/************************************************************************/
-xbFilter::xbFilter( xbDbf *dbf ) {
- this->dbf = dbf;
- this->exp = NULL;
- lLimit = 0; // max number of responses
- lCurQryCnt = 0; // current number, this query + = moving fwd
- // - = moving backwards
-
- #ifdef XB_INDEX_SUPPORT
- pIx = NULL; // if index is set, the class uses the index tag, otherwise table
- vpTag = NULL;
- #endif // XB_INDEX_SUPPORT
-
-}
-/************************************************************************/
-xbFilter::~xbFilter() {
- if( exp )
- delete exp;
-}
-/************************************************************************/
-xbInt32 xbFilter::GetLimit() const {
- return lLimit;
-}
-/************************************************************************/
-xbInt32 xbFilter::GetQryCnt() const {
- return lCurQryCnt;
-}
-/************************************************************************/
-void xbFilter::SetLimit( xbInt32 lLimit ){
- this->lLimit = lLimit;
-}
-/************************************************************************/
-void xbFilter::ResetQryCnt(){
- this->lCurQryCnt = 0;
-}
-
-/************************************************************************/
-xbInt16 xbFilter::Set( const char *sFilter ) {
- xbString sFilt( sFilter );
- return Set( sFilt );
-}
-
-/************************************************************************/
-xbInt16 xbFilter::Set( xbString &sFilter ) {
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- try{
-
- if( exp )
- delete exp;
-
- exp = new xbExp( dbf->GetXbasePtr(), dbf );
- if(( iRc = exp->ParseExpression( sFilter.Str() )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- if( exp->GetReturnType() != XB_EXP_LOGICAL ){
- iErrorStop = 110;
- iRc = XB_INVALID_EXPRESSION;
- delete exp;
- exp = NULL;
- throw iRc;
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbFilter::SetExpression() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- dbf->GetXbasePtr()->WriteLogMessage( sMsg.Str() );
- dbf->GetXbasePtr()->WriteLogMessage( dbf->GetXbasePtr()->GetErrorMessage( iRc ));
- }
- return iRc;
-}
-/************************************************************************/
-xbInt16 xbFilter::GetFirstRecord( xbInt16 iOption ) {
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- try{
-
- if( !exp ){
- iErrorStop = 100;
- throw iRc;
- }
-
- lCurQryCnt = 0;
- if(( iRc = dbf->GetFirstRecord( iOption )) != XB_NO_ERROR ){
- if( iRc == XB_EMPTY || iRc == XB_EOF )
- return iRc;
- else{
- iErrorStop = 110;
- throw iRc;
- }
- }
-
- xbBool bFound = xbFalse;
- while( !bFound && iRc == XB_NO_ERROR ){
- if(( iRc = exp->ProcessExpression()) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- if(( iRc = exp->GetBoolResult( bFound )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- if( !bFound ){
- if(( iRc = dbf->GetNextRecord( iOption )) != XB_NO_ERROR ){
- if( iRc == XB_EOF ){
- return iRc;
- } else {
- iErrorStop = 140;
- throw iRc;
- }
- }
- }
- }
- lCurQryCnt++;
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbFilter::GetFirstRecord() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- dbf->GetXbasePtr()->WriteLogMessage( sMsg.Str() );
- dbf->GetXbasePtr()->WriteLogMessage( dbf->GetXbasePtr()->GetErrorMessage( iRc ));
- }
- return iRc;
-}
-/************************************************************************/
-xbInt16 xbFilter::GetNextRecord( xbInt16 iOption ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- try{
-
- if( !exp ){
- iErrorStop = 100;
- throw iRc;
- }
-
- if( lLimit != 0 && abs( lCurQryCnt ) >= lLimit )
- return XB_LIMIT_REACHED;
-
- if(( iRc = dbf->GetNextRecord( iOption )) != XB_NO_ERROR ){
- if( iRc == XB_EOF )
- return iRc;
- else{
- iErrorStop = 110;
- throw iRc;
- }
- }
-
- xbBool bFound = xbFalse;
- while( !bFound && iRc == XB_NO_ERROR ){
- if(( iRc = exp->ProcessExpression()) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- if(( iRc = exp->GetBoolResult( bFound )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- if( !bFound ){
- if(( iRc = dbf->GetNextRecord( iOption )) != XB_NO_ERROR ){
- if( iRc == XB_EOF ){
- return iRc;
- } else {
- iErrorStop = 140;
- throw iRc;
- }
- }
- }
- }
- lCurQryCnt++;
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbFilter::GetNextRecord() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- dbf->GetXbasePtr()->WriteLogMessage( sMsg.Str() );
- dbf->GetXbasePtr()->WriteLogMessage( dbf->GetXbasePtr()->GetErrorMessage( iRc ));
- }
- return iRc;
-}
-/************************************************************************/
-xbInt16 xbFilter::GetPrevRecord( xbInt16 iOption ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- try{
-
- if( !exp ){
- iErrorStop = 100;
- throw iRc;
- }
-
- if( lLimit != 0 && abs( lCurQryCnt ) >= lLimit )
- return XB_LIMIT_REACHED;
-
- if(( iRc = dbf->GetPrevRecord( iOption )) != XB_NO_ERROR ){
- if( iRc == XB_BOF )
- return iRc;
- else{
- iErrorStop = 110;
- throw iRc;
- }
- }
-
- xbBool bFound = xbFalse;
- while( !bFound && iRc == XB_NO_ERROR ){
- if(( iRc = exp->ProcessExpression()) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- if(( iRc = exp->GetBoolResult( bFound )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- if( !bFound ){
- if(( iRc = dbf->GetPrevRecord( iOption )) != XB_NO_ERROR ){
- if( iRc == XB_BOF ){
- return iRc;
- } else {
- iErrorStop = 140;
- throw iRc;
- }
- }
- }
- }
- lCurQryCnt--;
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbFilter::GetPrevRecord() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- dbf->GetXbasePtr()->WriteLogMessage( sMsg.Str() );
- dbf->GetXbasePtr()->WriteLogMessage( dbf->GetXbasePtr()->GetErrorMessage( iRc ));
- }
- return iRc;
-}
-/************************************************************************/
-xbInt16 xbFilter::GetLastRecord( xbInt16 iOption ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- try{
-
- if( !exp ){
- iErrorStop = 100;
- throw iRc;
- }
-
- lCurQryCnt = 0;
- if(( iRc = dbf->GetLastRecord( iOption )) != XB_NO_ERROR ){
- if( iRc == XB_EOF )
- return iRc;
- else{
- iErrorStop = 110;
- throw iRc;
- }
- }
-
- xbBool bFound = xbFalse;
- while( !bFound && iRc == XB_NO_ERROR ){
- if(( iRc = exp->ProcessExpression()) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- if(( iRc = exp->GetBoolResult( bFound )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- if( !bFound ){
- if(( iRc = dbf->GetPrevRecord( iOption )) != XB_NO_ERROR ){
- if( iRc == XB_BOF ){
- return iRc;
- } else {
- iErrorStop = 140;
- throw iRc;
- }
- }
- }
- }
- lCurQryCnt--;
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbFilter::GetLastRecord() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- dbf->GetXbasePtr()->WriteLogMessage( sMsg.Str() );
- dbf->GetXbasePtr()->WriteLogMessage( dbf->GetXbasePtr()->GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/************************************************************************/
-
-#ifdef XB_INDEX_SUPPORT
-
-/************************************************************************/
-xbInt16 xbFilter::GetFirstRecordIx( xbInt16 iOption ) {
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- try{
-
- if( !exp ){
- iErrorStop = 100;
- throw iRc;
- }
-
- lCurQryCnt = 0;
- if(( iRc = dbf->GetCurIx()->GetFirstKey( dbf->GetCurTag(), iOption )) != XB_NO_ERROR ){
- if( iRc == XB_EMPTY || iRc == XB_EOF )
- return iRc;
- else{
- iErrorStop = 110;
- throw iRc;
- }
- }
-
- xbBool bFound = xbFalse;
- while( !bFound && iRc == XB_NO_ERROR ){
- if(( iRc = exp->ProcessExpression()) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- if(( iRc = exp->GetBoolResult( bFound )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- if( !bFound ){
- // if(( iRc = pIx->GetNextKey( vpTag, iOption )) != XB_NO_ERROR ){
- if(( iRc = dbf->GetCurIx()->GetNextKey( dbf->GetCurTag(), iOption )) != XB_NO_ERROR ){
- if( iRc == XB_EOF ){
- return iRc;
- } else {
- iErrorStop = 140;
- throw iRc;
- }
- }
- }
- }
- lCurQryCnt++;
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbFilter::GetFirstRecordIx() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- dbf->GetXbasePtr()->WriteLogMessage( sMsg.Str() );
- dbf->GetXbasePtr()->WriteLogMessage( dbf->GetXbasePtr()->GetErrorMessage( iRc ));
- }
- return iRc;
-}
-/************************************************************************/
-xbInt16 xbFilter::GetNextRecordIx( xbInt16 iOption ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- try{
-
- if( !exp ){
- iErrorStop = 100;
- throw iRc;
- }
-
- if( lLimit != 0 && abs( lCurQryCnt ) >= lLimit )
- return XB_LIMIT_REACHED;
-
- if(( iRc = dbf->GetCurIx()->GetNextKey( dbf->GetCurTag(), iOption )) != XB_NO_ERROR ){
- if( iRc == XB_EOF )
- return iRc;
- else{
- iErrorStop = 110;
- throw iRc;
- }
- }
-
- xbBool bFound = xbFalse;
- while( !bFound && iRc == XB_NO_ERROR ){
- if(( iRc = exp->ProcessExpression()) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- if(( iRc = exp->GetBoolResult( bFound )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- if( !bFound ){
- // if(( iRc = pIx->GetNextKey( vpTag, iOption )) != XB_NO_ERROR ){
- if(( iRc = dbf->GetCurIx()->GetNextKey( dbf->GetCurTag(), iOption )) != XB_NO_ERROR ){
- if( iRc == XB_EOF ){
- return iRc;
- } else {
- iErrorStop = 140;
- throw iRc;
- }
- }
- }
- }
- lCurQryCnt++;
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbFilter::GetNextRecordIx() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- dbf->GetXbasePtr()->WriteLogMessage( sMsg.Str() );
- dbf->GetXbasePtr()->WriteLogMessage( dbf->GetXbasePtr()->GetErrorMessage( iRc ));
- }
- return iRc;
-}
-/************************************************************************/
-xbInt16 xbFilter::GetPrevRecordIx( xbInt16 iOption ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- try{
-
- if( !exp ){
- iErrorStop = 100;
- throw iRc;
- }
-
- if( lLimit != 0 && abs( lCurQryCnt ) >= lLimit )
- return XB_LIMIT_REACHED;
-
- if(( iRc = dbf->GetCurIx()->GetPrevKey( dbf->GetCurTag(), iOption )) != XB_NO_ERROR ){
- if( iRc == XB_BOF )
- return iRc;
- else{
- iErrorStop = 110;
- throw iRc;
- }
- }
-
- xbBool bFound = xbFalse;
- while( !bFound && iRc == XB_NO_ERROR ){
- if(( iRc = exp->ProcessExpression()) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- if(( iRc = exp->GetBoolResult( bFound )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- if( !bFound ){
- //if(( iRc = pIx->GetPrevKey( vpTag, iOption )) != XB_NO_ERROR ){
- if(( iRc = dbf->GetCurIx()->GetPrevKey( dbf->GetCurTag(), iOption )) != XB_NO_ERROR ){
- if( iRc == XB_BOF ){
- return iRc;
- } else {
- iErrorStop = 140;
- throw iRc;
- }
- }
- }
- }
- lCurQryCnt--;
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbFilter::GetPrevRecordIx() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- dbf->GetXbasePtr()->WriteLogMessage( sMsg.Str() );
- dbf->GetXbasePtr()->WriteLogMessage( dbf->GetXbasePtr()->GetErrorMessage( iRc ));
- }
- return iRc;
-}
-/************************************************************************/
-xbInt16 xbFilter::GetLastRecordIx( xbInt16 iOption ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- try{
-
- if( !exp ){
- iErrorStop = 100;
- throw iRc;
- }
- lCurQryCnt = 0;
- if(( iRc = dbf->GetCurIx()->GetLastKey( dbf->GetCurTag(), iOption )) != XB_NO_ERROR ){
- if( iRc == XB_EOF )
- return iRc;
- else{
- iErrorStop = 110;
- throw iRc;
- }
- }
- xbBool bFound = xbFalse;
- while( !bFound && iRc == XB_NO_ERROR ){
- if(( iRc = exp->ProcessExpression()) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- if(( iRc = exp->GetBoolResult( bFound )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- if( !bFound ){
- if(( iRc = dbf->GetCurIx()->GetPrevKey( dbf->GetCurTag(), iOption )) != XB_NO_ERROR ){
- if( iRc == XB_BOF ){
- return iRc;
- } else {
- iErrorStop = 140;
- throw iRc;
- }
- }
- }
- }
- lCurQryCnt--;
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbFilter::GetLastRecordIx() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- dbf->GetXbasePtr()->WriteLogMessage( sMsg.Str() );
- dbf->GetXbasePtr()->WriteLogMessage( dbf->GetXbasePtr()->GetErrorMessage( iRc ));
- }
- return iRc;
-}
-#endif // XB_INDEX_SUPPORT
-
-
-/************************************************************************/
-} /* namespace */
-#endif /* XB_FILTER_SUPPORT */ \ No newline at end of file
diff --git a/src/core/xbfuncs.cpp b/src/core/xbfuncs.cpp
deleted file mode 100755
index a038611..0000000
--- a/src/core/xbfuncs.cpp
+++ /dev/null
@@ -1,850 +0,0 @@
-/* xbfuncs.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2017,2022 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-#include "xbase.h"
-
-#ifdef XB_FUNCTION_SUPPORT
-
-namespace xb{
-
-
-// All funtions have a similar structure, return an xbInt16 return code
-// Have a variable number of input operands and one output operand
-
-/************************************************************************/
-//! @brief Calculate absolute value of a numeric expression.
-/*!
- Expression function ABS().
- \param dIn Input - Numeric expression.
- \param dOut Output - Absolute value.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbXBase::ABS( xbDouble dIn, xbDouble &dOut ){
- if( dIn < 0 )
- dOut = dIn * -1;
- else
- dOut = dIn;
- return XB_NO_ERROR;
-}
-
-/*************************************************************************/
-//! @brief Trim leading and trailing white space from a string.
-/*!
- Expression function ALLTRIM().
- \param sIn Input - Input string to trim.
- \param sOut Output - Trimmed string.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbXBase::ALLTRIM( const xbString &sIn, xbString &sOut ){
- sOut = sIn;
- sOut.Trim();
- return XB_NO_ERROR;
-}
-
-/*************************************************************************/
-//! @brief Return ASCII code for the first character in a string.
-/*!
- Expression function ASC().
- \param sIn Input - Input character string.
- \param dAscOut Output - Ascii code of first character in string.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbXBase::ASC( const xbString &sIn, xbDouble &dAscOut ){
- if( sIn == "" )
- return XB_PARSE_ERROR;
-
- dAscOut = sIn[1];
- return XB_NO_ERROR;
-}
-/*************************************************************************/
-//! @brief Return number indicating starting position of string within a string.
-/*!
- Expression function AT().
- \param s1 Input - Input string to search for.
- \param s2 Input - Input string to search.
- \param dPos Output - Position of string s1 within s2.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbXBase::AT( const xbString &s1, const xbString &s2, xbDouble &dPos ){
- /* looks for s1 in s2 */
- xbInt32 lCnt = 0;
- const char *p;
- const char *p2 = s2;
- if( strlen( s1 ) > strlen( s2 )) return 0;
- if(( p = strstr( s2, s1 )) == NULL )
- return XB_NO_ERROR;
- while( p2++ != p ) lCnt++;
- dPos = lCnt + 1;
- return XB_NO_ERROR;
-}
-
-/*************************************************************************/
-//! @brief Return character weekday name for date.
-/*!
- Expression function CDOW().
- \param dInDate Input - Input date.
- \param sOutDow Output - Character day of week.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbXBase::CDOW( xbDate &dInDate, xbString &sOutDow ){
- return dInDate.CharDayOf( sOutDow );
-}
-
-/*************************************************************************/
-//! @brief Convert numeric expression to a character.
-/*!
- Expression function CHR().
- \param dAsciCd Input - Numeric expression.
- \param sOut Output - Character result.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbXBase::CHR( xbDouble dAsciCd, xbString &sOut ){
- static char buf[2];
- buf[0] = (char) dAsciCd;
- buf[1] = 0x00;
- sOut = buf;
- return XB_NO_ERROR;
-}
-
-/*************************************************************************/
-//! @brief Return character month name for date.
-/*!
- Expression function CMONTH().
- \param dInDate Input - Input date.
- \param sOutMonth Output - Character month.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbXBase::CMONTH( xbDate &dInDate, xbString &sOutMonth ){
- return dInDate.CharMonthOf( sOutMonth );
-}
-/*************************************************************************/
-//! @brief Return date from character input date.
-/*!
- Expression function CTOD().
- \param sInDate Input - Input date in MM/DD/YY format.
- \param dOutDate Output - Output date.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbXBase::CTOD( const xbString &sInDate, xbDate &dOutDate ){
- return dOutDate.CTOD( sInDate );
-}
-/*************************************************************************/
-//! @brief Return system date.
-/*!
- Expression function DATE().
- \param dOutDate Output - Output date.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbXBase::DATE( xbDate &dOutDate ){
- return dOutDate.Sysdate();
-}
-/*************************************************************************/
-//! @brief Return the day of the month from a date.
-/*!
- Expression function DAY().
- \param dInDate Input - Input date.
- \param dOutDay Output - Output day of month.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbXBase::DAY( const xbDate &dInDate, xbDouble &dOutDay ){
- xbInt16 iOutDay;;
- iOutDay = dInDate.DayOf( XB_FMT_MONTH );
- if( iOutDay < 0 ){
- return iOutDay;
- }else{
- dOutDay = iOutDay;
- return XB_NO_ERROR;
- }
-}
-/*************************************************************************/
-//! @brief Return record deletion status for current record.
-/*!
- Expression function DEL().
- \param dbf Input - Table to check record deletion status.
- \param iRecBufSw Input - Which buffer. 0 = Current record buffer, 1 = Original record buffer
- \param sOut Output - "*" if record is deleted, otherise space.
- \returns XB_NO_ERROR<br>XB_PARSE_ERROR.
-
-*/
-xbInt16 xbXBase::DEL( xbDbf *dbf , xbString &sOut, xbInt16 iRecBufSw ) {
-
- if( dbf ){
- if( dbf->RecordDeleted( iRecBufSw ))
- sOut = "*";
- else
- sOut = " ";
- return XB_NO_ERROR;
- } else {
- return XB_PARSE_ERROR;
- }
-}
-
-/*************************************************************************/
-//! @brief Return record deletion status for current record.
-/*!
- Expression function DELETED().
- \param dbf Input - Table to check record deletion status for.
- \param iRecBufSw Input - Which buffer. 0 = Current record buffer, 1 = Original record buffer
- \param bOut Output - xbTrue if record is deleted.<br>xbFalse if record is not deleted.
- \returns XB_NO_ERROR<br>XB_PARSE_ERROR.
-*/
-xbInt16 xbXBase::DELETED( xbDbf *dbf , xbBool &bOut, xbInt16 iRecBufSw ) {
-
- if( dbf ){
- bOut = dbf->RecordDeleted( iRecBufSw );
- return XB_NO_ERROR;
- } else {
- return XB_PARSE_ERROR;
- }
-}
-
-/*************************************************************************/
-//! @brief Clipper DESCEND function.
-/*!
- Expression function DESCEND().
- \param dtInDate Input - Input date.
- \param dtOutDate Output - Output date.
- \returns XB_NO_ERROR.
-*/
-xbInt16 xbXBase::DESCEND( const xbDate &dtInDate, xbDate &dtOutDate ){
- xbDate d( "29991231" );
- dtOutDate.JulToDate8( 2415021 + d.JulianDays() - dtInDate.JulianDays());
- return XB_NO_ERROR;
-}
-
-/*************************************************************************/
-//! @brief Clipper DESCEND function.
-/*!
- Expression function DESEND().
- \param dIn Input - Input number.
- \param dOut Output - Output number.
- \returns XB_NO_ERROR.
-*/
-xbInt16 xbXBase::DESCEND( xbDouble dIn, xbDouble &dOut ){
- dOut = dIn * -1;
- return XB_NO_ERROR;
-}
-
-/*************************************************************************/
-//! @brief Clipper DESCEND function.
-/*!
- Expression function DESEND().
- \param sIn Input - Input string.
- \param sOut Output - Output string.
- \returns XB_NO_ERROR.
-*/
-xbInt16 xbXBase::DESCEND( const xbString &sIn, xbString &sOut ){
-
- sOut = sIn;
- for( xbUInt32 l = 0; l < sIn.Len(); l++ )
- sOut.PutAt( l+1, (char) (255 - sOut[l+1]));
- return XB_NO_ERROR;
-}
-
-/*************************************************************************/
-//! @brief Return number of day of week.
-/*!
- Expression function DOW().
- \param dtInDate Input - Input date.
- \param dDowOut Output - Output day of week.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbXBase::DOW( const xbDate &dtInDate, xbDouble &dDowOut ){
- xbInt16 iDow;
- iDow = dtInDate.DayOf( XB_FMT_WEEK );
- if( iDow < 0 ){
- return XB_PARSE_ERROR;
- }else{
- dDowOut = iDow;
- return XB_NO_ERROR;
- }
-}
-
-/*************************************************************************/
-//! @brief Return character date from input date.
-/*!
- Expression function DTOC().
- \param dInDate Input - Input date.
- \param sOutFmtDate Output - Output date.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbXBase::DTOC( xbDate &dInDate, xbString &sOutFmtDate ){
- return dInDate.FormatDate( "MM/DD/YY", sOutFmtDate );
-}
-/*************************************************************************/
-//! @brief Return char CCYYMMDD date from input date.
-/*!
- Expression function DTOS().
- \param dtInDate Input - Input date.
- \param sOutFmtDate Output - Output date.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbXBase::DTOS( xbDate &dtInDate, xbString &sOutFmtDate ){
- return dtInDate.FormatDate( "YYYYMMDD", sOutFmtDate );
-}
-/*************************************************************************/
-//! @brief Return exponent value.
-/*!
- Expression function EXP().
- This function returns e**x where e is approximately 2.71828 and x is dIn.
-
- \param dIn Input - exp value.
- \param dOut Output - value.
- \returns XB_NO_ERROR
-*/
-xbInt16 xbXBase::EXP( xbDouble dIn, xbDouble &dOut )
-{
- dOut = exp( dIn );
- return XB_NO_ERROR;
-}
-/*************************************************************************/
-//! @brief Immediate if.
-/*!
- Expression function IIF().
- \param bResult Input - boolean expression.
- \param sTrueResult Input - value if boolean expression is true.
- \param sFalseResult Input - value if boolean expression is false.
- \param sResult Output - sTrueResult or sFalseResult depending on bResultvalue.
- \returns XB_NO_ERROR
-*/
-xbInt16 xbXBase::IIF( xbBool bResult, const xbString &sTrueResult, const xbString &sFalseResult, xbString &sResult )
-{
- if( sFalseResult.Len() != sTrueResult.Len())
- return XB_INCONSISTENT_PARM_LENS;
- if( bResult )
- sResult = sTrueResult;
- else
- sResult = sFalseResult;
- return XB_NO_ERROR;
-}
-/*************************************************************************/
-//! @brief Convert number to integer, truncate any decimals.
-/*!
- Expression function INT().
- \param dIn Input - Input number.
- \param dOut Output - integer.
- \returns XB_NO_ERROR
-*/
-
-xbInt16 xbXBase::INT( xbDouble dIn, xbDouble &dOut )
-{
- xbInt64 ll = (xbInt64) dIn;
- dOut = (xbDouble) ll;
- return XB_NO_ERROR;
-}
-
-/*************************************************************************/
-//! @brief Check if string begins with alpha character.
-/*!
- Expression function ISALPHA().
- \param sIn Input - Input string.
- \param bResult Output - xbTrue if string begins with alpha character.<br>xbFalse if string does not begin with alpha character.
- \returns XB_NO_ERROR
-*/
-xbInt16 xbXBase::ISALPHA( const xbString &sIn, xbBool &bResult ){
- if( isalpha(sIn[1]))
- bResult = 1;
- else
- bResult = 0;
- return XB_NO_ERROR;
-}
-
-/*************************************************************************/
-//! @brief Check if string begins with lower case alpha character.
-/*!
- Expression function ISLOWER().
- \param sIn Input - Input string.
- \param bResult Output - xbTrue if string begins with lower case alpha character.<br>
- xbFalse if string does not begin with lower case alpha character.
- \returns XB_NO_ERROR
-*/
-
-xbInt16 xbXBase::ISLOWER( const xbString &sIn, xbBool &bResult ){
- if( islower(sIn[1]))
- bResult = 1;
- else
- bResult = 0;
- return XB_NO_ERROR;
-}
-/*************************************************************************/
-//! @brief Check if string begins with upper case alpha character.
-/*!
- Expression function ISUPPER().
- \param sIn Input - Input string.
- \param bResult Output - xbTrue if string begins with upper case alpha character.<br>
- xbFalse if string does not begin with upper case alpha character.
- \returns XB_NO_ERROR
-*/
-
-xbInt16 xbXBase::ISUPPER( const xbString &sIn, xbBool &bResult ){
- if( isupper(sIn[1]))
- bResult = 1;
- else
- bResult = 0;
- return XB_NO_ERROR;
-}
-
-/*************************************************************************/
-//! @brief Return left characters from string.
-/*!
- Expression function LEFT().
- \param sIn Input - string.
- \param ulCharCnt Input - number of characters to extract from string.
- \param sOut Output - resultant string.
- \returns XB_NO_ERROR
-*/
-xbInt16 xbXBase::LEFT( const xbString &sIn, xbUInt32 ulCharCnt, xbString &sOut ){
- sOut.Assign( sIn, 1, ulCharCnt );
- return XB_NO_ERROR;
-}
-
-/*************************************************************************/
-//! @brief Return length of string.
-/*!
- Expression function LEN().
- \param sIn Input - Input string.
- \param dOut Output - string length.
- \returns XB_NO_ERROR
-*/
-
-xbInt16 xbXBase::LEN( const xbString &sIn, xbDouble &dOut ){
- dOut = sIn.Len();
- return XB_NO_ERROR;
-}
-
-/*************************************************************************/
-//! @brief Calculate logarithm.
-/*!
- Expression function LOG().
- \param dIn Input - numeric expression.
- \param dOut Output - numeric log value.
- \returns XB_NO_ERROR
-*/
-xbInt16 xbXBase::LOG( xbDouble dIn, xbDouble &dOut ){
- dOut = log( dIn );
- return XB_NO_ERROR;
-}
-/*************************************************************************/
-//! @brief Trim left side of string.
-/*!
- Expression function LTRIM().
- \param sIn Input - string.
- \param sOut Output - string result.
- \returns XB_NO_ERROR
-*/
-xbInt16 xbXBase::LTRIM( const xbString &sIn, xbString &sOut ){
- sOut = sIn;
- sOut.Ltrim();
- return XB_NO_ERROR;
-}
-/*************************************************************************/
-//! @brief Convert upper case to lower case.
-/*!
- Expression function LOWER().
- \param sIn Input - string.
- \param sOut Output - string result.
- \returns XB_NO_ERROR
-*/
-
-xbInt16 xbXBase::LOWER( const xbString &sIn, xbString &sOut ){
- sOut = sIn;
- sOut.ToLowerCase();
- return XB_NO_ERROR;
-}
-
-/*************************************************************************/
-//! @brief Return higher of two values.
-/*!
- Expression function MAX().
- \param d1 Input - Numeric value 1.
- \param d2 Input - Numeric value 2.
- \param dOut Output - Higher of d1 or d2.
- \returns XB_NO_ERROR
-*/
-xbInt16 xbXBase::MAX( xbDouble d1, xbDouble d2, xbDouble &dOut )
-{
- if( d1 > d2 )
- dOut = d1;
- else
- dOut = d2;
- return XB_NO_ERROR;
-}
-
-/*************************************************************************/
-//! @brief Return lessor of two values.
-/*!
- Expression function MIN().
- \param d1 Input - Numeric value 1.
- \param d2 Input - Numeric value 2.
- \param dOut Output - Lessor of d1 or d2.
- \returns XB_NO_ERROR
-*/
-xbInt16 xbXBase::MIN( xbDouble d1, xbDouble d2, xbDouble &dOut )
-{
- if( d1 < d2 )
- dOut = d1;
- else
- dOut = d2;
- return XB_NO_ERROR;
-}
-
-/*************************************************************************/
-//! @brief Return number of month for a given date.
-/*!
- Expression function MONTH().
- \param dInDate Input date.
- \param dOutMonth - Month number.
- \returns XB_NO_ERROR.<br>XB_PARSE_ERROR.
-*/
-xbInt16 xbXBase::MONTH( xbDate &dInDate, xbDouble &dOutMonth ){
-
- xbInt16 iRc = dInDate.MonthOf();
- if( iRc < 0 )
- return XB_PARSE_ERROR;
- else{
- dOutMonth = iRc;
- return XB_NO_ERROR;
- }
-}
-
-/*************************************************************************/
-//! @brief Return number of records in a given table.
-/*!
- Expression function RECCOUNT().
- \param dbf - Table.
- \param dOut - Number of records.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbXBase::RECCOUNT( xbDbf *dbf , xbDouble &dOut ) {
-
- xbUInt32 ulRecCnt;
- xbInt16 iRc = dbf->GetRecordCnt( ulRecCnt );
- dOut = (xbDouble) ulRecCnt;
- return iRc;
-
-}
-
-/*************************************************************************/
-//! @brief Return current record number for a given table.
-/*!
- Expression function RECNO().
- \param dbf - Table.
- \param dOut - Record number.
- \returns XB_NO_ERROR.<br>XB_PARSE_ERROR.
-*/
-
-xbInt16 xbXBase::RECNO( xbDbf *dbf , xbDouble &dOut ) {
- if( dbf ){
- dOut = (xbDouble) dbf->GetCurRecNo();
- return XB_NO_ERROR;
- } else {
- dOut = -1;
- return XB_PARSE_ERROR;
- }
-}
-
-/*************************************************************************/
-//! @brief Repeat character expression N times.
-/*!
- Expression function REPLICATE().
- \param sIn Inout - String to replicate.
- \param ulRepCnt Input - Number of times to repeat.
- \param sOut Output - String result.
- \returns XB_NO_ERROR.<br>XB_PARSE_ERROR.
-*/
-xbInt16 xbXBase::REPLICATE( const xbString &sIn, xbUInt32 ulRepCnt, xbString &sOut ){
- sOut = "";
- for( xbUInt32 i = 0; i < ulRepCnt; i++ )
- sOut += sIn;
- return XB_NO_ERROR;
-}
-
-/*************************************************************************/
-//! @brief Return right characters from string.
-/*!
- Expression function RIGHT().
- \param sIn Input - string.
- \param ulCharCnt Input - number of characters to extract from string.
- \param sOut Output - resultant string.
- \returns XB_NO_ERROR
-*/
-
-xbInt16 xbXBase::RIGHT( const xbString &sIn, xbUInt32 ulCharCnt, xbString &sOut ){
- if( sIn.Len() < ulCharCnt )
- sOut = sIn;
- else
- sOut.Assign( sIn, sIn.Len() - ulCharCnt + 1, ulCharCnt );
- return XB_NO_ERROR;
-}
-
-/*************************************************************************/
-//! @brief Trim right side of string.
-/*!
- Expression function RTRIM().
- \param sIn Input - string.
- \param sOut Output - string result.
- \returns XB_NO_ERROR
-*/
-
-xbInt16 xbXBase::RTRIM( const xbString &sIn, xbString &sOut ){
- sOut = sIn;
- sOut.Rtrim();
- return XB_NO_ERROR;
-}
-
-/*************************************************************************/
-//! @brief Generate a string of N spaces.
-/*!
- Expression function SPACE().
- \param lCnt Input - Number of spaces.
- \param sOut Output - Output String.
- \returns XB_NO_ERROR.
-*/
-xbInt16 xbXBase::SPACE( xbInt32 lCnt, xbString &sOut ){
- sOut = "";
- sOut.PadLeft( ' ', (xbUInt32) lCnt );
- return XB_NO_ERROR;
-}
-
-/*************************************************************************/
-//! @brief Calculate a square root.
-/*!
- Expression function SQRT().
- \param dBase Input - Base number.
- \param dSqrRoot Output - Square root.
- \returns XB_NO_ERROR.
-*/
-
-xbInt16 xbXBase::SQRT( xbDouble dBase, xbDouble &dSqrRoot )
-{
- dSqrRoot = sqrt( dBase );
- return XB_NO_ERROR;
-}
-
-/*************************************************************************/
-//! @brief Converts a valid 8 byte (CCYYMMDD) input date into a date class.
-/*!
- Expression function STOD().
- \param sInDate Input - Input date.
- \param dtOutDate Output - Output date.
- \returns XB_NO_ERROR.<br>XB_INVALID_DATE.
-*/
-
-xbInt16 xbXBase::STOD( const xbString &sInDate, xbDate &dtOutDate ){
-
- if( dtOutDate.DateIsValid( sInDate )){
- dtOutDate = sInDate;
- return XB_NO_ERROR;
- } else {
- return XB_INVALID_DATE;
- }
-}
-
-/*************************************************************************/
-//! @brief Convert number to a character string.
-/*!
- Expression function STR().
- \param dIn Input - Number.
- \param sOut Output - String.
- \returns XB_NO_ERROR.
-*/
-
-xbInt16 xbXBase::STR( xbDouble dIn, xbString &sOut) {
- xbString sPadChar = " ";
- return STR( dIn, 10, 0, sPadChar, sOut );
-}
-
-/*************************************************************************/
-//! @brief Convert number to a character string.
-/*!
- Expression function STR().
- \param dIn Input - Number.
- \param ulLen Input - Length.
- \param sOut Output - String.
- \returns XB_NO_ERROR.
-*/
-xbInt16 xbXBase::STR( xbDouble dIn, xbUInt32 ulLen, xbString &sOut) {
- xbString sPadChar = " ";
- return STR( dIn, ulLen, 0, sPadChar, sOut );
-}
-
-/*************************************************************************/
-//! @brief Convert number to a character string.
-/*!
- Expression function STR().
- \param dIn Input - Number.
- \param ulLen Input - Length.
- \param ulDec Input - Number of decimals.
- \param sOut Output - String.
- \returns XB_NO_ERROR.
-*/
-
-xbInt16 xbXBase::STR( xbDouble dIn, xbUInt32 ulLen, xbUInt32 ulDec, xbString &sOut) {
- xbString sPadChar = " ";
- return STR( dIn, ulLen, ulDec, sPadChar, sOut );
-}
-
-/*************************************************************************/
-//! @brief Convert number to a character string.
-/*!
- Expression function STR().
- \param dIn Input - Number.
- \param ulLen Input - Length.
- \param ulDec Input - Number of decimals.
- \param sPadChar Input - Left pad character, typically zero or space.
- \param sOut Output - String.
- \returns XB_NO_ERROR.
-*/
-
-xbInt16 xbXBase::STR( xbDouble dIn, xbUInt32 ulLen, xbUInt32 ulDec, xbString &sPadChar, xbString &sOut) {
-
- xbString sFmt;
- sFmt.Sprintf( "%c%d.%df", '%', ulLen, ulDec );
- sOut.Sprintf( sFmt.Str(), dIn, 0 );
-
- // convert to all "*" if result is too long
- if( sOut.Len() > ulLen ){
- sOut = "*";
- do{
- sOut += "*";
- } while( ulLen > sOut.Len());
- } else if( sPadChar.Len() > 0 && sPadChar != " " ){
- // this logic doesn't make sense when processing negative numbers,
- // but it does behave like the original dbase
- // you could end up with something like 0000-12.17 when you really want -000012.17
- // that is probably why the STRZERO function came into being
- xbUInt32 l = 1;
- while( sOut[l] == ' ' ){
- sOut.PutAt( l, sPadChar[1]);
- l++;
- }
- }
- return XB_NO_ERROR;
-}
-
-/*************************************************************************/
-//! @brief Convert number to a character string with leading zeroes.
-/*!
- Expression function STRZERO().
- \param dIn Input - Number.
- \param ulLen Input - Length.
- \param ulDec Input - Number of decimals.
- \param sOut Output - String.
- \returns XB_NO_ERROR.
-*/
-xbInt16 xbXBase::STRZERO( xbDouble dIn, xbUInt32 ulLen, xbUInt32 ulDec, xbString &sOut){
-
- xbString sFmt;
- if( dIn < 0 )
- sFmt.Sprintf( "%c+0%d.%df", '%', ulLen, ulDec );
- else
- sFmt.Sprintf( "%c0%d.%df", '%', ulLen, ulDec );
- sOut.Sprintf( sFmt.Str(), dIn );
-
- // convert to all "*" if result is too long
- if( sOut.Len() > ulLen ){
- sOut = "*";
- do{
- sOut += "*";
- } while( ulLen > sOut.Len());
- }
- return XB_NO_ERROR;
-}
-
-/*************************************************************************/
-//! @brief Extract a portion of a string from another string.
-/*!
- Expression function SUBSTR().
- \param sIn Input - Source string.
- \param ulStartPos Input - Starting position for string extraction.
- \param ulLen Input - Number of characters to extract.
- \param sOut Output - String.
- \returns XB_NO_ERROR.
-*/
-xbInt16 xbXBase::SUBSTR( const xbString &sIn, xbUInt32 ulStartPos, xbUInt32 ulLen, xbString &sOut ){
- sOut = sIn;
- sOut.Mid( ulStartPos, ulLen );
- return XB_NO_ERROR;
-}
-
-/*************************************************************************/
-//! @brief Trim left and right sides of string.
-/*!
- Expression function TRIM().
- \param sIn Input - string.
- \param sOut Output string result.
- \returns XB_NO_ERROR
-*/
-xbInt16 xbXBase::TRIM( const xbString &sIn, xbString &sOut ){
- return RTRIM( sIn, sOut );
-}
-
-/*************************************************************************/
-//! @brief Convert lower case to upper case.
-/*!
- Expression function UPPER().
- \param sIn Input - string.
- \param sOut Output - string result.
- \returns XB_NO_ERROR
-*/
-xbInt16 xbXBase::UPPER( const xbString &sIn, xbString &sOut ){
- sOut = sIn;
- sOut.ToUpperCase();
- return XB_NO_ERROR;
-}
-
-/*************************************************************************/
-//! @brief Convert numeric characters to number.
-/*!
- Expression function VAL().
- \param sIn Input - string.
- \param dOut Output - numeric result.
- \returns XB_NO_ERROR
-*/
-
-xbInt16 xbXBase::VAL( const xbString &sIn, xbDouble &dOut )
-{
- if( sIn )
- // strtod(nptr,NULL);
- dOut = atof( sIn );
- else
- dOut = 0;
- return XB_NO_ERROR;
-}
-/*************************************************************************/
-//! @brief Return year for a given date.
-/*!
- Expression function YEAR().
- \param dInDate Input date.
- \param dOutYear - Year.
- \returns XB_NO_ERROR.<br>XB_PARSE_ERROR.
-*/
-
-xbInt16 xbXBase::YEAR( xbDate &dInDate, xbDouble &dOutYear ){
-
- xbInt16 iRc = dInDate.YearOf();
- if( iRc < 0 )
- return XB_PARSE_ERROR;
- else{
- dOutYear = iRc;
- return XB_NO_ERROR;
- }
-}
-/*************************************************************************/
-}; // namespace
-#endif // XB_FUNCTION_SUPPORT
-/*************************************************************************/
diff --git a/src/core/xbixbase.cpp b/src/core/xbixbase.cpp
deleted file mode 100755
index 8b64fd6..0000000
--- a/src/core/xbixbase.cpp
+++ /dev/null
@@ -1,789 +0,0 @@
-/* xbixbase.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
- Base index class
-
-*/
-
-#include "xbase.h"
-#ifdef XB_INDEX_SUPPORT
-
-namespace xb{
-
-/***********************************************************************/
-//! @brief Class constructor.
-/*!
- /param dbf Pointer to dbf instance.
-*/
-xbIx::xbIx( xbDbf *dbf ) : xbFile( dbf->GetXbasePtr()) {
- this->dbf = dbf;
- vpCurTag = NULL;
- cNodeBuf = NULL;
- bLocked = xbFalse;
-}
-/***********************************************************************/
-//! @brief Class Destructor.
-xbIx::~xbIx(){}
-
-
-/***********************************************************************/
-//! @brief Add Keys for record number
-/*!
- For a given a record number, add keys to each tag in the index file
- if it was updated
-
- \param ulRecNo Record number to add keys for
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbIx::AddKeys( xbUInt32 ulRecNo ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbInt16 i = 0;
- xbInt16 iKeySts;
-
- try{
- void * vpTag;
- xbInt16 iTagCount = GetTagCount();
-
- for( i = 0; i < iTagCount; i++ ){
- vpTag = GetTag( i );
- iKeySts = GetKeySts( vpTag );
-
- if( iKeySts == 1 || iKeySts == 2 ){
- if(( iRc = UpdateTagKey( 'A', vpTag, ulRecNo )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- }
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIx::AddKeys() Exception Caught. Error Stop = [%d] iRc = [%d] Tag=[%d]", iErrorStop, iRc, i );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/***********************************************************************/
-//! @brief Allocate memory for index node.
-/*!
- Allocate an index node.
-
- \param ulBufSize Size of buffer to allocate
- \returns null on error<br>Pointer to newly allocated xbIxNode on success
-*/
-xbIxNode * xbIx::AllocateIxNode( xbUInt32 ulBufSize, xbInt16 )
-{
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
-
- try{
- xbIxNode * pNode = (xbIxNode *) calloc( 1, sizeof( xbIxNode ));
- if( pNode == NULL ){
- iErrorStop = 100;
- iRc = XB_NO_MEMORY;
- throw iRc;
- }
- if( ulBufSize == 0 )
- ulBufSize = GetBlockSize();
-
- pNode->ulBufSize = ulBufSize;
- pNode->cpBlockData = (char *) calloc( 1, ulBufSize );
- if( pNode->cpBlockData == NULL ){
- free( pNode );
- iErrorStop = 110;
- iRc = XB_NO_MEMORY;
- throw iRc;
- }
- return pNode;
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIx::AllocateIxNode() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return NULL;
-}
-
-
-/***********************************************************************/
-//! @brief Binary search for given value on an index node.
-/*!
-
- Binary search for key lookups
- \param cKeyType Key type
- \param npNode Pointer to index node for search
- \param lKeyItemLen Lenth of key plus pointer values
- \param vpKey Pointer to key value
- \param lSearchKeyLen length of key to search
- \param iCompRc output return code from the CompareKey routine. CompareKey returns an
- integer value less than, equal to or greater than zero in when comparing values
-
- \param bDescending xbTrue for descending index key lookup.<br>
- xbFalse for ascending index key lookup.
- \return The position in the node the key was found, if multiples it returns the first occurrence.
- If the key is not found, it returns the slot it should be in.
-*/
-
-xbInt16 xbIx::BSearchBlock( char cKeyType, xbIxNode *npNode, xbInt32 lKeyItemLen, const void *vpKey,
- xbInt32 lSearchKeyLen, xbInt16 &iCompRc, xbBool bDescending ) const {
- xbInt32 lLo = 0;
- xbInt32 lHi = 0;
- xbInt32 lMid = 0;
- xbInt32 lKeyCnt = GetKeyCount( npNode );
-
-
- if( !bDescending ){
- lHi = lKeyCnt - 1;
-
- while( lLo <= lHi ){
- lMid = (lLo + lHi) / 2;
- iCompRc = CompareKey( cKeyType, GetKeyData( npNode, lMid, lKeyItemLen ), vpKey, (size_t) lSearchKeyLen );
- if( iCompRc > 0 )
- lHi = lMid - 1;
- else if( iCompRc < 0 )
- lLo = lMid + 1;
- else{ // found match, look for leftmost occurrence
-
- xbInt32 lFoundPos = lMid;
- lMid--;
- while( lMid >= 0 && CompareKey( cKeyType, GetKeyData( npNode, lMid, lKeyItemLen ), vpKey, (size_t) lSearchKeyLen ) == 0 ){
- lFoundPos = lMid;
- lMid--;
- }
- iCompRc = 0;
- lLo = lFoundPos;
- lHi = -1;
- }
- }
- // update the compare key results
- if( lMid != lLo ){
- if( lLo >= lKeyCnt )
- iCompRc = 1;
- else
- iCompRc = CompareKey( cKeyType, GetKeyData( npNode, lLo, lKeyItemLen ), vpKey, (size_t) lSearchKeyLen );
- }
- return (xbInt16) lLo;
-
- } else { // descending key
-
- lLo = lKeyCnt - 1;
- while( lLo >= lHi && lHi != -1 ){
- lMid = (lLo + lHi) / 2;
- iCompRc = CompareKey( cKeyType, GetKeyData( npNode, lMid, lKeyItemLen ), vpKey, (size_t) lSearchKeyLen );
-
- if( iCompRc > 0 ) {
- lHi = lMid + 1;
- }
- else if( iCompRc < 0) {
- lLo = lMid - 1;
- }
- else{ // found match, look for leftmost occurrence
-
- xbInt32 lFoundPos = lMid;
- lMid--;
- while( lMid >= 0 && CompareKey( cKeyType, GetKeyData( npNode, lMid, lKeyItemLen ), vpKey, (size_t) lSearchKeyLen ) == 0 ){
- lFoundPos = lMid;
- lMid--;
- }
- iCompRc = 0;
- lHi = lFoundPos;
- lLo = -1;
- }
- }
-
- // std::cout << "BSB1 lo = " << lLo << " mid = " << lMid << " hi = " << lHi << " keycnt = " << lKeyCnt << " iCompRc = " << iCompRc << "\n"; // key=" << (char *) vpKey << "\n";
- if( lLo < 0 && iCompRc < 0 )
- iCompRc = 1;
- else if( iCompRc != 0 ) {
- iCompRc = CompareKey( cKeyType, GetKeyData( npNode, (lLo < 0 ? 0 : lLo), lKeyItemLen ), vpKey, (size_t) lSearchKeyLen );
- }
- // std::cout << "BSB2 lo = " << lLo << " mid = " << lMid << " hi = " << lHi << " keycnt = " << lKeyCnt << " iCompRc = " << iCompRc << "\n"; // key=" << (char *) vpKey << "\n";
- return (xbInt16) lHi;
- }
-
- // should never get here
- // return (xbInt16) 0;
-}
-
-/***********************************************************************/
-//! @brief Check for duplicate keys.
-/*!
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbIx::CheckForDupKeys(){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbInt16 i = 0;
-
- try{
- void * vpTag;
- xbInt16 iTagCount = GetTagCount();
- for( i = 0; i < iTagCount; i++ ){
- vpTag = GetTag( i );
- if(( iRc = CheckForDupKey( vpTag )) < XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- }
- }
- catch (xbInt16 iRc ){
- if( iRc != XB_KEY_NOT_UNIQUE ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxBase::CheckForDupKeys() Exception Caught. Error Stop = [%d] iRc = [%d] Tag=[%d]", iErrorStop, iRc, i );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- }
- return iRc;
-}
-/***********************************************************************/
-//! @brief Close index file.
-/*!
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbIx::Close(){
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
-
- try{
- if(( iRc = xbFclose()) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIx::Close() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/***********************************************************************/
-//! @brief Compare keys.
-/*!
- \param cKeyType C - Character compare.<br>
- N - Numeric BCD compare.<br>
- D - Numeric compare.<br>
- F - Numeric compare.<br>
- \param v1 Left compare.<br>v2 - Right Compare.
- \param iSearchKeyLen Length of key compare.
- \returns 1 - Left operand is greater then right operand.<br>
- 0 - Left operand is equal to right operand.<br>
- -1 - Left operand is less than right operand.
-*/
-inline xbInt16 xbIx::CompareKey( char cKeyType, const void *v1, const void *v2, size_t iSearchKeyLen ) const{
- if( cKeyType == 'C' ){ // character compare
- return memcmp( v1, v2, iSearchKeyLen );
- } else if( cKeyType == 'N' ){ // numeric bcd compare, mdx bcd numeric indices
- xbBcd bcdk1( v1 );
- return bcdk1.Compare( v2 );
- } else if( cKeyType == 'D' || cKeyType == 'F' ){ // julian date compare, ndx float numeric indices
- xbDouble *d1 = (xbDouble *) v1;
- xbDouble *d2 = (xbDouble *) v2;
- if( *d1 < *d2 )
- return -1;
- else if( *d1 > *d2 )
- return 1;
- else
- return 0;
- } else {
-// std::cout << "Unhandled key type [" << cKeyType << "]\n";
- }
- return XB_NO_ERROR;
-}
-/***********************************************************************/
-//! @brief Create Keys for record number
-/*!
- \param iOpt 0 Build a key for FindKey usage, only rec buf 0.<br>
- 1 Append Mode, Create key for an append, only use rec buf 0, set updated switch.<br>
- 2 Update Mode, Create old version and new version keys, check if different, set update switch appropriately.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbIx::CreateKeys( xbInt16 iOpt ) {
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbInt16 i = 0;
-
- try{
- void * vpTag;
- xbInt16 iTagCount = GetTagCount();
-
- for( i = 0; i < iTagCount; i++ ){
- vpTag = GetTag( i );
- if(( iRc = CreateKey( vpTag, iOpt )) < XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIx::CreateKeys() Exception Caught. Error Stop = [%d] iRc = [%d] Tag=[%d]", iErrorStop, iRc, i );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return XB_NO_ERROR;
-}
-/***********************************************************************/
-//! @brief Delete keys for record number
-/*!
- Delete keys to each tag in the index file if it was updated as determined
- by CreateKeys function
-
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-//xbInt16 xbIx::DeleteKeys( xbUInt32 ulRecNo ){
-
-xbInt16 xbIx::DeleteKeys(){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbInt16 i = 0;
-
- try{
- void * vpTag;
- xbInt16 iTagCount = GetTagCount();
-
- for( i = 0; i < iTagCount; i++ ){
- vpTag = GetTag( i );
- if( GetKeySts( vpTag ) > 1 ){ // 0 = no update 1 = add 2 = update, 3 = delete
- if(( iRc = UpdateTagKey( 'D', vpTag )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- }
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIx::DeleteKeys() Exception Caught. Error Stop = [%d] iRc = [%d] Tag=[%d]", iErrorStop, iRc, i );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/***********************************************************************/
-#ifdef XB_DEBUG_SUPPORT
-//! @brief Dump anode for debug purposes.
-/*!
- \param pNode Pointer to node to dump.
- \param iOption 0 = stdout<br>
- 1 = Syslog<br>
- 2 = Both<br>
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbIx::DumpNode( void *, xbIxNode *pNode, xbInt16 iOption ) const
-{
- xbString s;
- s.Sprintf( "Dump Node Block=[%d] CurKey=[%d]", pNode->ulBlockNo, pNode->iCurKeyNo );
- xbase->WriteLogMessage( s, iOption );
-
- return XB_NO_ERROR;
-}
-#endif // XB_DEBUG_SUPPORT
-
-/***********************************************************************/
-//! @brief Find double key
-/*!
- \param vpTag Pointer to tag to search.
- \param dKey Double value to search for.
- \param iRetrieveSw xbTrue - Retrieve the record if key found.<br>
- xbFalse - Don't retrieve record, check for key existence only.
- \returns XB_NO_ERROR - Key found.<br>
- XB_NOT_FOUND - Key not found.<br>
- <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbIx::FindKey( void *vpTag, xbDouble dKey, xbInt16 iRetrieveSw ){
- return FindKey( vpTag, &dKey, 8, iRetrieveSw );
-}
-/***********************************************************************/
-//! @brief Find string key
-/*!
- \param vpTag Pointer to tag to search.
- \param sKey String data to search for.
- \param iRetrieveSw xbTrue - Retrieve the record if key found.<br>
- xbFalse - Don't retrieve record, check for key existence only.
- \returns XB_NO_ERROR - Key found.<br>
- XB_NOT_FOUND - Key not found.<br>
- <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbIx::FindKey( void *vpTag, const xbString &sKey, xbInt16 iRetrieveSw ){
- return FindKey( vpTag, sKey.Str(), (xbInt32) sKey.Len(), iRetrieveSw );
-}
-/***********************************************************************/
-//! @brief Find character key
-/*!
- \param vpTag Pointer to tag to search.
- \param cKey String data to search for.
- \param lKeyLen Length of key to search for.
- \param iRetrieveSw xbTrue - Retrieve the record if key found.<br>
- xbFalse - Don't retrieve record, check for key existence only.
- \returns XB_NO_ERROR - Key found.<br>
- XB_NOT_FOUND - Key not found.<br>
- <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbIx::FindKey( void *vpTag, const char *cKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw ){
- return FindKey( vpTag, (void *) cKey, lKeyLen, iRetrieveSw );
-}
-/***********************************************************************/
-//! @brief Find bcd key
-/*!
- \param vpTag Pointer to tag to search.
- \param bcd BCD data to search for.
- \param iRetrieveSw xbTrue - Retrieve the record if key found.<br>
- xbFalse - Don't retrieve record, check for key existence only.
-
- \returns XB_NO_ERROR - Key found.<br>
- XB_NOT_FOUND - Key not found.<br>
- <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbIx::FindKey( void *vpTag, const xbBcd &bcd, xbInt16 iRetrieveSw ){
- return FindKey( vpTag, bcd.GetBcd(), 12, iRetrieveSw );
-}
-/***********************************************************************/
-//! @brief Find date key
-/*!
- \param vpTag Pointer to tag to search.
- \param dtKey Date data to search for.
- \param iRetrieveSw xbTrue - Retrieve the record if key found.<br>
- xbFalse - Don't retrieve record, check for key existence only.
- \returns XB_NO_ERROR - Key found.<br>
- XB_NOT_FOUND - Key not found.<br>
- <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbIx::FindKey( void *vpTag, const xbDate &dtKey, xbInt16 iRetrieveSw ){
- xbDouble d = (xbDouble) dtKey.JulianDays();
- return FindKey( vpTag, &d, 8, iRetrieveSw );
-}
-/***********************************************************************/
-//! @brief Free all nodes in a linked list.
-/*!
- \param np Pointer to first node in linked list to free.
- \returns NULL.
-*/
-xbIxNode *xbIx::FreeNodeChain( xbIxNode *np ){
-
- // routine returns NULL
- if( np ){
- // free memory for a given chain of nodes
- xbIxNode * np2;
-
- // Clear the previous node's next pointer
- if( np->npPrev )
- np->npPrev->npNext = NULL;
-
- // Clear out the tree
- while( np ){
- np2 = np->npNext;
- NodeFree( np );
- np = NULL;
- np = np2;
- }
- }
- return NULL;
-}
-/***********************************************************************/
-//! @brief Read block for block number.
-/*!
- Routine to read a node/block out of an index file and store in xbIxNode structure
- \param vpTag Pointer to tag.
- \param ulBlockNo Block number to read off disk.
- \param iOpt
- 0 = Node is read into block buffer, not added to the node chain<br>
- 1 = Node is read into new xbIxNode, then added to the node chain, and sets CurNode with new node<br>
- 2 = Node is read into new xbIxNode, not added to the node chain<br>
- CurNode points to new node<br>
- \param ulAddlBuf Additional buffer size added to memory
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-
-*/
-
-xbInt16 xbIx::GetBlock( void *vpTag, xbUInt32 ulBlockNo, xbInt16 iOpt, xbUInt32 ulAddlBuf ){
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
- xbIxNode *np = NULL;
- try{
-
- if( !vpTag && iOpt == 1 ){
- iErrorStop = 100;
- throw iRc;
- }
-
- // set target location of block read to read
- char *cp;
- if( iOpt == 0 )
- cp = cNodeBuf;
- else{
- if(( np = AllocateIxNode(GetBlockSize() + ulAddlBuf )) == NULL ){
- iErrorStop = 110;
- iRc = XB_NO_MEMORY;
- throw( iRc );
- }
- cp = np->cpBlockData;
- }
- if(( iRc = ReadBlock( ulBlockNo, GetBlockSize(), cp )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- if( iOpt == 0 )
- return iRc;
- np->ulBlockNo = ulBlockNo;
- np->iCurKeyNo = 0;
- if( iOpt == 1 )
- AppendNodeChain( vpTag, np );
- else if( iOpt == 2 ){
- std::cout << "Future use stub. xbIxbase::GetBlock() option 2 not coded.\n";
- iErrorStop = 130;
- iRc = XB_INVALID_OPTION;
- throw iRc;
- // SetCurNode( vpTag, np );
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIx::GetBlock() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- if( np ) NodeFree( np );
- }
- return iRc;
-}
-
-/***********************************************************************/
-//! @brief Get pointer to current tag.
-/*!
- \returns Pointer to current tag.
-*/
-
-void *xbIx::GetCurTag() const {
- return vpCurTag;
-}
-/***********************************************************************/
-//! @brief Get pointer to dbf.
-/*!
- \returns Pointer to dbf.
-*/
-xbDbf *xbIx::GetDbf() const {
- return this->dbf;
-}
-/***********************************************************************/
-//! @brief Get the first key for the current tag.
-/*!
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbIx::GetFirstKey(){
- return GetFirstKey( vpCurTag, 0 );
-}
-
-/***********************************************************************/
-//! @brief Get the first key for a given tag.
-/*!
- \param vpTag Tag for get first key operation.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbIx::GetFirstKey( void *vpTag ){
- return GetFirstKey( vpTag, 0 );
-}
-/***********************************************************************/
-//! @brief Get the last key for the current tag.
-/*!
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbIx::GetLastKey(){
- return GetLastKey( 0, vpCurTag, 0 );
-}
-/***********************************************************************/
-//! @brief Get the last key for a given tag.
-/*!
- \param vpTag Tag for get last key operation.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbIx::GetLastKey( void *vpTag ){
- return GetLastKey( 0, vpTag, 0 );
-}
-
-/***********************************************************************/
-//! @brief Get the file lock status.
-/*!
- \returns xbTrue - Index file is locked.<br>xbFalse - Index file is not locked.
-*/
-xbBool xbIx::GetLocked() const {
- return bLocked;
-}
-
-/***********************************************************************/
-//! @brief Get the key count for number of keys on a node.
-/*!
- \param np Given node for key count.
- \returns Number of keys on the node.
-*/
-xbInt32 xbIx::GetKeyCount( xbIxNode *np ) const {
- // assumes the first four bytes of the block is a four byte number
- // representing the number of keys contained on the block
- return eGetInt32( np->cpBlockData );
-}
-/***********************************************************************/
-//! @brief Get key data for a given key number.
-/*!
- \param np Given node for key retrieval.
- \param iKeyNo Which key to pull.
- \param iKeyItemLen Length of key plus pointers.
- \returns Pointer to a given key.
-*/
-char * xbIx::GetKeyData( xbIxNode *np, xbInt16 iKeyNo, xbInt16 iKeyItemLen ) const {
- if( !np ) return NULL;
- char *p = np->cpBlockData;
- xbUInt32 ulKeyCnt = eGetUInt32( p );
- if( iKeyNo < 0 || iKeyNo > (xbInt16) ulKeyCnt ) return NULL;
- xbInt16 iOffset = 12 + (iKeyNo * iKeyItemLen);
- p+=iOffset;
- return p;
-}
-/***********************************************************************/
-//! @brief Get the next key for the current tag.
-/*!
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbIx::GetNextKey(){
- return GetNextKey( vpCurTag, 0 );
-}
-/***********************************************************************/
-//! @brief Get the next key for the given tag.
-/*!
- \param vpTag Tag for next key operation.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbIx::GetNextKey( void *vpTag ){
- return GetNextKey( vpTag, 0 );
-}
-/***********************************************************************/
-//! @brief Get the prev key for the current tag.
-/*!
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbIx::GetPrevKey(){
- return GetPrevKey( vpCurTag, 0 );
-}
-/***********************************************************************/
-//! @brief Get the previous key for the given tag.
-/*!
- \param vpTag Tag for previous key operation.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbIx::GetPrevKey( void *vpTag ){
- return GetPrevKey( vpTag, 0 );
-}
-/***********************************************************************/
-//! @brief Free an index node
-/*!
- \param ixNode Pointer to index node to free.
- \returns void
-*/
-void xbIx::NodeFree( xbIxNode *ixNode ){
- if( ixNode ){
- if( ixNode->cpBlockData ){
- free( ixNode->cpBlockData );
- ixNode->cpBlockData = NULL;
- }
- free( ixNode );
- ixNode = NULL;
- }
-}
-/***********************************************************************/
-//! @brief Open an index file.
-/*!
- MDX files are opened automatically and don't need opened.
- NDX files that are associated with the DBF file are opened automatically.
-
- Non production indexes that haven't been opened will need to be opened to be used.
- \param sFileName Index file name to open.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbIx::Open( const xbString & sFileName ){
-
- // There are no locking requirements when opening an NDX index
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
-
- try{
- /* copy the file name to the class variable */
- this->SetFileName( sFileName );
-
- if( !FileExists()){
- iErrorStop = 100;
- iRc = XB_FILE_NOT_FOUND;
- throw iRc;
- }
- /* open the file */
- if(( iRc = xbFopen( dbf->GetOpenMode(), dbf->GetShareMode())) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- if(( iRc = ReadHeadBlock()) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- SetCurTag( (xbInt16) 0 ); // default the first tag as the current tag
- }
-
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIx::Open( %s ) Exception Caught. Error Stop = [%d] iRc = [%d]", sFileName.Str(), iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-/***********************************************************************/
-//! @brief Set the current tag.
-/*!
- \param vpCurTag Pointer to tag to set as current.
- \returns void
-*/
-void xbIx::SetCurTag( void *vpCurTag ){
- this->vpCurTag = vpCurTag;
-}
-/***********************************************************************/
-//! @brief Set the dbf pointer.
-/*!
- \param dbf Dbf pointer to set.
- \returns void
-*/
-void xbIx::SetDbf( xbDbf *dbf ){
- this->dbf = dbf;
-}
-/***********************************************************************/
-//! @brief Set the file lock status.
-/*!
- \param bLocked xbTrue - Set to locked.<br>xbFalse - Set to unlocked.
- \returns void
-*/
-void xbIx::SetLocked( xbBool bLocked ){
- this->bLocked = bLocked;
-}
-/***********************************************************************/
-} /* namespace */
-#endif /* XB_INDEX_SUPPORT */
diff --git a/src/core/xbixmdx.cpp b/src/core/xbixmdx.cpp
deleted file mode 100755
index 135cde8..0000000
--- a/src/core/xbixmdx.cpp
+++ /dev/null
@@ -1,5073 +0,0 @@
-/* xbixmdx.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-
- MDX indices are comprised of blocks and pages.
- A page is 512 bytes.
- A Block is one or more pages.
- The default block size is two 512 byte pages per block.
- Nodes are used for storing block images in memory
-
-*/
-
-#include "xbase.h"
-
-#ifdef XB_MDX_SUPPORT
-
-namespace xb{
-
-/***********************************************************************/
-xbIxMdx::xbIxMdx( xbDbf *dbf ) : xbIx( dbf ){
- Init();
-}
-/***********************************************************************/
-//void xbIxMdx::Init( xbInt16 iOpt ){
-void xbIxMdx::Init( xbInt16 ){
-
- cVersion = 0;
- cCreateYY = 0;
- cCreateMM = 0;
- cCreateDD = 0;
- sFileName = "";
- iBlockFactor = 0;
- cProdIxFlag = 0;
- cTagEntryCnt = 0;
- iTagLen = 0;
- iTagUseCnt = 0;
- cNextTag = 0;
- c1B = 0x0b;
- ulPageCnt = 0;
- ulFirstFreePage = 0;
- ulNoOfBlockAvail = 0;
- cUpdateYY = 0;
- cUpdateMM = 0;
- cUpdateDD = 0;
- mdxTagTbl = NULL;
- cNodeBuf = NULL;
- bReuseEmptyNodes = xbTrue;
-}
-/***********************************************************************/
-xbIxMdx::~xbIxMdx(){
- if( cNodeBuf )
- free( cNodeBuf );
-
- if( FileIsOpen())
- Close();
-}
-/***********************************************************************/
-//! @brief Add key.
-/*!
- Add key. If this is a unique index, this logic assumes the duplicate
- check logic was already done.
-
- \param vpTag Tag to update.
- \param ulRecNo Record number to add key for.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbIxMdx::AddKey( void * vpTag, xbUInt32 ulRecNo ){
-
- xbMdxTag * npTag = (xbMdxTag *) vpTag;
- if( GetUniqueKeyOpt() == XB_EMULATE_DBASE && npTag->bFoundSts )
- return XB_NO_ERROR;
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbInt16 iHeadNodeUpdateOpt = 2;
- xbIxNode * npRightNode = NULL;
- xbUInt32 ulNewRightChild = 0;
-
- try{
- if(( iRc = xbIxMdx::KeySetPosAdd( npTag, ulRecNo )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
-
- xbInt32 lKeyCnt = GetKeyCount( npTag->npCurNode );
-
- // std::cout << "xbIxMdx::AddKeys() lKeyCnt = " << lKeyCnt << " KeysPerBlock = " << npTag->iKeysPerBlock << " npBlockNo = " << npTag->npCurNode->ulBlockNo << "\n";
-
- if( lKeyCnt < npTag->iKeysPerBlock ){
- // Section A - add key to appropriate position if space available
- // std::cout << "AddKey Section A begin\n";
- if(( iRc = InsertNodeL( npTag, npTag->npCurNode, npTag->npCurNode->iCurKeyNo, npTag->cpKeyBuf, ulRecNo )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- //std::cout << "AddKey Section A end\n";
- } else {
-
- // land here with a full leaf node
- // std::cout << "Section B begin split leaf node\n";
-
- iHeadNodeUpdateOpt = 1;
- npRightNode = AllocateIxNode( npTag, GetBlockSize() + (xbUInt32) npTag->iKeyItemLen, npTag->npCurNode->ulBlockNo * (xbUInt32) iBlockFactor );
- if( !npRightNode ){
- iErrorStop = 120;
- iRc = XB_NO_MEMORY;
- throw iRc;
- }
-
- if(( npTag->npCurNode->ulBlockNo * (xbUInt32) iBlockFactor ) == npTag->ulRightChild ){
- ulNewRightChild = npRightNode->ulBlockNo * (xbUInt32) iBlockFactor;
- }
-
- // std::cout << "ulNewRightChild = " << ulNewRightChild << "\n";
-
- if(( iRc = xbIxMdx::SplitNodeL( npTag, npTag->npCurNode, npRightNode, npTag->npCurNode->iCurKeyNo, npTag->cpKeyBuf, ulRecNo )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- xbUInt32 ulTempBlockNo = npRightNode->ulBlockNo;
-
-
- //std::cout << "ulTempBlockNo = " << ulTempBlockNo << "\n";
- //std::cout << "key count left block " << GetKeyCount( npTag->npCurNode ) << "\n";
- //std::cout << "key count right block " << GetKeyCount( npRightNode ) << "\n";
-
-
- //std::cout << "Section B end\n";
-
- // section C - go up the tree, splitting nodes as necessary
- xbIxNode * npParent = npTag->npCurNode->npPrev;
-
-
- while( npParent && GetKeyCount( npParent ) >= npTag->iKeysPerBlock ){
- //std::cout << "Section C begin interior node is full\n";
- npRightNode = FreeNodeChain( npRightNode );
- npRightNode = AllocateIxNode( npTag, GetBlockSize() + (xbUInt32) npTag->iKeyItemLen, npParent->ulBlockNo * (xbUInt32) iBlockFactor );
- //std::cout << "Section C - B new right node block number for interior node split= " << npRightNode->ulBlockNo << "\n";
-
- if( !npRightNode ){
- iErrorStop = 140;
- iRc = XB_NO_MEMORY;
- throw iRc;
- }
- //std::cout << "Section C - going to split interior node C\n";
-
- if(( iRc = SplitNodeI( npTag, npParent, npRightNode, npParent->iCurKeyNo, BlockToPage( ulTempBlockNo ))) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
- // std::cout << "Section C - interior node split \n";
- ulTempBlockNo = npRightNode->ulBlockNo;
- npTag->npCurNode = npParent;
- npParent = npParent->npPrev;
- }
-
- // std::cout << "Past Section C Cur Node Block No = " << npTag->npCurNode->ulBlockNo << " root page = " << npTag->ulRootPage << "\n";
- // section D - if cur node is split root, create new root
-
- if(( npTag->npCurNode->ulBlockNo * (xbUInt32) iBlockFactor ) == npTag->ulRootPage ){
-
- // std::cout << "Section D begin right node = " << npRightNode << "\n";
-
- if(( iRc = AddKeyNewRoot( npTag, npTag->npCurNode, npRightNode )) != XB_NO_ERROR ){
- iErrorStop = 160;
- throw iRc;
- }
-
- if( npRightNode )
- npRightNode = FreeNodeChain( npRightNode );
-
- // std::cout << "Section D end\n";
-
- } else {
-
- // std::cout << "Section E, put key in parent\n";
- if(( iRc = InsertNodeI( (void *) vpTag, (xbIxNode *) npParent, (xbInt16) npParent->iCurKeyNo, BlockToPage( npRightNode->ulBlockNo ))) != XB_NO_ERROR ){
- iErrorStop = 170;
- throw iRc;
- }
- }
- }
-
- // update the header
- if(( iRc = WriteHeadBlock( iHeadNodeUpdateOpt )) != XB_NO_ERROR ){
- iErrorStop = 180;
- throw iRc;
- }
-
- // if adding the first key, set the cHasKeys field
- if( !npTag->cHasKeys ){
- npTag->cHasKeys = 0x01;
- if(( iRc = xbFseek( ((npTag->ulTagHdrPageNo * 512) + 246), SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 190;
- throw iRc;
- }
- if(( iRc = xbFwrite( &npTag->cHasKeys, 1, 1 )) != XB_NO_ERROR ){
- iErrorStop = 200;
- throw iRc;
- }
- }
-
- if( ulNewRightChild > 0 ){
-
-// std::cout << "ulRightChild was = " << npTag->ulRightChild << " changed to " << ulNewRightChild << "\n";
-
- char cBuf[4];
- ePutUInt32( cBuf, ulNewRightChild );
- if(( iRc = xbFseek( ((npTag->ulTagHdrPageNo * 512) + 252), SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 210;
- throw iRc;
- }
- if(( iRc = xbFwrite( &cBuf, 4, 1 )) != XB_NO_ERROR ){
- iErrorStop = 220;
- throw iRc;
- }
-// std::cout << "setting right child\n";
- npTag->ulRightChild = ulNewRightChild;
- }
-
- if( npRightNode )
- npRightNode = FreeNodeChain( npRightNode );
- npTag->npNodeChain = FreeNodeChain( npTag->npNodeChain );
- npTag->npCurNode = NULL;
-
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::AddKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/***********************************************************************/
-void xbIxMdx::AppendNodeChain( void *vpTag, xbIxNode * npNode ){
- xbMdxTag * mdxTag = (xbMdxTag *) vpTag;
- if( mdxTag->npNodeChain == NULL ){
- mdxTag->npNodeChain = npNode;
- mdxTag->npCurNode = npNode;
- } else {
- npNode->npPrev = mdxTag->npCurNode;
- mdxTag->npCurNode->npNext = npNode;
- mdxTag->npCurNode = npNode;
- }
- // time stamp the node chain
- GetFileMtime( mdxTag->tNodeChainTs );
-}
-
-/***********************************************************************/
-//! @brief Add new root node.
-/*!
- \param mpTag Tag to update.
- \param npLeft Left node.
- \param npRight Right node.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbIxMdx::AddKeyNewRoot( xbMdxTag *npTag, xbIxNode *npLeft, xbIxNode *npRight ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- char *pLastKey = NULL;
-
- try{
- xbIxNode *npRoot = AllocateIxNode( npTag, GetBlockSize() + (xbUInt32) npTag->iKeyItemLen, npRight->ulBlockNo * (xbUInt32) iBlockFactor );
- if( !npRoot ){
- iErrorStop = 100;
- iRc = XB_NO_MEMORY;
- throw iRc;
- }
- npTag->ulRootPage = npRoot->ulBlockNo;
-
- // std::cout << "AddKeyNewRoot - RootBlock = " << npRoot->ulBlockNo << "\n";
- // std::cout << "AddKeyNewRoot - LeftBlock = " << npLeft->ulBlockNo << "\n";
- // std::cout << "AddKeyNewRoot - RightBlock = " << npRight->ulBlockNo << "\n";
-
-
- pLastKey = (char *) malloc( (size_t) npTag->iKeyLen );
- if(( iRc = GetLastKeyForBlockNo( npTag, npLeft->ulBlockNo, pLastKey )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- char * pTrg = npRoot->cpBlockData;
-
- // set no of keys to 1
- ePutUInt32( pTrg, 1 );
-
- // set the left node number
- pTrg += 8;
- ePutUInt32( pTrg, npLeft->ulBlockNo * (xbUInt32) iBlockFactor );
-
- // set the key
- pTrg+= 4;
- // std::cout << "AddKeyNewRoot - key [" << pLastKey << "] len = [" << strlen( pLastKey) << "]\n";
- memcpy( pTrg, pLastKey, (size_t) npTag->iKeyLen );
-
- // set the right node number
- //pTrg+= (npTag->iKeyLen);
- // pTrg+= (npTag->iKeyItemLen)-4;
-
- pTrg+= npTag->iKeyItemLen - 4;
-
- //pTrg-=4;
-
- ePutUInt32( pTrg, npRight->ulBlockNo * (xbUInt32) iBlockFactor );
-
- // write out the new block
- if(( iRc = WriteBlock( npRoot->ulBlockNo, GetBlockSize(), npRoot->cpBlockData )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
-
- // write out the new root node number in the tag header
- // position the file
- xbUInt32 ulPagePos = npTag->ulTagHdrPageNo * 512;
-
- // std::cout << "ulPagePos = " << ulPagePos << " root block no = " << npRoot->ulBlockNo << " \n";
-
- // save the number to a buffer
- char cBuf[4];
- ePutUInt32( cBuf, npRoot->ulBlockNo * ((xbUInt32) iBlockFactor ));
-
- if(( iRc = xbFseek( ulPagePos, SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- if(( iRc = xbFwrite( &cBuf, 4, 1 )) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
-
- if( pLastKey )
- free( pLastKey );
-
- npRoot = FreeNodeChain( npRoot );
-
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::AddKeyNewRoot() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- if( pLastKey )
- free( pLastKey );
- }
- return iRc;
-}
-
-
-
-/***********************************************************************/
-//! @brief Allocate a node.
-/*!
- \param mpTag Pointer to mdx tag
- \param ulBufSize Buffer size.
- \param ulBlock2 Value to load in ulBlock2 field, bytes 4-7 in the first page of the block
- \returns Pointer to new node.
-*/
-xbIxNode * xbIxMdx::AllocateIxNode( xbMdxTag * mpTag, xbUInt32 ulBufSize, xbUInt32 ulBlock2 ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbIxNode *n = NULL;
-
- try{
-
- // std::cout << "xbIxMdx::AllocateIxNode()\n";
-
- if(( n = xbIx::AllocateIxNode( ulBufSize )) == NULL ){
- iRc = XB_NO_MEMORY;
- iErrorStop = 100;
- throw iRc;
- }
- char *p = n->cpBlockData;
- p += 4;
-
- if( ulFirstFreePage > 0 && bReuseEmptyNodes ){
- // we have an empty node we can reuse
-
- // std::cout << "Reusing node " << ulFirstFreePage << "\n";
-
- n->ulBlockNo = PageToBlock( ulFirstFreePage );
- if(( iRc = ReadBlock( n->ulBlockNo, GetBlockSize(), n->cpBlockData )) != XB_NO_ERROR ){
- iRc = 110;
- throw iRc;
- }
- // update ulFirstFreePage
- ulFirstFreePage = eGetUInt32( p );
- if(( iRc = xbFseek( 36, SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- if(( iRc = xbFwrite( p, 4, 1 )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- // memset cpBlockData to zeroes
- memset( n->cpBlockData, 0x00, GetBlockSize());
-
-
- } else {
- n->ulBlockNo = ulPageCnt / (xbUInt32) iBlockFactor;
- ulPageCnt += (xbUInt32) iBlockFactor;
- }
-
- mpTag->ulTagSize += (xbUInt32) iBlockFactor;
- if( ulBlock2 > 0 ){
- ePutUInt32( p, ulBlock2 );
- }
-
- // std::cout << "AllocateIxNode incremented the block to " << ulPageCnt << "\n";
- // std::cout << "AllocateIxNode new block number = " << n->ulBlockNo << "\n";
- }
- catch( xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::AllocateIxNode() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- if( n )
- n = FreeNodeChain( n );
- }
-
- return n;
-
-}
-/***********************************************************************/
-//! @brief Calculate B-tree pointers.
-/*!
- Set binary tree pointer value. The MDX tags are stored with binary
- tree positions. This routine calculates the value in memory.
- \returns void
-*/
-
-void xbIxMdx::CalcBtreePointers(){
-
- xbInt16 iaLeftChild[48];
- xbInt16 iaRightChild[48];
- xbInt16 iaParent[48];
-
- for( xbInt16 i = 0; i < 48; i++ ){
- iaLeftChild[i] = 0;
- iaRightChild[i] = 0;
- iaParent[i] = 0;
- }
-
- // anything to do?
- if( iTagUseCnt > 1 ){
- xbString sBaseTag;
- xbString sThisTag;
- xbString sWorkTag;
- xbInt16 iWorkTagNo;
- xbBool bDone;
- sBaseTag = GetTagName( GetTag( 0 ));
-
- for( xbInt16 iThisTagNo = 1; iThisTagNo < iTagUseCnt; iThisTagNo++ ){
- iWorkTagNo = 0;
- sWorkTag.Set( sBaseTag );
- sThisTag = GetTagName( GetTag( iThisTagNo ));
- bDone = xbFalse;
- while( !bDone ){
- if( sThisTag < sWorkTag ){
- if( iaLeftChild[iWorkTagNo] == 0 ) {
- iaLeftChild[iWorkTagNo] = iThisTagNo + 1;
- iaParent[iThisTagNo] = iWorkTagNo + 1;
- bDone = xbTrue;
- } else {
- iWorkTagNo = iaLeftChild[iWorkTagNo]-1;
- sWorkTag = GetTagName( GetTag( iWorkTagNo));
- }
- } else {
- if( iaRightChild[iWorkTagNo] == 0 ) {
- iaRightChild[iWorkTagNo] = iThisTagNo + 1;
- iaParent[iThisTagNo] = iWorkTagNo + 1;
- bDone = xbTrue;
- } else {
- iWorkTagNo = iaRightChild[iWorkTagNo]-1;
- sWorkTag = GetTagName( GetTag( iWorkTagNo ));
- }
- }
- }
- }
- }
-
- xbString s;
- xbMdxTag *mpTag = mdxTagTbl;
- for( xbInt16 i = 0; i < iTagUseCnt; i++ ){
-// s.Sprintf( "tag = [%d] parent = [%d] left = [%d] right = [%d]\n", i, iaParent[i], iaLeftChild[i], iaRightChild[i]);
-// std::cout << s;
- mpTag->cLeftChild = (char ) iaLeftChild[i];
- mpTag->cRightChild = (char ) iaRightChild[i];
- mpTag->cParent = (char ) iaParent[i];
- mpTag = mpTag->next;
- }
-}
-
-/**************************************************************************************************************/
-//! @brief Calculate the page number for a given block
-/*!
- This routine is called by any function needing to calculate the page number for a given block.
- Page numbers are stored internally in the physical file, and the library reads and writes in
- blocks of one or more pages.
-
- Assumes valid data input
-
- \param ulBlockNo Block Number
- \returns Calculated page number.
-*/
-
-inline xbUInt32 xbIxMdx::BlockToPage( xbUInt32 ulBlockNo ){
- return ulBlockNo * (xbUInt32) iBlockFactor;
-}
-/***********************************************************************/
-char xbIxMdx::CalcTagKeyFmt( xbExp &exp ){
-
- xbExpNode *n = exp.GetTreeHandle();
- if( n->GetChildCnt() == 0 && n->GetNodeType() == XB_EXP_FIELD )
- return 0x01;
- else
- return 0;
-}
-/***********************************************************************/
-//! @brief Check for duplicate key.
-/*!
- \param vpTag Tag to check.
- \returns XB_KEY_NOT_UNIQUE<br>XB_NO_ERROR
-*/
-
-xbInt16 xbIxMdx::CheckForDupKey( void *vpTag )
-{
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbMdxTag *mpTag = (xbMdxTag *) vpTag;
- mpTag->bFoundSts = xbFalse;
- try{
- if( GetUnique( mpTag )){
- if( mpTag->iKeySts == XB_ADD_KEY || mpTag->iKeySts == XB_UPD_KEY )
- if( KeyExists( mpTag )){
- if( GetUniqueKeyOpt() == XB_EMULATE_DBASE ){
- mpTag->bFoundSts = xbTrue;
- return 0;
- } else {
- return XB_KEY_NOT_UNIQUE;
- }
- }
- }
- return 0;
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::CheckForDupKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-/***********************************************************************/
-//! @brief Check tag integrity.
-/*!
- Check a tag for accuracy.
-
- \param vpTag Tag to create key for.
- \param iOpt Output message destination<br>
- 0 = stdout<br>
- 1 = Syslog<br>
- 2 = Both<br>
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbIxMdx::CheckTagIntegrity( void *vpTag, xbInt16 iOpt ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iRc2;
- xbInt16 iRc3;
- xbInt16 iErrorStop = 0;
- xbUInt32 ulIxCnt = 0;
- xbUInt32 ulThisRecNo = 0;
- xbUInt32 ulPrevRecNo = 0;
- xbBool bDone = false;
- xbString sMsg;
- char cKeyType;
- char *pPrevKeyBuf = NULL;
- xbMdxTag *npTag = (xbMdxTag *) vpTag;
- xbBool bDescending = npTag->cKeyFmt2 & 0x08;
-
- #ifdef XB_LOCKING_SUPPORT
- xbBool bLocked = xbFalse;
- #endif
-
-
- try{
-// xbase->WriteLogMessage( "xbIxMdx::CheckTagIntegrity()", iOpt );
-
- #ifdef XB_LOCKING_SUPPORT
- if( dbf->GetAutoLock() && !dbf->GetTableLocked() ){
- if(( iRc = dbf->LockTable( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- bLocked = xbTrue;
- }
- #endif
-
- memset( npTag->cpKeyBuf2, 0x00, (size_t) npTag->iKeyLen );
- // memset( npTag->cpKeyBuf2, 0x00, (size_t) npTag->iKeyItemLen );
- cKeyType = GetKeyType( vpTag );
-
- pPrevKeyBuf = (char *) calloc( 1, (size_t) npTag->iKeyLen );
- iRc = GetFirstKey( vpTag, 0 );
-
- memcpy( pPrevKeyBuf, GetKeyData( npTag->npCurNode, npTag->npCurNode->iCurKeyNo, npTag->iKeyItemLen ), (size_t) npTag->iKeyLen );
-
- // for each key in the index, make sure it is trending in the right direction
- while( iRc == XB_NO_ERROR && !bDone ){
- ulIxCnt++;
-
- iRc = GetNextKey( vpTag, 0 );
- if( iRc == XB_NO_ERROR ){
-
- // compare this key to prev key
- iRc2 = CompareKey( cKeyType, GetKeyData( npTag->npCurNode, npTag->npCurNode->iCurKeyNo, npTag->iKeyItemLen ),
- pPrevKeyBuf, (size_t) npTag->iKeyLen );
-
- if(( iRc2 < 0 && !bDescending ) || ( iRc2 > 0 && bDescending )){
- sMsg.Sprintf( "Key sequence error at key number [%ld].", ulIxCnt );
- xbase->WriteLogMessage( sMsg, iOpt );
- iErrorStop = 110;
- iRc = XB_INVALID_INDEX;
- throw iRc;
- }
-
- ulThisRecNo = 0;
- if(( iRc3 = GetDbfPtr( vpTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulThisRecNo )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc3;
- }
-
- if( iRc2 == 0 && (ulThisRecNo <= ulPrevRecNo )){
- sMsg.Sprintf( "Dbf record number sequence error at key number [%ld].", iOpt );
- xbase->WriteLogMessage( sMsg, iOpt );
- iErrorStop = 130;
- iRc = XB_INVALID_INDEX;
- throw iRc;
- }
- // save this key info to prev key
- memcpy( pPrevKeyBuf, GetKeyData( npTag->npCurNode, npTag->npCurNode->iCurKeyNo, npTag->iKeyItemLen ), (size_t) npTag->iKeyLen );
- ulPrevRecNo = ulThisRecNo;
- }
- }
-
- xbUInt32 ulDbfCnt = 0;
- if(( iRc = dbf->GetRecordCnt( ulDbfCnt )) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
-
- xbUInt32 ulFiltCnt = 0;
- xbBool bFiltered = xbTrue;
- // verify each record in the dbf file has a corresponding index entry
- xbUInt32 j = 0;
- while( j < ulDbfCnt ){
-
- if(( iRc = dbf->GetRecord( ++j )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
- if( npTag->cHasFilter ){
- if(( iRc = npTag->filter->ProcessExpression( 0 )) != XB_NO_ERROR ){
- iErrorStop = 160;
- throw iRc;
- }
- if(( iRc = npTag->filter->GetBoolResult( bFiltered )) != XB_NO_ERROR ){
- iErrorStop = 170;
- throw iRc;
- }
- }
-
- if( bFiltered ){
- if(( iRc = FindKeyForCurRec( vpTag )) != XB_NO_ERROR ){
- ulThisRecNo = j;
- iErrorStop = 180;
- throw iRc;
- }
- ulFiltCnt++;
- }
- }
-
- if((GetUniqueKeyOpt() == XB_EMULATE_DBASE) && (GetUnique( vpTag ))){
- // can't compare counts if using XB_EMULATE_DBASE and it's a unique index
- } else {
- if( ulIxCnt != ulFiltCnt && GetUniqueKeyOpt() == XB_HALT_ON_DUPKEY ){
- if( npTag->cHasFilter )
- sMsg.Sprintf( "xbIxMdx::CheckTagIntegrity() Filtered index entry count [%ld] does not match dbf record count [%ld] for tag [%s]", ulIxCnt, ulFiltCnt, npTag->cTagName );
- else
- sMsg.Sprintf( "xbIxMdx::CheckTagIntegrity() Index entry count [%ld] does not match dbf record count [%ld] for tag [%s]", ulIxCnt, ulFiltCnt, npTag->cTagName );
-
- xbase->WriteLogMessage( sMsg, iOpt );
- iErrorStop = 190;
- iRc = XB_INVALID_INDEX;
- throw iRc;
- }
- if( npTag->cHasFilter )
- sMsg.Sprintf( "xbIxMdx::CheckTagIntegrity() Filtered index entry count [%ld] matches dbf record count [%ld] for tag [%s]", ulIxCnt, ulFiltCnt, npTag->cTagName );
- else
- sMsg.Sprintf( "xbIxMdx::CheckTagIntegrity() Index entry count [%ld] matches dbf record count [%ld] for tag [%s]", ulIxCnt, ulFiltCnt, npTag->cTagName );
- xbase->WriteLogMessage( sMsg, iOpt );
- }
-
-
- if( pPrevKeyBuf )
- free( pPrevKeyBuf );
-
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::CheckTagIntegrity() Exception Caught. Error Stop = [%d] iRc = [%d] Tag = [%s]", iErrorStop, iRc, npTag->cTagName );
- xbase->WriteLogMessage( sMsg, iOpt );
- xbase->WriteLogMessage( GetErrorMessage( iRc ), iOpt );
- if( pPrevKeyBuf )
- free( pPrevKeyBuf );
-
- if( iErrorStop == 160 ){
- sMsg.Sprintf( "xbIxMdx::CheckTagIntegrity() Missing index entry for record [%d]", ulThisRecNo );
- xbase->WriteLogMessage( sMsg, iOpt );
- }
- }
-
- #ifdef XB_LOCKING_SUPPORT
- if( bLocked ){
- dbf->LockTable( XB_UNLOCK );
- }
- #endif
-
- return iRc;
-}
-
-/***********************************************************************/
-xbMdxTag *xbIxMdx::ClearTagTable(){
-
- // clear the list of tags
- xbMdxTag *tt = mdxTagTbl;
- xbMdxTag *tt2;
- while( tt ){
- tt2 = tt;
- tt = tt->next;
- tt2->npNodeChain = FreeNodeChain( tt2->npNodeChain );
- tt2->npCurNode = NULL;
- if( tt2->cpKeyBuf )
- free( tt2->cpKeyBuf );
- if( tt2->cpKeyBuf2 )
- free( tt2->cpKeyBuf2 );
- if( tt2->exp )
- delete tt2->exp;
- if( tt2->filter )
- delete tt2->filter;
- if( tt2->sKeyExp )
- delete tt2->sKeyExp;
- if( tt2->sTagName )
- delete tt2->sTagName;
- if( tt2->sFiltExp )
- delete tt2->sFiltExp;
- free( tt2 );
- }
- return NULL;
-}
-/***********************************************************************/
-xbInt16 xbIxMdx::Close(){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
-
- try{
- mdxTagTbl = ClearTagTable();
- if(( iRc = xbIx::Close()) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::Close() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-
-/***********************************************************************/
-//! @brief Create key.
-/*!
-
- \param vpTag Tag
- \param iOpt 1 = Append, 2 = Update
- \returns XB_KEY_NOT_UNIQUE<br>XB_NO_ERROR
-
- iKeySts 0 - No Updates
- 1 - Add Key XB_ADD_KEY
- 2 - Update Key XB_UPD_KEY
- 3 - Delete Key XB_DEL_KEY
-
- bKeyFiltered xbFalse - Key filtered out
- xbTrue - Key filtered in
-
- cpKeyBuf - Key buffer for add
- cpKeyBuf2 - Key buffer for delete
-
-*/
-
-xbInt16 xbIxMdx::CreateKey( void *vpTag, xbInt16 iOpt ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
-
- xbBool bFilter0 = xbFalse; // filter against RecBuf, updated record buffer
- xbBool bFilter1 = xbFalse; // filter against recBuf2, original record buffer
-
- try{
-
- xbMdxTag *npTag = (xbMdxTag *) vpTag;
- npTag->iKeySts = 0;
-
- // char *p0 = dbf->GetRecordBuf(0);
- // char *p1 = dbf->GetRecordBuf(1);
-
- // do tag filter logic
- if( npTag->cHasFilter ){
- if(( iRc = npTag->filter->ProcessExpression( 0 )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- if(( iRc = npTag->filter->GetBoolResult( bFilter0 )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- // std::cout << "cp1 f0 = " << bFilter0 << "\n";
- // printf( "del byte 0 [%x] 1 [%x]\n", *p0, *p1 );
- } else {
- bFilter0 = xbTrue;
- }
-
- // if add request and filtered out, we're done
- if( iOpt == 1 && !bFilter0 )
- return XB_NO_ERROR;
-
- if(( iRc = npTag->exp->ProcessExpression( 0 )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- if( npTag->exp->GetReturnType() == XB_EXP_CHAR )
- npTag->exp->GetStringResult( npTag->cpKeyBuf, (xbUInt32) npTag->iKeyLen );
- else if( npTag->exp->GetReturnType() == XB_EXP_NUMERIC ){
- xbDouble d;
- npTag->exp->GetNumericResult( d );
- xbBcd bcd( d );
- bcd.ToChar( npTag->cpKeyBuf );
- }
- else if( npTag->exp->GetReturnType() == XB_EXP_DATE ){
- xbDouble d;
- npTag->exp->GetNumericResult( d );
- memcpy( npTag->cpKeyBuf, &d, 8 );
- }
-
- if( iOpt == 1 ) // Append
- npTag->iKeySts = XB_ADD_KEY;
-
- else if( iOpt == 2 ){ // Update
- if( npTag->cHasFilter ){
- if(( iRc = npTag->filter->ProcessExpression( 1 )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- if(( iRc = npTag->filter->GetBoolResult( bFilter1 )) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
- } else {
- bFilter1 = xbTrue;
- }
-
- if(( iRc = npTag->exp->ProcessExpression( 1 )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
-
- if( npTag->exp->GetReturnType() == XB_EXP_CHAR ){
- npTag->exp->GetStringResult( npTag->cpKeyBuf2, (xbUInt32) npTag->iKeyLen );
-
- } else if( npTag->exp->GetReturnType() == XB_EXP_NUMERIC ){
- xbDouble d;
- npTag->exp->GetNumericResult( d );
- xbBcd bcd( d );
- bcd.ToChar( npTag->cpKeyBuf2 );
-
- } else if( npTag->exp->GetReturnType() == XB_EXP_DATE ){
- xbDouble d;
- npTag->exp->GetNumericResult( d );
- memcpy( npTag->cpKeyBuf2, &d, 8 );
-
- }
-
- if( bFilter1 ){ // original key was indexed
- if( bFilter0 ){ // new key s/b indexed, update it if changed
- if( memcmp( npTag->cpKeyBuf, npTag->cpKeyBuf2, (size_t) npTag->iKeyLen )){
- npTag->iKeySts = XB_UPD_KEY;
- }
- } else { // original key indexed, new key not indexed, delete it
- npTag->iKeySts = XB_DEL_KEY;
- }
- } else { // original key not indexed
- if( bFilter0 )
- npTag->iKeySts = XB_ADD_KEY;
- }
- }
-
-// std::cout << "xbIxMdx::CreateKey key sts = " << npTag->iKeySts << " iOpt = " << iOpt << " type = " << npTag->exp->GetReturnType() << " name = " << npTag->cTagName;
-// std::cout << " f0 = " << bFilter0 << " f1 = " << bFilter1 << "\n";
-
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::CreateKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
-
- return iRc;
-}
-
-/***********************************************************************/
-//! @brief Create new tag.
-/*!
- This routine creates a new tag. When complete, sets the cur tag pointer to
- the newly created tag.
-
- \param sName Tag Name, including .MDX suffix
- \param sKey Key Expression
- \param sFilter Filter expression.
- \param iDescending
- \param iUnique xbtrue - Unique.<br>xbFalse - Not unique.
- \param iOverLay xbTrue - Overlay if file already exists.<br>xbFalse - Don't overlay.
- \param vpTag Output from method Pointer to vptag pointer.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-
-xbInt16 xbIxMdx::CreateTag( const xbString &sName, const xbString &sKey, const xbString &sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, void **vpTag ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbMdxTag *tte = NULL;
-
-
- // std::cout << "CreateTag() name=[" << sName.Str() << "] key=[" << sKey.Str() << "] sFilter=[" << sFilter.Str() << "]\n";
- // std::cout << "TagUseCnt = " << iTagUseCnt << std::endl;
-
-
- try{
- // verify room for new tag
- if( !( iTagUseCnt < 47 )){
- iErrorStop = 100;
- iRc = XB_LIMIT_REACHED;
- throw iRc;
- }
-
- // verify valid tag name
- xbString sWorker = sName;
- sWorker.Trim();
- if( sWorker.Len() > 10 ){
- iErrorStop = 110;
- iRc = XB_INVALID_TAG;
- throw iRc;
- }
-
- // verify tag not already defined
- if( iTagUseCnt > 0 ){
- if( GetTag( sWorker )){
- iErrorStop = 120;
- iRc = XB_INVALID_TAG;
- throw iRc;
- }
- }
-
- // allocate a tag structure here
- if(( tte = (xbMdxTag *) calloc( 1, (size_t) sizeof( xbMdxTag ))) == NULL ){
- iErrorStop = 130;
- iRc = XB_NO_MEMORY;
- throw iRc;
- }
- *vpTag = tte;
- tte->sTagName = new xbString( sWorker );
-
- //set up the key expression
- sWorker = sFilter;
- sWorker.Trim();
- if( sWorker.Len() > 0 ){
- if( sWorker.Len() == 0 || sWorker.Len() > 220 ){
- iRc = XB_INVALID_TAG;
- iErrorStop = 140;
- throw iRc;
- }
- tte->sFiltExp = new xbString( sWorker );
- tte->filter = new xbExp( dbf->GetXbasePtr());
- if(( iRc = tte->filter->ParseExpression( dbf, sWorker )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
-
- // tte->filter->DumpTree( 1 );
-
- if((tte->filter->GetReturnType()) != 'L' ){
- iRc = XB_INVALID_TAG;
- iErrorStop = 160;
- throw iRc;
- }
- tte->cHasFilter = 0x01;
- }
-
- //set up the key expression
- sWorker = sKey;
- sWorker.Trim();
- if( sWorker.Len() == 0 || sWorker.Len() > 100 ){
- iRc = XB_INVALID_TAG;
- iErrorStop = 170;
- throw iRc;
- }
- tte->sKeyExp = new xbString( sWorker );
- tte->exp = new xbExp( dbf->GetXbasePtr());
- if(( iRc = tte->exp->ParseExpression( dbf, sWorker )) != XB_NO_ERROR ){
- iErrorStop = 180;
- throw iRc;
- }
-
- xbDate d;
-
- if( iTagUseCnt == 0 ){
- // first tag, new mdx file
- // create the file name
- xbString sIxFileName = dbf->GetFqFileName();
- sIxFileName.Trim();
- xbUInt32 lLen = sIxFileName.Len();
- sIxFileName.PutAt( lLen-2, 'M' );
- sIxFileName.PutAt( lLen-1, 'D' );
- sIxFileName.PutAt( lLen, 'X' );
-
- // copy the file name to the class variable
- this->SetFileName( sIxFileName );
- if( FileExists() && !iOverlay ){
- iErrorStop = 190;
- iRc = XB_FILE_EXISTS;
- throw iRc;
- }
-
- // first tag, need to create the file
- if(( iRc = xbFopen( "w+b", dbf->GetShareMode())) != XB_NO_ERROR ){
- iErrorStop = 200;
- throw iRc;
- }
- cVersion = 2;
- cCreateYY = (char) d.YearOf() - 1900;
- cCreateMM = (char) d.MonthOf();
- cCreateDD = (char) d.DayOf( XB_FMT_MONTH );
-
- GetFileNamePart( sFileName );
- sFileName.ToUpperCase();
-
- SetBlockSize( (xbUInt32) dbf->GetCreateMdxBlockSize());
- iBlockFactor = GetBlockSize() / 512;
-
- cProdIxFlag = 1;
- cTagEntryCnt = 48;
- iTagLen = 32;
- ulPageCnt = 4;
- ulFirstFreePage = 0;
- ulNoOfBlockAvail = 0;
- cNextTag = 1;
- c1B = 0x1B;
- cUpdateYY = cCreateYY;
- cUpdateMM = cCreateMM;
- cUpdateDD = cCreateDD;
-
- if(( iRc = WriteHeadBlock( 0 )) != XB_NO_ERROR ){
- iErrorStop = 210;
- throw iRc;
- }
- }
-
- // populate the tag table entry structure
- tte->ulTagHdrPageNo = ulPageCnt;
- ulPageCnt += (xbUInt32) iBlockFactor;
- tte->sTagName->strncpy( tte->cTagName, 10 );
-
- // cKeyFmt is always 0x10;
- // tested 2+ZIPCD CITY+STATE or just standalone field - always 0x10
- tte->cKeyFmt = 0x10; // = CalcTagKeyFmt( *tte->exp );
-
- switch( tte->exp->GetReturnType()){
- case XB_EXP_CHAR:
- tte->cKeyType = 'C';
- tte->iKeyLen = tte->exp->GetResultLen();
- tte->iSecKeyType = 0;
- break;
-
- case XB_EXP_NUMERIC:
- tte->cKeyType = 'N';
- tte->iKeyLen = 12;
- tte->iSecKeyType = 0;
- break;
-
- case XB_EXP_DATE:
- tte->cKeyType = 'D';
- tte->iKeyLen = 8;
- tte->iSecKeyType = 1;
- break;
-
- default:
- iErrorStop = 200;
- iRc = XB_INVALID_INDEX;
- throw iRc;
- }
-
- tte->cpKeyBuf = (char *) malloc( (size_t) tte->iKeyLen + 1 );
- tte->cpKeyBuf2 = (char *) malloc( (size_t) tte->iKeyLen + 1 );
-
-// if( 0 ){
-// printf( "ulTagHdrPageNo=[%d] cTagName=[%-11s], cLeftChild=[%d] cRightChild=[%d] cParent=[%d] cKeyType=[%c]\n\n",
-// tte->ulTagHdrPageNo, tte->cTagName, tte->cLeftChild, tte->cRightChild, tte->cParent, tte->cKeyType );
-// }
-
- // write the new tte entry here
- char tteBuf[21];
- memset( tteBuf, 0x00, 21 );
-
- ePutUInt32( &tteBuf[0], tte->ulTagHdrPageNo );
- for( xbUInt32 l = 0; l < tte->sTagName->Len() && l < 10; l++ ){
- tteBuf[l+4] = tte->sTagName->GetCharacter(l+1);
- }
- tteBuf[15] = tte->cKeyFmt;
- tteBuf[19] = 0x02; // appears to always be a 0x02
- tteBuf[20] = tte->cKeyType;
-
- if(( iRc = xbFseek( (iTagUseCnt * 32) + 544, SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 210;
- throw iRc;
- }
- if(( iRc = xbFwrite( tteBuf, 21, 1 )) != XB_NO_ERROR ){
- iErrorStop = 220;
- throw iRc;
- }
-
-
- // Begin Tag Header
- tte->ulRootPage = ulPageCnt;
- tte->ulTagSize = (xbUInt32) iBlockFactor;
- ulPageCnt += 2;
- tte->cKeyFmt2 = 0x10;
- if( iDescending )
- tte->cKeyFmt2 += 0x08;
- if( iUnique ){
- tte->cKeyFmt2 += 0x40;
- tte->cUnique = 0x01;
- }
-
- tte->cTag11 = 0x1B; // always 0x1b ?
- tte->cSerialNo = 0x01; // version incremented with each tag update
- tte->ulLeftChild = tte->ulRootPage;
- tte->ulRightChild = tte->ulRootPage;
-
- tte->cTagYY = (char) d.YearOf() - 1900;
- tte->cTagMM = (char) d.MonthOf();
- tte->cTagDD = (char) d.DayOf( XB_FMT_MONTH );
-
- tte->cKeyType2 = tte->cKeyType;
- tte->iKeyItemLen = tte->iKeyLen + 4;
- while(( tte->iKeyItemLen % 4 ) != 0 ) tte->iKeyItemLen++;
-
- tte->iKeysPerBlock = (xbInt16) (GetBlockSize() - 12) / tte->iKeyItemLen;
-
- //std::cout << "-------------- create tag info\n";
- //std::cout << "keylen=" << tte->iKeyLen << " iKeyItemLen = " << tte->iKeyItemLen << " keys per block calc = " << tte->iKeysPerBlock << "\n";
-
- tte->cKeyFmt3 = CalcTagKeyFmt( *tte->exp );
-
-// printf( "ulRootPage=[%d] cKeyFmt2=[%d] cKeyType2=[%d] iKeyLen=[%d]iKeysPerBlock=[%d]\n", tte->ulRootPage, tte->cKeyFmt2, tte->cKeyType2, tte->iKeyLen, tte->iKeysPerBlock );
-// printf( "iSecKeyType=[%d] iKeyItemLen=[%d] cUnique=[%d] \n", tte->iSecKeyType, tte->iKeyItemLen, tte->cUnique );
-
- char *pBuf;
- if(( pBuf = (char *) calloc( 1, (size_t) GetBlockSize())) == NULL ){
- iErrorStop = 230;
- iRc = XB_NO_MEMORY;
- throw iRc;
- }
- char *wPtr;
- wPtr = pBuf;
- ePutUInt32( wPtr, tte->ulRootPage );
-
- wPtr += 4;
- ePutUInt32( wPtr, tte->ulTagSize );
-
- wPtr += 4;
- *wPtr = tte->cKeyFmt2;
-
- wPtr++;
- *wPtr = tte->cKeyType2;
-
- wPtr += 2;
- *wPtr = tte->cTag11;
-
- wPtr += 1;
- ePutInt16( wPtr, tte->iKeyLen );
-
- wPtr += 2;
- ePutInt16( wPtr, tte->iKeysPerBlock );
-
- wPtr += 2;
- ePutInt16( wPtr, tte->iSecKeyType );
-
- wPtr += 2;
- ePutInt16( wPtr, tte->iKeyItemLen );
-
- wPtr += 2;
- *wPtr = tte->cSerialNo;
-
- wPtr += 3;
- *wPtr = tte->cUnique;
-
- wPtr++;
- for( xbUInt32 l = 0; l < tte->sKeyExp->Len(); l++ )
- *wPtr++ = tte->sKeyExp->GetCharacter(l+1);
-
- wPtr = pBuf;
-
- tte->cHasKeys = 0x00;
- pBuf[246] = tte->cHasKeys;
-
- wPtr += 248;
- ePutUInt32( wPtr, tte->ulLeftChild );
- wPtr += 4;
- ePutUInt32( wPtr, tte->ulRightChild );
-
- pBuf[257] = tte->cTagYY;
- pBuf[258] = tte->cTagMM;
- pBuf[259] = tte->cTagDD;
- pBuf[480] = tte->cKeyFmt3;
-
- if( sFilter.Len() > 0 ){
- pBuf[245] = tte->cHasFilter;
- wPtr = pBuf;
- wPtr += 762;
- for( xbUInt32 l = 0; l < sFilter.Len(); l++ )
- *wPtr++ = sFilter.GetCharacter(l+1);
- }
-
- if(( iRc = xbFseek( tte->ulTagHdrPageNo * 512, SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 240;
- throw iRc;
- }
-
- if(( iRc = xbFwrite( pBuf, GetBlockSize(), 1 )) != XB_NO_ERROR ){
- iErrorStop = 250;
- throw iRc;
- }
-
- memset( pBuf, 0x00, GetBlockSize() );
- if(( iRc = xbFwrite( pBuf, GetBlockSize(), 1 )) != XB_NO_ERROR ){
- iErrorStop = 260;
- throw iRc;
- }
-
- iTagUseCnt++;
- cNextTag++;
-
-
- if(( iRc = WriteHeadBlock( 1 )) != XB_NO_ERROR ){
- iErrorStop = 270;
- throw iRc;
- }
-
- // update the dbf file if needed - discreet field, has no filter
- // 10/15/22 - dbase 7 does not update this field on index creation
- if( tte->cKeyFmt3 == 0x01 && !tte->cHasFilter ){
- // printf( "cKeyFmt3 = [%x]\n", tte->cKeyFmt3 );
- xbInt16 iFldNo;
- if(( iRc = dbf->GetFieldNo( sKey, iFldNo )) != XB_NO_ERROR ){
- iErrorStop = 280;
- throw iRc;
- }
- xbInt64 lOffset = 31 + ((iFldNo + 1) * 32 );
-
- if(( iRc = dbf->xbFseek( lOffset, SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 290;
- iRc = XB_SEEK_ERROR;
- throw iRc;
- }
- char cBuf[2];
- cBuf[0] = 0x01;
- cBuf[1] = 0x00;
-
- if(( iRc = dbf->xbFwrite( cBuf, 1, 1 )) != XB_NO_ERROR ){
- iErrorStop = 300;
- throw iRc;
- }
- dbf->UpdateSchemaIxFlag( iFldNo, 0x01 );
- }
-
- // add the new entry to the end of the list of tags
- if( mdxTagTbl == NULL ){
- mdxTagTbl = tte;
- } else {
- xbMdxTag *tteL = mdxTagTbl;
- while( tteL->next )
- tteL = tteL->next;
- tteL->next = tte;
- }
-
- /* update the btree pointers */
- CalcBtreePointers();
- char bBuf[3];
- xbMdxTag *tteWork = mdxTagTbl;
-
- if(( iRc = xbFseek( 560, SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 310;
- throw iRc;
- }
- while( tteWork ){
- bBuf[0] = tteWork->cLeftChild;
- bBuf[1] = tteWork->cRightChild;
- bBuf[2] = tteWork->cParent;
-
- if(( iRc = xbFwrite( bBuf, 3, 1 )) != XB_NO_ERROR ){
- iErrorStop = 320;
- throw iRc;
- }
- if( tteWork->next ){
- if(( iRc = xbFseek( 29, SEEK_CUR )) != XB_NO_ERROR ){
- iErrorStop = 330;
- throw iRc;
- }
- }
- tteWork = tteWork->next;
- }
- free( pBuf );
-
-// xbIx::SetCurTag( ( void *) tte );
-
- }
-
- catch (xbInt16 iRc ){
- if( tte ){
- if( tte->cpKeyBuf )
- free( tte->cpKeyBuf );
- if( tte->cpKeyBuf2 )
- free( tte->cpKeyBuf2 );
- if( tte->exp )
- delete tte->exp;
- if( tte->filter )
- delete tte->filter;
- if( tte->sKeyExp )
- delete tte->sKeyExp;
- if( tte->sFiltExp )
- delete tte->sFiltExp;
- if( tte->sTagName )
- delete tte->sTagName;
- free( tte );
- }
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::CreateTag() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
-
- return iRc;
-};
-
-/***********************************************************************/
-//! @brief Delete a key from a node.
-/*!
- This routine deletes a key from a supplied node.
- \param vpTag Tag to delete key on.
- \param npNode Node to delete key on.
- \param iSlotNo Slot number of key to delete.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbIxMdx::DeleteFromNode( void *vpTag, xbIxNode * npNode, xbInt16 iSlotNo )
-{
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbMdxTag * npTag = (xbMdxTag *) vpTag;
-
- try{
- xbInt32 lKeyCnt = GetKeyCount( npNode );
- xbInt16 iLen = (lKeyCnt - iSlotNo - 1) * npTag->iKeyItemLen;
- xbBool bLeaf = IsLeaf( vpTag, npNode );
- if( !bLeaf )
- iLen += 4;
-
- char *pTrg = npNode->cpBlockData;
- if( iLen > 0 ){
- pTrg += (8 + (npTag->iKeyItemLen * (iSlotNo)) ); //lTrgPos;
- // std::cout << "TrgSpot = " << (8 + (npTag->iKeyItemLen * (iSlotNo)) ) << "\n";
- char *pSrc = pTrg;
- pSrc += npTag->iKeyItemLen;
- memmove( pTrg, pSrc, (size_t) iLen );
- }
-
- // zap out the right most key
- pTrg = npNode->cpBlockData;
- if( bLeaf ){
- pTrg += (8 + (npTag->iKeyItemLen * ( lKeyCnt-1 )));
-
- } else {
- pTrg += (12 + (npTag->iKeyItemLen * ( lKeyCnt-1 )));
-
- }
-
- for( xbInt16 i = 0; i < npTag->iKeyItemLen; i++ )
- *pTrg++ = 0x00;
-
- // set the new number of keys
- ePutUInt32( npNode->cpBlockData, (xbUInt32) lKeyCnt - 1 );
-
- // if node empty, add it to the free node chain
- if( lKeyCnt < 2 ){
- if( bReuseEmptyNodes ){
- if( bLeaf && lKeyCnt == 1 ){
- if(( iRc = HarvestEmptyNode( npTag, npNode, 0 )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- }
- }
- }
-
- // write out the block
- if(( iRc = WriteBlock( npNode->ulBlockNo, GetBlockSize(), npNode->cpBlockData )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
-
- // do any empty node processing here
-// if( bReuseEmptyNodes ){
-// if( bLeaf && lKeyCnt == 1 ){
-// std::cout << "Empty node ready for reuse\n";
-// }
-// }
-
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::DeleteFromNode() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return XB_NO_ERROR;
-}
-
-/***********************************************************************/
-//! @brief Delete a key.
-/*!
- This routine deletes a key. It assumes the key to delete
- is the current key in the node chain.
-
- \param vpTag Tag to delete key on.
-
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbIxMdx::DeleteKey( void *vpTag ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbMdxTag * npTag = (xbMdxTag *) vpTag;
-
- // save copy of node chain to reset to after delete completed
- xbIxNode *npSaveNodeChain = npTag->npNodeChain;
- npTag->npNodeChain = NULL;
- xbIxNode * npSaveCurNode = npTag->npCurNode;
-
- // std::cout << "xbIxMdx::DeleteKey()\n";
-
- try{
- xbString sMsg;
-
- if(( iRc = xbIxMdx::KeySetPosDel( npTag )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- // Delete key needs to handle two scenarios
- // 1 - if delete is on the only key of leaf,
- // traverse up tree, trim as needed
- // 2 - if last key on node is deleted, and key value is not the same
- // as prev key, ascend tree looking for an interior node needing
- // updated key value
-
-
- xbInt32 lOrigKeyCnt = GetKeyCount( npTag->npCurNode );
- if(( iRc = DeleteFromNode( npTag, npTag->npCurNode, npTag->npCurNode->iCurKeyNo )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
-
- if( lOrigKeyCnt == 1 ){
-
- // scenario 1
- xbBool bDone = xbFalse;
- xbBool bIsLeaf = xbFalse;
- xbInt32 lKeyCnt;
- npTag->npCurNode = npTag->npCurNode->npPrev;
-
- while( npTag->npCurNode && !bDone ){
- lKeyCnt = GetKeyCount( npTag->npCurNode );
- bIsLeaf = IsLeaf( npTag, npTag->npCurNode );
- if( lKeyCnt > 0 ){
- if(( iRc = DeleteFromNode( npTag, npTag->npCurNode, npTag->npCurNode->iCurKeyNo )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- } else if(( iRc = HarvestEmptyNode( npTag, npTag->npCurNode, 1 )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
-
- if( (bIsLeaf && lKeyCnt > 1) || (!bIsLeaf && lKeyCnt > 0) )
- bDone = xbTrue;
- else
- npTag->npCurNode = npTag->npCurNode->npPrev;
- }
-
- } else if( npTag->npCurNode->iCurKeyNo == (xbUInt32) lOrigKeyCnt - 1 ){
-
- // scenario 2
- // if last two keys identical, then nothing to do, else go up looking for a key to change
- if( memcmp( GetKeyData( npTag->npCurNode, npTag->npCurNode->iCurKeyNo, npTag->iKeyItemLen ),
- GetKeyData( npTag->npCurNode, npTag->npCurNode->iCurKeyNo-1, npTag->iKeyItemLen ),
- (size_t) npTag->iKeyLen )){
-
- xbIxNode *pNode = npTag->npCurNode->npPrev;
- char *pSrc = GetKeyData( npTag->npCurNode, npTag->npCurNode->iCurKeyNo-1, npTag->iKeyItemLen );
-
- while( pNode && pNode->ulBlockNo != npTag->ulRootPage && pNode->iCurKeyNo == (xbUInt32) GetKeyCount( pNode ) )
- pNode = pNode->npPrev;
-
- if( pNode ){
- if( pNode->iCurKeyNo < (xbUInt32) GetKeyCount( pNode )){
- char *pTrg = pNode->cpBlockData;
- pTrg += 12 + (pNode->iCurKeyNo * (xbUInt32) npTag->iKeyItemLen);
- for( xbInt16 i = 0; i < npTag->iKeyLen; i++ )
- *pTrg++ = *pSrc++;
- // write out the block
- if(( iRc = WriteBlock( pNode->ulBlockNo, GetBlockSize(), pNode->cpBlockData )) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
- }
- }
- }
- }
- // restore node chain to pre delete status (which should be post add status)
- npTag->npNodeChain = FreeNodeChain( npTag->npNodeChain );
- npTag->npNodeChain = npSaveNodeChain;
- npTag->npCurNode = npSaveCurNode;
-
- // update the serial number
- if(( iRc = TagSerialNo( 3, npTag )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::DeleteKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- if( npSaveNodeChain ){
- npTag->npNodeChain = npSaveNodeChain;
- npSaveNodeChain = FreeNodeChain( npSaveNodeChain );
- npTag->npCurNode = npSaveCurNode;
- }
- }
- return iRc;
-}
-
-/***********************************************************************/
-//! @brief Dump a given block for a tag
-/*!
- \param vpTag Input tag ptr for tag to be deleted<br>
- \returns <a href="xbretcod_8h.html">Return Codes</a><br>
- 1 = Deleted entire MDX file, only had one tag
-
-*/
-
-xbInt16 xbIxMdx::DeleteTag( void *vpTag ){
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
- xbMdxTag * mpTag = (xbMdxTag *) vpTag;
- xbIxNode *n = NULL;
- xbBool bLoneTag = xbFalse;
-
- try{
-
- if( !vpTag ){
- iErrorStop = 100;
- iRc = XB_INVALID_TAG;
- throw iRc;
- }
-
- char cSaveHasFilter = mpTag->cHasFilter;
- char cSaveKeyFmt3 = mpTag->cKeyFmt3;
- xbString sSaveKey = mpTag->sKeyExp->Str();
-
- if( iTagUseCnt == 1 ){
- // std::cout << "xbIxMdx::DeleteTag - one tag found, delete the mdx file\n";
-
- // close the mdx file
- if(( iRc = xbIxMdx::Close()) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
-
- // delete the file
- xbRemove();
-
- // init variables - needed?
- // Init();
- // iRc > 0 defines this as the only tag in an MDX file, MDX file deleted.
- // signals to the calling process to drop the MDX file from the
- // list of updateable indices.
- bLoneTag = xbTrue;
-
- } else {
-
- // harvest tag nodes
-
- if(( iRc = HarvestTagNodes( mpTag, xbTrue )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
-
- // remove an entry from tag table
- // which tag is this?
- xbInt16 iTagNo = 0;
- xbMdxTag *mp = mdxTagTbl;
- xbMdxTag *mpPrev = NULL;
- while( mp && mp->ulTagHdrPageNo != mpTag->ulTagHdrPageNo ){
- iTagNo++;
- mpPrev = mp;
- mp = mp->next;
- }
-
- // remove it from the linked list of tags
- if( !mpPrev ){
- mdxTagTbl = mp->next;
- } else {
- mpPrev->next = mp->next;
- }
- if( mp ){
- if( mp->cpKeyBuf ) free( mp->cpKeyBuf );
- if( mp->cpKeyBuf2 ) free( mp->cpKeyBuf2 );
- if( mp->exp ) delete mp->exp;
- if( mp->filter ) delete mp->filter;
- if( mp->sKeyExp ) delete mp->sKeyExp;
- if( mp->sFiltExp ) delete mp->sFiltExp;
- if( mp->sTagName ) delete mp->sTagName;
- free( mp );
- }
- xbInt32 iTarg = iTagNo * 32;
- xbInt32 iSrc = iTarg + 32;
- xbInt32 iLen = (iTagUseCnt - iTagNo) * 32;
-
- if(( iRc = xbFseek( 544, SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 160;
- throw iRc;
- }
- char Buf[1536]; // 47 tags + 1 in case tag #47 is deleted
- memset( Buf, 0x00, 1536 );
- if(( iRc = xbFread( Buf, 1504, 1 )) != XB_NO_ERROR ){
- iErrorStop = 170;
- throw iRc;
- }
- char *pTrg = Buf;
- pTrg += iTarg;
- char *pSrc = Buf;
- pSrc += iSrc;
- for( xbInt32 i = 0; i < iLen; i++ )
- *pTrg++ = *pSrc++;
-
- if(( iRc = xbFseek( 544, SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 180;
- throw iRc;
- }
- if(( iRc = xbFwrite( Buf, 1504, 1 )) != XB_NO_ERROR ){
- iErrorStop = 190;
- throw iRc;
- }
-
- iTagUseCnt--;
- if(( iRc = WriteHeadBlock( 1 )) != XB_NO_ERROR ){
- iErrorStop = 200;
- throw iRc;
- }
-
- /* update the btree pointers */
- CalcBtreePointers();
- char bBuf[3];
- xbMdxTag *tteWork = mdxTagTbl;
-
- if(( iRc = xbFseek( 560, SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 210;
- throw iRc;
- }
- while( tteWork ){
- bBuf[0] = tteWork->cLeftChild;
- bBuf[1] = tteWork->cRightChild;
- bBuf[2] = tteWork->cParent;
-
- if(( iRc = xbFwrite( bBuf, 3, 1 )) != XB_NO_ERROR ){
- iErrorStop = 320;
- throw iRc;
- }
- if( tteWork->next ){
- if(( iRc = xbFseek( 29, SEEK_CUR )) != XB_NO_ERROR ){
- iErrorStop = 330;
- throw iRc;
- }
- }
- tteWork = tteWork->next;
- }
- }
-
- // update the dbf file if needed, if discreet field with no filter
- // printf( "cSaveKeyFmt3 = [%x] cSaveHasFilter=[%x] SaveKey = [%s]\n", cSaveKeyFmt3, cSaveHasFilter, sSaveKey.Str());
-
- if( cSaveKeyFmt3 == 0x01 && !cSaveHasFilter ){
- xbInt16 iFldNo;
- if(( iRc = dbf->GetFieldNo( sSaveKey, iFldNo )) != XB_NO_ERROR ){
- iErrorStop = 340;
- throw iRc;
- }
- xbInt64 lOffset = 31 + ((iFldNo + 1) * 32 );
-
- if(( iRc = dbf->xbFseek( lOffset, SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 350;
- iRc = XB_SEEK_ERROR;
- throw iRc;
- }
- char cBuf[2];
- cBuf[0] = 0x00;
- cBuf[1] = 0x00;
- if(( iRc = dbf->xbFwrite( cBuf, 1, 1 )) != XB_NO_ERROR ){
- iErrorStop = 360;
- throw iRc;
- }
- dbf->UpdateSchemaIxFlag( iFldNo, 0x00 );
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::DeleteTag() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- if( n )
- free( n );
- }
- if( bLoneTag && !iRc )
- return 1;
- else
- return iRc;
-}
-
-/***********************************************************************/
-#ifdef XB_DEBUG_SUPPORT
-
-//! @brief Dump a given block for a tag
-/*!
- \param iOpt Output message destination<br>
- 0 = stdout<br>
- 1 = Syslog<br>
- 2 = Both<br>
- \param ulBlockNo Block number to dump
- \param mpTag Index tag pointer
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-
-*/
-
-xbInt16 xbIxMdx::DumpBlock( xbInt16 iOpt, xbUInt32 ulBlockNo, xbMdxTag *mpTag ){
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
- xbString s, s2;
- xbBool bLeaf;
- char *p;
-
- try{
- if(( iRc = GetBlock( mpTag, ulBlockNo, 0 )) != XB_NO_ERROR ){
- iErrorStop = 10;
- throw iRc;
- }
- p = cNodeBuf;
- xbInt32 lNoOfKeys = eGetInt32( p );
- p+=4;
- xbUInt32 ulNode2 = eGetUInt32( p );
-
- if( !mpTag ){
- // if no tag info, print what is available without tag info and exit
- s.Sprintf( "--- BlkNo = %ld Page = %ld NoOfKeys = %ld Node2 (opt NextFreePage) = %ld", ulBlockNo, BlockToPage( ulBlockNo ), lNoOfKeys, ulNode2 );
- xbase->WriteLogMessage( s, iOpt );
- return XB_NO_ERROR;
- }
-
- p+=4;
- p+= mpTag->iKeyItemLen * lNoOfKeys;
- if( eGetUInt32( p ) == 0 ){
- bLeaf = xbTrue;
- // std::cout << "No of keys = " << lNoOfKeys << "\n";
- s.Sprintf( "--- Leaf Node KeyCnt %d\t Page %d\t Block %d", lNoOfKeys, BlockToPage( ulBlockNo ), ulBlockNo );
- } else {
- bLeaf = xbFalse;
- s.Sprintf( "--- Interior Node KeyCnt %d\t Page %d\t Block %d", lNoOfKeys, BlockToPage( ulBlockNo ), ulBlockNo );
- }
- if( ulNode2 > 0 )
- s.Sprintf( "%s Node2 (opt NextFreePage) = %d", s.Str(), ulNode2 );
-
- xbase->WriteLogMessage( s, iOpt );
-
- xbInt32 l;
- for( l = 0; l < lNoOfKeys; l++ ){
- p = cNodeBuf + (8 + (l * mpTag->iKeyItemLen ));
- s.Sprintf( "%08ld\t", eGetUInt32( p ));
- p+=4;
- if( mpTag->cKeyType2 == 'C' ){ //CHAR
- for( xbInt32 l = 0; l < (mpTag->iKeyItemLen-4); l++ )
- s += *p++;
- s.Trim();
- } else if( mpTag->cKeyType2 == 'N' ){ // NUMERIC
- xbBcd bcd( p );
- bcd.ToString( s2 );
- s += s2;
- } else if( mpTag->cKeyType2 == 'D' ){ // DATE
- xbInt32 lDate = (xbInt32) eGetDouble( p );
- xbDate d( lDate );
- s.Sprintf( "%s\t%ld\t(%s)", s.Str(), lDate, d.Str());
- } else {
- s.Sprintf( "Unknown key type [%c]", mpTag->cKeyType2 );
- }
- xbase->WriteLogMessage( s, iOpt );
- }
- if( !bLeaf ){
- // interior node has one extra key at the right most position
- p = cNodeBuf + (8 + (l * mpTag->iKeyItemLen ));
- s.Sprintf( "\t%08ld", eGetUInt32( p ));
- xbase->WriteLogMessage( s, iOpt );
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::DumpBlock() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/**************************************************************************************************************/
-//! @brief Dump free blocks.
-/*!
- Dump free blocks for index debugging purposes.
-
- \param iOpt Output message destination<br>
- 0 = stdout<br>
- 1 = Syslog<br>
- 2 = Both<br>
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-
-*/
-xbInt16 xbIxMdx::DumpFreeBlocks( xbInt16 iOpt ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbString s;
- char *pBuf = NULL;
- char *pNextPage;
- xbUInt32 ulNextPage;
-
- try{
-
- if(( iRc = ReadHeadBlock( 1 )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
-
- xbUInt32 ulLastBlock = PageToBlock( ulPageCnt );
-
- pBuf = (char *) malloc( (size_t) GetBlockSize());
- if( !pBuf ){
- iErrorStop = 110;
- iRc = XB_NO_MEMORY;
- throw iRc;
- }
-
- if( ulFirstFreePage > 0 ){
- xbUInt32 ulThisFreePage = ulFirstFreePage;
- xbUInt32 ulNextFreePage = 0;
- xbUInt32 ulCnt = 0;
- xbase->WriteLogMessage( "*** Free Blocks ***", iOpt );
- s.Sprintf( "File Header - FirstFreePage = %ld Block = %ld", ulFirstFreePage, PageToBlock( ulFirstFreePage ));
- xbase->WriteLogMessage( s, iOpt );
- while( ulThisFreePage > 0 ){
- if(( iRc = ReadBlock( PageToBlock( ulThisFreePage ), GetBlockSize(), pBuf )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- pNextPage = pBuf;
- pNextPage+=4;
- ulNextFreePage = eGetUInt32( pNextPage );
- s.Sprintf( "Free Page# = %ld\t(Block# = %ld)\tNext Free Page = %ld\t(Block = %ld)", ulThisFreePage, PageToBlock( ulThisFreePage ), ulNextFreePage, PageToBlock( ulNextFreePage ));
- xbase->WriteLogMessage( s, iOpt );
- ulThisFreePage = ulNextFreePage;
- ulCnt++;
- }
- s.Sprintf( "%ld free blocks (%ld pages)", ulCnt, BlockToPage( ulCnt ));
- xbase->WriteLogMessage( s, iOpt );
- xbase->WriteLogMessage( "*** End Of Free Blocks ***", iOpt );
- }
-
- pNextPage = pBuf;
- pNextPage+=4;
-
- s = "*** Beginning of Block2 Info ***";
- xbase->WriteLogMessage( s, iOpt );
- s = "ulBlock2 info. ulBlock2 is either one of a linked list of free nodes, or the id of the original node that this node was split from.";
- xbase->WriteLogMessage( s, iOpt );
- s = "Stored in physical file as pages, processed in blocks";
- xbase->WriteLogMessage( s, iOpt );
-
- xbUInt32 ulFirstBlock = 3;
-
- for( xbUInt32 ul = ulFirstBlock; ul < ulLastBlock; ul++ ){
- if(( iRc = ReadBlock( ul, GetBlockSize(), pBuf )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- ulNextPage = eGetUInt32( pNextPage );
- if( ulNextPage > 0 ){
- s.Sprintf( " Block# = %ld\tPage# = %ld\tulBlock2 = %ld\tulBlock2(Page) = %ld", ul, BlockToPage( ul ), PageToBlock( ulNextPage ), ulNextPage );
- xbase->WriteLogMessage( s, iOpt );
- }
- }
- s = "*** End of Block2 Info ***";
- xbase->WriteLogMessage( s, iOpt );
-
- if( pBuf ) free( pBuf );
- }
-
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::DumpFreeBlocks() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- if( pBuf ) free( pBuf );
- }
- return iRc;
-}
-
-/**************************************************************************************************************/
-//! @brief Dump interior and leaf blocks for a given tag.
-/*!
- Dump blocks for given tag for index debugging purposes.
-
- A page is 512 bytes<br>
- A block is one or more pages<br>
- The default mdx block size is 2 pages, or 1024 bytes<br>
- The first four pages or header pages<br>
-
- \param iOpt Output message destination<br>
- 0 = stdout<br>
- 1 = Syslog<br>
- 2 = Both<br>
- \param vpTag Index tag pointer, defaults to all tags if null.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-
-*/
-
-xbInt16 xbIxMdx::DumpTagBlocks( xbInt16 iOpt, void * vpTag ){
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
- xbInt16 iCurTag = 0;
- xbString s;
- xbInt16 iBlockCtr = 0;
-
- try{
-
- xbMdxTag * mpTag;
- if( vpTag == NULL )
- mpTag = (xbMdxTag *) GetTag( iCurTag++ );
- else
- mpTag = (xbMdxTag *) vpTag;
-
- if( mpTag == NULL ){
- iErrorStop = 100;
- iRc = XB_INVALID_TAG;
- throw iRc;
- }
-
- xbIxNode *n;
- xbString s;
- xbString s2;
- xbBool bDone = xbFalse;
-
- xbUInt32 ulBlkNo;
- xbLinkListOrd<xbUInt32> ll;
- xbLinkListNode<xbUInt32> * llN;
-
- ll.SetDupKeys( xbFalse );
-
- s.Sprintf( "%s Root Page %ld (Block %ld)", mpTag->cTagName, mpTag->ulRootPage, PageToBlock( mpTag->ulRootPage ) );
- xbase->WriteLogMessage( s, iOpt );
-
- // for each tag
- while( !bDone ){
-
- // clear out any history
- ll.Clear();
- if( mpTag->npNodeChain ){
- mpTag->npNodeChain = FreeNodeChain( mpTag->npNodeChain );
- mpTag->npCurNode = NULL;
- }
-
- while( GetNextKey( mpTag, 0 ) == 0 ){
- n = mpTag->npNodeChain;
-
- while(n){
- ll.InsertKey( n->ulBlockNo, (xbUInt32) n->iCurKeyNo );
- n = n->npNext;
- }
- }
- llN = ll.GetHeadNode();
-
- while( llN ){
-
- ulBlkNo = llN->GetKey();
- xbIxMdx::DumpBlock( iOpt, ulBlkNo, mpTag );
- llN = llN->GetNextNode();
- iBlockCtr++;
- }
-
- if( vpTag || iCurTag >= GetTagCount())
- bDone = xbTrue;
- else
- mpTag = (xbMdxTag *) GetTag( iCurTag++ );
- }
-
- s.Sprintf( "\nTotal Blocks: %d", iBlockCtr );
- xbase->WriteLogMessage( s, iOpt );
-
- if( mpTag->npNodeChain ){
- mpTag->npNodeChain = FreeNodeChain( mpTag->npNodeChain );
- mpTag->npCurNode = NULL;
- }
-
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::DumpTagBlocks() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-/***********************************************************************/
-//! @brief Dump index file header.
-/*!
- Dump a index file header for debugging purposes.
- \param iOpt Output message destination<br>
- 0 = stdout<br>
- 1 = Syslog<br>
- 2 = Both<br>
- \param iFmtOpt Output Format<br>
- 0, 1 = Header info only<br>
- 2 = Tag info<br>
- 3 = Header && Tag info<br>
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbIxMdx::DumpHeader( xbInt16 iOpt, xbInt16 iFmtOpt )
-{
-
- xbInt16 iRc = XB_NO_ERROR;
- xbString s;
- if(( iRc = ReadHeadBlock( 1 )) != XB_NO_ERROR )
- return iRc;
-
-// std::cout << "xbIxMdx::DumpHeader options - " << iDestOpt << " fmtopt = " << iFmtOpt << "\n";
-
- char c, tfv, cDisplayMask = 1;
- cDisplayMask = cDisplayMask << 7;
- if( iFmtOpt != 2 && iFmtOpt != 4 ){
- s = "*** MDX Index Header ***";
- xbase->WriteLogMessage( s, iOpt );
- s = "Version = ";
- tfv = cVersion;
- for( c = 1; c<= 8; c++ ){
- //std::cout << (tfv & cDisplayMask ? '1' : '0');
- s+= (tfv & cDisplayMask ? '1' : '0');
- tfv <<= 1;
- }
- xbase->WriteLogMessage( s, iOpt );
-
-
-// std::cout << std::endl;
-// std::cout <<
- s.Sprintf( "Create Date = %d/%d/%d", (int) cCreateMM, (int) cCreateDD, (int) cCreateYY % 100 );
- xbase->WriteLogMessage( s, iOpt );
-
- s.Sprintf( "File Name = %s", sFileName.Str() );
- xbase->WriteLogMessage( s, iOpt );
-
- s.Sprintf( "Block Factor = %d", iBlockFactor );
- xbase->WriteLogMessage( s, iOpt );
-
- s.Sprintf( "Block Size = %d", GetBlockSize() );
- xbase->WriteLogMessage( s, iOpt );
-
- s.Sprintf( "Prod Ix Flag = %d", (xbInt16) cProdIxFlag );
- xbase->WriteLogMessage( s, iOpt );
-
- s.Sprintf( "Tag Entry Cnt = %d", (xbInt16) cTagEntryCnt );
- xbase->WriteLogMessage( s, iOpt );
-
- s.Sprintf( "Tag Len = %d", iTagLen );
- xbase->WriteLogMessage( s, iOpt );
-
- s.Sprintf( "Next Tag = %d", (xbInt16) cNextTag );
- xbase->WriteLogMessage( s, iOpt );
-
- s.Sprintf( "Tag Use Cnt = %d", iTagUseCnt );
- xbase->WriteLogMessage( s, iOpt );
-
- s.Sprintf( "Page Cnt = %d", ulPageCnt );
- xbase->WriteLogMessage( s, iOpt );
-
- s.Sprintf( "First Free Page = %d", ulFirstFreePage );
- xbase->WriteLogMessage( s, iOpt );
-
- s.Sprintf( "No Of Block Avail = %d\n", ulNoOfBlockAvail );
- xbase->WriteLogMessage( s, iOpt );
-
- s.Sprintf( "Last update date = %d/%d/%d", (int) cCreateMM, (int) cCreateDD, (int) cCreateYY % 100 );
- xbase->WriteLogMessage( s, iOpt );
-
- if( ulFirstFreePage > 0 ){
- xbString s;
- xbUInt32 ulNfp = ulFirstFreePage; // next free page
- xbInt16 lc = 0;
- while( ulNfp && lc++ < 5 ){
- if( s.Len() > 0 )
- s += ",";
- s.Sprintf( "%s%ld", s.Str(), ulNfp );
- if(( iRc = GetBlock( NULL, (xbUInt32) (ulNfp / (xbUInt32) iBlockFactor), 0 )) != 0 )
- return iRc;
- ulNfp = eGetUInt32( cNodeBuf+4 );
- }
- xbase->WriteLogMessage( s, iOpt );
- }
- }
- if( iFmtOpt > 1 ){
- xbMdxTag *tt = mdxTagTbl;
- xbString s;
- xbInt16 i = 0;
-
- if( tt ){
- while( tt ){
- i++;
- if(( iRc = LoadTagDetail( 2, tt )) != XB_NO_ERROR )
- return iRc;
-
- s.Sprintf( "TTE (%d)\tName HdrPage\tFormat\tLeftChild\tRightChild\tParent\tKeyType", i );
- xbase->WriteLogMessage( s, iOpt );
- s.Sprintf( "TTE (%d)\t%-12s %d\t\t%d\t%d\t\t%d\t\t%d\t%c\n", i, tt->cTagName, tt->ulTagHdrPageNo, tt->cKeyFmt, tt->cLeftChild, tt->cRightChild, tt->cParent, tt->cKeyType );
- xbase->WriteLogMessage( s, iOpt );
-
- s.Sprintf( "TTH (%d)\tRoot\tTagSize\tKeyFmt2\tType2\tKeyLen\tKeysPerBlock\tSecType\tKeyItemLen\tSerial#\tHasKeys\tFilter\tDesc\tUnique\tLchild\tRchild\tKeyFmt3\tTagDate", i );
- xbase->WriteLogMessage( s, iOpt );
-
- s.Sprintf( "TTH (%d)\t%d\t%d\t%d\t%c\t%d\t%d\t\t%d\t%d\t\t%x\t%x\t%d\t%d\t%d\t%d\t%d\t%d\t%d/%d/%d",
- i, tt->ulRootPage, tt->ulTagSize, tt->cKeyFmt2, tt->cKeyType2, tt->iKeyLen, tt->iKeysPerBlock, tt->iSecKeyType, tt->iKeyItemLen, tt->cSerialNo, tt->cHasKeys, tt->cHasFilter,
- (((tt->cKeyFmt2 & 0x08) > 0) ? 1 : 0), // descending?
- tt->cUnique, tt->ulLeftChild, tt->ulRightChild, tt->cKeyFmt3, (int) tt->cTagMM, (int) tt->cTagDD, (int) tt->cTagYY % 100 );
-
- xbase->WriteLogMessage( s, iOpt );
-
- s.Sprintf( "Key (%d) %s", i, tt->sKeyExp->Str());
- xbase->WriteLogMessage( s, iOpt );
-
- if( tt->cHasFilter ){
- s.Sprintf( "Flt (%d) %s", i, tt->sFiltExp->Str());
- xbase->WriteLogMessage( s, iOpt );
- }
- xbase->WriteLogMessage( "", iOpt );
- tt = tt->next;
-
- }
- }
- }
- return iRc;
-}
-
-/***********************************************************************/
-xbInt16 xbIxMdx::DumpIxForTag( void *vpTag, xbInt16 iOutputOpt )
-{
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbInt16 iDepth = 0;
- xbUInt32 lKeyCtr = 0;
- xbInt32 iMinDepth = 999999;
- xbInt32 iMaxDepth = 0;
-
- try{
- /*
- get first node
- while interior node
- print the left key
- level++
- go down one on the left
- */
-
- xbMdxTag * mpTag = (xbMdxTag *) vpTag;
- if( mpTag->npNodeChain ){
- mpTag->npNodeChain = FreeNodeChain( mpTag->npNodeChain );
- mpTag->npCurNode = NULL;
- }
-
- // Get the root
- if(( iRc = LoadTagDetail( 2, mpTag )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- // lRootBlock is now available
- if(( iRc = GetBlock( vpTag, (mpTag->ulRootPage / (xbUInt32) iBlockFactor), 1 )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- // if no keys on this node, then the index is empty
- xbUInt32 ulKeyPtr = eGetUInt32( mpTag->npCurNode->cpBlockData );
- if( ulKeyPtr == 0 ){
- iErrorStop = 120;
- iRc = XB_EMPTY;
- throw iRc;
- }
- while( !IsLeaf( vpTag, mpTag->npCurNode )){ // go down the chain looking for a leaf node
- PrintKey( vpTag, mpTag->npCurNode , 0, iDepth++, 'I', iOutputOpt );
- if(( iRc = GetKeyPtr( vpTag, 0, mpTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- if(( iRc = GetBlock( vpTag, (ulKeyPtr / (xbUInt32) iBlockFactor), 1 )) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
- }
- if(( iRc = GetKeyPtr( vpTag, 0, mpTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
- // loop through the leaf entries of left most leaf
- if( iDepth < iMinDepth ) iMinDepth = iDepth;
- if( iDepth > iMaxDepth ) iMaxDepth = iDepth;
- xbUInt32 ulNoOfKeys = eGetUInt32( mpTag->npCurNode->cpBlockData );
- for( xbUInt32 ul = 0; ul < ulNoOfKeys; ul++ ){
- PrintKey( vpTag, mpTag->npCurNode , ul, iDepth, 'L', iOutputOpt );
- lKeyCtr++;
- }
-
- // if head node = start node, return
- if( mpTag->npCurNode->ulBlockNo == ( mpTag->ulRootPage / (xbUInt32) iBlockFactor ))
- return XB_NO_ERROR;
-
- xbBool bEof = false;
- while( !bEof ){
-
- // go up the chain, looking for an interior node with more keys on it
- xbIxNode * TempIxNode = mpTag->npCurNode;
- mpTag->npCurNode = mpTag->npCurNode->npPrev;
- mpTag->npCurNode->npNext = NULL;
- TempIxNode->npPrev = NULL;
- TempIxNode = FreeNodeChain( TempIxNode );
- iDepth--;
-
- while( mpTag->npCurNode->iCurKeyNo >= eGetUInt32( mpTag->npCurNode->cpBlockData ) &&
- mpTag->npCurNode->ulBlockNo != ( mpTag->ulRootPage / (xbUInt32) iBlockFactor) ){
- TempIxNode = mpTag->npCurNode;
- mpTag->npCurNode = mpTag->npCurNode->npPrev;
- mpTag->npCurNode->npNext = NULL;
- TempIxNode->npPrev = NULL;
- TempIxNode = FreeNodeChain( TempIxNode );
- iDepth--;
- }
- // if head node && right most key, return
- if( mpTag->npCurNode->ulBlockNo == (mpTag->ulRootPage / (xbUInt32) iBlockFactor) &&
- mpTag->npCurNode->iCurKeyNo == eGetUInt32( mpTag->npCurNode->cpBlockData ))
- bEof = true;
-
- if( !bEof ){
- mpTag->npCurNode->iCurKeyNo++;
- if(( iRc = GetKeyPtr( vpTag, mpTag->npCurNode->iCurKeyNo, mpTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 160;
- throw iRc;
- }
- PrintKey( vpTag, mpTag->npCurNode , mpTag->npCurNode->iCurKeyNo, iDepth++, 'I', iOutputOpt );
-
- if(( iRc = GetBlock( vpTag, (ulKeyPtr / (xbUInt32) iBlockFactor), 1 )) != XB_NO_ERROR ){
- iErrorStop = 170;
- throw iRc;
- }
-
- // traverse down the left side of the tree
- while( !IsLeaf( vpTag, mpTag->npCurNode )) // go down the chain looking for a leaf node
- {
- PrintKey( vpTag, mpTag->npCurNode , 0, iDepth++, 'I', iOutputOpt );
- if(( iRc = GetKeyPtr( vpTag, 0, mpTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 180;
- throw iRc;
- }
- if(( iRc = GetBlock( vpTag, (ulKeyPtr / (xbUInt32) iBlockFactor), 1 )) != XB_NO_ERROR ){
- iErrorStop = 190;
- throw iRc;
- }
- }
- if( iDepth < iMinDepth ) iMinDepth = iDepth;
- if( iDepth > iMaxDepth ) iMaxDepth = iDepth;
- ulNoOfKeys = eGetUInt32( mpTag->npCurNode->cpBlockData );
- for( xbUInt32 ul = 0; ul < ulNoOfKeys; ul++ ){
- PrintKey( vpTag, mpTag->npCurNode , ul, iDepth, 'L', iOutputOpt );
- lKeyCtr++;
- }
- }
- }
- xbString s;
- s.Sprintf( "Total keys = [%ld] Min Depth = [%d] Max Depth = [%d]", lKeyCtr, iMinDepth, iMaxDepth );
- xbase->WriteLogMessage( s.Str(), 2 );
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::DumpIxForTag() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-/**************************************************************************************************************/
-void xbIxMdx::DumpIxNodeChain( void *vpTag, xbInt16 iOutputOpt ) const
-{
- xbMdxTag * mpTag = (xbMdxTag *) vpTag;
- xbString s( "Dump Node Chain" );
- xbase->WriteLogMessage( s, 2 );
-
- if( mpTag->npNodeChain ){
- xbIxNode *n = mpTag->npNodeChain;
- xbInt16 iCtr = 0;
- char cLeaf;
- s.Sprintf( "Cnt\tThis Prev Next CurKeyNo BlockNo Page NoOfKeys Type" );
- xbase->WriteLogMessage( s, iOutputOpt );
- while( n ){
- IsLeaf( vpTag, n ) ? cLeaf = 'L' : cLeaf = 'I';
- s.Sprintf( "%d\t%08x %08x %08x %08d %08d %08d %08ld %c",
- iCtr++, n, n->npPrev, n->npNext, n->iCurKeyNo,
- n->ulBlockNo, n->ulBlockNo * (xbUInt32) iBlockFactor,
- eGetUInt32( n->cpBlockData ), cLeaf );
- xbase->WriteLogMessage( s, 2 );
- n = n->npNext;
- }
- } else {
- s = "Empty Node Chain";
- xbase->WriteLogMessage( s, 2 );
- }
-}
-#endif
-
-/***********************************************************************************************/
-xbInt16 xbIxMdx::FindKey( void *vpTag, xbDouble dKey, xbInt16 iRetrieveSw ){
-
- xbMdxTag * mpTag = (xbMdxTag *) vpTag;
- if( mpTag->cKeyType2 == 'N' ){ // mdx indices store numeric keys as bcd values
- xbBcd bcd( dKey );
- return xbIx::FindKey( vpTag, bcd, iRetrieveSw );
- } else // this would be a julian date inquiry
- return FindKey( vpTag, &dKey, 8, iRetrieveSw );
-}
-
-/***********************************************************************************************/
-// iRetrieveSw = 1 - position db file to index position
-// 0 - do not position dbf file
-
-xbInt16 xbIxMdx::FindKey( void *vpTag, const void * vpKey,
- xbInt32 lSearchKeyLen, xbInt16 iRetrieveSw ){
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
-
- try{
- // clean up any previous table updates before moving on
- if( iRetrieveSw ){
- if( dbf->GetDbfStatus() == XB_UPDATED ){
- if( dbf->GetAutoCommit() == 1 ){
- if(( iRc = dbf->Commit()) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- } else {
- if(( iRc = dbf->Abort()) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- }
- }
- }
-
- xbUInt32 ulNoOfKeys;
- xbMdxTag * mpTag = (xbMdxTag *) vpTag;
- char cKeyType = GetKeyType( vpTag );
- xbBool bDescending = mpTag->cKeyFmt2 & 0x08;
-
- if( mpTag->npNodeChain ){
-
- // determine if the index has been updated since the last time it was used
- time_t tFileTs;
- if(( iRc = GetFileMtime( tFileTs )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- if( mpTag->tNodeChainTs < tFileTs ){
- mpTag->npNodeChain = FreeNodeChain( mpTag->npNodeChain );
- mpTag->npCurNode = NULL;
-
- } else {
- // pop up the chain looking for appropriate starting point
- xbBool bDone = false;
- xbIxNode * TempIxNode;
- while( mpTag->npCurNode && !bDone &&
- (mpTag->npCurNode->ulBlockNo != ( mpTag->ulRootPage / (xbUInt32) iBlockFactor ))){ // not root node
- //if no keys on the node, pop up one
- ulNoOfKeys = eGetUInt32( mpTag->npCurNode->cpBlockData );
- if( ulNoOfKeys == 0 ){
- TempIxNode = mpTag->npCurNode;
- mpTag->npCurNode = mpTag->npCurNode->npPrev;
- TempIxNode = FreeNodeChain( TempIxNode );
-
- } else {
-
- iRc = CompareKey( cKeyType, vpKey, GetKeyData( mpTag->npCurNode, 0, mpTag->iKeyItemLen ), (size_t) lSearchKeyLen );
- if( (!bDescending && iRc <= 0) || (bDescending && iRc >= 0 )){
- TempIxNode = mpTag->npCurNode;
- mpTag->npCurNode = mpTag->npCurNode->npPrev;
- TempIxNode = FreeNodeChain( TempIxNode );
- } else {
- // get the number of keys on the block and compare the key to the rightmost key
- xbUInt32 ulKeyCtr = eGetUInt32( mpTag->npCurNode->cpBlockData ) - 1; // IsLeaf( vpTag, mpTag->npCurNode );
- iRc = CompareKey( cKeyType, vpKey, GetKeyData( mpTag->npCurNode, ulKeyCtr, mpTag->iKeyItemLen), (size_t) lSearchKeyLen );
-
- if( (!bDescending && iRc > 0) || (bDescending && iRc < 0 )){
- TempIxNode = mpTag->npCurNode;
- mpTag->npCurNode = mpTag->npCurNode->npPrev;
- TempIxNode = FreeNodeChain( TempIxNode );
- } else {
- bDone = true;
- }
- }
- }
- }
- }
- }
-
- // either started empty, or cleared due to file time diff
- if( !mpTag->npNodeChain ){
- // Get the root
- if(( iRc = LoadTagDetail( 2, mpTag )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- // lRootBlock is now available
- if(( iRc = GetBlock( vpTag, (mpTag->ulRootPage / (xbUInt32) iBlockFactor), 1 )) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
- // if this is a leaf node and no keys on this node, then the index is empty
- ulNoOfKeys = eGetUInt32( mpTag->npCurNode->cpBlockData );
- if( ulNoOfKeys == 0 && IsLeaf( vpTag, mpTag->npCurNode )){
-// iRc = XB_EMPTY;
- iRc = XB_NOT_FOUND;
- return iRc;
- }
- }
-
- // should be in the appropriate position in the node chain to continue the search from here
- // run down through the interior nodes
- xbInt16 iSearchRc = 0;
- xbUInt32 ulKeyPtr = 0;
-
- while( vpTag && !IsLeaf( vpTag, mpTag->npCurNode ) ){
- // get the number of keys on the block and compare the key to the rightmost key
- ulNoOfKeys = eGetUInt32( mpTag->npCurNode->cpBlockData );
-
- if( ulNoOfKeys == 0 ){
- mpTag->npCurNode->iCurKeyNo = 0;
-
- } else {
-
- iRc = CompareKey( cKeyType, vpKey, GetKeyData( mpTag->npCurNode, ulNoOfKeys - 1, mpTag->iKeyItemLen), (size_t) lSearchKeyLen );
- if( (!bDescending && iRc > 0) || (bDescending && iRc < 0)){
- mpTag->npCurNode->iCurKeyNo = ulNoOfKeys;
- }
- else
- {
- mpTag->npCurNode->iCurKeyNo = (xbUInt32) BSearchBlock( cKeyType, mpTag->npCurNode,
- (xbInt32) mpTag->iKeyItemLen, vpKey, (xbInt32) lSearchKeyLen, iSearchRc, bDescending );
- }
- }
-
- if(( iRc = GetKeyPtr( vpTag, mpTag->npCurNode->iCurKeyNo, mpTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
-
- if(( iRc = GetBlock( vpTag, (ulKeyPtr / (xbUInt32)iBlockFactor), 1 )) != XB_NO_ERROR ){
- iErrorStop = 160;
- throw iRc;
- }
- }
-
- ulNoOfKeys = eGetUInt32( mpTag->npCurNode->cpBlockData );
- xbInt16 iCompRc = 0;
-
- if( ulNoOfKeys == 0 ){
- // iCompRc = -1;
- // iRc = XB_EMPTY;
- iRc = XB_NOT_FOUND;
- return iRc;
-
- } else {
-
- iRc = BSearchBlock( cKeyType, mpTag->npCurNode, mpTag->iKeyItemLen, vpKey, lSearchKeyLen, iCompRc, bDescending );
- // iCompRc
- // 0 found
- // < 0 eof encountered, search key > last key in file
- // > 0 not found, positioned to next key
-
- if( iCompRc >= 0 ){
- mpTag->npCurNode->iCurKeyNo = (xbUInt32) iRc;
-
-
- if( iRetrieveSw ){
-
- xbUInt32 ulKey = mpTag->npCurNode->iCurKeyNo;
- if( ulKey >= ulNoOfKeys ) // if position past end of keys, need to go back one and position to last key
- ulKey--;
-
- // if(( iRc = GetKeyPtr( vpTag, mpTag->npCurNode->iCurKeyNo, mpTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
-
- if(( iRc = GetKeyPtr( vpTag, ulKey, mpTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 170;
- throw iRc;
- }
- if(( iRc = dbf->GetRecord( ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 180;
- throw iRc;
- }
- }
- }
- }
-
- if( iCompRc == 0 )
- return XB_NO_ERROR;
- else if( iCompRc > 0 )
- return XB_NOT_FOUND;
- else
- return XB_EOF;
-
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::FindKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/***********************************************************************/
-xbInt16 xbIxMdx::FindKeyForCurRec( void * vpTag )
-{
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbInt16 i = 0;
-
- try{
- if(( iRc = CreateKey( vpTag, 0 )) < XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::FindKeyForCurRec() Exception Caught. Error Stop = [%d] iRc = [%d] Tag=[%d]", iErrorStop, iRc, i );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return XB_NO_ERROR;
-}
-
-/***********************************************************************/
-//! @brief Get dbf record number for given key number.
-/*!
- \param vpTag Tag to retrieve dbf rec number on.
- \param iKeyNo Key number for retrieval
- \param np Pointer to node
- \param ulDbfPtr- Output dbf record number
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbIxMdx::GetDbfPtr( void *vpTag, xbInt16 iKeyNo, xbIxNode *np, xbUInt32 &ulDbfPtr ) const {
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
-
- try{
- #ifdef XB_DEBUG_SUPPORT
- // turn this off in production mode for better performance
- xbUInt32 ulNoOfKeys = eGetUInt32 ( np->cpBlockData );
- if( iKeyNo < 0 || iKeyNo > (xbInt16) --ulNoOfKeys ){
- iErrorStop = 100;
- throw XB_INVALID_KEYNO;
- }
- #endif
-
- xbMdxTag * mpTag = (xbMdxTag *) vpTag;
- char *p = ( np->cpBlockData);
- p += (8 + (iKeyNo * mpTag->iKeyItemLen));
- ulDbfPtr = eGetUInt32 ( p );
-
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::GetDbfPtr() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/***********************************************************************/
-/*!
- \param vpTag Tag to retrieve first key on.
- \param iRetrieveSw xbTrue - Retrieve the record on success.<br>
- xbFalse - Don't retrieve record.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbIxMdx::GetFirstKey( void *vpTag, xbInt16 iRetrieveSw = 0 ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
-
- // convert the tag pointer to mdx tag pointer
- xbMdxTag * mpTag = (xbMdxTag *) vpTag;
-
-
- try{
- // clear out any history
- if( mpTag->npNodeChain ){
- mpTag->npNodeChain = FreeNodeChain( mpTag->npNodeChain );
- mpTag->npCurNode = NULL;
- }
- // Get the root
- if(( iRc = LoadTagDetail( 2, mpTag )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
-
- // lRootPage is available
- if(( iRc = GetBlock( vpTag, (mpTag->ulRootPage / (xbUInt32) iBlockFactor), 1 )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
-
- // if no keys on this node, then the index is empty
- // this is not true
-
- xbUInt32 ulKeyPtr = eGetUInt32( mpTag->npCurNode->cpBlockData );
- if( ulKeyPtr == 0 && IsLeaf( vpTag, mpTag->npCurNode )){
- iRc = XB_EMPTY;
- return iRc;
- }
-
- while( !IsLeaf( vpTag, mpTag->npCurNode )){ // go down the chain looking for a leaf node
- if(( iRc = GetKeyPtr( vpTag, 0, mpTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
-
- if(( iRc = GetBlock( vpTag, (ulKeyPtr / (xbUInt32) iBlockFactor), 1 )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- }
-
- // retrieve record to data buf
- if( iRetrieveSw ){
- if(( iRc = GetKeyPtr( vpTag, 0, mpTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
- if(( iRc = dbf->GetRecord( ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
- }
- // else {
- // throw iRc;
- // }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::GetFirstKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/***********************************************************************/
-//xbBool xbIxMdx::GetIndexUpdated() const {
-// std::cout << "xbIxMdx::GetIndexUpdate() FIX ME \n";
-// return xbFalse;
-//}
-
-/***********************************************************************/
-//! @brief Get the key expression for the given tag.
-/*!
- \param vpTag Tag to retrieve key expression from tag.
- \returns Key expression.
-*/
-
-xbString &xbIxMdx::GetKeyExpression( const void * vpTag ) const{
- xbMdxTag *mpTag = (xbMdxTag *) vpTag;
- return *mpTag->sKeyExp;
-}
-
-/***********************************************************************/
-//! @brief Get the key expression for the given tag.
-/*!
- \param vpTag Tag to retrieve filter expression from tag (if it exists).
- \returns Key filter.
-*/
-
-xbString &xbIxMdx::GetKeyFilter( const void * vpTag ) const{
-
- xbMdxTag * mpTag = (xbMdxTag *) vpTag;
-
- // std::cout << "GetKeyFilter() ";
- if( mpTag->sFiltExp )
- return *mpTag->sFiltExp;
-// std::cout << " not null\n";
- else
- return sNullString;
- // std::cout << " null\n";
-
-// next line causes seg faults
-// return *mpTag->sFiltExp;
-
-}
-/**************************************************************************************************/
-xbInt16 xbIxMdx::GetKeyPtr( void *vpTag, xbInt16 iKeyNo, xbIxNode *np, xbUInt32 &ulKeyPtr ) const {
-
- xbInt16 iRc = XB_NO_ERROR;
-
- xbInt16 iErrorStop = 0;
-
- try{
-
- xbMdxTag *mdxTag = (xbMdxTag *) vpTag;
- char *p = np->cpBlockData;
- xbUInt32 ulKeyCnt = eGetUInt32( p );
- if( iKeyNo < 0 || iKeyNo > (xbInt16) ulKeyCnt ){
- iErrorStop = 100;
- iRc = XB_INVALID_KEYNO;
- throw iRc;
- }
- p+=8; // skip past first two four byte numeric fields
- p+= (iKeyNo * mdxTag->iKeyItemLen);
- ulKeyPtr = eGetUInt32( p );
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::GetKeyPtr() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-/***********************************************************************/
-//! @brief Returns key update status.
-/*!
- \param vpTag Tag to check status on.
- \returns XB_UPD_KEY Key updated.<br>
- XB_DEL_KEY Key deleted.<br>
- XB_ADD_KEY Key added.<br>
- 0 No key updates
-
-*/
-inline xbInt16 xbIxMdx::GetKeySts( void *vpTag ) const{
-
- xbMdxTag *mpTag = (xbMdxTag *) vpTag;
- return mpTag->iKeySts;
-}
-
-/***********************************************************************/
-char xbIxMdx::GetKeyType( const void *vpTag ) const {
- xbMdxTag * mpTag = (xbMdxTag *) vpTag;
- return mpTag->cKeyType;
-}
-
-/***********************************************************************/
-//! @brief Get the last key for the given tag.
-/*!
- \param vpTag Tag to retrieve last key on.
- \param iRetrieveSw xbTrue - Retrieve the record on success.<br>
- xbFalse - Don't retrieve record.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbIxMdx::GetLastKey( void *vpTag, xbInt16 iRetrieveSw ){
- return GetLastKey( 0, vpTag, iRetrieveSw );
-}
-
-/***********************************************************************/
-//! @brief Get the last key for the given tag and starting node.
-/*!
- \param ulBlockNo Starting node
- \param vpTag Tag to retrieve last key on.
- \param iRetrieveSw xbTrue - Retrieve the record if key found.<br>
- xbFalse - Don't retrieve record.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbIxMdx::GetLastKey( xbUInt32 ulBlockNo, void *vpTag, xbInt16 iRetrieveSw ){
-
- // if UlNodeNo is zero, start at head node, otherwise start at ulNodeNo
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
-
- // convert the tag pointer to mdx tag pointer
- xbMdxTag * mpTag = (xbMdxTag *) vpTag;
-
- try{
- xbUInt32 ulNoOfKeys = 0;
- // clear out any history
- if( mpTag->npNodeChain ){
- mpTag->npNodeChain = FreeNodeChain( mpTag->npNodeChain );
- mpTag->npCurNode = NULL;
- }
- // Get the root
- if( ulBlockNo == 0 ){
- if(( iRc = LoadTagDetail( 2, mpTag )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- //if(( iRc = GetBlock( vpTag, (mpTag->ulRootPage / (xbUInt32) iBlockFactor), 1 )) != XB_NO_ERROR ){
- if(( iRc = GetBlock( vpTag, PageToBlock( mpTag->ulRootPage ), 1 )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
-
- } else {
- if(( iRc = GetBlock( vpTag, ulBlockNo, 1 )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- }
-
- ulNoOfKeys = eGetUInt32( mpTag->npCurNode->cpBlockData );
-
- if( ulNoOfKeys == 0 && IsLeaf( vpTag, mpTag->npCurNode )){
- iRc = XB_EMPTY;
- return iRc;
- }
-
- mpTag->npCurNode->iCurKeyNo = ulNoOfKeys;
- ulNoOfKeys = eGetUInt32( mpTag->npCurNode->cpBlockData );
-
- xbUInt32 ulKeyPtr = 0;
- while( !IsLeaf( vpTag, mpTag->npCurNode )){ // go down the chain looking for a leaf node
- // std::cout << "Considered an interior node\n";
- if(( iRc = GetKeyPtr( vpTag, ulNoOfKeys, mpTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- if(( iRc = GetBlock( vpTag, (ulKeyPtr / (xbUInt32) iBlockFactor), 1 )) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
-
- ulNoOfKeys = eGetUInt32( mpTag->npCurNode->cpBlockData );
- mpTag->npCurNode->iCurKeyNo = ulNoOfKeys;
- }
- // leaf node has one fewer keys than the interior node
- mpTag->npCurNode->iCurKeyNo--;
- ulNoOfKeys = eGetUInt32( mpTag->npCurNode->cpBlockData );
-
- // retrieve record to data buf
- if( iRetrieveSw ){
- if(( iRc = GetKeyPtr( vpTag, (ulNoOfKeys-1), mpTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
- if(( iRc = dbf->GetRecord( ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 160;
- throw iRc;
- }
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::GetLastKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/***********************************************************************/
-//! @brief Get the last key for a block number.
-/*!
- \param vpTag Tag to retrieve first key on.
- \param ulBlockNo Block number for key retrieval.
- \param cpBuf output buffer for key placement
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbIxMdx::GetLastKeyForBlockNo( void *vpTag, xbUInt32 ulBlockNo, char *cpBuf ){
-
- // returns the last key for a given block number
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
-
- xbMdxTag * npTag = (xbMdxTag *) vpTag;
-
- try{
- xbIxNode * npSaveNodeChain = npTag->npNodeChain;
- xbIxNode * npSaveCurNode = npTag->npCurNode;
- npTag->npNodeChain = NULL;
-
- if(( iRc = GetLastKey( ulBlockNo, npTag, 0 )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- memcpy( cpBuf, GetKeyData( npTag->npCurNode, GetKeyCount( npTag->npCurNode ) - 1, npTag->iKeyItemLen ), (size_t) npTag->iKeyLen );
-
- // free memory
- FreeNodeChain( npTag->npNodeChain );
- npTag->npNodeChain = npSaveNodeChain;
- npTag->npCurNode = npSaveCurNode;
-
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::GetLastKeyForBlockNo() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ) );
- }
- return iRc;
-}
-/***********************************************************************/
-//! @brief Get the next key for the given tag.
-/*!
- \param vpTag Tag to retrieve next key on.
- \param iRetrieveSw xbTrue - Retrieve the record on success.<br>
- xbFalse - Don't retrieve record.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbIxMdx::GetNextKey( void * vpTag, xbInt16 iRetrieveSw ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
-
- // convert the tag pointer to mdx tag pointer
- xbMdxTag * mpTag = (xbMdxTag *) vpTag;
-
- try{
- if( !mpTag->npCurNode )
- return GetFirstKey( vpTag, iRetrieveSw );
-
- // more keys on this node?
- xbUInt32 ulKeyPtr;
- if( (eGetUInt32( mpTag->npCurNode->cpBlockData ) - 1) > mpTag->npCurNode->iCurKeyNo ){
- mpTag->npCurNode->iCurKeyNo++;
-
- if(( iRc = GetKeyPtr( vpTag, mpTag->npCurNode->iCurKeyNo, mpTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- if( iRetrieveSw ){
- if(( iRc = dbf->GetRecord( ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- } else {
- return iRc;
- }
- } else {
- return iRc;
- }
- }
-
- // if at end head node, then at eof
- if( mpTag->npCurNode->ulBlockNo == ( mpTag->ulRootPage / (xbUInt32) iBlockFactor ))
- return XB_EOF;
-
- // This logic assumes that interior nodes have n+1 left node no's where n is the number of keys in the node
- xbIxNode * TempIxNode = mpTag->npCurNode;
- mpTag->npCurNode = mpTag->npCurNode->npPrev;
- TempIxNode = FreeNodeChain( TempIxNode );
-
- // While no more right keys && not head node, pop up one node
- while( mpTag->npCurNode->iCurKeyNo >= eGetUInt32( mpTag->npCurNode->cpBlockData ) &&
- mpTag->npCurNode->ulBlockNo != ( mpTag->ulRootPage / (xbUInt32) iBlockFactor) ){
-
- TempIxNode = mpTag->npCurNode;
- mpTag->npCurNode = mpTag->npCurNode->npPrev;
- TempIxNode = FreeNodeChain( TempIxNode );
- }
-
- // if head node && right most key, return eof
- if( mpTag->npCurNode->ulBlockNo == (mpTag->ulRootPage / (xbUInt32) iBlockFactor) &&
- mpTag->npCurNode->iCurKeyNo == eGetUInt32( mpTag->npCurNode->cpBlockData ))
- return XB_EOF;
-
- // move one to the right
- mpTag->npCurNode->iCurKeyNo++;
- if(( iRc = GetKeyPtr( vpTag, mpTag->npCurNode->iCurKeyNo, mpTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
-
- if(( iRc = GetBlock( vpTag, (ulKeyPtr / (xbUInt32) iBlockFactor), 1 )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
-
- // traverse down the left side of the tree
- while( !IsLeaf( vpTag, mpTag->npCurNode )) // go down the chain looking for a leaf node
- {
- if(( iRc = GetKeyPtr( vpTag, 0, mpTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
- if(( iRc = GetBlock( vpTag, (ulKeyPtr / (xbUInt32) iBlockFactor), 1 )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
- }
- // retrieve record to data buf
- if( iRetrieveSw ){
- if(( iRc = GetKeyPtr( vpTag, 0, mpTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 160;
- throw iRc;
- }
- if(( iRc = dbf->GetRecord( ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 170;
- throw iRc;
- }
- } else {
- return iRc;
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::GetNextKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/***********************************************************************/
-//! @brief Get the previous key for the given tag.
-/*!
- \param vpTag Tag to retrieve previous key on.
- \param iRetrieveSw xbTrue - Retrieve the record on success.<br>
- xbFalse - Don't retrieve record.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbIxMdx::GetPrevKey( void * vpTag, xbInt16 iRetrieveSw ){
-
- xbString s;
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
-
- // convert the tag pointer to mdx tag pointer
- xbMdxTag * mpTag = (xbMdxTag *) vpTag;
-
- try{
- if( !mpTag->npCurNode ){
- return GetLastKey( 0, vpTag, iRetrieveSw );
- }
-
- xbUInt32 ulKeyPtr = 0;
- // more keys on this assumed-leaf node?
-
- if( mpTag->npCurNode->iCurKeyNo > 0 ){
- mpTag->npCurNode->iCurKeyNo--;
-
- if(( iRc = GetKeyPtr( vpTag, mpTag->npCurNode->iCurKeyNo, mpTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
-
- if( iRetrieveSw ){
- if(( iRc = dbf->GetRecord( ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- } else {
- return iRc;
- }
- } else {
- return iRc;
- }
- }
-
- //if head node = start node, at eof
- if( mpTag->npCurNode->ulBlockNo == ( mpTag->ulRootPage / (xbUInt32) iBlockFactor ))
- return XB_BOF;
-
- // This logic assumes that interior nodes have n+1 left node no's where n is the number of keys in the node
- xbIxNode * TempIxNode = mpTag->npCurNode;
- mpTag->npCurNode = mpTag->npCurNode->npPrev;
- TempIxNode = FreeNodeChain( TempIxNode );
-
- // While no more left keys && not head node, pop up one node
- while( mpTag->npCurNode->iCurKeyNo == 0 &&
- mpTag->npCurNode->ulBlockNo != ( mpTag->ulRootPage / (xbUInt32) iBlockFactor) ){
- TempIxNode = mpTag->npCurNode;
- mpTag->npCurNode = mpTag->npCurNode->npPrev;
- TempIxNode = FreeNodeChain( TempIxNode );
- }
-
- //if head node && left most key, return bof
- if( mpTag->npCurNode->ulBlockNo == ( mpTag->ulRootPage / (xbUInt32) iBlockFactor) && mpTag->npCurNode->iCurKeyNo == 0 )
- return XB_BOF;
-
- // move one to the left
- mpTag->npCurNode->iCurKeyNo--;
- if(( iRc = GetKeyPtr( vpTag, mpTag->npCurNode->iCurKeyNo, mpTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
-
- if(( iRc = GetBlock( vpTag, (ulKeyPtr / (xbUInt32) iBlockFactor), 1 )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
-
- // traverse down the right side of the tree
- xbUInt32 ulNoOfKeys;
- while( !IsLeaf( vpTag, mpTag->npCurNode )) // go down the chain looking for a leaf node
- {
- ulNoOfKeys = eGetUInt32( mpTag->npCurNode->cpBlockData );
- mpTag->npCurNode->iCurKeyNo = ulNoOfKeys;
-
- if(( iRc = GetKeyPtr( vpTag, ulNoOfKeys, mpTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
- if(( iRc = GetBlock( vpTag, (ulKeyPtr / (xbUInt32) iBlockFactor), 1 )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
- }
-
- // ulNoOfKeys = eGetUInt32( mpTag->npCurNode->cpBlockData );
- mpTag->npCurNode->iCurKeyNo = eGetUInt32( mpTag->npCurNode->cpBlockData ) - 1;
-
- // retrieve record to data buf
- if( iRetrieveSw ){
- if(( iRc = GetKeyPtr( vpTag, mpTag->npCurNode->iCurKeyNo, mpTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 160;
- throw iRc;
- }
- if(( iRc = dbf->GetRecord( ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 170;
- throw iRc;
- }
- } else {
- return iRc;
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::GetPrevKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/***********************************************************************/
-//! @brief GetReuseEmptyNode swuitch setting.
-/*!
- \returns xbFalse - Do not reuse empty MDX index nodes (Dbase 6. behavior).
- xbTrue - Reuse empty MDX index nodes.
-*/
-
-xbBool xbIxMdx::GetReuseEmptyNodesSw() const {
- return bReuseEmptyNodes;
-}
-/***********************************************************************/
-xbBool xbIxMdx::GetSortOrder( void *vpTag ) const {
-
- // return true if descending
- xbMdxTag *mTag = (xbMdxTag *) vpTag;
- if( mTag->cKeyFmt2 & 0x08 )
- return 0x01;
- else
- return 0x00;
-}
-
-/***********************************************************************/
-//! @brief Get tag for tag number.
-/*!
- \param iTagNo - Zero based, which tag to retrieve.
- \returns Pointer to mdx tag for a given tag number.
-*/
-
-void * xbIxMdx::GetTag( xbInt16 iTagNo ) const {
-
- xbMdxTag *tt = mdxTagTbl;
- xbInt16 i = 0;
-
- while( i < iTagNo && tt->next ){
- tt = tt->next;
- i++;
- }
- if( i == iTagNo )
- return (void *) tt;
- else
- return NULL;
-}
-
-/***********************************************************************/
-//! @brief Get tag for tag name.
-/*!
- \sTagName - Tag name to retrieve.
- \returns Pointer to mdx tag for a given tag number.
-*/
-
-void * xbIxMdx::GetTag( xbString &sTagName ) const {
-
- xbMdxTag *tt = mdxTagTbl;
-
- while( sTagName != tt->cTagName && tt->next ){
- tt = tt->next;
- }
-
- if( sTagName == tt->cTagName )
- return (void *) tt;
- else
- return NULL;
-}
-/***********************************************************************/
-xbInt16 xbIxMdx::GetTagCount() const {
- return iTagUseCnt;
-}
-
-/***********************************************************************/
-void xbIxMdx::GetTagName( void *vpTag, xbString &sTagName ){
-
- xbMdxTag *mpTag = (xbMdxTag *) vpTag;
- sTagName = mpTag->sTagName->Str();
-}
-
-/***********************************************************************/
-//const char *xbIxMdx::GetTagName( void *vpTag, xbInt16 iOpt ) const {
-
-const char *xbIxMdx::GetTagName( void *vpTag, xbInt16 ) const {
- xbMdxTag *mpTag = (xbMdxTag *) vpTag;
- return mpTag->cTagName;
-}
-
-/***********************************************************************/
-xbString &xbIxMdx::GetTagName( void *vpTag ) const {
-
- xbMdxTag *mpTag = (xbMdxTag *) vpTag;
- return *mpTag->sTagName;
-}
-
-/***********************************************************************/
-void *xbIxMdx::GetTagTblPtr() const {
- return (void *) mdxTagTbl;
-}
-
-/***********************************************************************/
-xbBool xbIxMdx::GetUnique( void *vpTag ) const {
-//! @brief Determine unique setting for given tag.
-/*!
- \param vpTag Tag to retrieve expression from.
- \returns xbTrue if unique key.
-*/
- xbMdxTag *mTag = (xbMdxTag *) vpTag;
- return mTag->cUnique;
-}
-
-/***********************************************************************/
-//! @brief Harvest Empty Node.
-/*!
- Harvest empty MDX node and add it to the chain of link nodes
-
- \param mpTag Tag to harvest.
- \param iOpt - 0 Don't write the node info to disk, handled elsewhere (don't write it twice)
- 1 Write the update into to disk
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbIxMdx::HarvestEmptyNode( xbMdxTag *mpTag, xbIxNode *npNode, xbInt16 iOpt, xbBool bHarvestRoot ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbBool bRootPage = xbFalse;
- xbInt32 iOffset = 0;
-
- try{
-
-// std::cout << "xbIxMdx::HarvestEmptyNode() page= " << BlockToPage( npNode->ulBlockNo );
-// std::cout << " block = " << npNode->ulBlockNo << "\n";
-
- if( mpTag->ulRootPage == BlockToPage( npNode->ulBlockNo ) && !bHarvestRoot ){
- bRootPage = xbTrue;
-
-// std::cout << "special root page processing *****************\n";
- }
-
- memset( npNode->cpBlockData, 0x00, GetBlockSize());
-
- char *pTrg = npNode->cpBlockData;
- if( !bRootPage ){
- pTrg += 4;
- ePutUInt32( pTrg, ulFirstFreePage );
- }
-
-
- if( bRootPage ){
- if( mpTag->cHasKeys ){
-
- // std::cout << "setting has keys\n";
-
- mpTag->cHasKeys = 0x00;
- if(( iRc = xbFseek( ((mpTag->ulTagHdrPageNo * 512) + 246), SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- if(( iRc = xbFwrite( &mpTag->cHasKeys, 1, 1 )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- // might need to update left sibling and right sibling here.
- // Fields don't seem to be updated consistently by other xbase tools,
- // for now, not updating
-
- }
-
- } else {
-
- // update header
- // seek to position byte 13
- ulFirstFreePage = BlockToPage( npNode->ulBlockNo );
- if(( iRc = xbFseek( 36, SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- // write it
- char c4[4];
- ePutUInt32( c4, ulFirstFreePage );
- if(( iRc = xbFwrite( c4, 4, 1 )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
-
- }
-
- if( iOpt == 1 ){
- if(( iRc = xbFseek( (xbInt64) ((npNode->ulBlockNo * GetBlockSize() )) + iOffset, SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
- // write out the block
- if(( iRc = xbFwrite( npNode->cpBlockData, GetBlockSize(), 1 )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
- }
- }
-
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::HarvestEmptyNodeI() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-
-
-/***********************************************************************/
-//! @brief Harvest Tag Nodes.
-/*!
- Save all nodes for a given tag into the free node chain.
- Used for reindexing or deleting a given tag.
-
- \param mpTag Tag for harvesting nodes
- \param bHarvestRoot Set to True when deleting tag
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbIxMdx::HarvestTagNodes( xbMdxTag *mpTag, xbBool bHarvestRoot ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
-
- xbUInt32 ulBlkNo;
- xbLinkListOrd<xbUInt32> ll;
- xbLinkListNode<xbUInt32> * llN;
- xbIxNode * n;
-
- try{
-
- ll.SetDupKeys( xbFalse );
-
- // clear out any history
- if( mpTag->npNodeChain ){
- mpTag->npNodeChain = FreeNodeChain( mpTag->npNodeChain );
- mpTag->npCurNode = NULL;
- }
-
- while( GetNextKey( mpTag, 0 ) == 0 ){
- n = mpTag->npNodeChain;
- while(n){
- ll.InsertKey( n->ulBlockNo, (xbUInt32) n->iCurKeyNo );
- n = n->npNext;
- }
- }
-
- if( bHarvestRoot )
- ll.InsertKey( PageToBlock( mpTag->ulTagHdrPageNo ), 0 );
-
- llN = ll.GetHeadNode();
- if(( n = xbIx::AllocateIxNode( GetBlockSize())) == NULL ){
- iErrorStop = 100;
- iRc = XB_NO_MEMORY;
- throw iRc;
- }
-
- while( llN ){
- ulBlkNo = llN->GetKey();
-
- // read in a block for the block number
- if(( iRc = ReadBlock( ulBlkNo, GetBlockSize(), n->cpBlockData )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- // harvest it
- n->ulBlockNo = ulBlkNo;
- if(( iRc = HarvestEmptyNode( mpTag, n, 1, bHarvestRoot )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- llN = llN->GetNextNode();
- }
- n = FreeNodeChain( n );
- mpTag->npNodeChain = FreeNodeChain( mpTag->npNodeChain );
- mpTag->npCurNode = NULL;
-
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::HarvestTagNodes() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/***********************************************************************/
-//! @brief Insert key into interior node.
-/*!
- Insert key into non-full interior node.<br>
- Assumes valid inputs
-
- \param vpTag Tag in play.
- \param npNode Node for insertion.
- \param iSlotNo Slot number to insert key.
- \param ulPtr Page number to insert.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbIxMdx::InsertNodeI( void *vpTag, xbIxNode *npNode, xbInt16 iSlotNo, xbUInt32 ulPtr ){
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- char *pNewKeyPos;
- char *pTrg;
- char *pLastKey = NULL;
- xbMdxTag * npTag;
- npTag = (xbMdxTag *) vpTag;
- xbInt16 iCopyLen;
- xbInt16 iNewKeyPos = 8;
-
-
- try{
-
- xbInt32 lKeyCnt = GetKeyCount( npNode );
- iNewKeyPos += (iSlotNo * npTag->iKeyItemLen);
- char *pSrc = npNode->cpBlockData;
-
- if( iSlotNo < lKeyCnt )
- iCopyLen = ((lKeyCnt - iSlotNo) * npTag->iKeyItemLen) + 4;
- else
- iCopyLen = 0;
-
- xbUInt32 ulRqdBufSize = (xbUInt32) ((lKeyCnt + 1) * npTag->iKeyItemLen) + 12;
- if( ulRqdBufSize > npNode->ulBufSize ){
- npNode->ulBufSize += (xbUInt32) npTag->iKeyItemLen;
- npNode->cpBlockData = (char *) realloc( npNode->cpBlockData, (size_t) npNode->ulBufSize );
- if( !npNode->cpBlockData ){
- iErrorStop = 100;
- iRc = XB_NO_MEMORY;
- throw iRc;
- }
- }
-
- // if not appending to the end of the node, make some room, move things to the right
- pNewKeyPos = npNode->cpBlockData;
- pNewKeyPos += iNewKeyPos;
-
- if( iSlotNo < lKeyCnt ){
- pTrg = pNewKeyPos;
- pTrg += npTag->iKeyItemLen;
- memmove( pTrg, pNewKeyPos, (size_t) iCopyLen );
- }
-
- // get the right most key for the left part of the split node
- xbUInt32 ulKeyPtr2;
- if(( iRc = GetKeyPtr( vpTag, npNode->iCurKeyNo, npNode, ulKeyPtr2 )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
-
- // get the new right key value for the freshly split node
- pLastKey = (char *) malloc((size_t) npTag->iKeyLen);
- if(( iRc = GetLastKeyForBlockNo( vpTag, PageToBlock( ulKeyPtr2 ), pLastKey )) != XB_NO_ERROR ){
- iRc = 120;
- throw iRc;
- }
-
- // write the key values
- pTrg = pNewKeyPos;
- pTrg += 4;
- pSrc = pLastKey;
- for( xbInt16 i = 0; i < npTag->iKeyLen; i++ )
- *pTrg++ = *pSrc++;
-
- pTrg = pNewKeyPos;
- //pTrg+= npTag->iKeyItemLen - 4;
- pTrg+= npTag->iKeyItemLen;
-
- ePutUInt32( pTrg, ulPtr);
- ePutInt32( npNode->cpBlockData, ++lKeyCnt );
-
- // write out the updated block to disk
- if(( iRc = WriteBlock( npNode->ulBlockNo, GetBlockSize(), npNode->cpBlockData )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- if( pLastKey )
- free( pLastKey );
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::InsertNodeI() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- if( pLastKey )
- free( pLastKey );
- }
- return iRc;
-}
-
-/***********************************************************************/
-//! @brief Insert key into leaf node.
-/*!
- Insert key into non-full leaf node.<br>
- Assumes valid inputs
-
- \param vpTag Tag in play.
- \param npNode Node for insertion.
- \param iSlotNo Slot number to insert key.
- \param ulPtr Pointer number to insert.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbIxMdx::InsertNodeL( void *vpTag, xbIxNode *npNode, xbInt16 iSlotNo, char * cpKeyBuf, xbUInt32 ulPtr ){
-
- // format of block data is
- // 4 bytes number of keys on block
- // 4 bytes - next free block or split block num
- // repeating
- // 4 bytes record number
- // x bytes key data
-
- // Special processing note: when splitting node, new key is first inserted into full left node before
- // the node is split. This routine will make additional room in the buffer for that scenario
-
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- char *pNewKeyPos; // pointer to position in record for new key composite
- char *pTrg;
-
- xbInt16 iNewKeyPos = 8; // position in data block where new key begins.
- // is the position of the record number, where the fmt is
- // [four byte rec number][actual key data] repeats
-
- xbMdxTag * npTag = (xbMdxTag *) vpTag;
- xbInt16 iCopyLen;
-
- try{
- xbInt32 lKeyCnt = GetKeyCount( npNode );
-
-// std::cout << "InsertNodeL Keycount = " << lKeyCnt << "\n";
-// next line is correct, this aligns with db7
-// "4" is the four byte record number stored to the left of the key
-// xbInt16 iKeyPos = 4 + iSlotNo * npTag->iKeyItemLen;
-
- iNewKeyPos += (iSlotNo * npTag->iKeyItemLen);
-
- // length of number of keys that need to be moved to the right
- if( iSlotNo < lKeyCnt )
- iCopyLen = (lKeyCnt - iSlotNo) * npTag->iKeyItemLen;
- else
- iCopyLen = 0;
-
- // +8 is to include the first two 4 byte fields in the block
- // xbUInt32 ulRqdBufSize = (xbUInt32) (iKeyPos + (npTag->iKeyItemLen * 2) + iCopyLen + 8);
- xbUInt32 ulRqdBufSize = (xbUInt32) ((lKeyCnt + 1) * npTag->iKeyItemLen) + 8;
-
-/*
- std::cout << "InsertNodeL CopyLen = " << iCopyLen << "\n";
- std::cout << "InsertNodeL iNewKeyPos = " << iNewKeyPos << "\n";
- std::cout << "InsertNodeL SlotNo = " << iSlotNo << "\n";
- std::cout << "InsertNodeL lKeyCnt = " << lKeyCnt << "\n";
- std::cout << "InsertNodeL node buf size = " << npNode->ulBufSize << "\n";
- std::cout << "InsertNodeL key item len = " << npTag->iKeyItemLen << "\n";
- std::cout << "InsertNodeL key len = " << npTag->iKeyLen << "\n";
- std::cout << "required buf size = " << ulRqdBufSize << "\n";
- std::cout << "InsertNodeL key buf strlen = " << strlen( npTag->cpKeyBuf ) << "\n";
-*/
-
- if( ulRqdBufSize > npNode->ulBufSize ){
- npNode->ulBufSize += (xbUInt32) npTag->iKeyItemLen;
- npNode->cpBlockData = (char *) realloc( npNode->cpBlockData, (size_t) npNode->ulBufSize );
- if( !npNode->cpBlockData ){
- iErrorStop = 100;
- iRc = XB_NO_MEMORY;
- throw iRc;
- }
- }
-
- // if not appending to end, move things right
-
- pNewKeyPos = npNode->cpBlockData;
- pNewKeyPos += iNewKeyPos;
-
- if( iSlotNo < lKeyCnt ) {
- // pKeyPos = npNode->cpBlockData;
- // pKeyPos += iKeyPos;
- // pKeyPos += iNewKeyPos;
- // pTrg = pKeyPos;
- pTrg = pNewKeyPos;
- pTrg += npTag->iKeyItemLen;
- memmove( pTrg, pNewKeyPos, (size_t) iCopyLen );
-
- }
-
- // write rec number
- ePutUInt32( pNewKeyPos, ulPtr );
-
- // write the key value
- pTrg = pNewKeyPos;
- pTrg += 4;
- char * pSrc = cpKeyBuf;
- for( xbInt16 i = 0; i < npTag->iKeyLen; i++ )
- *pTrg++ = *pSrc++;
-
- // update number of keys on the node
- ePutInt32( npNode->cpBlockData, ++lKeyCnt );
-// std::cout << "lKeyCntA = " << GetKeyCount( npNode ) << "\n";
-
-
- // determine length of node, zap everything to the right of it
- xbUInt32 iStartPos = 8 + ((xbUInt32) lKeyCnt * (xbUInt32) npTag->iKeyItemLen );
- xbUInt32 iClearLen = npNode->ulBufSize - iStartPos;
-
-// std::cout << "InsertNodeL SP = " << iStartPos << " clear len = " << iClearLen << " ulBufsize = " << npNode->ulBufSize << "\n";
- char *p = npNode->cpBlockData;
- p += iStartPos;
- memset( p, 0x00, iClearLen );
-
- // write out the updated block to disk
- if(( iRc = WriteBlock( npNode->ulBlockNo, GetBlockSize(), npNode->cpBlockData )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
-
-// std::cout << "lKeyCntB = " << GetKeyCount( npNode ) << "\n";
-
-
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::InsertNodeL() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-/***********************************************************************/
-inline xbBool xbIxMdx::IsLeaf( void *vpTag, xbIxNode *npNode ) const{
-
- // for performance reasons, does no data checking
- // will result in potentially hard to find segfaults if passing invalid npNode
-
- xbMdxTag *mTag = (xbMdxTag *) vpTag;
- char *p = npNode->cpBlockData;
-
- xbInt32 lNoOfKeys = eGetInt32( p );
- // mdx interior nodes have a sibling number to the right of the right most key in the node
- p+=8;
- p+= mTag->iKeyItemLen * lNoOfKeys;
-
- // printf( "IsLeaf p = [%d] b1 = [%x] keylen = [%d]\n", eGetUInt32( p ), *p, mTag->iKeyItemLen );
-
- if( eGetUInt32( p ) == 0 ){
- // std::cout << "leaf node\n";
- return true;
- } else {
- // std::cout << "interior node\n";
- return false;
- }
-}
-
-/***********************************************************************/
-xbInt16 xbIxMdx::KeyExists( void * vpTag )
-{
- // this method assumes the key has already been built
-
- xbMdxTag *mpTag = (xbMdxTag *) vpTag;
- xbInt16 iRc = FindKey( vpTag, mpTag->cpKeyBuf, mpTag->iKeyLen, 0 );
-
- // iRc == 0 ? return 1 : return 0;
-
- if( iRc == 0 )
- return 1;
- else
- return 0;
-
-}
-
-/***********************************************************************/
-//! @brief Set position for key add.
-/*!
- This routine is called by the AddKey() method and is used to position
- the node chain to the position the new key should be added to the index.
-
- \param npTag Pointer to npTag.
- \param ulAddRecNo Record number to add.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbIxMdx::KeySetPosAdd( xbMdxTag *mpTag, xbUInt32 ulAddRecNo ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- try{
-
- iRc = FindKey( mpTag, mpTag->cpKeyBuf, mpTag->iKeyLen, 0 );
- if( iRc == XB_NOT_FOUND || iRc == XB_EMPTY )
- return XB_NO_ERROR; // good position
- else if( iRc != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- // get here if key was found, get the right most instance of any non unique key for append, find correct spot for update
- if( GetUnique( mpTag ) == 0 ){
-
- xbUInt32 ulCurRecNo;
- if(( iRc = GetDbfPtr( mpTag, mpTag->npCurNode->iCurKeyNo, mpTag->npCurNode, ulCurRecNo )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- xbBool bKeysMatch = xbTrue;
-
- while( bKeysMatch && ulAddRecNo > ulCurRecNo && iRc == XB_NO_ERROR ){
- if(( iRc = GetNextKey( mpTag, 0 )) == XB_NO_ERROR ){
- if( memcmp( GetKeyData( mpTag->npCurNode, mpTag->npCurNode->iCurKeyNo, mpTag->iKeyItemLen ), mpTag->cpKeyBuf, (size_t) mpTag->iKeyLen ))
- bKeysMatch = xbFalse;
- else{
- if(( iRc = GetDbfPtr( mpTag, mpTag->npCurNode->iCurKeyNo, mpTag->npCurNode, ulCurRecNo )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- }
- }
- }
- }
- if( iRc == XB_EOF ){ // eof condition
- if(( iRc = GetLastKey( 0, mpTag, 0 )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- mpTag->npCurNode->iCurKeyNo++;
- return XB_NO_ERROR;
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::KeySetPosAdd() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/***********************************************************************/
-//! @brief Set position for key delete.
-/*!
- This routine is called by the DeleteKey() method and is used to position
- the node chain to the position the old key should be deleted from the index.
-
- \param npTag Pointer to npTag.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbIxMdx::KeySetPosDel( xbMdxTag *npTag ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbString sMsg;
-
- try{
-
- iRc = FindKey( npTag, npTag->cpKeyBuf2, npTag->iKeyLen, 0 );
- if( iRc == XB_NOT_FOUND || iRc == XB_EMPTY )
- return XB_NO_ERROR; // good pos ition
- else if( iRc != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
-
- xbUInt32 ulIxRecNo;
- if(( iRc = GetDbfPtr( npTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulIxRecNo )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
-
- if( ulIxRecNo == dbf->GetCurRecNo())
- return XB_NO_ERROR;
-
- if( GetUnique( npTag ) == 1 ){
- iErrorStop = 120;
- iRc = XB_NOT_FOUND;
- throw iRc;
- }
-
- xbBool bFound = xbFalse;
- xbBool bKeysMatch = xbTrue;
- while( bKeysMatch && !bFound && iRc == XB_NO_ERROR ){
-
- if(( iRc = GetNextKey( npTag, 0 )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- if( memcmp( GetKeyData( npTag->npCurNode, npTag->npCurNode->iCurKeyNo, npTag->iKeyItemLen ), npTag->cpKeyBuf2, (size_t) npTag->iKeyLen )){
- bKeysMatch = xbFalse;
- } else {
- if(( iRc = GetDbfPtr( npTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulIxRecNo )) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
- if( ulIxRecNo == dbf->GetCurRecNo())
- bFound = xbTrue;
- }
- }
-
- if( bFound )
- return XB_NO_ERROR;
- else
- return XB_NOT_FOUND;
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::KeySetPosDel() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/***********************************************************************/
-//! @brief Returns key update status.
-/*!
- \param vpTag Tag to check status on.
- \returns xbtrue - Key was updated.<br>xbFalse - Key not updated.
-*/
-/*
-inline xbBool xbIxMdx::KeyFiltered( void *vpTag ) const{
-
- xbMdxTag *mpTag = (xbMdxTag *) vpTag;
- return mpTag->bKeyFiltered;
-}
-*/
-/***********************************************************************/
-xbInt16 xbIxMdx::LoadTagDetail( xbInt16 iOption, xbMdxTag *tte ){
-
- // option 1 - Load the entire tag detail
- // option 2 - Load the dynamic variables only
-
- // std::cout << "LoadTagDetail() iOption = " << iOption << "\n";
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- size_t iReadSize;
- char *buf = NULL;
- char *p;
-
- try{
- // set the read length based on the option
- if( iOption == 1 )
- iReadSize = 1024;
-
- else if( iOption == 2 )
- // iReadSize = 4;
- iReadSize = 260;
- else{
- iRc = XB_INVALID_OPTION;
- iErrorStop = 100;
- throw iRc;
- }
- if(( buf = (char *) calloc( 1, (size_t) iReadSize )) == NULL ){
- iErrorStop = 110;
- iRc = XB_NO_MEMORY;
- throw iRc;
- }
- if(( iRc = ReadBlock( tte->ulTagHdrPageNo,(xbUInt32) (GetBlockSize() / (xbUInt16) iBlockFactor),
- iReadSize, buf )) != XB_NO_ERROR ){
- free( buf );
- iErrorStop = 30;
- throw iRc;
- }
-
- p = buf;
- tte->ulRootPage = eGetUInt32( p );
-
- if( iOption == 1 ){
- p+=4;
- tte->ulTagSize = eGetUInt32( p );
- p+=4;
- tte->cKeyFmt2 = *p;
- p++;
- tte->cKeyType2 = *p;
- p+=3;
- tte->iKeyLen = eGetInt16( p );
- p+=2;
- tte->iKeysPerBlock = *p;
- p+=2;
- tte->iSecKeyType = eGetInt16( p );
- p+=2;
- tte->iKeyItemLen = eGetInt16( p );
- p+=2;
- tte->cSerialNo = *p;
- p+=3;
- tte->cUnique = *p;
- p++;
-
- // next line assumes expression is a null terminated string in the block
- tte->sKeyExp = new xbString();
- tte->sKeyExp->Sprintf( "%s", p );
-
- p+=221;
- tte->cHasFilter = *p;
- p+=1;
- tte->cHasKeys = *p;
- p+=2;
- tte->ulLeftChild = eGetUInt32( p );
- p+=4;
- tte->ulRightChild = eGetUInt32( p );
- p+=5;
- tte->cTagYY = *p;
- p++;
- tte->cTagMM = *p;
- p++;
- tte->cTagDD = *p;
- // p+=223;
-
- p+=221;
- tte->cKeyFmt3 = *p;
-
-//for( int i = 0; i < 5; i++ )
-// printf( "%d [%x]\n", i, *p++ );
-// p+=2;
-
- if( tte->cHasFilter ){
- p+=282;
- tte->sFiltExp = new xbString();
- tte->sFiltExp->Sprintf( "%s", p );
- tte->filter = new xbExp( xbase, dbf );
- if(( iRc = tte->filter->ParseExpression( tte->sFiltExp->Str())) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- }
- tte->npNodeChain = NULL;
- tte->npCurNode = NULL;
- tte->cpKeyBuf = (char *) malloc( (size_t) tte->iKeyLen + 1 );
- tte->cpKeyBuf2 = (char *) malloc( (size_t) tte->iKeyLen + 1 );
- tte->exp = new xbExp( xbase, dbf );
- if(( iRc = tte->exp->ParseExpression( tte->sKeyExp->Str() )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- } else if( iOption == 2 ){
- // refresh the dynamic tag variables
- p+=4;
- tte->ulTagSize = eGetUInt32( p );
- p+= 16;
- tte->cSerialNo = *p;
- p+= 226;
- tte->cHasKeys = *p;
- p+=2;
- tte->ulLeftChild = eGetUInt32( p );
- p+=4;
- tte->ulRightChild = eGetUInt32( p );
- p+=5;
- tte->cTagYY = *p;
- p++;
- tte->cTagMM = *p;
- p++;
- tte->cTagDD = *p;
- }
- if( buf )
- free( buf );
-
- }
- catch (xbInt16 iRc ){
- if( buf )
- free( buf );
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::LoadTagDetail() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/***********************************************************************/
-xbInt16 xbIxMdx::LoadTagTable()
-{
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- char * buf = NULL;
-
- //std::cout << "xbIxMdx::LoadTagTable() tag use cnt = " << iTagUseCnt << "\n";
-
- try{
-
- if( iTagUseCnt > 46 ){
- iErrorStop = 100;
- iRc = XB_INVALID_INDEX;
- throw iRc;
- }
-
- xbInt16 iBufSize = (xbInt16) iTagLen * iTagUseCnt;
-
- if(( buf = (char *) malloc( (size_t) iBufSize )) == NULL ){
- iErrorStop = 110;
- iRc = XB_NO_MEMORY;
- throw iRc;
- }
-
- if(( iRc = xbFseek( 544, SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
-
- if(( iRc = xbFread( buf, (size_t) iBufSize, 1 )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
-
- xbInt16 iPos;
- char *p;
- xbMdxTag *tte;
- xbMdxTag *ttel = NULL;
-
- for( xbInt16 i = 0; i < iTagUseCnt; i++ ){
- iPos = i * iTagLen;
- p = buf + iPos;
-
- if(( tte = (xbMdxTag *) calloc( 1, (size_t) sizeof( xbMdxTag ))) == NULL ){
- iErrorStop = 140;
- iRc = XB_NO_MEMORY;
- throw iRc;
- }
-
- // set the current tag to the first tag in the table
- if( !vpCurTag )
- xbIx::SetCurTag( (void *) tte );
-
- if( mdxTagTbl )
- ttel->next = tte;
- else
- mdxTagTbl = tte;
- // tte->sKeyExp = new xbString();
-
- ttel = tte;
- tte->next = NULL;
- tte->ulTagHdrPageNo = eGetUInt32( p );
-
- p += 4;
- for( xbUInt32 i = 0; i < 11; i ++ )
- tte->cTagName[i] = *p++;
-
- tte->cTagName[11] = 0x00;
- tte->cKeyFmt = *p++;
- tte->cLeftChild = *p++;
- tte->cRightChild = *p++;
- tte->cParent = *p++;
- tte->c2 = *p++;
- tte->cKeyType = *p;
- tte->sTagName = new xbString();
- tte->sTagName->Set( tte->cTagName );
- tte->sTagName->Trim();
-
- if(( iRc = LoadTagDetail( 1, tte )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
- }
- if( buf )
- free( buf );
- }
- catch (xbInt16 iRc ){
- if( buf )
- free( buf );
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::LoadTagTable() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- if( iErrorStop == 100 ){
- sMsg.Sprintf( "xbIxMdx::LoadTagTable() Invalid Tag Count: %d", iTagUseCnt );
- xbase->WriteLogMessage( sMsg.Str());
- }
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/**************************************************************************************************************/
-//! @brief Calculate the block number for a given page.
-/*!
- This routine is called by any function needing to calculate the block number for a given page.
- Page numbers are stored internally in the physical file, and the library reads and writes in
- blocks of one or more pages.
-
- Assumes valid data input
-
- \param ulPageNo Page Number
- \returns Calculated block number.
-*/
-
-inline xbUInt32 xbIxMdx::PageToBlock( xbUInt32 ulPageNo ){
- return ulPageNo / (xbUInt32) iBlockFactor;
-}
-
-
-
-/**************************************************************************************************************/
-#ifdef XB_DEBUG_SUPPORT
-xbInt16 xbIxMdx::PrintKey( void *vpTag, xbIxNode *npNode, xbInt16 iKeyNo, xbInt16 iDepth, char cType, xbInt16 iOutputOpt ){
-
- xbString sPre;
- sPre.Sprintf( "%c ", cType );
- for( xbInt16 i = 0; i < iDepth; i++ )
- sPre += "|";
-
- xbString sPost;
- sPost.Sprintf( "\tThisBlock=[%ld] KeyNo=[%d] Depth=[%d]", npNode->ulBlockNo, iKeyNo, iDepth );
-
- xbMdxTag * mpTag = (xbMdxTag *) vpTag;
- char *p = npNode->cpBlockData + (8 + (iKeyNo * mpTag->iKeyItemLen ));
-
- xbString sKeyPtr;
- xbUInt32 ulNoOfKeys = 0;
- if( cType == 'I' ) { // interior
- sKeyPtr.Sprintf( " ptr=[%ld]", eGetUInt32( p ));
- ulNoOfKeys = eGetUInt32( mpTag->npCurNode->cpBlockData );
- }
- else if( cType == 'L' ) // leaf
- sKeyPtr.Sprintf( " rec=[%ld]", eGetUInt32( p ));
- p += 4;
-
- xbString s;
- if(( cType == 'I' && iKeyNo < (xbInt16) ulNoOfKeys) || cType == 'L' ){
- if( mpTag->cKeyType2 == 'C' ){ //CHAR
- for( xbInt32 l = 0; l < (mpTag->iKeyItemLen-4); l++ )
- s += *p++;
-
- } else if( mpTag->cKeyType2 == 'N' ){ // NUMERIC
- xbBcd bcd( p );
- xbString s2;
- bcd.ToString( s2 );
- s += s2;
-
- } else if( mpTag->cKeyType2 == 'D' ){ // DATE
- xbInt32 lDate = (xbInt32) eGetDouble( p );
- xbDate d( lDate );
- //xbString s2;
- //d.JulToDate8( lDate, s2 );
- s.Sprintf( "%s%s", s.Str(), d.Str());
- }
- } else {
- s = "Rightmost InteriorNode Pointer";
- }
-
- xbString sOut( sPre );
- sOut += s;
- sOut += sPost;
- sOut += sKeyPtr;
-
- xbase->WriteLogMessage( sOut, iOutputOpt );
- return XB_NO_ERROR;
-}
-#endif
-
-/***********************************************************************/
-//! @brief ReadHeadBlock.
-/*!
- Read values off head block in MDX file
- \param iOpt 0 - Read entire block, initialize as needed.<br>
- 1 - Read in only dynamic section of block<br>
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-
-*/
-
-xbInt16 xbIxMdx::ReadHeadBlock( xbInt16 iOpt )
-{
-
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
-
-// std::cout << "ReadHeadBlock() option = " << iOpt << "\n";
-
- try{
- if( !FileIsOpen()){
- iRc = XB_NOT_OPEN;
- iErrorStop = 100;
- throw iRc;
- }
- char sBuf[48];
- memset( sBuf, 0x00, 48 );
-
- if( iOpt == 0 ){
- if(( iRc = xbFseek( 0, SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
-
- if(( iRc = xbFread( sBuf, 47, 1 )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- } else {
-
- if(( iRc = xbFseek( 28, SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
-
- if(( iRc = xbFread( sBuf, 19, 1 )) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
- }
-
- char *p = sBuf;
- if( iOpt == 0 ){
- cVersion = *p++;
- cCreateYY = *p++;
- cCreateMM = *p++;
- cCreateDD = *p++;
- sFileName.Assign( p, 1, 16 );
- p+=16;
- iBlockFactor = eGetInt16( p );
- p+=2;
- SetBlockSize( (xbUInt32) eGetInt16( p ));
- p+=2;
- cProdIxFlag = *p++;
- cTagEntryCnt = *p++;
- iTagLen = *p;
- p+=2;
-
- iTagUseCnt = eGetInt16( p );
- //lTagUseCnt = eGetInt32( p );
- //p+=4;
- p+=2;
- cNextTag = *p++;
- c1B = *p++;
-
- ulPageCnt = eGetUInt32( p );
- p+=4;
- ulFirstFreePage = eGetUInt32( p );
- p+=4;
- ulNoOfBlockAvail = eGetUInt32( p );
- p+=4;
- cUpdateYY = *p++;
- cUpdateMM = *p++;
- cUpdateDD = *p;
-
- if( cNodeBuf )
- free( cNodeBuf );
-
- if(( cNodeBuf = (char *) malloc( (size_t) GetBlockSize())) == NULL ){
- iErrorStop = 150;
- throw XB_NO_MEMORY;
- }
-
- if(( iRc = xbIxMdx::LoadTagTable()) != XB_NO_ERROR ){
- iErrorStop = 160;
- throw iRc;
- }
-
- } else {
- iTagUseCnt = eGetInt16( p );
- p+=4;
- ulPageCnt = eGetUInt32( p );
- p+=4;
- ulFirstFreePage = eGetUInt32( p );
- p+=4;
- ulNoOfBlockAvail = eGetUInt32( p );
- p+=4;
- cUpdateYY = *p++;
- cUpdateMM = *p++;
- cUpdateDD = *p;
- }
-
-
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::ReadHeadBlock() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- if( cNodeBuf )
- free( cNodeBuf );
- }
- return iRc;
-}
-
-/***********************************************************************/
-//! @brief Reindex
-/*!
- Reindex specifed tag or all tags
- \param **vpTag &tag - Tag to reindex.<br>
- NULL - Reindex all tags<br>
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-
- If this method fails, the index is left in an undefined state
-
-*/
-
-xbInt16 xbIxMdx::Reindex( void **vpTag ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbMdxTag * mpTag;
- #ifdef XB_LOCKING_SUPPORT
- xbBool bLocked = xbFalse;
- #endif
-
- if( vpTag )
- mpTag = (xbMdxTag *) *vpTag;
- else
- mpTag = NULL;
-
- struct tagInfo{
- xbBool bUnique;
- xbBool bDesc;
- char sTagName[11];
- xbString *sKeyExp;
- xbString *sFiltExp;
- tagInfo *next;
- };
- tagInfo *ti = NULL;
-
- try{
-
- #ifdef XB_LOCKING_SUPPORT
- if( dbf->GetAutoLock() && !dbf->GetTableLocked() ){
- if(( iRc = dbf->LockTable( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- bLocked = xbTrue;
- }
- #endif
-
- if( mpTag == NULL ){
- // do all tags
- xbMdxTag *tt = mdxTagTbl;
- tagInfo *pHead = NULL;
- tagInfo *pEnd = NULL;
-
- if( tt ){
- while( tt ){
- ti = (tagInfo *) calloc( 1, sizeof( tagInfo ));
- ti->bUnique = tt->cUnique ? 1 : 0;
- ti->bDesc = (((tt->cKeyFmt2 & 0x08) > 0) ? 1 : 0);
- memcpy( ti->sTagName, tt->cTagName, 11 );
- ti->sKeyExp = new xbString( tt->sKeyExp->Str());
- if( tt->cHasFilter )
- ti->sFiltExp = new xbString( tt->sFiltExp->Str());
- else
- ti->sFiltExp = new xbString( "" );
- if( !pHead )
- pHead = ti;
- else
- pEnd->next = ti;
- pEnd = ti;
- tt = tt->next;
- }
- }
-
- // get the file name and save it
- xbString sMdxFileName = GetFqFileName();
-
- // close the mdx file
- if(( iRc = xbIxMdx::Close()) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
-
- // delete the file
- xbRemove();
-
- // init variables
- Init();
-
- tagInfo *p = pHead;
- tagInfo *pDel;
-
- // create new file & add the tags
- while( p ){
-
- //std::cout << "Reindex() linked list extract\n";
- //std::cout << "Tag Name = [" << p->sTagName << "]\n";
- //std::cout << "Key Exp = [" << p->sKeyExp->Str() << "]\n";
- //std::cout << "Filt Exp = [" << p->sFiltExp->Str() << "]\n";
- //std::cout << "bDesc = [" << p->bDesc << "]\n";
- //std::cout << "bUnique = [" << p->bUnique << "]\n";
-
- if(( iRc = CreateTag( p->sTagName, p->sKeyExp->Str(), p->sFiltExp->Str(), p->bDesc, p->bUnique, xbTrue, vpTag )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- delete p->sKeyExp;
- delete p->sFiltExp;
- pDel = p;
- p = p->next;
- free( pDel );
- }
- } else {
- if(( iRc = HarvestTagNodes( mpTag )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- }
-
- xbUInt32 ulRecCnt = 0;
- if(( iRc = dbf->GetRecordCnt( ulRecCnt )) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
- xbInt16 iCurTag = 0;
- xbBool bDone = xbFalse;
-
- for( xbUInt32 ulRec = 1; ulRec <= ulRecCnt; ulRec++ ){
- if(( iRc = dbf->GetRecord( ulRec )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
-
- bDone = xbFalse;
- iCurTag = 0;
- if( !vpTag )
- mpTag = (xbMdxTag *) GetTag( iCurTag++ );
-
- while( !bDone ){
- // do the tag things
- // CreateKey
- if(( iRc = CreateKey( mpTag, 1 )) != XB_NO_ERROR ){
- iErrorStop = 160;
- throw iRc;
- }
- if( mpTag->iKeySts == XB_ADD_KEY ){
- if( mpTag->cUnique ){
- if(( iRc = CheckForDupKey( mpTag )) != XB_NO_ERROR ){
- iErrorStop = 170;
- throw iRc;
- }
- }
- if(( iRc = AddKey( mpTag, ulRec )) != XB_NO_ERROR ){
- iErrorStop = 180;
- throw iRc;
- }
- }
- if( vpTag || iCurTag >= GetTagCount())
- bDone = xbTrue;
- else
- mpTag = (xbMdxTag *) GetTag( iCurTag++ );
- }
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::ReIndex() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
-
- #ifdef XB_LOCKING_SUPPORT
- if( bLocked ){
- dbf->LockTable( XB_UNLOCK );
- }
- #endif
- return iRc;
-}
-
-/***********************************************************************/
-xbInt16 xbIxMdx::SetCurTag( xbString &sTagName ) {
-
- xbMdxTag *tt = (xbMdxTag *) GetTag( sTagName );
- if( tt ){
- xbIx::SetCurTag((void *) tt );
- return XB_NO_ERROR;
- } else
- return XB_INVALID_TAG;
-}
-
-/***********************************************************************/
-xbInt16 xbIxMdx::SetCurTag( xbInt16 iTagNo ) {
-
- xbMdxTag *tt = (xbMdxTag *) GetTag( iTagNo );
- if( tt ){
- xbIx::SetCurTag((void *) tt );
- return XB_NO_ERROR;
- } else
- return XB_INVALID_TAG;
-}
-
-/***********************************************************************/
-//! @brief SetReuseEmptyNode switch setting.
-/*!
- \param bEmptyNodeSw xbFalse - Do not reuse empty MDX index nodes (Dbase 6. behavior).
- xbTrue - Reuse empty MDX index nodes.
-*/
-
-void xbIxMdx::SetReuseEmptyNodesSw( xbBool bEmptyNodesSw ) {
- bReuseEmptyNodes = bEmptyNodesSw;
-}
-
-/***********************************************************************/
-//! @brief Set Tag Pointer.
-/*!
- Set binary tree pointer value. The MDX tags are stored with binary
- tree positions. This routine sets the value in memory.
- \param cPtr L - Left child.<br>
- R - Right child.<br>
- P - Parent.
- \param iWhich - Which tag to update
- \param cVal - Value to set.
- \returns void
-*/
-
-/*
-void xbIxMdx::SetTagPtr( char cPtr, xbInt16 iWhich, char cVal ){
-
- xbMdxTag *mpTag = (xbMdxTag *) GetTag( iWhich );
- if( mpTag ){
- switch( cPtr ){
- case 'L':
- mpTag->cLeftChild = cVal;
- break;
- case 'R':
- mpTag->cRightChild = cVal;
- break;
- case 'P':
- mpTag->cParent = cVal;
- break;
- }
- }
-}
-*/
-
-/***********************************************************************/
-//! @brief Split an interior node
-/*!
-
- This routine splits an interior node into two nodes, divided by dSplitFactor.<br>
- This behaves differently than V7 Dbase. V7 does not balance the nodes.<br>
- For V7, if adding a key to the end of a node, it will create a right node
- with only one key, and the left node is still full.<br><br>
-
- Possible performance improvement options.<br>
- Two modes when splitting:<br>
- a) Split nodes in the middle - good for random access applications<br>
- b) Split off right node with only one key - good for applications with
- expectation of ascending keys added moving forward.<br>
-
- This routine first inserts the key into the left node in the appropriate location
- then splits the node based on the split factor setting.
-
- \param vpTag Tag in play.
- \param npLeft Left node to split.
- \param npRight Right node to split.
- \param iSlotNo Slot number for split.
- \param ulPtr Pointer number to insert.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbIxMdx::SplitNodeI( void *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 ulPtr ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbMdxTag * npTag = (xbMdxTag *) vpTag;
- xbDouble dSplitFactor = .5; // split the nodes 50/50
- xbInt16 iLen;
- char *pSrc;
- char *pTrg;
-
-
- try{
- xbInt32 lKeyCnt = GetKeyCount( npLeft );
- xbInt32 lNewLeftKeyCnt = (xbInt32) ((lKeyCnt + 1) * dSplitFactor);
- xbInt32 lNewRightKeyCnt = lKeyCnt - lNewLeftKeyCnt;
- if(( iRc = InsertNodeI( vpTag, npLeft, iSlotNo, ulPtr )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
-
- // move the right half of the left node to the right node
- pSrc = npLeft->cpBlockData;
- pSrc += 8 + ((lNewLeftKeyCnt+1) * npTag->iKeyItemLen);
- pTrg = npRight->cpBlockData;
- pTrg += 8;
- iLen = (lNewRightKeyCnt * npTag->iKeyItemLen) + 4;
- memmove( pTrg, pSrc, (size_t) iLen );
-
- // eliminate chattle on the right
- iLen = 12 + (lNewLeftKeyCnt * npTag->iKeyItemLen);
- pSrc = npLeft->cpBlockData;
- pSrc += iLen;
- memset( pSrc, 0x00, npLeft->ulBufSize - (xbUInt32) iLen );
-
- // write the new key counts into the nodes
- pTrg = npLeft->cpBlockData;
- ePutInt32( pTrg, lNewLeftKeyCnt );
- pTrg = npRight->cpBlockData;
- ePutInt32( pTrg, lNewRightKeyCnt );
-
- // write out the block
- if(( iRc = WriteBlock( npLeft->ulBlockNo, GetBlockSize(), npLeft->cpBlockData )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- // write out the block
- if(( iRc = WriteBlock( npRight->ulBlockNo, GetBlockSize(), npRight->cpBlockData )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::SplitNodeI() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/***********************************************************************/
-//! @brief Split a leaf node.
-/*!
- This routine splits an index leaf into two nodes, divided by dSplitFactor.<br>
-
- Possible performance improvement options.<br>
- Two modes when splitting:<br>
- a) Split nodes in the middle - good for random access applications<br>
- b) Split off right node with only one key - good for applications with
- expectation of ascending keys added moving forward.<br>
-
- This routine first inserts the key into the left node in the appropriate location
- then splits the node based on the split factor setting.
-
- \param vpTag Tag in play.
- \param npLeft Left node to split.
- \param npRight Right node to split.
- \param iSlotNo Slot number for split.
- \param ulPtr Pointer number to insert.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbIxMdx::SplitNodeL( void *vpTag, xbIxNode * npLeft, xbIxNode *npRight,
- xbInt16 iSlotNo, char * cpKeyBuf, xbUInt32 ulPtr ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbDouble dSplitFactor = .5; // can adjust performance with this number
- xbMdxTag *mpTag = (xbMdxTag *) vpTag;
- xbString sMsg;
-
- xbInt16 iLen;
- char *pSrc;
- char *pTrg;
-
- // std::cout << "In xbIxMdx::SplitNodeL()\n";
- try{
- xbInt32 lKeyCnt = GetKeyCount( npLeft );
- xbInt32 lNewLeftKeyCnt = (xbInt32) ((lKeyCnt + 1) * dSplitFactor) + 1;
- xbInt32 lNewRightKeyCnt = lKeyCnt + 1 - lNewLeftKeyCnt;
-
- if(( iRc = InsertNodeL( vpTag, npLeft, iSlotNo, cpKeyBuf, ulPtr )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
-
- // move right half off of left node to the right node
- pSrc = npLeft->cpBlockData;
- pSrc += 8 + (lNewLeftKeyCnt * mpTag->iKeyItemLen);
- pTrg = npRight->cpBlockData;
- pTrg += 8;
- iLen = lNewRightKeyCnt * mpTag->iKeyItemLen;
- memmove( pTrg, pSrc, (size_t) iLen );
-
- // write the new key counts into the nodes
- pTrg = npLeft->cpBlockData;
- ePutInt32( pTrg, lNewLeftKeyCnt );
- pTrg = npRight->cpBlockData;
- ePutInt32( pTrg, lNewRightKeyCnt );
-
- // zero out the next key number so this node is not confused with interior node
- iLen = 8 + (lNewLeftKeyCnt * mpTag->iKeyItemLen);
- pSrc = npLeft->cpBlockData;
- pSrc += iLen;
- memset( pSrc, 0x00, npLeft->ulBufSize - (xbUInt32) iLen );
-
- // write out the left block
- if(( iRc = WriteBlock( npLeft->ulBlockNo, GetBlockSize(), npLeft->cpBlockData )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- // write out the right block
- if(( iRc = WriteBlock( npRight->ulBlockNo, GetBlockSize(), npRight->cpBlockData )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
-
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::SplitNodeL() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-/**************************************************************************************************************/
-//! @brief TagSerialNo.
-/*!
- This routine is used internally for reading or updating the serial number on a given tag when the tag.
-
- \param iOption 1 - Read tag serial number off disk, save in structure<br>
- 2 - Write serial number from memory to disk<br>
- 3 - Read serial number off disk, increment, write updated number to disk<br>
- mpTag - Pointer to tag for serial number update
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbIxMdx::TagSerialNo( xbInt16 iOption, xbMdxTag * mpTag ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
-
- try{
-
- xbInt64 lPos = (mpTag->ulTagHdrPageNo * 512) + 20;
-
-// std::cout << "UpdateSerialNo offset = " << lPos << " option = " << iOption << "\n";
-
- if( iOption != 2 ){
- if(( iRc = xbFseek( lPos, SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- if(( iRc = xbFgetc( mpTag->cSerialNo )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- }
-
- if( iOption == 3 )
- mpTag->cSerialNo++;
-
- if( iOption != 1 ){
- if(( iRc = xbFseek( lPos, SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- if(( iRc = xbFwrite( &mpTag->cSerialNo, 1, 1 )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- }
-
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::UpdateSerialNo() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-
-/***********************************************************************/
-//! @brief UpdateTagKey
-/*!
- This routine updates a key or a given tag.
- The file header is considered to be the first 2048 bytes in the file.
-
- \param cAction A - Add a key.<br>
- D - Delete a key.<br>
- R - Revise a key.<br>
- \param vpTg - Pointer to tag.<br>
- \param ulRecNo - Record number association with the action.<br>
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbIxMdx::UpdateTagKey( char cAction, void *vpTag, xbUInt32 ulRecNo ){
-
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbMdxTag *npTag = (xbMdxTag *) vpTag;
-
- try{
- // save off any needed fields for updating
- xbUInt32 ulTagSizeSave = npTag->ulTagSize;
- // std::cout << "old size = " << ulTagSizeSave << " new size = " << npTag->ulTagSize << "\n";
- //std::cout << "UpdateTagKey - tag size was updated need to do something here - test \n";
-
-
- if( cAction == 'D' || cAction == 'R' ){
- // std::cout << "UpdateTagKey-delete going to DeleteKey \n";
- if(( iRc = DeleteKey( vpTag )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- //std::cout << "UpdateTagKey-delete back from DeleteKey \n";
- }
-
- if( cAction == 'A' || cAction == 'R' ){
- if(( iRc = AddKey( vpTag, ulRecNo )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- }
- if( ulTagSizeSave != npTag->ulTagSize ){
- if(( iRc = UpdateTagSize( npTag, npTag->ulTagSize )) != XB_NO_ERROR) {
- iErrorStop = 120;
- throw iRc;
- }
- }
- // update the serial number
- if(( iRc = TagSerialNo( 3, npTag )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
-
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::UpdateTagKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/**************************************************************************************************************/
-//! @brief Write head block.
-/*!
- This routine updates the MDX file header and commits changes to disk.
- The file header is considered to be the first 2048 bytes in the file.
-
- \param iOption 0 - Entire 2048 byte header, used for creating a new mdx file.<br>
- 1 - Bytes 28 through 46, used when adding or deleting a tag.<br>
- 2 - Bytes 32 through 46, used after updating keys in the file.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-
-xbInt16 xbIxMdx::WriteHeadBlock( xbInt16 iOption ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
-
- try{
- xbDate d; // default is system date, today
- cUpdateYY = (char) d.YearOf() - 1900;
- cUpdateMM = (char) d.MonthOf();
- cUpdateDD = (char) d.DayOf( XB_FMT_MONTH );
-
- if( iOption > 0 ){
- char buf[48];
- memset( buf, 0x00, 48 );
- xbUInt32 ulStartPos = 0;
- xbUInt32 ulLen = 0;
-
- if( iOption == 1 ){
- ePutInt16( &buf[28], iTagUseCnt );
- buf[30] = cNextTag;
- buf[31] = 0x1b;
- ulStartPos = 28;
- ulLen = 19;
- } else {
- ulStartPos = 32;
- ulLen = 16;
- }
-
- ePutUInt32( &buf[32], ulPageCnt );
- ePutUInt32( &buf[36], ulFirstFreePage );
- ePutUInt32( &buf[40], ulNoOfBlockAvail );
- buf[44] = cUpdateYY;
- buf[45] = cUpdateMM;
- buf[46] = cUpdateDD;
-
- if(( iRc = xbFseek( ulStartPos, SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
-
- if(( iRc = xbFwrite( &buf[ulStartPos], ulLen, 1 )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
-
- } else if( iOption == 0 ){
- char buf[2048];
- memset( buf, 0x00, 2048 );
-
- buf[0] = cVersion;
- cCreateYY = cUpdateYY;
- cCreateMM = cUpdateMM;
- cCreateDD = cUpdateDD;
- buf[1] = cCreateYY;
- buf[2] = cCreateMM;
- buf[3] = cCreateDD;
-
-
- for( xbUInt32 l = 0; l < sFileName.Len() && l < 10; l++ ){
- buf[l+4] = sFileName[l+1];
- }
-
- ePutInt16( &buf[20], iBlockFactor );
- ePutInt16( &buf[22], (xbInt16) GetBlockSize() );
-
- buf[24] = cProdIxFlag;
- buf[25] = cTagEntryCnt;
- ePutInt16 ( &buf[26], iTagLen );
- ePutInt16 ( &buf[28], iTagUseCnt );
- buf[30] = cNextTag;
- buf[31] = c1B;
- ePutUInt32( &buf[32], ulPageCnt );
- ePutUInt32( &buf[36], ulFirstFreePage );
- ePutUInt32( &buf[40], ulNoOfBlockAvail );
- buf[44] = cUpdateYY;
- buf[45] = cUpdateMM;
- buf[46] = cUpdateDD;
-
- // not sure what the following "1" is for in a sea of zeroes....
- // maybe it's current tag or default tag or something along those lines?
- buf[529] = 0x01;
-
- xbRewind();
- if(( iRc = xbFwrite( buf, 2048, 1 )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- } else {
- iErrorStop = 130;
- iRc = XB_INVALID_OPTION;
- throw iRc;
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::WriteHeadBlock() Exception Caught. Error Stop = [%d] iRc = [%d] option = [%d]", iErrorStop, iRc, iOption );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-/***********************************************************************/
-xbInt16 xbIxMdx::UpdateTagSize( xbMdxTag *mpTag, xbUInt32 ulTagSz ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- char buf[4];
- try{
- ePutUInt32( &buf[0], ulTagSz );
- if(( iRc = xbFseek( (xbInt64) ((mpTag->ulTagHdrPageNo *512 )+ 4), SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- if(( iRc = xbFwrite( &buf[0], 4, 1 )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxMdx::UpdateTagSize() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-
-/***********************************************************************/
-//void xbIxMdx::TestStub( char *s, void *vpTag ){
-void xbIxMdx::TestStub( char *, void * ){
-}
-/***********************************************************************/
-} /* namespace */
-#endif /* XB_MDX_SUPPORT */
-
diff --git a/src/core/xbixndx.cpp b/src/core/xbixndx.cpp
deleted file mode 100755
index 9d946dd..0000000
--- a/src/core/xbixndx.cpp
+++ /dev/null
@@ -1,2820 +0,0 @@
-/* xbixndx.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-#include "xbase.h"
-
-#ifdef XB_NDX_SUPPORT
-
-namespace xb{
-
-
-/***********************************************************************/
-//! @brief Class constructor.
-/*!
- \param dbf Pointer to dbf instance.
-*/
-
-xbIxNdx::xbIxNdx( xbDbf *dbf ) : xbIx( dbf ){
- ndxTag = (xbNdxTag *) calloc( 1, sizeof( xbNdxTag ));
- SetBlockSize( XB_NDX_BLOCK_SIZE );
- cNodeBuf = (char *) malloc( XB_NDX_BLOCK_SIZE );
-}
-/***********************************************************************/
-//! @brief Class Destructor.
-xbIxNdx::~xbIxNdx(){
- if( ndxTag ){
- ndxTag->npNodeChain = FreeNodeChain( ndxTag->npNodeChain );
- if( ndxTag->cpKeyBuf )
- free( ndxTag->cpKeyBuf );
- if( ndxTag->cpKeyBuf2 )
- free( ndxTag->cpKeyBuf2 );
- if( ndxTag->exp ){
- delete ndxTag->exp;
- ndxTag->exp = NULL;
- }
- ndxTag->sKeyExpression.Set( NULL );
- ndxTag->sTagName.Set( NULL );
- free( ndxTag );
- ndxTag = NULL;
- }
- if( cNodeBuf )
- free( cNodeBuf );
-}
-/***********************************************************************/
-//! @brief Add key.
-/*!
- Add key. If this is a unique index, this logic assumes the duplicate
- check logic was already done.
-
- \param vpTag Tag to update.
- \param ulRecNo Record number to add key for.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbIxNdx::AddKey( void * vpTag, xbUInt32 ulRecNo ){
-
- xbNdxTag * npTag;
- vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
- if( GetUniqueKeyOpt() == XB_EMULATE_DBASE && npTag->bFoundSts )
- return XB_NO_ERROR;
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbInt16 iHeadNodeUpdateOpt = 2;
-
-
- try{
-
- if(( iRc = xbIxNdx::KeySetPosAdd( npTag, ulRecNo )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- xbInt32 lKeyCnt = GetKeyCount( npTag->npCurNode );
- if( lKeyCnt < npTag->iKeysPerBlock ){
- // Section A - add key to appropriate position if space available
- if(( iRc = InsertNodeL( npTag, npTag->npCurNode, npTag->npCurNode->iCurKeyNo, npTag->cpKeyBuf, ulRecNo )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
-
- } else {
- // land here with a full leaf node
- iHeadNodeUpdateOpt = 1;
- // section B - split the leaf node
- xbIxNode * npRightNode = AllocateIxNode( GetBlockSize() + (xbUInt32) npTag->iKeyItemLen, 1 );
- if( !npRightNode ){
- iErrorStop = 120;
- iRc = XB_NO_MEMORY;
- throw iRc;
- }
- if(( iRc = SplitNodeL( npTag, npTag->npCurNode, npRightNode, npTag->npCurNode->iCurKeyNo, npTag->cpKeyBuf, ulRecNo )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- xbUInt32 ulTempBlockNo = npRightNode->ulBlockNo;
-
- // section C - go up the tree, splitting nodes as necessary
- xbIxNode * npParent = npTag->npCurNode->npPrev;
- while( npParent && GetKeyCount( npParent ) >= npTag->iKeysPerBlock ){
- npRightNode = FreeNodeChain( npRightNode );
- npRightNode = AllocateIxNode( GetBlockSize() + (xbUInt32) npTag->iKeyItemLen, 1 );
- if( !npRightNode ){
- iErrorStop = 140;
- iRc = XB_NO_MEMORY;
- throw iRc;
- }
- if(( iRc = SplitNodeI( npTag, npParent, npRightNode, npParent->iCurKeyNo, ulTempBlockNo )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
- ulTempBlockNo = npRightNode->ulBlockNo;
- npTag->npCurNode = npParent;
- npParent = npParent->npPrev;
- }
-
- // section D - if cur node is split root, create new root
- if( npTag->npCurNode->ulBlockNo == npTag->ulRootBlock ){
- // xbase->WriteLogMessage( "Section d" );
- if(( iRc = AddKeyNewRoot( npTag, npTag->npCurNode, npRightNode )) != XB_NO_ERROR ){
- iErrorStop = 160;
- throw iRc;
- }
- npRightNode = FreeNodeChain( npRightNode );
-
- } else {
- // else section E, put key in parent
- if(( iRc = InsertNodeI( vpTag, npParent, npParent->iCurKeyNo, npRightNode->ulBlockNo )) != XB_NO_ERROR ){
- iErrorStop = 170;
- throw iRc;
- }
- npRightNode = FreeNodeChain( npRightNode );
- }
- }
-
- // update the header
- if(( iRc = WriteHeadBlock( iHeadNodeUpdateOpt )) != XB_NO_ERROR ){
- iErrorStop = 180;
- throw iRc;
- }
-
- // ---- free whatever is left of the node chain here, this might not be right, might need to restore it to
- // the point right after SetKeyPosAdd
- npTag->npNodeChain = FreeNodeChain( ndxTag->npNodeChain );
- npTag->npCurNode = NULL;
-
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxNdx::AddKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/***********************************************************************/
-//! @brief Add new root node.
-/*!
- \param npTag Tag to update.
- \param npLeft Left node.
- \param npRight Right node.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbIxNdx::AddKeyNewRoot( xbNdxTag *npTag, xbIxNode *npLeft, xbIxNode *npRight ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbString sMsg;
- char *pLastKey = NULL;
-
- try{
- xbIxNode *npRoot = AllocateIxNode( GetBlockSize() + (xbUInt32) npTag->iKeyItemLen, 1 );
- if( !npRoot ){
- iErrorStop = 100;
- iRc = XB_NO_MEMORY;
- throw iRc;
- }
- npTag->ulRootBlock = npRoot->ulBlockNo;
- pLastKey = (char *) malloc( (size_t) ndxTag->iKeyLen );
- if(( iRc = GetLastKeyForBlockNo( npTag, npLeft->ulBlockNo, pLastKey )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- char * pTrg = npRoot->cpBlockData;
-
- // set no of keys to 1
- ePutUInt32( pTrg, 1 );
-
- // set the left node number
- pTrg += 4;
- ePutUInt32( pTrg, npLeft->ulBlockNo );
-
- // set the key
- pTrg+= 8;
- memcpy( pTrg, pLastKey, (size_t) npTag->iKeyLen );
-
- // set the right node number
- pTrg+= (npTag->iKeyItemLen - 8);
- ePutUInt32( pTrg, npRight->ulBlockNo );
-
- // write out the block
- if(( iRc = WriteBlock( npRoot->ulBlockNo, GetBlockSize(), npRoot->cpBlockData )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- if( pLastKey )
- free( pLastKey );
- NodeFree( npRoot );
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxNdx::AddKeyNewRoot() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- if( pLastKey )
- free( pLastKey );
- }
- return iRc;
-}
-/***********************************************************************/
-//! @brief Append node to node chain.
-/*!
- Append a node to the current node chain for a given tag.
-
- \param vpTag Tag to update.
- \param npNode Node to add to node chain.
- \returns void
-*/
-void xbIxNdx::AppendNodeChain( void *vpTag, xbIxNode * npNode ){
-
- xbNdxTag * npTag;
- vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
-
- if( npTag->npNodeChain == NULL ){
- npTag->npNodeChain = npNode;
- npTag->npCurNode = npNode;
- } else {
- npNode->npPrev = npTag->npCurNode;
- npTag->npCurNode->npNext = npNode;
- npTag->npCurNode = npNode;
- }
- // time stamp the node chain
- GetFileMtime( npTag->tNodeChainTs );
-}
-
-/***********************************************************************/
-//! @brief Allocate a node.
-/*!
- \param ulBufSize Buffer size.
- \param iOpt 0 - Don't update the node block number on the node.
- 1 - Set node block number to the next available block number.
- \returns Pointer to new node.
-*/
-
-xbIxNode * xbIxNdx::AllocateIxNode( xbUInt32 ulBufSize, xbInt16 iOpt ){
- xbIxNode *n = xbIx::AllocateIxNode( ulBufSize );
- if( n && iOpt == 1 ) n->ulBlockNo = ndxTag->ulTotalBlocks++;
- return n;
-}
-/***********************************************************************/
-//! @brief Check for duplicate key.
-/*!
- \param vpTag Tag to check.
- \returns XB_KEY_NOT_UNIQUE<br>XB_NO_ERROR
-*/
-xbInt16 xbIxNdx::CheckForDupKey( void *vpTag )
-{
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbNdxTag *npTag = (xbNdxTag *) vpTag;
- npTag->bFoundSts = xbFalse;
- try{
- if( GetUnique()){
- if( npTag->iKeySts == XB_ADD_KEY || npTag->iKeySts == XB_UPD_KEY )
- if( KeyExists( vpTag )){
- if( GetUniqueKeyOpt() == XB_EMULATE_DBASE ){
- npTag->bFoundSts = xbTrue;
- return 0;
- } else {
- return XB_KEY_NOT_UNIQUE;
- }
- }
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxNdx::CheckForDupKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/***********************************************************************/
-//! @brief Check tag integrity.
-/*!
- Check a tag for accuracy.
-
- \param vpTag Tag to create key for.
- \param iOpt Output message destination<br>
- 0 = stdout<br>
- 1 = Syslog<br>
- 2 = Both<br>
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbIxNdx::CheckTagIntegrity( void *vpTag, xbInt16 iOpt ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iRc2;
- xbInt16 iRc3;
- xbInt16 iErrorStop = 0;
- xbUInt32 ulIxCnt = 0;
- xbUInt32 ulThisRecNo = 0;
- xbUInt32 ulPrevRecNo = 0;
- xbBool bDone = false;
- xbString sMsg;
- char cKeyType;
- char *pPrevKeyBuf = NULL;
-
- #ifdef XB_LOCKING_SUPPORT
- xbBool bLocked = xbFalse;
- #endif
-
- xbNdxTag * npTag;
- vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
-
- try{
- #ifdef XB_LOCKING_SUPPORT
- if( dbf->GetAutoLock() && !dbf->GetTableLocked() ){
- if(( iRc = dbf->LockTable( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- bLocked = xbTrue;
- }
- #endif
-
- memset( npTag->cpKeyBuf2, 0x00, (size_t) npTag->iKeyLen );
- cKeyType = GetKeyType( vpTag );
-
- sMsg.Sprintf( "Checking index type [%c]", cKeyType );
- xbase->WriteLogMessage( sMsg, iOpt );
-
- pPrevKeyBuf = (char *) calloc( 1, (size_t) ndxTag->iKeyLen );
-
- // for each key in the index, make sure it is trending in the right direction
- iRc = GetFirstKey( vpTag, 0 );
- while( iRc == XB_NO_ERROR && !bDone ){
- ulIxCnt++;
- iRc = GetNextKey( vpTag, 0 );
- if( iRc == XB_NO_ERROR ){
- // compare this key to prev key
- iRc2 = CompareKey( cKeyType, GetKeyData( npTag->npCurNode, npTag->npCurNode->iCurKeyNo, npTag->iKeyItemLen ),
- pPrevKeyBuf, (size_t) npTag->iKeyLen );
-
- if( iRc2 < 0 ){
- sMsg.Sprintf( "Key sequence error at key number [%ld].", ulIxCnt );
- xbase->WriteLogMessage( sMsg, iOpt );
- iErrorStop = 110;
- iRc = XB_INVALID_INDEX;
- throw iRc;
- }
-
- ulThisRecNo = 0;
- if(( iRc3 = GetDbfPtr( vpTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulThisRecNo )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc3;
- }
-
- if( iRc2 == 0 && (ulThisRecNo <= ulPrevRecNo )){
- sMsg.Sprintf( "Dbf record number sequence error at key number [%ld].", iOpt );
- xbase->WriteLogMessage( sMsg, iOpt );
- iErrorStop = 130;
- iRc = XB_INVALID_INDEX;
- throw iRc;
- }
- // save this key info to prev key
- memcpy( pPrevKeyBuf, GetKeyData( npTag->npCurNode, npTag->npCurNode->iCurKeyNo, npTag->iKeyItemLen ), (size_t) npTag->iKeyLen );
- ulPrevRecNo = ulThisRecNo;
- }
- }
-
- // verify the index count matches the tag count
- xbUInt32 ulDbfCnt = 0;
- if(( iRc = dbf->GetRecordCnt( ulDbfCnt )) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
-
- if( GetUniqueKeyOpt() == XB_EMULATE_DBASE && GetUnique( vpTag )){
- // Can't compare counts if using XB_EMULATE_DBASE and it's a unique index
- } else {
- if( ulDbfCnt != ulIxCnt ){
- sMsg.Sprintf( "CheckTagIntegrity() Index entry count [%ld] does not match dbf record count [%ld]", ulIxCnt, ulDbfCnt );
- xbase->WriteLogMessage( sMsg, iOpt );
- iErrorStop = 150;
- iRc = XB_INVALID_INDEX;
- throw iRc;
- }
-
- // verify each record in the dbf file has a corresponding index entry
- xbUInt32 j = 0;
- while( j < ulDbfCnt ){
- if(( iRc = dbf->GetRecord( ++j )) != XB_NO_ERROR ){
- iErrorStop = 160;
- throw iRc;
- }
- if(( iRc = FindKeyForCurRec( vpTag )) != XB_NO_ERROR ){
- ulThisRecNo = j;
- iErrorStop = 170;
- throw iRc;
- }
- }
- sMsg.Sprintf( "CheckTagIntegrity() Index entry count [%ld] matches dbf record count [%ld]", ulIxCnt, ulDbfCnt );
- xbase->WriteLogMessage( sMsg, iOpt );
- }
- if( pPrevKeyBuf )
- free( pPrevKeyBuf );
-
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxNdx::CheckTagIntegrity() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg, iOpt );
- xbase->WriteLogMessage( GetErrorMessage( iRc ), iOpt );
- if( pPrevKeyBuf )
- free( pPrevKeyBuf );
-
- if( iErrorStop == 170 ){
- sMsg.Sprintf( "xbIxNdx::CheckTagIntegrity() Missing index entry for record [%d]", ulThisRecNo );
- xbase->WriteLogMessage( sMsg, iOpt );
- }
- }
-
- #ifdef XB_LOCKING_SUPPORT
- if( bLocked ){
- dbf->LockTable( XB_UNLOCK );
- }
- #endif
- return iRc;
-
-}
-/***********************************************************************/
-//! @brief Create key for tag.
-/*!
- Append a node to the current node chain for a given tag.
-
- \param vpTag Tag to create key for.
- \param iOpt 0 = Build a key for FindKey usage, only rec buf 0.<br>
- 1 = Append Mode, Create key for an append, only use rec buf 0, set updated switch.<br>
- 2 = Update Mode, Create old version and new version keys, check if different, set update switch appropriately.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbIxNdx::CreateKey( void * vpTag, xbInt16 iOpt ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- try{
- xbNdxTag * npTag;
- vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
-
- if(( iRc = npTag->exp->ProcessExpression( 0 )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- if( npTag->exp->GetReturnType() == XB_EXP_CHAR ){
- npTag->exp->GetStringResult( npTag->cpKeyBuf, (xbUInt32) npTag->iKeyLen );
- }
- else if( npTag->exp->GetReturnType() == XB_EXP_NUMERIC ){
- xbDouble d;
- npTag->exp->GetNumericResult( d );
- memcpy( npTag->cpKeyBuf, &d, 8 );
- }
- else if( npTag->exp->GetReturnType() == XB_EXP_DATE ){
- xbDouble d;
- npTag->exp->GetNumericResult( d );
- memcpy( npTag->cpKeyBuf, &d, 8 );
- }
-
- npTag->iKeySts = 0;
- if( iOpt == 1 )
- npTag->iKeySts = XB_ADD_KEY;
-
- else if( iOpt == 2 ){
- if(( iRc = npTag->exp->ProcessExpression( 1 )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- if( npTag->exp->GetReturnType() == XB_EXP_CHAR ){
- npTag->exp->GetStringResult( npTag->cpKeyBuf2, (xbUInt32) npTag->iKeyLen );
- } else if( npTag->exp->GetReturnType() == XB_EXP_NUMERIC || npTag->exp->GetReturnType() == XB_EXP_DATE ){
- xbDouble d;
- npTag->exp->GetNumericResult( d );
- memcpy( npTag->cpKeyBuf2, &d, 8 );
- }
- if( memcmp( npTag->cpKeyBuf, npTag->cpKeyBuf2, (size_t) npTag->iKeyLen ))
- npTag->iKeySts = XB_UPD_KEY;
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxNdx::CreateKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-/***********************************************************************/
-//! @brief Create new tag.
-/*!
- This routine creates a new tag. Since NDX files have only one tag,
- this creates a new NDX file.
-
- \param sName Tag Name, including .NDX suffix
- \param sKey Key Expression
- \param sFilter Filter expression. Not supported by NDX indices.
- \param iDescending Not supported by NDX indices.
- \param iUnique xbtrue - Unique.<br>xbFalse - Not unique.
- \param iOverLay xbTrue - Overlay if file already exists.<br>xbFalse - Don't overlay.
- \param vpTag Output from method Pointer to vptag pointer.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbIxNdx::CreateTag( const xbString &sName, const xbString &sKey,
- const xbString &, xbInt16, xbInt16 iUnique, xbInt16 iOverLay, void **vpTag ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbNdxTag *npTag = ndxTag;
- *vpTag = ndxTag;
-
- try{
- //xbString sMsg;
- SetFileName( sName );
-
- if( FileExists() && !iOverLay )
- return XB_FILE_EXISTS;
-
- if( FileIsOpen()){
- if(( iRc = xbTruncate(0)) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- if(( iRc = xbFclose()) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- npTag->npNodeChain = FreeNodeChain( npTag->npNodeChain );
- npTag->npCurNode = NULL;
- npTag->sKeyExpression.Set( "" );
-
- if( npTag->cpKeyBuf ){
- free( npTag->cpKeyBuf );
- npTag->cpKeyBuf = NULL;
- }
- if( npTag->cpKeyBuf2 ){
- free( npTag->cpKeyBuf2 );
- npTag->cpKeyBuf2 = NULL;
- }
- }
- if(( iRc = xbFopen( "w+b", dbf->GetShareMode())) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
-
- //set up the key expression
- npTag->exp = new xbExp( dbf->GetXbasePtr());
- if(( iRc = npTag->exp->ParseExpression( dbf, sKey )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
-
- switch( npTag->exp->GetReturnType()){
- case XB_EXP_CHAR:
- npTag->cKeyType = 'C';
- npTag->iKeyType = 0;
- npTag->iKeyLen = npTag->exp->GetResultLen();
- break;
-
- case XB_EXP_NUMERIC:
- npTag->cKeyType = 'F';
- npTag->iKeyType = 1;
- npTag->iKeyLen = 8;
- break;
-
- case XB_EXP_DATE:
- npTag->cKeyType = 'D';
- npTag->iKeyType = 1;
- npTag->iKeyLen = 8;
- break;
-
- default:
- iErrorStop = 140;
- iRc = XB_INVALID_INDEX;
- throw iRc;
- }
-
- npTag->iUnique = iUnique;
- npTag->ulRootBlock = 1L;
- npTag->ulTotalBlocks = 2l;
- npTag->sKeyExpression = sKey;
-
- GetFileNamePart( npTag->sTagName );
-
- if( npTag->iKeyLen > 100 ){
- iErrorStop = 150;
- throw iRc;
- }
-
- npTag->iKeyItemLen = npTag->iKeyLen + 8;
- while(( npTag->iKeyItemLen % 4 )!= 0 ) npTag->iKeyItemLen++;
-
- npTag->iKeysPerBlock = (xbInt16) (GetBlockSize() - 8 ) / npTag->iKeyItemLen;
- ndxTag->cpKeyBuf = (char *) malloc( (size_t) ndxTag->iKeyLen );
- ndxTag->cpKeyBuf2 = (char *) malloc( (size_t) ndxTag->iKeyLen );
-
- if(( iRc = WriteHeadBlock(0)) != XB_NO_ERROR ){
- iErrorStop = 160;
- throw iRc;
- }
-
- //write out block binary zeroes
- char buf[512];
- memset( buf, 0x00, 512 );
- if(( iRc = xbFwrite( buf, 1, 512 )) != XB_NO_ERROR ){
- iErrorStop = 170;
- throw iRc;
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxNdx::CreateTag() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/***********************************************************************/
-//! @brief Delete a key.
-/*!
- This routine deletes a key from a supplied node.
- \param vpTag Tag to delete key on.
- \param npNode Node to delete key on.
- \param iSlotNo Slot number of key to delete.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbIxNdx::DeleteFromNode( void *vpTag, xbIxNode * npNode, xbInt16 iSlotNo )
-{
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbNdxTag * npTag;
- vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
-
- try{
-
- xbInt32 lKeyCnt = GetKeyCount( npNode );
- xbInt16 iLen = (lKeyCnt - iSlotNo - 1) * npTag->iKeyItemLen;
- if( !IsLeaf( vpTag, npNode ))
- iLen += 4;
-
- if( iLen > 0 ){
- char *pTrg = npNode->cpBlockData;
- pTrg += (4 + (npTag->iKeyItemLen * (iSlotNo)) ); //lTrgPos;
- char *pSrc = pTrg;
- pSrc += npTag->iKeyItemLen;
- memmove( pTrg, pSrc, (size_t) iLen );
- }
-
- // set the new number of keys
- ePutUInt32( npNode->cpBlockData, (xbUInt32) lKeyCnt - 1 );
-
- // write out the block
- if(( iRc = WriteBlock( npNode->ulBlockNo, GetBlockSize(), npNode->cpBlockData )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxNdx::DeleteFromNode() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return XB_NO_ERROR;
-}
-
-/***********************************************************************/
-//! @brief Delete a key.
-/*!
- This routine deletes a key. It assumes the key to delete
- is the current key in the node chain.
-
- \param vpTag Tag to delete key on.
-
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbIxNdx::DeleteKey( void *vpTag ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbNdxTag * npTag;
- vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
-
- // save copy of node chain to reset to after delete completed
- xbIxNode *npSaveNodeChain = npTag->npNodeChain;
- npTag->npNodeChain = NULL;
- xbIxNode * npSaveCurNode = npTag->npCurNode;
-
- try{
-
- xbString sMsg;
-
- if(( iRc = xbIxNdx::KeySetPosDel( npTag )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- // Delete key needs to handle two scenarios
- // 1 - if the delete is on the only key of a leaf node, then traverse up the tree, trimming as needed
- // 2 - if the last key on a node is deleted, and the key value is not the same as the prev key value
- // go up the tree looking for an interior node needing updated key value
-
- xbInt32 lOrigKeyCnt = GetKeyCount( npTag->npCurNode );
- if(( iRc = DeleteFromNode( npTag, npTag->npCurNode, npTag->npCurNode->iCurKeyNo )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
-
- if( lOrigKeyCnt == 1 ){
- // scenario 1
- xbBool bDone = xbFalse;
- xbBool bIsLeaf = xbFalse;
- xbInt32 lKeyCnt;
- npTag->npCurNode = npTag->npCurNode->npPrev;
-
- while( npTag->npCurNode && !bDone ){
- lKeyCnt = GetKeyCount( npTag->npCurNode );
- bIsLeaf = IsLeaf( npTag, npTag->npCurNode );
- if( lKeyCnt > 0 ){
- if(( iRc = DeleteFromNode( npTag, npTag->npCurNode, npTag->npCurNode->iCurKeyNo )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- }
- if( (bIsLeaf && lKeyCnt > 1) || (!bIsLeaf && lKeyCnt > 0) )
- bDone = xbTrue;
- else
- npTag->npCurNode = npTag->npCurNode->npPrev;
- }
- } else if( npTag->npCurNode->iCurKeyNo == (xbUInt32) lOrigKeyCnt - 1 ){
-
- // scenario 2
- // if last two keys identical, then nothing to do, else go up looking for a key to change
- if( memcmp( GetKeyData( npTag->npCurNode, npTag->npCurNode->iCurKeyNo, npTag->iKeyItemLen ),
- GetKeyData( npTag->npCurNode, npTag->npCurNode->iCurKeyNo-1, npTag->iKeyItemLen ),
- (size_t) npTag->iKeyLen )){
-
- xbIxNode *pNode = npTag->npCurNode->npPrev;
- char *pSrc = GetKeyData( npTag->npCurNode, npTag->npCurNode->iCurKeyNo-1, npTag->iKeyItemLen );
-
- while( pNode && pNode->ulBlockNo != npTag->ulRootBlock && pNode->iCurKeyNo == (xbUInt32) GetKeyCount( pNode ) )
- pNode = pNode->npPrev;
- if( pNode ){
- if( pNode->iCurKeyNo < (xbUInt32) GetKeyCount( pNode )){
- char *pTrg = pNode->cpBlockData;
- pTrg += 12 + (pNode->iCurKeyNo * (xbUInt32) npTag->iKeyItemLen);
- for( xbInt16 i = 0; i < npTag->iKeyLen; i++ )
- *pTrg++ = *pSrc++;
-
- // write out the block
- if(( iRc = WriteBlock( pNode->ulBlockNo, GetBlockSize(), pNode->cpBlockData )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- }
- }
- }
- }
-
- // restore node chain to pre delete status (which should be post add status)
- npTag->npNodeChain = FreeNodeChain( npTag->npNodeChain );
- npTag->npNodeChain = npSaveNodeChain;
- npTag->npCurNode = npSaveCurNode;
-
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxNdx::DeleteKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- if( npSaveNodeChain ){
- npTag->npNodeChain = npSaveNodeChain;
- npSaveNodeChain = FreeNodeChain( npSaveNodeChain );
- npTag->npCurNode = npSaveCurNode;
- }
- }
- return iRc;
-}
-
-
-/***********************************************************************/
-//! @brief Delete tag.
-/*!
- In the case of an ndx tag, it deletes the ndx file as it contains
- only one tag.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbIxNdx::DeleteTag( void * ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- //xbNdxTag * npTag;
- //vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
-
- try{
-
- // if open, close it
- if( FileIsOpen()){
- if(( iRc = Close()) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- }
- // delete file
- if(( iRc = xbRemove()) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
-
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxNdx::DeleteTag() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-/***********************************************************************/
-#ifdef XB_DEBUG_SUPPORT
-
-//! @brief Dump a block for a given tag.
-/*!
- Dump blocks for given tag for debugging purposes.
- \param iOpt Output message destination<br>
- 0 = stdout<br>
- 1 = Syslog<br>
- 2 = Both<br>
- \param vpTag - Not required for single tag NDX files.
- \returns void
-*/
-
-xbInt16 xbIxNdx::DumpTagBlocks( xbInt16 iOpt, void * ){
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
- xbUInt32 lNoOfKeys;
- char *p;
- xbString s;
- xbBool bIsLeaf = false;
-
- try{
- if( !FileIsOpen()){
- iRc = XB_NOT_OPEN;
- iErrorStop = 100;
- throw iRc;
- }
-
- xbUInt32 ulStartBlock;
- xbUInt32 ulEndBlock;
- ulStartBlock = 1;
- ulEndBlock = ndxTag->ulTotalBlocks;
-
- for( xbUInt32 lBlk = ulStartBlock; lBlk < ulEndBlock; lBlk++ ){
-
- memset( cNodeBuf, 0x00, XB_NDX_BLOCK_SIZE );
- if(( iRc = ReadBlock( lBlk, XB_NDX_BLOCK_SIZE, cNodeBuf )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- p = cNodeBuf;
- lNoOfKeys = eGetUInt32( p );
-
- if( eGetUInt32( p + 4 ) > 0 ){
- bIsLeaf = false;
- s.Sprintf( "Node # %ld - Interior Node - Key Type [%c] Key Count [%ld]", lBlk, ndxTag->cKeyType, lNoOfKeys );
- } else {
- bIsLeaf = true;
- s.Sprintf( "Node # %ld - Leaf Node - Key Type [%c] Key count [%ld]", lBlk, ndxTag->cKeyType, lNoOfKeys );
- }
- xbase->WriteLogMessage( s, iOpt );
- xbase->WriteLogMessage( "Key Child Dbf Rec Key", iOpt );
- p += 4;
- xbUInt32 ulLeftBranch;
- xbUInt32 ulRecNo;
- xbString sKey;
- xbDouble d;
-
- xbUInt32 l;
- for( l = 0; l < lNoOfKeys; l++ ){
- ulLeftBranch = eGetUInt32( p );
- p+= 4;
- ulRecNo = eGetUInt32( p );
- p+= 4;
- if( ndxTag->cKeyType == 'C' ){
- sKey.Assign( p, 1, (xbUInt32) ndxTag->iKeyLen );
- } else if( ndxTag->cKeyType == 'D' ){
- xbInt32 lDate = (xbInt32) eGetDouble( p );
- xbDate dt( lDate );
- //xbString s2;
- //dt.JulToDate8( lDate, s2 );
- sKey.Sprintf( "%ld - %s", lDate, dt.Str());
- } else {
- d = eGetDouble( p );
- sKey.Sprintf( "%f", d );
- }
- p+= (ndxTag->iKeyItemLen-8);
-
- s.Sprintf( "%3d %9d %9d %s", l+1, ulLeftBranch, ulRecNo, sKey.Str() );
- xbase->WriteLogMessage( s, iOpt );
- }
- if( !bIsLeaf ){
- ulLeftBranch = eGetUInt32( p );
- s.Sprintf( "%3d %9d", l+1, ulLeftBranch );
- xbase->WriteLogMessage( s, iOpt );
- }
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxNdx::DumpTagBlocks() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-/***********************************************************************/
-//! @brief Dump index file header.
-/*!
- Dump a index file header for debugging purposes.
- \param iOpt Output message destination<br>
- 0 = stdout<br>
- 1 = Syslog<br>
- 2 = Both<br>
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbIxNdx::DumpHeader( xbInt16 iOpt, xbInt16 ){
- xbString s;
- xbInt16 iRc;
-
- if(( iRc = ReadHeadBlock( 1 )) != XB_NO_ERROR )
- return iRc;
-
- s.Sprintf( "Index Header Node for %s", GetFileName().Str());
- xbase->WriteLogMessage( s, iOpt );
- s.Sprintf( "--------------------------------" );
- xbase->WriteLogMessage( s, iOpt );
- s.Sprintf( "Root block = %ld", ndxTag->ulRootBlock );
- xbase->WriteLogMessage( s, iOpt );
- s.Sprintf( "Total blocks = %ld", ndxTag->ulTotalBlocks );
- xbase->WriteLogMessage( s, iOpt );
- s.Sprintf( "Key types = %c,%d", ndxTag->cKeyType, ndxTag->iKeyType );
- xbase->WriteLogMessage( s, iOpt );
- s.Sprintf( "Key Length = %d", ndxTag->iKeyLen );
- xbase->WriteLogMessage( s, iOpt );
- s.Sprintf( "Keys Per Block = %d", ndxTag->iKeysPerBlock );
- xbase->WriteLogMessage( s, iOpt );
- s.Sprintf( "Key Item Len = %ld", ndxTag->iKeyItemLen );
- xbase->WriteLogMessage( s, iOpt);
- s.Sprintf( "Serial No = %d", ndxTag->cSerNo );
- xbase->WriteLogMessage( s, iOpt);
- s.Sprintf( "Unique = %d", ndxTag->iUnique );
- xbase->WriteLogMessage( s, iOpt );
- s.Sprintf( "KeyExpression = %s", ndxTag->sKeyExpression.Str() );
- xbase->WriteLogMessage( s, iOpt );
- return XB_NO_ERROR;
-}
-/***********************************************************************/
-//! @brief Dump the index for a tag.
-/*!
- Stub.
- \returns XB_NO_ERROR
-*/
-xbInt16 xbIxNdx::DumpIxForTag( void *, xbInt16 )
-{
- return XB_NO_ERROR;
-}
-/***********************************************************************/
-//! @brief Dump the index node chain.
-/*!
- Dump the index node chain for debugging purposes.
- \param vpTag Tag of node chain to dump.
- \param iOpt Output message destination<br>
- 0 = stdout<br>
- 1 = Syslog<br>
- 2 = Both<br>
- \returns void
-*/
-void xbIxNdx::DumpIxNodeChain( void *vpTag, xbInt16 iOpt ) const
-{
-
- xbNdxTag * npTag;
- vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
-
- xbString s( "Dump Node Chain" );
- xbase->WriteLogMessage( s, iOpt );
-
- if( npTag->npNodeChain ){
- xbIxNode *n = npTag->npNodeChain;
- xbInt16 iCtr = 0;
- char cLeaf;
- s.Sprintf( "Cnt\tThis Prev Next CurKeyNo BlockNo NoOfKeys Type" );
- xbase->WriteLogMessage( s, iOpt );
- while( n ){
- IsLeaf( vpTag, n ) ? cLeaf = 'L' : cLeaf = 'I';
- s.Sprintf( "%d\t%08x %08x %08x %08d %08d %08d %c",
- iCtr++, n, n->npPrev, n->npNext, n->iCurKeyNo,
- n->ulBlockNo, eGetUInt32( n->cpBlockData ), cLeaf );
- xbase->WriteLogMessage( s, iOpt );
- n = n->npNext;
- }
- } else {
- s = "Empty Node Chain";
- xbase->WriteLogMessage( s, iOpt );
- }
-}
-/***********************************************************************/
-//! @brief Dump node.
-/*!
- Dump a node for debugging purposes.
- \param vpTag Tag of node chain to dump.
- \param pNode Node to dump.
- \param iOpt Output message destination<br>
- 0 = stdout<br>
- 1 = Syslog<br>
- 2 = Both<br>
- \returns XB_INVALID_OBJECT<br>XB_NO_ERROR
-*/
-
-xbInt16 xbIxNdx::DumpNode( void *vpTag, xbIxNode *pNode, xbInt16 iOpt ) const
-{
- xbString s;
- xbString sKey;
- xbUInt32 lLeftBranch;
- xbUInt32 lRecNo;
- xbDouble d;
-
- if( !pNode )
- return XB_INVALID_OBJECT;
-
- xbIx::DumpNode( vpTag, pNode, iOpt );
-
- xbNdxTag * npTag;
- vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
-
- xbUInt32 lNoOfKeys = eGetUInt32( pNode->cpBlockData );
- xbBool bIsLeaf = IsLeaf( vpTag, pNode );
-
- if( bIsLeaf )
- xbase->WriteLogMessage( "Leaf node", iOpt );
- else
- xbase->WriteLogMessage( "Interior node", iOpt );
-
- s.Sprintf( "Key type = [%c] No Of Keys =[%d] Prev =[%x] Next =[%x]", npTag->cKeyType, lNoOfKeys, pNode->npPrev, pNode->npNext );
- xbase->WriteLogMessage( s, iOpt );
-
- char *p = pNode->cpBlockData;
- p += 4;
-
- xbUInt32 l;
- for( l = 0; l < lNoOfKeys; l++ ){
-
- lLeftBranch = eGetUInt32( p );
- p+= 4;
- lRecNo = eGetUInt32( p );
- p+= 4;
-
- if( npTag->cKeyType == 'C' ){
- sKey.Assign( p, 1, (xbUInt32) npTag->iKeyLen );
- } else if( npTag->cKeyType == 'D' ){
- xbInt32 lDate = (xbInt32) eGetDouble( p );
- xbDate dt( lDate );
- sKey.Sprintf( "%ld - %s", lDate, dt.Str());
- } else {
- d = eGetDouble( p );
- sKey.Sprintf( "%f", d );
- }
- p+= (npTag->iKeyItemLen-8);
- s.Sprintf( "%3d %9d %9d %s", l+1, lLeftBranch, lRecNo, sKey.Str() );
- xbase->WriteLogMessage( s, iOpt );
- }
- if( !bIsLeaf ){
- lLeftBranch = eGetUInt32( p );
- s.Sprintf( "%3d %9d", l+1, lLeftBranch );
- xbase->WriteLogMessage( s.Str(), iOpt );
- }
- return XB_NO_ERROR;
-}
-#endif
-/***********************************************************************/
-//! @brief Find key
-/*!
- \param vpTag Pointer to tag to search.
- \param vpKey Void pointer to key data to search on.
- \param lSearchKeyLen Length of key to search for.
- \param iRetrieveSw xbTrue - Retrieve the record if key found.<br>
- xbFalse - Don't retrieve record, check for key existence only.
- \returns XB_NO_ERROR - Key found.<br>
- XB_NOT_FOUND - Key not found.<br>
- <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbIxNdx::FindKey( void *vpTag, const void *vpKey, xbInt32 lSearchKeyLen,
- xbInt16 iRetrieveSw ){
-
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
- xbString sMsg;
- // xbInt16 iFindSts;
- try{
- // clean up any previous table updates before moving on
- if( iRetrieveSw ){
- if( dbf->GetDbfStatus() == XB_UPDATED ){
- if( dbf->GetAutoCommit() == 1 ){
- if(( iRc = dbf->Commit()) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- } else {
- if(( iRc = dbf->Abort()) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- }
- }
- }
-
- xbUInt32 ulNoOfKeys;
- xbNdxTag * npTag;
- vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
- char cKeyType = npTag->cKeyType;
-
- if( npTag->npNodeChain ){
-
- // determine if the index has been updated since the last time it was used
- time_t tFileTs;
- if(( iRc = GetFileMtime( tFileTs )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- if( npTag->tNodeChainTs < tFileTs ){
- npTag->npNodeChain = FreeNodeChain( npTag->npNodeChain );
- npTag->npCurNode = NULL;
- if(( iRc = ReadHeadBlock( 1 )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- if(( iRc = GetBlock( npTag, (npTag->ulRootBlock ), 1, (xbUInt32) npTag->iKeyItemLen )) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
- } else {
- // pop up the chain looking for appropriate starting point
- xbBool bDone = false;
- xbIxNode * TempIxNode;
- while( npTag->npCurNode && !bDone && npTag->npCurNode->ulBlockNo != npTag->ulRootBlock ){ // not root node
- iRc = CompareKey( cKeyType, vpKey, GetKeyData( npTag->npCurNode, 0, npTag->iKeyItemLen ), (size_t) lSearchKeyLen );
- if( iRc <= 0 ){
- TempIxNode = npTag->npCurNode;
- npTag->npCurNode = npTag->npCurNode->npPrev;
- TempIxNode = FreeNodeChain( TempIxNode );
- } else {
- // get the number of keys on the block and compare the key to the rightmost key
- xbUInt32 ulKeyCtr = eGetUInt32( npTag->npCurNode->cpBlockData ) - 1;
- iRc = CompareKey( cKeyType, vpKey, GetKeyData( npTag->npCurNode, ulKeyCtr, npTag->iKeyItemLen), (size_t) lSearchKeyLen );
-
- if( iRc > 0 ){
- TempIxNode = npTag->npCurNode;
- npTag->npCurNode = npTag->npCurNode->npPrev;
- TempIxNode = FreeNodeChain( TempIxNode );
- } else {
- bDone = true;
- }
- }
- }
- }
- } else {
- if(( iRc = GetBlock( npTag, (npTag->ulRootBlock ), 1, (xbUInt32) npTag->iKeyItemLen )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
- }
-
-
- // if cur node is the base node and no keys on this node, then the index is empty
- if( npTag->ulRootBlock == npTag->npCurNode->ulBlockNo ){
- ulNoOfKeys = eGetUInt32( npTag->npCurNode->cpBlockData );
- if( ulNoOfKeys == 0 && IsLeaf( npTag, npTag->npCurNode )){
- // iRc = XB_EMPTY;
-
- iRc = XB_NOT_FOUND;
- return iRc;
- }
- }
-
- // should be in the appropriate position in the node chain to continue the search from here
- // run down through the interior nodes
- xbInt16 iSearchRc = 0;
- xbUInt32 ulKeyPtr = 0;
-
- while( !IsLeaf( npTag, npTag->npCurNode ) ){
-
- // get the number of keys on the block and compare the key to the rightmost key
- ulNoOfKeys = eGetUInt32( npTag->npCurNode->cpBlockData );
- if( ulNoOfKeys == 0 ) // interior nodes can have zero keys, just a link to the next lower node
- npTag->npCurNode->iCurKeyNo = 0;
- else
- {
- iRc = CompareKey( cKeyType, vpKey, GetKeyData( npTag->npCurNode, ulNoOfKeys - 1, npTag->iKeyItemLen), (size_t) lSearchKeyLen );
- if( iRc > 0 ){
- npTag->npCurNode->iCurKeyNo = ulNoOfKeys;
- } else {
- npTag->npCurNode->iCurKeyNo = (xbUInt32) BSearchBlock( cKeyType, npTag->npCurNode,
- (xbInt32) npTag->iKeyItemLen, vpKey, (xbInt32) lSearchKeyLen, iSearchRc );
- }
- }
-
- if(( iRc = GetKeyPtr( npTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 160;
- throw iRc;
- }
-
- if(( iRc = GetBlock( npTag, ulKeyPtr, 1, (xbUInt32) npTag->iKeyItemLen )) != XB_NO_ERROR ){
- iErrorStop = 170;
- throw iRc;
- }
- }
-
- // should be on a the correct leaf node, it may or may not contain the actual key
- ulNoOfKeys = eGetUInt32( npTag->npCurNode->cpBlockData );
- xbInt16 iCompRc = 0;
-
- if( ulNoOfKeys == 0 ){
- iRc = XB_NOT_FOUND;
- return iRc;
- } else {
-
- iRc = BSearchBlock( cKeyType, npTag->npCurNode, npTag->iKeyItemLen, vpKey, lSearchKeyLen, iCompRc );
-
- // iCompRc
- // 0 found
- // < 0 eof encountered, search key > last key in file
- // > 0 not found, positioned to next key
-
-
- // std::cout << "xbIxNdx::FindKey -Rc = " << iRc << " CompRc = " << iCompRc << " NoOfKeys = " << ulNoOfKeys << " blk no = " << npTag->npCurNode->ulBlockNo << "\n";
-
- if( iCompRc >= 0 ){
- npTag->npCurNode->iCurKeyNo = (xbUInt32) iRc;
- if( iRetrieveSw ){
- xbUInt32 ulKey = npTag->npCurNode->iCurKeyNo;
- if( ulKey >= ulNoOfKeys ) // if position past end of keys, need to go back one and position to last key
- ulKey--;
-
- if(( iRc = GetDbfPtr( vpTag, ulKey, npTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 180;
- throw iRc;
- }
- if(( iRc = dbf->GetRecord( ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 190;
- throw iRc;
- }
- }
- }
- }
-
- if( iCompRc == 0 )
- return XB_NO_ERROR;
- else if( iCompRc > 0 )
- return XB_NOT_FOUND;
- else
- return XB_EOF;
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxNdx::FindKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-/***********************************************************************/
-//! @brief Find key for current record
-/*!
- This routine is called when updating a key.
-
- \param vpTag Pointer to tag to search.
- XB_NOT_FOUND Key not found.<br>
- <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbIxNdx::FindKeyForCurRec( void * vpTag )
-{
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbNdxTag * npTag;
- vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
-
- try{
- if(( iRc = CreateKey( vpTag, 0 )) < XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
-
- // find key
- iRc = FindKey( vpTag, npTag->cpKeyBuf, npTag->iKeyLen, 0 );
- if( iRc == XB_NOT_FOUND || iRc == XB_EMPTY || iRc == XB_EOF )
- return iRc;
-
- if( iRc != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
-
- // if keys are unique, and the recrd number matches, then we are good
- if( GetUnique() )
- return XB_NO_ERROR;
-
- // get here if key found and not unique, need to move forward looking for correct rec no
- xbUInt32 ulDbfRecNo = dbf->GetCurRecNo();
- xbBool bKeysMatch = true; // keys match?
- xbBool bCurRecsMatch = false; // cur recod number matches?
- xbUInt32 ulIxRecNo = 0;
- char cKeyType = GetKeyType( vpTag );
-
- if(( iRc = GetDbfPtr( vpTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulIxRecNo )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- if( ulIxRecNo == ulDbfRecNo )
- bCurRecsMatch = true;
-
- xbInt16 iCompRc;
- while( !bCurRecsMatch && bKeysMatch ){
-
- if(( iRc = GetNextKey( vpTag, 0 )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
-
- // do compare key here
- iCompRc = CompareKey( cKeyType, npTag->cpKeyBuf, GetKeyData( npTag->npCurNode, 0, npTag->iKeyItemLen ), (size_t) npTag->iKeyLen );
- if( iCompRc != 0 )
- bKeysMatch = false;
- else{
- if(( iRc = GetDbfPtr( vpTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulIxRecNo )) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
- if( ulIxRecNo == ulDbfRecNo )
- bCurRecsMatch = true;
- }
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxNdx::FindKeyForCurRec() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return XB_NO_ERROR;
-}
-
-/***********************************************************************/
-//! @brief Get dbf record number for given key number.
-/*!
- \param vpTag Tag to retrieve dbf rec number on.
- \param iKeyNo Key number for retrieval
- \param np Pointer to node
- \param ulDbfPtr- Output dbf record number
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbIxNdx::GetDbfPtr( void *vpTag, xbInt16 iKeyNo, xbIxNode *np, xbUInt32 &ulDbfPtr ) const {
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
-
- try{
- #ifdef XB_DEBUG_SUPPORT
- // turn this off in production mode for better performance
- xbUInt32 ulNoOfKeys = eGetUInt32 ( np->cpBlockData );
- if( iKeyNo < 0 || iKeyNo > (xbInt16) --ulNoOfKeys ){
- iErrorStop = 100;
- throw XB_INVALID_KEYNO;
- }
- #endif
-
- xbNdxTag * npTag;
- vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
- char *p = ( np->cpBlockData);
- p += (8 + (iKeyNo * npTag->iKeyItemLen));
- ulDbfPtr = eGetUInt32 ( p );
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxNdx::GetDbfPtr() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-/***********************************************************************/
-//! @brief Get the first key for the given tag.
-/*!
- \param vpTag Tag to retrieve first key on.
- \param iRetrieveSw xbTrue - Retrieve the record on success.<br>
- xbFalse - Don't retrieve record.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbIxNdx::GetFirstKey( void *vpTag, xbInt16 iRetrieveSw ){
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbNdxTag * npTag;
- vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
-
- try{
- // clear out any history
- if( npTag->npNodeChain ){
- npTag->npNodeChain = FreeNodeChain( npTag->npNodeChain );
- npTag->npCurNode = NULL;
- }
- if(( iRc = ReadHeadBlock( 1 )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- // lRootBlock is now available
- if(( iRc = GetBlock( npTag, npTag->ulRootBlock, 1, (xbUInt32) npTag->iKeyItemLen )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- // if no keys on this node, and it's a leaf node then the index is empty
- xbUInt32 ulKeyPtr = eGetUInt32( npTag->npCurNode->cpBlockData );
- if( ulKeyPtr == 0 && IsLeaf( npTag, npTag->npCurNode )){
- iRc = XB_EMPTY;
- return iRc;
- }
- while( !IsLeaf( npTag, npTag->npCurNode )) // go down the chain looking for a leaf node
- {
- if(( iRc = GetKeyPtr( npTag, 0, npTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- if(( iRc = GetBlock( npTag, ulKeyPtr, 1, (xbUInt32) npTag->iKeyItemLen )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- }
- if( iRetrieveSw ){
- if(( iRc = GetDbfPtr( npTag, 0, npTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
- if(( iRc = dbf->GetRecord( ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
- }
- }
- catch( xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxNdx::GetFirstKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-/***********************************************************************/
-//! @brief Get the key expression for the given tag.
-/*!
- \param vpTag Tag to retrieve expression from.
- \returns Key expression.
-*/
-
-xbString &xbIxNdx::GetKeyExpression( const void * vpTag ) const{
- xbNdxTag * npTag;
- vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
- return npTag->sKeyExpression;
-}
-
-
-/***********************************************************************/
-//! @brief Get the key filter for the given tag.
-/*!
- NDX index files do not support filters. This returns NULL.
- \returns NULL.
-*/
-
-xbString &xbIxNdx::GetKeyFilter( const void * ) const{
- return sNullString;
-}
-/***********************************************************************/
-//! @brief Get the key length for the given tag.
-/*!
- \param vpTag Tag to retrieve key length for.
- \returns Length of key.
-*/
-xbInt32 xbIxNdx::GetKeyLen( const void * vpTag ) const{
- xbNdxTag * npTag;
- vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
- return npTag->iKeyLen;
-}
-/***********************************************************************/
-//! @brief Get child node number for given key number.
-/*!
- \param vpTag Tag to retrieve dbf rec number on.
- \param iKeyNo Key number for retrieval
- \param np Pointer to node
- \param ulKeyPtr Output node number
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbIxNdx::GetKeyPtr( void *vpTag, xbInt16 iKeyNo, xbIxNode *np, xbUInt32 &ulKeyPtr ) const {
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
- try{
- #ifdef XB_DEBUG_SUPPORT
- // turn this off in production mode for better performance
- xbUInt32 ulNoOfKeys = eGetUInt32 ( np->cpBlockData );
- if( iKeyNo < 0 || iKeyNo > (xbInt16) ulNoOfKeys ){
- iErrorStop = 100;
- throw XB_INVALID_KEYNO;
- }
- #endif
- xbNdxTag * npTag;
- vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
- char *p = ( np->cpBlockData);
- p += (4 + (iKeyNo * npTag->iKeyItemLen));
- ulKeyPtr = eGetUInt32 ( p );
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxNdx::GetKeyPtr() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/***********************************************************************/
-//! @brief Returns key update status.
-/*!
- \param vpTag Tag to check status on.
- \returns XB_UPD_KEY Key updated.<br>
- XB_DEL_KEY Key deleted.<br>
- XB_ADD_KEY Key added.<br>
- 0 No key updates
-
-*/
-xbInt16 xbIxNdx::GetKeySts( void *vpTag ) const{
- xbNdxTag * npTag;
- vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
- return npTag->iKeySts;
-}
-/***********************************************************************/
-//! @brief Get character key type for given tag.
-/*!
- \param vpTag Tag to retrieve key type for.
- \returns Char key type.
-*/
-
-char xbIxNdx::GetKeyType( const void * vpTag ) const{
- xbNdxTag * npTag;
- vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
- return npTag->cKeyType;
-}
-
-/***********************************************************************/
-//! @brief Get numeric key type for given tag.
-/*!
- \param vpTag Tag to retrieve first key for.
- \returns Numeric key type.
-*/
-xbInt16 xbIxNdx::GetKeyTypeN( const void * vpTag ) const{
- xbNdxTag * npTag;
- vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
- return npTag->iKeyType;
-}
-/***********************************************************************/
-//! @brief Get the last key for the given tag.
-/*!
- \param vpTag Tag to retrieve last key on.
- \param iRetrieveSw xbTrue - Retrieve the record on success.<br>
- xbFalse - Don't retrieve record.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbIxNdx::GetLastKey( void *vpTag, xbInt16 iRetrieveSw ){
- return GetLastKey( 0, vpTag, iRetrieveSw );
-// return GetLastKey( 0, vpTag, 1 );
-
-}
-/***********************************************************************/
-//! @brief Get the last key for the given tag and starting node.
-/*!
- \param ulNodeNo Starting node
- \param vpTag Tag to retrieve last key on.
- \param iRetrieveSw xbTrue - Retrieve the record if key found.<br>
- xbFalse - Don't retrieve record.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbIxNdx::GetLastKey( xbUInt32 ulNodeNo, void *vpTag, xbInt16 iRetrieveSw ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbUInt32 ulKeyPtr = 0;
- xbUInt32 ulNoOfKeys = 0;
- xbNdxTag * npTag;
- vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
-
- try{
- // clear out any history
- if( npTag->npNodeChain ){
- npTag->npNodeChain = FreeNodeChain( npTag->npNodeChain );
- npTag->npCurNode = NULL;
- }
- if( ulNodeNo == 0 ){
- if(( iRc = ReadHeadBlock( 1 )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- // lRootBlock is now available
- if(( iRc = GetBlock( npTag, npTag->ulRootBlock, 1, (xbUInt32) npTag->iKeyItemLen )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- } else {
- if(( iRc = GetBlock( npTag, ulNodeNo, 1, (xbUInt32) npTag->iKeyItemLen )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- }
- // if no keys on this node, then the index is empty
- ulNoOfKeys = eGetUInt32( npTag->npCurNode->cpBlockData );
- if( ulNoOfKeys == 0 && IsLeaf( npTag, npTag->npCurNode )){
- iRc = XB_EMPTY;
- return iRc;
- }
- npTag->npCurNode->iCurKeyNo = ulNoOfKeys;
- while( !IsLeaf( npTag, npTag->npCurNode ) ){ // go down the chain looking for a leaf node
- npTag->npCurNode->iCurKeyNo = eGetUInt32( npTag->npCurNode->cpBlockData );
- if(( iRc = GetKeyPtr( npTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- if(( iRc = GetBlock( npTag, ulKeyPtr, 1, (xbUInt32) npTag->iKeyItemLen )) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
- ulNoOfKeys = eGetUInt32( npTag->npCurNode->cpBlockData );
- npTag->npCurNode->iCurKeyNo = ulNoOfKeys;
- }
- // get here on a leaf node, it has one fewer iCurKeyNo
- npTag->npCurNode->iCurKeyNo--;
- if( iRetrieveSw ){
- ulNoOfKeys = eGetUInt32( npTag->npCurNode->cpBlockData );
- if(( iRc = GetDbfPtr( npTag, ulNoOfKeys - 1, npTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
- if(( iRc = dbf->GetRecord( ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 160;
- throw iRc;
- }
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxNdx::GetLastKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/***********************************************************************/
-//! @brief Get the last key for a block number.
-/*!
- \param vpTag Tag to retrieve first key on.
- \param ulBlockNo Block number for key retrieval.
- \param cpBuf output buffer for key placement
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbIxNdx::GetLastKeyForBlockNo( void *vpTag, xbUInt32 ulBlockNo, char *cpBuf ){
-
- // returns the last key for a given block number
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
-
- xbNdxTag * npTag;
- vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
-
- try{
- xbIxNode * npSaveNodeChain = npTag->npNodeChain;
- xbIxNode * npSaveCurNode = npTag->npCurNode;
- npTag->npNodeChain = NULL;
-
- if(( iRc = GetLastKey( ulBlockNo, npTag, 0 )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- // set the key
- memcpy( cpBuf, GetKeyData( npTag->npCurNode, GetKeyCount( npTag->npCurNode ) - 1, npTag->iKeyItemLen ), (size_t) npTag->iKeyLen );
-
- // free memory
- npTag->npNodeChain = FreeNodeChain( npTag->npNodeChain );
- npTag->npNodeChain = npSaveNodeChain;
- npTag->npCurNode = npSaveCurNode;
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxNdx::GetLastKeyForBlockNo() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ) );
- }
- return iRc;
-}
-/***********************************************************************/
-//! @brief Get the next key for the given tag.
-/*!
- \param vpTag Tag to retrieve next key on.
- \param iRetrieveSw xbTrue - Retrieve the record on success.<br>
- xbFalse - Don't retrieve record.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbIxNdx::GetNextKey( void * vpTag, xbInt16 iRetrieveSw ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbNdxTag * npTag;
- vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
-
- try{
- if( !npTag->npNodeChain )
- return GetFirstKey( vpTag, iRetrieveSw );
-
- // more keys on this node? if yes, get the next one to the right
- xbUInt32 ulKeyPtr;
- if((eGetUInt32( npTag->npCurNode->cpBlockData ) -1) > npTag->npCurNode->iCurKeyNo ){
- npTag->npCurNode->iCurKeyNo++;
- if(( iRc = GetDbfPtr( npTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- if( iRetrieveSw ){
- if(( iRc = dbf->GetRecord( ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- } else {
- return iRc;
- }
- } else {
- return iRc;
- }
- }
- // if at end of head node, then eof
- if( npTag->npCurNode->ulBlockNo == npTag->ulRootBlock )
- return XB_EOF;
-
- // This logic assumes that interior nodes have n+1 left node no's where n is he the number of keys in the node
- xbIxNode * TempIxNode = npTag->npCurNode;
- npTag->npCurNode = npTag->npCurNode->npPrev;
- TempIxNode = FreeNodeChain( TempIxNode );
-
- while( npTag->npCurNode->iCurKeyNo >= eGetUInt32( npTag->npCurNode->cpBlockData ) &&
- (npTag->npCurNode->ulBlockNo != npTag->ulRootBlock )){
- TempIxNode = npTag->npCurNode;
- npTag->npCurNode = npTag->npCurNode->npPrev;
- TempIxNode = FreeNodeChain( TempIxNode );
- }
-
- // head node and at end of head node, then eof
- if( npTag->npCurNode->ulBlockNo == npTag->ulRootBlock &&
- npTag->npCurNode->iCurKeyNo == eGetUInt32( npTag->npCurNode->cpBlockData ))
- return XB_EOF;
-
- // move one to the right
- npTag->npCurNode->iCurKeyNo++;
-
- if(( iRc = GetKeyPtr( npTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
-
- if(( iRc = GetBlock( npTag, ulKeyPtr, 1, (xbUInt32) npTag->iKeyItemLen )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- while( !IsLeaf( npTag, npTag->npCurNode )) // go down the chain looking for a leaf node
- {
- if(( iRc = GetKeyPtr( npTag, 0, npTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
- if(( iRc = GetBlock( npTag, ulKeyPtr, 1, (xbUInt32) npTag->iKeyItemLen )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
- }
- if( iRetrieveSw ){
- if(( iRc = GetDbfPtr( npTag, 0, npTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 160;
- throw iRc;
- }
- if(( iRc = dbf->GetRecord( ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 170;
- throw iRc;
- }
- }
- }
- catch( xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxNdx::GetNextKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-/***********************************************************************/
-//! @brief Get the previous key for the given tag.
-/*!
- \param vpTag Tag to retrieve previous key on.
- \param iRetrieveSw xbTrue - Retrieve the record on success.<br>
- xbFalse - Don't retrieve record.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbIxNdx::GetPrevKey( void * vpTag, xbInt16 iRetrieveSw ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbNdxTag * npTag;
- vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
-
- // This method assumes last index call landed on a valid key.
- // If last call resulted in an error, this method will returns XB_BOF
-
- try{
- if( !npTag->npNodeChain )
- return GetLastKey( 0, vpTag, iRetrieveSw );
-
- xbUInt32 ulKeyPtr;
- if( npTag->npCurNode->iCurKeyNo > 0 ){
- npTag->npCurNode->iCurKeyNo--;
-
- if(( iRc = GetDbfPtr( npTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- if( iRetrieveSw ){
- if(( iRc = dbf->GetRecord( ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- } else {
- return iRc;
- }
- }
- }
-
- // next two lines might have been an issue
- if( npTag->npCurNode->ulBlockNo == npTag->ulRootBlock && GetKeyCount( npTag->npCurNode ) == 0 && IsLeaf( npTag, npTag->npCurNode ))
- return XB_EMPTY;
-
- if( npTag->npCurNode->ulBlockNo == npTag->ulRootBlock )
- return XB_BOF;
-
- // This logic assumes that interior nodes have n+1 left node no's where n is he the number of keys in the node
- xbIxNode * TempIxNode = npTag->npCurNode;
- npTag->npCurNode = npTag->npCurNode->npPrev;
- TempIxNode = FreeNodeChain( TempIxNode );
-
- while( npTag->npCurNode->iCurKeyNo == 0 &&
- (npTag->npCurNode->ulBlockNo != npTag->ulRootBlock )){
- TempIxNode = npTag->npCurNode;
- npTag->npCurNode = npTag->npCurNode->npPrev;
- TempIxNode = FreeNodeChain( TempIxNode );
- }
-
- // head node and at end of head node, then bof
- if( npTag->npCurNode->ulBlockNo == npTag->ulRootBlock &&
- npTag->npCurNode->iCurKeyNo == 0 )
- return XB_BOF;
-
- // move one to the left
- npTag->npCurNode->iCurKeyNo--;
-
- if(( iRc = GetKeyPtr( npTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
-
- if(( iRc = GetBlock( npTag, ulKeyPtr, 1, (xbUInt32) npTag->iKeyItemLen )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
-
- while( !IsLeaf( npTag, npTag->npCurNode )){ // go down the chain looking for a leaf node
- npTag->npCurNode->iCurKeyNo = eGetUInt32( npTag->npCurNode->cpBlockData );
- if(( iRc = GetKeyPtr( npTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
- if(( iRc = GetBlock( npTag, ulKeyPtr, 1, (xbUInt32) npTag->iKeyItemLen )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
- }
-
- npTag->npCurNode->iCurKeyNo = eGetUInt32( npTag->npCurNode->cpBlockData ) - 1;
- if( iRetrieveSw ){
- if(( iRc = GetDbfPtr( npTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 160;
- throw iRc;
- }
- if(( iRc = dbf->GetRecord( ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 170;
- throw iRc;
- }
- }
- }
-
- catch( xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxNdx::GetPrevKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-/***********************************************************************/
-//! @brief Get the sort order for given tag.
-/*!
- Ndx indices only support ascending keys.
- \returns 0
-*/
-xbBool xbIxNdx::GetSortOrder( void * ) const{
- return 0;
-}
-/***********************************************************************/
-//! @brief Get tag for tag number.
-/*!
- \returns Pointer to ndx tag.
-*/
-void * xbIxNdx::GetTag( xbInt16 ) const{
- return ndxTag;
-}
-/***********************************************************************/
-//! @brief Get tag for tag name.
-/*!
- \returns Pointer to ndx tag.
-*/
-void * xbIxNdx::GetTag( xbString & ) const{
- return ndxTag;
-}
-
-/***********************************************************************/
-//! @brief Get tag count.
-/*!
- NDX index files contain one tag.
- \returns 1
-*/
-
-xbInt16 xbIxNdx::GetTagCount() const{
- return 1;
-}
-/***********************************************************************/
-//! @brief Get tag name.
-/*!
- \returns Tag name.
-*/
-xbString &xbIxNdx::GetTagName( void * ) const {
-// char * xbIxNdx::GetTagName( void * ) const {
-
- return ndxTag->sTagName;
-
-}
-/***********************************************************************/
-//! @brief Get tag name.
-/*!
- \returns Tag name.
-*/
-const char * xbIxNdx::GetTagName( void *, xbInt16 ) const {
- return ndxTag->sTagName;
-}
-
-/***********************************************************************/
-//! @brief Get the unique setting for given tag.
-/*!
- \param vpTag Tag to unique setting on.
- \returns xbTrue - Unique index.<br> xbFalse - Not unique index.
-*/
-xbBool xbIxNdx::GetUnique( void * vpTag ) const{
- xbNdxTag * npTag;
- vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
- return npTag->iUnique;
-}
-
-/***********************************************************************/
-//! @brief Insert key into interior node.
-/*!
- Insert key into non-full interior node.<br>
- Assumes valid inputs
-
- \param vpTag Tag in play.
- \param npNode Node for insertion.
- \param iSlotNo Slot number to insert key.
- \param ulPtr Pointer number to insert.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbIxNdx::InsertNodeI( void *vpTag, xbIxNode *npNode, xbInt16 iSlotNo, xbUInt32 ulPtr ){
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- char *pTrg;
- xbInt16 iSrcPos;
- char *pLastKey = NULL;
- xbNdxTag * npTag;
- vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
-
- try{
- // update number of keys on the node
- xbInt32 lKeyCnt = GetKeyCount( npNode );
- iSrcPos = 12 + (iSlotNo * npTag->iKeyItemLen);
-
- char *pSrc = npNode->cpBlockData;
- pSrc += iSrcPos;
-
- // if not appending to the end of the node, make some room, move things to the right
- if( iSlotNo < lKeyCnt ) {
- xbInt16 iCopyLen = ((lKeyCnt - iSlotNo) * npTag->iKeyItemLen) - 4;
- pTrg = pSrc;
- pTrg += npTag->iKeyItemLen;
- memmove( pTrg, pSrc, (size_t) iCopyLen );
- }
-
- // get the right most key for the left part of the split node
- xbUInt32 ulKeyPtr2;
- if(( iRc = GetKeyPtr( vpTag, npNode->iCurKeyNo, npNode, ulKeyPtr2 )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- // get the new right key value for the freshly split node
- pLastKey = (char *) malloc((size_t) ndxTag->iKeyLen);
- if(( iRc = GetLastKeyForBlockNo( vpTag, ulKeyPtr2, pLastKey )) != XB_NO_ERROR ){
- iRc = 110;
- throw iRc;
- }
- // write the key value
- pTrg = pSrc;
- char *pTrg2 = pSrc;
- pSrc = pLastKey;
- for( xbInt16 i = 0; i < npTag->iKeyLen; i++ )
- *pTrg++ = *pSrc++;
-
- pTrg2 += (npTag->iKeyItemLen - 8);
- ePutUInt32( pTrg2, ulPtr );
- ePutInt32( npNode->cpBlockData, ++lKeyCnt );
-
- // write out the updated block to disk
- if(( iRc = WriteBlock( npNode->ulBlockNo, GetBlockSize(), npNode->cpBlockData )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- if( pLastKey )
- free( pLastKey );
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxNdx::InsertNodeI() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- if( pLastKey )
- free( pLastKey );
- }
- return iRc;
-}
-/***********************************************************************/
-//! @brief Insert key into leaf node.
-/*!
- Insert key into non-full leaf node.<br>
- Assumes valid inputs
-
- \param vpTag Tag in play.
- \param npNode Node for insertion.
- \param iSlotNo Slot number to insert key.
- \param ulPtr Pointer number to insert.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbIxNdx::InsertNodeL( void *vpTag, xbIxNode *npNode, xbInt16 iSlotNo,
- char * cpKeyBuf, xbUInt32 ulPtr ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- char *pSrc;
- char *pTrg;
- char *pKeyPos;
- xbString sMsg;
- xbNdxTag * npTag;
- vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
-
- try{
- xbInt32 lKeyCnt = GetKeyCount( npNode );
- xbInt16 iKeyPos = 4 + iSlotNo * npTag->iKeyItemLen;
- pKeyPos = npNode->cpBlockData;
- pKeyPos += iKeyPos;
-
- // if not appending to end, make space, move things right
- if( iSlotNo < lKeyCnt ) {
- xbInt16 iCopyLen = (lKeyCnt - iSlotNo) * npTag->iKeyItemLen;
- pTrg = pKeyPos;
- pTrg += npTag->iKeyItemLen;
- memmove( pTrg, pKeyPos, (size_t) iCopyLen );
- }
- // if leaf, write rec number
- pTrg = pKeyPos;
- memset( pTrg, 0x00, 4 );
- pTrg += 4;
- ePutUInt32( pTrg, ulPtr );
- pTrg += 4;
-
- // write the key value
- pSrc = cpKeyBuf;
- for( xbInt16 i = 0; i < npTag->iKeyLen; i++ )
- *pTrg++ = *pSrc++;
-
- // update number of keys on the node
- ePutInt32( npNode->cpBlockData, ++lKeyCnt );
-
- // write out the updated block to disk
- if(( iRc = WriteBlock( npNode->ulBlockNo, GetBlockSize(), npNode->cpBlockData )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxNdx::InsertNodeL() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-/***********************************************************************/
-//! @brief Determine node leaf status
-/*!
- \param npNode Node to examine.
- \returns xbTrue - Leaf node.<br> xbFalse - Interior node.
-*/
-xbBool xbIxNdx::IsLeaf( void *, xbIxNode *npNode ) const {
- xbUInt32 ulBlock = eGetUInt32 ( npNode->cpBlockData+4 );
- if( ulBlock > 0 ) // if the second four bytes are a number, it's an interior node
- return false;
- else
- return true;
-}
-/***********************************************************************/
-//! @brief Determine if key exists.
-/*!
- This method assumes the key has already been built and is in either
- cpKeyBuf or dKey.
-
- \param vpTag - Pointer to tag.
- \returns xbTrue - Key exists.<br> xbFalse - Key does not exist.
-*/
-xbInt16 xbIxNdx::KeyExists( void * vpTag ){
-
- xbNdxTag * npTag;
- vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
-
- xbInt16 iRc = FindKey( vpTag, npTag->cpKeyBuf, npTag->iKeyLen, 0 );
- if( iRc == 0 )
- return 1;
- else
- return 0;
-}
-
-/***********************************************************************/
-//! @brief Set position for key add.
-/*!
- This routine is called by the AddKey() method and is used to position
- the node chain to the position the new key should be added to the index.
-
- \param npTag Pointer to npTag.
- \param ulAddRecNo Record number to add.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbIxNdx::KeySetPosAdd( xbNdxTag *npTag, xbUInt32 ulAddRecNo ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- try{
-
- iRc = FindKey( npTag, npTag->cpKeyBuf, npTag->iKeyLen, 0 );
- if( iRc == XB_NOT_FOUND || iRc == XB_EMPTY )
- return XB_NO_ERROR; // good position
-
- else if( iRc != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- // get here if key was found, get the right most instance of any non unique key for append, find correct spot for update
- if( GetUnique() == 0 ){
- xbUInt32 ulCurRecNo;
- if(( iRc = GetDbfPtr( npTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulCurRecNo )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- xbBool bKeysMatch = xbTrue;
- while( bKeysMatch && ulAddRecNo > ulCurRecNo && iRc == XB_NO_ERROR ){
- if(( iRc = GetNextKey( npTag, 0 )) == XB_NO_ERROR ){
- if( memcmp( GetKeyData( npTag->npCurNode, npTag->npCurNode->iCurKeyNo, npTag->iKeyItemLen ), npTag->cpKeyBuf, (size_t) npTag->iKeyLen ))
- bKeysMatch = xbFalse;
- else{
- if(( iRc = GetDbfPtr( npTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulCurRecNo )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- }
- }
- }
- }
- if( iRc == XB_EOF ){ // eof condition
- if(( iRc = GetLastKey( 0, npTag, 0 )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- npTag->npCurNode->iCurKeyNo++;
- return XB_NO_ERROR;
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxNdx::KeySetPos() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/***********************************************************************/
-//! @brief Set position for key add.
-/*!
- This routine is called by the DeleteKey() method and is used to position
- the node chain to the position the old key should be deleted from the index.
-
- \param npTag Pointer to npTag.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbIxNdx::KeySetPosDel( xbNdxTag *npTag ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbString sMsg;
-
- try{
- iRc = FindKey( NULL, npTag->cpKeyBuf2, npTag->iKeyLen, 0 );
- if( iRc == XB_NOT_FOUND || iRc == XB_EMPTY )
- return XB_NO_ERROR; // good position
- else if( iRc != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- xbUInt32 ulIxRecNo;
- if(( iRc = GetDbfPtr( npTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulIxRecNo )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- if( ulIxRecNo == dbf->GetCurRecNo())
- return XB_NO_ERROR;
- if( GetUnique() == 1 ){
- iErrorStop = 120;
- iRc = XB_NOT_FOUND;
- throw iRc;
- }
- xbBool bFound = xbFalse;
- xbBool bKeysMatch = xbTrue;
- while( bKeysMatch && !bFound && iRc == XB_NO_ERROR ){
- if(( iRc = GetNextKey( npTag, 0 )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- if( memcmp( GetKeyData( npTag->npCurNode, npTag->npCurNode->iCurKeyNo, npTag->iKeyItemLen ), npTag->cpKeyBuf2, (size_t) npTag->iKeyLen )){
- bKeysMatch = xbFalse;
- } else {
- if(( iRc = GetDbfPtr( npTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulIxRecNo )) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
- if( ulIxRecNo == dbf->GetCurRecNo())
- bFound = xbTrue;
- }
- }
- if( bFound )
- return XB_NO_ERROR;
- else
- return XB_NOT_FOUND;
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxNdx::KeySetPosDel() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-/***********************************************************************/
-//! @brief Returns key filter status.
-/*!
- \param vpTag Tag to check status on.
- \returns xbtrue - Key was updated.<br>xbFalse - Key not updated.
-
- Always true for NDX style indices.
-*/
-//inline xbBool xbIxNdx::KeyFiltered( void *vpTag ) const{
-// return xbTrue;
-//}
-
-/***********************************************************************/
-//! @brief Read head block of index file.
-/*!
- \param iOpt 0 - Read in entire block
- 1 - Read in only dynamic section of block
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbIxNdx::ReadHeadBlock( xbInt16 iOpt = 0 ) {
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
- try{
- if( !FileIsOpen()){
- iRc = XB_NOT_OPEN;
- iErrorStop = 100;
- throw iRc;
- }
- xbInt16 iLen;
- iOpt == 0 ? iLen = 512 : iLen = 21;
-
- if(( iRc = ReadBlock( (xbUInt32) 0, (size_t) iLen, cNodeBuf )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- char *p = cNodeBuf;
- ndxTag->ulRootBlock = eGetUInt32( p ); p+=4;
- ndxTag->ulTotalBlocks = eGetUInt32( p ); p+=5;
- if( iOpt == 0 ){
- ndxTag->cKeyType = *p; p+=3;
- ndxTag->iKeyLen = eGetInt16( p ); p+=2;
- ndxTag->iKeysPerBlock = eGetInt16( p ); p+=2;
- ndxTag->iKeyType = eGetInt16( p ); p+=2;
- ndxTag->iKeyItemLen = eGetInt16( p ); p+=2;
- ndxTag->cSerNo = *p; p+=3;
- ndxTag->iUnique = *p; p++;
- ndxTag->sKeyExpression.Set( p );
-
- if( ndxTag->exp )
- delete ndxTag->exp;
-
- ndxTag->exp = new xbExp( xbase, dbf );
- if(( iRc = ndxTag->exp->ParseExpression( ndxTag->sKeyExpression.Str() )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
-
- if( ndxTag->cpKeyBuf )
- free( ndxTag->cpKeyBuf );
- if( ndxTag->cpKeyBuf2 )
- free( ndxTag->cpKeyBuf2 );
-
- ndxTag->cpKeyBuf = (char *) malloc( (size_t) ndxTag->iKeyLen );
- ndxTag->cpKeyBuf2 = (char *) malloc( (size_t) ndxTag->iKeyLen );
-
- if( ndxTag->sTagName == "" )
- GetFileNamePart( ndxTag->sTagName );
-
- } else {
- p+= 11;
- ndxTag->cSerNo = *p;
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxNdx::ReadHeadBlock() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/***********************************************************************/
-//! @brief Reindex a tag.
-/*!
- \param vpTag Pointer to tag pointer.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbIxNdx::Reindex( void **vpTag ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- //xbNdxTag * npTag;
- //vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
-
- try{
- xbString sFileName = GetFqFileName();
- xbString sKey; // = GetKeyExpression( vpTag );
- sKey.Set( GetKeyExpression( *vpTag ));
- xbInt16 iUnique = GetUnique( *vpTag );
- xbString sFilter = "";
-
- void *vpTag2;
- if(( iRc = CreateTag( sFileName, sKey, sFilter, 0, iUnique, xbTrue, &vpTag2 )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
-
- xbUInt32 ulRecCnt = 0;
- if(( iRc = dbf->GetRecordCnt( ulRecCnt )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
-
- for( xbUInt32 l = 1; l <= ulRecCnt; l++ ){
- if(( iRc = dbf->GetRecord( l )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
-
- if(( iRc = CreateKey( vpTag2, 1 )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
-
- if( iUnique ){
- iRc = CheckForDupKey( vpTag2 );
- if( iRc != 0 ){
- if( iRc < 0 ){
- iErrorStop = 140;
- throw iRc;
- }
- return XB_KEY_NOT_UNIQUE;
- }
- }
-
- if(( iRc = AddKey( vpTag2, l )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
- }
- *vpTag = vpTag2;
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxNdx::Reindex() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-/***********************************************************************/
-//! @brief Set current tag.
-/*!
- For ndx indices, there is only one tag.
- \returns XB_NO_ERROR.
-*/
-xbInt16 xbIxNdx::SetCurTag( xbInt16 ) {
- xbIx::SetCurTag( ndxTag );
- return XB_NO_ERROR;
-}
-/***********************************************************************/
-//! @brief Set current tag.
-/*!
- For ndx indices, there is only one tag.
- \returns XB_NO_ERROR.
-*/
-xbInt16 xbIxNdx::SetCurTag( xbString & ) {
- xbIx::SetCurTag( ndxTag );
- dbf->SetCurTag( "NDX", this, GetTag(0) );
- return XB_NO_ERROR;
-}
-
-/***********************************************************************/
-//! @brief Split an interior node
-/*!
-
- This routine splits an interior node into two nodes, divided by dSplitFactor.<br>
- This behaves differently than V7 Dbase. V7 does not balance the nodes.<br>
- For V7, if adding a key to the end of a node, it will create a right node
- with only one key, and the left node is still full.<br><br>
-
- Possible performance improvement options.<br>
- Two modes when splitting:<br>
- a) Split nodes in the middle - good for random access applications<br>
- b) Split off right node with only one key - good for applications with
- expectation of ascending keys added moving forward.<br>
-
- This routine first inserts the key into the left node in the appropriate location
- then splits the node based on the split factor setting.
-
- \param vpTag Tag in play.
- \param npLeft Left node to split.
- \param npRight Right node to split.
- \param iSlotNo Slot number for split.
- \param ulPtr Pointer number to insert.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbIxNdx::SplitNodeI( void *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 ulPtr ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbNdxTag * npTag;
- vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
- xbDouble dSplitFactor = .5; // split the nodes 50/50
- xbString sMsg;
-
- try{
- xbInt32 lKeyCnt = GetKeyCount( npLeft );
- xbInt32 lNewLeftKeyCnt = (xbInt32) ((lKeyCnt + 1) * dSplitFactor) + 1;
- xbInt32 lNewRightKeyCnt = lKeyCnt - lNewLeftKeyCnt;
- xbInt16 iSrcPos;
- xbInt16 iCopyLen;
- char *pSrc;
- char *pTrg;
-
- // insert the key into the left node
- if(( iRc = InsertNodeI( vpTag, npLeft, iSlotNo, ulPtr )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
-
- // move the right half of the left node to the right node
- iSrcPos = ((lNewLeftKeyCnt + 1) * npTag->iKeyItemLen) + 4;
- iCopyLen = (lNewRightKeyCnt * npTag->iKeyItemLen) + 4;
- pSrc = npLeft->cpBlockData;
- pSrc += iSrcPos;
- pTrg = npRight->cpBlockData;
- pTrg += 4;
- memmove( pTrg, pSrc, (size_t) iCopyLen );
-
- // write the new key counts into the nodes
- pTrg = npLeft->cpBlockData;
- ePutInt32( pTrg, lNewLeftKeyCnt );
- pTrg = npRight->cpBlockData;
- ePutInt32( pTrg, lNewRightKeyCnt );
-
- // write the new key counts into the nodes
- pTrg = npLeft->cpBlockData;
- ePutInt32( pTrg, lNewLeftKeyCnt );
- pTrg = npRight->cpBlockData;
- ePutInt32( pTrg, lNewRightKeyCnt );
-
- // write out the block
- if(( iRc = WriteBlock( npLeft->ulBlockNo, GetBlockSize(), npLeft->cpBlockData )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- // write out the block
- if(( iRc = WriteBlock( npRight->ulBlockNo, GetBlockSize(), npRight->cpBlockData )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxNdx::SplitNodeI() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/***********************************************************************/
-//! @brief Split a leaf node.
-/*!
- This routine splits an index leaf into two nodes, divided by dSplitFactor.<br>
- This behaves differently than V7 Dbase. V7 does not balance the nodes.<br>
- For V7, if adding a key to the end of a node, it will create a right node
- with only one key, and the left node is still full.<br><br>
-
- Possible performance improvement options.<br>
- Two modes when splitting:<br>
- a) Split nodes in the middle - good for random access applications<br>
- b) Split off right node with only one key - good for applications with
- expectation of ascending keys added moving forward.<br>
-
- This routine first inserts the key into the left node in the appropriate location
- then splits the node based on the split factor setting.
-
- \param vpTag Tag in play.
- \param npLeft Left node to split.
- \param npRight Right node to split.
- \param iSlotNo Slot number for split.
- \param ulPtr Pointer number to insert.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbIxNdx::SplitNodeL( void *vpTag, xbIxNode * npLeft, xbIxNode *npRight,
- xbInt16 iSlotNo, char * cpKeyBuf, xbUInt32 ulPtr ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbDouble dSplitFactor = .5;
- xbNdxTag *npTag;
- vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
-
- xbString sMsg;
- try{
- xbInt32 lKeyCnt = GetKeyCount( npLeft );
- xbInt32 lNewLeftKeyCnt = (xbInt32) ((lKeyCnt + 1) * dSplitFactor) + 1;
- xbInt32 lNewRightKeyCnt = lKeyCnt + 1 - lNewLeftKeyCnt;
-
- // xbInt16 iSrcPos;
- xbInt16 iLen;
- char *pSrc = npLeft->cpBlockData;
- char *pTrg;
-
- if(( iRc = InsertNodeL( vpTag, npLeft, iSlotNo, cpKeyBuf, ulPtr )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
-
- // move right half off of left node to the right node
- pSrc = npLeft->cpBlockData;
- pSrc += ((lNewLeftKeyCnt * npTag->iKeyItemLen)+4);
- pTrg = npRight->cpBlockData;
- pTrg += 4;
- iLen = lNewRightKeyCnt * npTag->iKeyItemLen;
- memmove( pTrg, pSrc, (size_t) iLen );
-
- // write the new key counts into the nodes
- pTrg = npLeft->cpBlockData;
- ePutInt32( pTrg, lNewLeftKeyCnt );
- pTrg = npRight->cpBlockData;
- ePutInt32( pTrg, lNewRightKeyCnt );
-
- // write out the left block
- if(( iRc = WriteBlock( npLeft->ulBlockNo, GetBlockSize(), npLeft->cpBlockData )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- // write out the right block
- if(( iRc = WriteBlock( npRight->ulBlockNo, GetBlockSize(), npRight->cpBlockData )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxNdx::SplitNodeL() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/***********************************************************************/
-//! @brief UpdateTagKey
-/*!
- This routine updates a key or a given tag.
- The file header is considered to be the first 2048 bytes in the file.
-
- \param cAction A - Add a key.<br>
- D - Delete a key.<br>
- R - Revise a key.<br>
- \param vpTg - Pointer to tag.<br>
- \param ulRecNo - Record number association with the action.<br>
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbIxNdx::UpdateTagKey( char cAction, void *vpTag, xbUInt32 ulRecNo ){
-
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- // ..xbNdxTag *npTag = (xbMdxTag *) vpTag;
-
- try{
- // save off any needed fileds for updating
- // xbUInt32 ulTagSizeSave = mpTag->ulTagSize;
- //xbUInt32 ulLeftChildSave = mpTag->ulLeftChild;
- //xbUInt32 ulRightChildSave = mpTag->ulRightChild;
-
-
- if( cAction == 'D' || cAction == 'R' ){
-// std::cout << "UpdateTagKey delete\n";
- if(( iRc = DeleteKey( vpTag )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- }
-
- if( cAction == 'A' || cAction == 'R' ){
- if(( iRc = AddKey( vpTag, ulRecNo )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- }
-
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxNdx::UpdateTagKey() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-/***********************************************************************/
-//! @brief Write head block.
-/*!
- Commit the index head node to disk.
- \param iOpt 0 - Entire header.<br>
- 1 - Update root block, number of blocks and seq number.<br>
- 2 - Update sequence number only<br>
- \returns <a href="xbretcod_8h.html">
-*/
-
-xbInt16 xbIxNdx::WriteHeadBlock( xbInt16 iOpt ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
-
- try{
- if( iOpt == 2 ){
-
- // increment the serial number
- if( ndxTag->cSerNo >= 0 && ndxTag->cSerNo < 127 )
- ndxTag->cSerNo++;
- else
- ndxTag->cSerNo = 0;
-
- if(( iRc = xbFseek( 20, SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- if(( iRc = xbFputc( ndxTag->cSerNo )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- } else if( iOpt == 1 ){
- xbRewind();
- char buf[8];
- ePutUInt32( &buf[0], ndxTag->ulRootBlock );
- ePutUInt32( &buf[4], ndxTag->ulTotalBlocks );
- if(( iRc = xbFwrite( buf, 8, 1 )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- return WriteHeadBlock( 2 );
-
- } else if ( iOpt == 0 ){
-
- char buf[512];
- memset( buf, 0x00, 512 );
- ePutUInt32( &buf[0], ndxTag->ulRootBlock );
- ePutUInt32( &buf[4], ndxTag->ulTotalBlocks );
- buf[9] = ndxTag->cKeyType;
- buf[11] = 0x1B;
- ePutInt16( &buf[12], ndxTag->iKeyLen );
- ePutInt16( &buf[14], ndxTag->iKeysPerBlock );
- ePutInt16( &buf[16], ndxTag->iKeyType );
- ePutInt16( &buf[18], ndxTag->iKeyItemLen );
- if( ndxTag-> iUnique ) buf[23] = 0x01;
-
- for( xbUInt32 i = 0; i < ndxTag->sKeyExpression.Len(); i++ )
- buf[i+24] = ndxTag->sKeyExpression.GetCharacter(i+1);
-
- xbRewind();
- if(( iRc = xbFwrite( buf, 512, 1 )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- } else {
- iRc = XB_INVALID_OPTION;
- throw iRc;
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbIxNdx::WriteHeadBlock() Exception Caught. Error Stop = [%d] iRc = [%d] option = [%d] ser=[%d]", iErrorStop, iRc, iOpt, ndxTag->cSerNo );
- xbase->WriteLogMessage( sMsg );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-/***********************************************************************/
-} /* namespace */
-#endif /* XB_NDX_SUPPORT */
-
-
-
diff --git a/src/core/xblog.cpp b/src/core/xblog.cpp
deleted file mode 100755
index 6031c9e..0000000
--- a/src/core/xblog.cpp
+++ /dev/null
@@ -1,208 +0,0 @@
-/* xblog.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-
-#include "xbase.h"
-//#include <time.h>
-
-#ifdef XB_LOGGING_SUPPORT
-
-namespace xb{
-
-/******************************************************************************/
-//! @brief Constructor.
-xbLog::xbLog() : xbFile( NULL ){
-
- SetDirectory( GetLogDirectory());
- SetFileName ( GetLogFileName());
-
- bLoggingStatus = xbFalse;
- lLogSize = 50000;
-
- #ifdef XB_LOCKING_SUPPORT
- iShareMode = XB_MULTI_USER;
- #else
- iShareMode = XB_SINGLE_USER;
- #endif
-}
-/******************************************************************************/
-//! @brief Constructor.
-/*!
- \param sLogFileName - Log file name.
-*/
-xbLog::xbLog( const xbString & sLogFileName ) : xbFile( NULL ){
- if( sLogFileName.GetPathSeparator())
- SetFqFileName( sLogFileName ); // file name includes a path
- else
- SetFileName( sLogFileName ); // no file path
-
- bLoggingStatus = xbFalse;
- lLogSize = 50000;
-
- #ifdef XB_LOCKING_SUPPORT
- iShareMode = XB_MULTI_USER;
- #else
- iShareMode = XB_SINGLE_USER;
- #endif
-
-}
-/******************************************************************************/
-//! @brief Deconstructor.
-xbLog::~xbLog(){
- xbFclose();
-}
-/******************************************************************************/
-//! @brief Get the current log status
-/*!
- \returns xbTrue - Logging turned on.<br>xbFalse - Logging turned off.
-*/
-xbBool xbLog::LogGetStatus(){
- return bLoggingStatus;
-}
-/******************************************************************************/
-//! @brief Close the logfile.
-/*!
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbLog::LogClose(){
- return xbFclose();
-}
-/******************************************************************************/
-//! @brief Set maximum log file size.
-/*!
- \param lSize - New maximum log file size.
- \returns void
-*/
-void xbLog::LogSetLogSize( size_t lSize ){
- lLogSize = lSize;
-}
-/******************************************************************************/
-//! @brief Set log status.
-/*!
- \param bStatus xbTrue - Turn logging on.<br>xbFalse - Turn logging off.
- \returns void
-*/
-void xbLog::LogSetStatus( xbBool bStatus ){
- bLoggingStatus = bStatus;
-}
-/******************************************************************************/
-//! @brief Open the logfile.
-/*!
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbLog::LogOpen(){
- xbInt16 rc;
- if(( rc = xbFopen( "a", iShareMode )) != XB_NO_ERROR )
- return rc;
- xbFTurnOffFileBuffering();
- return XB_NO_ERROR;
-}
-/******************************************************************************/
-//! @brief Write a logfile message.
-/*!
- \param sLogEntryData - Message to write to the logfile.
- \param iOutputOption 0 - Write to logfile.<br>
- 1 - Write to stdout.<br>
- 2 - Write to both logfile and stdout.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbLog::LogWrite( const xbString &sLogEntryData, xbInt16 iOutputOption ){
-
- if( bLoggingStatus == xbFalse ){ // logging turned off
- return XB_NO_ERROR;
- }
- xbInt16 rc = 0;
- if( iOutputOption != 1 && !FileIsOpen() ){
- if(( rc = LogOpen()) != XB_NO_ERROR ){
- fprintf( stderr, "Error - cant write to logfile\n" );
- return rc;
- }
- }
- if( iOutputOption != 1 && lLogSize < xbFtell()){
- xbFputs( "Swapping to next log file" );
- xbFclose();
- xbString sBackupName;
- sBackupName.Sprintf( "%s.bak", GetFqFileName().Str());
- if( FileExists( sBackupName ))
- xbRemove( sBackupName );
-
- xbRename( GetFqFileName(), sBackupName );
- xbFopen( "a", iShareMode );
- }
- xbString sTimeStamp;
- xbString sFled; // formatted log entry data
-
- if( iOutputOption != 1 ){
- #ifdef HAVE__LOCALTIME64_S_F
- __time64_t timer;
- struct tm tb;
- _time64( &timer );
- _localtime64_s( &tb, &timer );
- tb.tm_year += 1900;
- tb.tm_mon++;
- sTimeStamp.Sprintf( "%4d-%02d-%02d %02d:%02d:%02d", tb.tm_year, tb.tm_mon, tb.tm_mday, tb.tm_hour, tb.tm_min, tb.tm_sec );
- #else
- time_t timer;
- struct tm *tb;
- timer = time( NULL );
- tb = localtime( &timer );
- tb->tm_year += 1900;
- tb->tm_mon++;
- sTimeStamp.Sprintf( "%4d-%02d-%02d %02d:%02d:%02d", tb->tm_year, tb->tm_mon, tb->tm_mday, tb->tm_hour, tb->tm_min, tb->tm_sec );
- #endif
- sFled.Sprintf( "%s - %s\n", sTimeStamp.Str(), sLogEntryData.Str() );
- }
-
- switch( iOutputOption ){
- case 0:
- xbFputs( sFled );
- break;
- case 1:
- std::cout << sLogEntryData << std::endl;
- break;
- case 2:
- xbFputs( sFled );
- std::cout << sLogEntryData << std::endl;
- break;
- }
- return XB_NO_ERROR;
-}
-/******************************************************************************/
-//! @brief Write bytes to logfile.
-/*!
- \param ulByteCnt - Number of bytes to write to logfile.
- \param p - Pointer to data to write to logfile.
- \returns XB_NO_ERROR
-*/
-
-xbInt16 xbLog::LogWriteBytes( xbUInt32 ulByteCnt, const char *p ){
-
- if( bLoggingStatus == xbFalse ) // logging turned off
- return XB_NO_ERROR;
- const char *p2 = p;
- xbFputc( '[' );
- for( xbUInt32 l = 0; l < ulByteCnt; l++ )
- xbFputc( *p2++ );
- xbFputc( ']' );
- return XB_NO_ERROR;
-}
-/******************************************************************************/
-} // namespace
-#endif // XB_LOGGING_ON
-
-
-
-
diff --git a/src/core/xbmemo.cpp b/src/core/xbmemo.cpp
deleted file mode 100755
index 2bde853..0000000
--- a/src/core/xbmemo.cpp
+++ /dev/null
@@ -1,219 +0,0 @@
-/* xbmemo.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
- Base memo class
-*/
-
-#include "xbase.h"
-
-#ifdef XB_MEMO_SUPPORT
-
-namespace xb{
-
-/***********************************************************************/
-//! @brief Class Constructor.
-/*!
- \param dbf Pointer to dbf construct.
- \param sFileName Memo file name.
-*/
-
-xbMemo::xbMemo( xbDbf * dbf, xbString const &sFileName ) : xbFile( dbf->GetXbasePtr() ) {
- this->dbf = dbf; /* pointer to the associated dbf class instance */
- // xbase = dbf->GetXbasePtr(); /* pointer to the engine */
- SetDirectory( dbf->GetDirectory());
- SetFileName( sFileName );
- mbb = NULL;
- #ifdef XB_LOCKING_SUPPORT
- bFileLocked = xbFalse;
- #endif
-}
-/***********************************************************************/
-//! @brief Class Destructor.
-xbMemo::~xbMemo(){
- if( mbb )
- free( mbb );
-}
-/***********************************************************************/
-//! @brief Calculate the last data block number.
-/*!
- \param ulLastDataBlock Output - Last used block number in the file.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbMemo::CalcLastDataBlock( xbUInt32 & ulLastDataBlock ){
-
- xbInt16 iRc = XB_NO_ERROR;
- if(( iRc = xbFseek( 0, SEEK_END )) != XB_NO_ERROR )
- return iRc;
-
- ulLastDataBlock = (xbUInt32) xbFtell() / (xbUInt32) GetBlockSize();
- return XB_NO_ERROR;
-}
-/***********************************************************************/
-//! @brief Close the memo file.
-/*!
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbMemo::CloseMemoFile(){
-
- if( mbb ){
- free( mbb );
- mbb = NULL;
- }
- return xbFclose();
-}
-
-
-/***********************************************************************/
-//! @brief Get memo file type.
-/*!
- \returns 3 - Version 3 memo file.<br>
- 4 - Version 4 memo file.
-*/
-xbInt16 xbMemo::GetMemoFileType(){
- return iMemoFileType;
-}
-
-/***********************************************************************/
-//! @brief Get next block available from file header.
-/*!
- \param ulBlockNo Output - Next block number for appending data to memo file.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbMemo::GetHdrNextBlock( xbUInt32 & ulBlockNo ){
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- try{
- if(( iRc = ReadDbtHeader( 0 )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- ulBlockNo = ulHdrNextBlock;
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbmemo::GetNextAvailableBlock() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-/***********************************************************************/
-#ifdef XB_LOCKING_SUPPORT
-//! @brief Lock memo file
-/*!
-
- \param iLockFunction XB_LOCK<br>XB_UNLOCK
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbMemo::LockMemo( xbInt16 iLockFunction ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
-
- try{
- if( iLockFunction == XB_LOCK ){
-
- if( bFileLocked ) // already locked
- return XB_NO_ERROR;
-
- if( dbf->GetLockFlavor() == LK_DBASE ){
- iRc = xbLock( XB_LOCK, LK4026531838, 1 );
- if( iRc != XB_NO_ERROR ){
- if( iRc == XB_LOCK_FAILED )
- return iRc;
- else {
- iErrorStop = 100;
- throw iRc;
- }
- } else {
- bFileLocked = xbTrue;
- }
- }
- } else if( iLockFunction == XB_UNLOCK ){
-
- if( !bFileLocked ) // already unlocked
- return XB_NO_ERROR;
-
- if( dbf->GetLockFlavor() == LK_DBASE ){
- iRc = xbLock( XB_UNLOCK, LK4026531838, 1 );
- if( iRc != XB_NO_ERROR ){
- if( iRc == XB_LOCK_FAILED )
- return iRc;
- else {
- iErrorStop = 110;
- throw iRc;
- }
- } else {
- bFileLocked = xbFalse;
- }
- }
- } else {
- iErrorStop = 120;
- iRc = XB_INVALID_OPTION;
- throw iRc;
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbmemo::LockMemoFile() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/***********************************************************************/
-//! @brief Get memo file lock status.
-/*!
- \returns xbTrue - Memo file is locked.<br>
- xbFalse - Memo file is not locked.
-*/
-xbBool xbMemo::GetMemoLocked() const {
- return bFileLocked;
-}
-#endif
-
-/***********************************************************************/
-//! @brief Update Next Node number in file header
-/*!
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbMemo::UpdateHeadNextNode(){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- try{
- char buf[4];
- ePutUInt32( buf, ulHdrNextBlock );
- if(( iRc = xbFseek( 0, SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- if(( iRc = xbFwrite( &buf, 4, 1 )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbmemo::UpdateHeadeNextNode() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-/***********************************************************************/
-} /* namespace */
-#endif /* XB_MEMO_SUPPORT */
-
diff --git a/src/core/xbmemo3.cpp b/src/core/xbmemo3.cpp
deleted file mode 100755
index 60c1d53..0000000
--- a/src/core/xbmemo3.cpp
+++ /dev/null
@@ -1,575 +0,0 @@
-/* xbmemo3.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
- This class is used for support dBASE V3 memo files
-
-*/
-
-#include "xbase.h"
-
-#ifdef XB_MEMO_SUPPORT
-#ifdef XB_DBF3_SUPPORT
-
-namespace xb{
-
-/***********************************************************************/
-//! @brief Class Constructor.
-/*!
- \param dbf Pointer to dbf instance.
- \param sFileName Memo file name.
-*/
-xbMemoDbt3::xbMemoDbt3( xbDbf * dbf, xbString const & sFileName ) : xbMemo( dbf, sFileName ){
- iMemoFileType = 3;
- SetBlockSize( 512 );
-}
-
-/***********************************************************************/
-//! @brief Class Deconstructor.
-xbMemoDbt3::~xbMemoDbt3(){}
-
-/***********************************************************************/
-//! @brief Abort.
-/*!
- Abort any pending updates to the memo file.
- \returns XB_NO_ERROR
-*/
-xbInt16 xbMemoDbt3::Abort(){
- return XB_NO_ERROR;
-}/***********************************************************************/
-//! @brief Commit changes to memo file.
-/*!
- \returns XB_NO_ERROR.
-*/
-xbInt16 xbMemoDbt3::Commit(){
- return XB_NO_ERROR;
-}
-/***********************************************************************/
-//! @brief Create memo file.
-/*!
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbMemoDbt3::CreateMemoFile(){
-
- xbInt16 rc = XB_NO_ERROR;
- char cBuf[4];
- if(( rc = xbFopen( "w+b", dbf->GetShareMode())) != XB_NO_ERROR )
- return rc;
- ulHdrNextBlock = 1L;
- ePutUInt32( cBuf, ulHdrNextBlock );
- if(( rc = xbFwrite( cBuf, 4, 1 ))!= XB_NO_ERROR ){
- xbFclose();
- return rc;
- }
- for(int i = 0; i < 12; i++ )
- xbFputc( 0x00 );
- xbFputc( 0x03 );
- for(int i = 0; i < 495; i++ )
- xbFputc( 0x00 );
- if(( mbb = (void *) malloc( 512 )) == NULL ){
- xbFclose();
- return XB_NO_MEMORY;
- }
- return XB_NO_ERROR;
-}
-/***********************************************************************/
-#ifdef XB_DEBUG_SUPPORT
-//! @brief Dump memo file header.
-/*!
- \returns XB_NO_ERROR
-*/
-xbInt16 xbMemoDbt3::DumpMemoFreeChain() {
- std::cout << "Xbase version 3 file - no free block chain" << std::endl;
- return XB_NO_ERROR;
-}
-#endif // XB_DEBUG_SUPPORT
-
-//! @brief Dump memo file header.
-/*!
- \returns XB_NO_ERROR
-*/
-xbInt16 xbMemoDbt3::DumpMemoHeader(){
- xbInt16 rc = XB_NO_ERROR;
- xbUInt64 stFileSize;
- if(( rc = ReadDbtHeader( 1 )) != XB_NO_ERROR )
- return rc;
- GetFileSize( stFileSize );
- std::cout << "Version 3 Memo Header Info" << std::endl;
- std::cout << "Memo File Name = " << GetFqFileName() << std::endl;
- std::cout << "Next Available Block = " << ulHdrNextBlock << std::endl;
- std::cout << "Memo File Version = " << (xbInt16) cVersion << " (";
- BitDump( cVersion );
- std::cout << ")" << std::endl;
- std::cout << "Block Size = " << GetBlockSize() << std::endl;
- std::cout << "File Size = " << stFileSize << std::endl;
- std::cout << "Block Count = " << stFileSize / GetBlockSize() << std::endl;
- return XB_NO_ERROR;
-}
-/***********************************************************************/
-//! @brief Get a memo field for a given field number.
-/*!
- \param iFieldNo Field number to retrieve data for.
- \param sMemoData Output - string containing memo field data.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbMemoDbt3::GetMemoField( xbInt16 iFieldNo, xbString & sMemoData ){
-
- xbInt16 iErrorStop = 0;
- xbInt16 rc = XB_NO_ERROR;
- xbUInt32 ulScnt;
- char *sp, *spp;
- xbUInt32 ulBlockNo;
- xbBool bDone = xbFalse;
- sMemoData = "";
- try{
- if(( rc = dbf->GetULongField( iFieldNo, ulBlockNo )) < XB_NO_ERROR ){
- iErrorStop = 100;
- throw rc;
- }
- if( ulBlockNo == 0L ){
- sMemoData = "";
- return XB_NO_ERROR;
- }
- spp = NULL;
- while( !bDone ){
- if(( rc = ReadBlock( ulBlockNo++, GetBlockSize(), mbb )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw rc;
- }
- ulScnt = 0;
- sp = (char *) mbb;
- while( ulScnt < 512 && !bDone ){
- if( *sp == 0x1a && *spp == 0x1a )
- bDone = xbTrue;
- else{
- ulScnt++; spp = sp; sp++;
- }
- }
- sMemoData.Append( (char *) mbb, ulScnt );
- }
- sMemoData.ZapTrailingChar( 0x1a );
- }
- catch (xbInt16 rc ){
- xbString sMsg;
- sMsg.Sprintf( "xbMemoDbt3::GetMemoField() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( rc ));
- }
- return rc;
-}
-/***********************************************************************/
-//! @brief Get a memo field length for a given field number.
-/*!
- \param iFieldNo Field number to retrieve data for.
- \param ulFieldLen Output - length of memo field data.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbMemoDbt3::GetMemoFieldLen( xbInt16 iFieldNo, xbUInt32 & ulFieldLen ){
-
- xbInt16 iErrorStop = 0;
- xbInt16 rc = XB_NO_ERROR;
- xbInt16 iScnt;
- char *sp, *spp;
- xbUInt32 ulBlockNo;
- xbInt16 iNotDone;
- try{
- if(( rc = dbf->GetULongField( iFieldNo, ulBlockNo )) < XB_NO_ERROR ){
- iErrorStop = 100;
- throw rc;
- }
- if( ulBlockNo == 0 ){
- ulFieldLen = 0;
- return XB_NO_ERROR;
- }
- ulFieldLen = 0L;
- spp = NULL;
- iNotDone = 1;
- while( iNotDone ){
- if(( rc = ReadBlock( ulBlockNo++, GetBlockSize(), mbb )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw rc;
- }
- iScnt = 0;
- sp = (char *) mbb;
- while( iScnt < 512 && iNotDone ){
- if( *sp == 0x1a && *spp == 0x1a )
- iNotDone = 0;
- else{
- ulFieldLen++; iScnt++; spp = sp; sp++;
- }
- }
- }
- if( ulFieldLen > 0 ) ulFieldLen--;
- }
- catch (xbInt16 rc ){
- xbString sMsg;
- sMsg.Sprintf( "xbMemoDbt3::GetMemoFieldLen() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( rc ));
- }
- return rc;
-}
-/***********************************************************************/
-//! @brief Open memo file.
-/*!
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbMemoDbt3::OpenMemoFile() {
- xbInt16 rc = XB_NO_ERROR;
- if(( rc = xbFopen( dbf->GetOpenMode(), dbf->GetShareMode())) != XB_NO_ERROR )
- return rc;
- if(( mbb = (void *) malloc( 512 )) == NULL ){
- xbFclose();
- return XB_NO_MEMORY;
- }
- return XB_NO_ERROR;
-}
-/***********************************************************************/
-//! @brief Pack memo file.
-/*!
- This routine frees up any unused blocks in the file resulting from field updates.
- Version 3 memo files do not reclaim unused space (Version 4 files do).
- This routine cleans up the unused space.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbMemoDbt3::PackMemo( void (*memoStatusFunc ) ( xbUInt32 ulItemNum, xbUInt32 ulNumItems ))
-{
- xbInt16 iRc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- char * cBlock = NULL;
-
- #ifdef XB_LOCKING_SUPPORT
- xbBool bTableLocked = xbFalse;
- xbBool bMemoLocked = xbFalse;
- #endif
-
- try{
- #ifdef XB_LOCKING_SUPPORT
- if( dbf->GetAutoLock() && !dbf->GetTableLocked() ){
- if(( iRc = dbf->LockTable( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- } else {
- bTableLocked = xbTrue;
- }
- if(( iRc = LockMemo( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- } else {
- bMemoLocked = xbTrue;
- }
- }
- #endif
-
- // create temp file
- xbString sTempMemoName;
- if(( iRc = CreateUniqueFileName( GetDirectory(), "dbt", sTempMemoName )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
-
- xbMemoDbt3 *pMemo = new xbMemoDbt3( dbf, sTempMemoName );
- if(( iRc = pMemo->CreateMemoFile()) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- // for dbase III, block size is always 512, don't need to reset it
- // for each record in dbf
- xbUInt32 ulRecCnt;
- if(( iRc = dbf->GetRecordCnt( ulRecCnt )) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
- xbInt32 lFldCnt = dbf->GetFieldCnt();
- char cFldType;
- xbString sMemoFldData;
-
- for( xbUInt32 ulI = 1; ulI <= ulRecCnt; ulI++ ){
- if(( iRc = dbf->GetRecord( ulI )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
- if( (void *) memoStatusFunc )
- (*memoStatusFunc) ( ulI, ulRecCnt );
-
- // for each memo field
- for( xbInt32 lFc = 0; lFc < lFldCnt; lFc++ ){
- if(( iRc = dbf->GetFieldType( lFc, cFldType )) != XB_NO_ERROR ){
- iErrorStop = 160;
- throw iRc;
- }
- if( cFldType == 'M' ){
- // copy it to work field
- if(( iRc = dbf->GetMemoField( lFc, sMemoFldData )) != XB_NO_ERROR ){
- iErrorStop = 170;
- throw iRc;
- }
- // write it to new field
- if(( iRc = pMemo->UpdateMemoField( lFc, sMemoFldData )) != XB_NO_ERROR ){
- iErrorStop = 180;
- throw iRc;
- }
- }
- }
- }
-
- //copy target back to source
- xbUInt32 ulBlkSize = GetBlockSize();
- xbUInt64 ullFileSize;
- if(( iRc = pMemo->GetFileSize( ullFileSize )) != XB_NO_ERROR ){
- iErrorStop = 190;
- throw iRc;
- }
- // file size should be evenly divisible by block size
- xbUInt32 ulBlkCnt;
-
- if( ullFileSize % ulBlkSize ){
- iErrorStop = 200;
- throw iRc;
- } else {
- ulBlkCnt = (xbUInt32) (ullFileSize / ulBlkSize);
- }
- if(( iRc = xbTruncate( 0 )) != XB_NO_ERROR ){
- iErrorStop = 210;
- throw iRc;
- }
-
- if(( cBlock = (char *) malloc( (size_t) ulBlkSize )) == NULL ){
- iErrorStop = 220;
- throw iRc;
- }
-
- // can't rename files in a multiuser, cross platform environment, causes issues
- // copy work table back to source table
- for( xbUInt32 ulBc = 0; ulBc < ulBlkCnt; ulBc++ ){
- if(( iRc = pMemo->ReadBlock( ulBc, ulBlkSize, cBlock )) != XB_NO_ERROR ){
- iErrorStop = 230;
- throw iRc;
- }
- if(( iRc = WriteBlock( ulBc, ulBlkSize, cBlock )) != XB_NO_ERROR ){
- iErrorStop = 240;
- throw iRc;
- }
- }
- //close and delete target
- if(( iRc = pMemo->xbFclose()) != XB_NO_ERROR ){
- iErrorStop = 250;
- throw iRc;
- }
- if(( iRc = pMemo->xbRemove()) != XB_NO_ERROR ){
- iErrorStop = 260;
- throw iRc;
- }
- free( cBlock );
- delete pMemo;
- }
- catch (xbInt16 iRc ){
- free( cBlock );
- xbString sMsg;
- sMsg.Sprintf( "xbMemoDbt3::PackMemo() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
-
- #ifdef XB_LOCKING_SUPPORT
- if( bTableLocked )
- dbf->LockTable( XB_UNLOCK );
- if( bMemoLocked )
- LockMemo( XB_UNLOCK );
- #endif
- return iRc;
-}
-
-/***********************************************************************/
-//! @brief Read dbt header file.
-/*!
- \param iOption 0 --> read only first four bytes<br>
- 1 --> read the entire thing
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbMemoDbt3::ReadDbtHeader( xbInt16 iOption ){
- char *p;
- char MemoBlock[20];
- xbInt16 rc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbUInt32 ulReadSize;
-
- try{
- if( !FileIsOpen() ){
- iErrorStop = 100;
- rc = XB_NOT_OPEN;
- throw rc;
- }
- if( iOption == 0 )
- ulReadSize = 4;
- else{
- xbUInt64 stFileSize = 0;
- if(( rc = GetFileSize( stFileSize )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw rc;
- }
- if( stFileSize < 4 ){
- iErrorStop = 120;
- rc = XB_INVALID_BLOCK_NO;
- throw rc;
- }
- else if( stFileSize > 20 )
- ulReadSize = 130;
- else
- ulReadSize = 4;
- }
- if( xbFseek( 0, SEEK_SET )){
- iErrorStop = 140;
- rc = XB_SEEK_ERROR;
- throw rc;
- }
- if(( xbFread( &MemoBlock, ulReadSize, 1 )) != XB_NO_ERROR ){
- iErrorStop = 150;
- rc = XB_READ_ERROR;
- throw rc;
- }
- p = MemoBlock;
- ulHdrNextBlock = eGetUInt32( p );
-
- if( iOption == 0)
- return XB_NO_ERROR;
-
- if( ulReadSize >= 20 ){
- p+=16;
- cVersion = *p;
- }
- }
- catch (xbInt16 rc ){
- xbString sMsg;
- sMsg.Sprintf( "xbMemoDbt3::ReadDbtHeader() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( rc ));
- }
- return rc;
-}
-/***********************************************************************/
-//! @brief Update header name.
-/*!
- \returns XB_NO_ERROR
-*/
-xbInt16 xbMemoDbt3::UpdateHeaderName(){
- return XB_NO_ERROR;
-}
-/***********************************************************************/
-//! @brief Update a memo field for a given field number.
-/*!
- \param iFieldNo Field number to update data for.
- \param sMemoData Data to update memo field data with.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbMemoDbt3::UpdateMemoField( xbInt16 iFieldNo, const xbString & sMemoData ) {
-
- xbInt16 iErrorStop = 0;
- xbInt16 rc = XB_NO_ERROR;
- try{
- if( sMemoData == "" ){
- if(( rc = dbf->PutField( iFieldNo, "" )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw rc;
- }
- } else {
- xbUInt32 ulDataLen = sMemoData.Len() + 2;
- xbUInt32 ulBlocksNeeded = (ulDataLen / 512) + 1;
- xbUInt32 ulLastDataBlock;
- if(( rc = CalcLastDataBlock( ulLastDataBlock )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw rc;
- }
- if(( rc = xbFseek( ((xbInt64) ulLastDataBlock * 512), SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw rc;
- }
- if(( rc = xbFwrite( sMemoData.Str(), sMemoData.Len(), 1 )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw rc;
- }
- if(( rc = xbFputc( 0x1a, 2 )) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw rc;
- }
- if(( rc = xbFputc( 0x00, (xbInt32) ( ulBlocksNeeded * 512 ) - (xbInt32) ulDataLen )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw rc;
- }
- if(( rc = dbf->PutULongField( iFieldNo, ulLastDataBlock )) != XB_NO_ERROR ){
- iErrorStop = 160;
- throw rc;
- }
- ulHdrNextBlock = ulLastDataBlock + ulBlocksNeeded;
- if(( rc = UpdateHeadNextNode()) != XB_NO_ERROR ){
- iErrorStop = 170;
- throw rc;
- }
- }
- }
- catch (xbInt16 rc ){
- xbString sMsg;
- sMsg.Sprintf( "xbMemoDbt3::UpdateMemoField() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( rc ));
- }
- return rc;
-}
-
-/***********************************************************************/
-//! @brief Empty the memo file.
-/*!
- This routine clears everything out of the file. It does not address the
- block pointers on the dbf file.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbMemoDbt3::Zap(){
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
- char cBuf[4];
-
- try{
- ulHdrNextBlock = 1L;
- ePutUInt32( cBuf, ulHdrNextBlock );
-
- if(( iRc != xbFseek( 0, SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- if(( iRc != xbFwrite( cBuf, 4, 1 ))!= XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- if(( iRc != xbTruncate( 512 )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbMemoDbt3::Zap() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/***********************************************************************/
-} /* namespace */
-#endif /* XB_DBF3_SUPPORT */
-#endif /* XB_MEMO_SUPPORT */
diff --git a/src/core/xbmemo4.cpp b/src/core/xbmemo4.cpp
deleted file mode 100755
index d02df99..0000000
--- a/src/core/xbmemo4.cpp
+++ /dev/null
@@ -1,1335 +0,0 @@
-/* xbmemo4.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
- This class is used for support dBASE V4 memo files
-
-*/
-
-#include "xbase.h"
-
-#ifdef XB_MEMO_SUPPORT
-#ifdef XB_DBF4_SUPPORT
-
-namespace xb{
-
-/***********************************************************************/
-//! @brief Class Constructor.
-/*!
- \param dbf Pointer to dbf instance.
- \param sFileName Memo file name.
-*/
-xbMemoDbt4::xbMemoDbt4( xbDbf * dbf, xbString const & sFileName ) : xbMemo( dbf, sFileName ){
- iMemoFileType = 4;
- SetBlockSize( dbf->GetCreateMemoBlockSize() );
-}
-
-/***********************************************************************/
-//! @brief Class Deconstructor.
-xbMemoDbt4::~xbMemoDbt4(){}
-
-/***********************************************************************/
-//! @brief Abort.
-/*!
- Abort any pending updates to the memo file.
- \returns XB_NO_ERROR
-*/
-xbInt16 xbMemoDbt4::Abort(){
-
- xbInt16 rc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbUInt32 ulBlockNo;
-
- try{
- xbUInt32 ulNodeCnt = llNewBlocks.GetNodeCnt();
- for( xbUInt32 l = 0; l < ulNodeCnt; l++ ){
- if(( rc = llNewBlocks.RemoveFromFront( ulBlockNo )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw rc;
- }
- if(( rc = FreeMemoBlockChain( ulBlockNo )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw rc;
- }
- }
- llOldBlocks.Clear();
- }
-
- catch (xbInt16 rc ){
- xbString sMsg;
- sMsg.Sprintf( "xbMemoDbt4::Abort() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( rc ));
- }
- return rc;
-}
-
-/***********************************************************************/
-//! @brief Commit changes to memo file.
-/*!
- Commit any pending updates to the memo file.
- \returns XB_NO_ERROR.
-*/
-xbInt16 xbMemoDbt4::Commit(){
-
- xbInt16 rc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbUInt32 ulBlockNo;
-
- try{
- xbUInt32 ulNodeCnt = llOldBlocks.GetNodeCnt();
- for( xbUInt32 l = 0; l < ulNodeCnt; l++ ){
- if(( rc = llOldBlocks.RemoveFromFront( ulBlockNo )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw rc;
- }
- if(( rc = FreeMemoBlockChain( ulBlockNo )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw rc;
- }
- }
- llNewBlocks.Clear();
- }
- catch (xbInt16 rc ){
- xbString sMsg;
- sMsg.Sprintf( "xbMemoDbt4::Commit() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( rc ));
- }
- return rc;
-}
-/***********************************************************************/
-//! @brief Create memo file.
-/*!
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbMemoDbt4::CreateMemoFile(){
-
- xbInt16 iErrorStop = 0;
- xbInt16 rc = XB_NO_ERROR;
- char cBuf[4];
-
- try{
- if(( rc = xbFopen( "w+b", dbf->GetShareMode() )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw rc;
- }
-
- ulHdrNextBlock = 1L;
- ePutUInt32( cBuf, ulHdrNextBlock );
- if(( rc = xbFwrite( cBuf, 4, 1 ))!= XB_NO_ERROR ){
- iErrorStop = 110;
- xbFclose();
- throw rc;
- }
- for(int i = 0; i < 4; i++ )
- xbFputc( 0x00 );
- GetFileNamePart( sDbfFileNameWoExt );
- sDbfFileNameWoExt.PadRight( ' ', 8 ); // need at least eight bytes of name
- sDbfFileNameWoExt = sDbfFileNameWoExt.Mid( 1, 8 ); // need no more than eight bytes of name
- for( int i = 1; i < 9; i++ )
- xbFputc( sDbfFileNameWoExt[i] );
-
- for(int i = 0; i < 4; i++ )
- xbFputc( 0x00 );
-
- ePutInt16( cBuf, GetBlockSize());
- if(( rc = xbFwrite( cBuf, 2, 1 ))!= XB_NO_ERROR ){
- iErrorStop = 120;
- xbFclose();
- throw rc;
- }
- for( xbUInt32 i = 0; i < (GetBlockSize() - 22); i++ )
- xbFputc( 0x00 );
- if(( mbb = (void *) malloc( GetBlockSize())) == NULL ){
- rc = XB_NO_MEMORY;
- iErrorStop = 130;
- return XB_NO_MEMORY;
- }
- }
- catch (xbInt16 rc ){
- xbString sMsg;
- sMsg.Sprintf( "xbMemoDbt4::CreateMemoFile() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( rc ));
- xbFclose();
- }
- return rc;
-}
-/***********************************************************************/
-#ifdef XB_DEBUG_SUPPORT
-//! @brief Dump memo file header.
-/*!
- \returns XB_NO_ERROR
-*/
-
-xbInt16 xbMemoDbt4::DumpMemoFreeChain()
-{
- xbInt16 rc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbUInt32 ulCurBlock, ulLastDataBlock;
-
- try{
- if(( rc = ReadDbtHeader(1)) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw rc;
- }
- if(( rc = CalcLastDataBlock( ulLastDataBlock )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw rc;
- }
-
- ulCurBlock = ulHdrNextBlock;
- std::cout << "**********************************" << std::endl;
- std::cout << "Head Node Next Block = " << ulCurBlock << std::endl;;
- std::cout << "Total blocks in file = " << ulLastDataBlock << std::endl;
-
- while( ulCurBlock < ulLastDataBlock ){
- if(( rc = ReadBlockHeader( ulCurBlock, 2 )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw rc;
- }
- std::cout << "**********************************" << std::endl;
- std::cout << "This Free Block = [" << ulCurBlock << "] contains [" << ulFreeBlockCnt << "] block(s)" << std::endl;
- std::cout << "Next Free Block = [" << ulNextFreeBlock << "]" << std::endl;
- ulCurBlock = ulNextFreeBlock;
- }
- }
- catch (xbInt16 rc ){
- xbString sMsg;
- sMsg.Sprintf( "xbMemoDbt4::UpdateMemoField() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( rc ));
- }
- return XB_NO_ERROR;
-}
-
-//! @brief Dump memo internals.
-/*!
- \returns XB_NO_ERROR
-*/
-
-xbInt16 xbMemoDbt4::DumpMemoInternals() {
-
- xbLinkListNode<xbUInt32> *llPtr;
- xbInt16 iNodeCnt;
-
- llPtr = llOldBlocks.GetHeadNode();
- iNodeCnt = llOldBlocks.GetNodeCnt();
-
- std::cout << "Link List Old Blocks - " << iNodeCnt << " nodes" << std::endl;
- for( xbInt16 i = 0; i < iNodeCnt; i++ ){
- std::cout << llPtr->GetKey() << ",";
- llPtr = llPtr->GetNextNode();
- }
- std::cout << std::endl;
-
- llPtr = llNewBlocks.GetHeadNode();
- iNodeCnt = llNewBlocks.GetNodeCnt();
- std::cout << "Link List New Blocks - " << iNodeCnt << " nodes" << std::endl;
- for( xbInt16 i = 0; i < iNodeCnt; i++ ){
- std::cout << llPtr->GetKey() << ",";
- llPtr = llPtr->GetNextNode();
- }
- std::cout << std::endl;
-
- return XB_NO_ERROR;
-}
-#endif // XB_DEBUG_SUPPORT
-
-/***********************************************************************/
-//! @brief Dump memo file header.
-/*!
- \returns XB_NO_ERROR
-*/
-xbInt16 xbMemoDbt4::DumpMemoHeader(){
-
- xbInt16 rc = XB_NO_ERROR;
- xbUInt32 ulLastDataBlock;
- CalcLastDataBlock( ulLastDataBlock );
-
- if(( rc = ReadDbtHeader( 1 )) != XB_NO_ERROR )
- return rc;
- std::cout << "Version 4 Memo Header Info" << std::endl;
- std::cout << "Memo File Name = " << GetFqFileName() << std::endl;
- std::cout << "Hdr Next Avail Block = " << ulHdrNextBlock << std::endl;
- std::cout << "Block Size = " << GetBlockSize() << std::endl;
- std::cout << "Dbf File Name wo Ext = " << sDbfFileNameWoExt.Str() << std::endl;
- std::cout << "Last Data Block = " << ulLastDataBlock << std::endl;
- return rc;
-}
-
-/************************************************************************/
-//! @brief Find an empty set of blocks in the free block chain
-/*!
- This routine searches thruugh the free node chain in a dbase IV type
- memo file searching for a place to grab some free blocks for reuse
-
- \param ulBlocksNeeded The size to look in the chain for.
- \param ulLastDataBlock is the last data block in the file, enter 0
- for the routine to calculate it.
- \param ulLocation The location it finds.
- \param ulPreviousNode Block number of the node immediately previous to this node in the chain.<br>
- 0 if header node
- \param bFound Output xbFalse - Spot not found in chain.<br>
- xbTrue - Spot found in chain.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbMemoDbt4::FindBlockSetInChain( xbUInt32 ulBlocksNeeded,
- xbUInt32 &ulLastDataBlock, xbUInt32 &ulLocation, xbUInt32 &ulPrevNode, xbBool &bFound ){
- xbInt16 rc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbUInt32 ulCurNode;
-
- try{
- ulPrevNode = 0L;
- if( ulLastDataBlock == 0 ){
- /* Determine last good data block */
- if(( rc = CalcLastDataBlock( ulLastDataBlock )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw rc;
- }
- }
- if( ulHdrNextBlock < ulLastDataBlock ){
- ulCurNode = ulHdrNextBlock;
-
- if(( rc = ReadBlockHeader( ulHdrNextBlock, 2 )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw rc;
- }
- while( ulBlocksNeeded > ulFreeBlockCnt && ulNextFreeBlock < ulLastDataBlock ){
- ulPrevNode = ulCurNode;
- ulCurNode = ulNextFreeBlock;
- if(( rc = ReadBlockHeader( ulNextFreeBlock, 2 )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw rc;
- }
- }
- if( ulBlocksNeeded <= ulFreeBlockCnt ){
- ulLocation = ulCurNode;
- // PreviousNode = lPrevNode;
- bFound = xbTrue;
- } else { // no data found and at end of chain
- ulPrevNode = ulCurNode;
- bFound = xbFalse;
- }
- } else {
- bFound = xbFalse;
- }
- }
- catch (xbInt16 rc ){
- xbString sMsg;
- sMsg.Sprintf( "xbMemoDbt4::FindBlockSetInChain() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( rc ));
- }
- return rc;
-}
-/***********************************************************************/
-//! @brief Free a block.
-/*!
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbMemoDbt4::FreeMemoBlockChain( xbUInt32 ulBlockNo ){
- xbUInt32 ulLastDataBlock;
- return FreeMemoBlockChain( ulBlockNo, ulLastDataBlock );
-}
-
-/***********************************************************************/
-//! @brief Free a block.
-/*!
- \param ulBlockNo The block number being deleted.
- \param ulLastDataBlock Output - Last free block number,prior to this block.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbMemoDbt4::FreeMemoBlockChain( xbUInt32 ulBlockNo, xbUInt32 &ulLastDataBlock )
-{
- xbInt16 rc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbUInt32 ulNoOfFreedBlocks;
- xbUInt32 ulLastFreeBlock = 0;
- xbUInt32 ulLastFreeBlockCnt = 0;
- xbUInt32 ulSaveNextFreeBlock;
-
- // iFieldNo - The field no m\bing deleted
- // iBlockNo - The block number being deleted
- // iNoOfFreeBlocks - The number of blocks being freed with this delete
- // iLastDataBlock - The next block number to allocate if more blocks needed
- // iHdrNextBlock - The head pointer in the main header block
- // iNextFreeBlock - The block that is immediately following the current free block to be added
- // iLastFreeBlock - Last free block number,prior to this block
- // iLastFreeBlockCnt - Last free block number of blocks
-
- try{
-
- if( ulBlockNo <= 0 ){
- iErrorStop = 100;
- rc =XB_INVALID_BLOCK_NO;
- throw rc;
- }
-
- /* Load the first block */
- if(( rc = ReadBlockHeader( ulBlockNo, 1 )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw rc;
- }
-
- if( (ulFieldLen) % GetBlockSize() )
- ulNoOfFreedBlocks = ((ulFieldLen) / GetBlockSize()) + 1L;
- else
- ulNoOfFreedBlocks = (ulFieldLen) / GetBlockSize();
-
- /* Determine last good data block */
- if(( rc = CalcLastDataBlock( ulLastDataBlock )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw rc;
- }
-
- if(( rc = ReadDbtHeader( 0 )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw rc;
- }
-
- // Not an empty node chain, position to correct location in chain
- ulNextFreeBlock = ulHdrNextBlock;
- while( ulBlockNo > ulNextFreeBlock && ulBlockNo < ulLastDataBlock ){
- ulLastFreeBlock = ulNextFreeBlock;
-
- if(( rc = ReadBlockHeader( ulNextFreeBlock, 2 )) != XB_NO_ERROR ){
- iErrorStop = 140;
- return rc;
- }
- ulLastFreeBlockCnt = ulFreeBlockCnt;
- }
-
- // One of two outcomes at this point
- // A) This block is combined with the next free block chain, and points to the free chain after the next free block
- // B) This block is not combined with the next free block chain, and points to the next block
- // (which could be the last block
-
- // should next block should be concatonated onto the end of this set?
- ulSaveNextFreeBlock = ulNextFreeBlock;
- if(( ulBlockNo + ulNoOfFreedBlocks ) == ulNextFreeBlock && ulNextFreeBlock < ulLastDataBlock ){
- if(( rc = ReadBlockHeader( ulNextFreeBlock, 2 )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw rc;
- }
- ulNoOfFreedBlocks += ulFreeBlockCnt;
- ulSaveNextFreeBlock = ulNextFreeBlock;
- }
-
- // if this is the first set of free blocks
- if( ulLastFreeBlock == 0 ){
- // 1 - write out the current block
- // 2 - update header block
- // 3 - write header block
- // 4 - update data field
-
- ePutUInt32( (char *) mbb, ulSaveNextFreeBlock );
- ePutUInt32( (char *) mbb+4, ulNoOfFreedBlocks );
- if(( rc = WriteBlock( ulBlockNo, 8, mbb )) != XB_NO_ERROR ){
- iErrorStop = 160;
- throw rc;
- }
-
- ulHdrNextBlock = ulBlockNo;
- if(( rc = UpdateHeadNextNode()) != XB_NO_ERROR ){
- iErrorStop = 170;
- throw rc;
- }
- return XB_NO_ERROR;
- }
-
- /* determine if this block set should be added to the previous set */
- if(( ulLastFreeBlockCnt + ulLastFreeBlock ) == ulBlockNo ){
- if(( rc = ReadBlockHeader( ulLastFreeBlock, 2 )) != XB_NO_ERROR ){
- iErrorStop = 180;
- throw rc;
- }
- ulFreeBlockCnt += ulNoOfFreedBlocks;
-
- ePutUInt32( (char *) mbb, ulSaveNextFreeBlock );
- ePutUInt32( (char *) mbb+4, ulFreeBlockCnt );
- if(( rc = WriteBlock( ulLastFreeBlock, 8, mbb )) != XB_NO_ERROR ){
- iErrorStop = 190;
- throw rc;
- }
- return XB_NO_ERROR;
- }
-
- /* insert into the chain */
- /* 1 - set the next bucket on the current node */
- /* 2 - write this node */
- /* 3 - go to the previous node */
- /* 4 - insert this nodes id into the previous node set */
- /* 5 - write previous node */
-
- ePutUInt32( (char *) mbb, ulSaveNextFreeBlock );
- ePutUInt32( (char *) mbb+4, ulNoOfFreedBlocks );
- if(( rc = WriteBlock( ulBlockNo, 8, mbb )) != XB_NO_ERROR ){
- iErrorStop = 200;
- throw rc;
- }
-
- if(( rc = ReadBlockHeader( ulLastFreeBlock, 2 )) != XB_NO_ERROR ){
- iErrorStop = 210;
- throw rc;
- }
-
- ePutUInt32( (char *) mbb, ulBlockNo );
- if(( rc = WriteBlock( ulLastFreeBlock, 8, mbb )) != XB_NO_ERROR ){
- iErrorStop = 220;
- throw rc;
- }
- }
- catch (xbInt16 rc ){
- xbString sMsg;
- sMsg.Sprintf( "xbMemoDbt4::DeleteMemoField() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( rc ));
- }
- return rc;
-}
-/************************************************************************/
-//! @brief Get a set of blocks from the free block chain.
-/*!
- This routine grabs a set of blocks out of the free block chain.
-
- \param ulBlocksNeeded The number of blocks requested.
- \param ulLocation
- \param ulPrevNode
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-
-xbInt16 xbMemoDbt4::GetBlockSetFromChain( xbUInt32 ulBlocksNeeded,
- xbUInt32 ulLocation, xbUInt32 ulPrevNode )
-{
- xbInt16 rc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- xbUInt32 ulNextFreeBlock2;
- xbUInt32 ulNewFreeBlocks;
- xbUInt32 ulSaveNextFreeBlock;
-
- try{
- if(( rc = ReadBlockHeader( ulLocation, 2 )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw rc;
- }
-
- if( ulBlocksNeeded == ulFreeBlockCnt ){ // grab this whole set of blocks
- if( ulPrevNode == 0 ){ // first in the chain
- ulHdrNextBlock = ulNextFreeBlock;
- if(( rc = UpdateHeadNextNode()) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw rc;
- }
- }
- else // remove out of the middle or end
- {
- ulNextFreeBlock2 = ulNextFreeBlock;
- if(( rc = ReadBlockHeader( ulPrevNode, 2 )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw rc;
- }
- ulNextFreeBlock = ulNextFreeBlock2;
- if(( rc = WriteBlockHeader( ulPrevNode, 2 )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw rc;
- }
- }
- } else { // only take a portion of this set
- if( ulPrevNode == 0 ){ // first in the set
- ulHdrNextBlock = ulLocation + ulBlocksNeeded;
- if(( rc = UpdateHeadNextNode()) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw rc;
- }
- ulFreeBlockCnt -= ulBlocksNeeded;
- if(( rc = WriteBlockHeader( ulHdrNextBlock, 2 )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw rc;
- }
- }
- else { // remove out of the middle or end
- ulNewFreeBlocks = ulFreeBlockCnt - ulBlocksNeeded;
- ulSaveNextFreeBlock = ulNextFreeBlock;
- ulNextFreeBlock2 = ulLocation + ulBlocksNeeded;
-
- if(( rc = ReadBlockHeader( ulPrevNode, 2 )) != XB_NO_ERROR ){
- iErrorStop = 160;
- throw rc;
- }
- ulNextFreeBlock = ulNextFreeBlock2;
- if(( rc = WriteBlockHeader( ulPrevNode, 2 )) != XB_NO_ERROR ){
- iErrorStop = 170;
- throw rc;
- }
- ulFreeBlockCnt = ulNewFreeBlocks;
- ulNextFreeBlock = ulSaveNextFreeBlock;
- if(( rc = WriteBlockHeader( ulNextFreeBlock2, 2 )) != XB_NO_ERROR ){
- iErrorStop = 180;
- throw rc;
- }
- }
- }
- }
- catch (xbInt16 rc ){
- xbString sMsg;
- sMsg.Sprintf( "xbMemoDbt4::GetBlockSetFromChain() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( rc ));
- }
- return rc;
-}
-/***********************************************************************/
-//! @brief Get a memo field for a given field number.
-/*!
- \param iFieldNo Field number to retrieve data for.
- \param sMemoData Output - string containing memo field data.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbMemoDbt4::GetMemoField( xbInt16 iFieldNo, xbString & sMemoData ){
-
- xbUInt32 ulBlockNo;
- xbUInt32 ulMemoFieldLen;
- xbUInt32 ulMemoFieldDataLen;
- xbInt16 rc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- char *p = NULL;
-
- try{
- if(( rc = GetMemoFieldLen( iFieldNo, ulMemoFieldLen, ulBlockNo )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw rc;
- }
-
- if( ulBlockNo == 0L || ulMemoFieldLen == 0L )
- sMemoData = "";
- else{
- ulMemoFieldDataLen = ulMemoFieldLen - 8;
-
- if(( p = (char *)calloc(1, ulMemoFieldDataLen+1)) == NULL ){
- iErrorStop = 110;
- rc = XB_NO_MEMORY;
- xbString sMsg;
- sMsg.Sprintf( "xbMemoDbt4::GetMemoField() lBlockNo = %ld Data Len = [%ld]", ulBlockNo, ulMemoFieldDataLen + 1 );
- xbase->WriteLogMessage( sMsg.Str() );
- throw rc;
- }
-
- // go to the first block of the memo field, skip past the first 8 bytes
- if(( xbFseek( ( ulBlockNo * GetBlockSize() + 8 ), SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 120;
- rc = XB_SEEK_ERROR;
- throw rc;
- }
-
- // read the memo file data into buffer pointed to by "p"
- if(( rc = xbFread( p, ulMemoFieldDataLen, 1 )) != XB_NO_ERROR ){
- iErrorStop = 130;
- rc = XB_READ_ERROR;
- throw rc;
- }
- // null terminate the string
- char *p2;
- p2 = p + ulMemoFieldDataLen;
- *p2 = 0x00;
-
- // save it to the string
- sMemoData.Set( p, ulMemoFieldDataLen + 1 );
- free( p );
- }
- }
- catch (xbInt16 rc ){
- xbString sMsg;
- sMsg.Sprintf( "xbMemoDbt4::GetMemoField() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( rc ));
- if( p )
- free( p );
- }
- return rc;
-}
-
-/***********************************************************************/
-//! @brief Get a memo field length for a given field number.
-/*!
- \param iFieldNo Field number to retrieve data for.
- \param ulMemoFieldLen Output - length of memo field data.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbMemoDbt4::GetMemoFieldLen( xbInt16 iFieldNo, xbUInt32 &ulMemoFieldLen ){
- xbUInt32 ulBlockNo;
- return GetMemoFieldLen( iFieldNo, ulMemoFieldLen, ulBlockNo );
-}
-
-/***********************************************************************/
-//! @brief Get a memo field length for a given field number.
-/*!
- \param iFieldNo Field number to retrieve data for.
- \param ulMemoFieldLen Output - length of memo field data.
- \param ulBlockNo Output - Starting block number.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbMemoDbt4::GetMemoFieldLen( xbInt16 iFieldNo, xbUInt32 &ulMemoFieldLen, xbUInt32 &ulBlockNo ){
-
- xbInt16 rc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
- char cFieldType;
-
- try{
-
- if(( rc = dbf->GetFieldType( iFieldNo, cFieldType )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw rc;
- }
- if( cFieldType != 'M' ){
- iErrorStop = 110;
- rc = XB_INVALID_MEMO_FIELD;
- throw rc;
- }
- if(( rc = dbf->GetULongField( iFieldNo, ulBlockNo )) < XB_NO_ERROR ){
- iErrorStop = 120;
- throw rc;
- }
- if( ulBlockNo < 1 ){
- ulMemoFieldLen = 0;
- return XB_NO_ERROR;
- }
- if(( rc = ReadBlockHeader( ulBlockNo, 1 )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw rc;
- }
- ulMemoFieldLen = ulFieldLen;
- }
- catch (xbInt16 rc ){
- xbString sMsg;
- sMsg.Sprintf( "xbMemoDbt4::GetMemoFieldLen() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( rc ));
- }
- return rc;
-}
-/***********************************************************************/
-//! @brief Open memo file.
-/*!
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbMemoDbt4::OpenMemoFile() {
-
- xbInt16 iErrorStop = 0;
- xbInt16 rc = XB_NO_ERROR;
-
- try{
- if(( rc = xbFopen( dbf->GetOpenMode(), dbf->GetShareMode())) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw rc;
- }
- if(( rc = ReadDbtHeader( 1 )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw rc;
- }
- if(( mbb = (void *) malloc( GetBlockSize())) == NULL ){
- xbFclose();
- iErrorStop = 120;
- rc = XB_NO_MEMORY;
- throw rc;
- }
- }
- catch (xbInt16 rc ){
- xbString sMsg;
- sMsg.Sprintf( "xbMemoDbt4::OpenMemoFile() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( rc ));
- }
- return rc;
-}
-/***********************************************************************/
-//! @brief Pack memo file.
-/*!
- This routine frees up any unused blocks in the file resulting from field updates.
- Version 3 memo files do not reclaim unused space (Version 4 files do).
- This routine cleans up the unused space.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbMemoDbt4::PackMemo( void (*memoStatusFunc ) ( xbUInt32 ulItemNum, xbUInt32 ulNumItems )){
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
- char * cBlock = NULL;
-
- #ifdef XB_LOCKING_SUPPORT
- xbBool bTableLocked = xbFalse;
- xbBool bMemoLocked = xbFalse;
- #endif
-
- try{
- #ifdef XB_LOCKING_SUPPORT
- if( dbf->GetAutoLock() && !dbf->GetTableLocked() ){
- if(( iRc = dbf->LockTable( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- } else {
- bTableLocked = xbTrue;
- }
- if(( iRc = LockMemo( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- } else {
- bMemoLocked = xbTrue;
- }
- }
- #endif
-
- // create temp file
- xbString sTempMemoName;
- if(( iRc = CreateUniqueFileName( GetDirectory(), "dbt", sTempMemoName )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
-
- xbMemoDbt4 *pMemo = new xbMemoDbt4( dbf, sTempMemoName );
- if(( iRc = pMemo->CreateMemoFile()) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- // for dbase III, block size is always 512, don't need to reset it
- // for each record in dbf
- xbUInt32 ulRecCnt;
- if(( iRc = dbf->GetRecordCnt( ulRecCnt)) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
- xbInt32 lFldCnt = dbf->GetFieldCnt();
- char cFldType;
- xbString sMemoFldData;
-
- for( xbUInt32 ulI = 1; ulI <= ulRecCnt; ulI++ ){
- if(( iRc = dbf->GetRecord( ulI )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
-
- if( (void *) memoStatusFunc)
- (*memoStatusFunc)(ulI, ulRecCnt );
-
- // for each memo field
- for( xbInt32 lFc = 0; lFc < lFldCnt; lFc++ ){
- if(( iRc = dbf->GetFieldType( lFc, cFldType )) != XB_NO_ERROR ){
- iErrorStop = 160;
- throw iRc;
- }
- if( cFldType == 'M' ){
- // copy it to work field
- if(( iRc = dbf->GetMemoField( lFc, sMemoFldData )) != XB_NO_ERROR ){
- iErrorStop = 170;
- throw iRc;
- }
- // write it to new field
- if(( iRc = pMemo->UpdateMemoField( lFc, sMemoFldData )) != XB_NO_ERROR ){
- iErrorStop = 180;
- throw iRc;
- }
- }
- }
- }
-
- //copy target back to source
- xbUInt32 ulBlkSize = GetBlockSize();
- xbUInt64 ullFileSize;
- if(( iRc = pMemo->GetFileSize( ullFileSize )) != XB_NO_ERROR ){
- iErrorStop = 190;
- throw iRc;
- }
- // file size should be evenly divisible by block size
- xbUInt32 ulBlkCnt;
-
- if( ullFileSize % ulBlkSize ){
- iErrorStop = 200;
- throw iRc;
- } else {
- ulBlkCnt = (xbUInt32) (ullFileSize / ulBlkSize);
- }
- if(( iRc = xbTruncate( 0 )) != XB_NO_ERROR ){
- iErrorStop = 210;
- throw iRc;
- }
-
- if(( cBlock = (char *) malloc( ulBlkSize )) == NULL ){
- iErrorStop = 220;
- throw iRc;
- }
-
- // can't rename files in a multiuser, cross platform environment, causes issues
- // copy work table back to source table
-
- for( xbUInt32 ulBc = 0; ulBc < ulBlkCnt; ulBc++ ){
- if(( iRc = pMemo->ReadBlock( ulBc, ulBlkSize, cBlock )) != XB_NO_ERROR ){
- iErrorStop = 230;
- throw iRc;
- }
- if(( iRc = WriteBlock( ulBc, ulBlkSize, cBlock )) != XB_NO_ERROR ){
- iErrorStop = 240;
- throw iRc;
- }
- }
-
- if(( xbFseek( 8, SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 250;
- iRc = XB_SEEK_ERROR;
- throw iRc;
- }
-
- for( int i = 1; i < 9; i++ )
- xbFputc( sDbfFileNameWoExt[i] );
-
- //close and delete target
- if(( iRc = pMemo->xbFclose()) != XB_NO_ERROR ){
- iErrorStop = 260;
- throw iRc;
- }
- if(( iRc = pMemo->xbRemove()) != XB_NO_ERROR ){
- iErrorStop = 270;
- throw iRc;
- }
- free( cBlock );
- delete pMemo;
-
- }
- catch (xbInt16 iRc ){
- free( cBlock );
-
- xbString sMsg;
- sMsg.Sprintf( "xbMemoDbt4::PackMemo() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- #ifdef XB_LOCKING_SUPPORT
- if( bTableLocked )
- dbf->LockTable( XB_UNLOCK );
- if( bMemoLocked )
- LockMemo( XB_UNLOCK );
- #endif
- return iRc;
-}
-/***********************************************************************/
-//! @brief Read block header.
-/*!
- \param ulBlockNo Block to read
- \param iOption 1 - Read fields option 1
- 2 - Read fields option 2
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbMemoDbt4::ReadBlockHeader( xbUInt32 ulBlockNo, xbInt16 iOption ) {
-
- xbInt16 rc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
-
- try{
-
- if(( rc = ReadBlock( ulBlockNo, 8, mbb )) != XB_NO_ERROR ){
- iErrorStop = 100;
- rc = XB_READ_ERROR;
- }
- if( iOption == 1 ){
- iField1 = eGetInt16((char *) mbb );
- iStartPos = eGetInt16((char *) mbb+2);
- ulFieldLen = eGetUInt32((char *) mbb+4);
- }
- else if( iOption == 2 ){
- ulNextFreeBlock = eGetUInt32((char *) mbb );
- ulFreeBlockCnt = eGetUInt32((char *) mbb+4 );
- }
- else{
- iErrorStop = 110;
- rc = XB_INVALID_OPTION;
- throw rc;
- }
- }
- catch (xbInt16 rc ){
- xbString sMsg;
- sMsg.Sprintf( "xbMemoDbt4::ReadBlockHeader() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( rc ));
- }
- return rc;
-}
-/***********************************************************************/
-//! @brief Read dbt header file.
-/*!
- \param iOption 0 --> read only first four bytes<br>
- 1 --> read the entire thing
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbMemoDbt4::ReadDbtHeader( xbInt16 iOption ) {
-
- xbInt16 iErrorStop = 0;
- xbInt16 rc = XB_NO_ERROR;
- xbInt16 iReadLen = 0;
- char *p;
- char MemoBlock[22];
-
- try{
- if( !FileIsOpen() ){
- iErrorStop = 100;
- rc = XB_NOT_OPEN;
- throw rc;
- }
- if( xbFseek( 0, SEEK_SET )){
- iErrorStop = 110;
- rc = XB_SEEK_ERROR;
- throw rc;
- }
- if( iOption )
- iReadLen = 22;
- else
- iReadLen = 4;
-
- if(( xbFread( &MemoBlock, (size_t) iReadLen, 1 )) != XB_NO_ERROR ){
- iErrorStop = 120;
- rc = XB_READ_ERROR;
- throw rc;
- }
-
- p = MemoBlock;
- ulHdrNextBlock = eGetUInt32( p );
- if( iOption == 0)
- return XB_NO_ERROR;
-
- p += 8;
- sDbfFileNameWoExt = "";
- for( int i = 0; i < 8; i++ )
- sDbfFileNameWoExt += *p++;
-
- p += 4;
- SetBlockSize( (xbUInt32) eGetInt16( p ));
-
- cVersion = MemoBlock[16];
-
- }
- catch (xbInt16 rc ){
-
- xbString sMsg;
- sMsg.Sprintf( "xbMemoDbt4::ReadDbtHeader() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( rc ));
- }
- return rc;
-}
-
-/***********************************************************************/
-#ifdef XB_DEBUG_SUPPORT
-//! @brief Read free block information from header.
-/*!
- This routing pulls any reusable block information for file header.
- Not used with version 3 memo files - stub.
-
- \param ulBlockNo
- \param ulNextBlock
- \param ulFreeBlockCnt
- \returns XB_NO_ERROR
-*/
-xbInt16 xbMemoDbt4::ReadFreeBlockHeader( xbUInt32 ulBlockNo, xbUInt32 &ulNextBlock, xbUInt32 &ulFreeBlockCount ){
-
- xbInt16 rc = XB_NO_ERROR;
- rc = ReadBlockHeader( ulBlockNo, 2 );
- ulNextBlock = ulNextFreeBlock;
- ulFreeBlockCount = ulFreeBlockCnt;
- return rc;
-}
-#endif
-/***********************************************************************/
-//! @brief Update header name.
-/*!
- \returns XB_NO_ERROR
-*/
-xbInt16 xbMemoDbt4::UpdateHeaderName() {
-
- xbInt16 rc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
-
- GetFileNamePart( sDbfFileNameWoExt );
- sDbfFileNameWoExt.PadRight( ' ', 8 ); // need at least eight bytes of name
- sDbfFileNameWoExt = sDbfFileNameWoExt.Mid( 1, 8 ); // need no more than eight bytes of name
-
- try{
- if(( rc = xbFseek( 8, SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw rc;
- }
-
- for( int i = 1; i < 9; i++ ){
- if(( rc = xbFputc( sDbfFileNameWoExt[i] )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw rc;
- }
- }
- }
- catch (xbInt16 rc ){
- xbString sMsg;
- sMsg.Sprintf( "xbMemoDbt4::UpdateHeaderName() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( rc ));
- }
- return rc;
-}
-/***********************************************************************/
-//! @brief Update a memo field length for a given field number.
-/*!
- \param iFieldNo Field number to update data for.
- \param sMemoData Data to update memo field data with.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbMemoDbt4::UpdateMemoField( xbInt16 iFieldNo, const xbString & sMemoData ) {
-
- xbInt16 iErrorStop = 0;
- xbInt16 rc = XB_NO_ERROR;
- xbUInt32 ulBlockNo;
-
- try{
-
- if(( rc = dbf->GetULongField( iFieldNo, ulBlockNo )) < XB_NO_ERROR ){
- iErrorStop = 100;
- throw rc;
- }
-
- if( sMemoData == "" ){
- if( ulBlockNo == 0 ){
- /* if nothing to do, return */
- return XB_NO_ERROR;
- } else {
-
- // if this is in the new blocks link list already, then this is not the first update for this memo field
- // this would be second or third update on the field since the original change and not commited
- // Since it won't be needed in either a Commmit() or Abort(), can be freed immediately
- if( llNewBlocks.SearchFor( ulBlockNo ) > 0 ){
- if(( rc = FreeMemoBlockChain( ulBlockNo )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw rc;
- }
- if(( llNewBlocks.RemoveByVal( ulBlockNo )) < XB_NO_ERROR ){
- iErrorStop = 120;
- throw rc;
- }
- } else {
- // first revision, save what it was in case of Abort() command
- if(( llOldBlocks.InsertAtFront( ulBlockNo )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw rc;
- }
- }
- if(( rc = dbf->PutField( iFieldNo, "" )) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw rc;
- }
- }
- } else {
- // free up the old space
- xbUInt32 ulLastDataBlock = 0L;
-
- if( ulBlockNo > 0 ){
- if( llNewBlocks.SearchFor( ulBlockNo ) > 0 ){
-
- if(( rc = FreeMemoBlockChain( ulBlockNo, ulLastDataBlock )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw rc;
- }
- } else {
- // first revision, save what it was in case of Abort() command
- if(( rc = llOldBlocks.InsertAtFront( ulBlockNo )) != XB_NO_ERROR ){
- iErrorStop = 160;
- throw rc;
- }
- }
- }
- // should next line be unsigned 32 bit int?
- xbUInt32 ulTotalLen = 8 + sMemoData.Len();
- xbUInt32 ulBlocksNeeded;
- if( ulTotalLen % GetBlockSize())
- ulBlocksNeeded = ulTotalLen / GetBlockSize() + 1;
- else
- ulBlocksNeeded = ulTotalLen / GetBlockSize();
-
- xbBool bUsedBlockFound;
- xbUInt32 ulHeadBlock;
- xbUInt32 ulPrevNode;
- if(( rc = FindBlockSetInChain( ulBlocksNeeded, ulLastDataBlock, ulHeadBlock, ulPrevNode, bUsedBlockFound )) != XB_NO_ERROR ){
- iErrorStop = 170;
- throw rc;
- }
- iField1 = -1;
- iStartPos = 8;
- ulFieldLen = sMemoData.Len() + 8;
-
- if( bUsedBlockFound ){
-
- if(( rc = GetBlockSetFromChain( ulBlocksNeeded, ulHeadBlock, ulPrevNode )) != XB_NO_ERROR ){
- iErrorStop = 180;
- throw rc;
- }
-
- if(( rc = WriteBlockHeader( ulHeadBlock, 1 )) != XB_NO_ERROR ){
- iErrorStop = 190;
- throw rc;
- }
-
- if(( rc = xbFwrite( sMemoData.Str(), sMemoData.Len(), 1 )) != XB_NO_ERROR ){
- iErrorStop = 200;
- throw rc;
- }
- } else { // append to the end
-
- if(( rc = WriteBlockHeader( ulLastDataBlock, 1 )) != XB_NO_ERROR ){
- iErrorStop = 220;
- throw rc;
- }
-
- if(( rc = xbFwrite( sMemoData.Str(), sMemoData.Len(), 1 )) != XB_NO_ERROR ){
- iErrorStop = 230;
- throw rc;
- }
-
- if(( rc = xbFputc( 0x00, (xbInt32)((ulBlocksNeeded * GetBlockSize()) - (sMemoData.Len() + 8)))) != XB_NO_ERROR ){
- iErrorStop = 240;
- throw rc;
- }
-
- if( ulLastDataBlock == ulHdrNextBlock ){ // this is first node to be added to the node chain
- ulHdrNextBlock += ulBlocksNeeded;
- ulHeadBlock = ulLastDataBlock;
- if(( rc = UpdateHeadNextNode()) != XB_NO_ERROR ){
- iErrorStop = 250;
- throw rc;
- }
-
- } else { // adding memo data to the end of the file, but chain exists
-
- ulNextFreeBlock = ulLastDataBlock + ulBlocksNeeded;
- ulHeadBlock = ulLastDataBlock;
- if(( rc = WriteBlockHeader( ulPrevNode, 2 )) != XB_NO_ERROR ){
- iErrorStop = 260;
- throw rc;
- }
- }
- }
-
- if(( rc = llNewBlocks.InsertAtFront( ulHeadBlock )) != XB_NO_ERROR ){ // In case of Abort(), this block needs to be freed
- iErrorStop = 270;
- throw rc;
- }
- if(( rc = dbf->PutLongField( iFieldNo, (xbInt32) ulHeadBlock )) != XB_NO_ERROR ){
- iErrorStop = 280;
- throw rc;
- }
- }
- }
-
- catch (xbInt16 rc ){
- xbString sMsg;
- sMsg.Sprintf( "xbMemoDbt4::UpdateMemoField() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( rc ));
- }
- return rc;
-}
-/***********************************************************************/
-//! @brief Write block header.
-/*!
- \param ulBlockNo Block to read
- \param iOption 1 - Read fields option 1
- 2 - Read fields option 2
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbMemoDbt4::WriteBlockHeader( xbUInt32 ulBlockNo, xbInt16 iOption ) {
-
- xbInt16 rc = XB_NO_ERROR;
- xbInt16 iErrorStop = 0;
-
- try{
- if( iOption == 1 ){
- ePutInt16 ((char *) mbb, iField1 );
- ePutInt16 ((char *) mbb+2, iStartPos );
- ePutUInt32((char *) mbb+4, ulFieldLen );
- }
- else if( iOption == 2 ){
- ePutUInt32((char *) mbb, ulNextFreeBlock );
- ePutUInt32((char *) mbb+4, ulFreeBlockCnt );
- }
- else{
- iErrorStop = 100;
- rc = XB_INVALID_OPTION;
- throw rc;
- }
-
- if(( rc = WriteBlock( ulBlockNo, 8, mbb )) != XB_NO_ERROR ){
- iErrorStop = 110;
- rc = XB_READ_ERROR;
- }
- }
- catch (xbInt16 rc ){
- xbString sMsg;
- sMsg.Sprintf( "xbMemoDbt4::WriteHeader() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( rc ));
- }
- return rc;
-}
-/***********************************************************************/
-//! @brief Empty the memo file.
-/*!
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbMemoDbt4::Zap(){
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
- char cBuf[4];
- try{
- ulHdrNextBlock = 1L;
- ePutUInt32( cBuf, ulHdrNextBlock );
-
- if(( iRc != xbFseek( 0, SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- if(( iRc != xbFwrite( cBuf, 4, 1 ))!= XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- if(( iRc != xbTruncate( GetBlockSize())) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- }
-
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbMemoDbt4::Zap() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}/***********************************************************************/
-} /* namespace */
-#endif /* XB_DBF4_SUPPORT */
-#endif /* XB_MEMO_SUPPORT */
-
diff --git a/src/core/xbssv.cpp b/src/core/xbssv.cpp
deleted file mode 100755
index d3e1070..0000000
--- a/src/core/xbssv.cpp
+++ /dev/null
@@ -1,573 +0,0 @@
-/* xbssv.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-#include "xbase.h"
-
-namespace xb{
-
-const xbErrorMessage xbErrorMessages[] = {
- { XB_NO_ERROR, "No Error" },
- { XB_NO_MEMORY, "No Memory" },
- { XB_INVALID_OPTION, "Invalid Option" },
- { XB_DUP_TABLE_OR_ALIAS, "Duplicate Alias/Table Name" },
- { XB_INVALID_NODELINK, "Invalid Node Link" },
- { XB_KEY_NOT_UNIQUE, "Key Not Unique" },
- { XB_MEMCPY_ERROR, "Memory copy failure" },
- { XB_FILE_EXISTS, "File Already Exists" },
- { XB_ALREADY_OPEN, "Database already open" },
- { XB_DBF_FILE_NOT_OPEN, "DBF File Not Open" },
- { XB_FILE_NOT_FOUND, "File not found" },
- { XB_FILE_TYPE_NOT_SUPPORTED, "Not an Xbase type database" },
- { XB_RENAME_ERROR, "Unable to rename file" },
- { XB_INVALID_OBJECT, "Invalid Object" },
- { XB_NOT_OPEN, "Database not open" },
- { XB_NOT_FOUND, "Not Found" },
- { XB_OPEN_ERROR, "Open Error" },
- { XB_CLOSE_ERROR, "Close Error" },
- { XB_SEEK_ERROR, "Seek Error" },
- { XB_READ_ERROR, "Read Error" },
- { XB_WRITE_ERROR, "Error writing to disk drive" },
- { XB_EOF, "End Of File" },
- { XB_BOF, "Beginning Of File" },
- { XB_INVALID_BLOCK_SIZE, "Invalid Block Size" },
- { XB_INVALID_BLOCK_NO, "Invalid Block Number" },
- { XB_INVALID_RECORD, "Invalid Record Number" },
- { XB_DELETE_FAILED, "Delete Failed" },
- { XB_INVALID_TABLE_NAME, "Invalid Table Name" },
- { XB_EMPTY, "Empty Table or Index" },
- { XB_LIMIT_REACHED, "Limit Reached" },
- { XB_BLOCKREAD_NOT_ENABLED, "Block Read Mode is not enabled" },
- { XB_DIRECTORY_ERROR, "Directory Read/Write error" },
- { XB_INVALID_FIELD_TYPE, "Unknown Field Type" },
- { XB_INVALID_FIELD_NO, "Invalid Field Number" },
- { XB_INVALID_DATA, "Invalid Data" },
- { XB_INVALID_FIELD_NAME, "Invalid Field Name" },
- { XB_INVALID_MEMO_FIELD, "Not a Memo field" },
- { XB_INVALID_FIELD, "Invalid Field" },
- { XB_INVALID_FIELD_LEN, "Invalid Field Length" },
- { XB_INVALID_DATE, "Invalid Date" },
- { XB_INVALID_LOCK_OPTION, "Invalid Lock Option" },
- { XB_LOCK_FAILED, "Lock Failed" },
- { XB_TABLE_NOT_LOCKED, "Table Not Locked" },
- { XB_PARSE_ERROR, "Parse Error" },
- { XB_INVALID_FUNCTION, "Invalid or Undefined Function" },
- { XB_INVALID_PARM, "Invalid Parm" },
- { XB_INCONSISTENT_PARM_LENS, "Inconsistent parm lengths" },
- { XB_INCOMPATIBLE_OPERANDS, "Incompatible operands" },
- { XB_UNBALANCED_PARENS, "Unbalanced Parens" },
- { XB_UNBALANCED_QUOTES, "Unbalanced Quotes" },
- { XB_INVALID_EXPRESSION, "Invalid expression" },
- { XB_INVALID_KEYNO, "Invalid Key Number" },
- { XB_INVALID_INDEX, "Index File Error" },
- { XB_INVALID_TAG, "Invalid index tag" },
- { XB_SYNTAX_ERROR, "Invalid SQL Syntax" },
- { XB_MAX_ERROR_NO, "End of Error List" }
-};
-// see also xbretcod.h
-
-
-xbInt16 xbSsv::iEndianType = 0;
-xbString xbSsv::sDefaultDateFormat = "MM/DD/YY";
-
-xbInt16 xbSsv::iDefaultFileVersion = 4;
-xbString xbSsv::sNullString = "";
-xbBool xbSsv::bDefaultAutoCommit = xbTrue;
-
-
-#ifdef WIN32
-xbString xbSsv::sDataDirectory = PROJECT_DATA_DIR;
-#else
-xbString xbSsv::sDataDirectory = PROJECT_DATA_DIR;
-#endif //
-
-#ifdef XB_LOGGING_SUPPORT
-xbString xbSsv::sLogDirectory = PROJECT_LOG_DIR;
-//xbString xbSsv::sLogDirectory = "";
-xbString xbSsv::sLogFileName = PROJECT_DFLT_LOGFILE;
-#endif // XB_LOGGING_SUPPORT
-
-#ifdef XB_LOCKING_SUPPORT
-xbInt32 xbSsv::lDefaultLockWait = 100;
-xbInt16 xbSsv::iDefaultLockRetries = 3;
-xbBool xbSsv::bDefaultAutoLock = xbTrue;
-xbInt16 xbSsv::iDefaultLockFlavor = 1;
-xbBool xbSsv::bMultiUser = xbTrue;
-#else
-xbBool xbSsv::bMultiUser = xbFalse;
-#endif // XB_LOCKING_SUPPORT
-
-#if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
-xbInt16 xbSsv::iUniqueKeyOpt = XB_HALT_ON_DUPKEY;
- // is one of XB_HALT_ON_DUPKEY || XB_EMULATE_DBASE
-#endif // defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
-
-
-#ifdef XB_MDX_SUPPORT
-xbInt16 xbSsv::iCreateMdxBlockSize = 1024; // 1024 is DBase 7 default size for MDX index blocks
-#endif // XB_MDX_SUPPORT
-
-#ifdef XB_BLOCKREAD_SUPPORT
-xbUInt32 xbSsv::ulDefaultBlockReadSize = 32768; // 32K buffer for block DBF datafile reads
-#endif // XB_BLOCKREAD_SUPPORT
-
-/*************************************************************************/
-//! @brief Class Constructor.
-xbSsv::xbSsv(){}
-/*************************************************************************/
-void xbSsv::BitDump( unsigned char c ) const {
- for( int i = 7; i >= 0; i-- )
- std::cout << (BitSet( c, i ) ? 1 : 0);
-}
-void xbSsv::BitDump( char c ) const {
- BitDump( (unsigned char) c );
-}
-/*************************************************************************/
-//! @brief Check a bit in a one byte field and see if it is set.
-/*!
- \param c One byte char field to examine.
- \param iBitNo which bit to examine.
- \returns xbTrue Bit is set<br>
- xbFalse Bit is not set
-*/
-xbBool xbSsv::BitSet( unsigned char c, xbInt16 iBitNo ) const {
- return c & 1 << iBitNo;
-}
-/*************************************************************************/
-//! @brief Display error message on console for a given error number.
-/*!
- \param iErrorCode Error number to reference
-*/
-void xbSsv::DisplayError( xbInt16 iErrorCode ) const {
- std::cout << (const char *) GetErrorMessage( iErrorCode ) << std::endl;
-}
-/*************************************************************************/
-//! @brief Get the default auto commit setting.
-/*!
-
- When auto commit is enabled, the library will automatically post any updates
- when moving off an updated record or closing files.
- If auto commit is disabled, the application program will need to explicitly
- update the tables using using dbf->Put() and dbf->AppendRecord().
-
- \returns xbTrue if auto commit is turned on<br>
- xbFalse is auto commit is turned off
-*/
-
-xbBool xbSsv::GetDefaultAutoCommit() const {
- return bDefaultAutoCommit;
-}
-/*************************************************************************/
-//! @brief Get the current data directory.
-/*!
- \returns xbString containing the current data directory
- where the database files are stored.
-*/
-
-xbString &xbSsv::GetDataDirectory() const {
- return sDataDirectory;
-}
-/*************************************************************************/
-//! @brief Get the default date format.
-/*!
- \returns xbString containing the default date format.
-*/
-
-xbString & xbSsv::GetDefaultDateFormat() const {
- return sDefaultDateFormat;
-}
-/*************************************************************************/
-//! @brief Get the Endian type.
-/*!
- \returns B - Big endian<br>
- L - Little endian<br>
-*/
-xbInt16 xbSsv::GetEndianType() const {
- return iEndianType;
-}
-/*************************************************************************/
-//! @brief Get an error message.
-/*!
- \param iErrorCode ErrorCode is the error number of description to be returned.
- \returns Returns a pointer to a string containing a text description for the error code.
-*/
-
-const char * xbSsv::GetErrorMessage( xbInt16 iErrorCode ) const{
-
- if( iErrorCode > 0 || iErrorCode <= XB_MAX_ERROR_NO )
- return "";
-
- xbBool bFound = xbFalse;
- xbInt16 iCtr = 0;
- while( !bFound ){
- if( xbErrorMessages[iCtr].iErrorNo == XB_MAX_ERROR_NO )
- return "Unknown Error";
- if( xbErrorMessages[iCtr].iErrorNo == iErrorCode )
- return xbErrorMessages[iCtr].sErrorText;
- iCtr++;
- }
- return "";
-}
-/*************************************************************************/
-//! @brief Get home directory.
-/*!
- \param sHomeDirOut - Output home directory for current user.
- \returns void
-*/
-
-void xbSsv::GetHomeDir( xbString &sHomeDirOut ){
-
- #ifdef WIN32
- sHomeDirOut.Sprintf( "%s%s", getenv( "HOMEDRIVE" ), getenv( "HOMEPATH" ));
- #else
- sHomeDirOut.Sprintf( "%s", getenv( "HOME" ));
- sHomeDirOut.Trim();
- if( sHomeDirOut == "" )
- sHomeDirOut.Sprintf( "%s", getpwuid( getuid())->pw_dir );
- #endif
- sHomeDirOut.Trim();
-}
-/*************************************************************************/
-//! @brief Set the data directory.
-/*!
- \param sDataDirectory Set the data direcroty.
-*/
-
-void xbSsv::SetDataDirectory( const xbString &sDataDirectory ){
- this->sDataDirectory = sDataDirectory;
-
- #ifdef WIN32
- this->sDataDirectory.SwapChars( '/', '\\' );
- #else
- this->sDataDirectory.SwapChars( '\\', '/' );
- #endif
-
-}
-
-/*************************************************************************/
-//! @brief Set the default date format.
-/*!
- \param sDefaultDateFormat Set the default date format.
-*/
-
-void xbSsv::SetDefaultDateFormat( const xbString &sDefaultDateFormat ) {
- this->sDefaultDateFormat = sDefaultDateFormat;
-}
-
-/*************************************************************************/
-//! @brief Set the default auto commit.
-/*!
-
- Disabling auto commit requires the application execute explicit updates
- using dbf->Put() and dbf->AppendRecord(). With auto commit on, the library
- posts updates automatically when moving off the current record or closing
- a file.
-
- \param bDefaultAutoCommit xbTrue - Enable default auto commit.<br>
- xbFalse - Disable default auto commit.<br>
-*/
-
-void xbSsv::SetDefaultAutoCommit( xbBool bDefaultAutoCommit ) {
- this->bDefaultAutoCommit = bDefaultAutoCommit;
-}
-/*************************************************************************/
-//! @brief Set the endian type
-/*!
- This routine determines the Endian-ness at run time instead of
- compile time as some processers (ie; Sparc,ARM) can be switched either way.
- This routine is called automatically by the library at startup and does not
- need to be called in an application program.
-
-*/
-
-void xbSsv::SetEndianType() {
- xbInt16 e = 1;
- iEndianType = *(char *) &e;
- if( iEndianType )
- iEndianType = 'L';
- else
- iEndianType = 'B';
- return;
-}
-
-/*************************************************************************/
-#ifdef XB_LOGGING_SUPPORT
-
-//! @brief Get the default log file name.
-/*!
- \returns Returns the log file name.
-*/
-xbString & xbSsv::GetLogFileName() const {
- return sLogFileName;
-}
-
-/*************************************************************************/
-//! @brief Get the default log directory.
-/*!
- \returns Returns the log directory.
-*/
-xbString & xbSsv::GetLogDirectory() const {
- return sLogDirectory;
-}
-
-
-/*************************************************************************/
-//! @brief Set the default log directory name.
-/*!
- \param sLogDirectory Name of desired log directory.
-
-*/
-void xbSsv::SetLogDirectory( const xbString &sLogDirectoryIn ){
-
- this->sLogDirectory = sLogDirectoryIn;
- #ifdef WIN32
- this->sLogDirectory.SwapChars( '/', '\\' );
- #else
- this->sLogDirectory.SwapChars( '\\', '/' );
- #endif
-
-}
-
-#else
-
-xbString & xbSsv::GetLogFileName() const {
- return sNullString;
-}
-
-xbString & xbSsv::GetLogDirectory() const {
- return sNullString;
-}
-
-void xbSsv::SetLogDirectory( const xbString &sLogDirectory ){
- return;
-}
-
-#endif
-
-/*************************************************************************/
-
-#ifdef XB_LOCKING_SUPPORT
-
-//! @brief Get the default lock retries.
-/*!
- This is the number of lock attempts the libary will make before returning
- failure if the file can not be locked.
- \returns Default lock retry count.
-*/
-xbInt16 xbSsv::GetDefaultLockRetries() const {
- return iDefaultLockRetries;
-}
-
-//! @brief Set the default lock retries.
-/*!
- \param iDefaultLockRetries - Number of lock attempts before returning failure.
-*/
-void xbSsv::SetDefaultLockRetries( xbInt16 iDefaultLockRetries ) {
- this->iDefaultLockRetries = iDefaultLockRetries;
-}
-
-//! @brief Get the default auto lock setting.
-/*!
- When auto locking is turned on, the library automatically locks and unlocks
- files and indices as needed in a multi user environment.
- \returns Number of lock attempt settings.
-*/
-xbBool xbSsv::GetDefaultAutoLock() const {
- return bDefaultAutoLock;
-}
-
-
-//! @brief Set the default auto lock setting.
-/*!
- When auto locking is turned on, the library automatically locks and unlocks
- files and indices as needed in a multi user environment. Locking is not required
- in single a single user environment.
-
- \param bDefaultAutoLock xbTrue - Turn autolocking on<br>
- xbFalse - Turn autolocking off<br>
-*/
-void xbSsv::SetDefaultAutoLock( xbBool bDefaultAutoLock ) {
- this->bDefaultAutoLock = bDefaultAutoLock;
-}
-
-//! @brief Enable default auto locking.
-/*!
- When auto locking is turned on, the library automatically locks and unlocks
- files and indices as needed in a multi user environment.
-*/
-void xbSsv::EnableDefaultAutoLock() {
- this->bDefaultAutoLock = xbTrue;
-}
-
-//! @brief Disable defalt auto locking.
-/*!
- When auto locking is turned off, the library does not automatically lock
- and unlock files and indices as needed in a multi user environment.
- Locking is not needed in a single user environment.
-
-*/
-void xbSsv::DisableDefaultAutoLock() {
- this->bDefaultAutoLock = xbFalse;
-}
-/***************************************************************************/
-//! @brief Get default lock flavor
-/*!
- Currently one flavor. This routine is part of the structure to support
- future additional locking scenarios for Clipper and Foxpro.
- \returns 1
-*/
-xbInt16 xbSsv::GetDefaultLockFlavor() const {
- return iDefaultLockFlavor;
-}
-
-/***************************************************************************/
-//! @brief Set default lock flavor
-/*!
- Currently one flavor. This routine is part of the structure to support
- future additional locking scenarios for Clipper and Foxpro.
-*/
-void xbSsv::SetDefaultLockFlavor( xbInt16 iDefaultLockFlavor ) {
- this->iDefaultLockFlavor = iDefaultLockFlavor;
-}
-
-/***************************************************************************/
-//! @brief Set default lock wait
-/*!
- \param lLockWait Set default lock wait in milliseconds.
-*/
-void xbSsv::SetDefaultLockWait( xbInt32 lLockWait ) {
- this->lDefaultLockWait = lLockWait;
-}
-
-/***************************************************************************/
-//! @brief Get default lock wait
-/*!
- \returns Lock wait time in milliseconds.
-
-*/
-xbInt32 xbSsv::GetDefaultLockWait() const {
- return lDefaultLockWait;
-}
-#endif
-
-/***************************************************************************/
-//! @brief Get the multi user setting.
-/*!
- \returns xbTrue - Multi user mode turned on.<br>
- xbFalse - Multi user mode turned off.<br>
-*/
-xbBool xbSsv::GetMultiUser() const {
- return bMultiUser;
-}
-
-//! @brief Get the multi user setting.
-/*!
- \param bMultiUser xbTrue - Turn on Multi user mode.<br>
- xbFalse - Turn off Multi user mode.<br>
-*/
-void xbSsv::SetMultiUser( xbBool bMultiUser ) {
- this->bMultiUser = bMultiUser;
-}
-
-
-
-/************************************************************************/
-#ifdef XB_MDX_SUPPORT
-//! @brief Get the mdx file block size used when creating a memo file.
-/*!
- \returns system default setting for MDX block size.
-*/
-xbInt16 xbSsv::GetCreateMdxBlockSize() const {
- return iCreateMdxBlockSize;
-}
-
-/************************************************************************/
-//! @brief Create mdx block size.
-/*!
- This routine sets the mdx file block size at the system level. This value is
- used when the mdx index file is initially created so if you want to change it,
- this must be called before creating the table.
-
- \param iBlockSize - Block size, must be evenly divisible by 512 and <= 16384
- \returns XB_INVALID_BLOCK_SIZE<br>XB_NO_ERROR
-*/
-
-xbInt16 xbSsv::SetCreateMdxBlockSize( xbInt16 iBlockSize ){
-
- if( iBlockSize < 512 || iBlockSize > 16384 || iBlockSize % 512 )
- return XB_INVALID_BLOCK_SIZE;
- else
- iCreateMdxBlockSize = iBlockSize;
-
- return XB_NO_ERROR;
-}
-#endif
-
-/************************************************************************/
-#if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
-//! @brief Get Unique Key Opt
-/*!
- This routine returns the Unique Key Processing Option which is one of:
- XB_HALT_ON_DUPKEY
- XB_EMULATE_DBASE
-*/
-
-xbInt16 xbSsv::GetUniqueKeyOpt() const {
- return iUniqueKeyOpt;
-}
-
-//! @brief Set Unique Key Opt
-/*! @brief Set Unique Key Opt
- This routine Sets the Unique Key Processing Option which is one of:
- XB_HALT_ON_DUPKEY
- XB_EMULATE_DBASE
-*/
-xbInt16 xbSsv::SetUniqueKeyOpt( xbInt16 iOpt ){
- if( iOpt == XB_HALT_ON_DUPKEY || iOpt == XB_EMULATE_DBASE ){
- iUniqueKeyOpt = iOpt;
- return XB_NO_ERROR;
- } else {
- return XB_INVALID_OPTION;
- }
-}
-#endif
-/************************************************************************/
-#ifdef XB_BLOCKREAD_SUPPORT
-
-//! @brief Get Default Read Block Size
-/*!
- This routine returns the default read block size used when allocating
- buffer space for block reads of table data. Initial setting is 32768 bytes.
-*/
-xbUInt32 xbSsv::GetDefaultBlockReadSize() const {
- return ulDefaultBlockReadSize;
-}
-
-
-//! @brief Set Default Read Block Size
-/*!
- This routine sets the default read block size used when allocating
- buffer space for block reads of table data. Initial setting is 32768 bytes.
-*/
-void xbSsv::SetDefaultBlockReadSize( xbUInt32 ulDfltBlockReadSize ){
- ulDefaultBlockReadSize = ulDfltBlockReadSize;
-}
-
-#endif // XB_BLOCKREAD_SUPPORT
-/************************************************************************/
-
-
-
-
-} /* namespace */ \ No newline at end of file
diff --git a/src/core/xbstring.cpp b/src/core/xbstring.cpp
deleted file mode 100755
index 701e50e..0000000
--- a/src/core/xbstring.cpp
+++ /dev/null
@@ -1,1943 +0,0 @@
-/* xbstring.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2021,2022 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-//#ifdef __GNU LesserG__
-// #pragma implementation "xbstring.h"
-//#endif
-
-#include "xbase.h"
-
-
-namespace xb{
-
-XBDLLEXPORT const char * xbString::NullString = "";
-XBDLLEXPORT char xbString::cJunkBuf;
-
-/************************************************************************/
-//! @brief Destructor
-
-xbString::~xbString(){
- if (data != NULL)
- free(data);
-
-}
-
-/************************************************************************/
-//! @brief Constructor
-/*!
- \param ulSize - Allocation size. The allocation size is normally handled internally
- by the class, but it can be set in this constructor.
-*/
-xbString::xbString(xbUInt32 ulSize) {
- data = (char *)calloc(1, ulSize);
- this->size = ulSize;
-// memset( data, 0x00, ulSize ); - redundant, initialized by calloc
-}
-/************************************************************************/
-//! @brief Constructor
-/*!
- \param c - Initialize string to c.
-*/
-xbString::xbString(char c) {
- data = (char *)calloc(1, 2);
- data[0] = c;
- data[1] = 0;
- size = 2;
-}
-/************************************************************************/
-//! @brief Constructor
-/*!
- \param s - Initialize string to s.
-*/
-xbString::xbString( const char *s ) {
-
- if( s == NULL ){
- size = 0;
- data = NULL;
- } else {
- size = (xbUInt32) (strlen(s) + 1 );
- data = (char *) calloc( 1, size );
- xb_strcpy( data, s );
- }
- // ctor(s);
-}
-/************************************************************************/
-//! @brief Constructor
-/*!
- \param d - Initiailize string to d.
-*/
-xbString::xbString( xbDouble d ) {
- data = NULL;
- size = 0;
- Sprintf("%f", d);
-}
-/************************************************************************/
-//! @brief Constructor
-/*!
- \param s Initialize string to s.
- \param ulMaxLen Maximum length of string. Truncate any characters greater than ulMaxLen.
-*/
-xbString::xbString( const char *s, xbUInt32 ulMaxLen ) {
- xbUInt32 sSize = (xbUInt32) strlen( s );
- if( sSize < ulMaxLen )
- size = sSize;
- else
- size = ulMaxLen;
- data = (char *)calloc(1, size+1);
- for( xbUInt32 i = 0; i < size; i++ )
- data[i] = s[i];
- data[size] = '\0';
- size++; // account for null trailing byte
- return;
-}
-/************************************************************************/
-//! @brief Constructor
-/*!
- \param s Initialize string to s.
-*/
-xbString::xbString( const xbString &s ) {
- ctor(s.Str());
-}
-
-/************************************************************************/
-//! @brief Operator const char *
-/*!
- \returns Pointer to string data.
-*/
-xbString::operator const char *() const {
- return data ? data : NullString;
-}
-
-/************************************************************************/
-//! @brief Set operator =
-/*!
- \param s - Set the string to the string on the right of the equal sign.
-*/
-xbString &xbString::operator=( const xbString &s ) {
- return Set(s);
-}
-/************************************************************************/
-//! @brief Set operator =
-/*!
- \param s - Set the string to the string on the right of the equal sign.
-*/
-xbString &xbString::operator=( const char *s ) {
- return Set(s);
-}
-
-/************************************************************************/
-//! @brief Stream insertion operator <<
-/*!
- std::cout << MyString << std::endl;
-
- \param os Output stream
- \param s String to send to output stream
-*/
-std::ostream& operator<< ( std::ostream& os, const xbString & s ) {
- return os << s.Str();
-}
-/************************************************************************/
-//! @brief Append operator +=
-/*!
- \param s - Append s to the string.
-*/
-xbString &xbString::operator+=( const xbString &s ) {
-
- if (s.IsNull())
- return (*this);
-
- xbUInt32 Len = s.Len();
- xbUInt32 oldLen = this->Len();
- xbUInt32 newLen = Len + oldLen;
-
- data = (char *)realloc(data, newLen+1);
- if( !data )
- return (*this);
-
- if(oldLen == 0)
- data[0] = 0;
-
- char *t = data;
- t+= oldLen;
- for( xbUInt32 i = 0; i < Len; i++ )
- *t++ = s.GetCharacter(i+1);
-
- data[newLen] = '\0';
- size += Len;
-
- return (*this);
-}
-/************************************************************************/
-//! @brief Append operator +=
-/*!
- \param s - Append s to the string.
-*/
-xbString &xbString::operator+=( const char *s ) {
-
- if (s == NULL)
- return (*this);
- xbUInt32 Len = (xbUInt32) strlen(s);
- xbUInt32 oldLen = this->Len();
- xbUInt32 newLen = Len + oldLen;
- data = (char *)realloc(data, newLen+1);
- if(oldLen == 0)
- data[0] = 0;
- for( xbUInt32 i = 0; i < Len; i++ )
- data[i+oldLen] = s[i];
- data[newLen] = '\0';
- size += Len;
- return (*this);
-}
-/************************************************************************/
-//! @brief Append operator +=
-/*!
- \param c - Append c to the string.
-*/
-xbString &xbString::operator+=( char c ) {
- xbUInt32 Len = 1;
- xbUInt32 oldLen = this->Len();
- data = (char *)realloc(data, oldLen+Len+1);
- data[oldLen] = c;
- data[oldLen+1] = 0;
- size++;
- return (*this);
-}
-/************************************************************************/
-//! @brief Append operator -=
-/*!
- Append s to the right of this string, right trimming both strings.
- \param s - Append s to the right of the string value.
-*/
-xbString &xbString::operator-=( const xbString &s ) {
-
- Rtrim();
- if (s.IsNull())
- return (*this);
- xbUInt32 Len = s.Len();
- xbUInt32 oldLen = this->Len();
- xbUInt32 newLen = Len + oldLen;
-
- data = (char *)realloc(data, newLen+1);
- if(oldLen == 0)
- data[0] = 0;
-
- for( xbUInt32 i = 0; i < Len; i++ )
- data[i+oldLen] = s.GetCharacter(i+1);
-
- data[newLen] = '\0';
- size += Len;
- Rtrim();
- return (*this);
-}
-/************************************************************************/
-//! @brief Append operator -=
-/*!
- Append s to the right of this string, right trimming both strings.
- \param s - Append s to the right of the string value.
-*/
-xbString &xbString::operator-=(const char *s) {
-
- Rtrim();
- if (s == NULL)
- return (*this);
- xbUInt32 Len = (xbUInt32) strlen(s);
- xbUInt32 oldLen = this->Len();
- xbUInt32 newLen = Len + oldLen;
-
- data = (char *)realloc(data, newLen+1);
-
- if(oldLen == 0)
- data[0] = 0;
-
- for( xbUInt32 i = 0; i < Len; i++ )
- data[i+oldLen] = s[i];
- data[newLen] = '\0';
-
- size += Len;
- Rtrim();
- return (*this);
-}
-/************************************************************************/
-//! @brief Append operator -=
-/*!
- Append c to the right of this string, trimming right space on this string first.
- \param c - Append s to the right of the string value.
-*/
-xbString &xbString::operator-=(const char c) {
- Rtrim();
- xbUInt32 oldSize = size;
- size += 1;
- data = (char *)realloc( data, size );
- if( oldSize == 0 ) data[0] = 0;
- data[size-2] = c;
- data[size-1] = 0;
- Trim();
- return (*this);
-}
-/************************************************************************/
-//! @brief Concatonate operator -
-/*!
- Concatonate left string with right string returning reference to new string.
- Both strings are trimmed.
-
- \param s1 Right string operator.
-*/
-xbString xbString::operator-(const xbString &s1) {
- xbString tmp( data );
- tmp -= s1;
- return tmp;
-}
-/************************************************************************/
-//! @brief Concatonate operator +
-/*!
- Concatonate left string with right string returning reference to new string.
-
- \param s1 Right string operator.
-*/
-xbString xbString::operator+( const char *s1) {
- xbString tmp( data );
- tmp += s1;
- return tmp;
-}
-/************************************************************************/
-//! @brief Concatonate operator +
-/*!
- Concatonate left string with right string returning reference to new string.
-
- \param s1 Right string operator.
-*/
-xbString xbString::operator+( const xbString &s1) {
- xbString tmp( data );
- tmp += s1;
- return tmp;
-}
-/************************************************************************/
-//! @brief Concatonate operator +
-/*!
- Concatonate left string with right string returning reference to new string.
-
- \param c Right string operator.
-*/
-
-xbString xbString::operator+( const char c) {
- xbString tmp( data );
- tmp += c;
- return tmp;
-}
-/************************************************************************/
-//! @brief operator []
-/*!
- \param n - Offset into the string of the byte to retrieve.
- \returns c - The character to return from the offset within the [] brackets.
-*/
-char &xbString::operator[]( xbUInt32 n ) const {
- if( n > 0 && n <= size )
- return data[n-1];
- else
- return cJunkBuf;
-}
-/************************************************************************/
-//! @brief operator []
-/*!
- \param n - Offset into the string of the byte to retrieve.
- \returns c - The character to return from the offset within the [] brackets.
-*/
-char &xbString::operator[]( xbInt32 n ) const {
- if( n > 0 && n <= (xbInt32) size )
- return data[n-1];
- else
- return cJunkBuf;
-}
-/************************************************************************/
-//! @brief operator ==
-/*!
- \param s String to compare
- \returns xbTrue - Strings match.<br>
- zbFalse - Strings don't match.<br>
-
-*/
-xbBool xbString::operator==( const xbString &s ) const {
-
- if( data == NULL || data[0] == 0 ) {
- if( s.data == NULL || s.data[0] == 0 )
- return true;
- return false;
- } else {
- if( s.data == NULL || s.data[0] == 0 )
- return false;
- return( strcmp(data,s.data) == 0 ? xbTrue : xbFalse );
- }
-}
-/************************************************************************/
-//! @brief operator ==
-/*!
- \param s String to compare
- \returns xbTrue - Strings match.<br>
- zbFalse - Strings don't match.<br>
-*/
-xbBool xbString::operator==( const char *s ) const {
-
- if (s == NULL) {
- if ( data == NULL)
- return true;
- return false;
- }
- if ((s[0] == 0) && data == NULL)
- return true;
- if ( data == NULL)
- return false;
- return( strcmp( data, s) == 0 ? xbTrue : xbFalse );
-}
-/************************************************************************/
-//! @brief operator !=
-/*!
- \param s String to compare
- \returns xbTrue - Strings don't match.<br>
- xbFalse - Strings match.<br>
-*/
-xbBool xbString::operator!=( const xbString &s ) const {
- if( data == NULL || data[0] == 0 ) {
- if( s.data == NULL || s.data[0] == 0 )
- return xbFalse; // NULL != NULL
- return xbTrue; // NULL != !NULL
- } else {
- if( s.data == NULL || s.data[0] == 0 )
- return xbTrue; // !NULL != NULL
- return( strcmp( data, s.data ) != 0 ? xbTrue : xbFalse ); // !NULL != !NULL
- }
-}
-/************************************************************************/
-//! @brief operator !=
-/*!
- \param s String to compare
- \returns xbTrue - Strings don't match.<br>
- zbFalse - Strings match.<br>
-*/
-xbBool xbString::operator!=( const char *s ) const {
- if( s == NULL || s[0] == 0 ) {
- if( data == NULL || data[0] == 0 )
- return xbFalse; // NULL != NULL
- return xbTrue; // NULL != !NULL
- } else {
- if( s == NULL || s[0] == 0 )
- return xbTrue; // !NULL != NULL
- return( strcmp( data, s ) != 0 ? xbTrue : xbFalse ); // !NULL != !NULL
- }
-}
-/************************************************************************/
-//! @brief operator <
-/*!
- \param s String to compare
- \returns xbTrue - Left string is less than the right string.<br>
- zbFalse - Left string is not less than the right string.<br>
-*/
-xbBool xbString::operator< ( const xbString &s ) const {
-
- if( data == NULL || data[0] == 0 ) {
- if( s.data == NULL || s.data[0] == 0 )
- return false;
- return true;
- } else {
- if( s.data == NULL || s.data[0] == 0 )
- return false;
- return ( strcmp(data, s.data) < 0 ? xbTrue : xbFalse );
- }
-}
-/************************************************************************/
-//! @brief operator >
-/*!
- \param s String to compare
- \returns xbTrue - Left string is greater than the right string.<br>
- zbFalse - Left string is not greater than the right string.<br>
-*/
-xbBool xbString::operator> ( const xbString &s ) const {
- if( data == NULL || data[0] == 0 ) {
- if( s.data == NULL || s.data[0] == 0 )
- return false;
- return false;
- } else {
- if( s.data == NULL || s.data[0] == 0 )
- return true;
- return( strcmp(data,s.data) > 0 ? xbTrue : xbFalse );
- }
-}
-/************************************************************************/
-//! @brief operator <=
-/*!
- \param s String to compare
- \returns xbTrue - Left string is less than or equal to the right string.<br>
- zbFalse - Left string is not less than or equal to the right string.<br>
-*/
-xbBool xbString::operator<=( const xbString &s ) const {
- if( data == NULL || data[0] == 0 ) {
- if( s.data == NULL || s.data[0] == 0 )
- return true;
- return true;
- } else {
- if( s.data == NULL || s.data[0] == 0 )
- return false;
- return( strcmp(data,s.data) <= 0 ? xbTrue : xbFalse );
- }
-}
-/************************************************************************/
-//! @brief operator >=
-/*!
- \param s String to compare
- \returns xbTrue - Left string is greater than or equal to the right string.<br>
- zbFalse - Left string is not greater than or equal to the right string.<br>
-*/
-xbBool xbString::operator>=( const xbString &s ) const {
- if( data == NULL || data[0] == 0 ) {
- if( s.data == NULL || s.data[0] == 0 )
- return true;
- return false;
- } else {
- if( s.data == NULL || s.data[0] == 0 )
- return true;
- return( strcmp(data, s.data) >= 0 ? xbTrue : xbFalse );
- }
-}
-
-/************************************************************************/
-//! @brief Add a prefixing back slash to specified characters in the string.
-/*!
- \param c Character to prefix with a backslash.
- \returns Reference to this string.
-*/
-xbString &xbString::AddBackSlash( char c ) {
-
- xbUInt32 lCnt = CountChar( c );
- if( lCnt == 0 )
- return *this;
- char *p;
- if(( p = (char *)calloc( 1, size + lCnt )) == NULL )
- return *this;
-
- char *p2 = p;
- for( xbUInt32 lS = 0; lS < size; lS++ ){
- if( data[lS] == c )
- *p2++ = '\\';
- *p2++ = data[lS];
- }
- if( data )
- free( data );
- data = p;
- size += lCnt;
- return *this;
-}
-/************************************************************************/
-//! @brief Append data to string.
-/*!
- \param s String data to append.
- \returns Reference to this string.
-*/
-xbString &xbString::Append( const xbString &s ) {
- *this += s;
- return *this;
-}
-
-/************************************************************************/
-//! @brief Append data to string.
-/*!
- \param s String data to append.
- \returns Reference to this string.
-*/
-xbString &xbString::Append( const char *s ) {
- *this += s;
- return *this;
-}
-/************************************************************************/
-//! @brief Append data to string.
-/*!
- \param c String data to append.
- \returns Reference to this string.
-*/
-xbString &xbString::Append( char c ) {
- *this += c;
- return *this;
-}
-/************************************************************************/
-//! @brief Append data to string.
-/*!
- \param s String data to append.
- \param ulByteCount Maximum number of bytes to append.
- \returns Reference to this string.
-*/
-xbString &xbString::Append( const char *s, xbUInt32 ulByteCount ) {
-
- if (s == NULL) return (*this);
- xbUInt32 oldLen = this->Len();
- xbUInt32 newLen = ulByteCount + oldLen;
-
- data = (char *)realloc(data, newLen+1);
-
- if(oldLen == 0)
- data[0] = 0;
-
- for( xbUInt32 i = 0; i < ulByteCount; i++ )
- data[i+oldLen] = s[i];
-
- data[newLen] = '\0';
- size += ulByteCount;
- return (*this);
-}
-
-/************************************************************************/
-//! @brief Assign portion of string.
-/*!
- \param sStr - Source string for copy operation. sStr needs to be a Null terminated string.
- \param ulStartPos - Starting position within source string.
- \param ulCopyLen - Length of data to copy.
- \returns Reference to this string.
-*/
-xbString &xbString::Assign(const char * sStr, xbUInt32 ulStartPos, xbUInt32 ulCopyLen){
- if(data){
- free(data);
- data = 0;
- size = 0;
- }
- xbUInt32 lLen = (xbUInt32) strlen( sStr );
- if( ulStartPos > lLen ){
- size = 0;
- return( *this );
- }
- if((( ulCopyLen - 1) + ulStartPos ) > lLen )
- ulCopyLen = lLen - ulStartPos + 1;
- data = (char *)calloc(1, ulCopyLen + 1);
- size = ulCopyLen;
- for( xbUInt32 i = 0; i < ulCopyLen; i++ )
- data[i] = sStr[i + ulStartPos - ((xbUInt32) 1)];
- data[ulCopyLen] = '\0';
- return (*this);
-}
-/************************************************************************/
-//! @brief Assign portion of string.
-/*!
- \param sStr - Source string for copy operation. sStr needs to be a Null terminated string.
- \param ulStartPos - Starting position within source string.
- \returns Reference to this string.
-*/
-xbString &xbString::Assign(const char * sStr, xbUInt32 ulStartPos){
- if(data){
- free(data);
- data = 0;
- size = 0;
- }
- xbUInt32 ulSrcLen = (xbUInt32) strlen( sStr );
- if( ulStartPos > ulSrcLen ){
- size = 0;
- return( *this );
- }
- xbUInt32 ulCopyLen;
- ulCopyLen = ulSrcLen - ulStartPos + 1;
- data = (char *)calloc(1, ulCopyLen + 1);
- size = ulCopyLen;
- for( xbUInt32 i = 0; i < ulCopyLen; i++ )
- data[i] = sStr[i + ulStartPos - ((xbUInt32) 1)];
- data[ulCopyLen] = '\0';
- return (*this);
-}
-
-/************************************************************************/
-//! @brief Assign portion of string.
-/*!
- \param sStr - Source string for copy operation. sStr needs to be a Null terminated string.
- \param ulStartPos - Starting position within source string.
- \param ulCopyLen - Length of data to copy.
- \returns Reference to this string.
-*/
-xbString &xbString::Assign(const xbString& sStr, xbUInt32 ulStartPos, xbUInt32 ulCopyLen){
- if(data){
- free(data);
- data = 0;
- size = 0;
- }
- xbUInt32 ulSrcLen = sStr.Len();
- if( ulStartPos > ulSrcLen ){
- size = 0;
- return( *this );
- }
- if((( ulCopyLen - 1) + ulStartPos ) > ulSrcLen )
- ulCopyLen = ulSrcLen - ulStartPos + 1;
- data = (char *)calloc(1, ulCopyLen + 1);
- size = ulCopyLen;
- for( xbUInt32 i = 0; i < ulCopyLen; i++ )
- data[i] = sStr[i + ulStartPos];
- data[ulCopyLen] = '\0';
- return (*this);
-}
-/************************************************************************/
-//! @brief Assign portion of string.
-/*!
- \param sStr - Source string for copy operation. sStr needs to be a Null terminated string.
- \param ulStartPos - Starting position within source string.
- \returns Reference to this string.
-*/
-xbString &xbString::Assign(const xbString& sStr, xbUInt32 ulStartPos){
- if(data){
- free(data);
- data = 0;
- size = 0;
- }
- xbUInt32 ulSrcLen = sStr.Len();
- if( ulStartPos > ulSrcLen ){
- size = 0;
- return( *this );
- }
- xbUInt32 ulCopyLen;
- ulCopyLen = ulSrcLen - ulStartPos + 1;
- data = (char *)calloc(1, ulCopyLen + 1);
- size = ulCopyLen;
- for( xbUInt32 i = 0; i < ulCopyLen; i++ )
- data[i] = sStr[i + ulStartPos];
- data[ulCopyLen] = '\0';
- return (*this);
-}
-/************************************************************************/
-//! @brief Copy a string
-/*!
- \returns xbString.
-*/
-xbString xbString::Copy() const {
- return( *this );
-}
-/************************************************************************/
-//! @brief Count the number of characters in the string.
-/*!
- \param c Character to count.
- \param iOpt 0 - Count the number of characters.<br>
- 1 - Count the number of characters not between single or double quotes.
- \returns The number of characters.
-*/
-xbUInt32 xbString::CountChar( char c, xbInt16 iOpt ) const {
- if( iOpt == 0 )
- return CountChar( c );
- else{
- xbBool bSingleQuote = xbFalse;
- xbBool bDoubleQuote = xbFalse;
- char cPrevChar = 0x00;
- xbUInt32 i,j;
- for( i = 0, j = 0; i < size; i++ ){
- if( bSingleQuote && data[i] == '\'' && cPrevChar != '\\' ){
- bSingleQuote = xbFalse;
- }
- else if( bDoubleQuote && data[i] == '"' && cPrevChar != '\\' ){
- bDoubleQuote = xbFalse;
- }
- else if( data[i] == '\'' && cPrevChar != '\\' && !bDoubleQuote ){
- bSingleQuote = xbTrue;
- }
- else if( data[i] == '"' && cPrevChar != '\\' && !bSingleQuote ){
- bDoubleQuote = xbTrue;
- }
- else if( !bDoubleQuote && !bSingleQuote && data[i] == c ){
- j++;
- }
- cPrevChar = data[i];
- }
- return j;
- }
-}
-/************************************************************************/
-//! @brief Count the number of characters in the string.
-/*!
- \param c Character to count.
- \returns The number of characters.
-*/
-xbUInt32 xbString::CountChar( char c ) const {
- xbUInt32 i,j;
- for( i = 0,j = 0; i < size; i++ )
- if( data[i] == c )
- j++;
- return j;
-}
-/************************************************************************/
-void xbString::ctor( const char *s ) {
-
- // this routine assumes it was called by one of the constructors.
-
- if (s == NULL) {
- data = NULL;
- size = 0;
- return;
- }
-
- size = (xbUInt32) (strlen(s) + 1);
- data = (char *) calloc( 1, size);
-
- xb_strcpy(data, s);
-}
-/************************************************************************/
-//! @brief Convert hex character to string.
-/*!
- This routine converts a four byte string in the format of 0x00 to a one byte char value.
- The first four bytes of the string must be in the format 0x00.
- Anything past the first four bytes is disregarded.
-
- \param cOut Output character.
- \returns XB_INVALID_PARM on error<br>
- XB_NO_ERROR on success.
-*/
-xbInt16 xbString::CvtHexChar( char &cOut ){
-
- int j, k;
- char c;
-
- if( Len() < 4 || data[0] != '0' || (data[1]!='X' && data[1]!='x' ))
- return XB_INVALID_PARM;
-
- c = (char) toupper( data[2] );
- j = ( c > '9' ? c - 'A' + 10 : c - '0' );
- c = (char)toupper( data[3] );
- k = ( c > '9' ? c - 'A' + 10 : c - '0' );
- j = ( j << 4 ) + k;
-
- cOut = ( char ) j;
- return XB_NO_ERROR;
-}
-/************************************************************************/
-//! @brief Convert string of hex characters to string.
-/*!
-
- This routine converts a string of four byte format of 0x00 to a string of one byte chars.
-
- \param sOut Output string of converted characters.
- \returns XB_INVALID_PARM on error<br>
- XB_NO_ERROR on success.
-*/
-xbInt16 xbString::CvtHexString( xbString &sOut ){
- char c;
- xbString ws;
- ws = data;
- sOut = "";
- xbInt16 iRc;
- while( ws.Len()){
- if(( iRc= ws.CvtHexChar( c )) != XB_NO_ERROR )
- return iRc;
- sOut += c;
- ws.Ltrunc( 4 );
- }
- return XB_NO_ERROR;
-}
-/************************************************************************/
-//! @brief Convert string to xbUInt64 number
-/*!
- \param ullOut - output unsigned long long.
- \returns XB_NO_ERROR
-*/
-xbInt16 xbString::CvtULongLong( xbUInt64 &ullOut ){
-
- // version 1 - fast, but no data checking
- ullOut = 0;
- char *s = data;
- int i = 0;
- while( *s ){
- ullOut *= 10;
- ullOut += (xbUInt64) *s - '0';
- s++;
- i++;
- }
- return XB_NO_ERROR;
-}
-/************************************************************************/
-//! @brief Convert string to xbInt64 number
-/*!
- \param llOut - output long long.
- \returns XB_NO_ERROR
-*/
-xbInt16 xbString::CvtLongLong( xbInt64 &llOut ){
-
- // version 1 - fast, but no data checking
- llOut = 0;
- char *s = data;
- int i = 0;
- while( *s ){
- llOut *= 10;
- llOut += (xbInt64) *s - '0';
- s++;
- i++;
- }
- return XB_NO_ERROR;
-}
-
-/************************************************************************/
-#ifdef XB_DEBUG_SUPPORT
-void xbString::Dump( const char * title, xbInt16 iHexOption ) const {
- fprintf(stdout, "%s StringSize[%d] DataLen=[%d] data=[%s]\n", title, size, Len(), data );
- if( iHexOption ){
- std::cout << "Hex values" << std::endl;
- for( xbUInt32 i = 0; i < strlen( data ); i++ )
- printf( " %x", data[i] );
- std::cout << std::endl;
- }
-}
-void xbString::Dump( const char * title ) const {
- Dump( title, 0 );
-}
-
-void xbString::DumpHex( const char * title ) const {
- Dump( title, 1 );
-}
-#endif
-
-/************************************************************************/
-//! @brief Extract an element out of a delimited string.
-/*!
- \param pSrc Source string.
- \param cDelim Delimiter.
- \param lSkipCnt Number of delimiters to skip.
- \param iOpt 0 - ignore single and double quotes.<br>
- 1 - ignore delimiters between single or double quotes.
- \returns Reference to string extracted from element.
-*/
-xbString &xbString::ExtractElement( const char *pSrc, char cDelim, xbUInt32 lSkipCnt, xbInt16 iOpt )
-{
- /* opt values
- 0 - ignore single and double quotes
- 1 - ignore delimiters between single or double quotes
- */
-
- xbUInt32 lLen;
- xbUInt32 lCurCnt = 0;
- xbBool bInSingleQuotes = xbFalse;
- xbBool bInDoubleQuotes = xbFalse;
- char cPrevChar = 0x00;
- const char *s = pSrc;
- const char *pAnchor;
-
- /* skip past skipcnt delimiters */
- while( *s && lCurCnt < (lSkipCnt-1) ){
- if( iOpt == 0 ){
- if( *s == cDelim )
- lCurCnt++;
- } else {
- if( *s == cDelim && !bInSingleQuotes && !bInDoubleQuotes ){
- lCurCnt++;
- } else if( *s == '\'' && !bInDoubleQuotes && cPrevChar != '\\' ){
- if( bInSingleQuotes == xbTrue )
- bInSingleQuotes = xbFalse;
- else
- bInSingleQuotes = xbTrue;
- } else if( *s == '"' && !bInSingleQuotes && cPrevChar != '\\' ){
- if( bInDoubleQuotes == xbTrue )
- bInDoubleQuotes = xbFalse;
- else
- bInDoubleQuotes = xbTrue;
- }
- }
- cPrevChar = *s;
- s++;
- }
-
- /* at the beginning of the field */
- pAnchor = s;
- xbBool bDone = xbFalse;
- while( *s && !bDone ){
- if( iOpt == 0 ){
- if( *s == cDelim )
- bDone = xbTrue;
- } else {
- if( *s == cDelim && !bInSingleQuotes && !bInDoubleQuotes ){
- bDone = xbTrue;
- } else if( *s == '\'' && !bInDoubleQuotes && cPrevChar != '\\' ){
- if( bInSingleQuotes == xbTrue )
- bInSingleQuotes = xbFalse;
- else
- bInSingleQuotes = xbTrue;
- } else if( *s == '"' && !bInSingleQuotes && cPrevChar != '\\' ){
- if( bInDoubleQuotes == xbTrue )
- bInDoubleQuotes = xbFalse;
- else
- bInDoubleQuotes = xbTrue;
- }
- }
- cPrevChar = *s;
- s++;
- }
-
- // if at end of string, go back one and drop the delimiter
- if( *s ) s--;
-
- lLen = (xbUInt32)(s - pAnchor);
-
- /* copy data */
- data = (char *) realloc( data, lLen+1 );
- memcpy( data, pAnchor, lLen );
- data[lLen] = 0;
- this->size = lLen+1;
- return *this;
-}
-
-/************************************************************************/
-//! @brief Get a character by position
-/*!
- \param n - Position in string to extract. First position is 1 (not 0).
- \returns Character from position n, or null.
-*/
-char xbString::GetCharacter( xbUInt32 n ) const {
- if( n > 0 && n <= size )
- return data[n-1];
- else
- return 0x00;
-}
-/************************************************************************/
-//! @brief Get the position of the last occurrence of a given character.
-/*!
- \param c - Character to search for.
- \returns Last position of character in the string.
-*/
-xbUInt32 xbString::GetLastPos(char c) const {
-
- if (data == NULL)
- return 0;
-
- char *p = data;
- xbUInt32 iPos = 0;
- xbUInt32 hPos = 0;
- while( *p && iPos++ < ( size - 1 )){
- if( *p == c )
- hPos = iPos;
- p++;
- }
- if( hPos )
- return hPos;
- else
- return 0;
-}
-/************************************************************************/
-//! @brief Get the position of the last occurrence of a given string.
-/*!
- \param s - String to search for.
- \returns Last position of character in the string.
-*/
-xbUInt32 xbString::GetLastPos(const char* s) const{
-
- if (data == NULL)
- return 0;
-
- char *p = data;
- char *saveP = NULL;
- while( p ){
- p = strstr( p, s);
- if( p ){
- saveP = p;
- p++;
- }
- }
- if (saveP == NULL)
- return 0;
- return (xbUInt32)(saveP - data) + 1;
-}
-/************************************************************************/
-//! @brief Get the path separator out of the string.
-/*!
- \returns Char value containing either / or \ depending on OS.
-*/
-char xbString::GetPathSeparator() const {
-
- if (data == NULL)
- return 0x00;
- char *p = data;
- while( *p ){
- if( *p == '\\' || *p == '/' )
- return *p;
- else
- p++;
- }
- return 0x00;
-}
-
-/************************************************************************/
-//! @brief Retrieve the size of the string buffer.
-/*!
- \returns Size of string buffer including the null terminating byte.
-*/
-xbUInt32 xbString::GetSize() const {
- return size;
-}
-
-/************************************************************************/
-//! @brief Determine if the string has any alpha characters
-/*!
- \returns xbTrue - String contains one or more aloha characters.<br>
- xbFalse - String contains no alpha characters.
-*/
-xbBool xbString::HasAlphaChars() const {
- for( xbUInt32 i = 0; i < size; i++ )
- if( isalpha( data[i] ))
- return xbTrue;
- return xbFalse;
-}
-
-
-/************************************************************************/
-//! @brief Determine if string is empty
-/*!
- \returns xbTrue if string is empty.<br>
- xbFalse if string is not empty.
-*/
-xbBool xbString::IsEmpty() const {
- if( data == NULL )
- return true;
- if( data[0] == 0 )
- return xbTrue;
- return xbFalse;
-}
-
-/************************************************************************/
-//! @brief Determine if string is NULL
-/*!
- \returns xbTrue if string is NULL.<br>
- xbFalse if string is not NULL.
-*/
-xbBool xbString::IsNull() const {
- return( data == NULL );
-}
-
-
-/************************************************************************/
-//! @brief Retain left part of string, drop rightmost characters.
-/*!
- \param ulLen New string length, truncate rightmost excess.
- \returns Reference to string.
-*/
-xbString &xbString::Left( xbUInt32 ulLen ) {
- return Mid( 1, ulLen );
-}
-
-/************************************************************************/
-//! @brief Retrieve length of current string.
-/*!
- \returns String length, excluding the terminating null byte.
-*/
-// return length of string
-xbUInt32 xbString::Len() const {
- return( data ? (xbUInt32) strlen(data) : 0 );
-}
-
-/************************************************************************/
-//! @brief Left trim white space from string.
-/*!
- \returns Reference to this string.
-*/
-xbString &xbString::Ltrim(){
-
- if( !data )
- return *this;
-
- char *p = data;
- if( !*p || (*p && *p != ' ') )
- return *this; /* nothing to do */
-
- xbUInt32 s = 0;
- while( *p && *p == ' ' ){
- p++;
- s++;
- size--;
- }
- xbUInt32 i;
- for( i = 0; i < size; i++ )
- data[i] = data[i+s];
- data[i] = 0x00;
- data = (char *) realloc( data, size );
- return *this;
-}
-
-/************************************************************************/
-//! @brief Left truncate string
-/*!
- \param ulCnt Number of bytes to remove from the left.
- \returns Reference to this string.
-*/
-xbString &xbString::Ltrunc( xbUInt32 ulCnt ){
- // left truncate cnt bytes
-
- char * ndata;
- char * p;
- if( ulCnt >= size ){
- if( size > 0 ){
- free( data );
- data = NULL;
- size = 0;
- }
- return *this;
- }
- ndata = (char *) calloc( 1, size - ulCnt );
- p = data;
- p += ulCnt;
- xb_strcpy( ndata, p );
- free( data );
- data = ndata;
- size = size - ulCnt;
- return *this;
-}
-
-/************************************************************************/
-//! @brief Extract portion of data from string
-/*!
- \param ulStartPos Starting position
- \param ulTargLen Length
- \returns Reference to string
-*/
-xbString &xbString::Mid( xbUInt32 ulStartPos, xbUInt32 ulTargLen ){
-
- // this is a 1 based routine
- if( ulStartPos == 0 )
- return *this;
-
- if( data == NULL )
- return( *this );
- if( data[0] == 0 )
- return( *this );
- if( ulStartPos > Len() )
- return( *this );
- char *pTarg = data;
- char *pSrc = data + ulStartPos - 1;
- for( xbUInt32 l = 0; l < ulTargLen; l++ )
- *pTarg++ = *pSrc++;
- *pTarg = 0x00;
- Resize( ulTargLen + 1 );
- return *this;
-}
-
-/************************************************************************/
-//! @brief Left pad string
-/*!
- \param c Padding character.
- \param ulNewLen New string length.
- \returns Reference to this string.
-*/
-xbString &xbString::PadLeft( char c, xbUInt32 ulNewLen ){
-
- xbUInt32 srcLen;
- if( data )
- srcLen = (xbUInt32) strlen( data );
- else
- srcLen = 0;
-
- if( srcLen >= ulNewLen )
- return *this;
-
- char * newData = (char *) calloc( 1, ulNewLen + 1 );
- xbUInt32 i;
- for( i = 0; i < ulNewLen - srcLen; i++ )
- newData[i] = c;
-
- char *targ = &newData[i];
- xb_strcpy( targ, data );
- free( data );
- data = newData;
- size = ulNewLen + 1;
- return *this;
-}
-
-/************************************************************************/
-//! @brief Right pad string
-/*!
- \param c Padding character.
- \param ulNewLen New string length.
- \returns Reference to this string.
-*/
-xbString &xbString::PadRight( char c, xbUInt32 ulNewLen ){
- xbUInt32 srcLen = (xbUInt32) strlen( data );
- if( srcLen >= ulNewLen )
- return *this;
- data = (char *) realloc( data, ulNewLen + 1 );
- xbUInt32 i;
- for( i = srcLen; i < ulNewLen; i++ )
- data[i] = c;
- data[i] = 0x00;
- size = ulNewLen + 1;
- return *this;
-}
-
-/************************************************************************/
-//! @brief Determine position of a given character
-/*!
- \param c Seek character
- \param ulStartPos starting position for search, first position is 1
- \returns Position within string. Returns 0 if not found.
-*/
-xbUInt32 xbString::Pos(char c, xbUInt32 ulStartPos ) const {
-
- if (data == NULL)
- return 0;
- char *p = data;
-
- if( ulStartPos >= size )
- return 0;
-
- xbUInt32 iPos = 0;
- while( (iPos+1) < ulStartPos ){
- p++;
- iPos++;
- }
- xbBool bFound = 0;
- while( *p && !bFound && iPos < ( size - 1 )){
- if( *p == c )
- bFound = 1;
- else {
- iPos++;
- p++;
- }
- }
-
- if( bFound )
- return iPos + 1;
- else
- return 0;
-}
-
-
-
-/************************************************************************/
-//! @brief Determine position of a given character
-/*!
- \param c Seek character
- \returns Position within string. Returns 0 if not found.
-*/
-xbUInt32 xbString::Pos(char c) const {
-
- if (data == NULL)
- return 0;
- char *p = data;
- xbUInt32 iPos = 0;
- int iFound = 0;
- while( *p && !iFound && iPos < ( size - 1 )){
- if( *p == c )
- iFound = 1;
- else {
- iPos++;
- p++;
- }
- }
-
- if( iFound )
- return iPos + 1;
- else
- return 0;
-}
-
-/************************************************************************/
-//! @brief Determine position of a given substring
-/*!
- \param s Substring
- \returns Position within string. Returns 0 if not found.
-*/
-xbUInt32 xbString::Pos(const char* s) const{
-
- if (data == NULL)
- return 0;
-
- char *p = strstr(data, s);
- if ( p == NULL)
- return 0;
-
- return (xbUInt32)(p - data + 1);
-}
-
-/************************************************************************/
-//! @brief Insert character into string
-/*!
- \param ulPos Insertion position.
- \param c Character to insert.
- \returns Reference to this string.
-*/
-xbString &xbString::PutAt(xbUInt32 ulPos, char c){
- if((ulPos-1) > Len() )
- return *this;
- data[ulPos-1] = c;
- return *this;
-}
-
-/************************************************************************/
-//! @brief Remove portion of string.
-/*!
- \param ulStartPos Starting position for removal operation.
- \param ulDelSize Size of deletion.
- \returns Reference to string.
-*/
-xbString &xbString::Remove(xbUInt32 ulStartPos, xbUInt32 ulDelSize ) {
- if( data == NULL )
- return( *this );
- if( data[0] == 0 )
- return( *this );
- xbUInt32 srcLen = Len();
-
- if( ulStartPos > srcLen || ulStartPos < 1 || ulDelSize < 1 )
- return( *this );
-
- if(( ulStartPos + ulDelSize - 1) >= size ){
- data[ulStartPos-1] = 0x00;
- size = ulStartPos;
- return( *this );
- }
-
- char *t;
- char *s;
- t = data + (ulStartPos - 1);
- s = t + ulDelSize;
- size -= ulDelSize;
- while( *s )
- *t++ = *s++;
- *t = 0x00;
- return( *this );
-}
-
-
-
-
-
-/************************************************************************/
-//! @brief Replace a value within a string with another value
-/*!
- \param sReplace - Character string to replace.
- \param sReplaceWith - Character string to replace with
- \param iOption - 0 = All occurrences, 1 = first occurrence
- \returns Reference to this string.
-*/
-
-//the new size includes the null termination byte
-xbString &xbString::Replace( const char *sReplace, const char *sReplaceWith, xbInt16 iOption ){
-
- xbBool bDone = xbFalse;
- xbUInt32 ulPos;
- xbUInt32 ulNewLen;
- xbUInt32 ulReplaceWithLen;
- xbUInt32 ulRsLen; // size of right side of string after replaced data
- xbUInt32 ulSp2;
- char *sBuf2;
-
- const char *s; // source ptr
- char *t; // target ptr
-
- while( !bDone ){
- ulPos = Pos( sReplace );
- if( ulPos == 0 ){
- bDone = xbTrue;
- } else {
-
- ulReplaceWithLen = (xbUInt32) strlen( sReplaceWith );
- ulNewLen = this->size + ulReplaceWithLen - (xbUInt32) strlen( sReplace );
- sBuf2 = (char *) calloc( 1, ulNewLen );
-
- // copy part1
- t = sBuf2;
- s = data;
- for( xbUInt32 ul = 0; ul < ulPos-1; ul++ )
- *t++ = *s++;
-
- // copy part2
- s = sReplaceWith;
- for( xbUInt32 ul = 0; ul < ulReplaceWithLen; ul++ )
- *t++ = *s++;
-
- // copy part3
- ulSp2 = ulPos + (xbUInt32) strlen( sReplace );
- s = data;
- s+= (ulSp2 - 1);
- ulRsLen = (xbUInt32) strlen( s );
- for( xbUInt32 ul = 0; ul < ulRsLen; ul++ )
- *t++ = *s++;
-
- if( iOption )
- bDone = xbTrue;
-
- free(data);
- data = sBuf2;
- }
- }
- return *this;
-}
-
-/************************************************************************/
-//! @brief Resize a string
-/*!
- \param ulSize - New string size, including null termination byte.
- \returns Reference to this string.
-*/
-//the new size includes the null termination byte
-xbString &xbString::Resize(xbUInt32 ulSize) {
-
-// data = (char *) realloc((void *) data, ulSize );
-
-
-// original
- data = (char *)realloc(data, ulSize);
-
-
- if( ulSize > 0 )
- data[ulSize-1] = 0;
- this->size = ulSize;
- return *this;
-}
-/************************************************************************/
-//! @brief Right trim the string.
-/*!
- This routine removes any trailing white space on the string.
-
- \returns Reference to string.
-*/
-xbString &xbString::Rtrim(){
-
- xbUInt32 l = Len();
- if( l == 0 )
- return *this;
- l--;
-
- for(;;) {
- if( data[l] != ' ' )
- break;
- data[l] = 0;
- size--;
- if( l == 0 )
- break;
- l--;
- }
- return *this;
-}
-
-/************************************************************************/
-//! @brief Set the value of the string.
-/*!
-
- Note: This routine fails if you try to set the string to itself or some part of itself.
-
- \param s Value to set the string.
- \returns Reference to string.
-
-*/
-xbString &xbString::Set( const char *s ) {
-
- if(data != NULL){
- free(data);
- data = NULL;
- }
- if(s == NULL ) {
- if( data )
- free( data );
- data = NULL;
- size = 0;
- } else {
- //data = (char *)calloc(1, strlen(s) + 1 );
- data = (char *) realloc( data, strlen(s) + 1 );
- xb_strcpy(data, s);
- size = (xbUInt32) (strlen(data) + 1);
- }
- return (*this);
-}
-/************************************************************************/
-//! @brief Set the value of the string.
-/*!
- \param s Value to set the string.
- \returns Reference to string.
-*/
-xbString &xbString::Set( const xbString &s ) {
-
- if( s.Str() == NULL ){
- if( data ) free( data );
- data = NULL;
- size = 0;
- } else {
- char *p = (char *) calloc( 1, s.Len() + 1 );
- xb_strcpy( p, s.Str());
- size = s.Len() + 1;
- if( data ) free( data );
- data = p;
- }
- return (*this );
-}
-
-/************************************************************************/
-//! @brief Set the value of the string.
-/*!
-
- Note: This routine fails if you try to set the string to itself or some part of itself.
-
- \param s Value to set the string.
- \param ulSize Maximum size of resultant string.
- \returns Reference to string.
-*/
-
-xbString &xbString::Set(const char *s, xbUInt32 ulSize) {
-
- if( data != NULL )
- free( data );
-
- if(s == NULL) {
- data = NULL;
- size = 0;
- return (*this);
- }
-
- data = (char *) calloc( 1, ulSize+1 );
- char *pTarget = data;
- for( xbUInt32 i = 0; i < ulSize; i++ ){
- *pTarget = *s;
- pTarget++;
- s++;
- }
- this->size = ulSize + 1;
- return *this;
-}
-
-
-/************************************************************************/
-//! @brief Set the string to long integer numeric value.
-/*!
- \param lNum Value to set the string
- \returns Reference to this string.
-*/
-xbString &xbString::SetNum(xbInt32 lNum) {
- Sprintf("%ld", lNum);
- return *this;
-}
-
-/************************************************************************/
-//! @brief Printf routine for formatting a string.
-/*!
- See documentation on the standard C printf function for how to use this.
-
- MyString.Sprintf( "a number %d some text %s", 100, "test text data" );
-
- \param sFormat A format specifier
- \returns Reference to a formatted string
-*/
-xbString &xbString::Sprintf( const char *sFormat, ...) {
-
- xbInt32 iRc;
- va_list ap;
-
- char *t;
-
-// if( data )
-// free( data );
-
-#ifdef HAVE__VSNPRINTF_S_F
-
- va_start( ap, sFormat );
- size = (xbUInt32) _vsnprintf_s( NULL, 0, sFormat, ap ) + 1;
- va_end( ap );
-
- t = (char *) malloc( size );
- if( !t ){
- size = 0;
- return( *this );
- }
-
- va_start( ap, sFormat );
- iRc = _vsnprintf_s( t, size, sFormat, ap );
- va_end( ap );
-
-#else
-#ifdef HAVE_VSPRINTF_S_F
-
- va_start( ap, sFormat );
- // size = (xbUInt32) vsprintf_s( NULL, 0, sFormat, ap ) + 1;
- size = _vscprintf( sFormat, ap ) + 1;
- va_end( ap );
-
- t = (char *) malloc( size );
- if( !t ){
- size = 0;
- return( *this );
- }
-
- va_start( ap, sFormat );
- iRc = vsprintf_s( t, size, sFormat, ap );
- va_end( ap );
-
-#else
-#ifdef HAVE_VSNPRINTF_F
-
- va_start( ap, sFormat );
- size = (xbUInt32) vsnprintf( NULL, 0, sFormat, ap) + 1;
- va_end( ap );
-
- t = (char *) calloc( 1, size );
- if( !t ){
- size = 0;
- return( *this );
- }
- va_start( ap, sFormat );
- iRc = vsnprintf( t, size, sFormat, ap );
- va_end( ap );
-
-# else
-# error "Fatal error building [xbstring.cpp] - You have neither _vsnprintf_s nor vsnprintf_s."
-# endif
-#endif
-#endif
-
- if( iRc < 0 ){
- if( data )
- free( data );
- data = NULL;
- size = 0;
- } else {
- if( data )
- free( data );
- data = t;
- }
- return( *this );
-}
-
-/************************************************************************/
-//! @brief Return string data
-/*!
- \returns char * to string data or NULL if string is empty
-*/
-const char *xbString::Str() const {
- return data ? data : NullString;
-}
-
-/************************************************************************/
-//! @brief Copy all or part of string to character array
-/*!
- \param cDest pointer to destination buffer.
- \param n Number of bytest to copy. It is the responsibility of the application
- to verify the buffer is large enough to hold the string contents.
- \returns char * to result
-
-*/
-char *xbString::strncpy( char * cDest, xbUInt32 n ) const {
- xbUInt32 i;
- xbUInt32 ulLen;
- n > (size-1) ? ulLen = size-1 : ulLen = n;
- memset( cDest, 0x00, ulLen );
- for( i = 0; i < ulLen; i++ )
- cDest[i] = data[i];
-// cDest[i] = 0x00;
- return cDest;
-}
-/************************************************************************/
-//! @brief Swap characters
-/*!
- \param cFrom character to replace.
- \param cTo character to replace with.
- \returns Reference to this string.
-*/
-xbString &xbString::SwapChars( char cFrom, char cTo ){
- xbUInt32 i;
- for( i = 0; i < size; i++ )
- if( data[i] == cFrom )
- data[i] = cTo;
- return *this;
-}
-
-
-/************************************************************************/
-//! @brief Replace all upper case charaters with lower case characters
-/*!
- \returns Reference to this string.
-*/
-xbString &xbString::ToLowerCase(){
- xbUInt32 Len = this->Len();
- for (xbUInt32 i=0; i<Len; i++)
- data[i] = (char)tolower(data[i]);
- return *this;
-}
-
-/************************************************************************/
-//! @brief Replace all lower case charaters with lower case characters
-/*!
- \returns Reference to this string.
-*/
-xbString &xbString::ToUpperCase(){
- xbUInt32 Len = this->Len();
- for (xbUInt32 i=0;i<Len;i++)
- data[i] = (char)toupper(data[i]);
- return *this;
-}
-/************************************************************************/
-//! @brief Trim all leading and trailing white space from string.
-/*!
- \returns Reference to string.
-*/
-xbString &xbString::Trim(){
- Rtrim();
- Ltrim();
- return *this;
-}
-
-
-/************************************************************************/
-//! @brief Private function used for reallocateing memory
-/*!
- This function is designed to be a drop in replacement for the realloc
- function call.
-*/
-/*
-char * xbString::xb_realloc( char * pIn, xbUInt32 iLen ){
-
- if( iLen == 0 ){
- if( pIn ){
- free( pIn );
- return NULL;
- }
- }
-
- char *pNew = (char *) calloc( 1, (size_t) iLen );
- if( !pNew ) return NULL;
- char *s = pIn;
- char *t = pNew;
- xbUInt32 iCnt = 0;
- while( *s && iCnt++ < iLen )
- *t++ = *s++;
- return pNew;
-}
-*/
-/************************************************************************/
-//! @brief Private function used for copying a string
-/*!
- For performance reasons, this is an internal function that does no
- memory checking and assumes a valid buffer area is available to be copied.
-
- This function is marked as private because of the above reason and
- is used by "stronger" calling functions.
-
- \param sTarget Target destination of copied string
- \param sSource Source string to copy
- \returns Reference to string.
-*/
-
-char * xbString::xb_strcpy( char *sTarget, const char *sSource ){
-
- char *temp = sTarget;
- while( *sSource != '\0'){
- *sTarget++ = *sSource++;
-// sTarget++;
-// sSource++;
- }
- *sTarget= '\0';
- return temp;
-}
-
-/************************************************************************/
-//! @brief Check for valid logical field data
-/*!
- Valid logical data is one 'T', 'F', 'N' or 'Y'.<br>
-
- \returns xbTrue if the data is valid logical data.<br>
- xbFalse if not valid logical data.
-*/
-
-xbBool xbString::ValidLogicalValue() const {
- if( Len() == 1 )
- if( data[0] == 'T' || data[0] == 'F' || data[0] == 'Y' || data[0] == 'N' || data[0] == '?' )
- return xbTrue;
- return xbFalse;
-}
-/************************************************************************/
-//! @brief This function returns true if the data is valid numeric data
-/*!
- \returns xbTrue if valid numeric data.<br>
- xbFalse if not valid numeric daata.
-*/
-
-xbBool xbString::ValidNumericValue() const {
- const char *p;
- p = data;
- while( *p ){
- if( *p != '+' && *p != '-' && *p != '.' && *p != '0' && *p != '1' &&
- *p != '2' && *p != '3' && *p != '4' && *p != '5' && *p != '6' &&
- *p != '7' && *p != '8' && *p != '9' )
- return xbFalse;
- else
- p++;
- }
- return xbTrue;
-}
-
-
-/************************************************************************/
-//! @brief Remove every instance of a character from a string.
-/*!
- \param c character to remove from string.
- \returns Reference to this stirng.void
-*/
-
-xbString &xbString::ZapChar( char c ){
-
- if( data == NULL )
- return *this;
- if( data[0] == 0 )
- return *this;
-
- char *s;
- char *t;
-
- s = data;
- t = data;
- while( *s ){
- if( *s == c ){
- s++;
- size--;
- } else {
- *t++ = *s++;
- }
- }
- *t = 0x00;
- Resize( size );
- return *this;
-}
-
-/************************************************************************/
-//! @brief Remove leading character from a string.
-/*!
- \param c character to remove from beginning of string.
- \returns Reference to this string.
-*/
-xbString &xbString::ZapLeadingChar( char c ){
- /* left truncate all of character c */
- xbUInt32 iLen = 0;
- char *p;
- p = data;
- while( *p && *p == c ){
- iLen++;
- p++;
- }
- if( iLen )
- Ltrunc( iLen );
- return *this;
-}
-
-
-/************************************************************************/
-//! @brief Remove trailing character from a string.
-/*!
- \param c character to remove from ending of string.
- \returns Reference to this string.
-*/
-xbString &xbString::ZapTrailingChar( char c ){
-
- xbUInt32 l = Len();
- if( l == 0 )
- return *this;
-
- l--;
- for(;;) {
- if( data[l] != c )
- break;
- data[l] = 0;
- size--;
- if( l == 0 )
- break;
- l--;
- }
- return *this;
-}
-
-} /* namespace */ \ No newline at end of file
diff --git a/src/core/xbtag.cpp b/src/core/xbtag.cpp
deleted file mode 100755
index a71880b..0000000
--- a/src/core/xbtag.cpp
+++ /dev/null
@@ -1,121 +0,0 @@
-/* xbtag.cpp
-
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-#include "xbase.h"
-
-#ifdef XB_INDEX_SUPPORT
-
-
-namespace xb{
-
-/************************************************************************/
-//! @brief Constructor
-/*!
- \param pIx Pointer to index file instance.
- \param vpTag Pointer to tag structure within file instance.
- \param sType NDX or MDX
- \param sTagName Name of tag.
- \param sExpression Tag key definition.
- \param sFilter MDX only - tag qualification expression.
- \param bUnique xbTrue - Index is unique.<br>xbFalse - Index is not unique.
- \param bSort MDX only<br>xbTrue - Descending.<br>xbFalse - Ascending.
-*/
-
-xbTag::xbTag( xbIx *pIx, void *vpTag, xbString &sType, xbString &sTagName, xbString &sExpression, xbString &sFilter,
-xbBool bUnique, xbBool bSort )
-{
- this->pIx = pIx;
- this->vpTag = vpTag;
- this->sType = sType;
- this->sTagName = sTagName;
- this->sExpression = sExpression;
- this->sFilter = sFilter;
- this->bUnique = bUnique;
- this->bSort = bSort;
-}
-
-
-/************************************************************************/
-//! @brief Get tag key expression.
-/*!
- \returns Tag key expression.
-*/
-const xbString &xbTag::GetExpression() const {
- return sExpression;
-}
-/************************************************************************/
-//! @brief Get tag filter expression.
-/*!
- \returns Tag filter expression (mdx only).
-*/
-
-const xbString &xbTag::GetFilter() const {
- return sFilter;
-}
-/************************************************************************/
-//! @brief Get index file pointer.
-/*!
- \returns Pointer to index file instance.
-*/
-xbIx *xbTag::GetIx() const {
- return pIx;
-}
-/************************************************************************/
-//! @brief Get tag ascending setting.
-/*!
- \returns Tag sort setting - MDX only.<br>xbTrue - Descending.<br>xbFalse - Ascending.
-*/
-xbBool xbTag::GetSort() const {
- return bSort;
-}
-/************************************************************************/
-//! @brief Get tag name.
-/*!
- \returns Tag name.
-*/
-
-const xbString &xbTag::GetTagName() const {
- return sTagName;
-}
-/************************************************************************/
-//! @brief Get tag type.
-/*!
- \returns Tag type.
-*/
-const xbString &xbTag::GetType() const {
- return sType;
-}
-
-/************************************************************************/
-//! @brief Get tag unique setting.
-/*!
- \returns Tag unique setting.<br>xbTrue - Unique.<br>xbFalse - Not unique.
-*/
-
-xbBool xbTag::GetUnique() const {
- return bUnique;
-}
-/************************************************************************/
-//! @brief Get tag pointer for tag within index file.
-/*!
- \returns Pointer to tag within index file instance.
-*/
-void *xbTag::GetVpTag() const {
- return vpTag;
-}
-/************************************************************************/
-} /* namespace */
-#endif /* XB_INDEX_SUPPORT */ \ No newline at end of file
diff --git a/src/core/xbtblmgr.cpp b/src/core/xbtblmgr.cpp
deleted file mode 100755
index 2fe6a8c..0000000
--- a/src/core/xbtblmgr.cpp
+++ /dev/null
@@ -1,311 +0,0 @@
-/* xbtblmgr.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-#include "xbase.h"
-
-//#ifdef HAVE_STRING_H
-//#include <string.h>
-//#endif
-
-namespace xb{
-
-/*************************************************************************/
-xbTblMgr::xbTblMgr(){
- TblList = NULL;
- iOpenTableCount = 0;
-}
-
-/*************************************************************************/
-xbTblMgr::~xbTblMgr(){
- xbTblList *l;
- if( TblList ){
- while( TblList ){
- l = TblList;
- TblList = TblList->pNext;
- delete l->psFqTblName;
- delete l->psTblName;
- delete l->psTblAlias;
- free( l );
- }
- }
-}
-
-/*************************************************************************/
-xbInt16 xbTblMgr::AddTblToTblList( xbDbf *d, const xbString & sFqTblName ){
- return AddTblToTblList( d, sFqTblName, "" );
-}
-
-/*************************************************************************/
-xbInt16 xbTblMgr::AddTblToTblList( xbDbf *d, const xbString & sFqTblName, const xbString & sTblAlias ) {
-
- // Set the Fq (fully qualified name)
- // Pull the table name from the FQ name
- // Set the Alias to the table name if the alias name is not provided
-
-
- xbTblList *i, *s, *t;
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
- xbString sTblName;
- xbString sAlias;
- xbString sTemp;
- xbString sFqTemp;
- xbUInt32 iSlashPos;
-
- // std::cout << "AddTblToTblList fq in = [" << sFqTblName.Str() << "] alias in =[" << sTblAlias.Str() << "]\n";
-
- try{
-
- if( sFqTblName.Len() == 0 ){
- iErrorStop = 100;
- iRc = XB_INVALID_TABLE_NAME;
- throw iRc;
- }
-
- sTblName = sFqTblName;
- sTblName.SwapChars( '\\', '/' );
- iSlashPos = sTblName.GetLastPos( '/' );
-
- // std::cout << "slashpos = " << iSlashPos << "\n";
-
-
- if( iSlashPos > 0 ){
- sTblName.Ltrunc( iSlashPos ); // remove the directory part from the table name
- sFqTemp = sFqTblName;
- } else{
- sFqTemp.Sprintf( "%s%s", GetDataDirectory().Str(), sFqTblName.Str()); // add the dir part to the FQ name
- }
-
- xbUInt32 iDbfPos = sFqTemp.Pos( ".DBF" );
- if( iDbfPos == 0 )
- sFqTemp += ".DBF";
- else
- sTblName.Resize( sTblName.Len() - 3 );
-
- if( sTblAlias.Len() == 0 )
- sAlias = sTblName;
- else
- sAlias = sTblAlias;
-
- //std::cout << "fq=[" << sFqTemp.Str() << "] tblname = [" << sTblName.Str() << "] alias = [" << sAlias.Str() << "]\n";
-
- if((i = (xbTblList *) calloc(1, sizeof(xbTblList))) == NULL){
- iErrorStop = 110;
- iRc = XB_NO_MEMORY;
- throw iRc;
- }
- i->psFqTblName = new xbString( sFqTemp );
- i->psTblName = new xbString( sTblName );
- i->psTblAlias = new xbString( sAlias );
- i->pDbf = d;
- i->pNext = NULL;
-
- // insert new table into the list of open tables, sorted by table name
- s = NULL;
- t = TblList;
-
- while(t && (strcmp( t->psTblAlias->Str(), sAlias.Str()) < 0 )){
- s = t;
- t = t->pNext;
- }
-
- if( t && (strcmp( t->psTblAlias->Str(), sAlias.Str()) == 0 )){
- iErrorStop = 120;
- delete i->psFqTblName;
- delete i->psTblAlias;
- free( i );
- iRc = XB_DUP_TABLE_OR_ALIAS;
- throw iRc;
- }
- i->pNext = t;
- if (s == NULL)
- TblList = i;
- else
- s->pNext = i;
- }
- catch (xbInt16 iRc ){
- if( iErrorStop != 120 ){
- xbString sMsg;
- sMsg.Sprintf( "xbTblMgr::AddTblToTblList() Exception Caught. Error Stop = [%d] iRc = [%d] Tbl Name = [%s] Alias = [%s]", iErrorStop, iRc, sTblName.Str(), sTblAlias.Str() );
- std::cout << sMsg << std::endl;
- }
- }
- if( iRc == XB_NO_ERROR )
- iOpenTableCount++;
- return iRc;
-}
-
-/*************************************************************************/
-xbInt16 xbTblMgr::DisplayTableList() const {
- xbInt16 iTblCnt = 0;
- xbTblList * l = TblList;
- std::cout << "-- Open Table List --" << std::endl;
- if( l == NULL )
- std::cout << "Table list is empty" << std::endl;
- else{
- while( l ){
- iTblCnt++;
- std::cout << iTblCnt << " FqFileName=[" << l->psFqTblName->Str() << "] TableName=[" << l->psTblName->Str() << "] Alias=[" << l->psTblAlias->Str() << "]" << std::endl;
- l = l->pNext;
- }
- }
- return iTblCnt;
-}
-/*************************************************************************/
-/* Get pointer to named dbf.
- Looks up an open DBF file by Name.
-
- returns A pointer to the xbDbf class instance if found or NULL if not found.
-
- // looks for a match as an alias first, if not found as an alias, looks at the name
-
-*/
-
-xbDbf *xbTblMgr::GetDbfPtr(const xbString& sTblAlias) const {
-
-
- xbTblList *t;
- t = TblList;
- xbString s;
- xbUInt32 ui = sTblAlias.Pos( ".DBF" );
- if( ui > 0 )
- s.Assign( sTblAlias.Str(), 1, ui - 1 );
- else
- s.Set( sTblAlias );
-
- while( t ){
- if( s == t->psTblAlias->Str()){
- return t->pDbf;
- }
- t = t->pNext;
- }
-
- t = TblList;
- while( t ){
- std::cout << "s = [" << s.Str() << "] tbl name = [" << t->psTblName->Str() << "]\n";
- if( s == t->psTblName->Str()){
- std::cout << "found\n";
- return t->pDbf;
- }
- t = t->pNext;
- }
-
-
- t = TblList;
- while( t ){
- if( sTblAlias == t->psFqTblName->Str())
- return t->pDbf;
- t = t->pNext;
- }
- return NULL;
-}
-/*************************************************************************/
-/* Get pointer to named dbf.
- Looks up an open DBF file by Name.
-
- returns pointer to the xbDbf class instance if found or NULL if not found.
-*/
-
-xbDbf *xbTblMgr::GetDbfPtr(xbInt16 iItemNo ) const {
-
- xbTblList *t;
- t = TblList;
- xbInt16 iCnt = 1;
-
- if( iItemNo < 1 || iItemNo > iOpenTableCount )
- return NULL;
-
- while( t && iCnt < iItemNo ){
- t = t->pNext;
- iCnt++;
- }
- if( t )
- return t->pDbf;
- else
- return NULL;
-}
-/*************************************************************************/
-xbInt16 xbTblMgr::GetOpenTableCount() const {
- return iOpenTableCount;
-}
-/*************************************************************************/
-xbTblList * xbTblMgr::GetTblListEntry( xbDbf *pTbl ){
-
- xbTblList * i = TblList;
- while( i ){
- if( i->pDbf == pTbl )
- return i;
- i = i->pNext;
- }
- return NULL;
-}
-/*************************************************************************/
-xbInt16 xbTblMgr::RemoveTblFromTblList( const xbString & sTblAlias ) {
- xbTblList *i, *s;
-
- i = TblList;
- s = NULL;
-
- while( i ){
-
- if( strcmp( i->psTblAlias->Str(), sTblAlias.Str()) == 0 ) {
- if(s)
- s->pNext = i->pNext;
- else
- TblList = i->pNext;
-
- delete i->psFqTblName;
- delete i->psTblName;
- delete i->psTblAlias;
- free( i );
- iOpenTableCount--;
- return XB_NO_ERROR;
- } else {
- s = i;
- i = i->pNext;
- }
- }
- return XB_NOT_FOUND;
-}
-/*************************************************************************/
-xbInt16 xbTblMgr::RemoveTblFromTblList( xbDbf *pTbl ) {
- xbTblList *i, *s;
-
- i = TblList;
- s = NULL;
-
- while( i ){
-
- if( i->pDbf == pTbl ) {
- if(s)
- s->pNext = i->pNext;
- else
- TblList = i->pNext;
-
- delete i->psFqTblName;
- delete i->psTblName;
- delete i->psTblAlias;
- free( i );
- iOpenTableCount--;
- return XB_NO_ERROR;
- } else {
- s = i;
- i = i->pNext;
- }
- }
- return XB_NOT_FOUND;
-}
-/*************************************************************************/
-} /* namespace */
diff --git a/src/core/xbuda.cpp b/src/core/xbuda.cpp
deleted file mode 100755
index 0a9c2e7..0000000
--- a/src/core/xbuda.cpp
+++ /dev/null
@@ -1,78 +0,0 @@
-/* xbuda.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-This module handles uda (user data area) methods
-
-*/
-
-#include "xbase.h"
-
-
-// might need to change thisto XB_EXPRESSION_SUPPORT
-#ifdef XB_EXPRESSION_SUPPORT
-
-
-namespace xb{
-
-/************************************************************************/
-xbUda::xbUda() {
- llOrd. SetDupKeys( xbFalse );
-}
-/************************************************************************/
-xbUda::~xbUda() {}
-/************************************************************************/
-void xbUda::Clear() {
- llOrd.Clear();
-}
-/************************************************************************/
-xbInt16 xbUda::GetTokenCnt() const {
- return llOrd.GetNodeCnt();
-}
-/************************************************************************/
-
-xbInt16 xbUda::GetTokenForKey( const xbString &sKey, xbString &sToken ) {
- return llOrd.GetDataForKey( sKey, sToken );
-}
-
-/************************************************************************/
-xbInt16 xbUda::AddTokenForKey( const xbString &sKey, const xbString &sToken ) {
- return llOrd.InsertKey( sKey, sToken );
-}
-/************************************************************************/
-
-xbInt16 xbUda::UpdTokenForKey( const xbString &sKey, const xbString &sData ) {
- return llOrd.UpdateForKey( sKey, sData );
-}
-
-/************************************************************************/
-xbInt16 xbUda::DelTokenForKey( const xbString &sKey ) {
- return llOrd.RemoveKey( sKey ); //, sToken );
-}
-
-
-/************************************************************************/
-
-void xbUda::DumpUda() const{
-
- xbLinkListNode<xbString> *lln = llOrd.GetHeadNode();
-
- xbInt32 l = 0;
- while( lln ){
- std::cout << ++l << " Key=[" << lln->GetKey() << "] Data=[" << lln->GetData() << "]" << std::endl;
- lln = lln->GetNextNode();
- }
-}
-
-/************************************************************************/
-} /* namespace */
-#endif /* XB_EXPRESSION_SUPPORT */ \ No newline at end of file
diff --git a/src/core/xbxbase.cpp b/src/core/xbxbase.cpp
deleted file mode 100755
index 20b7fcc..0000000
--- a/src/core/xbxbase.cpp
+++ /dev/null
@@ -1,749 +0,0 @@
-/* xbxbase.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-#include "xbase.h"
-
-namespace xb{
-
-/*************************************************************************/
-//! @brief Class Constructor.
-xbXBase::xbXBase() {
- SetEndianType();
- #ifdef XB_LOGGING_SUPPORT
- xLog = new xbLog();
- #endif
-
- xbFile f( this );
- f.SetHomeFolders();
-
-}
-/*************************************************************************/
-//! @brief Class Deconstructor.
-xbXBase::~xbXBase(){
- CloseAllTables();
- #ifdef XB_LOGGING_SUPPORT
- delete xLog;
- #endif
-}
-
-/*************************************************************************/
-//! @brief Close all tables / files.
-/*!
- This closes everything.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbXBase::CloseAllTables(){
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
- xbInt16 iOpenTableCnt = GetOpenTableCount();
- try{
- xbDbf *d;
- for( xbInt16 i = 0; i < iOpenTableCnt; i++ ){
- d = (xbDbf *) GetDbfPtr( 1 );
- if( d ){
- if(( iRc = d->Close()) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- } else {
- iRc = XB_INVALID_OBJECT;
- iErrorStop = 110;
- throw iRc;
- }
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbxbase::CloseAllTables() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, iRc );
- WriteLogMessage( sMsg.Str() );
- WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-
-
-/*************************************************************************/
-//! @brief Parse commmand line options for a given parm request
-/*!
- \param lArgc Value passed from main( argc, argv[] )
- \param sArgv Valued passed from main
- \param sOptRqst Option to search for in the arguments list
- \param sParmOut String token immediately to the right of the the option request, if found
- \returns 0 - paramater request not found<br> 1 - Parameter found
-*/
-
-xbInt16 xbXBase::GetCmdLineOpt( xbInt32 lArgc, char **sArgv, const char *sOptRqst, xbString &sParmOut ){
- xbString sOpt( sOptRqst );
- return GetCmdLineOpt( lArgc, sArgv, sOpt, sParmOut );
-}
-
-/*************************************************************************/
-//! @brief Parse commmand line options for a given parm request
-/*!
- \param lArgc Value passed from main( argc, argv[] )
- \param sArgv Valued passed from main
- \param sOptRqst Option to search for in the arguments list
- \param sParmOut String token immediately to the right of the the option request, if found
- \returns 0 - paramater request not found<br> 1 - Parameter found
-*/
-
-xbInt16 xbXBase::GetCmdLineOpt( xbInt32 lArgc, char **sArgv, xbString &sOptRqst, xbString &sParmOut ){
-
- xbInt16 iFound = 0;
- sParmOut = "";
- if( lArgc < 2 ) // first string is the program name
- return iFound;
-
- xbInt32 i = 1;
- while( iFound == 0 && i < lArgc ){
- if( sOptRqst == sArgv[i] ){
- iFound = 1;
- if( i < (lArgc-1))
- sParmOut = sArgv[i+1];
- }
- i++;
- }
- return iFound;
-}
-
-/*************************************************************************/
-#ifdef XB_LOGGING_SUPPORT
-//! @brief Get fully qualified log file name.
-/*!
- \returns Returns the fully qualified log file name.
-*/
-const xbString & xbXBase::GetLogFqFileName() const {
- return xLog->GetFqFileName();
-}
-
-//! @brief Get the log file name.
-/*!
- \returns Returns the log file name.
-*/
-const xbString & xbXBase::GetLogFileName() const {
- return xLog->GetFileName();
-}
-
-//! @brief Get the log directory.
-/*!
- \returns Returns the log directory.
-*/
-const xbString & xbXBase::GetLogDirectory() const {
- return xLog->GetDirectory();
-}
-
-//! @brief Get the log directory.
-/*!
- \returns xbTrue - Logging enabled.<br>xbFalse - Logging disables.
-*/
-xbBool xbXBase::GetLogStatus() const {
- return xLog->LogGetStatus();
-}
-
-//! @brief Set the log file name.
-/*!
- \param sLogFileName - Log File Name.
- \return void
-*/
-void xbXBase::SetLogFileName( const xbString & sLogFileName ){
-
- xLog->SetFileName( sLogFileName );
-}
-
-//! @brief Set the log directory.
-/*!
- \param sLogDirectory - Log File Directory.
- \return void
-*/
-void xbXBase::SetLogDirectory( const xbString & sLogDirectory ){
- xLog->SetDirectory( sLogDirectory );
-}
-
-//! @brief Set the logfile size.
-/*!
- \param lSize - Log File Size.
- \return void
-*/
-void xbXBase::SetLogSize( size_t lSize ) {
- xLog->LogSetLogSize( lSize );
-}
-
-//! @brief Write message to logfile.
-/*!
- \param sLogMessage - Message to write.
- \param iOpt 0 = stdout<br>
- 1 = Syslog<br>
- 2 = Both<br>
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbXBase::WriteLogMessage( const xbString & sLogMessage, xbInt16 iOpt ){
- return xLog->LogWrite( sLogMessage, iOpt );
-}
-
-//! @brief Write message to logfile.
-/*!
- \param lCnt - Number of bytes to write.
- \param p - Pointer to bytes to write to log file.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbXBase::WriteLogBytes( xbUInt32 lCnt, const char *p ){
- return xLog->LogWriteBytes( lCnt, p );
-}
-
-//! @brief Enable message logging.
-void xbXBase::EnableMsgLogging() {
- xLog->LogSetStatus( xbTrue );
-}
-
-//! @brief Disable message logging.
-void xbXBase::DisableMsgLogging() {
- xLog->LogSetStatus( xbFalse );
-}
-
-//! @brief Flush log file updates to disk.
-xbInt16 xbXBase::FlushLog() {
- return xLog->xbFflush();
-}
-#else
-
-// if logging not compiled in, these stubs are called with no effect
-const xbString & xbXBase::GetLogFqFileName() const {
- return sNullString;
-}
-const xbString & xbXBase::GetLogFileName() const {
- return sNullString;
-}
-const xbString & xbXBase::GetLogDirectory() const {
- return sNullString;
-}
-void xbXBase::SetLogFileName( const xbString & sLogFileName ){
- return;
-}
-void xbXBase::SetLogDirectory( const xbString & sLogDirectory ){
- return;
-}
-xbBool xbXBase::GetLogStatus() const {
- return xbFalse;
-}
-xbInt16 xbXBase::WriteLogMessage( const xbString & sLogMessage, xbInt16 ){
- return XB_NO_ERROR;
-}
-xbInt16 xbXBase::WriteLogBytes( xbUInt32 lCnt, const char *p ){
- return XB_NO_ERROR;
-}
-void xbXBase::EnableMsgLogging() {
- return;
-}
-void xbXBase::DisableMsgLogging() {
- return;
-}
-xbInt16 xbXBase::FlushLog() {
- return XB_NO_ERROR;
-}
-void xbXBase::SetLogSize( size_t lSize ) {
- return;
-}
-#endif // XB_LOGGING_SUPPORT
-
-/*************************************************************************/
-#ifdef XB_FUNCTION_SUPPORT
-
-//! @brief Get information regarding expression functions.
-/*!
- \param sExpLine An expression beginning with function name.
- \param cReturnType Output - return type of function.
- \param iCalc Used to calculate the function return value is<br>
- 1 = use value specified in lReturnLenVal<br>
- 2 = use length of operand specified in col 4<br>
- 3 = use valued of numeric operand specified in col 4<br>
- 4 = length of parm 1 * numeric value parm<br>
- 5 = larger length of parm 2 or length of parm 3<br>
- 6 = if two or more parms, use numeric value from second parm, otherwise use col4 value
- \param lReturnLenVal Used in combination with iReturnLenCalc.
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbXBase::GetFunctionInfo( const xbString &sExpLine, char &cReturnType, xbInt16 &iCalc, xbInt32 &lReturnLenVal ) const{
-
- xbUInt32 iLen;
- const char *s;
- if( sExpLine.Len() == 0 )
- return XB_INVALID_FUNCTION;
-
- s = sExpLine;
- iLen = 0;
- while( *s && *s != '(' && *s != ' ' ) { s++; iLen++; }
- xbString sFunction( sExpLine, iLen );
- cReturnType = 0x00;
- char cFunc1 = sFunction[1];
-
- if( cFunc1 < 'L' ){
- // std::cout << "less than L\n";
- if( cFunc1 < 'D' ){
- // std::cout << "less than D\n";
- if( sFunction == "ABS" ){
- // { "ABS", 'N', 1, 4 },
- cReturnType = 'N';
- iCalc = 1;
- lReturnLenVal = 4;
- } else if( sFunction == "ALLTRIM" ){
- // { "ALLTRIM", 'C', 2, 1 },
- cReturnType = 'C';
- iCalc = 2;
- lReturnLenVal = 1;
- } else if( sFunction == "ASC" ){
- // { "ASC", 'N', 1, 4 },
- cReturnType = 'N';
- iCalc = 1;
- lReturnLenVal = 4;
- } else if( sFunction == "AT" ){
- // { "AT", 'N', 1, 4 },
- cReturnType = 'N';
- iCalc = 1;
- lReturnLenVal = 4;
- } else if( sFunction == "CDOW" ){
- // { "CDOW", 'C', 1, 9 },
- cReturnType = 'C';
- iCalc = 1;
- lReturnLenVal = 9;
- } else if( sFunction == "CHR" ){
- // { "CHR", 'C', 1, 1 },
- cReturnType = 'C';
- iCalc = 1;
- lReturnLenVal = 1;
- } else if( sFunction == "CMONTH" ){
- // { "CMONTH", 'C', 1, 9 },
- cReturnType = 'C';
- iCalc = 1;
- lReturnLenVal = 9;
- } else if( sFunction == "CTOD" ){
- // { "CTOD", 'D', 1, 8 },
- cReturnType = 'D';
- iCalc = 1;
- lReturnLenVal = 8;
- }
- } else {
- // std::cout << ">= D\n";
- if( sFunction == "DATE" ){
- // { "DATE", 'D', 1, 8 },
- cReturnType = 'D';
- iCalc = 1;
- lReturnLenVal = 8;
- } else if( sFunction == "DAY" ){
- // { "DAY", 'N', 1, 4 },
- cReturnType = 'N';
- iCalc = 1;
- lReturnLenVal = 4;
- } else if( sFunction == "DEL" ){
- // { "DEL", 'C', 1, 1 },
- cReturnType = 'C';
- iCalc = 1;
- lReturnLenVal = 1;
- } else if( sFunction == "DELETED" ){
- // { "DELETED", 'L', 1, 1 },
- cReturnType = 'L';
- iCalc = 1;
- lReturnLenVal = 1;
- } else if( sFunction == "DESCEND" ){
- // { "DESCEND", '1', 2, 1 },
- cReturnType = '1';
- iCalc = 2;
- lReturnLenVal = 1;
- } else if( sFunction == "DOW" ){
- // { "DOW", 'N', 1, 4 },
- cReturnType = 'N';
- iCalc = 1;
- lReturnLenVal = 4;
- } else if( sFunction == "DTOC" ){
- // { "DTOC", 'C', 1, 8 },
- cReturnType = 'C';
- iCalc = 1;
- lReturnLenVal = 8;
- } else if( sFunction == "DTOS" ){
- // { "DTOS", 'C', 1, 8 },
- cReturnType = 'C';
- iCalc = 1;
- lReturnLenVal = 8;
- } else if( sFunction == "EXP" ){
- // { "EXP", 'N', 1, 4 },
- cReturnType = 'N';
- iCalc = 1;
- lReturnLenVal = 4;
- } else if( sFunction == "IIF" ){
- // { "IIF", 'C', 5, 0 },
- cReturnType = 'C';
- iCalc = 5;
- lReturnLenVal = 0;
- } else if( sFunction == "INT" ){
- // { "INT", 'N', 1, 4 },
- cReturnType = 'N';
- iCalc = 1;
- lReturnLenVal = 4;
- } else if( sFunction == "ISALPHA" ){
- // { "ISALPHA", 'L', 1, 1 },
- cReturnType = 'L';
- iCalc = 1;
- lReturnLenVal = 1;
- } else if( sFunction == "ISLOWER" ){
- // { "ISLOWER", 'L', 1, 1 },
- cReturnType = 'L';
- iCalc = 1;
- lReturnLenVal = 1;
- } else if( sFunction == "ISUPPER" ){
- // { "ISUPPER", 'L', 1, 1 },
- cReturnType = 'L';
- iCalc = 1;
- lReturnLenVal = 1;
- }
- }
- } else {
- // std::cout << ">= L\n";
- if( cFunc1 < 'R' ) {
- // std::cout << " < R\n";
- if( sFunction == "LEFT" ){
- // { "LEFT", 'C', 3, 2 },
- cReturnType = 'C';
- iCalc = 3;
- lReturnLenVal = 2;
- } else if( sFunction == "LEN" ){
- // { "LEN", 'N', 1, 4 },
- cReturnType = 'N';
- iCalc = 1;
- lReturnLenVal = 3;
- } else if( sFunction == "LOG" ){
- // { "LOG", 'N', 1, 4 },
- cReturnType = 'N';
- iCalc = 1;
- lReturnLenVal = 4;
- } else if( sFunction == "LOWER" ){
- // { "LOWER", 'C', 2, 1 },
- cReturnType = 'C';
- iCalc = 2;
- lReturnLenVal = 1;
- } else if( sFunction == "LTRIM" ){
- // { "LTRIM", 'C', 2, 1 },
- cReturnType = 'C';
- iCalc = 2;
- lReturnLenVal = 1;
- } else if( sFunction == "MAX" ){
- // { "MAX", 'N', 1, 4 },
- cReturnType = 'N';
- iCalc = 1;
- lReturnLenVal = 4;
- } else if( sFunction == "MIN" ){
- // { "MIN", 'N', 1, 4 },
- cReturnType = 'N';
- iCalc = 1;
- lReturnLenVal = 4;
- } else if( sFunction == "MONTH" ){
- // { "MONTH", 'N', 1, 4 },
- cReturnType = 'N';
- iCalc = 1;
- lReturnLenVal = 4;
- }
- } else if( cFunc1 == 'R' ){
- // std::cout << "==R\n";
- if( sFunction == "RECNO" ){
- // { "RECNO", 'N', 1, 4 },
- cReturnType = 'N';
- iCalc = 1;
- lReturnLenVal = 4;
- } else if( sFunction == "RECCOUNT" ){
- // { "RECCOUNT", 'N', 1, 4 },
- cReturnType = 'N';
- iCalc = 1;
- lReturnLenVal = 4;
- } else if( sFunction == "REPLICATE" ){
- // { "REPLICATE", 'C', 4, 0 },
- cReturnType = 'C';
- iCalc = 4;
- lReturnLenVal = 0;
- } else if( sFunction == "RIGHT" ){
- // { "RIGHT", 'C', 3, 2 },
- cReturnType = 'C';
- iCalc = 3;
- lReturnLenVal = 2;
- } else if( sFunction == "RTRIM" ){
- // { "RTRIM", 'C', 2, 1 },
- cReturnType = 'C';
- iCalc = 2;
- lReturnLenVal = 1;
- }
- } else if( cFunc1 == 'S' ){
- // std::cout << "==S\n";
- if( sFunction == "SPACE" ){
- // { "SPACE", 'C', 3, 1 },
- cReturnType = 'C';
- iCalc = 3;
- lReturnLenVal = 1;
- } else if( sFunction == "SQRT" ){
- // { "SQRT", 'N', 1, 4 },
- cReturnType = 'N';
- iCalc = 1;
- lReturnLenVal = 4;
- } else if( sFunction == "STOD" ){
- // { "STOD", 'D', 1, 8 },
- cReturnType = 'D';
- iCalc = 1;
- lReturnLenVal = 8;
- } else if( sFunction == "STR" ){
- // { "STR", 'C', 6, 10 },
- cReturnType = 'C';
- iCalc = 6;
- lReturnLenVal = 10;
- } else if( sFunction == "STRZERO" ){
- // { "STRZERO", 'C', 3, 2 },
- cReturnType = 'C';
- iCalc = 3;
- lReturnLenVal = 2;
- } else if( sFunction == "SUBSTR" ){
- // { "SUBSTR", 'C', 3, 3 },
- cReturnType = 'C';
- iCalc = 3;
- lReturnLenVal = 3;
- }
- } else {
- // std::cout << ">S\n";
- if( sFunction == "TRIM" ){
- // { "TRIM", 'C', 2, 1 },
- cReturnType = 'C';
- iCalc = 2;
- lReturnLenVal = 1;
- } else if( sFunction == "UPPER" ){
- // { "UPPER", 'C', 2, 1 },
- cReturnType = 'C';
- iCalc = 2;
- lReturnLenVal = 1;
- } else if( sFunction == "VAL" ){
- // { "VAL", 'N', 1, 4 },
- cReturnType = 'N';
- iCalc = 1;
- lReturnLenVal = 3;
- } else if( sFunction == "YEAR" ){
- // { "YEAR", 'N', 1, 4 },
- cReturnType = 'N';
- iCalc = 1;
- lReturnLenVal = 4;
- }
- }
- }
- if( cReturnType == 0x00 )
- return XB_INVALID_FUNCTION;
- else
- return XB_NO_ERROR;
-}
-#endif
-/*************************************************************************/
-//! @brief Cross platform sleep function.
-/*!
- \param lMillisecs Milliseconds to sleep.
-*/
-void xbXBase::xbSleep( xbInt32 lMillisecs ){
- #ifdef WIN32
- Sleep( lMillisecs );
- #else
- usleep( (xbInt64) lMillisecs * 1000 );
- #endif
-
-}
-/***********************************************************************/
-//! @brief Cross memcmp function.
-/*!
- \param s1 Left operand to compare.
- \param s2 Right operand to compare.
- \param n Number of bytes to compare.
- \returns 1 s1 > s2<br>
- 0 s1 == s2<br>
- -1 s1 < s2
-*/
-xbInt16 xbXBase::xbMemcmp( const unsigned char *s1, const unsigned char *s2, size_t n ){
- // The standard memcmp function was found not to behave the same across all platforms
- for( size_t i = 0; i < n; i++ ){
- if( s1[i] > s2[i] )
- return 1;
- else if( s1[i] < s2[i] )
- return -1;
- }
- return 0;
-}
-
-/***********************************************************************/
-//! @brief Open highest qualified class available for dbf file.
-/*!
- This routine opens the highest available version of the dbf file.
- Defaults to XB_READ_WRITE and XB_MULTI_USER mode.
- \returns param dbf - Output pointer to dbf file opened or null if error
-*/
-xbDbf* xbXBase::Open( const xbString &sTableName, xbInt16 &iRc ){
- return Open( sTableName, "", XB_READ_WRITE, XB_MULTI_USER, 0, iRc );
-}
-/***********************************************************************/
-//! @brief Open highest qualified class available for dbf file.
-/*!
- This routine can open various versions of the dbf file dependent on the iVersion field
-
- \param sTableName - Table name to open.
- \param sAlias - Optional alias name.
- \param iOpenMode - XB_READ_WRITE or XB_READ
- \param iShareMode - XB_SINGLE_USER or XB_MULTI_USER
- \param iRequestVersion 0 - Highest available
- 4 - Version four dbf
- 3 - Version three dbf
- \param iRc - Return code from open request
- \returns param dbf - Output pointer to dbf file opened or null if error
-*/
-
-
-xbDbf* xbXBase::Open( const xbString &sTableName, const xbString &sAlias, xbInt16 iOpenMode,
- xbInt16 iShareMode, xbInt16 iRequestVersion, xbInt16 &iRc ){
-
- xbInt16 iErrorStop = 0;
- xbDbf * pDbf = 0;
- iRc = 0;
- xbString sFqFileName;
-
- try{
-
- if( sTableName.Len() == 0 ){
- iErrorStop = 100;
- iRc = XB_FILE_NOT_FOUND;
- throw iRc;
- }
- xbFile *f = new xbFile(this);
- f->SetFileName( sTableName );
- if(( iRc = f->FileExists( f->GetFqFileName())) != xbTrue ){
- iErrorStop = 110;
- iRc = XB_FILE_NOT_FOUND;
- throw iRc;
- }
- unsigned char cFileTypeByte;
- if(( iRc = f->GetXbaseFileTypeByte( f->GetFqFileName(), cFileTypeByte )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- xbInt16 iTblVsn = f->DetermineXbaseTableVersion( cFileTypeByte );
- f->xbFclose();
- sFqFileName.Set( f->GetFqFileName() );
- delete f;
-
- if( iTblVsn == 4 && ( iRequestVersion == 0 || iRequestVersion == 4 )){
- #ifdef XB_DBF4_SUPPORT
- pDbf = new xbDbf4( this );
- iRc = pDbf->Open( sFqFileName, sAlias, iOpenMode, iShareMode );
- #else
- // std::cout << "Dbase IV file support not build into library. See XB_DBF4_SUPPORT" << std::endl;
- iErrorStop = 130;
- iRc = XB_FILE_TYPE_NOT_SUPPORTED;
- throw iRc;
- #endif
- }
- else if( iTblVsn == 3 && ( iRequestVersion == 0 || iRequestVersion == 3 )){
-
- #ifdef XB_DBF3_SUPPORT
- pDbf = new xbDbf3( this );
- iRc = pDbf->Open( sFqFileName, sAlias, iOpenMode, iShareMode );
- #else
- //std::cout << "Dbase III file support not build into library. See XB_DBF3_SUPPORT" << std::endl;
- iErrorStop = 140;
- iRc = XB_FILE_TYPE_NOT_SUPPORTED;
- throw iRc;
- #endif
-
- } else {
- iErrorStop = 150;
- iRc = XB_FILE_TYPE_NOT_SUPPORTED;
- throw iRc;
- }
-
- if( iRc != XB_NO_ERROR ){
- iErrorStop = 160;
- throw iRc;
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbxbase::Open() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, iRc );
- WriteLogMessage( sMsg.Str() );
- WriteLogMessage( GetErrorMessage( iRc ));
- }
- return pDbf;
-}
-
-xbInt16 xbXBase::OpenHighestVersion( const xbString &sTableName, const xbString &sAlias,
- xbDbf **dbf )
-{
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
-
- try{
- xbFile f(this);
- if( sTableName.Len() == 0 ){
- iErrorStop = 100;
- iRc = XB_FILE_NOT_FOUND;
- throw iRc;
- }
- f.SetFileName( sTableName );
- if(( iRc = f.FileExists( f.GetFqFileName() )) != xbTrue ){
- iErrorStop = 110;
- iRc = XB_FILE_NOT_FOUND;
- throw iRc;
- }
- unsigned char cFileTypeByte;
- if(( iRc = f.GetXbaseFileTypeByte( f.GetFqFileName(), cFileTypeByte )) != XB_NO_ERROR ){
- iErrorStop = 120;
- return iRc;
- }
- if( f.DetermineXbaseTableVersion( cFileTypeByte ) == 4 ){
- #ifdef XB_DBF4_SUPPORT
- xbDbf *pwDbf = new xbDbf4( this );
- pwDbf->Open( f.GetFqFileName(), sAlias );
- *dbf = pwDbf;
- pwDbf = 0;
- #else
- // std::cout << "Dbase IV file support not build into library. See XB_DBF4_SUPPORT" << std::endl;
- iErrorStop = 130;
- iRc = XB_FILE_TYPE_NOT_SUPPORTED;
- throw iRc;
- #endif
-
- } else if( f.DetermineXbaseTableVersion( cFileTypeByte ) == 3 ){
- #ifdef XB_DBF3_SUPPORT
- *dbf = new xbDbf3( this );
- #else
- //std::cout << "Dbase III file support not build into library. See XB_DBF3_SUPPORT" << std::endl;
- iErrorStop = 140;
- iRc = XB_FILE_TYPE_NOT_SUPPORTED;
- throw iRc;
- #endif
-
- } else {
- iErrorStop = 150;
- iRc = XB_FILE_TYPE_NOT_SUPPORTED;
- throw iRc;
- }
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbxbase::OpenHighestVersion() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, iRc );
- WriteLogMessage( sMsg.Str() );
- WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-/***********************************************************************/
-} /* namespace */
diff --git a/src/examples/xb_ex_date.cpp b/src/examples/xb_ex_date.cpp
deleted file mode 100755
index fc038b5..0000000
--- a/src/examples/xb_ex_date.cpp
+++ /dev/null
@@ -1,210 +0,0 @@
-/* xb_ex_date.cpp
-
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2021,2022 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-This program demonstrates using the xbDate class
-
-*/
-
-
-#include "xbase.h"
-
-using namespace xb;
-
-int main()
-{
-
- xbString StringDate( "19601007" ); /* oct 7 1960 */
- char CharDate[9] = "19611109"; /* nov 9 1961 */
-
- xbDate d1; /* today is default */
- xbDate d2( StringDate ); /* from string data */
- xbDate d3( CharDate ); /* from char data */
- xbDate d4; /* another date class */
- xbString s;
-
- std::cout << "This program demonstrates usage of the xbDate class" << std::endl;
- std::cout << "Date 1 (Sysdate) is " << d1.Str() << std::endl;
- std::cout << "Date 2 (StringDate) is " << d2.Str() << std::endl;
- std::cout << "Date 3 (CharDate) is " << d3.Str() << std::endl;
-
- std::cout << "This year is " << d1.YearOf() << std::endl;
- std::cout << "Year of xbString Date is " << d2.YearOf()
- << std::endl;
- std::cout << "Year of char Date is " << d3.YearOf()
- << std::endl;
-
- std::cout << "This Month is " << d1.MonthOf() << std::endl;
- std::cout << "Month of xbString Date is " << d2.MonthOf()
- << std::endl;
- std::cout << "Month of char Date is " << d3.MonthOf()
- << std::endl;
-
- std::cout << "Today is day " << d1.DayOf( XB_FMT_WEEK ) << " of the week" << std::endl;
- std::cout << "StringDate is day " << d2.DayOf( XB_FMT_MONTH ) << " of the month" << std::endl;
- std::cout << "CharDate is day " << d3.DayOf( XB_FMT_YEAR ) << " of the year" << std::endl;
-
- if( d1.IsLeapYear())
- std::cout << "This is a leap year" << std::endl;
- else
- std::cout << "This is not a leap year." << std::endl;
-
- if( d2.IsLeapYear())
- std::cout << "StringDate is a leap year" << std::endl;
- else
- std::cout << "StringDate is not a leap year." << std::endl;
-
- if( d3.IsLeapYear())
- std::cout << "CharDate is a leap year" << std::endl;
- else
- std::cout << "CharDate is not a leap year." << std::endl;
-
- std::cout << "Today is " << d1.Sysdate() << std::endl;
-
- if( d1.DateIsValid( "19951301" ))
- std::cout << "19951301 is a valid date" << std::endl;
- else
- std::cout << "19951301 is not a valid date" << std::endl;
-
- if( d1.DateIsValid( "19920229" ))
- std::cout << "19920229 is a valid date" << std::endl;
- else
- std::cout << "19920229 is not a valid date" << std::endl;
-
- if( d2.DateIsValid( StringDate ))
- std::cout << StringDate.Str() << " is a valid date" << std::endl;
- else
- std::cout << StringDate.Str() << " is not a valid date" << std::endl;
-
- std::cout << "Today's Julian date " << d1.JulianDays() << std::endl;
- std::cout << "Julian date of Jan 01, 1970 " << d2.JulianDays() << std::endl;
- std::cout << "StringDate Julian date " << d2.JulianDays() << std::endl;
-
- std::cout << "There are " << (d1.JulianDays() - d2.JulianDays()) << " days between " << d1.Str() << " and " << d2.Str() << std::endl;
-
- std::cout << "Todays Julian date (Number of days since Jan 1 0100):" << d1.JulianDays() << std::endl;
-
- d4 = d1; // set d4 class = to sysdate
- std::cout << "Object d4 initialized to " << d4.Str() << std::endl;
- std::cout << "This should be todays date: "
- << d4.JulToDate8(d4.JulianDays()) << std::endl;
- std::cout << "In 7 days it will be "
- << d4.JulToDate8(d4.JulianDays() + 7L ) << std::endl;
-
- d1.CharDayOf( s );
- std::cout << "Today is " << s.Str() << std::endl;
-
- d2.CharDayOf( s );
- std::cout << "StringDate day is " << s.Str() << std::endl;
- d1.CharMonthOf( s );
- std::cout << "This month is " << s.Str() << std::endl;
- d2.CharMonthOf( s );
- std::cout << "StringDate month is " << s.Str() << std::endl;
-
-
- /* various format routines using different formats, strings and chars */
- xbString sOutDate;
-
- d1.FormatDate( "YYDDD", sOutDate );
- std::cout << "Format (YYDDD) = " << sOutDate.Str() << std::endl;
-
- d1.FormatDate( "MM/DD/YY", sOutDate );
- std::cout << "Format (MM/DD/YY) = " << sOutDate.Str() << std::endl;
-
- d1.FormatDate( "YY-MM-DD", sOutDate );
- std::cout << "Format (YY-MM-DD) = " << sOutDate.Str() << std::endl;
-
- d1.FormatDate( "DDDDDDDDD, MMMMMMMMMM DD YYYY", sOutDate );
- std::cout << "Format (DDDDDDDDD, MMMMMMMMMM DD YYYY) = " << sOutDate.Str() << std::endl;
-
- std::cout << "Last day this month " << d1.LastDayOfMonth() << std::endl;
- std::cout << "Last day of month for StringDate is " << d2.LastDayOfMonth() << std::endl;
-
- std::cout << "Overloaded operators test..." << std::endl;
-
- if( d1 == d2 )
- std::cout << d1.Str() << " is equal to " << d2.Str()
- << std::endl;
- else
- std::cout << d1.Str() << " is not equal to " << d2.Str()
- << std::endl;
-
- if( d1 != d3 )
- std::cout << d1.Str() << " is not equal to " << d3.Str()
- << std::endl;
- else
- std::cout << d1.Str() << " is equal to " << d3.Str()
- << std::endl;
-
- if( d1 < d2 )
- std::cout << d1.Str() << " is less than " << d2.Str()
- << std::endl;
- else
- std::cout << d1.Str() << " is not less than " << d2.Str()
- << std::endl;
-
- if( d1 > d2 )
- std::cout << d1.Str() << " is greater than " << d2.Str()
- << std::endl;
- else
- std::cout << d1.Str() << " is not greater than " << d2.Str()
- << std::endl;
-
- if( d1 <= d2 )
- std::cout << d1.Str() << " is less than or equal to " << d2.Str()
- << std::endl;
- else
- std::cout << d1.Str() << " is not less than or equal to "
- << d2.Str() << std::endl;
-
- if( d1 >= d2 )
- std::cout << d1.Str() << " is greater than or equal to "
- << d2.Str() << std::endl;
- else
- std::cout << d1.Str() << " is not greater than or equal to "
- << d2.Str() << std::endl;
-
- d1.Sysdate();
- d1++;
- std::cout << "Tomorrow is " << d1.Str() << std::endl;
- d1-=2;
- std::cout << "Yesterday was " << d1.Str() << std::endl;
- std::cout << "There are " << d1 - d2 << " days between " << d1.Str()
- << " and " << d2.Str() << std::endl;
-
- d1="20140701";
- std::cout << "Operator = example " << d1.Str() << std::endl;
-
- d1+=5;
- std::cout << "Operator += 5 example " << d1.Str() << std::endl;
-
- d1--;
- std::cout << "Operator -- example " << d1.Str() << std::endl;
-
- d1-4;
- std::cout << "Operator -4 example " << d1.Str() << std::endl;
-
- d1+10;
- std::cout << "Operator +10 example " << d1.Str() << std::endl;
- std::cout << "CenturyOf() " << d1.CenturyOf() << std::endl;
-
- xbString sWorkDate;
- d1.CTOD( "10/07/60" );
- std::cout << "CTOD( '10/07/60' ) " << d1.Str() << std::endl;
-
- d1.Set( "19590118" );
- std::cout << "Set( '19590118' ) " << d1.Str() << std::endl;
-
- std::cout << "CalcRollingCenturyForYear( 95 ) = " << d1.CalcRollingCenturyForYear( 95 ) << std::endl;
- return 0;
-}
diff --git a/src/examples/xb_ex_expression.cpp b/src/examples/xb_ex_expression.cpp
deleted file mode 100755
index 840e9c6..0000000
--- a/src/examples/xb_ex_expression.cpp
+++ /dev/null
@@ -1,232 +0,0 @@
-/* xb_ex_expression.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
-
-The xb64 software library is covered under
-the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- xb64-devel@lists.sourceforge.net
- xb64-users@lists.sourceforge.net
-
-
- This example program demonstrates expression usage
-
-*/
-
-
-#include <xbase.h>
-
-using namespace xb;
-
-
-
- xbSchema MyV4Record[] =
- {
- { "CFLD1", XB_CHAR_FLD, 20, 0 },
- { "CFLD2", XB_CHAR_FLD, 10, 0 },
- { "NFLD1", XB_NUMERIC_FLD, 5, 0 },
- { "DATE1", XB_DATE_FLD, 8, 0 },
- { "",0,0,0 }
- };
-
-//*********************************************************************************************************************************
-void PrintResult( xbString *sExpression, xbExp *exp );
-void PrintResult( xbString *sExpression, xbExp *exp ){
-
- // Determine the expression return type
- char cExpType = exp->GetReturnType();
-
- // Process the expression results, dependent on return type
- if( cExpType == XB_EXP_NUMERIC ){
- xbDouble dResult;
- exp->GetNumericResult( dResult );
- std::cout << "Numeric result from expression [" << sExpression->Str() << "] is [" << dResult << "]" << std::endl;
-
- } else if( cExpType == XB_EXP_DATE ){
- xbDate dt;
- exp->GetDateResult( dt );
- std::cout << "Date result from expression [" << sExpression->Str() << "] is [" << dt.Str() << "]" << std::endl;
-
- } else if( cExpType == XB_EXP_LOGICAL ){
- xbBool bResult;
- exp->GetBoolResult( bResult );
- std::cout << "Bool result from expression [" << sExpression->Str() << "] is [" << (bResult ? " True" : "False") << "]" << std::endl;
-
- } else if( cExpType == XB_EXP_CHAR ){
- xbString sResult;
- exp->GetStringResult( sResult );
- std::cout << "Char result from expression [" << sExpression->Str() << "] is [" << sResult.Str() << "]" << std::endl;
- }
-
-}
-
-//*********************************************************************************************************************************
-//int main( int ac, char ** av ){
-
-int main(){
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
- xbIx *pIx = NULL;
- void *pTag = NULL;
-
- xbXBase x;
- xbDbf *MyFile = new xbDbf4( &x );
-
- try{
-
- if(( iRc = MyFile->CreateTable( "EXPEXAMPL.DBF", "TestMdxX2", MyV4Record, XB_OVERLAY, XB_MULTI_USER )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- /*
- CreateTag( const xbString &sIxType, const xbString &sName, const xbString &sKey, const xbString &sFilter,
- xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverLay, xbIx **xbIxOut, void **vpTagOut );
- */
-
- // the following index definition has two expressions
- // 1) CFLD1+CFLD2 -- concat two char fields into an index key
- // 2) .NOT. DELETED() -- don't include any deleted records in the index
- if(( iRc = MyFile->CreateTag( "MDX", "TAG1", "CFLD1+CFLD2", ".NOT. DELETED()", 0, 0, XB_OVERLAY, &pIx, &pTag )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
-
- // add a record to the table
- if(( iRc = MyFile->BlankRecord()) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
-
- if(( iRc = MyFile->PutField( "CFLD1", "Some text" )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
-
- if(( iRc = MyFile->PutField( "CFLD2", "Other text" )) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
-
- if(( iRc = MyFile->PutLongField( "NFLD1", 1000 )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
-
- xbDate dt;
- dt.Set( "19890209" );
- if(( iRc = MyFile->PutDateField( "DATE1", dt )) != XB_NO_ERROR ){
- iErrorStop = 160;
- throw iRc;
- }
-
- if(( iRc = MyFile->AppendRecord()) != XB_NO_ERROR ){
- iErrorStop = 170;
- throw iRc;
- }
-
- if(( iRc = MyFile->Commit()) != XB_NO_ERROR ){
- iErrorStop = 180;
- throw iRc;
- }
-
-
- // To use the XBase64 expression processing logic
- // 1) Parse an expression with the xbExp::ParseExpression() method
- // 2) Process the parsed expression with the xbExp::ProcessExpression() method
- // 3) If needed, determine the expression return type with the xbExp::GetReturnType() method
- // 4) Use the appriate methid to retrieve the expression value:
- // xbExp::GetNumericResult()
- // xbExp::GetDateResult()
- // xbExp::GetLogicalResult()
- // xbExp::GetStringResult()
-
-
- // The expression only needs to be parsed once. The ProcessExpression() method can be used
- // zero, one or many times after it is initially parsed.
-
- // see docs/html/xbc5.html for expression documentation
- // see example below
-
-
- // Numeric expression example
- xbString sExpression = "NFLD1 * (2 + RECNO())";
- xbExp exp( &x );
- // Parse the expression
- if(( iRc = exp.ParseExpression( MyFile, sExpression )) != XB_NO_ERROR ){
- iErrorStop = 190;
- throw iRc;
- }
- // Process the parsed expression
- if(( iRc = exp.ProcessExpression()) != XB_NO_ERROR ){
- iErrorStop = 200;
- return -1;
- }
- PrintResult( &sExpression, &exp );
-
-
- // String expression example
- sExpression = "CFLD1+CFLD2+'{'+DTOS(DATE1)+'}'";
- xbExp exp2( &x );
- if(( iRc = exp2.ParseExpression( MyFile, sExpression )) != XB_NO_ERROR ){
- iErrorStop = 210;
- throw iRc;
- }
- // Process the parsed expression
- if(( iRc = exp2.ProcessExpression()) != XB_NO_ERROR ){
- iErrorStop = 220;
- return -1;
- }
- PrintResult( &sExpression, &exp2 );
-
- // Date example
- sExpression = "DATE() + 6";
- xbExp exp3( &x );
- if(( iRc = exp3.ParseExpression( MyFile, sExpression )) != XB_NO_ERROR ){
- iErrorStop = 230;
- throw iRc;
- }
- // Process the parsed expression
- if(( iRc = exp3.ProcessExpression()) != XB_NO_ERROR ){
- iErrorStop = 240;
- return -1;
- }
- PrintResult( &sExpression, &exp3 );
-
- // Logic example
- sExpression = "NFLD1 = 5";
- xbExp exp4( &x );
- if(( iRc = exp4.ParseExpression( MyFile, sExpression )) != XB_NO_ERROR ){
- iErrorStop = 250;
- throw iRc;
- }
- // Process the parsed expression
- if(( iRc = exp4.ProcessExpression()) != XB_NO_ERROR ){
- iErrorStop = 260;
- return -1;
- }
- PrintResult( &sExpression, &exp4 );
-
-
-
- // Cleanup
- MyFile->DeleteTable();
- delete MyFile;
-
-
- } catch (xbInt16 iRc ){
-
- std::cout << "Error in program xb_ex_expression at location " << iErrorStop << std::endl;
- std::cout << x.GetErrorMessage( iRc ) << std::endl;
-
- }
-
-
-
-
- return iRc;
-}
diff --git a/src/examples/xb_ex_ssv.cpp b/src/examples/xb_ex_ssv.cpp
deleted file mode 100755
index a78345f..0000000
--- a/src/examples/xb_ex_ssv.cpp
+++ /dev/null
@@ -1,134 +0,0 @@
-/* xb_ex_ssv.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2021,2022,2023 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-This program demonstrates using functionality of the xbSsv class (Shared system values)
-
-*/
-
-#include "xbase.h"
-
-using namespace xb;
-
-int main( int ac, char ** av ){
-
- xbXBase x; // set up xbase for business
- xbString sMsg; // a message string
-
- sMsg.Sprintf( "Program [%s] initializing...", av[0] );
- std::cout << sMsg.Str() << std::endl;
-
-
- // example code to set up log file usage
- #ifdef XB_LOGGING_SUPPORT
- char cSeperator; // is this a unix (/) or windows (\) file system
- xbString sLog; // general string for log file activities
- sLog = x.GetLogFqFileName().Str(); // get the system default log file name
- std::cout << "System default logfile is [" << sLog.Str() << "]" << std::endl;
-
- cSeperator = sLog.GetPathSeparator(); // get the seperator from
- std::cout << "Path seperator = [" << cSeperator << "]" << std::endl;
-
- sLog.Sprintf( "..%c", cSeperator );
- x.SetLogDirectory( sLog );
- std::cout << "sLog = [" << sLog.Str() << "]\n";
-
- sLog = x.GetLogFqFileName().Str(); // get the system default log file name
- std::cout << "New logfile is [" << sLog.Str() << "]" << std::endl;
-
- // turn on logging after file name set
- x.EnableMsgLogging();
- #endif // XB_LOGGING_SUPPORT
-
- // const char *GetErrorMessage( xbInt16 ErrorCode ) const;
- // void DisplayError( xbInt16 ErrorCode ) const;
- std::cout << "DisplayError( -100 ) - ";
- x.DisplayError( -100 );
- // << "]" << std::endl;
-
- // void SetDefaultDateFormat( const xbString &sDefaultDateFormat );
- // xbString& GetDefaultDateFormat() const;
- std::cout << "GetDefaultDateFormat() - " << x.GetDefaultDateFormat().Str() << std::endl;
-
-
- // void SetDataDirectory ( const xbString &sDataDirectory );
- // xbString& GetDataDirectory() const;
- std::cout << "GetDataDirectory() - " << x.GetDataDirectory().Str() << std::endl;
-
- // xbInt16 GetEndianType() const;
- if( x.GetEndianType() == 'L' )
- std::cout << "Little Endian Architecture." << std::endl;
- else
- std::cout << "Bid Endian Architecture." << std::endl;
-
- //xbBool GetDefaultAutoCommit() const;
- //void SetDefaultAutoCommit( xbBool bDefaultAutoCommit );
- if( x.GetDefaultAutoCommit())
- std::cout << "AutoCommit is on." << std::endl;
- else
- std::cout << "AutoCommit is off." << std::endl;
-
- //xbBool GetMultiUser () const;
- //void SetMultiUser ( xbBool bMultiUser );
- if( x.GetMultiUser())
- std::cout << "Multi user (locking) is enabled." << std::endl;
- else
- std::cout << "Multi user (locking) not enabled." << std::endl;
-
- #if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
- // xbInt16 GetUniqueKeyOpt () const;
- // xbInt16 SetUniqueKeyOpt ( xbInt16 iUniqueKeyOpt );
- // XB_HALT_ON_DUPKEY
- // XB_EMULATE_DBASE
- if( x.GetUniqueKeyOpt() == XB_HALT_ON_DUPKEY )
- std::cout << "UniqueKey option - XB_HALT_ON_DUPKEY" << std::endl;
- else if( x.GetUniqueKeyOpt() == XB_EMULATE_DBASE )
- std::cout << "UniqueKey option - XB_EMULATE_DBASE" << std::endl;
- #endif // (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
-
- #ifdef XB_LOCKING_SUPPORT
- //xbInt16 GetDefaultLockRetries () const;
- //void SetDefaultLockRetries ( xbInt16 iRetryCount );
- //xbInt32 GetDefaultLockWait () const;
- //void SetDefaultLockWait ( xbInt32 lRetryWait );
- //xbInt16 GetDefaultLockFlavor () const;
- //void SetDefaultLockFlavor ( xbInt16 iLockFlavor );
- //xbBool GetDefaultAutoLock () const;
- //void SetDefaultAutoLock ( xbBool bAutoLock );
- //void EnableDefaultAutoLock ();
- //void DisableDefaultAutoLock ();
-
- std::cout << "GetDefaultLockRetries() - " << x.GetDefaultLockRetries() << std::endl;
- std::cout << "GetDefaultLockWait() - " << x.GetDefaultLockWait() << std::endl;
- std::cout << "GetDefaultAutoLock() - " << x.GetDefaultAutoLock() << std::endl;
- #endif // XB_LOCKING_SUPPORT
-
- #ifdef XB_MDX_SUPPORT
- // xbInt16 GetCreateMdxBlockSize() const;
- // xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );
- std::cout << "GetCreateMdxBlockSize() - " << x.GetCreateMdxBlockSize() << std::endl;
- #endif // XB_MDX_SUPPORT
-
- #ifdef XB_BLOCKREAD_SUPPORT
- // xbUInt32 GetDefaultBlockReadSize() const;
- // void SetDefaultBlockReadSize( xbUInt32 ulDfltBlockReadSize );
- std::cout << "GetDefaultBlockReadSize() - " << x.GetDefaultBlockReadSize() << std::endl;
- #endif // XB_BLOCKREAD_SUPPORT
-
- //xbBool BitSet ( unsigned char c, xbInt16 iBitNo ) const;
- //void BitDump ( unsigned char c ) const;
- //void BitDump ( char c ) const;
- std::cout << "BitDump( 'A' ) - ";
- x.BitDump( 'A' );
-
- return 0;
-}
diff --git a/src/examples/xb_ex_string.cpp b/src/examples/xb_ex_string.cpp
deleted file mode 100755
index 30fd74e..0000000
--- a/src/examples/xb_ex_string.cpp
+++ /dev/null
@@ -1,380 +0,0 @@
-/* xb_ex_string.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2021,2022 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-// This demonstrates the string class
-
-
-#include "xbase.h"
-
-using namespace xb;
-
-int main()
-{
-
- // create a string, assign a value, print it
- xbString s1;
- s1 = "Test String 1";
- fprintf( stdout, "s1 = [%s]\n", s1.Str());
-
- // create another string, copy the value from s1 into it, print it
- xbString s2;
- s2 = s1;
- std::cout << "s2 = [" << s2.Str() << "]" << std::endl;
-
- // create another string with and print it
- xbString s3( 'X' );
- std::cout << "s3 = [" << s3.Str() << "]" << std::endl;
-
- // create another string with and print it and print it out yet another way
- xbString s4( "Class constructor test 4" );
- printf( "s4 = [%s]\n", s4.Str() );
-
- // create another string with a size limit and print it out
- xbString s5( "Class constructor test 4", 7 );
- printf( "s5 = [%s]\n", s5.Str() );
-
- // create another string from a string
- xbString s6( s5 );
- printf( "s6 = [%s]\n", s6.Str() );
-
- // create 100 byte string with nothing in it
- xbString s7( (xbUInt32) 100 );
- printf( "s7 = [%s]\n", s7.Str() );
-
- // Extract character from a particular position in the string
- printf( "[] test -- Position 7 (starts from 1) from String 1 = [%c]\n", s1[7] );
- // or use the getCharacter method
- printf( "getCharacter() test -- Position 7 (starts from 1) from String 1 = [%c]\n", s1.GetCharacter(7) );
-
- // set string 7 to a character
- s7 = 'Z';
- printf( "updated s7 = [%s]\n", s7.Str() );
-
- // trim methods
- s3 = " abc ";
- s3.Ltrim();
- #ifdef XB_DEBUG_SUPPORT
- s3.Dump( "LTrim test" );
- #else
- std::cout << s3.Str() << std::endl;
- #endif
-
- s3 = " abc ";
- s3.Rtrim();
- std::cout << "RTrim test - " << s3.Str() << std::endl;
-
- s3.Trim();
- std::cout << "Trim test - " << s3.Str() << std::endl;
- printf( "s3 Len = [%d]\n", s3.Len() );
-
- // Concatenation tests - I
- s1 = "Concatenation test1 part 1 ";
- s1 += "Concatenation test1 part 2 ";
- s2 = " s2 data ";
- s1 += s2;
- s1 += 'z';
-
- // Concatenation tests - II
- s1 = "Concatenation test1 part 1 ";
- s1 -= "Concatenation test1 part 2 ";
- s1 -= 'X';
- s1 -= s2;
- std::cout << "Concatenation test 2 - " << s1.Str() << std::endl;
-
- // Concatenation tests - III
- s1 = "s1data ";
- s2 = "s2data ";
-
- s3 = s1 - s2;
- std::cout << "Concatenation test 3a - " << s3.Str() << std::endl;
-
- s3 = s1 + s2;
- std::cout << "Concatenation test 3b - " << s3.Str() << std::endl;
-
- s3 = s1 + " char * data ";
- std::cout << "Concatenation test 3c - " << s3.Str() << std::endl;
-
- s3 = s1 + 'Z';
- std::cout << "Concatenation test 3d - " << s3.Str() << std::endl;
-
- s3 = 'A';
-
- std::cout << s3.Str() << std::endl;
- s3 += s1;
-
- std::cout << s3.Str() << std::endl;
-
- s3 = 'A' + s1;
-
- std::cout << std::endl << "== operator tests" << std::endl;
- if( s1 == s2 )
- std::cout << s1.Str() << " == " << s2.Str() << std::endl;
- else
- std::cout << s1.Str() << " != " << s2.Str() << std::endl;
-
- s1 = s2;
- if( s1 == s2 )
- std::cout << s1.Str() << " == " << s2.Str() << std::endl;
- else
- std::cout << s1.Str() << " != " << s2.Str() << std::endl;
-
- if( s1 == "sometestdata" )
- std::cout << s1.Str() << " == sometestdata" << s2.Str() << std::endl;
- else
- std::cout << s1.Str() << " != sometestdata" << s2.Str() << std::endl;
-
- std::cout << std::endl << "!= operator tests" << std::endl;
- s2 = "abc123";
- std::cout << "s1 - " << s1.Str() << std::endl;
- std::cout << "s2 - " << s2.Str() << std::endl;
-
- if( s1 != s2 )
- std::cout << s1.Str() << " != " << s2.Str() << std::endl;
- else
- std::cout << s1.Str() << " == " << s2.Str() << std::endl;
-
- s1 = s2;
- if( s1 != s2 )
- std::cout << s1.Str() << " != " << s2.Str() << std::endl;
- else
- std::cout << s1.Str() << " == " << s2.Str() << std::endl;
-
- if( s1 != "sometestdata" )
- std::cout << s1.Str() << " != [sometestdata]" << std::endl;
- else
- std::cout << s1.Str() << " == [sometestdata]" << std::endl;
-
- std::cout << std::endl << "< operator tests" << std::endl;
- s1 = "AAA";
- s2 = "BBB";
-
- if( s1 < s2 )
- std::cout << s1.Str() << " < " << s2.Str() << std::endl;
- else
- std::cout << s1.Str() << " >= " << s2.Str() << std::endl;
-
- s1 = "BBB";
- if( s1 < s2 )
- std::cout << s1.Str() << " < " << s2.Str() << std::endl;
- else
- std::cout << s1.Str() << " >= " << s2.Str() << std::endl;
-
- s1 = "CCC";
- if( s1 < s2 )
- std::cout << s1.Str() << " < " << s2.Str() << std::endl;
- else
- std::cout << s1.Str() << " >= " << s2.Str() << std::endl;
-
- std::cout << std::endl << "> operator tests" << std::endl;
- s1 = "AAA";
- s2 = "BBB";
-
- if( s1 > s2 )
- std::cout << s1.Str() << " > " << s2.Str() << std::endl;
- else
- std::cout << s1.Str() << " <= " << s2.Str() << std::endl;
-
- s1 = "BBB";
- if( s1 > s2 )
- std::cout << s1.Str() << " > " << s2.Str() << std::endl;
- else
- std::cout << s1.Str() << " <= " << s2.Str() << std::endl;
-
- s1 = "CCC";
- if( s1 > s2 )
- std::cout << s1.Str() << " > " << s2.Str() << std::endl;
- else
- std::cout << s1.Str() << " <= " << s2.Str() << std::endl;
-
- std::cout << std::endl << "<= operator tests" << std::endl;
- s1 = "AAA";
- s2 = "BBB";
-
- if( s1 <= s2 )
- std::cout << s1.Str() << " <= " << s2.Str() << std::endl;
- else
- std::cout << s1.Str() << " > " << s2.Str() << std::endl;
-
- s1 = "BBB";
- if( s1 <= s2 )
- std::cout << s1.Str() << " <= " << s2.Str() << std::endl;
- else
- std::cout << s1.Str() << " > " << s2.Str() << std::endl;
-
- s1 = "CCC";
- if( s1 <= s2 )
- std::cout << s1.Str() << " <= " << s2.Str() << std::endl;
- else
- std::cout << s1.Str() << " > " << s2.Str() << std::endl;
-
- std::cout << std::endl << ">= operator tests" << std::endl;
- s1 = "AAA";
- s2 = "BBB";
-
- if( s1 >= s2 )
- std::cout << s1.Str() << " >= " << s2.Str() << std::endl;
- else
- std::cout << s1.Str() << " < " << s2.Str() << std::endl;
-
- s1 = "BBB";
- if( s1 >= s2 )
- std::cout << s1.Str() << " >= " << s2.Str() << std::endl;
- else
- std::cout << s1.Str() << " < " << s2.Str() << std::endl;
-
- s1 = "CCC";
- if( s1 >= s2 )
- std::cout << s1.Str() << " >= " << s2.Str() << std::endl;
- else
- std::cout << s1.Str() << " < " << s2.Str() << std::endl;
-
- std::cout << "(const char *) " << (const char *) s2.Str() << std::endl;
-
- std::cout << std::endl << "CountChar() test" << std::endl;
- s1 = "ABADFDSGA";
- xbUInt32 i = s1.CountChar( 'A' );
- std::cout << "There are " << i << " 'A's in " << s1.Str() << std::endl;
-
- s1.Ltrunc( 4 );
- std::cout << "lTunc(4) test s1 = [" << s1.Str() << "]" << std::endl;
-
- std::cout << std::endl << "PutAt() test" << std::endl;
- s1.PutAt( 3, 'Z' );
- std::cout << "Third char should be a 'Z' = " << s1.Str() << std::endl;
-
- std::cout << std::endl << "AddBackSlash() test" << std::endl;
- s1.AddBackSlash( 'Z' );
- std::cout << "Should be a backslash before the 'Z' = " << s1.Str() << std::endl;
-
- std::cout << std::endl << "Assign() test" << std::endl;
- s2 = "1234567890";
- std::cout << "s2 = " << s2.Str() << std::endl;
- s1.Assign( s2, 4, 5 );
- std::cout << "assign( s2, 4, 5 ) results = " << s1.Str() << std::endl;
- s1.Assign( s2, 4, 15 );
- std::cout << "assign( s2, 4, 15 ) results = " << s1.Str() << std::endl;
-
- s1.Assign( s2, 5 );
- std::cout << "Assign( s2, 5 ) results = " << s1.Str() << std::endl;
- s1.Assign( s2, 15 );
- std::cout << "Assign( s2, 15 ) results = " << s1.Str() << std::endl;
-
- std::cout << std::endl << "s1.copy() test" << std::endl;
- s1 = "ABC";
- std::cout << "s1 = " << s1.Str() << std::endl;
- std::cout << "s2 = " << s2.Str() << std::endl;
-
- s1 = s2.Copy();
- std::cout << "s1.Copy() results" << s1.Str() << std::endl;
-
- s1 = "0x35";
- char hexChar;
- s1.CvtHexChar( hexChar );
- std::cout << "CvtHexChar test [" << s1.Str() << "] converts to [" << hexChar << "]" << std::endl;
- s1 = "0x65";
- s1.CvtHexChar( hexChar );
- std::cout << "cvHexChar test [" << s1.Str() << "] converts to [" << hexChar << "]" << std::endl;
-
- s1 = "0x610x620x630x640x65";
- s1.CvtHexString( s2 );
- std::cout << "CvtHexString [" << s1.Str() << "] converts to [" << s2.Str() << "]" << std::endl;
-
- s1.ExtractElement( "aaaa|bbbb|cccc|dddd", '|', 2, 0 );
- std::cout << "ExtractElement() " << s1.Str() << std::endl;
-
- s1 = "123";
- s2 = "ABC";
- std::cout << "HasAlphaChars( " << s1.Str() << " ) = " << s1.HasAlphaChars() << std::endl;
- std::cout << "HasAlphaChars( " << s2.Str() << " ) = " << s2.HasAlphaChars() << std::endl;
-
- s2 = "";
- std::cout << "IsEmpty( " << s1.Str() << " ) = " << s1.IsEmpty() << std::endl;
- std::cout << "IsEmpty( " << s2.Str() << " ) = " << s2.IsEmpty() << std::endl;
-
- s1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
- std::cout << s1.Str() << " s1.Mid( 3,5 ) = [" << s1.Mid( 3, 5 ).Str() << "]" << std::endl;
- std::cout << s1.Str() << " s1.Mid( 25, 10 ) = [" << s1.Mid( 25, 10 ).Str() << "]" << std::endl;
-
- std::cout << s1.Str() << " s1.Pos('G') = " << s1.Pos( 'G' ) << std::endl;
- std::cout << s1.Str() << " s1.Pos(\"JKL\") = " << s1.Pos( "JKL" ) << std::endl;
-
- std::cout << "Remove( 3, 5 ) before " << s1.Str() << std::endl;
- std::cout << s1.Str() << " s1.Remove( 3, 5 ) = [" << s1.Remove( 3, 5 ).Str() << "]" << std::endl;
- std::cout << "Remove( 3, 5 ) after " << s1.Str() << std::endl;
- s1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
-
- std::cout << "s1.Remove( 20, 10 ) = [" << s1.Remove( 20, 10 ).Str() << "]" << std::endl;
-
- std::cout << "Remove( 20, 10 ) - " << s1.Str() << std::endl;
-
-
- s1.Sprintf( "%d", 12345 );
- std::cout << "Sprintf( %d, 12345 ) " << s1.Str() << std::endl;
-
- s1.SetNum( (long) 123456 );
- std::cout << "s1.SetNum( 123456 ) = " << s1.Str() << std::endl;
-
- s1.Set( "Yet another way to set a string value" );
- std::cout << "Set - " << s1.Str() << std::endl;
-
- s1 = "ABCABCABZ";
- std::cout << "SwapChars( 'A', '9' ) before - " << s1.Str() << std::endl;
- s1.SwapChars( 'A', '9' );
- std::cout << "SwapChars( 'A', '9' ) after - " << s1.Str() << std::endl;
-
- s1.ToLowerCase();
- std::cout << "ToLowerCase - " << s1.Str() << std::endl;
-
- s1.ToUpperCase();
- std::cout << "ToUpperCase - " << s1.Str() << std::endl;
-
- s1.ZapChar( '9' );
- std::cout << "ZapChar( '9' )" << s1.Str() << std::endl;
-
- s1.ZapLeadingChar( 'B' );
- std::cout << "ZapLeadingChar( 'B' )" << s1.Str() << std::endl;
-
- s1.ZapTrailingChar( 'Z' );
- std::cout << "ZapLeadingChar( 'Z' ) - " << s1.Str() << std::endl;
-
- s1 = "123";
- s1.PadLeft( '0', 9 );
- std::cout << "s1.PadLeft('0', 9 ) - " << s1.Str() << std::endl;
-
- s1 = "abc";
- s1.PadRight( 'Z', 9 );
- std::cout << "s1.PadRight('Z', 9 ) " << s1.Str() << std::endl;
-
- xbString sNullString;
- if( sNullString.IsNull())
- std::cout << "sNullString is null" << std::endl;
- else
- std::cout << "sNullString is not null" << std::endl;
-
- xbString tstS( "ZZZZZZZZZ" );
- tstS = s1.Left( 5 );
-
- std::cout << "tstS = " << tstS.Str() << "\n";
- std::cout << "s1 = " << s1.Str() << "\n";
-
- tstS = "1234567890";
- std::cout << "mid result = " << tstS.Mid( 3, 3 ).Str() << std::endl;
-
- tstS = "1234567890";
- std::cout << "left result = " << tstS.Left( 3 ).Str() << std::endl;
-
-
- return 0;
-}
diff --git a/src/examples/xb_ex_v3_create_dbf.cpp b/src/examples/xb_ex_v3_create_dbf.cpp
deleted file mode 100755
index ecfcd72..0000000
--- a/src/examples/xb_ex_v3_create_dbf.cpp
+++ /dev/null
@@ -1,102 +0,0 @@
-/* xb_ex_v3_create_dbf.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
- This example demonstrates the creation of a Version III file and and indices
-
-*/
-
-#include <xbase.h>
-
-using namespace xb;
-
-int main()
-{
-
-#ifdef XB_DBF3_SUPPORT
-
- xbSchema MyRecord[] =
- {
- { "FIRSTNAME", XB_CHAR_FLD, 15, 0 },
- { "LASTNAME", XB_CHAR_FLD, 20, 0 },
- { "BIRTHDATE", XB_DATE_FLD, 8, 0 },
- { "AMOUNT", XB_NUMERIC_FLD, 9, 2 },
- { "RETIRED?", XB_LOGICAL_FLD, 1, 0 },
- { "ZIPCODE", XB_NUMERIC_FLD, 5, 0 },
-#ifdef XB_MEMO_SUPPORT
- { "MEMO1", XB_MEMO_FLD, 10, 0 },
-#endif
- { "",0,0,0 }
- };
-
- /* define the classes */
- xbXBase x; /* initialize xbase */
- x.SetDataDirectory( PROJECT_DATA_DIR ); /* where all the tables live */
-
- xbDbf *MyDbfFile; /* Pointer to dbf class */
- MyDbfFile = new xbDbf3(&x); /* Create Version 3 instance */
-
-
-// Create Dbase3 NDX style indices if support compiled in
-#ifdef XB_NDX_SUPPORT
- xbIxNdx MyIndex1( MyDbfFile ); /* class for index 1 */
- xbIxNdx MyIndex2( MyDbfFile ); /* class for index 2 */
- xbIxNdx MyIndex3( MyDbfFile ); /* class for index 3 */
-#endif
-
-
-// fixme
-// Create Clipper NTX style indices if support compiled in - bring this back to life in a future release
-#ifdef XB_INDEX_NTX
- xbNtx MyIndex4( &MyDbfFile ); /* class for index 4 */
- xbNtx MyIndex5( &MyDbfFile ); /* class for index 5 */
-#endif
-
- xbInt16 rc;
-
- if(( rc = MyDbfFile->CreateTable( "MyV3Table1", "MyV3ExampleTableAlias", MyRecord, XB_OVERLAY, XB_MULTI_USER )) != XB_NO_ERROR )
- x.DisplayError( rc );
- else
- {
-
-#ifdef XB_NDX_SUPPORT
-
- xbIx *pIx;
- void *pTag;
-
- /*
- Create a few index tags
- CreateTag( const xbString &sIxType, const xbString &sName, const xbString &sKey, const xbString &sFilter,
- xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverLay, xbIx **xbIxOut, void **vpTagOut );
- */
-
- /* define a simple index */
- if(( rc = MyDbfFile->CreateTag ( "NDX", "MYINDEX1.NDX", "LASTNAME", "", 0, 1, XB_OVERLAY, &pIx, &pTag )) != XB_NO_ERROR )
- x.DisplayError( rc );
-
- /* define a multi-field index "LASTNAME FIRSTNAME" */
- if(( rc = MyDbfFile->CreateTag( "NDX", "MYINDEX2.NDX", "LASTNAME+FIRSTNAME", "", 0, 1, XB_OVERLAY, &pIx, &pTag )) != XB_NO_ERROR )
- x.DisplayError( rc );
-
- /* define a numeric index "ZIPCODE" */
- if(( rc = MyDbfFile->CreateTag( "NDX", "MYINDEX3.NDX", "ZIPCODE", "", 0, 0, XB_OVERLAY, &pIx, &pTag )) != XB_NO_ERROR )
- x.DisplayError( rc );
-
-#endif
-
- }
-
- MyDbfFile->Close(); /* Close database and associated indexes */
-
-#endif // XB_DBF3_SUPPORT
- return 0;
-}
diff --git a/src/examples/xb_ex_v3_upd_dbf.cpp b/src/examples/xb_ex_v3_upd_dbf.cpp
deleted file mode 100755
index aa6ec49..0000000
--- a/src/examples/xb_ex_v3_upd_dbf.cpp
+++ /dev/null
@@ -1,282 +0,0 @@
-/* xb_ex_v3_upd_dbf.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2021,2022 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
- This example demonstrates how to open the DBase III table created by xb_ex_v3_create_dbf
- and apply various updates to the table.
-
-*/
-
-#include <xbase.h>
-
-using namespace xb;
-
-int main()
-{
-
-#ifdef XB_DBF3_SUPPORT
-
- xbInt16 fld_FIRSTNAME;
- xbInt16 fld_LASTNAME;
- xbInt16 fld_BIRTHDATE;
- xbInt16 fld_AMOUNT;
- xbInt16 fld_RETIRED;
- xbInt16 fld_ZIPCODE;
-
- #ifdef XB_MEMO_SUPPORT
- xbInt16 fld_MEMO1;
- xbString sMemoData;
- #endif
-
-
- /* define the classes */
- xbXBase x; /* initialize xbase */
- x.SetDataDirectory( PROJECT_DATA_DIR ); /* where all the tables live */
- x.EnableMsgLogging();
- x.WriteLogMessage( "Program [xb_ex_v3_upd_dbf] initializing..." );
-
-
- xbDbf * MyTable = new xbDbf3( &x ); /* class for V3 table */
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
-
- try{
-
- if(( iRc = MyTable->Open( "MyV3Table1.DBF" )) != XB_NO_ERROR ){
- iErrorStop = 1;
- throw iRc;
- }
-
- #ifdef XB_NDX_SUPPORT
- // V3 NDX style indices can be opened manually (vs production MDX index files opened automatically)
- if(( iRc = MyTable->OpenIndex( "NDX", "MYINDEX1.NDX")) != XB_NO_ERROR ){
- iErrorStop = 2;
- throw iRc;
- }
- if(( iRc = MyTable->OpenIndex( "NDX", "MYINDEX2.NDX" )) != XB_NO_ERROR ){
- iErrorStop = 3;
- throw iRc;
- }
- if(( iRc = MyTable->OpenIndex( "NDX", "MYINDEX3.NDX" )) != XB_NO_ERROR ){
- iErrorStop = 4;
- throw iRc;
- }
- std::cout << "Current tag = [" << MyTable->GetCurTagName().Str() << "]\n";
- #endif
-
-
-
- // get the field numbers for all the fields in the table
- fld_FIRSTNAME = MyTable->GetFieldNo( "FIRSTNAME" );
- fld_LASTNAME = MyTable->GetFieldNo( "LASTNAME" );
- fld_BIRTHDATE = MyTable->GetFieldNo( "BIRTHDATE" );
- fld_AMOUNT = MyTable->GetFieldNo( "AMOUNT" );
- fld_RETIRED = MyTable->GetFieldNo( "RETIRED?" );
- fld_ZIPCODE = MyTable->GetFieldNo( "ZIPCODE" );
-
- #ifdef XB_MEMO_SUPPORT
- fld_MEMO1 = MyTable->GetFieldNo( "MEMO1" );
- #endif
-
-
- // Blank the record buffer
- if(( iRc = MyTable->BlankRecord()) != XB_NO_ERROR ){
- iErrorStop = 7;
- throw iRc;
- }
-
- // put field examples - using field numbers
- if(( iRc = MyTable->PutField( fld_LASTNAME, "JONES" )) != XB_NO_ERROR ){
- iErrorStop = 8;
- throw iRc;
- }
-
- if(( iRc = MyTable->PutField( fld_FIRSTNAME, "JERRY" )) != XB_NO_ERROR ){
- iErrorStop = 9;
- throw iRc;
- }
-
- if(( iRc = MyTable->PutField( fld_AMOUNT, "12.35" )) != XB_NO_ERROR ){
- iErrorStop = 10;
- throw iRc;
- }
-
- if(( iRc = MyTable->PutField( fld_BIRTHDATE, "19880208" )) != XB_NO_ERROR ){
- iErrorStop = 10;
- throw iRc;
- }
-
- if(( iRc = MyTable->PutLogicalField( fld_RETIRED, "Y" )) != XB_NO_ERROR ){
- iErrorStop = 11;
- throw iRc;
- }
-
- if(( iRc = MyTable->PutLongField( fld_ZIPCODE, 12345 )) != XB_NO_ERROR ){
- iErrorStop = 12;
- throw iRc;
- }
-
- #ifdef XB_MEMO_SUPPORT
- sMemoData = "Memo data record 1";
- if(( iRc = MyTable->UpdateMemoField( fld_MEMO1, sMemoData )) != XB_NO_ERROR ){
- iErrorStop = 13;
- throw iRc;
- }
- #endif
-
- // Append the first record
- if(( iRc = MyTable->AppendRecord()) != XB_NO_ERROR ){
- iErrorStop = 15;
- throw iRc;
- }
-
- // put field to the record buffer using field name (slightly less efficient than using field numbers)
-
- // Blank the record buffer
- if(( iRc = MyTable->BlankRecord()) != XB_NO_ERROR ){
- iErrorStop = 20;
- throw iRc;
- }
-
- if(( iRc = MyTable->PutField( "LASTNAME", "EINSTIEN" )) != XB_NO_ERROR ){
- iErrorStop = 21;
- throw iRc;
- }
-
- if(( iRc = MyTable->PutField( "FIRSTNAME", "ALBERT" )) != XB_NO_ERROR ){
- iErrorStop = 22;
- throw iRc;
- }
-
- if(( iRc = MyTable->PutField( "AMOUNT", "987.55" )) != XB_NO_ERROR ){
- iErrorStop = 23;
- throw iRc;
- }
-
- if(( iRc = MyTable->PutField( fld_BIRTHDATE, "19890209" )) != XB_NO_ERROR ){
- iErrorStop = 24;
- throw iRc;
- }
-
- if(( iRc = MyTable->PutLogicalField( "RETIRED?", "N" )) != XB_NO_ERROR ){
- iErrorStop = 25;
- throw iRc;
- }
-
- if(( iRc = MyTable->PutLongField( "ZIPCODE", 44256 )) != XB_NO_ERROR ){
- iErrorStop = 26;
- throw iRc;
- }
-
- #ifdef XB_MEMO_SUPPORT
- sMemoData = "Memo data record 2";
- if(( iRc = MyTable->UpdateMemoField( fld_MEMO1, sMemoData )) != XB_NO_ERROR ){
- iErrorStop = 27;
- throw iRc;
- }
- #endif
-
- // Append the second record
- if(( iRc = MyTable->AppendRecord()) != XB_NO_ERROR ){
- iErrorStop = 30;
- throw iRc;
- }
-
- // get a field with a field number
- xbString FirstName;
- if(( iRc = MyTable->GetField( fld_FIRSTNAME, FirstName )) < 0 ){
- iErrorStop = 40;
- throw iRc;
- }
- std::cout << "First Name is [" << FirstName.Str() << "]" << std::endl;
-
- xbString LastName;
- if(( iRc = MyTable->GetField( "LASTNAME", LastName )) < 0 ){
- iErrorStop = 41;
- throw iRc;
- }
- std::cout << "Last Name is [" << LastName.Str() << "]" << std::endl;
-
- xbInt16 iNoOfDecimals;
- if(( iRc = MyTable->GetFieldDecimal( "AMOUNT", iNoOfDecimals )) != XB_NO_ERROR ){
- iErrorStop = 42;
- throw iRc;
- }
- std::cout << "There are " << iNoOfDecimals << " decimals in the AMOUNT field" << std::endl;
-
- xbString FieldName;
- if(( iRc = MyTable->GetFieldName( 4, FieldName )) != XB_NO_ERROR ){
- iErrorStop = 43;
- throw iRc;
- }
- std::cout << "Field #4 name is " << FieldName.Str() << std::endl;
-
- xbString sRetired;
- if(( iRc = MyTable->GetLogicalField( "RETIRED?", sRetired )) < 0 ){
- iErrorStop = 45;
- throw iRc;
- }
- std::cout << "Switch value = [" << sRetired.Str() << "]" << std::endl;
-
- xbInt32 lZip;
- if(( iRc = MyTable->GetLongField( "ZIPCODE", lZip )) < 0 ){
- iErrorStop = 46;
- throw iRc;
- }
- std::cout << "Long value = [" << lZip << "]" << std::endl;
-
- // Initialize the record buffer in preparation for another record
- if(( iRc = MyTable->BlankRecord()) != XB_NO_ERROR ){
- iErrorStop = 48;
- throw iRc;
- }
-
- // Append another record (it will be blank)
- if(( iRc = MyTable->AppendRecord()) != XB_NO_ERROR ){
- iErrorStop = 49;
- throw iRc;
- };
-
- // mark current record for deletion
- if(( iRc = MyTable->DeleteRecord()) != XB_NO_ERROR ){
- iErrorStop = 50;
- throw iRc;
- };
-
- // save current record
- if(( iRc = MyTable->PutRecord()) != XB_NO_ERROR ){
- iErrorStop = 51;
- throw iRc;
- }
- // pack the table with no options
- if(( iRc = MyTable->Pack()) != XB_NO_ERROR ){
- iErrorStop = 52;
- throw iRc;
- }
-
- /* Close database and associated indexes */
- if(( iRc = MyTable->Close()) != XB_NO_ERROR ){
- iErrorStop = 53;
- throw iRc;
- }
-
- }
- catch( xbInt16 rc ){
- std::cout << "xb_ex_v3_upd_dbf error. Error stop point = [" << iErrorStop << "] iRc = [" << rc << "]" << std::endl;
- std::cout << x.GetErrorMessage( rc ) << std::endl;
- }
-
-#endif // XB_DBF3_SUPPORT
-
- return 0;
-}
diff --git a/src/examples/xb_ex_v4_create_dbf.cpp b/src/examples/xb_ex_v4_create_dbf.cpp
deleted file mode 100755
index 6169213..0000000
--- a/src/examples/xb_ex_v4_create_dbf.cpp
+++ /dev/null
@@ -1,99 +0,0 @@
-/* xb_ex_v4_create_dbf.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
- This example demonstrates the creation of a Version IV file and and indices
-
- Creates three files in folder "PROJECT_DATA_DIR"
- Address.DBF - Table with all the data
- Address.DBT - Memo (variable lenght char field) data
- Address.MDX - File with index data
-
-*/
-
-#include <xbase.h>
-
-using namespace xb;
-
-int main()
-{
-
-#ifdef XB_DBF4_SUPPORT
-
- xbSchema MyAddressBookRecord[] =
- {
- { "LASTNAME", XB_CHAR_FLD, 20, 0 },
- { "FIRSTNAME", XB_CHAR_FLD, 15, 0 },
- { "COMPANY", XB_CHAR_FLD, 20, 0 },
- { "ADDRESS", XB_CHAR_FLD, 35, 0 },
- { "CITY", XB_CHAR_FLD, 30, 0 },
- { "STATECD", XB_CHAR_FLD, 2, 0 },
- { "ZIPCD", XB_CHAR_FLD, 10, 0 },
-
- { "BIRTHDATE", XB_DATE_FLD, 8, 0 },
-
- { "AMOUNT1", XB_NUMERIC_FLD, 9, 2 },
- { "AMOUNT2", XB_FLOAT_FLD, 12, 2 },
-
- { "FRIEND?", XB_LOGICAL_FLD, 1, 0 },
- { "FAMILY?", XB_LOGICAL_FLD, 1, 0 },
- { "BUSASSOC?", XB_LOGICAL_FLD, 1, 0 },
-
- #ifdef XB_MEMO_SUPPORT
- { "NOTES", XB_MEMO_FLD, 10, 0 },
- #endif
- { "",0,0,0 }
- };
-
- /* define the classes */
- xbXBase x; /* initialize xbase */
- x.SetDataDirectory( PROJECT_DATA_DIR ); /* where all the tables/files live */
-
- xbInt16 iRc;
- xbDbf * MyDbfFile;
-
- #ifdef XB_MDX_SUPPORT
- xbIx *pIx;
- void *pTag;
- #endif // XB_MDX_SUPPORT
-
- MyDbfFile = new xbDbf4( &x );
-
- if(( iRc = MyDbfFile->CreateTable( "Address.DBF", "Address", MyAddressBookRecord, XB_OVERLAY, XB_MULTI_USER )) != XB_NO_ERROR )
- x.DisplayError( iRc );
- else
- {
-
- #ifdef XB_MDX_SUPPORT
-
- /*
- Create a few index tags
- CreateTag( const xbString &sIxType, const xbString &sName, const xbString &sKey, const xbString &sFilter,
- xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverLay, xbIx **xbIxOut, void **vpTagOut );
- */
-
- // std::cout << "Creating three index tags\n";
- if(( iRc = MyDbfFile->CreateTag( "MDX", "NAME", "LASTNAME+FIRSTNAME", ".NOT. DELETED()", 0, 0, XB_OVERLAY, &pIx, &pTag )) != XB_NO_ERROR )
- x.DisplayError( iRc );
- if(( iRc = MyDbfFile->CreateTag( "MDX", "BDDATE", "BIRTHDATE", ".NOT. DELETED()", 0, 0, XB_OVERLAY, &pIx, &pTag )) != XB_NO_ERROR )
- x.DisplayError( iRc );
- if(( iRc = MyDbfFile->CreateTag( "MDX", "COMPANY", "COMPANY+LASTNAME+FIRSTNAME", ".NOT. DELETED()", 0, 0, XB_OVERLAY, &pIx, &pTag )) != XB_NO_ERROR )
- x.DisplayError( iRc );
-
- #endif // XB_MDX_SUPPORT
- }
-
- MyDbfFile->Close(); /* Close database and associated indexes */
-
-#endif // XB_DBF4_SUPPORT
- return 0;
-}
diff --git a/src/examples/xb_ex_v4_upd_dbf.cpp b/src/examples/xb_ex_v4_upd_dbf.cpp
deleted file mode 100755
index 75d0641..0000000
--- a/src/examples/xb_ex_v4_upd_dbf.cpp
+++ /dev/null
@@ -1,286 +0,0 @@
-/* xb_ex_v4_upd_dbf.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
- This example demonstrates how to open the DBase IV table created by xb_ex_v4_create_dbf
- and apply various updates to the table.
-
-*/
-
-#include <xbase.h>
-
-using namespace xb;
-
-int main()
-{
-
-#ifdef XB_DBF4_SUPPORT
-
-
- /* define the classes */
- xbXBase x; /* initialize xbase */
- x.SetDataDirectory( PROJECT_DATA_DIR ); /* where all the tables live */
- x.EnableMsgLogging();
- x.WriteLogMessage( "Program [xb_ex_v4_upd_dbf] initializing..." );
-
- xbDbf *MyTable = new xbDbf4( &x ); /* class for DBase V4 table */
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
-
- try{
-
- if(( iRc = MyTable->Open( "Address.DBF" )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
-
- /* get the field numbers for all the fields in the table */
-
- xbInt16 iFld_FIRSTNAME = MyTable->GetFieldNo( "FIRSTNAME" );
- xbInt16 iFld_LASTNAME = MyTable->GetFieldNo( "LASTNAME" );
- xbInt16 iFld_BIRTHDATE = MyTable->GetFieldNo( "BIRTHDATE" );
- xbInt16 iFld_AMOUNT1 = MyTable->GetFieldNo( "AMOUNT1" );
- xbInt16 iFld_FRIEND = MyTable->GetFieldNo( "FRIEND?" );
- xbInt16 iFld_ZIPCD = MyTable->GetFieldNo( "ZIPCD" );
- xbInt16 iFld_AMOUNT2 = MyTable->GetFieldNo( "AMOUNT2" );
-
- #ifdef XB_MEMO_FIELDS
- zbInt16 iFld_MEMO1 = MyTable->GetFieldNo( "MEMO1" );
- #endif
-
-
- #ifdef XB_MDX_SUPPPORT
- std::cout << "Current tag = [" << MyTable->GetCurTagName() << "]\n";
- #endif
-
- // Blank the record buffer
- if(( iRc = MyTable->BlankRecord()) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
-
- // put field examples - using field numbers
- if(( iRc = MyTable->PutField( iFld_LASTNAME, "JONES" )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- // could also reference by field name (see below) but referencing by number
- // is a little bit faster because it doesn't need to look up the number for the field name
- // Alternative--> if(( iRc = MyTable->PutField( "LASTNAME", "JONES" )) != XB_NO_ERROR ){
-
- if(( iRc = MyTable->PutField( iFld_FIRSTNAME, "JERRY" )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
-
- if(( iRc = MyTable->PutField( iFld_AMOUNT1, "12.35" )) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
-
- if(( iRc = MyTable->PutLogicalField( iFld_FRIEND, "Y" )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
-
- if(( iRc = MyTable->PutField( iFld_BIRTHDATE, "19880209" )) != XB_NO_ERROR ){
- iErrorStop = 160;
- throw iRc;
- }
-
- if(( iRc = MyTable->PutLongField( iFld_ZIPCD, 12345 )) != XB_NO_ERROR ){
- iErrorStop = 170;
- throw iRc;
- }
-
- // Append the first record
- if(( iRc = MyTable->AppendRecord()) != XB_NO_ERROR ){
- iErrorStop = 180;
- throw iRc;
- }
-
- // Commit the updates
- if(( iRc = MyTable->Commit()) != XB_NO_ERROR ){
- iErrorStop = 190;
- throw iRc;
- }
-
- // Blank the record buffer
- if(( iRc = MyTable->BlankRecord()) != XB_NO_ERROR ){
- iErrorStop = 200;
- throw iRc;
- }
-
- // put field to the record buffer using field name (slightly less efficient than using field numbers)
- if(( iRc = MyTable->PutField( "LASTNAME", "FUCKPUTIN" )) != XB_NO_ERROR ){
- iErrorStop = 210;
- throw iRc;
- }
-
- if(( iRc = MyTable->PutField( "FIRSTNAME", "ALBERT" )) != XB_NO_ERROR ){
- iErrorStop = 220;
- throw iRc;
- }
-
- if(( iRc = MyTable->PutDoubleField( "AMOUNT1", (xbDouble) 987.55 )) != XB_NO_ERROR ){
- iErrorStop = 230;
- throw iRc;
- }
-
- if(( iRc = MyTable->PutLogicalField( "FRIEND?", "N" )) != XB_NO_ERROR ){
- iErrorStop = 240;
- throw iRc;
- }
-
- if(( iRc = MyTable->PutLongField( "ZIPCD", 44256 )) != XB_NO_ERROR ){
- iErrorStop = 250;
- throw iRc;
- }
-
- xbFloat f = (xbFloat) 12345.67;
- std::cout << f << std::endl;
-
- if(( iRc = MyTable->PutFloatField( iFld_AMOUNT2, f )) != XB_NO_ERROR ){
- iErrorStop = 260;
- throw iRc;
- }
- xbDouble d = 76543.21;
- if(( iRc = MyTable->PutDoubleField( iFld_AMOUNT1, d )) != XB_NO_ERROR ){
- iErrorStop = 270;
- throw iRc;
- }
-
- // Append the second record
- if(( iRc = MyTable->AppendRecord()) != XB_NO_ERROR ){
- iErrorStop = 280;
- throw iRc;
- }
-
- // Commit the updates
- if(( iRc = MyTable->Commit()) != XB_NO_ERROR ){
- iErrorStop = 290;
- throw iRc;
- }
-
-
- // get a field with a field number
- xbString FirstName;
- if(( iRc = MyTable->GetField( iFld_FIRSTNAME, FirstName )) < 0 ){
- iErrorStop = 300;
- throw iRc;
- }
- std::cout << "First Name is [" << FirstName.Str() << "]" << std::endl;
-
- xbString LastName;
- if(( iRc = MyTable->GetField( "LASTNAME", LastName )) < 0 ){
- iErrorStop = 310;
- throw iRc;
- }
- std::cout << "Last Name is [" << LastName.Str() << "]" << std::endl;
-
- xbInt16 iNoOfDecimals;
- if(( iRc = MyTable->GetFieldDecimal( "AMOUNT2", iNoOfDecimals )) != XB_NO_ERROR ){
- iErrorStop = 320;
- throw iRc;
- }
- std::cout << "There are " << iNoOfDecimals << " decimals in the AMOUNT field" << std::endl;
-
- xbString FieldName;
- if(( iRc = MyTable->GetFieldName( 4, FieldName )) != XB_NO_ERROR ){
- iErrorStop = 330;
- throw iRc;
- }
- std::cout << "Field #4 name is " << FieldName.Str() << std::endl;
-
- xbString sFriend;
- if(( iRc = MyTable->GetLogicalField( "FRIEND?", sFriend )) < 0 ){
- iErrorStop = 340;
- throw iRc;
- }
- std::cout << "Switch value = [" << sFriend.Str() << "]" << std::endl;
-
- xbInt32 lZip;
- if(( iRc = MyTable->GetLongField( "ZIPCODE", lZip )) < 0 ){
- iErrorStop = 350;
- throw iRc;
- }
- std::cout << "Long value = [" << lZip << "]" << std::endl;
-
- if(( iRc = MyTable->GetFloatField( iFld_AMOUNT2, f )) < 0 ){
- iErrorStop = 360;
- throw iRc;
- }
- printf( "Field NUMFLD1 %8.2f\n", f );
-
-
- if(( iRc = MyTable->GetDoubleField( iFld_AMOUNT1, d )) < 0 ){
- iErrorStop = 370;
- throw iRc;
- }
- printf( "Field NUMFLD2 %8.2f\n", d );
-
- // Initialize the record buffer in preparation for another record
- if(( iRc = MyTable->BlankRecord()) != XB_NO_ERROR ){
- iErrorStop = 380;
- throw iRc;
- }
-
- // Append another record (it will be blank)
- if(( iRc = MyTable->AppendRecord()) != XB_NO_ERROR ){
- iErrorStop = 390;
- throw iRc;
- };
-
- // mark current record for deletion
- if(( iRc = MyTable->DeleteRecord()) != XB_NO_ERROR ){
- iErrorStop = 400;
- throw iRc;
- };
-
- // save current record
- if(( iRc = MyTable->PutRecord()) != XB_NO_ERROR ){
- iErrorStop = 410;
- throw iRc;
- }
-
- if(( iRc = MyTable->Commit()) != XB_NO_ERROR ){
- iErrorStop = 420;
- throw iRc;
- }
-
- // example code to loop through the table
- for( xbUInt32 ul = 1; ul <= MyTable->GetRecordCount(); ul++ ){
- if(( iRc = MyTable->GetRecord( ul )) != XB_NO_ERROR ){
- iErrorStop = 430;
- throw iRc;
- }
- // do something with the record here
- std::cout << "Tuple = " << MyTable->GetCurRecNo() << std::endl;
-
- }
-
- /* Close database and associated indexes */
- if(( iRc = MyTable->Close()) != XB_NO_ERROR ){
- iErrorStop = 440;
- throw iRc;
- }
-
- }
- catch( xbInt16 iRc ){
- std::cout << "xb_ex_v4_upd_dbf error. Error stop point = [" << iErrorStop << "] iRc = [" << iRc << "]" << std::endl;
- std::cout << x.GetErrorMessage( iRc ) << std::endl;
- }
-
-#endif // XB_DBF4_SUPPORT
- return 0;
-}
diff --git a/src/include/xbconfig.h.in b/src/include/xbconfig.h.in
deleted file mode 100755
index f0d475a..0000000
--- a/src/include/xbconfig.h.in
+++ /dev/null
@@ -1,124 +0,0 @@
-// the configured options and settings for xbase
-
-#define xbase_VERSION_MAJOR @xbase_VERSION_MAJOR@
-#define xbase_VERSION_MINOR @xbase_VERSION_MINOR@
-#define xbase_VERSION_PATCH @xbase_VERSION_PATCH@
-
-#define PROJECT_PARENT_DIR "@PROJECT_PARENT_DIR@"
-#define PROJECT_BINARY_DIR "@PROJECT_BINARY_DIR@"
-
-#define PROJECT_SOURCE_DIR "@PROJECT_SOURCE_DIR@"
-#define PROJECT_RUNTIME_DIR "@PROJECT_RUNTIME_DIR@"
-#define PROJECT_DATA_DIR "@PROJECT_DATA_DIR@"
-#define PROJECT_LOG_DIR "@PROJECT_LOG_DIR@"
-#define PROJECT_DFLT_LOGFILE "@CMAKE_SYSTEM_NAME@_@XB_PLATFORM@.xbLog.txt"
-#define EXTRA_LIBS "@EXTRA_LIBS@"
-#define CMAKE_RUNTIME_OUTPUT_DIRECTORY "@CMAKE_RUNTIME_OUTPUT_DIRECTORY@"
-
-
-#define CMAKE_HOME_DIRECTORY "@CMAKE_HOME_DIRECTORY@"
-#define CMAKE_PROJECT_NAME "@CMAKE_PROJECT_NAME@"
-#define BUILD_SHARED_LIBS "@BUILD_SHARED_LIBS@"
-#define CMAKE_SYSTEM_NAME "@CMAKE_SYSTEM_NAME@"
-#define CMAKE_SYSTEM_PROCESSOR "@CMAKE_SYSTEM_PROCESSOR@"
-#define CMAKE_SYSTEM_VERSION "@CMAKE_SYSTEM_VERSION@"
-#define CMAKE_BUILD_TYPE "@CMAKE_BUILD_TYPE@"
-#define CMAKE_C_FLAGS "@CMAKE_C_FLAGS@"
-#define CMAKE_C_FLAGS_DEBUG "@CMAKE_C_FLAGS_DEBUG@"
-#define CMAKE_C_FLAGS_RELEASE "@CMAKE_C_FLAGS_RELEASE@"
-
-
-#define XB_PLATFORM "@XB_PLATFORM@"
-#define Mylibrary_Exports "@Mylibrary_Exports@"
-#define MYLIB_EXPORT "@MYLIB_EXPORT@"
-#define CMAKE_SIZEOF_VOID_P "@CMAKE_SIZEOF_VOID_P@"
-
-#define CMAKE_COMPILER "@CMAKE_CXX_COMPILER_ID@"
-
-// integer definitions
-#define xbInt16 @xbInt16@
-#define xbUInt16 @xbUInt16@
-#define xbInt32 @xbInt32@
-#define xbUInt32 @xbUInt32@
-#define xbInt64 @xbInt64@
-#define xbUInt64 @xbUInt64@
-
-#cmakedefine UNIX
-
-#cmakedefine CMAKE_COMPILER_IS_GNUCC
-#cmakedefine HAVE_CTYPE_H
-#cmakedefine HAVE_DIRENT_H
-#cmakedefine HAVE_DOS_H
-#cmakedefine HAVE_FCNTL_H
-#cmakedefine HAVE_INTTYPES_H
-#cmakedefine HAVE_PWD_H
-#cmakedefine HAVE_STDARG_H
-#cmakedefine HAVE_STDARGS_H
-#cmakedefine HAVE_STRING_H
-#cmakedefine HAVE_STRINGS_H
-#cmakedefine HAVE_STAT_H
-#cmakedefine HAVE_UNISTD_H
-#cmakedefine HAVE_VARARGS_H
-#cmakedefine HAVE_WINDOWS_H
-
-#cmakedefine HAVE__CLOSE_F
-#cmakedefine HAVE_CREATEPROCESSW_F
-#cmakedefine HAVE_CREATEPROCESSW_F2
-#cmakedefine HAVE_FCNTL_F
-#cmakedefine HAVE__FDOPEN_F
-#cmakedefine HAVE__FILENO_F
-#cmakedefine HAVE_FOPEN_S_F
-#cmakedefine HAVE__FSOPEN_F
-
-#cmakedefine HAVE_FORK_F
-#cmakedefine HAVE__FSEEKI64_F
-#cmakedefine HAVE_FSEEKO_F
-#cmakedefine HAVE_FTRUNCATE_F
-#cmakedefine HAVE__LOCALTIME64_S_F
-#cmakedefine HAVE_LOCKFILE_F
-#cmakedefine HAVE_LOCKING_F
-#cmakedefine HAVE__LOCKING_F
-#cmakedefine HAVE__OPEN_F
-#cmakedefine HAVE_SETENDOFFILE_F
-#cmakedefine HAVE_VSNPRINTF_F
-#cmakedefine HAVE__VSNPRINTF_S_F
-#cmakedefine HAVE_VSPRINTF_S_F
-
-#cmakedefine XB_PLATFORM_32
-#cmakedefine XB_PLATFORM_64
-#cmakedefine XB_DEBUG_SUPPORT
-#cmakedefine XB_LINKLIST_SUPPORT
-#cmakedefine XB_MEMO_SUPPORT
-#cmakedefine XB_LOGGING_SUPPORT
-#cmakedefine XB_DBF3_SUPPORT
-#cmakedefine XB_DBF4_SUPPORT
-#cmakedefine XB_LOCKING_SUPPORT
-#cmakedefine XB_FUNCTION_SUPPORT
-#cmakedefine XB_EXPRESSION_SUPPORT
-#cmakedefine XB_INDEX_SUPPORT
-#cmakedefine XB_NDX_SUPPORT
-#cmakedefine XB_MDX_SUPPORT
-#cmakedefine XB_SQL_SUPPORT
-#cmakedefine XB_INF_SUPPORT
-#cmakedefine XB_FILTER_SUPPORT
-#cmakedefine XB_BLOCKREAD_SUPPORT
-
-#cmakedefine XB_UTILS_SUPPORT
-#cmakedefine XB_EXAMPLES_SUPPORT
-
-#cmakedefine HAVE_LONG_LONG
-
-#if defined (WIN32)
- #if defined ( Mylibrary_Exports )
- #define XBDLLEXPORT __declspec(dllexport)
- #else
- #define XBDLLEXPORT __declspec(dllimport)
- #endif
-#else
- #define XBDLLEXPORT
-#endif
-
-#if defined (UNIX) && defined (XB_PLATFORM_32)
- #define _FILE_OFFSET_BITS 64
-#endif
-
diff --git a/src/include/xbdate.h b/src/include/xbdate.h
deleted file mode 100755
index 8dff463..0000000
--- a/src/include/xbdate.h
+++ /dev/null
@@ -1,122 +0,0 @@
-/* xbdate.h
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-
-#ifndef __XB_XBDATE_H__
-#define __XB_XBDATE_H__
-
-#ifdef CMAKE_COMPILER_IS_GNUCC
-#pragma interface
-#endif
-
-
-namespace xb{
-
-#define XB_FMT_WEEK 1
-#define XB_FMT_MONTH 2
-#define XB_FMT_YEAR 3
-
-// next value is added to the date calculation to match dbase calculation
-// first valid dbase date is 01/01/0001
-#define JUL_OFFSET 1721425L
-
-
-//! @brief xbDate class.
-/*!
-This xbDate class handles two type of date values:<br>
-
-1) Gregorian dates with a format of CCYYMMDD. This is how dates are stored in dbf files.<br>
-2) Julian dates calculated as the number of days since 1901-01-01 + 1721425.<br>
-
-Leap Years: The routines in the class support both leap years (one every four
-years) and leap centuries (one every four hundred years.)
-
-A leap year is a year having 366 days, which can be evenly
-divisible by 4 and not by 100.<br>
-Leap centuries are years which are evenly divisible by 400.<br>
-
-From a programming perspective, Julian dates are useful for date
-arithmetic, determining the difference between two dates or calculating
-a future or past date.<br>
-
-To determine the difference between two dates, convert both dates to a
-Julian date and subtract one from the other.<br>
-
-To calculate a future or past date, convert the base date to a Julian date,
-add (or subtract) the number of days necessary to (from) it and convert the
-julian date back to a Gregorian date.
-*/
-
-class XBDLLEXPORT xbDate : public xbSsv {
- public:
-
- xbDate();
- xbDate( const char * Date8 );
- xbDate( const xbString &Date8 );
- xbDate( xbInt32 lJulDate );
- ~xbDate();
-
- void operator=( const xbDate &d );
- void operator+=( xbInt32 i );
- void operator-=( xbInt32 i );
- void operator++( xbInt32 i );
- void operator--( xbInt32 i );
-
- xbInt32 operator-( const xbDate & ) const;
- const char * operator-( xbInt32 i );
- const char * operator+( xbInt32 i );
-
- xbBool operator==( const xbDate & ) const;
- xbBool operator!=( const xbDate & ) const;
- xbBool operator< ( const xbDate & ) const;
- xbBool operator> ( const xbDate & ) const;
- xbBool operator<=( const xbDate & ) const;
- xbBool operator>=( const xbDate & ) const;
-
- xbInt16 CalcRollingCenturyForYear( xbInt16 year ) const;
- xbInt16 CenturyOf() const;
- xbInt16 CharDayOf( xbString &sOutCharDay );
- xbInt16 CharMonthOf( xbString &sOutCharMonth );
- xbBool DateIsValid ( const xbString &sDate8 ) const;
- xbInt16 DayOf( xbInt16 iFormat ) const;
- xbInt16 CTOD( const xbString &sCtodInDate );
- xbInt16 FormatDate( const xbString &sFmtIn, xbString &sFmtOut );
- const char *Str() const;
- xbBool IsLeapYear( xbInt16 iYear ) const;
- xbBool IsLeapYear() const;
- xbInt32 JulianDays() const;
- xbInt16 JulToDate8( xbInt32 lJulDate );
- xbInt16 LastDayOfMonth();
- xbInt16 MonthOf() const;
- xbInt16 Set( const xbString &Date8 );
- xbInt16 Sysdate();
- xbInt16 YearOf() const;
-
-#ifdef XB_DEBUG_SUPPORT
- void Dump( const char * title );
- void DumpDateTables();
-#endif
-
- private:
- void SetDateTables();
- xbString sDate8; /* CCYYMMDD date format ie; 20140718 */
-
- static int iAggregatedDaysInMonths[2][13];
- static int iDaysInMonths[2][13];
-};
-
-} /* namespace */
-#endif /*__XB_XBDATE_H__ */
-
diff --git a/src/include/xbdbf.h b/src/include/xbdbf.h
deleted file mode 100755
index 16799f2..0000000
--- a/src/include/xbdbf.h
+++ /dev/null
@@ -1,558 +0,0 @@
-/* xbdbf.h
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-
-#ifndef __XB_XBDBF_H__
-#define __XB_XBDBF_H__
-
-//#ifdef CMAKE_COMPILER_IS_GNUCC
-//#pragma interface
-//#endif
-
-namespace xb{
-
-/*****************************/
-/* Field Types */
-
-#define XB_CHAR_FLD 'C'
-#define XB_LOGICAL_FLD 'L'
-#define XB_NUMERIC_FLD 'N'
-#define XB_DATE_FLD 'D'
-#define XB_MEMO_FLD 'M'
-#define XB_FLOAT_FLD 'F'
-
-/*****************************/
-/* File Status Codes */
-
-#define XB_CLOSED 0
-#define XB_OPEN 1
-#define XB_UPDATED 2
-
-
-/*****************************/
-/* File Access Modes */
-// #define XB_SINGLE_USER 0 // file buffering on
-// #define XB_MULTI_USER 1 // file buffering off
-
-/*****************************/
-/* File Lock Functions */
-#define XB_LOCK 0
-#define XB_UNLOCK 1
-
-#define LK_DBASE 1
-#define LK_CLIPPER 2 // future
-#define LK_FOX 3 // future
-#define LK_XBASE64 9 // future
-
-/*****************************/
-/* Record retrieve options */
-#define XB_ALL_RECS 0
-#define XB_ACTIVE_RECS 1
-#define XB_DELETED_RECS 2
-
-
-/*****************************/
-/* Other defines */
-
-#define XB_OVERLAY 1
-#define XB_DONTOVERLAY 0
-#define XB_CHAREOF '\x1A' /* end of DBF */
-#define XB_CHARHDR '\x0D' /* header terminator */
-
-
-//! @brief Schema used for defining tables with CreateTable methods.
-/*!
- See program xb_ex_v3_create_dbf.cpp or xb_ex_v4_create_dbf.cpp
- as examples on how to use.
-
-\code
-xbSchema MyRecord[] = {
-// FieldName, Type, Len, Dec
- { "FIRSTNAME", XB_CHAR_FLD, 15, 0 },
- { "LASTNAME", XB_CHAR_FLD, 20, 0 },
- { "BIRTHDATE", XB_DATE_FLD, 8, 0 },
- { "AMOUNT", XB_NUMERIC_FLD, 9, 2 },
- { "RETIRED?", XB_LOGICAL_FLD, 1, 0 },
- { "ZIPCODE", XB_NUMERIC_FLD, 5, 0 },
- { "NUMFLD1", XB_FLOAT_FLD, 12, 2 },
- { "NUMFLD2", XB_FLOAT_FLD, 14, 2 },
- { "MEMO1", XB_MEMO_FLD, 10, 0 },
- { "",0,0,0 }};
-\endcode
-*/
-struct XBDLLEXPORT xbSchema {
- char cFieldName[11];
- char cType;
- xbInt16 iFieldLen; /* fields are stored as one byte on record*/
- xbInt16 iNoOfDecs;
-};
-
-///@cond DOXYOFF
-struct XBDLLEXPORT xbSchemaRec {
- char cFieldName[11]; /* ASCIIZ field name */
- char cType; /* field type */
- char *pAddress; /* pointer to field in record buffer 1 */
- unsigned char cFieldLen; /* fields are stored as one byte on record */
- unsigned char cNoOfDecs;
- char *pAddress2; /* pointer to field in record buffer 2 */
- xbInt16 iLongFieldLen; /* to handle long field lengths */
- unsigned char cIxFlag; /* DBase IV Index field flag */
-};
-///@endcond DOXYOFF
-
-
-
-///@cond DOXYOFF
-#ifdef XB_INDEX_SUPPORT
-class XBDLLEXPORT xbIx;
-// structure for file list, each open DBF file can have one or more index files
-struct XBDLLEXPORT xbIxList {
- xbIxList *next;
- xbIx *ix;
- xbString *sFmt;
-};
-#endif // XB_INDEX_SUPPORT
-///@endcond DOXYOFF
-
-
-//! @brief Base class for handling dbf files/tables.
-/*!
-The xbDbf class is used as a base class for accessing dbf files.
-In line with relational theory, a each dbf file can be considered as a table.
-The documentation uses the terms dbf and table interchangeably.<br>
-
-This module handles methods for accessing and updating dbf files.
-
-<br>
-The class is designed to support additional file layouts with a minimal amount of effort.
-If you are wanting to update the library to support a new dbf file type not currently supported
-by the library, create a derived class using xbDbf as a base class and modify methods needed
-to support the new dbf file version.<br>
-See the following for examples on how to start on this:<br>
-xbDbf3 is a derived class from xbDbf and supports the original Dbase III+ file version.<br>
-xbDbf4 is a derived class from xbDbf and supports the original Dbase IV file version.<br>
-
-*/
-
-
-class XBDLLEXPORT xbDbf : public xbFile {
-
- public:
- xbDbf( xbXBase *x );
- virtual ~xbDbf();
-
- virtual xbInt16 Abort();
- virtual xbInt16 AppendRecord();
- virtual xbInt16 BlankRecord();
- virtual xbInt16 Commit();
- virtual xbInt16 Close();
- virtual xbInt16 CopyDbfStructure( xbDbf *dNewTable, const xbString &sTableName, const xbString &sTableAlias, xbInt16 iOverlay, xbInt16 iShareMode );
- virtual xbInt16 CreateTable ( const xbString &sTableName, const xbString &sAlias, xbSchema *pSchema, xbInt16 iOverlay, xbInt16 iShareMode ) = 0;
- virtual xbInt16 DeleteTable ();
- virtual xbInt16 DeleteAll ( xbInt16 iOption );
- virtual xbInt16 DeleteAllRecords ();
- virtual xbInt16 DeleteRecord ();
- virtual xbInt16 DumpHeader ( xbInt16 iOption ) const;
- virtual xbInt16 DumpRecord ( xbUInt32 ulRecNo, xbInt16 iOutputDest = 0, xbInt16 iOutputFmt = 0 );
- virtual xbInt16 GetAutoCommit () const;
- virtual xbInt16 GetAutoCommit ( xbInt16 iOption ) const;
- virtual xbBool GetBof ();
- virtual xbUInt32 GetCurRecNo () const;
- virtual xbInt16 GetDbfStatus () const;
- virtual xbBool GetEof ();
- virtual xbInt32 GetFieldCnt () const;
- virtual xbInt16 GetFirstRecord ();
- virtual xbInt16 GetFirstRecord ( xbInt16 iOption );
- virtual xbUInt16 GetHeaderLen () const;
- virtual xbInt16 GetLastRecord ();
- virtual xbInt16 GetLastRecord ( xbInt16 iOption );
-
- virtual xbInt16 GetNextRecord ();
- virtual xbInt16 GetNextRecord ( xbInt16 iOption );
- virtual xbInt16 GetNextRecord ( xbInt16 iOption, xbUInt32 ulStartRec );
- virtual xbInt16 GetPrevRecord ();
- virtual xbInt16 GetPrevRecord ( xbInt16 iOption );
- virtual xbInt16 GetRecord ( xbUInt32 ulRecNo );
-
- virtual xbUInt32 GetRecordCount ();
- virtual xbInt16 GetRecordCnt ( xbUInt32 & ulRecCnt );
-
- virtual char * GetRecordBuf ( xbInt16 iOpt = 0 ) const;
- virtual xbUInt16 GetRecordLen () const;
- virtual const xbString &GetTblAlias() const;
- virtual xbInt16 GetVersion () const = 0;
- virtual xbXBase *GetXbasePtr () const; // return xbase pointer
-
-
- virtual xbBool MemoFieldsExist () const;
-
- virtual xbInt16 Open ( const xbString &sTableName );
- virtual xbInt16 Open ( const xbString &sTableName, const xbString &sAlias );
- virtual xbInt16 Open ( const xbString &sTableName, const xbString &sAlias, xbInt16 iOpenMode, xbInt16 iShareMode ) = 0;
- virtual xbInt16 Pack ();
- virtual xbInt16 Pack ( xbUInt32 &ulDeletedRecCnt );
-
-
- virtual xbInt16 PutRecord (); // Put record to current location
- virtual xbInt16 PutRecord ( xbUInt32 ulRecNo );
- virtual xbInt16 ReadHeader ( xbInt16 iFilePositionOption, xbInt16 iReadOption );
- virtual xbInt16 RecordDeleted ( xbInt16 iOpt = 0 ) const;
- virtual xbInt16 Rename ( const xbString sNewName ) = 0;
-
- virtual xbInt16 SetAutoCommit ( xbInt16 iAutoCommit );
-
- virtual xbInt16 UndeleteAllRecords();
- virtual xbInt16 UndeleteRecord ();
- virtual xbInt16 Zap ();
-
-
- /* field methods */
- //virtual xbInt16 GetRawField( xbInt16 iFieldNo, char *Buf, xbUInt32 BufSize, xbInt16 iRecBufSw ) const;
- virtual xbInt16 GetField(xbInt16 iFieldNo, xbString &sFieldValue, xbInt16 iRecBufSw ) const;
- virtual xbInt16 GetField(xbInt16 iFieldNo, xbString &sFieldValue) const;
- virtual xbInt16 GetField(const xbString &sFieldName, xbString &sFieldValue) const;
- virtual xbInt16 GetFieldDecimal( xbInt16 iFieldNo, xbInt16 &iFieldDecimal ) const;
- virtual xbInt16 GetFieldDecimal( const xbString &sFieldName, xbInt16 &iFieldDecimal ) const;
- virtual xbInt16 GetFieldLen( xbInt16 iFieldNo, xbInt16 &iFieldLen ) const;
- virtual xbInt16 GetFieldLen( const xbString &sFieldName, xbInt16 &iFieldLen ) const;
- virtual xbInt16 GetFieldName( xbInt16 iFieldNo, xbString &sFieldName ) const;
-
- virtual xbInt16 GetFieldNo( const xbString &sFieldName, xbInt16 &iFieldNo ) const;
- virtual xbInt16 GetFieldNo( const xbString &sFieldName ) const;
-
- virtual xbInt16 GetFieldType( xbInt16 iFieldNo, char &cFieldType ) const;
- virtual xbInt16 GetFieldType( const xbString &sFieldName, char &cFieldType ) const;
- virtual xbInt16 PutField( const xbString &sFieldName, const xbString &sFieldData );
- virtual xbInt16 PutField( xbInt16 iFieldNo, const xbString &sFieldData );
-
- virtual xbInt16 PutLogicalField( xbInt16 iFieldNo, const xbString &sFieldData );
- virtual xbInt16 PutLogicalField( const xbString &sFieldName, const xbString &sFieldData );
- virtual xbInt16 GetLogicalField( xbInt16 iFieldNo, xbString &sFieldData ) const;
- virtual xbInt16 GetLogicalField( const xbString &sFieldName, xbString &sFieldData) const;
-
- virtual xbInt16 PutLogicalField( xbInt16 iFieldNo, xbBool bFieldData );
- virtual xbInt16 PutLogicalField( const xbString &sFieldName, xbBool bFieldData );
- virtual xbInt16 GetLogicalField( xbInt16 iFieldNo, xbBool &bFieldData ) const;
- virtual xbInt16 GetLogicalField( xbInt16 iFieldNo, xbBool &bFieldData, xbInt16 iRecBufSw ) const;
- virtual xbInt16 GetLogicalField( const xbString &sFieldName, xbBool &bFieldData) const;
-
- virtual xbInt16 GetLongField( xbInt16 iFieldNo, xbInt32 &lFieldValue ) const;
- virtual xbInt16 GetLongField( const xbString &sFieldName, xbInt32 &lFieldValue ) const;
- virtual xbInt16 PutLongField( xbInt16 iFieldNo, xbInt32 lFieldValue );
- virtual xbInt16 PutLongField( const xbString &sFieldNo, xbInt32 lFieldValue );
-
- virtual xbInt16 GetULongField( xbInt16 iFieldNo, xbUInt32 &lFieldValue ) const;
- virtual xbInt16 GetULongField( const xbString &sFieldName, xbUInt32 &lFieldValue ) const;
- virtual xbInt16 PutULongField( xbInt16 iFieldNo, xbUInt32 lFieldValue );
- virtual xbInt16 PutULongField( const xbString &sFieldNo, xbUInt32 lFieldValue );
-
- virtual xbInt16 GetDoubleField( xbInt16 FieldNo, xbDouble &dFieldValue ) const;
- virtual xbInt16 GetDoubleField( xbInt16 FieldNo, xbDouble &dFieldValue, xbInt16 iRecBufSw ) const;
- virtual xbInt16 GetDoubleField( const xbString &sFieldName, xbDouble &dFieldValue ) const;
- virtual xbInt16 PutDoubleField( xbInt16 FieldNo, xbDouble dFieldValue );
- virtual xbInt16 PutDoubleField( const xbString &FieldName, xbDouble dFieldValue );
-
- virtual xbInt16 GetFloatField( xbInt16 iFieldNo, xbFloat &fFieldValue ) const;
- virtual xbInt16 GetFloatField( const xbString &sFieldName, xbFloat &fFieldValue ) const;
- virtual xbInt16 PutFloatField( xbInt16 iFieldNo, xbFloat fFieldValue );
- virtual xbInt16 PutFloatField( const xbString &sFieldName, xbFloat fFieldValue );
-
- virtual xbInt16 GetDateField( xbInt16 iFieldNo, xbDate &dt ) const;
- virtual xbInt16 GetDateField( const xbString &sFieldName, xbDate &dt ) const;
- virtual xbInt16 PutDateField( xbInt16 iFieldNo, const xbDate &dt );
- virtual xbInt16 PutDateField( const xbString &sFieldName, const xbDate &dt );
-
-
-
- #ifdef XB_MEMO_SUPPORT
- virtual xbInt16 GetMemoFieldCnt () const;
- virtual xbMemo *GetMemoPtr ();
- virtual xbUInt32 GetCreateMemoBlockSize() const;
- virtual xbInt16 GetMemoField ( xbInt16 iFldNo, xbString &sMemoData );
- virtual xbInt16 GetMemoField ( const xbString & sFldName, xbString &sMemoData );
- virtual xbInt16 GetMemoFieldLen ( xbInt16 iFldNo, xbUInt32 &ullMemoFieldLen );
- virtual xbInt16 GetMemoFieldLen ( const xbString & sFldName, xbUInt32 &ulMemoFieldLen );
- virtual xbBool MemoFieldExists ( xbInt16 iFieldNo ) const;
- virtual xbBool MemoFieldExists ( const xbString &sFieldName ) const;
- virtual xbInt16 SetCreateMemoBlockSize( xbUInt32 ulBlockSize ) = 0;
- virtual xbInt16 UpdateMemoField ( xbInt16 iFldNo, const xbString &sMemoData );
- virtual xbInt16 UpdateMemoField ( const xbString & sFldName, const xbString &sMemoData );
- #endif // XB_MEMO_SUPPORT
-
-
- #ifdef XB_LOCKING_SUPPORT
- virtual xbInt16 LockTable ( xbInt16 iLockFunction );
- virtual xbInt16 LockRecord ( xbInt16 iLockFunction, xbUInt32 ulRecNo );
- virtual xbInt16 LockAppend ( xbInt16 iLockFunction );
- virtual xbInt16 LockHeader ( xbInt16 iLockFunction );
-
- #ifdef XB_MEMO_SUPPORT
- virtual xbInt16 LockMemo ( xbInt16 iLockFunction );
- virtual xbBool GetMemoLocked () const;
- #endif // XB_MEMO_LOCK
-
- #ifdef XB_INDEX_SUPPORT
- virtual xbInt16 LockIndices ( xbInt16 iLockFunction );
- #endif // XB_INDEX_SUPPORT
-
- xbInt16 GetAutoLock () const;
- void SetAutoLock ( xbInt16 iAutoLock );
- xbInt16 GetLockFlavor () const;
- void SetLockFlavor ( xbInt16 iLockFlavor );
- xbBool GetTableLocked () const;
- xbBool GetHeaderLocked () const;
- xbUInt32 GetAppendLocked () const;
- xbLinkListNode<xbUInt32> * GetFirstRecLock () const;
-
- #ifdef XB_DEBUG_SUPPORT
- void DumpTableLockStatus() const;
- #endif // XB_DEBUG_SUPPORT
- #endif // XB_LOCKING_SUPPORT
-
-
- #ifdef XB_INDEX_SUPPORT
- virtual xbInt16 CheckTagIntegrity( xbInt16 iTagOpt, xbInt16 iOutputOpt );
- virtual xbInt16 CloseIndexFile( xbIx *pIx );
- virtual xbInt16 CreateTag( const xbString &sIxType, const xbString &sName, const xbString &sKey, const xbString &sFilter,
- xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverLay, xbIx **xbIxOut, void **vpTagOut );
- virtual xbInt16 DeleteTag( const xbString &sIxType, const xbString &sName );
- virtual xbInt16 DeleteAllIndexFiles();
- virtual xbInt16 Find( xbString &sKey );
- virtual xbInt16 Find( xbDate &dtKey );
- virtual xbInt16 Find( xbDouble &dKey );
- virtual xbIx *GetCurIx() const;
- virtual void *GetCurTag() const;
-
- virtual xbInt16 GetFirstKey();
- virtual xbInt16 GetNextKey();
- virtual xbInt16 GetPrevKey();
- virtual xbInt16 GetLastKey();
-
- virtual const xbString &GetCurIxType() const;
- virtual const xbString &GetCurTagName() const;
- virtual xbIxList *GetIxList() const;
- virtual xbInt32 GetPhysicalIxCnt () const;
- xbLinkListNode<xbTag *> *GetTagList () const;
-
- virtual xbInt16 OpenIndex( const xbString &sIxType, const xbString &sIndexName );
- virtual xbInt16 Reindex( xbInt16 iTagOpt );
- virtual xbInt16 SetCurTag( const xbString &sTagName );
- virtual void SetCurTag( const xbString &sIxType, xbIx *pIx, void *vpTag );
-
- #endif // XB_INDEX_SUPPORT
-
- #ifdef XB_INF_SUPPORT
- virtual xbInt16 AssociateIndex( const xbString &sType, const xbString &sName, xbInt16 iOption );
- xbLinkListNode<xbString> *GetInfList() const;
- #endif // XB_INF_SUPPORT
-
- //#ifdef XB_MDX_SUPPORT
- //virtual xbInt16 GetCreateMdxBlockSize() const;
- //virtual xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );
- //#endif
-
- #ifdef XB_BLOCKREAD_SUPPORT
- xbInt16 DisableBlockReadProcessing();
- xbInt16 EnableBlockReadProcessing();
- xbBool GetBlockReadStatus() const;
- #endif // XB_BLOCKREAD_SUPPORT
-
- protected:
- #ifdef XB_INDEX_SUPPORT
- friend class xbIx;
- friend class xbIxMdx;
-
- xbInt16 AddIndex( xbIx *ix, const xbString &sFmt );
- void ClearTagList();
- xbInt16 RemoveIndex( xbIx * ix );
- void UpdateSchemaIxFlag( xbInt16 iFldNo, unsigned char cVal );
- virtual xbInt16 UpdateTagList ();
- #endif // XB_INDEX_SUPPORT
-
- #ifdef XB_INF_SUPPORT
- virtual xbInt16 GetInfFileName( xbString &sNdxIdxFileName );
- #endif // XB_INF_SUPPORT
-
- #ifdef XB_BLOCKREAD_SUPPORT
- friend class xbBlockRead;
- #endif // XB_BLOCKREAD_SUPPORT
-
-
- #ifdef XB_LOCKING_SUPPORT
- void SetHeaderLocked ( xbBool bTableLocked );
- void SetTableLocked ( xbBool bTableLocked );
- #endif // XB_LOCKING_SUPORT
-
- #ifdef XB_MEMO_SUPPORT
- xbInt16 iMemoFieldCnt; // Memo field cnt in the table
- xbMemo *Memo; // Pointer to memo class
- xbUInt32 ulCreateMemoBlockSize; // blocksize to use when creating dbt file
- #endif
-
- #ifdef XB_INF_SUPPORT
- virtual xbInt16 DeleteInfData();
- virtual xbInt16 LoadInfData();
- virtual xbInt16 SaveInfData();
- #endif // XB_INF_SUPPORT
-
-/*
- #ifdef XB_MDX_SUPPORT
- xbInt16 iCreateMdxBlockSize;
- #endif // XB_MDX_SUPPORT
-*/
-
- virtual xbInt16 GetRawField( xbInt16 iFieldNo, char *Buf, xbUInt32 BufSize, xbInt16 iRecBufSw ) const;
- virtual void InitVars();
- virtual xbInt16 SetVersion() = 0;
- virtual xbInt16 ValidateSchema( xbSchema * s ) = 0;
- xbInt16 WriteHeader( xbInt16 iPositionOption, xbInt16 iWriteOption );
-
-
- xbUInt32 ulCurRec; // Current record or zero
- xbInt16 iAutoCommit; // Auto commit updates if not explicitly performed before moving off record?
- // -1 --> Use DBMS default
- // 0 --> No auto update on this table, regardless of DBMS setting
- // 1 --> Auto update on this table, regardless of DBMS setting
-
- xbInt16 iFileVersion; // xBase file version - which class is in play
-
-
- xbString sAlias; // table alias
- xbInt16 iNoOfFields;
- xbInt16 iDbfStatus; // 0 = closed
- // 1 = open
- // 2 = updates pending
-
- xbSchemaRec *SchemaPtr; // Pointer to field data
- char *RecBuf; // Pointer to record buffer
- char *RecBuf2; // Pointer to original rec buf allocation
-
-
-/* Next several variables are database header fields, up through dbase V */
- unsigned char cVersion;
- char cUpdateYY;
- char cUpdateMM;
- char cUpdateDD;
- xbUInt32 ulNoOfRecs;
- xbUInt16 uiHeaderLen;
- xbUInt16 uiRecordLen;
- char cTransactionFlag;
- char cEncryptionFlag;
- char cIndexFlag;
- char cLangDriver; // dbase 7 sets to 1B
-
-
-
- private:
- void ResetNoOfRecords();
-
-
- #ifdef XB_LOCKING_SUPPORT
- xbInt16 iAutoLock; // 0 - autolock off, 1 - autolock on
- xbInt16 iLockFlavor;
- xbBool bTableLocked; // is the table locked
- xbBool bHeaderLocked; // is the header locked
- xbUInt32 ulAppendLocked; // record number of the new record for the append lock operation
- xbLinkListOrd<xbUInt32> lloRecLocks; // ordered link list of locked records
- #endif
-
- #ifdef XB_INDEX_SUPPORT
- xbIxList *ixList; // pointer to a list of indices associated with the table
- xbIx *pCurIx; // Pointer to current index class
- void *vpCurIxTag; // Pointer to current tag
- xbString sCurIxType; // Current index type
- xbLinkList<xbTag *> llTags; // linked list of open tags
- #endif // XB_INDEX_SUPPORT
-
- #ifdef XB_INF_SUPPORT
- xbLinkList<xbString> llInfData; // linked list of strings containing ndx file entries
- #endif // XB_INF_SUPPORT
-
- #ifdef XB_BLOCKREAD_SUPPORT
- xbBlockRead *pRb;
- xbBool bBlockReadEnabled; // if true, then block read mode is on
- #endif
-
-
-
-};
-
-
-#ifdef XB_DBF3_SUPPORT
-//! @brief Derived class for handling dbf version III files/tables.
-/*!
-The xbDbf class is used as a base class for accessing dbf files.
-The xbDbf3 class is derived from the xbDbf class and is designed to handle the
-orginal version 3 type files.
-*/
-
-class XBDLLEXPORT xbDbf3 : public xbDbf {
- public:
- xbDbf3(xbXBase *x);
- ~xbDbf3();
- virtual xbInt16 CreateTable ( const xbString &sTableName, const xbString &sAlias, xbSchema *, xbInt16 iOverlay, xbInt16 iShareMode );
- virtual xbInt16 GetVersion () const;
- virtual xbInt16 Open ( const xbString &sTableName, const xbString &sAlias, xbInt16 iOpenMode, xbInt16 iShareMode );
- virtual xbInt16 Rename ( const xbString sNewName );
-
- #ifdef XB_MEMO_SUPPORT
- virtual xbInt16 SetCreateMemoBlockSize( xbUInt32 iBlockSize );
- #endif
-
- protected:
- xbInt16 SetVersion ();
- virtual xbInt16 ValidateSchema( xbSchema *s );
-
- private:
-
-};
-#endif /* XB_DBF3_SUPPORT */
-
-
-#ifdef XB_DBF4_SUPPORT
-//! @brief Derived class for handling dbf version IV files/tables.
-/*!
-The xbDbf class is used as a base class for accessing dbf files.
-The xbDbf4 class is derived from the xbDbf class and is designed to handle the
-orginal version 4 type files.
-*/
-class XBDLLEXPORT xbDbf4 : public xbDbf {
- public:
- xbDbf4( xbXBase *x );
-
- ~xbDbf4();
-
- virtual xbInt16 CreateTable ( const xbString &sTableName, const xbString &sAlias, xbSchema *, xbInt16 iOverlay, xbInt16 iShareMode );
- virtual xbInt16 GetVersion () const;
- virtual xbInt16 Open ( const xbString &sTableName, const xbString &sAlias, xbInt16 iOpenMode, xbInt16 iShareMode );
- virtual xbInt16 Rename ( const xbString sNewName );
-
- #ifdef XB_MEMO_SUPPORT
- virtual xbInt16 SetCreateMemoBlockSize( xbUInt32 iBlockSize );
- #endif
-
- protected:
- // void InitVars ();
- xbInt16 SetVersion();
- virtual xbInt16 ValidateSchema ( xbSchema *s );
-
- private:
-
-};
-
-#endif /* XB_DBF4_SUPPORT */
-
-} /* namespace xb */
-#endif /* __XB_DBF_H__ */
diff --git a/src/include/xbexp.h b/src/include/xbexp.h
deleted file mode 100755
index 96413ac..0000000
--- a/src/include/xbexp.h
+++ /dev/null
@@ -1,215 +0,0 @@
-/* xbexp.h
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-
-#ifndef __XB_EXP_H__
-#define __XB_EXP_H__
-
-
-// #ifdef CMAKE_COMPILER_IS_GNUCC
-// #pragma interface
-// #endif
-
-
-
-#ifdef XB_FUNCTION_SUPPORT
-#define XB_EXP_CHAR 'C'
-#define XB_EXP_DATE 'D'
-#define XB_EXP_LOGICAL 'L'
-#define XB_EXP_NUMERIC 'N'
-#define XB_EXP_UNKNOWN 'U'
-#endif
-
-#ifdef XB_EXPRESSION_SUPPORT
-
-#define XB_EXP_CONSTANT 'C'
-#define XB_EXP_FUNCTION 'F'
-#define XB_EXP_FIELD 'D'
-#define XB_EXP_OPERATOR 'O'
-#define XB_EXP_NOTROOT 'N' // not root node, needs further parsing
-#define XB_EXP_PRE_OPERATOR 'B' // (B)efore) pre increment, pre decrement
-#define XB_EXP_POST_OPERATOR 'A' // (A)fter) post increment, pre decrement
-
-#define XB_END_OF_EXPRESSION -100
-
-// #define XB_UNBALANCED_PARENS -101
-// #define XB_UNBALANCED_QUOTES -102
-
-
-namespace xb{
-
-///@cond DOXYOFF
-struct XBDLLEXPORT xbExpToken {
- xbString sExpression; // in - expression to pull next token from
- // out - remainder of the expression after token removed
- xbString sToken; // next token pulled from the expression
- char cNodeType; // one of XB_EXP_CONSTANT, XB_EXP_FUNCTION, XB_EXP_FIELD, XB_EXP_OPERATOR, XB_EXP_NOTROOT
- char cReturnType; // one of XB_EXP_CHAR, XB_EXP_DATE, XB_EXP_LOGICAL, XB_EXP_NUMERIC, XB_EXP_UNKNOWN
- xbInt16 iSts; // return status after retrieving or attempting next token from expression
- // 0 = no error
- // XB_END_OF_EXPRESSION
- // XB_UNBALANCED_PARENS
- // XB_UNBALANCED_QUOTES
- char cPrevNodeType; // previous node type
- char cPrevReturnType; // previous return type
-
- // constructor
- xbExpToken() { cNodeType = 0; cReturnType = 0; iSts = 0; cPrevNodeType = 0; cPrevReturnType = 0; }
-};
-///@endcond DOXYOFF
-
-
-/************************************************************************/
-
-//! @brief Class for handling expressions.
-/*!
-The xbExp class is used for parsing and evaluating expression.
-
-The Xbase64 library includes an expression parsing module which assists
-application programmers by providing a high level data manipulation tool and
-also allows for building complex index keys.
-
-The functions included were derived from dBASE III Plus, Dbase IV and Clipper.<br><br>
-
-<h3>Internal fuctioning</h3>
-The expression module works in two phases. Firstly, method
-<em>ParseExpression</em> is called and builds an expression tree from
-all the components of the expression. The tree is made up of individual
-nodes. The expression is checked for valid field names, literals,
-operands and functions. Any field references are resolved. If fields
-are used in an expression and the database name for the field is not
-included in the name with the -> operand, the routines assume the
-associated database has been successfully opened.
-<br>
-Secondly, method <em>ProcessExpression</em> is called to process the
-expression tree created by ParseExpression(). The routine parses each
-node in the expression tree, executing functions, processing operands
-and manipulating data to produce the desired result.<br>
-
-If an expression will be processed repeatedly, it is best to pre-parse the
-tree using <em>ParseExpression</em>, then for each new call to the expression,
-execute method <em>ProcessExpression</em> which processes the tree.<br><br>
-
-<h3>Expression Return Types</h3>
-Expressions will return a type of CHAR, NUMERIC, DATE or LOGICAL.<br>
-
-An expression return type can be determined with method <em>
-GetExpressionResultType</em> after parsing it.<br>
-
-Expressions returning a return type of CHAR are limited to a 200 byte internal
-buffer. There is also a 100 byte limit for NDX index key support. If
-the 200 byte limit is not large enough for your application, adjust field
-<em>enum { WorkBufMaxLen = 200 };</em> in file <em>exp.h</em>.<br><br>
-
-<h3>Expression Functions</h3>
-Each expression function also has a corresponding C++ function. It is
-slightly more efficient to call the C++ functions directly, rather than
-execute the expression parsing routines.<br><br>
-
-<h3>Expression Components</h3>
-Expressions are made up of one or more tokens. A token is one of literal,
-database field, operand or function. Literals are either numeric or character.
-Character literals are enclosed in 'single' or "double" quotes. numeric
-literals are a series of one or more contiguous numerals, ".", "+" or "-'".
-<br><br>
-A field is simply a field name in the default database, or is in the form
-of database->fieldname.
-
-*/
-
-class XBDLLEXPORT xbExp{
-
- public:
- xbExp( xbXBase * );
- xbExp( xbXBase *, xbDbf * );
- virtual ~xbExp();
- void ClearTreeHandle();
-
-
- #ifdef XB_DEBUG_SUPPORT
- void DumpTree( xbInt16 iOption );
- void DumpToken( xbExpToken &t, xbInt16 iOption = 0 );
- #endif
-
- xbInt16 GetResultLen() const;
- char GetReturnType() const;
- xbInt16 GetBoolResult( xbBool &bResult );
- xbInt16 GetDateResult( xbDate &dtResult );
- xbInt16 GetNumericResult( xbDouble &dResult );
- xbInt16 GetStringResult( xbString &sResult );
- xbInt16 GetStringResult( char * vpResult, xbUInt32 ulLen );
- xbExpNode *GetTreeHandle();
- xbInt16 ParseExpression( const xbString &sExpression );
- xbInt16 ParseExpression( xbDbf *dbf, const xbString &sExpression );
- xbInt16 ProcessExpression();
- xbInt16 ProcessExpression( xbInt16 iRecBufSw );
-
-
- protected:
- xbInt16 GetNextToken( xbExpToken &t );
- xbInt16 OperatorWeight( const xbString &sOperator );
- xbExpNode *GetNextNode( xbExpNode * n ) const; // traverses the tree from bottom left node, right, then up
-
- private: // methods
-
- // xbInt16 CalcExpressionResultLen();
- xbInt16 CalcFunctionResultLen( xbExpNode *n ) const;
- xbInt16 CalcCharNodeLen( xbExpNode *n );
- xbInt16 CheckParensAndQuotes( const xbString &sExpression );
- xbInt16 GetExpressionResultLen() const;
-
- xbInt16 GetTokenCharConstant ( xbExpToken &t );
- xbInt16 GetTokenDatabaseField ( xbExpToken &t );
- xbInt16 GetTokenDateConstant ( xbExpToken &t );
- xbInt16 GetTokenFunction ( xbExpToken &t );
- xbInt16 GetTokenLogicalConstant( xbExpToken &t );
- xbInt16 GetTokenNumericConstant( xbExpToken &t );
- xbInt16 GetTokenOperator ( xbExpToken &t );
- xbInt16 GetTokenParen ( xbExpToken &t );
-
- xbBool IsFunction ( const xbString &sExp, char &cReturnType );
- xbBool IsLogicalConstant ( const xbString &sExp );
- xbBool IsNumericConstant ( const xbString &sExp, char cPrevNodeType );
- xbBool IsOperator ( const xbString &sExp );
- char IsTokenSeparator ( char c );
- xbBool IsWhiteSpace ( char c );
-
- xbInt16 ParseExpression ( const xbString &sExpression, xbInt16 iWeight );
- xbInt16 ParseExpressionConstant( xbExpToken &t, xbExpNode *n );
- xbInt16 ParseExpressionFunction( xbExpToken &t, xbExpNode *n, xbInt16 iWeight );
- xbInt16 ParseExpressionFunctionParms( const xbString &sParms, xbLinkList<xbString> &llParms );
- xbInt16 ParseExpressionField ( xbExpToken &t, xbExpNode *n );
- xbInt16 ParseExpressionOperator( xbExpToken &t, xbExpNode *n, xbInt16 iWeight );
-
- xbInt16 ProcessExpressionFunction( xbExpNode *n, xbInt16 iRecBufSw = 0 );
- xbInt16 ProcessExpressionOperator( xbExpNode *n );
-
- private: // fields
- xbXBase *xbase;
- xbDbf *dbf;
- xbExpNode *nTree; // pointer to tree of expNodes
- // xbInt16 iExpLen; // size of expression result
-
-
-};
-
-/* Expression handler */
-
-
-};
-#endif // XB_EXPRESSION_SUPPORT
-#endif // __XB_EXP_H__
-
-
diff --git a/src/include/xbexpnode.h b/src/include/xbexpnode.h
deleted file mode 100755
index f50d9eb..0000000
--- a/src/include/xbexpnode.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/* xbexpnode.h
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-
-#ifndef __XB_EXPNODE_H__
-#define __XB_EXPNODE_H__
-
-// #ifdef CMAKE_COMPILER_IS_GNUCC
-// #pragma interface
-// #endif
-
-#ifdef XB_EXPRESSION_SUPPORT
-
-
-namespace xb{
-
-//class XBDLLEXPORT xbDbf;
-
-/************************************************************************/
-//! @brief Expression node class for handling expression nodes.
-/*!
-The xbExpNode class is used by the expression logic for handling specific
-nodes within a tree of nodes.<br>
-
-Expressions are parsed into nodes and a logical tree of nodes is created
-out of all the individual components within the expression.<br>
-
-This class is used for handling a specific node within a tree.<br>
-
-An application program will typically not need to be concerned with
-this class.<br>
-
-*/
-class XBDLLEXPORT xbExpNode {
- public:
- xbExpNode();
- xbExpNode( xbString &sNodeText, char cReturnType, char cNodeType );
- xbExpNode( xbString &sNodeText, char cNodeType );
- xbExpNode( char cNodeType );
-
- virtual ~xbExpNode();
- xbInt16 AddChild( xbExpNode *n );
- xbExpNode *GetChild( xbUInt32 ulChildNo ) const;
- xbUInt32 GetChildCnt() const;
- xbUInt32 GetChildNo() const;
- xbDbf *GetDbf() const;
- xbInt16 GetFieldNo() const;
- xbExpNode *GetFirstNode();
- xbExpNode *GetNextNode() const;
- void GetNodeText( xbString &sNodeText ) const;
- char GetNodeType() const;
- xbExpNode *GetParent() const;
- xbString &GetStringResult();
- xbBool GetBoolResult() const;
- xbDouble GetNumericResult() const;
- xbUInt32 GetResultLen() const;
- xbExpNode *GetRightSibling() const;
- char GetReturnType() const;
- xbInt16 GetWeight() const;
- xbBool HasRightSibling() const;
- xbBool IsOperator() const;
- xbBool IsUnaryOperator() const;
- void RemoveLastChild();
- void SetResultLen( xbUInt32 ulResultLen );
- void SetDbfInfo( xbDbf *dbf );
- void SetDbfInfo( xbDbf *dbf, xbInt16 iFieldNo );
- void SetNodeText( xbString &sNodeText );
- void SetNodeType( char cNodeType );
- void SetParent( xbExpNode *n );
- void SetResult( xbString &sResult );
- void SetResult( xbDate &dtResult );
- void SetResult( xbBool bResult );
- void SetResult( xbDouble dResult );
- void SetReturnType( char cReturnType );
- void SetWeight( xbInt16 iWeight );
-
- #ifdef XB_DEBUG_SUPPORT
- void DumpNode( xbInt16 iOption ) const; // 0 = no children, 1 = and children
- #endif
-
- private:
- xbString sNodeText; // expression text
- char cReturnType; // one of: XB_EXP_CHAR, XB_EXP_DATE, XB_EXP_LOGICAL, XB_EXP_NUMERIC
- char cNodeType; // one of: XB_EXP_CONSTANT, XB_EXP_FUNCTION, XB_EXP_FIELD, XB_EXP_OPERATOR
- xbString sResult; // char result, and operator
- xbDouble dResult; // numeric and bool results
- xbExpNode * nParent; // pointer to parent
- xbLinkList<xbExpNode *> llChildren; // linked list of descendent nodes
- xbDbf *dbf; // pointer to dbf, used for field, RECNO() and RECCOUNT()
- xbInt16 iFieldNo; // field no if DBF field
- xbUInt32 ulResultLen; // for string results, accumulated length of character operations
- // includes the sum of all nodes under this + this
- // date = 8, numeric = 4, logical = 1
- xbInt16 iWeight; // used for buildign the tree of nodes, assigned to operators
- // the higher the number, the lower it goes on the tree
-
-};
-
-/************************************************************************/
-
-/* Expression handler */
-
-
-};
-#endif // XB_EXPRESSION_SUPPORT
-#endif // __XB_EXP_H__
-
-
diff --git a/src/include/xbfile.h b/src/include/xbfile.h
deleted file mode 100755
index af04e98..0000000
--- a/src/include/xbfile.h
+++ /dev/null
@@ -1,197 +0,0 @@
-/* xbfile.h
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-#ifndef __XB_FILE_H__
-#define __XB_FILE_H__
-
-#ifdef CMAKE_COMPILER_IS_GNUCC
-#pragma interface
-#endif
-
-/*****************************/
-/* File Open Modes */
-#define XB_READ 0
-#define XB_READ_WRITE 1
-#define XB_WRITE 2
-
-/*****************************/
-/* File Access Modes */
-#define XB_SINGLE_USER 0 // file buffering on
-#define XB_MULTI_USER 1 // file buffering off
-
-namespace xb{
-
-/*! @brief Class for handling low level file I/O.
-*/
-
-/*!
-The xbFile class is used as an abstraction layer to isolate the library from the nuances
-of different operating systems and machine architectures.
-
-This module handles low level file I/O and is a base class
-for the (dbf) table, (dbt) memo and (ndx,mdx) index classes.
-Files are opened and manipulated via methods in the xbFile class.<br>
-This class handles:<br>
-1) Big and little endian reads/writes<br>
-2) 32 or 64 bit system calls, depending on OS<br>
-3) Various different c/c++ calls to open/close/read/write based on OS and compiler version<br>
-<br>
-If you are wanting to port this library to a new platform, start with this class.
-This class could be used if you want to write a platform independent program that needs R/W file access.
-*/
-
-
-class XBDLLEXPORT xbFile : public xbSsv {
-
- public:
- // xbFile();
- xbFile( xbXBase * x );
-
- ~xbFile();
-
- xbInt16 SetHomeFolders();
-
- xbInt16 CreateUniqueFileName( const xbString &sDirIn, const xbString &sExtIn, xbString &sFqnOut );
- xbInt16 CreateUniqueFileName( const xbString &sDirIn, const xbString &sExtIn, xbString &sFqnOut, xbInt16 iOption );
-
- const xbString& GetDirectory() const;
- const xbString& GetFileName() const;
- const xbString& GetFqFileName() const;
-
- void SetDirectory ( const xbString &sDirectory);
- void SetFileName ( const xbString &sFileName );
- void SetFqFileName( const xbString &sFqName );
-
- xbUInt32 GetBlockSize () const;
- xbInt16 SetBlockSize ( xbUInt32 ulBlockSize );
-
- xbInt16 GetOpenMode () const;
- xbInt16 GetShareMode () const;
-
- xbInt16 GetFileDirPart ( xbString &sFileDirPartOut ) const;
- xbInt16 GetFileDirPart ( const xbString &sCompleteFileNameIn, xbString &sFileDirPartOut ) const;
- xbInt16 GetFileExtPart ( xbString &sFileExtPartOut ) const;
- xbInt16 GetFileExtPart ( const xbString &sCompleteFileNameIn, xbString &sFileExtPartOut ) const;
- xbInt16 GetFileNamePart( xbString &sFileNamePartOut ) const;
- xbInt16 GetFileNamePart( const xbString &sCompleteFileNameIn, xbString &sFileNamePartOut ) const;
- xbInt16 GetFileType ( xbString &sFileType ) const;
-
- xbInt16 GetXbaseFileTypeByte( const xbString &sFileName, xbInt16 &iVersion );
- xbInt16 GetXbaseFileTypeByte( const xbString &sFileName, unsigned char &cFileTypeByte );
- xbInt16 GetXbaseFileTypeByte( const xbString &sFileName, unsigned char &cFileTypeByte, xbInt16 &iVersion );
- xbInt16 DetermineXbaseTableVersion( unsigned char cFileTypeByte ) const;
- xbInt16 DetermineXbaseMemoVersion( unsigned char cFileTypeByte ) const;
-
- xbBool FileExists () const;
- xbBool FileExists ( xbInt16 iOption ) const;
- xbBool FileExists ( const xbString &sFileName ) const;
- xbBool FileExists ( const xbString &sFileName, xbInt16 iOption ) const;
-
- xbBool FileIsOpen () const;
-
- xbInt16 ReadBlock ( xbUInt32 ulBlockNo, size_t readSize, void *buf );
- xbInt16 ReadBlock ( xbUInt32 ulBlockNo, xbUInt32 ulBlockSize, size_t readSize, void *buf );
- xbInt16 WriteBlock( xbUInt32 ulBlockNo, size_t writeSize, void *buf );
-
- xbInt16 GetFileSize( xbUInt64 &ullFileSize );
- xbInt16 GetFileMtime( time_t &mtime );
-
- xbDouble eGetDouble( const char *p ) const;
- xbInt32 eGetInt32 ( const char *p ) const;
- xbUInt32 eGetUInt32( const char *p ) const;
- xbInt16 eGetInt16 ( const char *p ) const;
- xbUInt16 eGetUInt16( const char *p ) const;
- void ePutDouble( char *p, xbDouble d );
- void ePutInt32 ( char *p, xbInt32 l );
- void ePutUInt32( char *p, xbUInt32 ul );
- void ePutInt16 ( char *p, xbInt16 s );
- void ePutUInt16( char *p, xbUInt16 s );
-
- xbInt16 xbFclose ();
- xbInt16 xbFeof ();
- xbInt16 xbFflush ();
- xbInt16 xbFgetc ( xbInt32 &c );
- xbInt16 xbFgetc ( char &c );
-
- #ifdef XB_LOCKING_SUPPORT
- xbInt16 xbLock ( xbInt16 iFunction, xbInt64 llOffset, size_t stLen );
- xbInt16 GetLockRetryCount() const;
- void SetLockRetryCount( xbInt16 iLockRetries );
- #endif
-
- xbInt16 xbFopen ( xbInt16 iOpenMode );
- xbInt16 xbFopen ( const xbString &sOpenMode, xbInt16 iShareMode );
- xbInt16 xbFopen ( xbInt16 iOpenMode, xbInt16 iShareMode );
- xbInt16 xbFopen ( const xbString &sMode, const xbString &sFileName, xbInt16 iShareMode );
-
- xbInt16 xbFputc ( xbInt32 c );
- xbInt16 xbFputc ( xbInt32 c, xbInt32 iNoTimes );
- xbInt16 xbFputs ( const xbString &s );
- xbInt16 xbFread ( void *ptr, size_t size, size_t nmemb );
- xbInt16 xbFgets ( size_t lSize, xbString &sLine );
-
- size_t xbFtell ();
- xbInt16 xbFseek ( xbInt64 llOffset, xbInt32 whence );
-
- void xbFTurnOffFileBuffering();
- xbInt16 xbFwrite ( const void *ptr, size_t lSize, size_t lNmemb );
-
- xbInt16 xbReadUntil ( const char cDelim, xbString &sOut );
- xbInt16 xbRemove ( const xbString &sFileName, xbInt16 iOption );
- xbInt16 xbRemove ( const xbString &sFileName );
- xbInt16 xbRemove ();
-
- xbInt16 xbRename ( const xbString &sOldName, const xbString &sNewName );
- void xbRewind ();
-
- xbInt16 xbTruncate ( xbInt64 llSize );
- xbInt16 NameSuffixMissing( const xbString &sFileName, xbInt16 iOption ) const;
-
- #ifdef XB_DEBUG_SUPPORT
- xbInt16 DumpBlockToDisk( xbUInt32 ulBlockNo, size_t lBlockSize );
- xbInt16 DumpMemToDisk ( char *p, size_t lBlockSize );
- #endif
-
-
- protected:
-
- xbXBase *xbase; /* pointer to the main structures */
-
- private:
- FILE *fp;
- xbString sFqFileName; /* fully qualified file name */
- xbString sFileName; /* file name */
- xbString sDirectory; /* directory, ends with / or \ */
- xbBool bFileOpen; /* true if file is open */
- xbUInt32 ulBlockSize; /* used for memo and index files */
-
- xbInt16 iOpenMode; /* XB_READ || XB_READ_WRITE || XB_WRITE */
- xbInt16 iShareMode; /* XB_SINGLE_USER || XB_MULTI_USER - set file buffering */
- xbInt32 iFileNo; /* Library File No */
-
- #ifdef XB_LOCKING_SUPPORT
- xbInt16 iLockRetries; /* file override number of lock attempts */
- #endif
-
- #ifdef HAVE_SETENDOFFILE_F
- HANDLE fHandle;
- #endif
-
-
-};
-
-} /* namespace */
-#endif /* __XBFILE_H__ */
-
diff --git a/src/include/xblog.h b/src/include/xblog.h
deleted file mode 100755
index e78f476..0000000
--- a/src/include/xblog.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* xblog.h
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-#ifndef __XB_XBLOG_H__
-#define __XB_XBLOG_H__
-
-#ifdef CMAKE_COMPILER_IS_GNUCC
-#pragma interface
-#endif
-
-namespace xb{
-
-#ifdef XB_LOGGING_SUPPORT
-
-//! @brief xbLog class.
-/*!
-The xbLog class handles message logging functions.
-
-If logging is enabled in an application, error messages are printed
-in the log file.
-
-Once a logfile reaches a predefined size, the logfile is closed, renamed
-and opened.
-
-The logging functions can be accessed through the xbXBase class.
-Each application has one of those.
-*/
-
-class XBDLLEXPORT xbLog : public xbFile {
- public:
- xbLog();
- xbLog( const xbString &sLogFileName );
- ~xbLog();
-
- xbInt16 LogClose ();
- xbInt16 LogGetStatus ();
- xbInt16 LogOpen ();
- void LogSetStatus ( xbBool bLogStatus );
- void LogSetLogSize( size_t lSize ); // { LogSize = size; }
- xbInt16 LogWrite ( const xbString &LogEntry, xbInt16 iOutputOption = 0 );
- xbInt16 LogWriteBytes( xbUInt32 lByteCnt, const char *p );
-
- private:
- xbBool bLoggingStatus; // false = logging off
- // true = logging on
- size_t lLogSize;
- xbInt16 iShareMode;
-};
-
-#endif // XB_LOGGING_SUPPORT
-} // namespace
-#endif // XB_XBLOG_H__
-
-
diff --git a/src/include/xbretcod.h b/src/include/xbretcod.h
deleted file mode 100755
index ec1f91b..0000000
--- a/src/include/xbretcod.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/* xbretcod.h
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-#ifndef __XB_RETCODES_H__
-#define __XB_RETCODES_H__
-
-/***********************************************/
-/* Return Codes and Error Messages */
-
-namespace xb{
-
- #define XB_NO_ERROR 0 // general
- #define XB_NO_MEMORY -100 // general
- #define XB_INVALID_OPTION -101 // general
- #define XB_DUP_TABLE_OR_ALIAS -110 // table manager
- #define XB_INVALID_NODELINK -120 // linklist
- #define XB_KEY_NOT_UNIQUE -121 // linklist
- #define XB_MEMCPY_ERROR -122 // memcpy failure
-
- #define XB_FILE_EXISTS -200 // file
- #define XB_ALREADY_OPEN -201 // file
- #define XB_DBF_FILE_NOT_OPEN -202 // file
- #define XB_FILE_NOT_FOUND -203 // file
- #define XB_FILE_TYPE_NOT_SUPPORTED -204 // file
- #define XB_RENAME_ERROR -205 // file
- #define XB_INVALID_OBJECT -206 // file
- #define XB_NOT_OPEN -207 // file
- #define XB_NOT_FOUND -208 // file
- #define XB_OPEN_ERROR -209 // file
- #define XB_CLOSE_ERROR -210 // file
- #define XB_SEEK_ERROR -211 // file
- #define XB_READ_ERROR -212 // file
- #define XB_WRITE_ERROR -213 // file
- #define XB_EOF -214 // file
- #define XB_BOF -215 // file
- #define XB_INVALID_BLOCK_SIZE -216 // file
- #define XB_INVALID_BLOCK_NO -217 // file
- #define XB_INVALID_RECORD -218 // file
- #define XB_DELETE_FAILED -219 // file
- #define XB_INVALID_TABLE_NAME -220 // file
- #define XB_EMPTY -221 // file
- #define XB_LIMIT_REACHED -222 // file
- #define XB_BLOCKREAD_NOT_ENABLED -223 // file
- #define XB_DIRECTORY_ERROR -224 // file
-
- #define XB_INVALID_FIELD_TYPE -300 // field
- #define XB_INVALID_FIELD_NO -301 // field
- #define XB_INVALID_DATA -302 // field
- #define XB_INVALID_FIELD_NAME -303 // field
- #define XB_INVALID_MEMO_FIELD -304 // field
- #define XB_INVALID_FIELD -305 // field
- #define XB_INVALID_FIELD_LEN -306 // field
- #define XB_INVALID_DATE -307 // date field
-
- #define XB_INVALID_LOCK_OPTION -400 // lock
- #define XB_LOCK_FAILED -401 // lock
- #define XB_TABLE_NOT_LOCKED -402 // lock - need table locked for operation
-
- #define XB_PARSE_ERROR -500 // expression
- #define XB_INVALID_FUNCTION -501 // expression
- #define XB_INVALID_PARM -502 // expression
- #define XB_INCONSISTENT_PARM_LENS -503 // expression
- #define XB_INCOMPATIBLE_OPERANDS -504 // expression
- #define XB_UNBALANCED_PARENS -505 // expression
- #define XB_UNBALANCED_QUOTES -506 // expression
- #define XB_INVALID_EXPRESSION -507 // expression
-
- #define XB_INVALID_KEYNO -600 // index
- #define XB_INVALID_INDEX -601 // index file error
- #define XB_INVALID_TAG -602 // invalid index tag name, must be <= 10 bytes
- #define XB_INVALID_PAGE -603 // invalid index page
-
-
- #define XB_SYNTAX_ERROR -700 // sql syntax error
-
-
- #define XB_MAX_ERROR_NO -999
-
-
-/* when updating this table, also need to update messages in xbssv.cpp */
-
-
-} /* namespace */
-#endif /* __XB_RETCODES_H__ */
-
diff --git a/src/include/xbssv.h b/src/include/xbssv.h
deleted file mode 100755
index d050bcb..0000000
--- a/src/include/xbssv.h
+++ /dev/null
@@ -1,185 +0,0 @@
-/* xbssv.h
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-
-#ifndef __XB_XBSSV_H__
-#define __XB_XBSSV_H__
-
-#ifdef CMAKE_COMPILER_IS_GNUCC
-#pragma interface
-#endif
-
-
-namespace xb{
-
-class XBDLLEXPORT xbXBase;
-
-///@cond DOXYOFF
-struct XBDLLEXPORT xbErrorMessage{
- xbInt16 iErrorNo;
- const char *sErrorText;
-};
-///@endcond DOXYOFF
-
-
-//! @brief Class for handling shared system variables.
-/*!
-This class defines static variables which are referenced across class instances.
-
-This class is designed to have the variables set when the xbXBase class constructor is called
-(xbXBase is a derived class). The xbXbase class is designed to be called first in an application
-programs, and it is only called once. The static values in this class are typically initialized at
-program startup and don't require additional updates.
-
-*/
-
-
-// By design, DBase allows mutliple records in a table all having the same key, but only one entry in a unique index
-// XB_HALT_ON_DUP_KEY tells the library to not allow appending records which generate duplicate keys in a unique index
-//
-#if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
-#define XB_HALT_ON_DUPKEY 0
-#define XB_EMULATE_DBASE 1
-#endif
-
-
-
-class XBDLLEXPORT xbSsv{
- public:
- xbSsv();
- const static char *ErrorCodeText[];
-
- void DisplayError ( xbInt16 ErrorCode ) const;
- xbString& GetDefaultDateFormat () const;
- xbString& GetDataDirectory () const;
- xbInt16 GetEndianType () const;
-
- const char *GetErrorMessage ( xbInt16 ErrorCode ) const;
- void SetDataDirectory ( const xbString &sDataDirectory );
- void SetDefaultDateFormat ( const xbString &sDefaultDateFormat );
-
- xbBool BitSet ( unsigned char c, xbInt16 iBitNo ) const;
- void BitDump ( unsigned char c ) const;
- void BitDump ( char c ) const;
-
- xbBool GetDefaultAutoCommit () const;
- void SetDefaultAutoCommit ( xbBool bDefaultAutoCommit );
-
- void GetHomeDir ( xbString &sHomeDirOut );
-
- xbString& GetLogDirectory () const;
- xbString& GetLogFileName () const;
- void SetLogDirectory ( const xbString &sLogDirectory );
-
- xbBool GetMultiUser () const;
- void SetMultiUser ( xbBool bMultiUser );
-
- #if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
- xbInt16 GetUniqueKeyOpt () const;
- xbInt16 SetUniqueKeyOpt ( xbInt16 iUniqueKeyOpt );
- #endif // (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
-
- #ifdef XB_LOCKING_SUPPORT
- xbInt16 GetDefaultLockRetries () const;
- void SetDefaultLockRetries ( xbInt16 iRetryCount );
- xbInt32 GetDefaultLockWait () const;
- void SetDefaultLockWait ( xbInt32 lRetryWait );
- xbInt16 GetDefaultLockFlavor () const;
- void SetDefaultLockFlavor ( xbInt16 iLockFlavor );
- xbBool GetDefaultAutoLock () const;
- void SetDefaultAutoLock ( xbBool bAutoLock );
- void EnableDefaultAutoLock ();
- void DisableDefaultAutoLock ();
- #endif // XB_LOCKING_SUPPORT
-
- #ifdef XB_MDX_SUPPORT
- xbInt16 GetCreateMdxBlockSize() const;
- xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );
- #endif // XB_MDX_SUPPORT
-
- #ifdef XB_BLOCKREAD_SUPPORT
- xbUInt32 GetDefaultBlockReadSize() const;
- void SetDefaultBlockReadSize( xbUInt32 ulDfltBlockReadSize );
- #endif // XB_BLOCKREAD_SUPPORT
-
-
- protected:
-
- void SetEndianType ();
-
- static xbInt16 iEndianType; // B=Big Endian L=Little Endian
- static xbString sNullString; // Null String
-
-
- private:
-
- static xbString sDefaultDateFormat;
- static xbString sDataDirectory; //Data file directory
-
- #ifdef XB_LOGGING_SUPPORT
- static xbString sLogDirectory; //Default location to store log files
- static xbString sLogFileName; //Default LogFileName
- #endif
-
- static xbInt16 iDefaultFileVersion; // 3 = DBase 3
- // 4 = DBase 4
- // default version used in CreateTable command
- // can be over ridden at the Xbase level, or table level
- // Different versions can be open simultaneously
-
- static xbBool bDefaultAutoCommit; // Default dbf auto commit switch
-
- static xbBool bMultiUser; // True if multi user mode is turned on
- // Turn this off for better performance in single user mode
- // This needs to be turned on or off before any data tables are opened
- // turning this on after tables are opened, can result in out of date
- // file buffers if multiple users are sharing the files
-
-#ifdef XB_LOCKING_SUPPORT
- static xbInt32 lDefaultLockWait; // Number of milliseconds between lock retries
- static xbInt16 iDefaultLockRetries; // Number of times to retry a lock before conceding
- static xbInt16 bDefaultAutoLock; // Autolocking enabled?
- static xbInt16 iDefaultLockFlavor; // 1 = DBase
- // 2 = Clipper - not developed yet
- // 3 = FoxPro - not developed yet
- // 9 = Xbase64 - not developed yet
-#endif
-
-
-#if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
-
- static xbInt16 iUniqueKeyOpt;
-
- // is one of:
- // XB_HALT_ON_DUPKEY
- // XB_EMULATE_DBASE
-
-#endif
-
-
-#ifdef XB_MDX_SUPPORT
- static xbInt16 iCreateMdxBlockSize; // System level Mdx Block Size
-#endif // XB_MDX_SUPPORT
-
-
-#ifdef XB_BLOCKREAD_SUPPORT
- static xbUInt32 ulDefaultBlockReadSize;
-#endif // XB_BLOCKREAD_SUPPORT
-
-
-};
-
-} /* namespace xb */
-#endif /* __XB_XBSSV_H__ */ \ No newline at end of file
diff --git a/src/include/xbstring.h b/src/include/xbstring.h
deleted file mode 100755
index 3e70acc..0000000
--- a/src/include/xbstring.h
+++ /dev/null
@@ -1,186 +0,0 @@
-/* xbstring.h
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-#ifndef __XBSTRING_H__
-#define __XBSTRING_H__
-
-#ifdef CMAKE_COMPILER_IS_GNUCC
-#pragma interface
-#endif
-
-#include <stdlib.h>
-#include <iostream>
-
-namespace xb{
-
-
-//! @brief Class for handling string data.
-
-/*!
-This class defines a basic string class with all the functions one would expect in a string class.
-
-For purposes of the xbString class, a string is defined as a variable sized array of one byte
-characters terminated with a null (0x00 or \0) byte.<br><br>
-
-This version of the xbString class does not support wide (wchar_t) characters. Perhaps you would
-be interested in creating a class for supporting wide characters.<br><br>
-
-This string class handle strings in a 1-based (not 0 based) fashion.
-Any string routines taking an offset use a 1-based value. That is, the first position of
-the string is position 1, not 0.<br><br>
-
-Position 1 (not 0) is considered the first position in a string.
-A return of 0 would indicate a not found condition. A return of 1, would be the
-first byte.
-*/
-
-
-class XBDLLEXPORT xbString {
-
- public:
- //Various constructors
- xbString(xbUInt32 size);
- xbString(char c);
- xbString(const char *s, xbUInt32 lMaxLen);
- xbString(const xbString &s);
- xbString(const char * = "");
- xbString( xbDouble d );
- ~xbString();
-
- //operators
- xbString &operator= (const xbString &s);
- xbString &operator= (const char *s);
- operator const char *() const;
- char &operator[](xbUInt32 n) const;
- char &operator[](xbInt32 n) const;
-
- xbString &operator+=(const xbString &s);
- xbString &operator+=(const char *s);
- xbString &operator+=(char c);
- xbString &operator-=(const xbString &s);
- xbString &operator-=(const char *s);
- xbString &operator-=(char c);
-
- xbBool operator == ( const xbString& ) const;
- xbBool operator == ( const char * ) const;
- xbBool operator != ( const xbString& ) const;
- xbBool operator != ( const char * ) const;
-
- xbBool operator < ( const xbString& ) const;
- xbBool operator > ( const xbString& ) const;
- xbBool operator <= ( const xbString& ) const;
- xbBool operator >= ( const xbString& ) const;
-
- xbString operator-( const xbString &s );
- xbString operator+( const char *s );
- xbString operator+( const xbString &s );
- xbString operator+( const char c );
-
- xbString &AddBackSlash( char c );
- xbString &Append(const xbString &s);
- xbString &Append(const char *s);
- xbString &Append(const char *s, xbUInt32 iByteCount );
- xbString &Append(char c);
- xbString &Assign(const char *srcStr, xbUInt32 lStartPos, xbUInt32 lCopyLen );
- xbString &Assign(const char *srcStr, xbUInt32 lStartPos );
- xbString &Assign(const xbString &s, xbUInt32 pos, xbUInt32 lCopyLen );
- xbString &Assign(const xbString &s, xbUInt32 lCopyLen );
-
- xbString Copy() const;
- xbUInt32 CountChar( char c ) const;
- xbUInt32 CountChar( char c, xbInt16 iOpt ) const;
- xbInt16 CvtHexChar( char &cOut );
- xbInt16 CvtHexString( xbString &sOut );
- xbInt16 CvtULongLong( xbUInt64 &ullOut );
- xbInt16 CvtLongLong( xbInt64 &llOut );
-
- #ifdef XB_DEBUG_SUPPORT
- void Dump( const char *title ) const;
- void Dump( const char *title, xbInt16 iOption ) const;
- void DumpHex( const char *title ) const;
- #endif
-
- xbString &ExtractElement(const char *src, char delim, xbUInt32 iCnt, xbInt16 iOpt = 0 );
- char GetCharacter( xbUInt32 lPos ) const;
- xbUInt32 GetLastPos(char c) const;
- xbUInt32 GetLastPos(const char *s) const;
- char GetPathSeparator() const;
- xbUInt32 GetSize() const;
-
- xbBool HasAlphaChars() const;
- xbBool IsEmpty() const;
- xbBool IsNull() const;
-
- xbString &Left( xbUInt32 ulLen );
- xbUInt32 Len() const; // returns the length of the string
- xbString &Ltrim();
- xbString &Ltrunc( xbUInt32 ulCnt );
-
- xbString &Mid(xbUInt32 ulPos, xbUInt32 lLen );
- xbString &PadLeft( char c, xbUInt32 ulLen );
- xbString &PadRight( char c, xbUInt32 ulLen );
-
- xbUInt32 Pos(char c, xbUInt32 ulStartPos ) const;
- xbUInt32 Pos(char c) const;
- xbUInt32 Pos(const char *s) const;
- xbString &PutAt(xbUInt32 ulPos, char c);
-
- xbString &Remove( xbUInt32 ulPos, xbUInt32 ulN );
- xbString &Replace( const char *sReplace, const char *sReplaceWith, xbInt16 iOpt = 0 );
- xbString &Resize( xbUInt32 lSize );
- xbString &Rtrim();
-
- xbString &Set( const char *s );
- xbString &Set( const xbString &s );
- xbString &Set( const char *s, xbUInt32 ulSize );
- xbString &SetNum( xbInt32 lNum );
- xbString &Sprintf(const char *format, ...);
-
- const char *Str() const;
- char *strncpy( char * cDest, xbUInt32 n ) const;
- xbString &SwapChars( char from, char to );
-
- xbString &ToLowerCase();
- xbString &ToUpperCase();
- xbString &Trim();
-
- xbBool ValidLogicalValue() const;
- xbBool ValidNumericValue() const;
- xbString &ZapChar( char c );
- xbString &ZapLeadingChar( char c );
- xbString &ZapTrailingChar( char c );
-
- friend std::ostream& operator<< ( std::ostream& os, const xbString& s );
-
- private:
-
- static const char * NullString;
- static char cJunkBuf;
-
- char *data; // pointer to actual string data
- xbUInt32 size; // size of string plus null terminating byte
-
- void ctor(const char *s);
-// xbUInt32 CalcSprintfBufSize(const char *format, ...);
-
-// char * xb_realloc( char *pIn, xbUInt32 iLen );
-
- // next routine could result in buffer over runs if used with improperly sized buffers
- char * xb_strcpy ( char *target, const char *source);
-
-};
-
-} /* namespace */
-#endif /* __XBSTRING_H__ */
diff --git a/src/include/xbxbase.h b/src/include/xbxbase.h
deleted file mode 100755
index fe1f323..0000000
--- a/src/include/xbxbase.h
+++ /dev/null
@@ -1,230 +0,0 @@
-/* xbxbase.h
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-
-#ifndef __XB_XBDBLIST_H__
-#define __XB_XBDBLIST_H__
-
-#ifdef CMAKE_COMPILER_IS_GNUCC
-#pragma interface
-#endif
-
-namespace xb{
-
-class XBDLLEXPORT xbLog;
-
-/************************************************************************/
-/*
- Xbase functions
-
- Min Parm Count is the minimum number of input parms needed by the function
-
- Return Type
- C Char or string
- D Date
- L Logical
- N Numeric
- 1 Varies - pull return type from first sibling
- 2 Varies - pull return type from second sibling
-*/
-
-#ifdef XB_FUNCTION_SUPPORT
-
-/*
-struct XBDLLEXPORT xbFunctionInfo {
- const char * FuncName; // function name
- char ReturnType; // return type of function
- xbInt16 iReturnLenCalc; // used to calculate the function return value is
- // 1 = use value specified in iReturnLenVal
- // 2 = use length of operand specified in col 4
- // 3 = use valued of numeric operand specified in col 4
- // 4 = length of parm 1 * numeric value parm
- // 5 = larger length of parm 2 or length of parm 3
- // 6 = if two or more parms, use numeric value from second parm,
- // otherwise use col4 value
- xbInt16 iReturnLenVal; // Used in combination with iReturnLenCalc
-
-};
-*/
-/*
-static xbFunctionInfo FunctionList[] =
-// Func Return -Rtrn Len-
-// Name Type -Calc Val-
-{
- { "ABS", 'N', 1, 4 },
- { "ALLTRIM", 'C', 2, 1 },
- { "ASC", 'N', 1, 4 },
- { "AT", 'N', 1, 4 },
- { "CDOW", 'C', 1, 9 },
- { "CHR", 'C', 1, 1 },
- { "CMONTH", 'C', 1, 9 },
- { "CTOD", 'D', 1, 8 },
- { "DATE", 'D', 1, 8 },
- { "DAY", 'N', 1, 4 },
- { "DEL", 'C', 1, 1 },
- { "DELETED", 'L', 1, 1 },
- { "DESCEND", '1', 2, 1 },
- { "DOW", 'N', 1, 4 },
- { "DTOC", 'C', 1, 8 },
- { "DTOS", 'C', 1, 8 },
- { "EXP", 'N', 1, 4 },
- { "IIF", 'C', 5, 0 },
- { "INT", 'N', 1, 4 },
- { "ISALPHA", 'L', 1, 1 },
- { "ISLOWER", 'L', 1, 1 },
- { "ISUPPER", 'L', 1, 1 },
- { "LEFT", 'C', 3, 2 },
- { "LEN", 'N', 1, 4 },
- { "LOG", 'N', 1, 4 },
- { "LOWER", 'C', 2, 1 },
- { "LTRIM", 'C', 2, 1 },
- { "MAX", 'N', 1, 4 },
- { "MIN", 'N', 1, 4 },
- { "MONTH", 'N', 1, 4 },
- { "RECNO", 'N', 1, 4 },
- { "RECCOUNT", 'N', 1, 4 },
- { "REPLICATE", 'C', 4, 0 },
- { "RIGHT", 'C', 3, 2 },
- { "RTRIM", 'C', 2, 1 },
- { "SPACE", 'C', 3, 1 },
- { "SQRT", 'N', 1, 4 },
- { "STOD", 'D', 1, 8 },
- { "STR", 'C', 6, 10 },
- { "STRZERO", 'C', 3, 2 },
- { "SUBSTR", 'C', 3, 3 },
- { "TRIM", 'C', 2, 1 },
- { "UPPER", 'C', 2, 1 },
- { "VAL", 'N', 1, 4 },
- { "YEAR", 'N', 1, 4 },
- { 0, 0, 0, 0 },
-};
-*/
-#endif
-
-
-
-//! @brief xbXbase class.
-/*!
- The xbXBase class is the core class that needs to be in every application program.
-*/
-
-class XBDLLEXPORT xbXBase : public xbTblMgr{
- public:
- xbXBase();
- ~xbXBase();
-
- xbInt16 CloseAllTables();
- void DisableMsgLogging();
- void EnableMsgLogging ();
- xbInt16 FlushLog();
-
- const xbString &GetLogDirectory () const;
- const xbString &GetLogFileName () const;
- const xbString &GetLogFqFileName() const;
- xbBool GetLogStatus () const;
-
- xbInt16 OpenHighestVersion( const xbString &sTableName, const xbString &sAlias, xbDbf &dbf, int dummy );
- xbInt16 OpenHighestVersion( const xbString &sTableName, const xbString &sAlias, xbDbf **dbf );
-
- xbDbf * Open( const xbString &sTableName, xbInt16 &iRc );
- xbDbf * Open( const xbString &sTableName, const xbString &sAlias, xbInt16 iOpenMode, xbInt16 iShareMode, xbInt16 iVersion, xbInt16 &iRc );
- void SetLogDirectory( const xbString &sLogFileDirectory );
- void SetLogFileName ( const xbString &sLogFileName );
- void SetLogSize ( size_t lSize );
- xbInt16 WriteLogMessage( const xbString &sLogMessage, xbInt16 iOutputOpt = 0 );
- xbInt16 WriteLogBytes ( xbUInt32 lCnt, const char *p );
-
- void xbSleep ( xbInt32 lMillisecs );
-
- xbInt16 GetCmdLineOpt ( xbInt32 lArgc, char **argv, const char *sOptRqst, xbString &sParmOut );
- xbInt16 GetCmdLineOpt ( xbInt32 lArgc, char **argv, xbString &sOptRqst, xbString &sParmOut );
-
-
- /* xbase functions */
- #ifdef XB_FUNCTION_SUPPORT
- xbInt16 ABS( xbDouble dIn, xbDouble &dOut );
- xbInt16 ALLTRIM( const xbString &sIn, xbString &sOut );
- xbInt16 ASC( const xbString &s, xbDouble &dAscOut );
- xbInt16 AT( const xbString &sSrchFor, const xbString &sBase, xbDouble &dPos );
- xbInt16 CDOW( xbDate &dInDate, xbString &sOutDow );
- xbInt16 CHR( xbDouble dAsciCd, xbString &sOut );
- xbInt16 CMONTH( xbDate &dInDate, xbString &sOutMonth );
- xbInt16 CTOD( const xbString &sInDate, xbDate &dOutDate );
- xbInt16 DATE( xbDate &dOutDate );
- xbInt16 DAY( const xbDate &dInDate, xbDouble &dOutDay );
- xbInt16 DEL( xbDbf * d, xbString &sOut, xbInt16 iRecBufSw = 0 );
- xbInt16 DELETED( xbDbf * d, xbBool &bOut, xbInt16 iRecBufSw = 0 );
- xbInt16 DESCEND( const xbString &sIn, xbString &sOut );
- xbInt16 DESCEND( const xbDate &dInDate, xbDate &dOutDate );
- xbInt16 DESCEND( const xbDouble dIn, xbDouble &dsOut );
- xbInt16 DOW( const xbDate &sInDate, xbDouble &dDowOut );
- xbInt16 DTOC( xbDate &dInDate, xbString &sOutFmtDate );
- xbInt16 DTOS( xbDate &dInDate, xbString &sOutFmtDate );
- xbInt16 EXP( xbDouble dIn, xbDouble &dOut );
- xbInt16 IIF( xbBool bResult, const xbString &sTrueResult, const xbString &sFalseResult, xbString &sResult );
- xbInt16 INT( xbDouble dIn, xbDouble &dOut );
- xbInt16 ISALPHA( const xbString &s, xbBool &bResult );
- xbInt16 ISLOWER( const xbString &s, xbBool &bResult );
- xbInt16 ISUPPER( const xbString &s, xbBool &bResult );
- xbInt16 LEFT( const xbString &sIn, xbUInt32 lCharCnt, xbString &sOut );
- xbInt16 LEN( const xbString &sIn, xbDouble &dLen );
- xbInt16 LOG( xbDouble dIn, xbDouble &dOut );
- xbInt16 LOWER( const xbString &sIn, xbString &sOut );
- xbInt16 LTRIM( const xbString &sIn, xbString & sOut );
- xbInt16 MAX( xbDouble dIn1, xbDouble dIn2, xbDouble &dOut );
- xbInt16 MIN( xbDouble dIn1, xbDouble dIn2, xbDouble &dOut );
- xbInt16 MONTH( xbDate &dInDate, xbDouble &dMonthOut );
- xbInt16 RECCOUNT( xbDbf * d, xbDouble &dRecOut );
- xbInt16 RECNO( xbDbf * d, xbDouble &dRecOut );
- xbInt16 REPLICATE( const xbString &sIn, xbUInt32 ulRepCnt, xbString &sOut );
- xbInt16 RIGHT( const xbString &sIn, xbUInt32 iCharCnt, xbString &sOut );
- xbInt16 RTRIM( const xbString &sIn, xbString &sOut );
- xbInt16 SPACE( xbInt32 lCnt, xbString &sOut );
- xbInt16 SQRT( xbDouble dBase, xbDouble &dSqrRt );
- xbInt16 STOD( const xbString &sIn, xbDate &sDateOut );
- xbInt16 STR( xbDouble dIn, xbString &sOut );
- xbInt16 STR( xbDouble dIn, xbUInt32 ulLen, xbString &sOut );
- xbInt16 STR( xbDouble dIn, xbUInt32 ulLen, xbUInt32 ulDec, xbString &sOut );
- xbInt16 STR( xbDouble dIn, xbUInt32 ulLen, xbUInt32 ulDec, xbString &sPadChar, xbString &sOut );
- xbInt16 STRZERO( xbDouble dIn, xbUInt32 ulLen, xbUInt32 ulDec, xbString &sOut );
- xbInt16 SUBSTR( const xbString &sIn, xbUInt32 ulStartPos, xbUInt32 ulLen, xbString &sOut );
- xbInt16 TRIM( const xbString &sIn, xbString &sOut );
- xbInt16 UPPER( const xbString &sIn, xbString &sOut );
- xbInt16 VAL( const xbString &sIn, xbDouble &dOut );
- xbInt16 YEAR( xbDate &dInDate, xbDouble &dOutYear );
- #endif
-
- protected:
- friend class xbBcd;
- friend class xbExp;
-
- #ifdef XB_BLOCKREAD_SUPPORT
- friend class xbBlockRead;
- #endif // XB_BLOCKREAD_SUPPORT
-
-
- xbInt16 GetFunctionInfo( const xbString &sExpLine, char &cReturnType, xbInt16 &iReturnLenCalc, xbInt32 &lReturnLenVal ) const;
- static xbInt16 xbMemcmp( const unsigned char *s1, const unsigned char *s2, size_t n );
-
- private:
-
-#ifdef XB_LOGGING_SUPPORT
- xbLog *xLog;
-#endif
-
-};
-
-} /* namespace xb */
-#endif /* __XB_DBLIST_H__ */ \ No newline at end of file
diff --git a/src/sql/xbcrix.cpp b/src/sql/xbcrix.cpp
deleted file mode 100755
index 6a391f7..0000000
--- a/src/sql/xbcrix.cpp
+++ /dev/null
@@ -1,289 +0,0 @@
-/* xbcrix.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-#include "xbase.h"
-
-#ifdef XB_SQL_SUPPORT
-
-namespace xb{
-
-
-/***********************************************************************/
-#ifdef XB_INDEX_SUPPORT
-xbInt16 xbSql::SqlCreateIndex( const xbString &sCmdLine ){
-
- // std::cout << "CREATE INDEX " << sCmdLine << std::endl;
-
- // expected format to create an Dbase 3, NDX index:
- // CREATE INDEX ixname.ndx ON tablename.dbf ( EXPRESSION ) [ASSOCIATE]
-
- // expected format to create an Dbase 4, tag on an MDX index:
- // CREATE [UNIQUE] INDEX tagname ON tablename.dbf ( EXPRESSION ) [DESC] [FILTER .NOT. DELETED()]
-
- // The ASSOCIATE parameter is specific to Xbase64 library, it is used to associate
- // a non production (NDX) index file to a dbf file so it will be automatically
- // opened with the dbf file whenever the dbf file is opened by the xbase64 routines.
-
- // The [ASSOCIATE] parameter is not used with MDX production indices
-
- // This method first looks for ".NDX" in the file name to determine if an NDX
- // index should be created.
- // if .NDX is not in the filename, it looks in the uda for "IXTYPE" for either
- // NDX or MDX to detmermine the index type to create
- // if IXTYPE not found, create an MDX tag
-
- // The optional DESC parameter defines an entire index key as descending. This is
- // different than other SQL implementations where specific fields can be descending.
-
- // The optional FILTER parameter is specific to the XBASE64 library, is it used to
- // assign a filter to a tag in an MDX style index. Everything to the right of
- // the keyword FILTER is considered part of the filter.
-
- // The original DBASE indices used to '+' to create an index on more than one field
- // ie: FIELD1+FIELD2+FIELD3
- // SQL uses commas: ie: FIELD1, FIELD2, FIELD3
- // The Xbase library supports either '+' or ',' when creating mutli field indices.
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
- xbString sTableName;
- xbString sIxName;
- xbString sIxType;
- xbUInt32 ulPos;
- xbString sCmd = sCmdLine;
- xbString sNode;
- xbBool bUnique = xbFalse;
- xbDbf * dbf = NULL;
-
- try{
-
- // drop off the first node
- ulPos = sCmd.Pos( ' ' );
- sCmd.Ltrunc( ulPos );
- sCmd.Ltrim();
-
- sNode.ExtractElement( sCmd, ' ', 1, 0 );
- sNode.ToUpperCase();
-
- if( sNode == "UNIQUE" ){
- //std::cout << "unique ix\n";
- bUnique = xbTrue;
- ulPos = sCmd.Pos( ' ' );
- sCmd.Ltrunc( ulPos );
- sCmd.Ltrim();
- }
-
- // go past the index keyword
- ulPos = sCmd.Pos( ' ' );
- sCmd.Ltrunc( ulPos );
- sCmd.Ltrim();
-
- // pull the index name off the cmd line
- sIxName.ExtractElement( sCmd, ' ', 1, 0 );
-
- #ifdef XB_NDX_SUPPORT
- xbString sTemp = sIxName;
- sTemp.ToUpperCase();
- ulPos = sTemp.Pos( ".NDX" );
- if(ulPos == (sTemp.Len() - 3) )
- sIxType = "NDX";
- #endif // XB_NDX_SUPPORT
-
- if( sIxType == "" ){
- if(( iRc = uda.GetTokenForKey( "IXTYPE", sIxType )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- }
-
- #ifdef XB_NDX_SUPPORT
- if( sIxType == "NDX" ){
- xbFile f( xbase );
- f.SetFileName( sIxName );
- if( f.FileExists()){
- iErrorStop = 110;
- iRc = XB_FILE_EXISTS;
- throw iRc;
- }
- }
- #endif // XB_NDX_SUPPORT
-
- // skip past index name
- ulPos = sCmd.Pos( ' ' );
- sCmd.Ltrunc( ulPos );
- sCmd.Ltrim();
-
- // skip past "ON"
- ulPos = sCmd.Pos( ' ' );
- sCmd.Ltrunc( ulPos );
- sCmd.Ltrim();
-
- // get the table name
- ulPos = sCmd.Pos( '(' );
- sTableName.ExtractElement( sCmd, '(', 1, 0 );
- sTableName.Trim();
-
- xbFile fDbf( xbase );
- fDbf.SetFileName( sTableName );
-
- // if not open, attempt to open it
- dbf = xbase->GetDbfPtr( fDbf.GetFqFileName());
- if( !dbf ){
- if(( iRc = xbase->OpenHighestVersion( sTableName, "", &dbf )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
- }
- if( dbf == NULL ){
- iErrorStop = 130;
- iRc = XB_FILE_NOT_FOUND;
- throw iRc;
- }
- sCmd.Ltrunc( ulPos );
-
- // std::cout << "cp1 ulPos = " << ulPos << " sCmd = [" << sCmd << "]\n";
-
- //ulPos = sCmd.GetLastPos( ')' );
- xbString sKeyExpression;
- xbBool bDone = xbFalse;
- xbUInt32 lPos = 1;
- xbInt16 iParenCtr = 0;
-
- while( !bDone && lPos < sCmd.Len()){
- if( sCmd[lPos] == '(' ){
- iParenCtr++;
- sKeyExpression.Append( sCmd[lPos] );
- } else if( sCmd[lPos] == ')' ){
- if( iParenCtr > 0 ){
- iParenCtr--;
- sKeyExpression.Append( sCmd[lPos] );
- } else {
- bDone = xbTrue;
- }
- } else if( sCmd[lPos] == ',' && iParenCtr == 0 ){
- sKeyExpression.Append( '+' );
- } else if( sCmd[lPos] != ' ' ){
- sKeyExpression.Append( sCmd[lPos] );
- }
- lPos++;
- }
-
- // std::cout << "Key Expression =[" << sKeyExpression << "]\n";
-
- sCmd.Ltrunc( lPos );
- sCmd.Trim();
-
- xbBool bDesc = xbFalse;
- // std::cout << "sCmd - looking for DESC [" << sCmd << "]\n";
- if( sCmd.Len() > 4 ){
- sNode = sCmd;
- sNode.ToUpperCase();
- ulPos = sNode.Pos( "DESC" );
- if( ulPos > 0 ){
- bDesc = xbTrue;
- sCmd.Ltrunc( 4 );
- sCmd.Trim();
- std::cout << "Descending\n";
- }
- }
-
-
- // std::cout << "sCmd - looking for FILTER stuff [" << sCmd << "]\n";
- xbString sFilter;
- if( sCmd.Len() > 6 ){
- sNode = sCmd;
- sNode.ToUpperCase();
- ulPos = sNode.Pos( "FILTER" );
- if( ulPos > 0 ){
- sFilter = sCmd;
- sFilter.Ltrunc( ulPos + 6 );
- sFilter.Trim();
- }
- }
- // std::cout << "sCmd - FILTER = [" << sFilter << "]\n";
-
- #ifdef XB_LOCKING_SUPPORT
- if(( iRc = dbf->LockTable( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc;
- }
- #endif // XB_LOCKING_SUPPORT
-
- // std::cout << "SqlCreateIndex() - ixtype = " << sIxType << "\n";
-
- xbIx *pIx;
- void *vpTag;
-
- if(( iRc = dbf->CreateTag( sIxType, sIxName, sKeyExpression, sFilter, bDesc, bUnique, xbFalse, &pIx, &vpTag )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
- // std::cout << "SqlCreateIndex() - back from tag create\n";
- #ifdef XB_NDX_SUPPORT
- if( sIxType == "NDX"){
- sCmd.Ltrunc( ulPos );
- sCmd.Trim();
- if( sCmd.Len() > 0 ){
- sCmd.ToUpperCase();
- if( sCmd.Pos( "ASSOCIATE" )){
- if(( iRc = dbf->AssociateIndex( "NDX", sIxName, 0 )) != XB_NO_ERROR ){
- iErrorStop = 160;
- throw iRc;
- }
- }
- }
- }
-// if( sIxType == "NDX"){
-// if(( iRc = pIx->Reindex( &vpTag )) != XB_NO_ERROR ){
-// iErrorStop = 160;
-// throw iRc;
-// }
-// }
- #endif // XB_NDX_SUPPORT
-
-
- if(( iRc = pIx->Reindex( &vpTag )) != XB_NO_ERROR ){
- iErrorStop = 170;
- throw iRc;
- }
-
-
- #ifdef XB_LOCKING_SUPPORT
- if(( iRc = dbf->LockTable( XB_UNLOCK )) != XB_NO_ERROR ){
- iErrorStop = 180;
- throw iRc;
- }
- #endif // XB_LOCKING_SUPPORT
-
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbSql::SqlCreateIndex() Exception Caught. Error Stop = [%d] rc = [%d] table = [%s]", iErrorStop, iRc, sTableName.Str() );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
-
- }
-
- #ifdef XB_LOCKING_SUPPORT
- dbf->LockTable( XB_UNLOCK );
- #endif // XB_LOCKING_SUPPORT
-
- return iRc;
-}
-#endif // XB_INDEX_SUPPORT
-/***********************************************************************/
-} /* namespace */
-#endif /* XB_SQL_SUPPORT */
-
diff --git a/src/sql/xbcrtbl.cpp b/src/sql/xbcrtbl.cpp
deleted file mode 100755
index dfb3403..0000000
--- a/src/sql/xbcrtbl.cpp
+++ /dev/null
@@ -1,267 +0,0 @@
-/* xbcrtbl.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2019,2022 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-#include "xbase.h"
-
-#ifdef XB_SQL_SUPPORT
-
-namespace xb{
-
-
-/***********************************************************************/
-xbInt16 xbSql::SqlCreateTable( const xbString &sCmdLine ){
-
-
- // std::cout << "CREATE TABLE " << sCmdLine << std::endl;
-
- // expected format:
- // CREATE TABLE tablename.dbf (Field1 CHAR(10), INTFLD1 INTEGER, ... )
-
- // supported field types
- //
- // SQL TYPE XBASE Field Type
- // -------- ----------------
- // SMALLINT NUMERIC(6,0)
- // INTEGER NUMERIC(11,0)
- // DECIMAL(x,y) NUMERIC(x+1,y)
- // NUMERIC(x,y) NUMERIC(x,y)
- // FLOAT(x,y) FLOAT(x,y)
- // CHAR(n) CHARACTER(n)
- // DATE DATE
- // VARCHAR MEMO
- // LOGICAL LOGICAL
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
- xbString sTableName;
- xbString sFieldName;
- xbString sDataType;
- xbString sAttrib1;
- xbString sAttrib2;
- xbString sLlEntry;
- xbInt16 iType = 0;
- xbInt16 iAttribCnt; // number of attributes for a given data type
- xbString s;
- xbUInt32 lPos = 0;
- xbUInt32 lSpPos = 0; // space position
- xbUInt32 lCmPos = 0; // comma position
- xbUInt32 lLpPos = 0; // left paren position
- xbLinkList<xbString> ll;
- xbSchema *schema = NULL;
- xbString sMsg;
- xbString sWork;
-
- try{
- // retrieve table name
- s.ExtractElement( sCmdLine, '(', 1, 0 );
- sTableName.ExtractElement( s, ' ', 3, 0 );
- sTableName.Trim();
-
- // std::cout << "Tablename = [" << sTableName << "]\n";
-
-
- // determine if it already exists
- xbFile f( xbase );
- f.SetFileName( sTableName );
- if( f.FileExists() ){
- iErrorStop = 100;
- iRc = XB_FILE_EXISTS;
- throw iRc;
- }
-
- // build out table structure with parms from the sql string
- lPos = sCmdLine.Pos( '(' );
- s = sCmdLine;
- s.Ltrunc( lPos );
- s.Trim();
-
- // remove the last byte, should be a )
- s.Remove( s.Len(), 1 );
-
- s.Trim();
-
- xbBool bDone = xbFalse;
- xbInt16 iLoop = 0;
- while( !bDone && iLoop++ < 255 ){
- sFieldName.ExtractElement( s, ' ', 1 , 0 );
- lPos = sFieldName.Len();
- sFieldName.Trim();
- if( sFieldName.Len() > 10 )
- sFieldName.Mid( 1, 10 ); // shrink to 10 buytes if too big
-
- //std::cout << "field name=[" << sFieldName << "]\n";
- s.Ltrunc( lPos + 1 );
- s.Ltrim();
- //std::cout << "remainder after field name removed = [" << s << "]\n";
-
- // Data type is delimited with either a space, comma or left paren
- lPos = 9999999;
- lSpPos = s.Pos( ' ' );
- lCmPos = s.Pos( ',' );
- lLpPos = s.Pos( '(' );
- if( lSpPos != 0 ) lPos = lSpPos;
- if( lCmPos != 0 && lCmPos < lPos ) lPos = lCmPos;
- if( lLpPos != 0 && lLpPos < lPos ) lPos = lLpPos;
-
- //sMsg.Sprintf( "SpPos=[%d] CmPos=[%d] LpPos=[%d] lPos=[%d]", lSpPos, lCmPos, lLpPos, lPos );
- //std::cout << sMsg << "\n";
-
- sDataType.Assign( s, 1, lPos-1 );
-
- //std::cout << "DataType=[" << sDataType << "]\n";
- if( sDataType == "CHAR" )
- iAttribCnt = 1;
- else if( sDataType == "DECIMAL" || sDataType == "NUMERIC" || sDataType == "FLOAT" )
- iAttribCnt = 2;
- else if( sDataType == "SMALLINT" || sDataType == "INTEGER" || sDataType == "DATE" || sDataType == "VARCHAR" || sDataType == "LOGICAL" )
- iAttribCnt = 0;
- else{
- iErrorStop = 110;
- iRc = XB_INVALID_FIELD_TYPE;
- throw iRc;
- }
-
- sAttrib1 = "";
- sAttrib2 = "0";
-
- if( iAttribCnt == 0 ){
- s.Ltrunc( sDataType.Len());
-
- } else if( iAttribCnt > 0 ){
- lPos = s.Pos( '(' );
- if( lPos <= 0 ){
- iErrorStop = 120;
- iRc = XB_INVALID_FIELD_LEN;
- throw iRc;
- }
- s.Ltrunc( lPos );
-
- lPos = s.Pos( ')' );
- if( lPos <= 0 ){
- iErrorStop = 130;
- iRc = XB_INVALID_FIELD_LEN;
- throw iRc;
- }
- sWork.Assign( s, 1, lPos - 1);
- sWork.Trim();
-
- if( iAttribCnt == 1 ){
- sAttrib1 = sWork;
- } else {
- lCmPos = sWork.Pos( ',' );
- if( lCmPos <= 0 ){
- iErrorStop = 140;
- iRc = XB_INVALID_FIELD_LEN;
- throw iRc;
- }
- sAttrib1.Assign( sWork, 1, lCmPos - 1);
- sAttrib1.Trim();
- sWork.Ltrunc( lCmPos );
- sAttrib2 = sWork;
- sAttrib2.Trim();
- }
- s.Ltrunc( lPos );
- }
-
- s.Ltrim();
- s.ZapLeadingChar( ',' );
- s.Ltrim();
-
- if( sDataType == "CHAR" ){
- iType = XB_CHAR_FLD;
- } else if( sDataType == "DECIMAL" ){
- xbInt32 lVal = atol( sAttrib1.Str()) + 1;
- sAttrib1.Sprintf( "%d", lVal );
- iType = XB_NUMERIC_FLD;
- } else if( sDataType == "SMALLINT" ){
- sAttrib1 = "6";
- iType = XB_NUMERIC_FLD;
- } else if( sDataType == "INTEGER" ){
- sAttrib1 = "11";
- iType = XB_NUMERIC_FLD;
- } else if( sDataType == "NUMERIC" ){
- iType = XB_NUMERIC_FLD;
- } else if( sDataType == "FLOAT" ) {
- iType = XB_FLOAT_FLD;
- } else if( sDataType == "DATE" ){
- iType = XB_DATE_FLD;
- sAttrib1 = "8";
- } else if( sDataType == "VARCHAR" ){
- iType = XB_MEMO_FLD;
- sAttrib1 = "10";
- } else if( sDataType == "LOGICAL" ){
- iType = XB_LOGICAL_FLD;
- sAttrib1 = "1";
- }
- sLlEntry.Sprintf( "%s,%s,%c,%s,%s", sFieldName.Str(), sDataType.Str(), iType, sAttrib1.Str(), sAttrib2.Str());
- ll.InsertAtEnd( sLlEntry );
-
- if( s.Len() == 0 )
- bDone = xbTrue;
- }
-
- schema = (xbSchema *) calloc( ll.GetNodeCnt()+1, sizeof( xbSchema ));
- xbLinkListNode<xbString> * llN = ll.GetHeadNode();
- xbUInt32 ulCnt = ll.GetNodeCnt();
-
- char *pTrg;
- for( xbUInt32 i = 0; i < ulCnt; i++ ){
- s = llN->GetKey();
- sFieldName.ExtractElement( s, ',', 1 , 0 );
- pTrg = schema[i].cFieldName;
- for( xbUInt32 j = 0; j < sFieldName.Len(); j++ )
- *pTrg++ = sFieldName[j+1];
- sDataType.ExtractElement( s, ',', 3, 0 );
- schema[i].cType = sDataType[1];
- sAttrib1.ExtractElement( s, ',', 4, 0 );
- schema[i].iFieldLen = atoi( sAttrib1.Str());
- sAttrib2.ExtractElement( s, ',', 5, 0 );
- schema[i].iNoOfDecs = atoi( sAttrib2.Str());
- llN = llN->GetNextNode();
- }
-
- // create the table
- xbDbf * dbf = NULL;
- #ifdef XB_DBF4_SUPPORT
- dbf = new xbDbf4( xbase );
- #elif defined (XB_DBF3_SUPPORT)
- dbf = new xbDbf3( xbase );
- #endif
- if(( iRc = dbf->CreateTable( sTableName, "", schema, 0, XB_MULTI_USER )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
-
- free( schema );
- ll.Clear();
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- if( sFieldName.Len() > 0 )
- sMsg.Sprintf( "xbSql::SqlCreateTbl() Exception Caught. Error Stop = [%d] rc = [%d] table = [%s] field = [%s]", iErrorStop, iRc, sTableName.Str(), sFieldName.Str() );
- else
- sMsg.Sprintf( "xbSql::SqlCreateTbl() Exception Caught. Error Stop = [%d] rc = [%d] table = [%s]", iErrorStop, iRc, sTableName.Str() );
-
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- if( schema ) free( schema );
- }
- return iRc;
-}
-
-/***********************************************************************/
-} /* namespace */
-#endif /* XB_SQL_SUPPORT */
-
diff --git a/src/sql/xbcrtbl.save.cpp b/src/sql/xbcrtbl.save.cpp
deleted file mode 100755
index 445ad56..0000000
--- a/src/sql/xbcrtbl.save.cpp
+++ /dev/null
@@ -1,256 +0,0 @@
-/* xbcrtbl.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2019,2022 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-#include "xbase.h"
-
-#ifdef XB_SQL_SUPPORT
-
-namespace xb{
-
-
-/***********************************************************************/
-xbInt16 xbSql::SqlCreateTable( const xbString &sCmdLine ){
-
-
- // std::cout << "CREATE TABLE " << sCmdLine << std::endl;
-
- // expected format:
- // CREATE TABLE tablename.dbf (Field1 CHAR(10), INTFLD1 INTEGER, ... )
-
- // supported field types
- //
- // SQL TYPE XBASE Field Type
- // -------- ----------------
- // SMALLINT NUMERIC(6,0)
- // INTEGER NUMERIC(11,0)
- // DECIMAL(x,y) NUMERIC(x+1,y)
- // NUMERIC(x,y) NUMERIC(x,y)
- // FLOAT(x,y) FLOAT(x,y)
- // CHAR(n) CHARACTER(n)
- // DATE DATE
- // VARCHAR MEMO
- // LOGICAL LOGICAL
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
- xbString sTableName;
- xbString sFieldName;
- xbString sDataType;
- xbString sAttrib1;
- xbString sAttrib2;
- xbString sLlEntry;
- xbInt16 iType = 0;
- xbInt16 iAttribCnt; // number of attributes for a given data type
- xbString s;
- xbUInt32 lPos = 0;
- xbUInt32 lSpPos = 0; // space position
- xbUInt32 lCmPos = 0; // comma position
- xbUInt32 lLpPos = 0; // left paren position
- xbLinkList<xbString> ll;
- xbSchema *schema = NULL;
- xbString sMsg;
-
- try{
- // retrieve table name
- s.ExtractElement( sCmdLine, '(', 1, 0 );
- sTableName.ExtractElement( s, ' ', 3, 0 );
- sTableName.Trim();
-
- // std::cout << "Tablename = [" << sTableName << "]\n";
-
-
- // determine if it already exists
- xbFile f( xbase );
- f.SetFileName( sTableName );
- if( f.FileExists() ){
- iErrorStop = 100;
- iRc = XB_FILE_EXISTS;
- throw iRc;
- }
-
- // build out table structure with parms from the sql string
- lPos = sCmdLine.Pos( '(' );
- s = sCmdLine;
- s.Ltrunc( lPos );
- s.Trim();
-
- // remove the last byte, should be a )
- s.Remove( s.Len(), 1 );
-
- s.Trim();
- //std::cout << "s = [" << s << "]\n";
-
-
- xbBool bDone = xbFalse;
- xbInt16 iLoop = 0;
- while( !bDone && iLoop++ < 255 ){
- sFieldName.ExtractElement( s, ' ', 1 , 0 );
- lPos = sFieldName.Len();
- sFieldName.Trim();
- if( sFieldName.Len() > 10 )
- sFieldName.Mid( 1, 10 ); // shrink to 10 buytes if too big
-
- //std::cout << "field name=[" << sFieldName << "]\n";
- s.Ltrunc( lPos + 1 );
- s.Ltrim();
- //std::cout << "remainder after field name removed = [" << s << "]\n";
-
- // Data type is delimited with either a space, comma or left paren
- lPos = 9999999;
- lSpPos = s.Pos( ' ' );
- lCmPos = s.Pos( ',' );
- lLpPos = s.Pos( '(' );
- if( lSpPos != 0 ) lPos = lSpPos;
- if( lCmPos != 0 && lCmPos < lPos ) lPos = lCmPos;
- if( lLpPos != 0 && lLpPos < lPos ) lPos = lLpPos;
-
- //sMsg.Sprintf( "SpPos=[%d] CmPos=[%d] LpPos=[%d] lPos=[%d]", lSpPos, lCmPos, lLpPos, lPos );
- //std::cout << sMsg << "\n";
-
- sDataType.Assign( s, 1, lPos-1 );
-
- //std::cout << "DataType=[" << sDataType << "]\n";
- if( sDataType == "CHAR" )
- iAttribCnt = 1;
- else if( sDataType == "DECIMAL" || sDataType == "NUMERIC" || sDataType == "FLOAT" )
- iAttribCnt = 2;
- else if( sDataType == "SMALLINT" || sDataType == "INTEGER" || sDataType == "DATE" || sDataType == "VARCHAR" || sDataType == "LOGICAL" )
- iAttribCnt = 0;
- else{
- iErrorStop = 110;
- iRc = XB_INVALID_FIELD_TYPE;
- throw iRc;
- }
-
- sAttrib1 = "";
- sAttrib2 = "0";
-
- if( iAttribCnt == 0 ){
- s.Ltrunc( sDataType.Len());
-
- } else if( iAttribCnt > 0 ){
- lPos = s.Pos( '(' );
- if( lPos <= 0 ){
- iErrorStop = 110;
- iRc = XB_INVALID_FIELD_LEN;
- throw iRc;
- }
- s.Ltrunc( lPos );
- if( iAttribCnt == 1 )
- lPos = s.Pos( ')' );
- else
- lPos = s.Pos( ',' );
-
- sAttrib1.Assign( s, 1, lPos-1 );
- sAttrib1.Trim();
- s.Ltrunc( lPos );
-
- if( iAttribCnt > 1 ){
- lPos = s.Pos( ')' );
- sAttrib2.Assign( s, 1, lPos-1 );
- s.Ltrunc( lPos );
- }
- }
-
- s.Ltrim();
- s.ZapLeadingChar( ',' );
- s.Ltrim();
-
- if( sDataType == "CHAR" ){
- iType = XB_CHAR_FLD;
- } else if( sDataType == "DECIMAL" ){
- xbInt32 lVal = atol( sAttrib1.Str()) + 1;
- sAttrib1.Sprintf( "%d", lVal );
- iType = XB_NUMERIC_FLD;
- } else if( sDataType == "SMALLINT" ){
- sAttrib1 = "6";
- iType = XB_NUMERIC_FLD;
- } else if( sDataType == "INTEGER" ){
- sAttrib1 = "11";
- iType = XB_NUMERIC_FLD;
- } else if( sDataType == "NUMERIC" ){
- iType = XB_NUMERIC_FLD;
- } else if( sDataType == "FLOAT" ) {
- iType = XB_FLOAT_FLD;
- } else if( sDataType == "DATE" ){
- iType = XB_DATE_FLD;
- sAttrib1 = "8";
- } else if( sDataType == "VARCHAR" ){
- iType = XB_MEMO_FLD;
- sAttrib1 = "10";
- } else if( sDataType == "LOGICAL" ){
- iType = XB_LOGICAL_FLD;
- sAttrib1 = "1";
- }
- sLlEntry.Sprintf( "%s,%s,%c,%s,%s", sFieldName.Str(), sDataType.Str(), iType, sAttrib1.Str(), sAttrib2.Str());
- ll.InsertAtEnd( sLlEntry );
-
- if( s.Len() == 0 )
- bDone = xbTrue;
- }
-
- schema = (xbSchema *) calloc( ll.GetNodeCnt()+1, sizeof( xbSchema ));
- xbLinkListNode<xbString> * llN = ll.GetHeadNode();
- xbUInt32 ulCnt = ll.GetNodeCnt();
-
- char *pTrg;
- for( xbUInt32 i = 0; i < ulCnt; i++ ){
- s = llN->GetKey();
- sFieldName.ExtractElement( s, ',', 1 , 0 );
- pTrg = schema[i].cFieldName;
- for( xbUInt32 j = 0; j < sFieldName.Len(); j++ )
- *pTrg++ = sFieldName[j+1];
- sDataType.ExtractElement( s, ',', 3, 0 );
- schema[i].cType = sDataType[1];
- sAttrib1.ExtractElement( s, ',', 4, 0 );
- schema[i].iFieldLen = atoi( sAttrib1.Str());
- sAttrib2.ExtractElement( s, ',', 5, 0 );
- schema[i].iNoOfDecs = atoi( sAttrib2.Str());
- llN = llN->GetNextNode();
- }
-
- // create the table
- xbDbf * dbf = NULL;
- #ifdef XB_DBF4_SUPPORT
- dbf = new xbDbf4( xbase );
- #elif defined (XB_DBF3_SUPPORT)
- dbf = new xbDbf3( xbase );
- #endif
- if(( iRc = dbf->CreateTable( sTableName, "", schema, 0, XB_MULTI_USER )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
-
- free( schema );
- ll.Clear();
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- if( sFieldName.Len() > 0 )
- sMsg.Sprintf( "xbSql::SqlCreateTbl() Exception Caught. Error Stop = [%d] rc = [%d] table = [%s] field = [%s]", iErrorStop, iRc, sTableName.Str(), sFieldName.Str() );
- else
- sMsg.Sprintf( "xbSql::SqlCreateTbl() Exception Caught. Error Stop = [%d] rc = [%d] table = [%s]", iErrorStop, iRc, sTableName.Str() );
-
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- if( schema ) free( schema );
- }
- return iRc;
-}
-
-/***********************************************************************/
-} /* namespace */
-#endif /* XB_SQL_SUPPORT */
-
diff --git a/src/sql/xbdelete.cpp b/src/sql/xbdelete.cpp
deleted file mode 100755
index 82b4937..0000000
--- a/src/sql/xbdelete.cpp
+++ /dev/null
@@ -1,148 +0,0 @@
-/* xbdelete.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-#include "xbase.h"
-
-#ifdef XB_SQL_SUPPORT
-
-namespace xb{
-
-
-/***********************************************************************/
-xbInt16 xbSql::SqlDelete( const xbString &sCmdLine ){
-
- // expected format:
- // DELETE FROM tablename.DBF [WHERE expression]
-
-
- xbInt16 iRc = 0;
- xbInt16 iRc2 = 0;
- xbInt16 iErrorStop = 0;
- xbString sTableName = "";
- xbUInt32 ulPos = 0;
- xbString sCmd = sCmdLine;
- xbString sNode = "";
- xbString sFilter;
- xbInt16 iDelOpt = 0;
-
- xbString sTable;
- xbDbf * dbf = NULL;
-
- try{
-
-// std::cout << "xbSql::SqlDelete( " << sCmdLine.Str() << " )\n";
-
- sNode.ExtractElement( sCmd, ' ', 1, 0 );
- sNode.Trim();
- sNode.ToUpperCase();
- if( sNode == "UNDELETE" )
- iDelOpt = 1;
-
- // pull off the action
- sNode.ExtractElement( sCmd, ' ', 2, 0 );
- sNode.Trim();
- sNode.ToUpperCase();
- if( sNode != "FROM" ){
- iErrorStop = 100;
- iRc = XB_SYNTAX_ERROR;
- throw iRc;
- }
-
- // pull off the table name
- sTable.ExtractElement( sCmd, ' ', 3, 0 );
- sTable.Trim();
-
- // pull off the "WHERE" statement if it exists
- sNode.ExtractElement( sCmd, ' ', 4, 0 );
- sNode.Trim();
- sNode.ToUpperCase();
- if( sNode == "WHERE" ){
- ulPos = sCmd.Pos( "WHERE" );
- sFilter = sCmd;
- sFilter.Ltrunc( ulPos + 5 );
- }
-
- // if not open, attempt to open it
- dbf = xbase->GetDbfPtr( sTable );
- if( !dbf ){
- if(( iRc = xbase->OpenHighestVersion( sTable, "", &dbf )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- }
- if( !dbf ){
- iErrorStop = 120;
- iRc = XB_DBF_FILE_NOT_OPEN;
- throw iRc;
- }
-
- if( sFilter == "" ){
- if(( iRc = dbf->DeleteAll( iDelOpt )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- } else {
-
- xbFilter f( dbf );
- if(( iRc = f.Set( sFilter )) != XB_NO_ERROR ){
- iErrorStop = 150;
- throw iRc;
- }
-
- iRc2 = f.GetFirstRecord( XB_ALL_RECS );
- while( iRc2 == XB_NO_ERROR ){
- if( iDelOpt == 0 ){
- if( !dbf->RecordDeleted()){
- if(( iRc = dbf->DeleteRecord()) != XB_NO_ERROR ){
- iErrorStop = 160;
- throw iRc;
- }
- if(( iRc = dbf->Commit()) != XB_NO_ERROR ){
- iErrorStop = 170;
- throw iRc;
- }
- }
-
- } else { // undelete
- if( dbf->RecordDeleted()){
- if(( iRc = dbf->UndeleteRecord()) != XB_NO_ERROR ){
- iErrorStop = 180;
- throw iRc;
- }
- if(( iRc = dbf->Commit()) != XB_NO_ERROR ){
- iErrorStop = 190;
- throw iRc;
- }
- }
- }
- iRc2 = f.GetNextRecord();
- }
- }
- }
-
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbSql::SqlDropTable() Exception Caught. Error Stop = [%d] rc = [%d] table = [%s]", iErrorStop, iRc, sTableName.Str() );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
-
- return iRc;
-}
-
-/***********************************************************************/
-} /* namespace */
-#endif /* XB_SQL_SUPPORT */
-
diff --git a/src/sql/xbdrptbl.cpp b/src/sql/xbdrptbl.cpp
deleted file mode 100755
index b03ee8f..0000000
--- a/src/sql/xbdrptbl.cpp
+++ /dev/null
@@ -1,124 +0,0 @@
-/* xbdrptbl.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-#include "xbase.h"
-
-#ifdef XB_SQL_SUPPORT
-
-namespace xb{
-
-
-/***********************************************************************/
-xbInt16 xbSql::SqlDropTable( const xbString &sCmdLine ){
-
- // std::cout << "DROP TABLE [" << sCmdLine << "]\n";
- // expected format:
- // DROP TABLE [IF EXISTS] tablename.dbf
-
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
- xbString sTableName = "";
- xbUInt32 ulPos = 0;
- xbString sCmd = sCmdLine;
- xbString sNode = "";
- xbBool bIfExists = xbFalse;
- xbDbf * dbf = NULL;
-
- try{
-
- // drop off the first node "DROP"
- ulPos = sCmd.Pos( ' ' );
- sCmd.Ltrunc( ulPos );
- sCmd.Ltrim();
-
- // drop off the second node "TABLE"
- ulPos = sCmd.Pos( ' ' );
- sCmd.Ltrunc( ulPos );
- sCmd.Ltrim();
-
- sNode.ExtractElement( sCmd, ' ', 1, 0 );
- sNode.Trim();
- sNode.ToUpperCase();
-
- if( sNode == "IF" ){
- ulPos = sCmd.Pos( ' ' );
- sCmd.Ltrunc( ulPos );
- sCmd.Ltrim();
- sNode.ExtractElement( sCmd, ' ', 1, 0 );
- sNode.Trim();
- sNode.ToUpperCase();
- if( sNode != "EXISTS" ){
- iErrorStop = 100;
- iRc = XB_SYNTAX_ERROR;
- throw iRc;
- } else {
- ulPos = sCmd.Pos( ' ' );
- sCmd.Ltrunc( ulPos );
- sCmd.Ltrim();
- bIfExists = xbTrue;
- }
- }
-
- // get the table name
- sTableName.ExtractElement( sCmd, ' ', 1, 0 );
- sTableName.Trim();
-
- xbFile fDbf( xbase );
- fDbf.SetFileName( sTableName );
-
- if( bIfExists && ! fDbf.FileExists())
- return XB_NO_ERROR;
-
- // if not open, attempt to open it
- dbf = xbase->GetDbfPtr( fDbf.GetFqFileName());
-
- if( !dbf ){
- dbf = xbase->Open( sTableName, iRc );
- if( iRc != XB_NO_ERROR ){
- if( iRc == XB_FILE_NOT_FOUND && bIfExists ){
- return XB_NO_ERROR;
- } else {
- iErrorStop = 110;
- throw iRc;
- }
- }
- }
- if( dbf == NULL ){
- iErrorStop = 120;
- iRc = XB_OPEN_ERROR;
- throw iRc;
- }
-
- if(( dbf->DeleteTable()) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
- }
-
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbSql::SqlDropTable() Exception Caught. Error Stop = [%d] rc = [%d] table = [%s]", iErrorStop, iRc, sTableName.Str() );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
-
- return iRc;
-}
-
-/***********************************************************************/
-} /* namespace */
-#endif /* XB_SQL_SUPPORT */
-
diff --git a/src/tests/tstfuncs.cpp b/src/tests/tstfuncs.cpp
deleted file mode 100755
index d9b108d..0000000
--- a/src/tests/tstfuncs.cpp
+++ /dev/null
@@ -1,583 +0,0 @@
-/* tstfuncs.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-time_t timer;
-
-xbDouble ChronTime();
-void InitTime();
-
-xbBool dblEquals( xbDouble a, xbDouble b, xbDouble epsilon );
-xbInt16 TestMethod( xbInt16 PrintOption, const char * title, const xbString &result, const char * expectedResult, size_t expectedLen );
-xbInt16 TestMethod( xbInt16 PrintOption, const char * title, char result, char expectedResult );
-xbInt16 TestMethod( xbInt16 PrintOption, const char * title, xbInt32 result, xbInt32 expectedResult );
-//xbInt16 TestMethod( xbInt16 PrintOption, const char * title, xbUInt32 result, xbUInt32 expectedResult );
-xbInt16 TestMethod( xbInt16 PrintOption, const char * title, xbUInt64 result, xbUInt64 expectedResult );
-xbInt16 TestMethod( xbInt16 PrintOption, const char * title, xbFloat result, xbFloat expectedResult );
-xbInt16 TestMethod( xbInt16 PrintOption, const char * title, xbDouble result, xbDouble expectedResult );
-xbInt16 TestMethod( xbInt16 PrintOption, const char * title, xbDouble result, xbDouble expectedResult, xbDouble dEpsilon );
-
-
-// xbInt16 FileCompare( xbXBase &x, xbInt16 iPo, const xbString &sFile1, const xbString &sFile2, const xbString &sSkipBytes );
-
-
-#ifdef XB_LOCKING_SUPORT
-xbInt16 SetCmd( xbXBase &x, const xbString &sFileName, const xbString &sCmd, const char cSrc, xbInt16 iPo );
-xbInt16 GetCmd( xbXBase &x, const xbString &sFileName, xbString &sCmd, const char cSrc, xbInt16 iPo );
-#endif
-
-#if defined( XB_DBF4_SUPPORT ) && defined( XB_MEMO_SUPPORT )
-
-xbInt16 TestDbt4Method( xbInt16 PrintOption, const char * title, xbMemo * m, xbUInt32 ulHdrNext, xbUInt32 ulBlockCnt, xbString sNodeChain );
-xbInt16 TestDbt4Method( xbInt16 PrintOption, const char * title, xbMemo * m, xbUInt32 ulHdrNext, xbUInt32 ulBlockCnt, xbString sNodeChain ){
-
- xbUInt32 ulLastDataBlock = 0L;
- xbUInt32 ulHdrNextBlock = 0L;
- xbInt16 iRc = 0;
-
- iRc = m->GetHdrNextBlock( ulHdrNextBlock );
- if( iRc != XB_NO_ERROR ){
- std::cout << std::endl << "[FAIL 1] " << title << std::endl;
- std::cout << "Error [" << iRc << "] in GetHdrNextBlock" << std::endl;
- return -1;
- }
-
- iRc = m->CalcLastDataBlock( ulLastDataBlock );
- if( iRc != XB_NO_ERROR ){
- std::cout << std::endl << "[FAIL 2] " << title << std::endl;
- std::cout << "Error [" << iRc << "] in CalcLastDataBlock" << std::endl;
- return -1;
- }
-
- if( ulHdrNext > 0 ){
- if( ulHdrNextBlock != ulHdrNext ){
- std::cout << std::endl << "[FAIL 3] " << title << std::endl;
- std::cout << "Expected Header Next Block = [" << ulHdrNext << "] Actual = [" << ulHdrNextBlock << "]" << std::endl;
- return -1;
- }
- if( PrintOption == 2 ){
- xbString sMsg;
- sMsg.Sprintf( "[PASS][%3.4f] %s Expected matches actual Len=[%ld] Data=[%lds]\n",
- ChronTime(), title, ulHdrNextBlock, ulHdrNext );
- std::cout << sMsg.Str();
- // std::cout << "[PASS][" << ChronTime() << "] " << title << " Expected matches actual HdrBlock=[" << ulHdrNextBlock << "] Data=[" << ulHdrNext << "]" << std::endl;
- } else if( PrintOption == 1 )
- std::cout << "[PASS] " << title << std::endl;
- }
-
- if( ulBlockCnt > 0 ){
- if( ulLastDataBlock != ulBlockCnt ){
- std::cout << std::endl << "[FAIL 4] " << title << std::endl;
- std::cout << "Expected Block Count = [" << ulBlockCnt << "] Actual = [" << ulLastDataBlock << "]" << std::endl;
- return -1;
- }
- if( PrintOption == 2 ){
- xbString sMsg;
- sMsg.Sprintf( "[PASS][%3.4f] %s Expected matches actual Len=[%ld] Data=[%lds]\n",
- ChronTime(), title, ulLastDataBlock, ulBlockCnt );
- std::cout << sMsg.Str();
- // std::cout << "[PASS][" << ChronTime() << "] " << title << " Expected matches actual LastBlock=[" << ulLastDataBlock << "] Data=[" << ulBlockCnt << "]" << std::endl;
- } else if( PrintOption == 1 )
- std::cout << "[PASS] " << title << std::endl;
- }
-
- #ifdef XB_DEBUG_SUPPORT
- xbMemoDbt4 *m4 = (xbMemoDbt4 *) m;
- if( sNodeChain != "-1" ){
- xbUInt32 ulNode = ulHdrNextBlock;
- xbUInt32 ulNextBlock;
- xbUInt32 ulFreeBlockCnt;
- xbString sActualNodeChain;
-
- while( ulNode < ulLastDataBlock ){
- iRc = m4->ReadFreeBlockHeader( ulNode, ulNextBlock, ulFreeBlockCnt );
- if( iRc != XB_NO_ERROR ){
- std::cout << std::endl << "[FAIL 5] " << title << std::endl;
- std::cout << "Error [" << iRc << "] in CalcLastDataBlock" << std::endl;
- return -1;
- }
- if( sActualNodeChain != "" )
- sActualNodeChain += ",";
- sActualNodeChain.Sprintf( "%s%ld,%ld,%ld", sActualNodeChain.Str(), ulNode, ulFreeBlockCnt, ulNextBlock );
- ulNode = ulNextBlock;
- }
- if( sNodeChain != sActualNodeChain ){
- std::cout << std::endl << "[FAIL 6] " << title << std::endl;
- std::cout << "Expected Block Chain = [" << sNodeChain.Str() << "] Actual = [" << sActualNodeChain.Str() << "]" << std::endl;
- return -1;
- }
- if( PrintOption == 2 ){
- xbString sMsg;
- sMsg.Sprintf( "[PASS][%3.4f] %s Expected matches actual Len=[%d] Data=[%s]\n", ChronTime(), title, sNodeChain.Str() );
- std::cout << sMsg.Str();
- //std::cout << "[PASS][" << ChronTime() << "] " << title << " Expected matches actual BlockChain=[" << sNodeChain.Str() << "]" << std::endl;
- } else if( PrintOption == 1 )
- std::cout << "[PASS] " << title << std::endl;
- }
- #endif // XB_DEBUG_SUPPORT"
-
- return 0;
-}
-#endif
-
-
-
-xbInt16 TestMethod( xbInt16 PrintOption, const char * title, const xbString &sResult, const char * expectedResult, size_t expectedLen ){
- xbInt16 rc = 0;
-
- if( sResult == expectedResult && sResult.Len() == expectedLen ){
- if( PrintOption == 2 ){
- xbString sMsg;
- sMsg.Sprintf( "[PASS][%3.4f] %s Expected matches actual Len=[%d] Data=[%s]\n", ChronTime(), title, expectedLen, expectedResult );
- std::cout << sMsg.Str();
- } else if( PrintOption == 1 ) {
- std::cout << "[PASS] " << title << std::endl;
- }
- } else {
- std::cout << std::endl << "[FAIL 1] " << title << std::endl;
- std::cout << " Expected Len = [" << expectedLen << "] Expected Data = [" << expectedResult << "]" << std::endl;
- std::cout << " Actual Len = [" << sResult.Len() << "] Actual Data = [" << sResult.Str() << "]" << std::endl;
-
- if( sResult.Len() == expectedLen )
- printf( "lengths match\n" );
- else
- printf( "lengths dont match\n" );
-
- if( sResult == expectedResult )
- printf( "result matches\n" );
- else
- printf( "result does not match\n" );
-
- rc = -1;
- }
- return rc;
-}
-
-xbInt16 TestMethod( xbInt16 PrintOption, const char * title, char result, char expectedResult ){
- xbInt16 rc = 0;
- if( result == expectedResult ){
- if( PrintOption == 2 ){
- xbString sMsg;
- sMsg.Sprintf( "[PASS][%3.4f] %s Expected matches actual Data=[%c]\n", ChronTime(), title, expectedResult );
- std::cout << sMsg.Str();
- // std::cout << "[PASS][" << ChronTime() << "] " << title << " Expected matches actual Data=[" << expectedResult << "]" << std::endl;
- } else if( PrintOption == 1 )
- std::cout << "[PASS] " << title << std::endl;
- rc = 0;
- } else {
- std::cout << std::endl << "[FAIL 2] " << title << std::endl;
- std::cout << " Expected Data = [" << expectedResult << "]" << std::endl;
- std::cout << " Actual Data = [" << result << "]" << std::endl;
- rc = -1;
- }
- return rc;
-}
-
-xbInt16 TestMethod( xbInt16 PrintOption, const char * title, xbInt32 result, xbInt32 expectedResult ){
- xbInt16 rc = 0;
- if( result == expectedResult ){
- if( PrintOption == 2 ){
- xbString sMsg;
- sMsg.Sprintf( "[PASS][%3.4f] %s Expected matches actual Data=[%d]\n", ChronTime(), title, expectedResult );
- std::cout << sMsg.Str();
- // std::cout << "[PASS][" << ChronTime() << "] " << title << " Expected matches actual Data=[" << expectedResult << "]" << std::endl;
- } else if( PrintOption == 1 )
- std::cout << "[PASS] " << title << std::endl;
- rc = 0;
- } else {
- std::cout << std::endl << "[FAIL 3] " << title << std::endl;
- std::cout << " Expected Data = [" << expectedResult << "]" << std::endl;
- std::cout << " Actual Data = [" << result << "]" << std::endl;
- rc = -1;
- }
- return rc;
-}
-
-
-/*
-xbInt16 TestMethod( xbInt16 PrintOption, const char * title, xbUInt32 result, xbUInt32 expectedResult ){
- xbInt16 rc = 0;
- if( result == expectedResult ){
- if( PrintOption == 2 )
- std::cout << "[PASS][" << ChronTime() << "] " << title << " Expected matches actual Data=[" << expectedResult << "]" << std::endl;
- else if( PrintOption == 1 )
- std::cout << "[PASS] " << title << std::endl;
- rc = 0;
- } else {
- std::cout << std::endl << "[FAIL 3] " << title << std::endl;
- std::cout << " Expected Data = [" << expectedResult << "]" << std::endl;
- std::cout << " Actual Data = [" << result << "]" << std::endl;
- rc = -1;
- }
- return rc;
-}
-*/
-
-xbInt16 TestMethod( xbInt16 PrintOption, const char * title, xbUInt64 result, xbUInt64 expectedResult ){
- xbInt16 rc = 0;
- if( result == expectedResult ){
- if( PrintOption == 2 ){
- xbString sMsg;
- sMsg.Sprintf( "[PASS][%f] %3.4s Expected matches actual Data=[%ld]\n", ChronTime(), title, expectedResult );
- std::cout << sMsg.Str();
- // std::cout << "[PASS][" << ChronTime() << "] " << title << " Expected matches actual Data=[" << expectedResult << "]" << std::endl;
- } else if( PrintOption == 1 )
- std::cout << "[PASS] " << title << std::endl;
- rc = 0;
- } else {
- std::cout << std::endl << "[FAIL 4] " << title << std::endl;
- std::cout << " Expected Data = [" << expectedResult << "]" << std::endl;
- std::cout << " Actual Data = [" << result << "]" << std::endl;
- rc = -1;
- }
- return rc;
-}
-
-xbInt16 TestMethod( xbInt16 PrintOption, const char * title, xbFloat result, xbFloat expectedResult ){
- xbInt16 rc = 0;
- if( result == expectedResult ){
- if( PrintOption == 2 ){
- xbString sMsg;
- sMsg.Sprintf( "[PASS][%f] %3.4s Expected matches actual Data=[%f]\n", ChronTime(), title, expectedResult );
- std::cout << sMsg.Str();
- // std::cout << "[PASS][" << ChronTime() << "] " << title << " Expected matches actual Data=[" << expectedResult << "]" << std::endl;
- } else if( PrintOption == 1 )
- std::cout << "[PASS] " << title << std::endl;
- rc = 0;
- } else {
- std::cout << std::endl << "[FAIL 5] " << title << std::endl;
- std::cout << " Expected Data = [" << expectedResult << "]" << std::endl;
- std::cout << " Actual Data = [" << result << "]" << std::endl;
- rc = -1;
- }
- return rc;
-}
-
-xbInt16 TestMethod( xbInt16 PrintOption, const char * title, xbDouble result, xbDouble expectedResult ){
- xbInt16 rc = 0;
- if( result == expectedResult ){
- // if( dblEquals( result, expectedResult ) == 0 ){
- if( PrintOption == 2 ){
- xbString sMsg;
- sMsg.Sprintf( "[PASS][%3.4f] %s Expected matches actual Data=[%f]\n", ChronTime(), title, expectedResult );
- std::cout << sMsg.Str();
- //std::cout << "[PASS][" << ChronTime() << "] " << title << " Expected matches actual Data=[" << expectedResult << "]" << std::endl;
- } else if( PrintOption == 1 )
- std::cout << "[PASS] " << title << std::endl;
- rc = 0;
- } else {
- std::cout << std::endl << "[FAIL 6] " << title << std::endl;
- std::cout << " Expected Data = [" << expectedResult << "]" << std::endl;
- std::cout << " Actual Data = [" << result << "]" << std::endl;
- rc = -1;
- }
- return rc;
-}
-
-
-// next three routines used to do a compare on double values
-xbDouble dblMax( xbDouble a, xbDouble b ){
- if( a > b )
- return a;
- else
- return b;
-}
-xbDouble dblMin( xbDouble a, xbDouble b ){
- if( a < b )
- return a;
- else
- return b;
-}
-xbBool dblEquals( xbDouble a, xbDouble b, xbDouble epsilon = 0.0001 ){
-
- // std::cout << "a=[" << a << "] b=[ " << b << "] dblmax [" << dblAbsMax( a, b ) << "] min [" << dblAbsMin( a, b ) << "]\n";
- if( a < 0 && b >= 0 )
- return xbFalse;
- else if( a >= 0 && b < 0 )
- return xbFalse;
- if( (dblMax( a ,b ) - dblMin( a, b )) < epsilon )
- return xbTrue;
- else
- {
-// std::cout << "no match a=[" << a << "] b=[" << b << "] dblmax [" << dblAbsMax( a, b ) << "] min [" << dblAbsMin( a, b ) << "]\n";
- return xbFalse;
- }
-}
-
-xbInt16 TestMethod( xbInt16 PrintOption, const char * title, xbDouble result, xbDouble expectedResult, xbDouble dEpsilon ){
- xbInt16 rc;
- if( dblEquals( result, expectedResult, dEpsilon ) == xbTrue ){
- if( PrintOption == 2 ){
- xbString sMsg;
- sMsg.Sprintf( "[PASS][%3.4f] %s Expected matches actual Data=[%f]\n", ChronTime(), title, expectedResult );
- std::cout << sMsg.Str();
- //std::cout << "[PASS][" << ChronTime() << "] " << title << " Expected matches actual Data=[" << expectedResult << "]" << std::endl;
- } else if( PrintOption == 1 )
- std::cout << "[PASS] " << title << std::endl;
- rc = 0;
- } else {
- std::cout << std::endl << "[FAIL 6] " << title << std::endl;
- std::cout << " Expected Data = [" << expectedResult << "]" << std::endl;
- std::cout << " Actual Data = [" << result << "]" << std::endl;
- rc = -1;
- }
- return rc;
-}
-
-
-#ifdef XB_LOCKING_SUPPORT
-
-xbInt16 GetCmd( xbXBase &x, const xbString &sFileName, xbString &sCmd, const char cSrc, xbInt16 iPo ){
- xbInt16 iTryCnt = 0;
- xbInt16 iMaxTries = 10;
- char cInBuf[256];
- FILE *f;
- xbBool bDone = xbFalse;
- xbString sMsg;
-
- while( !bDone && iTryCnt < iMaxTries ){
-
- #ifdef HAVE__FSOPEN_F
- // 0x40 is SH_DENYNO or _SH_DENYNO
- if(( f = _fsopen( sFileName.Str(), "r", 0x40 )) == NULL){
- sMsg.Sprintf( "GetCmd _fsopen() error opening [%s]", sFileName.Str() );
- x.WriteLogMessage( sMsg );
- std::cout << sMsg.Str() << "\n";
- x.xbSleep( 250 );
- iTryCnt++;
- }
-
- #else
-
- if(( f = fopen( sFileName.Str(), "r" )) == NULL ){
- sMsg.Sprintf( "GetCmd fopen() error opening [%s]", sFileName.Str() );
- x.WriteLogMessage( sMsg );
- std::cout << sMsg.Str() << "\n";
- x.xbSleep( 250 );
- iTryCnt++;
- }
- #endif
-
- else {
- memset( cInBuf, 0x00, 256 );
- fgets( cInBuf, 256, f );
- fclose( f );
- sCmd = cInBuf;
- if( sCmd != "" )
- bDone = xbTrue;
- else{
- x.xbSleep( 250 );
- }
- }
- }
-
- #ifdef XB_LOGGING_SUPPORT
- if( iPo > 0 ){
- sMsg.Sprintf( "[%c] GetCmd [%s]", cSrc, sCmd.Str());
- x.WriteLogMessage( sMsg );
- x.FlushLog();
- }
- #endif
-
- if( iTryCnt >= iMaxTries )
- return -1;
- else
- return 0;
-}
-
-xbInt16 SetCmd( xbXBase &x, const xbString &sFileName, const xbString &sCmd, const char cSrc, xbInt16 iPo ){
-
- xbInt16 iTryCnt = 0;
- FILE *f;
- xbBool bDone = xbFalse;
-
- #ifdef XB_LOGGING_SUPPORT
- if( iPo > 0 ){
- xbString sMsg;
- sMsg.Sprintf( "[%c] SetCmd [%s] FileName [%s]", cSrc, sCmd.Str(), sFileName.Str());
- x.WriteLogMessage( sMsg );
- x.FlushLog();
- }
- #endif
-
- while( !bDone && iTryCnt < 10 ){
-
- #ifdef HAVE__FSOPEN_F
- // 0x40 is SH_DENYNO or _SH_DENYNO
- if(( f = _fsopen( sFileName.Str(), "r", 0x40 )) == NULL){
- x.xbSleep( 250 );
- iTryCnt++;
- }
-
- #else
- if(( f = fopen( sFileName.Str(), "w" )) == NULL ){
- x.xbSleep( 250 );
- iTryCnt++;
- }
- #endif
-
- else {
- fputs( sCmd.Str(), f );
- fflush( f );
- fclose( f );
- bDone = xbTrue;
- }
- }
- if( iTryCnt == 10 )
- return -1;
- else{
- x.xbSleep( 250 );
- return 0;
- }
-}
-
-
-
-#endif
-void InitTime(){
- time( &timer );
-}
-
-
-xbDouble ChronTime(){
- time_t tWork = timer;
- time( &timer );
- return difftime( timer, tWork );
-
-}
-
-
-/*
-xbInt16 FileCompare( xbXBase &x, xbInt16 iPo, const xbString &sFile1, const xbString &sFile2, const xbString &sSkipBytes ){
-
-
-// iPo print option
-// sFile1 - File 1
-// sFile2 - File 2
-// sSkipBytes - comma separated list of bytes to skip the compare on
-
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
- xbInt16 iErrorCnt = 0;
- xbFile f1( &x );
- xbFile f2( &x );
- xbString sMsg;
- char c1;
- char c2;
-
- if( iPo > 0 ){
- std::cout << "FileCompare\n";
- std::cout << "Skip bytes = " << sSkipBytes.Str() << std::endl;
- std::cout << sFile1.Str() << std::endl;
- std::cout << sFile2.Str() << std::endl;
- }
-
- xbLinkListOrd<xbInt32> llO;
- llO.SetDupKeys( 0 );
- if( sSkipBytes.Len() > 0 ){
- xbString sNode;
- xbUInt32 iCommaCnt = sSkipBytes.CountChar( ',' );
- for( xbUInt32 i = 0; i < (iCommaCnt+1); i++ ){
- sNode.ExtractElement( sSkipBytes, ',', i+1, 0 );
- //std::cout << "Adding key = " << atol( sNode.Str()) << std::endl;
- llO.InsertKey( atol( sNode.Str()));
- }
- }
-
- xbInt32 iPos = 0;
- try{
-
- if(( iRc = f1.xbFopen( "r", sFile1, XB_SINGLE_USER )) != XB_NO_ERROR ){
- iErrorStop = 10;
- iErrorCnt++;
- throw iRc;
- }
-
- if(( iRc = f2.xbFopen( "r", sFile2, XB_SINGLE_USER )) != XB_NO_ERROR ){
- iErrorStop = 20;
- iErrorCnt++;
- throw iRc;
- }
-
- xbUInt64 uiFs1;
- xbUInt64 uiFs2;
-
- if(( iRc = f1.GetFileSize( uiFs1 )) != XB_NO_ERROR ){
- iErrorStop = 30;
- iErrorCnt++;
- throw iRc;
- }
-
- if(( iRc = f2.GetFileSize( uiFs2 )) != XB_NO_ERROR ){
- iErrorStop = 40;
- iErrorCnt++;
- throw iRc;
- }
-
- // std::cout << "file size " << uiFs1 << " " << uiFs2 << "\n";
-
- f1.xbRewind();
- f2.xbRewind();
-
- while( !f1.xbFeof() && !f2.xbFeof()){
- f1.xbFgetc( c1 );
- f2.xbFgetc( c2 );
- if( c1 != c2 ){
- if( !llO.KeyExists( iPos )){
- iErrorCnt++;
- if( iPo > 0 ){
- sMsg.Sprintf( "Diff %ld %x %x\n", iPos, c1, c2 );
- std::cout << sMsg.Str();
- }
- }
- }
- iPos++;
- }
- }
-
- catch( xbInt16 ){
- if( iPo > 0 ){
- std::cout << "File Compare Error Count = " << iErrorCnt << std::endl;
-
- switch( iErrorStop ){
- case 10:
- std::cout << "Error opening file = " << sFile1.Str() << std::endl;
- break;
- case 20:
- std::cout << "Error opening file = " << sFile2.Str() << std::endl;
- break;
- case 30:
- std::cout << "GetFileSize() error " << sFile1.Str() << std::endl;
- break;
- case 40:
- std::cout << "GetFileSize() error " << sFile2.Str() << std::endl;
- break;
- default:
- break;
- }
- }
- }
-
- if( f1.FileIsOpen() )
- f1.xbFclose();
- if( f1.FileIsOpen() )
- f1.xbFclose();
-
- return iRc;
-}
-*/
-
-
-
diff --git a/src/tests/xb_test_date.cpp b/src/tests/xb_test_date.cpp
deleted file mode 100755
index 7aee584..0000000
--- a/src/tests/xb_test_date.cpp
+++ /dev/null
@@ -1,190 +0,0 @@
-/* xb_test_date.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-// This program tests the date class xbDate
-
-// usage: xb_test_date QUITE|NORMAL|VERBOSE
-
-
-#include "xbase.h"
-
-using namespace xb;
-
-#include "tstfuncs.cpp"
-
-
-int main( int argCnt, char **av )
-{
- int iRc = 0;
- xbInt16 po = 1; /* print option */
- /* 0 - QUIET */
- /* 1 - NORMAL */
- /* 2 - VERBOSE */
-
- if( argCnt > 1 ) {
- if( av[1][0] == 'Q' )
- po = 0;
- else if( av[1][0] == 'V' )
- po = 2;
- }
-
- xbXBase x;
- #ifdef XB_LOGGING_SUPPORT
- x.SetLogDirectory( PROJECT_LOG_DIR );
- x.EnableMsgLogging();
- if( po ){
- std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
- }
- xbString sMsg;
- sMsg.Sprintf( "Program [%s] initializing...", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
- InitTime();
-
- xbDate d1;
-#ifdef XB_DEBUG_SUPPORT
- if( po > 0 )
- d1.DumpDateTables();
-#endif
-
- xbDate d2( "19890209" );
- xbString s3 = "20120709";
- xbDate d3( s3 );
- xbString s4;
- xbString sFmt = "";
- xbString sOutDate;
- xbString s;
-
- iRc += TestMethod( po, "FormatDate( '', sOutDate ) (sys default format)", d3.FormatDate( sFmt, sOutDate ), 0 );
- iRc += TestMethod( po, "FormatDate( '', sOutDate ) (sys default format)", sOutDate, "07/09/12", 8 );
- iRc += TestMethod( po, "CenturyOf()" , d3.CenturyOf(), 20 );
- iRc += TestMethod( po, "YearOf()", d3.YearOf(), 2012 );
- iRc += TestMethod( po, "MonthOf()", d3.MonthOf(), 7 );
-
- iRc += TestMethod( po, "DayOf( XB_FMT_DAY )", d3.DayOf( XB_FMT_WEEK ), 2 );
- iRc += TestMethod( po, "DayOf( XB_FMT_MONTH )", d3.DayOf( XB_FMT_MONTH ), 9 );
- iRc += TestMethod( po, "DayOf( XB_FMT_YEAR )", d3.DayOf( XB_FMT_YEAR ), 191 );
-
- iRc += TestMethod( po, "DateIsValid( '12345678' )", d3.DateIsValid( "12345678" ), 0 );
- iRc += TestMethod( po, "d3.DateIsValid( '20120708' )", d3.DateIsValid( "20120708" ), 1 );
- iRc += TestMethod( po, "d3.IsLeapYear()", d3.IsLeapYear(), 1 );
- iRc += TestMethod( po, "d2.IsLeapYear()", d2.IsLeapYear(), 0 );
-
- d1.Set( "20010102" );
- iRc += TestMethod( po, "d1.Set('20010102')", d1.Str(), "20010102", 8 );
- iRc += TestMethod( po, "d1.CalcRollingCenturyForYear(10)", d1.CalcRollingCenturyForYear( 10 ), 20 );
-
- iRc += TestMethod( po, "d1.JulianDays()", d1.JulianDays(), 2451912 );
-
-
- iRc += TestMethod( po, "d1.Set( '20140709' )", d1.Set( "20140709" ) , 0 );
- d1.CharDayOf( s );
- iRc += TestMethod( po, "d1.CharDayOf(s)", s, "Wednesday", 9 );
-
- d1.CharMonthOf( s );
- iRc += TestMethod( po, "d1.CharMonthOf()", s, "July", 4 );
-
- iRc += TestMethod( po, "d1.JulToDate8( 2451913 )", d1.JulToDate8( 2451912 ), 0 );
- iRc += TestMethod( po, "d1.JulToDate8( 2451913 )", d1.Str(), "20010102", 8 );
- iRc += TestMethod( po, "d1.LastDayOfMonth()", d1.LastDayOfMonth(), 0 );
- iRc += TestMethod( po, "d1.LastDayOfMonth()", d1.Str(), "20010131", 8 );
-
- iRc += TestMethod( po, "d1.CTOD( '12/01/02' )", d1.CTOD( "12/01/02" ), 0 );
- iRc += TestMethod( po, "d1.CTOD( '12/01/02' )", d1.Str(), "20021201", 8 );
-
- xbString s1, s2;
- s1 = "MM-DD-YY";
- d1 = "20130402";
- iRc+= TestMethod( po, "d1.FormatDate( s1, sOutDate )", d1.FormatDate( s1, sOutDate ), 0 );
- iRc+= TestMethod( po, "d1.FormatDate( s1, sOutDate )", sOutDate, "04-02-13", 8 );
-
- d1 = "20120203";
- iRc += TestMethod( po, "d1=20120203", d1.Str(), "20120203", 8 );
-
- s1 = "20130405";
- d1 = s1;
- iRc += TestMethod( po, "d1=s1", d1.Str(), "20130405", 8 );
-
- d2 = d1;
- iRc += TestMethod( po, "d2=d1", d2.Str(), "20130405", 8 );
-
- d2+=5;
- iRc += TestMethod( po, "d2+=5", d2.Str(), "20130410", 8 );
-
- d2-=7;
- iRc += TestMethod( po, "d2-=5", d2.Str(), "20130403", 8 );
-
- d2++;
- iRc += TestMethod( po, "d2++", d2.Str(), "20130404", 8 );
-
- d2--;
- iRc+= TestMethod( po, "d2--", d2.Str(), "20130403", 8 );
- iRc+= TestMethod( po, "d2-d1", d1-d2, 2 );
- iRc+= TestMethod( po, "d1+2", d1+2, "20130407", 8 );
- iRc+= TestMethod( po, "d1-5", d1-5, "20130402", 8 );
-
-// d1.Dump( "d1" );
-// d2.Dump( "d2" );
-
- iRc+= TestMethod( po, "d1==d2", d1==d2, 0 );
- d2 = d1;
- iRc+= TestMethod( po, "d1==d2", d1==d2, 1 );
- iRc+= TestMethod( po, "d1>=d2", d1>=d2, 1 );
- iRc+= TestMethod( po, "d1<=d2", d1<=d2, 1 );
- iRc+= TestMethod( po, "d1!=d2", d1!=d2, 0 );
- d2++;
- iRc+= TestMethod( po, "d1!=d2", d1!=d2, 1 );
-
- iRc+= TestMethod( po, "d1>d2", d1>d2, 0 );
- iRc+= TestMethod( po, "d1>=d2", d1>=d2, 0 );
- iRc+= TestMethod( po, "d1<d2", d1<d2, 1 );
- iRc+= TestMethod( po, "d1<=d2", d1<=d2, 1 );
-
- d2-=2;
- iRc+= TestMethod( po, "d1>d2", d1>d2, 1 );
- iRc+= TestMethod( po, "d1>=d2", d1>=d2, 1 );
- iRc+= TestMethod( po, "d1<d2", d1<d2, 0 );
- iRc+= TestMethod( po, "d1<=d2", d1<=d2, 0 );
- iRc+= TestMethod( po, "d1-d2", d1-d2, 1 );
-
-/*
- xbDate d4( "20171015" );
- std::cout << "day of [" << d4.Str() << "][" << d4.DayOf( XB_FMT_WEEK ) << "]\n";
- d4++;
- std::cout << "day of [" << d4.Str() << "][" << d4.DayOf( XB_FMT_WEEK ) << "]\n";
- d4++;
- std::cout << "day of [" << d4.Str() << "][" << d4.DayOf( XB_FMT_WEEK ) << "]\n";
- d4++;
- std::cout << "day of [" << d4.Str() << "][" << d4.DayOf( XB_FMT_WEEK ) << "]\n";
- d4++;
- std::cout << "day of [" << d4.Str() << "][" << d4.DayOf( XB_FMT_WEEK ) << "]\n";
- d4++;
- std::cout << "day of [" << d4.Str() << "][" << d4.DayOf( XB_FMT_WEEK ) << "]\n";
- d4++;
- std::cout << "day of [" << d4.Str() << "][" << d4.DayOf( XB_FMT_WEEK ) << "]\n";
- d4++;
- std::cout << "day of [" << d4.Str() << "][" << d4.DayOf( XB_FMT_WEEK ) << "]\n";
-*/
-
- if( po > 0 || iRc < 0 )
- fprintf( stdout, "Total Errors = %d\n", iRc * -1 );
-
-#ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], iRc * -1 );
- x.WriteLogMessage( sMsg );
-#endif
-
- return iRc;
-}
diff --git a/src/tests/xb_test_dbf_v3_memos.cpp b/src/tests/xb_test_dbf_v3_memos.cpp
deleted file mode 100755
index e42edb1..0000000
--- a/src/tests/xb_test_dbf_v3_memos.cpp
+++ /dev/null
@@ -1,259 +0,0 @@
-/* xb_test_xbdbf_v3_memos.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-// This program tests the version III memo field logic
-
-// usage: xb_test_dbf_v3_memos QUITE|NORMAL|VERBOSE
-
-
-#include "xbase.h"
-
-using namespace xb;
-
-#include "tstfuncs.cpp"
-
-
-int main( int argCnt, char **av )
-{
- int rc = 0;
- int rc2 = 0;
- int po = 1; /* print option */
- /* 0 - QUIET */
- /* 1 - NORMAL */
- /* 2 - VERBOSE */
-
-
- if( argCnt > 1 ) {
- if( av[1][0] == 'Q' )
- po = 0;
- else if( av[1][0] == 'V' )
- po = 2;
- }
-
-
- xbSchema MyV3Record[] =
- {
- { "RECID", XB_NUMERIC_FLD, 8, 0 },
- { "MEMOFLD1", XB_MEMO_FLD, 10, 0 },
- { "MEMOFLD2", XB_MEMO_FLD, 10, 0 },
- { "",0,0,0 }
- };
-
-
- xbXBase x;
-
- #ifdef XB_LOGGING_SUPPORT
- x.SetLogDirectory( PROJECT_LOG_DIR );
- x.EnableMsgLogging();
- if( po ){
- std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
- }
- xbString sMsg;
- sMsg.Sprintf( "Program [%s] initializing...", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- x.SetDataDirectory( PROJECT_DATA_DIR );
-
- #ifdef XB_LOCKING_SUPPORT
- x.DisableDefaultAutoLock();
- #endif // XB_LOCKING_SUPPORT
-
- InitTime();
-
- if( po > 0 )
- std::cout << "Default Data Directory is [" << x.GetDataDirectory().Str() << "]" << std::endl;
-
- xbDbf3 V3Dbf( &x ); /* version 3 dbf file */
-
- rc2 = V3Dbf.CreateTable( "TestV3_memos.DBF", "TestV3", MyV3Record, XB_OVERLAY, XB_MULTI_USER );
- rc += TestMethod( po, "CreateTable()", (xbInt32) rc2, XB_NO_ERROR );
-
-
- if( rc2 )
- x.DisplayError( rc2 );
- else{
-
- xbInt16 fldRecId = V3Dbf.GetFieldNo( "RECID" );
- xbInt16 fldMemo1 = V3Dbf.GetFieldNo( "MEMOFLD1" );
- xbInt16 fldMemo2 = V3Dbf.GetFieldNo( "MEMOFLD2" );
- xbString sData;
-
- // Record 1
- rc += TestMethod( po, "BlankRecord()", V3Dbf.BlankRecord(), XB_NO_ERROR );
- rc += TestMethod( po, "PutField()", V3Dbf.PutField( fldRecId, "1" ), XB_NO_ERROR );
- sData = "Memo data";
- rc += TestMethod( po, "UpdateMemoField()", V3Dbf.UpdateMemoField( fldMemo1, sData ), XB_NO_ERROR );
-
- sData = "Some other memo data";
- rc += TestMethod( po, "UpdateMemoField()", V3Dbf.UpdateMemoField( fldMemo2, sData ), XB_NO_ERROR );
- rc += TestMethod( po, "AppendRecord()", V3Dbf.AppendRecord(), XB_NO_ERROR );
-
- // Record 2
- rc += TestMethod( po, "BlankRecord()", V3Dbf.BlankRecord(), XB_NO_ERROR );
- rc += TestMethod( po, "PutField()", V3Dbf.PutField( fldRecId, "2" ), XB_NO_ERROR );
- sData = "Memo data Rec 2 ..[";
- sData.PadRight( 'Z', 1036 );
- sData += ']';
- rc += TestMethod( po, "UpdateMemoField()", V3Dbf.UpdateMemoField( fldMemo1, sData ), XB_NO_ERROR );
- sData = "Some other memo data Rec 2 ... [";
- sData.PadRight( 'W', 1555 );
- sData += ']';
- rc += TestMethod( po, "UpdateMemoField()", V3Dbf.UpdateMemoField( fldMemo2, sData ), XB_NO_ERROR );
- rc += TestMethod( po, "AppendRecord()", V3Dbf.AppendRecord(), XB_NO_ERROR );
-
- // Check memo header file
- xbUInt32 ulNextBlock;
- xbMemo *Memo = V3Dbf.GetMemoPtr();
- rc += TestMethod( po, "GetHdrNextBlock()", Memo->GetHdrNextBlock( ulNextBlock ), XB_NO_ERROR );
- rc += TestMethod( po, "GetHdrNextBlock()", (xbInt32) ulNextBlock, 10 );
-
-
- // Zap a table with memo fields
- rc += TestMethod( po, "Zap(0)", V3Dbf.Zap(), XB_NO_ERROR );
- xbUInt32 ulRecCnt = 0;
- rc += TestMethod( po, "GetRecCount()", V3Dbf.GetRecordCnt( ulRecCnt ), XB_NO_ERROR );
- rc += TestMethod( po, "GetRecCount() b", (xbInt32) ulRecCnt, 0 );
- Memo = V3Dbf.GetMemoPtr();
- rc += TestMethod( po, "GetHdrNextBlock()", Memo->GetHdrNextBlock( ulNextBlock ), XB_NO_ERROR );
- rc += TestMethod( po, "GetHdrNextBlock()", (xbInt32) ulNextBlock, 1 );
-
-
-
- // Add records back into the table
- // Record 1
- rc += TestMethod( po, "BlankRecord()", V3Dbf.BlankRecord(), XB_NO_ERROR );
- rc += TestMethod( po, "PutField()", V3Dbf.PutField( fldRecId, "1" ), XB_NO_ERROR );
- sData = "Memo data rec 1 memo 1";
- rc += TestMethod( po, "UpdateMemoField()", V3Dbf.UpdateMemoField( fldMemo1, sData ), XB_NO_ERROR );
-
- sData = "Memo data rec 1 memo 2";
- rc += TestMethod( po, "UpdateMemoField()", V3Dbf.UpdateMemoField( fldMemo2, sData ), XB_NO_ERROR );
- rc += TestMethod( po, "AppendRecord()", V3Dbf.AppendRecord(), XB_NO_ERROR );
-
- // Record 2
- rc += TestMethod( po, "BlankRecord()", V3Dbf.BlankRecord(), XB_NO_ERROR );
- rc += TestMethod( po, "PutField()", V3Dbf.PutField( fldRecId, "2" ), XB_NO_ERROR );
- sData = "Memo data Rec 2 memo 1..[";
- sData.PadRight( 'Z', 1036 );
- sData += ']';
- rc += TestMethod( po, "UpdateMemoField()", V3Dbf.UpdateMemoField( fldMemo1, sData ), XB_NO_ERROR );
- sData = "Some other memo data Rec 2 memo 2 ... [";
- sData.PadRight( 'W', 1555 );
- sData += ']';
- rc += TestMethod( po, "UpdateMemoField()", V3Dbf.UpdateMemoField( fldMemo2, sData ), XB_NO_ERROR );
- rc += TestMethod( po, "AppendRecord()", V3Dbf.AppendRecord(), XB_NO_ERROR );
-
- // Record 3
- rc += TestMethod( po, "BlankRecord()", V3Dbf.BlankRecord(), XB_NO_ERROR );
- rc += TestMethod( po, "PutField()", V3Dbf.PutField( fldRecId, "3" ), XB_NO_ERROR );
- sData = "Memo data Rec 3 memo 1";
- rc += TestMethod( po, "UpdateMemoField()", V3Dbf.UpdateMemoField( fldMemo1, sData ), XB_NO_ERROR );
-
- sData = "Memo data Rec 3 memo 2";
- rc += TestMethod( po, "UpdateMemoField()", V3Dbf.UpdateMemoField( fldMemo2, sData ), XB_NO_ERROR );
- rc += TestMethod( po, "AppendRecord()", V3Dbf.AppendRecord(), XB_NO_ERROR );
-
-
- // Record 4
- rc += TestMethod( po, "BlankRecord()", V3Dbf.BlankRecord(), XB_NO_ERROR );
- rc += TestMethod( po, "PutField()", V3Dbf.PutField( fldRecId, "4" ), XB_NO_ERROR );
- sData = "Memo data Rec 4 memo 1";
- rc += TestMethod( po, "UpdateMemoField()", V3Dbf.UpdateMemoField( fldMemo1, sData ), XB_NO_ERROR );
- sData = "Memo data Rec 4 memo 2";
- rc += TestMethod( po, "UpdateMemoField()", V3Dbf.UpdateMemoField( fldMemo2, sData ), XB_NO_ERROR );
- rc += TestMethod( po, "AppendRecord()", V3Dbf.AppendRecord(), XB_NO_ERROR );
-
-
- // Record 5
- rc += TestMethod( po, "BlankRecord()", V3Dbf.BlankRecord(), XB_NO_ERROR );
- rc += TestMethod( po, "PutField()", V3Dbf.PutField( fldRecId, "5" ), XB_NO_ERROR );
- sData = "Memo data Rec 5 memo 1";
- rc += TestMethod( po, "UpdateMemoField()", V3Dbf.UpdateMemoField( fldMemo1, sData ), XB_NO_ERROR );
- sData = "Memo data Rec 5 memo 2";
- rc += TestMethod( po, "UpdateMemoField()", V3Dbf.UpdateMemoField( fldMemo2, sData ), XB_NO_ERROR );
- rc += TestMethod( po, "AppendRecord()", V3Dbf.AppendRecord(), XB_NO_ERROR );
-
-
- // Record 6
- rc += TestMethod( po, "BlankRecord()", V3Dbf.BlankRecord(), XB_NO_ERROR );
- rc += TestMethod( po, "PutField()", V3Dbf.PutField( fldRecId, "6" ), XB_NO_ERROR );
- sData = "Memo data Rec 6 memo 1";
- rc += TestMethod( po, "UpdateMemoField()", V3Dbf.UpdateMemoField( fldMemo1, sData ), XB_NO_ERROR );
- sData = "Memo data Rec 6 memo 2";
- rc += TestMethod( po, "UpdateMemoField()", V3Dbf.UpdateMemoField( fldMemo2, sData ), XB_NO_ERROR );
- rc += TestMethod( po, "AppendRecord()", V3Dbf.AppendRecord(), XB_NO_ERROR );
-
-
- // Record 7
- rc += TestMethod( po, "BlankRecord()", V3Dbf.BlankRecord(), XB_NO_ERROR );
- rc += TestMethod( po, "PutField()", V3Dbf.PutField( fldRecId, "7" ), XB_NO_ERROR );
- sData = "Memo data Rec 7 memo 1";
- rc += TestMethod( po, "UpdateMemoField()", V3Dbf.UpdateMemoField( fldMemo1, sData ), XB_NO_ERROR );
- sData = "Memo data Rec 7 memo 2";
- rc += TestMethod( po, "UpdateMemoField()", V3Dbf.UpdateMemoField( fldMemo2, sData ), XB_NO_ERROR );
- rc += TestMethod( po, "AppendRecord()", V3Dbf.AppendRecord(), XB_NO_ERROR );
-
-
- // Flag 1, 3, 5 and 7 for deletion
- rc += TestMethod( po, "GetRecord()", V3Dbf.GetRecord( 1 ), XB_NO_ERROR );
- rc += TestMethod( po, "DeleteRecord()", V3Dbf.DeleteRecord(), XB_NO_ERROR );
-
- rc += TestMethod( po, "GetRecord()", V3Dbf.GetRecord( 3 ), XB_NO_ERROR );
- rc += TestMethod( po, "DeleteRecord()", V3Dbf.DeleteRecord(), XB_NO_ERROR );
-
- rc += TestMethod( po, "GetRecord()", V3Dbf.GetRecord( 5 ), XB_NO_ERROR );
- rc += TestMethod( po, "DeleteRecord()", V3Dbf.DeleteRecord(), XB_NO_ERROR );
-
- rc += TestMethod( po, "GetRecord()", V3Dbf.GetRecord( 7 ), XB_NO_ERROR );
- rc += TestMethod( po, "DeleteRecord()", V3Dbf.DeleteRecord(), XB_NO_ERROR );
- rc += TestMethod( po, "Pack()", V3Dbf.Pack(), XB_NO_ERROR );
-
- xbString sDir;
- V3Dbf.GetFileDirPart( sDir );
- xbString sDbfName;
- xbString sDbtName;
- sDbfName.Sprintf( "%snewV3nm.DBF", sDir.Str());
- sDbtName.Sprintf( "%snewV3nm.DBT", sDir.Str());
-
- std::cout << "remove [" << sDbfName.Str() << "\n";
- std::cout << "remove [" << sDbtName.Str() << "\n";
-
- V3Dbf.xbRemove( sDbfName );
- V3Dbf.xbRemove( sDbtName );
-
- x.DisplayTableList();
-
- rc += TestMethod( po, "Rename()", V3Dbf.Rename( "newV3nm.DBF" ), XB_NO_ERROR );
- x.DisplayTableList();
-
-
- rc += TestMethod( po, "Close()", V3Dbf.Close(), XB_NO_ERROR );
-
-
- }
-
-
-
- if( po > 0 || rc < 0 )
- fprintf( stdout, "Total Errors = %d\n", rc * -1 );
-
-#ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], rc * -1 );
- x.WriteLogMessage( sMsg );
-#endif
-
- return rc;
-}
diff --git a/src/tests/xb_test_dbf_v4_nomemos.cpp b/src/tests/xb_test_dbf_v4_nomemos.cpp
deleted file mode 100755
index 984eb63..0000000
--- a/src/tests/xb_test_dbf_v4_nomemos.cpp
+++ /dev/null
@@ -1,359 +0,0 @@
-/* xb_test_xbdbf_v4_nomemos.cpp
-
-XBase Software Library
-
-Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-// This program tests the class xbXdbf
-
-// usage: xb_test_dbf_v4_nomemos QUITE|NORMAL|VERBOSE
-
-
-#include "xbase.h"
-
-using namespace xb;
-
-#include "tstfuncs.cpp"
-
-
-int main( int argCnt, char **av )
-{
- int rc = 0;
- int rc2 = 0;
- int po = 1; /* print option */
- /* 0 - QUIET */
- /* 1 - NORMAL */
- /* 2 - VERBOSE */
-
- if( argCnt > 1 ) {
- if( av[1][0] == 'Q' )
- po = 0;
- else if( av[1][0] == 'V' )
- po = 2;
- }
-
- xbSchema MyV4Record[] =
- {
- { "FIRSTNAME", XB_CHAR_FLD, 15, 0 },
- { "LASTNAME", XB_CHAR_FLD, 20, 0 },
- { "MIDDLEINIT", XB_CHAR_FLD, 1, 0 },
- { "BIRTHDATE", XB_DATE_FLD, 8, 0 },
- { "STARTDATE", XB_DATE_FLD, 8, 0 },
- { "AMOUNT", XB_NUMERIC_FLD, 9, 2 },
- { "TESTNUM", XB_NUMERIC_FLD, 12, 4 },
- { "SWITCH", XB_LOGICAL_FLD, 1, 0 },
- { "ZIPCODE", XB_NUMERIC_FLD, 5, 0 },
- { "DBLFLDTST", XB_FLOAT_FLD, 14, 4 },
- { "",0,0,0 }
- };
-
- xbSchema MyV4ZipRecord[] =
- {
- { "ZIPCODE", XB_NUMERIC_FLD, 5, 0 },
- { "CITY", XB_CHAR_FLD, 30, 0 },
- { "STATE", XB_CHAR_FLD, 2, 0 },
- { "",0,0,0 }
- };
-
-
- xbXBase x;
-
- #ifdef XB_LOGGING_SUPPORT
- x.SetLogDirectory( PROJECT_LOG_DIR );
- x.EnableMsgLogging();
- if( po ){
- std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
- }
- xbString sMsg;
- sMsg.Sprintf( "Program [%s] initializing...", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- x.SetDataDirectory( PROJECT_DATA_DIR );
-
- #ifdef XB_LOCKING_SUPPORT
- x.DisableDefaultAutoLock();
- #endif // XB_LOCKING_SUPPORT
-
- InitTime();
-
- if( po > 0 )
- std::cout << "Default Data Directory is [" << x.GetDataDirectory().Str() << "]" << std::endl;
-
- xbDbf4 V4Dbf( &x ); // version 4 dbf file
- rc2 = V4Dbf.CreateTable( "TestV4.DBF", "TestV4", MyV4Record, XB_OVERLAY, XB_MULTI_USER );
- rc += TestMethod( po, "CreateTable()", (xbInt32) rc2, XB_NO_ERROR );
- if( rc2 )
- x.DisplayError( rc2 );
-
- xbUInt64 ullFileSize;
- rc2 = V4Dbf.GetFileSize( ullFileSize );
-
- rc = TestMethod( po, "CheckTableSize", ullFileSize, (xbUInt64) 353 );
-
- if( po == 2 ){
- std::cout << "There should be one entry in the table list" << std::endl;
- x.DisplayTableList();
- }
-
- xbDbf4 V4Dbf2( &x );
-
- // next occurrence should error as a dup
- x.WriteLogMessage( "Second create attempt" );
- rc2 = V4Dbf2.CreateTable( "TestV4.DBF", "TestV4", MyV4Record, XB_DONTOVERLAY, XB_MULTI_USER );
- rc += TestMethod( po, "CreateTable()", rc2, XB_FILE_EXISTS );
- if( rc2 != XB_FILE_EXISTS ){
- x.DisplayError( rc2 );
- }
-
- if( po == 2 ){
- std::cout << "There should be one entry in the table list" << std::endl;
- x.DisplayTableList();
- }
-
-
- rc += TestMethod( po, "BlankRecord()", V4Dbf.BlankRecord(), XB_NO_ERROR );
- rc += TestMethod( po, "GetFieldNo()", V4Dbf.GetFieldNo("LASTNAME"), 1 );
- rc += TestMethod( po, "GetFieldNo()", V4Dbf.GetFieldNo("MIDDLEINIT"), 2 );
-
- xbInt16 fldLastName = V4Dbf.GetFieldNo( "LASTNAME" );
- rc += TestMethod( po, "PutField()", V4Dbf.PutField( fldLastName, "NELSON" ), XB_NO_ERROR );
- rc += TestMethod( po, "PutField()", V4Dbf.PutField( "FIRSTNAME", "WILLIE" ), XB_NO_ERROR );
- rc += TestMethod( po, "PutField()", V4Dbf.PutField( "AMOUNT", "12.34" ), XB_NO_ERROR );
- xbDate dt( "19500209" );
- rc += TestMethod( po, "PutDateField()", V4Dbf.PutDateField( "BIRTHDATE", dt ), XB_NO_ERROR );
- rc += TestMethod( po, "PutLongField()", V4Dbf.PutLongField( "ZIPCODE", 12345 ), XB_NO_ERROR );
- rc += TestMethod( po, "PutLogicalField()", V4Dbf.PutLogicalField( "SWITCH", "Y" ), XB_NO_ERROR );
- rc += TestMethod( po, "PutFloatField()", V4Dbf.PutFloatField( "TESTNUM", (xbFloat) 1234.5678 ), XB_NO_ERROR );
- rc += TestMethod( po, "PutDoubleField()", V4Dbf.PutDoubleField( "DBLFLDTST", (xbDouble) 9876.5432 ), XB_NO_ERROR );
- rc += TestMethod( po, "AppendRecord()", V4Dbf.AppendRecord(), XB_NO_ERROR );
-
-
- xbString sf;
- rc += TestMethod( po, "GetField()", V4Dbf.GetField( fldLastName, sf, 0 ), XB_NO_ERROR );
- rc += TestMethod( po, "GetField()", sf, "NELSON ", 20 );
- rc += TestMethod( po, "GetField()", V4Dbf.GetField( fldLastName, sf ), XB_NO_ERROR );
- rc += TestMethod( po, "GetField()", sf, "NELSON ", 20 );
- rc += TestMethod( po, "GetField()", V4Dbf.GetField( "LASTNAME", sf ), XB_NO_ERROR );
- rc += TestMethod( po, "GetField()", sf, "NELSON ", 20 );
- xbInt16 iNoOfDecimals;
- rc += TestMethod( po, "GetFieldDecimal()", V4Dbf.GetFieldDecimal( "AMOUNT", iNoOfDecimals ), XB_NO_ERROR );
- rc += TestMethod( po, "GetFieldDecimal()", iNoOfDecimals, 2 );
-
- xbDouble d;
- rc += TestMethod( po, "GetDoubleField()", V4Dbf.GetDoubleField( "DBLFLDTST", d ), XB_NO_ERROR );
- rc += TestMethod( po, "GetDoubleField()-b", d, (xbDouble) 9876.5432 );
-
- char FieldType;
- rc += TestMethod( po, "GetFieldType()", V4Dbf.GetFieldType( "STARTDATE", FieldType ), XB_NO_ERROR );
- rc += TestMethod( po, "GetFieldType()", FieldType , 'D' );
-
- xbInt16 iFieldLen;
- rc += TestMethod( po, "GetFieldLen()", V4Dbf.GetFieldLen( "STARTDATE", iFieldLen ), XB_NO_ERROR );
- rc += TestMethod( po, "GetFieldLen()", iFieldLen, 8 );
-
- xbInt16 fldAMT = V4Dbf.GetFieldNo( "AMOUNT" );
- rc += TestMethod( po, "GetField()", V4Dbf.GetField( fldAMT, sf ), XB_NO_ERROR );
- rc += TestMethod( po, "GetField()", sf, " 12.34", 9 );
-
- xbInt32 lZip;
- rc += TestMethod( po, "GetLongField()", V4Dbf.GetLongField( "ZIPCODE", lZip ), XB_NO_ERROR );
- rc += TestMethod( po, "GetLongField()", lZip, 12345 );
-
- xbString sSwitch;
- rc += TestMethod( po, "GetLogicalField()", V4Dbf.GetLogicalField( "SWITCH", sSwitch ), XB_NO_ERROR );
- rc += TestMethod( po, "GetLogicalField()", sSwitch, "Y", 1 );
-
- xbFloat fNum;
- rc += TestMethod( po, "GetFloatField()", V4Dbf.GetFloatField( "TESTNUM", fNum ), 0 );
- rc += TestMethod( po, "GetFloatField()", fNum, (xbFloat) 1234.5678 );
-
- // init a second record for more testing
- rc += TestMethod( po, "BlankRecord()", V4Dbf.BlankRecord(), XB_NO_ERROR );
- rc += TestMethod( po, "PutLogicalField()", V4Dbf.PutLogicalField( "SWITCH", xbTrue ), XB_NO_ERROR );
- rc += TestMethod( po, "AppendRecord()", V4Dbf.AppendRecord(), XB_NO_ERROR );
- xbBool bSwitch;
- rc += TestMethod( po, "GetLogicalField()", V4Dbf.GetLogicalField( "SWITCH", bSwitch ), 0 );
- rc += TestMethod( po, "GetLogicalField()", bSwitch, xbTrue );
-
- // init a third record for more testing
- rc += TestMethod( po, "BlankRecord()", V4Dbf.BlankRecord(), XB_NO_ERROR );
- rc += TestMethod( po, "PutLogicalField()", V4Dbf.PutLogicalField( "SWITCH", xbFalse ), XB_NO_ERROR );
- rc += TestMethod( po, "AppendRecord()", V4Dbf.AppendRecord(), XB_NO_ERROR );
- rc += TestMethod( po, "GetLogicalField()", V4Dbf.GetLogicalField( "SWITCH", bSwitch ), 0 );
- rc += TestMethod( po, "GetLogicalField()", bSwitch, xbFalse );
-
- rc += TestMethod( po, "PutField()", V4Dbf.PutField( "TESTNUM", "12345678" ), XB_INVALID_DATA );
- rc += TestMethod( po, "PutField()", V4Dbf.PutField( "TESTNUM", "1234567" ), XB_NO_ERROR );
- rc += TestMethod( po, "PutField()", V4Dbf.PutField( "TESTNUM", "1234567.12345" ), XB_INVALID_DATA );
- rc += TestMethod( po, "PutField()", V4Dbf.PutField( "TESTNUM", ".12345" ), XB_INVALID_DATA );
- rc += TestMethod( po, "PutField()", V4Dbf.PutField( "TESTNUM", ".1234" ), XB_NO_ERROR );
- rc += TestMethod( po, "PutField()", V4Dbf.PutField( "TESTNUM", "12345678.1234" ), XB_INVALID_DATA );
- rc += TestMethod( po, "PutField()", V4Dbf.PutField( "TESTNUM", "1234567.1234" ), XB_NO_ERROR );
-
- rc += TestMethod( po, "AppendRecord()", V4Dbf.AppendRecord(), XB_NO_ERROR );
-
- rc += TestMethod( po, "GetFieldCnt()", V4Dbf.GetFieldCnt(), 10 );
- rc += TestMethod( po, "GetTblAlias()", V4Dbf.GetTblAlias(), "TestV4", 6 );
- rc += TestMethod( po, "GetDbfStatus()", V4Dbf.GetDbfStatus(), XB_OPEN );
- rc += TestMethod( po, "GetCurRecNo()", (xbInt32) V4Dbf.GetCurRecNo(), 4 );
- rc += TestMethod( po, "GetFirstRecord()", V4Dbf.GetFirstRecord(), XB_NO_ERROR );
- rc += TestMethod( po, "GetCurRecNo()", (xbInt32) V4Dbf.GetCurRecNo(), 1 );
- rc += TestMethod( po, "GetNextRecord()", V4Dbf.GetNextRecord(), XB_NO_ERROR );
- rc += TestMethod( po, "GetCurRecNo()", (xbInt32) V4Dbf.GetCurRecNo(), 2 );
- rc += TestMethod( po, "GetLastRecord()", V4Dbf.GetLastRecord(), XB_NO_ERROR );
- rc += TestMethod( po, "GetCurRecNo()", (xbInt32) V4Dbf.GetCurRecNo(), 4 );
- rc += TestMethod( po, "GetPrevRecord()", V4Dbf.GetPrevRecord(), XB_NO_ERROR );
- rc += TestMethod( po, "GetCurRecNo()", (xbInt32) V4Dbf.GetCurRecNo(), 3 );
- rc += TestMethod( po, "GetRecordLen()", (xbInt32) V4Dbf.GetRecordLen(), 94 );
-
- char * p = V4Dbf.GetRecordBuf();
- rc += TestMethod( po, "GetRecordBuf()", p[0], ' ' );
-
- if( po == 2 ){
- V4Dbf.DumpHeader( 3 );
- V4Dbf.DumpRecord( 4 );
- }
-
- rc += TestMethod( po, "PutField()", V4Dbf.PutField( "LASTNAME", "CLINTON" ), XB_NO_ERROR );
- rc += TestMethod( po, "PutRecord()", V4Dbf.PutRecord(), XB_NO_ERROR );
- rc += TestMethod( po, "DeleteRecord()", V4Dbf.DeleteRecord(), XB_NO_ERROR );
- rc += TestMethod( po, "UndeleteRecord()", V4Dbf.UndeleteRecord(), XB_NO_ERROR );
- xbUInt32 ulRecCnt = 0;
- rc += TestMethod( po, "GetRecordCnt()", V4Dbf.GetRecordCnt( ulRecCnt ), XB_NO_ERROR );
- rc += TestMethod( po, "GetRecordCnt()", (xbInt32) ulRecCnt, 4 );
- rc += TestMethod( po, "DeleteAllRecords()", V4Dbf.DeleteAllRecords(), XB_NO_ERROR );
- rc += TestMethod( po, "UndeleteAllRecords()", V4Dbf.UndeleteAllRecords(), XB_NO_ERROR );
- rc += TestMethod( po, "GetRecord()", V4Dbf.GetRecord( 2L ), XB_NO_ERROR );
- rc += TestMethod( po, "DeleteRecord()", V4Dbf.DeleteRecord(), XB_NO_ERROR );
-
- if( po == 2 ){
- V4Dbf.DumpRecord( 4 );
- }
-
- xbDbf4 CopyDbf( &x );
- rc += TestMethod( po, "CopyDbfStructure()", V4Dbf.CopyDbfStructure( &CopyDbf, "CopyStructureV4NoMemos", "CopyAliasV4NoMemos", XB_OVERLAY, XB_MULTI_USER ), XB_NO_ERROR );
- rc += TestMethod( po, "CopyDbf.Close()", CopyDbf.Close(), XB_NO_ERROR );
-
- if( po == 2 ){
- std::cout << "There should be one entry in the table list" << std::endl;
- x.DisplayTableList();
- }
-
- rc += TestMethod( po, "GetDbfStatus()", CopyDbf.GetDbfStatus(), XB_CLOSED );
- rc += TestMethod( po, "Open()", CopyDbf.xbDbf::Open( "CopyStructureV4NoMemos.DBF", "CopyAliasV4NoMemos" ), XB_NO_ERROR );
-
- if( po == 2 ){
- std::cout << "There should be two entries in the table list" << std::endl;
- x.DisplayTableList();
- }
-
- rc += TestMethod( po, "Pack()", V4Dbf.Pack(), XB_NO_ERROR );
- rc += TestMethod( po, "GetDbfStatus()", V4Dbf.GetDbfStatus(), XB_OPEN );
-
- rc += TestMethod( po, "Zap()", V4Dbf.Zap(), XB_NO_ERROR );
- if( po == 2 )
- x.DisplayTableList();
-
- xbUInt64 ullFileSize2 = 0;
- rc2 = V4Dbf.GetFileSize( ullFileSize2 );
- rc = TestMethod( po, "CheckTableSize", ullFileSize2, ullFileSize );
-
-// Test of auto commit code here
- rc += TestMethod( po, "BlankRecord()", V4Dbf.BlankRecord(), XB_NO_ERROR );
- rc += TestMethod( po, "PutField()", V4Dbf.PutField( fldLastName, "NELSON" ), XB_NO_ERROR );
- rc += TestMethod( po, "PutField()", V4Dbf.PutField( "FIRSTNAME", "WILLIE" ), XB_NO_ERROR );
- rc += TestMethod( po, "PutField()", V4Dbf.PutField( "AMOUNT", "12.34" ), XB_NO_ERROR );
- rc += TestMethod( po, "PutLongField()", V4Dbf.PutLongField( "ZIPCODE", 12345 ), XB_NO_ERROR );
- rc += TestMethod( po, "PutLogicalField()", V4Dbf.PutLogicalField( "SWITCH", "Y" ), XB_NO_ERROR );
- rc += TestMethod( po, "PutFloatField()", V4Dbf.PutFloatField( "TESTNUM", (xbFloat) 1234.5678 ), XB_NO_ERROR );
- rc += TestMethod( po, "PutDoubleField()", V4Dbf.PutDoubleField( "DBLFLDTST", (xbDouble) 9876.5432 ), XB_NO_ERROR );
- rc += TestMethod( po, "AppendRecord()", V4Dbf.AppendRecord(), XB_NO_ERROR );
-
- rc += TestMethod( po, "BlankRecord()", V4Dbf.BlankRecord(), XB_NO_ERROR );
- rc += TestMethod( po, "PutField()", V4Dbf.PutField( fldLastName, "JOHNSON" ), XB_NO_ERROR );
- rc += TestMethod( po, "PutField()", V4Dbf.PutField( "FIRSTNAME", "JIMMY" ), XB_NO_ERROR );
- rc += TestMethod( po, "PutField()", V4Dbf.PutField( "AMOUNT", "555.33" ), XB_NO_ERROR );
- rc += TestMethod( po, "PutLongField()", V4Dbf.PutLongField( "ZIPCODE", 76523 ), XB_NO_ERROR );
- rc += TestMethod( po, "PutLogicalField()", V4Dbf.PutLogicalField( "SWITCH", "N" ), XB_NO_ERROR );
- rc += TestMethod( po, "PutFloatField()", V4Dbf.PutFloatField( "TESTNUM", (xbFloat) 8765.4321 ), XB_NO_ERROR );
- rc += TestMethod( po, "PutDoubleField()", V4Dbf.PutDoubleField( "DBLFLDTST", (xbDouble) 9876.5432 ), XB_NO_ERROR );
- rc += TestMethod( po, "AppendRecord()", V4Dbf.AppendRecord(), XB_NO_ERROR );
-
- rc += TestMethod( po, "PutField()", V4Dbf.PutField( "AMOUNT", "666.22" ), XB_NO_ERROR );
- rc += TestMethod( po, "Abort()", V4Dbf.Abort(), XB_NO_ERROR );
- rc += TestMethod( po, "GetField()", V4Dbf.GetField( "AMOUNT", sf ), XB_NO_ERROR );
- rc += TestMethod( po, "GetField()", sf, " 555.33", 9 );
-
- rc += TestMethod( po, "PutField()", V4Dbf.PutField( "AMOUNT", "666.22" ), XB_NO_ERROR );
- rc += TestMethod( po, "Commit()", V4Dbf.Commit(), XB_NO_ERROR );
- rc += TestMethod( po, "GetField()", V4Dbf.GetField( fldAMT, sf ), XB_NO_ERROR );
- rc += TestMethod( po, "GetField()", sf, " 666.22", 9 );
-
- rc += TestMethod( po, "GetPrevRecord()", V4Dbf.GetPrevRecord(), XB_NO_ERROR );
- rc += TestMethod( po, "GetNextRecord()", V4Dbf.GetNextRecord(), XB_NO_ERROR );
- rc += TestMethod( po, "GetField()", V4Dbf.GetField( fldAMT, sf ), XB_NO_ERROR );
- rc += TestMethod( po, "GetField()", sf, " 666.22", 9 );
-
- rc += TestMethod( po, "AutoCommit()", V4Dbf.SetAutoCommit( 0 ), XB_NO_ERROR );
- rc += TestMethod( po, "PutField()", V4Dbf.PutField( "AMOUNT", "999.33" ), XB_NO_ERROR );
- rc += TestMethod( po, "GetPrevRecord()", V4Dbf.GetPrevRecord(), XB_NO_ERROR );
- rc += TestMethod( po, "GetNextRecord()", V4Dbf.GetNextRecord(), XB_NO_ERROR );
- rc += TestMethod( po, "GetField()", V4Dbf.GetField( fldAMT, sf ), XB_NO_ERROR );
- rc += TestMethod( po, "GetField()", sf, " 666.22", 9 );
-
- rc += TestMethod( po, "AutoCommit()", V4Dbf.SetAutoCommit( -1 ), XB_NO_ERROR );
- rc += TestMethod( po, "PutField()", V4Dbf.PutField( "AMOUNT", "999.33" ), XB_NO_ERROR );
- rc += TestMethod( po, "GetCurRecNo()", (xbInt32) V4Dbf.GetCurRecNo(), 2 );
- rc += TestMethod( po, "GetPrevRecord()", V4Dbf.GetPrevRecord(), XB_NO_ERROR );
- rc += TestMethod( po, "GetNextRecord()", V4Dbf.GetNextRecord(), XB_NO_ERROR );
- rc += TestMethod( po, "GetField()", V4Dbf.GetField( fldAMT, sf ), XB_NO_ERROR );
- rc += TestMethod( po, "GetField()", sf, " 999.33", 9 );
-
- rc += TestMethod( po, "AutoCommit()", V4Dbf.SetAutoCommit( 1 ), XB_NO_ERROR );
- rc += TestMethod( po, "PutField()", V4Dbf.PutField( "AMOUNT", "432.55" ), XB_NO_ERROR );
- rc += TestMethod( po, "GetCurRecNo()", (xbInt32) V4Dbf.GetCurRecNo(), 2 );
- rc += TestMethod( po, "GetPrevRecord()", V4Dbf.GetPrevRecord(), XB_NO_ERROR );
- rc += TestMethod( po, "GetNextRecord()", V4Dbf.GetNextRecord(), XB_NO_ERROR );
- rc += TestMethod( po, "GetField()", V4Dbf.GetField( fldAMT, sf ), XB_NO_ERROR );
- rc += TestMethod( po, "GetField()", sf, " 432.55", 9 );
-
-
- xbDbf4 V4DbfZ( &x ); // version 4 dbf file
- rc2 = V4DbfZ.CreateTable( "TestV4Zip.DBF", "TestV4Zip", MyV4ZipRecord, XB_OVERLAY, XB_MULTI_USER );
- rc += TestMethod( po, "CreateTable()", (xbInt32) rc2, XB_NO_ERROR );
- if( rc2 )
- x.DisplayError( rc2 );
-
-
-
- rc += TestMethod( po, "Close()", V4Dbf.Close(), XB_NO_ERROR );
- if( po == 2 )
- x.DisplayTableList();
-
-
- rc += TestMethod( po, "Close()", V4DbfZ.Close(), XB_NO_ERROR );
- if( po == 2 )
- x.DisplayTableList();
-
-
-
- if( po > 0 || rc < 0 )
- fprintf( stdout, "Total Errors = %d\n", rc * -1 );
-
-#ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], rc * -1 );
- x.WriteLogMessage( sMsg );
-#endif
-
- return rc;
-}
diff --git a/src/tests/xb_test_expression.cpp b/src/tests/xb_test_expression.cpp
deleted file mode 100755
index ac1cde7..0000000
--- a/src/tests/xb_test_expression.cpp
+++ /dev/null
@@ -1,804 +0,0 @@
-/* xb_test_expression.cpp
-
-XBase Software Library
-
-Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-// This program tests the class xbExp
-// usage: xb_test_expression QUITE|NORMAL|VERBOSE
-
-#include "xbase.h"
-using namespace xb;
-
-#include "tstfuncs.cpp"
-
-
-/**************************************************************************/
-///@cond DOXYOFF
-
-class xbExpTest : public xbExp {
-
- public:
- xbExpTest( xbXBase * x );
- xbInt16 GetNextTokenTest( xbExpToken &t );
- xbInt16 OperatorWeightTest( const xbString &sOperator );
- xbExpNode *GetNextNodeTest( xbExpNode * );
-};
-
-/**************************************************************************/
-xbExpTest::xbExpTest( xbXBase * x ) : xbExp( x ){
-}
-/**************************************************************************/
-xbExpNode *xbExpTest::GetNextNodeTest( xbExpNode *n ){
- return GetNextNode( n );
-}
-/**************************************************************************/
-xbInt16 xbExpTest::GetNextTokenTest( xbExpToken &t ){
- return GetNextToken( t );
-}
-/**************************************************************************/
-xbInt16 xbExpTest::OperatorWeightTest( const xbString &sOperator ){
- return OperatorWeight( sOperator );
-}
-///@endcond DOXYOFF
-
-
-/**************************************************************************/
-xbInt16 DevTester( xbXBase * xb, xbDbf * dbf, const char * sExpIn ){
-
- xbExpTest exp( xb );
- xbExpNode *n;
-
- std::cout << "going to parse expression [" << sExpIn << "]\n";
- xbInt16 iRc = exp.ParseExpression( dbf, sExpIn );
-
- std::cout << "back from parse expression\n";
- std::cout << "dump nodes\n";
- n = exp.GetNextNodeTest( NULL );
- if( iRc == XB_NO_ERROR ){
- #ifdef XB_DEBUG_SUPPORT
- exp.DumpTree( xbTrue );
- #endif // XB_DEBUG_SUPPORT
- std::cout << "dump nodes\n";
- n = exp.GetNextNodeTest( NULL );
- if( !n ){
- std::cout << "n is null\n";
- } else {
- xbInt16 i = 0;
- while( n && i < 30 ){
- std::cout << "Node Text = [" << n->GetStringResult().Str() << "]\n";
- n = exp.GetNextNodeTest( n );
- i++;
- }
- }
- std::cout << "end dump nodes\n";
- return 0;
- }else{
- std::cout << "Parse Error [" << iRc << "]\n";
- return -1;
- }
-}
-
-/**************************************************************************/
-xbInt16 TestWeight( xbXBase * xb, xbInt16 iPrintOption, const char * title, const char *sOperator, xbInt16 iExpectedWeight );
-xbInt16 TestWeight( xbXBase * xb, xbInt16 iPrintOption, const char * title, const char *sOperator, xbInt16 iExpectedWeight ){
-
- xbInt16 iRc = 0;
- xbExpTest expT1( xb );
-
- if(( iRc = expT1.OperatorWeightTest( sOperator )) != iExpectedWeight ){
- std::cout << std::endl << "[FAIL O1] " << title << std::endl;
- std::cout << " Operator [" << sOperator << "] Weight [" << iRc << "] Expected [" << iExpectedWeight << "]" << std::endl;
- return -1;
- }
-
- if( iPrintOption == 2 )
- std::cout << "[PASS] " << title << " Expected matches actual Data=[" << sOperator << "][" << iExpectedWeight << "]" << std::endl;
- else if( iPrintOption == 1 )
- std::cout << "[PASS] " << title << std::endl;
-
- return XB_NO_ERROR;
-}
-/**************************************************************************/
-xbInt16 TestTokenMethod( xbXBase *xb, xbInt16 iPrintOption, const char * title, const char *sExpression,
- const char *sExpectedToken, const char *sExpectedRemainder, char cExpectedNodeType,
- char cExpectedReturnType, xbInt16 iErc, xbInt16 iTrc );
-
-xbInt16 TestTokenMethod( xbXBase *xb, xbInt16 iPrintOption, const char * title, const char *sExpression,
- const char *sExpectedToken, const char *sExpectedRemainder, char cExpectedNodeType,
- char cExpectedReturnType, xbInt16 iErc, xbInt16 iTrc ){
-
- xbExpTest expT1( xb );
- xbExpToken t;
- xbInt16 iRc = XB_NO_ERROR;
- t.sExpression = sExpression;
-
- if(( iRc = expT1.GetNextTokenTest( t )) != iErc ){
- std::cout << std::endl << "[FAIL T1] " << title << std::endl;
- std::cout << " Expression [" << sExpression << "]" << std::endl;
- std::cout << " GetNextToken iRc = [" << iRc << "]" << std::endl;
- return -1;
- }
-
- if( iTrc != t.iSts ){
- std::cout << std::endl << "[FAIL T2] " << title << std::endl;
- std::cout << " Expression [" << sExpression << "]" << std::endl;
- std::cout << " GetNextToken Token Return Code = [" << iTrc << "]" << std::endl;
- return -1;
- }
- if( iErc == XB_NO_ERROR && iTrc == XB_NO_ERROR && t.sToken != sExpectedToken ){
- std::cout << std::endl << "[FAIL T3] " << title << std::endl;
- std::cout << " Expression " << sExpression << std::endl;
- std::cout << " Expected Result = [" << sExpectedToken << "] Actual = [" << t.sToken.Str() << "]\n";
- return -1;
- }
- if( iErc == XB_NO_ERROR && iTrc == XB_NO_ERROR && t.sExpression != sExpectedRemainder ){
- std::cout << std::endl << "[FAIL T4] " << title << std::endl;
- std::cout << " Expression " << sExpression << std::endl;
- std::cout << " Expected Remainder = [" << sExpectedRemainder << "] Actual = [" << t.sExpression.Str() << "]\n";
- return -1;
- }
- if( iErc == XB_NO_ERROR && iTrc == XB_NO_ERROR&& t.cNodeType != cExpectedNodeType ){
- std::cout << std::endl << "[FAIL T5] " << title << std::endl;
- std::cout << " Expression " << sExpression << std::endl;
- std::cout << " Expected Node type = [" << cExpectedNodeType << "] Actual = [" << t.cNodeType << "]\n";
- return -1;
- }
- if( iErc == XB_NO_ERROR && iTrc == XB_NO_ERROR&& t.cReturnType != cExpectedReturnType ){
- std::cout << std::endl << "[FAIL T6] " << title << std::endl;
- std::cout << " Expression " << sExpression << std::endl;
- std::cout << " Expected Return type = [" << cExpectedReturnType << "] Actual = [" << t.cReturnType << "]\n";
- return -1;
- }
- if( iPrintOption == 2 ){
- if( iErc == XB_NO_ERROR )
- std::cout << "[PASS] " << title << " Expected matches actual Data=[" << sExpectedToken << "]" << std::endl;
- else
- std::cout << "[PASS] " << title << " Expected return code matches actual =[" << iErc << "]" << std::endl;
- } else if( iPrintOption == 1 )
- std::cout << "[PASS] " << title << std::endl;
-
- return 0;
-}
-
-/**************************************************************************/
-xbInt16 TestMethod( xbXBase *xb, xbDbf *d, xbInt16 PrintOption, const char * title,
- const xbString &sExpression, const char * sExpectedResult, xbInt16 iExpectedResultLen );
-
-xbInt16 TestMethod( xbXBase *xb, xbDbf *d, xbInt16 PrintOption, const char * title,
- const xbString &sExpression, const char * sExpectedResult, xbInt16 iExpectedResultLen ){
-
- xbInt16 iRc = XB_NO_ERROR;
- xbString sResult;
- xbExp exp( xb );
-
- if(( iRc = exp.ParseExpression( d, sExpression )) != XB_NO_ERROR ){
- std::cout << std::endl << "[FAIL 1] " << title << std::endl;
- std::cout << " Return Code = [" << iRc << "]" << std::endl;
- return -1;
- }
- if(( iRc = exp.GetReturnType()) != XB_EXP_CHAR ){
- std::cout << std::endl << "[FAIL 2] " << title << std::endl;
- std::cout << " Result type not XB_EXP_CHAR = [" << exp.GetReturnType() << "]" << std::endl;
- return -1;
- }
- if(( iRc = exp.ProcessExpression()) != XB_NO_ERROR ){
- std::cout << std::endl << "[FAIL 3] " << title << std::endl;
- std::cout << " Return Code = [" << iRc << "]" << std::endl;
- return -1;
- }
- if(( iRc = exp.GetStringResult( sResult )) != XB_NO_ERROR ){
- std::cout << std::endl << "[FAIL 4] " << title << std::endl;
- std::cout << " Return Code = [" << iRc << "]" << std::endl;
- return -1;
- }
- if( sResult != sExpectedResult ){
- std::cout << std::endl << "[FAIL 5] " << title << std::endl;
- std::cout << " Expected Result = [" << sExpectedResult << "] Actual Result =[" << sResult.Str() << "]" << std::endl;
- #ifdef XB_DEBUG_SUPPORT
- exp.DumpTree( 1 );
- #endif // XB_DEBUG_SUPPORT
- return -1;
- }
- if( exp.GetResultLen() != iExpectedResultLen ){
- std::cout << std::endl << "[FAIL 6] " << title << std::endl;
- std::cout << " Expected Result Len = [" << iExpectedResultLen << "] Actual Result =[" << exp.GetResultLen() << "]" << std::endl;
- #ifdef XB_DEBUG_SUPPORT
- exp.DumpTree( 1 );
- #endif // XB_DEBUG_SUPPORT
- return -1;
- }
- if( PrintOption == 2 )
- std::cout << "[PASS] " << title << " Expected [" << sExpectedResult << "] matches actual [" << exp.GetResultLen() << "]" << std::endl;
- else if( PrintOption == 1 )
- std::cout << "[PASS] " << title << std::endl;
-
- return 0;
-}
-
-/**************************************************************************/
-xbInt16 TestMethod( xbXBase * xb, xbDbf * d, xbInt16 PrintOption, const char * title,
- const xbString &sExpression, xbDouble dExpectedResult );
-
-xbInt16 TestMethod( xbXBase * xb, xbDbf * d, xbInt16 PrintOption, const char * title,
- const xbString &sExpression, xbDouble dExpectedResult ){
-
- xbDouble dResult;
- xbInt16 iRc = XB_NO_ERROR;
- xbExp exp( xb );
-
- if(( iRc = exp.ParseExpression( d, sExpression )) != XB_NO_ERROR ){
- std::cout << std::endl << "[FAIL 1] " << title << std::endl;
- std::cout << " Return Code = [" << iRc << "]" << std::endl;
- return -1;
- }
- if(( iRc = exp.GetReturnType()) != XB_EXP_NUMERIC ){
- std::cout << std::endl << "[FAIL 2] " << title << std::endl;
- std::cout << " Result type not XB_EXP_NUMERIC = [" << exp.GetReturnType() << "]" << std::endl;
- return -1;
- }
- if(( iRc = exp.ProcessExpression()) != XB_NO_ERROR ){
- std::cout << std::endl << "[FAIL 3] " << title << std::endl;
- std::cout << " Return Code = [" << iRc << "]" << std::endl;
- return -1;
- }
- if(( iRc = exp.GetNumericResult( dResult )) != XB_NO_ERROR ){
- std::cout << std::endl << "[FAIL 4] " << title << std::endl;
- std::cout << " Return Code = [" << iRc << "]" << std::endl;
- return -1;
- }
- if( !dblEquals( dResult, dExpectedResult, .01 )){
- std::cout << std::endl << "[FAIL 5] " << title << std::endl;
- std::cout << " Expected Result = [" << dExpectedResult << "] Actual Result =[" << dResult << "]" << std::endl;
- // dump out the tree
- #ifdef XB_DEBUG_SUPPORT
- exp.DumpTree( 1 );
- #endif // XB_DEBUG_SUPPORT
- return -1;
- }
- if( PrintOption == 2 )
- std::cout << "[PASS] " << title << " Expected [" << dExpectedResult << "] matches actual [" << exp.GetResultLen() << "]" << std::endl;
- else if( PrintOption == 1 )
- std::cout << "[PASS] " << title << std::endl;
- return 0;
-}
-/**************************************************************************/
-xbInt16 TestMethod( xbXBase * xb, xbDbf * d, xbInt16 PrintOption, const char * title,
- const xbString &sExpression, xbDate dtExpectedResult );
-xbInt16 TestMethod( xbXBase * xb, xbDbf * d, xbInt16 PrintOption, const char * title,
- const xbString &sExpression, xbDate dtExpectedResult ){
-
- xbDate dtResult;
- xbInt16 iRc = XB_NO_ERROR;
- xbExp exp( xb );
- if(( iRc = exp.ParseExpression( d, sExpression )) != XB_NO_ERROR ){
- std::cout << std::endl << "[FAIL 1] " << title << std::endl;
- std::cout << " Return Code = [" << iRc << "]" << std::endl;
- return -1;
- }
- if(( iRc = exp.GetReturnType()) != XB_EXP_DATE ){
- std::cout << std::endl << "[FAIL 2] " << title << std::endl;
- std::cout << " Result type not XB_EXP_DATE = [" << exp.GetReturnType() << "]" << std::endl;
- return -1;
- }
- if(( iRc = exp.ProcessExpression()) != XB_NO_ERROR ){
- std::cout << std::endl << "[FAIL 3] " << title << std::endl;
- std::cout << " Return Code = [" << iRc << "]" << std::endl;
- return -1;
- }
- if(( iRc = exp.GetDateResult( dtResult )) != XB_NO_ERROR ){
- std::cout << std::endl << "[FAIL 4] " << title << std::endl;
- std::cout << " Return Code = [" << iRc << "]" << std::endl;
- return -1;
- }
- if( dtResult != dtExpectedResult ){
- std::cout << std::endl << "[FAIL 5] " << title << std::endl;
- std::cout << " Expected Result = [" << dtExpectedResult.Str() << "] Actual Result =[" << dtResult.Str() << "]" << std::endl;
- // dump out the tree
- #ifdef XB_DEBUG_SUPPORT
- exp.DumpTree( 1 );
- #endif // XB_DEBUG_SUPPORT
- return -1;
- }
- if( PrintOption == 2 )
- std::cout << "[PASS] " << title << " Expected [" << dtExpectedResult.Str() << "] matches actual [" << exp.GetResultLen() << "]" << std::endl;
- else if( PrintOption == 1 )
- std::cout << "[PASS] " << title << std::endl;
-
- return 0;
-}
-/**************************************************************************/
-xbInt16 TestMethod( xbXBase * xb, xbDbf * d, xbInt16 PrintOption, const char * title,
- const xbString &sExpression, xbBool bExpectedResult );
-xbInt16 TestMethod( xbXBase * xb, xbDbf * d, xbInt16 PrintOption, const char * title,
- const xbString &sExpression, xbBool bExpectedResult ){
-
- xbInt16 iRc = XB_NO_ERROR;
-
- xbBool bResult;
- xbExp exp( xb );
- if(( iRc = exp.ParseExpression( d, sExpression )) != XB_NO_ERROR ){
- std::cout << std::endl << "[FAIL 1] " << title << std::endl;
- std::cout << " Return Code = [" << iRc << "]" << std::endl;
- return -1;
- }
- if(( iRc = exp.GetReturnType()) != XB_EXP_LOGICAL ){
- std::cout << std::endl << "[FAIL 2] " << title << std::endl;
- std::cout << " Result type not XB_EXP_LOGICAL = [" << exp.GetReturnType() << "]" << std::endl;
- return -1;
- }
- if(( iRc = exp.ProcessExpression()) != XB_NO_ERROR ){
- std::cout << std::endl << "[FAIL 3] " << title << std::endl;
- std::cout << " Return Code = [" << iRc << "]" << std::endl;
- return -1;
- }
- if(( iRc = exp.GetBoolResult( bResult )) != XB_NO_ERROR ){
- std::cout << std::endl << "[FAIL 4] " << title << std::endl;
- std::cout << " Return Code = [" << iRc << "]" << std::endl;
- return -1;
- }
- if( bResult != bExpectedResult ){
- std::cout << std::endl << "[FAIL 5] " << title << std::endl;
- std::cout << " Expected Result = [" << bExpectedResult << "] Actual Result =[" << bResult << "]" << std::endl;
- // dump out the tree
- #ifdef XB_DEBUG_SUPPORT
- exp.DumpTree( 1 );
- #endif //XB_DEBUG_SUPPORT
- return -1;
- }
- if( PrintOption == 2 )
- std::cout << "[PASS] " << title << " Expected [" << bExpectedResult << "] matches actual [" << bResult << "]" << std::endl;
- else if( PrintOption == 1 )
- std::cout << "[PASS] " << title << std::endl;
- return 0;
-}
-/**************************************************************************/
-int main( int argCnt, char **av )
-{
- xbInt16 iRc = 0;
- xbInt16 rc2 = 0;
- xbInt16 po = 1; /* print option */
- /* 0 - QUIET */
- /* 1 - NORMAL */
- /* 2 - VERBOSE */
-
- if( argCnt > 1 ) {
- if( av[1][0] == 'Q' )
- po = 0;
- else if( av[1][0] == 'V' )
- po = 2;
- }
-
- xbSchema MyRecord[] =
- {
- { "CHAR1", XB_CHAR_FLD, 5, 0 },
- { "CHAR2", XB_CHAR_FLD, 7, 0 },
- { "DATE1", XB_DATE_FLD, 8, 0 },
- { "DATE2", XB_DATE_FLD, 8, 0 },
- { "NUM1", XB_NUMERIC_FLD, 9, 2 },
- { "",0,0,0 }
- };
-
- xbXBase x;
- xbDbf * MyFile;
- xbDate d;
-
- #ifdef XB_LOGGING_SUPPORT
- x.SetLogDirectory( PROJECT_LOG_DIR );
- x.EnableMsgLogging();
- if( po ){
- std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
- }
- xbString sMsg;
- sMsg.Sprintf( "Program [%s] initializing...", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- x.SetDataDirectory( PROJECT_DATA_DIR );
- InitTime();
-
- if( po > 0 ){
- std::cout << "XBase Expression testing program.." << std::endl;
- std::cout << "This program tests the XBase expression logic." << std::endl;
- std::cout << "Default Data Directory is [" << x.GetDataDirectory().Str() << "]" << std::endl;
- }
-
-// return 0;
-
- #ifdef XB_DBF4_SUPPORT
- MyFile = new xbDbf4( &x ); /* version 4 dbf file */
- #else
- MyFile = new xbDbf3( &x ); /* version 3 dbf file */
- #endif
-
-
-
-// return 0;
-
- rc2 = MyFile->CreateTable( "ExpTest.DBF", "ExpTest", MyRecord, XB_OVERLAY, XB_MULTI_USER );
-
-// return 0;
-
- iRc += TestMethod( po, "CreateTable()", rc2, XB_NO_ERROR );
- iRc += TestMethod( po, "PutField()", MyFile->PutField( "CHAR1", "TEST" ), XB_NO_ERROR );
- iRc += TestMethod( po, "PutField()", MyFile->PutField( "CHAR2", "TEST7B" ), XB_NO_ERROR );
- iRc += TestMethod( po, "PutField()", MyFile->PutFloatField( "NUM1", 5 ), XB_NO_ERROR );
- iRc += TestMethod( po, "PutField()", MyFile->PutField( "DATE1", "19890303" ), XB_NO_ERROR );
- iRc += TestMethod( po, "PutField()", MyFile->PutField ( "DATE2", "20120708" ), XB_NO_ERROR );
- iRc += TestMethod( po, "AppendRecord()", MyFile->AppendRecord(), XB_NO_ERROR );
-
-
-// return 0;
-
-
- iRc += TestTokenMethod( &x, po, "EOX Test1", "", "", "", '?', XB_EXP_UNKNOWN, XB_NO_ERROR, XB_END_OF_EXPRESSION );
- iRc += TestTokenMethod( &x, po, "EOX Test2 ", " ", "", "", '?', XB_EXP_UNKNOWN, XB_NO_ERROR, XB_END_OF_EXPRESSION );
- iRc += TestTokenMethod( &x, po, "Paren Test1 ", "(SOMETOKEN)+5-100", "SOMETOKEN", "+5-100", XB_EXP_NOTROOT, XB_EXP_UNKNOWN, XB_NO_ERROR , XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Paren Test2 ", "{ANOTHERTOKEN} + 55-100", "ANOTHERTOKEN", " + 55-100", XB_EXP_NOTROOT, XB_EXP_UNKNOWN, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Paren Test3 ", "{{NESTED}TOKEN} + 55-100", "{NESTED}TOKEN", " + 55-100", XB_EXP_NOTROOT, XB_EXP_UNKNOWN, XB_NO_ERROR, XB_NO_ERROR );
-
- // next line generates log message
- iRc += TestTokenMethod( &x, po, "Paren Test4 ", "{{NESTED}TOKEN + 55-100", "{NESTED}TOKEN", " + 55-100", XB_EXP_NOTROOT, XB_EXP_UNKNOWN, XB_PARSE_ERROR, XB_UNBALANCED_PARENS );
- iRc += TestTokenMethod( &x, po, "Paren Test5 ", " (SOMETOKEN )+5-100", "SOMETOKEN ", "+5-100", XB_EXP_NOTROOT, XB_EXP_UNKNOWN, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Quote Test1 ", "\"SOMETOKEN\"+5-100", "SOMETOKEN", "+5-100", XB_EXP_CONSTANT, XB_EXP_CHAR, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Quote Test2 ", "'SOMETOKEN2'", "SOMETOKEN2", "", XB_EXP_CONSTANT, XB_EXP_CHAR, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Quote Test3 ", " 'SOMETOKEN3 '", "SOMETOKEN3 ", "", XB_EXP_CONSTANT, XB_EXP_CHAR, XB_NO_ERROR, XB_NO_ERROR );
-
-
-
- // next line generates log message
-
- iRc += TestTokenMethod( &x, po, "Quote Test3 ", " 'SOMETOKEN4 ", "SOMETOKEN3 ", "", XB_EXP_CONSTANT, XB_EXP_CHAR, XB_PARSE_ERROR, XB_UNBALANCED_QUOTES );
-
-
- iRc += TestTokenMethod( &x, po, "Logical Constant1 ", ".T.", "T", "", XB_EXP_CONSTANT, XB_EXP_LOGICAL, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Logical Constant2 ", ".F.", "F", "", XB_EXP_CONSTANT, XB_EXP_LOGICAL, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Logical Constant3 ", ".TRUE.", "T", "", XB_EXP_CONSTANT, XB_EXP_LOGICAL, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Logical Constant4 ", ".FALSE.", "F", "", XB_EXP_CONSTANT, XB_EXP_LOGICAL, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Logical Constant5 ", ".T. and x", "T", " and x", XB_EXP_CONSTANT, XB_EXP_LOGICAL, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Numeric Constant1 ", "123", "123", "", XB_EXP_CONSTANT, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
-
-
-
- iRc += TestTokenMethod( &x, po, "Numeric Constant2 ", "-123", "-123", "", XB_EXP_CONSTANT, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Numeric Constant3 ", " - 123", "-123", "", XB_EXP_CONSTANT, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Numeric Constant4 ", " - .456", "-.456", "", XB_EXP_CONSTANT, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Numeric Constant5 ", " -.002", "-.002", "", XB_EXP_CONSTANT, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Numeric Constant6 ", " - .002 + 1", "-.002", " + 1", XB_EXP_CONSTANT, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Operator 1", "-", "-", "", XB_EXP_OPERATOR, XB_EXP_UNKNOWN, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Operator 2", "+", "+", "", XB_EXP_OPERATOR, XB_EXP_UNKNOWN, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Operator 3", "*", "*", "", XB_EXP_OPERATOR, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Operator 4", "/", "/", "", XB_EXP_OPERATOR, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Operator 5", "^", "^", "", XB_EXP_OPERATOR, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Operator 6", "%", "%", "", XB_EXP_OPERATOR, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Operator 7", "=", "=", "", XB_EXP_OPERATOR, XB_EXP_LOGICAL, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Operator 8", "<", "<", "", XB_EXP_OPERATOR, XB_EXP_LOGICAL, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Operator 9", ">", ">", "", XB_EXP_OPERATOR, XB_EXP_LOGICAL, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Operator 10", "$", "$", "", XB_EXP_OPERATOR, XB_EXP_LOGICAL, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Operator 11", "**", "**", "", XB_EXP_OPERATOR, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Operator 12", "++", "++", "", XB_EXP_POST_OPERATOR, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Operator 13", "--", "--", "", XB_EXP_POST_OPERATOR, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Operator 14", "-- ", "--", " ", XB_EXP_POST_OPERATOR, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Operator 15", "--X", "--", "X", XB_EXP_PRE_OPERATOR, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Operator 16", "++X", "++", "X", XB_EXP_PRE_OPERATOR, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Operator 17", "+=", "+=", "", XB_EXP_OPERATOR, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Operator 18", "-=", "-=", "", XB_EXP_OPERATOR, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Operator 19", "*=", "*=", "", XB_EXP_OPERATOR, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Operator 20", "/=", "/=", "", XB_EXP_OPERATOR, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Operator 21", "<>", "<>", "", XB_EXP_OPERATOR, XB_EXP_LOGICAL, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Operator 22", "<=", "<=", "", XB_EXP_OPERATOR, XB_EXP_LOGICAL, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Operator 23", ">=", ">=", "", XB_EXP_OPERATOR, XB_EXP_LOGICAL, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Operator 24", ">= grapes", ">=", " grapes", XB_EXP_OPERATOR, XB_EXP_LOGICAL, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Operator 25", "< apples ", "<", " apples ", XB_EXP_OPERATOR, XB_EXP_LOGICAL, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Operator 26", ".NOT.", ".NOT.", "", XB_EXP_OPERATOR, XB_EXP_LOGICAL, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Operator 27", ".AND.", ".AND.", "", XB_EXP_OPERATOR, XB_EXP_LOGICAL, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Operator 28", ".OR.", ".OR.", "", XB_EXP_OPERATOR, XB_EXP_LOGICAL, XB_NO_ERROR, XB_NO_ERROR );
-
- iRc += TestTokenMethod( &x, po, "Function 1", "STOD ( \"08252017\" )", "STOD ( \"08252017\" )", "", XB_EXP_FUNCTION, XB_EXP_DATE, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Function 2", "STR( 8 )", "STR( 8 )", "", XB_EXP_FUNCTION, XB_EXP_CHAR, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Function 3", "STR( (8-3)+3 )", "STR( (8-3)+3 )", "", XB_EXP_FUNCTION, XB_EXP_CHAR, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Function 4", "STR( (8-3)+3 ) + \"A\"", "STR( (8-3)+3 )", " + \"A\"", XB_EXP_FUNCTION, XB_EXP_CHAR, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Function 5", "ISALPHA( \"A\" )", "ISALPHA( \"A\" )", "", XB_EXP_FUNCTION, XB_EXP_LOGICAL, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Function 6", "EXP( 6 )", "EXP( 6 )", "", XB_EXP_FUNCTION, XB_EXP_NUMERIC, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Field 1", "NUM1", "NUM1", "", XB_EXP_FIELD, XB_EXP_UNKNOWN, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Field 2", "NUM1 + X", "NUM1", " + X", XB_EXP_FIELD, XB_EXP_UNKNOWN, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Field 3", "ExpTest->NUM1", "ExpTest->NUM1", "", XB_EXP_FIELD, XB_EXP_UNKNOWN, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Field 4", "ExpTest ->NUM1", "ExpTest ->NUM1", "", XB_EXP_FIELD, XB_EXP_UNKNOWN, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Field 5", "ExpTest -> NUM1", "ExpTest -> NUM1", "", XB_EXP_FIELD, XB_EXP_UNKNOWN, XB_NO_ERROR, XB_NO_ERROR );
- iRc += TestTokenMethod( &x, po, "Field 6", "ExpTest -> NUM1+1", "ExpTest -> NUM1", "+1", XB_EXP_FIELD, XB_EXP_UNKNOWN, XB_NO_ERROR, XB_NO_ERROR );
-
- iRc += TestWeight( &x, po, "Weight Test", "", 0 );
- iRc += TestWeight( &x, po, "Weight Test", "toobig", 0 );
- iRc += TestWeight( &x, po, ".OR. Weight Test", ".OR.", 1 );
- iRc += TestWeight( &x, po, ".AND. Weight Test", ".AND.", 2 );
- iRc += TestWeight( &x, po, ".NOT. Weight Test", ".NOT.", 3 );
- iRc += TestWeight( &x, po, "> Weight Test", ">", 4 );
- iRc += TestWeight( &x, po, ">= Weight Test", ">=", 4 );
- iRc += TestWeight( &x, po, "< Weight Test", "<", 4 );
- iRc += TestWeight( &x, po, "<= Weight Test", "<=", 4 );
- iRc += TestWeight( &x, po, "<> Weight Test", "<>", 4 );
- iRc += TestWeight( &x, po, "# Weight Test", "#", 4 );
- iRc += TestWeight( &x, po, "$ Weight Test", "$", 4 );
- iRc += TestWeight( &x, po, "= Weight Test", "=", 4 );
- iRc += TestWeight( &x, po, "-- Prefix decrement Weight Test", "--0", 9 );
- iRc += TestWeight( &x, po, "++ Prefix increment Weight Test", "++0", 9 );
- iRc += TestWeight( &x, po, "** Weight Test", "**", 8 );
- iRc += TestWeight( &x, po, "^ Weight Test", "^", 8 );
- iRc += TestWeight( &x, po, "* Weight Test", "*", 7 );
- iRc += TestWeight( &x, po, "* Weight Test", "/", 7 );
- iRc += TestWeight( &x, po, "* Weight Test", "%", 7 );
- iRc += TestWeight( &x, po, "* Weight Test", "*=", 7 );
- iRc += TestWeight( &x, po, "* Weight Test", "/=", 7 );
- iRc += TestWeight( &x, po, "+ Weight Test", "+", 6 );
- iRc += TestWeight( &x, po, "- Weight Test", "-", 6 );
- iRc += TestWeight( &x, po, "+= Weight Test", "+=", 6 );
- iRc += TestWeight( &x, po, "-= Weight Test", "-=", 6 );
- iRc += TestWeight( &x, po, "-- Postfix decrement Weight Test", "--1", 5 );
- iRc += TestWeight( &x, po, "++ Postfix increment Weight Test", "++1", 5 );
-
- iRc += TestMethod( &x, MyFile, po, "CharTest1", "CHAR1", "TEST ", 5 );
- iRc += TestMethod( &x, MyFile, po, "CharTest2", "ExpTest->CHAR1", "TEST ", 5 );
- iRc += TestMethod( &x, MyFile, po, "CharTest3", "ExpTest->CHAR1+CHAR1", "TEST TEST ", 10 );
- iRc += TestMethod( &x, MyFile, po, "CharTest4", "\"PRE_ \"+\" _POST\"", "PRE_ _POST", 11 );
- iRc += TestMethod( &x, MyFile, po, "CharTest5", "\"PRE_ \"-\" _POST\"", "PRE_ _POST ", 11 );
- iRc += TestMethod( &x, MyFile, po, "CharTest6", "\"PRE_\"+ExpTest->CHAR1+\"_POST\"", "PRE_TEST _POST", 14 );
- iRc += TestMethod( &x, MyFile, po, "CharTest7", "STR(123)", " 123", 10 );
- iRc += TestMethod( &x, MyFile, po, "CharTest8", "STR(123)+LTRIM(STR(456))", " 123456", 20 );
- iRc += TestMethod( &x, MyFile, po, "CharTest9", "STR(8)+STR(7)", " 8 7", 20 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest1", "ALLTRIM( \" ABCD \" )", "ABCD", 11 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest2", "CDOW( STOD( \"20171014\" ))", "Saturday", 9 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest3", "CHR( 66 )", "B", 1 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest4", "CMONTH( STOD( \"20171114\" ) )", "November", 9 );
-
- // next line causes MAC compiler to cough up a furball
- //iRc += TestMethod( &x, MyFile, po, "FuncTest5", "DESCEND( \"ABCDE\" )", "", 5 );
-
- char sDescendResult[6]; // = "";
- sDescendResult[0] = (char) 0xBE;
- sDescendResult[1] = (char) 0xBD;
- sDescendResult[2] = (char) 0xBC;
- sDescendResult[3] = (char) 0xBB;
- sDescendResult[4] = (char) 0xBA;
- sDescendResult[5] = (char) 0x00;
- iRc += TestMethod( &x, MyFile, po, "FuncTest5", "DESCEND( \"ABCDE\" )", sDescendResult, 5 );
-
- iRc += TestMethod( &x, MyFile, po, "FuncTest6", "DTOC( STOD( \"20171114\" ))", "11/14/17", 8 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest7", "DTOS( STOD( \"20171114\" ))", "20171114", 8 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest8", "LEFT( \"ABCDEFGH\", 5 )", "ABCDE", 5 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest9", "LOWER( \"ABCDEFGH\" )", "abcdefgh", 8 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest10", "LTRIM( \" ABC\" )", "ABC", 6 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest11", "REPLICATE( \"ABC\", 3 )", "ABCABCABC", 9 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest12", "RIGHT( \"ABCDEFGH\", 5 )", "DEFGH", 5 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest13", "RTRIM( \"ABCD \" )", "ABCD", 7 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest14", "SPACE( 5 )", " ", 5 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest15", "STR( 8 )", " 8", 10 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest16", "STR( 3, 4 )", " 3", 4 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest17", "STR( 12.7, 5, 2 )", "12.70", 5 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest18", "STR( 43.17, 9, 4, \"0\" )", "0043.1700", 9 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest19", "STRZERO( 56.21, 9, 4 )", "0056.2100", 9 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest20", "SUBSTR( \"SOMESTRING\", 3, 5 )", "MESTR", 5 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest21", "TRIM( \" abc123 \" )", " abc123", 12 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest22", "UPPER( \"abc123RRR\" )", "ABC123RRR", 9 );
-
- // numeric logic tests
- iRc += TestMethod( &x, MyFile, po, "NumericTest1", "1 + 1", (xbDouble) 2 );
- iRc += TestMethod( &x, MyFile, po, "NumericTest2", "6 - 1", (xbDouble) 5 );
- iRc += TestMethod( &x, MyFile, po, "NumericTest3", "6 * 4", (xbDouble) 24 );
- iRc += TestMethod( &x, MyFile, po, "NumericTest4", "8 / 2", (xbDouble) 4 );
- iRc += TestMethod( &x, MyFile, po, "NumericTest5", "3 ^ 3", (xbDouble) 27 );
- iRc += TestMethod( &x, MyFile, po, "NumericTest6", "4 ** 4", (xbDouble) 256 );
- iRc += TestMethod( &x, MyFile, po, "NumericTest7", "NUM1", (xbDouble) 5 );
- iRc += TestMethod( &x, MyFile, po, "NumericTest8", "NUM1 + 2.3", (xbDouble) 7.3 );
- iRc += TestMethod( &x, MyFile, po, "NumericTest9", "++NUM1", (xbDouble) 6 );
- iRc += TestMethod( &x, MyFile, po, "NumericTest10", "NUM1++", (xbDouble) 5 );
- iRc += TestMethod( &x, MyFile, po, "NumericTest11", "--NUM1", (xbDouble) 4 );
- iRc += TestMethod( &x, MyFile, po, "NumericTest12", "NUM1--", (xbDouble) 5 );
- iRc += TestMethod( &x, MyFile, po, "NumericTest13", "3++", (xbDouble) 3 );
- iRc += TestMethod( &x, MyFile, po, "NumericTest14", "++3", (xbDouble) 4 );
- iRc += TestMethod( &x, MyFile, po, "NumericTest15", "4--", (xbDouble) 4 );
- iRc += TestMethod( &x, MyFile, po, "NumericTest16", "--4", (xbDouble) 3 );
- iRc += TestMethod( &x, MyFile, po, "NumericTest17", "3 += 12", (xbDouble) 15 );
- iRc += TestMethod( &x, MyFile, po, "NumericTest18", "3 -= 12", (xbDouble) -9 );
- iRc += TestMethod( &x, MyFile, po, "NumericTest19", "3 *= 12", (xbDouble) 36 );
- iRc += TestMethod( &x, MyFile, po, "NumericTest20", "12 /= 3", (xbDouble) 4 );
- iRc += TestMethod( &x, MyFile, po, "NumericTest21", "(12+3)*(15-13)", (xbDouble) 30 );
-
- // numeric functions
- iRc += TestMethod( &x, MyFile, po, "FuncTest23", "ABS( -22 )", (xbDouble) 22 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest24", "ABS( 23 )", (xbDouble) 23 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest25", "ASC( \"A\" )", (xbDouble) 65 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest26", "AT( \",\", \"Booth, Joseph\" )", (xbDouble) 6 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest27", "DAY( STOD( \"20171017\" ))", (xbDouble) 17 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest28", "DESCEND( 1991 )", (xbDouble) -1991 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest29", "DOW( STOD( \"20171017\" ) )", (xbDouble) 3 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest30", "DOW( STOD( \"20171021\" ) )", (xbDouble) 0 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest31", "EXP( 0 )", (xbDouble) 1 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest32", "INT( 123.45 )", (xbDouble) 123 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest33", "LEN( \"ABC123\" )", (xbDouble) 6 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest34", "LOG( 10 )", (xbDouble) 2.3 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest35", "MAX( 10, 20 )", (xbDouble) 20 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest36", "MIN( 10, 20 )", (xbDouble) 10 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest37", "MONTH( STOD( \"20171017\" ))", (xbDouble) 10 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest38", "RECCOUNT()", (xbDouble) 1 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest39", "RECNO()", (xbDouble) 1 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest40", "SQRT( 9 )", (xbDouble) 3 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest41", "VAL( \"89\" )", (xbDouble) 89 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest42", "VAL( \"22.13 and some text\" )", (xbDouble) 22.13 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest43", "YEAR( STOD( \"20171017\" ))", (xbDouble) 2017 );
-
- // date logic tests
- xbDate dtTest1( "19890303" );
- xbDate dtTest2( "20120708" );
- iRc += TestMethod( &x, MyFile, po, "DateTest1", "ExpTest->DATE1", dtTest1 );
- iRc += TestMethod( &x, MyFile, po, "DateTest2", "DATE1", dtTest1 );
- iRc += TestMethod( &x, MyFile, po, "DateTest3", "ExpTest->DATE2", dtTest2 );
- iRc += TestMethod( &x, MyFile, po, "DateTest4", "DATE2", dtTest2 );
- iRc += TestMethod( &x, MyFile, po, "DateTest5", "DATE2 - DATE1", (xbDouble) 8528 );
-
- dtTest1.Set( "20120705" );
-
- iRc += TestMethod( &x, MyFile, po, "DateTest6", "DATE2 - 3", dtTest1 );
-
- iRc += TestMethod( &x, MyFile, po, "DateTest7", "DATE2 -= 3", dtTest1 );
-
- dtTest1.Set( "20120718" );
- iRc += TestMethod( &x, MyFile, po, "DateTest8", "DATE2 + 10", dtTest1 );
- iRc += TestMethod( &x, MyFile, po, "DateTest9", "DATE2 += 10", dtTest1 );
-
- dtTest1.Set( "20120709" );
- iRc += TestMethod( &x, MyFile, po, "DateTest10", "++DATE2", dtTest1 );
- dtTest1.Set( "20120707" );
- iRc += TestMethod( &x, MyFile, po, "DateTest11", "--DATE2", dtTest1 );
-
- dtTest1.Set( "20120708" );
- iRc += TestMethod( &x, MyFile, po, "DateTest12", "DATE2++", dtTest1 );
- iRc += TestMethod( &x, MyFile, po, "DateTest13", "DATE2--", dtTest1 );
-
- iRc += TestMethod( &x, MyFile, po, "DateTest14", "{07/08/12}", dtTest1 );
- iRc += TestMethod( &x, MyFile, po, "DateTest15", "{07/08/2012}", dtTest1 );
-
- iRc += TestMethod( &x, MyFile, po, "DateTest16", "{07/11/12} -3", dtTest1 );
- iRc += TestMethod( &x, MyFile, po, "DateTest17", "{07/06/2012} + 2", dtTest1 );
-
- iRc += TestMethod( &x, MyFile, po, "FuncTest44", "CTOD( \"07\\08\\12\" )", dtTest1 );
-
- xbDate dtToday;
- iRc += TestMethod( &x, MyFile, po, "FuncTest45", "DATE()", dtToday );
-
- dtTest2 = "28870625";
- iRc += TestMethod( &x, MyFile, po, "FuncTest46", "DESCEND( DATE2 )", dtTest2 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest47", "STOD( \"20120708\" )", dtTest1 );
-
- // boolean logic tests
- iRc += TestMethod( &x, MyFile, po, "LogicTest1", "3=5", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest2", "5=5", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest3", "\"abc\"=\"def\"", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest4", "\"abc\"=\"abc\"", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest5", "CTOD( \"07\\08\\12\" ) = CTOD ( \"07\\08\\12\" )", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest6", "CTOD( \"07\\09\\12\" ) = CTOD ( \"07\\08\\12\" )", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest7", "3<>5", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest8", "5<>5", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest9", "3!=5", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest10", "5!=5", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest11", "3 # 5", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest12", "5#5", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest13", "\"3\"<>\"5\"", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest14", "\"5\"<>\"5\"", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest15", "\"3\"!=\"5\"", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest16", "\"5\"!=\"5\"", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest17", "\"3\" # \"5\"", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest18", "\"5\"#\"5\"", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest19", "CTOD( \"07\\08\\12\" ) <> CTOD ( \"07\\08\\12\" )", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest20", "CTOD( \"07\\09\\12\" ) <> CTOD ( \"07\\08\\12\" )", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest21", "CTOD( \"07\\08\\12\" ) != CTOD ( \"07\\08\\12\" )", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest22", "CTOD( \"07\\09\\12\" ) != CTOD ( \"07\\08\\12\" )", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest23", "CTOD( \"07\\08\\12\" ) # CTOD ( \"07\\08\\12\" )", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest24", "CTOD( \"07\\09\\12\" ) # CTOD ( \"07\\08\\12\" )", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest25", "3<5", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest26", "5<5", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest27", "5<4", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest28", "\"a\"<\"b\"", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest29", "\"a\"<\"a\"", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest30", "\"c\"<\"b\"", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest31", "CTOD( \"07\\07\\12\" ) < CTOD ( \"07\\08\\12\" )", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest32", "CTOD( \"07\\08\\12\" ) < CTOD ( \"07\\08\\12\" )", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest33", "CTOD( \"07\\09\\12\" ) < CTOD ( \"07\\08\\12\" )", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest34", "3>5", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest35", "5>5", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest36", "5>4", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest37", "\"a\">\"b\"", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest38", "\"a\">\"a\"", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest39", "\"c\">\"b\"", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest40", "CTOD( \"07\\07\\12\" ) > CTOD ( \"07\\08\\12\" )", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest41", "CTOD( \"07\\08\\12\" ) > CTOD ( \"07\\08\\12\" )", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest42", "CTOD( \"07\\09\\12\" ) > CTOD ( \"07\\08\\12\" )", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest43", "3<=5", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest44", "5<=5", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest45", "5<=4", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest46", "\"a\"<=\"b\"", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest47", "\"a\"<=\"a\"", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest48", "\"c\"<=\"b\"", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest49", "CTOD( \"07\\07\\12\" ) <= CTOD ( \"07\\08\\12\" )", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest50", "CTOD( \"07\\08\\12\" ) <= CTOD ( \"07\\08\\12\" )", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest51", "CTOD( \"07\\09\\12\" ) <= CTOD ( \"07\\08\\12\" )", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest52", "3>=5", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest53", "5>=5", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest54", "5>=4", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest55", "\"a\">=\"b\"", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest56", "\"a\">=\"a\"", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest57", "\"c\">=\"b\"", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest58", "CTOD( \"07\\07\\12\" ) >= CTOD ( \"07\\08\\12\" )", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest59", "CTOD( \"07\\08\\12\" ) >= CTOD ( \"07\\08\\12\" )", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest60", "CTOD( \"07\\09\\12\" ) >= CTOD ( \"07\\08\\12\" )", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest61", "\"abc123\" $ \"abc\"", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest62", "\"abc\" $ \"abc123\"", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest63", "\"abc\" $ \"zzabc123\"", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest64", ".T.", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest65", ".F.", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest66", ".TRUE.", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest67", ".FALSE.", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest68", ".NOT. .F.", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest69", " NOT .F.", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest70", ".NOT. .T.", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest71", " NOT .T.", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest72", ".T. .AND. .T.", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest73", ".T. AND .T.", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest74", ".T. .AND. .NOT. .T.", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest75", ".T. AND NOT .T.", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest76", ".NOT. .T. .AND. .T.", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest77", " NOT .T. AND .T.", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest78", ".NOT. .T. .AND. .NOT. .T.", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest79", " NOT .T. AND NOT .T.", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest80", ".T. .OR. .T.", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest81", ".T. OR .T.", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest82", ".T. .OR. .NOT. .T.", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest83", ".T. OR NOT .T.", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest84", ".NOT. .T. .OR. .T.", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest85", " NOT .T. OR .T.", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "LogicTest86", ".NOT. .T. .OR. .NOT. .T.", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "LogicTest87", " NOT .T. OR NOT .T.", (xbBool) xbFalse );
-
- iRc += TestMethod( &x, MyFile, po, "FuncTest48", "ISALPHA( \"12345\" )", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "FuncTest49", "ISALPHA( \"ABCDEF\" )", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "FuncTest50", "ISALPHA( \"A1234\" )", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "FuncTest51", "ISLOWER( \"12345\" )", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "FuncTest52", "ISLOWER( \"ABCDEF\" )", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "FuncTest53", "ISLOWER( \"abc123\" )", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "FuncTest54", "ISLOWER( \"xyz\" )", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "FuncTest55", "ISUPPER( \"12345\" )", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "FuncTest56", "ISUPPER( \"ABCDEF\" )", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "FuncTest57", "ISUPPER( \"abc123\" )", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "FuncTest58", "ISUPPER( \"xyz\" )", (xbBool) xbFalse );
- iRc += TestMethod( &x, MyFile, po, "FuncTest59", "ISUPPER( \"Xyz\" )", (xbBool) xbTrue );
- iRc += TestMethod( &x, MyFile, po, "FuncTest60", "IIF( .T., \"TRUE \", \"FALSE\" )", "TRUE ", 5 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest61", "IIF( .F., \"TRUE \", \"FALSE\" )", "FALSE", 5 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest62", "DEL()", " ", 1 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest63", "DELETED()", (xbBool) xbFalse );
- iRc += TestMethod( po, "DeleteRecord()", MyFile->DeleteRecord(), XB_NO_ERROR );
- iRc += TestMethod( &x, MyFile, po, "FuncTest64", "DEL()", "*", 1 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest65", "DELETED()", (xbBool) xbTrue );
- iRc += TestMethod( po, "UndeleteRecord()", MyFile->UndeleteRecord(), XB_NO_ERROR );
-
-
- iRc += TestMethod( po, "Close()", MyFile->Close(), XB_NO_ERROR );
- delete MyFile;
-
- if( po > 0 || iRc < 0 )
- fprintf( stdout, "Total Errors = %d\n", iRc * -1 );
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], iRc * -1 );
- x.WriteLogMessage( sMsg );
- #endif
-
- return iRc;
-}
diff --git a/src/tests/xb_test_file.cpp b/src/tests/xb_test_file.cpp
deleted file mode 100755
index cf835c2..0000000
--- a/src/tests/xb_test_file.cpp
+++ /dev/null
@@ -1,209 +0,0 @@
-/* xb_test_file.cpp
-
-Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-// This program tests the file functions
-
-// usage: xb_test_file QUITE|NORMAL|VERBOSE
-
-
-#include "xbase.h"
-
-
-using namespace xb;
-
-
-#include "tstfuncs.cpp"
-
-
-int main( int argCnt, char **av )
-{
- int rc = 0;
- int po = 1; /* print option */
- /* 0 - QUIET */
- /* 1 - NORMAL */
- /* 2 - VERBOSE */
-
- if( argCnt > 1 ) {
- if( av[1][0] == 'Q' )
- po = 0;
- else if( av[1][0] == 'V' )
- po = 2;
- }
- xbXBase x;
-
- #ifdef XB_LOGGING_SUPPORT
- x.SetLogDirectory( PROJECT_LOG_DIR );
- x.EnableMsgLogging();
- if( po ){
- std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
- }
- xbString sMsg;
- sMsg.Sprintf( "Program [%s] initializing...", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- InitTime();
- xbFile f( &x );
- xbString sWrkStr;
- xbString sWrkStr2;
- sWrkStr = PROJECT_DATA_DIR;
- f.SetDataDirectory( PROJECT_DATA_DIR );
-
- #ifdef WIN32
- sWrkStr.SwapChars( '/', '\\' );
- #else
- sWrkStr.SwapChars( '\\', '/' );
- #endif
-
- rc += TestMethod( po, "Set/GetDataDirectory()", f.GetDataDirectory(), sWrkStr, sWrkStr.Len());
-
- f.SetFileName( "TestFile.txt" );
- sWrkStr = "TestFile.txt";
- rc += TestMethod( po, "Set/GetFileName()", f.GetFileName(), sWrkStr, sWrkStr.Len());
-
- f.GetFileType( sWrkStr );
- rc += TestMethod( po, "GetFileType()", sWrkStr, "TXT", 3 );
-
- #ifdef WIN32
- sWrkStr = "\\my\\directory\\";
- #else
- sWrkStr = "/my/directory/";
- #endif
-
- f.SetDirectory( sWrkStr );
- rc += TestMethod( po, "Set/GetDirectory()", f.GetDirectory(), sWrkStr, sWrkStr.Len());
-
- sWrkStr += "TestFile.txt";
- rc += TestMethod( po, "GetFqFileName()", f.GetFqFileName(), sWrkStr, 26 );
-
- #ifdef WIN32
- sWrkStr = "\\some\\directory\\myfile.dat";
- sWrkStr2 = "\\some\\directory\\";
- #else
- sWrkStr = "/some/directory/myfile.dat";
- sWrkStr2 = "/some/directory/";
- #endif
-
- f.SetFqFileName( sWrkStr );
- rc += TestMethod( po, "GetDirectory()", f.GetDirectory(), sWrkStr2, 16 );
- rc += TestMethod( po, "GetFileName()", f.GetFileName(), "myfile.dat", 10 );
-
- rc += TestMethod( po, "NameSuffixMissing()", f.NameSuffixMissing( "myfile.dbf", 1 ), 0 );
- rc += TestMethod( po, "NameSuffixMissing()", f.NameSuffixMissing( "myfile", 1 ), 1 );
- rc += TestMethod( po, "NameSuffixMissing()", f.NameSuffixMissing( "MYFILE", 1 ), 2 );
-
- f.SetDirectory( PROJECT_DATA_DIR );
- f.SetFileName( "xbfile.txt" );
-
- rc += TestMethod( po, "xbFopen()", f.xbFopen( "w+b", XB_MULTI_USER ), XB_NO_ERROR );
-
- xbString sTest;
- sTest = "Test Data";
- rc += TestMethod( po, "xbWrite()", f.xbFwrite( sTest.Str(), 9, 1 ), XB_NO_ERROR );
- rc += TestMethod( po, "xbFclose()", f.xbFclose(), XB_NO_ERROR );
-
- rc += TestMethod( po, "xbFopen()", f.xbFopen( "r+b", XB_MULTI_USER ), XB_NO_ERROR );
- rc += TestMethod( po, "xbFseek()", f.xbFseek( 0, SEEK_SET ), XB_NO_ERROR );
- char buf[10];
- for( int i = 0; i < 10; i++ )
- buf[i] = 0x00;
- rc += TestMethod( po, "xbFread()", f.xbFread( buf, 5, 1 ), XB_NO_ERROR );
- rc += TestMethod( po, "xbFread()", buf, "Test ", 5 );
-
- rc += TestMethod( po, "xbFclose()", f.xbFclose(), XB_NO_ERROR );
- rc += TestMethod( po, "xbRemove()", f.xbRemove(), XB_NO_ERROR );
- xbInt16 iWork = 100;
- char cBuf[9];
- char *p = cBuf;
- f.ePutInt16( cBuf, iWork );
- rc += TestMethod( po, "Put/GetShort()", f.eGetInt16( p ), 100 );
-
- xbInt32 lWork = 10101;
- f.ePutInt32( p, lWork );
- rc += TestMethod( po, "Put/GetLong()", f.eGetInt32( p ), 10101 );
-
- lWork = 2147483647;
- f.ePutInt32( p, lWork );
- rc += TestMethod( po, "Put/GetLong()", f.eGetInt32( p ), 2147483647 );
- rc += TestMethod( po, "Put/GetLong()", (xbInt32) f.eGetUInt32( p ), 2147483647 );
-
- xbDouble d = 123456.789;
- f.ePutDouble( p, d );
- rc += TestMethod( po, "Put/GetDouble()", f.eGetDouble( p ), 123456.789 );
-
- xbString sFqnS;
- xbString sFqnT;
- xbFile f2( &x );
- rc += TestMethod( po, "CreateUniqueFileName()", f2.CreateUniqueFileName( PROJECT_DATA_DIR, "dbf", sFqnS ), XB_NO_ERROR );
-
- rc += TestMethod( po, "FileExists()", f2.FileExists( sFqnS ), xbFalse );
- rc += TestMethod( po, "xbFopen()", f2.xbFopen( "w+b", sFqnS, XB_SINGLE_USER ), XB_NO_ERROR );
- rc += TestMethod( po, "xbFclose()", f2.xbFclose(), XB_NO_ERROR );
- rc += TestMethod( po, "FileExists()", f2.FileExists( sFqnS ), xbTrue );
-
- rc += TestMethod( po, "CreateUniqueFileName()", f2.CreateUniqueFileName( PROJECT_DATA_DIR, "dbf", sFqnT ), XB_NO_ERROR );
- rc += TestMethod( po, "xbRename()", f2.xbRename( sFqnS, sFqnT ), XB_NO_ERROR );
- rc += TestMethod( po, "xbRemove()", f.xbRemove( sFqnT ), XB_NO_ERROR );
-
- xbString sFn;
- rc += TestMethod( po, "GetFileNamePart()", f2.GetFileNamePart( sFqnS , sFn ), XB_NO_ERROR );
- rc += TestMethod( po, "GetFileExtPart()", f2.GetFileExtPart( sFqnS , sFn ), XB_NO_ERROR );
- rc += TestMethod( po, "GetFileExtPart()", f2.GetFileDirPart( sFqnS , sFn ), XB_NO_ERROR );
-
- rc += TestMethod( po, "SetBlockSize()", f.SetBlockSize( 100 ), XB_INVALID_BLOCK_SIZE );
- rc += TestMethod( po, "SetBlockSize()", f.SetBlockSize( 512 ), XB_NO_ERROR );
- rc += TestMethod( po, "GetBlockSize()", (xbInt32) f.GetBlockSize(), 512 );
-
- char BlockBuf[513];
- memset( BlockBuf, 0x00, 513 );
- rc += TestMethod( po, "xbFopen()", f.xbFopen( "w+b", XB_SINGLE_USER ), XB_NO_ERROR );
-
- for( int i = 0; i < 512; i++ )
- BlockBuf[i] = 'A';
- rc += TestMethod( po, "WriteBlock()", f.WriteBlock( 0L, 512, BlockBuf ), XB_NO_ERROR );
-
- for( int i = 0; i < 512; i++ )
- BlockBuf[i] = 'B';
- rc += TestMethod( po, "WriteBlock()", f.WriteBlock( 1L, 512, BlockBuf ), XB_NO_ERROR );
-
- for( int i = 0; i < 512; i++ )
- BlockBuf[i] = 'C';
- rc += TestMethod( po, "WriteBlock()", f.WriteBlock( 2L, 512, BlockBuf ), XB_NO_ERROR );
-
- char BlockBuf2[513];
- memset( BlockBuf2, 0x00, 513 );
- rc += TestMethod( po, "ReadBlock()", f.ReadBlock( 2L, 512, BlockBuf2 ), XB_NO_ERROR );
-
- xbString s1 = BlockBuf;
- xbString s2 = BlockBuf2;
-
- rc += TestMethod( po, "ReadBlock()", s1, s2, 512 );
-
- rc += TestMethod( po, "xbTruncate()", f.xbTruncate( 1000 ), XB_NO_ERROR );
-
- xbUInt64 ullFsize;
- rc += TestMethod( po, "GetFileSize()", f.GetFileSize( ullFsize ), XB_NO_ERROR );
- rc += TestMethod( po, "xbGetFileSize()", (xbInt32) ullFsize, 1000 );
- rc += TestMethod( po, "xbFclose()", f.xbFclose(), XB_NO_ERROR );
-
- if( po > 0 || rc < 0 )
- fprintf( stdout, "Total Errors = %d\n", rc * -1 );
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], rc * -1 );
- x.WriteLogMessage( sMsg );
- #endif
-
- return rc;
-}
-
diff --git a/src/tests/xb_test_funcs.cpp b/src/tests/xb_test_funcs.cpp
deleted file mode 100755
index c7bf0d3..0000000
--- a/src/tests/xb_test_funcs.cpp
+++ /dev/null
@@ -1,293 +0,0 @@
-/* xb_test_funcs.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-// This program tests the xb functions
-// usage: xb_test_funcs QUITE|NORMAL|VERBOSE
-
-#include "xbase.h"
-using namespace xb;
-
-#include "tstfuncs.cpp"
-
-
-/**************************************************************************/
-
-int main( int argCnt, char **av )
-{
- xbInt16 iRc = 0;
- xbInt16 rc2 = 0;
- xbInt16 po = 1; /* print option */
- /* 0 - QUIET */
- /* 1 - NORMAL */
- /* 2 - VERBOSE */
-
- if( argCnt > 1 ) {
- if( av[1][0] == 'Q' )
- po = 0;
- else if( av[1][0] == 'V' )
- po = 2;
- }
-
- xbSchema MyRecord[] =
- {
- { "NUM1", XB_NUMERIC_FLD, 9, 2 },
- { "DATE1", XB_DATE_FLD, 8, 0 },
- { "DATE2", XB_DATE_FLD, 8, 0 },
- { "",0,0,0 }
- };
-
-
- xbXBase x;
- xbDbf * MyFile;
- xbDate d;
-
- xbString sResult;
- xbDate dtResult;
- xbDouble dResult;
- xbBool bResult;
- xbDate dtIn( "19890209" );
-
-
- #ifdef XB_LOGGING_SUPPORT
- x.SetLogDirectory( PROJECT_LOG_DIR );
- x.EnableMsgLogging();
- if( po ){
- std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
- }
- xbString sMsg;
- sMsg.Sprintf( "Program [%s] initializing...", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- x.SetDataDirectory( PROJECT_DATA_DIR );
- x.EnableMsgLogging();
- InitTime();
-
- if( po > 0 ){
- std::cout << "XBase Expression testing program.." << std::endl;
- std::cout << "This program tests the XBase expression logic." << std::endl;
- std::cout << "Default Data Directory is [" << x.GetDataDirectory().Str() << "]" << std::endl;
- }
-
- #ifdef XB_DBF4_SUPPORT
- MyFile = new xbDbf4( &x ); /* version 4 dbf file */
- #else
- MyFile = new xbDbf3( &x ); /* version 3 dbf file */
- #endif
-
- rc2 = MyFile->CreateTable( "Functest.DBF", "ExpTest", MyRecord, XB_OVERLAY, XB_MULTI_USER );
- iRc += TestMethod( po, "CreateTable()", rc2, XB_NO_ERROR );
- iRc += TestMethod( po, "PutField()", MyFile->PutFloatField( "NUM1", 5 ), XB_NO_ERROR );
- iRc += TestMethod( po, "PutField()", MyFile->PutField( "DATE1", "19890303" ), XB_NO_ERROR );
- iRc += TestMethod( po, "PutField()", MyFile->PutField ( "DATE2", "20120708" ), XB_NO_ERROR );
-
- #ifdef XB_LOCKING_SUPPORT
- MyFile->SetAutoLock( xbFalse );
- #endif // XB_LOCKING_SUPPORT
-
-
- iRc += TestMethod( po, "AppendRecord()", MyFile->AppendRecord(), XB_NO_ERROR );
-
- iRc += TestMethod( po, "ABS( -222, dResult )", x.ABS( -222, dResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "ABS( -222, dResult )", -222, -222 );
- iRc += TestMethod( po, "ABS( 333, dResult )", x.ABS( 333, dResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "ABS( 333, dResult )", 333, 333 );
-
- iRc += TestMethod( po, "x.ALLTRIM( \" zzz \", sResult )", x.ALLTRIM( " zzz ", sResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.ALLTRIM( \" zzz \", sResult )", sResult, "zzz", 3 );
-
- iRc += TestMethod( po, "ASC( \"A\", dResult )", x.ASC( "A", dResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "ASC( \"A\" )", dResult, (xbDouble) 65 );
- iRc += TestMethod( po, "ASC( \"B\", dResult )", x.ASC( "B", dResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "ASC( \"B\" )", dResult, (xbDouble) 66 );
- iRc += TestMethod( po, "AT( \"ABC\", \"XYZABC\", 4 )", x.AT( "ABC", "XYZABC", dResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "AT( \"ABC\", \"XYZABC\", 4 )", dResult, (xbDouble) 4 );
- iRc += TestMethod( po, "CDOW( dtIn, sResult )", x.CDOW( dtIn, sResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "CDOW( dtIn, sResult )", sResult, "Thursday", 8 );
- iRc += TestMethod( po, "CHR( 101, sResult )", x.CHR( 101, sResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "CHR( 101, sResult )", sResult, "e", 1 );
-
- dtIn = "19870103";
- iRc += TestMethod( po, "CMONTH( dtIn, sResult )", x.CMONTH( dtIn, sResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "CMONTH( dtIn, sResult )", sResult, "January", 7 );
- iRc += TestMethod( po, "CTOD( \"01\\03\\87\", dtResult )", x.CTOD( "01\\03\\87", dtResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "CTOD( \"01\\03\\87\", dtResult )", dtResult.Str(), "19870103", 8 );
- iRc += TestMethod( po, "DATE( dtResult )", x.DATE( dtResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "DATE( dtResult )", dtResult.Str(), d.Str(), 8 );
- iRc += TestMethod( po, "DAY(\"19870103\", dResult )", x.DAY( "19870103", dResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "DAY(\"19870103\", dResult )", dResult, (xbDouble) 3 );
-
- iRc += TestMethod( po, "DEL( MyFile, sResult )", x.DEL( MyFile, sResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "DEL( MyFile, sResult )", sResult, " ", 1 );
-
- iRc += TestMethod( po, "DELETED( MyFile, bResult )", x.DELETED( MyFile, bResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "DELETED( MyFile, bResult )", (xbInt32) bResult, xbFalse );
-
- iRc += TestMethod( po, "DeleteRecord()", MyFile->DeleteRecord(), XB_NO_ERROR );
-
- iRc += TestMethod( po, "DEL( MyFile, sResult )", x.DEL( MyFile, sResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "DEL( MyFile, sResult )", sResult, "*", 1 );
- iRc += TestMethod( po, "DELETED( MyFile, bResult )", x.DELETED( MyFile, bResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "DELETED( MyFile, bResult )", (xbInt32) bResult, xbTrue );
-
- iRc += TestMethod( po, "UndeleteRecord()", MyFile->UndeleteRecord(), XB_NO_ERROR );
-
- iRc += TestMethod( po, "DESCEND(\"ABCDE\", sResult )", x.DESCEND( "ABCDE", sResult ), XB_NO_ERROR );
-
- char sDescendResult[6]; // = "";
- sDescendResult[0] = (char) 0xBE;
- sDescendResult[1] = (char) 0xBD;
- sDescendResult[2] = (char) 0xBC;
- sDescendResult[3] = (char) 0xBB;
- sDescendResult[4] = (char) 0xBA;
- sDescendResult[5] = (char) 0x00;
- iRc += TestMethod( po, "DESCEND(\"ABCDE\", sResult )", sResult, sDescendResult, 5 );
-
- iRc += TestMethod( po, "DESCEND( 12345, dResult )", x.DESCEND( 12345, dResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "DESCEND( 12345, dResult )", dResult, (xbDouble) -12345 );
- dtIn = "19890303";
- iRc += TestMethod( po, "DESCEND( dtIn, dtResult )", x.DESCEND( dtIn, dtResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "DESCEND( dtIn, dtResult )", dtResult.Str(), "29101031", 8 );
- dtIn = "20120708";
- iRc += TestMethod( po, "DESCEND( dtIn, dtResult )", x.DESCEND( dtIn, dtResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "DESCEND( dtIn, dtResult )", dtResult.Str(), "28870625" , 8 );
-
- dtIn = "20171014";
- iRc += TestMethod( po, "DOW( dtIn, dResult )", x.DOW( dtIn, dResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "DOW(\"20171015\", dResult )", dResult, (xbDouble) 0 );
- dtIn++;
- iRc += TestMethod( po, "DOW( dtIn, dResult )", x.DOW( dtIn, dResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "DOW(\"20171016\", dResult )", dResult, (xbDouble) 1 );
- dtIn++;
- iRc += TestMethod( po, "DOW( dtIn, dResult )", x.DOW( dtIn, dResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "DOW(\"20171021\", dResult )", dResult, (xbDouble) 2 );
-
- dtIn = "20000101";
- iRc += TestMethod( po, "DTOC( dtIn, sResult )", x.DTOC( dtIn, sResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "DTOC( dtIn, sResult )", sResult, "01/01/00", 8 );
- iRc += TestMethod( po, "DTOS( dtIn, sResult )", x.DTOS( dtIn, sResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "DTOS( dtIn, sResult )", sResult, "20000101", 8 );
- iRc += TestMethod( po, "EXP( 1, dResult )", x.EXP( 1, dResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "EXP( 1, dResult )", dResult, 2.71828, .001 );
- iRc += TestMethod( po, "x.INT( 621.5, dResult )", x.INT( 621.5, dResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.INT( 621.5, dResult )", dResult, (xbDouble) 621 );
- iRc += TestMethod( po, "x.ISALPHA( \"1\", bResult )", x.ISALPHA( "1", bResult ), 0 );
- iRc += TestMethod( po, "x.ISALPHA( \"1\", bResult )", (xbInt32) bResult, xbFalse );
- iRc += TestMethod( po, "x.ISALPHA( \"A\", bResult )", x.ISALPHA( "A", bResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.ISALPHA( \"A\", bResult )", (xbInt32) bResult, xbTrue );
- iRc += TestMethod( po, "x.ISLOWER( \"A\", bResult )", x.ISLOWER( "A", bResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.ISLOWER( \"A\", bResult )", bResult, xbFalse );
- iRc += TestMethod( po, "x.ISLOWER( \"a\", bResult )", x.ISLOWER( "a", bResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.ISLOWER( \"a\", bResult )", bResult, xbTrue );
- iRc += TestMethod( po, "x.ISUPPER( \"A\", bResult )", x.ISUPPER( "A", bResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.ISUPPER( \"A\", bResult )", bResult, xbTrue );
- iRc += TestMethod( po, "x.ISUPPER( \"a\", bResult )", x.ISUPPER( "a", bResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.ISUPPER( \"a\", bResult )", bResult, xbFalse );
- iRc += TestMethod( po, "x.LEFT( \"STRING\", 3, sResult )", x.LEFT( "STRING", 3, sResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.LEFT( \"STRING\", 3, sResult )", sResult, "STR", 3 );
- iRc += TestMethod( po, "x.LEN( \"AAAAA\", dResult )", x.LEN( "AAAAA", dResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.LEN( \"AAAAA\", dResult )", dResult, (xbDouble) 5 );
- iRc += TestMethod( po, "x.LOG( 2, dResult )", x.LOG( 2, dResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.LOG( 2, dResult )", dResult, (xbDouble) 0.69314700, .0001 );
- iRc += TestMethod( po, "x.LOWER( \"AAAA\", sResult )", x.LOWER( "AAAA", sResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.LOWER( \"AAAA\", sResult )", sResult, "aaaa", 4 );
- iRc += TestMethod( po, "x.LTRIM( \" xxxxxx\" )", x.LTRIM( " xxxxxx", sResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.LTRIM( \" xxxxxx\" )", sResult, "xxxxxx", 6 );
- iRc += TestMethod( po, "x.MAX( 10, 27, dResult )", x.MAX( 10, 27, dResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.MAX( 10, 27, dResult )", dResult, (xbDouble) 27 );
- iRc += TestMethod( po, "x.MIN( 10, 5, dResult )", x.MIN( 10, 5, dResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.MIN( 10, 5, dResult )", dResult, (xbDouble) 5 );
- iRc += TestMethod( po, "x.MONTH( dtIn, dResult )", x.MONTH( dtIn, dResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.MONTH( dtIn, dResult )", dResult, (xbDouble) 1 );
- iRc += TestMethod( po, "x.RECCOUNT( MyFile, dResult)", x.RECNO( MyFile, dResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.RECCOUNT( MyFile, dResult)", dResult, (xbDouble) 1 );
- iRc += TestMethod( po, "x.RECNO( MyFile, dResult)", x.RECNO( MyFile, dResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.RECNO( MyFile, dResult)", dResult, (xbDouble) 1 );
- iRc += TestMethod( po, "x.REPLICATE( \"abc\", 3, sResult )", x.REPLICATE( "abc", 3, sResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.REPLICATE( \"abc\", 3, sResult )", sResult, "abcabcabc", 9 );
- iRc += TestMethod( po, "x.RIGHT( \"STRING\", 3, sResult )", x.RIGHT( "STRING", 3, sResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.RIGHT( \"STRING\", 3, sResult )", sResult, "ING", 3 );
- iRc += TestMethod( po, "x.RIGHT( \"STRING\", 3, sResult )", x.RIGHT( "STRING", 5, sResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.RIGHT( \"STRING\", 3, sResult )", sResult, "TRING", 5 );
- iRc += TestMethod( po, "x.RIGHT( \"STRING\", 3, sResult )", x.RIGHT( "STRING", 6, sResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.RIGHT( \"STRING\", 3, sResult )", sResult, "STRING", 6 );
- iRc += TestMethod( po, "x.RIGHT( \"STRING\", 3, sResult )", x.RIGHT( "STRING", 7, sResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.RIGHT( \"STRING\", 3, sResult )", sResult, "STRING", 6 );
- iRc += TestMethod( po, "x.RTRIM( \"zzz \", sResult )", x.RTRIM( "zzz ", sResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.RTRIM( \"zzz \", sResult )", sResult, "zzz", 3 );
- iRc += TestMethod( po, "x.TRIM( \"aaa \", sResult )", x.TRIM( "aaa ", sResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.TRIM( \"aaa \", sResult )", sResult, "aaa", 3 );
- iRc += TestMethod( po, "x.SPACE( 3, sResult )", x.SPACE( 3, sResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.SPACE( 3, sResult )", sResult, " ", 3 );
- iRc += TestMethod( po, "x.SQRT( 9, dResult )", x.SQRT( 9, dResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.SQRT( 9, dResult )", dResult, (xbDouble) 3 );
- iRc += TestMethod( po, "x.STOD( \"20000101\", dtResult )", x.STOD( "20000101", dtResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.STOD( \"20000101\", dtResult )",dtResult.Str(), "20000101", 8 );
-
- xbString sPadChar = " ";
- iRc += TestMethod( po, "x.STR( 2001, 4, 0, sPadChar, sResult )", x.STR( 2001, 4, 0, sPadChar, sResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.STR( 2001, 4, 0, sPadChar, sResult )", sResult, "2001", 4 );
- iRc += TestMethod( po, "x.STR( 2002, 3, 0, sPadChar, sResult )", x.STR( 2002, 3, 0, sPadChar, sResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.STR( 2002, 3, 0, sPadChar, sResult )", sResult, "***", 3 );
- iRc += TestMethod( po, "x.STR( 203.2, 6, 2, sPadChar, sResult )", x.STR( 203.2, 6, 2, sPadChar, sResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.STR( 203.2, 6, 2, sPadChar, sResult )", sResult, "203.20", 6 );
- iRc += TestMethod( po, "x.STR( 204.11, 8, 2, sPadChar, sResult )", x.STR( 204.11, 8, 2, sPadChar, sResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.STR( 204.11, 8, 2, sPadChar, sResult )", sResult, " 204.11", 8 );
- iRc += TestMethod( po, "x.STR( -205.45, 8, 2, sPadChar, sResult )", x.STR( -205.45, 8, 2, sPadChar, sResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.STR( -205.45, 8, 2, sPadChar, sResult )", sResult, " -205.45", 8 );
- iRc += TestMethod( po, "x.STR( -306.45, 8, 2, sPadChar, sResult )", x.STR( -306.45, 8, 2, sPadChar, sResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.STR( -306.45, 8, 2, sPadChar, sResult )", sResult, " -306.45", 8 );
- iRc += TestMethod( po, "x.STR( 6.56, 5, 0, sResult )", x.STR( 6.56, 5, 0, sResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.STR( 6.56, 5, 0, sResult )", sResult, " 7", 5 );
- iRc += TestMethod( po, "x.STR( 7.77, 5, sResult )", x.STR( 7.77, 5, sResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.STR( 7.77, 5, sResult )", sResult, " 8", 5 );
- iRc += TestMethod( po, "x.STR( 8, sResult )", x.STR( 8, sResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.STR( 8, sResult )", sResult, " 8", 10 );
-
- sPadChar = "0";
- iRc += TestMethod( po, "x.STR( -5.2, 10, 2, sPadChar, sResult )", x.STR( -5.2, 10, 2, sPadChar, sResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.STR( -5.2, 10, 2, sPadChar, sResult )", sResult, "00000-5.20", 10 );
- iRc += TestMethod( po, "x.STRZERO( 8, 8, 0, sResult )", x.STRZERO( 8, 8, 0, sResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.STRZERO( 8, 8, 0, sResult )", sResult, "00000008", 8 );
- iRc += TestMethod( po, "x.STRZERO( -8, 8, 0, sResult )", x.STRZERO( -8, 8, 0, sResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.STRZERO( -8, 8, 0, sResult )", sResult, "-0000008", 8 );
- iRc += TestMethod( po, "x.STRZERO( -205.45, 10, 3 )", x.STRZERO( -205.45, 10, 3, sResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.STRZERO( -205.45, 10, 3 )", sResult, "-00205.450", 10 );
- iRc += TestMethod( po, "x.STRZERO( -205.45, 3, 1 )", x.STRZERO( -205.45, 3, 1, sResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.STRZERO( -205.45, 3, 1 )", sResult, "***", 3 );
- iRc += TestMethod( po, "x.SUBSTR( \"TESTSTRING\", 5, 2, sResult )", x.SUBSTR( "TESTSTRING", 5, 2, sResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.SUBSTR( \"TESTSTRING\", 5, 2, sResult )", sResult, "ST", 2 );
- iRc += TestMethod( po, "x.UPPER( \"abababa\", sResult )", x.UPPER( "abababa", sResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.UPPER( \"abababa\", sResult )", sResult, "ABABABA", 7 );
- iRc += TestMethod( po, "x.VAL( \"65\", dResult )", x.VAL( "65", dResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.VAL( \"65\", dResult )", dResult, (xbDouble) 65 );
- iRc += TestMethod( po, "x.YEAR( dtIn, dResult )", x.YEAR( dtIn, dResult ), XB_NO_ERROR );
- iRc += TestMethod( po, "x.YEAR( dtIn, dResult )", dResult, (xbDouble) 2000 );
-
-
- iRc += TestMethod( po, "Close()", MyFile->Close(), XB_NO_ERROR );
-
-
- delete MyFile;
- if( po > 0 || iRc < 0 )
- fprintf( stdout, "Total Errors = %d\n", iRc * -1 );
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], iRc * -1 );
- x.WriteLogMessage( sMsg );
- #endif
-
- return iRc;
-}
diff --git a/src/tests/xb_test_lock.cpp b/src/tests/xb_test_lock.cpp
deleted file mode 100755
index 39332ad..0000000
--- a/src/tests/xb_test_lock.cpp
+++ /dev/null
@@ -1,874 +0,0 @@
-/* xb_test_lock.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-// This program tests the locking functions of xbase
-// usage: xb_test_lock QUITE|NORMAL|VERBOSE
-
-
-#include "xbase.h"
-
-using namespace xb;
-
-#include "tstfuncs.cpp"
-
-/****************************************************************/
-int main( int argCnt, char **av )
-{
- xbInt16 iRc = 0;
- xbInt16 iRc2;
- xbInt16 po = 1; /* print option */
- /* 0 - QUIET */
- /* 1 - NORMAL */
- /* 2 - VERBOSE */
-
- xbInt16 iErrorStop = 0;
- xbString sLockFile = "locktest.txt";
- xbString sLockCmd;
- xbString sResult;
-
- xbXBase x;
- xbDbf * MyFile;
-
- if( argCnt > 1 ) {
- if( av[1][0] == 'Q' )
- po = 0;
- else if( av[1][0] == 'V' )
- po = 2;
- }
-
- xbSchema MyRecord[] =
- {
- { "LOCKTEST", XB_CHAR_FLD, 5, 0 },
- #ifdef XB_MEMO_SUPPORT
- { "MEMOTEST", XB_MEMO_FLD, 10, 0 },
- #endif
- { "",0,0,0 }
- };
-
-
- #ifdef XB_LOGGING_SUPPORT
- x.SetLogDirectory( PROJECT_LOG_DIR );
- x.EnableMsgLogging();
- if( po > 0 ){
- std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
- }
- xbString sMsg;
- sMsg.Sprintf( "Program [%s] initializing...", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- x.SetDataDirectory( PROJECT_DATA_DIR );
- InitTime();
- #ifdef XB_DBF4_SUPPORT
- MyFile = new xbDbf4( &x ); /* version 4 dbf file */
- #else
- MyFile = new xbDbf3( &x ); /* version 3 dbf file */
- #endif
-
- iRc2 = MyFile->CreateTable( "LockTest.DBF", "LockTest", MyRecord, XB_OVERLAY, XB_MULTI_USER );
- iRc += TestMethod( po, "CreateTable()", iRc2, XB_NO_ERROR );
- iRc += TestMethod( po, "PutField()", MyFile->PutField( "LOCKTEST", "TEST" ), XB_NO_ERROR );
- iRc += TestMethod( po, "AppendRecord()", MyFile->AppendRecord(), XB_NO_ERROR );
- iRc += TestMethod( po, "Close()", MyFile->Close(), XB_NO_ERROR );
- MyFile->Close();
-
- //unlink( sLockFile );
- remove( sLockFile );
-
- #if defined (HAVE_FORK_F)
- pid_t pid;
- if(( pid = fork()) < 0 ){
- std::cout << "fork error\n";
- exit(1);
- }
-
- if( pid == 0 ){
- // child task
- xbDbf * MyFileChld;
- xbInt16 iRcChld = 0;
- xbBool bTblOpenChld = xbFalse;
- xbInt32 iChildLoop = 0;
- xbBool bDone = xbFalse;
- xbString sLastLockCmd;
-
- #ifdef XB_DBF4_SUPPORT
- MyFileChld = new xbDbf4( &x ); /* version 4 dbf file */
- #else
- MyFileChld = new xbDbf3( &x ); /* version 3 dbf file */
- #endif
-
- x.xbSleep( 250 );
-
- while( !bDone ){
- iRc2 = GetCmd( x, sLockFile, sLockCmd, 'C', po );
-
- if( sLockCmd == sLastLockCmd )
- iChildLoop++;
- else
- sLastLockCmd = sLockCmd;
-
- #ifdef XB_LOGGING_SUPPORT
- if( sLockCmd != "OK" && sLockCmd != "FAIL" ){
- sMsg.Sprintf( "Program [%s] Child task retrieved command=[%s] RC=[%d]", av[0], sLockCmd.Str(), iRc2 );
- x.WriteLogMessage( sMsg );
- }
- #endif
-
- if( iRc2 == 0 ){
-
- if( sLockCmd == "OK" || sLockCmd == "FAIL" )
- x.xbSleep( 250 );
-
- else if( sLockCmd == "EXIT" ){
- bDone = xbTrue;
-
- } else if( sLockCmd == "START" && bTblOpenChld ){
- // came back before the parent task could process the result
- x.xbSleep( 250 );
-
- } else {
-
- if( sLockCmd == "START" ){
- // begin the process
- iRcChld = MyFileChld->Open( "LockTest.DBF" );
- if( iRcChld != XB_NO_ERROR ){
- sResult = "FAIL";
- } else {
- sResult = "OK";
- bTblOpenChld = xbTrue;
- }
-
- } else if( sLockCmd == "TL" ){
- // table lock
- if(( iRcChld = MyFileChld->LockTable( XB_LOCK )) != XB_NO_ERROR )
- sResult = "FAIL";
- else
- sResult = "OK";
-
- } else if( sLockCmd == "TU" ){
- // table unlock
- if(( iRcChld = MyFileChld->LockTable( XB_UNLOCK )) != XB_NO_ERROR )
- sResult = "FAIL";
- else
- sResult = "OK";
-
- } else if( sLockCmd == "RL" ){
- // record lock
- if(( iRcChld = MyFileChld->LockRecord( XB_LOCK, 1 )) != XB_NO_ERROR )
- sResult = "FAIL";
- else
- sResult = "OK";
-
- } else if( sLockCmd == "RU" ){
- // record unlock
- if(( iRcChld = MyFileChld->LockRecord( XB_UNLOCK, 1 )) != XB_NO_ERROR )
- sResult = "FAIL";
- else
- sResult = "OK";
-
- } else if( sLockCmd == "ML" ){
- // memo lock
- #ifdef XB_MEMO_SUPPORT
- if(( iRcChld = MyFileChld->LockMemo( XB_LOCK )) != XB_NO_ERROR )
- sResult = "FAIL";
- else
- sResult = "OK";
- #else
- sLockCmd = "OK";
- #endif
-
- } else if( sLockCmd == "MU" ){
- // memo unlock
- #ifdef XB_MEMO_SUPPORT
- if(( iRcChld = MyFileChld->LockMemo( XB_UNLOCK )) != XB_NO_ERROR )
- sResult = "FAIL";
- else
- sResult = "OK";
- #else
- sLockCmd = "OK";
- #endif
- }
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Child task [%s] Result [%s] RC = [%d]", av[0], sLockCmd.Str(), sResult.Str(), iRcChld );
- x.WriteLogMessage( sMsg );
- #endif
- SetCmd( x, sLockFile, sResult, 'C', po );
- if( sResult == "FAIL" ){
- bDone = xbTrue;
- MyFileChld->Close();
- delete MyFileChld;
- }
- }
-
- } else {
- iRc = iRc2;
- bDone = xbTrue;
- }
- //std::cout << "clc [" << iChildLoop++ << "][" << bDone << "][" << sLockCmd.Str() << "]\n";
- x.xbSleep( 250 );
- if( iChildLoop > 15 )
- bDone = xbTrue;
- }
- MyFileChld->Close();
- delete MyFile;
- delete MyFileChld;
-
- if( po > 0 )
- std::cout << "Exiting child\n";
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Child task terminating", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
-
- } else {
-
- // parent logic
- xbInt16 iLoopCtr = 0;
-
- try{
-
- // start
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task issuing START command", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- sLockCmd = "START";
- SetCmd( x, sLockFile, sLockCmd, 'P', po );
- sResult = "";
-
- GetCmd( x, sLockFile, sResult, 'P', po );
- while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 30 ){
- GetCmd( x, sLockFile, sResult, 'P', po );
- x.xbSleep( 250 );
- iLoopCtr++;
- }
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
- x.WriteLogMessage( sMsg );
- #endif
-
- if( sResult != "OK" ){
- iErrorStop = 10;
- iRc2 = -1;
- throw iRc2;
- }
-
- // table lock
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task issuing TL command", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- sLockCmd = "TL";
- SetCmd( x, sLockFile, sLockCmd, 'P', po );
- sResult = "";
-
- GetCmd( x, sLockFile, sResult, 'P', po );
- while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 30 ){
- GetCmd( x, sLockFile, sResult, 'P', po );
- x.xbSleep( 250 );
- iLoopCtr++;
- }
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
- x.WriteLogMessage( sMsg );
- #endif
-
- if( sResult != "OK" ){
- iErrorStop = 20;
- iRc2 = -1;
- throw iRc2;
- }
-
- // attempt to lock table, should fail
- if(( iRc2 = MyFile->Open( "LockTest.DBF" )) != XB_NO_ERROR ){
- iErrorStop = 30;
- throw iRc2;
- }
-
- if(( iRc2 = MyFile->LockTable( XB_LOCK )) == XB_NO_ERROR ){
- iErrorStop = 40;
- throw iRc2;
- }
-
- if( po > 0 )
- std::cout << "[PASS] LockTable Test 1\n";
-
- // table unlock
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task issuing TU command", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- sLockCmd = "TU";
- SetCmd( x, sLockFile, sLockCmd, 'P', po );
- sResult = "";
-
- GetCmd( x, sLockFile, sResult, 'P', po );
- while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 30 ){
- GetCmd( x, sLockFile, sResult, 'P', po );
- x.xbSleep( 250 );
- iLoopCtr++;
- }
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
- x.WriteLogMessage( sMsg );
- #endif
-
- if( sResult != "OK" ){
- iErrorStop = 50;
- iRc2 = -1;
- throw iRc2;
- }
-
- if(( iRc2 = MyFile->LockTable( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 60;
- throw iRc2;
- }
- if( po > 0 )
- std::cout << "[PASS] LockTable Test 2\n";
-
- if(( iRc2 = MyFile->LockTable( XB_UNLOCK )) != XB_NO_ERROR ){
- iErrorStop = 70;
- throw iRc2;
- }
-
- /* record lock */
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task issuing RL command", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- sLockCmd = "RL";
- SetCmd( x, sLockFile, sLockCmd, 'P', po );
- sResult = "";
-
- GetCmd( x, sLockFile, sResult, 'P', po );
- while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 30 ){
- GetCmd( x, sLockFile, sResult, 'P', po );
- x.xbSleep( 250 );
- iLoopCtr++;
- }
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
- x.WriteLogMessage( sMsg );
- #endif
-
- if( sResult != "OK" ){
- iErrorStop = 80;
- iRc2 = -1;
- throw iRc2;
- }
-
- if(( iRc2 = MyFile->LockRecord( XB_LOCK, 1 )) == XB_NO_ERROR ){
- iErrorStop = 90;
- throw iRc2;
- }
- if( po > 0 )
- std::cout << "[PASS] LockRecord Test 1\n";
-
- /* record unlock */
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task issuing RU command", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- sLockCmd = "RU";
- SetCmd( x, sLockFile, sLockCmd, 'P', po );
- sResult = "";
-
- GetCmd( x, sLockFile, sResult, 'P', po );
- while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 30 ){
- GetCmd( x, sLockFile, sResult, 'P', po );
- x.xbSleep( 250 );
- iLoopCtr++;
- }
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
- x.WriteLogMessage( sMsg );
- #endif
-
- if( sResult != "OK" ){
- iErrorStop = 100;
- iRc2 = -1;
- throw iRc2;
- }
-
- if(( iRc2 = MyFile->LockRecord( XB_LOCK, 1 )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc2;
- }
-
- std::cout << "[PASS] LockRecord Test 2\n";
- if(( iRc2 = MyFile->LockRecord( XB_UNLOCK, 1 )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc2;
- }
-
-
- /* memo lock */
- #ifdef XB_MEMO_SUPPORT
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task issuing ML command", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- sLockCmd = "ML";
- SetCmd( x, sLockFile, sLockCmd, 'P', po );
- sResult = "";
-
- GetCmd( x, sLockFile, sResult, 'P', po );
- while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 30 ){
- GetCmd( x, sLockFile, sResult, 'P', po );
- x.xbSleep( 250 );
- iLoopCtr++;
- }
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
- x.WriteLogMessage( sMsg );
- #endif
-
- if( sResult != "OK" ){
- iErrorStop = 130;
- iRc2 = -1;
- throw iRc2;
- }
-
- if(( iRc2 = MyFile->LockMemo( XB_LOCK )) == XB_NO_ERROR ){
- iErrorStop = 140;
- throw iRc2;
- }
- if( po > 0 )
- std::cout << "[PASS] LockMemo Test 1\n";
-
- /* memo unlock */
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task issuing MU command", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- sLockCmd = "MU";
- SetCmd( x, sLockFile, sLockCmd, 'P', po );
- sResult = "";
-
- GetCmd( x, sLockFile, sResult, 'P', po );
- while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 30 ){
- GetCmd( x, sLockFile, sResult, 'P', po );
- x.xbSleep( 250 );
- iLoopCtr++;
- }
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
- x.WriteLogMessage( sMsg );
- #endif
-
- if( sResult != "OK" ){
- iErrorStop = 150;
- iRc2 = -1;
- throw iRc2;
- }
-
- if(( iRc2 = MyFile->LockMemo( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 160;
- throw iRc2;
- }
-
- std::cout << "[PASS] LockMemo Test 2\n";
- if(( iRc2 = MyFile->LockMemo( XB_UNLOCK )) != XB_NO_ERROR ){
- iErrorStop = 170;
- throw iRc2;
- }
- #endif
-
- // exit
- sLockCmd = "EXIT";
- SetCmd( x, sLockFile, sLockCmd, 'P', po );
-
- } catch (xbInt16 iRc3 ){
- iRc = iRc3;
- if( po > 0 )
- std::cout << "Parent lock task exiting on failure [" << sLockCmd.Str() << "][" << iErrorStop << "]\n";
-
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task terminating with errors [%s][%d][%d][%d]...", av[0], sLockCmd.Str(), iErrorStop, iLoopCtr, iRc3 );
- x.WriteLogMessage( sMsg );
- #endif
-
- }
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task terminating", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- if( po > 0 )
- std::cout << "Exiting parent\n";
-
- sLockCmd = "EXIT";
- SetCmd( x, sLockFile, sLockCmd, 'P', po );
- MyFile->Close();
- delete MyFile;
- }
- #elif defined (HAVE_CREATEPROCESSW_F)
-
- STARTUPINFO si;
- PROCESS_INFORMATION pi;
- ZeroMemory( &si, sizeof( si ));
- si.cb = sizeof( si );
- ZeroMemory( &pi, sizeof( pi ));
-
- xbString strCmdLine = "xb_test_lock2";
- if( argCnt > 1 ){
- strCmdLine += " ";
- strCmdLine += av[1];
- }
-
- char sCmdLineBuf[25];
- memset( sCmdLineBuf, 0x00, 25 );
- for( xbUInt32 i = 0; i < strCmdLine.Len(); i++ )
- sCmdLineBuf[i] = strCmdLine[i+1];
-
- if( !CreateProcess( NULL, sCmdLineBuf, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi )){
- sMsg.Sprintf( "Program [%s] error in CreateProcess call. Processing aborted" );
- #ifdef XB_LOGGING_SUPPORT
- x.WriteLogMessage( sMsg );
- #endif
- std::cout << sMsg.Str() << "\n";
- iRc -=1;
- } else {
-
- xbInt16 iLoopCtr = 0;
-
- try{
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task issuing START command", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
-
- sLockCmd = "START";
- SetCmd( x, sLockFile, sLockCmd, 'P', po );
- sResult = "";
-
- GetCmd( x, sLockFile, sResult, 'P', po );
- while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 10 ){
- GetCmd( x, sLockFile, sResult, 'P', po );
- x.xbSleep( 250 );
- iLoopCtr++;
- }
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
- x.WriteLogMessage( sMsg );
- #endif
-
- // table lock
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task issuing TL command", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- sLockCmd = "TL";
- SetCmd( x, sLockFile, sLockCmd, 'P', po );
- sResult = "";
-
- GetCmd( x, sLockFile, sResult, 'P', po );
- while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 10 ){
- GetCmd( x, sLockFile, sResult, 'P', po );
- x.xbSleep( 250 );
- iLoopCtr++;
- }
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
- x.WriteLogMessage( sMsg );
- #endif
-
- if( sResult != "OK" ){
- iErrorStop = 200;
- iRc2 = -1;
- throw iRc2;
- }
-
- // attempt to lock table, should fail
- if(( iRc2 = MyFile->Open( "LockTest.DBF" )) != XB_NO_ERROR ){
- iErrorStop = 210;
- throw iRc2;
- }
-
- if(( iRc2 = MyFile->LockTable( XB_LOCK )) == XB_NO_ERROR ){
- iErrorStop = 220;
- throw iRc2;
- }
-
- if( po > 0 ){
- std::cout << "[PASS] LockTable Test 1\n";
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task LockTable Test 1 Success.", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
- }
-
- // table unlock
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task issuing TU command", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- sLockCmd = "TU";
- SetCmd( x, sLockFile, sLockCmd, 'P', po );
- sResult = "";
-
- GetCmd( x, sLockFile, sResult, 'P', po );
- while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 10 ){
- GetCmd( x, sLockFile, sResult, 'P', po );
- x.xbSleep( 250 );
- iLoopCtr++;
- }
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
- x.WriteLogMessage( sMsg );
- #endif
-
- if( sResult != "OK" ){
- iErrorStop = 230;
- iRc2 = -1;
- throw iRc2;
- }
-
- if(( iRc2 = MyFile->LockTable( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 240;
- throw iRc2;
- }
- if( po > 0 ){
- std::cout << "[PASS] LockTable Test 2\n";
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task LockTable Test 1 Success.", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
- }
-
- if(( iRc2 = MyFile->LockTable( XB_UNLOCK )) != XB_NO_ERROR ){
- iErrorStop = 250;
- throw iRc2;
- }
-
- /* record lock */
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task issuing RL command", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- sLockCmd = "RL";
- SetCmd( x, sLockFile, sLockCmd, 'P', po );
- sResult = "";
-
- GetCmd( x, sLockFile, sResult, 'P', po );
- while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 10 ){
- GetCmd( x, sLockFile, sResult, 'P', po );
- x.xbSleep( 250 );
- iLoopCtr++;
- }
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
- x.WriteLogMessage( sMsg );
- #endif
-
- if( sResult != "OK" ){
- iErrorStop = 260;
- iRc2 = -1;
- throw iRc2;
- }
-
- if(( iRc2 = MyFile->LockRecord( XB_LOCK, 1 )) == XB_NO_ERROR ){
- iErrorStop = 270;
- throw iRc2;
- }
- if( po > 0 )
- std::cout << "[PASS] LockRecord Test 1\n";
-
- /* record unlock */
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task issuing RU command", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- sLockCmd = "RU";
- SetCmd( x, sLockFile, sLockCmd, 'P', po );
- sResult = "";
-
- GetCmd( x, sLockFile, sResult, 'P', po );
- while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 10 ){
- GetCmd( x, sLockFile, sResult, 'P', po );
- x.xbSleep( 250 );
- iLoopCtr++;
- }
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
- x.WriteLogMessage( sMsg );
- #endif
-
- if( sResult != "OK" ){
- iErrorStop = 280;
- iRc2 = -1;
- throw iRc2;
- }
-
- if(( iRc2 = MyFile->LockRecord( XB_LOCK, 1 )) != XB_NO_ERROR ){
- iErrorStop = 290;
- throw iRc2;
- }
-
- std::cout << "[PASS] LockRecord Test 2\n";
- if(( iRc2 = MyFile->LockRecord( XB_UNLOCK, 1 )) != XB_NO_ERROR ){
- iErrorStop = 300;
- throw iRc2;
- }
-
-
- /* memo lock */
- #ifdef XB_MEMO_SUPPORT
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task issuing ML command", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- sLockCmd = "ML";
- SetCmd( x, sLockFile, sLockCmd, 'P', po );
- sResult = "";
-
- GetCmd( x, sLockFile, sResult, 'P', po );
- while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 10 ){
- GetCmd( x, sLockFile, sResult, 'P', po );
- x.xbSleep( 250 );
- iLoopCtr++;
- }
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
- x.WriteLogMessage( sMsg );
- #endif
-
- if( sResult != "OK" ){
- iErrorStop = 310;
- iRc2 = -1;
- throw iRc2;
- }
-
- if(( iRc2 = MyFile->LockMemo( XB_LOCK )) == XB_NO_ERROR ){
- iErrorStop = 320;
- throw iRc2;
- }
- if( po > 0 )
- std::cout << "[PASS] LockMemo Test 1\n";
-
- /* memo unlock */
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task issuing MU command", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- sLockCmd = "MU";
- SetCmd( x, sLockFile, sLockCmd, 'P', po );
- sResult = "";
-
- GetCmd( x, sLockFile, sResult, 'P', po );
- while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 10 ){
- GetCmd( x, sLockFile, sResult, 'P', po );
- x.xbSleep( 250 );
- iLoopCtr++;
- }
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
- x.WriteLogMessage( sMsg );
- #endif
-
- if( sResult != "OK" ){
- iErrorStop = 330;
- iRc2 = -1;
- throw iRc2;
- }
-
- if(( iRc2 = MyFile->LockMemo( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 340;
- throw iRc2;
- }
-
- std::cout << "[PASS] LockMemo Test 2\n";
- if(( iRc2 = MyFile->LockMemo( XB_UNLOCK )) != XB_NO_ERROR ){
- iErrorStop = 350;
- throw iRc2;
- }
- #endif
-
- // exit
- sLockCmd = "EXIT";
- SetCmd( x, sLockFile, sLockCmd, 'P', po );
-
- } catch (xbInt16 iRc3 ){
- if( po > 0 )
- std::cout << "Parent lock task exiting on failure [" << sLockCmd.Str() << "][" << iErrorStop << "]\n";
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Parent task terminating with errors [%s][%d][%d][%d]...", av[0], sLockCmd.Str(), iErrorStop, iLoopCtr, iRc3 );
- x.WriteLogMessage( sMsg );
- #endif
-
- sLockCmd = "EXIT";
- SetCmd( x, sLockFile, sLockCmd, 'P', po );
- MyFile->Close();
- delete MyFile;
- }
- }
-
- #else
- iRc--;
- sMsg.Sprintf( "Program [%s] not executed. Library does not support 'fork' or 'CreateProcess' function call", av[0] );
- #ifdef XB_LOGGING_SUPPORT
- x.WriteLogMessage( sMsg );
- #endif
- if( po > 0 )
- std::cout << sMsg.Str() << "\n";
- #endif
-
- if( po > 0 || iRc < 0 )
- fprintf( stdout, "[%s] Total Errors = %d\n", av[0], iRc * -1 );
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], iRc * -1 );
- x.WriteLogMessage( sMsg );
- #endif
-
- return iRc;
-}
-
diff --git a/src/tests/xb_test_lock2.cpp b/src/tests/xb_test_lock2.cpp
deleted file mode 100755
index d5534ec..0000000
--- a/src/tests/xb_test_lock2.cpp
+++ /dev/null
@@ -1,207 +0,0 @@
-/* xb_test_lock2.cpp
-
-XBase Software Library
-
-Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-// This program tests the locking functions
-// This program is the child process that is called if used
-// in an environment that supports the CreateProcess library function (ie Windows)
-
-// usage: xb_test_lock QUITE|NORMAL|VERBOSE
-
-
-
-#include "xbase.h"
-
-using namespace xb;
-
-#include "tstfuncs.cpp"
-
-/****************************************************************/
-int main( int argCnt, char **av )
-{
- xbInt16 iRc = 0;
- xbInt16 iRc2;
- xbInt16 po = 1; /* print option */
- /* 0 - QUIET */
- /* 1 - NORMAL */
- /* 2 - VERBOSE */
-
- xbBool bDone = xbFalse;
-// xbInt16 iErrorStop = 0;
- xbString sLockFile = "locktest.txt";
- xbString sLockCmd;
- xbString sResult;
- xbInt32 iChildLoop = 0;
-
- xbXBase x;
- xbDbf * MyFile;
-
- xbBool bTblOpen = xbFalse;
-
- if( argCnt > 1 ) {
- if( av[1][0] == 'Q' )
- po = 0;
- else if( av[1][0] == 'V' )
- po = 2;
- }
-
- #ifdef XB_LOGGING_SUPPORT
- x.SetLogDirectory( PROJECT_LOG_DIR );
- xbString sLogFileName = x.GetLogFqFileName().Str();
- sLogFileName.Resize( sLogFileName.Len() - 3 );
- sLogFileName += "_l2.txt";
- x.SetLogFileName( sLogFileName );
- x.EnableMsgLogging();
- if( po > 0 ){
- std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
- }
- xbString sMsg;
- sMsg.Sprintf( "Program [%s] initializing...", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- x.SetDataDirectory( PROJECT_DATA_DIR );
- InitTime();
-
- #ifdef XB_DBF4_SUPPORT
- MyFile = new xbDbf4( &x ); /* version 4 dbf file */
- #else
- MyFile = new xbDbf3( &x ); /* version 3 dbf file */
- #endif
-
- x.xbSleep( 250 );
- while( !bDone ){
- iRc2 = GetCmd( x, sLockFile, sLockCmd, 'C', po );
-
- #ifdef XB_LOGGING_SUPPORT
- if( sLockCmd != "OK" && sLockCmd != "FAIL" ){
- sMsg.Sprintf( "Program [%s] Child task retrieved command=[%s] RC=[%d]", av[0], sLockCmd.Str(), iRc2 );
- x.WriteLogMessage( sMsg );
- }
- #endif
-
- if( iRc2 == 0 ){
-
- if( sLockCmd == "OK" || sLockCmd == "FAIL" )
- x.xbSleep( 250 );
-
- else if( sLockCmd == "EXIT" ){
- bDone = xbTrue;
-
- } else if( sLockCmd == "START" && bTblOpen ){
- // came back before the parent task could process the result
- x.xbSleep( 250 );
-
- } else {
-
- if( sLockCmd == "START" ){
-
- // begin the process
- iRc2 = MyFile->Open( "LockTest.DBF" );
- if( iRc2 != XB_NO_ERROR ){
- sResult = "FAIL";
- } else {
- sResult = "OK";
- bTblOpen = xbTrue;
- }
-
- } else if( sLockCmd == "TL" ){
- // table lock
- if(( iRc2 = MyFile->LockTable( XB_LOCK )) != XB_NO_ERROR )
- sResult = "FAIL";
- else
- sResult = "OK";
-
- } else if( sLockCmd == "TU" ){
- // table unlock
- if(( iRc2 = MyFile->LockTable( XB_UNLOCK )) != XB_NO_ERROR )
- sResult = "FAIL";
- else
- sResult = "OK";
-
- } else if( sLockCmd == "RL" ){
- // record lock
- if(( iRc2 = MyFile->LockRecord( XB_LOCK, 1 )) != XB_NO_ERROR )
- sResult = "FAIL";
- else
- sResult = "OK";
-
-
- } else if( sLockCmd == "RU" ){
- // record unlock
- if(( iRc2 = MyFile->LockRecord( XB_UNLOCK, 1 )) != XB_NO_ERROR )
- sResult = "FAIL";
- else
- sResult = "OK";
-
- } else if( sLockCmd == "ML" ){
- // memo lock
- #ifdef XB_MEMO_SUPPORT
- if(( iRc2 = MyFile->LockMemo( XB_LOCK )) != XB_NO_ERROR )
- sResult = "FAIL";
- else
- sResult = "OK";
- #else
- sLockCmd = "OK";
- #endif
-
- } else if( sLockCmd == "MU" ){
- // memo unlock
- #ifdef XB_MEMO_SUPPORT
- if(( iRc2 = MyFile->LockMemo( XB_UNLOCK )) != XB_NO_ERROR )
- sResult = "FAIL";
- else
- sResult = "OK";
- #else
- sLockCmd = "OK";
- #endif
- }
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Child task [%s] Result [%s] RC = [%d]", av[0], sLockCmd.Str(), sResult.Str(), iRc2 );
- x.WriteLogMessage( sMsg );
- #endif
- SetCmd( x, sLockFile, sResult, 'C', po );
- }
- } else {
- iRc = iRc2;
- bDone = xbTrue;
- }
-
- // std::cout << "clc [" << iChildLoop++ << "][" << bDone << "][" << sLockCmd << "]\n";
- x.xbSleep( 250 );
- if( iChildLoop > 10 )
- bDone = xbTrue;
- }
- MyFile->Close();
- delete MyFile;
- if( po > 0 )
- std::cout << "Exiting child\n";
-
- remove( sLockFile );
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] Child task terminating", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- if( po > 0 || iRc < 0 )
- fprintf( stdout, "Total Errors = %d\n", iRc * -1 );
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], iRc * -1 );
- x.WriteLogMessage( sMsg );
- #endif
-
- ExitProcess( iRc );
-}
-
diff --git a/src/tests/xb_test_log.cpp b/src/tests/xb_test_log.cpp
deleted file mode 100755
index 28ae552..0000000
--- a/src/tests/xb_test_log.cpp
+++ /dev/null
@@ -1,81 +0,0 @@
-/* xb_test_log.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-// This program tests the class xbLog
-
-// usage: xb_test_log QUITE|NORMAL|VERBOSE
-
-
-#include "xbase.h"
-
-using namespace xb;
-#include "tstfuncs.cpp"
-
-int main( int argCnt, char **av )
-{
- int rc = 0;
-
- #ifdef XB_LOGGING_SUPPORT
- int po = 1; /* print option */
- /* 0 - QUIET */
- /* 1 - NORMAL */
- /* 2 - VERBOSE */
-
- if( argCnt > 1 ) {
- if( av[1][0] == 'Q' )
- po = 0;
- else if( av[1][0] == 'V' )
- po = 2;
- }
-
- xbXBase x;
- x.SetLogDirectory( PROJECT_LOG_DIR );
- x.EnableMsgLogging();
- InitTime();
- if( po ){
- std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
- }
- xbString sMsg;
- sMsg.Sprintf( "Program [%s] initializing...", av[0] );
- x.WriteLogMessage( sMsg );
-
- xbString sNewLogFileName = "Logfile2.txt";
- sMsg.Sprintf( "Switching to logfile [%s]", sNewLogFileName.Str() );
- x.WriteLogMessage( sMsg );
-
- x.DisableMsgLogging();
- rc += TestMethod( po, "Set/Get Log Status()", x.GetLogStatus(), xbFalse );
- x.SetLogFileName( sNewLogFileName );
-
- x.EnableMsgLogging();
- rc += TestMethod( po, "Set/Get Log Status()", x.GetLogStatus(), 1 );
- rc += TestMethod( po,"WriteLogMessage()", x.WriteLogMessage( "Test log message........" ), XB_NO_ERROR );
-
- sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], rc * -1 );
- x.WriteLogMessage( sMsg );
-
- if( po > 0 || rc < 0 )
- fprintf( stdout, "Total Errors = %d\n", rc * -1 );
-
-
- #endif /* XB_LOGGING_SUPPORT */
-
-
- return rc;
-}
-
-
-
-
diff --git a/src/tests/xb_test_mdx.cpp b/src/tests/xb_test_mdx.cpp
deleted file mode 100755
index 2ef5ffb..0000000
--- a/src/tests/xb_test_mdx.cpp
+++ /dev/null
@@ -1,296 +0,0 @@
-/* xb_test_ndx.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-// This program tests the class xbIxNdx
-
-// usage: xb_test_ndx QUITE|NORMAL|VERBOSE
-
-
-#include "xbase.h"
-
-using namespace xb;
-
-#include "tstfuncs.cpp"
-
-int main( int argCnt, char **av )
-{
- int iRc = 0;
- int iRc2;
- int iPo = 1; /* print option */
- /* 0 - QUIET */
- /* 1 - NORMAL */
- /* 2 - VERBOSE */
-
- xbString sMsg;
- char c;
- xbString s;
-
- if( argCnt > 1 ) {
- if( av[1][0] == 'Q' )
- iPo = 0;
- else if( av[1][0] == 'V' )
- iPo = 2;
- }
-
-
- xbSchema MyV4Record[] =
- {
- { "CITY", XB_CHAR_FLD, 100, 0 },
- { "STATE", XB_CHAR_FLD, 2, 0 },
- { "ZIP", XB_NUMERIC_FLD, 9, 0 },
- { "DATE1", XB_DATE_FLD, 8, 0 },
- { "",0,0,0 }
- };
-
-
- xbSchema MyV4Record2[] =
- {
- { "CHAR1", XB_CHAR_FLD, 1, 0 },
- { "CHAR27", XB_CHAR_FLD, 27, 0 },
- { "",0,0,0 }
- };
-
-
- xbXBase x;
-
- #ifdef XB_LOGGING_SUPPORT
- x.SetLogDirectory( PROJECT_LOG_DIR );
- x.EnableMsgLogging();
- if( iPo ){
- std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
- }
- sMsg.Sprintf( "Program [%s] initializing...", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- x.SetDataDirectory( PROJECT_DATA_DIR );
- x.SetMultiUser( xbFalse );
- InitTime();
-
- if( iPo > 0 )
- std::cout << "Default Data Directory is [" << x.GetDataDirectory().Str() << "]" << std::endl;
-
-
- xbFile f( &x );
- xbIx *pIx;
- void *pTag;
- xbDate dt = "19890209";
- xbString sKey;
-
- xbDbf *V4DbfX1 = new xbDbf4( &x );
-
-
- iRc2 = V4DbfX1->CreateTable( "TMDXDB01.DBF", "TestMdxX2", MyV4Record, XB_OVERLAY, XB_MULTI_USER );
- iRc += TestMethod( iPo, "CreateTable(1)", iRc2, 0 );
-
- /*
- CreateTag( const xbString &sIxType, const xbString &sName, const xbString &sKey, const xbString &sFilter,
- xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverLay, xbIx **xbIxOut, void **vpTagOut );
- */
-
-
- iRc2 = V4DbfX1->CreateTag( "MDX", "CITY_TAGA", "CITY", "", 0, 0, XB_OVERLAY, &pIx, &pTag );
- iRc += TestMethod( iPo, "CreateTag(1)", iRc2, 0 );
-
- iRc2 = V4DbfX1->CreateTag( "MDX", "ZIP_TAG", "ZIP", "", xbTrue, 0, XB_OVERLAY, &pIx, &pTag );
- iRc += TestMethod( iPo, "CreateTag(2)", iRc2, 0 );
-
- iRc2 = V4DbfX1->CreateTag( "MDX", "DATE_TAG", "DATE1", "", 0, xbTrue, XB_OVERLAY, &pIx, &pTag );
- iRc += TestMethod( iPo, "CreateTag(3)", iRc2, 0 );
-
-
- // std::cout << "Cur Tag Name = " << V4DbfX1->GetCurTagName().Str() << "\n";
-
- // xbDouble d = 4000;
-// iRc2 = V4DbfX1->Find( d );
-// std::cout << iRc2 << "\n";
-
-
- xbInt32 uZip = 10000;
- for( xbUInt16 i = 0; i < 35; i++ ){
- for( xbUInt16 j = 0; j < 14; j++ ){
-
- c = j + 65;
- s = c;
- s.PadRight( c, (xbUInt32) i + 1 );
- //std::cout << "*********** adding s=[" << s.Str() << "] length = " << s.Len() << "\n";
- iRc2 = V4DbfX1->BlankRecord();
- if( iRc2 != XB_NO_ERROR )
- iRc += TestMethod( iPo, "BlankRecord()", iRc2, XB_NO_ERROR );
-
- iRc2 = V4DbfX1->PutField( "CITY", s );
- if( iRc2 != XB_NO_ERROR )
- iRc += TestMethod( iPo, "PutField()", iRc2, XB_NO_ERROR );
-
- iRc2 = V4DbfX1->PutLongField( "ZIP", uZip++ );
- if( iRc2 != XB_NO_ERROR )
- iRc += TestMethod( iPo, "PutField()", iRc2, XB_NO_ERROR );
-
- iRc2 = V4DbfX1->PutDateField( "DATE1", dt );
- dt++;
- if( iRc2 != XB_NO_ERROR )
- iRc += TestMethod( iPo, "PutField()", iRc2, XB_NO_ERROR );
-
- iRc2 = V4DbfX1->AppendRecord();
- if( iRc2 != XB_NO_ERROR )
- iRc += TestMethod( iPo, "AppendRecord()", iRc2, XB_NO_ERROR );
-
- iRc2 = V4DbfX1->Commit();
- if( iRc2 != XB_NO_ERROR )
- iRc += TestMethod( iPo, "Commit()", iRc2, XB_NO_ERROR );
- }
- }
-
-
- iRc += TestMethod( iPo, "CheckTagIntegrity(1)", V4DbfX1->CheckTagIntegrity( 1, 2 ), XB_NO_ERROR );
-
- // attempt to add a dup key, should fail with XB_KEY_NOT_UNIQUE
- iRc2 = V4DbfX1->BlankRecord();
- if( iRc2 != XB_NO_ERROR )
- iRc += TestMethod( iPo, "BlankRecord()", iRc2, XB_NO_ERROR );
-
- iRc2 = V4DbfX1->PutField( "CITY", "Tampa" );
- if( iRc2 != XB_NO_ERROR )
- iRc += TestMethod( iPo, "PutField()", iRc2, XB_NO_ERROR );
-
- iRc2 = V4DbfX1->PutLongField( "ZIP", uZip++ );
- if( iRc2 != XB_NO_ERROR )
- iRc += TestMethod( iPo, "PutField()", iRc2, XB_NO_ERROR );
-
- dt.Set( "19890209" );
- iRc2 = V4DbfX1->PutDateField( "DATE1", dt );
- dt++;
- if( iRc2 != XB_NO_ERROR )
- iRc += TestMethod( iPo, "PutField()", iRc2, XB_NO_ERROR );
-
- iRc2 = V4DbfX1->AppendRecord();
- if( iRc2 != XB_KEY_NOT_UNIQUE )
- iRc += TestMethod( iPo, "AppendRecord()", iRc2, XB_NO_ERROR );
-
- iRc2 = V4DbfX1->Abort();
- if( iRc2 != XB_NO_ERROR )
- iRc += TestMethod( iPo, "Abort()", iRc2, XB_NO_ERROR );
-
- iRc += TestMethod( iPo, "DeleteTag()", V4DbfX1->DeleteTag( "MDX", "CITY_TAGA" ), XB_NO_ERROR );
- iRc += TestMethod( iPo, "CheckTagIntegrity(2)", V4DbfX1->CheckTagIntegrity( 1, 2 ), XB_NO_ERROR );
-
- iRc2 = V4DbfX1->CreateTag( "MDX", "CITY_TAGF", "CITY", ".NOT. DELETED()", 0, 0, XB_OVERLAY, &pIx, &pTag );
- iRc += TestMethod( iPo, "CreateTag(4)", iRc2, 0 );
-
- iRc2 = V4DbfX1->SetCurTag( "CITY_TAGF" );
- iRc += TestMethod( iPo, "SetCurTag()", iRc2, XB_NO_ERROR );
- iRc += TestMethod( iPo, "GetCurTagName()", V4DbfX1->GetCurTagName().Str(), "CITY_TAGF", 9 );
-
- // next check throws an error message on the display, that is what it is testing, don't need to debug it
- iRc += TestMethod( iPo, "CheckTagIntegrity(3)", V4DbfX1->CheckTagIntegrity( 1, 2 ), XB_INVALID_INDEX );
-
-
- iRc2 = V4DbfX1->Reindex( 0 );
- iRc += TestMethod( iPo, "Reindex( 0 )", iRc2, XB_NO_ERROR );
- iRc += TestMethod( iPo, "CheckTagIntegrity(4)", V4DbfX1->CheckTagIntegrity( 1, 2 ), XB_NO_ERROR );
-
- iRc += TestMethod( iPo, "GetCurTagName()", V4DbfX1->GetCurTagName().Str(), "CITY_TAGF", 9 );
-
- iRc2 = V4DbfX1->Reindex( 1 );
- iRc += TestMethod( iPo, "Reindex( 1 )", iRc2, XB_NO_ERROR );
- iRc += TestMethod( iPo, "CheckTagIntegrity(5)", V4DbfX1->CheckTagIntegrity( 1, 2 ), XB_NO_ERROR );
-
- // delete everything, all keys should be removed from the filtered index
- iRc += TestMethod( iPo, "DeleteAll(0)", V4DbfX1->DeleteAll( 0 ), XB_NO_ERROR );
- iRc += TestMethod( iPo, "Commit()", V4DbfX1->Commit(), XB_NO_ERROR );
- iRc += TestMethod( iPo, "CheckTagIntegrity(6)", V4DbfX1->CheckTagIntegrity( 1, 2 ), XB_NO_ERROR );
-
- // undelete everything, all keys should be added back into the filtered index
- iRc += TestMethod( iPo, "DeleteAll(1)", V4DbfX1->DeleteAll( 1 ), XB_NO_ERROR );
- iRc += TestMethod( iPo, "Commit()", V4DbfX1->Commit(), XB_NO_ERROR );
- iRc += TestMethod( iPo, "CheckTagIntegrity(7)", V4DbfX1->CheckTagIntegrity( 1, 2 ), XB_NO_ERROR );
-
- // std::cout << "Cur Tag Name = " << V4DbfX1->GetCurTagName().Str() << "\n";
- sKey = "abc";
- iRc += TestMethod( iPo, "Find()", V4DbfX1->Find( sKey ), XB_NOT_FOUND );
- sKey = "EEEEE";
- iRc += TestMethod( iPo, "Find()", V4DbfX1->Find( sKey ), XB_NO_ERROR );
- iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) V4DbfX1->GetCurRecNo(), (xbInt32) 61 );
-
- iRc += TestMethod( iPo, "GetNextKey()", V4DbfX1->GetNextKey(), XB_NO_ERROR );
- iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) V4DbfX1->GetCurRecNo(), (xbInt32) 75 );
-
- iRc += TestMethod( iPo, "GetPrevKey()", V4DbfX1->GetPrevKey(), XB_NO_ERROR );
- iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) V4DbfX1->GetCurRecNo(), (xbInt32) 61 );
-
- iRc += TestMethod( iPo, "GetLastKey()", V4DbfX1->GetLastKey(), XB_NO_ERROR );
- iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) V4DbfX1->GetCurRecNo(), (xbInt32) 490 );
-
- iRc += TestMethod( iPo, "GetFirstKey()", V4DbfX1->GetFirstKey(), XB_NO_ERROR );
- iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) V4DbfX1->GetCurRecNo(), (xbInt32) 1 );
-
- xbString sDir;
- V4DbfX1->GetFileDirPart( sDir );
- xbString sDbfName;
- xbString sMdxName;
- sDbfName.Sprintf( "%sTestMdxR.DBF", sDir.Str());
- sMdxName.Sprintf( "%sTestMdxR.MDX", sDir.Str());
- V4DbfX1->xbRemove( sDbfName );
- V4DbfX1->xbRemove( sMdxName );
-
- iRc += TestMethod( iPo, "Rename()", V4DbfX1->Rename( "TestMdxR.DBF" ), XB_NO_ERROR );
-
-
- xbDbf *V4DbfX2 = new xbDbf4( &x );
- iRc2 = V4DbfX2->CreateTable( "TMDXDB02.DBF", "TestMdxX4", MyV4Record2, XB_OVERLAY, XB_MULTI_USER );
- iRc += TestMethod( iPo, "CreateTable(2)", iRc2, 0 );
-
-
- iRc2 = V4DbfX2->CreateTag( "MDX", "TAG1", "CHAR27", ".NOT. DELETED()", 0, 0, XB_OVERLAY, &pIx, &pTag );
-// iRc2 = V4DbfX2->CreateTag( "MDX", "TAG2", "CHAR1", "CHAR1 = 'O' .AND. .NOT. DELETED()", 0, 0, XB_OVERLAY, &pIx, &pTag );
- iRc += TestMethod( iPo, "CreateTag(4)", iRc2, 0 );
-
-
-
- for( xbUInt32 ul = 0; ul < 500 && iRc2 == XB_NO_ERROR; ul++ ){
- c = 'O';
- V4DbfX2->BlankRecord();
- iRc2 = V4DbfX2->PutField( 1, c );
- if( iRc2 != XB_NO_ERROR ){
- iRc += TestMethod( iPo, "PutField()", iRc2, XB_NO_ERROR );
- } else {
- iRc2 = V4DbfX2->AppendRecord();
- if( iRc2 != XB_NO_ERROR ){
- iRc += TestMethod( iPo, "AppendRecord()", iRc2, XB_NO_ERROR );
- } else {
- iRc2 = V4DbfX2->Commit();
- if( iRc2 != XB_NO_ERROR ){
- iRc += TestMethod( iPo, "Commit()", iRc2, XB_NO_ERROR );
- }
- }
- }
- }
-
- iRc += TestMethod( iPo, "CheckTagIntegrity(7)", V4DbfX2->CheckTagIntegrity( 1, 2 ), XB_NO_ERROR );
-
- x.CloseAllTables();
- delete V4DbfX1;
- delete V4DbfX2;
-
- if( iPo > 0 || iRc < 0 )
- fprintf( stdout, "Total Errors = %d\n", iRc * -1 );
-
-#ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], iRc * -1 );
- x.WriteLogMessage( sMsg );
-#endif
-
- return iRc;
-}
diff --git a/src/tests/xb_test_ndx.cpp b/src/tests/xb_test_ndx.cpp
deleted file mode 100755
index 34496b6..0000000
--- a/src/tests/xb_test_ndx.cpp
+++ /dev/null
@@ -1,403 +0,0 @@
-/* xb_test_ndx.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-// This program tests the class xbIxNdx
-
-// usage: xb_test_ndx QUITE|NORMAL|VERBOSE
-
-
-
-// fix me - this program needs to test GetUnique
-
-#include "xbase.h"
-
-using namespace xb;
-
-#include "tstfuncs.cpp"
-
-
-int main( int argCnt, char **av )
-{
- int iRc = 0;
- int iRc2 = 0;
- int iPo = 1; /* print option */
- /* 0 - QUIET */
- /* 1 - NORMAL */
- /* 2 - VERBOSE */
-
- if( argCnt > 1 ) {
- if( av[1][0] == 'Q' )
- iPo = 0;
- else if( av[1][0] == 'V' )
- iPo = 2;
- }
-
-
- xbSchema MyV3Record[] =
- {
- { "CFLD", XB_CHAR_FLD, 30, 0 },
- { "DFLD", XB_DATE_FLD, 8, 0 },
- { "NFLD", XB_NUMERIC_FLD, 12, 0 },
- { "",0,0,0 }
- };
-
- xbXBase x;
- xbString sMsg;
-
- #ifdef XB_LOGGING_SUPPORT
- x.SetLogDirectory( PROJECT_LOG_DIR );
- x.EnableMsgLogging();
- if( iPo ){
- std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
- }
- sMsg.Sprintf( "Program [%s] initializing...", av[0] );
- x.WriteLogMessage( sMsg );
- x.SetLogSize( 1000000 );
- #endif
-
- x.SetDataDirectory( PROJECT_DATA_DIR );
- x.SetMultiUser( xbFalse );
-
- InitTime();
-
- char c;
- xbString s;
- xbInt32 lRecCnt = 0;
- iRc = 0;
-
-
- if( iPo > 0 )
- std::cout << "Default Data Directory is [" << x.GetDataDirectory().Str() << "]" << std::endl;
-
- xbDbf *V3Dbf = new xbDbf3( &x );
-
- xbIx *ixPtr;
- void *ndx;
-
- iRc2 = V3Dbf->CreateTable( "TestNdx.DBF", "TestNdx", MyV3Record, XB_OVERLAY, XB_MULTI_USER );
- iRc += TestMethod( iPo, "CreateTable()", (xbInt32) iRc2, XB_NO_ERROR );
-
- if( iRc2 )
- x.DisplayError( iRc2 );
-
-
- iRc2 = V3Dbf->CreateTag( "NDX", "TestNdxC.NDX", "CFLD", "", 0, 0, XB_OVERLAY, &ixPtr, &ndx );
- iRc += TestMethod( iPo, "CreateTag()", (xbInt32) iRc2, XB_NO_ERROR );
- if( iRc2 )
- x.DisplayError( iRc2 );
-
- iRc2 = V3Dbf->AssociateIndex( "NDX", "TestNdxC.NDX", 0 );
- iRc += TestMethod( iPo, "Associate()", (xbInt32) iRc2, XB_NO_ERROR );
-
- iRc2 = V3Dbf->CreateTag( "NDX", "TestNdxD.NDX", "DFLD", "", 0, 0, XB_OVERLAY, &ixPtr, &ndx );
- iRc += TestMethod( iPo, "CreateTag()", (xbInt32) iRc2, XB_NO_ERROR );
- if( iRc2 )
- x.DisplayError( iRc2 );
-
- iRc2 = V3Dbf->AssociateIndex( "NDX", "TestNdxD.NDX", 0 );
- iRc += TestMethod( iPo, "Associate()", (xbInt32) iRc2, XB_NO_ERROR );
-
- iRc2 = V3Dbf->CreateTag( "NDX", "TestNdxN.NDX", "NFLD", "", 0, 0, XB_OVERLAY, &ixPtr, &ndx );
- iRc += TestMethod( iPo, "CreateTag()", (xbInt32) iRc2, XB_NO_ERROR );
- if( iRc2 )
- x.DisplayError( iRc2 );
-
- iRc2 = V3Dbf->AssociateIndex( "NDX", "TestNdxN.NDX", 0 );
- iRc += TestMethod( iPo, "Associate()", (xbInt32) iRc2, XB_NO_ERROR );
-
- #ifdef XB_LOCKING_SUPPORT
- iRc += TestMethod( iPo, "LockTable()", V3Dbf->LockTable( XB_LOCK ), XB_NO_ERROR );
- #endif
-
- iRc += TestMethod( iPo, "GetCurTagName()", V3Dbf->GetCurTagName().Str(), "TestNdxC", 8 );
- iRc += TestMethod( iPo, "SetCurTag()", V3Dbf->SetCurTag( "TestNdxN" ), XB_NO_ERROR );
- iRc += TestMethod( iPo, "GetCurTagName()", V3Dbf->GetCurTagName().Str(), "TestNdxN", 8 );
- xbDouble dbl = 100;
- iRc += TestMethod( iPo, "Find( 100 )", V3Dbf->Find( dbl ), XB_NOT_FOUND );
-
- iRc += TestMethod( iPo, "SetCurTag()", V3Dbf->SetCurTag( "TestNdxD" ), XB_NO_ERROR );
- iRc += TestMethod( iPo, "GetCurTagName()", V3Dbf->GetCurTagName().Str(), "TestNdxD", 8 );
- xbDate dt;
- iRc += TestMethod( iPo, "Find( dt )", V3Dbf->Find( dt ), XB_NOT_FOUND );
-
- iRc += TestMethod( iPo, "GetFirstKey()", ixPtr->GetFirstKey(), XB_EMPTY );
- iRc += TestMethod( iPo, "GetNextKey()", ixPtr->GetFirstKey(), XB_EMPTY );
- iRc += TestMethod( iPo, "GetLasttKey()", ixPtr->GetLastKey(), XB_EMPTY );
- iRc += TestMethod( iPo, "GetPrevKey()", ixPtr->GetPrevKey(), XB_EMPTY );
- iRc += TestMethod( iPo, "FindKey()", ixPtr->FindKey( NULL, "19611101", 8, 0 ), XB_NOT_FOUND );
-
- iRc += TestMethod( iPo, "BlankRecord()", V3Dbf->BlankRecord(), XB_NO_ERROR );
- iRc += TestMethod( iPo, "Putfield()", V3Dbf->PutField( "CFLD", "AAA" ), XB_NO_ERROR );
- iRc += TestMethod( iPo, "Putfield()", V3Dbf->PutField( "DFLD", "19611109" ), XB_NO_ERROR );
- iRc += TestMethod( iPo, "PutfieldDouble()", V3Dbf->PutDoubleField( "NFLD", 50 ), XB_NO_ERROR );
-
- iRc += TestMethod( iPo, "AppendRecord()", V3Dbf->AppendRecord(), XB_NO_ERROR );
-
- xbDate d( "19890209" );
-
- //for( xbUInt16 i = 0; i < 35 && iRc == XB_NO_ERROR; i++ ){
- for( xbUInt16 i = 0; i < 2 && iRc == XB_NO_ERROR; i++ ){
- for( xbUInt16 j = 0; j < 35 && iRc == XB_NO_ERROR; j++ ){
- c = j + 65;
- s = c;
- s.PadRight( c, (xbUInt32) i + 1 );
- V3Dbf->BlankRecord();
- V3Dbf->PutField( "CFLD", s );
- V3Dbf->PutLongField( "NFLD", ++lRecCnt );
- V3Dbf->PutField( "DFLD", d.Str() );
- d++;
-
- iRc = V3Dbf->AppendRecord();
- }
- }
-
- iRc += TestMethod( iPo, "SetCurTag()", V3Dbf->SetCurTag( "TestNdxN" ), XB_NO_ERROR );
- iRc += TestMethod( iPo, "GetCurTagName()", V3Dbf->GetCurTagName().Str(), "TestNdxN", 8 );
-
- dbl = 55.0;
- iRc += TestMethod( iPo, "Find( 55.0 )", V3Dbf->Find( dbl ), XB_NO_ERROR );
-
- iRc += TestMethod( iPo, "SetCurTag()", V3Dbf->SetCurTag( "TestNdxC" ), XB_NO_ERROR );
- iRc += TestMethod( iPo, "GetCurTagName()", V3Dbf->GetCurTagName().Str(), "TestNdxC", 8 );
-
- s = "AAA";
- iRc += TestMethod( iPo, "Find( 'AAA' )", V3Dbf->Find( s ), XB_NO_ERROR );
-
- s = "AzAA";
- iRc += TestMethod( iPo, "Find( 'AzAA' )", V3Dbf->Find( s ), XB_NOT_FOUND );
-
- iRc += TestMethod( iPo, "SetCurTag()", V3Dbf->SetCurTag( "TestNdxD" ), XB_NO_ERROR );
- iRc += TestMethod( iPo, "GetCurTagName()", V3Dbf->GetCurTagName().Str(), "TestNdxD", 8 );
-
- iRc += TestMethod( iPo, "Find( '19890420' )", V3Dbf->Find( d ), XB_NOT_FOUND );
-
- V3Dbf->GetRecord( 26 );
- V3Dbf->PutField( "CFLD", "AAA" );
- V3Dbf->PutRecord( 26 );
-
- V3Dbf->GetRecord( 14 );
- V3Dbf->PutField( "CFLD", "AAAA" );
- V3Dbf->PutRecord( 14 );
-
- V3Dbf->GetRecord( 11 );
- V3Dbf->PutField( "CFLD", "III" );
- V3Dbf->PutRecord( 11 );
-
- V3Dbf->GetRecord( 25 );
- V3Dbf->PutField( "CFLD", "DDD" );
- V3Dbf->PutRecord( 25 );
-
- V3Dbf->GetRecord( 12 );
- V3Dbf->PutField( "CFLD", "EEE" );
- V3Dbf->PutRecord( 12 );
-
- V3Dbf->GetRecord( 26 );
- V3Dbf->PutField( "CFLD", "CCC" );
- V3Dbf->PutRecord( 26 );
-
- V3Dbf->GetRecord( 13 );
- V3Dbf->PutField( "CFLD", "CCCC" );
- V3Dbf->PutRecord( 13 );
-
- V3Dbf->GetRecord( 27 );
- V3Dbf->PutField( "CFLD", "AAA" );
- V3Dbf->PutRecord( 27 );
-
- V3Dbf->GetRecord( 28 );
- V3Dbf->PutField( "CFLD", "CCC" );
- V3Dbf->PutRecord( 28 );
-
- V3Dbf->GetRecord( 24 );
- V3Dbf->PutField( "CFLD", "FFF" );
- V3Dbf->PutRecord( 24 );
-
- V3Dbf->GetRecord( 10 );
- V3Dbf->PutField( "CFLD", "HHH" );
- V3Dbf->PutRecord( 10 );
-
-
- for( xbUInt16 i = 0; i < 35 && iRc == XB_NO_ERROR; i++ ){
- for( xbUInt16 j = 0; j < 14 && iRc == XB_NO_ERROR; j++ ){
- c = j + 65;
- s = c;
- s.PadRight( c, (xbUInt32) i + 1 );
- V3Dbf->BlankRecord();
- V3Dbf->PutField( "CFLD", s );
- V3Dbf->PutLongField( "NFLD", ++lRecCnt );
- V3Dbf->PutField( "DFLD", d.Str() );
- d++;
- iRc = V3Dbf->AppendRecord();
- }
- }
-
- for( xbUInt16 i = 0; i < 2 && iRc == XB_NO_ERROR; i++ ){
- for( xbUInt16 j = 0; j < 14 && iRc == XB_NO_ERROR; j++ ){
- c = j + 65;
- s = c;
- s.PadRight( c, (xbUInt32) i + 1 );
-
- V3Dbf->BlankRecord();
- V3Dbf->PutField( "CFLD", s );
- V3Dbf->PutLongField( "NFLD", ++lRecCnt );
- V3Dbf->PutField( "DFLD", d.Str() );
- d++;
-
- iRc = V3Dbf->AppendRecord();
- }
- }
-
- V3Dbf->GetRecord( 26 );
- V3Dbf->PutField( "CFLD", "AAA" );
- V3Dbf->PutRecord( 26 );
-
- V3Dbf->GetRecord( 14 );
- V3Dbf->PutField( "CFLD", "AAAA" );
- V3Dbf->PutRecord( 14 );
-
- V3Dbf->GetRecord( 11 );
- V3Dbf->PutField( "CFLD", "III" );
- V3Dbf->PutRecord( 11 );
-
- V3Dbf->GetRecord( 25 );
- V3Dbf->PutField( "CFLD", "DDD" );
- V3Dbf->PutRecord( 25 );
-
- V3Dbf->GetRecord( 12 );
- V3Dbf->PutField( "CFLD", "EEE" );
- V3Dbf->PutRecord( 12 );
-
- V3Dbf->GetRecord( 26 );
- V3Dbf->PutField( "CFLD", "CCC" );
- V3Dbf->PutRecord( 26 );
-
- V3Dbf->GetRecord( 13 );
- V3Dbf->PutField( "CFLD", "CCCC" );
- V3Dbf->PutRecord( 13 );
-
- V3Dbf->GetRecord( 27 );
- V3Dbf->PutField( "CFLD", "AAA" );
- V3Dbf->PutRecord( 27 );
-
- V3Dbf->GetRecord( 28 );
- V3Dbf->PutField( "CFLD", "CCC" );
- V3Dbf->PutRecord( 28 );
-
- V3Dbf->GetRecord( 24 );
- V3Dbf->PutField( "CFLD", "FFF" );
- V3Dbf->PutRecord( 24 );
-
- V3Dbf->GetRecord( 10 );
- V3Dbf->PutField( "CFLD", "HHH" );
- V3Dbf->PutRecord( 10 );
-
- // just in case there are any issues outstanding
- V3Dbf->Abort();
-
- xbIxList *ixl = V3Dbf->GetIxList();
- xbIxNdx *ix;
- xbString sTagName;
- while( ixl ){
- if( *ixl->sFmt == "NDX" ){
- ix = (xbIxNdx *) ixl->ix;
- //ix->GetTagName( 0, sTagName );
- sMsg.Sprintf( "CheckTagIntegrity() - [%s]", ix->GetTagName(ix->GetCurTag()).Str());
- iRc += TestMethod( iPo, sMsg, ix->CheckTagIntegrity( ix->GetCurTag(), 2 ), XB_NO_ERROR );
- ixl = ixl->next;
- }
- }
-
- #ifdef XB_LOCKING_SUPPORT
- iRc += TestMethod( iPo, "LockTable()", V3Dbf->LockTable( XB_UNLOCK ), XB_NO_ERROR );
- #endif
-
- xbString sDir;
- V3Dbf->GetFileDirPart( sDir );
- xbString sDbfName;
- xbString sInfName;
- sDbfName.Sprintf( "%sTestNdxR.DBF", sDir.Str());
- sInfName.Sprintf( "%sTestNdxR.INF", sDir.Str());
-
- V3Dbf->xbRemove( sDbfName );
- V3Dbf->xbRemove( sInfName );
-
- iRc += TestMethod( iPo, "Rename()", V3Dbf->Rename( "TestNdxR.DBF" ), XB_NO_ERROR );
-
- iRc += TestMethod( iPo, "DeleteTable()", V3Dbf->DeleteTable(), XB_NO_ERROR );
- // iRc += TestMethod( iPo, "Close()", V3Dbf->Close(), XB_NO_ERROR ); // did a delete instead of close
-
- delete V3Dbf;
-
- x.SetUniqueKeyOpt( XB_EMULATE_DBASE );
- V3Dbf = new xbDbf3( &x );
-
- iRc2 = V3Dbf->CreateTable( "TestNdx.DBF", "TestNdx", MyV3Record, XB_OVERLAY, XB_MULTI_USER );
- iRc += TestMethod( iPo, "CreateTable()", (xbInt32) iRc2, XB_NO_ERROR );
-
- if( iRc2 )
- x.DisplayError( iRc2 );
-
- iRc2 = V3Dbf->CreateTag( "NDX", "TestNdxC.NDX", "CFLD", "", 0, xbTrue, XB_OVERLAY, &ixPtr, &ndx );
- iRc += TestMethod( iPo, "CreateTag()", (xbInt32) iRc2, XB_NO_ERROR );
- if( iRc2 )
- x.DisplayError( iRc2 );
-
- iRc2 = V3Dbf->AssociateIndex( "NDX", "TestNdxC.NDX", 0 );
- iRc += TestMethod( iPo, "Associate()", (xbInt32) iRc2, XB_NO_ERROR );
-
-
- iRc += TestMethod( iPo, "BlankRecord()", V3Dbf->BlankRecord(), XB_NO_ERROR );
- iRc += TestMethod( iPo, "Putfield()", V3Dbf->PutField( "CFLD", "AAA" ), XB_NO_ERROR );
- iRc += TestMethod( iPo, "Putfield()", V3Dbf->PutField( "DFLD", "19611109" ), XB_NO_ERROR );
- iRc += TestMethod( iPo, "PutfieldDouble()", V3Dbf->PutDoubleField( "NFLD", 50 ), XB_NO_ERROR );
- iRc += TestMethod( iPo, "AppendRecord()", V3Dbf->AppendRecord(), XB_NO_ERROR );
-
- iRc += TestMethod( iPo, "BlankRecord()", V3Dbf->BlankRecord(), XB_NO_ERROR );
- iRc += TestMethod( iPo, "Putfield()", V3Dbf->PutField( "CFLD", "BBB" ), XB_NO_ERROR );
- iRc += TestMethod( iPo, "Putfield()", V3Dbf->PutField( "DFLD", "19611109" ), XB_NO_ERROR );
- iRc += TestMethod( iPo, "PutfieldDouble()", V3Dbf->PutDoubleField( "NFLD", 50 ), XB_NO_ERROR );
- iRc += TestMethod( iPo, "AppendRecord()", V3Dbf->AppendRecord(), XB_NO_ERROR );
-
- iRc += TestMethod( iPo, "BlankRecord()", V3Dbf->BlankRecord(), XB_NO_ERROR );
- iRc += TestMethod( iPo, "Putfield()", V3Dbf->PutField( "CFLD", "BBB" ), XB_NO_ERROR );
- iRc += TestMethod( iPo, "Putfield()", V3Dbf->PutField( "DFLD", "19611109" ), XB_NO_ERROR );
- iRc += TestMethod( iPo, "PutfieldDouble()", V3Dbf->PutDoubleField( "NFLD", 50 ), XB_NO_ERROR );
- iRc += TestMethod( iPo, "AppendRecord()", V3Dbf->AppendRecord(), XB_NO_ERROR );
-
-
- ixl = V3Dbf->GetIxList();
- while( ixl ){
- if( *ixl->sFmt == "NDX" ){
- ix = (xbIxNdx *) ixl->ix;
- //ix->GetTagName( 0, sTagName );
- sMsg.Sprintf( "CheckTagIntegrity() - [%s]", ix->GetTagName(ix->GetCurTag()).Str());
- iRc += TestMethod( iPo, sMsg, ix->CheckTagIntegrity( ix->GetCurTag(), 2 ), XB_NO_ERROR );
- }
- ixl = ixl->next;
- }
-
-// iRc += TestMethod( iPo, "DeleteTable()", V3Dbf->DeleteTable(), XB_NO_ERROR );
-
- x.CloseAllTables();
-
- if( iPo > 0 || iRc < 0 )
- fprintf( stdout, "Total Errors = %d\n", iRc * -1 );
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], iRc * -1 );
- x.WriteLogMessage( sMsg, 2 );
- #endif
-
- return iRc;
-}
diff --git a/src/tests/xb_test_sql.cpp b/src/tests/xb_test_sql.cpp
deleted file mode 100755
index 99a4f0b..0000000
--- a/src/tests/xb_test_sql.cpp
+++ /dev/null
@@ -1,259 +0,0 @@
-/* xb_test_sql.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014, 2022,2023 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- xb64-devel@lists.sourceforge.net
- xb64-users@lists.sourceforge.net
-
-*/
-
-// This program tests the SQL functions
-
-// usage: xb_test_sql QUITE|NORMAL|VERBOSE
-
-
-
-#include "xbase.h"
-
-using namespace xb;
-
-#include "tstfuncs.cpp"
-
-
-int main( int argCnt, char **av )
-{
- int iRc = 0;
- int iRc2 = 0;
- int po = 1; /* print option */
- /* 0 - QUIET */
- /* 1 - NORMAL */
- /* 2 - VERBOSE */
-
- xbString sSql;
-
- if( argCnt > 1 ) {
- if( av[1][0] == 'Q' )
- po = 0;
- else if( av[1][0] == 'V' )
- po = 2;
- }
-
-/*
- xbSchema MyAddressRecord[] =
- {
- { "ADDRESS", XB_CHAR_FLD, 30, 0 },
- { "CITY", XB_CHAR_FLD, 30, 0 },
- { "STATE", XB_CHAR_FLD, 2, 0 },
- { "ZIPCODE", XB_NUMERIC_FLD, 9, 0 },
- { "NOTES", XB_MEMO_FLD, 10, 0 },
- { "LASTUPDATE", XB_DATE_FLD, 8, 1 },
- { "ACTIVE", XB_LOGICAL_FLD, 1, 0 },
- { "",0,0,0 }
- };
-
- above structure below, depending on how table is created
-
- sSql = "CREATE TABLE Address.DBF ( ADDRESS CHAR(30), CITY CHAR(30), STATE CHAR(2), ZIPCODE NUMERIC(9,0), NOTES VARCHAR, LASTUPDATE DATE, ACTIVE LOGICAL )";
-*/
-
- xbSchema MyZipRecord[] =
- {
- { "ZIPCODE", XB_NUMERIC_FLD, 9, 0 },
- { "CITY", XB_CHAR_FLD, 30, 0 },
- { "STATE", XB_CHAR_FLD, 2, 0 },
- { "",0,0,0 }
- };
-
-
- xbXBase x;
- #ifdef XB_LOGGING_SUPPORT
- x.SetLogDirectory( PROJECT_LOG_DIR );
- x.EnableMsgLogging();
- if( po ){
- std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
- }
- xbString sMsg;
- sMsg.Sprintf( "Program [%s] initializing...", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
-
- x.SetDataDirectory( PROJECT_DATA_DIR );
- InitTime();
-
- xbSql sql( &x );
-
- if( po > 0 )
- std::cout << "Default Data Directory is [" << x.GetDataDirectory().Str() << "]" << std::endl;
-
-
- xbDbf4 SqlDbf( &x ); // version 4 dbf file
- xbDbf4 SqlDbfZ( &x ); // version 4 dbf file
-
-
-
-
-
- sSql = "DROP TABLE IF EXISTS AddressR.DBF";
- iRc2 = sql.ExecuteNonQuery( sSql );
- iRc += TestMethod( po, "DropTable()", (xbInt32) iRc2, XB_NO_ERROR );
- if( iRc2 )
- x.DisplayError( iRc2 );
-
-
-
- sSql = "DROP TABLE IF EXISTS Address.DBF";
- iRc2 = sql.ExecuteNonQuery( sSql );
- iRc += TestMethod( po, "DropTable()", (xbInt32) iRc2, XB_NO_ERROR );
- if( iRc2 )
- x.DisplayError( iRc2 );
-
-
-
- sSql = "CREATE TABLE Address.DBF ( ADDRESS CHAR(30), CITY CHAR(30), STATE CHAR(2), ZIPCODE NUMERIC(9,0), NOTES VARCHAR, LASTUPDATE DATE, ACTIVE LOGICAL )";
-
- iRc2 = sql.ExecuteNonQuery( sSql );
- iRc += TestMethod( po, "CreateTable()", (xbInt32) iRc2, XB_NO_ERROR );
- if( iRc2 )
- x.DisplayError( iRc2 );
-
-/*
- non sql way to create a table
- iRc2 = SqlDbf.CreateTable( "Address.DBF", "Address", MyAddressRecord, XB_OVERLAY, XB_MULTI_USER );
- iRc += TestMethod( po, "CreateTable()", (xbInt32) iRc2, XB_NO_ERROR );
- if( iRc2 )
- x.DisplayError( iRc2 );
-*/
-
-// return 0;
-
- #ifdef XB_MDX_SUPPORT
- sSql = "CREATE INDEX tag1 ON Address.DBF( CITY, STATE, DTOS( LASTUPDATE )) FILTER .NOT. DELETED()";
- // xbString sSql = "CREATE INDEX tag1 ON Address.DBF( CITY, STATE )";
-
- iRc2 = sql.ExecuteNonQuery( sSql );
- iRc += TestMethod( po, "SqL CreateIndex()", (xbInt32) iRc2, XB_NO_ERROR );
- if( iRc2 )
- x.DisplayError( iRc2 );
- #endif // XB_MDX_SUPPORT
-
- sSql = "INSERT INTO Address (CITY, STATE, ZIPCODE, NOTES, LASTUPDATE, ACTIVE ) VALUES ( 'San Diego', 'CA', 92007, 'San Diego is a cool place', '1989-02-09', 'Y')";
- iRc2 = sql.ExecuteNonQuery( sSql );
- iRc += TestMethod( po, "SqlInsert()", (xbInt32) iRc2, XB_NO_ERROR );
- if( iRc2 )
- x.DisplayError( iRc2 );
-
- sSql = "INSERT INTO Address (CITY, STATE, ZIPCODE, NOTES, LASTUPDATE, ACTIVE ) VALUES ( 'Dallas', 'TX', 76248, 'Dallas is hot in the summer', '1989-02-09', 'N')";
- iRc2 = sql.ExecuteNonQuery( sSql );
- iRc += TestMethod( po, "SqlInsert()", (xbInt32) iRc2, XB_NO_ERROR );
- if( iRc2 )
- x.DisplayError( iRc2 );
-
- sSql = "ALTER TABLE Address.DBF RENAME TO AddressR.DBF";
-
- iRc2 = sql.ExecuteNonQuery( sSql );
- iRc += TestMethod( po, "SqlAlterTable()", (xbInt32) iRc2, XB_NO_ERROR );
- if( iRc2 )
- x.DisplayError( iRc2 );
-
- sSql = "DELETE FROM AddressR.DBF WHERE CITY='San Diego'";
- iRc2 = sql.ExecuteNonQuery( sSql );
- iRc += TestMethod( po, "SqlDelete()", (xbInt32) iRc2, XB_NO_ERROR );
- if( iRc2 )
- x.DisplayError( iRc2 );
-
- sSql = "UNDELETE FROM AddressR.DBF WHERE CITY='San Diego'";
- iRc2 = sql.ExecuteNonQuery( sSql );
- iRc += TestMethod( po, "SqlUndelete()", (xbInt32) iRc2, XB_NO_ERROR );
- if( iRc2 )
- x.DisplayError( iRc2 );
-
- sSql = "DELETE FROM AddressR.DBF";
- iRc2 = sql.ExecuteNonQuery( sSql );
- iRc += TestMethod( po, "SqlDelete()", (xbInt32) iRc2, XB_NO_ERROR );
- if( iRc2 )
- x.DisplayError( iRc2 );
-
- sSql = "UNDELETE FROM AddressR.DBF";
- iRc2 = sql.ExecuteNonQuery( sSql );
- iRc += TestMethod( po, "SqlDelete()", (xbInt32) iRc2, XB_NO_ERROR );
- if( iRc2 )
- x.DisplayError( iRc2 );
-
-
- iRc2 = SqlDbfZ.CreateTable( "ZipCode.DBF", "", MyZipRecord, XB_OVERLAY, XB_MULTI_USER );
- iRc += TestMethod( po, "CreateTable()", (xbInt32) iRc2, XB_NO_ERROR );
- if( iRc2 )
- x.DisplayError( iRc2 );
-
-
-// sSql = "INSERT INTO ZipCode.DBF ( ZIPCODE, CITY, STATE ) VALUES ( 75087, 'Rockwall', 'TX' )";
-
-
-// std::cout << "---------------------------------------------------------\n";
-// std::cout << sSql.Str() << "\n";
-
- sSql = "INSERT INTO ZipCode ( CITY ) VALUES ( 'city' )";
- iRc2 = sql.ExecuteNonQuery( sSql );
-
-
- iRc += TestMethod( po, "SqlInsert()", (xbInt32) iRc2, XB_NO_ERROR );
- if( iRc2 )
- x.DisplayError( iRc2 );
-
-
-
-//**************** work in progress
-
-/*
- sSql = "DELETE FROM AddressR.DBF WHERE BAD='EXPRESSION'";
- iRc2 = sql.ExecuteNonQuery( sSql );
- iRc += TestMethod( po, "SqlDelete()", (xbInt32) iRc2, XB_INVALID_FIELD_NAME );
-*/
-// if( iRc2 )
-// x.DisplayError( iRc2 );
-
-
-
- iRc += TestMethod( po, "Close()", SqlDbf.Close(), XB_NO_ERROR );
- iRc += TestMethod( po, "Close()", SqlDbfZ.Close(), XB_NO_ERROR );
-
-
-// return 0;
-
-// std::cout << "---------------------------------------------------------\n";
-
- xbStmt sqlQry1( &x );
-// sSql = "SELECT CITY, STATE, ZIPCODE FROM Address.DBF T LEFT JOIN LJ.DBF LJ WHERE CITY IS NOT NULL ORDER BY 2 GROUP BY STATE HAVING ZIPCODE .NOT. NULL";
-// sSql = "SELECT CITY, STATE, ZIPCODE FROM AddressR.DBF T WHERE CITY IS NOT NULL ORDER BY 2 GROUP BY STATE HAVING ZIPCODE .NOT. NULL";
-
-// sSql = "SELECT CITY, STATE, ZIPCODE FROM AddressR A LEFT JOIN ZipCode Z ON A.ZIPCODE = Z.ZIPCODE WHERE CITY IS NOT NULL ORDER BY 2 GROUP BY STATE HAVING ZIPCODE .NOT. NULL";
-// sSql = "SELECT M.ID, M.LEFTFK0, L0.CFLD FROM MAIN0 M LEFT JOIN LEFT0 L0 ON M.LEFTFK0 = L0.LEFTFK0 WHERE M.ID IS NOT NULL";
- iRc += TestMethod( po, "Select()", sqlQry1.ExecuteQuery( sSql ), XB_NO_ERROR );
-
- sqlQry1.DumpStmtInternals();
-
- // sqlQry1.Test();
-
-
- x.DisplayTableList();
-
-
- if( po > 0 || iRc < 0 )
- fprintf( stdout, "Total Errors = %d\n", iRc * -1 );
-
-#ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], iRc * -1 );
- x.WriteLogMessage( sMsg );
-#endif
-
- return iRc;
-}
-
- \ No newline at end of file
diff --git a/src/tests/xb_test_string.cpp b/src/tests/xb_test_string.cpp
deleted file mode 100755
index 2f01e51..0000000
--- a/src/tests/xb_test_string.cpp
+++ /dev/null
@@ -1,409 +0,0 @@
-/* xb_test_string.cpp
-
-XBase63 Software Library
-
-Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-// This program tests the string class xbString
-
-// usage: xb_test_string QUIET|NORMAL|VERBOSE
-
-#define VERBOSE
-
-#include "xbase.h"
-
-using namespace xb;
-
-#include "tstfuncs.cpp"
-
-int main( int argCnt, char **av = NULL )
-
-//int main( int argCnt, char *argv[] )
-{
- int rc = 0;
- int po = 1; /* print option */
- /* 0 - QUIET */
- /* 1 - NORMAL */
- /* 2 - VERBOSE */
-
- if( argCnt > 1 ) {
- if( av[1][0] == 'Q' )
- po = 0;
- else if( av[1][0] == 'V' )
- po = 2;
- }
-
- xbXBase x;
- xbString sMsg;
-
- #ifdef XB_LOGGING_SUPPORT
- x.SetLogDirectory( PROJECT_LOG_DIR );
- x.EnableMsgLogging();
- if( po ){
- std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
- }
- sMsg.Sprintf( "Program [%s] initializing...", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- x.SetDataDirectory( PROJECT_DATA_DIR );
-
- InitTime();
-
- // create a string, assign a value
- xbString s1;
- s1 = "Test String 1";
- rc += TestMethod( po, "Constructor s1" , s1, "Test String 1", 13 );
-
- // create another string, copy the value from s1 into it
- xbString s2;
- s2 = s1;
- rc += TestMethod( po, "Operator '=' " , s2, "Test String 1", 13 );
-
- // create another string with a single character
- xbString s3( 'X' );
-
- //std::cout << "s3 = [" << s3 << "]" << std::endl;
- rc += TestMethod( po, "Constructor s3" , s3, "X", 1 );
-
- // create another string and assign data to it yet another way
- xbString s4( "Class constructor test 4" );
- rc += TestMethod( po, "Constructor s4" , s4, "Class constructor test 4", 24 );
-
- // create another string with a size limit
- xbString s5( "Class constructor test 4", 7 );
- rc += TestMethod( po, "Constructor s5" , s5, "Class c", 7 );
-
- // create another string from a string
- xbString s6( s5 );
- rc += TestMethod( po, "Constructor s6" , s6, "Class c", 7 );
-
- // create 15 byte string with nothing in it
- xbString s7( (xbUInt32) 15 );
- rc += TestMethod( po, "Constructor s7" , s7, "", 0 );
-
- xbString s8( "some test data", 6 );
- rc += TestMethod( po, "Constructor s8" , s8, "some t", 6 );
-
- xbString s9( "some test data", 30 );
- rc += TestMethod( po, "Constructor s9" , s9, "some test data", 14 );
-
- // Extract character from a particular position in the string
- rc += TestMethod( po, "Operator [] ", s1[7], 't' );
- rc += TestMethod( po, "Operator [] ", s1.GetCharacter(7), 't' );
-
- s1[6] = 'X';
- rc += TestMethod( po, "Operator assignment [] ", s1.GetCharacter(6), 'X' );
-
- // set string 7 to a character
- s7 = 'Z';
- rc += TestMethod( po, "Operator =", s7.Str(), "Z", 1 );
-
- // Concatenation tests - I
- s1 = " part 1 ";
- s1 += " part 2 ";
- s2 = " part 3 ";
- s1 += s2;
- s1 += 'Z';
- rc += TestMethod( po, "Concatenation test 1", s1, " part 1 part 2 part 3 Z", 25 );
-
- // Concatenation tests - II
- s1 = "part 1 ";
- s1 -= "part 2 ";
- s1 -= 'X';
- s1 -= s2;
- rc += TestMethod( po, "Concatenation test 2", s1, "part 1part 2X part 3", 20 );
-
- // Concatenation tests - III
- s1 = "s1data ";
- s2 = "s2data ";
- s3 = s1 - s2;
- rc += TestMethod( po, "Concatenation test 3", s3, "s1datas2data", 12 );
-
- // Concatenation tests - IV
- s3 = s1 + s2;
- rc += TestMethod( po, "Concatenation test 4", s3, "s1data s2data ", 15 );
-
- // Concatenation tests - V
- s3 = s1 + " (char * data) " + "xyz " + s2 + 'z';
- rc += TestMethod( po, "Concatenation test 1", s3, "s1data (char * data) xyz s2data z", 36 );
-
- //Operator tests
- s1 = "aaa";
- s2 = "bbb";
- rc += TestMethod( po, "Operator == ", s1 == s2, 0 );
- rc += TestMethod( po, "Operator != ", s1 != s2, 1 );
- rc += TestMethod( po, "Operator < ", s1 < s2, 1 );
- rc += TestMethod( po, "Operator > ", s1 > s2, 0 );
- rc += TestMethod( po, "Operator < ", s1 <= s2, 1 );
- rc += TestMethod( po, "Operator > ", s1 >= s2, 0 );
-
- s1 = s2;
- rc += TestMethod( po, "Operator == ", s1 == s2, 1 );
- rc += TestMethod( po, "Operator != ", s1 == s2, 1 );
- rc += TestMethod( po, "Operator < ", s1 < s2, 0 );
- rc += TestMethod( po, "Operator > ", s1 > s2, 0 );
- rc += TestMethod( po, "Operator < ", s1 <= s2, 1 );
- rc += TestMethod( po, "Operator > ", s1 >= s2, 1 );
-
- s1 = "XYZ";
- rc += TestMethod( po, "Operator * ", (const char *) s1, "XYZ", 3 );
-
- s1 = 'Z';
- rc += TestMethod( po, "Operator = ", s1, "Z", 1 );
-
- s1 = "ABC,xyz";
- rc += TestMethod( po, "CountChar(c,1) ", (xbInt32) s1.CountChar( ',',1 ), 1 );
-
- s1 = "ABC,xy,z";
- rc += TestMethod( po, "CountChar(c,1) ", (xbInt32) s1.CountChar( ',',1 ), 2 );
-
- s1 = "ABC,xy,z'asad,as'adss";
- rc += TestMethod( po, "CountChar(c,1) ", (xbInt32) s1.CountChar( ',',1 ), 2 );
-
- s1 = "ABADFDSGA";
- rc += TestMethod( po, "CountChar() ", (xbInt32) s1.CountChar( 'A' ), 3 );
-
- s1.Ltrunc( 4 );
- rc += TestMethod( po, "Ltrunc(4) ", s1, "FDSGA", 5 );
-
- s1.PutAt( 3, 'Z' );
- rc += TestMethod( po, "PutAt(3,'Z') ", s1, "FDZGA", 5 );
-
- s1.AddBackSlash( 'Z' );
- rc += TestMethod( po, "AddBackSlash( 'Z' ) ", s1, "FD\\ZGA", 6 );
-
- s1 = "ABCDEFG";
- rc += TestMethod( po, "s1.Append( 'Z' )", s1.Append( 'Z' ).Str(), "ABCDEFGZ", 8 );
- rc += TestMethod( po, "s1.Append( '999' )", s1.Append( "999" ), "ABCDEFGZ999", 11 );
- s2 = "!@#";
- rc += TestMethod( po, "s1.Append( '!@#' )", s1.Append( s2 ), "ABCDEFGZ999!@#", 14 );
-
- rc += TestMethod( po, "s1.Assign( 'ABCDE', 3, 2 )", s1.Assign( "ABCDE", 3, 2 ), "CD", 2 );
- rc += TestMethod( po, "s1.Assign( 'ABCDE', 2, 7 )", s1.Assign( "ABCDE", 2, 7 ), "BCDE", 4 );
- rc += TestMethod( po, "s1.Assign( 'ABCDE', 1, 4 )", s1.Assign( "ABCDE", 1, 4 ), "ABCD", 4 );
- rc += TestMethod( po, "s1.Assign( 'ABCDE', 5, 5 )", s1.Assign( "ABCDE", 5, 5 ), "E", 1 );
- rc += TestMethod( po, "s1.Assign( 'ABCDE', 15, 5 )", s1.Assign( "ABCDE", 15, 5 ), "", 0 );
-
- rc += TestMethod( po, "s1.Assign( 'ABCDE', 1 )", s1.Assign( "ABCDE", 1 ), "ABCDE", 5 );
- rc += TestMethod( po, "s1.Assign( 'ABCDE', 3 )", s1.Assign( "ABCDE", 3 ), "CDE", 3 );
- rc += TestMethod( po, "s1.Assign( 'ABCDE', 10 )", s1.Assign( "ABCDE", 10 ), "", 0 );
-
- s2 = "ABCDE";
- rc += TestMethod( po, "s1.Assign( s2, 3, 2 )", s1.Assign( s2, 3, 2 ), "CD", 2 );
- rc += TestMethod( po, "s1.Assign( s2, 2, 7 )", s1.Assign( s2, 2, 7 ), "BCDE", 4 );
- rc += TestMethod( po, "s1.Assign( s2, 1, 4 )", s1.Assign( s2, 1, 4 ), "ABCD", 4 );
- rc += TestMethod( po, "s1.Assign( s2, 5, 5 )", s1.Assign( s2, 5, 5 ), "E", 1 );
- rc += TestMethod( po, "s1.Assign( s2, 15, 5 )", s1.Assign( s2, 15, 5 ), "", 0 );
-
- rc += TestMethod( po, "s1.Assign( s2, 1 )", s1.Assign( s2, 1 ), "ABCDE", 5 );
- rc += TestMethod( po, "s1.Assign( s2, 3 )", s1.Assign( s2, 3 ), "CDE", 3 );
- rc += TestMethod( po, "s1.Assign( s2, 10 )", s1.Assign( s2, 10 ), "", 0 );
-
- s2 = "1234567890";
- s1 = s2.Copy();
- rc += TestMethod( po, "Copy() ", s1, "1234567890", 10 );
-
- s1 = "0x35";
- char hexChar;
- s1.CvtHexChar( hexChar );
- rc += TestMethod( po, "CvtHexChar(hexChar) ", hexChar, '5' );
-
- s1 = "0x610x620x630x640x65";
- s1.CvtHexString( s2 );
- rc += TestMethod( po, "CvtHexString() ", s2, "abcde", 5 );
-
- s1 = "123";
- s2 = "ABC";
- rc += TestMethod( po, "HasAlphaChars()", s1.HasAlphaChars(), 0 );
- rc += TestMethod( po, "HasAlphaChars()", s2.HasAlphaChars(), 1 );
-
- s1 = "\\ABC\\XYZ";
- rc += TestMethod( po, "GetPathSeparator()", s1.GetPathSeparator(), '\\' );
-
- s1 = "/ABC/XYZ";
- rc += TestMethod( po, "GetPathSeparator()", s1.GetPathSeparator(), '/' );
-
- s2 = "";
- rc += TestMethod( po, "IsEmpty()", s2.IsEmpty(), 1 );
-
- // trim tests
- s1 = " ABC ";
- rc += TestMethod( po, "Ltrim()", s1.Ltrim(), "ABC ", 6 );
- s1 = " ABC ";
- rc += TestMethod( po, "Rtrim()", s1.Rtrim(), " ABC", 6 );
- s1 = " ABC ";
- rc += TestMethod( po, "Trim() ", s1.Trim(), "ABC", 3 );
-
- s1 = "ABC ";
- rc += TestMethod( po, "Ltrim()", s1.Ltrim(), "ABC ", 6 );
-
- s1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
- rc += TestMethod( po, "Mid(3,0) ", s1.Mid(3,0), "", 0 );
-
- s1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
- rc += TestMethod( po, "Mid(4,5) ", s1.Mid(4,5), "DEFGH", 5 );
-
- rc += TestMethod( po, "Pos('G') ", (xbInt32) s1.Pos( 'G' ), 4 );
- rc += TestMethod( po, "Pos(\"EFG\") ", (xbInt32) s1.Pos( "EFG" ), 2 );
-
- rc += TestMethod( po, "Pos('0') ", (xbInt32) s1.Pos( '0' ), 0 );
- rc += TestMethod( po, "Pos(\"000\") ", (xbInt32) s1.Pos( "000" ), 0 );
- rc += TestMethod( po, "Pos(\"DEF\") ", (xbInt32) s1.Pos( "DEF" ), 1 );
-
- s1 = "ABC.123.abc";
- rc += TestMethod( po, "Pos( '.', 4 )", (xbInt32) s1.Pos( '.', 4 ), 4 );
- rc += TestMethod( po, "Pos( '.', 5 )", (xbInt32) s1.Pos( '.', 5 ), 8 );
- rc += TestMethod( po, "Pos( '.', 9 )", (xbInt32) s1.Pos( '.', 9 ), 0 );
-
-
-
- s1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
- rc += TestMethod( po, "Remove(3,5) ", s1.Remove( 3, 5 ), "ABHIJKLMNOPQRSTUVWXYZ", 21 );
-
- s1 = "ABCABCABZ";
- s1.SwapChars( 'A', '9' );
- rc += TestMethod( po, "SwapChars() ", s1, "9BC9BC9BZ", 9 );
-
- s1.ToLowerCase();
- rc += TestMethod( po, "ToLowerCase() ", s1, "9bc9bc9bz", 9 );
-
- s1.ToUpperCase();
- rc += TestMethod( po, "ToUpperCase() ", s1, "9BC9BC9BZ", 9 );
-
- s1.ZapChar( '9' );
- rc += TestMethod( po, "ZapChar('9') ", s1, "BCBCBZ", 6 );
-
- s1.ZapLeadingChar( 'B' );
- rc += TestMethod( po, "ZapLeadingChar('B') ", s1, "CBCBZ", 5 );
-
- s1.ZapTrailingChar( 'Z' );
- rc += TestMethod( po, "ZapLeadingChar('B') ", s1, "CBCB", 4 );
-
- s1.ExtractElement( "aaaa|bbbb|cccc|dddd", '|', 2, 0 );
- rc += TestMethod( po, "ExtractElement() ", s1, "bbbb", 4 );
-
- s1.ExtractElement( "aaaa|b'bb|c'ccc|dddd", '|', 3, 1 );
- rc += TestMethod( po, "ExtractElement() ", s1, "dddd", 4 );
-
- s1 = "123";
- s1.PadLeft( '0', 9 );
- rc += TestMethod( po, "PadLeft() ", s1, "000000123", 9 );
-
- s1 = "abc";
- s1.PadRight( 'Z', 9 );
- rc += TestMethod( po, "PadRight() ", s1, "abcZZZZZZ", 9 );
-
- s1.Left( 4 );
- rc += TestMethod( po, "Left(4) ", s1, "abcZ", 4 );
-
- s1.Left( 1 );
- rc += TestMethod( po, "Left(1) ", s1, "a", 1 );
-
- s1.Left( 0 );
- rc += TestMethod( po, "Left(0) ", s1, "", 0 );
-
- char buf[5];
- buf[0] = 'W';
- buf[1] = 'X';
- buf[2] = 'Y';
- buf[3] = 'Z';
- buf[4] = 0x00;
- xbInt32 l = 1234567;
- xbFloat f = (xbFloat) 12.35;
- s2 = "test string";
-
- rc += TestMethod( po, "s1.Sprintf()", s1.Sprintf( "%s %d %s %ld", buf, 12, s2.Str(), l ), "WXYZ 12 test string 1234567", 27 );
-
- // %f format varies depending on compiler
- s1.Sprintf( "%6.2f", f );
- s1.Ltrim();
- rc += TestMethod( po, "s1.Sprintf()/s.Trim()", s1, "12.35", 5 );
-
- s1.SetNum( (long) 123456 );
- rc += TestMethod( po, "SetNum() ", s1, "123456", 6 );
-
- s1 = "T";
- rc += TestMethod( po, "ValidLogicalValue", s1.ValidLogicalValue(), 1 );
-
- s1 = "xyz";
- rc += TestMethod( po, "ValidLogicalValue", s1.ValidLogicalValue(), 0 );
-
- s1 = "-123456.89";
- rc += TestMethod( po, "ValidNumericValue", s1.ValidNumericValue(), 1 );
-
- s1 = "ABC-123456.89";
- rc += TestMethod( po, "ValidNumericValue", s1.ValidNumericValue(), 0 );
-
- s1 = "abcabcabx";
- rc += TestMethod( po, "GetLastPos", (xbInt16) s1.GetLastPos( 'b' ), 8 );
- s1 = "abcabcabx";
- rc += TestMethod( po, "GetLastPos", (xbInt16) s1.GetLastPos( 'x' ), 9 );
- s1 = "abcabcabx";
- rc += TestMethod( po, "GetLastPos", (xbInt16) s1.GetLastPos( '$' ), 0 );
- rc += TestMethod( po, "GetLastPos", (xbInt16) s1.GetLastPos( "ab" ), 7 );
-
- s1 = ")";
- rc += TestMethod( po, "GetLastPos", (xbInt16) s1.GetLastPos( ')' ), 1 );
- s1 = "))))";
- rc += TestMethod( po, "GetLastPos", (xbInt16) s1.GetLastPos( ')' ), 4 );
-
- char * p;
- p = (char *) malloc( 5 );
- p[0] = '1';
- p[1] = '2';
- p[2] = '3';
- p[3] = '4';
- p[4] = 0x00;
- s1.Set( p, 5 );
- free( p );
- rc += TestMethod( po, "Set", s1, "1234", 4 );
-
- xbDouble d = 12345678.876543;
- xbString sD( d );
- rc += TestMethod( po, "xbDouble Constructor", sD, "12345678.876543", 15 );
-
- xbString sSet;
- sSet.Set( sD );
- rc += TestMethod( po, "Set", sD, sD, 15 );
- sSet.Set( s2 );
- rc += TestMethod( po, "Set", sSet, s2, 11 );
- sSet.Set( "" );
- rc += TestMethod( po, "Set", sSet, "", 0 );
-
- s1.Sprintf( "string %d", 1 );
- s2.Sprintf( "string %1.1f", 2.0 );
- s3.Sprintf( "%s and %s", s1.Str(), s2.Str());
- rc += TestMethod( po, "Sprintf", s3, "string 1 and string 2.0", 23 );
-
- s1.Set( "abcdef.dbf" );
- s1.Replace( "def", "DEF" );
- rc += TestMethod( po, "Replace", s1, "abcDEF.dbf", 10 );
- s1.Replace( ".dbf", ".DBF" );
- rc += TestMethod( po, "Replace", s1, "abcDEF.DBF", 10 );
-
-
- xbInt16 iErrorStop = 10;
- xbInt16 iRc = -100;
- sMsg.Sprintf( "class::method() Exception Caught. Error Stop = [%d] iRc = [%d] Expression = [%s]", iErrorStop, iRc, s3.Str() );
-
- if( po > 0 || rc < 0 )
- fprintf( stdout, "Total Errors = %d\n", rc * -1 );
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], rc * -1 );
- x.WriteLogMessage( sMsg );
- #endif
-
- return rc;
-}
-
diff --git a/src/tests/xb_test_tblmgr.cpp b/src/tests/xb_test_tblmgr.cpp
deleted file mode 100755
index d048594..0000000
--- a/src/tests/xb_test_tblmgr.cpp
+++ /dev/null
@@ -1,158 +0,0 @@
-/* xb_test_tblmgr.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-// This program tests the table manager functions.
-// usage: xb_test_tblmgr QUITE|NORMAL|VERBOSE
-
-
-#include "xbase.h"
-
-using namespace xb;
-
-#include "tstfuncs.cpp"
-
-int main( int argCnt, char **av )
-{
- int iRc = 0;
- int iPo = 1; /* print option */
- /* 0 - QUIET */
- /* 1 - NORMAL */
- /* 2 - VERBOSE */
-
- if( argCnt > 1 ) {
- if( av[1][0] == 'Q' )
- iPo = 0;
- else if( av[1][0] == 'V' )
- iPo = 2;
- }
-
- xbXBase x;
-
- #ifdef XB_LOGGING_SUPPORT
- x.SetLogDirectory( PROJECT_LOG_DIR );
- x.EnableMsgLogging();
- if( iPo ){
- std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
- }
- xbString sMsg;
- sMsg.Sprintf( "Program [%s] initializing...", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
-
- InitTime();
-
- if( iPo == 2 ){
- std::cout << "DisplayError Test ==> ";
- x.DisplayError( 0 );
- #ifdef WIN32
- std::cout << "WIN32 environment" << std::endl;
- #else
- std::cout << "Not WIN32 environment" << std::endl;
- #endif
- }
-
- xbDbf * d1;
- xbDbf * d2;
-
- #if defined (XB_DBF3_SUPPORT )
- d1 = new xbDbf3( &x );
- #elif defined( XB_DBF4_SUPPORT )
- d1 = new xbDbf4( &x );
- #else
- std::cout << "No dbf file support built into library" << std::endl;
- return -1;
- #endif
-
- iRc += TestMethod( iPo, "AddTblToTblLst()", x.AddTblToTblList( d1, "TestTableC" ), 0 );
- iRc += TestMethod( iPo, "AddTblToTblLst()", x.AddTblToTblList( d1, "TestTableA" ), 0 );
- iRc += TestMethod( iPo, "AddTblToTblLst()", x.AddTblToTblList( d1, "TestTableB" ), 0 );
- iRc += TestMethod( iPo, "AddTblToTblLst()", x.AddTblToTblList( d1, "TestTableD" ), 0 );
-
-
- // Next line should generate an exception
- iRc += TestMethod( iPo, "AddTblToTblLst()", x.AddTblToTblList( d1, "TestTableC" ), XB_DUP_TABLE_OR_ALIAS );
-
- std::cout << "**** Next list should have one each of TestTableA, B, C, D sorted in alpha order ****" << std::endl;
- x.DisplayTableList();
-
- d2 = (xbDbf *) x.GetDbfPtr( "TestTableA" );
- if( d2 )
- std::cout << "[PASS] GetDbfPtr()" << std::endl;
- else{
- std::cout << "[FAIL] GetDbfPtr()" << std::endl;
- iRc--;
- }
-
-
-std::cout << "cp0\n";
- x.SetDataDirectory( "/ABCDEFG/" );
-
- #ifdef WIN32
- iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "\\ABCDEFG\\", 9 );
- #else
- iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "/ABCDEFG/", 9 );
- #endif
-std::cout << "cp1\n";
- x.SetDataDirectory( "/ABCDEFG" );
- #ifdef WIN32
- iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "\\ABCDEFG", 8 );
- #else
- iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "/ABCDEFG", 8 );
- #endif
-
-
- x.SetDataDirectory( "\\ABCDEFG\\");
- #ifdef WIN32
- iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "\\ABCDEFG\\", 9 );
- #else
- iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "/ABCDEFG/", 9 );
- #endif
-
- x.SetDataDirectory( "\\ABCDEFG" );
- #ifdef WIN32
- iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "\\ABCDEFG", 8 );
- #else
- iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "/ABCDEFG", 8 );
- #endif
-
- x.SetDataDirectory( "ABCDEFG" );
- iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "ABCDEFG", 7 );
-
- iRc += TestMethod( iPo, "RemoveTblFromDbList()", x.RemoveTblFromTblList( "TestTableB" ), 0 );
- iRc += TestMethod( iPo, "RemoveTblFromDbList()", x.RemoveTblFromTblList( "TestTableB" ), XB_NOT_FOUND );
- std::cout << "**** Next list should not have TestTableB in it ****" << std::endl;
- x.DisplayTableList();
-
-
- iRc += TestMethod( iPo, "RemoveTblFromDbList()", x.RemoveTblFromTblList( "TestTableA" ), 0 );
- iRc += TestMethod( iPo, "RemoveTblFromDbList()", x.RemoveTblFromTblList( "TestTableC" ), 0 );
- iRc += TestMethod( iPo, "RemoveTblFromDbList()", x.RemoveTblFromTblList( "TestTableD" ), 0 );
-
-
- delete d1;
-
- if( iPo > 0 || iRc < 0 )
- fprintf( stdout, "Total Errors = %d\n", iRc * -1 );
-
-
-#ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], iRc * -1 );
- x.WriteLogMessage( sMsg );
-#endif
-
-
- return iRc;
-}
-
diff --git a/src/tests/xb_test_xbase.cpp b/src/tests/xb_test_xbase.cpp
deleted file mode 100755
index 4751c25..0000000
--- a/src/tests/xb_test_xbase.cpp
+++ /dev/null
@@ -1,104 +0,0 @@
-/* xb_test_xbase.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-// This program tests the class xbXBase
-
-// usage: xb_test_xbase QUITE|NORMAL|VERBOSE
-
-
-#include "xbase.h"
-
-using namespace xb;
-
-#include "tstfuncs.cpp"
-
-int main( int argCnt, char **av )
-{
- int iRc = 0;
- int iPo = 1; /* print option */
- /* 0 - QUIET */
- /* 1 - NORMAL */
- /* 2 - VERBOSE */
-
- if( argCnt > 1 ) {
- if( av[1][0] == 'Q' )
- iPo = 0;
- else if( av[1][0] == 'V' )
- iPo = 2;
- }
-
- xbXBase x;
- xbString sMsg;
-
- #ifdef XB_LOGGING_SUPPORT
-
-
- xbString sLogDir = PROJECT_LOG_DIR;
-// x.SetLogDirectory( sLogDir );
- x.SetLogDirectory( PROJECT_LOG_DIR );
-
-
- x.EnableMsgLogging();
- if( iPo ){
- std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
- }
-
- sMsg.Sprintf( "Program [%s] initializing...", av[0] );
- x.WriteLogMessage( sMsg );
- #endif
- InitTime();
-
-
- x.SetDefaultDateFormat( "YY-MM-DD" );
- iRc += TestMethod( iPo, "SetDefaultDateFormat", x.GetDefaultDateFormat(), "YY-MM-DD", 8 );
- if( iPo == 2 ){
- if( x.GetEndianType() == 'L' )
- std::cout << "Little Endian Architecture" << std::endl;
- else if( x.GetEndianType() == 'B' )
- std::cout << "Big Endian Architecture" << std::endl;
- else
- std::cout << "Undefine Endian Architecture" << std::endl;
- }
-
- iRc += TestMethod( iPo, "GetErrorMessage", x.GetErrorMessage( XB_DBF_FILE_NOT_OPEN ), "DBF File Not Open", 17 );
-
-
- #ifdef XB_LOGGING_SUPPORT
- iRc += TestMethod( iPo, "GetLogDirectory()", x.GetLogDirectory(), sLogDir, sLogDir.Len());
- xbString sLogName = CMAKE_SYSTEM_NAME;
- sLogName += "_";
- sLogName += XB_PLATFORM;
- sLogName += ".xbLog.txt";
- iRc += TestMethod( iPo, "GetLogFileName()", x.GetLogFileName(), sLogName, sLogName.Len());
- x.WriteLogMessage( "Program xb_test_xbase - test logfile message" );
- #endif
-
- x.xbSleep( 250 );
- if( iPo == 2 ){
- std::cout << "DisplayError Test ==> ";
- x.DisplayError( 0 );
- }
- if( iPo > 0 || iRc < 0 )
- fprintf( stdout, "Total Errors = %d\n", iRc * -1 );
-
-
- #ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], iRc * -1 );
- x.WriteLogMessage( sMsg );
- #endif
-
- return iRc;
-}
-
diff --git a/src/utils/xb_cfg_check.cpp b/src/utils/xb_cfg_check.cpp
deleted file mode 100755
index 5489c51..0000000
--- a/src/utils/xb_cfg_check.cpp
+++ /dev/null
@@ -1,404 +0,0 @@
-/* xb_cfg_check.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2019,2023 Gary A Kunkel
-
-The xb64 software library is covered under
-the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- xb64-devel@lists.sourceforge.net
- xb64-users@lists.sourceforge.net
-
-*/
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "xbase.h"
-
-using namespace xb;
-
-
-int main()
-{
-
- fprintf( stdout, "\n%s version %d.%d.%d build options\n", CMAKE_PROJECT_NAME, xbase_VERSION_MAJOR,
- xbase_VERSION_MINOR, xbase_VERSION_PATCH );
- // fprintf( stdout, "Usage: xb_cfg_check\n\n" );
- fprintf( stdout, "These options were in effect at library build time:\n" );
-
- fprintf( stdout, "\nGeneral system variables:\n" );
- fprintf( stdout, "SYSTEM_NAME = [%s]\n", CMAKE_SYSTEM_NAME );
- fprintf( stdout, "SYSTEM_PROCESSOR = [%s]\n", CMAKE_SYSTEM_PROCESSOR );
- fprintf( stdout, "SYSTEM_VERSION = [%s]\n", CMAKE_SYSTEM_VERSION );
- fprintf( stdout, "PLATFORM = [%s]\n", XB_PLATFORM );
- fprintf( stdout, "BUILD TYPE = [%s]\n", CMAKE_BUILD_TYPE );
- fprintf( stdout, "CMAKE C FLAGS = [%s]\n", CMAKE_C_FLAGS );
- fprintf( stdout, "CMAKE C FLAGS DEBUG = [%s]\n", CMAKE_C_FLAGS_DEBUG );
- fprintf( stdout, "CMAKE C FLAGS RELEASE = [%s]\n", CMAKE_C_FLAGS_RELEASE );
-
-
- #ifdef XB_PLATFORM_32
- fprintf( stdout, "XB_PLATFORM_32 = [TRUE]\n" );
- #endif
- #ifdef XB_PLATFORM_64
- fprintf( stdout, "XB_PLATFORM_64 = [TRUE]\n" );
- #endif
- fprintf( stdout, "COMPILER = [%s]\n", CMAKE_COMPILER );
- #ifdef WIN32
- fprintf( stdout, "WIN32 = [ON]\n" );
- #else
- fprintf( stdout, "WIN32 = [OFF]\n" );
- #endif
-
- /*
- #ifdef XBDLLEXPORT
- fprintf( stdout, "XBDLLEXPORT = [%s]\n", XBDLLEXPORT );
- #endif
- */
- printf( "\n" );
-
-
- #ifdef CMAKE_COMPILER_IS_GNUCC
- fprintf( stdout, "CMAKE_COMPILER_IS_GNUCC = [ON]\n" );
- #else
- fprintf( stdout, "CMAKE_COMPILER_IS_GNUCC = [OFF]\n" );
- #endif
-
- #ifdef _FILE_OFFSET_BITS
- fprintf( stdout, "_FILE_OFFSET_BITS = [DEFINED]\n" );
- #endif
-
- fprintf( stdout, "User controlled build options:\n" );
-
-
- #ifdef XB_DEBUG_SUPPORT
- fprintf( stdout, "XB_DEBUG_SUPPORT = [ON]\n" );
- #else
- fprintf( stdout, "XB_DEBUG_SUPPORT = [OFF]\n" );
- #endif
-
- #ifdef XB_LOGGING_SUPPORT
- fprintf( stdout, "XB_LOGGING_SUPPORT = [ON]\n" );
- #else
- fprintf( stdout, "XB_LOGGING_SUPPORT = [OFF]\n" );
- #endif
-
- #ifdef XB_MEMO_SUPPORT
- fprintf( stdout, "XB_MEMO_SUPPORT = [ON]\n" );
- #else
- fprintf( stdout, "XB_MEMO_SUPPORT = [OFF]\n" );
- #endif
-
- #ifdef XB_DBF3_SUPPORT
- fprintf( stdout, "XB_DBF3_SUPPORT = [ON]\n" );
- #else
- fprintf( stdout, "XB_DBF3_SUPPORT = [OFF]\n" );
- #endif
-
- #ifdef XB_DBF4_SUPPORT
- fprintf( stdout, "XB_DBF4_SUPPORT = [ON]\n" );
- #else
- fprintf( stdout, "XB_DBF4_SUPPORT = [OFF]\n" );
- #endif
-
- #ifdef XB_LINKLIST_SUPPORT
- fprintf( stdout, "XB_LINKLIST_SUPPORT = [ON]\n" );
- #else
- fprintf( stdout, "XB_LINKLIST_SUPPORT = [OFF]\n" );
- #endif
-
- #ifdef XB_LOCKING_SUPPORT
- fprintf( stdout, "XB_LOCKING_SUPPORT = [ON]\n" );
- #else
- fprintf( stdout, "XB_LOCKING_SUPPORT = [OFF]\n" );
- #endif
-
- #ifdef XB_EXPRESSION_SUPPORT
- fprintf( stdout, "XB_EXPRESSION_SUPPORT = [ON]\n" );
- #else
- fprintf( stdout, "XB_EXPRESSION_SUPPORT = [OFF]\n" );
- #endif
-
- #ifdef XB_LOCKING_SUPPORT
- fprintf( stdout, "XB_EXAMPLES_SUPPORT = [ON]\n" );
- #else
- fprintf( stdout, "XB_EXAMPLES_SUPPORT = [OFF]\n" );
- #endif
- #ifdef XB_LOCKING_SUPPORT
- fprintf( stdout, "XB_UTILS_SUPPORT = [ON]\n" );
- #else
- fprintf( stdout, "XB_UTILS_SUPPORT = [OFF]\n" );
- #endif
-
- #ifdef XB_INDEX_SUPPORT
- fprintf( stdout, "XB_INDEX_SUPPORT = [ON]\n" );
- #else
- fprintf( stdout, "XB_INDEX_SUPPORT = [OFF]\n" );
- #endif
-
- #ifdef XB_NDX_SUPPORT
- fprintf( stdout, "XB_NDX_SUPPORT = [ON]\n" );
- #else
- fprintf( stdout, "XB_NDX_SUPPORT = [OFF]\n" );
- #endif
-
- #ifdef XB_MDX_SUPPORT
- fprintf( stdout, "XB_MDX_SUPPORT = [ON]\n" );
- #else
- fprintf( stdout, "XB_MDX_SUPPORT = [OFF]\n" );
- #endif
-
- #ifdef XB_SQL_SUPPORT
- fprintf( stdout, "XB_SQL_SUPPORT = [ON]\n" );
- #else
- fprintf( stdout, "XB_SQL_SUPPORT = [OFF]\n" );
- #endif
-
- #ifdef XB_INF_SUPPORT
- fprintf( stdout, "XB_INF_SUPPORT = [ON]\n" );
- #else
- fprintf( stdout, "XB_INF_SUPPORT = [OFF]\n" );
- #endif
-
- #ifdef XB_FILTER_SUPPORT
- fprintf( stdout, "XB_FILTER_SUPPORT = [ON]\n" );
- #else
- fprintf( stdout, "XB_FILTER_SUPPORT = [OFF]\n" );
- #endif
-
- #ifdef XB_BLOCKREAD_SUPPORT
- fprintf( stdout, "XB_BLOCKREAD_SUPPORT = [ON]\n" );
- #else
- fprintf( stdout, "XB_BLOCKREAD_SUPPORT = [OFF]\n" );
- #endif
-
-
- fprintf( stdout, "\nDirectories:\n" );
- fprintf( stdout, "HOME_DIRECTORY = [%s]\n", CMAKE_HOME_DIRECTORY );
- fprintf( stdout, "PROJECT_PARENT_DIR = [%s]\n", PROJECT_PARENT_DIR );
- fprintf( stdout, "PROJECT_BINARY_DIR = [%s]\n", PROJECT_BINARY_DIR );
- fprintf( stdout, "PROJECT_DATA_DIR = [%s]\n", PROJECT_DATA_DIR );
- fprintf( stdout, "PROJECT_LOG_DIR = [%s]\n", PROJECT_LOG_DIR );
- fprintf( stdout, "PROJECT_DFLT_LOGFILE = [%s]\n", PROJECT_DFLT_LOGFILE );
- fprintf( stdout, "PROJECT_SOURCE_DIR = [%s]\n", PROJECT_SOURCE_DIR );
- fprintf( stdout, "CMAKE_RUNTIME_OUTPUT_DIRECTORY = [%s]\n\n", CMAKE_RUNTIME_OUTPUT_DIRECTORY );
-
- fprintf( stdout, "Libraries:\n" );
- fprintf( stdout, "BUILD_SHARED_LIBS = [%s]\n", BUILD_SHARED_LIBS );
- fprintf( stdout, "EXTRA_LIBS = [%s]\n\n", EXTRA_LIBS );
-
- fprintf( stdout, "Field sizes:\n" );
- fprintf( stdout, "SIZEOF_VOID_P = [%s]\n", CMAKE_SIZEOF_VOID_P );
- fprintf( stdout, "sizeof(char *) = [%zd]\n", sizeof( char *));
- fprintf( stdout, "sizeof(int) = [%zd]\n", sizeof( int ));
- fprintf( stdout, "sizeof(long) = [%zd]\n", sizeof( long ));
- fprintf( stdout, "sizeof(char) = [%zd]\n", sizeof( char ));
- #ifdef HAVE_WCHAR_H
- fprintf( stdout, "sizeof(wchar_t) = [%zd]\n", sizeof( wchar_t ));
- #endif
-
- #ifdef HAVE_WINDOWS_H
- fprintf( stdout, "sizeof(DWORD) = [%zd]\n", sizeof( DWORD ));
- #endif
-
- fprintf( stdout, "sizeof(double) = [%zd]\n", sizeof( double ));
- fprintf( stdout, "sizeof(float) = [%zd]\n", sizeof( float ));
- fprintf( stdout, "sizeof(size_t) = [%zd]\n", sizeof( size_t ));
- fprintf( stdout, "sizeof(off_t) = [%zd]\n\n", sizeof( off_t ));
-
- fprintf( stdout, "sizeof(xbBool) = [%zd]\n", sizeof( xbBool ));
- fprintf( stdout, "sizeof(xbInt16) = [%zd]\n", sizeof( xbInt16 ));
- fprintf( stdout, "sizeof(xbUInt16) = [%zd]\n", sizeof( xbUInt16 ));
- fprintf( stdout, "sizeof(xbInt32) = [%zd]\n", sizeof( xbInt32 ));
- fprintf( stdout, "sizeof(xbUInt32) = [%zd]\n", sizeof( xbUInt32 ));
- fprintf( stdout, "sizeof(xbInt64) = [%zd]\n", sizeof( xbInt64 ));
- fprintf( stdout, "sizeof(xbUInt64) = [%zd]\n", sizeof( xbUInt64 ));
- fprintf( stdout, "sizeof(xbFloat) = [%zu]\n", sizeof( xbFloat ));
- fprintf( stdout, "sizeof(xbDouble) = [%zu]\n", sizeof( xbDouble ));
-
-
- fprintf( stdout, "\nHeader files:\n" );
- #ifdef HAVE_CTYPE_H
- fprintf( stdout, "HAVE_CTYPE_H = [YES]\n" );
- #else
- fprintf( stdout, "HAVE_CTYPE_H = [NO]\n" );
- #endif
-
- #ifdef HAVE_DIRENT_H
- fprintf( stdout, "HAVE_DIRENT_H = [YES]\n" );
- #else
- fprintf( stdout, "HAVE_DIRENT_H = [NO]\n" );
- #endif
-
- #ifdef HAVE_FCNTL_H
- fprintf( stdout, "HAVE_FCNTL_H = [YES]\n" );
- #else
- fprintf( stdout, "HAVE_FCNTL_H = [NO]\n" );
- #endif
-
- #ifdef HAVE_INTTYPES_H
- fprintf( stdout, "HAVE_INTTYPES_H = [YES]\n" );
- #else
- fprintf( stdout, "HAVE_INTTYPES_H = [NO]\n" );
- #endif
-
- #ifdef HAVE_STDARG_H
- fprintf( stdout, "HAVE_STDARG_H = [YES]\n" );
- #else
- fprintf( stdout, "HAVE_STDARG_H = [NO]\n" );
- #endif
-
- #ifdef HAVE_STRING_H
- fprintf( stdout, "HAVE_STRING_H = [YES]\n" );
- #else
- fprintf( stdout, "HAVE_STRING_H = [NO]\n" );
- #endif
-
- #ifdef HAVE_STRINGS_H
- fprintf( stdout, "HAVE_STRINGS_H = [YES]\n" );
- #else
- fprintf( stdout, "HAVE_STRINGS_H = [NO]\n" );
- #endif
-
- #ifdef HAVE_STAT_H
- fprintf( stdout, "HAVE_STAT_H = [YES]\n" );
- #else
- fprintf( stdout, "HAVE_STAT_H = [NO]\n" );
- #endif
-
- #ifdef HAVE_UNISTD_H
- fprintf( stdout, "HAVE_UNISTD_H = [YES]\n" );
- #else
- fprintf( stdout, "HAVE_UNISTD_H = [NO]\n" );
- #endif
-
- #ifdef HAVE_WINDOWS_H
- fprintf( stdout, "HAVE_WINDOWS_H = [YES]\n" );
- #else
- fprintf( stdout, "HAVE_WINDOWS_H = [NO]\n" );
- #endif
-
-
- fprintf( stdout, "\nC Library functions:\n" );
-
- #ifdef HAVE__CLOSE_F
- fprintf( stdout, "HAVE__CLOSE_F = [YES]\n" );
- #else
- fprintf( stdout, "HAVE__CLOSE_F = [NO]\n" );
- #endif
-
- #ifdef HAVE_CREATEPROCESSW_F
- fprintf( stdout, "HAVE_CREATEPROCESSW_F = [YES]\n" );
- #else
- fprintf( stdout, "HAVE_CREATEPROCESSW_F = [NO]\n" );
- #endif
-
- #ifdef HAVE_FCNTL_F
- fprintf( stdout, "HAVE_FCNTL_F = [YES]\n" );
- #else
- fprintf( stdout, "HAVE_FCNTL_F = [NO]\n" );
- #endif
-
- #ifdef HAVE__FDOPEN_F
- fprintf( stdout, "HAVE__FDOPEN_F = [YES]\n" );
- #else
- fprintf( stdout, "HAVE__FDOPEN_F = [NO]\n" );
- #endif
-
- #ifdef HAVE_FOPEN_S_F
- fprintf( stdout, "HAVE_FOPEN_S_F = [YES]\n" );
- #else
- fprintf( stdout, "HAVE_FOPEN_S_F = [NO]\n" );
- #endif
-
- #ifdef HAVE__FSOPEN_F
- fprintf( stdout, "HAVE__FSOPEN_F = [YES]\n" );
- #else
- fprintf( stdout, "HAVE__FSOPEN_F = [NO]\n" );
- #endif
-
- #ifdef HAVE__FILENO_F
- fprintf( stdout, "HAVE__FILENO_F = [YES]\n" );
- #else
- fprintf( stdout, "HAVE__FILENO_F = [NO]\n" );
- #endif
-
- #ifdef HAVE_FORK_F
- fprintf( stdout, "HAVE_FORK_F = [YES]\n" );
- #else
- fprintf( stdout, "HAVE_FORK_F = [NO]\n" );
- #endif
-
- #ifdef HAVE__FSEEKI64_F
- fprintf( stdout, "HAVE__FSEEKI64_F = [YES]\n" );
- #else
- fprintf( stdout, "HAVE__FSEEKI64_F = [NO]\n" );
- #endif
-
- #ifdef HAVE_FSEEKO_F
- fprintf( stdout, "HAVE_FSEEKO_F = [YES]\n" );
- #else
- fprintf( stdout, "HAVE_FSEEKO_F = [NO]\n" );
- #endif
-
- #ifdef HAVE_FTRUNCATE_F
- fprintf( stdout, "HAVE_FTRUNCATE_F = [YES]\n" );
- #else
- fprintf( stdout, "HAVE_FTRUNCATE_F = [NO]\n" );
- #endif
-
- #ifdef HAVE__LOCALTIME_S_F
- fprintf( stdout, "HAVE__LOCALTIME_S_F = [YES]\n" );
- #else
- fprintf( stdout, "HAVE__LOCALTIME_S_F = [NO]\n" );
- #endif
-
- #ifdef HAVE_LOCKFILE_F
- fprintf( stdout, "HAVE_LOCKFILE_F = [YES]\n" );
- #else
- fprintf( stdout, "HAVE_LOCKFILE_F = [NO]\n" );
- #endif
-
- #ifdef HAVE_LOCKING_F
- fprintf( stdout, "HAVE_LOCKING_F = [YES]\n" );
- #else
- fprintf( stdout, "HAVE_LOCKING_F = [NO]\n" );
- #endif
-
- #ifdef HAVE__LOCKING_F
- fprintf( stdout, "HAVE__LOCKING_F = [YES]\n" );
- #else
- fprintf( stdout, "HAVE__LOCKING_F = [NO]\n" );
- #endif
-
- #ifdef HAVE__OPEN_F
- fprintf( stdout, "HAVE__OPEN_F = [YES]\n" );
- #else
- fprintf( stdout, "HAVE__OPEN_F = [NO]\n" );
- #endif
-
- #ifdef HAVE_SETENDOFFILE_F
- fprintf( stdout, "HAVE_SETENDOFFILE_F = [YES]\n" );
- #else
- fprintf( stdout, "HAVE_SETENDOFFILE_F = [NO]\n" );
- #endif
-
- #ifdef HAVE_VSNPRINTF_F
- fprintf( stdout, "HAVE_VSNPRINTF_F = [YES]\n" );
- #else
- fprintf( stdout, "HAVE_VSNPRINTF_F = [NO]\n" );
- #endif
-
- #ifdef HAVE_VSNPRINTF_S_F
- fprintf( stdout, "HAVE_VSNPRINTF_S_F = [YES]\n" );
- #else
- fprintf( stdout, "HAVE_VSNPRINTF_S_F = [NO]\n" );
- #endif
-
- return 0;
-}
-
diff --git a/src/utils/xb_dbfutil.cpp b/src/utils/xb_dbfutil.cpp
deleted file mode 100755
index e50495e..0000000
--- a/src/utils/xb_dbfutil.cpp
+++ /dev/null
@@ -1,3811 +0,0 @@
-/* xb_dbfutil.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2021,2022,2023 Gary A Kunkel
-
-The xb64 software library is covered under
-the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- xb64-devel@lists.sourceforge.net
- xb64-users@lists.sourceforge.net
-
-*/
-
-#include "xbase.h"
-
-#ifdef HAVE_DIRENT_H
-#include <dirent.h>
-#endif
-
-#ifdef WIN32
-#include <windows.h>
-#endif
-
-using namespace xb;
-
-///@cond DOXYOFF
-class xbUtil{
- public:
- xbUtil( xbXBase *x );
- ~xbUtil();
- xbDbf *GetTablePtr( const char * cTitle );
- void DisplayActiveTable() const;
-
- void Help();
-
- // menus
- xbInt16 GetOption();
- xbInt32 GetLong();
- void ProcessOption( const xbString & sOption );
- void MainMenu();
- void SystemMenu();
- void FileMenu();
- void RecordMenu();
- void FieldMenu();
- void IndexMenu();
- void LockingMenu();
- void ExpressionMenu();
- void DebugMenu();
- void FilterMenu();
-
- #ifdef XB_SQL_SUPPORT
- void SqlMenu();
- #endif // XB_SQL_MENU
-
- #ifdef XB_NDXINF_SUPPORT
- void InfFileMenu();
- #endif // XB_NDXINF_SUPPORT
-
- // 2 - SystemMenu options
- void ListSystemSettings();
- void UpdateDataDirectory();
- void ToggleDefaultAutoCommit();
- #ifdef XB_MEMO_SUPPORT
- void UpdateDefaultMemoBlockSize();
- #endif
- void UpdateLogDirectory();
- void UpdateLogFileName();
- void ToggleLoggingStatus();
- void WriteLogMessage();
- #ifdef XB_LOCKING_SUPPORT
- void UpdateDefaultLockRetries();
- void ToggleDefaultAutoLock();
- void UpdateDefaultLockFlavor();
- void UpdateDefaultLockWait();
- void ToggleMultiUserMode();
- #endif
-
- // 3 - FileMenu options
- void ListFilesInDataDirectory();
- void Open();
- void Close();
- void CloseAllTables();
- void DisplayTableStats();
- void Pack();
- void ZapTable();
- void CopyDbfStructure();
- void UpdateTableAutoCommit();
- void DisplayTableInfo();
- void RenameTable();
-
- // 4 - RecordMenu options
- void GetRecord();
- void BlankRecord();
- void AppendRecord();
- void PutRecord();
- void DeleteRecord();
- void UndeleteRecord();
- void SelectActiveTable();
- void GetFirstRecord();
- void GetNextRecord();
- void GetPrevRecord();
- void GetLastRecord();
- void DumpRecord();
- void AbortRecord();
- void CommitRecord();
-
- #ifdef XB_FILTER_SUPPORT
- void SetFilter();
- void GetFirstFilterRec();
- void GetNextFilterRec();
- void GetPrevFilterRec();
- void GetLastFilterRec();
- #endif // XB_FILTER_SUPPORT
-
- // 5 - FieldMenu options
- void ListFieldInfo();
- void UpdateFieldData();
- #ifdef XB_MEMO_SUPPORT
- void ShowMemoFieldData();
- void UpdateMemoFieldData();
- void DeleteMemoField();
- #endif
-
- // 6 - LockMenu options
- #ifdef XB_LOCKING_SUPPORT
- void DisplayFileLockSettings();
- void UpdateFileLockRetryCount();
- void UpdateFileLockFlavor();
- void UpdateFileAutoLock();
- void LockDbf();
- void UnlockDbf();
- void LockRecord();
- void UnlockRecord();
- void LockAppend();
- void UnlockAppend();
- #ifdef XB_INDEX_SUPPORT
- void LockIndices();
- void UnlockIndices();
- #endif // XB_INDEX_SUPPORT
-
- #ifdef XB_MEMO_SUPPORT
- void LockMemo();
- void UnlockMemo();
- #endif // XB_MEMO_SUPPORT
-
- void LockHeader();
- void UnlockHeader();
- void xbFileLock();
- void xbFileUnlock();
- #endif // XB_LOCKING_SUPPORT
-
- // 7 - Expression Menu options
- #ifdef XB_EXPRESSION_SUPPORT
- void ParseExpression( xbInt16 iOption );
- void ProcessParsedExpression( xbInt16 iOption );
- void ParseAndProcessExpression();
- void JulToDate8();
- void Date8ToJul();
- void IsLeapYear();
- #ifdef XB_DEBUG_SUPPORT
- void DumpExpressionTree();
- #endif // XB_DEBUG_SUPPORT
- #endif // XB_EXPRESSION_SUPPORT
-
- // 8 - Index Menu Options
- #ifdef XB_INDEX_SUPPORT
- void DisplayOpenIndexFiles();
- void DisplaySupportedIndexTypes();
- void SelectTag();
- void OpenIndex();
- void CloseIndexFile();
- void CreateIndexTag();
-
- void GetFirstKey();
- void GetNextKey();
- void GetPrevKey();
- void GetLastKey();
- void FindKey();
-
- void CheckIntegrity();
- void Reindex();
- void DeleteTag();
- void AssociateNonProdIx();
-
- void DumpIxHeader();
- void DumpIxNode();
- void DumpIxNodeChain();
- void DumpRecsByIx( xbInt16 iOpt );
- void DumpFreeBlocks();
-
- #endif // XB_INDEX_SUPPORT
-
-
- // 9 - SQL Menu Options
- #ifdef XB_SQL_SUPPORT
- void ExecSqlNonQuery();
- void ExecSqlQuery();
- #endif // XB_SQL_SUPPORT
-
-
- // 10 - DebugMenu options
- #ifdef XB_MEMO_SUPPORT
- void DumpDbtHeader();
- void DumpMemoFreeChain();
- #endif
-
- // 11 - InfFileMenu options
- #ifdef XB_NDXINF_SUPPORT
- void ListInfFileData();
- void AddInfFileData();
- void DeleteInfFileData();
- void InfFileHelp();
- #endif
-
-
- private:
- xbXBase *x;
- xbDbf *dActiveTable;
-
- #ifdef XB_EXPRESSION_SUPPORT
- xbExp *exp;
- #endif // XB_EXPRESSION_SUPPORT
-
- #ifdef XB_SQL_SUPPORT
- xbSql *sql;
- #endif // XB_SQL_SUPPORT
-
- #ifdef XB_FILTER_SUPPORT
- xbFilter *filt;
- #endif // XB_FILTER_SUPPORT
-
-};
-
-/*************************************************************************************/
-xbUtil::xbUtil( xbXBase *x )
-{
- this->x = x;
- dActiveTable = NULL;
- x->EnableMsgLogging();
- x->SetLogSize( 10000000L );
-
- #ifdef XB_EXPRESSION_SUPPORT
- exp = NULL;
- #endif
-
- #ifdef XB_SQL_SUPPORT
- sql = new xbSql( x );
- #endif // XB_SQL_SUPPORT
-
- #ifdef XB_FILTER_SUPPORT
- filt = NULL;
- #endif // XB_FILTER_SUPPORT
-}
-
-
-/*************************************************************************************/
-xbUtil::~xbUtil(){
-
- x->CloseAllTables();
-
- if( dActiveTable )
- delete dActiveTable;
-
- #ifdef XB_SQL_SUPPORT
- if( sql )
- delete sql;
- #endif // XB_SQL_SUPPORT
-
- #ifdef XB_FILTER_SUPPORT
- if( filt )
- delete filt;
- #endif // XB_FILTER_SUPPORT
-}
-
-
-/*************************************************************************************/
-void xbUtil::Help(){
- std::cout << "Program xb_dbfutil provides a menu driven application for accessing" << std::endl;
- std::cout << "the xbase64 library functions." << std::endl << std::endl;
- std::cout << "Menu choices can be selected directly with out accessing the given menus" << std::endl;
- std::cout << "by entering a '=' followed by the menu choices. For example, entering '=3.4'" << std::endl;
- std::cout << "would be the same as going to menu #3 and entering a 4, which is the sequence" << std::endl;
- std::cout << "for opening a file." << std::endl;
-}
-
-/*************************************************************************************/
-#ifdef XB_NDXINF_SUPPORT
-
-void xbUtil::ListInfFileData()
-{
- xbLinkListNode<xbString> *llN = dActiveTable->GetNdxInfList();
-
- xbString s;
- while( llN ){
- s = llN->GetKey();
- std::cout << s.Str() << std::endl;
- llN = llN->GetNextNode();
- }
-
-}
-
-void xbUtil::AddInfFileData()
-{
- char cBuf[128];
- std::cout << "Enter NDX index file name (FILENAME.NDX)" << std::endl;
- std::cin.getline( cBuf, 128 );
- xbInt16 iRc = dActiveTable->AssociateIndex( "NDX", cBuf, 0 );
- x->DisplayError( iRc );
-}
-
-void xbUtil::DeleteInfFileData()
-{
- char cBuf[128];
- std::cout << "Enter NDX index file name (FILENAME.NDX)" << std::endl;
- std::cin.getline( cBuf, 128 );
- xbInt16 iRc = dActiveTable->AssociateIndex( "NDX", cBuf, 1 );
- x->DisplayError( iRc );
-}
-
-void xbUtil::InfFileHelp()
-{
- std::cout << std::endl;
- std::cout << "Xbase64 uses an .INF file to link non production (NDX) index files to their associated DBF data file" << std::endl;
-}
-#endif // XB_NDXINF_SUPPORT
-
-
-/*************************************************************************************/
-#ifdef XB_INDEX_SUPPORT
-#ifdef XB_LOCKING_SUPPORT
-
-void xbUtil::LockIndices(){
-
- // verify active table selected, if not, select one
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
- xbInt16 iRc = dActiveTable->LockIndices( XB_LOCK );
- x->DisplayError( iRc );
-}
-
-void xbUtil::UnlockIndices(){
-
- // verify active table selected, if not, select one
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
- xbInt16 iRc = dActiveTable->LockIndices( XB_UNLOCK );
- x->DisplayError( iRc );
-}
-
-#endif // XB_LOCKING_SUPPORT
-#endif // XB_INDEX_SUPPORT
-
-
-/*************************************************************************************/
-#ifdef XB_EXPRESSION_SUPPORT
-void xbUtil::ParseExpression( xbInt16 iOption ){
-
- if( iOption == 0 )
- std::cout << "ParseExpression()\n";
-
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
- xbInt16 iRc;
- char sExpression[256];
- memset( sExpression, 0x00, 256 );
-
- std::cout << "Enter expresion:\n";
- std::cin.getline( sExpression, 255 );
-
- if( strlen( sExpression ) == 0 ){
- std::cout << "Invalid expression" << std::endl;
- return;
- }
-
- if( exp ){
- delete exp;
- exp = NULL;
- }
-
- exp = new xbExp( x, dActiveTable );
- iRc = exp->ParseExpression( sExpression );
-
- if( iOption == 0 )
- x->DisplayError( iRc );
-}
-
-/*************************************************************************************/
-void xbUtil::ProcessParsedExpression( xbInt16 iOption ){
-
- if( iOption == 0 )
- std::cout << "ProcessParsedExpression()\n";
- if( !exp )
- ParseExpression( iOption );
- if( !exp )
- return;
-
- // std::cout << "Dump from w/i dbfutil before processing expression\n";
- //exp->DumpTree( xbTrue );
- //std::cout << "-- end of dumptree in dbfutil before processExpression\n";
-
- xbInt16 iRc = exp->ProcessExpression();
- if( iRc != XB_NO_ERROR ){
- x->DisplayError( iRc );
- return;
- }
-
- //std::cout << "Dump from w/i dbfutil after processing expression\n";
- //exp->DumpTree( xbTrue );
- //std::cout << "-- end of dumptree in dbfutil\n";
-
- xbString sResult;
- xbDouble dResult;
- xbDate dtResult;
- xbBool bResult;
-
- switch ( exp->GetReturnType()){
- case XB_EXP_CHAR:
- exp->GetStringResult( sResult );
- std::cout << sResult.Str() << "\n";
- break;
- case XB_EXP_DATE:
- exp->GetDateResult( dtResult );
- std::cout << dtResult.Str() << "\n";
- break;
- case XB_EXP_LOGICAL:
- exp->GetBoolResult( bResult );
- std::cout << bResult << "\n";
- break;
- case XB_EXP_NUMERIC:
- exp->GetNumericResult( dResult );
- std::cout << dResult << "\n";
- break;
- default:
- std::cout << "Unknown result type [" << exp->GetReturnType() << std::endl;
- break;
- }
- return;
-}
-
-/*************************************************************************************/
-void xbUtil::ParseAndProcessExpression(){
- ParseExpression( 1 );
- if( exp )
- ProcessParsedExpression( 1 );
-}
-/*************************************************************************************/
-#ifdef XB_DEBUG_SUPPORT
-void xbUtil::DumpExpressionTree(){
-
- if( exp )
- exp->DumpTree( xbTrue );
- else
- std::cout << "No expression defined\n";
-}
-#endif // XB_DEBUG_SUPPORT
-
-void xbUtil::JulToDate8(){
- std::cout << "Convert Julian Date to Date8 (CCYYMMDD) format" << std::endl;
- std::cout << "Enter Julian Value" << std::endl;
- xbInt32 l = GetLong();
- xbDate d( l );
- std::cout << "Date8 value = [" << d.Str() << "]" << std::endl;
-}
-
-void xbUtil::Date8ToJul(){
- char cLine[12];
- std::cout << "Convert Date8 (CCYYMMDD) format to Julian Date value" << std::endl;
- std::cout << "Enter Date8 value:" << std::endl;
- memset( cLine, 0x00, 12 );
- std::cin.getline( cLine, 9 );
-
- if( strlen( cLine ) == 8 ){
- xbDate d( cLine );
- std::cout << "Julian Value = [" << d.JulianDays() << "]" << std::endl;
- } else {
- std::cout << "Invalid length, expecting 8 characters" << std::endl;
- }
-}
-
-void xbUtil::IsLeapYear(){
- std::cout << "Check leap year status for a given year" << std::endl;
- std::cout << "Enter a four digit year" << std::endl;
- xbInt32 l = GetLong();
- xbDate d( l );
- if( d.IsLeapYear( (xbInt16) l ))
- std::cout << l << " is a leap year" << std::endl;
- else
- std::cout << l << " is not a leap year" << std::endl;
-}
-#endif // XB_EXPRESSION_SUPPORT
-/*************************************************************************************/
-#ifdef XB_SQL_SUPPORT
-void xbUtil::ExecSqlNonQuery(){
-
- xbSql sql( x );
- std::cout << "ExecSqlNonQuery\n";
-
- char sSql[2048];
- std::cout << "Enter an SQL command (2K max byte max)" << std::endl;
- std::cin.getline( sSql, 2048 );
-
- xbInt16 iRc = sql.ExecuteNonQuery( sSql );
- x->DisplayError( iRc );
-}
-
-void xbUtil::ExecSqlQuery(){
- std::cout << "ExecSqlQuery\n";
-}
-#endif // XB_SQL_SUPPORT
-
-/*************************************************************************************/
-#ifdef XB_LOCKING_SUPPORT
-void xbUtil::DisplayFileLockSettings(){
-
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
- std::cout << "File Lock Retry Count = [" << dActiveTable->GetLockRetryCount() << "]" << std::endl;
- std::cout << "File Lock Flavor = [";
- switch (dActiveTable->GetLockFlavor()){
- case 1:
- std::cout << "Dbase]" << std::endl;
- break;
- case 2:
- std::cout << "Clipper]" << std::endl;
- break;
- case 3:
- std::cout << "Fox]" << std::endl;
- break;
- case 9:
- std::cout << "Xbase64]" << std::endl;
- break;
- default:
- std::cout << "Unknown]" << std::endl;
- break;
- }
- std::cout << "File Auto Lock = [";
-
- if( dActiveTable->GetAutoLock())
- std::cout << "ON]" << std::endl;
- else
- std::cout << "OFF]" << std::endl;
- if( dActiveTable->GetHeaderLocked())
- std::cout << "Header Locked = [TRUE]\n";
- else
- std::cout << "Header Locked = [FALSE]\n";
-
- if( dActiveTable->GetTableLocked())
- std::cout << "Table Locked = [TRUE]\n";
- else
- std::cout << "Table Locked = [FALSE]\n";
-
- if( dActiveTable->GetAppendLocked() > 0 )
- std::cout << "Append Locked = [" << dActiveTable->GetAppendLocked() << "]\n";
- else
- std::cout << "Append Locked = [FALSE]\n";
-
- #ifdef XB_MEMO_SUPPORT
- if( dActiveTable->GetMemoLocked())
- std::cout << "Memo Locked = [TRUE]\n";
- else
- std::cout << "Memo Locked = [FALSE]\n";
- #endif
-
- xbLinkListNode<xbUInt32> * llN = dActiveTable->GetFirstRecLock();
- if( llN ){
- while( llN ){
- std::cout << "Record Locked = [" << llN->GetKey() << "]\n";
- llN = llN->GetNextNode();
- }
- } else {
- std::cout << "Record Locked = [None]\n";
- }
-}
-
-void xbUtil::UpdateFileLockRetryCount(){
-
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
-
- char cBuf[15];
- std::cout << std::endl << "Enter new File Lock Retry Count: " << std::endl;
- std::cin.getline( cBuf, 15 );
- if( strlen( cBuf ) == 0 ){
- std::cout << "File Lock Retry Count not updated" << std::endl;
- return;
- } else {
- dActiveTable->SetLockRetryCount( atoi( cBuf ));
- std::cout << "File Lock Retry Count updated to ["
- << dActiveTable->GetLockRetryCount() << "]" << std::endl;
- }
-}
-
-void xbUtil::UpdateFileLockFlavor(){
-
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
-
- std::cout << std::endl;
- std::cout << "Enter new File Lock Flavor: " << std::endl;
- std::cout << "1 = DBase" << std::endl;
- std::cout << "2 = Clipper (not implemented yet)" << std::endl;
- std::cout << "3 = Fox (not implemented yet)" << std::endl;
- std::cout << "9 = XBase64 (not implemented yet)" << std::endl;
-
- char cBuf[15];
- std::cin.getline( cBuf, 15 );
- if( strlen( cBuf ) == 0 ){
- std::cout << "File Lock Flavor not updated" << std::endl;
- return;
- } else {
- dActiveTable->SetLockFlavor( atoi( cBuf ));
- std::cout << "File Lock Flavor updated to ["
- << dActiveTable->GetLockFlavor() << "]" << std::endl;
- }
-}
-
-void xbUtil::UpdateFileAutoLock(){
-
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
-
- std::cout << "Enter new File Auto Lock: " << std::endl;
- std::cout << "-1 = Use System Default" << std::endl;
- std::cout << " 0 = Disable Auto Lock for this DBF file" << std::endl;
- std::cout << " 1 = Enable Auto Lock for this DBF file" << std::endl;
-
- char cBuf[15];
- std::cin.getline( cBuf, 15 );
- if( strlen( cBuf ) == 0 ){
- std::cout << "File Auto Lock Flavor not updated" << std::endl;
- return;
- }
- xbInt16 iOption = atoi( cBuf );
- if( iOption < -1 || iOption > 1 ){
- std::cout << "Must be one of:" << std::endl;
- std::cout << " -1 = Use Default Auto Lock" << std::endl;
- std::cout << " 0 = File Auto Lock Off" << std::endl;
- std::cout << " 1 = File Auto Lock On" << std::endl;
- std::cout << "File Auto Lock Flavor not updated" << std::endl;
- return;
- } else {
- dActiveTable->SetAutoLock( iOption );
- std::cout << "File Auto Lock updated to ["
- << dActiveTable->GetAutoLock() << "]" << std::endl;
- }
-}
-
-void xbUtil::LockDbf(){
-
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
- xbInt16 iRc;
- std::cout << std::endl << "Lock Table" << std::endl;
- iRc = dActiveTable->LockTable( XB_LOCK );
- x->DisplayError( iRc );
-}
-
-void xbUtil::LockAppend(){
-
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
- xbInt16 iRc;
- std::cout << std::endl << "Lock Append" << std::endl;
- iRc = dActiveTable->LockAppend( XB_LOCK );
- x->DisplayError( iRc );
-}
-
-void xbUtil::UnlockAppend(){
-
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
- xbInt16 iRc;
- std::cout << std::endl << "Unlock Append" << std::endl;
- iRc = dActiveTable->LockAppend( XB_UNLOCK );
- x->DisplayError( iRc );
-}
-#ifdef XB_MEMO_SUPPORT
-void xbUtil::LockMemo(){
-
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
- xbInt16 iRc;
- std::cout << std::endl << "Lock Memo" << std::endl;
- iRc = dActiveTable->LockMemo( XB_LOCK );
- x->DisplayError( iRc );
-}
-
-void xbUtil::UnlockMemo(){
-
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
- xbInt16 iRc;
- std::cout << std::endl << "Unlock Memo" << std::endl;
- iRc = dActiveTable->LockMemo( XB_UNLOCK );
- x->DisplayError( iRc );
-}
-#endif
-
-void xbUtil::LockRecord(){
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
-
- xbInt16 iRc;
- std::cout << std::endl << "Lock Record" << std::endl;
- std::cout << "Enter record number to lock specific record" << std::endl;
-
- char cBuf[15];
- std::cin.getline( cBuf, 15 );
- //iRc = dActiveTable->LockRecord( XB_LOCK, atol( cBuf ));
- iRc = dActiveTable->LockRecord( XB_LOCK, strtoul( cBuf, NULL, 0 ));
-
- x->DisplayError( iRc );
-}
-
-void xbUtil::UnlockRecord(){
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
-
- xbInt16 iRc;
- std::cout << std::endl << "Unlock Record" << std::endl;
- std::cout << "Enter record number to unlock specific record" << std::endl;
-
- char cBuf[15];
- std::cin.getline( cBuf, 15 );
- //iRc = dActiveTable->LockRecord( XB_UNLOCK, atol( cBuf ));
- iRc = dActiveTable->LockRecord( XB_UNLOCK, strtoul( cBuf, NULL, 0 ));
- x->DisplayError( iRc );
-}
-
-void xbUtil::UnlockDbf(){
-
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
-
- xbInt16 iRc;
- std::cout << std::endl << "Unlock Table" << std::endl;
- iRc = dActiveTable->LockTable( XB_UNLOCK );
- x->DisplayError( iRc );
-}
-
-void xbUtil::UnlockHeader(){
-
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
-
- xbInt16 iRc;
- std::cout << std::endl << "Unlock Table Header" << std::endl;
- iRc = dActiveTable->LockHeader( XB_UNLOCK );
- x->DisplayError( iRc );
-}
-
-void xbUtil::LockHeader(){
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
-
- xbInt16 iRc;
- std::cout << std::endl << "Lock Table Header" << std::endl;
- iRc = dActiveTable->LockHeader( XB_LOCK );
- x->DisplayError( iRc );
-}
-
-#ifdef XB_DEBUG_SUPPORT
-
-void xbUtil::xbFileLock(){
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
-
- char cBufOffset[30];
- char cBufLen[30];
-
- std::cout << std::endl << "Enter new File Lock Offset (in bytes from BOF): " << std::endl;
- std::cin.getline( cBufOffset, 30 );
- std::cout << std::endl << "Enter new File Lock Len (in Bytes): " << std::endl;
- std::cin.getline( cBufLen, 30 );
-
- if( strlen( cBufOffset ) == 0 || strlen( cBufLen ) == 0 ){
- std::cout << "Offset and length required." << std::endl;
- return;
- }
-
- xbInt64 llSpos;
- xbInt64 llLen;
- xbString s1 = cBufOffset;
- s1.CvtLongLong( llSpos );
- s1 = cBufLen;
- s1.CvtLongLong( llLen );
- xbInt16 iRc = dActiveTable->xbLock( XB_LOCK, llSpos, (size_t) llLen );
- x->DisplayError( iRc );
-}
-
-void xbUtil::xbFileUnlock(){
-
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
- char cBufOffset[30];
- char cBufLen[30];
- std::cout << std::endl << "Enter new File Lock Offset (in bytes from BOF): " << std::endl;
- std::cin.getline( cBufOffset, 30 );
- std::cout << std::endl << "Enter new File Lock Len (in Bytes): " << std::endl;
- std::cin.getline( cBufLen, 30 );
- if( strlen( cBufOffset ) == 0 || strlen( cBufLen ) == 0 ){
- std::cout << "Offset and length required." << std::endl;
- return;
- }
- xbInt16 iRc;
- iRc = dActiveTable->xbLock( XB_UNLOCK, atol( cBufOffset ), (size_t) atol( cBufLen ));
- x->DisplayError( iRc );
-}
-
-#endif
-#endif
-/*************************************************************************************/
-#ifdef XB_DEBUG_SUPPORT
-#ifdef XB_MEMO_SUPPORT
-
-void xbUtil::DumpDbtHeader(){
-
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
-
- if( !dActiveTable->MemoFieldsExist()){
- std::cout << "Table has no memo fields" << std::endl;
- return;
- }
-
- xbMemo * mPtr;
- mPtr = dActiveTable->GetMemoPtr();
- mPtr->DumpMemoHeader();
-
-}
-#endif
-#endif
-
-/*************************************************************************************/
-#ifdef XB_DEBUG_SUPPORT
-#ifdef XB_MEMO_SUPPORT
-
-void xbUtil::DumpMemoFreeChain(){
-
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
- if( !dActiveTable->MemoFieldsExist()){
- std::cout << "Table has no memo fields" << std::endl;
- return;
- }
- xbMemo * mPtr;
- mPtr = dActiveTable->GetMemoPtr();
- mPtr->DumpMemoFreeChain();
-}
-#endif
-#endif
-
-/*************************************************************************************/
-void xbUtil::ListFieldInfo(){
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
- DisplayActiveTable();
- dActiveTable->DumpHeader( 2 );
-}
-/*************************************************************************************/
-void xbUtil::UpdateFieldData(){
- xbInt16 rc;
- char cFldName[40];
- char cFldData[256];
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
- std::cout << "Enter Field Name " << std::endl;
- std::cin.getline( cFldName, 40 );
-
- std::cout << "Enter Field Data " << std::endl;
- std::cin.getline( cFldData, 256 );
-
- if(( rc = dActiveTable->PutField( cFldName, cFldData )) != XB_NO_ERROR ){
- x->DisplayError( rc );
- return;
- }
- std::cout << "Success" << std::endl;
-}
-/*************************************************************************************/
-#ifdef XB_MEMO_SUPPORT
-void xbUtil::ShowMemoFieldData(){
- xbInt16 rc;
- char cFldName[40];
- char cBuf[15];
- xbString sMemoData;
- xbUInt32 ulRecNo;
- xbUInt32 ulFldLen;
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
- if( !dActiveTable->MemoFieldsExist()){
- std::cout << "Table has no memo fields" << std::endl;
- return;
- }
- if( dActiveTable->GetCurRecNo() == 0 ){
- std::cout << "Enter Record number" << std::endl;
- std::cin.getline( cBuf, 15 );
- if( strlen( cBuf ) == 0 ){
- std::cout << "Record number not entered" << std::endl;
- return;
- }
- //ulRecNo = atol( cBuf );
- ulRecNo = strtoul( cBuf, NULL, 0 );
- if(( rc = dActiveTable->GetRecord( ulRecNo )) != XB_NO_ERROR ){
- x->DisplayError( rc );
- return;
- }
- }
- std::cout << "Enter Memo Field Name " << std::endl;
- std::cin.getline( cFldName, 40 );
- if(( rc = dActiveTable->GetMemoField( cFldName, sMemoData )) != XB_NO_ERROR ){
- std::cout << "rc = " << rc << std::endl;
- x->DisplayError( rc );
- return;
- }
- if(( rc = dActiveTable->GetMemoFieldLen( cFldName, ulFldLen )) != XB_NO_ERROR ){
- std::cout << "rc = " << rc << std::endl;
- x->DisplayError( rc );
- return;
- }
- std::cout << sMemoData.Str() << std::endl;
- std::cout << "Data length = [" << ulFldLen << "]" << std::endl;
-}
-#endif
-/*************************************************************************************/
-#ifdef XB_MEMO_SUPPORT
-void xbUtil::UpdateMemoFieldData(){
-
- xbInt16 rc;
- char cFldName[40];
- char cBuf[15];
- char cMemoData[2048];
- xbUInt32 ulRecNo;
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
- if( !dActiveTable->MemoFieldsExist()){
- std::cout << "Table has no memo fields" << std::endl;
- return;
- }
- if( dActiveTable->GetCurRecNo() == 0 ){
- std::cout << "Enter Record number" << std::endl;
- std::cin.getline( cBuf, 15 );
- if( strlen( cBuf ) == 0 ){
- std::cout << "Record number not entered" << std::endl;
- return;
- }
- //ulRecNo = atol( cBuf );
- ulRecNo = strtoul( cBuf, NULL, 0 );
- if(( rc = dActiveTable->GetRecord( ulRecNo )) != XB_NO_ERROR ){
- x->DisplayError( rc );
- return;
- }
- }
- std::cout << "Enter Memo Field Name " << std::endl;
- std::cin.getline( cFldName, 40 );
- std::cout << "Enter Memo Data (2048 bytes max) " << std::endl;
- std::cin.getline( cMemoData, 2048 );
- if(( rc = dActiveTable->UpdateMemoField( cFldName, cMemoData )) != XB_NO_ERROR ){
- std::cout << "rc = " << rc << std::endl;
- x->DisplayError( rc );
- return;
- }
-
- if(( rc = dActiveTable->PutRecord( dActiveTable->GetCurRecNo())) != XB_NO_ERROR ){
- std::cout << "rc = " << rc << std::endl;
- x->DisplayError( rc );
- return;
- }
-}
-#endif
-
-/*************************************************************************************/
-#ifdef XB_MEMO_SUPPORT
-void xbUtil::DeleteMemoField(){
-
- xbInt16 rc;
- char cFldName[40];
- char cBuf[15];
- xbUInt32 ulRecNo;
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
-
- if( !dActiveTable->MemoFieldsExist()){
- std::cout << "Table has no memo fields" << std::endl;
- return;
- }
-
- if( dActiveTable->GetCurRecNo() == 0 ){
- std::cout << "Enter Record number" << std::endl;
- std::cin.getline( cBuf, 15 );
- if( strlen( cBuf ) == 0 ){
- std::cout << "Record number not entered" << std::endl;
- return;
- }
- //ulRecNo = atol( cBuf );
- ulRecNo = strtoul( cBuf, NULL, 0 );
- if(( rc = dActiveTable->GetRecord( ulRecNo )) != XB_NO_ERROR ){
- x->DisplayError( rc );
- return;
- }
- }
- std::cout << "Enter Memo Field Name " << std::endl;
- std::cin.getline( cFldName, 40 );
- if(( rc = dActiveTable->UpdateMemoField( cFldName, "" )) != XB_NO_ERROR ){
- std::cout << "rc = " << rc << std::endl;
- x->DisplayError( rc );
- return;
- }
- if(( rc = dActiveTable->PutRecord( dActiveTable->GetCurRecNo())) != XB_NO_ERROR ){
- std::cout << "rc = " << rc << std::endl;
- x->DisplayError( rc );
- return;
- }
-}
-#endif
-/*************************************************************************************/
-void xbUtil::SelectActiveTable(){
-
- char cBuf[15];
- xbInt16 iLineNo;
- if( x->GetOpenTableCount() == 0 ){
- std::cout << "No open tables" << std::endl;
- std::cout << "Use menu option =3.4 to open a table" << std::endl;
- return;
- }
-
- x->DisplayTableList();
- std::cout << std::endl << "Enter line number:" << std::endl;
- std::cin.getline( cBuf, 15 );
- if( strlen( cBuf ) == 0 ){
- std::cout << "Table not selected" << std::endl;
- return;
- }
- iLineNo = atoi( cBuf );
- dActiveTable = x->GetDbfPtr( iLineNo );
-}
-
-/*************************************************************************************/
-void xbUtil::CommitRecord(){
-
- xbInt16 rc = XB_NO_ERROR;
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
-
- DisplayActiveTable();
-
- if(( rc = dActiveTable->Commit()) == XB_NO_ERROR )
- std::cout << "Success" << std::endl;
- else
- x->DisplayError( rc );
-}
-/*************************************************************************************/
-void xbUtil::AbortRecord(){
-
- xbInt16 rc = XB_NO_ERROR;
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
- DisplayActiveTable();
-
-
- if(( rc = dActiveTable->Abort()) == XB_NO_ERROR )
- std::cout << "Success" << std::endl;
- else
- x->DisplayError( rc );
-}
-/*************************************************************************************/
-void xbUtil::DumpRecord(){
-
- char cBuf[15];
- xbInt16 rc;
- xbUInt32 ulRecNo;
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
- DisplayActiveTable();
-
- if( dActiveTable->GetCurRecNo() == 0 ){
- std::cout << "Enter Record number" << std::endl;
- std::cin.getline( cBuf, 15 );
- if( strlen( cBuf ) == 0 ){
- std::cout << "Record number not entered" << std::endl;
- return;
- }
- //lRecNo = atol( cBuf );
- ulRecNo = strtoul( cBuf, NULL, 0 );
- if(( rc = dActiveTable->GetRecord( ulRecNo )) != XB_NO_ERROR ){
- x->DisplayError( rc );
- return;
- }
- }
-
- if(( rc = dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2 )) == XB_NO_ERROR )
- std::cout << "Success" << std::endl;
- else
- x->DisplayError( rc );
-}
-/*************************************************************************************/
-void xbUtil::GetFirstRecord(){
-
- xbInt16 iRc;
-
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
-
- if(( iRc = dActiveTable->GetFirstRecord()) == XB_NO_ERROR )
- dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2);
- else
- x->DisplayError( iRc );
-}
-/*************************************************************************************/
-void xbUtil::GetNextRecord(){
-
- xbInt16 iRc;
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
- if(( iRc = dActiveTable->GetNextRecord()) == XB_NO_ERROR )
- dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2);
- else
- x->DisplayError( iRc );
-}
-/*************************************************************************************/
-void xbUtil::GetPrevRecord(){
-
- xbInt16 iRc;
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
- if(( iRc = dActiveTable->GetPrevRecord()) == XB_NO_ERROR )
- dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2);
- else
- x->DisplayError( iRc );
-}
-/*************************************************************************************/
-void xbUtil::GetLastRecord(){
-
- xbInt16 iRc;
-
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
- if(( iRc = dActiveTable->GetLastRecord()) == XB_NO_ERROR )
- dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(),2);
- else
- x->DisplayError( iRc );
-}
-
-/*************************************************************************************/
-void xbUtil::UndeleteRecord(){
-
- char cBuf[15];
- xbInt16 rc;
- xbUInt32 ulRecNo;
-
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
- DisplayActiveTable();
- if( dActiveTable->GetCurRecNo() == 0 ){
- std::cout << "Enter Record number" << std::endl;
- std::cin.getline( cBuf, 15 );
- if( strlen( cBuf ) == 0 ){
- std::cout << "Record number not entered" << std::endl;
- return;
- }
- //lRecNo = atol( cBuf );
- ulRecNo = strtoul( cBuf, NULL, 0 );
- if(( rc = dActiveTable->GetRecord( ulRecNo )) != XB_NO_ERROR ){
- x->DisplayError( rc );
- return;
- }
- }
- if(( dActiveTable->RecordDeleted()) == xbFalse )
- std::cout << "Record is not flagged for deletion" << std::endl;
- else{
- if(( rc = dActiveTable->UndeleteRecord()) == XB_NO_ERROR )
- std::cout << "Success" << std::endl;
- else
- x->DisplayError( rc );
- }
-}
-
-/*************************************************************************************/
-void xbUtil::DeleteRecord(){
-
- char cBuf[15];
- xbInt16 rc;
- xbUInt32 ulRecNo;
-
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
- DisplayActiveTable();
- if( dActiveTable->GetCurRecNo() == 0 ){
- std::cout << "Enter Record number" << std::endl;
- std::cin.getline( cBuf, 15 );
- if( strlen( cBuf ) == 0 ){
- std::cout << "Record number not entered" << std::endl;
- return;
- }
- //ulRecNo = atol( cBuf );
-
- ulRecNo = strtoul( cBuf, NULL, 0 );
- if(( rc = dActiveTable->GetRecord( ulRecNo )) != XB_NO_ERROR ){
- x->DisplayError( rc );
- return;
- }
- }
-
- if(( dActiveTable->RecordDeleted()) == xbTrue )
- std::cout << "Record is already flagged for deletion" << std::endl;
- else{
- if(( rc = dActiveTable->DeleteRecord()) == XB_NO_ERROR )
- std::cout << "Success" << std::endl;
- else
- x->DisplayError( rc );
- }
-}
-
-/*************************************************************************************/
-void xbUtil::PutRecord(){
-
- char cBuf[15];
- xbInt16 rc;
- xbUInt32 ulRecNo;
-
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
- DisplayActiveTable();
-
- std::cout << "Enter Record number" << std::endl;
- std::cin.getline( cBuf, 15 );
- if( strlen( cBuf ) == 0 ){
- std::cout << "Record number not entered" << std::endl;
- return;
- }
- //lRecNo = atol( cBuf );
- ulRecNo = strtoul( cBuf, NULL, 0 );
- if(( rc = dActiveTable->PutRecord( ulRecNo )) == XB_NO_ERROR )
- std::cout << "Success" << std::endl;
- else
- x->DisplayError( rc );
-}
-
-/*************************************************************************************/
-void xbUtil::AppendRecord(){
-
- xbInt16 rc;
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
- if(( rc = dActiveTable->AppendRecord()) == XB_NO_ERROR )
- std::cout << "Success" << std::endl;
- else
- x->DisplayError( rc );
-}
-
-/*************************************************************************************/
-void xbUtil::BlankRecord(){
-
- xbInt16 rc;
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
- if(( rc = dActiveTable->BlankRecord()) == XB_NO_ERROR )
- std::cout << "Success" << std::endl;
- else
- x->DisplayError( rc );
-}
-
-/*************************************************************************************/
-void xbUtil::DisplayTableInfo(){
-
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
- dActiveTable->DumpHeader( 1 );
-}
-
-/*************************************************************************************/
-void xbUtil::RenameTable(){
-
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
-
- char cBuf[128];
- std::cout << "Enter new tablefile name (filename.DBF)" << std::endl;
- std::cin.getline( cBuf, 128 );
-
- if( cBuf[0] ){
- dActiveTable->Rename( cBuf );
- dActiveTable->Close();
- dActiveTable = NULL;
- std::cout << "Table closed. Reopen if needed.\n";
- }
-}
-
-/*************************************************************************************/
-void xbUtil::GetRecord(){
-
- char cBuf[15];
- xbInt16 iRc;
- xbUInt32 ulRecNo;
-
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
-
- DisplayActiveTable();
-
- std::cout << "Enter Record number" << std::endl;
- std::cin.getline( cBuf, 15 );
- if( strlen( cBuf ) == 0 ){
- std::cout << "Record number not entered" << std::endl;
- return;
- }
- //lRecNo = atol( cBuf );
- ulRecNo = strtoul( cBuf, NULL, 0 );
- if(( iRc = dActiveTable->GetRecord( ulRecNo )) == XB_NO_ERROR )
- dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2);
- else
- x->DisplayError( iRc );
-}
-/*************************************************************************************/
-void xbUtil::DisplayActiveTable() const{
- if( dActiveTable ){
- std::cout << "Active Table = [" << dActiveTable->GetTblAlias().Str() << "] ";
- xbUInt32 ulRecCnt = 0;
- dActiveTable->ReadHeader( 0, 1 );
- dActiveTable->GetRecordCnt( ulRecCnt );
- std::cout << "Total Records = [" << ulRecCnt << "] ";
- std::cout << "Current Record = [" << dActiveTable->GetCurRecNo() << "] ";
-
- if( dActiveTable->GetAutoCommit())
- std::cout << " Auto Commit = [Enabled]";
- else
- std::cout << " Auto Commit = [Disabled]";
-
- std::cout << std::endl;
- #ifdef XB_INDEX_SUPPORT
- xbIx *pIx = dActiveTable->GetCurIx();
- if( pIx ){
- void *vpTag = dActiveTable->GetCurTag();
- std::cout << "Active Tag = [" << pIx->GetTagName( vpTag ).Str() << "] Type = [" << dActiveTable->GetCurIxType().Str() <<
- "] \tFile Name = [" << pIx->GetFileName().Str() << "] Key = [" << pIx->GetKeyExpression( vpTag ).Str() << "]" << std::endl;
- }
- #endif // XB_INDEX_SUPPORT
- std::cout << std::endl;
- }
-}
-/*************************************************************************************/
-xbDbf * xbUtil::GetTablePtr( const char * cTitle ){
-
- xbDbf *d;
- xbInt16 iOpenTableCnt = x->GetOpenTableCount();
- char cBuf[15];
- xbInt16 iLineNo;
-
- if( iOpenTableCnt == 0 ){
- std::cout << "No open tables" << std::endl;
- return NULL;
- } else if( iOpenTableCnt == 1 ){
- d = x->GetDbfPtr( 1 );
- } else {
- std::cout << "Select file/table " << cTitle << std::endl;
- x->DisplayTableList();
- std::cout << std::endl << "Enter line number:" << std::endl;
- memset( cBuf, 0x00, 15 );
- std::cin.getline( cBuf, 15 );
- if( strlen( cBuf ) == 0 ){
- std::cout << "Table not selected" << std::endl;
- return NULL;
- }
- iLineNo = atoi( cBuf );
- if( iLineNo < 1 || iLineNo > iOpenTableCnt ){
- std::cout << "Invalid selection. Valid line numbers are 1 through " << iOpenTableCnt << std::endl;
- return NULL;
- }
- d = x->GetDbfPtr( iLineNo );
- }
- return d;
-}
-/*************************************************************************************/
-void xbUtil::UpdateTableAutoCommit(){
- xbDbf *d;
- d = GetTablePtr( "" );
- if( d ){
- std::cout << "Xbase64 AutoCommit is functionality to determine if table updates should be posted" << std::endl;
- std::cout << " to the table automatically, even if no xbDbf::PutRecord explicitly executed" << std::endl;
- std::cout << " If unsure, leave the option turned on at the DBMS level (default)" << std::endl;
- std::cout << " and don't over ride the setting at the table level" << std::endl << std::endl;
- std::cout << " -1 ==> Use DBMS setting which is currently [";
- if( x->GetDefaultAutoCommit() )
- std::cout << "ON]" << std::endl;
- else
- std::cout << "OFF]" << std::endl;
- std::cout << " 0 ==> Disable Auto Commit for table" << std::endl;
- std::cout << " 1 ==> Enable Auto Commit for table" << std::endl;
- std::cout << "Current setting is [" << d->GetAutoCommit() << "]" << std::endl;
- char cBuf[15];
- xbInt16 iAuto;
- std::cout << "Enter new Table Auto Commit: " << std::endl;
- std::cin.getline( cBuf, 15 );
- if( strlen( cBuf ) == 0 ) {
- std::cout << "Not updated" << std::endl;
- return;
- }
- iAuto = atoi( cBuf );
- if( iAuto < -1 || iAuto > 1 ){
- std::cout << "Invalid value. Must be one of -1, 0 or 1" << std::endl;
- return;
- }
- d->SetAutoCommit( iAuto );
- std::cout << "Auto Commit set to [" << d->GetAutoCommit(0) << "]" << std::endl;
- if( d->GetAutoCommit() )
- std::cout << "Auto Commit enabled for table" << std::endl;
- else
- std::cout << "Auto Commit disabled for table" << std::endl;
- }
-}
-/*************************************************************************************/
-void xbUtil::CopyDbfStructure(){
- xbDbf *d;
- xbInt16 rc;
- char filename[128];
- xbFile f( x );
- xbDbf *dNewTable;
- d = GetTablePtr( "" );
-
- if( d ){
-
- if( d->GetVersion() == 3 ){
- #ifdef XB_DBF3_SUPPORT
- dNewTable = new xbDbf3( x );
- #else
- std::cout << "Dbase III file support not build into library. See XB_DBF3_SUPPORT" << std::endl;
- return;
- #endif
- } else if( d->GetVersion() == 4 ){
- #ifdef XB_DBF4_SUPPORT
- dNewTable = new xbDbf4( x );
- #else
- std::cout << "Dbase IV file support not build into library. See XB_DBF4_SUPPORT" << std::endl;
- return;
- #endif
- } else {
- std::cout << "Unsupported file type file = " << d->GetVersion() << std::endl;
- return;
- }
- std::cout << "Copy Table" << std::endl;
- std::cout << "Enter new DBF file name (ie; MYFILE.DBF): ";
- std::cin.getline( filename, 128 );
- f.SetFileName( filename );
- if( strlen( filename ) == 0 ){
- std::cout << "No file name entered" << std::endl;
- return;
- }
- if(( rc = f.FileExists( f.GetFqFileName() )) == xbTrue ){
- std::cout << "File [" << f.GetFqFileName().Str() << "] already exists " << std::endl;
- return;
- }
- if(( rc = d->CopyDbfStructure( dNewTable, filename, filename, 0, XB_MULTI_USER )) != XB_NO_ERROR ){
- std::cout << "Error " << rc << " creating new file" << std::endl;
- x->DisplayError( rc );
- return;
- }
- std::cout << "Table " << f.GetFqFileName().Str() << " created" << std::endl;
- if(( rc = dNewTable->Close()) != XB_NO_ERROR ){
- std::cout << "Error " << rc << " closing new file" << std::endl;
- x->DisplayError( rc );
- return;
- }
- }
-}
-/*************************************************************************************/
-void xbUtil::ZapTable(){
-
- xbInt16 iRc;
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
- DisplayActiveTable();
-
- iRc = dActiveTable->Zap();
- if( iRc == XB_NO_ERROR )
- std::cout << "Table Zapped (all rows deleted)" << std::endl;
- else
- x->DisplayError( iRc );
-}
-/*************************************************************************************/
-void xbUtil::Pack(){
-
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
- DisplayActiveTable();
- xbInt16 iRc;
- iRc = dActiveTable->Pack();
- if( iRc == XB_NO_ERROR )
- std::cout << "Table Packed" << std::endl;
- else
- x->DisplayError( iRc );
-}
-/*************************************************************************************/
-void xbUtil::DisplayTableStats(){
-
- xbDbf *d;
- char cBuf[15];
- xbInt16 iOptionNo;
- d = GetTablePtr( "" );
- if( d ){
- std::cout << "Enter option" << std::endl;
- std::cout << "1 - Header data only" << std::endl;
- std::cout << "2 - Field data only" << std::endl;
- std::cout << "3 - Header and Field data" << std::endl;
- std::cout << "4 - Header, Field and Memo Header if applicable" << std::endl;
- std::cout << "5 - DBMS Settings (not stored in the file)" << std::endl << std::endl;
- std::cin.getline( cBuf, 15 );
- if( strlen( cBuf ) == 0 ){
- std::cout << "Option not entered" << std::endl;
- return;
- }
- iOptionNo = atoi( cBuf );
- if( iOptionNo < 1 || iOptionNo > 5 ){
- std::cout << "Invalid option [" << cBuf << "] entered. Defaulting to 1" << std::endl;
- iOptionNo = 1;
- }
- if( iOptionNo < 5 ) {
- d->ReadHeader( xbTrue, 0 );
- d->DumpHeader( iOptionNo );
- } else {
- // DBMS settings
- if( d->GetAutoCommit( 0 ) == -1 ){
- std::cout << "Table Auto Commit = [Use DBMS Setting]" << std::endl;
- if( x->GetDefaultAutoCommit() )
- std::cout << "DBMS Auto Commit = [ON]" << std::endl;
- else
- std::cout << "DBMS Auto Commit = [OFF]" << std::endl;
- }
- else if( d->GetAutoCommit( 0 ) == 0 )
- std::cout << "Table Auto Commit = [OFF]" << std::endl;
- else
- std::cout << "Table Auto Commit = [ON]" << std::endl;
- }
- }
-}
-/*************************************************************************************/
-void xbUtil::CloseAllTables(){
-
- xbInt16 sOpenTableCnt = x->GetOpenTableCount();
- xbInt16 rc;
- if( sOpenTableCnt == 0 ){
- std::cout << "No open tables" << std::endl;
- return;
- }
- rc = x->CloseAllTables();
- if( rc == XB_NO_ERROR )
- std::cout << "All open tables closed" << std::endl;
- else
- x->DisplayError( rc );
- dActiveTable = NULL;
-}
-
-/*************************************************************************************/
-void xbUtil::Close(){
- xbDbf *d;
-// xbInt16 sOpenTableCnt = x->GetOpenTableCount();
-
- d = GetTablePtr( "to close" );
- if( d ){
- d->Close();
- std::cout << "Table closed" << std::endl;
- if( d == dActiveTable )
- dActiveTable = NULL;
- }
- else
- printf( "Can't identify table\n");
-}
-/*************************************************************************************/
-void xbUtil::Open(){
- xbInt16 rc;
- xbFile f( x );
- xbDbf *dTable;
- char filename[128];
- unsigned char cFileTypeByte;
-
- std::cout << "Open Table" << std::endl;
- std::cout << "Enter DBF file name (.DBF): ";
- std::cin.getline( filename, 128 );
- f.SetFileName( filename );
-
- if( strlen( filename ) == 0 ){
- std::cout << "No file name entered" << std::endl;
- return;
- }
- if(( rc = f.FileExists( f.GetFqFileName() )) != xbTrue ){
- std::cout << "File [" << f.GetFqFileName().Str() << "] does not exist " << std::endl;
- return;
- }
- if(( rc = f.GetXbaseFileTypeByte( f.GetFqFileName(), cFileTypeByte )) != XB_NO_ERROR ){
- std::cout << "Could not open file or determine file type rc = " << rc << " file = " << filename << std::endl;
- x->DisplayError( rc );
- return;
- }
- std:: cout << "File Type Byte ";
- x->BitDump( cFileTypeByte );
- std::cout << "\n";
- std::cout << "Table Type = [" << f.DetermineXbaseTableVersion( cFileTypeByte ) << "]\n";
- std::cout << "Memo Type = [" << f.DetermineXbaseMemoVersion( cFileTypeByte ) << "]\n";
-
- if( f.DetermineXbaseTableVersion( cFileTypeByte ) == 4 ){
- #ifdef XB_DBF4_SUPPORT
- dTable = new xbDbf4( x );
- #else
- std::cout << "Dbase IV file support not build into library. See XB_DBF4_SUPPORT" << std::endl;
- return;
- #endif
-
- } else if( f.DetermineXbaseTableVersion( cFileTypeByte ) == 3 ){
- #ifdef XB_DBF3_SUPPORT
- dTable = new xbDbf3( x );
- #else
- std::cout << "Dbase III file support not build into library. See XB_DBF3_SUPPORT" << std::endl;
- return;
- #endif
- } else {
- std::cout << "Unsupported file type file = " << filename << " type = ";
- x->BitDump( cFileTypeByte );
- std::cout << std::endl;
- return;
- }
-
- if(( rc = dTable->Open( filename )) != 0 ){
- std::cout << "Could not open file rc = " << rc << " file = " << filename << std::endl;
- x->DisplayError( rc );
- return;
- }
-
- dActiveTable = dTable;
- dActiveTable->GetFirstRecord();
-
- if( dActiveTable )
- std::cout << dActiveTable->GetTblAlias().Str() << " opened" << std::endl;
- else
- std::cout << "dActiveTable not set" << std::endl;
-}
-/*************************************************************************************/
-#ifdef XB_LOCKING_SUPPORT
-void xbUtil::UpdateDefaultLockRetries(){
- char cBuf[15];
- std::cout << std::endl << "Enter new Default Lock Retry Count: " << std::endl;
- std::cin.getline( cBuf, 15 );
- if( strlen( cBuf ) == 0 ){
- std::cout << "Default Lock Retry Count not updated" << std::endl;
- return;
- } else {
- x->SetDefaultLockRetries( atoi( cBuf ));
- std::cout << "Default Lock Retry Count updated to ["
- << x->GetDefaultLockRetries() << "]" << std::endl;
- }
-}
-
-void xbUtil::UpdateDefaultLockWait(){
- char cBuf[15];
- std::cout << std::endl << "Enter new Default Lock Wait Time (in millisecs 1000=1 second): " << std::endl;
- std::cin.getline( cBuf, 15 );
- if( strlen( cBuf ) == 0 ){
- std::cout << "Default Lock Wait Time not updated" << std::endl;
- return;
- } else {
- x->SetDefaultLockWait( atoi( cBuf ));
- std::cout << "Default Lock Wait Time updated to ["
- << x->GetDefaultLockWait() << "]" << std::endl;
- }
-}
-
-void xbUtil::UpdateDefaultLockFlavor(){
- char cBuf[15];
- std::cout << std::endl;
- std::cout << "Enter new Default Lock Flavor: " << std::endl;
- std::cout << "1 = DBase" << std::endl;
- std::cout << "2 = Clipper (not implemented yet)" << std::endl;
- std::cout << "3 = Fox (not implemented yet)" << std::endl;
- std::cout << "9 = XBase64 (not implemented yet)" << std::endl;
- std::cin.getline( cBuf, 15 );
- if( strlen( cBuf ) == 0 ){
- std::cout << "Default Lock Flavor not updated" << std::endl;
- return;
- } else {
- x->SetDefaultLockFlavor( atoi( cBuf ));
- std::cout << "Default Lock Flavor updated to ["
- << x->GetDefaultLockFlavor() << "]" << std::endl;
- }
-}
-void xbUtil::ToggleDefaultAutoLock(){
- if( x->GetDefaultAutoLock()){
- x->DisableDefaultAutoLock();
- x->WriteLogMessage( "xb_dbfutil - Default Auto Lock disabled" );
- std::cout << "Default Auto Lock disabled" << std::endl;
- } else {
- x->EnableDefaultAutoLock();
- x->WriteLogMessage( "xb_dbfutil - Default Auto Lock enabled" );
- std::cout << "Default Auto Lock enabled" << std::endl;
- }
-}
-
-void xbUtil::ToggleMultiUserMode(){
- if( x->GetMultiUser()){
- x->SetMultiUser( xbFalse );
- x->WriteLogMessage( "xb_dbfutil - Multi user mode disabled" );
- std::cout << "Multi user mode disabled" << std::endl;
- } else {
- x->SetMultiUser( xbTrue );
- x->WriteLogMessage( "xb_dbfutil - Multu user mode enabled" );
- std::cout << "Multi user mode enabled" << std::endl;
- }
-}
-#endif
-/*************************************************************************************/
-void xbUtil::ListFilesInDataDirectory(){
- std::cout << "List files for [" << x->GetDataDirectory().Str() << "]" << std::endl << std::endl;
- xbString s1;
- xbInt16 iCnt = 0;
-
-#ifdef WIN32
-
- WIN32_FIND_DATA fData;
- HANDLE hFile;
-
- xbString sSearchPath = x->GetDataDirectory();
- xbUInt32 l = sSearchPath.Len();
- char cPathSeperator = sSearchPath.GetPathSeparator();
- char cLastChar = sSearchPath.GetCharacter( l );
-
- if( cLastChar == cPathSeperator )
- sSearchPath += "*.*";
- else if( cPathSeperator ){
- sSearchPath += cPathSeperator;
- sSearchPath += "*.*";
- }
- else
- sSearchPath += "\\*.*";
-
- hFile = FindFirstFile( sSearchPath.Str(), &fData );
- if( hFile == INVALID_HANDLE_VALUE ){
- std::cout << "Could not open directory" << std::endl;
- return;
- }
-
- do{
- s1 = fData.cFileName;
- if( s1 != "." && s1 != ".." ){
- std::cout << fData.cFileName << std::endl;
- iCnt++;
- }
- } while( FindNextFile( hFile, &fData ));
- std::cout << std::endl << iCnt << " entries" << std::endl;
-#else
- DIR *dir;
- struct dirent *ent;
-
- if(( dir = opendir( x->GetDataDirectory() )) != NULL ){
- while(( ent = readdir( dir )) != NULL ){
- s1 = ent->d_name;
- if( s1 != "." && s1 != ".." ){
- std::cout << ent->d_name << std::endl;
- iCnt++;
- }
- }
- std::cout << std::endl << iCnt << " entries" << std::endl;
- closedir( dir );
- }
- else
- std::cout << "Could not open directory" << std::endl;
-#endif
-}
-/*************************************************************************************/
-void xbUtil::UpdateLogDirectory(){
-
- char cNewDir[256];
- cNewDir[0] = 0x00;
- std::cout << std::endl << "Update Log Directory" << std::endl;
- std::cout << "Current Log File Directory = [" << x->GetLogDirectory().Str() << "]" << std::endl;
- std::cout << "Enter '1' to erase the Log File Directory" << std::endl;
- std::cout << "Enter '2' to change Log File Directory to [" << x->GetLogDirectory().Str() << "]" << std::endl;
- std::cout << "Enter new log directory. Enter for no updates." << std::endl;
- std::cin.getline( cNewDir, 256 );
- if( strlen( cNewDir ) > 0 ){
- if( cNewDir[0] == '1' )
- x->SetLogDirectory( "" );
- else if( cNewDir[0] == '2' )
- x->SetLogDirectory( x->GetLogDirectory());
- else
- x->SetLogDirectory( cNewDir );
-
- std::cout << "Log File Directory is [" << x->GetLogDirectory().Str() << "]" << std::endl;
- }
- else
- std::cout << "Log Directory not updated" << std::endl;
-}
-/*************************************************************************************/
-void xbUtil::UpdateLogFileName(){
- char cNewFile[256];
- cNewFile[0] = 0x00;
-
- std::cout << std::endl << "Update Log File Name" << std::endl;
- std::cout << "Current Log File Name = [" << x->GetLogFileName().Str() << "]" << std::endl;
- std::cout << "Enter '1' to change change Log File Name to default [" << x->GetLogFileName().Str() << "]" << std::endl;
- std::cout << "Enter new Log File Name" << std::endl;
- std::cin.getline( cNewFile, 256 );
- if( strlen( cNewFile ) > 0 ){
- if( cNewFile[0] == '1' )
- x->SetLogFileName( x->GetLogFileName());
- else
- x->SetLogFileName( cNewFile );
-
- std::cout << "Log File Name is [" << x->GetLogFileName().Str() << "]" << std::endl;
- } else
- std::cout << "Log File Name not updated" << std::endl;
-}
-/*************************************************************************************/
-void xbUtil::WriteLogMessage(){
- if( x->GetLogStatus()) {
- char cMsg[256];
- std::cout << "Enter a message to write to the log file (256 byte max)" << std::endl;
- std::cin.getline( cMsg, 256 );
- x->WriteLogMessage( cMsg );
- } else
- std::cout << "Logging disabled" << std::endl;
-}
-/*************************************************************************************/
-void xbUtil::ToggleLoggingStatus(){
- if( x->GetLogStatus()){
- x->DisableMsgLogging();
- x->WriteLogMessage( "xb_dbfutil - Logging disabled" );
- std::cout << "Logging disabled" << std::endl;
- } else {
- x->EnableMsgLogging();
- x->WriteLogMessage( "xb_dbfutil - Logging enabled" );
- std::cout << "Logging enabled" << std::endl;
- }
-}
-/*************************************************************************************/
-void xbUtil::ToggleDefaultAutoCommit(){
- if( x->GetDefaultAutoCommit()){
- x->SetDefaultAutoCommit( xbFalse );
- x->WriteLogMessage( "xb_dbfutil - Default Auto Commit disabled" );
- std::cout << "Default Auto Commit disabled" << std::endl;
- } else {
- x->SetDefaultAutoCommit( xbTrue );
- x->WriteLogMessage( "xb_dbfutil - Default Auto Commit enabled" );
- std::cout << "Default Auto Commit enabled" << std::endl;
- }
-}
-/*************************************************************************************/
-void xbUtil::UpdateDataDirectory(){
- char cNewDir[256];
- cNewDir[0] = 0x00;
- std::cout << std::endl << "Update Default Data Directory" << std::endl;
- std::cout << "Current Default Data Directory = [" << x->GetDataDirectory().Str() << "]" << std::endl;
- std::cout << "Enter '1' to erase the Default Data Directory" << std::endl;
- std::cout << "Enter '2' to change Default Data Directory to [" << PROJECT_DATA_DIR << "]" << std::endl;
- std::cout << "Enter new directory" << std::endl;
- std::cin.getline( cNewDir, 256 );
- if( strlen( cNewDir ) > 0 ){
- if( cNewDir[0] == '1' )
- x->SetDataDirectory( "" );
- else if( cNewDir[0] == '2' )
- x->SetDataDirectory( PROJECT_DATA_DIR );
- else
- x->SetDataDirectory( cNewDir );
- std::cout << "Default Data Directory is [" << x->GetDataDirectory().Str() << "]" << std::endl;
- }
- else
- std::cout << "Default Data Directory not updated" << std::endl;
-}
-/*************************************************************************************/
-void xbUtil::ListSystemSettings(){
- std::cout << std::endl << "List System Settings" << std::endl;
- std::cout << "Default Data Directory = [" << x->GetDataDirectory().Str() << "]" << std::endl;
-// std::cout << "Default File Version = [" << x->GetDefaultFileVersion() << "]" << std::endl;
- #ifdef XB_LOCKING_SUPPORT
- std::cout << "Default Auto Locking = [";
- if( x->GetDefaultAutoLock())
- std::cout << "ON]" << std::endl;
- else
- std::cout << "OFF]" << std::endl;
-
- std::cout << "Default Lock Retries = [" << x->GetDefaultLockRetries() << "]" << std::endl;
- std::cout << "Default Lock Wait Time = [" << x->GetDefaultLockWait() << "] (millisecs)" << std::endl;
-
- std::cout << "Default Lock Flavor = [";
- switch (x->GetDefaultLockFlavor()){
- case 1:
- std::cout << "Dbase]" << std::endl;
- break;
- case 2:
- std::cout << "Clipper]" << std::endl;
- break;
- case 3:
- std::cout << "Fox]" << std::endl;
- break;
- case 9:
- std::cout << "Xbase64]" << std::endl;
- break;
- default:
- std::cout << "Unknown]" << std::endl;
- break;
- }
- #endif
- std::cout << "Log Directory = [" << x->GetLogDirectory().Str() << "]" << std::endl;
- std::cout << "Logfile Name = [" << x->GetLogFileName().Str() << "]" << std::endl;
- std::cout << "Default Auto Commit = [";
- if( x->GetDefaultAutoCommit())
- std::cout << "ON]" << std::endl;
- else
- std::cout << "OFF]" << std::endl;
-
- std::cout << "Logging Status = [";
- if( x->GetLogStatus())
- std::cout << "ON]" << std::endl;
- else
- std::cout << "OFF]" << std::endl;
- std::cout << "Endian Type = [";
- if( x->GetEndianType() == 'L' )
- std::cout << "Little Endian]" << std::endl;
- else
- std::cout << "Big Endian]" << std::endl;
-
- if( x->GetMultiUser())
- std::cout << "Multi User Mode = [ON]";
- else
- std::cout << "Multi User Mode = [OFF]";
-}
-/*************************************************************************************/
-/* This method handles all the complex menu option commands */
-void xbUtil::ProcessOption( const xbString &sOption ){
-
- if( sOption[1] == '=' ){
- if( sOption == "=0" )
- MainMenu();
- else if( sOption == "=0.99" )
- // exit right now, now cleanup or termination of anything
- exit(0);
- else if( sOption == "=1" )
- Help();
- else if( sOption == "=2" )
- SystemMenu();
- else if( sOption == "=2.1" )
- ListSystemSettings();
- else if( sOption == "=2.2" )
- UpdateDataDirectory();
- else if( sOption == "=2.3" )
- ToggleDefaultAutoCommit();
- else if( sOption == "=2.4" )
- UpdateLogDirectory();
- else if( sOption == "=2.5" )
- UpdateLogFileName();
- else if( sOption == "=2.6" )
- ToggleLoggingStatus();
- else if( sOption == "=2.7" )
- WriteLogMessage();
- #ifdef XB_LOCKING_SUPPORT
- else if( sOption == "=2.8" )
- UpdateDefaultLockRetries();
- else if( sOption == "=2.9" )
- ToggleDefaultAutoLock();
- else if( sOption == "=2.10" )
- UpdateDefaultLockFlavor();
- else if( sOption == "=2.11" )
- UpdateDefaultLockWait();
- else if( sOption == "=2.12" )
- ToggleMultiUserMode();
- #endif
- else if( sOption == "=3" )
- FileMenu();
- else if( sOption == "=3.1" )
- ListFilesInDataDirectory();
- else if( sOption == "=3.2" )
- UpdateDataDirectory();
- else if( sOption == "=3.3" )
- x->DisplayTableList();
- else if( sOption == "=3.4" )
- Open();
- else if( sOption == "=3.5" )
- Close();
- else if( sOption == "=3.6" )
- CloseAllTables();
- else if( sOption == "=3.7" )
- SelectActiveTable();
- else if( sOption == "=3.8" )
- DisplayTableStats();
- else if( sOption == "=3.10" )
- Pack();
- else if( sOption == "=3.11" )
- ZapTable();
- else if( sOption == "=3.12" )
- CopyDbfStructure();
- else if( sOption == "=3.13" )
- UpdateTableAutoCommit();
- else if( sOption == "=3.14" )
- DisplayTableInfo();
- else if( sOption == "=3.15" )
- RenameTable();
- else if( sOption == "=4" )
- RecordMenu();
- else if( sOption == "=4.1" )
- SelectActiveTable();
- else if( sOption == "=4.2" )
- GetRecord();
- else if( sOption == "=4.3" )
- BlankRecord();
- else if( sOption == "=4.4" )
- AppendRecord();
- else if( sOption == "=4.5" )
- PutRecord();
- else if( sOption == "=4.6" )
- DeleteRecord();
- else if( sOption == "=4.7" )
- UndeleteRecord();
- else if( sOption == "=4.8" )
- GetFirstRecord();
- else if( sOption == "=4.9" )
- GetNextRecord();
- else if( sOption == "=4.10" )
- GetPrevRecord();
- else if( sOption == "=4.11" )
- GetLastRecord();
- else if( sOption == "=4.12" )
- DumpRecord();
- else if( sOption == "=4.13" )
- AbortRecord();
- else if( sOption == "=4.14" )
- CommitRecord();
- #ifdef XB_FILTER_SUPPORT
- else if( sOption == "=4.20" )
- SetFilter();
- else if( sOption == "=4.21" )
- GetFirstFilterRec();
- else if( sOption == "=4.22" )
- GetNextFilterRec();
- else if( sOption == "=4.23" )
- GetPrevFilterRec();
- else if( sOption == "=4.24" )
- GetLastFilterRec();
- #endif // XB_FILTER_SUPPORT
- else if( sOption == "=5" )
- FieldMenu();
- else if( sOption == "=5.1" )
- SelectActiveTable();
- else if( sOption == "=5.2" )
- ListFieldInfo();
- else if( sOption == "=5.3" )
- DumpRecord();
- else if( sOption == "=5.4" )
- UpdateFieldData();
- #ifdef XB_MEMO_SUPPORT
- else if( sOption == "=5.5" )
- ShowMemoFieldData();
- else if( sOption == "=5.6" )
- UpdateMemoFieldData();
- else if( sOption == "=5.7" )
- DeleteMemoField();
- #endif
-
- #ifdef XB_LOCKING_SUPPORT
- else if( sOption == "=6" )
- LockingMenu();
- else if( sOption == "=6.1" )
- DisplayFileLockSettings();
- else if( sOption == "=6.2" )
- UpdateFileLockRetryCount();
- else if( sOption == "=6.3" )
- UpdateFileLockFlavor();
- else if( sOption == "=6.4" )
- UpdateFileAutoLock();
- else if( sOption == "=6.5" )
- LockDbf();
- else if( sOption == "=6.6" )
- UnlockDbf();
- else if( sOption == "=6.7" )
- LockRecord();
- else if( sOption == "=6.8" )
- UnlockRecord();
- else if( sOption == "=6.9" )
- LockAppend();
- else if( sOption == "=6.10" )
- UnlockAppend();
- else if( sOption == "=6.11" )
- LockHeader();
- else if( sOption == "=6.12" )
- UnlockHeader();
- #ifdef XB_MEMO_SUPPORT
- else if( sOption == "=6.13" )
- LockMemo();
- else if( sOption == "=6.14" )
- UnlockMemo();
- #endif
-
- #ifdef XB_DEBUG_SUPPORT
- else if( sOption == "=6.20" )
- xbFileLock();
- else if( sOption == "=6.21" )
- xbFileUnlock();
- #endif // XB_DEBUG_SUPPORT
- #endif // XB_LOCKING_SUPPORT
-
- #ifdef XB_EXPRESSION_SUPPORT
- else if( sOption == "=7" )
- ExpressionMenu();
- else if( sOption == "=7.1" )
- ParseExpression( 0 );
- else if( sOption == "=7.2" )
- ProcessParsedExpression( 0 );
- else if( sOption == "=7.3" )
- ParseAndProcessExpression();
-
- #ifdef XB_DEBUG_SUPPORT
- else if (sOption == "=7.4" )
- DumpExpressionTree();
- #endif // XB_DEBUG_SUPPORT
- else if (sOption == "=7.10" )
- Date8ToJul();
- else if (sOption == "=7.11" )
- JulToDate8();
- else if (sOption == "=7.12" )
- IsLeapYear();
- #endif // XB_EXPRESSION_SUPPORT
-
- #ifdef XB_INDEX_SUPPORT
- else if( sOption == "=8" )
- IndexMenu();
- else if( sOption == "=8.1" )
- SelectActiveTable();
- else if( sOption == "=8.2" )
- DisplayOpenIndexFiles();
- else if( sOption == "=8.3" )
- DisplaySupportedIndexTypes();
- else if( sOption == "=8.4" )
- SelectTag();
- else if( sOption == "=8.5" )
- OpenIndex();
- else if( sOption == "=8.6" )
- CloseIndexFile();
- else if( sOption == "=8.7" )
- CreateIndexTag();
- else if( sOption == "=8.8" )
- GetFirstKey();
- else if( sOption == "=8.9" )
- GetPrevKey();
- else if( sOption == "=8.10" )
- GetNextKey();
- else if( sOption == "=8.11" )
- GetLastKey();
- else if( sOption == "=8.12" )
- FindKey();
-
- else if( sOption == "=8.13" )
- CheckIntegrity();
- else if( sOption == "=8.14" )
- Reindex();
- else if( sOption == "=8.15" )
- DeleteTag();
- else if( sOption == "=8.16" )
- AssociateNonProdIx();
-
- #ifdef XB_DEBUG_SUPPORT
- else if( sOption == "=8.20" )
- DumpIxHeader();
- else if( sOption == "=8.21" )
- DumpIxNode();
- else if( sOption == "=8.22" )
- DumpIxNodeChain();
- else if( sOption == "=8.23" )
- DumpRecsByIx(0);
- else if( sOption == "=8.24" )
- DumpRecsByIx(1);
- else if( sOption == "=8.25" )
- DumpFreeBlocks();
- #endif // XB_DEBUG_SUPPORT
- #endif // XB_INDEX_SUPPORT
-
- #ifdef XB_SQL_SUPPORT
- else if( sOption == "=10" )
- SqlMenu();
- else if( sOption == "=10.1" )
- ExecSqlNonQuery();
- else if( sOption == "=10.2" )
- ExecSqlQuery();
- #endif // XB_SQL_SUPPORT
-
- #ifdef XB_NDXINF_SUPPORT
- else if( sOption == "=11" )
- InfFileMenu();
- else if( sOption == "=11.1" )
- ListInfFileData();
- else if( sOption == "=11.2" )
- AddInfFileData();
- else if( sOption == "=11.3" )
- DeleteInfFileData();
- else if( sOption == "=11.10" )
- InfFileHelp();
- #endif // XB_NDXINF_SUPPORT
-
- #ifdef XB_DEBUG_SUPPORT
- else if( sOption == "=20" )
- DebugMenu();
- else if( sOption == "=20.1" )
- SelectActiveTable();
-/*
- #ifdef XB_MEMO_SUPPORT
- else if( sOption == "=10.2" )
- DumpDbtHeader();
- else if( sOption == "=10.3" )
- DumpMemoFreeChain();
- #endif
-*/
-
- #endif
- else
- return;
- }
-}
-
-/*************************************************************************************/
-xbInt32 xbUtil::GetLong(){
- char cLine[256];
- xbString sLine;
- memset( cLine, 0x00, 256 );
- std::cin.getline( cLine, 256 );
- sLine = cLine;
- sLine.Trim();
- return atol( cLine );
-}
-/*************************************************************************************/
-xbInt16 xbUtil::GetOption(){
- char cLine[256];
- xbString sLine;
- memset( cLine, 0x00, 256 );
- std::cin.getline( cLine, 256 );
- sLine = cLine;
- sLine.Trim();
-
- if( sLine[1] == '=' || sLine.Pos(".") != 0 ){
- ProcessOption( sLine );
- return 0;
- }
- else
- return atoi( cLine );
-}
-/************************************************************************/
-#ifdef XB_INDEX_SUPPORT
-void xbUtil::IndexMenu()
-{
- int option = 0;
-
- while( option != 99 ) {
-
- std::cout << std::endl << std::endl << " 8 - Index Menu" << std::endl;
- std::cout << "---------------------" << std::endl;
- DisplayActiveTable();
-
- std::cout << " 1 - Select Active Table" << std::endl;
- std::cout << " 2 - Display Open Index Files" << std::endl;
- std::cout << " 3 - Display Supported Index Types" << std::endl;
- std::cout << " 4 - Select Active Tag" << std::endl;
- std::cout << " 5 - Open Index File" << std::endl;
- std::cout << " 6 - Close Index File" << std::endl;
- std::cout << " 7 - Create Index Tag" << std::endl;
- std::cout << " 8 - Get First Key" << std::endl;
- std::cout << " 9 - Get Next Key" << std::endl;
- std::cout << " 10 - Get Prev Key" << std::endl;
- std::cout << " 11 - Get Last Key" << std::endl;
- std::cout << " 12 - Find Key" << std::endl;
- std::cout << " 13 - Check Index Integrity" << std::endl;
- std::cout << " 14 - Reindex" << std::endl;
- std::cout << " 15 - Delete Tag" << std::endl;
- std::cout << " 16 - Associate NDX file" << std::endl;
-
-
- #ifdef XB_DEBUG_SUPPORT
- std::cout << std::endl;
- std::cout << " 20 - Dump Header" << std::endl;
- std::cout << " 21 - Dump Node(s)" << std::endl;
- std::cout << " 22 - Dump Node Chain" << std::endl;
- std::cout << " 23 - Dump Recs by Tag Fwd" << std::endl;
- std::cout << " 24 - Dump Recs by Tag Bwd" << std::endl;
- std::cout << " 25 - Dump Free Blocks / MDX ulBlock2" << std::endl;
- #endif // XB_DEBUG_SUPPORT
-
- std::cout << std::endl;
- std::cout << std::endl;
-
- std::cout << " 99 - Exit Menu" << std::endl;
- option = GetOption();
-
- switch( option ){
- case 0: break;
- case 1: SelectActiveTable(); break;
- case 2: DisplayOpenIndexFiles(); break;
- case 3: DisplaySupportedIndexTypes(); break;
- case 4: SelectTag(); break;
- case 5: OpenIndex(); break;
- case 6: CloseIndexFile(); break;
- case 7: CreateIndexTag(); break;
-
- case 8: GetFirstKey(); break;
- case 9: GetNextKey(); break;
- case 10: GetPrevKey(); break;
- case 11: GetLastKey(); break;
-
- case 12: FindKey(); break;
- case 13: CheckIntegrity(); break;
- case 14: Reindex(); break;
- case 15: DeleteTag(); break;
- case 16: AssociateNonProdIx(); break;
-
- #ifdef XB_DEBUG_SUPPORT
- case 20: DumpIxHeader(); break;
- case 21: DumpIxNode(); break;
- case 22: DumpIxNodeChain(); break;
- case 23: DumpRecsByIx(0); break;
- case 24: DumpRecsByIx(1); break;
- case 25: DumpFreeBlocks(); break;
- #endif
-
- case 99: break;
- default: std::cout << "Invalid option" << std::endl; break;
- }
- }
-}
-#endif
-/************************************************************************/
-#ifdef XB_EXPRESSION_SUPPORT
-void xbUtil::ExpressionMenu()
-{
- int option = 0;
-
- while( option != 99 ) {
- std::cout << std::endl << std::endl << " 7 - Expression Menu" << std::endl;
- std::cout << " --------------" << std::endl;
- DisplayActiveTable();
- std::cout << " 1 - Parse Expression" << std::endl;
- std::cout << " 2 - Process Parsed Expression" << std::endl;
- std::cout << " 3 - Parse and Process Expression" << std::endl;
- #ifdef XB_DEBUG_SUPPORT
- std::cout << " 4 - Dump Expression Internals" << std::endl;
- #endif
- std::cout << " 10 - Date8 To Julian Date" << std::endl;
- std::cout << " 11 - Julian Date to Date8" << std::endl;
- std::cout << " 12 - Check Leap Year" << std::endl;
- std::cout << " 99 - Exit Menu" << std::endl;
- option = GetOption();
- switch( option ){
- case 0: break;
- case 1: ParseExpression( 0 ); break;
- case 2: ProcessParsedExpression( 0 ); break;
- case 3: ParseAndProcessExpression(); break;
- #ifdef XB_DEBUG_SUPPORT
- case 4: DumpExpressionTree(); break;
- #endif
- case 10: Date8ToJul(); break;
- case 11: JulToDate8(); break;
- case 12: IsLeapYear(); break;
- case 99: break;
- default: std::cout << "Invalid option" << std::endl; break;
- }
- }
-}
-#endif
-/************************************************************************/
-#ifdef XB_LOCKING_SUPPORT
-void xbUtil::LockingMenu()
-{
- int option = 0;
-
- while( option != 99 ) {
- std::cout << std::endl << std::endl << " 6 - Locking Menu" << std::endl;
- std::cout << "-------------" << std::endl;
- DisplayActiveTable();
-
- std::cout << " 1 - Display File Specific Settings" << std::endl;
- std::cout << " 2 - Update File Retry Count" << std::endl;
- std::cout << " 3 - Update Locking Flavor" << std::endl;
- std::cout << " 4 - Update Auto Lock" << std::endl;
- std::cout << " 5 - Lock table (dbf file)" << std::endl;
- std::cout << " 6 - Unlock table (dbf file)" << std::endl;
- std::cout << " 7 - Lock Record" << std::endl;
- std::cout << " 8 - Unlock Record" << std::endl;
- std::cout << " 9 - Lock Append" << std::endl;
- std::cout << " 10 - Unlock Append" << std::endl;
- std::cout << " 11 - Lock Header" << std::endl;
- std::cout << " 12 - Unlock Header" << std::endl;
-
-
- #ifdef XB_MEMO_SUPPORT
- std::cout << " 13 - Lock Memo File" << std::endl;
- std::cout << " 14 - Unlock Memo File" << std::endl;
- #endif // XB_MEMO_SUPPORT
-
- #ifdef XB_INDEX_SUPPORT
- std::cout << " 15 - Lock Index File(s)" << std::endl;
- std::cout << " 16 - Unlock Index File(s)" << std::endl;
- #endif // XB_INDEX_SUPPORT
-
- #ifdef XB_DEBUG_SUPPORT
- std::cout << " 20 - Native xbFile - Lock Bytes" << std::endl;
- std::cout << " 21 - Native xbFile - Unlock Bytes" << std::endl;
- #endif // XB_DEBUG_SUPPORT
-
- std::cout << " 99 - Exit Menu" << std::endl;
- option = GetOption();
-
- switch( option ) {
- case 0: break;
- case 1: DisplayFileLockSettings(); break;
- case 2: UpdateFileLockRetryCount(); break;
- case 3: UpdateFileLockFlavor(); break;
- case 4: UpdateFileAutoLock(); break;
- case 5: LockDbf(); break;
- case 6: UnlockDbf(); break;
- case 7: LockRecord(); break;
- case 8: UnlockRecord(); break;
- case 9: LockAppend(); break;
- case 10: UnlockAppend(); break;
- case 11: LockHeader(); break;
- case 12: UnlockHeader(); break;
-
- #ifdef XB_MEMO_SUPPORT
- case 13: LockMemo(); break;
- case 14: UnlockMemo(); break;
- #endif // XB_MEMO_SUPPORT
-
- #ifdef XB_INDEX_SUPPORT
- case 15: LockIndices(); break;
- case 16: UnlockIndices(); break;
- #endif // XB_INDEX_SUPPORT
-
- #ifdef XB_DEBUG_SUPPORT
- case 20: xbFileLock(); break;
- case 21: xbFileUnlock(); break;
- #endif // XB_DEBUG_SUPPORT
-
- case 99: break;
- default: std::cout << "Invalid Option" << std::endl;
- }
- }
-}
-#endif
-
-/************************************************************************/
-#ifdef XB_SQL_SUPPORT
-void xbUtil::SqlMenu()
-{
- int option = 0;
-
- while( option != 99 ) {
- std::cout << std::endl << std::endl << "9 - Sql Menu" << std::endl;
- std::cout << "-------------" << std::endl;
- DisplayActiveTable();
-
- std::cout << " 1 - Execute SQL Non Query" << std::endl;
- std::cout << " 2 - Execute SQL Query" << std::endl;
- std::cout << "99 - Exit Menu" << std::endl;
-
- option = GetOption();
- switch( option ){
- case 0: break;
- case 1: ExecSqlNonQuery(); break;
- case 2: ExecSqlQuery(); break;
- case 99: break;
- default: std::cout << "Invalid option" << std::endl; break;
- }
- }
-}
-#endif // XB_SQL_SUPPORT
-
-/************************************************************************/
-#ifdef XB_DEBUG_SUPPORT
-void xbUtil::DebugMenu()
-{
- int option = 0;
-
- while( option != 99 ) {
- std::cout << std::endl << std::endl << "10 - Debug Menu" << std::endl;
- std::cout << "-------------" << std::endl;
- DisplayActiveTable();
-
- std::cout << " 1 - Select Active Table" << std::endl;
- #ifdef XB_MEMO_SUPPORT
- std::cout << " 2 - Dislay Memo Header Info" << std::endl;
- std::cout << " 3 - Dump Memo Free Chain" << std::endl;
- #endif
-
-// //std::cout << "4 - Dump index node chains to file xbase.dmp" << std::endl;
-// //std::cout << "5 - Dump index node chain" << std::endl;
- std::cout << "99 - Exit Menu" << std::endl;
- option = GetOption();
- switch( option ){
- case 0: break;
- case 1: SelectActiveTable(); break;
- #ifdef XB_MEMO_SUPPORT
- case 2: DumpDbtHeader(); break;
- case 3: DumpMemoFreeChain(); break;
- #endif
- case 99: break;
- default: std::cout << "Invalid option" << std::endl; break;
- }
- }
-}
-#endif // XBASE_DEBUG
-/************************************************************************/
-void xbUtil::FieldMenu()
-{
- int option = 0;
-
- while( option != 99 ) {
- std::cout << std::endl << std::endl << " 5 - Field Menu" << std::endl;
- std::cout << " --------------" << std::endl;
- DisplayActiveTable();
- std::cout << " 1 - Select Active Table" << std::endl;
- std::cout << " 2 - List Field Info" << std::endl;
- std::cout << " 3 - Show Field Data (non memo field)" << std::endl;
- std::cout << " 4 - Update Field Data" << std::endl;
- #ifdef XB_MEMO_SUPPORT
- std::cout << " 5 - Show Memo Field Data" << std::endl;
- std::cout << " 6 - Update Memo Field" << std::endl;
- std::cout << " 7 - Delete Memo Field" << std::endl;
- #endif
-
- std::cout << "99 - Exit Menu" << std::endl;
- option = GetOption();
- switch( option ){
- case 0: break;
- case 1: SelectActiveTable(); break;
- case 2: ListFieldInfo(); break;
- case 3: DumpRecord(); break;
- case 4: UpdateFieldData(); break;
- #ifdef XB_MEMO_SUPPORT
- case 5: ShowMemoFieldData(); break;
- case 6: UpdateMemoFieldData(); break;
- case 7: DeleteMemoField(); break;
- #endif
- case 99: break;
- default: std::cout << "Invalid option" << std::endl; break;
- }
- }
-}
-/************************************************************************/
-void xbUtil::RecordMenu()
-{
- int option = 0;
- while( option != 99 ) {
- std::cout << std::endl << std::endl << " 4 - Record Menu" << std::endl;
- std::cout << " ---------------" << std::endl;
- DisplayActiveTable();
- std::cout << " 1 - Select Active Table" << std::endl;
- std::cout << " 2 - Get Record" << std::endl;
- std::cout << " 3 - Blank Record" << std::endl;
- std::cout << " 4 - Append Record" << std::endl;
- std::cout << " 5 - Put Record" << std::endl;
- std::cout << " 6 - Delete Record" << std::endl;
- std::cout << " 7 - Undelete Record" << std::endl;
- std::cout << " 8 - First Record" << std::endl;
- std::cout << " 9 - Next Record" << std::endl;
- std::cout << "10 - Prev Record" << std::endl;
- std::cout << "11 - Last Record" << std::endl;
- std::cout << "12 - Dump Record" << std::endl;
- std::cout << "13 - Abort Record Updates" << std::endl;
- std::cout << "14 - Commit Record Updates" << std::endl;
-
- #ifdef XB_FILTER_SUPPORT
- std::cout << "20 - Set Filter" << std::endl;
- std::cout << "21 - Get First Filter Rec" << std::endl;
- std::cout << "22 - Get Next Filter Rec" << std::endl;
- std::cout << "23 - Get Prev Filter Rec" << std::endl;
- std::cout << "24 - Get Last Filter Rec" << std::endl;
- #endif // XB_FILTER_SUPPORT
-
- std::cout << "99 - Exit Menu" << std::endl;
- option = GetOption();
-
- switch( option ){
- case 0: break;
- case 1: SelectActiveTable(); break;
- case 2: GetRecord(); break;
- case 3: BlankRecord(); break;
- case 4: AppendRecord(); break;
- case 5: PutRecord(); break;
- case 6: DeleteRecord(); break;
- case 7: UndeleteRecord(); break;
- case 8: GetFirstRecord(); break;
- case 9: GetNextRecord(); break;
- case 10: GetPrevRecord(); break;
- case 11: GetLastRecord(); break;
- case 12: DumpRecord(); break;
- case 13: AbortRecord(); break;
- case 14: CommitRecord(); break;
-
- #ifdef XB_FILTER_SUPPORT
- case 20: SetFilter(); break;
- case 21: GetFirstFilterRec(); break;
- case 22: GetNextFilterRec(); break;
- case 23: GetPrevFilterRec(); break;
- case 24: GetLastFilterRec(); break;
- #endif // XB_FILTER_SUPPORT
-
- case 99: break;
- default: std::cout << "Invalid option" << std::endl; break;
- }
- }
-}
-
-/************************************************************************/
-void xbUtil::FileMenu()
-{
- int option = 0;
-
- while( option != 99 ) {
- std::cout << std::endl << std::endl << " 3 - File / Table Menu" << std::endl;
- std::cout << " ---------------------" << std::endl;
- DisplayActiveTable();
- std::cout << " 1 - List files in Default Data Directory" << std::endl;
- std::cout << " 2 - Update Default Data Directory" << std::endl;
- std::cout << " 3 - List Open Tables/Files" << std::endl;
- std::cout << " 4 - Open Table/File" << std::endl;
- std::cout << " 5 - Close Table/File" << std::endl;
- std::cout << " 6 - Close All Tables/Files" << std::endl;
- std::cout << " 7 - Select Active Table" << std::endl;
- std::cout << " 8 - Table/File Information" << std::endl;
- std::cout << "10 - Pack" << std::endl;
- std::cout << "11 - Zap Database" << std::endl;
- std::cout << "12 - Copy Dbf Structure" << std::endl;
- std::cout << "13 - Update Table Auto Commit Setting" << std::endl;
- std::cout << "14 - Display Table Info" << std::endl;
- std::cout << "15 - Rename Table" << std::endl;
-
-
- std::cout << "99 - Exit Menu" << std::endl;
- option = GetOption();
-
- switch( option ){
- case 0: break;
- case 1: ListFilesInDataDirectory(); break;
- case 2: UpdateDataDirectory(); break;
- case 3: x->DisplayTableList(); break;
- case 4: Open(); break;
- case 5: Close(); break;
- case 6: CloseAllTables(); break;
- case 7: SelectActiveTable(); break;
- case 8: DisplayTableStats(); break;
- case 10: Pack(); break;
- case 11: ZapTable(); break;
- case 12: CopyDbfStructure(); break;
- case 13: UpdateTableAutoCommit(); break;
- case 14: DisplayTableInfo(); break;
- case 15: RenameTable(); break;
- case 99: break;
-
- default: std::cout << "Invalid Option" << std::endl;
- }
- }
-}
-
-/************************************************************************/
-#ifdef XB_NDXINF_SUPPORT
-void xbUtil::InfFileMenu()
-{
-
-
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "No table selected" << std::endl;
- return;
- }
-
- int option = 0;
- while( option != 99 ) {
- std::cout << std::endl << std::endl << " 11 - InfFileData Menu" << std::endl;
- std::cout << " ---------------------" << std::endl;
- DisplayActiveTable();
- std::cout << " 1 - List Inf Contents" << std::endl;
- std::cout << " 2 - Add NDX File association to [" << dActiveTable->GetTblAlias().Str() << "]" << std::endl;
- std::cout << " 3 - Delete NDX File association from [" << dActiveTable->GetTblAlias().Str() << "]" << std::endl;
- std::cout << "10 - Inf File Help" << std::endl;
- std::cout << "99 - Exit Menu" << std::endl;
- option = GetOption();
-
- switch( option ){
- case 0: break;
- case 1: ListInfFileData(); break;
- case 2: AddInfFileData(); break;
- case 3: DeleteInfFileData(); break;
- case 10: InfFileHelp(); break;
- case 99: break;
- default: std::cout << "Invalid Option" << std::endl;
- }
- }
-}
-#endif // XB_NDXINF_SUPPORT
-
-/************************************************************************************/
-void xbUtil::SystemMenu()
-{
- int option = 0;
- while( option != 99 ) {
- std::cout << std::endl << std::endl << " 2 - System Menu" << std::endl;
- std::cout << " ---------------" << std::endl;
- DisplayActiveTable();
- std::cout << " 1 - Display System Settings" << std::endl;
- std::cout << " 2 - Update Default Data Directory" << std::endl;
-
- std::cout << " 3 - Toggle Default Auto Commit" << std::endl;
- std::cout << " 4 - Update Default Log Directory" << std::endl;
- std::cout << " 5 - Update Default Log File Name" << std::endl;
- std::cout << " 6 - Toggle Logging Status" << std::endl;
- std::cout << " 7 - Write Test Log Message" << std::endl;
- #ifdef XB_LOCKING_SUPPORT
- std::cout << " 8 - Update Default Lock Retries" << std::endl;
- std::cout << " 9 - Toggle Default Auto Lock" << std::endl;
- //std::cout << "10 - Update Lock Flavor" << std::endl; 3/20/17, only one flavor working
- std::cout << "11 - Update Default Lock Wait Time" << std::endl;
- std::cout << "12 - Toggle Multi User Mode" << std::endl;
- #endif
-
- std::cout << "99 - Exit Menu" << std::endl;
- option = GetOption();
-
- switch( option ) {
- case 0: break;
- case 1: ListSystemSettings(); break;
- case 2: UpdateDataDirectory(); break;
- case 3: ToggleDefaultAutoCommit(); break;
- case 4: UpdateLogDirectory(); break;
- case 5: UpdateLogFileName(); break;
- case 6: ToggleLoggingStatus(); break;
- case 7: WriteLogMessage(); break;
- #ifdef XB_LOCKING_SUPPORT
- case 8: UpdateDefaultLockRetries(); break;
- case 9: ToggleDefaultAutoLock(); break;
- case 10: UpdateDefaultLockFlavor(); break;
- case 11: UpdateDefaultLockWait(); break;
- case 12: ToggleMultiUserMode(); break;
- #endif
-
- case 99: break;
- default: std::cout << "Invalid Option" << std::endl;
- }
- }
-}
-/************************************************************************************/
-void xbUtil::MainMenu()
-{
- int option = 0;
- std::cout << std::endl<< std::endl << "XBase64 Utility Program " <<
- xbase_VERSION_MAJOR << "." << xbase_VERSION_MINOR << "." <<
- xbase_VERSION_PATCH << "\n";
-
- DisplayActiveTable();
- while( option != 99 ) {
- std::cout << std::endl << std::endl << " 0 - Main Menu" << std::endl;
- std::cout << " -------------" << std::endl;
- std::cout << " 1 - Help" << std::endl;
- std::cout << " 2 - System Menu" << std::endl;
- std::cout << " 3 - File / Table Menu" << std::endl;
- std::cout << " 4 - Record Menu" << std::endl;
- std::cout << " 5 - Field Menu" << std::endl;
- //std::cout << " 6 - Index Menu" << std::endl;
- #ifdef XB_LOCKING_SUPPORT
- std::cout << " 6 - Locking Menu" << std::endl;
- #endif
- #ifdef XB_EXPRESSION_SUPPORT
- std::cout << " 7 - Expression Menu" << std::endl;
- #endif
- #ifdef XB_INDEX_SUPPORT
- std::cout << " 8 - Index Menu" << std::endl;
- #endif
-
- #ifdef XB_FILTERS
- std::cout << " 9 - Filter Menu" << std::endl;
- #endif
-
- #ifdef XB_SQL_SUPPORT
- std::cout << "10 - SQL Menu" << std::endl;
- #endif // XB_SQL_SUPPORT
-
- #ifdef XB_NDXINF_SUPPORT
- std::cout << "11 - INF File Menu" << std::endl;
- #endif // XB_NDXINF_SUPPORT
-
- #ifdef XB_DEBUG_SUPPORT
- std::cout << "20 - Debug Menu" << std::endl;
- #endif
-
- std::cout << "99 - Exit" << std::endl;
- option = GetOption();
- switch( option ){
- case 0: break;
- case 1: Help(); break;
- case 2: SystemMenu(); break;
- case 3: FileMenu(); break;
- case 4: RecordMenu(); break;
- case 5: FieldMenu(); break;
-
- #ifdef XB_LOCKING_SUPPORT
- case 6: LockingMenu(); break;
- #endif
-
- #ifdef XB_EXPRESSION_SUPPORT
- case 7: ExpressionMenu(); break;
- #endif
-
- #ifdef XB_INDEX_SUPPORT
- case 8: IndexMenu(); break;
- #endif
-
- #ifdef XB_FILTERS
- case 9: FilterMenu(); break;
- #endif
-
- #ifdef XB_SQL_SUPPORT
- case 10: SqlMenu(); break;
- #endif
-
- #ifdef XB_NDXINF_SUPPORT
- case 11: InfFileMenu(); break;
- #endif
-
- #ifdef XB_DEBUG_SUPPORT
- case 20: DebugMenu(); break;
- #endif
-
- case 99: std::cout << "Bye!! - Thanks for using XBase64" << std::endl; break;
- default:
- std::cout << option << " - Invalid function" << std::endl;
- break;
- }
- }
-}
-/*************************************************************************************/
-
-#ifdef XB_INDEX_SUPPORT
-void xbUtil::DisplayOpenIndexFiles(){
-
- // verify active table selected, if not, select one
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "Table not selected" << std::endl;
- return;
- }
- // if not active indices, display no open NDX indices
- xbInt32 lIxCnt = dActiveTable->GetPhysicalIxCnt();
- if( lIxCnt == 0 ){
- std::cout << "No open index files for table" << std::endl;
- return;
- } else {
- std::cout << " Open Index Files = [" << lIxCnt << "]" << std::endl;
- std::cout << " FileName\tFile Type\n";
- std::cout << " ========\t=========\n";
- }
- // For each active index
- // display File Name, Type, Key
- xbIxList *p = dActiveTable->GetIxList();
- xbIx *ixp;
- while( p ){
- ixp = p->ix;
- std::cout << " " << ixp->GetFileName().Str() << "\t" << p->sFmt->Str() << std::endl;
- p = p->next;
- }
-}
-
-void xbUtil::DisplaySupportedIndexTypes(){
-
- std::cout << "Supported Index Type" << std::endl;
- std::cout << "Type MaxTags Asc/Dsc Filters Description" << std::endl;
- std::cout << "---- ------- -------- ------- --------------------------------" << std::endl;
- #ifdef XB_NDX_SUPPORT
- std::cout << "NDX 1 ASC No Dbase III single tag index file" << std::endl;
- #endif
- #ifdef XB_MDX_SUPPORT
- std::cout << "MDX 47 ASC/DSC Yes Dbase IV multiple tag index file" << std::endl;
- #endif
-}
-
-void xbUtil::SelectTag(){
- std::cout << "SelectTag" << std::endl;
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "Table not selected" << std::endl;
- return;
- }
-
- xbLinkListNode<xbTag *> *llN = dActiveTable->GetTagList();
- xbTag *pTag;
- xbInt16 i = 1;
- std::cout << "Line\tType\tUnique\tSort\tName\t\tKey Expression\t\tFilter" << std::endl;
-
- char cUnique;
- char cSort;
- xbString s;
- while( llN ){
- pTag = llN->GetKey();
- pTag->GetUnique() ? cUnique = 'Y' : cUnique = 'N';
- pTag->GetSort() ? cSort = 'D' : cSort = 'A';
- s.Sprintf( "%d\t%s\t%c\t%c\t%-12s\t%-20s\t%s \n", i++, pTag->GetType().Str(), cUnique, cSort, pTag->GetTagName().Str(), pTag->GetExpression().Str(), pTag->GetFilter().Str() );
- std::cout << s.Str();
-// std::cout << i++ << "\t" << pTag->GetType() << "\t " << cUnique << "\t " << cSort << "\t" << pTag->GetTagName() << "\t" << pTag->GetExpression() << "\t" << pTag->GetFilter() << std::endl;
- llN = llN->GetNextNode();
- }
- char cBuf[128];
- std::cout << std::endl << "Enter Line No:" << std::endl;
- std::cin.getline( cBuf, 128 );
-
- xbInt32 iSelection = atol( cBuf );
- if( iSelection < 1 || iSelection > i ){
- std::cout << "Invalid selection [" << iSelection << "]" << std::endl;
- } else {
- llN = dActiveTable->GetTagList();
- i = 1;
- for( i = 1; i < iSelection; i++ )
- llN = llN->GetNextNode();
- pTag = llN->GetKey();
- dActiveTable->SetCurTag( pTag->GetType(), pTag->GetIx(), pTag->GetVpTag() );
- }
-}
-
-void xbUtil::OpenIndex(){
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "Table not selected" << std::endl;
- return;
- }
- xbInt16 iRc;
-
- char cBuf[128];
- std::cout << "Enter index type (NDX or MDX)" << std::endl;
- std::cin.getline( cBuf, 128 );
- xbString sIxType = cBuf;
-
- std::cout << "Enter File Name" << std::endl;
- std::cin.getline( cBuf, 128 );
- xbString sIxFileName = cBuf;
-
- iRc = dActiveTable->OpenIndex( sIxType, sIxFileName );
- x->DisplayError( iRc );
-}
-
-void xbUtil::CloseIndexFile(){
-
- std::cout << "CloseIndex\n";
-
- // verify active table selected, if not, select one
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "Table not selected" << std::endl;
- return;
- }
-
- xbIx *pIx = dActiveTable->GetCurIx();
- if( !pIx )
- SelectTag();
-
- pIx = dActiveTable->GetCurIx();
- if( !pIx ){
- std::cout << "Tag not selected" << std::endl;
- return;
- }
-
- xbInt16 iRc = dActiveTable->CloseIndexFile( pIx );
- x->DisplayError( iRc );
-}
-
-void xbUtil::CreateIndexTag(){
-
- std::cout << "CreateIndexTag\n";
-
- // verify active table selected, if not, select one
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "Table not selected" << std::endl;
- return;
- }
-
- char cBuf[512];
- xbString sPrompt = "Enter Index Type (";
- #ifdef XB_NDX_SUPPORT
- sPrompt += "NDX";
- #endif // XB_NDX_SUPPORT
- #ifdef XB_MDX_SUPPORT
- sPrompt += " MDX";
- #endif // XB_MDX_SUPPORT
- sPrompt += "):";
- std::cout << sPrompt.Str() << std::endl;
-
- std::cin.getline( cBuf, 128 );
- xbString sIxType = cBuf;
-
- if( sIxType == "NDX" )
- std::cout << "Enter File Name" << std::endl;
- else if( sIxType == "MDX" )
- std::cout << "Enter Tag Name" << std::endl;
-
- std::cin.getline( cBuf, 128 );
- xbString sIxName = cBuf;
-
- if( sIxType != "NDX" && sIxType != "MDX" ){
- std::cout << "Invalid tag type" << std::endl;
- return;
- }
-
- xbString s;
- if( sIxType == "NDX" ){
- s = sIxName;
- s.ToUpperCase();
- xbUInt32 lPos = s.Pos( ".NDX" );
- if( lPos == 0 )
- sIxName += ".NDX";
- }
- if( sIxType == "MDX" ){
- if( sIxName.Len() > 12 ){
- std::cout << "Tag name [" << sIxName.Str() << "] to long. Must be 12 bytes or less" << std::endl;
- return;
- }
- }
-
- xbInt16 iDescending = 0;
- xbInt16 iUnique = 0;
-
- std::cout << "Enter Key Expression:" << std::endl;
- std::cin.getline( cBuf, 512 );
- xbString sKeyExpression = cBuf;
-
- xbString sFilter;
- if( sIxType == "MDX" ){
- std::cout << "Enter Filter (or enter for none):" << std::endl;
- std::cin.getline( cBuf, 512 );
- sFilter = cBuf;
-
- std::cout << "Descending? (Enter Y for yes):" << std::endl;
- std::cin.getline( cBuf, 12 );
- if( cBuf[0] == 'Y' )
- iDescending = 1;
- }
-
- std::cout << "Unique Keys? (Enter Y for yes):" << std::endl;
- std::cin.getline( cBuf, 12 );
- if( cBuf[0] == 'Y' )
- iUnique = 1;
-
- xbIx *pIx;
- void *vpTag;
-
- xbInt16 iRc = dActiveTable->CreateTag( sIxType, sIxName, sKeyExpression, sFilter, iDescending, iUnique, 0, &pIx, &vpTag );
- x->DisplayError( iRc );
-}
-
-void xbUtil::GetFirstKey(){
- std::cout << "GetFirstKey\n";
- // verify active table selected, if not, select one
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
- if( !dActiveTable ){
- std::cout << "Table not selected" << std::endl;
- return;
- }
- xbIx *pIx = dActiveTable->GetCurIx();
- if( !pIx )
- SelectTag();
- pIx = dActiveTable->GetCurIx();
- if( !pIx ){
- std::cout << "Tag not selected" << std::endl;
- return;
- }
- void *vpCurTag = dActiveTable->GetCurTag();
- xbInt16 iRc = pIx->GetFirstKey( vpCurTag, 1 );
- if( iRc == XB_NO_ERROR )
- dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2);
- else
- x->DisplayError( iRc );
-}
-
-void xbUtil::GetNextKey(){
- std::cout << "GetNextKey\n";
- // verify active table selected, if not, select one
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
- if( !dActiveTable ){
- std::cout << "Table not selected" << std::endl;
- return;
- }
- xbIx *pIx = dActiveTable->GetCurIx();
- if( !pIx )
- SelectTag();
- pIx = dActiveTable->GetCurIx();
- if( !pIx ){
- std::cout << "Tag not selected" << std::endl;
- return;
- }
- void *vpCurTag = dActiveTable->GetCurTag();
- xbInt16 iRc = pIx->GetNextKey( vpCurTag, 1 );
- if( iRc == XB_NO_ERROR )
- dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2);
- else
- x->DisplayError( iRc );
-}
-
-void xbUtil::GetPrevKey(){
- std::cout << "GetPrevKey\n";
- // verify active table selected, if not, select one
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "Table not selected" << std::endl;
- return;
- }
- xbIx *pIx = dActiveTable->GetCurIx();
- if( !pIx )
- SelectTag();
- pIx = dActiveTable->GetCurIx();
- if( !pIx ){
- std::cout << "Tag not selected" << std::endl;
- return;
- }
- void *vpCurTag = dActiveTable->GetCurTag();
- xbInt16 iRc = pIx->GetPrevKey( vpCurTag, 1 );
- if( iRc == XB_NO_ERROR )
- dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2);
- else
- x->DisplayError( iRc );
-}
-
-void xbUtil::GetLastKey(){
- std::cout << "GetLastKey\n";
- // verify active table selected, if not, select one
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
- if( !dActiveTable ){
- std::cout << "Table selected" << std::endl;
- return;
- }
- xbIx *pIx = dActiveTable->GetCurIx();
- if( !pIx )
- SelectTag();
- pIx = dActiveTable->GetCurIx();
- if( !pIx ){
- std::cout << "Tag not selected" << std::endl;
- return;
- }
- void *vpCurTag = dActiveTable->GetCurTag();
- xbInt16 iRc = pIx->GetLastKey( vpCurTag, 1 );
- if( iRc == XB_NO_ERROR )
- dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2);
- else
- x->DisplayError( iRc );
-}
-
-void xbUtil::FindKey(){
- std::cout << "FindKey\n";
- // verify active table selected, if not, select one
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
- if( !dActiveTable ){
- std::cout << "Table not selected" << std::endl;
- return;
- }
- xbIx *pIx = dActiveTable->GetCurIx();
- if( !pIx )
- SelectTag();
- pIx = dActiveTable->GetCurIx();
- if( !pIx ){
- std::cout << "Tag not selected" << std::endl;
- return;
- }
- void *vpCurTag = dActiveTable->GetCurTag();
- char cKeyType = pIx->GetKeyType( vpCurTag );
-
- switch( cKeyType ){
- case 'C':
- std::cout << "Enter character key value:";
- break;
- case 'F':
- case 'N':
- std::cout << "Enter numeric key value:";
- break;
- case 'D':
- std::cout << "Enter date (YYYYMMDD) key value:";
- break;
- default:
- std::cout << "Unknown key type [" << cKeyType << "]" << std::endl;
- return;
- break;
- }
-
- char cBuf[128];
- std::cin.getline( cBuf, 128 );
- xbInt16 iRc = 0;
-
- if( cKeyType == 'C' ){
- iRc = pIx->FindKey( vpCurTag, cBuf, (xbInt32) strlen( cBuf ), 1 );
-
- } else if( cKeyType == 'F' || cKeyType == 'N' ){
- xbDouble d = atof( cBuf );
- iRc = pIx->FindKey( vpCurTag, d, 1 );
-
- } else if( cKeyType == 'D' ){
- xbDate dt( cBuf );
- iRc = pIx->FindKey( vpCurTag, dt, 1 );
- }
-
- if( iRc == XB_NO_ERROR )
- dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2);
- else
- x->DisplayError( iRc );
-}
-
-void xbUtil::CheckIntegrity(){
- std::cout << "CheckIntegrity\n";
- // verify active table selected, if not, select one
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
- if( !dActiveTable ){
- std::cout << "Table not selected" << std::endl;
- return;
- }
- xbIx *pIx = dActiveTable->GetCurIx();
- if( !pIx )
- SelectTag();
- pIx = dActiveTable->GetCurIx();
- if( !pIx ){
- std::cout << "Tag not selected" << std::endl;
- return;
- }
- void *vpCurTag = dActiveTable->GetCurTag();
-
- xbInt16 iRc = pIx->CheckTagIntegrity( vpCurTag, 2 );
- x->DisplayError( iRc );
-}
-
-void xbUtil::Reindex(){
- std::cout << "Reindex\n";
-
- // verify active table selected, if not, select one
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
- if( !dActiveTable ){
- std::cout << "Table not selected" << std::endl;
- return;
- }
- xbIx *pIx = dActiveTable->GetCurIx();
- if( !pIx )
- SelectTag();
- pIx = dActiveTable->GetCurIx();
- if( !pIx ){
- std::cout << "Tag not selected" << std::endl;
- return;
- }
- void *vpCurTag = dActiveTable->GetCurTag();
- xbInt16 iRc = pIx->Reindex( &vpCurTag );
- x->DisplayError( iRc );
-}
-
-void xbUtil::DeleteTag(){
- std::cout << "DeleteTag\n";
- // verify active table selected, if not, select one
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
- if( !dActiveTable ){
- std::cout << "Table not selected" << std::endl;
- return;
- }
- xbIx *pIx = dActiveTable->GetCurIx();
- if( !pIx )
- SelectTag();
- pIx = dActiveTable->GetCurIx();
- if( !pIx ){
- std::cout << "Tag not selected" << std::endl;
- return;
- }
- void *vpCurTag = dActiveTable->GetCurTag();
- xbInt16 iRc = dActiveTable->DeleteTag( dActiveTable->GetCurIxType(), pIx->GetTagName( vpCurTag ));
- x->DisplayError( iRc );
-}
-
-void xbUtil::AssociateNonProdIx(){
- std::cout << "See InfFile menu option, option 11 from the main menu or =11 from here\n";
-}
-
-
-#ifdef XB_DEBUG_SUPPORT
-void xbUtil::DumpRecsByIx( xbInt16 iOpt ){
- // iDirection = 0 - Forward - MDX
- // = 1 - Reverse - MDX
-
- std::cout << "DumpRecsByIx\n";
- // verify active table selected, if not, select one
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
- if( !dActiveTable ){
- std::cout << "Table not selected" << std::endl;
- return;
- }
- xbIx *pIx = dActiveTable->GetCurIx();
- if( !pIx )
- SelectTag();
- pIx = dActiveTable->GetCurIx();
- if( !pIx ){
- std::cout << "Tag not selected" << std::endl;
- return;
- }
- std::cout << "Select destination:" << std::endl;
- std::cout << "0 - Logfile" << std::endl;
- std::cout << "1 - Screen" << std::endl;
- std::cout << "2 - Both" << std::endl;
- xbInt16 iDispOpt = GetOption();
- std::cout << "Select format:" << std::endl;
- std::cout << "0 - With Field Names" << std::endl;
- std::cout << "1 - 1 line per record" << std::endl;
- xbInt16 iDispFmt = GetOption();
-
- x->WriteLogMessage( "--------- Dump Recs By Index -------------", iDispOpt );
- void *vpCurTag = dActiveTable->GetCurTag();
- xbUInt32 lRecCnt = 0;
- xbInt16 iRc = 0;
-
- if( iOpt == 0 ){
- iRc = pIx->GetFirstKey( vpCurTag, 1 );
- if( iRc == XB_NO_ERROR ){
- lRecCnt++;
- dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), iDispOpt, iDispFmt );
- while(( iRc = pIx->GetNextKey( vpCurTag, 1 )) == XB_NO_ERROR ){
- dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), iDispOpt, iDispFmt );
- lRecCnt++;
- }
- } else {
- x->DisplayError( iRc );
- }
- } else if( iOpt == 1 ) {
- iRc = pIx->GetLastKey( vpCurTag, 1 );
- if( iRc == XB_NO_ERROR ){
- lRecCnt++;
- dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), iDispOpt, iDispFmt );
- while(( iRc = pIx->GetPrevKey( vpCurTag, 1 )) == XB_NO_ERROR ){
- dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), iDispOpt, iDispFmt );
- lRecCnt++;
- }
- }
- } else {
- std::cout << "Invalid option " << iOpt << std::endl;
- return;
- }
- std::cout << lRecCnt << " record(s) dumped" << std::endl;
-}
-
-void xbUtil::DumpIxHeader(){
- std::cout << "DumpIxHeader\n";
- // verify active table selected, if not, select one
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
- if( !dActiveTable ){
- std::cout << "Table not selected" << std::endl;
- return;
- }
- xbIx *pIx = dActiveTable->GetCurIx();
- if( !pIx )
- SelectTag();
- pIx = dActiveTable->GetCurIx();
- if( !pIx ){
- std::cout << "Tag not selected" << std::endl;
- return;
- }
- std::cout << "0 - Logfile" << std::endl;
- std::cout << "1 - Screen" << std::endl;
- std::cout << "2 - Both" << std::endl;
- xbInt16 iDispOpt = GetOption();
- pIx->DumpHeader( iDispOpt, 3 );
-
-}
-
-void xbUtil::DumpIxNode(){
- std::cout << "DumpIxNode\n";
- // verify active table selected, if not, select one
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "Table not selected" << std::endl;
- return;
- }
-
- xbIx *pIx = dActiveTable->GetCurIx();
- if( !pIx )
- SelectTag();
-
- pIx = dActiveTable->GetCurIx();
- if( !pIx ){
- std::cout << "Tag not selected" << std::endl;
- return;
- }
- std::cout << "0 - Logfile" << std::endl;
- std::cout << "1 - Screen" << std::endl;
- std::cout << "2 - Both" << std::endl;
- xbInt16 iDispOpt = GetOption();
-// std::cout << std::endl << "0 - All Blocks" << std::endl;
-// std::cout << "NNN - Specific block number, 0=All" << std::endl;
-// xbUInt32 iBlockOpt = (xbUInt32) GetOption();
-// if( iBlockOpt == 0 ) // dump the header if dumping all blocks
- // pIx->DumpHeader( iDispOpt );
- pIx->DumpTagBlocks( iDispOpt, dActiveTable->GetCurTag() );
-}
-
-void xbUtil::DumpIxNodeChain(){
-
- std::cout << "DumpIxNodeChain\n";
-
- // verify active table selected, if not, select one
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "Table not selected" << std::endl;
- return;
- }
-
- xbIx *pIx = dActiveTable->GetCurIx();
- if( !pIx )
- SelectTag();
-
- pIx = dActiveTable->GetCurIx();
- if( !pIx ){
- std::cout << "Tag not selected" << std::endl;
- return;
- }
-
- std::cout << "0 - Logfile" << std::endl;
- std::cout << "1 - Screen" << std::endl;
- std::cout << "2 - Both" << std::endl;
- xbInt16 iDispOpt = GetOption();
-
- void *vpCurTag = dActiveTable->GetCurTag();
- pIx->DumpIxNodeChain( vpCurTag, iDispOpt );
-}
-
-
-void xbUtil::DumpFreeBlocks(){
- std::cout << "Dump ulBlock2 - (Free Block or Split From Page) for MDX Index file\n";
- // verify active table selected, if not, select one
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
- if( !dActiveTable ){
- std::cout << "Table not selected" << std::endl;
- return;
- }
- xbIx *pIx = dActiveTable->GetCurIx();
- if( !pIx )
- SelectTag();
- pIx = dActiveTable->GetCurIx();
- if( !pIx ){
- std::cout << "Tag not selected" << std::endl;
- return;
- }
- std::cout << "0 - Logfile" << std::endl;
- std::cout << "1 - Screen" << std::endl;
- std::cout << "2 - Both" << std::endl;
- xbInt16 iDispOpt = GetOption();
- pIx->DumpFreeBlocks( iDispOpt );
-
-}
-
-
-
-#endif // XB_DEBUG_SUPPORT
-#endif // XB_INDEX_SUPPORT
-
-#ifdef XB_FILTER_SUPPORT
-void xbUtil::SetFilter()
-{
- // verify active table selected, if not, select one
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "Table not selected" << std::endl;
- return;
- }
-
- char cBuf[128];
- std::cout << "Enter filter expression:" << std::endl;
- std::cin.getline( cBuf, 128 );
- xbString s( cBuf );
-
- if( filt )
- delete filt;
-
- filt = new xbFilter( dActiveTable );
- xbInt16 iRc = filt->Set( s );
-
- x->DisplayError( iRc );
-}
-
-void xbUtil::GetFirstFilterRec()
-{
- // verify active table selected, if not, select one
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "Table not selected" << std::endl;
- return;
- }
-
- xbInt16 iRc;
- if(( iRc = filt->GetFirstRecord()) == XB_NO_ERROR )
- dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2);
- else
- x->DisplayError( iRc );
-}
-
-void xbUtil::GetNextFilterRec()
-{
- // verify active table selected, if not, select one
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "Table not selected" << std::endl;
- return;
- }
- xbInt16 iRc;
- if(( iRc = filt->GetNextRecord()) == XB_NO_ERROR )
- dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2);
- else
- x->DisplayError( iRc );
-}
-
-void xbUtil::GetPrevFilterRec()
-{
- // verify active table selected, if not, select one
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "Table not selected" << std::endl;
- return;
- }
- xbInt16 iRc;
- if(( iRc = filt->GetPrevRecord()) == XB_NO_ERROR )
- dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2);
- else
- x->DisplayError( iRc );
-}
-
-void xbUtil::GetLastFilterRec()
-{
- // verify active table selected, if not, select one
- if( !dActiveTable )
- dActiveTable = GetTablePtr( " - select table" );
-
- if( !dActiveTable ){
- std::cout << "Table not selected" << std::endl;
- return;
- }
- xbInt16 iRc;
- if(( iRc = filt->GetLastRecord()) == XB_NO_ERROR )
- dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2);
- else
- x->DisplayError( iRc );
-}
-#endif // XB_FILTER_SUPPORT
-
-///@endcond DOXYOFF
-
-
-/*************************************************************************************/
-void PrintHelp();
-void PrintHelp(){
- std::cout << "Usage: xb_dbfutil [-h] [-?] [--help] [-v] [--version]" << std::endl << std::endl;
- std::cout << "This program provides a menu driven tool for accissing the functionality og the xbase64 library" << std::endl;
- std::cout << "and provides access to DBF, MDX, NDX and MDT xbase formatted data files." << std::endl << std::endl;
-}
-void PrintVersion();
-void PrintVersion(){
- std::cout << "Xbase64 Version: " << xbase_VERSION_MAJOR << "." << xbase_VERSION_MINOR << "." << xbase_VERSION_PATCH << std::endl;
-}
-/*************************************************************************************/
-int main(int argc, char *argv[] )
-{
-
- // std::cout << "xb_dbfutil initializing" << std::endl;
- xbXBase x;
-
- xbString sParm;
- if (x.GetCmdLineOpt( argc, argv, "-h", sParm ) ||
- x.GetCmdLineOpt( argc, argv, "-?", sParm ) ||
- x.GetCmdLineOpt( argc, argv, "--help", sParm )){
- PrintHelp();
- return 1;
- }
-
- if ( x.GetCmdLineOpt( argc, argv, "-v", sParm ) ||
- x.GetCmdLineOpt( argc, argv, "--version", sParm )){
- PrintVersion();
- return 1;
- }
-
- xbUtil u( &x );
- u.MainMenu();
- return 0;
-}
diff --git a/src/utils/xb_execsql.cpp b/src/utils/xb_execsql.cpp
deleted file mode 100755
index daa6b6e..0000000
--- a/src/utils/xb_execsql.cpp
+++ /dev/null
@@ -1,95 +0,0 @@
-/* xb_execsql.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2023 Gary A Kunkel
-
-The xb64 software library is covered under
-the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- xb64-devel@lists.sourceforge.net
- xb64-users@lists.sourceforge.net
-
-*/
-
-#include <xbase.h>
-
-using namespace xb;
-
-xbInt16 GetNextSqlCmd( xbFile &f, xbString &sCmd );
-xbInt16 GetNextSqlCmd( xbFile &f, xbString &sCmd )
-{
- sCmd = "";
- xbString sLine;
- xbInt16 iRc = XB_NO_ERROR;
- xbUInt32 lPos = 0;
- xbBool bDone = xbFalse;
- while( !bDone ){
- if(( iRc = f.xbFgets( 256, sLine )) != XB_NO_ERROR ){
- bDone = xbTrue;
- } else {
-
- // don't need CR/LF chars
- sLine.ZapChar( 0x0a );
- sLine.ZapChar( 0x0d );
-
- // if comment, zap out everything to the right of the hash
- lPos = sLine.Pos( '#' );
- if( lPos > 0 )
- sLine.Left( lPos - 1);
-
- if( sLine.Pos( ';' ) > 0 ){
- bDone = xbTrue;
- sLine.ZapChar( ';' );
- }
- }
- sCmd += sLine;
- }
- return iRc;
-}
-
-int main(int ac,char** av)
-{
-
- if (ac <= 1) {
- std::cout << "Usage: xb_execsql filename..." << std::endl;
- return 1;
- }
-
- xbXBase x;
- x.EnableMsgLogging();
- xbSql sql( &x );
- xbFile f( sql.GetXbasePtr() );
- xbInt16 iRc = XB_NO_ERROR;
- xbString sFileName;
- xbString sSqlLine;
-
- sFileName = av[1];
-
- if(( iRc = f.xbFopen( "r", sFileName, XB_SINGLE_USER )) != XB_NO_ERROR ){
- xbString sMsg;
- sMsg.Sprintf( "Error opening [%s]\n", sFileName.Str() );
- std::cout << sMsg.Str();
- sql.GetXbasePtr()->DisplayError( iRc );
- return 1;
- }
-
- while( iRc == XB_NO_ERROR ){
- iRc = GetNextSqlCmd( f, sSqlLine );
-
- if( iRc == XB_NO_ERROR ){
-
- sSqlLine.Trim();
- std::cout << "Processing line [" << sSqlLine.Str() << "]\n";
- iRc = sql.ExecuteNonQuery( sSqlLine );
- if( iRc != XB_NO_ERROR )
- x.DisplayError( iRc );
- }
- }
-
- f.xbFclose();
- return 0;
-}
-